diff --git a/DSS/build.txt b/DSS/build.txt index 8580e7b..b74e882 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -30 \ No newline at end of file +31 \ No newline at end of file diff --git a/DSS/drivers/media/ATAPI/CDX.ASM b/DSS/drivers/media/ATAPI/CDX.ASM index cac2242..e0be89b 100644 --- a/DSS/drivers/media/ATAPI/CDX.ASM +++ b/DSS/drivers/media/ATAPI/CDX.ASM @@ -249,8 +249,8 @@ ERR_MSG PUSH DE FMESAGE INC DE - LD HL,ERR0 - LD BC,ERR0.Size + LD HL,SYS_ERRORS + LD BC,SYS_ERRORS.Size LCPIR XOR A CPIR RET PO diff --git a/DSS/drivers/media/ReScanDRV.ASM b/DSS/drivers/media/ReScanDRV.ASM index f88ebdd..201c18e 100644 --- a/DSS/drivers/media/ReScanDRV.ASM +++ b/DSS/drivers/media/ReScanDRV.ASM @@ -55,7 +55,7 @@ ReScanDRV: ; HDD! Сверка по таблице LOGDRV JP Z,SCAN_TABLES.HARD_DRV ; RD? - LD HL,RMDRIVE + LD HL,RAMDSK_DRV.API_TABLE AND A SBC HL,DE ; RAM Drive! Сверка по таблице RAMDTBL @@ -173,7 +173,7 @@ Fill_if_Exists: LD A,RAMDTBL.TBL_Entry LD IY,RAMDTBL CALL .RUN - LD DE,RMDRIVE + LD DE,RAMDSK_DRV.API_TABLE RET NC LD A,(.tbl) DEC A ;!!!!! может быть переполнение @@ -328,7 +328,7 @@ RAM_DRV: ; Получаем номер рамдиска в OLD_TABLES.RAMDTBL LD A,B LD BC,OLD_TABLES.RAMDTBL - CALL GET_RAMDRV_NUM.skip_tbl + CALL RAMDSK_DRV.GET_RAMDRV_NUM.skip_tbl LD (.cur_drv),BC AND #0F LD C,A ; номер рамдиска diff --git a/DSS/drivers/media/Shared.asm b/DSS/drivers/media/Shared.asm index 9a4a8ad..4ea4497 100644 --- a/DSS/drivers/media/Shared.asm +++ b/DSS/drivers/media/Shared.asm @@ -140,8 +140,8 @@ INITDVC: XOR A LD DE,IDE_DRV.API_TABLE CALL MAKEDVC ; RAM-диски - CALL INIT_RD - LD DE,RMDRIVE + CALL RAMDSK_DRV.Init + LD DE,RAMDSK_DRV.API_TABLE CALL MAKEDVC XOR A RET diff --git a/DSS/drivers/media/ata_atapi-drv.asm b/DSS/drivers/media/ata_atapi-drv.asm index b6be0c5..1dd9d8d 100644 --- a/DSS/drivers/media/ata_atapi-drv.asm +++ b/DSS/drivers/media/ata_atapi-drv.asm @@ -580,40 +580,9 @@ Open: CALL MediaCheck SCF RET ; - ;[ ] media changed - bios 5x DETECT -; выход A=#FF - changed, A=0 - not changed, ZF=1 - not changed -; MediaCheck: PUSH IY -; CALL SelectDrive -; JR C,.exit -; ; -; ; [ ] media changed -; LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) -; LD C,BIOS.DRV_DETECT ;[ ] media change переделать логику тут и в биос? ; !FIXIT -; PUSH IY -; RST ToBIOS -; POP IY -; JR NC,.next_check -; ; -; CP BIOS.Error.ATAPI.UnitAttention -; JR Z,.Reinit -; JR .exit -; ; -; .next_check: BIT 1,(IY + LOGDRV.MediaParameters) -; JR NZ,.Reinit -; ; -; XOR A -; .exit: POP IY -; RET -; ; -; .Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) -; LD (CURRENT_DRIVE.Number),A -; LD (LOGDRV_OFFSET),IY -; ;RES 1,(IY + LOGDRV.MediaParameters) -; CALL DEFINE_PARTITIONS -; LD A,#FF ;!HARDCODE drive changed -; OR A -; POP IY -; RET + + +;[ ] media changed - bios 5x DETECT MediaCheck: PUSH IY CALL SelectDrive.NoSector JR NC,.next_step diff --git a/DSS/drivers/media/fdd-drv.asm b/DSS/drivers/media/fdd-drv.asm index 5ba7d07..f72dfac 100644 --- a/DSS/drivers/media/fdd-drv.asm +++ b/DSS/drivers/media/fdd-drv.asm @@ -172,7 +172,7 @@ Reserved: LD A,DSS_Error.drv.INVALID_COMMAND ;;;;;;;;;;;;;;;;;;;;;;;;;;; ; -Init: LD A,2 ;количество FDD в компе ;!FIXIT а если отключу в БИОС? +Init: LD A,2 ;количество FDD в компе AND A RET ; ; ; @@ -190,9 +190,9 @@ Open: PUSH AF LD DE,-DSS_MAX_SECTOR_SIZE - 1 ; [ ] 15/04/25 не будет читать сектор больше DSS_MAX_SECTOR_SIZE ; ZF = 0 LD A,DSS_Error.sys.UNKNOWN_FORMAT - OR A + OR A ; убираем ZF, если есть ; - ADD IX,DE ; если размер сектора больше, то облом + ADD IX,DE ; если размер сектора больше, то облом RET ; ; ; @@ -202,7 +202,7 @@ Close: XOR A ; ; ; -;!FIXIT проверять ВГ93 когда это станет возможным +;!FIXIT проверять ВГ93 когда (если) это станет возможным MediaCheck: CALL Open RET C IF NON_REMOVABLE_FDD @@ -249,13 +249,13 @@ GetBPB: LD IX,0 ; RET ; ; ; -; !FIXIT может умереть на размере сектора больше 512 байтов + Read: LD C,BIOS.DRV_READ RST ToBIOS RET ; ; ; -; !FIXIT может умереть на размере сектора больше 512 байтов + Write: LD C,BIOS.DRV_WRITE RST ToBIOS RET @@ -411,16 +411,10 @@ GenIOCTL: BIT 7,B POP AF LD C,BIOS.DRV_SET_PAR JP ToBIOS - ;RST ToBIOS - ;RET C - ;AND A - ;RET ; ; ; -Removable: ; LD A,1 - ; AND A - XOR A +Removable: XOR A INC A RET ; ; ; diff --git a/DSS/drivers/media/ram_disk-drv.asm b/DSS/drivers/media/ram_disk-drv.asm index b9b5480..9dfb64f 100644 --- a/DSS/drivers/media/ram_disk-drv.asm +++ b/DSS/drivers/media/ram_disk-drv.asm @@ -202,54 +202,57 @@ ; OR #60 ;!HARDCODE сделать номера разных устройств через метки ; ENDM + MODULE RAMDSK_DRV ; parser -RMDRIVE: INC C +API_TABLE: INC C DEC C - JP Z,INIT_RD ; 0 + JP Z,Init ; 0 DEC C - JR Z,RESET_RD ; 1 + JR Z,Open ; 1 DEC C - JR Z,STATUS_RD ; 2 + JR Z,Close ; 2 DEC C - JR Z,CHEK_RD ; 3 + JR Z,MediaCheck ; 3 DEC C - JR Z,GBPB_RD ; 4 + JR Z,GetBPB ; 4 DEC C - JR Z,READ_RD ; 5 + JR Z,Read ; 5 DEC C - JR Z,WRITE_RD ; 6 + JR Z,Write ; 6 DEC C - JR Z,REMOV_RD ; 7 + JR Z,Removable ; 7 DEC C - JP Z,IOCTL_RD ; 8 + JP Z,GenIOCTL ; 8 DEC C JP Z,.error ; 9 RESR_H DEC C - JP Z,LREAD_RD ; 10 + JP Z,ReadLong ; 10 DEC C - JP Z,LWRITE_RD ; 11 -.error: - LD A,DSS_Error.drv.INVALID_COMMAND + JP Z,WriteLong ; 11 + ; +.error: LD A,DSS_Error.drv.INVALID_COMMAND SCF RET -REMOV_RD: -RESET_RD: -STATUS_RD: XOR A +; +Removable: +Open: +Close: XOR A RET +; ;!FIXIT сделать в SYS_PAGE для рамдисков переменные и брать оттуда значение ;!FIXIT как-то определять смену RMD? ; [x] 18/08/2024 пока немного костыльно и опасно -CHEK_RD: ;LD A,#FF +MediaCheck: ;LD A,#FF ;AND A XOR A ; RET ;DE - ADDRESS -GBPB_RD: LD IX,0 +GetBPB: LD IX,0 LD HL,0 LD B,#01 ;JP READ_RD @@ -258,7 +261,7 @@ GBPB_RD: LD IX,0 ; DE - ADDRESS ; B - COUNT ; A - DRIVE -READ_RD: PUSH BC +Read: PUSH BC CALL GET_RAMDRV_NUM POP BC LD C,BIOS.DRV_READ @@ -266,8 +269,7 @@ READ_RD: PUSH BC ; RST ToBIOS ; XOR A ; RET -LREAD_RD: - PUSH BC +ReadLong: PUSH BC CALL GET_RAMDRV_NUM POP BC LD C,BIOS.DRV_READ_LONG @@ -281,8 +283,7 @@ LREAD_RD: ; DE - ADDRESS ; B - COUNT ; A - DRIVE -WRITE_RD: - PUSH BC +Write: PUSH BC CALL GET_RAMDRV_NUM POP BC LD C,BIOS.DRV_WRITE @@ -291,8 +292,7 @@ WRITE_RD: ; XOR A ; RET -LWRITE_RD: - PUSH BC +WriteLong: PUSH BC CALL GET_RAMDRV_NUM POP BC LD C,BIOS.DRV_WRITE_LONG @@ -358,7 +358,7 @@ LWRITE_RD: ;;; ;----------------------------------------------------------------------;!TEST ;S_P_P DB #00 -INIT_RD: +Init: ; .SectorSize EQU 512 ;!HARDCODE ; LD HL,.SectorSize ; LD A,#80 @@ -425,8 +425,7 @@ INIT_RD: ; 80 - SET DEVICE PARAMETERS ; 81 - WRITE TRACK ; 82 - FORMAT TRACK -IOCTL_RD: - BIT 7,B +GenIOCTL: BIT 7,B JR NZ,.O_CTL_F INC B DEC B @@ -530,4 +529,5 @@ GET_RAMDRV_NUM: LD BC,RAMDTBL RET ; ;ENDDRVR EQU $ -; \ No newline at end of file + ENDMODULE ;RAMDSK_DRV +; diff --git a/SHELL/Procedures/Print.ASM b/SHELL/Procedures/Print.ASM index d843bd9..b56412f 100644 --- a/SHELL/Procedures/Print.ASM +++ b/SHELL/Procedures/Print.ASM @@ -3,16 +3,23 @@ ; вход: a=номер ошибки ;------------------------------------------------- print_err_message: - ld e,a - ld d,0 - inc de - ld hl,ERR0 ; массив строк - ld bc,ERR0.Size ; размер массива - call LCPIR ; найти строку - call PRINTZ ; формат. вывод строки -; call newline - jp newline - + ld hl,SYS_ERRORS ; массив строк + ld bc,SYS_ERRORS.Size ; размер массива + ;cp %1000'0000 + RLA + jr nc,.set_de + ; + ;and %0111'1111 + ld hl,DRV_ERRORS ; массив строк + ld bc,DRV_ERRORS.Size ; размер массива + ; +.set_de: SRL A + ld e,a + ld d,0 + inc de + call LCPIR ; найти строку + call PRINTZ ; формат. вывод строки + jp newline ; Вывод строки ошибки @@ -36,25 +43,25 @@ ECHO_MESSAGE: ; Найти строку по индексу ; вход: de=индекс строки ; выход: hl=строка -FMESAGE: inc de - ld hl,MAIN_MSG.TABLE ; начало массива строк - ld bc,MAIN_MSG.TABLE.Size ; размер массива -LCPIR: xor a - cpir - ret po - ret nz - ;R11 - XOR A - CP (HL) - JR Z,.no_mess - ; - dec de - ld a,d - or e - jr nz,LCPIR - ret -.no_mess: INC HL - RET +FMESAGE: inc de + ld hl,MAIN_MSG.TABLE ; начало массива строк + ld bc,MAIN_MSG.TABLE.Size ; размер массива +LCPIR: xor a + cpir + ret po + ret nz + ;R11 + XOR A + CP (HL) + JR Z,.no_mess + ; + dec de + ld a,d + or e + jr nz,LCPIR + ret +.no_mess: INC HL + RET ;----------------------------------------------------------------------; diff --git a/SHELL/build.txt b/SHELL/build.txt index e1170b6..473995f 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -489 \ No newline at end of file +494 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index bd4546a..f533c03 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit bd4546a854905998edab6144547b79aa673404f6 +Subproject commit f533c03f52f53e581c794c1017b7b0d61d39dfbf