From f734b2a36170ca1025bcd499473914f05c65e978 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 6 Jan 2024 00:55:03 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- TRDOS/TR_MSD_S.ASZ | 168 +++++++++++++++++++++------------------------ 2 files changed, 78 insertions(+), 92 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index d1ce639..24e0629 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit d1ce63928bdbb44e48b311f9d4a0005c2f44fcd4 +Subproject commit 24e062942e2c89a1bcd5817cc82316b52186f86c diff --git a/TRDOS/TR_MSD_S.ASZ b/TRDOS/TR_MSD_S.ASZ index eed69d8..5dc90dd 100644 --- a/TRDOS/TR_MSD_S.ASZ +++ b/TRDOS/TR_MSD_S.ASZ @@ -6,25 +6,25 @@ ; MS-DOS utilites ;******************************************** -;************************************************ -;* Программа чтения/записи MS-DOS дисков * -;* 1. Адрес буфера - HL * -;* 2. Номер сектора - DE * -;* 3. Число секторов - B * -;* 4. Команда - C * -;* 5. Страница ОЗУ - A * -;************************************************ -HDD_REDIR: - POP AF - CALL HD_CMD - RET NC - JP HDD_ERROR - MSD_R_W_UT: PUSH AF CALL DISK_REDIR CP #40 - JR NC,HDD_REDIR + JR C,.NOT_HDD + ;************************************************ + ;* Подпрограмма чтения/записи MS-DOS дисков * + ;* 1. Адрес буфера - HL * + ;* 2. Номер сектора - DE * + ;* 3. Число секторов - B * + ;* 4. Команда - C * + ;* 5. Страница ОЗУ - A * + ;************************************************ +.HDD: POP AF + CALL HD_CMD + RET NC + JP HDD_ERROR + ;************************************************ +.NOT_HDD: POP AF EX AF,AF' LD A,C @@ -417,21 +417,19 @@ SET_1440: READ_BPB: CALL DISK_REDIR CP #40 - JR NC,HDD_REDIR2 + JR NC,.HDD_REDIR2 CP 4 - JP NC,ERROR_MSDOS + JP NC,.ERROR_MSDOS CALL SET_DISK - CALL MAIN_BPB + CALL .MAIN RET NC - JP ERROR_MSDOS - -HDD_REDIR2: - CALL MAIN_BPB + JP .ERROR_MSDOS +.HDD_REDIR2: + CALL .MAIN RET NC - -SPACIAL_BPB: +.SPACIAL: LD IX,0 LD DE,63 LD A,SYS_PAGE @@ -439,43 +437,38 @@ SPACIAL_BPB: LD C,BIOS.HDD_READ and #BF LD B,1 CALL MSD_R_W_UT - CALL BPB_PARAMS + CALL READ_BPB.PARAMS RET NC - JP ERROR_MSDOS - -MAIN_BPB: - ;LD IX,0 - ;LD DE,0 - LD A,SYS_PAGE + JP .ERROR_MSDOS +.MAIN: LD A,SYS_PAGE LD HL,MS_BPB LD C,BIOS.HDD_READ_BPB and #BF - ;LD B,1 CALL MSD_R_W_UT - CALL BPB_PARAMS - RET + ;CALL BPB_PARAMS + ;RET -; LD C,18H -; LD A,(OPER_DISK) -; CALL HD_CMD + ; LD C,18H + ; LD A,(OPER_DISK) + ; CALL HD_CMD + ; ; + ; DI + ; IN A,(PAGE3) + ; EX AF,AF' + ; LD A,SYS_PAGE + ; OUT (PAGE3),A + ; ; + ; LD A,(MS_BPB+S_P_T) ; Количество секторов на трек + ; LD L,A + ; ; + ; EX AF,AF' + ; OUT (PAGE3),A + ; EI + ; ; + ; LD A,(OPER_DISK) + ; LD C,19H + ; CALL HD_CMD -; DI -; IN A,(PAGE3) -; EX AF,AF' -; LD A,SYS_PAGE -; OUT (PAGE3),A -; -; LD A,(MS_BPB+S_P_T) ; Количество секторов на трек -; LD L,A -; -; EX AF,AF' -; OUT (PAGE3),A -; EI -; -; LD A,(OPER_DISK) -; LD C,19H -; CALL HD_CMD - -BPB_PARAMS: +.PARAMS: DI IN A,(PAGE3) EX AF,AF' @@ -484,35 +477,32 @@ BPB_PARAMS: LD A,(MS_BPB+FORM_CODE) CP #F0 - JP C,ERROR_BPB + JP C,.ERROR_BPB LD HL,MS_BPB+FAT_ID - LD DE,FAT1_MSG + LD DE,.FAT1_MSG LD B,4 -R_BPB_L1: - LD A,(DE) +.L1: LD A,(DE) CP ' ' - JR NZ,R_BPB_L11 + JR NZ,.L11 INC DE - JR R_BPB_L1 -R_BPB_L11: - CP (HL) - JR NZ,PC_DOS_BPB + JR .L1 +.L11: CP (HL) + JR NZ,.PC_DOS INC HL INC DE - DJNZ R_BPB_L1 + DJNZ .L1 LD A,(HL) CP '6' LD HL,#81FF ; FAT16 флаг - JR Z,BPB_FAT + JR Z,.FAT CP '2' - JP NZ,ERROR_BPB + JP NZ,.ERROR_BPB -PC_DOS_BPB: +.PC_DOS: LD HL,#01FF ; FAT12 флаг -BPB_FAT: - LD (FAT_FLAG),HL +.FAT: LD (FAT_FLAG),HL LD A,(MS_BPB+S_P_T) ; Количество секторов на трек LD (MSD_SECS),A @@ -522,11 +512,10 @@ BPB_FAT: LD IX,0 LD HL,0 ; вычислить начальный сектор FAT - JR Z,NO_LD_SPECIAL + JR Z,.NO_LD_SPECIAL LD IX,(MS_BPB+SPECIAL_SECS) LD HL,(MS_BPB+SPECIAL_SECS+2) -NO_LD_SPECIAL: - +.NO_LD_SPECIAL: LD BC,0 LD DE,(MS_BPB+RESERV_SECS) @@ -540,11 +529,11 @@ NO_LD_SPECIAL: LD BC,0 LD A,(MS_BPB+FATS_NUM) ; количество FATs -NEXT_ADD: +.NEXT_ADD: ADD IX,DE ADC HL,BC DEC A - JR NZ,NEXT_ADD + JR NZ,.NEXT_ADD LD (MSD_CAT_SEC),IX ; начальный сектор DIR LD (MSD_CAT_SEC2),HL ; начальный сектор DIR @@ -566,11 +555,11 @@ NEXT_ADD: EX DE,HL DEC HL XOR A -NEXT_ADD2: +.NEXT_ADD2: INC A - JR Z,ERROR_BPB + JR Z,.ERROR_BPB SBC HL,BC - JR NC,NEXT_ADD2 + JR NC,.NEXT_ADD2 EX DE,HL LD E,A ; A - число секторов в DIR @@ -589,11 +578,11 @@ NEXT_ADD2: LD A,(MS_BPB+CLAST_SIZE) LD D,A LD A,0 -NEXT_ADD3: +.NEXT_ADD3: ADD HL,BC ; Вычисление длины кластера ADC A,0 DEC D - JR NZ,NEXT_ADD3 + JR NZ,.NEXT_ADD3 LD (CLASTER_LEN),HL LD B,0 @@ -603,31 +592,28 @@ NEXT_ADD3: LD HL,0 LD BC,(MS_BPB+S_P_T) LD A,(MS_BPB+H_P_S) -BPB_L1: ; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР +.BPB_L1:; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР ADD HL,BC DEC A - JR NZ,BPB_L1 + JR NZ,.BPB_L1 LD (S_X_H),HL - + ; EX AF,AF' OUT (PAGE3),A EI AND A RET - -ERROR_BPB: +.ERROR_BPB: EX AF,AF' OUT (PAGE3),A SCF EI RET - - -ERROR_MSDOS: +.ERROR_MSDOS: LD HL,MSG_3 JP AUTO_03E4 - -FAT1_MSG: DB 'FAT1' +.FAT1_MSG: + DB 'FAT1' ;******************************************** READ_NEXT_DIR: DI @@ -713,7 +699,7 @@ LOOP_TRK: INC A JR NZ,LOOP_TRK POP BC - JP ERROR_BPB + JP READ_BPB.ERROR_BPB SEC_ENDER: ADD HL,BC