not working

This commit is contained in:
Tolik 2025-01-16 01:27:59 +10:00
parent 22f9ae494c
commit d4911f7c45
5 changed files with 314 additions and 262 deletions

View File

@ -268,8 +268,8 @@ LOGDRV EQU DEVICE + DEVICE.End
.SECTOR_SIZE EQU 10 ; word
.RemovableMedia EQU 12 ; bit0=1 removable, bit1=1 drive changed, bit7..2 reserved
.Reserved_1 EQU 13
.Reserved_1 EQU 14
.Reserved_1 EQU 15
.Reserved_2 EQU 14
.Reserved_3 EQU 15
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: HL, IY. HL<-->DE

View File

@ -49,7 +49,7 @@ ReScanDRV:
SBC HL,DE
JR Z,.nextN ; ¯à®¯ã᪠FDD ¤à ©¢®¢
; HDD?
LD HL,HDDRIVE
LD HL,IDE_DRV.API_TABLE
AND A
SBC HL,DE
; HDD! ‘¢¥àª  ¯® â ¡«¨æ¥ LOGDRV
@ -185,7 +185,7 @@ Fill_if_Exists:
LD A,LOGDRV.TBL_Entry
LD IY,LOGDRV
CALL .RUN
LD DE,HDDRIVE
LD DE,IDE_DRV.API_TABLE
RET NC
; ¯¥à¥å®¤¨¬ ­  ¤àã£ãî â ¡«¨æã - RAMDTBL
LD A,(.tbl)

View File

