From 69670d787394628ce5cc49b2aac14be5b505a282 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 17 Jan 2025 23:21:22 +1000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BC=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B2=20=D0=B4=D1=80=D0=B0?= =?UTF-8?q?=D0=B9=D0=B2=D0=B5=20ATAPI.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ZX_ROMS/new/SP_TRDOS.bin | Bin 16384 -> 16384 bytes src/bios/exp/EXTENDED/FDD_DRIVER_2.asm | 3 +- src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 15 +++--- src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM | 7 +-- src/bios/exp/EXTENDED/IDE/shared.asm | 56 ++++++++++---------- src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm | 55 +++++++++---------- src/bios/rom/SETUP/AUTOIDE.asm | 7 ++- 7 files changed, 75 insertions(+), 68 deletions(-) diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/src/ZX_ROMS/new/SP_TRDOS.bin index e6088321df545a1381f331e08657f97ab028d657..b2876456451874cbe4527c5a4bc206e3cb1d12a0 100644 GIT binary patch delta 32 ocmZo@U~Fh$+|bU)dXVok-=odFe8r5L|MSOcGRkd^wOq^w0M5<~82|tP delta 32 ocmZo@U~Fh$+|bU)c8KpY<0FR6J$%KCn*?Gs8Ra*}S}tY-0KkU}4gdfE diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index 982b0b1..718ba40 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -56,7 +56,7 @@ FDD_5x_GETMED: LD B,A EX AF,AF' OUT (SLOT3),A - ;EX AF,AF' + LD A,%0000'0001 ; removable media AND A RET @@ -130,6 +130,7 @@ FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off PUSH AF CALL SET_DOS_OFF POP AF + LD B,%0000'0001 ;bit0=1 removable, bit1=1 drive changed, bit7..2 reserved ; [ ] JP SAVE_INTERRUPTS.restore ;RET diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index 1eb3472..3ca6ae8 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -109,10 +109,9 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI ; 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' +CD_5x_READ: EX AF,AF' + IN A,(SLOT3) + EX AF,AF' ;[]================================================================[#52] ;Function: Long Read Sectors ; A - Disk @@ -256,14 +255,15 @@ CD_5x_LONG_WRITE: ;Function: Detect Disk ; A - Disk ;Return: CF=0 - A=Drive type +; B=RemovableMedia byte ; [ ] ; CF=1 - drive not present, A=#02 CD_5x_DETECT: LD C,IDE.Device.ATAPI AND %1011'1111 - CALL DRV_DETECT +.shared: CALL DRV_DETECT RET C ; PUSH AF - LD BC,SLOT3 + LD C,SLOT3 IN B,(C) LD A,SYS_PAGE OUT (C),A @@ -272,6 +272,7 @@ CD_5x_DETECT: LD C,IDE.Device.ATAPI INC HL LD A,(HL) OUT (C),B + LD B,A AND %0000'0010 JR Z,.exit ; @@ -329,7 +330,7 @@ CD_CHECK_MEDIA_CHANGED: JR C,.noWait ; EXX - LD BC,SLOT3 + LD C,SLOT3 IN B,(C) LD A,SYS_PAGE OUT (C),A diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index 145fc35..1f683bb 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -107,6 +107,7 @@ HDD_5x_GETMED: EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A + LD A,(IY+IDE.HDD_INIT_TABLE.RemovableMedia) LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) @@ -114,8 +115,8 @@ HDD_5x_GETMED: LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) LD IX,512 ;!HARDCODE sector size EX AF,AF' - OUT (SLOT3),A - ;AND A + OUT (SLOT3),A + EX AF,AF' RET ;[]================================================================[#58] @@ -675,5 +676,5 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE ; CF=1 - drive not present, A=#02 HDD_5x_DETECT: LD C,IDE.Device.HDD - JP DRV_DETECT + JP CD_5x_DETECT.shared ;[]================================================================[#57] \ No newline at end of file diff --git a/src/bios/exp/EXTENDED/IDE/shared.asm b/src/bios/exp/EXTENDED/IDE/shared.asm index 1127725..9b79eef 100644 --- a/src/bios/exp/EXTENDED/IDE/shared.asm +++ b/src/bios/exp/EXTENDED/IDE/shared.asm @@ -67,32 +67,30 @@ SELECT_DRIVE: ; С - Type ;Return: CF=0 - A=Drive type ; CF=1 - drive not present, A=#02 -DRV_DETECT: - CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83) - CCF - JR C,.error - - LD HL,IDE.INIT_TBL_IDE0.DriveType - AND 3 - JR Z,.get_param - LD HL,IDE.INIT_TBL_IDE1.DriveType - DEC A - JR Z,.get_param - LD HL,IDE.INIT_TBL_IDE2.DriveType - DEC A - JR Z,.get_param - LD HL,IDE.INIT_TBL_IDE3.DriveType -.get_param: - IN A,(SLOT3) - LD B,A - LD A,SYS_PAGE - OUT (SLOT3),A - - LD A,(HL) - CP C ; compare Type - LD C,SLOT3 - OUT (C),B - RET Z - SCF -.error: LD A,BIOS.Error.BadNumber - RET \ No newline at end of file +DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83) + CCF + JR C,.error + ; + LD HL,IDE.INIT_TBL_IDE0.DriveType + AND 3 + JR Z,.get_param + LD HL,IDE.INIT_TBL_IDE1.DriveType + DEC A + JR Z,.get_param + LD HL,IDE.INIT_TBL_IDE2.DriveType + DEC A + JR Z,.get_param + LD HL,IDE.INIT_TBL_IDE3.DriveType +.get_param: IN A,(SLOT3) + LD B,A + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(HL) + CP C ; compare Type + LD C,SLOT3 + OUT (C),B + RET Z + SCF +.error: LD A,BIOS.Error.BadNumber + RET \ 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 6c3afe0..a2cb99e 100644 --- a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm +++ b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER_1.asm @@ -35,33 +35,34 @@ RMD_5x_SETMED: ; IX - Capacity sector in bytes ; B - Flags: ramblock ID ;[]===========================================================[] -RMD_5x_GETMED: -.SectorSize EQU 512 ;!HARDCODE - AND #0F - CALL GET_RAMD_ST ; получение идентификатора блока - RET C - SCF - RET Z - ; - LD C,A - LD B,#FF -.loop: INC B - PUSH BC - LD A,C - CALL EMM.GetMemPage ; получить физический номер страницы из блока - POP BC - JR NC,.loop - ; CF==1, A==0 - ошибка, A==#FF - ok - INC A - RET NZ ; если выходит, то с флагами CF==1, ZF==1 - - LD E,B - LD B,C - ; тут в E количество страниц в рамдиске, B - ID рамдиска - LD HL,1*256 + #4000/.SectorSize - LD D,0 - LD IX,.SectorSize - RET +RMD_5x_GETMED: AND #0F + CALL GET_RAMD_ST ; получение идентификатора блока + RET C + SCF + RET Z + ; + LD C,A + LD B,#FF +.loop: INC B + PUSH BC + LD A,C + CALL EMM.GetMemPage ; получить физический номер страницы из блока + POP BC + JR NC,.loop + ; CF==1, A==0 - ошибка, A==#FF - ok + INC A + RET NZ ; если выходит, то с флагами CF==1, ZF==1 + ; + LD E,B + LD B,C + ; тут в E количество страниц в рамдиске, B - ID рамдиска + LD HL,1*256 + #4000/.SectorSize + LD D,0 + LD IX,.SectorSize + LD A,%0000'0001 ; removable media + RET + ; +.SectorSize EQU 512 ;!HARDCODE //////////////////////////////////////////////////////////////////////////////////// RMD_5x_LONG_WRITE: diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index c2edb61..f43d8f4 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -388,7 +388,6 @@ IDESPEC: IN A,(SLOT3) OR B LD B,A LD A,(IDENTIFY_DEVICE_BUFFER.Capabilities_high) - ;BIT 1,A AND %0000'0010 JR Z,.NONLBA ; @@ -403,6 +402,12 @@ IDESPEC: IN A,(SLOT3) LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders) LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H + ; [ ] removable media + LD A,(IDENTIFY_DEVICE_BUFFER.GeneralConfiguration) + RLCA + AND %0000'0001 + LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),A + ; LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack) LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A IF IDE_Optimization