mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
fix for atapi
This commit is contained in:
parent
9d0d096208
commit
46b0cabbab
@ -233,7 +233,8 @@ INITDVC_RET_DRIVE:
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
INCLUDE 'dss/Drivers/media/shared-drv.asm'
|
INCLUDE 'dss/Drivers/media/shared-drv.asm'
|
||||||
INCLUDE 'dss/Drivers/media/ide-drv.asm'
|
INCLUDE 'dss/Drivers/media/atapi-drv.asm'
|
||||||
|
;INCLUDE 'dss/Drivers/media/ide-drv.asm'
|
||||||
INCLUDE 'dss/Drivers/media/fdd-drv.asm'
|
INCLUDE 'dss/Drivers/media/fdd-drv.asm'
|
||||||
INCLUDE 'dss/Drivers/media/ram_disk-drv.asm'
|
INCLUDE 'dss/Drivers/media/ram_disk-drv.asm'
|
||||||
INCLUDE "dss/Drivers/input/MOUSE.ASM"
|
INCLUDE "dss/Drivers/input/MOUSE.ASM"
|
||||||
|
|||||||
@ -1,3 +1,12 @@
|
|||||||
|
; INITDISK - ¨¨æ¨ «¨§ æ¨ï ¡ãª¢ë ¤¨áª
|
||||||
|
; LOADDIR - § £à㧪 á CDFS ¤¨à¥ªâ®à¨¨ ¨ ¤ ¯â æ¨ï ¯®¤ FAT
|
||||||
;
|
;
|
||||||
;
|
/*
|
||||||
;
|
‘¤¥« âì ¯à®¢¥àªã ä â:
|
||||||
|
CHECK_ROOT_CLUSTER
|
||||||
|
|
||||||
|
|
||||||
|
NEW RST:
|
||||||
|
LOADDIR
|
||||||
|
|
||||||
|
*/
|
||||||
@ -417,6 +417,7 @@ FINDDIR:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
.CHECK_SLASH:
|
.CHECK_SLASH:
|
||||||
XOR A
|
XOR A
|
||||||
CPIR
|
CPIR
|
||||||
|
|||||||
@ -105,7 +105,7 @@
|
|||||||
.BytesPerSector: WORD #0000
|
.BytesPerSector: WORD #0000
|
||||||
.SectorsPerCluster: BYTE #00
|
.SectorsPerCluster: BYTE #00
|
||||||
.FSINFO_Sector: WORD #01
|
.FSINFO_Sector: WORD #01
|
||||||
.BPB_SERIAL_NUMBER: DWORD #00000000
|
.BPB_SERIAL_NUMBER: DWORD 0
|
||||||
.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
.UPD_FSINFO: BYTE 0
|
.UPD_FSINFO: BYTE 0
|
||||||
.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
998
|
999
|
||||||
@ -170,7 +170,7 @@ INITDISK
|
|||||||
LD A,DIRPAGE
|
LD A,DIRPAGE
|
||||||
CALL BANK
|
CALL BANK
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD B,4
|
LD B,4 ; ЏЎЏытЎЊ чтЅЈЅ
|
||||||
CD_I_LP PUSH BC
|
CD_I_LP PUSH BC
|
||||||
LD DE,DIR
|
LD DE,DIR
|
||||||
LD A,(CDDRIVE)
|
LD A,(CDDRIVE)
|
||||||
|
|||||||
729
DSS/drivers/media/atapi-drv.asm
Normal file
729
DSS/drivers/media/atapi-drv.asm
Normal file
@ -0,0 +1,729 @@
|
|||||||
|
;!TODO ¯à¨¢¥á⨠ª ®¡é¥¬ã ¢¨¤ã ¢ ®¤ã ¨áâàãªæ¨î, ¯à®¢¥à¨âì ª®à४â®áâì
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R02 06-08-2001 DNS Secondary IDE
|
||||||
|
;R01 06-08-2001 DNS Fixed BUG with partitions on Second hard disk
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Disk Driver Specification ver. 2.20
|
||||||
|
;[]===========================================================[0]
|
||||||
|
;Procedure: Initialization
|
||||||
|
;
|
||||||
|
;Function: Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input: C = #00
|
||||||
|
; IX = Environment
|
||||||
|
;
|
||||||
|
;Output: A = Amount drive support
|
||||||
|
;[]===========================================================[0]
|
||||||
|
|
||||||
|
;[]===========================================================[1]
|
||||||
|
;Procedure: Open
|
||||||
|
;
|
||||||
|
;Function: Open disk
|
||||||
|
;
|
||||||
|
;Input: C = #01
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[1]
|
||||||
|
|
||||||
|
;[]===========================================================[2]
|
||||||
|
;Procedure: Close
|
||||||
|
;
|
||||||
|
;Function: Close disk
|
||||||
|
;
|
||||||
|
;Input: C = #02
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[2]
|
||||||
|
|
||||||
|
;[]===========================================================[3]
|
||||||
|
;Procedure: Media check
|
||||||
|
;
|
||||||
|
;Function: Checking change line
|
||||||
|
;
|
||||||
|
;Input: C = #03
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: A = #00 disk no changed
|
||||||
|
; #FF disk changed
|
||||||
|
;[]===========================================================[3]
|
||||||
|
|
||||||
|
;[]===========================================================[4]
|
||||||
|
;Procedure: Get BPB
|
||||||
|
;
|
||||||
|
;Function: Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input: C = #04
|
||||||
|
; A = Drive
|
||||||
|
; DE = Address
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[4]
|
||||||
|
|
||||||
|
;[]===========================================================[5]
|
||||||
|
;Procedure: Read
|
||||||
|
;
|
||||||
|
;Function: Read from disk
|
||||||
|
;
|
||||||
|
;Input: C = #05
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[5]
|
||||||
|
|
||||||
|
;[]===========================================================[6]
|
||||||
|
;Procedure: Write
|
||||||
|
;
|
||||||
|
;Function: Write to disk
|
||||||
|
;
|
||||||
|
;Input: C = #06
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
;
|
||||||
|
;Output: None
|
||||||
|
;[]===========================================================[6]
|
||||||
|
|
||||||
|
;[]===========================================================[7]
|
||||||
|
;Procedure: Removable
|
||||||
|
;
|
||||||
|
;Function: Checking change line
|
||||||
|
;
|
||||||
|
;Input: C = #07
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Output: A = #00 Removable
|
||||||
|
; A = #FF Non-removable
|
||||||
|
;[]===========================================================[7]
|
||||||
|
|
||||||
|
;[]===========================================================[8]
|
||||||
|
;Procedure: Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function: Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input: C = #08
|
||||||
|
; B = Subcommand
|
||||||
|
; DE = #55AA Magic Number
|
||||||
|
; A = Drive
|
||||||
|
;
|
||||||
|
;Subcommands: #00 - Get Device Parameters
|
||||||
|
; #01 - Read track
|
||||||
|
; #02 - Test track
|
||||||
|
; #80 - Set Device Parameters
|
||||||
|
; #81 - Write track
|
||||||
|
; #82 - Format track
|
||||||
|
;Output:
|
||||||
|
;[]===========================================================[8]
|
||||||
|
|
||||||
|
;[]===========================================================[9]
|
||||||
|
;Procedure: Read Long
|
||||||
|
;
|
||||||
|
;Function: Reading sectors from disk
|
||||||
|
;
|
||||||
|
;Input: C = #0A
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
; A' = Page
|
||||||
|
;
|
||||||
|
;Output: A' = Next Page
|
||||||
|
; HL:IX = Next Logical Block (sector)
|
||||||
|
; DE = Next Address
|
||||||
|
;[]===========================================================[9]
|
||||||
|
|
||||||
|
;[]===========================================================[10]
|
||||||
|
;Procedure: Write Long
|
||||||
|
;
|
||||||
|
;Function: Writing sectors to disk
|
||||||
|
;
|
||||||
|
;Input: C = #0B
|
||||||
|
; HL:IX = Logical Block (sector)
|
||||||
|
; DE = Address
|
||||||
|
; B = Sector count
|
||||||
|
; A' = Page
|
||||||
|
;
|
||||||
|
;Output: A' = Next Page
|
||||||
|
; HL:IX = Next Logical Block (sector)
|
||||||
|
; DE = Next Address
|
||||||
|
;[]===========================================================[10]
|
||||||
|
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (#00) - NO ERRORS
|
||||||
|
; 1 (#01) - BAD COMMAND
|
||||||
|
; 2 (#02) - BAD DRIVE NUMBER
|
||||||
|
; 3 (#03) - UNKNOW FORMAT
|
||||||
|
; 4 (#04) - NOT READY
|
||||||
|
; 5 (#05) - SEEK ERROR
|
||||||
|
; 6 (#06) - SECTOR NOT FOUND
|
||||||
|
; 7 (#07) - CRC ERROR
|
||||||
|
; 8 (#08) - WRITE PROTECT
|
||||||
|
; 9 (#09) - READ ERROR
|
||||||
|
; 10 (#0A) - WRITE ERROR
|
||||||
|
; 11 (#0B) - FAILURE
|
||||||
|
; 12 (#0C) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (#0D) - RESERVED
|
||||||
|
|
||||||
|
; IDE0 EQU #0C1C0
|
||||||
|
; IDE1 EQU #0C1C8
|
||||||
|
|
||||||
|
; MODULE ATAPI_DRV
|
||||||
|
|
||||||
|
PARTITION_BUFFER _sBOOT_SECTOR = #C000
|
||||||
|
ATAPI_BUFFER _sCDFS_PRIMARY_VOLUME_DESCRIPTOR = #C000
|
||||||
|
|
||||||
|
HDDRIVE: INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,INIT_H ; [ ] ; c=0 Initialization
|
||||||
|
DEC C
|
||||||
|
JP Z,RESE_H ; [ ] ; c=1 open
|
||||||
|
DEC C
|
||||||
|
JP Z,STAT_H ; [ ] ; c=2 close
|
||||||
|
DEC C
|
||||||
|
JP Z,CHEK_H ; [ ] ; c=3 media check (ᬥ ®á¨â¥«ï)
|
||||||
|
DEC C
|
||||||
|
JP Z,GBPB_H ; [ ] ; c=4 get BPB
|
||||||
|
DEC C
|
||||||
|
JP Z,READH ; [ ] ; c=5 read (ç⥨¥ ᥪâ®à®¢)
|
||||||
|
DEC C
|
||||||
|
JP Z,WRITEH ; [ ] ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
|
||||||
|
DEC C
|
||||||
|
JP Z,REMOV_H ; [ ] ; c=7 Removable
|
||||||
|
DEC C
|
||||||
|
JP Z,IOCTL_H ; [ ] ; c=8 ã§ âì £¥®¬¥âà¨î ¤¨áª Generic IOCTL
|
||||||
|
DEC C
|
||||||
|
JP Z,.Reserved ; [ ] ; c=9 Reserved
|
||||||
|
DEC C
|
||||||
|
JP Z,LREADH ; [ ] ; c=10 Read Long
|
||||||
|
DEC C
|
||||||
|
JP Z,LWRITEH ; [ ] ; c=11 Write Long
|
||||||
|
;
|
||||||
|
.Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// Commands for restart #18 //
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------[v]
|
||||||
|
; c=0 Initialization
|
||||||
|
INIT_H: PUSH IY
|
||||||
|
;!TEST ;[ ] ¤«ï rescanDRV
|
||||||
|
XOR A
|
||||||
|
LD (.count),A
|
||||||
|
;
|
||||||
|
LD HL,LOGDRV
|
||||||
|
LD (OFFSECT),HL
|
||||||
|
|
||||||
|
LD IX,SYS_PAGE.TMP_BUFFER
|
||||||
|
LD C,BIOS.DRV_LIST
|
||||||
|
RST ToBIOS
|
||||||
|
; DRV_LIST:
|
||||||
|
; +0 LEN
|
||||||
|
; +1 FDD COUNT
|
||||||
|
; +2 ATA COUNT
|
||||||
|
; +3 ATAPI COUNT
|
||||||
|
; +4 RESERVED (14)
|
||||||
|
;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
LD C,A
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,(IX+3) ;ª®«¨ç¥á⢮ ATAPI ¤«ï ¯à®æ¥¤ãàë NX_DVCI
|
||||||
|
AND A
|
||||||
|
PUSH AF
|
||||||
|
XOR A
|
||||||
|
LD B,(IX+2) ;ª®«¨ç¥á⢮ ATA ¤«ï ¯à®æ¥¤ãàë NX_DVCI
|
||||||
|
CP B
|
||||||
|
LD A,C
|
||||||
|
OUT (SLOT3),A
|
||||||
|
JR Z,.NO_HARDS
|
||||||
|
LD C,#80 ;!HARDCODE - ID ATA ¤«ï ¯à®æ¥¤ãàë BIOS.DRV_DETECT
|
||||||
|
CALL .NX_DVCI
|
||||||
|
;
|
||||||
|
|
||||||
|
.NO_HARDS: POP AF
|
||||||
|
JR Z,.skip_atapi
|
||||||
|
;
|
||||||
|
LD B,A
|
||||||
|
LD C,#C0 ;!HARDCODE - ID ATAPI ¤«ï ¯à®æ¥¤ãàë BIOS.DRV_DETECT
|
||||||
|
CALL .NX_DVCI
|
||||||
|
;
|
||||||
|
.skip_atapi: POP IY
|
||||||
|
.count+1: LD A,0
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.NX_DVCI: PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD (DRV_NUM),A
|
||||||
|
LD C,BIOS.DRV_DETECT
|
||||||
|
RST ToBIOS
|
||||||
|
CALL NC,DEFINE_PARTITIONS.BEGIN
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
JR C,.NX_DVCI
|
||||||
|
DJNZ .NX_DVCI
|
||||||
|
RET
|
||||||
|
;---------------------------------------------------------------------[^]
|
||||||
|
|
||||||
|
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
; ;+01 DWORD SECTOR OFFSET
|
||||||
|
; ;+05 DWORD SIZE IN SECTORS
|
||||||
|
; ;+09 FREE
|
||||||
|
; ;+15
|
||||||
|
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
|
||||||
|
; .TBL_Entry EQU 16
|
||||||
|
; .Size EQU $-LOGDRV
|
||||||
|
SELHDD: PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
|
LD L,A
|
||||||
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
|
; !HARDCODE
|
||||||
|
LD E,(IY+1)
|
||||||
|
LD D,(IY+2)
|
||||||
|
ADD IX,DE
|
||||||
|
LD E,(IY+3)
|
||||||
|
LD D,(IY+4)
|
||||||
|
POP HL
|
||||||
|
ADC HL,DE
|
||||||
|
LD A,(IY+0) ;DRIVE NUMBER
|
||||||
|
POP DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
IOCTL_H BIT 7,B
|
||||||
|
JR NZ,O_CTL_H
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,HGETPRM
|
||||||
|
DEC B
|
||||||
|
JP Z,HRDTRAC
|
||||||
|
DEC B
|
||||||
|
JP Z,HCHTRAC
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
O_CTL_H RES 7,B
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,HSETPRM
|
||||||
|
DEC B
|
||||||
|
JP Z,HWRTRAC
|
||||||
|
DEC B
|
||||||
|
JP Z,HFRTRAC
|
||||||
|
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HRDTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HCHTRAC LD B,L
|
||||||
|
CALL CHECKH
|
||||||
|
RET
|
||||||
|
|
||||||
|
HSETPRM AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
HWRTRAC 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 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
|
; A - DRIVE/HEAD REGISTER PHISICAL DISK:
|
||||||
|
; bit7 - reserved "1"
|
||||||
|
; bit6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; bit5 - reserved "1"
|
||||||
|
; bit4 - DEVICE MASTER/SLAVE
|
||||||
|
; bit3 - reserved "0" (MAY BE OTHER)
|
||||||
|
; bit2 - reserved "0" (MAY BE OTHER)
|
||||||
|
; bit1 - reserved "0" (MAY BE OTHER)
|
||||||
|
; bit0 - Primary/Secondary Chanel
|
||||||
|
HGETPRM:
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,#55AA
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD L,A
|
||||||
|
LD A,DSS_Error.drv.GENERAL_FAILURE
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
PUSH IX
|
||||||
|
PUSH IY
|
||||||
|
;
|
||||||
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
|
;
|
||||||
|
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
PUSH IY
|
||||||
|
LD C,BIOS.DRV_GET_PAR
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
LD A,DSS_Error.drv.INVALID_DRIVE
|
||||||
|
JR C,.error
|
||||||
|
; ¯¥à¥â ᮢª ॣ¨áâ஢ á १ã«ìâ ⮬ ®â BIOS
|
||||||
|
EX DE,HL
|
||||||
|
LD C,E
|
||||||
|
LD E,D
|
||||||
|
LD D,0
|
||||||
|
LD A,B
|
||||||
|
LD B,D
|
||||||
|
EXX
|
||||||
|
; SECTORS ON LOGICAL DISK
|
||||||
|
LD E,(IY+LOGDRV.SIZE_IN_SECTORS+0)
|
||||||
|
LD D,(IY+LOGDRV.SIZE_IN_SECTORS+1)
|
||||||
|
LD L,(IY+LOGDRV.SIZE_IN_SECTORS+2)
|
||||||
|
LD H,(IY+LOGDRV.SIZE_IN_SECTORS+3)
|
||||||
|
;
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
LD C,(IY+LOGDRV.PARTITION_RECORD_NUM) ; ®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
.error: POP IY
|
||||||
|
POP IX
|
||||||
|
RET
|
||||||
|
|
||||||
|
REMOV_H:
|
||||||
|
LD A,1
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RESE_H: XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
STAT_H: XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHEK_H: ;LD A,#FF
|
||||||
|
XOR A
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; DE - ADDRESS
|
||||||
|
; A - DRIVE
|
||||||
|
GBPB_H: PUSH IY
|
||||||
|
PUSH DE
|
||||||
|
LD L,A
|
||||||
|
;
|
||||||
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
|
; !HARDCODE
|
||||||
|
LD E,(IY+1)
|
||||||
|
LD D,(IY+2)
|
||||||
|
LD L,(IY+3)
|
||||||
|
LD H,(IY+4)
|
||||||
|
LD XL,E
|
||||||
|
LD XH,D
|
||||||
|
LD A,(IY+0)
|
||||||
|
POP DE
|
||||||
|
POP IY
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A'- PAGE
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;READ SECTOR
|
||||||
|
LREADH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_READ_LONG
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A'- PAGE
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;WRITE SECTOR
|
||||||
|
LWRITEH:
|
||||||
|
PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_WRITE_LONG
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;WRITE SECTOR
|
||||||
|
WRITEH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_WRITE
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A - HDD LOG NUMBER
|
||||||
|
;READ SECTOR
|
||||||
|
READH: PUSH IY
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
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
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
;------------------------------[ PARTIT ]------------------------------;
|
||||||
|
DEFINE_PARTITIONS:
|
||||||
|
.FAT32_DOS: ;
|
||||||
|
.EASYDOS: ;
|
||||||
|
.MEDIDOS: ;
|
||||||
|
.HIGHDOS: ;
|
||||||
|
LD E,(IY + BOOT_SECTOR.Partition.Start_LBA + 0)
|
||||||
|
LD D,(IY + BOOT_SECTOR.Partition.Start_LBA + 1)
|
||||||
|
LD L,(IY + BOOT_SECTOR.Partition.Start_LBA + 2)
|
||||||
|
LD H,(IY + BOOT_SECTOR.Partition.Start_LBA + 3)
|
||||||
|
LD IX,(CURRENT_SECTOR_L)
|
||||||
|
ADD IX,DE
|
||||||
|
LD DE,(CURRENT_SECTOR_H)
|
||||||
|
ADC HL,DE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
;BPB SECTOR
|
||||||
|
LD IX,(OFFSECT)
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
|
||||||
|
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
|
||||||
|
LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0)
|
||||||
|
LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1)
|
||||||
|
LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2)
|
||||||
|
LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3)
|
||||||
|
;SIZE DISK
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
|
||||||
|
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
.ExtendedPartitionFlag+1:
|
||||||
|
LD A,0
|
||||||
|
OR A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
LD A,#FF
|
||||||
|
JR NZ,.not_supported ; ¥á«¨ à áè¨à¥ë© à §¤¥«, â® ®¡«®¬
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
PUSH BC
|
||||||
|
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||||
|
SUB B
|
||||||
|
.not_supported: LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
|
||||||
|
;
|
||||||
|
CALL INC_DRV_COUNT
|
||||||
|
RET NC
|
||||||
|
;
|
||||||
|
LD A,(DRV_NUM)
|
||||||
|
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||||
|
LD DE,LOGDRV.TBL_Entry ;DSKITEM
|
||||||
|
ADD IX,DE
|
||||||
|
LD (OFFSECT),IX
|
||||||
|
JP .NextPartition
|
||||||
|
;
|
||||||
|
.NotExtended: CP PartitionSysTypes.FAT16
|
||||||
|
JR Z,.HIGHDOS
|
||||||
|
CP PartitionSysTypes.FAT16_LBA
|
||||||
|
JR Z,.HIGHDOS
|
||||||
|
CP PartitionSysTypes.FAT16_32Mb
|
||||||
|
JR Z,.MEDIDOS
|
||||||
|
CP PartitionSysTypes.FAT12
|
||||||
|
JR Z,.EASYDOS
|
||||||
|
;[ ] fat32
|
||||||
|
CP PartitionSysTypes.FAT32
|
||||||
|
JP Z,.FAT32_DOS
|
||||||
|
CP PartitionSysTypes.FAT32_LBA
|
||||||
|
JP Z,.FAT32_DOS
|
||||||
|
;
|
||||||
|
CP PartitionSysTypes.Win_Ext_LBA
|
||||||
|
JR Z,.SubLevel
|
||||||
|
JR .NextPartition ; à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
|
||||||
|
.ATAPI_TST: ;!FIXIT CDFS
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
.BEGIN: ;CP IDE.Device.HDD
|
||||||
|
;RET NZ
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
LD A,SHARED_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL .Start
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
RET
|
||||||
|
.Start: LD IX,0
|
||||||
|
LD DE,0
|
||||||
|
LD (EXTDOSL),DE ;R01
|
||||||
|
LD (EXTDOSH),IX ;R01
|
||||||
|
;
|
||||||
|
.LOOP: LD (CURRENT_SECTOR_L),DE
|
||||||
|
LD (CURRENT_SECTOR_H),IX
|
||||||
|
CALL .LOAD_SECTOR
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
|
||||||
|
LD DE,#AA55
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||||
|
;JR NZ,NODEFIN
|
||||||
|
|
||||||
|
; [ ] CDFS
|
||||||
|
JR NZ,.ATAPI_TST
|
||||||
|
;SCF
|
||||||
|
;RET NZ
|
||||||
|
;
|
||||||
|
; [ ] ¥á«¨ ATAPI, â® ¯à®¡ã¥¬ ¯à®ç¥áâì 0 ᥪâ®à ª ª-¡ã¤â® ¥â MBR
|
||||||
|
;LD A,(DRV_NUM)
|
||||||
|
;CP DRIVE_CODES.SPRINTER.CDROM
|
||||||
|
|
||||||
|
;
|
||||||
|
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
|
||||||
|
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||||
|
.DOSAGA: PUSH BC
|
||||||
|
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
|
||||||
|
CP PartitionSysTypes.Extended
|
||||||
|
JR Z,.SubLevel
|
||||||
|
CP PartitionSysTypes.Win_Ext_LBA
|
||||||
|
JR NZ,.NotExtended
|
||||||
|
;
|
||||||
|
.SubLevel: PUSH IY
|
||||||
|
LD DE,(CURRENT_SECTOR_L)
|
||||||
|
LD IX,(CURRENT_SECTOR_H)
|
||||||
|
PUSH DE
|
||||||
|
PUSH IX
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||||
|
LD A,(.ExtendedPartitionFlag)
|
||||||
|
INC A
|
||||||
|
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
;
|
||||||
|
CALL .ParseExtended
|
||||||
|
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||||
|
LD A,(.ExtendedPartitionFlag)
|
||||||
|
DEC A
|
||||||
|
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
;
|
||||||
|
POP IX
|
||||||
|
POP DE
|
||||||
|
LD (CURRENT_SECTOR_L),DE
|
||||||
|
LD (CURRENT_SECTOR_H),IX
|
||||||
|
CALL .LOAD_SECTOR
|
||||||
|
POP IY
|
||||||
|
.NextPartition: LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
|
||||||
|
ADD IY,DE
|
||||||
|
POP BC
|
||||||
|
DJNZ .DOSAGA
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.ParseExtended: LD HL,(EXTDOSL)
|
||||||
|
LD DE,(EXTDOSH)
|
||||||
|
LD A,L
|
||||||
|
OR H
|
||||||
|
OR E
|
||||||
|
OR D
|
||||||
|
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||||
|
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||||
|
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||||
|
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||||
|
JP NZ,.ext_in_ext
|
||||||
|
LD (EXTDOSL),DE
|
||||||
|
LD (EXTDOSH),HL
|
||||||
|
PUSH DE
|
||||||
|
JR .set_regs
|
||||||
|
;
|
||||||
|
.ext_in_ext: LD IX,(EXTDOSL)
|
||||||
|
ADD IX,DE
|
||||||
|
LD DE,(EXTDOSH)
|
||||||
|
ADC HL,DE
|
||||||
|
PUSH IX
|
||||||
|
.set_regs: PUSH HL
|
||||||
|
POP IX
|
||||||
|
POP DE
|
||||||
|
JP .LOOP
|
||||||
|
;
|
||||||
|
.LOAD_SECTOR: PUSH IY
|
||||||
|
LD IX,(CURRENT_SECTOR_L)
|
||||||
|
LD HL,(CURRENT_SECTOR_H)
|
||||||
|
LD DE,PARTITION_BUFFER
|
||||||
|
LD A,(DRV_NUM)
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;!TEST <09>®¤áâà 客ª ®â ¯¥à¥¯®«¥¨ï â ¡«¨æë LOGDRV
|
||||||
|
INC_DRV_COUNT: LD A,(INIT_H.count)
|
||||||
|
INC A
|
||||||
|
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||||
|
RET NC
|
||||||
|
LD (INIT_H.count),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;=======================================================================
|
||||||
|
; PHISICAL DRIVE NUMBER
|
||||||
|
; #80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢
|
||||||
|
DRV_NUM: DB #00
|
||||||
|
CURRENT_SECTOR_L: DW #0000
|
||||||
|
CURRENT_SECTOR_H: DW #0000
|
||||||
|
EXTDOSL: DW #0000 ;CURRENT PARTITION TABLE
|
||||||
|
EXTDOSH: DW #0000
|
||||||
|
OFFSECT: DW LOGDRV ;POINTER ON CURRENT DISK RECORD
|
||||||
|
;=======================================================================
|
||||||
|
|
||||||
|
; ENDMODULE
|
||||||
@ -173,7 +173,7 @@
|
|||||||
|
|
||||||
; IDE0 EQU #0C1C0
|
; IDE0 EQU #0C1C0
|
||||||
; IDE1 EQU #0C1C8
|
; IDE1 EQU #0C1C8
|
||||||
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
|
PARTITION_BUFFER _sBOOT_SECTOR = #C000
|
||||||
|
|
||||||
HDDRIVE: INC C
|
HDDRIVE: INC C
|
||||||
DEC C
|
DEC C
|
||||||
@ -226,8 +226,8 @@ INIT_H: PUSH IY
|
|||||||
; DRV_LIST:
|
; DRV_LIST:
|
||||||
; +0 LEN
|
; +0 LEN
|
||||||
; +1 FDD COUNT
|
; +1 FDD COUNT
|
||||||
; +2 HDD COUNT
|
; +2 ATA COUNT
|
||||||
; +3 CDROM COUNT
|
; +3 ATAPI COUNT
|
||||||
; +4 RESERVED (28)
|
; +4 RESERVED (28)
|
||||||
;
|
;
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit 710aa4b5dd4b651bcb01ef5e86150b99dfe739ee
|
Subproject commit ab51192affb0fbcb8cc9df8e463044e33613c35a
|
||||||
Loading…
Reference in New Issue
Block a user