Почти доделал смену диска 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 ; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JR C,.error
; ;
XOR A XOR A
CALL SET_FM CALL SET_FM
@ -83,4 +84,8 @@ CLOSE_FN:
.NOTMODF: .NOTMODF:
LD A,(.TMP) LD A,(.TMP)
JP RES_FM 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 .error: CP DSS_Error.sys.INVALID_DRIVE
SCF SCF
RET Z 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 LD A,DSS_Error.sys.NOT_READY
RET RET
/*
0000 0010 02
0001 1100 1c
0000 1101 0d
0001 0011
*/
; ;
;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed ;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed
.error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨ .error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨

View File

@ -1 +1 @@
9 12

View File

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

View File

@ -87,7 +87,15 @@ cmd_dir: push de
ld hl,Buffers.work.buffer1 ld hl,Buffers.work.buffer1
ld c,Dss.ChDir ld c,Dss.ChDir
rst ToDSS 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 jp c,print_err_message
.no_error: ; .no_error: ;
ld hl,Buffers.bat_params.PRM1 ld hl,Buffers.bat_params.PRM1

View File

@ -4,14 +4,16 @@
; ;
;/////////////////////////////////////////////////// ;///////////////////////////////////////////////////
cmd_mkdir: 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 ; á®§¤ âì ¯ ¯ªã ld c,Dss.MkDir ; á®§¤ âì ¯ ¯ªã
RST ToDSS push bc
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï jp cmd_rmdir.shared
ret
; 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: cmd_rename:
ex de,hl ex de,hl
;ld de,T9186
ld de,Buffers.work.buffer1; ld de,Buffers.work.buffer1;
ld c,Dss.GSwitch ld c,Dss.GSwitch
RST ToDSS RST ToDSS
;ld de,T9206
ld de,Buffers.work.buffer+256; ld de,Buffers.work.buffer+256;
ld c,Dss.GSwitch ld c,Dss.GSwitch
RST ToDSS RST ToDSS
;ld hl,T9186
;ld de,T9206
ld hl,Buffers.work.buffer1; ld hl,Buffers.work.buffer1;
ld de,Buffers.work.buffer+256; ld de,Buffers.work.buffer+256;
ld c,Dss.Rename ld c,Dss.Rename

View File

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

View File

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

View File

@ -1 +1 @@
452 456

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