ZX-SP-ROMs/TRDOS/TR_HDD_4.ASZ
2025-06-16 04:41:18 +10:00

270 lines
3.9 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:
.loop: LD A,(DE)
INC DE
CP " "
JR Z,.loop
CP "\r"
JR Z,.check
;
DEC DE
DEC DE
JP CHOOSE_HDD
;
; [x] new tr-hdd
.check: DI
LD C,SLOT3
IN B,(C)
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,.init
CP E
JR C,.init
;
LD (SYS_PAGE.CURRENT_DIR_DRIVE),A
OUT (C),B
PUSH DE
AND #0F
LD C,BIOS.HDD_PART
CALL EXP_FNS
POP DE
JR C,CHOOSE_HDD.error
JR .exit
;
.init: OUT (C),B
PUSH DE
LD C,BIOS.HDD_INIT
CALL EXP_FNS
POP DE
JP C,HDD_PROG_E
;
.exit: 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
;
.part: 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
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
BOOT_PART_2: INCBIN 'build/boot.bin',248,181
.SIZE EQU $-BOOT_PART_2
;
; vROM_BOOT: DI
; LD HL,BOOT_PART_1
; LD DE,#5D3B
; LD BC,BOOT_PART_1.SIZE
; LDIR
; LD HL,BOOT_PART_2
; LD BC,BOOT_PART_2.SIZE
; LDIR
; ;
; EI
; ;
; LD HL,#5EC9
; LD (ZX_VARS.E_LINE),HL
; JP AUTO_012A
; ;
; ; RST RST20 ; áâ ­¤. ¢¢®¤ ¢ ¡ãä¥à । ªâ¨à®¢ ­¨ï
; ; DW #5D65
; ; RET
; ;
; ; LD HL,#5D65
; ; PUSH HL
; ; JP CMD_RETURN
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DISPLAY "TR_HDD_4.ASZ size: ",/A,$-File_Start
DISPLAY "===================================================="