Почти доделал смену диска ATAPI

This commit is contained in:
Tolik 2025-02-08 01:28:18 +10:00
parent 4bde8c738c
commit a93bbd76ad
12 changed files with 165 additions and 69 deletions

View File

@ -31,6 +31,7 @@ CLOSE_FN:
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JR C,.error
;
XOR A
CALL SET_FM
@ -83,4 +84,8 @@ CLOSE_FN:
.NOTMODF:
LD A,(.TMP)
JP RES_FM
;
.error: POP DE
POP DE
RET
;

View File

@ -222,8 +222,27 @@ OPENDSK: ;!TEST DRV.Open
.error: CP DSS_Error.sys.INVALID_DRIVE
SCF
RET Z
;
CP DSS_Error.sys.MEDIA_CHANGED
SCF
RET Z
;
CP DSS_Error.sys.UNKNOWN_FORMAT
SCF
RET Z
;
LD A,DSS_Error.sys.NOT_READY
RET
/*
0000 0010 02
0001 1100 1c
0000 1101 0d
0001 0011
*/
;
;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed
.error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨

View File

@ -1 +1 @@
9
12

View File

@ -335,7 +335,7 @@ SelectDrive: PUSH DE
;
; [ ] custom sector size
CALL CHECK_IDE_SECTOR_SIZE
LD A,DSS_Error.drv.UNKNOWN_FORMAT
LD A,DSS_Error.sys.UNKNOWN_FORMAT
JR C,.error_pop
;
;
@ -463,7 +463,7 @@ GetParams: EX DE,HL
JR .error
; [ ] media change
; [ ] media change - ã¡à âì ;!FIXIT
.next: EX AF,AF
JR NC,.NoMediaChange
CP BIOS.Error.ATAPI.UnitAttention
@ -545,9 +545,15 @@ Close: XOR A
;!TODO ¯®ª  Open ­¨ç¥£® ­¥ ¤¥« ¥â ªà®¬¥ ¯à®¢¥àª¨ MediaCheck
Open: CALL MediaCheck
;!TODO
;RET
RET Z
RET C
;!TODO ???
;CALL READ_PARTITION_PARAMETERS
;
INC A
RET NZ
LD A,DSS_Error.sys.MEDIA_CHANGED
SCF
RET
;
;[ ] media changed - bios 5x DETECT
@ -588,23 +594,25 @@ MediaCheck: PUSH IY
CALL SelectDrive
JR NC,.next_step
;
CP DSS_Error.drv.UNKNOWN_FORMAT
SCF
CP DSS_Error.sys.UNKNOWN_FORMAT
JR NZ,.exit
AND A ; á¡à®á ZF
SCF
; [ ] media changed
.next_step: PUSH AF ; ‘®å࠭塞 CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
LD C,BIOS.DRV_DETECT ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ ¡¨®á? ; !FIXIT
LD C,BIOS.DRV_GET_PAR ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ ¡¨®á? ; !FIXIT
PUSH IY
RST ToBIOS
POP IY
EX AF,AF'
JR NC,.next_check
;
CP BIOS.Error.ATAPI.UnitAttention
JR Z,.Reinit
SCF
POP BC ; <20> « ­á á⥪ 
.exit: POP IY
.exit: SCF
POP IY
RET
;
.next_check: BIT 1,(IY + LOGDRV.MediaParameters)
@ -619,7 +627,7 @@ MediaCheck: PUSH IY
.Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
LD (CURRENT_DRIVE.Number),A
LD (LOGDRV_OFFSET),IY
;RES 1,(IY + LOGDRV.MediaParameters)
;RES 1,(IY + LOGDRV.MediaParameters) - á¡à á뢠¥âáï ¢ DEFINE_PARTITIONS
CALL DEFINE_PARTITIONS
POP AF
POP IY
@ -633,9 +641,11 @@ MediaCheck: PUSH IY
CHECK_IDE_SECTOR_SIZE:
LD E,(IY+LOGDRV.SECTOR_SIZE)
LD D,(IY+LOGDRV.SECTOR_SIZE+1)
LD HL,DSS_MAX_SECTOR_SIZE
AND A
SBC HL,DE
; LD HL,DSS_MAX_SECTOR_SIZE
; AND A
; SBC HL,DE
LD HL,-DSS_MAX_SECTOR_SIZE - 1
ADD HL,DE
RET
;
@ -725,7 +735,7 @@ Exec_BIOS: PUSH IY
RET
;
.exec: CALL SelectDrive
RET C
RET C ;!FIXIT ¯¥à¥¤¥« âì ­®¬¥à ®è¨¡ª¨ á ¤à ©¢¥à  ­  ¤®á
RST ToBIOS
RET NC
CP BIOS.Error.ATAPI.UnitAttention
@ -799,11 +809,7 @@ DEFINE_PARTITIONS:
CALL INC_DRV_COUNT
RET NC
;
LD A,(CURRENT_DRIVE.Number)
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
LD DE,LOGDRV.TBL_Entry ;DSKITEM
ADD IX,DE
LD (LOGDRV_OFFSET),IX
CALL .set_drv_tbl
JP .NextPartition
;
.NotExtended: CP PartitionSysTypes.FAT16
@ -824,8 +830,14 @@ DEFINE_PARTITIONS:
JP Z,.SubLevel
JP .NextPartition ; à §¤¥« ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
.ATAPI_TST: ;JR .check_atapi ;!FIXIT CDFS
.set_drv_tbl: LD A,(CURRENT_DRIVE.Number)
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
LD DE,LOGDRV.TBL_Entry ;DSKITEM
ADD IX,DE
LD (LOGDRV_OFFSET),IX
RET
;
.CDFS_TST: ;JR .check_atapi ;!FIXIT CDFS
;SCF
;RET
.check_atapi: LD A,(CURRENT_DRIVE.Number)
@ -833,10 +845,22 @@ DEFINE_PARTITIONS:
AND #F0
CP DRIVE_CODES.SPRINTER.ATAPI
SCF
RET NZ
;RET NZ
PUSH AF
;
CALL GetSectorSize
;BPB SECTOR ;!TODO ¥á«¨ CD-ROM, â® ¤à㣮© ­®¬¥à ᥪâ®à 
CALL .set_LOGDRV
POP AF
RET NZ ; १ã«ìâ â CP DRIVE_CODES.SPRINTER.ATAPI
; ¤«ï ¯à ¢¨«ì­®£® ¢ë室  ¨§ ¯ àá¥à  à §¤¥«®¢
LD B,1
PUSH BC
;§ £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,#FF ; ¤«ï ¯à®¯ã᪠ .tst_zipNoMBR ¨ § ¯¨á¨ ¢ LOGDRV.PARTITION_RECORD_NUM
LD (CURRENT_SECTOR.Low),A
JP .not_supported
;
.set_LOGDRV: ;BPB SECTOR ;!TODO ¥á«¨ CD-ROM, â® ¤à㣮© ­®¬¥à ᥪâ®à 
LD IX,(LOGDRV_OFFSET)
LD A,(CURRENT_DRIVE.Removable)
LD (IX + LOGDRV.MediaParameters),A
@ -853,13 +877,7 @@ DEFINE_PARTITIONS:
; [ ] sector size
LD (IX + LOGDRV.SECTOR_SIZE),C
LD (IX + LOGDRV.SECTOR_SIZE + 1),B
;
; ¤«ï ¯à ¢¨«ì­®£® ¢ë室  ¨§ ¯ àá¥à  à §¤¥«®¢
LD B,1
PUSH BC
;§ £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
DEC A
JP .not_supported
RET
;
; ¢å®¤: B - bit0=1 removable, bit1=1 drive changed, bit7..2 reserved
.Start: LD IX,0
@ -883,7 +901,7 @@ DEFINE_PARTITIONS:
;JR NZ,NODEFIN
; [ ] CDFS
JR NZ,.ATAPI_TST
JR NZ,.CDFS_TST
;SCF
;RET NZ
;
@ -927,7 +945,43 @@ DEFINE_PARTITIONS:
ADD IY,DE
POP BC
DJNZ .DOSAGA
AND A
;
.tst_zipNoMBR: ; [ ] zip no MBR
; ⮫쪮 ¤«ï Removable media
LD A,(CURRENT_DRIVE.Removable)
AND %0000'0001
RET Z
; ⮫쪮 ¤«ï ATAPI
LD A,(CURRENT_DRIVE.Number)
LD B,A
AND #F0
CP DRIVE_CODES.SPRINTER.ATAPI
JR NZ,.exit
;
XOR A
LD HL,(CURRENT_SECTOR.Low)
OR H
OR L
LD HL,(CURRENT_SECTOR.High)
OR H
OR L
RET NZ
;
PUSH IY
LD A,B
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP IY
;
LD B,XH
LD C,XL
CALL .set_LOGDRV
LD A,(CURRENT_DRIVE.Removable)
LD (IX + LOGDRV.MediaParameters),A
LD (IX + LOGDRV.PARTITION_RECORD_NUM),#FF
CALL .set_drv_tbl
;
.exit: AND A
RET
;
.ParseExtended: LD HL,(EXT_Partition.Low)
@ -970,7 +1024,7 @@ DEFINE_PARTITIONS:
GetSectorSize: PUSH IY
LD A,(CURRENT_DRIVE.Number)
; sector size
LD C,BIOS.DRV_GET_PAR
LD C,BIOS.DRV_GET_PAR ; [ ] media change § ¬¥­¨âì ­  drv_detect ?
RST ToBIOS
JR NC,.no_err
;

