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,68 +122,86 @@
; 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
API_TABLE: INC C
DEC C
JP Z,.INIT ;#00
JP Z,Init ;#00 Init
DEC C
JP Z,.RESE ;#01
JP Z,Open ;#01 Open
DEC C
JP Z,.STAT ;#02
JP Z,Close ;#02 Close
DEC C
JP Z,.CHEK ;#03
JP Z,MediaCheck ;#03 MediaCheck
DEC C
JP Z,.GBPB ;#04
JP Z,GetBPB ;#04 GetBPB
DEC C
JP Z,.READD ;#05
JP Z,Read ;#05 Read
DEC C
JP Z,.WRITED ;#06
JP Z,Write ;#06 Write
DEC C
JP Z,.REMOV_F ;#07
JP Z,Removable ;#07 Removable
DEC C
JP Z,.IOCTL_F ;#08
JP Z,GenIOCTL ;#08 GenIOCTL
DEC C
JP Z,.RESRV_F ;#09
.RESRV_F:
LD A,DSS_Error.drv.INVALID_COMMAND
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>ˆŽ?
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Commands for restart #18 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
Init: LD A,2 ;ª®«¨ç¥á⢮ FDD ¢ ª®¬¯¥ ;!FIXIT   ¥á«¨ ®âª«îçã ¢ <20>ˆŽ?
AND A
RET
; ; ;
.RESE: LD C,BIOS.DRV_RESET
;
Open: LD C,BIOS.DRV_RESET
RST ToBIOS
RET
; ; ;
.STAT: XOR A
;
Close: XOR A
RET
; ; ;
.CHEK: ;!FIXIT ¯à®¢¥àïâì ƒ93 ª®£¤  íâ® áâ ­¥â ¢®§¬®¦­ë¬
IF NON_REMOVABLE_FDD
;!FIXIT ¯à®¢¥àïâì ƒ93 ª®£¤  íâ® áâ ­¥â ¢®§¬®¦­ë¬
MediaCheck: IF NON_REMOVABLE_FDD
XOR A
ELSE
LD A,#FF
OR A
ENDIF
RET
; ; ;
;DE - ADDRESS
.GBPB: LD IX,0
GetBPB: LD IX,0
LD HL,0
PUSH DE
PUSH AF
@ -208,18 +226,26 @@ FDDRIVE:
RST ToBIOS
XOR A
RET
;READTR:
XOR A
RET
; ; ;
.READD: LD C,BIOS.DRV_READ
; !TODO read track?
;READTR: XOR A
; RET
; ; ;
;
Read: LD C,BIOS.DRV_READ
RST ToBIOS
RET
; ; ;
.WRITED:
LD C,BIOS.DRV_WRITE
;
Write: LD C,BIOS.DRV_WRITE
RST ToBIOS
RET
; ; ;
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
@ -227,36 +253,41 @@ FDDRIVE:
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
.IOCTL_F:
BIT 7,B
GenIOCTL: BIT 7,B
JR NZ,.O_CTL_F
INC B
DEC B
JP Z,.FGETPRM
JP Z,.GetParams
;!TODO
;DEC B
; JP Z,FRDTRAC
;JP Z,.ReadTrack
;DEC B
; JP Z,FCHTRAC
;JP Z,.TestTRK
;
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
.O_CTL_F:
RES 7,B
;
.O_CTL_F: RES 7,B
INC B
DEC B
JP Z,.FSETPRM
JP Z,.SetParams
;!TODO
;DEC B
; JP Z,FWRTRAC
;JP Z,.WriteTRK
;DEC B
; JP Z,FFRTRAC
;JP Z,.FormatTRK
;
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
; ; ;
; ‚室: - A - Drive number
; ‚ë室:
; HL:DE - SECTORS ON LOGICAL DISK
; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; 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
@ -267,42 +298,49 @@ FDDRIVE:
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.FGETPRM:
EX DE,HL
.GetParams: EX DE,HL
LD BC,#55AA
AND A
AND #0F
SBC HL,BC
LD L,A
JR Z,.next
;
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET NZ
LD A,L
AND #0F
PUSH AF
RET
;
.next: PUSH AF
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
JR C,.NONEF
JR C,.NONE_FDD
PUSH HL
PUSH DE
LD A,H
LD H,0
.MULL1 ADD HL,HL
;
.mull_loop1: ADD HL,HL
DEC A
JR NZ,.MULL1
JR NZ,.mull_loop1
;
; HL - SECTOR PER CYLLINDER
; A=0 ZF=0 CF=0
LD B,H
LD C,L
LD HL,0
;LD HL,0
;XOR A
LD H,A
LD L,A
EX AF,AF'
XOR A
.MULL2 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,.MULL2
JR NZ,.mull_loop2
;
; A=0 ZF=0 CF=0
EX AF,AF'
LD E,A
EX DE,HL
@ -311,21 +349,24 @@ FDDRIVE:
POP HL
POP AF
EX AF,AF'
; A=0 ZF=0 CF=0
LD A,B
LD C,L
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
.NONEF POP AF
;
.NONE_FDD: POP BC
LD A,DSS_Error.drv.INVALID_DRIVE
SCF
; CF=1
RET
; ; ;
; HL:DE - SECTORS ON LOGICAL DISK
@ -338,8 +379,7 @@ FDDRIVE:
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.FSETPRM:
PUSH AF
.SetParams: PUSH AF
EXX
EX DE,HL
LD H,L
@ -353,20 +393,26 @@ FDDRIVE:
RST ToBIOS
POP DE
POP HL
JR C,.NONEF
JR C,.NONE_FDD
POP AF
LD C,BIOS.DRV_SET_PAR
RST ToBIOS
RET C
AND A
RET
JP ToBIOS
;RST ToBIOS
;RET C
;AND A
;RET
; ; ;
.REMOV_F:
LD A,1
AND A
Removable: ; LD A,1
; AND A
XOR A
INC A
RET
; ; ;
;==============================================
ENDMODULE ; FDD_DRV
////////////////////////////////////////////////////////////////////////

View File

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

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