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

View File

@ -132,8 +132,8 @@ 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

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