Подумать чё делать с FDD_5x_GET_PAR, FDD_5x_LONG_READ.RW_Shared

Изменения в SETUP: 3.5 и 5.25
This commit is contained in:
Tolik 2026-01-21 23:38:52 +10:00
parent fd285cae0f
commit faabf5c8b7
5 changed files with 161 additions and 95 deletions

View File

@ -29,12 +29,13 @@
; A - D0 - "1" - Removable media
;[]===========================================================[]
;!FIXIT ¢á¥£¤  ¨¤¥â à ¡®â  á ¤ ­­ë¬¨ ¤«ï ¤¨áª  €
;!FIXIT ç¨â âì ¤ ­­ë¥ á ­ã«¥¢®© ¤®à®¦ª¨? <20>ਤ㬠âì çâ® ¤¥« âì á £¥®¬¥âਥ© ä«®¯ à¥©
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
////////////////////////////////////////////////////////////////////////
; <20>… ƒ<>Ž•€œ. ‚¥àá¨ï ¤«ï 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,8 +558,6 @@ 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'
@ -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

View File

@ -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
;

View File

@ -89,72 +89,50 @@ 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
EX AF,AF'
OUT (SLOT3),A
LD A,C ; ¢ ॣ C ª®¬ ­¤  ç⥭¨ï ¨«¨ § ¯¨á¨
EX AF,AF'
; 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
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
POP DE
; de = Sector_low * 2
SRL D
RR E
; de = Sector_low
POP BC
; b = Sector_counter
LD A,E
ADD A,B
LD E,A
@ -162,16 +140,12 @@ RAM_DRV_READ_WRITE:
ADC A,0
LD D,A
; de = Sector_counter + Sector_low
PUSH DE
POP IX
; ix = Sector_counter + Sector_low
EX DE,HL
; 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:

View File

@ -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

View File

@ -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,' : '