support for current dir from spectrum.exe

This commit is contained in:
Tolik 2024-07-19 04:42:50 +10:00
parent 0cb769a71f
commit b757fbf8ec
5 changed files with 50 additions and 67 deletions

@ -1 +1 @@
Subproject commit 77a51684d4d63ad2fdccf416793951df00276b17
Subproject commit 7e812bc0267db168c5a5b17780e567a7a01cd927

View File

@ -78,27 +78,32 @@ HDD_SET:;!TEST
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_DIR_HDD)
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,(SYS_PAGE.CURRENT_HDD)
OR #40
PUSH AF
LD A,C
.skip: LD A,C
OUT (SLOT3),A
;
PUSH DE
LD C,BIOS.HDD_INIT
CALL EXP_FNS
POP AF
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 E,A
LD C,BIOS.SET_DISK_REDIR
JP EXP_FNS
@ -138,9 +143,22 @@ CHOOSE_HDD:
POP BC
JR C,.error
;
SCF
;CALL CORRECT_CUR_DIR
CALL RESTORE_CURRENT_DIR
;
;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,A ; ®¡­ã«¨âì C
@ -189,19 +207,15 @@ CHOOSE_HDD:
; !!!
; CF=1: skip resest CURRENT_HDD
; CF=0: resest CURRENT_HDD
; [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
;CP #40
;JR C,.exit_Res_Dir
;AND #0F
LD H,A
;
IN A,(SLOT3)
@ -209,7 +223,7 @@ RESTORE_CURRENT_DIR:
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_DIR_HDD)
LD A,(SYS_PAGE.CURRENT_DIR_DRIVE)
CP H
JR NZ,.exit_Res_Dir
@ -229,32 +243,6 @@ RESTORE_CURRENT_DIR:
POP AF
RET
;
; [x] new tr-hdd
; TO INIT by SPECTRUM.EXE:
; .CURRENT_DIR_SEC_L EQU #C196 ; word
; .CURRENT_DIR_SEC_H EQU #C198 ; word
; .CURRENT_DIR_HDD EQU #C19A
; .CURRENT_HDD EQU #C12D
; CORRECT_CUR_DIR:
; DI
; IN A,(SLOT3)
; LD C,A
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,#FF
; JR C,.skip
; LD (SYS_PAGE.CURRENT_HDD),A
; .skip: INC A
; LD H,A
; LD L,A
; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL
; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL
; LD A,C
; OUT (SLOT3),A
; RET
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DISPLAY "TR_HDD_4.ASZ size: ",/A,$-File_Start
DISPLAY "===================================================="

View File

@ -530,9 +530,10 @@ CALC_CLAST: ; HL -
EX DE,HL
LD BC,0
LD HL,0
LD IX,0
LD H,B
LD L,B
LD HX,B
LD LX,B
CALC_CL_LP:
ADD IX,DE

View File

@ -319,7 +319,6 @@ CLAST_TO_SEC_L2:
LD B,L
LD A,H
POP HL
RET

View File

@ -247,7 +247,7 @@ MSD_3F15:
OUT (SLOT3),A
AND A
JR Z,NO_OFF_SCR
LD A,0C0H
LD A,#C0
OUT (RGADR),A
NO_OFF_SCR:
LD IX,MSD_RET_ADR
@ -443,7 +443,6 @@ READ_BPB:
JP .ERROR_MSDOS
;
.HDD: CALL .MAIN
CALL NC,RESTORE_CURRENT_DIR ; [x] new tr-hdd
RET NC
; old hdd
LD IX,0
@ -455,14 +454,13 @@ READ_BPB:
CALL MSD_R_W_UT
;
CALL .PARAMS
CALL NC,RESTORE_CURRENT_DIR ; [x] new tr-hdd
RET NC
JP .ERROR_MSDOS
;
.MAIN: LD A,SYS_PAGE
LD HL,SYS_PAGE.MS_BPB
LD C,TRDOS_ROM_CMD.READ_BPB
CALL MSD_R_W_UT
.MAIN: LD A,SYS_PAGE
LD HL,SYS_PAGE.MS_BPB
LD C,TRDOS_ROM_CMD.READ_BPB
CALL MSD_R_W_UT
;CALL BPB_PARAMS
;RET
@ -528,7 +526,6 @@ READ_BPB:
LD (SYS_PAGE.MSD_SECS),A
; BIT 7,H
; LD IX,0
; LD HL,0 ; ¢ëç¨á«¨âì ­ ç «ì­ë© ᥪâ®à FAT
; JR Z,.NO_LD_SPECIAL
@ -559,8 +556,6 @@ READ_BPB:
LD (SYS_PAGE.MSD_CAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à DIR
LD (SYS_PAGE.MSD_CAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à DIR
; A=0
LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; <20> §¬¥à ᥪâ®à 
LD A,B
RL C
@ -600,24 +595,23 @@ READ_BPB:
; D = 0
LD H,D
LD L,D
LD E,D
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
LD D,A
XOR A
.NEXT_ADD3:
ADD HL,BC ; ‚ëç¨á«¥­¨¥ ¤«¨­ë ª« áâ¥à 
ADC A,0
ADC A,E
DEC D
JR NZ,.NEXT_ADD3
LD (SYS_PAGE.CLASTER_LEN),HL
; D = 0
LD B,D
LD B,E
LD C,A
LD (SYS_PAGE.CLASTER_LEN2),BC
; D = 0
LD H,D
LD L,D
;
; DE=0
EX DE,HL ;LD HL,0
LD BC,(SYS_PAGE.MS_BPB+S_P_T)
LD A,(SYS_PAGE.MS_BPB+H_P_S)
.BPB_L1:; ‚›—ˆ‘‹ˆ’œ ŠŽ‹ˆ—…‘’‚Ž …ŠŽ<E28099>Ž <20>ˆˆ<E280B9><EFBFBD>
@ -628,8 +622,9 @@ READ_BPB:
;
EX AF,AF'
OUT (SLOT3),A
EI
CALL RESTORE_CURRENT_DIR ; [x] new tr-hdd
AND A
EI
RET
.ERROR_BPB:
EX AF,AF'