From 5c47eb30d64f085e85cc727a3f21f7cb936b13ff Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 4 Jan 2025 02:20:10 +1000 Subject: [PATCH] not working --- Shared_Includes | 2 +- src/bios/exp/BIOS_FUNC.asm | 20 +-- src/bios/exp/EXTENDED/FDD_DRIVER_2.asm | 48 +++--- src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 194 +++++++++++++++++++++--- src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM | 66 +++----- src/bios/exp/FUNC_5x.asm | 6 +- src/bios/rom/SETUP/AUTOIDE.asm | 17 +++ src/bios/rom/SETUP/MAIN.asm | 10 +- 8 files changed, 250 insertions(+), 113 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index d38cd7d..7ef1dd9 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit d38cd7dd53426ef452cd4afd2a76f6a1e5a84848 +Subproject commit 7ef1dd98b491068d5a9ded34f5ff51430b7fa7e7 diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 115a294..2934024 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -521,7 +521,7 @@ TAB_5xFNS: _mNoDrive_5xTable 1, 0 ;-------------------------------------[] -;-------------------------------------------------------------[ HDD #8 ] +;-------------------------------------------------------------[ ATA #8 ] ; DB low FN_RESERVED_5x DB low HDD_5x_RESET @@ -546,24 +546,24 @@ TAB_5xFNS: _mNoDrive_5xTable 3, 0 ;-------------------------------------[] -;----------------------------------------------------------[ CDROM #C0 ] +;-----------------------------------------------------------[ ATAPI #C ] ; DB low FN_RESERVED_5x DB low CD_5x_RESET DB low CD_5x_LONG_READ - DB low CD_5x_LONG_WRITE ; LONG_WRITE ; [ ] new + DB low CD_5x_LONG_WRITE ; [ ] new DB low FN_ABSENT_5x ; VERIFY DB low CD_5x_READ - DB low CD_5x_WRITE ; WRITE ; [ ] new + DB low CD_5x_WRITE ; [ ] new DB low CD_5x_DETECT - DB low FN_ABSENT_5x ; GETMED + DB low CD_5x_GETMED ; [ ] new DB low FN_ABSENT_5x ; SETMED DB low DRV_VERSION 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 ;[ ] media changed? ;!TODO DB low DRV_LIST ;---------------------------------------------------------------------[] @@ -624,7 +624,7 @@ TAB_5xFNS: _mNoDrive_5xTable 1, 1 ;-------------------------------------[] -;-------------------------------------------------------------[ HDD #8 ] +;-------------------------------------------------------------[ ATA #8 ] ; DB high FN_RESERVED_5x DB high HDD_5x_RESET @@ -649,7 +649,7 @@ TAB_5xFNS: _mNoDrive_5xTable 3, 1 ;-------------------------------------[] -;----------------------------------------------------------[ CDROM #C0 ] +;-----------------------------------------------------------[ ATAPI #C ] ; DB high FN_RESERVED_5x DB high CD_5x_RESET @@ -659,8 +659,8 @@ TAB_5xFNS: DB high CD_5x_READ DB high CD_5x_WRITE ; WRITE ; [ ] new DB high CD_5x_DETECT - DB high FN_ABSENT_5x - DB high FN_ABSENT_5x + DB high CD_5x_GETMED + DB high FN_ABSENT_5x ; SETMED DB high DRV_VERSION DB high FN_RESERVED_5x diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index f87db7a..982b0b1 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -26,10 +26,10 @@ FDD_5x_GETMED: ;!TEST FDD 720/1440 IF FDD_NormalCount - LD IY,FDD_INI_TABLE.FDD_0 + LD IY,FDD_INIT_TABLE.FDD_0 DEC A JR C,.getParams - LD IY,FDD_INI_TABLE.FDD_1 + LD IY,FDD_INIT_TABLE.FDD_1 .getParams: ENDIF IN A,(SLOT3) @@ -48,10 +48,10 @@ FDD_5x_GETMED: LD XH,A LD A,(IY+0) ;F144/720 ELSE - LD HL,(FDD_INI_TABLE.FDD_0.SECTORS) - LD DE,(FDD_INI_TABLE.FDD_0.CYLINDL) - LD IX,(FDD_INI_TABLE.FDD_0.BytesPerSector) - LD A,(FDD_INI_TABLE.FDD_0.F144) + LD HL,(FDD_INIT_TABLE.FDD_0.SECTORS) + LD DE,(FDD_INIT_TABLE.FDD_0.CYLINDL) + LD IX,(FDD_INIT_TABLE.FDD_0.BytesPerSector) + LD A,(FDD_INIT_TABLE.FDD_0.F144) ENDIF LD B,A EX AF,AF' @@ -73,10 +73,10 @@ FDD_5x_GETMED: ;[]===========================================================[] FDD_5x_SETMED: ;!TEST FDD 720/1440 IF FDD_NormalCount - LD IY,FDD_INI_TABLE.FDD_0 + LD IY,FDD_INIT_TABLE.FDD_0 DEC A JR C,.setParams - LD IY,FDD_INI_TABLE.FDD_1 + LD IY,FDD_INIT_TABLE.FDD_1 ENDIF ; .setParams: IN A,(SLOT3) @@ -98,10 +98,10 @@ FDD_5x_SETMED: ;!TEST FDD 720/1440 LD A,B ELSE LD A,B - LD (FDD_INI_TABLE.FDD_0.SECTORS),HL - LD (FDD_INI_TABLE.FDD_0.CYLINDL),DE - LD (FDD_INI_TABLE.FDD_0.BytesPerSector),IX - LD (FDD_INI_TABLE.FDD_0.F144),A + LD (FDD_INIT_TABLE.FDD_0.SECTORS),HL + LD (FDD_INIT_TABLE.FDD_0.CYLINDL),DE + LD (FDD_INIT_TABLE.FDD_0.BytesPerSector),IX + LD (FDD_INIT_TABLE.FDD_0.F144),A ENDIF ; EX AF,AF' @@ -218,9 +218,9 @@ FDD_5x_LONG_READ: EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD IY,(FDD_INI_TABLE.FDD_0.BytesPerSector) + LD IY,(FDD_INIT_TABLE.FDD_0.BytesPerSector) LD XH,C - LD A,(FDD_INI_TABLE.FDD_0.SECTORS) + LD A,(FDD_INIT_TABLE.FDD_0.SECTORS) LD C,A EX AF,AF' OUT (SLOT3),A @@ -363,9 +363,9 @@ FDD_5x_LONG_WRITE: EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD IY,(FDD_INI_TABLE.FDD_0.BytesPerSector) + LD IY,(FDD_INIT_TABLE.FDD_0.BytesPerSector) LD XH,C - LD A,(FDD_INI_TABLE.FDD_0.SECTORS) + LD A,(FDD_INIT_TABLE.FDD_0.SECTORS) LD C,A EX AF,AF' OUT (SLOT3),A @@ -615,10 +615,10 @@ S_FDD: PUSH BC EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.DISK) + LD A,(FDD_INIT_TABLE.FDD_0.DISK) AND #FE OR B - LD (FDD_INI_TABLE.FDD_0.DISK),A + LD (FDD_INIT_TABLE.FDD_0.DISK),A EX AF,AF' OUT (SLOT3),A POP BC @@ -644,9 +644,9 @@ CHANGE_SPEED: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.F144) + LD A,(FDD_INIT_TABLE.FDD_0.F144) XOR #80 - LD (FDD_INI_TABLE.FDD_0.F144),A + LD (FDD_INIT_TABLE.FDD_0.F144),A AND #80 EX AF,AF' OUT (SLOT3),A @@ -662,7 +662,7 @@ SET_SPEED: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.F144) + LD A,(FDD_INIT_TABLE.FDD_0.F144) AND #80 EX AF,AF' OUT (SLOT3),A @@ -698,7 +698,7 @@ DISK_ID: EXX EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.F144) + LD A,(FDD_INIT_TABLE.FDD_0.F144) EX AF,AF' OUT (SLOT3),A EX AF,AF' @@ -724,7 +724,7 @@ SEEK: LD XL,A EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.DISK) + LD A,(FDD_INIT_TABLE.FDD_0.DISK) AND 1 EX AF,AF' OUT (SLOT3),A @@ -800,7 +800,7 @@ NTRACK: EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD A,(FDD_INI_TABLE.FDD_0.SECTORS) + LD A,(FDD_INIT_TABLE.FDD_0.SECTORS) LD C,A LD B,0 EX AF,AF' diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index ab506c9..f3d045c 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -21,12 +21,14 @@ RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16 ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number" ;[]================================================================[#51] +;!FIXIT сделать настоящий ресет CD_5x_RESET: LD C,IDE.Device.ATAPI CALL SELECT_DRIVE RET C LD B,50 .loop: PUSH BC CALL CD_TEST + ;!FIXIT ;[ ] sector size. сделать реинит HDD_INIT_TABLE POP BC RET NC EI @@ -36,6 +38,44 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI ;[]================================================================[#51] +;[]================================================================[#58] +;Function: Get Current Media Parameters +; A - Disk +;Return: +; H - Heads +; L - Sectors per cylinder +; DE - Cylinders +; IX - Capacity sector in bytes +; B - Flags: MASTER/SLAVE, LBA/CHS +CD_5x_GETMED: + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; [ ] sector size. media changed + + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD HL,0 + LD D,H + LD L,H + ; LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) + ; LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) + ; LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) + ; LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) + LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) + LD A,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ]sector size + LD XL,A + LD A,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ]sector size + LD XH,A + EX AF,AF' + OUT (SLOT3),A + ;AND A + RET +;[]================================================================[#58] + ;!TODO ; atapi.pdf стр. 24 запись/чтение могут быть максимальными блоками в несколько заходов ;[]================================================================[#55] @@ -54,7 +94,7 @@ CD_5x_READ: EX AF,AF' ;[]================================================================[#52] ;Function: Long Read Sectors -; A -os +; A - Disk ; HL:IX - Sector ; DE - Address ; B - Sector counter @@ -64,6 +104,8 @@ CD_5x_READ: ; DE - Address + (Sector counter * Size sector) ;LONG READ SECTOR(S) CD_5x_LONG_READ: + AND A + ; PUSH IY SAFE_PORTY_2 PUSH BC @@ -73,9 +115,15 @@ CD_5x_LONG_READ: EX AF,AF' AND A ;read EX AF,AF' - CALL RW_ATAPI_SECTORs - JP HDD_5x_LONG_READ.shared - ; + ld + ; проверить .RemovableMedia bit, если установлен, то пропуск RW_ATAPI_SECTORs + CALL NC,RW_ATAPI_SECTORs + ; [ ] sector size. media changed + JP HDD_5x_LONG_READ.shared + ; JP NC,HDD_5x_LONG_READ.shared + ; CP BIOS.Error.UnitAttention + ; JR Z,CD_MEDIA_CHANGED_ERROR + ; SCF ;[]================================================================[#52] ; INPUT: ; A - Disk @@ -159,6 +207,8 @@ CD_5x_WRITE: ; DE - Address + (Sector counter * Size sector) ;WRITE SECTOR(S) CD_5x_LONG_WRITE: + AND A + ; PUSH IY SAFE_PORTY_2 PUSH BC @@ -168,11 +218,13 @@ CD_5x_LONG_WRITE: EX AF,AF' SCF ;write EX AF,AF' - CALL RW_ATAPI_SECTORs + ; + ld + ; проверить .RemovableMedia bit, если установлен, то пропуск RW_ATAPI_SECTORs + CALL NC,RW_ATAPI_SECTORs ; JP HDD_5x_LONG_READ.shared - ;[]================================================================[#57] ;Function: Detect Disk ; A - Disk @@ -238,7 +290,16 @@ EXEC_PACKET_COMMAND: EXX JR NC,.READY ; - LD BC,IDE.Write.Command + ; [ ] media changed + ; CP +(BIOS.Error.UnitAttention & #0F) + ; JR NZ,.reset + ; ; + ; CALL CD_MEDIA_CHANGED_ERROR + ; OR #70 ; error prefix for ATAPI in BIOS + ; SCF + ; RET + ; +.reset: LD BC,IDE.Write.Command LD A,IDE.ATAPI.Reset OUT (C),A ; @@ -248,9 +309,13 @@ EXEC_PACKET_COMMAND: EXX CALL CD_WAITPRT EXX + ;RET C + JR C,CD_CHECK_MEDIA_CHANGED.noWait + ; +.READY: CALL CD_CHECK_MEDIA_CHANGED RET C ; -.READY: LD C,SLOT3 + LD C,SLOT3 IN B,(C) PUSH DE PUSH BC @@ -281,27 +346,34 @@ EXEC_PACKET_COMMAND: OUT (C),A CALL CD_WAITPRT EXX - RET C + ;RET C + JR C,CD_CHECK_MEDIA_CHANGED.noWait + ; 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 NZ,CD_CHECK_MEDIA_CHANGED.noWait JR NC,.YEP_DRQ - LD A,#80 ; ERROR TIME OUT ;!HARDCODE - RET - ; -.CDERROR: LD BC,IDE.Read.Error ;ERROR - IN A,(C) - RRCA - RRCA - RRCA - RRCA - AND #0F - SCF + LD A,BIOS.Error.TimeOut ;!FIXIT media change test RET ; +; .CMD_ERROR: CALL CD_GET_ERROR +; OR #70 +; CP BIOS.Error.UnitAttention +; CALL Z,CD_MEDIA_CHANGED_ERROR +; ;LD BC,IDE.Read.Error ;ERROR +; ;IN A,(C) +; ;RRCA +; ;RRCA +; ;RRCA +; ;RRCA +; ;AND #0F +; ;!FIXIT ; [ ] sector size. make REQUEST SENSE if A=6 +; SCF +; RET + ; EXEC ATAPI PACKET COMMAND .YEP_DRQ: LD C,SLOT3 IN B,(C) PUSH BC @@ -340,7 +412,7 @@ EXEC_PACKET_COMMAND: LD BC,IDE.Read.Status IN A,(C) BIT IDE.CtrlBit.Error,A - JR NZ,.CDERROR + JR NZ,CD_CHECK_MEDIA_CHANGED.noWait ; AND IDE.CtrlByte.DataRequest RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors @@ -421,6 +493,18 @@ EXEC_PACKET_COMMAND: ;----------------------------------------------------------------------; +;----------------------------------------------------------------------; +CD_GET_ERROR: LD BC,IDE.Read.Error ;ERROR + IN A,(C) + RRCA + RRCA + RRCA + RRCA + AND #0F + RET +;----------------------------------------------------------------------; + + ;----------------------------------------------------------------------; ; D - MASK, E - PATTERN @@ -455,6 +539,54 @@ CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP JP EXEC_PACKET_COMMAND ;----------------------------------------------------------------------; +;----------------------------------------------------------------------;!TODO сделать доступной через расширенную функцию API +; вход: DE - адрес для данных +CD_REQUEST_SENSE: + LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE + JP EXEC_PACKET_COMMAND + ld +;----------------------------------------------------------------------; + +;----------------------------------------------------------------------; +CD_MEDIA_CHANGED_ERROR: + PUSH AF + IN A,(SLOT3) + EX AF,AF + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,%0000'0011 + LD (IY + HDD_INIT_TABLE.RemovableMedia),A + ; + EX AF,AF + OUT (SLOT3),A + POP AF + RET +;----------------------------------------------------------------------; + + +;----------------------------------------------------------------------; +CD_CHECK_MEDIA_CHANGED: + EXX + LD DE,256*(IDE.CtrlByte.Error) + 0 + CALL CD_WAITPRT.Custom + EXX + RET NC + ; +.noWait: EXX + CALL CD_GET_ERROR + OR #70 + EXX + CP BIOS.Error.UnitAttention + SCF + RET NZ + ; + CALL CD_MEDIA_CHANGED_ERROR + ; CF=1 + LD A,BIOS.Error.UnitAttention + RET +;----------------------------------------------------------------------; + //////////////////////////////////////////////////////////////////////// ATAPI_CMD_PACKET: @@ -484,6 +616,17 @@ ATAPI_CMD_PACKET: DB #00,#01,#00,#00 ; counter dword DB #00 ; +.READ_CAPACITY_DATA: + DB #25 + BLOCK 11,0 +; +.REQUEST_SENSE: + DB #03 + DB #00,#00,#00 + DB MAX_DATA_PACKET_FOR_REQUEST_SENSE + DB #00,#00,#00,#00,#00,#00,#00 +; + ATAPI_PACKET: .SECTOR EQU 2 .COUNTER EQU 7 @@ -498,4 +641,9 @@ ATAPI_PACKET: ; DEC E ; JR NZ,PAUSE1 ; RET -; \ No newline at end of file +; +/* +Если ловится ошибка media changed, то биос должен выставлять в HDD_INIT_TABLE.RemovableMedia = 3 +и затирать FF SectorSize. +Дос после получения такой ошибки должен вызывать BIOS.DRV_DETECT и если всё ОК, то ReScanDRV +*/ \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index 4c077e9..999512d 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -105,18 +105,17 @@ HDD_5x_GETMED: RET C IN A,(SLOT3) EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) - LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) - LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) - LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) - LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) - LD IX,512 ;!HARDCODE sector size + LD A,SYS_PAGE + OUT (SLOT3),A + LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) + LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) + LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) + LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) + LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) + LD IX,512 ;!HARDCODE sector size EX AF,AF' OUT (SLOT3),A - ;EX AF,AF' - AND A + ;AND A RET ;[]================================================================[#58] @@ -135,17 +134,18 @@ HDD_5x_SETMED: RET C IN A,(SLOT3) EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L - LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H - LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E - LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D - LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B + LD A,SYS_PAGE + OUT (SLOT3),A + LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L + LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H + LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E + LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D + LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B + ;!TODO ; [ ] sector size EX AF,AF' OUT (SLOT3),A ;EX AF,AF' - AND A + ;AND A RET ;[]================================================================[#59] @@ -195,8 +195,6 @@ HDD_5x_LONG_READ: POP HL POP IX POP BC - IF 1 -;======================================================================= ; HL:IX + B. если B=0, то B=256 XOR A CP B @@ -212,32 +210,6 @@ HDD_5x_LONG_READ: .exit: RESTORE_PORTY POP IY RET -;======================================================================= - ENDIF - - - IF 0 -;======================================================================= - XOR A ; 4 1 - CP B ; 4 1 - LD C,B ; 4 1 - JR Z,.B_256_sectors ; 12/7 2 - ; - LD B,A ; 4 1 - ADD IX,BC ; 15 2 - LD C,A ; 4 1 -.pre_exit: ADC HL,BC ; 15 2 -.exit: RESTORE_PORTY ;45/62 - POP IY - RET - ; -.B_256_sectors: INC B ; 4 1 - ADD IX,BC ; 15 2 - LD B,A ; 4 1 - JR .pre_exit ; 12 2 -;======================================================================= - ENDIF - ; ; .error: LD B,A ; A - номер ошибки LD C,XL @@ -449,7 +421,7 @@ RW_ATA_SECTORs: LD C,IDE.Device.HDD ; .write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size INC B ; LD BC,IDE.Write.Data - LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size + LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size .loop: DUP WRITE_OUTI_DUPs OUTI EDUP diff --git a/src/bios/exp/FUNC_5x.asm b/src/bios/exp/FUNC_5x.asm index d1cb0ed..3a72214 100644 --- a/src/bios/exp/FUNC_5x.asm +++ b/src/bios/exp/FUNC_5x.asm @@ -38,9 +38,9 @@ DRV_LIST: ;Calculating FDD devices LD A,#FF - LD HL,FDD_INI_TABLE.FDD_0 + LD HL,FDD_INIT_TABLE.FDD_0 CALL .CHECK_FDD - LD HL,FDD_INI_TABLE.FDD_1 + LD HL,FDD_INIT_TABLE.FDD_1 CALL .CHECK_FDD ; INC (IX+1) @@ -53,7 +53,7 @@ DRV_LIST: ; DJNZ .TFD0 ; DEC (IX+1) ; .YYYFD0: -; LD HL,FDD_INI_TABLE.FDD_1 +; LD HL,FDD_INIT_TABLE.FDD_1 ; INC (IX+1) ; LD B,8 ; LD A,#FF diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index 334b55d..8e1269b 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -439,6 +439,23 @@ IDESPEC: IN A,(SLOT3) LD HL,ICHANEL OR (HL) LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A + ; + ld + ; [ ] sector size ATAPI + LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA + LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер на 8 байтов + CALL EXEC_PACKET_COMMAND + LD HL,#FFFF + JR C,.No_Media + ; + LD A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6) ; sector size high + LD H,A + LD A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 7) ; sector size low + LD L,A +.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),L + LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),H + LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),%0000'0001 ; !HARDCODE ATAPI пока всегда removable + ; JR IDESPEC.END /////////////////////////////////////////////////////////////////////[^] diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 2b3134c..62916f6 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -1188,14 +1188,14 @@ MOVE1: LD SP,#7FFF ; !HARDCODE SYSID: DZ "Starting..." .length EQU $-SYSID -FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD -FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD +FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD +FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD FDD_INSTAL: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD HL,FDD_INI_TABLE.FDD_0 + LD HL,FDD_INIT_TABLE.FDD_0 LD BC,SYS_PAGE.FDD_TBL.Size*256 + #FF ; table_size*256 + fill_byte .FILLFDD: LD (HL),C INC HL @@ -1215,7 +1215,7 @@ FDD_INSTAL: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD DE,FDD_INI_TABLE.FDD_0 + LD DE,FDD_INIT_TABLE.FDD_0 LD BC,#0008 ; !HARDCODE LDIR EX AF,AF' @@ -1232,7 +1232,7 @@ FDD_INSTAL: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD DE,FDD_INI_TABLE.FDD_1 + LD DE,FDD_INIT_TABLE.FDD_1 LD BC,#0008 ; !HARDCODE LDIR EX AF,AF'