Подумать чё делать с 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 ; A - D0 - "1" - Removable media
;[]===========================================================[] ;[]===========================================================[]
;!FIXIT ¢á¥£¤  ¨¤¥â à ¡®â  á ¤ ­­ë¬¨ ¤«ï ¤¨áª  € ;!FIXIT ¢á¥£¤  ¨¤¥â à ¡®â  á ¤ ­­ë¬¨ ¤«ï ¤¨áª  €
;!FIXIT ç¨â âì ¤ ­­ë¥ á ­ã«¥¢®© ¤®à®¦ª¨? <20>ਤ㬠âì çâ® ¤¥« âì á £¥®¬¥âਥ© ä«®¯ à¥©
FDD_5x_GET_PAR: IN A,(SLOT3) FDD_5x_GET_PAR: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A 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 DE,(SYS_PAGE.FDD_TABLE.CYLINDL)
LD IX,(SYS_PAGE.FDD_TABLE.BytesPerSector) LD IX,(SYS_PAGE.FDD_TABLE.BytesPerSector)
LD A,(SYS_PAGE.FDD_TABLE.DISK) 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 FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off
CALL SET_DOS_ON CALL SET_DOS_ON
CALL S_FDD CALL SET_FDD
CALL DISK_ID CALL DISK_ID
JR C,.int JR C,.int
; [ ] à §¬¥à  ᥪâ®à  ; [ ] à §¬¥à  ᥪâ®à 
@ -181,7 +182,7 @@ FDD_5x_LONG_READ:
EX AF,AF' EX AF,AF'
PUSH BC PUSH BC
CALL SET_DOS_ON CALL SET_DOS_ON
CALL S_FDD CALL SET_FDD
CALL SET_SPEED CALL SET_SPEED
CALL NTRACK CALL NTRACK
POP BC POP BC
@ -190,12 +191,13 @@ FDD_5x_LONG_READ:
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A 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 XH,C ; Memory Page Number
LD A,(SYS_PAGE.FDD_TABLE.SECTORS) LD A,(SYS_PAGE.FDD_TABLE.SECTORS)
LD C,A LD C,A
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
;
.DSK_LP: LD A,D .DSK_LP: LD A,D
EXX EXX
PUSH BC PUSH BC
@ -215,17 +217,18 @@ FDD_5x_LONG_READ:
POP HL POP HL
POP BC POP BC
ADD HL,DE ADD HL,DE
;
CALL C,CHANGE_MEM_BLK CALL C,CHANGE_MEM_BLK
; ;.THISRD
.THISRD: POP DE POP DE
LD A,C LD A,C
INC E INC E
CP E CP E
JR NZ,.NINC_T JR NZ,.NINC_T
;
LD E,0 LD E,0
INC D INC D
.NINC_T: DJNZ .DSK_LP .NINC_T: DJNZ .DSK_LP
;
.RETDOS: CALL SET_DOS_OFF .RETDOS: CALL SET_DOS_OFF
LD A,XH ; Memory Page Number LD A,XH ; Memory Page Number
EX AF,AF' EX AF,AF'
@ -240,6 +243,7 @@ FDD_5x_LONG_READ:
DEC B DEC B
LD B,0 LD B,0
JR NZ,.ADD8BIT JR NZ,.ADD8BIT
;
INC B INC B
.ADD8BIT: ADD IX,BC .ADD8BIT: ADD IX,BC
;!TEST ;!TEST
@ -471,12 +475,33 @@ SET_DOS_OFF: EX AF,AF'
EX AF,AF' EX AF,AF'
RET 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 AND 1
LD B,A LD B,A
OR #3C OR #3C
OUT (FDC_93.DrvCTRL),A OUT (FDC_93.DrvCTRL),A
IN A,(SLOT3) IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
@ -489,7 +514,8 @@ S_FDD: PUSH BC
OUT (SLOT3),A OUT (SLOT3),A
POP BC POP BC
RET RET
; ////////////////////////////////////////////////////////////////////////
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; CHANGE_SPEED: IN A,(SLOT3) ; CHANGE_SPEED: IN A,(SLOT3)
@ -532,9 +558,7 @@ CHANGE_SPEED: IN A,(SLOT3)
XOR #80 XOR #80
LD (SYS_PAGE.FDD_TABLE.DISK),A LD (SYS_PAGE.FDD_TABLE.DISK),A
JR SET_SPEED.set JR SET_SPEED.set
; ;
;
SET_SPEED: IN A,(SLOT3) SET_SPEED: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
@ -561,9 +585,11 @@ WAIT_FDD_FOR_SEARCH_TRACK:
CALL .LOOP CALL .LOOP
POP BC POP BC
RET NC RET NC
;
CALL CHANGE_SPEED CALL CHANGE_SPEED
DEC C DEC C
JR NZ,WAIT_FDD_FOR_SEARCH_TRACK JR NZ,WAIT_FDD_FOR_SEARCH_TRACK
;
SCF SCF
RET RET
; ;
@ -580,6 +606,7 @@ WAIT_FDD_FOR_SEARCH_TRACK:
DJNZ .LOOP DJNZ .LOOP
SCF SCF
RET RET
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -592,11 +619,11 @@ DISK_ID: EXX
LD A,#18 ;!TODO ¢ë¯¨á âì ª®¬¬ ­¤ë ‚ƒ ;SEARCH ;!HARDCODE CMD Š<>1818ƒ93 LD A,#18 ;!TODO ¢ë¯¨á âì ª®¬¬ ­¤ë ‚ƒ ;SEARCH ;!HARDCODE CMD Š<>1818ƒ93
CALL EXECOM CALL EXECOM
; ªã᮪ ¤«ï ¡ëáâàëå ä«®¯¯ à¥© ; ªã᮪ ¤«ï ¡ëáâàëå ä«®¯¯ à¥©
LD BC,#0104 ; 1 - áçñâ稪 LD BC,#0104 ; áçñâ稪¨
CALL WAIT_FDD_FOR_SEARCH_TRACK CALL WAIT_FDD_FOR_SEARCH_TRACK
JR NC,.Read_Index JR NC,.Read_Index
; ªã᮪ ¤«ï â®à¬®§­ëå ä«®¯¯ à¥© ; ªã᮪ ¤«ï â®à¬®§­ëå ä«®¯¯ à¥©
LD BC,#0504 ; 1 - áçñâ稪 LD BC,#0804 ; áçñâ稪¨
CALL WAIT_FDD_FOR_SEARCH_TRACK CALL WAIT_FDD_FOR_SEARCH_TRACK
JR NC,.Read_Index JR NC,.Read_Index
EXX EXX