@ -174,36 +174,38 @@
; IDE0 EQU #0C1C0
; IDE1 EQU #0C1C8
; MODULE ATAPI_DRV
MODULE IDE_DRV
PARTITION_BUFFER _sBOOT_SECTOR = #C000
ATAPI_BUFFER _sCDFS_PRIMARY_VOLUME_DESCRIPTOR = #C000
HDDRIVE: INC C
API_TABLE: INC C
DEC C
JP Z,INIT_H ; [ ] ; c=0 Initialization
JP Z,Init ; [ ] ; c=0 Initialization
DEC C
JP Z,RESE_H ; [ ] ; c=1 open
JP Z,Open ; [ ] ; c=1 open
DEC C
JP Z,STAT_H ; [ ] ; c=2 close
JP Z,Close ; [ ] ; c=2 close
DEC C
JP Z,CHEK_H ; [ ] ; c=3 media check (ᬥ­  ­®á¨â¥«ï)
JP Z,MediaCheck ; [ ] ; c=3 media check (ᬥ­  ­®á¨â¥«ï)
DEC C
JP Z,GBPB_H ; [ ] ; c=4 get BPB
JP Z,GetBPB ; [ ] ; c=4 get BPB
DEC C
JP Z,READH ; [ ] ; c=5 read (ç⥭¨¥ ᥪâ®à®¢)
JP Z,Read ; [ ] ; c=5 read (ç⥭¨¥ ᥪâ®à®¢)
DEC C
JP Z,WRITEH ; [ ] ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
JP Z,Write ; [ ] ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
DEC C
JP Z,REMOV_H ; [ ] ; c=7 Removable
JP Z,Removable ; [ ] ; c=7 Removable
DEC C
JP Z,IOCTL_H ; [ ] ; c=8 ã§­ âì £¥®¬¥âà¨î ¤¨áª  Generic IOCTL
JP Z,GenIOCTL ; [ ] ; c=8 ã§­ âì £¥®¬¥âà¨î ¤¨áª  Generic IOCTL
DEC C
JP Z,.Reserved ; [ ] ; c=9 Reserved
DEC C
JP Z,LREADH ; [ ] ; c=10 Read Long
JP Z,ReadLong ; [ ] ; c=10 Read Long
DEC C
JP Z,LWRITEH ; [ ] ; c=11 Write Long
JP Z,WriteLong ; [ ] ; c=11 Write Long
;
.Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
SCF
@ -216,7 +218,7 @@ HDDRIVE: INC C
;--------------------------------------------------------------------[v]
; c=0 Initialization
INIT_H: PUSH IY
Init: PUSH IY
;!TEST ;[ ] ¤«ï rescanDRV
XOR A
LD (.count),A
@ -285,7 +287,7 @@ INIT_H: PUSH IY
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
; .TBL_Entry EQU 16
; .Size EQU $-LOGDRV
SELHDD: PUSH DE
SelectDrive: PUSH DE
PUSH HL
;
LD L,A
@ -310,6 +312,8 @@ SELHDD: PUSH DE
;
.exit: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
POP DE
RET NC
LD A,DSS_Error.drv.UNKNOWN_FORMAT
RET
; 00 - GET DEVICE PARAMETERS
@ -318,49 +322,54 @@ SELHDD: PUSH DE
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
IOCTL_H BIT 7,B
JR NZ,O_CTL_H
GenIOCTL: BIT 7,B
JR NZ,.Set
INC B
DEC B
JP Z,HGETPRM
JR Z,GetParams
DEC B
JP Z,HRDTRAC
JR Z,.error ;ReadTrack
DEC B
JP Z,HCHTRAC
JR Z,TestTRK
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
O_CTL_H RES 7,B
;
.Set: RES 7,B
INC B
DEC B
JP Z,HSETPRM
RET Z ;SetParams
DEC B
JP Z,HWRTRAC
JR Z,.error ;WriteTrack
DEC B
JP Z,HFRTRAC
JR Z,.error
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
HRDTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
;
.error: LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
HCHTRAC LD B,L
CALL CHECKH
RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;CHECK SECTOR
TestTRK: LD C,BIOS.DRV_VERIFY
JP Exec_BIOS
;LD B,L
;CALL CHECKH
;RET
HSETPRM AND A
RET
HWRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
; HSETPRM: AND A
; RET
HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
; HFRTRAC: LD A,DSS_Error.drv.GENERAL_FAILURE
; SCF
; RET
; HL:DE - SECTORS ON LOGICAL DISK
; C - PARTITION RECORD NUMBER IN DRIVE MBR. if #FF - then not supported ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
@ -387,8 +396,7 @@ HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
; 32 - 4096 bytes
; 64 - 8192 bytes
; 128 - 16384 bytes
HGETPRM:
EX DE,HL
GetParams: EX DE,HL
LD BC,#55AA
AND A
SBC HL,BC
@ -454,22 +462,39 @@ HGETPRM:
POP IX
RET
REMOV_H:
LD A,1
AND A
Removable: XOR A
INC A
RET
RESE_H: XOR A
Open: XOR A
RET
STAT_H: XOR A
Close: XOR A
RET
CHEK_H: ;LD A,#FF
XOR A
;AND A
;[ ] media changed - bios 5x DETECT
; ¢ë室 A=#FF - changed, A=0 - not changed, ZF=1 - not changed
MediaCheck: PUSH IY
CALL SelectDrive
JR C,.exit
;
LD A,#FF
BIT 1,(IY + LOGDRV.RemovableMedia)
JR NZ,.exit
;
LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
LD C,BIOS.DRV_DETECT
RST ToBIOS
AND %0000'0010
JR Z,.norm_exit
;
ld
; २­¨â ¤à ©¢ 
;
.norm_exit: XOR A
.exit: POP IY
RET
@ -483,47 +508,61 @@ CHECK_IDE_SECTOR_SIZE:
RET
;
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;READ SECTOR
; DE - ADDRESS
; A - DRIVE
GBPB_H: PUSH IY
PUSH DE
LD L,A
;
LOGDRV_ENTRY_FIND LOGDRV
;
; [ ] custorm sector size
CALL CHECK_IDE_SECTOR_SIZE
JR C,.error
;
LD E,(IY+LOGDRV.SECTOR_OFFSET)
LD D,(IY+LOGDRV.SECTOR_OFFSET+1)
LD L,(IY+LOGDRV.SECTOR_OFFSET+2)
LD H,(IY+LOGDRV.SECTOR_OFFSET+3)
LD XL,E
LD XH,D
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
POP DE
POP IY
LD BC,1*256 + BIOS.DRV_READ
JP ToBIOS
;
.error: POP DE
POP IY
LD A,DSS_Error.drv.UNKNOWN_FORMAT
RET
GetBPB: ; !FIXIT ¢ë¡¨à âì §­ ç¥­¨ï ¨áå®¤ï ¨§ ⨯  ¤à ©¢  ¨«¨ ¥éñ 祣®-­¨¡ã¤ì
LD HL,0
LD IX,0
JR Read
; PUSH IY
; PUSH DE
; LD L,A
; ;
; LOGDRV_ENTRY_FIND LOGDRV
; ;
; ; [ ] custorm sector size
; CALL CHECK_IDE_SECTOR_SIZE
; JR C,.error
; ;
; LD E,(IY+LOGDRV.SECTOR_OFFSET)
; LD D,(IY+LOGDRV.SECTOR_OFFSET+1)
; LD L,(IY+LOGDRV.SECTOR_OFFSET+2)
; LD H,(IY+LOGDRV.SECTOR_OFFSET+3)
; LD XL,E
; LD XH,D
; LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
; POP DE
; POP IY
; LD BC,1*256 + BIOS.DRV_READ
; JP ToBIOS
; ;
; .error: POP DE
; POP IY
; LD A,DSS_Error.drv.UNKNOWN_FORMAT
; RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A'- PAGE
; A - HDD LOG NUMBER
;READ SECTOR
LREADH: PUSH IY
CALL SELHDD
JR C,.error ; [ ] custorm sector size
LD C,BIOS.DRV_READ_LONG
RST ToBIOS
.error: POP IY
RET
ReadLong: LD C,BIOS.DRV_READ_LONG
JP Exec_BIOS
; PUSH IY
; CALL SelectDrive
; JR C,.error ; [ ] custorm sector size
; LD C,BIOS.DRV_READ_LONG
; RST ToBIOS
; .error: POP IY
; RET
;HL:IX - SECTOR
; DE - ADDRESS
@ -531,53 +570,66 @@ LREADH: PUSH IY
; A'- PAGE
; A - HDD LOG NUMBER
;WRITE SECTOR
LWRITEH:
PUSH IY
CALL SELHDD
JR C,.error ; [ ] custorm sector size
LD C,BIOS.DRV_WRITE_LONG
RST ToBIOS
.error: POP IY
RET
WriteLong: LD C,BIOS.DRV_WRITE_LONG
JP Exec_BIOS
; PUSH IY
; CALL SelectDrive
; JR C,.error ; [ ] custorm sector size
; LD C,BIOS.DRV_WRITE_LONG
; RST ToBIOS
; .error: POP IY
; RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;WRITE SECTOR
WRITEH: PUSH IY
CALL SELHDD
JR C,.error ; [ ] custorm sector size
LD C,BIOS.DRV_WRITE
RST ToBIOS
.error: POP IY
RET
Write: LD C,BIOS.DRV_WRITE
JP Exec_BIOS
; PUSH IY
; CALL SelectDrive
; JR C,.error ; [ ] custorm sector size
; LD C,BIOS.DRV_WRITE
; RST ToBIOS
; .error: POP IY
; RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;READ SECTOR
READH: PUSH IY
CALL SELHDD
JR C,.error ; [ ] custorm sector size
LD C,BIOS.DRV_READ
RST ToBIOS
.error: POP IY
RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;CHECK SECTOR
CHECKH: PUSH IY
CALL SELHDD
LD C,BIOS.DRV_VERIFY
RST ToBIOS
; CHECKH: PUSH IY
; CALL SelectDrive
; LD C,BIOS.DRV_VERIFY
; RST ToBIOS
; POP IY
; RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;READ SECTOR
Read: LD C,BIOS.DRV_READ
;
Exec_BIOS: PUSH IY
CALL .exec
POP IY
RET
.exec: CALL SelectDrive
RET C
RST ToBIOS
RET NC
CP BIOS.Error.ATAPI.UnitAttention
SCF
RET NZ
SET 1,(IY + LOGDRV.RemovableMedia)
RET
;------------------------------[ PARTIT ]------------------------------;
DEFINE_PARTITIONS:
.FAT32_DOS: ;
@ -647,7 +699,7 @@ DEFINE_PARTITIONS:
JP Z,.FAT32_DOS
;
CP PartitionSysTypes.Win_Ext_LBA
JR Z,.SubLevel
JP Z,.SubLevel
JP .NextPartition ; à §¤¥« ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
@ -813,11 +865,11 @@ DEFINE_PARTITIONS:
;
;!TEST <09>®¤áâà å®¢ª  ®â ¯¥à¥¯®«­¥­¨ï â ¡«¨æë LOGDRV
INC_DRV_COUNT: LD A,(INIT_H.count)
INC_DRV_COUNT: LD A,(Init.count)
INC A
CP DSS_MAX_DRIVES_AMOUNT+1
RET NC
LD (INIT_H.count),A
LD (Init.count),A
RET
;=======================================================================
@ -831,4 +883,4 @@ EXTDOSH: DW #0000
OFFSECT: DW LOGDRV ;POINTER ON CURRENT DISK RECORD
;=======================================================================
; ENDMODULE
ENDMODULE

View File

@ -136,8 +136,8 @@ INITDVC: XOR A
LD DE,FDD_DRV.API_TABLE ;  ¤à¥á ®¡à ¡®â稪  ⥪. ¤¥¢ ©á 
CALL MAKEDVC ; ¨­¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
; HDD ¤¥¢ ©áë
.if_old: CALL INIT_H ; ¥á«¨ ­  áâ à⥠¢¥àá¨ï BIOS ­¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦­® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥­  ª®¤  ­  XOR A : RET
LD DE,HDDRIVE
.if_old: CALL IDE_DRV.Init ; ¥á«¨ ­  áâ à⥠¢¥àá¨ï BIOS ­¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦­® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥­  ª®¤  ­  XOR A : RET
LD DE,IDE_DRV.API_TABLE
CALL MAKEDVC
; RAM-¤¨áª¨
CALL INIT_RD

@ -1 +1 @@
Subproject commit 7ef1dd98b491068d5a9ded34f5ff51430b7fa7e7
Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa