mirror of
https://github.com/Tolik-Trek/Sprinter-BIOS.git
synced 2026-06-15 01:11:47 +03:00
FDD driver 5x работает с разными буферами для каждого из FDD
This commit is contained in:
parent
67c829e788
commit
2a4e06db96
@ -1 +1 @@
|
||||
Subproject commit 2fec6202f716cfa3ed48fb9bfd79d1081cc2721b
|
||||
Subproject commit 5a2e8b02b384c515510798a2b94537211dfaa310
|
||||
@ -30,16 +30,22 @@
|
||||
;[]===========================================================[]
|
||||
;!FIXIT ¢á¥£¤ ¨¤¥â à ¡®â á ¤ 묨 ¤«ï ¤¨áª €
|
||||
;!FIXIT ç¨â âì ¤ ë¥ á ã«¥¢®© ¤®à®¦ª¨? <20>ਤ㬠âì çâ® ¤¥« âì á £¥®¬¥âਥ© ä«®¯ ३
|
||||
FDD_5x_GET_PAR: IN A,(SLOT3)
|
||||
FDD_5x_GET_PAR: CALL SELECT_FDD
|
||||
RET C
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
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)
|
||||
LD B,A
|
||||
LD L,(IY + FDD_TABLE_s.SECTORS)
|
||||
LD H,(IY + FDD_TABLE_s.HEADS)
|
||||
LD E,(IY + FDD_TABLE_s.BytesPerSector)
|
||||
LD D,(IY + FDD_TABLE_s.BytesPerSector + 1)
|
||||
PUSH DE
|
||||
POP IX
|
||||
LD E,(IY + FDD_TABLE_s.CYLINDL)
|
||||
LD D,(IY + FDD_TABLE_s.CYLINDH)
|
||||
LD B,(IY + FDD_TABLE_s.DISK)
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
XOR A
|
||||
@ -57,21 +63,24 @@ FDD_5x_GET_PAR: IN A,(SLOT3)
|
||||
; D7 - "1" - High Density, "0" - Double Density
|
||||
;Return: None
|
||||
;[]===========================================================[]
|
||||
FDD_5x_SET_PAR: ;!TEST FDD 720/1440
|
||||
FDD_5x_SET_PAR: CALL SELECT_FDD
|
||||
RET C
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD A,B
|
||||
LD (SYS_PAGE.FDD_TABLE.SECTORS),HL
|
||||
LD (SYS_PAGE.FDD_TABLE.CYLINDL),DE
|
||||
LD (SYS_PAGE.FDD_TABLE.BytesPerSector),IX
|
||||
LD (SYS_PAGE.FDD_TABLE.DISK),A
|
||||
;
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD (IY + FDD_TABLE_s.SECTORS),L
|
||||
LD (IY + FDD_TABLE_s.HEADS),H
|
||||
LD (IY + FDD_TABLE_s.CYLINDL),E
|
||||
LD (IY + FDD_TABLE_s.CYLINDH),D
|
||||
PUSH IX
|
||||
POP DE
|
||||
LD (IY + FDD_TABLE_s.BytesPerSector),E
|
||||
LD (IY + FDD_TABLE_s.BytesPerSector + 1),D
|
||||
LD (IY + FDD_TABLE_s.DISK),B
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
AND A
|
||||
RET
|
||||
|
||||
@ -84,7 +93,8 @@ FDD_5x_SET_PAR: ;!TEST FDD 720/1440
|
||||
;[]===========================================================[]
|
||||
FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off
|
||||
CALL SET_DOS_ON
|
||||
CALL DISK_ID
|
||||
CALL SELECT_FDD
|
||||
CALL NC,DISK_ID
|
||||
PUSH AF
|
||||
CALL SET_DOS_OFF
|
||||
POP AF
|
||||
@ -99,17 +109,21 @@ FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off
|
||||
;[]===========================================================[]
|
||||
FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off
|
||||
CALL SET_DOS_ON
|
||||
CALL SET_FDD
|
||||
CALL DISK_ID
|
||||
CALL SELECT_FDD
|
||||
CALL NC,DISK_ID
|
||||
JR C,.int
|
||||
; [ ] à §¬¥à ᥪâ®à
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD H,B
|
||||
LD L,0
|
||||
LD (SYS_PAGE.FDD_TABLE.BytesPerSector),HL
|
||||
XOR A
|
||||
CP B
|
||||
JR NZ,.SetSectorSize
|
||||
;
|
||||
LD A,#80
|
||||
.SetSectorSize: LD (IY + FDD_TABLE_s.BytesPerSector),A
|
||||
LD (IY + FDD_TABLE_s.BytesPerSector + 1),B
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
@ -133,12 +147,12 @@ FDD_5x_RESET: CALL SAVE_INTERRUPTS.switch_off
|
||||
OUT (FDC_93.DrvCTRL),A
|
||||
LD A,#3C
|
||||
OUT (FDC_93.DrvCTRL),A
|
||||
CALL SET_DOS_OFF
|
||||
JP SET_DOS_OFF
|
||||
; CF=1
|
||||
LD A,BIOS.Error.NotReady
|
||||
;LD A,BIOS.Error.NotReady
|
||||
;POP AF
|
||||
;JP SAVE_INTERRUPTS.restore
|
||||
RET
|
||||
;RET
|
||||
;[]===========================================================[]
|
||||
;Function: Read Sectors
|
||||
; A - Disk
|
||||
@ -172,18 +186,20 @@ FDD_5x_LONG_READ:
|
||||
CALL .Start
|
||||
JP SAVE_INTERRUPTS.restore
|
||||
;
|
||||
.Start: PUSH IY
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
;
|
||||
.Start: ;PUSH IY
|
||||
EX AF,AF'
|
||||
LD C,A ; Memory Page Number
|
||||
EX AF,AF'
|
||||
PUSH BC
|
||||
CALL SET_DOS_ON
|
||||
CALL SET_FDD
|
||||
CALL SELECT_FDD
|
||||
CALL C,SET_DOS_OFF
|
||||
RET C
|
||||
;
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
CALL SET_SPEED
|
||||
PUSH BC
|
||||
CALL NTRACK
|
||||
POP BC
|
||||
EX DE,HL
|
||||
@ -192,8 +208,7 @@ FDD_5x_LONG_READ:
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD XH,C ; Memory Page Number
|
||||
LD A,(SYS_PAGE.FDD_TABLE.SECTORS)
|
||||
LD C,A
|
||||
LD C,(IY + FDD_TABLE_s.SECTORS)
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
@ -241,7 +256,7 @@ FDD_5x_LONG_READ:
|
||||
POP IX
|
||||
POP HL
|
||||
POP BC
|
||||
POP IY
|
||||
;POP IY
|
||||
LD A,B
|
||||
LD C,B
|
||||
INC B
|
||||
@ -277,7 +292,7 @@ FDD_5x_LONG_READ:
|
||||
POP IX
|
||||
POP HL
|
||||
POP BC
|
||||
POP IY
|
||||
;POP IY
|
||||
PUSH AF
|
||||
LD C,A
|
||||
LD A,B
|
||||
@ -510,24 +525,29 @@ SET_DOS_OFF: EX AF,AF'
|
||||
; RET
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
SET_FDD: PUSH BC
|
||||
AND 1
|
||||
LD B,A
|
||||
SELECT_FDD: PUSH BC
|
||||
OR A
|
||||
LD IY,SYS_PAGE.FDD_TABLE.A
|
||||
JR Z,.IY_Selected
|
||||
;
|
||||
LD IY,SYS_PAGE.FDD_TABLE.B
|
||||
.IY_Selected: ;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
|
||||
LD B,(IY + FDD_TABLE_s.ID)
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
INC B
|
||||
POP BC
|
||||
RET
|
||||
RET NZ
|
||||
; no drive
|
||||
LD A,BIOS.Error.BadNumber
|
||||
SCF
|
||||
RET
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@ -563,20 +583,22 @@ SET_FDD: PUSH BC
|
||||
; FDD.SET720: LD A,FDD_Density.SET_720
|
||||
; OUT (FDD_Density),A
|
||||
; RET
|
||||
;
|
||||
; ‚室: IY - “ª § ⥫ì â ¡«¨æã ¢ë¡à ®£® FDD
|
||||
CHANGE_SPEED: IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(SYS_PAGE.FDD_TABLE.DISK)
|
||||
LD A,(IY + FDD_TABLE_s.DISK)
|
||||
XOR #80
|
||||
LD (SYS_PAGE.FDD_TABLE.DISK),A
|
||||
LD (IY + FDD_TABLE_s.DISK),A
|
||||
JR SET_SPEED.set
|
||||
;
|
||||
SET_SPEED: IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(SYS_PAGE.FDD_TABLE.DISK)
|
||||
LD A,(IY + FDD_TABLE_s.DISK)
|
||||
.set: AND #80
|
||||
RRA
|
||||
RRA
|
||||
@ -591,6 +613,7 @@ SET_SPEED: IN A,(SLOT3)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; ‚室: BC - ¢ãâ२© ¨ ¢¥è¨© áçñâ稪¨
|
||||
; IY - “ª § ⥫ì â ¡«¨æã ¢ë¡à ®£® FDD
|
||||
WAIT_FDD_FOR_SEARCH_TRACK:
|
||||
LD A,#C0 ;!HARDCODE CMD Š<>1818‚ƒ93
|
||||
OUT (FDC_93.Command),A
|
||||
@ -624,7 +647,8 @@ WAIT_FDD_FOR_SEARCH_TRACK:
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; ¯à¥àë¢ ¨ï ¤®«¦ë ¡ëâì ®âª«îç¥ë
|
||||
; ¢ë室: A - FDD_INIT_TABLE.DISK, B - sector size high byte
|
||||
; ‚室: IY - “ª § ⥫ì â ¡«¨æã ¢ë¡à ®£® FDD
|
||||
; ‚ë室: A - bit7 - 720/1440, B - sector size high byte
|
||||
DISK_ID: EXX
|
||||
CALL SET_SPEED
|
||||
IN A,(FDC_93.Track)
|
||||
@ -640,7 +664,8 @@ DISK_ID: EXX
|
||||
CALL WAIT_FDD_FOR_SEARCH_TRACK
|
||||
JR NC,.Read_Index
|
||||
EXX
|
||||
;SCF
|
||||
;SCF
|
||||
LD A,BIOS.Error.NotReady
|
||||
RET
|
||||
;
|
||||
.Read_Index: ;
|
||||
@ -666,7 +691,7 @@ DISK_ID: EXX
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(SYS_PAGE.FDD_TABLE.DISK)
|
||||
LD A,(IY + FDD_TABLE_s.DISK)
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
EX AF,AF'
|
||||
@ -681,7 +706,7 @@ SEEK: LD XL,A
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(SYS_PAGE.FDD_TABLE.DISK)
|
||||
LD A,(IY + FDD_TABLE_s.DISK)
|
||||
AND 1
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
@ -709,27 +734,22 @@ SEEK: LD XL,A
|
||||
RET Z
|
||||
.STOL: CALL P50ms
|
||||
RET
|
||||
;
|
||||
P50ms: PUSH BC
|
||||
LD B,12
|
||||
.P1ms: LD C,255
|
||||
.PMS: DEC C
|
||||
JR NZ,.PMS
|
||||
DJNZ .P1ms
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
;
|
||||
;P750ms LD B,3
|
||||
;PMS2 LD A,255
|
||||
; CALL P1ms
|
||||
; DJNZ PMS2
|
||||
; RET
|
||||
P50ms: PUSH BC
|
||||
;LD A,12
|
||||
LD B,12
|
||||
.P1ms: LD C,255
|
||||
.PMS: DEC C
|
||||
JR NZ,.PMS
|
||||
;
|
||||
;DEC A
|
||||
;JR NZ,.P1ms
|
||||
DJNZ .P1ms
|
||||
;
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;RESWG: LD A,8
|
||||
@ -753,12 +773,10 @@ EXECOM: OUT (FDC_93.Command),A
|
||||
LD HL,#0000 ; áçñâ稪
|
||||
PUSH BC
|
||||
LD B,3 ; áçñâ稪
|
||||
;
|
||||
.WREST: DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,.get_state
|
||||
;
|
||||
DJNZ .WREST
|
||||
;
|
||||
POP BC
|
||||
@ -784,8 +802,7 @@ NTRACK: PUSH HL
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(SYS_PAGE.FDD_TABLE.SECTORS)
|
||||
LD C,A
|
||||
LD C,(IY + FDD_TABLE_s.SECTORS)
|
||||
LD B,0
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
@ -793,13 +810,16 @@ NTRACK: PUSH HL
|
||||
.NTRK: INC A
|
||||
SBC HL,BC
|
||||
JR NC,.NTRK
|
||||
;
|
||||
EX AF,AF'
|
||||
LD A,XL
|
||||
OR XH
|
||||
JR Z,.NTRK3
|
||||
;
|
||||
EX AF,AF'
|
||||
DEC IX
|
||||
JR .NTRK
|
||||
;
|
||||
.NTRK3: EX AF,AF'
|
||||
ADD HL,BC
|
||||
DEC A
|
||||
|
||||
@ -1210,25 +1210,25 @@ FDD_INIT_TABLE_35: FDD_TABLE_s {
|
||||
#50, ;.CYLINDL
|
||||
#00, ;.CYLINDH
|
||||
#0200, ;.BytesPerSector
|
||||
#03 ;.ID
|
||||
#01 ;.ID 3.5"
|
||||
}
|
||||
;
|
||||
FDD_INIT_TABLE_525: FDD_TABLE_s {
|
||||
#00 ;.DISK
|
||||
#01 ;.DISK
|
||||
#09 ;.SECTORS
|
||||
#02 ;.HEADS
|
||||
#50 ;.CYLINDL
|
||||
#00 ;.CYLINDH
|
||||
#0200 ;.BytesPerSector
|
||||
#03 ;.ID
|
||||
#02 ;.ID 5.25"
|
||||
}
|
||||
|
||||
FDD_INSTAL: IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD HL,SYS_PAGE.FDD_TABLE
|
||||
LD BC,2*(SYS_PAGE.FDD_TABLE.Size*256) + #FF ; table_size*256 + fill_byte
|
||||
LD HL,SYS_PAGE.FDD_TABLE.A
|
||||
LD BC,+(2*FDD_TABLE_s)*256 + #FF ; table_size*256 + fill_byte
|
||||
.FILLFDD: LD (HL),C
|
||||
INC HL
|
||||
DJNZ .FILLFDD
|
||||
@ -1238,15 +1238,15 @@ FDD_INSTAL: IN A,(SLOT3)
|
||||
CALL .Choose_FDD_Type
|
||||
JR NZ,.next_FDD
|
||||
;
|
||||
LD DE,SYS_PAGE.FDD_TABLE
|
||||
LD BC,SYS_PAGE.FDD_TABLE.Size
|
||||
LD DE,SYS_PAGE.FDD_TABLE.A
|
||||
LD BC,SYS_PAGE.FDD_TABLE.A.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
|
||||
LD DE,SYS_PAGE.FDD_TABLE.B
|
||||
LD BC,SYS_PAGE.FDD_TABLE.B.Size
|
||||
LDIR
|
||||
.NOFDD1: EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user