View File

@ -676,6 +676,7 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + I
AND D AND D
CP E CP E
JR Z,.ok JR Z,.ok
;
DEC HL DEC HL
LD A,L LD A,L
OR H OR H
@ -684,8 +685,8 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + I
POP HL POP HL
DEC L DEC L
JR NZ,.loop JR NZ,.loop
; ; error
.error: LD A,BIOS.Error.NotReady LD A,BIOS.Error.NotReady
SCF SCF
RET RET
; ;

View File

@ -89,89 +89,63 @@ RAM_DRV_READ_WRITE:
LD L,B LD L,B
IN A,(SLOT3) IN A,(SLOT3)
LD H,A LD H,A
; LD A,H
; OR L
; JR NZ,.error_stack2 ; if sector_high > 0
; POP AF
POP AF POP AF
EX (SP),HL EX (SP),HL
PUSH AF PUSH AF
LD A,H LD A,H
OR L OR L
JR NZ,.error_stack2 ; if sector_high > 0 JR NZ,.error_stack2 ; if sector_high > 0
;
POP AF POP AF
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD A,C ; ¢ ॣ C ª®¬ ­¤  ç⥭¨ï ¨«¨ § ¯¨á¨ LD A,C ; ¢ ॣ C ª®¬ ­¤  ç⥭¨ï ¨«¨ § ¯¨á¨
EX AF,AF' EX AF,AF'
; A' = command ; A' = command
PUSH BC ; Sector_counter PUSH BC ; Sector_counter
PUSH DE ; Address PUSH DE ; Address
PUSH IX ; Sector_low PUSH IX ; Sector_low
AND #0F ;­®¬¥à à ¬¤¨áª  AND #0F ;­®¬¥à à ¬¤¨áª 
;LD C,BIOS.GET_RAMD_ST
;RST_to_BIOS
CALL GET_RAMD_ST CALL GET_RAMD_ST
; A = Memory Block ID ; A = Memory Block ID
POP DE ; Sector_low POP DE ; Sector_low
POP HL ; Address POP HL ; Address
POP BC ; Sector_counter POP BC ; Sector_counter
JR C,.error_stack1 JR C,.error_stack1
;
SLA E SLA E
RL D ; Sector_low * 2 RL D ; Sector_low * 2
JR C,.error_stack1 JR C,.error_stack1
;
PUSH BC PUSH BC
SLA B ; Sector_counter * 2 - ⨯  ã ¤¨áª¥âë ᥪâ®à 512 ¡ ©â®¢ SLA B ; Sector_counter * 2 - ⨯  ã ¤¨áª¥âë ᥪâ®à 512 ¡ ©â®¢
JR C,.error_stack2 JR C,.error_stack2
;
PUSH DE PUSH DE
//PUSH BC
;LD C,BIOS.BLK_RD_WR
;RST_to_BIOS
CALL BLK_RD_WR CALL BLK_RD_WR
JR C,.error_stack3 JR C,.error_stack3
; hl = address + Sector_low * 256 * Sector_counter ;
; hl = address + Sector_low * 256 * Sector_counter
//POP BC
//SRL B
POP DE POP DE
; de = Sector_low * 2 ; de = Sector_low * 2
SRL D SRL D
RR E RR E
; de = Sector_low ; de = Sector_low
POP BC POP BC
; b = Sector_counter ; b = Sector_counter
LD A,E LD A,E
ADD A,B ADD A,B
LD E,A LD E,A
LD A,D LD A,D
ADC A,0 ADC A,0
LD D,A LD D,A
; de = Sector_counter + Sector_low ; de = Sector_counter + Sector_low
PUSH DE PUSH DE
POP IX POP IX
; ix = Sector_counter + Sector_low ; ix = Sector_counter + Sector_low
EX DE,HL EX DE,HL
; de = address + Sector_low * 256 * Sector_counter ; de = address + Sector_low * 256 * Sector_counter
LD HL,0 LD HL,0
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
AND A AND A
@ -179,6 +153,7 @@ RAM_DRV_READ_WRITE:
; HL:IX - Sector + Sector counter ; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector) ; DE - Address + (Sector counter * Size sector)
RET RET
;
.error_stack3: .error_stack3:
POP BC POP BC
.error_stack2: .error_stack2:

View File

@ -1201,56 +1201,109 @@ SYSID: DZ "Starting..."
; .Size EQU $ - FD144A ; .Size EQU $ - FD144A
; FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD ; FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD
; .Size EQU $ - FD720A ; .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) FDD_INSTAL: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD HL,SYS_PAGE.FDD_TABLE 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 .FILLFDD: LD (HL),C
INC HL INC HL
DJNZ .FILLFDD DJNZ .FILLFDD
; ;
;EX AF,AF' ;
;OUT (SLOT3),A LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311
;LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 CALL .Choose_FDD_Type
;CALL GET_CMOS_VALUE JR NZ,.next_FDD
;LD HL,FD720A ;
;OR A LD DE,SYS_PAGE.FDD_TABLE
;JR Z,.SETFD0 LD BC,SYS_PAGE.FDD_TABLE.Size
LD HL,FDD_INIT_TABLE LDIR
;DEC A .next_FDD: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11
;JR NZ,.NOFDD0 CALL .Choose_FDD_Type
;.SETFD0: ;IN A,(SLOT3) 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' ;EX AF,AF'
;LD A,SYS_PAGE ;LD A,SYS_PAGE
;OUT (SLOT3),A ;OUT (SLOT3),A
LD DE,SYS_PAGE.FDD_TABLE LD DE,SYS_PAGE.FDD_TABLE
; B=0 LD BC,SYS_PAGE.FDD_TABLE.Size
LD C,SYS_PAGE.FDD_TABLE.Size
LDIR LDIR
;EX AF,AF' ;EX AF,AF'
;OUT (SLOT3),A ;OUT (SLOT3),A
;.NOFDD0: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 .NOFDD0: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11
;CALL GET_CMOS_VALUE CALL GET_CMOS_VALUE
;LD HL,FD720A LD HL,FDD_INIT_TABLE_525
;OR A OR A
;JR Z,.SETFD1 JR Z,.SETFD1
;LD HL,FD144A ;
;DEC A LD HL,FDD_INIT_TABLE_35
;JR NZ,.NOFDD1 DEC A
;.SETFD1: IN A,(SLOT3) JR NZ,.NOFDD1
;
.SETFD1: ;
;IN A,(SLOT3)
;EX AF,AF' ;EX AF,AF'
;LD A,SYS_PAGE ;LD A,SYS_PAGE
;OUT (SLOT3),A ;OUT (SLOT3),A
;LD DE,SYS_PAGE.FDD_1_TABLE LD DE,SYS_PAGE.FDD_1_TABLE
;LD BC,FD144A.Size LD BC,FD144A.Size
;LDIR LDIR
EX AF,AF' .NOFDD1: EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
.NOFDD1: RET RET
*/
PIDNUM: LD HL,memBUFFER.ID PIDNUM: LD HL,memBUFFER.ID

