ZX-SP-ROMs/TRDOS/TR_HDD_4.ASZ
2024-07-21 01:15:33 +10:00

248 lines
3.5 KiB
Plaintext

File_Start DEFL $
DISPLAY "===================================================="
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
HDD_PROG:
;!TEST 06/01/2024 㡨ࠥ¬ «¨è­¨¥ ⥫®¤¢¨¦¥­¨ï
;LD C,BIOS.HDD_INIT and #BF
;CALL HD_CMD
LD C,BIOS.HDD_INIT
CALL EXP_FNS
;
JP C,HDD_PROG_E
LD HL,SYS_PAGE.HD_IDF_ADR.ModelNum
LD B,32
HDD_PROG_L:
DI
IN A,(SLOT3)
LD D,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,L
XOR 1
LD L,A
LD C,(HL)
LD A,L
XOR 1
LD L,A
INC HL
LD A,D
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,C
PUSH BC
RST #10
POP BC
DJNZ HDD_PROG_L
;!TEST 06/01/2024 㡨ࠥ¬ «¨è­¨¥ ⥫®¤¢¨¦¥­¨ï
;LD C,BIOS.HDD_RECAL and #BF
;CALL HD_CMD
LD C,BIOS.HDD_RECAL
CALL EXP_FNS
;
JP NC,AUTO_03E1
HDD_ERROR:
CALL PRINT_HEX_A
LD HL,HD_TX
JP AUTO_03E4
; JP AUTO_03E1
HDD_PROG_E:
LD HL,HD_TX2
JP AUTO_03E4
;
HDD_SET:;!TEST
.loop: LD A,(DE)
INC DE
CP " "
JR Z,.loop
CP "\r"
JR Z,.init
;
DEC DE
DEC DE
JP CHOOSE_HDD
;CALL CHOOSE_HDD
;CALL READ_BPB
;RET
;
; [x] new tr-hdd
.init: ;CALL CORRECT_CUR_DIR
DI
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD E,DRIVE_CODES.TRDOS.HDD
LD A,(SYS_PAGE.CURRENT_DIR_DRIVE_COPY)
CP #FF
JR Z,.skip
;
CP E
JR C,.skip
LD (SYS_PAGE.CURRENT_DIR_DRIVE),A
;
AND #0F
LD (SYS_PAGE.CURRENT_HDD),A
;
.skip: LD A,C
OUT (SLOT3),A
;
PUSH DE
LD C,BIOS.HDD_INIT
CALL EXP_FNS
POP DE
JP C,HDD_PROG_E
;
; LD BC,(ZX_VARS.OPER_DISK - 1)
; LD A,(ZX_VARS.OPER_DISK)
; LD B,A
; XOR A
;LD E,A
LD C,BIOS.SET_DISK_REDIR
JP EXP_FNS
;[x] 29/01/2024
;¢ë室: A: bit1 - Primary/Secondary, bit0 - master/slave, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR
CHOOSE_HDD:
.loop: LD A,(DE)
INC DE
CP " "
JR Z,.loop
LD A,(DE)
CP "\r"
JR Z,.error
; ­®¬¥à à §¤¥« 
LD A,(DE)
CP "4"
JR NC,.error
CP "0"
JR C,.error
SUB "0"
RLA
RLA
LD C,A
; Primary/Secondary, master/slave
DEC DE
LD A,(DE)
CP "4"
JR NC,.error
CP "0"
JR C,.error
SUB "0"
OR C
;
PUSH AF
LD C,BIOS.HDD_PART
CALL EXP_FNS
POP BC
JR C,.error
;
;
;CALL RESTORE_CURRENT_DIR
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.CURRENT_DIR_DRIVE)
CP #FF
JR Z,.skip
LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A
XOR A
DEC A
LD (SYS_PAGE.CURRENT_DIR_DRIVE),A
.skip: EX AF,AF'
OUT (SLOT3),A
;
;
;XOR A
LD C,0 ; ®¡­ã«¨âì C
LD A,B
;OR #40
;LD B,A
;
; PUSH AF
; LD A,(ZX_VARS.OPER_DISK)
; LD C,BIOS.GET_DRV_ST
; CALL EXP_FNS
; POP BC
; JR C,.error
; ;
; AND #40 ;!HARDCODE HDD
; LD C,A ; ®¡­ã«¨âì C
; LD A,B
; RET NZ
;
PUSH BC
LD BC,(ZX_VARS.OPER_DISK - 1)
; LD B,A
; XOR A
LD C,BIOS.HDD_TO_DRV
CALL EXP_FNS
POP AF
RET
;
.error: ;AND %1101'1111
;CP "*"
;JR Z,.set_from_sys_page
LD HL,MSG_3
JP ERR_EXIT
;
; .setUp_HDD:
; PUSH BC
; LD A,(ZX_VARS.OPER_DISK)
; LD B,A
; XOR A
; LD C,BIOS.HDD_TO_DRV
; CALL EXP_FNS
; POP BC
; RET
;
;.set_from_sys_page:
; !!!
; [x] new tr-hdd
RESTORE_CURRENT_DIR:
PUSH AF
;
LD C,BIOS.GET_DISK_REDIR
CALL EXP_FNS
;CP #40
;JR C,.exit_Res_Dir
;AND #0F
LD H,A
;
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_DIR_DRIVE)
CP H
JR NZ,.exit_Res_Dir
LD HL,(SYS_PAGE.CURRENT_DIR_SEC_L)
LD DE,(SYS_PAGE.CURRENT_DIR_SEC_H)
LD A,H
OR L
OR D
OR E
JR Z,.exit_Res_Dir
;
LD (SYS_PAGE.MSD_CAT_SEC),HL
LD (SYS_PAGE.MSD_CAT_SEC2),DE
.exit_Res_Dir:
EX AF,AF'
OUT (SLOT3),A
POP AF
RET
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DISPLAY "TR_HDD_4.ASZ size: ",/A,$-File_Start
DISPLAY "===================================================="