|
|
|
@ -2,23 +2,28 @@ |
|
|
|
;================================================================================================== |
|
|
|
; FLASH DRIVER FOR FLASH & EEPROM PROGRAMMING |
|
|
|
; |
|
|
|
; 26 SEP 2020 - CHIP IDENTIFICATION IMPLMENTED -- PHIL SUMMERS |
|
|
|
; 26 SEP 2020 - CHIP IDENTIFICATION IMPLEMENTED -- PHIL SUMMERS |
|
|
|
; - CHIP ERASE IMPLEMENTED |
|
|
|
; 23 OCT 2020 - SECTOR ERASE IMPLEMENTED |
|
|
|
; 01 NOV 2020 - WRITE SECTOR IMPLEMENTED |
|
|
|
; 04 DEC 2020 - READ SECTOR IMPLEMENTED |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION. HBX_BNKSEL AND |
|
|
|
; HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY AND THE STACK IS ALSO IN UPPER MEMORY DURING |
|
|
|
; BIOS INITIALIZATION. TO ACCESS THE FLASH CHIP FEATURES, CODE IS COPIED TO THE UPPER RAM BANK |
|
|
|
; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION. |
|
|
|
; HBX_BNKSEL AND HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY. |
|
|
|
; |
|
|
|
; THE STACK IS IN UPPER MEMORY DURING BIOS INITIALIZATION BUT IS IN LOWER |
|
|
|
; MEMORY DURING HBIOS CALLS. |
|
|
|
; |
|
|
|
; TO ACCESS THE FLASH CHIP FEATURES, CODE IS COPIED TO THE UPPER RAM BANK |
|
|
|
; AND THE FLASH CHIP IS SWITCHED INTO THE LOWER BANK. |
|
|
|
; |
|
|
|
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
FF_DBG: .EQU 0 ; DEBUG |
|
|
|
FF_DBG: .EQU 1 ; DEBUG |
|
|
|
FF_HBX: .EQU 1 ; =0 USE STACK, =1 USE HBX_BUF |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; BIOS FLASH INITIALIZATION |
|
|
|
@ -92,10 +97,9 @@ FF_TESTING: |
|
|
|
LD IX,FF_BUFFER ; SET SOURCE ADDRESS |
|
|
|
CALL FF_WINIT ; WRITE SECTOR |
|
|
|
CALL PRTHEXBYTE ; DISPLAY STATUS |
|
|
|
|
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (0) |
|
|
|
#IF (1) |
|
|
|
LD DE,$0007 ; SET SOURCE |
|
|
|
LD HL,$F000 ; ADDRESS |
|
|
|
LD IX,FF_BUFFER ; SET DESTINATION ADDRESS |
|
|
|
@ -159,7 +163,8 @@ FF_NXT2:CALL PRTSTR ; AFTER SEARCH DISPLAY THE RESULT |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
FF_FNCALL: |
|
|
|
#IF (FF_HBX==0) |
|
|
|
FF_FNCALL: ; USING STACK FOR CODE AREA |
|
|
|
CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY |
|
|
|
; |
|
|
|
POP DE ; GET ROUTINE TO CALL |
|
|
|
@ -193,8 +198,47 @@ FF_FNCALL: |
|
|
|
LD HL,(FF_STACK) ; RESTORE ORIGINAL |
|
|
|
LD SP,HL ; STACK POSITION |
|
|
|
; |
|
|
|
#IF (FF_DBG==1) |
|
|
|
CALL PC_SPACE |
|
|
|
CALL PRTHEXWORD |
|
|
|
CALL PC_SPACE |
|
|
|
EX DE,HL |
|
|
|
CALL PRTHEXWORDHL |
|
|
|
CALL PC_SPACE |
|
|
|
EX DE,HL |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD A,C ; RETURN WITH STATUS IN A |
|
|
|
; |
|
|
|
RET |
|
|
|
#ELSE |
|
|
|
FF_FNCALL: ; USING HBX_BUF FOR CODE AREA |
|
|
|
CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY |
|
|
|
; |
|
|
|
POP HL ; GET ROUTINE TO CALL |
|
|
|
; |
|
|
|
LD DE,HBX_BUF ; PUT EXECUTE / START ADDRESS IN DE |
|
|
|
LD BC,HBX_BUFSIZ ; CODE SIZE REQUIRED |
|
|
|
; |
|
|
|
PUSH DE ; SAVE THE EXECUTE ADDRESS |
|
|
|
; COPY OUR RELOCATABLE |
|
|
|
LDIR ; CODE TO THE BUFFER |
|
|
|
POP HL ; CALL OUR RELOCATABLE CODE |
|
|
|
|
|
|
|
PUSH IY ; PUT BANK AND SECTOR |
|
|
|
POP BC ; DATA IN BC |
|
|
|
; |
|
|
|
#IF (FF_DBG==1) |
|
|
|
CALL PRTHEXWORD |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
HB_DI |
|
|
|
CALL JPHL ; EXECUTE RELOCATED CODE |
|
|
|
HB_EI |
|
|
|
; |
|
|
|
#IF (FF_DBG==1) |
|
|
|
CALL PC_SPACE |
|
|
|
CALL PRTHEXWORD |
|
|
|
CALL PC_SPACE |
|
|
|
EX DE,HL |
|
|
|
CALL PRTHEXWORDHL |
|
|
|
@ -205,6 +249,8 @@ FF_FNCALL: |
|
|
|
LD A,C ; RETURN WITH STATUS IN A |
|
|
|
; |
|
|
|
RET |
|
|
|
|
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; IDENTIFY FLASH CHIP. |
|
|
|
|