From 673ae8e4c6efd3a8263e528c37131f7dbc67f584 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 29 Apr 2024 10:25:38 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bios/exp/BIOS_FUNC.asm | 112 ++++++++++---------- src/bios/exp/EXP.asm | 6 +- src/bios/exp/EXTENDED/FDD_DRIVER_2.asm | 16 +-- src/bios/exp/EXTENDED/IDE/CD_DRV.ASM | 10 +- src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM | 18 ++-- src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm | 12 +-- src/bios/rom/SETUP/MAIN.asm | 2 +- src/bios/rom/SETUP/SETTINGS.asm | 5 +- src/bios/shared/DEFINES.INC | 4 +- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 10 files changed, 93 insertions(+), 92 deletions(-) diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 654d9a1..608c1e0 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -473,15 +473,15 @@ TAB_5xFNS: ;-------------------------------------------------------------[ FDD #0 ] ; DB low FN_RESERVED_5x ;#50 - Дубль. На эту функцию прыгает из основного обработчика - DB low FDD_5x.RESET ;#51 - DB low FDD_5x.LONG_READ ;#52 - DB low FDD_5x.LONG_WRITE ;#53 + DB low FDD_5x_RESET ;#51 + DB low FDD_5x_LONG_READ ;#52 + DB low FDD_5x_LONG_WRITE ;#53 DB low FN_ABSENT_5x ;#54 - DB low FDD_5x.READ ;#55 - DB low FDD_5x.WRITE ;#56 - DB low FDD_5x.DETECT ;#57 - DB low FDD_5x.GETMED ;#58 - DB low FDD_5x.SETMED ;#59 + DB low FDD_5x_READ ;#55 + DB low FDD_5x_WRITE ;#56 + DB low FDD_5x_DETECT ;#57 + DB low FDD_5x_GETMED ;#58 + DB low FDD_5x_SETMED ;#59 DB low DRV_VERSION ;#5A - Дубль. На эту функцию прыгает из основного обработчика DB low FN_RESERVED_5x ;#5B - Дубль. На эту функцию прыгает из основного обработчика @@ -500,14 +500,14 @@ TAB_5xFNS: ; DB low FN_RESERVED_5x DB low FN_ABSENT_5x - DB low RMD_5x.LONG_READ - DB low RMD_5x.LONG_WRITE + DB low RMD_5x_LONG_READ + DB low RMD_5x_LONG_WRITE DB low FN_ABSENT_5x - DB low RMD_5x.READ - DB low RMD_5x.WRITE + DB low RMD_5x_READ + DB low RMD_5x_WRITE DB low FN_ABSENT_5x - DB low RMD_5x.GETMED - DB low RMD_5x.SETMED + DB low RMD_5x_GETMED + DB low RMD_5x_SETMED DB low DRV_VERSION DB low FN_RESERVED_5x @@ -524,15 +524,15 @@ TAB_5xFNS: ;-------------------------------------------------------------[ HDD #8 ] ; DB low FN_RESERVED_5x - DB low HDD_5x.RESET - DB low HDD_5x.LONG_READ - DB low HDD_5x.LONG_WRITE - DB low HDD_5x.VERIFY - DB low HDD_5x.READ - DB low HDD_5x.WRITE - DB low HDD_5x.DETECT - DB low HDD_5x.GETMED - DB low HDD_5x.SETMED + DB low HDD_5x_RESET + DB low HDD_5x_LONG_READ + DB low HDD_5x_LONG_WRITE + DB low HDD_5x_VERIFY + DB low HDD_5x_READ + DB low HDD_5x_WRITE + DB low HDD_5x_DETECT + DB low HDD_5x_GETMED + DB low HDD_5x_SETMED DB low DRV_VERSION DB low FN_RESERVED_5x @@ -549,13 +549,13 @@ TAB_5xFNS: ;-----------------------------------------------------------[ CDROM #C ] ; DB low FN_RESERVED_5x - DB low CD_5x.RESET - DB low CD_5x.LONG_READ + DB low CD_5x_RESET + DB low CD_5x_LONG_READ DB low FN_ABSENT_5x DB low FN_ABSENT_5x - DB low CD_5x.READ + DB low CD_5x_READ DB low FN_ABSENT_5x - DB low CD_5x.DETECT + DB low CD_5x_DETECT DB low FN_ABSENT_5x DB low FN_ABSENT_5x @@ -563,7 +563,7 @@ TAB_5xFNS: DB low FN_RESERVED_5x DB low FN_RESERVED_5x DB low FN_RESERVED_5x - DB low CD_5x.Extended + DB low CD_5x_Extended DB low DRV_LIST ;---------------------------------------------------------------------[] @@ -576,15 +576,15 @@ TAB_5xFNS: ;-------------------------------------------------------------[ FDD #0 ] ; DB high FN_RESERVED_5x ;#50 - Дубль. На эту функцию прыгает из основного обработчика - DB high FDD_5x.RESET ;#51 - DB high FDD_5x.LONG_READ ;#52 - DB high FDD_5x.LONG_WRITE ;#53 + DB high FDD_5x_RESET ;#51 + DB high FDD_5x_LONG_READ ;#52 + DB high FDD_5x_LONG_WRITE ;#53 DB high FN_ABSENT_5x ;#54 - DB high FDD_5x.READ ;#55 - DB high FDD_5x.WRITE ;#56 - DB high FDD_5x.DETECT ;#57 - DB high FDD_5x.GETMED ;#58 - DB high FDD_5x.SETMED ;#59 + DB high FDD_5x_READ ;#55 + DB high FDD_5x_WRITE ;#56 + DB high FDD_5x_DETECT ;#57 + DB high FDD_5x_GETMED ;#58 + DB high FDD_5x_SETMED ;#59 DB high DRV_VERSION ;#5A - Дубль. На эту функцию прыгает из основного обработчика DB high FN_RESERVED_5x ;#5B - Дубль. На эту функцию прыгает из основного обработчика DB high FN_RESERVED_5x ;#5C - Дубль. На эту функцию прыгает из основного обработчика @@ -602,14 +602,14 @@ TAB_5xFNS: ; DB high FN_RESERVED_5x DB high FN_ABSENT_5x - DB high RMD_5x.LONG_READ - DB high RMD_5x.LONG_WRITE + DB high RMD_5x_LONG_READ + DB high RMD_5x_LONG_WRITE DB high FN_ABSENT_5x - DB high RMD_5x.READ - DB high RMD_5x.WRITE + DB high RMD_5x_READ + DB high RMD_5x_WRITE DB high FN_ABSENT_5x - DB high RMD_5x.GETMED - DB high RMD_5x.SETMED + DB high RMD_5x_GETMED + DB high RMD_5x_SETMED DB high DRV_VERSION DB high FN_RESERVED_5x DB high FN_RESERVED_5x @@ -625,15 +625,15 @@ TAB_5xFNS: ;-------------------------------------------------------------[ HDD #8 ] ; DB high FN_RESERVED_5x - DB high HDD_5x.RESET - DB high HDD_5x.LONG_READ - DB high HDD_5x.LONG_WRITE - DB high HDD_5x.VERIFY - DB high HDD_5x.READ - DB high HDD_5x.WRITE - DB high HDD_5x.DETECT - DB high HDD_5x.GETMED - DB high HDD_5x.SETMED + DB high HDD_5x_RESET + DB high HDD_5x_LONG_READ + DB high HDD_5x_LONG_WRITE + DB high HDD_5x_VERIFY + DB high HDD_5x_READ + DB high HDD_5x_WRITE + DB high HDD_5x_DETECT + DB high HDD_5x_GETMED + DB high HDD_5x_SETMED DB high DRV_VERSION DB high FN_RESERVED_5x DB high FN_RESERVED_5x @@ -649,20 +649,20 @@ TAB_5xFNS: ;----------------------------------------------------------[ CDROM #C0 ] ; DB high FN_RESERVED_5x - DB high CD_5x.RESET - DB high CD_5x.LONG_READ + DB high CD_5x_RESET + DB high CD_5x_LONG_READ DB high FN_ABSENT_5x DB high FN_ABSENT_5x - DB high CD_5x.READ + DB high CD_5x_READ DB high FN_ABSENT_5x - DB high CD_5x.DETECT + DB high CD_5x_DETECT DB high FN_ABSENT_5x DB high FN_ABSENT_5x DB high DRV_VERSION DB high FN_RESERVED_5x DB high FN_RESERVED_5x DB high FN_RESERVED_5x - DB high CD_5x.Extended + DB high CD_5x_Extended DB high DRV_LIST ;---------------------------------------------------------------------[] diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index b2c41a3..a3560a4 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -86,7 +86,7 @@ RST38: IF TEST_INT JR Z,YESINT OUT (C),B JP NOINT -YESINT: PUSH HL +YESINT: PUSH HL LD HL,(SYS_PAGE.INT_ADRESS) LD A,H OR L @@ -95,7 +95,7 @@ YESINT: PUSH HL PUSH DE CALL NZ,EXTINT POP DE - POP HL + POP HL NOINT: POP AF POP BC EI @@ -387,7 +387,7 @@ EXTINT: OR A XOR A OUT (SYS_PORT.RAM),A -.patch EQU $+1-.switchProcedure +.patch EQU $+1-.switchProcedure CALL .JPHL DI diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index b9da1e3..80ae606 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -23,7 +23,7 @@ ; D7 - "1" - High Density, "0" - Double Density ;[]===========================================================[] ;!FIXIT всегда идет работа с данными для диска А -FDD_5x.GETMED: +FDD_5x_GETMED: ;!TEST FDD 720/1440 IF FDD_NormalCount LD IY,FDD_INI_TABLE.FDD_0 @@ -72,7 +72,7 @@ FDD_5x.GETMED: ; D7 - "1" - High Density, "0" - Double Density ;Return: None ;[]===========================================================[] -FDD_5x.SETMED: +FDD_5x_SETMED: ;!TEST FDD 720/1440 IF FDD_NormalCount LD IY,FDD_INI_TABLE.FDD_0 @@ -125,7 +125,7 @@ FDD_5x.SETMED: ;Return: ; A - Flag D7 - "1" - High Density, "0" - Double Density ;[]===========================================================[] -FDD_5x.DETECT: +FDD_5x_DETECT: CALL SET_DOS_ON CALL DISK_ID PUSH AF @@ -138,7 +138,7 @@ FDD_5x.DETECT: ; A - Disk ;Return: None ;[]===========================================================[] -FDD_5x.RESET: +FDD_5x_RESET: CALL SET_DOS_ON CALL S_FDD CALL DISK_ID @@ -163,7 +163,7 @@ FDD_5x.RESET: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;[]===========================================================[] -FDD_5x.READ: +FDD_5x_READ: EX AF,AF' IN A,(SLOT3) EX AF,AF' @@ -178,7 +178,7 @@ FDD_5x.READ: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;[]===========================================================[] -FDD_5x.LONG_READ: +FDD_5x_LONG_READ: PUSH IY PUSH BC PUSH HL @@ -310,7 +310,7 @@ ERRDOS: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;[]===========================================================[] -FDD_5x.WRITE: +FDD_5x_WRITE: EX AF,AF' IN A,(SLOT3) EX AF,AF' @@ -325,7 +325,7 @@ FDD_5x.WRITE: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;[]===========================================================[] -FDD_5x.LONG_WRITE: +FDD_5x_LONG_WRITE: PUSH IY PUSH BC PUSH HL diff --git a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM index af8984b..95301d1 100644 --- a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM @@ -15,7 +15,7 @@ RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16 ASSERT ((PKTSIZE % 2) = 0), "PKTSIZE must be an even number" ;[]================================================================[#51] -CD_5x.RESET: +CD_5x_RESET: LD C,IDE.Device.CDROM CALL SELECT_DRIVE RET C @@ -42,7 +42,7 @@ CD_5x.RESET: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;READ SECTOR(S) -CD_5x.READ: +CD_5x_READ: EX AF,AF' IN A,(SLOT3) EX AF,AF' @@ -57,7 +57,7 @@ CD_5x.READ: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;LONG READ SECTOR(S) -CD_5x.LONG_READ: +CD_5x_LONG_READ: LD C,IDE.Device.CDROM CALL SELECT_DRIVE RET C @@ -113,7 +113,7 @@ CD_5x.LONG_READ: ; A - Disk ;Return: CF=0 - A=Drive type ; CF=1 - drive not present, A=#02 -CD_5x.DETECT: +CD_5x_DETECT: LD C,IDE.Device.CDROM AND %1011'1111 JP DRV_DETECT @@ -126,7 +126,7 @@ CD_5x.DETECT: ; B - SubFunction ;Return: ; -CD_5x.Extended: +CD_5x_Extended: LD C,IDE.Device.CDROM CALL SELECT_DRIVE RET C diff --git a/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM index c79efdc..43ddb30 100644 --- a/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM @@ -78,7 +78,7 @@ WRITE_OUTI_DUPs EQU 32 ; bytes ;[]================================================================[#51] ;Function: Reset drive -HDD_5x.RESET: ; !FIXIT не ресетится? +HDD_5x_RESET: ; !FIXIT не ресетится? ;For non-ATAPI drives, the only method a driver has of resetting a drive ; after a major error is to do a "software reset" on the bus. ; Set bit 2 (SRST, value = 4) in the proper Control Register for the @@ -99,7 +99,7 @@ HDD_5x.RESET: ; !FIXIT ; DE - Cylinders ; IX - Capacity sector in bytes ; B - Flags: MASTER/SLAVE, LBA/CHS -HDD_5x.GETMED: +HDD_5x_GETMED: LD C,IDE.Device.HDD CALL SELECT_DRIVE RET C @@ -129,7 +129,7 @@ HDD_5x.GETMED: ; IX - Capacity sector in bytes ; B - Flags ;Return: None -HDD_5x.SETMED: +HDD_5x_SETMED: LD C,IDE.Device.HDD CALL SELECT_DRIVE RET C @@ -159,7 +159,7 @@ HDD_5x.SETMED: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;READ SECTOR(S) -HDD_5x.READ: +HDD_5x_READ: EX AF,AF' IN A,(SLOT3) EX AF,AF' @@ -174,7 +174,7 @@ HDD_5x.READ: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;LONG READ SECTOR(S) -HDD_5x.LONG_READ: +HDD_5x_LONG_READ: PUSH IY SAFE_PORTY_2 @@ -320,7 +320,7 @@ RDS004: DUP 16 ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;WRITE SECTOR(S) -HDD_5x.WRITE: +HDD_5x_WRITE: EX AF,AF' IN A,(SLOT3) EX AF,AF' @@ -335,7 +335,7 @@ HDD_5x.WRITE: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) ;WRITE SECTOR(S) -HDD_5x.LONG_WRITE: +HDD_5x_LONG_WRITE: PUSH IY SAFE_PORTY_2 @@ -496,7 +496,7 @@ WRS003: ; B - Sector counter ;Return: None ;VERIFY SECTOR(S) -HDD_5x.VERIFY: +HDD_5x_VERIFY: PUSH IY SAFE_PORTY_2 PUSH IX @@ -659,7 +659,7 @@ WAITPRT: ; A - Disk ;Return: CF=0 - A=Drive type ; CF=1 - drive not present, A=#02 -HDD_5x.DETECT: +HDD_5x_DETECT: LD C,IDE.Device.HDD JP DRV_DETECT ;[]================================================================[#57] \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm index cb95869..deb1421 100644 --- a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm +++ b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm @@ -12,7 +12,7 @@ ;Return: None ;[]===========================================================[] ;!FIXIT -RMD_5x.SETMED: +RMD_5x_SETMED: and a ret ; A - Disk @@ -35,7 +35,7 @@ RMD_5x.SETMED: ; IX - Capacity sector in bytes ; B - Flags: ramblock ID ;[]===========================================================[] -RMD_5x.GETMED: +RMD_5x_GETMED: .SectorSize EQU 512 ;!HARDCODE AND #0F CALL GET_RAMD_ST ; получение идентификатора блока @@ -64,16 +64,16 @@ RMD_5x.GETMED: RET //////////////////////////////////////////////////////////////////////////////////// -RMD_5x.LONG_WRITE: +RMD_5x_LONG_WRITE: LD C,#FF JP RAM_DRV_READ_WRITE -RMD_5x.LONG_READ: +RMD_5x_LONG_READ: LD C,0 JP RAM_DRV_READ_WRITE -RMD_5x.WRITE: +RMD_5x_WRITE: LD C,#FF JP RAM_DRV_NO_LONG -RMD_5x.READ: +RMD_5x_READ: LD C,0 ;JP RAM_DRV_NO_LONG RAM_DRV_NO_LONG: diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 52cf035..ebe2b36 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -935,7 +935,7 @@ FDSTART: LD A,msgStrings.bootFdd CALL POSTMSG POP AF - CALL FDD_5x.RESET + CALL FDD_5x_RESET POP BC RET C JP OS_LOAD diff --git a/src/bios/rom/SETUP/SETTINGS.asm b/src/bios/rom/SETUP/SETTINGS.asm index f33af36..cbd99fe 100644 --- a/src/bios/rom/SETUP/SETTINGS.asm +++ b/src/bios/rom/SETUP/SETTINGS.asm @@ -898,6 +898,7 @@ SDIDE2 EQU #03 SDRAM EQU #04 ASDFDD1 EQU #00 ASDFDD2 EQU #10 +ASDRECOVERY EQU #70 ASDIDE1 EQU #20 ASDIDE2 EQU #30 ASDRAM EQU #40 @@ -1012,7 +1013,7 @@ STYLES: DEFVAL: DB SAVERAM+EXTBIOS+SDELAY1 ;X0E - OPTIONS DB TDL250+TRATE30 ;X0F - KEYBOARD - DB SDIDE1+ASDFDD2 ;X10 - SYSTEM DISKS + DB SDIDE1+ASDRECOVERY ;X10 - SYSTEM DISKS DB FD1720+FD2720+HD1AUTO+HD2AUTO ;X11 - FDD & Primary HDD's DB 0 ;X12 - CYLINDERS LOW MASTER DB 0 ;X13 - CYLINDERS HIGH MASTER @@ -1036,7 +1037,7 @@ DEFVAL: DB SAVERAM+EXTBIOS+SDELAY1 ;X0E - OPTIONS _mInfoALIGN 256,0 ; выравнивание на адрес #XX00 CMOSARE: DS 14 - + ; DB SAVERAM+EXTBIOS ;X0E - OPTIONS DB TDL250+TRATE30 ;X0F - KEYBOARD DB SDIDE1+ASDFDD2 ;X10 - SYSTEM DISKS diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 0da9fb6..150ba86 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -9,7 +9,7 @@ DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' DEFINE StandartCGApallete 1 ; Подключать палитру из standart_colors.inc DEFINE BitStream_SizeInPages 4 - DEFINE USE_E1_SCANCODE 0 + DEFINE USE_E1_SCANCODE 0 ; Задержка в кадрах после отрисовки логотипа (0 = 256) @@ -22,7 +22,7 @@ DEFINE TEST_INT 1 ; Тестовый обработчик пользовательского INT DEFINE NEW_FEATURE 0 ; !TODO пункты в сетап DEFINE HDDwriteProtect 0 - DEFINE RECOVERYmountTYPE 2 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" + DEFINE RECOVERYmountTYPE 1 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY всегда грузится в диск 15, 2 - ищется свободный рамдиск и если такого нет, то занимается 15ый DEFINE FDD_NormalCount 0 ; \ No newline at end of file diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 8578f120adb7c7718c45aae6119bd0528f36bcb2..eeb9913b92e35081facdfc4c384e129ae9f71793 100755 GIT binary patch delta 10143 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 delta 10775 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

WIt5?uDY(sy3XJs(U~hx_U~ix2E2dZ0end; zD?EJX@jFlAEG~Vr{{;qLj{`zSGxYeEFDp^L=Y(W2D5Y^vqU>q!41rETMu-AS#EXQFw2!L1jwT! zsDK|FmBdg#Il#TK-^1XBqESgK^}qozn@Sgtaifkt6$6 z=ZIwJIc(jI8`Z!Aq@bSYikP7SYR@aqflGGs;gZQQR# z{qHk)BmVyl`v1b9Hk_W@F8lczZLCnA-!9Y}+PU97!?ho9Ha|_>)xN0#55tebjvs*6 zSx^ey8>Y&{3<+&Wg`|GM)DFoF`t?;my!bG+L)n}uY}Pm171EDH)#Y@4J5zg*HntB5 zjfQqDMy