View File

@ -279,22 +279,28 @@ SettingsItemsTabs:
IF NEW_FEATURE : DB paramLine : ENDIF IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum DB columnNum,lineNum
DB paramName DB paramName
DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0000 DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0010
DB msgStrings.valAuto DB msgStrings.val35
DB msgStrings.val525
DB msgStrings.valDash6
; DB msgStrings.valAuto
; DB msgStrings.val720 ; DB msgStrings.val720
; DB msgStrings.val1440 ; DB msgStrings.val1440
; DB msgStrings.valDash6 ; DB msgStrings.val1200
_mSETitemParams FddSecond _mSETitemParams FddSecond
DW OnChangeAction.nothing DW OnChangeAction.nothing
IF NEW_FEATURE : DB paramLine : ENDIF IF NEW_FEATURE : DB paramLine : ENDIF
DB columnNum,lineNum DB columnNum,lineNum
DB paramName DB paramName
DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'0000 DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'1000
DB msgStrings.valAuto DB msgStrings.val35
DB msgStrings.val525
DB msgStrings.valDash6
; DB msgStrings.valAuto
; DB msgStrings.val720 ; DB msgStrings.val720
; DB msgStrings.val1440 ; DB msgStrings.val1440
; DB msgStrings.valDash6 ; DB msgStrings.val1200
_mSETitemParams PriIdeMA _mSETitemParams PriIdeMA
DW OnChangeAction.nothing DW OnChangeAction.nothing
@ -653,6 +659,8 @@ msgStrings:
_mSetStr valAuto, tmp_Counter : DZ 'Auto ' _mSetStr valAuto, tmp_Counter : DZ 'Auto '
; _mSetStr val720, tmp_Counter : DZ '720K ' ; _mSetStr val720, tmp_Counter : DZ '720K '
; _mSetStr val1440, tmp_Counter : DZ '1.44M ' ; _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 valDash6, tmp_Counter : DZ '------'
_mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : ' _mSetStr parFddSecond, tmp_Counter : DZ 'FDD second : '
_mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' _mSetStr parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : '
@ -832,6 +840,8 @@ msgRusStrings:
_mSetStrRus valAuto, tmp_Counter : DZ '¢â® ' _mSetStrRus valAuto, tmp_Counter : DZ '¢â® '
; _mSetStrRus val720, tmp_Counter : DZ '720K ' ; _mSetStrRus val720, tmp_Counter : DZ '720K '
; _mSetStrRus val1440, tmp_Counter : DZ '1.44M ' ; _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 valDash6, tmp_Counter : DZ '------'
_mSetStrRus parFddSecond, tmp_Counter : DZ 'FDD ¢â®à®© : ' _mSetStrRus parFddSecond, tmp_Counter : DZ 'FDD ¢â®à®© : '
_mSetStrRus parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : ' _mSetStrRus parPriIdeMA, tmp_Counter : DZ 'Primary IDE Master',#FF,' : '