From b757fbf8ec42602053f702f0f81364fbf408e5bd Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 19 Jul 2024 04:42:50 +1000 Subject: [PATCH] support for current dir from spectrum.exe --- Shared_Includes | 2 +- TRDOS/TR_HDD_4.ASZ | 76 +++++++++++++++++++--------------------------- TRDOS/TR_MSD_2.ASZ | 7 +++-- TRDOS/TR_MSD_3.ASZ | 1 - TRDOS/TR_MSD_S.ASZ | 31 ++++++++----------- 5 files changed, 50 insertions(+), 67 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 77a5168..7e812bc 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 77a51684d4d63ad2fdccf416793951df00276b17 +Subproject commit 7e812bc0267db168c5a5b17780e567a7a01cd927 diff --git a/TRDOS/TR_HDD_4.ASZ b/TRDOS/TR_HDD_4.ASZ index 8dc2742..e953485 100644 --- a/TRDOS/TR_HDD_4.ASZ +++ b/TRDOS/TR_HDD_4.ASZ @@ -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 "====================================================" \ No newline at end of file diff --git a/TRDOS/TR_MSD_2.ASZ b/TRDOS/TR_MSD_2.ASZ index 119dcea..2798900 100644 --- a/TRDOS/TR_MSD_2.ASZ +++ b/TRDOS/TR_MSD_2.ASZ @@ -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 diff --git a/TRDOS/TR_MSD_3.ASZ b/TRDOS/TR_MSD_3.ASZ index f4a9407..bb2e306 100644 --- a/TRDOS/TR_MSD_3.ASZ +++ b/TRDOS/TR_MSD_3.ASZ @@ -319,7 +319,6 @@ CLAST_TO_SEC_L2: LD B,L LD A,H POP HL - RET diff --git a/TRDOS/TR_MSD_S.ASZ b/TRDOS/TR_MSD_S.ASZ index 663be83..c51e05b 100644 --- a/TRDOS/TR_MSD_S.ASZ +++ b/TRDOS/TR_MSD_S.ASZ @@ -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) ; Размер сектора 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:; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР @@ -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'