View File

@ -87,7 +87,15 @@ cmd_dir: push de
ld hl,Buffers.work.buffer1
ld c,Dss.ChDir
rst ToDSS
;ld a,DSS_Error.sys.NOT_READY
jr nc,.no_error
;
cp DSS_Error.sys.MEDIA_CHANGED
jp nz,print_err_message
call print_err_message
;
ld hl,Buffers.work.buffer1
ld c,Dss.ChDir
rst ToDSS
jp c,print_err_message
.no_error: ;
ld hl,Buffers.bat_params.PRM1

View File

@ -4,14 +4,16 @@
;
;///////////////////////////////////////////////////
cmd_mkdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ¯ ¯ª¨
ld hl,Buffers.work.buffer1;
ld c,Dss.MkDir ; á®§¤ âì ¯ ¯ªã
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret
push bc
jp cmd_rmdir.shared
; ex de,hl
; ld de,Buffers.work.buffer1;
; ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
; RST ToDSS
; ld hl,Buffers.work.buffer1 ; ¨¬ï ¯ ¯ª¨
; ld c,Dss.MkDir ; á®§¤ âì ¯ ¯ªã
; RST ToDSS
; call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
; ret

View File

@ -5,16 +5,12 @@
;///////////////////////////////////////////////////
cmd_rename:
ex de,hl
;ld de,T9186
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch
RST ToDSS
;ld de,T9206
ld de,Buffers.work.buffer+256;
ld c,Dss.GSwitch
RST ToDSS
;ld hl,T9186
;ld de,T9206
ld hl,Buffers.work.buffer1;
ld de,Buffers.work.buffer+256;
ld c,Dss.Rename

