From 1b8bd3058236b3976e3fd5748b41a50ee049efb5 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 12 Jul 2023 04:04:37 +1000 Subject: [PATCH] FIXED BUGS --- DSS/CHANGES.LOG | 17 +- DSS/DOS5.ASM | 108 +++-------- DSS/DOS_FM.ASM | 171 +++++++++++------- DSS/DOS_X.ASM | 16 +- DSS/DRV-MAIN.ASM | 10 +- DSS/{DOS-MAIN.ASM => DSS-MAIN.ASM} | 0 DSS/FAT_X.ASM | 20 +- DSS/KNOWN.BUG | 13 +- DSS/{FDD_DRV0.ASM => Media_drivers/FDD.ASM} | 31 ++-- DSS/{IDE_DRV0.ASM => Media_drivers/IDE.ASM} | 0 .../RAM_DISK.ASM} | 0 DSS/{DISK_X.ASM => Media_drivers/Shared.ASM} | 0 DSS/Structures.inc | 42 ++--- DSS/VERSION.INC | 2 +- DSS/VIDEO.ASM | 1 + 15 files changed, 213 insertions(+), 218 deletions(-) rename DSS/{DOS-MAIN.ASM => DSS-MAIN.ASM} (100%) rename DSS/{FDD_DRV0.ASM => Media_drivers/FDD.ASM} (83%) rename DSS/{IDE_DRV0.ASM => Media_drivers/IDE.ASM} (100%) rename DSS/{RAM_DRV1.ASM => Media_drivers/RAM_DISK.ASM} (100%) rename DSS/{DISK_X.ASM => Media_drivers/Shared.ASM} (100%) diff --git a/DSS/CHANGES.LOG b/DSS/CHANGES.LOG index d577f99..f411461 100644 --- a/DSS/CHANGES.LOG +++ b/DSS/CHANGES.LOG @@ -1,12 +1,23 @@ -;Изменения после версии 1.70 +!TODO Важное: Среднее: +[ ] перед ресканом драйвов проверять открытые хэндлы и если буква диска меняется, то менять драйв в хэндле +[ ] начать работать с функциями REMOVABLE и MEDIA CHECK rst #18. Возвращать значение #FF, если порядок букв изменился Вообще не важное: -исправить выход из функции #41 при возможном увеличении номера таски на 1 при 255 +[ ] исправить выход из функции #41 при возможном увеличении номера таски на 1 при 255 +------------------------------- -; TEST +DSS 1.70.2 + Изменения после версии 1.70 + [+] при чтении/записи файла не происходит избыточное перечитывание кластеров от начала файла + [+] перечитывание BPB теперь делается не на каждый чих, а когда надо (и бага при загрузке с диска "B:" нет :-P ) + [+] изменена работа с RAM DISK, теперь он может быть загрузочным + [+] переход на другой диск происходит без бага с директорией от старого диска + [+] исправлены баги с обработкой буферов командной строки + [+] исправлены баги в функциях: WINCOPY, WINREST, SCROLL, SETVMOD, SELPAGE + [+] мелкие и не очень оптимизации ;Изменения после версии 1.60 10.02.2003 - Добавлена визуализация курсора в функции ECHOKEY. diff --git a/DSS/DOS5.ASM b/DSS/DOS5.ASM index ca479f1..30a9ca0 100644 --- a/DSS/DOS5.ASM +++ b/DSS/DOS5.ASM @@ -137,7 +137,7 @@ FIHND1 LD (HL),C JP OPEN ;R08 ; INPUT: HL - "filename.ext",#00 without simbols * ? -DELETE LD DE,MASKARE +DELETE: LD DE,MASKARE CALL MASK RET C LD HL,MASKARE @@ -642,8 +642,7 @@ GETWORD: SUB #20 .next: SUB 'A' PUSH HL - ;!TEST CHNDISK OPENDSK - CALL OPENDSK + CALL OPENDSK ; POP HL JP NC,GETWORD @@ -655,8 +654,8 @@ TMPNAME: DB ' ',#00 ; 12 ; RestoreDIR: CHNDISK: ;!TEST - CALL OPENDSK - ;CALL OPENDSK.force + ;CALL OPENDSK + CALL OPENDSK.force ; ;????? R10 RET C @@ -682,7 +681,7 @@ CHNDISK: ; ;????? R10 OPENDSK: - ;!TEST + ;!TEST DRV.Open обход LD C,A LD A,(FatBuffer.DRIVE) CP C @@ -770,11 +769,8 @@ SUBDIR3: ; FIND "MASKAREA" IN DIRECTORY FINDDIR: - ;!TEST - ;LD A,DIRPAGE - ;CALL BANK - SET_PAGE_X DIRPAGE - ; + SET_PAGE_X DIRPAGE + PUSH AF LD IX,DIR .F_01: LD A,(IX+00) @@ -918,11 +914,9 @@ LOADDIR: LD IX,0 LD B,A CALL MOVE_FP - ;!TEST - ;LD A,DIRPAGE - ;CALL BANK - SET_PAGE_X DIRPAGE - ; + + SET_PAGE_X DIRPAGE + PUSH AF ;!TEST no ldir ;LD HL,#C000 @@ -970,11 +964,9 @@ SAVEDIR XOR A LD IX,0 LD B,0 CALL MOVE_FP - ;!TEST - ;LD A,DIRPAGE - ;CALL BANK - SET_PAGE_X DIRPAGE - ; + + SET_PAGE_X DIRPAGE + PUSH AF LD A,(FatBuffer.DRIVE) LD (IY+_sFM.DRIVE),A @@ -1054,73 +1046,19 @@ BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; CALL BANK ; EX DE,HL ; LD DE,HANDTA +; +; DUP 32 ; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI +; EDUP +; ; EXX ; OUT (SLOT3),A ; LD HL,HANDTA +; +; DUP 32 ; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI -; LDI +; EDUP + ; EXX ; POP BC ; DEC BC @@ -1130,8 +1068,8 @@ BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; PUSH BC ; JP G_HAND4 -;HANDTA DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -; DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +;HANDTA BLOCK 32,0 + MASKARE: BLOCK 32,0 ;!HARDCODE почему 32? ; HL - MASK "file*.t??" diff --git a/DSS/DOS_FM.ASM b/DSS/DOS_FM.ASM index e4e82be..4b5f93f 100644 --- a/DSS/DOS_FM.ASM +++ b/DSS/DOS_FM.ASM @@ -108,57 +108,50 @@ MOVE_FP CALL SET_FM LD A,DSS_Error.sys.INVALID_FUNCTION SCF RET - ;from Start File .F_start: ; B=0 LD C,B LD D,B LD E,B - JR MOVE_F1 - + JP .DO ;from End File -.B_end: LD C,(IY+28) - LD B,(IY+29) - LD E,(IY+30) - LD D,(IY+31) - JR MOVE_F1 - +.B_end: LD C,(IY+_sFM.F_SIZE) + LD B,(IY+_sFM.F_SIZE+1) + LD E,(IY+_sFM.F_SIZE+2) + LD D,(IY+_sFM.F_SIZE+3) + JP .DO ;from Current Position .F_current: - LD C,(IY+32) - LD B,(IY+33) - LD E,(IY+34) - LD D,(IY+35) -MOVE_F1 ADD IX,BC + LD C,(IY+_sFM.F_POSITION) + LD B,(IY+_sFM.F_POSITION+1) + LD E,(IY+_sFM.F_POSITION+2) + LD D,(IY+_sFM.F_POSITION+3) +.DO: ADD IX,BC ADC HL,DE LD D,XH LD E,XL - LD (IY+32),E - LD (IY+33),D - LD (IY+34),L - LD (IY+35),H + LD (IY+_sFM.F_POSITION),E + LD (IY+_sFM.F_POSITION+1),D + LD (IY+_sFM.F_POSITION+2),L + LD (IY+_sFM.F_POSITION+3),H XOR A - ;!TEST SAVE CLUSTER AFTER READ - ;LD (IY+_sFM.RESERVED_L),A - ;LD (IY+_sFM.RESERVED_L+1),A - ; RET ;FP COMPARE ; CY - FILE POINTER > SIZE ; NC - FILE POINTER < SIZE - -MOVE_CP LD L,(IY+28) - LD H,(IY+29) - LD E,(IY+32) - LD D,(IY+33) +MOVE_CP: + LD L,(IY+_sFM.F_SIZE) + LD H,(IY+_sFM.F_SIZE+1) + LD E,(IY+_sFM.F_POSITION) + LD D,(IY+_sFM.F_POSITION+1) AND A SBC HL,DE - LD L,(IY+30) - LD H,(IY+31) - LD E,(IY+34) - LD D,(IY+35) + LD L,(IY+_sFM.F_SIZE+2) + LD H,(IY+_sFM.F_SIZE+3) + LD E,(IY+_sFM.F_POSITION+2) + LD D,(IY+_sFM.F_POSITION+3) SBC HL,DE RET @@ -204,8 +197,8 @@ BLOK_RD: PUSH BC .testFunc: ;!TEST SAVE CLUSTER AFTER READ - LD E,(IY+_sFM.RESERVED_L) - LD D,(IY+_sFM.RESERVED_H) + LD E,(IY+_sFM.KnownCluster_L) + LD D,(IY+_sFM.KnownCluster_H) LD A,D OR E JR Z,BLOKRD2 @@ -213,8 +206,8 @@ BLOK_RD: PUSH BC PUSH DE PUSH HL PUSH BC - LD E,(IY+_sFM.RESERVED_CL) - LD D,(IY+_sFM.RESERVED_CH) + LD E,(IY+_sFM.KnownOffset_L) + LD D,(IY+_sFM.KnownOffset_H) LD A,D OR E JR Z,.noOptimization_1 @@ -247,20 +240,17 @@ BLOKRD1: JR C,ECL2 ;R01 EX DE,HL DEC BC - - - BLOKRD2: LD A,B ; ВС - смещение внутри файла в кластерах OR C JR NZ,BLOKRD1 ;!TEST SAVE CLUSTER AFTER READ - LD (IY+_sFM.RESERVED_L),L - LD (IY+_sFM.RESERVED_H),H + LD (IY+_sFM.KnownCluster_L),L + LD (IY+_sFM.KnownCluster_H),H POP BC - LD (IY+_sFM.RESERVED_CL),C - LD (IY+_sFM.RESERVED_CH),B + LD (IY+_sFM.KnownOffset_L),C + LD (IY+_sFM.KnownOffset_H),B ; POP DE @@ -340,7 +330,11 @@ ECL1 AND A ;-------------------- -BLOKWRC POP BC +BLOKWRC: + POP BC + ;!TEST SAVE CLUSTER AFTER WRITE + POP BC + ; BLOKWR0 POP BC POP DE SCF @@ -349,33 +343,77 @@ BLOKWR0 POP BC ;WRITE SECTORS OF FILE ;HL:DE - FP (in sectors) ; B - Amount sectors - BLOK_WR PUSH BC LD (READMEM),IX LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER LD C,A LD B,0 + ;HL:DE / BC => DE:IX HL-OSTATOK CALL DIV32 LD B,XH LD C,XL PUSH HL ;RESIDUE - LD L,(IY+26) ;START CLUSTER - LD H,(IY+27) + LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER + LD H,(IY+_sFM.ST_CLUSTER+1) LD A,H OR L - JR NZ,BLOKWR2 + ;!TEST SAVE CLUSTER AFTER WRITE + ;JR NZ,BLOKWR2 + PUSH BC + JR NZ,.testFunc + ; PUSH BC CALL G_CLUST JR C,BLOKWRC - LD (IY+26),L - LD (IY+27),H + LD (IY+_sFM.ST_CLUSTER),L + LD (IY+_sFM.ST_CLUSTER+1),H LD DE,(FatBuffer.ENDCLUS) CALL W_T_FAT PUSH HL CALL WR_FAT POP HL POP BC - JR BLOKWR2 + JP BLOKWR2 + +.testFunc: + ;!TEST SAVE CLUSTER AFTER WRITE + LD E,(IY+_sFM.KnownCluster_L) + LD D,(IY+_sFM.KnownCluster_H) + LD A,D + OR E + JR Z,BLOKWR2 + + PUSH DE + PUSH HL + PUSH BC + LD E,(IY+_sFM.KnownOffset_L) + LD D,(IY+_sFM.KnownOffset_H) + LD A,D + OR E + JR Z,.noOptimization_1 + + POP HL + AND A + SBC HL,DE + JR C,.noOptimization_2 + + LD C,L + LD B,H + POP HL + POP DE + + + EX DE,HL + JP BLOKWR2 + ; +.noOptimization_1: + POP BC +.noOptimization_2: + POP HL + POP DE + JP BLOKWR2 + + BLOKWR1 PUSH BC CALL R_F_FAT JR NC,BLOKWRB @@ -390,6 +428,15 @@ BLOKWRB POP BC BLOKWR2 LD A,B OR C JR NZ,BLOKWR1 + + ;!TEST SAVE CLUSTER AFTER WRITE + LD (IY+_sFM.KnownCluster_L),L + LD (IY+_sFM.KnownCluster_H),H + POP BC + LD (IY+_sFM.KnownOffset_L),C + LD (IY+_sFM.KnownOffset_H),B + ; + POP DE POP BC LD A,(BootSector.S_P_C) @@ -513,8 +560,7 @@ READ: LD (R_POINT),HL JP Z,NOREAD ;!FIXIT можно перенести в начало процедуры PUSH DE LD A,(IY+_sFM.DRIVE) - ;!TEST CHNDISK OPENDSK - CALL OPENDSK + CALL OPENDSK ; JP C,RPERR1 ;Расчёт смещения в секторах @@ -584,7 +630,7 @@ ROV2: POP BC LDIR LD (R_POINT),DE ROV6: -S_POINT+1: LD HL,0 // LD HL,(S_POINT) +S_POINT+1: LD HL,0 LD DE,(R_POINT) EX DE,HL AND A @@ -597,7 +643,7 @@ S_POINT+1: LD HL,0 // LD HL,(S_POINT) CALL MOVE_FP.F_current POP DE NOREAD: -READCOD+1: LD A,0 // LD A,(READCOD) +READCOD+1: LD A,0 OR A RET @@ -666,7 +712,6 @@ RD_ONLY: POP DE ; HL - ADDRESS ; DE - SIZE ; A - FM - WRITE: LD (R_POINT),HL LD (S_POINT),HL PUSH DE @@ -678,24 +723,22 @@ WRITE: LD (R_POINT),HL SET 7,(IY+_sFM.ACCESS_MODE) SET 5,(IY+_sFM.ATTRIBUT) LD A,(IY+_sFM.DRIVE) - ;!TEST CHNDISK OPENDSK - CALL OPENDSK - ; + CALL OPENDSK JP C,PWERR1 - LD C,(IY+32) - LD A,(IY+33) + LD C,(IY+_sFM.F_POSITION) + LD A,(IY+_sFM.F_POSITION+1) LD E,A AND #01 LD B,A - LD D,(IY+34) - LD L,(IY+35) + LD D,(IY+_sFM.F_POSITION+2) + LD L,(IY+_sFM.F_POSITION+3) LD H,0 OR A RR L RR D RR E - ; HL:DE FP (in sectors) - ; BC FP residue (in bytes) + ; HL:DE - FP (in sectors) + ; BC - FP residue (in bytes) LD A,B OR C JP NZ,WOV1 diff --git a/DSS/DOS_X.ASM b/DSS/DOS_X.ASM index a81f05e..48ff8c8 100644 --- a/DSS/DOS_X.ASM +++ b/DSS/DOS_X.ASM @@ -134,7 +134,7 @@ CURRDS: LD HL,2 FRESP: PUSH BC CALL R_F_FAT POP BC - CP 10 + CP DSS_Error.sys.DISK_FULL JR Z,FRESP2 LD A,E @@ -185,7 +185,7 @@ TESTDSK LD A,(FatBuffer.DRIVE) RST ToDSS.DRV OR A RET Z -RD_BPB LD C,SLOT3 +RD_BPB: LD C,SLOT3 IN B,(C) PUSH BC @@ -309,7 +309,7 @@ R_BPBL1 INC HL INC DE DJNZ R_BPBL1 -FID LD A,(HL) +FID: LD A,(HL) INC HL CP ' ' JR Z,FID @@ -322,7 +322,7 @@ FID LD A,(HL) CP '2' ; FAT12 JP NZ,ERR_BPB LD HL,#0FFF -BPB_FAT +BPB_FAT: LD (FatBuffer.FAT_TYP),A LD (FatBuffer.ENDCLUS),HL LD HL,0 @@ -415,7 +415,7 @@ ERR_BPB: SCF RET RDERR1: LD A,DSS_Error.sys.NOT_READY - SCF + ;SCF RET ; @@ -424,7 +424,7 @@ FatBuffer: .READ_PG: DB #00 .BLOCK: DB #00 .DIR_CLU: DW #0000 -.DRIVE: DB #01 +.DRIVE: DB #FF .FAT_FRM: .FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT .FAT2_XX: DW #0000 @@ -522,8 +522,8 @@ BACK_CUR_PATH: SCANDRV: ;!TEST в DRV-MAIN могут быть проблемы с прерываниями ;DI - LD A,Dss.DRV.RescanDRV - LD C,Dss.DRV.RescanDRV + LD A,Dss.DRV.RescanDRV + LD C,Dss.DRV.RescanDRV RST ToDSS.DRV LD (LDRIVE),A ;EI diff --git a/DSS/DRV-MAIN.ASM b/DSS/DRV-MAIN.ASM index 45824a0..d5ccf47 100644 --- a/DSS/DRV-MAIN.ASM +++ b/DSS/DRV-MAIN.ASM @@ -224,12 +224,12 @@ DISPATCH: LDRIVE DB #00 - INCLUDE 'disk_x.asm' - INCLUDE 'ide_drv0.asm' - INCLUDE 'fdd_drv0.asm' - INCLUDE 'ram_drv1.asm' + INCLUDE 'dss/media_drivers/Shared.asm' + INCLUDE 'dss/media_drivers/ide.asm' + INCLUDE 'dss/media_drivers/fdd.asm' + INCLUDE 'dss/media_drivers/ram_disk.asm' - DB 0 +; DB 0 ENDMODULE ; OUTEND diff --git a/DSS/DOS-MAIN.ASM b/DSS/DSS-MAIN.ASM similarity index 100% rename from DSS/DOS-MAIN.ASM rename to DSS/DSS-MAIN.ASM diff --git a/DSS/FAT_X.ASM b/DSS/FAT_X.ASM index ca89b79..07e7939 100644 --- a/DSS/FAT_X.ASM +++ b/DSS/FAT_X.ASM @@ -17,7 +17,7 @@ G_CLUST: .num+1: LD HL,#0001 G_CLUS1: INC HL CALL R_F_FAT - CP 10 + CP DSS_Error.sys.DISK_FULL SCF RET Z LD A,D @@ -53,12 +53,13 @@ INC_FA2 CALL R_F_FAT ; HL - CLUSTER ; DE - (CLUSTER) ;!FIXIT далее заточка на то, что в DE всегда 0 - раздел не больше 2Gb -R_F_FAT: EX DE,HL +R_F_FAT: + EX DE,HL LD HL,(MAX_CLU) AND A SBC HL,DE EX DE,HL - LD A,10 + LD A,DSS_Error.sys.DISK_FULL RET C EXX @@ -69,8 +70,9 @@ R_F_FAT: EX DE,HL PUSH AF LD A,(FatBuffer.FAT_TYP) CP "2" - JP Z,R_F_F12 -R_F_F16 LD A,H + JR Z,R_F_F12 +R_F_F16: + LD A,H LD B,A AND #0F LD H,A @@ -187,7 +189,7 @@ R_F_F12 LD D,H LD A,D AND #0F LD D,A - JR R_F_F02 + JP R_F_F02 R_F_F01 LD A,E AND #F0 @@ -217,7 +219,7 @@ W_T_FAT PUSH DE SBC HL,DE EX DE,HL POP DE - LD A,10 + LD A,10 ;!HARDCODE error number RET C EXX @@ -230,7 +232,7 @@ W_T_FAT PUSH DE LD (FATCASH.Update),A LD A,(FatBuffer.FAT_TYP) CP "2" - JP Z,W_T_F12 + JR Z,W_T_F12 W_T_F16: PUSH DE LD A,H @@ -345,7 +347,7 @@ RE_FAT: PUSH HL WR_FAT: EXX SET_PAGE_X FATPAGE - ; + EXX PUSH AF CALL WR_FAT_ diff --git a/DSS/KNOWN.BUG b/DSS/KNOWN.BUG index 062d8b3..1356b17 100644 --- a/DSS/KNOWN.BUG +++ b/DSS/KNOWN.BUG @@ -1,12 +1,13 @@ -+ function WINCOPY & WINREST эх чряЁх∙р■Є яЁхЁ√трэш  яхЁхф т√чютюь BIOS (шёяюы№чєхЄё  т√тюф ёЄхъюь!). +FIXED: + + function WINCOPY & WINREST не запрещают прерывания перед вызовом BIOS (используется вывод стеком!). -- яЁш т√тюфх эр ъюэёюы№ фышээюую ЄхъёЄр, ¤ъЁрэ эх ёъЁюышЁєхЄё . ╧ЁютхЁ Є№ эр фюёЄшцхэшх 80 яючшЎшш! +- при выводе на консоль длинного текста, экран не скролируется. Проверять на достижение 80 позиции! -+ ю°шсър т ЇєэъЎшш SCROLL A=0. ++ ошибка в функции SCROLL A=0. -+ ю°шсър яЁш яЁюёьюЄЁх ърЄрыюур т ЇєэъЎш ї єёЄрэютъш рЄЁшсєЄют яЁюяєёър■Єё  ёшёЄхьэ√х Їрщы√. я/я SEARCH MASK=#23 ++ ошибка при просмотре каталога в функциях установки атрибутов пропускаются системные файлы. п/п SEARCH MASK=#23 -- шуэюЁшЁютрэшх ю°шсюъ яЁш чряшёш ёшёЄхьэ√ї юсырёЄхщ FAT/DIR, эхтючьюцэюёЄ№ юЄЁрсюЄрЄ№ ю°шсъє write-protect, Єръ ъръ юэр ЄхЁ хЄё  яЁш яюя√Єъх чряшёрЄ№ шчьхэхээ√щ ърЄрыюу эр фшёъ. ═ю тючэшърхЄ ю°шсър file not found Єръ ъръ ёЁрчю яюёых ёючфрэш  ёшёЄхьр юЄъЁ√трхЄ Їрщы. +- игнорирование ошибок при записи системных областей FAT/DIR, невозможность отработать ошибку write-protect, так как она теряется при попытке записать измененный каталог на диск. Но возникает ошибка file not found так как сразу после создания система открывает файл. -- ю°шсър ЁрчсюЁр фюяєёЄшьюую шьхэш Їрщыр, хёыш юэю ёюёЄюшЄ шч "." Єръ ъръ яюфЁєчюьхтрхЄё  яЁюсхы√ Єюўър яЁюсхы√. +- ошибка разбора допустимого имени файла, если оно состоит из "." так как подрузомевается пробелы точка пробелы. diff --git a/DSS/FDD_DRV0.ASM b/DSS/Media_drivers/FDD.ASM similarity index 83% rename from DSS/FDD_DRV0.ASM rename to DSS/Media_drivers/FDD.ASM index 7bebc15..6f0ca7a 100644 --- a/DSS/FDD_DRV0.ASM +++ b/DSS/Media_drivers/FDD.ASM @@ -1,6 +1,6 @@ ; Disk Driver Specification ver. 2.00 -;[]===========================================================[] +;[]===========================================================[0] ;Procedure : Initialization ; ;Function : Initialization device(s) @@ -10,7 +10,7 @@ ;Output : A = Amount drive support ; HL = Size driver ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[1] ;Procedure : Open ; ;Function : Open disk @@ -20,7 +20,7 @@ ;Output : None ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[2] ;Procedure : Close ; ;Function : Close disk @@ -30,7 +30,7 @@ ;Output : None ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[3] ;Procedure : Media check ; ;Function : Checking change line @@ -41,7 +41,7 @@ ; A = 0FFh disk changed ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[4] ;Procedure : Get BPB ; ;Function : Get Block Parameters BIOS @@ -51,7 +51,7 @@ ;Output : None ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[5] ;Procedure : Input ; ;Function : Input from disk @@ -63,7 +63,7 @@ ;Output : None ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[6] ;Procedure : Output ; ;Function : Output to disk @@ -75,7 +75,7 @@ ;Output : None ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[7] ;Procedure : Removable ; ;Function : Checking change line @@ -86,7 +86,7 @@ ; A = FFh Nonremovable ; ;[]===========================================================[] -;[]===========================================================[] +;[]===========================================================[8] ;Procedure : Generic IOCTL ; ;Function : Generic Input Output Control @@ -162,7 +162,7 @@ FDDRIVE: AND A RET -.RESE: LD C,#51 +.RESE: LD C,BIOS.DRV_RESET RST ToBIOS RET @@ -174,12 +174,11 @@ FDDRIVE: RET ;DE - ADDRESS - .GBPB: LD IX,0 LD HL,0 PUSH DE PUSH AF - LD BC,#0155 + LD BC,1*256 + BIOS.DRV_READ RST ToBIOS POP DE POP HL @@ -189,14 +188,14 @@ FDDRIVE: LD E,(HL) PUSH DE LD A,D - LD C,#58 + LD C,BIOS.DRV_GET_PAR RST ToBIOS LD A,H POP HL PUSH HL LD H,A POP AF - LD C,#59 + LD C,BIOS.DRV_SET_PAR RST ToBIOS XOR A RET @@ -204,12 +203,12 @@ FDDRIVE: XOR A RET -.READD: LD C,#55 +.READD: LD C,BIOS.DRV_READ RST ToBIOS RET .WRITED: - LD C,#56 + LD C,BIOS.DRV_WRITE RST ToBIOS RET diff --git a/DSS/IDE_DRV0.ASM b/DSS/Media_drivers/IDE.ASM similarity index 100% rename from DSS/IDE_DRV0.ASM rename to DSS/Media_drivers/IDE.ASM diff --git a/DSS/RAM_DRV1.ASM b/DSS/Media_drivers/RAM_DISK.ASM similarity index 100% rename from DSS/RAM_DRV1.ASM rename to DSS/Media_drivers/RAM_DISK.ASM diff --git a/DSS/DISK_X.ASM b/DSS/Media_drivers/Shared.ASM similarity index 100% rename from DSS/DISK_X.ASM rename to DSS/Media_drivers/Shared.ASM diff --git a/DSS/Structures.inc b/DSS/Structures.inc index 80ea250..b40ef1e 100644 --- a/DSS/Structures.inc +++ b/DSS/Structures.inc @@ -21,27 +21,27 @@ RESERVED2 BLOCK 490,0 ; ;File Manipulator (FM) - STRUCT _sFM ; 44 bytes -.NAME: TEXT 8,{". "," "} ;+00 NAME -.EXT: TEXT 3,{" "," "} ;+08 EXT -.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT -.RESERVED_L: BYTE 0 ;+12 RESERVED; !TODO следующий кластер для чтения -.RESERVED_H: BYTE 0 ;+13 RESERVED; !TODO следующий кластер для записи -.RESERVED_CL: BYTE 0 ;+14 RESERVED; !TODO следующий кластер для записи -.RESERVED_CH: BYTE 0 ;+15 RESERVED; !TODO следующий кластер для записи -.RESERVED_X: BLOCK 6,0 ;+16 RESERVED -.TIME: WORD #0000 ;+22 TIME -.DATE: WORD #0000 ;+24 DATE -.ST_CLUSTER: WORD #0000 ;+26 START CLUSTER -.F_SIZE: DWORD #0000 ;+28 SIZE FILE -.F_POSITION: DWORD #0000 ;+32 FILE POSITION (FP) -.DIR_CLUSTER: WORD #0000 ;+36 DIRECTORY CLUSTER -.HANDLE: WORD #0000 ;+38 HANDLE NUMBER -.DRIVE: BYTE #00 ;+40 DRIVE OR CURRENT -.ACCESS_MODE: BYTE #00 ;+41 ACCESS MODE -.TASK_NUM: BYTE #00 ;+42 TASK -.EMPTY: BYTE #00 ;+43 EMPTY - ENDS + STRUCT _sFM ; 44 bytes +.NAME: TEXT 8,{". "," "} ;+00 NAME +.EXT: TEXT 3,{" "," "} ;+08 EXT +.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT +.KnownCluster_L: BYTE 0 ;+12 Младший байт номера кластера для которого известно относительное смещение внутри файла +.KnownCluster_H: BYTE 0 ;+13 Старший байт номера кластера для которого известно относительное смещение внутри файла +.KnownOffset_L: BYTE 0 ;+14 Младший байт смещения (в кластерах) относительно начала файла для сохраненного номера кластера. +.KnownOffset_H: BYTE 0 ;+15 Старший байт смещения (в кластерах) относительно начала файла для сохраненного номера кластера. +.RESERVED_X: BLOCK 6,0 ;+16 RESERVED +.TIME: WORD #0000 ;+22 TIME +.DATE: WORD #0000 ;+24 DATE +.ST_CLUSTER: WORD #0000 ;+26 START CLUSTER +.F_SIZE: DWORD #0000 ;+28 SIZE FILE +.F_POSITION: DWORD #0000 ;+32 FILE POSITION (FP) +.DIR_CLUSTER: WORD #0000 ;+36 DIRECTORY CLUSTER +.HANDLE: WORD #0000 ;+38 HANDLE NUMBER +.DRIVE: BYTE #00 ;+40 DRIVE OR CURRENT +.ACCESS_MODE: BYTE #00 ;+41 ACCESS MODE +.TASK_NUM: BYTE #00 ;+42 TASK +.EMPTY: BYTE #00 ;+43 EMPTY + ENDS ; ; NAM EQU 0 ; LEN4 EQU 31 ; EXT EQU 8 ; POS1 EQU 32 diff --git a/DSS/VERSION.INC b/DSS/VERSION.INC index c1bda05..e6a3d19 100644 --- a/DSS/VERSION.INC +++ b/DSS/VERSION.INC @@ -2,7 +2,7 @@ ; DSS Version VERS EQU 01 ;Version Number (XX.) MODF EQU 70 ;Modification (.xx) -BUILD EQU 1 +BUILD EQU 2 ; ; Release Types diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index 899419d..de58e29 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -6,6 +6,7 @@ ;--------------------------------------------------------------- ;Rev Date Name Description ;--------------------------------------------------------------- +;R03 04-04-2023 BAO FIXED BUGS IN FN WINCOPY, WINREST, SCROLL, SETVMOD, SELPAGE ;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI" ;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0) ;---------------------------------------------------------------