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) ; ­®¬¥à § ¤ ­­®£® ¤¨áª  write_no_BPB: ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
ld de,#55AA ld de,Dss.DRV.GenIOCTL.Enter
ld bc,Dss.DRV.GenIOCTL.GetParams ld bc,Dss.DRV.GenIOCTL.GetParams
rst ToDSS.DRV rst ToDSS.DRV
ex af,af' ex af,af'

View File

@ -31,8 +31,8 @@ BOOTDSK:
; ;
.loop: PUSH BC .loop: PUSH BC
LD A,C LD A,C
LD DE,#55AA LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,256*0 + Dss.DRV.GenIOCTL LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV RST ToDSS.DRV
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,C ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª  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 (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL 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 LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
; ;
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤  .read_dir: LD HL,DIRPAGE.buffer ; ªã¤ 

View File

@ -1 +1 @@
994 995

View File

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

View File

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

View File

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

View File

@ -1 +1 @@
433 434