View File

@ -3,15 +3,16 @@
; RD, RMDIR. “¤ «¨âì ¯ ¯ªã
;
;///////////////////////////////////////////////////
cmd_rmdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
cmd_rmdir: ld c,Dss.RmDir ; á®§¤ âì ¯ ¯ªã
push bc
;
.shared: ex de,hl
ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ¯ ¯ª¨
ld hl,Buffers.work.buffer1;
ld c,Dss.RmDir ; 㤠«¨âì ¯ ¯ªã
ld hl,Buffers.work.buffer1 ; ¨¬ï ¯ ¯ª¨
POP BC
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret
ret nc
JP print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
;

View File

@ -60,10 +60,21 @@ COMP: call EVALCMD ; (batch.asm)
jr nc,.NOUP
and #5F ; a..z -> A..Z
.NOUP: sub "A" ; ­®¬¥à ¤¨áª 
ld (.dsk),a
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
jr nc,.no_err
;
cp DSS_Error.sys.MEDIA_CHANGED
jp nz,print_err_message
;
call print_err_message
.dsk+1: ld a,0
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS
jp c,print_err_message
;
.no_err:
;!FIXIT âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥
;!TODO ¤®áâ ¢ âì Buffers.sys_path ®â¤¥«ì­® ¤«ï ª ¦¤®£® ¤¨áª  (¨«¨ ¢ ï¤à¥ ᤥ« âì?)
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥

View File

@ -1 +1 @@
452
456

@ -1 +1 @@
Subproject commit b3224fc3afac71c6b1d461ff54049e58657bbe5a
Subproject commit aa0c67b6b30b02b1302145cd4d57b708130e2e0a