This commit is contained in:
Tolik 2024-06-29 02:44:01 +10:00
parent 36353e7d08
commit 61de8fd9a0
9 changed files with 281 additions and 229 deletions

View File

@ -482,7 +482,7 @@ write_to_BPB: PUSH BC
;
write_no_BPB: ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
ld de,#55AA
ld de,Dss.DRV.GenIOCTL.Enter
ld bc,Dss.DRV.GenIOCTL.GetParams
rst ToDSS.DRV
ex af,af'

View File

@ -31,8 +31,8 @@ BOOTDSK:
;
.loop: PUSH BC
LD A,C
LD DE,#55AA
LD BC,256*0 + Dss.DRV.GenIOCTL
LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,C ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 

View File

@ -519,7 +519,9 @@ LOADDIR: ;!TODO optimize
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
LD HL,#4000 ;!HARDCODE à §¬¥à ¤¨à¥ªâ®à¨¨
;LD HL,(CORE_BUFFERS.FatBuffer.BytesPerCluster) ; !FIXIT ¢ëç¨â뢠âì ¯®«­®áâìî ª â «®£
LD HL,#4000 ; à §¬¥à ¤¨à¥ªâ®à¨¨
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
;
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤ 

View File

@ -1 +1 @@
994
995

View File

@ -44,7 +44,7 @@ ReScanDRV:
; [¨é¥¬ çâ® §  ¤à ©¢]
EX DE,HL
; FDD?
LD HL,FDDRIVE
LD HL,FDD_DRV.API_TABLE
AND A
SBC HL,DE
JR Z,.nextN ; ¯à®¯ã᪠FDD ¤à ©¢®¢

View File

