|
|
|
@ -6,7 +6,7 @@ |
|
|
|
; TODO: |
|
|
|
; 1) ADD SUPPORT FOR DSKY |
|
|
|
; |
|
|
|
; GLOBAL PARPORTPROP INITIALIZATION |
|
|
|
; GLOBAL PROPIO INITIALIZATION |
|
|
|
; |
|
|
|
PRP_INIT: |
|
|
|
; |
|
|
|
@ -15,15 +15,8 @@ PRP_INIT: |
|
|
|
CALL PRTHEXBYTE |
|
|
|
; |
|
|
|
CALL PRP_DETECT |
|
|
|
LD DE,PRP_STR_NOXFC |
|
|
|
LD DE,PRP_STR_NOHW |
|
|
|
JP NZ,WRITESTR |
|
|
|
|
|
|
|
; JR Z,PRP_INIT1 |
|
|
|
; CALL WRITESTR |
|
|
|
; OR $FF |
|
|
|
; RET |
|
|
|
; |
|
|
|
;PRP_INIT1: |
|
|
|
; |
|
|
|
; RESET INTERFACE, RETURN WITH NZ ON FAILURE |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
@ -39,30 +32,30 @@ PRP_INIT: |
|
|
|
CALL PRPSD_GETVER |
|
|
|
RET NZ |
|
|
|
; |
|
|
|
; PRINT FIRMWARE VERSION |
|
|
|
PRTS(" F/W=$") |
|
|
|
LD HL,PRP_FWVER |
|
|
|
CALL LD32 |
|
|
|
LD A,D |
|
|
|
CALL PRTHEXBYTE |
|
|
|
CALL PRTDECB |
|
|
|
CALL PC_PERIOD |
|
|
|
LD A,E |
|
|
|
CALL PRTHEXBYTE |
|
|
|
CALL PRTDECB |
|
|
|
CALL PC_PERIOD |
|
|
|
LD B,H |
|
|
|
LD C,L |
|
|
|
CALL PRTHEXWORD |
|
|
|
CALL PRTDEC |
|
|
|
; |
|
|
|
; CHECK F/W VERSION & NOTIFY USER IF UPGRADE REQUIRED |
|
|
|
LD HL,PRP_FWVER |
|
|
|
CALL LD32 |
|
|
|
XOR A |
|
|
|
CP D |
|
|
|
JR NZ,PRP_INIT2 |
|
|
|
JR NZ,PRP_INIT1 |
|
|
|
CP E |
|
|
|
JR NZ,PRP_INIT2 |
|
|
|
LD DE,PRPSTR_UPGRADE |
|
|
|
JR NZ,PRP_INIT1 |
|
|
|
LD DE,PRP_STR_UPGRADE |
|
|
|
CALL WRITESTR |
|
|
|
; |
|
|
|
PRP_INIT2: |
|
|
|
PRP_INIT1: |
|
|
|
CALL PRPCON_INIT ; CONSOLE INITIALIZATION |
|
|
|
CALL PRPSD_INIT ; SD CARD INITIALIZATION |
|
|
|
; |
|
|
|
@ -71,30 +64,30 @@ PRP_INIT2: |
|
|
|
; |
|
|
|
; |
|
|
|
PRP_DETECT: |
|
|
|
LD HL,(PRPSD_TIMEOUT) |
|
|
|
PUSH HL |
|
|
|
LD HL,$0100 |
|
|
|
LD (PRPSD_TIMEOUT),HL |
|
|
|
CALL PRP_DETECT1 |
|
|
|
POP HL |
|
|
|
LD (PRPSD_TIMEOUT),HL |
|
|
|
LD BC,2000 ; TRY FOR ABOUT 4 SECONDS |
|
|
|
PRP_DETECT1: |
|
|
|
CALL PRP_DETECT2 |
|
|
|
RET Z |
|
|
|
DEC BC |
|
|
|
LD A,B |
|
|
|
OR C |
|
|
|
JR NZ,PRP_DETECT1 |
|
|
|
OR $FF |
|
|
|
RET |
|
|
|
; |
|
|
|
PRP_DETECT1: |
|
|
|
CALL PRPSD_WAITBSY |
|
|
|
;RET NZ ; IGNORE CURRENT RESULT |
|
|
|
PRP_DETECT2: |
|
|
|
LD A,PRPSD_CMDRESET |
|
|
|
OUT (PRPSD_DSKCMD),A |
|
|
|
CALL PRPSD_WAITBSY |
|
|
|
RET NZ |
|
|
|
LD DE,64 ; 1MS |
|
|
|
CALL VDELAY |
|
|
|
LD A,$A5 |
|
|
|
OUT (PRPSD_DSKIO),A |
|
|
|
LD A,$5A |
|
|
|
OUT (PRPSD_DSKIO),A |
|
|
|
LD A,PRPSD_CMDNOP |
|
|
|
OUT (PRPSD_DSKCMD),A |
|
|
|
CALL PRPSD_WAITBSY |
|
|
|
RET NZ |
|
|
|
LD DE,64 ; 1MS |
|
|
|
CALL VDELAY |
|
|
|
IN A,(PRPSD_DSKIO) |
|
|
|
CP $A5 |
|
|
|
RET NZ |
|
|
|
@ -104,7 +97,8 @@ PRP_DETECT1: |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
PRP_STR_NOXFC .TEXT " NOT PRESENT$" |
|
|
|
PRP_STR_NOHW .TEXT " NOT PRESENT$" |
|
|
|
PRP_STR_UPGRADE .TEXT " !!!UPGRADE REQUIRED!!!$" |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; PROPIO CONSOLE DRIVER |
|
|
|
@ -126,6 +120,7 @@ PRPCON_INIT: |
|
|
|
CALL NEWLINE |
|
|
|
PRTS("PRPCON:$") |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; |
|
|
|
@ -187,7 +182,7 @@ PRPCON_OST1: |
|
|
|
RET ; RETURN |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; PRPSD DISK DRIVER |
|
|
|
; PROPIO SD CARD DRIVER |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
PRPSD_UNITCNT .EQU 1 |
|
|
|
@ -238,7 +233,7 @@ PRPSD_STCRCERR .EQU -8 ; CRC ERROR ON RECEIVED DATA PACKET |
|
|
|
PRPSD_STNOMEDIA .EQU -9 ; NO MEDIA IN CONNECTOR |
|
|
|
PRPSD_STWRTPROT .EQU -10 ; ATTEMPT TO WRITE TO WRITE PROTECTED MEDIA |
|
|
|
; |
|
|
|
; |
|
|
|
; SD CARD INITIALIZATION |
|
|
|
; |
|
|
|
PRPSD_INIT: |
|
|
|
; REINITIALIZE THE CARD HERE |
|
|
|
@ -264,6 +259,7 @@ PRPSD_INIT: |
|
|
|
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED) |
|
|
|
PRTS("MB$") ; PRINT SUFFIX |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; |
|
|
|
@ -292,7 +288,7 @@ PRPSD_DISPATCH: |
|
|
|
; |
|
|
|
PRPSD_READ: |
|
|
|
#IF (PRPSDTRACE == 1) |
|
|
|
LD HL,PRPSD_PRTERR ; SET UP SD_PRTERR |
|
|
|
LD HL,PRPSD_PRTERR ; SET UP PRPSD_PRTERR |
|
|
|
PUSH HL ; ... TO FILTER ALL EXITS |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
@ -412,6 +408,70 @@ PRPSD_GEOM: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; TAKE ANY ACTIONS REQUIRED TO SELECT DESIRED PHYSICAL UNIT |
|
|
|
; UNIT IS SPECIFIED IN A |
|
|
|
; |
|
|
|
PRPSD_SELUNIT: |
|
|
|
CP PRPSD_UNITCNT ; CHECK VALIDITY (EXCEED UNIT COUNT?) |
|
|
|
JP NC,PRPSD_INVUNIT ; HANDLE INVALID UNIT |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
PRPSD_INITCARD: |
|
|
|
; CLEAR ALL STATUS DATA |
|
|
|
LD HL,PRPSD_UNITDATA |
|
|
|
LD BC,PRPSD_UNITDATALEN |
|
|
|
XOR A |
|
|
|
CALL FILL |
|
|
|
; |
|
|
|
; RESET INTERFACE, RETURN WITH NZ ON FAILURE |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
PRTS(" RESET$") |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; REQUEST INTERFACE RESET, RESULT IN A, Z/NZ SET |
|
|
|
LD A,PRPSD_CMDRESET ; CLEAR ANY ERRORS ON PROPIO |
|
|
|
CALL PRPSD_SNDCMD |
|
|
|
RET NZ ; NZ SET, A HAS RESULT CODE |
|
|
|
; |
|
|
|
; (RE)INITIALIZE THE CARD, RETURN WITH NZ ON FAILURE |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
PRTS(" INIT$") |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; REQUEST HARDWARE INIT, RESULT IN A, Z/NZ SET |
|
|
|
LD A,PRPSD_CMDINIT |
|
|
|
CALL PRPSD_SNDCMD |
|
|
|
RET NZ ; NZ SET, A HAS RESULT CODE |
|
|
|
|
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
; GET CSD IF DEBUGGING |
|
|
|
CALL PRPSD_GETCSD |
|
|
|
RET NZ |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; GET CARD TYPE |
|
|
|
CALL PRPSD_GETTYPE |
|
|
|
RET NZ |
|
|
|
|
|
|
|
; GET CAPACITY |
|
|
|
CALL PRPSD_GETCAP |
|
|
|
RET NZ |
|
|
|
|
|
|
|
RET ; N/NZ SET, A HAS RESULT CODE |
|
|
|
; |
|
|
|
; CHECK THE SD CARD, ATTEMPT TO REINITIALIZE IF NEEDED |
|
|
|
; |
|
|
|
PRPSD_CHKCARD: |
|
|
|
LD A,(PRPSD_STAT) ; GET STATUS |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET Z ; IF ALL GOOD, DONE |
|
|
|
JP NZ,PRPSD_INITCARD ; OTHERWISE, REINIT |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
PRPSD_GETVER: |
|
|
|
@ -454,9 +514,6 @@ PRPSD_GETVER: |
|
|
|
PRPSD_GETTYPE: |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
PRTS(" TYPE$") |
|
|
|
#ENDIF |
|
|
|
LD A,PRPSD_CMDTYPE |
|
|
|
@ -479,9 +536,6 @@ PRPSD_GETTYPE: |
|
|
|
PRPSD_GETCAP: |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
PRTS(" CAP$") |
|
|
|
#ENDIF |
|
|
|
LD A,PRPSD_CMDCAP |
|
|
|
@ -508,9 +562,6 @@ PRPSD_GETCAP: |
|
|
|
PRPSD_GETCSD: |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
PRTS(" CSD$") |
|
|
|
#ENDIF |
|
|
|
LD A,PRPSD_CMDCSD |
|
|
|
@ -611,70 +662,6 @@ PRPSD_WAITBSY2: |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET ; AND RETURN WITH STATUS IN A |
|
|
|
; |
|
|
|
; TAKE ANY ACTIONS REQUIRED TO SELECT DESIRED PHYSICAL UNIT |
|
|
|
; UNIT IS SPECIFIED IN A |
|
|
|
; |
|
|
|
PRPSD_SELUNIT: |
|
|
|
CP PRPSD_UNITCNT ; CHECK VALIDITY (EXCEED UNIT COUNT?) |
|
|
|
JP NC,PRPSD_INVUNIT ; HANDLE INVALID UNIT |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
PRPSD_INITCARD: |
|
|
|
; CLEAR ALL STATUS DATA |
|
|
|
LD HL,PRPSD_UNITDATA |
|
|
|
LD BC,PRPSD_UNITDATALEN |
|
|
|
XOR A |
|
|
|
CALL FILL |
|
|
|
; |
|
|
|
; RESET INTERFACE, RETURN WITH NZ ON FAILURE |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
PRTS(" RESET$") |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; REQUEST INTERFACE RESET, RESULT IN A, Z/NZ SET |
|
|
|
LD A,PRPSD_CMDRESET ; CLEAR ANY ERRORS ON PROPIO |
|
|
|
CALL PRPSD_SNDCMD |
|
|
|
RET NZ ; NZ SET, A HAS RESULT CODE |
|
|
|
; |
|
|
|
; (RE)INITIALIZE THE CARD, RETURN WITH NZ ON FAILURE |
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
CALL PRPSD_PRTPREFIX |
|
|
|
PRTS(" INIT$") |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; REQUEST HARDWARE INIT, RESULT IN A, Z/NZ SET |
|
|
|
LD A,PRPSD_CMDINIT |
|
|
|
CALL PRPSD_SNDCMD |
|
|
|
RET NZ ; NZ SET, A HAS RESULT CODE |
|
|
|
|
|
|
|
#IF (PRPSDTRACE >= 3) |
|
|
|
; GET CSD IF DEBUGGING |
|
|
|
CALL PRPSD_GETCSD |
|
|
|
RET NZ |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; GET CARD TYPE |
|
|
|
CALL PRPSD_GETTYPE |
|
|
|
RET NZ |
|
|
|
|
|
|
|
; GET CAPACITY |
|
|
|
CALL PRPSD_GETCAP |
|
|
|
RET NZ |
|
|
|
|
|
|
|
RET ; N/NZ SET, A HAS RESULT CODE |
|
|
|
; |
|
|
|
; CHECK THE SD CARD, ATTEMPT TO REINITIALIZE IF NEEDED |
|
|
|
; |
|
|
|
PRPSD_CHKCARD: |
|
|
|
LD A,(PRPSD_STAT) ; GET STATUS |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET Z ; IF ALL GOOD, DONE |
|
|
|
JP NZ,PRPSD_INITCARD ; OTHERWISE, REINIT |
|
|
|
; |
|
|
|
; SEND INDEX OF BLOCK TO READ/WRITE FROM SD CARD |
|
|
|
; 32 BIT VALUE (4 BYTES) |
|
|
|
; |
|
|
|
@ -884,17 +871,19 @@ PRPSD_STR_STCRCERR .TEXT "CRC ERROR$" |
|
|
|
PRPSD_STR_STNOMEDIA .TEXT "NO MEDIA$" |
|
|
|
PRPSD_STR_STWRTPROT .TEXT "WRITE PROTECTED$" |
|
|
|
PRPSD_STR_STUNK .TEXT "UNKNOWN$" |
|
|
|
; |
|
|
|
PRPSD_STR_TYPEUNK .TEXT "UNK$" |
|
|
|
PRPSD_STR_TYPEMMC .TEXT "MMC$" |
|
|
|
PRPSD_STR_TYPESDSC .TEXT "SDSC$" |
|
|
|
PRPSD_STR_TYPESDHC .TEXT "SDHC$" |
|
|
|
PRPSD_STR_TYPESDXC .TEXT "SDXC$" |
|
|
|
PRPSTR_UPGRADE .TEXT " !!!UPGRADE REQUIRED!!!$" |
|
|
|
; |
|
|
|
;============================================================================= |
|
|
|
; DATA STORAGE |
|
|
|
;============================================================================= |
|
|
|
; |
|
|
|
PRP_FWVER .DB $00, $00, $00, $00 ; MMNNBBB (M=MAJOR, N=MINOR, B=BUILD) |
|
|
|
; |
|
|
|
PRPSD_UNITDATA: |
|
|
|
PRPSD_STAT .DB 0 |
|
|
|
PRPSD_DSKSTAT .DB 0 |
|
|
|
@ -905,8 +894,5 @@ PRPSD_CSDBUF .FILL 16,0 |
|
|
|
PRPSD_UNITDATALEN .EQU $ - PRPSD_UNITDATA |
|
|
|
; |
|
|
|
PRPSD_CMD .DB 0 |
|
|
|
PRPSD_BLK .DB 0, 0, 0, 0 |
|
|
|
; |
|
|
|
PRP_FWVER .DB $00, $00, $00, $00 ; MMNNBBB (M=MAJOR, N=MINOR, B=BUILD) |
|
|
|
; |
|
|
|
PRPSD_TIMEOUT .DW $0000 ; FIX: MAKE THIS CPU SPEED RELATIVE |
|
|
|
|