переделать весь FDD_DRIVER на IY

This commit is contained in:
Анатолий Белянский 2026-01-24 20:10:46 +10:00
parent 53ee837c81
commit 67c829e788

View File

@ -191,7 +191,6 @@ 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) ; ãáâ ­ ¢«¨¢ âì ®â¤¥«ì­® ¯¥à¥¬¥­­ãî 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
@ -211,9 +210,14 @@ FDD_5x_LONG_READ:
CALL FDD_RW_SECTOR CALL FDD_RW_SECTOR
JR C,.ERRDOS JR C,.ERRDOS
; à §¬¥à ᥪâ®à  ; à §¬¥à ᥪâ®à 
LD D,YH IN A,(SLOT3)
LD E,YL EX AF,AF'
; LD A,SYS_PAGE
OUT (SLOT3),A
LD E,(IY + FDD_TABLE_s.BytesPerSector)
LD D,(IY + FDD_TABLE_s.BytesPerSector + 1)
EX AF,AF'
OUT (SLOT3),A
POP HL POP HL
POP BC POP BC
ADD HL,DE ADD HL,DE
@ -229,7 +233,8 @@ FDD_5x_LONG_READ:
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'
EX DE,HL EX DE,HL
@ -331,10 +336,11 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
LD A,E LD A,E
INC A INC A
OUT (FDC_93.Sector),A OUT (FDC_93.Sector),A
IN A,(SLOT3) ;
EX AF,AF' ;IN A,(SLOT3)
LD A,XH ;EX AF,AF'
OUT (SLOT3),A ;LD A,XH
;OUT (SLOT3),A
; ;
LD B,4 LD B,4
LD C,FDC_93.Data LD C,FDC_93.Data
@ -346,23 +352,31 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
.wait_loop: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ .wait_loop: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ
AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ­­ëå = 1). b7: INTRQ (¢ë¯®«­ï¥âáï ª®¬ ­¤  = 0). AND %1100'0000 ;b6: DRQ (§ ¯à®á ¤ ­­ëå = 1). b7: INTRQ (¢ë¯®«­ï¥âáï ª®¬ ­¤  = 0).
JR NZ,.RW_PROC JR NZ,.RW_PROC
;
INC DE INC DE
LD A,E LD A,E
OR D OR D
JR NZ,.wait_loop JR NZ,.wait_loop
;
DJNZ .wait_loop DJNZ .wait_loop
SCF SCF
JR .after_rw ; error ;JR .after_rw ; error
JR .after_rw_end ; error
; ;
.RW_PROC: EXX .RW_PROC: IN A,(SLOT3)
EX AF,AF'
; [ ] 15/04/25 à §¬¥à ᥪâ®à  ¡®«ìè¥, 祬 ãáâ ­®¢«¥­® ¢ SYS_PAGE.FDD_TABLE.BytesPerSector ¢ë§®¢¥â ®è¨¡ªã
LD A,SYS_PAGE
OUT (SLOT3),A
LD E,(IY + FDD_TABLE_s.BytesPerSector)
LD D,(IY + FDD_TABLE_s.BytesPerSector + 1)
LD A,XH
OUT (SLOT3),A
INC DE
EXX
BIT 5,B BIT 5,B
EXX EXX
; [ ] 15/04/25 à §¬¥à ᥪâ®à  ¡®«ìè¥, 祬 ãáâ ­®¢«¥­® ¢ SYS_PAGE.FDD_TABLE.BytesPerSector ¢ë§®¢¥â ®è¨¡ªã JR NZ,.write_loop ; १ã«ìâ â BIT 5,B
LD D,YH
LD E,YL
INC DE
;
JR NZ,.write_loop
;READ BYTE ;READ BYTE
.read_loop: DEC DE .read_loop: DEC DE
LD A,D LD A,D
@ -379,7 +393,7 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
; ;
POP DE .after_rw_end: POP DE
POP HL POP HL
;EI ;EI
LD A,BIOS.Error.NotReady LD A,BIOS.Error.NotReady
@ -549,43 +563,6 @@ SET_FDD: PUSH BC
; FDD.SET720: LD A,FDD_Density.SET_720 ; FDD.SET720: LD A,FDD_Density.SET_720
; OUT (FDD_Density),A ; OUT (FDD_Density),A
; RET ; RET
<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm
;----------------------------------------------------------------------;
; CHANGE_SPEED: IN A,(SLOT3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(SYS_PAGE.FDD_TABLE.DISK)
; XOR #80
; LD (SYS_PAGE.FDD_TABLE.DISK),A
; RLA
; EX AF,AF'
; OUT (SLOT3),A
; EX AF,AF'
; JR NC,FDD.SET720
; FDD.SET1440: LD A,FDD_Density.SET_1440
; OUT (FDD_Density),A
; RET
; ;
; ;
; SET_SPEED: IN A,(SLOT3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(SYS_PAGE.FDD_TABLE.DISK)
; ;AND #80
; RLA
; EX AF,AF'
; OUT (SLOT3),A
; EX AF,AF'
; JR C,FDD.SET1440
; FDD.SET720: LD A,FDD_Density.SET_720
; OUT (FDD_Density),A
; RET
=======
>>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm
CHANGE_SPEED: IN A,(SLOT3) CHANGE_SPEED: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
@ -594,13 +571,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
<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm
; ;
;
=======
;
>>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm
SET_SPEED: IN A,(SLOT3) SET_SPEED: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
@ -660,24 +631,6 @@ DISK_ID: EXX
OUT (FDC_93.Data),A OUT (FDC_93.Data),A
LD A,#18 ;!TODO ¢ë¯¨á âì ª®¬¬ ­¤ë ‚ƒ ;SEARCH ;!HARDCODE CMD Š<>1818ƒ93 LD A,#18 ;!TODO ¢ë¯¨á âì ª®¬¬ ­¤ë ‚ƒ ;SEARCH ;!HARDCODE CMD Š<>1818ƒ93
CALL EXECOM CALL EXECOM
<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm
LD C,4 ; áçñâ稪
.loop_reg_C: LD A,#C0 ;!HARDCODE CMD Š<>1818ƒ93
OUT (FDC_93.Command),A
LD HL,#F000 ; áçñâ稪
.loop_reg_HL: IN A,(FDC_93.DrvCTRL)
AND %1100'0000
JR NZ,.Read_Index
;
.ID_LP4: DEC HL
LD A,H
OR L
JR NZ,.loop_reg_HL
;
CALL CHANGE_SPEED
DEC C
JR NZ,.loop_reg_C
=======
; ªã᮪ ¤«ï ¡ëáâàëå ä«®¯¯ à¥© ; ªã᮪ ¤«ï ¡ëáâàëå ä«®¯¯ à¥©
LD BC,#0104 ; áçñâ稪¨ LD BC,#0104 ; áçñâ稪¨
CALL WAIT_FDD_FOR_SEARCH_TRACK CALL WAIT_FDD_FOR_SEARCH_TRACK
@ -686,7 +639,6 @@ DISK_ID: EXX
LD BC,#0804 ; áçñâ稪¨ LD BC,#0804 ; áçñâ稪¨
CALL WAIT_FDD_FOR_SEARCH_TRACK CALL WAIT_FDD_FOR_SEARCH_TRACK
JR NC,.Read_Index JR NC,.Read_Index
>>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm
EXX EXX
;SCF ;SCF
RET RET
@ -697,13 +649,8 @@ DISK_ID: EXX
; ­®¬¥à £®«®¢ª¨ BYTE ; ­®¬¥à £®«®¢ª¨ BYTE
; ­®¬¥à ᥪâ®à  BYTE ; ­®¬¥à ᥪâ®à  BYTE
; ¤«¨­  ᥪâ®à  BYTE ; ¤«¨­  ᥪâ®à  BYTE
<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm
; ª®­â஫쭠ï á㬬  WORD
LD H,4 ; !HARDCODE áçñâ稪 ¤® ¡ ©â  à §¬¥à  ᥪâ®à 
=======
; ª®­â஫쭠ï á㬬  WORD ; ª®­â஫쭠ï á㬬  WORD
LD H,4 ; !HARDCODE áçñâ稪 ¤® ¡ ©â  à §¬¥à  ᥪâ®à  LD H,4 ; !HARDCODE áçñâ稪 ¤® ¡ ©â  à §¬¥à  ᥪâ®à 
>>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm
.ID_LP2: IN A,(FDC_93.Data) .ID_LP2: IN A,(FDC_93.Data)
DEC H DEC H
JR NZ,.ID_LP3 JR NZ,.ID_LP3
@ -769,12 +716,16 @@ SEEK: LD XL,A
; DJNZ PMS2 ; DJNZ PMS2
; RET ; RET
P50ms: PUSH BC P50ms: PUSH BC
LD A,12 ;LD A,12
LD B,12
.P1ms: LD C,255 .P1ms: LD C,255
.PMS: DEC C .PMS: DEC C
JR NZ,.PMS JR NZ,.PMS
DEC A ;
JR NZ,.P1ms ;DEC A
;JR NZ,.P1ms
DJNZ .P1ms
;
POP BC POP BC
RET RET
; ;