diff --git a/DSS/API/ScanDRV.asm b/DSS/API/ScanDRV.asm index 9a43347..b4a7788 100644 --- a/DSS/API/ScanDRV.asm +++ b/DSS/API/ScanDRV.asm @@ -16,7 +16,8 @@ SCANDRV: ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 2. узнаём букву бут-диска ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - CALL BOOTDSK.GET + LD A,(BOOTDSK.NUM) + ;CALL BOOTDSK.GET ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 3. вызываем рескан ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; @@ -44,9 +45,12 @@ SCANDRV: ; LD A,(CORE_BUFFERS.CurrentPath) SUB 'A' - CALL OPENDSK + CALL OPENDSK.open + JR NC,.disk_norm + LD A,(BOOTDSK.NUM) + CALL OPENDSK.open ; - LD HL,CORE_BUFFERS.CurrentDirectory +.disk_norm: LD HL,CORE_BUFFERS.CurrentDirectory CALL CHDIR JR NC,.exit LD HL,CORE_BUFFERS.CurrentDirectory diff --git a/DSS/Kernel_Panic.asm b/DSS/Kernel_Panic.asm index 4e26ab6..8c5c791 100644 --- a/DSS/Kernel_Panic.asm +++ b/DSS/Kernel_Panic.asm @@ -29,8 +29,8 @@ KERNEL_PANIC: LD A,1 OUT (SCREEN_SWITCH),A ; set scr-2 ; - PRINT_LINE_KERNEL_PANIC 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED) - PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE) + PRINT_LINE_KERNEL_PANIC 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.RED) + PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE) ; POP BC POP HL @@ -44,7 +44,7 @@ KERNEL_PANIC: RST ToBIOS ; LD HL,#A000 - LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE + LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE LD B,A LD C,BIOS.LP_PRINT_LINE3 RST ToBIOS diff --git a/DSS/build.txt b/DSS/build.txt index 7ccfcb1..f03187e 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -997 \ No newline at end of file +998 \ No newline at end of file diff --git a/DSS/drivers/media/ReScanDRV.ASM b/DSS/drivers/media/ReScanDRV.ASM index b2eea94..29d977b 100644 --- a/DSS/drivers/media/ReScanDRV.ASM +++ b/DSS/drivers/media/ReScanDRV.ASM @@ -302,7 +302,7 @@ Find_Record: ; RST ToBIOS ; ; ; LD HL,#A000 -; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE +; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE ; LD B,A ; LD C,BIOS.LP_PRINT_LINE3 ; RST ToBIOS diff --git a/DSS/drivers/media/ram_disk-drv.asm b/DSS/drivers/media/ram_disk-drv.asm index 3c90bec..b9b5480 100644 --- a/DSS/drivers/media/ram_disk-drv.asm +++ b/DSS/drivers/media/ram_disk-drv.asm @@ -204,77 +204,77 @@ ; parser -RMDRIVE: - INC C - DEC C - JP Z,INIT_RD ; 0 - DEC C - JR Z,RESET_RD ; 1 - DEC C - JR Z,STATUS_RD ; 2 - DEC C - JR Z,CHEK_RD ; 3 - DEC C - JR Z,GBPB_RD ; 4 - DEC C - JR Z,READ_RD ; 5 - DEC C - JR Z,WRITE_RD ; 6 - DEC C - JR Z,REMOV_RD ; 7 - DEC C - JP Z,IOCTL_RD ; 8 - DEC C - JP Z,.error ; 9 RESR_H - DEC C - JP Z,LREAD_RD ; 10 - DEC C - JP Z,LWRITE_RD ; 11 +RMDRIVE: INC C + DEC C + JP Z,INIT_RD ; 0 + DEC C + JR Z,RESET_RD ; 1 + DEC C + JR Z,STATUS_RD ; 2 + DEC C + JR Z,CHEK_RD ; 3 + DEC C + JR Z,GBPB_RD ; 4 + DEC C + JR Z,READ_RD ; 5 + DEC C + JR Z,WRITE_RD ; 6 + DEC C + JR Z,REMOV_RD ; 7 + DEC C + JP Z,IOCTL_RD ; 8 + DEC C + JP Z,.error ; 9 RESR_H + DEC C + JP Z,LREAD_RD ; 10 + DEC C + JP Z,LWRITE_RD ; 11 .error: - LD A,DSS_Error.drv.INVALID_COMMAND - SCF - RET + LD A,DSS_Error.drv.INVALID_COMMAND + SCF + RET REMOV_RD: RESET_RD: -STATUS_RD: - XOR A - RET - +STATUS_RD: XOR A + RET + ;!FIXIT сделать в SYS_PAGE для рамдисков переменные и брать оттуда значение -CHEK_RD LD A,#FF - AND A - RET + ;!FIXIT как-то определять смену RMD? + ; [x] 18/08/2024 пока немного костыльно и опасно +CHEK_RD: ;LD A,#FF + ;AND A + XOR A + ; + RET ;DE - ADDRESS -GBPB_RD: - LD IX,0 - LD HL,0 - LD B,#01 +GBPB_RD: LD IX,0 + LD HL,0 + LD B,#01 ;JP READ_RD ;READ SECTORS ; HL:IX - SECTOR ; DE - ADDRESS ; B - COUNT ; A - DRIVE -READ_RD: - PUSH BC - CALL GET_RAMDRV_NUM - POP BC - LD C,BIOS.DRV_READ - JP ToBIOS - ; RST ToBIOS - ; XOR A - ; RET +READ_RD: PUSH BC + CALL GET_RAMDRV_NUM + POP BC + LD C,BIOS.DRV_READ + JP ToBIOS + ; RST ToBIOS + ; XOR A + ; RET LREAD_RD: - PUSH BC - CALL GET_RAMDRV_NUM - POP BC - LD C,BIOS.DRV_READ_LONG - JP ToBIOS - ; RST ToBIOS - ; XOR A - ; RET + PUSH BC + CALL GET_RAMDRV_NUM + POP BC + LD C,BIOS.DRV_READ_LONG + JP ToBIOS + ; RST ToBIOS + ; XOR A + ; RET ;WRITE SECTORS ; HL:IX - SECTOR @@ -282,24 +282,24 @@ LREAD_RD: ; B - COUNT ; A - DRIVE WRITE_RD: - PUSH BC - CALL GET_RAMDRV_NUM - POP BC - LD C,BIOS.DRV_WRITE - JP ToBIOS - ; RST ToBIOS - ; XOR A - ; RET + PUSH BC + CALL GET_RAMDRV_NUM + POP BC + LD C,BIOS.DRV_WRITE + JP ToBIOS + ; RST ToBIOS + ; XOR A + ; RET LWRITE_RD: - PUSH BC - CALL GET_RAMDRV_NUM - POP BC - LD C,BIOS.DRV_WRITE_LONG - JP ToBIOS - ; RST ToBIOS - ; XOR A - ; RET + PUSH BC + CALL GET_RAMDRV_NUM + POP BC + LD C,BIOS.DRV_WRITE_LONG + JP ToBIOS + ; RST ToBIOS + ; XOR A + ; RET ; ;; @@ -360,51 +360,49 @@ LWRITE_RD: ;S_P_P DB #00 INIT_RD: ; .SectorSize EQU 512 ;!HARDCODE -; LD HL,.SectorSize -; LD A,#80 +; LD HL,.SectorSize +; LD A,#80 ; .loop: SRL A -; RR H -; JR NC,.loop -; LD (S_P_P),A +; RR H +; JR NC,.loop +; LD (S_P_P),A - LD BC,0*256 + BIOS.GET_RAMD_ST ; Получение идентификатора блока, назначенного на RAM-Disk - LD DE,RAMDTBL -.initLoop: - PUSH BC - LD A,B - PUSH DE - RST ToBIOS - POP DE - OR A - JR Z,.noDRV - ; - INC DE - LD (DE),A - DEC DE - ; - POP BC - LD A,B - LD (DE),A - INC DE - INC DE - ; - JP 1F - ; -.noDRV: POP BC -1: INC B - LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry - CP B - JR NZ,.initLoop + LD BC,0*256+BIOS.GET_RAMD_ST ; Получение идентификатора блока, назначенного на RAM-Disk + LD DE,RAMDTBL +.initLoop: PUSH BC + LD A,B + PUSH DE + RST ToBIOS + POP DE + OR A + JR Z,.noDRV + ; + INC DE + LD (DE),A + DEC DE + ; + POP BC + LD A,B + LD (DE),A + INC DE + INC DE + JP .skip_pop + ; +.noDRV: POP BC +.skip_pop: INC B + LD A,RAMDTBL.Size/RAMDTBL.TBL_Entry + CP B + JR NZ,.initLoop - LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL - EX DE,HL - AND A ;!FIXIT ---- - SBC HL,DE ;!FIXIT ADD HL,DE - SRL L - LD A,L -; LD HL,ENDDRVR - AND A - RET + LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL + EX DE,HL + AND A ;!FIXIT ---- + SBC HL,DE ;!FIXIT ADD HL,DE + SRL L + LD A,L + ; LD HL,ENDDRVR + AND A + RET ;----------------------------------------------------------------------;!TEST ;;; ;; @@ -428,32 +426,30 @@ INIT_RD: ; 81 - WRITE TRACK ; 82 - FORMAT TRACK IOCTL_RD: - BIT 7,B - JR NZ,.O_CTL_F - INC B - DEC B - JP Z,.RGETPRM -; DEC B -; JP Z,FRDTRAC -; DEC B -; JP Z,FCHTRAC - LD A,DSS_Error.drv.INVALID_COMMAND - SCF - RET + BIT 7,B + JR NZ,.O_CTL_F + INC B + DEC B + JP Z,.RGETPRM + ;DEC B + ;JP Z,FRDTRAC + ;DEC B + ;JP Z,FCHTRAC + LD A,DSS_Error.drv.INVALID_COMMAND + SCF + RET -.O_CTL_F: - ; RES 7,B - ; INC B - ; DEC B - ; JP Z,.RSETPRM - -; DEC B -; JP Z,FWRTRAC -; DEC B -; JP Z,FFRTRAC - LD A,DSS_Error.drv.INVALID_COMMAND - SCF - RET +.O_CTL_F: ;RES 7,B + ;INC B + ;DEC B + ;JP Z,.RSETPRM + ;DEC B + ;JP Z,FWRTRAC + ;DEC B + ;JP Z,FFRTRAC + LD A,DSS_Error.drv.INVALID_COMMAND + SCF + RET ; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[x] 17.12.2023 загрузка с активного раздела, а не с первого ; HL:DE - SECTORS ON LOGICAL DISK @@ -467,83 +463,71 @@ IOCTL_RD: ; D5 - "1" RESERVED ; D6 - ADDRESSING MODE LBA/CHS ; D7 - "1" RESERVED -.RGETPRM: - EX DE,HL - LD BC,#55AA - AND A - SBC HL,BC - LD L,A - LD A,DSS_Error.drv.GENERAL_FAILURE - SCF - RET NZ - +.RGETPRM: EX DE,HL + LD BC,#55AA + AND A + SBC HL,BC + LD L,A + LD A,DSS_Error.drv.GENERAL_FAILURE + SCF + RET NZ + ; + EX AF,AF' + LD A,L + CALL GET_RAMDRV_NUM + PUSH AF + PUSH AF + EX AF,AF' - EX AF,AF' - LD A,L - CALL GET_RAMDRV_NUM - PUSH AF - PUSH AF - EX AF,AF' + POP AF + LD C,BIOS.DRV_GET_PAR + RST ToBIOS - POP AF - LD C,BIOS.DRV_GET_PAR - RST ToBIOS + PUSH HL ;число головок, число секторов (на целиндр) + PUSH DE ;количество цилиндров + EXX + POP HL ;количество цилиндров + POP BC ;число секторов (на целиндр) + LD D,0 + LD E,B ;число головок + LD B,D + EXX - PUSH HL ;число головок, число секторов (на целиндр) - PUSH DE ;количество цилиндров - EXX - POP HL ;количество цилиндров - POP BC ;число секторов (на целиндр) - LD D,0 - LD E,B ;число головок - LD B,D - EXX + LD A,L - LD A,L + RRA + JR C,.end +.loopShift: SLA E + RL D + RRA + JR NC,.loopShift + ; +.end: EX AF,AF' + POP AF + EX AF,AF' + XOR A + LD L,A + LD H,L + LD C,A ;[x] 17.12.2023 загрузка с активного раздела, а не с первого + LD A,%10100000 + RET - RRA - JR C,.end -.loopShift: - SLA E - RL D - RRA - JR NC,.loopShift - ; -.end: EX AF,AF' - POP AF - EX AF,AF' - XOR A - LD L,A - LD H,L - LD C,A ;[x] 17.12.2023 загрузка с активного раздела, а не с первого - LD A,%10100000 - RET - ; !TODO ; !FIXIT -; .RSETPRM: -; AND A -; RET - -GET_RAMDRV_NUM: - LD BC,RAMDTBL -.skip_tbl: - ADD A,A - ADD A,C - LD C,A - LD A,0 - ADC A,B - LD B,A - ;INC BC - LD A,(BC) - OR #60 ;!HARDCODE сделать номера разных устройств через метки - RET -; - -; -;TEST_DB_DEL_ME: DB 'Make here more than one page to load test' -; +; .RSETPRM: AND A +; RET +GET_RAMDRV_NUM: LD BC,RAMDTBL +.skip_tbl: ADD A,A + ADD A,C + LD C,A + LD A,0 + ADC A,B + LD B,A + ;INC BC + LD A,(BC) + OR #60 ;!HARDCODE сделать номера разных устройств через метки + RET ; ;ENDDRVR EQU $ ; \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index eebde92..e73e9f8 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit eebde92dd60cdf33588e34a7248413ec107edfe0 +Subproject commit e73e9f8d4f4e72de4f6b54abaec159684fdcebe1