@ -122,104 +122,130 @@
; 12 (0Ch) - BUSY (DEVICE OPENED)
; 13 (0Dh) - RESERVED
R_COM EQU #0F ;Command/Status
R_TRK EQU #3F ;Track
R_SEC EQU #5F ;Sector
R_DAT EQU #7F ;Data
R_DSK EQU #FF ;Drive Control
; R_COM EQU #0F ;Command/Status
; R_TRK EQU #3F ;Track
; R_SEC EQU #5F ;Sector
; R_DAT EQU #7F ;Data
; R_DSK EQU #FF ;Drive Control
; COM_B EQU #1B
////////////////////////////////////////////////////////////////////////
MODULE FDD_DRV
////////////////////////////////////////////////////////////////////////
COM_B EQU #1B
;-------------------------------------------------
; Ž¡à ¡®â稪 FDD (rst 18h)
;-------------------------------------------------
FDDRIVE:
INC C
DEC C
JP Z,.INIT ;#00
DEC C
JP Z,.RESE ;#01
DEC C
JP Z,.STAT ;#02
DEC C
JP Z,.CHEK ;#03
DEC C
JP Z,.GBPB ;#04
DEC C
JP Z,.READD ;#05
DEC C
JP Z,.WRITED ;#06
DEC C
JP Z,.REMOV_F ;#07
DEC C
JP Z,.IOCTL_F ;#08
DEC C
JP Z,.RESRV_F ;#09
.RESRV_F:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;Commands for restart #18
.INIT: LD A,2 ;ª®«¨ç¥á⢮ FDD ¢ ª®¬¯¥ ;!FIXIT   ¥á«¨ ®âª«îçã ¢ <20>ˆŽ?
AND A
RET
.RESE: LD C,BIOS.DRV_RESET
RST ToBIOS
RET
.STAT: XOR A
RET
.CHEK: ;!FIXIT ¯à®¢¥àïâì ƒ93 ª®£¤  íâ® áâ ­¥â ¢®§¬®¦­ë¬
IF NON_REMOVABLE_FDD
XOR A
ELSE
LD A,#FF
OR A
ENDIF
API_TABLE: INC C
DEC C
JP Z,Init ;#00 Init
DEC C
JP Z,Open ;#01 Open
DEC C
JP Z,Close ;#02 Close
DEC C
JP Z,MediaCheck ;#03 MediaCheck
DEC C
JP Z,GetBPB ;#04 GetBPB
DEC C
JP Z,Read ;#05 Read
DEC C
JP Z,Write ;#06 Write
DEC C
JP Z,Removable ;#07 Removable
DEC C
JP Z,GenIOCTL ;#08 GenIOCTL
DEC C
JP Z,Reserved ;#09
;
Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Commands for restart #18 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
Init: LD A,2 ;ª®«¨ç¥á⢮ FDD ¢ ª®¬¯¥ ;!FIXIT   ¥á«¨ ®âª«îçã ¢ <20>ˆŽ?
AND A
RET
; ; ;
;
Open: LD C,BIOS.DRV_RESET
RST ToBIOS
RET
; ; ;
;
Close: XOR A
RET
; ; ;
;!FIXIT ¯à®¢¥àïâì ƒ93 ª®£¤  íâ® áâ ­¥â ¢®§¬®¦­ë¬
MediaCheck: IF NON_REMOVABLE_FDD
XOR A
ELSE
LD A,#FF
OR A
ENDIF
RET
; ; ;
;DE - ADDRESS
.GBPB: LD IX,0
LD HL,0
PUSH DE
PUSH AF
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP DE
POP HL
RET C
LD BC,#0018
ADD HL,BC
LD E,(HL)
PUSH DE
LD A,D
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
LD A,H
POP HL
PUSH HL
LD H,A
POP AF
LD C,BIOS.DRV_SET_PAR
RST ToBIOS
XOR A
RET
;READTR:
XOR A
RET
GetBPB: LD IX,0
LD HL,0
PUSH DE
PUSH AF
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP DE
POP HL
RET C
LD BC,#0018
ADD HL,BC
LD E,(HL)
PUSH DE
LD A,D
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
LD A,H
POP HL
PUSH HL
LD H,A
POP AF
LD C,BIOS.DRV_SET_PAR
RST ToBIOS
XOR A
RET
; ; ;
.READD: LD C,BIOS.DRV_READ
RST ToBIOS
RET
.WRITED:
LD C,BIOS.DRV_WRITE
RST ToBIOS
RET
; !TODO read track?
;READTR: XOR A
; RET
; ; ;
;
Read: LD C,BIOS.DRV_READ
RST ToBIOS
RET
; ; ;
;
Write: LD C,BIOS.DRV_WRITE
RST ToBIOS
RET
; ; ;
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
@ -227,105 +253,120 @@ FDDRIVE:
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
.IOCTL_F:
BIT 7,B
JR NZ,.O_CTL_F
INC B
DEC B
JP Z,.FGETPRM
; DEC B
; JP Z,FRDTRAC
; DEC B
; JP Z,FCHTRAC
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
.O_CTL_F:
RES 7,B
INC B
DEC B
JP Z,.FSETPRM
; DEC B
; JP Z,FWRTRAC
; DEC B
; JP Z,FFRTRAC
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
GenIOCTL: BIT 7,B
JR NZ,.O_CTL_F
INC B
DEC B
JP Z,.GetParams
;!TODO
;DEC B
;JP Z,.ReadTrack
;DEC B
;JP Z,.TestTRK
;
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;
.O_CTL_F: RES 7,B
INC B
DEC B
JP Z,.SetParams
;!TODO
;DEC B
;JP Z,.WriteTRK
;DEC B
;JP Z,.FormatTRK
;
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
; ; ;
; HL:DE - SECTORS ON LOGICAL DISK
; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - EXTENDED INFORMATION
; D0...D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.FGETPRM:
EX DE,HL
LD BC,#55AA
AND A
SBC HL,BC
LD L,A
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET NZ
LD A,L
AND #0F
PUSH AF
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
JR C,.NONEF
PUSH HL
PUSH DE
LD A,H
LD H,0
.MULL1 ADD HL,HL
DEC A
JR NZ,.MULL1
; HL - SECTOR PER CYLLINDER
LD B,H
LD C,L
LD HL,0
EX AF,AF'
XOR A
.MULL2 EX AF,AF'
ADD HL,BC
ADC A,0
DEC DE
EX AF,AF'
LD A,D
OR E
JR NZ,.MULL2
EX AF,AF'
LD E,A
EX DE,HL
EXX
POP DE
POP HL
POP AF
EX AF,AF'
LD A,B
LD C,L
LD B,0
LD L,H
LD H,B
EX DE,HL
EXX
LD C,0 ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
AND A
RET
.NONEF POP AF
LD A,DSS_Error.drv.INVALID_DRIVE
SCF
RET
; ‚室: - A - Drive number
; ‚ë室:
; HL:DE - SECTORS ON LOGICAL DISK
; C - PARTITION RECORD NUMBER IN DRIVE MBR. 0 for fdd ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - EXTENDED INFORMATION
; D0...D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.GetParams: EX DE,HL
LD BC,#55AA
AND #0F
SBC HL,BC
JR Z,.next
;
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
;
.next: PUSH AF
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
JR C,.NONE_FDD
PUSH HL
PUSH DE
LD A,H
LD H,0
;
.mull_loop1: ADD HL,HL
DEC A
JR NZ,.mull_loop1
;
; HL - SECTOR PER CYLLINDER
; A=0 ZF=0 CF=0
LD B,H
LD C,L
;LD HL,0
;XOR A
LD H,A
LD L,A
EX AF,AF'
;
.mull_loop2: EX AF,AF'
ADD HL,BC
ADC A,0
DEC DE
EX AF,AF'
LD A,D
OR E
JR NZ,.mull_loop2
;
; A=0 ZF=0 CF=0
EX AF,AF'
LD E,A
EX DE,HL
EXX
POP DE
POP HL
POP AF
EX AF,AF'
; A=0 ZF=0 CF=0
LD A,B
LD B,0
LD C,L
LD L,H
LD H,B
EX DE,HL
EXX
; A=0 ZF=0 CF=0
LD C,0 ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
AND A
RET
;
.NONE_FDD: POP BC
LD A,DSS_Error.drv.INVALID_DRIVE
; CF=1
RET
; ; ;
; HL:DE - SECTORS ON LOGICAL DISK
@ -338,35 +379,40 @@ FDDRIVE:
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.FSETPRM:
PUSH AF
EXX
EX DE,HL
LD H,L
LD L,C
POP AF
AND #0F
PUSH AF
PUSH HL
PUSH DE
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP DE
POP HL
JR C,.NONEF
POP AF
LD C,BIOS.DRV_SET_PAR
RST ToBIOS
RET C
AND A
RET
.SetParams: PUSH AF
EXX
EX DE,HL
LD H,L
LD L,C
POP AF
AND #0F
PUSH AF
PUSH HL
PUSH DE
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP DE
POP HL
JR C,.NONE_FDD
POP AF
LD C,BIOS.DRV_SET_PAR
JP ToBIOS
;RST ToBIOS
;RET C
;AND A
;RET
; ; ;
.REMOV_F:
LD A,1
AND A
RET
Removable: ; LD A,1
; AND A
XOR A
INC A
RET
; ; ;
;==============================================
ENDMODULE ; FDD_DRV
////////////////////////////////////////////////////////////////////////

