support for current dir from spectrum.exe

This commit is contained in:
Tolik 2024-07-19 04:42:50 +10:00 committed by Anatoliy Belyanskiy
parent 685e382582
commit b1aa31381b
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 LD A,SYS_PAGE
OUT (SLOT3),A 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 CP #FF
JR Z,.skip JR Z,.skip
;
CP E
JR C,.skip
LD (SYS_PAGE.CURRENT_DIR_DRIVE),A
;
AND #0F
LD (SYS_PAGE.CURRENT_HDD),A LD (SYS_PAGE.CURRENT_HDD),A
; ;
.skip: ;LD A,(SYS_PAGE.CURRENT_HDD) .skip: LD A,C
OR #40
PUSH AF
LD A,C
OUT (SLOT3),A OUT (SLOT3),A
; ;
PUSH DE
LD C,BIOS.HDD_INIT LD C,BIOS.HDD_INIT
CALL EXP_FNS CALL EXP_FNS
POP AF POP DE
JP C,HDD_PROG_E JP C,HDD_PROG_E
; ;
; LD BC,(ZX_VARS.OPER_DISK - 1) ; LD BC,(ZX_VARS.OPER_DISK - 1)
; LD A,(ZX_VARS.OPER_DISK) ; LD A,(ZX_VARS.OPER_DISK)
; LD B,A ; LD B,A
; XOR A ; XOR A
LD E,A ;LD E,A
LD C,BIOS.SET_DISK_REDIR LD C,BIOS.SET_DISK_REDIR
JP EXP_FNS JP EXP_FNS
@ -138,9 +143,22 @@ CHOOSE_HDD:
POP BC POP BC
JR C,.error 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 XOR A
LD C,A ; ®¡­ã«¨âì C 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 ; [x] new tr-hdd
RESTORE_CURRENT_DIR: RESTORE_CURRENT_DIR:
PUSH AF PUSH AF
; ;
LD C,BIOS.GET_DISK_REDIR LD C,BIOS.GET_DISK_REDIR
CALL EXP_FNS CALL EXP_FNS
CP #40 ;CP #40
JR C,.exit_Res_Dir ;JR C,.exit_Res_Dir
AND #0F ;AND #0F
LD H,A LD H,A
; ;
IN A,(SLOT3) IN A,(SLOT3)
@ -209,7 +223,7 @@ RESTORE_CURRENT_DIR:
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD A,(SYS_PAGE.CURRENT_DIR_HDD) LD A,(SYS_PAGE.CURRENT_DIR_DRIVE)
CP H CP H
JR NZ,.exit_Res_Dir JR NZ,.exit_Res_Dir
@ -229,32 +243,6 @@ RESTORE_CURRENT_DIR:
POP AF POP AF
RET 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 "TR_HDD_4.ASZ size: ",/A,$-File_Start
DISPLAY "====================================================" DISPLAY "===================================================="

View File

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

View File

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

View File

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