|
|
@ -673,14 +673,18 @@ FF_PROBE: |
|
|
LD C,A |
|
|
LD C,A |
|
|
; |
|
|
; |
|
|
DJNZ FF_PROBE ; ALWAYS AT LEAST ONE DEVICE |
|
|
DJNZ FF_PROBE ; ALWAYS AT LEAST ONE DEVICE |
|
|
|
|
|
|
|
|
#IF (MD_FVBS==1) |
|
|
#IF (MD_FVBS==1) |
|
|
|
|
|
CALL PRTSTRD |
|
|
|
|
|
.TEXT " FLASH FILE SYSTEM $" |
|
|
|
|
|
LD DE,MD_FFMSGDIS |
|
|
LD A,(MD_FFSEN) |
|
|
LD A,(MD_FFSEN) |
|
|
OR A |
|
|
OR A |
|
|
JR NZ,MD_PR1 |
|
|
JR NZ,MD_PR1 |
|
|
CALL PRTSTRD |
|
|
|
|
|
.TEXT " FLASH FILE SYSTEM ENABLED$" |
|
|
|
|
|
MD_PR1: |
|
|
|
|
|
|
|
|
LD DE,MD_FFMSGENA |
|
|
|
|
|
MD_PR1: CALL WRITESTR |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
|
|
|
XOR A ; INIT SUCCEEDED |
|
|
XOR A ; INIT SUCCEEDED |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
@ -699,8 +703,8 @@ MD_LAND: |
|
|
CALL PC_SPACE |
|
|
CALL PC_SPACE |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
LD HL,FF_TABLE ; SEARCH THROUGH THE FLASH |
|
|
|
|
|
LD DE,FF_T_CNT ; TABLE TO FIND A MATCH |
|
|
|
|
|
|
|
|
LD HL,MD_TABLE ; SEARCH THROUGH THE FLASH |
|
|
|
|
|
LD DE,MD_T_CNT ; TABLE TO FIND A MATCH |
|
|
FF_NXT1:LD A,(HL) |
|
|
FF_NXT1:LD A,(HL) |
|
|
CP B |
|
|
CP B |
|
|
JR NZ,FF_NXT0 ; FIRST BYTE DOES NOT MATCH |
|
|
JR NZ,FF_NXT0 ; FIRST BYTE DOES NOT MATCH |
|
|
@ -716,7 +720,7 @@ FF_NXT1:LD A,(HL) |
|
|
JR FF_NXT2 ; MATCH SO EXIT |
|
|
JR FF_NXT2 ; MATCH SO EXIT |
|
|
; |
|
|
; |
|
|
FF_NXT0:PUSH BC ; WE DIDN'T MATCH SO POINT |
|
|
FF_NXT0:PUSH BC ; WE DIDN'T MATCH SO POINT |
|
|
LD BC,FF_T_SZ ; TO THE NEXT TABLE ENTRY |
|
|
|
|
|
|
|
|
LD BC,MD_T_SZ ; TO THE NEXT TABLE ENTRY |
|
|
ADD HL,BC |
|
|
ADD HL,BC |
|
|
POP BC |
|
|
POP BC |
|
|
; |
|
|
; |
|
|
@ -725,7 +729,7 @@ FF_NXT0:PUSH BC ; WE DIDN'T MATCH SO POINT |
|
|
DEC DE |
|
|
DEC DE |
|
|
JR NZ,FF_NXT1 ; NOT AT END YET |
|
|
JR NZ,FF_NXT1 ; NOT AT END YET |
|
|
; |
|
|
; |
|
|
LD HL,MD_UNKNOWN ; WE REACHED THE END WITHOUT A MATCH |
|
|
|
|
|
|
|
|
LD HL,MD_FFMSGUNK ; WE REACHED THE END WITHOUT A MATCH |
|
|
; |
|
|
; |
|
|
FF_NXT2: |
|
|
FF_NXT2: |
|
|
#IF (MD_FVBS==1) |
|
|
#IF (MD_FVBS==1) |
|
|
@ -938,28 +942,28 @@ MD_FERAS_S |
|
|
LD (HL),A ; COMMAND |
|
|
LD (HL),A ; COMMAND |
|
|
; |
|
|
; |
|
|
LD A,(HL) ; DO TWO SUCCESSIVE READS |
|
|
LD A,(HL) ; DO TWO SUCCESSIVE READS |
|
|
FF_WT4: LD C,(HL) ; FROM THE SAME FLASH ADDRESS. |
|
|
|
|
|
|
|
|
MD_WT4: LD C,(HL) ; FROM THE SAME FLASH ADDRESS. |
|
|
XOR C ; IF THE SAME ON BOTH READS |
|
|
XOR C ; IF THE SAME ON BOTH READS |
|
|
BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT. |
|
|
BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT. |
|
|
; |
|
|
; |
|
|
JR Z,FF_WT5 ; BIT 6 = 0 IF SAME ON SUCCESSIVE READS = COMPLETE |
|
|
|
|
|
|
|
|
JR Z,MD_WT5 ; BIT 6 = 0 IF SAME ON SUCCESSIVE READS = COMPLETE |
|
|
; BIT 6 = 1 IF DIFF ON SUCCESSIVE READS = INCOMPLETE |
|
|
; BIT 6 = 1 IF DIFF ON SUCCESSIVE READS = INCOMPLETE |
|
|
; |
|
|
; |
|
|
LD A,C ; OPERATION IS NOT COMPLETE. CHECK TIMEOUT BIT (BIT 5). |
|
|
LD A,C ; OPERATION IS NOT COMPLETE. CHECK TIMEOUT BIT (BIT 5). |
|
|
BIT 5,C ; IF NO TIMEOUT YET THEN LOOP BACK AND KEEP CHECKING TOGGLE STATUS |
|
|
BIT 5,C ; IF NO TIMEOUT YET THEN LOOP BACK AND KEEP CHECKING TOGGLE STATUS |
|
|
JR Z,FF_WT4 ; IF BIT 5=0 THEN RETRY; NZ TRUE IF BIT 5=1 |
|
|
|
|
|
|
|
|
JR Z,MD_WT4 ; IF BIT 5=0 THEN RETRY; NZ TRUE IF BIT 5=1 |
|
|
; |
|
|
; |
|
|
LD A,(HL) ; WE GOT A TIMOUT. RECHECK TOGGLE BIT IN CASE WE DID COMPLETE |
|
|
LD A,(HL) ; WE GOT A TIMOUT. RECHECK TOGGLE BIT IN CASE WE DID COMPLETE |
|
|
XOR (HL) ; THE OPERATION. DO TWO SUCCESSIVE READS. ARE THEY THE SAME? |
|
|
XOR (HL) ; THE OPERATION. DO TWO SUCCESSIVE READS. ARE THEY THE SAME? |
|
|
BIT 6,A ; IF THEY ARE THEN OPERATION WAS COMPLETED |
|
|
BIT 6,A ; IF THEY ARE THEN OPERATION WAS COMPLETED |
|
|
JR Z,FF_WT5 ; OTHERWISE ERASE OPERATION FAILED OR TIMED OUT. |
|
|
|
|
|
|
|
|
JR Z,MD_WT5 ; OTHERWISE ERASE OPERATION FAILED OR TIMED OUT. |
|
|
; |
|
|
; |
|
|
LD C,$F0 ; COMMON FAIL STATUS / PREPARE DEVICE RESET CODE |
|
|
LD C,$F0 ; COMMON FAIL STATUS / PREPARE DEVICE RESET CODE |
|
|
LD (HL),C ; WRITE DEVICE RESET |
|
|
LD (HL),C ; WRITE DEVICE RESET |
|
|
JR FF_WT6 |
|
|
|
|
|
FF_WT5: LD C,L ; SET SUCCESS STATUS |
|
|
|
|
|
|
|
|
JR MD_WT6 |
|
|
|
|
|
MD_WT5: LD C,L ; SET SUCCESS STATUS |
|
|
; |
|
|
; |
|
|
FF_WT6: POP AF ; RETURN TO ORIGINAL BANK |
|
|
|
|
|
|
|
|
MD_WT6: POP AF ; RETURN TO ORIGINAL BANK |
|
|
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
; |
|
|
; |
|
|
LD SP,(HBX_BUF + (MD_FEST-MD_FERAS_R)) ; RESTORE STACK |
|
|
LD SP,(HBX_BUF + (MD_FEST-MD_FERAS_R)) ; RESTORE STACK |
|
|
@ -1104,7 +1108,7 @@ MD_W_SZ .EQU $-MD_FWRIT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
#DEFCONT .DB FFROMNM \ |
|
|
#DEFCONT .DB FFROMNM \ |
|
|
#DEFCONT ; |
|
|
#DEFCONT ; |
|
|
; |
|
|
; |
|
|
FF_TABLE: |
|
|
|
|
|
|
|
|
MD_TABLE: |
|
|
FF_CHIP(00120H,"29F010$ ") |
|
|
FF_CHIP(00120H,"29F010$ ") |
|
|
FF_CHIP(001A4H,"29F040$ ") |
|
|
FF_CHIP(001A4H,"29F040$ ") |
|
|
FF_CHIP(01F04H,"AT49F001NT$") |
|
|
FF_CHIP(01F04H,"AT49F001NT$") |
|
|
@ -1123,9 +1127,11 @@ FF_CHIP(0BFB6H,"39F020$ ") |
|
|
FF_CHIP(0BFB7H,"39F040$ ") |
|
|
FF_CHIP(0BFB7H,"39F040$ ") |
|
|
FF_CHIP(0C2A4H,"MX29F040$ ") |
|
|
FF_CHIP(0C2A4H,"MX29F040$ ") |
|
|
; |
|
|
; |
|
|
FF_T_CNT .EQU 17 |
|
|
|
|
|
FF_T_SZ .EQU ($-FF_TABLE) / FF_T_CNT |
|
|
|
|
|
MD_UNKNOWN .DB "UNKNOWN$" |
|
|
|
|
|
|
|
|
MD_T_CNT .EQU 17 |
|
|
|
|
|
MD_T_SZ .EQU ($-MD_TABLE) / MD_T_CNT |
|
|
|
|
|
MD_FFMSGUNK .DB "UNKNOWN$" |
|
|
|
|
|
MD_FFMSGDIS .DB "DISABLED$" |
|
|
|
|
|
MD_FFMSGENA .DB "ENABLED$" |
|
|
; |
|
|
; |
|
|
;====================================================================== |
|
|
;====================================================================== |
|
|
; |
|
|
; |
|
|
|