View File

@ -132,9 +132,9 @@ INITDVC: XOR A
LD BC,DEVICE.Size + LOGDRV.Size + RAMDTBL.Size - 1
LDIR
; FDD ¤¥¢ ©áë
CALL FDDRIVE.INIT ; ã§­ âì ç¨á«® FDD-¤¥¢ ©á®¢
LD DE,FDDRIVE ;  ¤à¥á ®¡à ¡®â稪  ⥪. ¤¥¢ ©á 
CALL MAKEDVC ; ¨­¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
CALL FDD_DRV.Init ; ã§­ âì ç¨á«® FDD-¤¥¢ ©á®¢
LD DE,FDD_DRV.API_TABLE ;  ¤à¥á ®¡à ¡®â稪  ⥪. ¤¥¢ ©á 
CALL MAKEDVC ; ¨­¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
; HDD ¤¥¢ ©áë
.if_old: CALL INIT_H ; ¥á«¨ ­  áâ à⥠¢¥àá¨ï BIOS ­¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦­® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥­  ª®¤  ­  XOR A : RET
LD DE,HDDRIVE

View File

@ -76,20 +76,24 @@ cmd_info: CALL Get_Path
LD HL,.none_string
LD DE,Buffers.bat_params.PRM7 ; Volume label
CALL ncopy_string
LD HL,.Unknown_FS
LD DE,Buffers.bat_params.PRM8 ; Volume fikle system
LD HL,.Unknown_str
LD DE,Buffers.bat_params.PRM8 ; Volume file system
CALL ncopy_string
;
POP BC
PUSH BC
LD A,C
LD DE,#55AA
LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV
JR C,.next_drv
; !FIXIT ­¥ ¢®§¢à é ¥â à §¬¥à ᥪâ®à , ¯®í⮬ã å à¤ª®à ¯® 512
RST ToDSS.DRV ; !FIXIT ­¥ ¢®§¢à é ¥â à §¬¥à ᥪâ®à , ¯®í⮬ã å à¤ª®à ¯® 512
JR NC,.calc_size
;
LD HL,.Unknown_str
LD DE,Buffers.bat_params.PRM5 ; Drive size
CALL ncopy_string
JR .print_info_2
; HL:DE * 512 = A:HL:H'L'
RL E
.calc_size: RL E
RL D
RL L
RL H
@ -103,7 +107,7 @@ cmd_info: CALL Get_Path
JR .convert_hex
;
.Collect_Msg: DZ " A: <WAITING>\r" ; ¯ âç¨âáï ¡ãª¢  ¤à ©¢  ¢ 横«¥
.Unknown_FS: DZ "unknown"
.Unknown_str: DZ "unknown"
.none_string: DZ "none"

View File

@ -1 +1 @@
433
434