From faabf5c8b72af8a58352ca3d18df6d4f563d11b8 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Wed, 21 Jan 2026 23:38:52 +1000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D1=83=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D1=87=D1=91=20=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=81=20FDD=5F5x=5FGET=5FPAR,=20FDD=5F5x=5FLONG=5FREAD.RW=5FSh?= =?UTF-8?q?ared=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B2=20SETUP:=203.5=20=D0=B8=205.25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bios/exp/EXTENDED/FDD_DRIVER.asm | 55 ++++++++--- src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM | 5 +- src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm | 63 ++++-------- src/bios/rom/SETUP/MAIN.asm | 111 ++++++++++++++++------ src/bios/rom/SETUP/messages.z80 | 22 +++-- 5 files changed, 161 insertions(+), 95 deletions(-) diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/src/bios/exp/EXTENDED/FDD_DRIVER.asm index cd6cdf0..f135f21 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -29,12 +29,13 @@ ; A - D0 - "1" - Removable media ;[]===========================================================[] ;!FIXIT всегда идет работа с данными для диска А +;!FIXIT читать данные с нулевой дорожки? Придумать что делать с геометрией флопарей FDD_5x_GET_PAR: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A ; - LD HL,(SYS_PAGE.FDD_TABLE.SECTORS) + LD HL,(SYS_PAGE.FDD_TABLE.SECTORS) ; L - Sectors, H - Heads LD DE,(SYS_PAGE.FDD_TABLE.CYLINDL) LD IX,(SYS_PAGE.FDD_TABLE.BytesPerSector) LD A,(SYS_PAGE.FDD_TABLE.DISK) @@ -98,7 +99,7 @@ FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off ;[]===========================================================[] FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off CALL SET_DOS_ON - CALL S_FDD + CALL SET_FDD CALL DISK_ID JR C,.int ; [ ] размера сектора @@ -181,7 +182,7 @@ FDD_5x_LONG_READ: EX AF,AF' PUSH BC CALL SET_DOS_ON - CALL S_FDD + CALL SET_FDD CALL SET_SPEED CALL NTRACK POP BC @@ -190,12 +191,13 @@ FDD_5x_LONG_READ: EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD IY,(SYS_PAGE.FDD_TABLE.BytesPerSector) + LD IY,(SYS_PAGE.FDD_TABLE.BytesPerSector) ; устанавливать отдельно переменную current BytesPerSector? LD XH,C ; Memory Page Number LD A,(SYS_PAGE.FDD_TABLE.SECTORS) LD C,A EX AF,AF' OUT (SLOT3),A + ; .DSK_LP: LD A,D EXX PUSH BC @@ -215,17 +217,18 @@ FDD_5x_LONG_READ: POP HL POP BC ADD HL,DE - ; CALL C,CHANGE_MEM_BLK - ; -.THISRD: POP DE + ;.THISRD + POP DE LD A,C INC E CP E JR NZ,.NINC_T + ; LD E,0 INC D .NINC_T: DJNZ .DSK_LP + ; .RETDOS: CALL SET_DOS_OFF LD A,XH ; Memory Page Number EX AF,AF' @@ -240,6 +243,7 @@ FDD_5x_LONG_READ: DEC B LD B,0 JR NZ,.ADD8BIT + ; INC B .ADD8BIT: ADD IX,BC ;!TEST @@ -471,12 +475,33 @@ SET_DOS_OFF: EX AF,AF' EX AF,AF' RET -; -S_FDD: PUSH BC +//////////////////////////////////////////////////////////////////////// +; НЕ ГРОХАТЬ. Версия для FDD AUTO одним буфером FDD_TABLE +; SET_FDD: PUSH BC +; AND 1 +; LD B,A +; OR #3C +; OUT (FDC_93.DrvCTRL),A +; IN A,(SLOT3) +; EX AF,AF' +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,(SYS_PAGE.FDD_TABLE.DISK) +; AND #FE +; OR B +; LD (SYS_PAGE.FDD_TABLE.DISK),A +; EX AF,AF' +; OUT (SLOT3),A +; POP BC +; RET +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +SET_FDD: PUSH BC AND 1 LD B,A OR #3C OUT (FDC_93.DrvCTRL),A + IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE @@ -489,7 +514,8 @@ S_FDD: PUSH BC OUT (SLOT3),A POP BC RET -; +//////////////////////////////////////////////////////////////////////// + ;----------------------------------------------------------------------; ; CHANGE_SPEED: IN A,(SLOT3) @@ -532,9 +558,7 @@ CHANGE_SPEED: IN A,(SLOT3) XOR #80 LD (SYS_PAGE.FDD_TABLE.DISK),A JR SET_SPEED.set - ; -; SET_SPEED: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE @@ -561,9 +585,11 @@ WAIT_FDD_FOR_SEARCH_TRACK: CALL .LOOP POP BC RET NC + ; CALL CHANGE_SPEED DEC C JR NZ,WAIT_FDD_FOR_SEARCH_TRACK + ; SCF RET ; @@ -580,6 +606,7 @@ WAIT_FDD_FOR_SEARCH_TRACK: DJNZ .LOOP SCF RET +//////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// @@ -592,11 +619,11 @@ DISK_ID: EXX LD A,#18 ;!TODO выписать комманды ВГ ;SEARCH ;!HARDCODE CMD КР1818ВГ93 CALL EXECOM ; кусок для быстрых флоппарей - LD BC,#0104 ; 1 - счётчик + LD BC,#0104 ; счётчики CALL WAIT_FDD_FOR_SEARCH_TRACK JR NC,.Read_Index ; кусок для тормозных флоппарей - LD BC,#0504 ; 1 - счётчик + LD BC,#0804 ; счётчики CALL WAIT_FDD_FOR_SEARCH_TRACK JR NC,.Read_Index EXX diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index b1e6dd5..6b71295 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -676,6 +676,7 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + I AND D CP E JR Z,.ok + ; DEC HL LD A,L OR H @@ -684,8 +685,8 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + I POP HL DEC L JR NZ,.loop - ; -.error: LD A,BIOS.Error.NotReady + ; error + LD A,BIOS.Error.NotReady SCF RET ; diff --git a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm index 9b91bbf..c234945 100644 --- a/src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm +++ b/src/bios/exp/EXTENDED/RAM_DISK_DRIVER.asm @@ -89,89 +89,63 @@ RAM_DRV_READ_WRITE: LD L,B IN A,(SLOT3) LD H,A - -; LD A,H -; OR L -; JR NZ,.error_stack2 ; if sector_high > 0 -; POP AF - POP AF EX (SP),HL PUSH AF - - LD A,H - OR L - JR NZ,.error_stack2 ; if sector_high > 0 - POP AF - + LD A,H + OR L + JR NZ,.error_stack2 ; if sector_high > 0 + ; + POP AF EX AF,AF' OUT (SLOT3),A LD A,C ; в рег C команда чтения или записи EX AF,AF' -; A' = command - + ; A' = command PUSH BC ; Sector_counter PUSH DE ; Address PUSH IX ; Sector_low - AND #0F ;номер рамдиска - ;LD C,BIOS.GET_RAMD_ST - ;RST_to_BIOS CALL GET_RAMD_ST -; A = Memory Block ID - + ; A = Memory Block ID POP DE ; Sector_low POP HL ; Address POP BC ; Sector_counter JR C,.error_stack1 - + ; SLA E RL D ; Sector_low * 2 JR C,.error_stack1 - - + ; PUSH BC SLA B ; Sector_counter * 2 - типа у дискеты сектор 512 байтов JR C,.error_stack2 - + ; PUSH DE - //PUSH BC - ;LD C,BIOS.BLK_RD_WR - ;RST_to_BIOS CALL BLK_RD_WR JR C,.error_stack3 -; hl = address + Sector_low * 256 * Sector_counter - - //POP BC - //SRL B - + ; + ; hl = address + Sector_low * 256 * Sector_counter POP DE -; de = Sector_low * 2 - + ; de = Sector_low * 2 SRL D RR E -; de = Sector_low - + ; de = Sector_low POP BC -; b = Sector_counter - + ; b = Sector_counter LD A,E ADD A,B LD E,A LD A,D ADC A,0 LD D,A -; de = Sector_counter + Sector_low - + ; de = Sector_counter + Sector_low PUSH DE POP IX -; ix = Sector_counter + Sector_low - + ; ix = Sector_counter + Sector_low EX DE,HL -; de = address + Sector_low * 256 * Sector_counter - + ; de = address + Sector_low * 256 * Sector_counter LD HL,0 - POP AF OUT (SLOT3),A AND A @@ -179,6 +153,7 @@ RAM_DRV_READ_WRITE: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) RET + ; .error_stack3: POP BC .error_stack2: diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 5fde7e7..13e39a1 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -1201,56 +1201,109 @@ SYSID: DZ "Starting..." ; .Size EQU $ - FD144A ; FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD ; .Size EQU $ - FD720A -FDD_INIT_TABLE: FDD_1440_TABLE + + +FDD_INIT_TABLE_35: FDD_TABLE_s { + #80, ;.DISK + #12, ;.SECTORS + #02, ;.HEADS + #50, ;.CYLINDL + #00, ;.CYLINDH + #0200, ;.BytesPerSector + #03 ;.ID + } +; +FDD_INIT_TABLE_525: FDD_TABLE_s { + #00 ;.DISK + #09 ;.SECTORS + #02 ;.HEADS + #50 ;.CYLINDL + #00 ;.CYLINDH + #0200 ;.BytesPerSector + #03 ;.ID + } FDD_INSTAL: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A LD HL,SYS_PAGE.FDD_TABLE - LD BC,SYS_PAGE.FDD_TABLE.Size*256 + #FF ; table_size*256 + fill_byte + LD BC,2*(SYS_PAGE.FDD_TABLE.Size*256) + #FF ; table_size*256 + fill_byte .FILLFDD: LD (HL),C INC HL DJNZ .FILLFDD ; - ;EX AF,AF' - ;OUT (SLOT3),A - ;LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 - ;CALL GET_CMOS_VALUE - ;LD HL,FD720A - ;OR A - ;JR Z,.SETFD0 - LD HL,FDD_INIT_TABLE - ;DEC A - ;JR NZ,.NOFDD0 -;.SETFD0: ;IN A,(SLOT3) + ; + LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 + CALL .Choose_FDD_Type + JR NZ,.next_FDD + ; + LD DE,SYS_PAGE.FDD_TABLE + LD BC,SYS_PAGE.FDD_TABLE.Size + LDIR +.next_FDD: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 + CALL .Choose_FDD_Type + JR NZ,.NOFDD1 + ; + LD DE,SYS_PAGE.FDD_1_TABLE + LD BC,SYS_PAGE.FDD_1_TABLE.Size + LDIR +.NOFDD1: EX AF,AF' + OUT (SLOT3),A + RET + ; +.Choose_FDD_Type: + CALL GET_CMOS_VALUE + LD HL,FDD_INIT_TABLE_35 + OR A + RET Z + ; + LD HL,FDD_INIT_TABLE_525 + DEC A + RET +/* + LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 + CALL GET_CMOS_VALUE + LD HL,FDD_INIT_TABLE_525 + OR A + JR Z,.SETFD0 + ; + LD HL,FDD_INIT_TABLE_35 + DEC A + JR NZ,.NOFDD0 + ; +.SETFD0: ; + ;IN A,(SLOT3) ;EX AF,AF' ;LD A,SYS_PAGE ;OUT (SLOT3),A LD DE,SYS_PAGE.FDD_TABLE - ; B=0 - LD C,SYS_PAGE.FDD_TABLE.Size + LD BC,SYS_PAGE.FDD_TABLE.Size LDIR ;EX AF,AF' ;OUT (SLOT3),A -;.NOFDD0: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 - ;CALL GET_CMOS_VALUE - ;LD HL,FD720A - ;OR A - ;JR Z,.SETFD1 - ;LD HL,FD144A - ;DEC A - ;JR NZ,.NOFDD1 -;.SETFD1: IN A,(SLOT3) +.NOFDD0: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 + CALL GET_CMOS_VALUE + LD HL,FDD_INIT_TABLE_525 + OR A + JR Z,.SETFD1 + ; + LD HL,FDD_INIT_TABLE_35 + DEC A + JR NZ,.NOFDD1 + ; +.SETFD1: ; + ;IN A,(SLOT3) ;EX AF,AF' ;LD A,SYS_PAGE ;OUT (SLOT3),A - ;LD DE,SYS_PAGE.FDD_1_TABLE - ;LD BC,FD144A.Size - ;LDIR - EX AF,AF' + LD DE,SYS_PAGE.FDD_1_TABLE + LD BC,FD144A.Size + LDIR +.NOFDD1: EX AF,AF' OUT (SLOT3),A -.NOFDD1: RET + RET +*/ PIDNUM: LD HL,memBUFFER.ID diff --git a/src/bios/rom/SETUP/messages.z80 b/src/bios/rom/SETUP/messages.z80 index 62bd927..57a80ef 100644 --- a/src/bios/rom/SETUP/messages.z80 +++ b/src/bios/rom/SETUP/messages.z80 @@ -279,22 +279,28 @@ SettingsItemsTabs: IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName - DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0000 - DB msgStrings.valAuto + DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0010 + DB msgStrings.val35 + DB msgStrings.val525 + DB msgStrings.valDash6 + ; DB msgStrings.valAuto ; DB msgStrings.val720 ; DB msgStrings.val1440 - ; DB msgStrings.valDash6 + ; DB msgStrings.val1200 _mSETitemParams FddSecond DW OnChangeAction.nothing IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName - DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'0000 - DB msgStrings.valAuto + DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'1000 + DB msgStrings.val35 + DB msgStrings.val525 + DB msgStrings.valDash6 + ; DB msgStrings.valAuto ; DB msgStrings.val720 ; DB msgStrings.val1440 - ; DB msgStrings.valDash6 + ; DB msgStrings.val1200 _mSETitemParams PriIdeMA DW OnChangeAction.nothing @@ -653,6 +659,8 @@ msgStrings: _mSetStr valAuto, tmp_Counter : DZ 'Auto ' ; _mSetStr val720, tmp_Counter : DZ '720K ' ; _mSetStr val1440, tmp_Counter : DZ '1.44M ' + _mSetStr val35, tmp_Counter : DZ '3.5" ' + _mSetStr val525, tmp_Counter : DZ '5.25" ' _mSetStr valDash6, tmp_Counter : DZ '------' _mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : ' _mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' @@ -832,6 +840,8 @@ msgRusStrings: _mSetStrRus valAuto, tmp_Counter : DZ 'Авто ' ; _mSetStrRus val720, tmp_Counter : DZ '720K ' ; _mSetStrRus val1440, tmp_Counter : DZ '1.44M ' + _mSetStrRus val35, tmp_Counter : DZ '3.5" ' + _mSetStrRus val525, tmp_Counter : DZ '5.25" ' _mSetStrRus valDash6, tmp_Counter : DZ '------' _mSetStrRus parFddSecond, tmp_Counter : DZ 'FDD второй : ' _mSetStrRus parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : '