From 615d9cb2e2cc3e2ce4d8c136f3f9f4fbac5c8992 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 17 Sep 2023 04:13:36 +1000 Subject: [PATCH] ... --- BOOT/DSSBOOT.ASM | 2 +- DSS/DOS_FM.ASM | 103 +++++++++++++++++++++++------------------------ DSS/DOS_X.ASM | 47 ++++++++++++++------- DSS/FAT_X.ASM | 13 ++++-- DSS/build.txt | 2 +- Shared_Includes | 2 +- 6 files changed, 95 insertions(+), 74 deletions(-) diff --git a/BOOT/DSSBOOT.ASM b/BOOT/DSSBOOT.ASM index 8bdf584..9539114 100644 --- a/BOOT/DSSBOOT.ASM +++ b/BOOT/DSSBOOT.ASM @@ -547,7 +547,7 @@ ADD_DE2 DJNZ ADD_DE1 RET ;----------------- - +;!TODO сделать это макросами или инклюдами универсальными. повторяются в досе и ещё где-то ; HL - CLUSTER ; DE - (CLUSTER) R_F_FAT: PUSH HL diff --git a/DSS/DOS_FM.ASM b/DSS/DOS_FM.ASM index 976d700..02e6d30 100644 --- a/DSS/DOS_FM.ASM +++ b/DSS/DOS_FM.ASM @@ -174,12 +174,12 @@ BLOKRD0 POP BC ;HL:DE - FP (in sectors) ; B - Amount sectors BLOK_RD: PUSH BC - LD (READMEM),IX + LD (READ.MEM),IX LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER LD C,A - LD B,0 + LD B,0 ;!FIXIT ;HL:DE / BC => DE:IX HL-OSTATOK - CALL DIV_for_SPC ;!FIXIT заменить вызов HLDE/BC на HLDE/C + CALL DIV_for_SPC ;!FIXIT далее заточка на то, что в DE всегда 0 - раздел не больше 2Gb LD B,XH LD C,XL @@ -272,19 +272,19 @@ BLOKRD3 LD A,B ; / ADD IX,DE JR NC,BLOKRD4 INC HL -BLOKRD4 LD DE,(READMEM) +BLOKRD4 LD DE,(READ.MEM) LD A,(FatBuffer.DRIVE) LD B,C LD C,Dss.DRV.Read RST ToDSS.DRV JP C,BLOKRD0 POP BC - LD HL,(READMEM) + LD HL,(READ.MEM) LD DE,(BootSector.B_P_S) BLOKRD5 ADD HL,DE DEC C JR NZ,BLOKRD5 - LD (READMEM),HL + LD (READ.MEM),HL POP DE LD A,B OR A @@ -309,19 +309,19 @@ BLOKRD7 EX DE,HL PUSH HL PUSH BC CALL NSECTOR - LD DE,(READMEM) + LD DE,(READ.MEM) LD A,(FatBuffer.DRIVE) LD B,C LD C,Dss.DRV.Read RST ToDSS.DRV JP C,BLOKRD0 POP BC - LD HL,(READMEM) + LD HL,(READ.MEM) LD DE,(BootSector.B_P_S) BLOKRD8 ADD HL,DE DEC C JR NZ,BLOKRD8 - LD (READMEM),HL + LD (READ.MEM),HL POP DE JR BLOKRD6 @@ -344,7 +344,7 @@ BLOKWR0 POP BC ;HL:DE - FP (in sectors) ; B - Amount sectors BLOK_WR PUSH BC - LD (READMEM),IX + LD (READ.MEM),IX LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER LD C,A LD B,0 @@ -457,19 +457,19 @@ BLOKWR3 LD A,B ADD IX,DE JR NC,BLOKWR4 INC HL -BLOKWR4 LD DE,(READMEM) +BLOKWR4 LD DE,(READ.MEM) LD A,(FatBuffer.DRIVE) LD B,C LD C,Dss.DRV.Write RST ToDSS.DRV JP C,BLOKWR0 POP BC - LD HL,(READMEM) + LD HL,(READ.MEM) LD DE,(BootSector.B_P_S) BLOKWR5 ADD HL,DE DEC C JR NZ,BLOKWR5 - LD (READMEM),HL + LD (READ.MEM),HL POP DE LD A,B OR A @@ -499,19 +499,19 @@ BLOKWR9 POP BC PUSH HL PUSH BC CALL NSECTOR - LD DE,(READMEM) + LD DE,(READ.MEM) LD A,(FatBuffer.DRIVE) LD B,C LD C,Dss.DRV.Write RST ToDSS.DRV JP C,BLOKWR0 POP BC - LD HL,(READMEM) + LD HL,(READ.MEM) LD DE,(BootSector.B_P_S) BLOKWR8 ADD HL,DE DEC C JR NZ,BLOKWR8 - LD (READMEM),HL + LD (READ.MEM),HL POP DE JR BLOKWR6 @@ -521,7 +521,7 @@ BLOKWRA POP BC RET TSTSIZE XOR A - LD (READCOD),A + LD (READ.COD),A LD L,(IY+32) ;FP LOW _sFM.F_POSITION LD H,(IY+33) ADD HL,DE @@ -545,25 +545,24 @@ TSTSIZE XOR A SBC HL,DE ;VERY BIG EX DE,HL LD A,#FF - LD (READCOD),A + LD (READ.COD),A RET ; HL - ADDRESS ; DE - SIZE ; A - FM READ: LD (R_POINT),HL - LD (S_POINT),HL + LD (.S_POINT),HL CALL SET_FM RET C CALL TSTSIZE LD A,D OR E - JP Z,NOREAD ;!FIXIT можно перенести в начало процедуры + JP Z,.NOREAD ;!FIXIT можно перенести в начало процедуры PUSH DE LD A,(IY+_sFM.DRIVE) CALL OPENDSK - ; - JP C,RPERR1 + JP C,.ERR_1 ;Расчёт смещения в секторах ; LD C,(IY+_sFM.F_POSITION) ; LD E,(IY+_sFM.F_POSITION+1) @@ -594,18 +593,18 @@ READ: LD (R_POINT),HL ; ;LD A,B OR C - JP NZ,ROV1 -ROV4: POP BC + JP NZ,.ROV1 +.ROV4: POP BC PUSH BC SRL B - JR Z,ROV2 - LD (SECTORH),HL - LD (SECTORL),DE + JR Z,.ROV2 + LD (.SECTORH),HL + LD (.SECTORL),DE LD IX,(R_POINT) CALL BLOK_RD - JP C,RPERR1 + JP C,.ERR_1 LD DE,(R_POINT) -READMEM+1: LD HL,0 // LD HL,(READMEM) +.MEM+1: LD HL,0 // LD HL,(READMEM) AND A SBC HL,DE LD C,H @@ -613,18 +612,18 @@ READMEM+1: LD HL,0 // LD HL,(READMEM) ADD HL,DE LD (R_POINT),HL SRL C -SECTORL+1: LD HL,0 // LD HL,(SECTORL) +.SECTORL+1: LD HL,0 // LD HL,(SECTORL) ADD HL,BC EX DE,HL -SECTORH+1: LD HL,0 // LD HL,(SECTORH) +.SECTORH+1: LD HL,0 // LD HL,(SECTORH) LD C,B ADC HL,BC -ROV2: POP BC +.ROV2: POP BC LD A,B AND #01 LD B,A OR C - JP Z,ROV6 + JP Z,.ROV6 PUSH BC LD IX,BUFFER+#C000 LD B,1 @@ -636,14 +635,14 @@ ROV2: POP BC POP BC LD C,SLOT3 OUT (C),B - JP C,RPERR1 + JP C,.ERR_1 LD HL,BUFFER LD DE,(R_POINT) POP BC LDIR LD (R_POINT),DE -ROV6: -S_POINT+1: LD HL,0 +.ROV6: +.S_POINT+1: LD HL,0 LD DE,(R_POINT) EX DE,HL AND A @@ -655,12 +654,11 @@ S_POINT+1: LD HL,0 LD HL,0 CALL MOVE_FP.F_current POP DE -NOREAD: -READCOD+1: LD A,0 +.NOREAD: +.COD+1: LD A,0 OR A RET - -ROV1: PUSH BC +.ROV1: PUSH BC PUSH HL PUSH DE LD IX,BUFFER+#C000 @@ -674,7 +672,7 @@ ROV1: PUSH BC LD C,SLOT3 OUT (C),B POP HL - JP C,RPERR3 + JP C,.ERR_3 LD BC,1 ADD HL,BC EX DE,HL @@ -691,23 +689,22 @@ ROV1: PUSH BC POP HL AND A SBC HL,BC - JR NC,ROV3 + JR NC,.ROV3 ADD HL,BC LD B,H LD C,L LD HL,0 -ROV3: PUSH HL +.ROV3: PUSH HL LD HL,BUFFER ADD HL,DE LD DE,(R_POINT) LDIR LD (R_POINT),DE EXX - JP ROV4 - -RPERR3: POP HL -RPERR2: POP HL -RPERR1: POP BC + JP .ROV4 +.ERR_3: POP HL +.ERR_2: POP HL +.ERR_1: POP BC SCF RET @@ -726,7 +723,7 @@ RD_ONLY: POP DE ; DE - SIZE ; A - FM WRITE: LD (R_POINT),HL - LD (S_POINT),HL + LD (READ.S_POINT),HL PUSH DE CALL SET_FM JP C,PWERR1 @@ -762,7 +759,7 @@ WOV4: POP BC PUSH HL PUSH DE PUSH BC -R_POINT+2: LD IX,0 // LD IX,(R_POINT) +R_POINT+2: LD IX,0 // LD IX,(R_POINT) CALL BLOK_WR POP BC @@ -818,7 +815,7 @@ WOV2: POP BC LD C,SLOT3 OUT (C),B RET C -WOV6: LD DE,(S_POINT) +WOV6: LD DE,(READ.S_POINT) LD HL,(R_POINT) AND A SBC HL,DE @@ -922,8 +919,8 @@ WOV3: PUSH HL ; ADC HL,DE ; RET ///////////////////////////////////// -; HL - CLUSTER -; HL:IX - SECTOR +; in: HL - CLUSTER +; out: HL:IX - SECTOR NSECTOR: DEC HL DEC HL LD DE,0 diff --git a/DSS/DOS_X.ASM b/DSS/DOS_X.ASM index b672853..46c67f8 100644 --- a/DSS/DOS_X.ASM +++ b/DSS/DOS_X.ASM @@ -289,27 +289,39 @@ RD_BPB: LD C,SLOT3 LD (FatBuffer.DIR_S_S),A ADD HL,BC ; Start DATA area LD (FatBuffer.DAT_FRM),HL - ;LD HL,0 - LD H,B ; тут в B ноль должен быть - LD L,B - LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector - LD B,(IY+_sBOOT_SEC.B_P_S+1) - LD A,(BootSector.S_P_C) - +;!TODO не используются значения вычисляемые и сохраняемые в FatBuffer //////////////////////////////////////////////////////////////////////// IF COMPILE_UNUSED_CODE -;!TODO не используются значения вычисляемые и сохраняемые в FatBuffer -;NEXTAD3 -.loop3: ADD HL,BC ; calc. cluster size - DEC A - JR NZ,.loop3 + ;LD HL,0 + ;LD H,B ; тут в B ноль должен быть + ;LD L,B + ;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector + ;LD B,(IY+_sBOOT_SEC.B_P_S+1) + LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector + LD H,(IY+_sBOOT_SEC.B_P_S+1) + LD A,(BootSector.S_P_C) + +;NEXTAD3 +; .loop3: ADD HL,BC ; calc. cluster size +; DEC A +; JR NZ,.loop3 + ;!TODO проверить правильно ли считает + XOR 1 ; calc. cluster size + JR Z,.loop3.end + RRA +.loop3: ADD HL,HL + RRCA + JP NC,.loop3 +.loop3.end: + ; LD (FatBuffer.CLU_LEN),HL EX DE,HL LD HL,#3FFF ;!TODO FATcacheSize - XOR A -;NEXTAD4 + ;XOR A + ; A = 0 +;NEXTAD4 ;!FIXIT оптимизировать когда понадобится .loop4: INC A JP Z,DOS_X_Error.UnknownBPB SBC HL,DE @@ -346,6 +358,11 @@ RD_BPB: LD C,SLOT3 .BPB_FAT: LD (FatBuffer.FAT_TYP),A LD (FatBuffer.ENDCLUS),HL + +;!TODO не используются значения вычисляемые и сохраняемые в FatBuffer +//////////////////////////////////////////////////////////////////////// + IF COMPILE_UNUSED_CODE + LD HL,0 LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track LD B,(IY+_sBOOT_SEC.S_P_T+1) @@ -355,6 +372,8 @@ RD_BPB: LD C,SLOT3 DEC A JR NZ,.BPB_L1 LD (FatBuffer.S_X_H),HL + ENDIF +//////////////////////////////////////////////////////////////////////// LD DE,(FatBuffer.DAT_FRM) ; LD E,(IY+#1C) ;Hidden sec diff --git a/DSS/FAT_X.ASM b/DSS/FAT_X.ASM index a18cb2e..b3191e0 100644 --- a/DSS/FAT_X.ASM +++ b/DSS/FAT_X.ASM @@ -50,8 +50,8 @@ INC_FA2 CALL R_F_FAT ;R01 -; HL - CLUSTER -; DE - (CLUSTER) +; IN: HL - CLUSTER +; OUT: DE - (CLUSTER) ;!FIXIT далее заточка на то, что в DE всегда 0 - раздел не больше 2Gb R_F_FAT: EX DE,HL @@ -85,8 +85,13 @@ R_F_F16: ; AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES) ADD HL,HL ; HL - FAT OFFSET (FROM CASH) - LD BC,(FATCASH) ; C - BLOCK FAT IN CASH - CP C + ;!TEST + LD BC,(FATCASH) ; C - BLOCK FAT IN CASH + CP C + //LD C,A + //LD A,(FATCASH.Block) + //CP C + ; CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT LD DE,FAT ADD HL,DE diff --git a/DSS/build.txt b/DSS/build.txt index 61f9147..c2567dc 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -275 \ No newline at end of file +280 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index cf19a28..b593cb6 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit cf19a287a2cfe1946de5c1d50a255c43ae4fc390 +Subproject commit b593cb606636c961e49597b9b1e5b6ee72d191c9