From 29270284340acc84ea5b6aca0a1125259bea59db Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 22 Dec 2024 16:35:33 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BC=D0=B5=D0=B6=D1=83?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BD=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- src/bios/exp/BIOS_FUNC.asm | 60 +- src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 425 ++++++++++++ .../EXTENDED/IDE/{HDD_DRV.ASM => ATA_DRV.ASM} | 616 +++++++++++------- src/bios/exp/EXTENDED/IDE/CD_DRV.ASM | 403 ------------ src/bios/exp/FUNC_4x.ASM | 14 +- src/bios/exp/FUNC_5x.asm | 173 +++-- src/bios/rom/SETUP/AUTOIDE.asm | 200 +++--- src/bios/rom/SETUP/MAIN.asm | 11 +- src/bios/rom/SETUP/messages.z80 | 36 +- src/bios/shared/DEFINES.INC | 3 +- src/bios/shared/includes.inc | 1 + 12 files changed, 1068 insertions(+), 876 deletions(-) create mode 100644 src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM rename src/bios/exp/EXTENDED/IDE/{HDD_DRV.ASM => ATA_DRV.ASM} (56%) delete mode 100644 src/bios/exp/EXTENDED/IDE/CD_DRV.ASM diff --git a/Shared_Includes b/Shared_Includes index 710aa4b..ccb95c9 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 710aa4b5dd4b651bcb01ef5e86150b99dfe739ee +Subproject commit ccb95c96a5684e4f99c19f96b8fcc72f7d0b8212 diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index a7ddd37..1e0b2f5 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -18,7 +18,7 @@ DB high FN_RESERVED_5x ;#5B - Дубль. На эту функцию прыгает из основного обработчика DB high FN_RESERVED_5x ;#5C - Дубль. На эту функцию прыгает из основного обработчика DB high FN_RESERVED_5x ;#5D - Дубль. На эту функцию прыгает из основного обработчика - DB high FN_RESERVED_5x ;#5E - Дубль. На эту функцию прыгает из основного обработчика + DB high FN_ABSENT_5x ;#5E DB high DRV_LIST ;#5F - Дубль. На эту функцию прыгает из основного обработчика EDUP ELSE @@ -487,7 +487,7 @@ TAB_5xFNS: DB low FN_RESERVED_5x ;#5B - Дубль. На эту функцию прыгает из основного обработчика DB low FN_RESERVED_5x ;#5C - Дубль. На эту функцию прыгает из основного обработчика DB low FN_RESERVED_5x ;#5D - Дубль. На эту функцию прыгает из основного обработчика - DB low FN_RESERVED_5x ;#5E - Дубль. На эту функцию прыгает из основного обработчика + DB low FN_ABSENT_5x ;#5E - Дубль. На эту функцию прыгает из основного обработчика DB low DRV_LIST ;#5F - Дубль. На эту функцию прыгает из основного обработчика ; ;---------------------------------------------------------------------[] @@ -513,7 +513,7 @@ TAB_5xFNS: DB low FN_RESERVED_5x DB low FN_RESERVED_5x DB low FN_RESERVED_5x - DB low FN_RESERVED_5x + DB low FN_ABSENT_5x DB low DRV_LIST ;---------------------------------------------------------------------[] @@ -538,7 +538,7 @@ TAB_5xFNS: DB low FN_RESERVED_5x DB low FN_RESERVED_5x DB low FN_RESERVED_5x - DB low FN_RESERVED_5x + DB low FN_ABSENT_5x DB low DRV_LIST ;---------------------------------------------------------------------[] @@ -551,13 +551,13 @@ TAB_5xFNS: DB low FN_RESERVED_5x DB low CD_5x_RESET DB low CD_5x_LONG_READ - DB low FN_ABSENT_5x - DB low FN_ABSENT_5x + DB low FN_ABSENT_5x ; LONG_WRITE + DB low FN_ABSENT_5x ; VERIFY DB low CD_5x_READ - DB low FN_ABSENT_5x + DB low FN_ABSENT_5x ; WRITE DB low CD_5x_DETECT - DB low FN_ABSENT_5x - DB low FN_ABSENT_5x + DB low FN_ABSENT_5x ; GETMED + DB low FN_ABSENT_5x ; SETMED DB low DRV_VERSION DB low FN_RESERVED_5x @@ -589,7 +589,7 @@ TAB_5xFNS: DB high FN_RESERVED_5x ;#5B - Дубль. На эту функцию прыгает из основного обработчика DB high FN_RESERVED_5x ;#5C - Дубль. На эту функцию прыгает из основного обработчика DB high FN_RESERVED_5x ;#5D - Дубль. На эту функцию прыгает из основного обработчика - DB high FN_RESERVED_5x ;#5E - Extended functions + DB high FN_ABSENT_5x ;#5E - Extended functions DB high DRV_LIST ;#5F - Дубль. На эту функцию прыгает из основного обработчика ; ;---------------------------------------------------------------------[] @@ -614,7 +614,7 @@ TAB_5xFNS: DB high FN_RESERVED_5x DB high FN_RESERVED_5x DB high FN_RESERVED_5x - DB high FN_RESERVED_5x + DB high FN_ABSENT_5x DB high DRV_LIST ;---------------------------------------------------------------------[] @@ -638,7 +638,7 @@ TAB_5xFNS: DB high FN_RESERVED_5x DB high FN_RESERVED_5x DB high FN_RESERVED_5x - DB high FN_RESERVED_5x + DB high FN_ABSENT_5x DB high DRV_LIST ;---------------------------------------------------------------------[] @@ -684,34 +684,50 @@ EXP_FNS_RST18: EX (SP),HL RET -FN_5x_Parser_1: + ; HDD_5x_RESET + ; HDD_5x_LONG_READ + ; HDD_5x_LONG_WRITE + ; HDD_5x_VERIFY + ; HDD_5x_READ + ; HDD_5x_WRITE + ; HDD_5x_DETECT + ; HDD_5x_GETMED + ; HDD_5x_SETMED + ; DRV_VERSION + ; FN_RESERVED_5x + ; FN_RESERVED_5x + ; FN_RESERVED_5x + ; FN_RESERVED_5x + ; DRV_LIST + +FN_5x_Parser_1: ; HDD_5x_RESET LD C,#01 JP FN_5x_Parser -FN_5x_Parser_2: +FN_5x_Parser_2: ; HDD_5x_LONG_READ LD C,#02 JP FN_5x_Parser -FN_5x_Parser_3: +FN_5x_Parser_3: ; HDD_5x_LONG_WRITE LD C,#03 JP FN_5x_Parser -FN_5x_Parser_4: +FN_5x_Parser_4: ; HDD_5x_VERIFY LD C,#04 JP FN_5x_Parser -FN_5x_Parser_6: +FN_5x_Parser_6: ; HDD_5x_WRITE LD C,#06 JP FN_5x_Parser -FN_5x_Parser_7: +FN_5x_Parser_7: ; HDD_5x_DETECT LD C,#07 JP FN_5x_Parser -FN_5x_Parser_8: +FN_5x_Parser_8: ; HDD_5x_GETMED LD C,#08 JP FN_5x_Parser -FN_5x_Parser_9: +FN_5x_Parser_9: ; HDD_5x_SETMED LD C,#09 JP FN_5x_Parser -FN_5x_Parser_E: +FN_5x_Parser_E: ; DRV_EXTENDED LD C,#0E JP FN_5x_Parser -FN_5x_Parser_5: +FN_5x_Parser_5: ; HDD_5x_READ LD C,5 FN_5x_Parser: PUSH HL diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM new file mode 100644 index 0000000..412b12d --- /dev/null +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -0,0 +1,425 @@ +;[x] 18/12/2023. добавление/допиливание API CD-ROM (ATAPI) +;██████████████████████████████████████████████████████████████████████████ +;CD ROM DRIVE DRIVER +;--------------------------------------------------------------- +;Rev Date Name Description +;--------------------------------------------------------------- +; 02-08-2001 DNS Initial this module +;--------------------------------------------------------------- +;======================================================== +MAX_ATAPI_SEC_SIZE EQU 4096 +PKTSIZE EQU 12 +RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b +RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16 + + ASSERT ((PKTSIZE % 4) = 0), "PKTSIZE must be an even number" + +;[]================================================================[#51] +CD_5x_RESET: LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + LD B,50 +.loop: PUSH BC + CALL CD_TEST + POP BC + RET NC + EI + HALT + DJNZ .loop + RET +;[]================================================================[#51] + + +;!TODO +; atapi.pdf стр. 24 запись/чтение могут быть максимальными блоками в несколько заходов +;[]================================================================[#55] +;Function: Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;READ SECTOR(S) +CD_5x_READ: + EX AF,AF' + IN A,(SLOT3) + EX AF,AF' +;[]================================================================[#52] +;Function: Long Read Sectors +; A - Disk +; HL:IX - Sector +; DE - Address +; B - Sector counter +; A'- Memory Page Number +;Return: +; HL:IX - Sector + Sector counter +; DE - Address + (Sector counter * Size sector) +;LONG READ SECTOR(S) +CD_5x_LONG_READ: + PUSH IY + SAFE_PORTY_2 + PUSH BC + PUSH IX + PUSH HL + ; + CALL RW_ATAPI_SECTORs + ; + + ; + RET + +RW_ATAPI_SECTORs: + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; + EXX + LD C,SLOT3 + IN A,(C) + PUSH AF + LD A,SYS_PAGE + OUT (C),A + LD HL,ATAPI_CMD_PACKET.READ + LD DE,RAM_ATAPI_READ + LD BC,PKTSIZE + LDIR + EXX + ; + LD A,H + LD H,L + LD L,A + LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL + LD A,XH + LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01 + LD A,XL + LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01 + LD A,B + LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01 + ; + EX AF,AF' + OUT (SLOT3),A + ; + ; POP AF + ; OUT (SLOT3),A + LD HL,RAM_ATAPI_READ + CALL EXEC_PACKET_COMMAND + ; + POP BC + LD C,SLOT3 + OUT (C),B +;[]===========================================================[#52, #55] + + +;[]================================================================[#57] +;Function: Detect Disk +; A - Disk +;Return: CF=0 - A=Drive type +; CF=1 - drive not present, A=#02 +CD_5x_DETECT: + LD C,IDE.Device.ATAPI + AND %1011'1111 + JP DRV_DETECT +;[]================================================================[#57] + + +;[]================================================================[#5E] +;Function: Extended +; A - Disk +; B - SubFunction +;Return: +; +CD_5x_Extended: + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; + LD A,B + CP 2 + JR C,TRAY_FN + ; ... + ; ... + ;LD A,#AA + LD A,BIOS.Error.InvalidSubFunction + SCF + RET +;[]================================================================[#5E] + + +;----------------------------------------------------------------------; +TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE + LD DE,0 ; маркер того, что не нужно читать с устройства в ОЗУ + DEC A + JR Z,EXEC_PACKET_COMMAND + LD HL,ATAPI_CMD_PACKET.OPEN + JR EXEC_PACKET_COMMAND +;----------------------------------------------------------------------; + +;----------------------------------------------------------------------; +; INPUT: HL - AP paket (12bytes) +; RETURN: CF - ERROR +; !TODO CD ERRORS to INCLUDES +; #01 - RECOVERED ERROR +; #02 - NOT READY +; #03 - MEDIUM ERROR +; #04 - HARDWARE ERROR +; #05 - ILLEGAL REQUEST +; #06 - UNIT ATTETION +; #07 - DATA PROTECT +; #0B - ABORTED COMMAND +; #80 - TIME OUT +EXEC_PACKET_COMMAND: + EXX + CALL CD_WAITPRT + EXX + JR NC,.READY + ; + LD BC,IDE.Write.Command + LD A,IDE.ATAPI.Reset + OUT (C),A + ; + LD B,#80 +.pause: DJNZ .pause + ; + EXX + CALL CD_WAITPRT + EXX + RET C + ; +.READY: LD C,SLOT3 + IN B,(C) + PUSH DE + PUSH BC + ; + LD A,SYS_PAGE + OUT (C),A + LD DE,RAM_ATAPI_PK ;!FIXIT может на стеке выделять место? + LD BC,PKTSIZE + LDIR + ; + POP BC + POP DE + OUT (C),B + ; + XOR A + EXX + ;OUT (C),A + ;XOR A + LD BC,IDE.Write.Features + OUT (C),A + LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE доставать из переменной какой-нибудь + LD BC,IDE.Write.CylinderLow + OUT (C),E + LD BC,IDE.Write.CylinderHigh + OUT (C),D + LD BC,IDE.Write.Command + LD A,IDE.ATAPI.Packet + OUT (C),A + CALL CD_WAITPRT + EXX + RET C + EXX + LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest + CALL CD_WAITPRT.Custom + EXX + BIT IDE.CtrlBit.Error,A + JR NZ,.CDERROR + JR NC,.YEP_DRQ + LD A,#80 ; ERROR TIME OUT ;!HARDCODE + RET + ; +.YEP_DRQ: LD C,SLOT3 + IN B,(C) + PUSH BC + LD A,SYS_PAGE + OUT (SLOT3),A + LD HL,RAM_ATAPI_PK + LD BC,IDE.Write.Data + LD A,PKTSIZE/4 +.OUTPKT: OUTI + OUTI + OUTI + OUTI + DEC A + JR NZ,.OUTPKT + ; + POP BC + + OUT (C),B + LD B,#80 +.pause2: DJNZ .pause2 + ; +.AP_LOOP: EXX + CALL CD_WAITPRT + EXX + RET C + LD BC,IDE.Read.Status + IN A,(C) + BIT IDE.CtrlBit.Error,A + ;JR NZ,.CDERROR + RET Z + ; +.CDERROR: LD BC,IDE.Read.Error ;ERROR + IN A,(C) + RRCA + RRCA + RRCA + RRCA + AND #0F + SCF + RET + ; + ;!FIXIT + AND IDE.CtrlByte.DataRequest + RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors + EX DE,HL + LD BC,IDE.Read.CylinderLow + IN E,(C) + LD BC,IDE.Read.CylinderHigh + IN D,(C) ;TRANSFER BLOCK SIZE + LD A,D + OR E + RET Z ;BLOCK = 0 + ; + LD BC,IDE.Read.Counter + IN A,(C) + AND #02 + ;WRITE ;!FIXIT + LD BC,IDE.Read.Data + JR NZ,.FROM_CD + ; +.WR_T_CD: OUTI + OUTI + DEC DE + DEC DE + LD A,D + OR E + JR NZ,.WR_T_CD + EX DE,HL + JR .AP_LOOP + ; + ;READ +.FROM_CD: ;LD BC,IDE.Read.Data + ; проверка на переполнение адреса буфера + LD A,H + OR L + JR NZ,.read_loop + ; next page in mem block + LD HL,#C000 + IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + LD A,SYS_PAGE + OUT (SLOT3),A + LD D,high SYS_PAGE.RAM_TABLE + LD E,XH + LD A,(DE) + LD XH,A + EX AF,AF' ;<-----------< / + OUT (SLOT3),A + ; +.read_loop: INI + INI + DEC DE + DEC DE + LD A,D + OR E + JR NZ,.read_loop + ; + EX DE,HL + JR .AP_LOOP + ; + +;.NULL: LD BC,IDE.Read.Data +;.RD_N_CD: IN A,(C) +; DEC B +; IN A,(C) +; DEC B +; DEC DE +; DEC DE +; LD A,D +; OR E +; JR NZ,.RD_N_CD +; ; DE = 0 +; JR .AP_LOOP +;----------------------------------------------------------------------; + + + +;----------------------------------------------------------------------; +; D - MASK, E - PATTERN +CD_WAITPRT: LD DE,256*(IDE.CtrlByte.DataRequest) + 0 +.Custom: LD B,100 + LD HL,#0000 +.LOOP: LD A,high IDE.Read.Status + IN A,(low IDE.Read.Status) + CP #FF + JR Z,.error + AND D + CP E + ; + RET Z + ; +.NEXT_TRY: DEC L + JR NZ,.LOOP + DEC H + JR NZ,.LOOP + DJNZ .LOOP + ; + EX AF,AF' +.error: ; !FIXIT error number + SCF + RET +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP + LD DE,0 ; маркер того, что не нужно читать с устройства в ОЗУ + JP EXEC_PACKET_COMMAND +;----------------------------------------------------------------------; + + +//////////////////////////////////////////////////////////////////////// +ATAPI_CMD_PACKET: +.NOP: DUP 12 + DB #00 + EDUP +; +.OPEN: DB #1B + DB #00,#00,#00 + DB #02 + DB #00,#00,#00,#00,#00,#00,#00 +; +.CLOSE: DB #1B + DB #00,#00,#00 + DB #03 + DB #00,#00,#00,#00,#00,#00,#00 +; +.READ: DB #28,#00 + DB #00,#00,#00,#00 ; sector dword + DB #00 + DB #00,#01,#00,#00 ; counter dword + DB #00 +; +.WRITE: DB #2E,#00 + DB #00,#00,#00,#00 ; sector dword + DB #00 + DB #00,#01,#00,#00 ; counter dword + DB #00 +; +ATAPI_PACKET: +.SECTOR EQU 2 +.COUNTER EQU 7 +//////////////////////////////////////////////////////////////////////// +; +; E - Second * 10 +; PAUSE LD HL,#0000 +; PAUSE1 DEC L +; JR NZ,PAUSE1 +; DEC H +; JR NZ,PAUSE1 +; DEC E +; JR NZ,PAUSE1 +; RET +; \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM similarity index 56% rename from src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM rename to src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index 6af223d..449dc1f 100644 --- a/src/bios/exp/EXTENDED/IDE/HDD_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -168,145 +168,157 @@ HDD_5x_READ: ; A - Disk ; HL:IX - Sector ; DE - Address -; B - Sector counter +; B - Sector counter, 0 = 256 ; A'- Memory Page Number ;Return: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) +; A' - Last mem page in RAM Block used for readed data ;LONG READ SECTOR(S) HDD_5x_LONG_READ: - PUSH IY - - SAFE_PORTY_2 - - PUSH BC - PUSH IX - PUSH HL - CALL RDS000 - EX DE,HL - JR C,HERRRD0 - LD A,XH - EX AF,AF' - POP HL - POP IX - POP BC - XOR A - CP B - LD C,B - LD B,A - JR NZ,RNOT256 - INC B - ADD IX,BC - LD B,C - ADC HL,BC - ;EX AF,AF' ;!TEST 21/11/23 - JR RST8RDR - -RNOT256 ADD IX,BC - LD C,B - ADC HL,BC - ;EX AF,AF' ;!TEST 21/11/23 - JR RST8RDR - -HERRRD0 LD B,A - LD C,XL - LD A,XH - EX AF,AF' - POP HL - POP IX - PUSH BC - LD B,0 - ADD IX,BC - LD C,B - ADC HL,BC - POP BC - POP AF - SUB C - LD C,A - LD A,B - LD B,C - ;R03 - SCF - ;EX AF,AF' ;!TEST 21/11/23 + PUSH IY + SAFE_PORTY_2 + PUSH BC + PUSH IX + PUSH HL + ;IF OPTIMIZE_RW_PROCEDURE + EX AF,AF' + AND A ;read + EX AF,AF' + CALL RW_ATA_SECTORs + ;ELSE + ;CALL READ_ATA_SECTORs + ;ENDIF + ; + EX DE,HL + JR C,.error + LD A,XH ; current page in mem block for SLOT3 + EX AF,AF' + ; + POP HL + POP IX + POP BC + XOR A + CP B + LD C,B + LD B,A + JR Z,.B_256_sectors + ; + ADD IX,BC + LD C,B +.pre_exit: ADC HL,BC +.exit: RESTORE_PORTY + POP IY + RET + ; +.B_256_sectors: INC B + ADD IX,BC + LD B,C + JR .pre_exit + ; +.error: LD B,A ; A - номер ошибки + LD C,XL + LD A,XH ; current page in mem block for SLOT3 + EX AF,AF' + POP HL + POP IX + PUSH BC + LD B,0 + ADD IX,BC + LD C,B + ADC HL,BC + POP BC + POP AF + SUB C + LD C,A + LD A,B + LD B,C + SCF ;R03 + JR .exit +; +/* + IFN OPTIMIZE_RW_PROCEDURE +READ_ATA_SECTORs: + LD C,IDE.Device.HDD + CALL SELECT_DRIVE + RET C + EXX + ;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 + CALL WAITPRT + EXX + RET C + EX AF,AF' + PUSH AF ; memory page number + PUSH DE + CALL PRESET + POP HL + POP AF ; memory page number + LD XL,0 + LD XH,A + LD BC,IDE.Write.Command + LD A,IDE.ATA.ReadSectorsWithRetry + OUT (C),A + ;SAVE HL! + EXX + LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0 + CALL WAITPRT.custom + EXX + RET C + ;DI ;R01 REMOVED "DI" +.big_loop: IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + LD A,XH + OUT (SLOT3),A ; -RST8RDR: RESTORE_PORTY - POP IY - ;EX AF,AF' ;!TEST 21/11/23 - RET - - ;READ SECTOR(S) -RDS000: LD C,IDE.Device.HDD - CALL SELECT_DRIVE - RET C - EXX - LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 - CALL WAITPRT - EXX - RET C - EX AF,AF' - PUSH AF - PUSH DE - CALL PRESET - POP HL - POP AF - LD XL,0 - LD XH,A - LD BC,IDE.Write.Command - LD A,IDE.ATA.ReadSectorsWithRetry - OUT (C),A -;????? -;SAVE HL! -RDS002: EXX - LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0 - CALL WAITPRT - EXX - RET C - ;NOP ;R01 REMOVED "DI" - IN A,(SLOT3) - EX AF,AF' - LD A,XH - OUT (SLOT3),A - LD BC,IDE.Read.Data - -RDS003: DUP 16 - INI - EDUP - JP NZ,RDS003 -RDS004: DUP 16 - INI - EDUP - JP NZ,RDS004 - - EX AF,AF' - OUT (SLOT3),A -; - LD A,H - OR L - JR NZ,.W44 - LD HL,#C000 - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD D,#C2 - LD E,XH - LD A,(DE) - LD XH,A - EX AF,AF' - OUT (SLOT3),A + ; READ SECTOR 512 bytes ;!HARDCODE sector size + LD BC,IDE.Read.Data +.loop_256_1: DUP 16 + INI + EDUP + JP NZ,.loop_256_1 +.loop_256_2: DUP 16 + INI + EDUP + JP NZ,.loop_256_2 + ; ; ; ; ; ; -.W44: INC XL ;INC LOADED SECTORS - EXX - LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 - CALL WAITPRT - EXX - RET C - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.ControlBit.DataRequest,A - JP NZ,RDS002 - XOR A - RET + EX AF,AF' ;<-----------< / + OUT (SLOT3),A + ; + LD A,H + OR L + JR NZ,.W44 + ; next page in mem block + LD HL,#C000 + IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + LD A,SYS_PAGE + OUT (SLOT3),A + LD D,high SYS_PAGE.RAM_TABLE + LD E,XH + LD A,(DE) + LD XH,A + EX AF,AF' ;<-----------< / + OUT (SLOT3),A + ; +.W44: INC XL ;INC LOADED SECTORS + EXX + ;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 + CALL WAITPRT + EXX + RET C + LD BC,IDE.Read.Status + IN A,(C) + BIT IDE.CtrlBit.DataRequest,A + ; + RET Z + JP .big_loop + ;JP NZ,.big_loop + ;XOR A + ;RET + ; + ENDIF +*/ ;[]===========================================================[#52, #55] @@ -343,7 +355,15 @@ HDD_5x_LONG_WRITE: PUSH IX PUSH HL PUSH BC - CALL WRS000 + ;IF OPTIMIZE_RW_PROCEDURE + EX AF,AF' + SCF ;write + EX AF,AF' + CALL RW_ATA_SECTORs + ;ELSE + ;CALL WRITE_ATA_SECTORs + ;ENDIF + ; EX DE,HL JP C,HERRWR0 LD A,XH @@ -395,97 +415,195 @@ RST8WRR: RESTORE_PORTY ;EX AF,AF' RET -;WRITE SECTOR(S) -WRS000: - LD C,IDE.Device.HDD - CALL SELECT_DRIVE - RET C - EXX - LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 - CALL WAITPRT - EXX - RET C - EX AF,AF' - PUSH AF - PUSH DE - ;[x] CMOS Write Protect Disabled - IF HDDwriteProtect - PUSH BC - LD D,CMOS_CELL.Options - CALL CMOS_RD - POP BC - AND 1 - JR Z,NO_WriteProtect - POP HL - POP AF - EX AF,AF' - LD XL,0 - LD A,BIOS.Error.WriteProtect - SCF - RET - ENDIF -NO_WriteProtect: - CALL PRESET - POP HL - POP AF - LD XL,0 - LD XH,A - LD BC,IDE.Write.Command - LD A,IDE.ATA.WriteSectorsWithRetry - OUT (C),A -;SAVE HL! -WRS002: EXX - LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0 - CALL WAITPRT - EXX - RET C +;███████████████████████████████████████████████████████████████████████████████████████████████████████; +/* +temp1=0; +bp 20e3,{b@20e3==cd},{temp1=1; g}; +bp 213b,{b@213b==cd},{temp1=2; g}; +bp 21B1,{b@21b1==01 and temp1==2}; +bp 2229,{b@2229==01 and temp1==1}; +*/ +; IF OPTIMIZE_RW_PROCEDURE +; CF=1 - write, CF=0 - read +RW_ATA_SECTORs: LD C,IDE.Device.HDD + CALL SELECT_DRIVE + RET C + EXX + ;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 + CALL WAITPRT + EXX + RET C + EX AF,AF' + PUSH AF ; memory page number + PUSH DE + CALL PRESET + POP HL + POP AF ; memory page number + LD XL,0 + LD XH,A + LD BC,IDE.Write.Command + LD A,IDE.ATA.WriteSectorsWithRetry + JR C,.set_command + ; + LD A,IDE.ATA.ReadSectorsWithRetry +.set_command: OUT (C),A + ;SAVE HL! + EX AF,AF' + EXX + LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest + CALL WAITPRT.custom + EXX + RET C + ;DI ;R01 REMOVED "DI" +.big_loop: IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + LD A,XH + OUT (SLOT3),A + JR C,.write_sector + ; + ; READ SECTOR 512 bytes ;!HARDCODE sector size + LD BC,IDE.Read.Data +.loop_256_1: DUP 16 + INI + EDUP + JP NZ,.loop_256_1 +.loop_256_2: DUP 16 + INI + EDUP + JP NZ,.loop_256_2 + EX AF,AF' + ; ; ; ; ; + ; CF=0 +.return_rw: EX AF,AF' ;<-----------< / + OUT (SLOT3),A + ; + LD A,H + OR L + JR NZ,.W44 + ; next page in mem block + LD HL,#C000 + IN A,(SLOT3) + EX AF,AF' ;>-----------> \ + LD A,SYS_PAGE + OUT (SLOT3),A + LD D,high SYS_PAGE.RAM_TABLE + LD E,XH + LD A,(DE) + LD XH,A + EX AF,AF' ;<-----------< / + OUT (SLOT3),A + ; +.W44: INC XL ;INC LOADED SECTORS + EXX + CALL WAITPRT + EXX + RET C + LD BC,IDE.Read.Status + IN A,(C) + BIT IDE.CtrlBit.DataRequest,A + ; + RET Z + JP .big_loop + ;JP NZ,.big_loop + ;XOR A + ;RET + ; + ; +.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size + LD BC,IDE.Write.Data + LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size +.loop: DUP WRITE_OUTI_DUPs + OUTI + EDUP + DEC D + JR NZ,.loop + SCF + JP .return_rw + ; ; ; ; ; - ;DI - IN A,(SLOT3) - EX AF,AF' - LD A,XH - OUT (SLOT3),A - LD BC,IDE.Write.Data - ;LD D,#20 - LD D,512/WRITE_OUTI_DUPs -WRS003: - DUP WRITE_OUTI_DUPs - OUTI - EDUP - DEC D - JR NZ,WRS003 - - EX AF,AF' - OUT (SLOT3),A - //EI -; - LD A,H - OR L - JR NZ,.W33 - LD HL,#C000 - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD D,#C2 - LD E,XH - LD A,(DE) - LD XH,A - EX AF,AF' - OUT (SLOT3),A -.W33: INC XL ;INC SAVED SECTORS - EXX - LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 - CALL WAITPRT - EXX - RET C - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.ControlBit.DataRequest,A - JP NZ,WRS002 - XOR A - RET + ;ENDIF +;███████████████████████████████████████████████████████████████████████████████████████████████████████; +/* + IFN OPTIMIZE_RW_PROCEDURE +WRITE_ATA_SECTORs: + LD C,IDE.Device.HDD + CALL SELECT_DRIVE + RET C + EXX + ;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 + CALL WAITPRT + EXX + RET C + EX AF,AF' + PUSH AF + PUSH DE + CALL PRESET + POP HL + POP AF + LD XL,0 + LD XH,A + LD BC,IDE.Write.Command + LD A,IDE.ATA.WriteSectorsWithRetry + OUT (C),A + ; SAVE HL?! + EXX + LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0 + CALL WAITPRT.custom + EXX + RET C + ; +.big_loop: IN A,(SLOT3) + EX AF,AF' + LD A,XH + OUT (SLOT3),A + ; WRITE SECTOR 512 bytes ;!HARDCODE sector size + LD BC,IDE.Write.Data + LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size +.loop: DUP WRITE_OUTI_DUPs + OUTI + EDUP + DEC D + JR NZ,.loop + ; ; ; ; ; + EX AF,AF' + OUT (SLOT3),A + ;EI + ; + LD A,H + OR L + JR NZ,.W33 + ; next page in mem block + LD HL,#C000 + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD D,high SYS_PAGE.RAM_TABLE + LD E,XH + LD A,(DE) + LD XH,A + EX AF,AF' + OUT (SLOT3),A + ; +.W33: INC XL ;INC SAVED SECTORS + EXX + ;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 + CALL WAITPRT + EXX + RET C + LD BC,IDE.Read.Status + IN A,(C) + BIT IDE.CtrlBit.DataRequest,A + ; + RET Z + JP .big_loop + ;JP NZ,.big_loop + ;XOR A + ;RET + ; + ENDIF +*/ ;[]===========================================================[#53, #56] @@ -513,7 +631,6 @@ VRS000: LD C,IDE.Device.HDD CALL SELECT_DRIVE RET C EXX - LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 CALL WAITPRT EXX RET C @@ -525,16 +642,15 @@ VRS000: LD C,IDE.Device.HDD OUT (C),A VRS002: LD BC,IDE.Read.Status IN A,(C) - BIT IDE.ControlBit.Error,A + BIT IDE.CtrlBit.Error,A JR Z,VRS003 SCF RET -VRS003: LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 - CALL WAITPRT +VRS003: CALL WAITPRT RET C XOR A RET - + LD BC,IDE.Read.Counter ; HL:IX - LBA SECTOR ; B - SECTOR COUNTER PRESET: LD A,B @@ -624,30 +740,30 @@ CHS005: INC A ;----------------------------------------------------------------------; ; D - MASK ; E - PATTERN -WAITPRT: - LD BC,IDE.Read.Status - LD HL,#0000 ; задержка ;!HARDCODE - ; -.loop: PUSH HL -; -.loop2: IN A,(C) - AND D - CP E - JR Z,.ok - DEC HL - LD A,L - OR H - JP NZ,.loop2 - ; - POP HL - DEC L - JR NZ,.loop - ; -.error: LD A,BIOS.Error.NotReady - SCF - RET -.ok: POP HL - RET +WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE.CtrlByte.Ready +.custom: LD BC,IDE.Read.Status + LD HL,#0000 ; задержка ;!HARDCODE + ; +.loop: PUSH HL +; +.loop2: IN A,(C) + AND D + CP E + JR Z,.ok + DEC HL + LD A,L + OR H + JP NZ,.loop2 + ; + POP HL + DEC L + JR NZ,.loop + ; +.error: LD A,BIOS.Error.NotReady + SCF + RET +.ok: POP HL + RET ;----------------------------------------------------------------------; diff --git a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM deleted file mode 100644 index f0a8c9c..0000000 --- a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM +++ /dev/null @@ -1,403 +0,0 @@ -;[x] 18/12/2023. добавление/допиливание API CD-ROM (ATAPI) -;██████████████████████████████████████████████████████████████████████████ -;CD ROM DRIVE DRIVER -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -; 02-08-2001 DNS Initial this module -;--------------------------------------------------------------- -;======================================================== -SIZESEC EQU #0800 -PKTSIZE EQU 12 -RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b -RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16 - - ASSERT ((PKTSIZE % 2) = 0), "PKTSIZE must be an even number" - -;[]================================================================[#51] -CD_5x_RESET: - LD C,IDE.Device.CDROM - CALL SELECT_DRIVE - RET C - LD B,50 -.loop: - PUSH BC - CALL CD_TEST - POP BC - RET NC - EI - HALT - DJNZ .loop - RET -;[]================================================================[#51] - - -;[]================================================================[#55] -;Function: Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;READ SECTOR(S) -CD_5x_READ: - EX AF,AF' - IN A,(SLOT3) - EX AF,AF' -;[]================================================================[#52] -;Function: Long Read Sectors -; A - Disk -; HL:IX - Sector -; DE - Address -; B - Sector counter -; A'- Memory Page Number -;Return: -; HL:IX - Sector + Sector counter -; DE - Address + (Sector counter * Size sector) -;LONG READ SECTOR(S) -CD_5x_LONG_READ: - LD C,IDE.Device.CDROM - CALL SELECT_DRIVE - RET C - ; - EXX - LD C,SLOT3 - IN A,(C) - PUSH AF - LD A,SYS_PAGE - OUT (C),A - LD HL,ATAPI_CMD_PACKET.READ - LD DE,RAM_ATAPI_READ - LD BC,PKTSIZE - LDIR - EXX - - LD A,H - LD H,L - LD L,A - LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL - LD A,XH - LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01 - LD A,XL - LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01 - LD A,B - LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01 - ; - EX AF,AF' - OUT (SLOT3),A - ; - ; POP AF - ; OUT (SLOT3),A - LD HL,RAM_ATAPI_READ - CALL AP_COM - ; - POP BC - LD C,SLOT3 - OUT (C),B - ; - RET -;[]===========================================================[#52, #55] - - -;[]================================================================[#57] -;Function: Detect Disk -; A - Disk -;Return: CF=0 - A=Drive type -; CF=1 - drive not present, A=#02 -CD_5x_DETECT: - LD C,IDE.Device.CDROM - AND %1011'1111 - JP DRV_DETECT -;[]================================================================[#57] - - -;[]================================================================[#5E] -;Function: Extended -; A - Disk -; B - SubFunction -;Return: -; -CD_5x_Extended: - LD C,IDE.Device.CDROM - CALL SELECT_DRIVE - RET C - ; - LD A,B - CP 2 - JR C,TRAY_FN - ; ... - ; ... - ;LD A,#AA - LD A,BIOS.Error.InvalidSubFunction - SCF - RET -;[]================================================================[#5E] - - -;----------------------------------------------------------------------; -TRAY_FN: - LD DE,0 ;!FIXIT нужно ли? - LD HL,ATAPI_CMD_PACKET.CLOSE - DEC A - JR Z,AP_COM - LD HL,ATAPI_CMD_PACKET.OPEN - JR AP_COM -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -; INPUT: HL - AP paket (12bytes) -; RETURN: CF - ERROR -; !TODO CD ERRORS to INCLUDES -; #01 - RECOVERED ERROR -; #02 - NOT READY -; #03 - MEDIUM ERROR -; #04 - HARDWARE ERROR -; #05 - ILLEGAL REQUEST -; #06 - UNIT ATTETION -; #07 - DATA PROTECT -; #0B - ABORTED COMMAND -; #80 - TIME OUT -AP_COM: EXX - ;LD DE,#8000 - CALL CD_WAITPRT - EXX - JR NC,.READY - LD BC,IDE.Write.Command - LD A,IDE.ATAPI.Reset - OUT (C),A - - LD B,#80 -.pause: DJNZ .pause - - EXX - ;LD DE,#8000 - CALL CD_WAITPRT - EXX - RET C -.READY: - LD C,SLOT3 - IN B,(C) - - PUSH DE - PUSH BC - - LD A,SYS_PAGE - OUT (C),A - LD DE,RAM_ATAPI_PK ;!FIXIT может на стеке выделять место? - LD BC,PKTSIZE - LDIR - - POP BC - POP DE - OUT (C),B - - XOR A - EXX - ;OUT (C),A - ;XOR A - LD BC,IDE.Write.Features - OUT (C),A - LD DE,SIZESEC ;SIZE BLOCK ;!HARDCODE доставать из переменной какой-нибудь - LD BC,IDE.Write.CylinderLow - OUT (C),E - LD BC,IDE.Write.CylinderHigh - OUT (C),D - LD BC,IDE.Write.Command - LD A,IDE.ATAPI.Packet - OUT (C),A - ;LD DE,#8000 - CALL CD_WAITPRT - EXX - RET C - EXX - LD DE,#0908 - CALL CD_WAITPRT.Custom - EXX - BIT IDE.ControlBit.Error,A - JR NZ,.CDERROR - JR NC,.YEP_DRQ - LD A,#80 ; ERROR TIME OUT ;!HARDCODE - RET - ; -.YEP_DRQ: - LD C,SLOT3 - IN B,(C) - PUSH BC - LD A,SYS_PAGE - OUT (SLOT3),A - LD HL,RAM_ATAPI_PK - LD BC,IDE.Write.Data - LD A,PKTSIZE/2 -.OUTPKT: - OUTI - OUTI - DEC A - JR NZ,.OUTPKT - ; - POP BC - OUT (C),B - ; - LD B,#80 -.pause2: DJNZ .pause2 - ; -.AP_LOOP: - EXX - ;LD DE,#8000 - CALL CD_WAITPRT - EXX - RET C - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.ControlBit.Error,A - JR Z,.NO_ERR -.CDERROR: - LD BC,IDE.Read.Error ;ERROR - IN A,(C) - RRCA - RRCA - RRCA - RRCA - AND #0F - SCF - RET -.NO_ERR: - ;BIT IDE.ControlBit.DataRequest,A - AND IDE.ControlByte.DataRequest - LD A,BIOS.Error.NoErrors - RET Z ;NO DATA REQUEST A = 0: BIOS.Error.NoErrors - EX DE,HL - LD BC,IDE.Read.CylinderLow - IN E,(C) - LD BC,IDE.Read.CylinderHigh - IN D,(C) ;TRANSFER BLOCK SIZE - LD A,D - OR E - RET Z ;BLOCK = 0 - LD BC,IDE.Read.Counter - IN A,(C) - AND #02 - JR NZ,.FROM_CD -;.TO_CD: - LD BC,IDE.Read.Data -.WR_T_CD: - OUTI - OUTI - DEC DE - DEC DE - LD A,D - OR E - JR NZ,.WR_T_CD - EX DE,HL - JR .AP_LOOP - ; -.FROM_CD: - ; проверка на переполнение адреса буфера - LD A,H - OR L - JR Z,.NULL - LD BC,IDE.Read.Data -.RD_F_CD: - INI - INI - DEC DE - DEC DE - LD A,D - OR E - JR NZ,.RD_F_CD - EX DE,HL - JR .AP_LOOP - ; -.NULL: LD BC,IDE.Read.Data -.RD_N_CD: - IN A,(C) - DEC B - IN A,(C) - DEC B - DEC DE - DEC DE - LD A,D - OR E - JR NZ,.RD_N_CD - ; DE = 0 - JR .AP_LOOP -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -CD_WAITPRT: LD DE,#8000 ; D - MASK, E - PATTERN -.Custom: LD BC,IDE.Read.Status - LD A,100 - LD HL,#0000 -.LOOP_A: EX AF,AF' -.LOOP_HL: IN A,(C) - CP #FF - JR Z,.error - AND D - CP E - ; - ; JR NZ,.NEXT_TRY - ; AND A - ; RET - RET Z - ; -.NEXT_TRY: DEC L - JR NZ,.LOOP_HL - DEC H - JR NZ,.LOOP_HL - EX AF,AF' - DEC A - JR NZ,.LOOP_A - ; - EX AF,AF' -.error: SCF - RET -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; -CD_TEST LD HL,ATAPI_CMD_PACKET.NOP - LD DE,0 ;!FIXIT нужно ли? - JP AP_COM -;----------------------------------------------------------------------; - - -//////////////////////////////////////////////////////////////////////// -ATAPI_CMD_PACKET: -.NOP: DUP 12 - DB #00 - EDUP -; -.OPEN: DB #1B - DB #00,#00,#00 - DB #02 - DB #00,#00,#00,#00,#00,#00,#00 -; -.CLOSE: DB #1B - DB #00,#00,#00 - DB #03 - DB #00,#00,#00,#00,#00,#00,#00 -; -.READ: DB #28,#00 - DB #00,#00,#00,#00 ; sector dword - DB #00 - DB #00,#01,#00,#00 ; counter dword - DB #00 -; -ATAPI_PACKET: -.SECTOR EQU 2 -.COUNTER EQU 7 -//////////////////////////////////////////////////////////////////////// -; -; E - Second * 10 -; PAUSE LD HL,#0000 -; PAUSE1 DEC L -; JR NZ,PAUSE1 -; DEC H -; JR NZ,PAUSE1 -; DEC E -; JR NZ,PAUSE1 -; RET -; \ No newline at end of file diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index e726ccc..32cad95 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -2,7 +2,7 @@ MACRO WAIT_HDD LD BC,IDE.Read.Status .loop: IN A,(C) - BIT IDE.ControlBit.Busy,A + BIT IDE.CtrlBit.Busy,A JR NZ,.loop ENDM ;______________________________________________________________________: @@ -279,8 +279,8 @@ FN_HDD_READ: LD A,IDE.ATA.ReadSectorsWithRetry OUT (C),A .L2: WAIT_HDD - ;BIT IDE.ControlBit.DataRequest,A - AND IDE.ControlByte.DataRequest + ;BIT IDE.CtrlBit.DataRequest,A + AND IDE.CtrlByte.DataRequest JR Z,.RET_PortY ; ;HD_READ_CONT @@ -354,7 +354,7 @@ FN_HDD_WRITE: HD_WR_L2: WAIT_HDD - BIT IDE.ControlBit.DataRequest,A + BIT IDE.CtrlBit.DataRequest,A JR Z,HD_RET LD BC,IDE.Write.Data @@ -390,7 +390,7 @@ FN_HDD_RECAL: LD A,IDE.ATA.ExecuteDeviceDiagnostic CALL HD_CMD_EXE ;AND A - CP IDE.ControlByte.Error + CP IDE.CtrlByte.Error RET Z LD BC,IDE.Read.Error IN A,(C) @@ -627,7 +627,7 @@ FN_HDD_INIT: LD A,IDE.ATA.IdentifyDevice ;!FIXIT переделать OUT (C),A WAIT_HDD - AND IDE.ControlByte.DataRequest + AND IDE.CtrlByte.DataRequest ;JR NZ,.L2 SCF RET Z @@ -705,7 +705,7 @@ HD_WAIT: LD DE,0 .loop: LD BC,IDE.Read.Status IN A,(C) - AND IDE.ControlByte.Busy + AND IDE.CtrlByte.Busy JR Z,.EXIT DEC DE LD A,D diff --git a/src/bios/exp/FUNC_5x.asm b/src/bios/exp/FUNC_5x.asm index a58032b..d1cb0ed 100644 --- a/src/bios/exp/FUNC_5x.asm +++ b/src/bios/exp/FUNC_5x.asm @@ -33,94 +33,131 @@ DRV_LIST: LD (IX+1),#00 ; DB 0 ;FDD COUNT LD (IX+2),#00 ; DB 0 ;HDD COUNT LD (IX+3),#00 ; DB 0 ;CDROM COUNT -; ; BLOCK 28,0 ;RESERVED ;!TODO сделать RAMDRIVE тут? + ; ; BLOCK 13,0 ;RESERVED ;!TODO сделать RAMDRIVE тут? LD (IX+4),#00 ; END FLAG ;Calculating FDD devices + LD A,#FF LD HL,FDD_INI_TABLE.FDD_0 - INC (IX+1) - LD B,8 - LD A,#FF -.TFD0: - CP (HL) - INC HL - JR NZ,.YYYFD0 - DJNZ .TFD0 - DEC (IX+1) -.YYYFD0: + CALL .CHECK_FDD LD HL,FDD_INI_TABLE.FDD_1 - INC (IX+1) - LD B,8 - LD A,#FF -.TFD1: - CP (HL) - INC HL - JR NZ,.YYYFD1 - DJNZ .TFD1 - DEC (IX+1) -.YYYFD1: -;Calculating IDE devices + CALL .CHECK_FDD + +; INC (IX+1) +; LD B,8 +; LD A,#FF +; .TFD0: +; CP (HL) +; INC HL +; JR NZ,.YYYFD0 +; DJNZ .TFD0 +; DEC (IX+1) +; .YYYFD0: +; LD HL,FDD_INI_TABLE.FDD_1 +; INC (IX+1) +; LD B,8 +; LD A,#FF +; .TFD1: +; CP (HL) +; INC HL +; JR NZ,.YYYFD1 +; DJNZ .TFD1 +; DEC (IX+1) +; .YYYFD1: + + ; A=#FF +;Calculating IDE devices IDE TYPE 1-HDD, 2-CD-ROM LD IY,IDE.INIT_TBL_IDE0 + LD DE,IDE.HDD_INIT_TABLE + LD B,4 ; !HARDCODE кол-во IDE устройств +.CHECK_IDE: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM CP #FF - JR Z,.ABSIDE0 + JR Z,.NEXT_IDE CP IDE.Device.HDD - JR NZ,.NOT_HD0 + JR NZ,.NOT_HDD INC (IX+2) -.NOT_HD0: - CP IDE.Device.CDROM - JR NZ,.NOT_CD0 - INC (IX+3) -.NOT_CD0: -.ABSIDE0: - LD IY,IDE.INIT_TBL_IDE1 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,.ABSIDE1 - CP IDE.Device.HDD - JR NZ,.NOT_HD1 - INC (IX+2) -.NOT_HD1: - CP IDE.Device.CDROM - JR NZ,.NOT_CD1 - INC (IX+3) -.NOT_CD1: -.ABSIDE1: - LD IY,IDE.INIT_TBL_IDE2 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,.ABSIDE2 - CP IDE.Device.HDD - JR NZ,.NOT_HD2 - INC (IX+2) -.NOT_HD2: - CP IDE.Device.CDROM - JR NZ,.NOT_CD2 - INC (IX+3) -.NOT_CD2: -.ABSIDE2: - LD IY,IDE.INIT_TBL_IDE3 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM - CP #FF - JR Z,.check_exit - CP IDE.Device.HDD - JR NZ,.NOT_HD3 - INC (IX+2) -.NOT_HD3: - CP IDE.Device.CDROM - JR NZ,.check_exit +.NOT_HDD: + CP IDE.Device.ATAPI + JR NZ,.NEXT_IDE INC (IX+3) +.NEXT_IDE: + ADD IY,DE + DJNZ .CHECK_IDE + +; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM +; CP #FF +; JR Z,.ABSIDE0 +; CP IDE.Device.HDD +; JR NZ,.NOT_HD0 +; INC (IX+2) +; .NOT_HD0: +; CP IDE.Device.ATAPI +; JR NZ,.NOT_CD0 +; INC (IX+3) +; .NOT_CD0: +; .ABSIDE0: +; LD IY,IDE.INIT_TBL_IDE1 +; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM +; CP #FF +; JR Z,.ABSIDE1 +; CP IDE.Device.HDD +; JR NZ,.NOT_HD1 +; INC (IX+2) +; .NOT_HD1: +; CP IDE.Device.ATAPI +; JR NZ,.NOT_CD1 +; INC (IX+3) +; .NOT_CD1: +; .ABSIDE1: +; LD IY,IDE.INIT_TBL_IDE2 +; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM +; CP #FF +; JR Z,.ABSIDE2 +; CP IDE.Device.HDD +; JR NZ,.NOT_HD2 +; INC (IX+2) +; .NOT_HD2: +; CP IDE.Device.ATAPI +; JR NZ,.NOT_CD2 +; INC (IX+3) +; .NOT_CD2: +; .ABSIDE2: +; LD IY,IDE.INIT_TBL_IDE3 +; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM +; CP #FF +; JR Z,.check_exit +; CP IDE.Device.HDD +; JR NZ,.NOT_HD3 +; INC (IX+2) +; .NOT_HD3: +; CP IDE.Device.ATAPI +; JR NZ,.check_exit +; INC (IX+3) + .check_exit: POP IY POP AF OUT (SLOT3),A XOR A RET + ; +; A=#FF +.CHECK_FDD: + INC (IX+1) + LD B,8 +.TFD0: CP (HL) + INC HL + RET NZ + DJNZ .TFD0 + DEC (IX+1) + RET + ; INCLUDE 'EXTENDED/FDD_DRIVER_2.asm' INCLUDE 'EXTENDED/RAM_DISK_DRIVER_1.asm' - INCLUDE 'EXTENDED/IDE/HDD_DRV.asm' - INCLUDE 'EXTENDED/IDE/CD_DRV.asm' + INCLUDE 'EXTENDED/IDE/ATA_DRV.asm' + INCLUDE 'EXTENDED/IDE/ATAPI_DRV.asm' INCLUDE 'EXTENDED/IDE/SHARED.asm' diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index 68477a6..334b55d 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -290,7 +290,7 @@ AUTODETECTING: CALL DETECTORS.CheckChanel ; enter point for ATAPI in setup .Its_ATAPI: CALL DETECTORS.IdentPDevChk JR C,.IDE_ABSENT - LD A,IDE.Device.CDROM + LD A,IDE.Device.ATAPI LD (IDEDEV),A JR .get @@ -331,8 +331,8 @@ SETUP_FROM_CMOS: JR Z,.step1 ; LD IX,SEC_SLAVE_CMOS_T -.step1: LD HL,TEMP - LD DE,TEMP+1 +.step1: LD HL,IDENTIFY_DEVICE_BUFFER + LD DE,IDENTIFY_DEVICE_BUFFER+1 LD BC,511 LD (HL),0 LDIR @@ -346,7 +346,7 @@ SETUP_FROM_CMOS: ; .step2: LD A,(IX+2) ;M_HEAD CALL READCMS - LD (TEMP+3*2),A ; !TODO сделать через структуру. HEADS PER TRACK + LD (IDENTIFY_DEVICE_BUFFER.NumHeads),A ; LD A,(IX+1) ;M_CYLH CALL READCMS @@ -356,92 +356,90 @@ SETUP_FROM_CMOS: CALL READCMS POP HL LD L,A - LD (TEMP+1*2),HL ; !TODO сделать через структуру. CYLINDERS + LD (IDENTIFY_DEVICE_BUFFER.NumCylinders),HL ; LD A,(IX+3) ;M_SECT CALL READCMS - LD (TEMP+6*2),A ; !TODO сделать через структуру. SECTOR PER TRACK + LD (IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A ; LD A,IDE.Device.HDD LD (IDEDEV),A - CALL IDESPEC - RET + ; CALL IDESPEC + ; RET /////////////////////////////////////////////////////////////////////[^] - - /////////////////////////////////////////////////////////////////////[v] -IDESPEC: - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(IDEDEV) - LD (IY+IDE.HDD_INIT_TABLE.DriveType),A - CP IDE.Device.CDROM - JP Z,.FOR_CDR - ; - LD BC,IDE.Read.Control - IN A,(C) - AND #F0 - LD B,A - LD A,(TEMP+#06) ; !TODO сделать через структуру. HEADS PER TRACK - LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),A - DEC A - AND #0F - OR B - LD B,A - LD A,(TEMP+#63) ; !TODO сделать через структуру. LBA/NON-LBA bit 1 (FROM ZERO!) - BIT 1,A - JR Z,.NONLBA - ; - SET 6,B -.NONLBA: LD A,B - LD BC,IDE.Write.DeviceHead - OUT (C),A - AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask - LD HL,ICHANEL - OR (HL) - LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A - LD HL,(TEMP+#02) ; !TODO сделать через структуру. CYLINDERS - LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L - LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H - LD A,(TEMP+#0C) ; !TODO сделать через структуру. SECTOR PER TRACK - LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A - IF IDE_Optimization - LD B,high IDE.Write.Counter - ELSE - LD BC,IDE.Write.Counter - ENDIF - OUT (C),A - LD A,IDE.ATA.InitializeDeviceParameters - CALL IDE_CMD - LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) ; Sector per track - LD B,0 - LD H,B - LD L,B - LD A,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) ; Head per HDD - -.loop: ADD HL,BC - DEC A - JR NZ,.loop - - LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L - LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H -.END: ; [x] save hdd parameters to cmos for "setup" in settings - LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM - ; - EX AF,AF' - OUT (SLOT3),A - AND A - RET - ; -.FOR_CDR: LD BC,IDE.Read.Control - IN A,(C) - AND #F0 - LD HL,ICHANEL - OR (HL) - LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A - JR IDESPEC.END +IDESPEC: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(IDEDEV) + LD (IY+IDE.HDD_INIT_TABLE.DriveType),A + CP IDE.Device.ATAPI + JP Z,.FOR_ATAPI + ; + LD BC,IDE.Read.Control + IN A,(C) + AND #F0 + LD B,A + LD A,(IDENTIFY_DEVICE_BUFFER.NumHeads) + LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),A + DEC A + AND #0F + OR B + LD B,A + LD A,(IDENTIFY_DEVICE_BUFFER.Capabilities_high) + ;BIT 1,A + AND %0000'0010 + JR Z,.NONLBA + ; + SET 6,B +.NONLBA: LD A,B + LD BC,IDE.Write.DeviceHead + OUT (C),A + AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask + LD HL,ICHANEL + OR (HL) + LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A + LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders) + LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L + LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H + LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack) + LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A + IF IDE_Optimization + LD B,high IDE.Write.Counter + ELSE + LD BC,IDE.Write.Counter + ENDIF + OUT (C),A + LD A,IDE.ATA.InitializeDeviceParameters + CALL IDE_CMD + LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) ; Sector per track + LD B,0 + LD H,B + LD L,B + LD A,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) ; Head per HDD + ; +.loop: ADD HL,BC + DEC A + JR NZ,.loop + ; + LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L + LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H +.END: ; [x] save hdd parameters to cmos for "setup" in settings + LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM + ; + EX AF,AF' + OUT (SLOT3),A + AND A + RET + ; +.FOR_ATAPI: LD BC,IDE.Read.Control + IN A,(C) + AND #F0 + LD HL,ICHANEL + OR (HL) + LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A + JR IDESPEC.END /////////////////////////////////////////////////////////////////////[^] @@ -449,20 +447,20 @@ IDESPEC: IDE_CMD: PUSH AF LD HL,PAUSES.WAIT.IDE - LD DE,256*IDE.ControlByte.Busy + 0 + LD DE,256*IDE.CtrlByte.Busy + 0 CALL BITS_WAITS.WAIT_PRT POP HL RET C INC B ; LD BC,IDE.Write.Command OUT (C),H LD HL,PAUSES.WAIT.IDE - ;LD DE,256*IDE.ControlByte.Busy + 0 + ;LD DE,256*IDE.CtrlByte.Busy + 0 JR BITS_WAITS.WAIT_PRT /////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[v] -MODEL: LD HL,TEMP+27*2 ; !TODO сделать через структуру. +MODEL: LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber LD A,(HL) OR A JR Z,.unknown @@ -512,7 +510,7 @@ BITS_WAITS: ;SCF ;RET Z ; - AND IDE.ControlByte.Busy; + IDE.ControlByte.DataRequest + AND IDE.CtrlByte.Busy; + IDE.CtrlByte.DataRequest RET Z ; HALT @@ -611,7 +609,7 @@ SaveToCMOS: ; LD IX,PRIM_SLAVE_CMOS_T .save_to_cmos: - LD HL,(TEMP+1*2) + LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders) LD B,L LD A,(IX+0) CALL WRITCMS ; Cylinder low @@ -620,12 +618,12 @@ SaveToCMOS: LD A,(IX+1) CALL WRITCMS ; Cylinder high - LD A,(TEMP+3*2) + LD A,(IDENTIFY_DEVICE_BUFFER.NumHeads) LD B,A LD A,(IX+2) CALL WRITCMS ; Heads - LD A,(TEMP+6*2) + LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack) LD B,A LD A,(IX+3) JP WRITCMS ; Heads @@ -667,11 +665,11 @@ Bug31SecCheck: LD A,(MasterSlave) /////////////////////////////////////////////////////////////////////[v] GETPARAM: LD HL,PAUSES.WAIT.IDE - LD DE,IDE.ControlByte.DataRequest * 256 + IDE.ControlByte.DataRequest + LD DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest CALL BITS_WAITS.WAIT_PRT RET C LD BC,IDE.Read.Data - LD HL,TEMP + LD HL,IDENTIFY_DEVICE_BUFFER INIR INIR CALL IDESPEC @@ -693,11 +691,11 @@ DETECTORS: LD BC,IDE.Write.Counter OUT (C),A LD HL,PAUSES.WAIT.SMALL - LD DE,IDE.ControlByte.Busy*256 + 0 + LD DE,IDE.CtrlByte.Busy*256 + 0 CALL BITS_WAITS.WAIT_PRT RET C ; - LD BC,IDE.Read.Counter ; LD BC,IDE.Read.Counter + LD BC,IDE.Read.Counter IN A,(C) CP .test_counter RET Z @@ -722,8 +720,8 @@ DETECTORS: SCF RET Z ; - AND IDE.ControlByte.Busy + IDE.ControlByte.DataRequest + IDE.ControlByte.Error - CP IDE.ControlByte.Error + AND IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error + CP IDE.CtrlByte.Error RET Z ; HALT @@ -748,7 +746,7 @@ DETECTORS: LD BC,IDE.Write.Command OUT (C),E ; - LD DE,IDE.ControlByte.Busy * 256 + 0 + LD DE,IDE.CtrlByte.Busy * 256 + 0 LD HL,PAUSES.WAIT.IDE CALL BITS_WAITS.WAIT_PRT RET C ; Absent @@ -758,7 +756,7 @@ DETECTORS: RRCA JR C,.non_ATA ; - AND (IDE.ControlByte.DataRequest + IDE.ControlByte.Ready) / 2 + AND (IDE.CtrlByte.DataRequest + IDE.CtrlByte.Ready) / 2 SCF RET Z ; @@ -778,19 +776,19 @@ DETECTORS: ; ATAPI or Absent ; Exit: CF - No device ; NC - ATAPI -.IdentPDevChk: LD E,IDE.ATAPI.IdentifyPackedDevice +.IdentPDevChk: LD E,IDE.ATAPI.IdentifyPacketDevice LD BC,IDE.Write.Command OUT (C),E LD HL,PAUSES.WAIT.IDE - LD DE,IDE.ControlByte.Busy*256 + 0 + LD DE,IDE.CtrlByte.Busy*256 + 0 CALL BITS_WAITS.WAIT_PRT RET C ; LD BC,IDE.Read.Status IN A,(C) RRCA - RET C - XOR A + ; RET C + ; XOR A RET ;-------; diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 8343a73..2b3134c 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -74,10 +74,11 @@ ;FDD EQU #03 ;!FIXIT нормально прописать -TEMP EQU #7E00 ; !HARDCODE -MEMMAP2 EQU TEMP ; должно быть выровнено по ALIGN 256 -TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023 - ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!" +TEMP EQU #7E00 ; !HARDCODE +IDENTIFY_DEVICE_BUFFER _ATA_IDENTIFY_DEVICE_DATA = TEMP +MEMMAP2 EQU TEMP ; должно быть выровнено по ALIGN 256 +TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023 + ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!" ;██████████████████████████████████████████████████████████████████████████████████████████████████████████████; ;SETUP_MAIN: @@ -1122,7 +1123,7 @@ HDSTART: EX AF,AF' OUT (SLOT3),A EX AF,AF' - CP IDE.Device.CDROM + CP IDE.Device.ATAPI JP Z,CDSTART PUSH AF PUSH BC diff --git a/src/bios/rom/SETUP/messages.z80 b/src/bios/rom/SETUP/messages.z80 index 2d0140b..5c45849 100644 --- a/src/bios/rom/SETUP/messages.z80 +++ b/src/bios/rom/SETUP/messages.z80 @@ -58,7 +58,7 @@ "TrDosC", -- 6 "TrDosD", -- 7 "SetTime", -- 8 DEFINES.INC --> NEW_FEATURE - "HddWrPr", -- 9 DEFINES.INC --> HDDwriteProtect + --"HddWrPr", -- 9 DEFINES.INC --> HDDwriteProtect -- 10 -- 11 -- 12 @@ -70,7 +70,7 @@ } } DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime") - DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr") + --DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate") @@ -340,16 +340,16 @@ SettingsItemsTabs: DB msgStrings.valCdRom DB msgStrings.valDash6 - IF HDDwriteProtect - _mSETitemParams HddWrPr - DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF - DB columnNum,lineNum - DB paramName - DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001 - DB msgStrings.valDisabled - DB msgStrings.valEnabled - ENDIF + ; IF HDDwriteProtect + ; _mSETitemParams HddWrPr + ; DW OnChangeAction.nothing + ; IF NEW_FEATURE : DB paramLine : ENDIF + ; DB columnNum,lineNum + ; DB paramName + ; DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001 + ; DB msgStrings.valDisabled + ; DB msgStrings.valEnabled + ; ENDIF _mSETitemParams ScreenY DW OnChangeAction.setXYpos @@ -652,9 +652,9 @@ msgStrings: _mSetStr parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : ' _mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' _mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' - IF HDDwriteProtect - _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : ' - ENDIF +; IF HDDwriteProtect +; _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : ' +; ENDIF _mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : ' _mSetStr valMinus7, tmp_Counter : DZ '-7' _mSetStr valMinus6, tmp_Counter : DZ '-6' @@ -828,9 +828,9 @@ msgRusStrings: _mSetStrRus parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : ' _mSetStrRus parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : ' _mSetStrRus parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : ' - IF HDDwriteProtect - _mSetStrRus parHddWrPr, tmp_Counter : DZ 'Защита записи на HDD : ' - ENDIF +; IF HDDwriteProtect +; _mSetStrRus parHddWrPr, tmp_Counter : DZ 'Защита записи на HDD : ' +; ENDIF _mSetStrRus parScreenY, tmp_Counter : DZ 'Сдвиг экрана по Y : ' _mSetStrRus valMinus7, tmp_Counter : DZ '-7' _mSetStrRus valMinus6, tmp_Counter : DZ '-6' diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 59cf65b..30bc5df 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -19,7 +19,8 @@ BETA_RC EQU 1 ; ;----------------------------[ TEST ]---------------------------; DEFINE TEST_INT 1 ; Тестовый обработчик пользовательского INT DEFINE NEW_FEATURE 0 ; !TODO пункты в сетап - DEFINE HDDwriteProtect 0 ; старая фишка для функций 5x +;DEFINE HDDwriteProtect 0 ; старая фишка для функций 5x DEFINE FDD_NormalCount 0 ; !TODO DEFINE UnusedSettingsFeatures 0 ; +;DEFINE OPTIMIZE_RW_PROCEDURE 0 ; ;===============================================================; \ No newline at end of file diff --git a/src/bios/shared/includes.inc b/src/bios/shared/includes.inc index 7d3f3a6..a3ecdd6 100644 --- a/src/bios/shared/includes.inc +++ b/src/bios/shared/includes.inc @@ -2,6 +2,7 @@ ;---------[All shared includes]--------- INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines INCLUDE 'Shared_Includes/structures/FileSystem.inc' + INCLUDE 'Shared_Includes/structures/ATA_ATAPI.inc' INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros INCLUDE 'src/bios/shared/CompMacro.asm' ; макросы INCLUDE 'Shared_Includes/constants/SP2000.inc' ; константы