Estex-DSS/DSS/Media_drivers/ide-drv.asm
2024-02-02 01:18:47 +10:00

719 lines
14 KiB
NASM
Raw Blame History

;---------------------------------------------------------------
;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 = 00h
; IX - Environment
;Output : A = Amount drive support
; HL = Size driver
;[]===========================================================[0]
;[]===========================================================[1]
;Procedure : Open
;
;Function : Open disk
;
;Input : C = 01h
; A - Drive
;Output : None
;
;[]===========================================================[1]
;[]===========================================================[2]
;Procedure : Close
;
;Function : Close disk
;
;Input : C = 02h
; A - Drive
;Output : None
;
;[]===========================================================[2]
;[]===========================================================[3]
;Procedure : Media check
;
;Function : Checking change line
;
;Input : C = 03h
; A - Drive
;Output : A = 00h disk no changed
; A = 0FFh disk changed
;
;[]===========================================================[3]
;[]===========================================================[4]
;Procedure : Get BPB
;
;Function : Get Block Parameters BIOS
;
;Input : C = 04h
; DE - Address
;Output : None
;
;[]===========================================================[4]
;[]===========================================================[5]
;Procedure : Input
;
;Function : Input from disk
;
;Input : C = 05h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output : None
;
;[]===========================================================[5]
;[]===========================================================[6]
;Procedure : Output
;
;Function : Output to disk
;
;Input : C = 06h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output : None
;
;[]===========================================================[6]
;[]===========================================================[7]
;Procedure : Removable
;
;Function : Checking change line
;
;Input : C = 07h
; A - Drive
;Output : A = 00h Removable
; A = FFh Nonremovable
;
;[]===========================================================[7]
;[]===========================================================[8]
;Procedure : Generic IOCTL
;
;Function : Generic Input Output Control
;
;Input : C = 08h
; B - Subcommand
; DE = 55AAh Magic Number
; Subcommand
;----------------------
; 00h - Get Device Parameters
; 01h - Read track
; 02h - Test track
; 80h - Set Device Parameters
; 81h - Write track
; 82h - Format track
;Output :
;
;[]===========================================================[8]
;[]===========================================================[9]
;Procedure : Read Long
;
;Function : Reading sectors from disk
;
;Input : C = 0Ah
; 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 = 0Bh
; 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 (00h) - NO ERRORS
; 1 (01h) - BAD COMMAND
; 2 (02h) - BAD DRIVE NUMBER
; 3 (03h) - UNKNOW FORMAT
; 4 (04h) - NOT READY
; 5 (05h) - SEEK ERROR
; 6 (06h) - SECTOR NOT FOUND
; 7 (07h) - CRC ERROR
; 8 (08h) - WRITE PROTECT
; 9 (09h) - READ ERROR
; 10 (0Ah) - WRITE ERROR
; 11 (0Bh) - FAILURE
; 12 (0Ch) - BUSY (DEVICE OPENED)
; 13 (0Dh) - RESERVED
; IDE0 EQU #0C1C0
; IDE1 EQU #0C1C8
PART EQU #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 (ᬥ<><E1ACA5> <20><><EFBFBD><EFBFBD><EFBFBD>)
DEC C
JP Z,GBPB_H ; c=4 get BPB
DEC C
JP Z,READH ; c=5 input (<28><EFBFBD><E2A5AD><><E1A5AA>஢)
DEC C
JP Z,WRITEH ; c=6 output (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A5AA>஢)
DEC C
JP Z,REMOV_H ; c=7 Removable
DEC C
JP Z,IOCTL_H ; c=8 㧭<><E3A7AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>᪠ Generic IOCTL
DEC C
JP Z,RESR_H ; c=9 Reserved
DEC C
JP Z,LREADH ; c=10 Read Long
DEC C
JP Z,LWRITEH ; c=11 Write Long
RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
////////////////////////////////////////////////////////////////////////
// Commands for restart #18 //
////////////////////////////////////////////////////////////////////////
;--------------------------------------------------------------------[v]
; c=0 Initialization
INIT_H: PUSH IY
;!TEST ;[ ] <20><><EFBFBD> rescanDRV
XOR A
LD (DRVCLC.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 HDD COUNT
; +3 CDROM COUNT
; +4 RESERVED (28)
;
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
XOR A
LD B,(IX+2) ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ HDD <20><><EFBFBD> <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> NX_DVCI
CP B
LD A,C
OUT (SLOT3),A
JR Z,NO_HARDS
LD C,#80 ;!HARDCODE - ID <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> BIOS.DRV_DETECT
NX_DVCI: PUSH BC
LD A,C
LD (DRV_NUM),A
LD C,BIOS.DRV_DETECT
RST ToBIOS
;JR C,.NO_DRIVE
CALL NC,PARTIT
POP BC
INC C
JR C,NX_DVCI
DJNZ NX_DVCI
;
NO_HARDS:
POP IY
;!TEST
; LD HL,(OFFSECT)
; LD DE,LOGDRV
; XOR A
; SBC HL,DE
; RET Z
; LD DE,LOGDRV.TBL_Entry
DRVCLC: ; INC A
; SBC HL,DE
; JR NZ,DRVCLC
;
.count+1: LD A,0
;
AND A
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
;!TODO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PUSH <20><> EXX?
SELHDD: PUSH DE
PUSH BC
PUSH HL
;
LD L,A
LOGDRV_ENTRY_FIND LOGDRV
;
LD C,(IY+1)
LD B,(IY+2)
LD E,(IY+3)
LD D,(IY+4)
POP HL
ADD IX,BC
ADC HL,DE
LD A,(IY+0) ;DRIVE NUMBER
POP BC
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 ;[ ] 17.12.2023 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
; 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
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AEA2><><E0A5A3><EFBFBD><20><><E0A5A7><EFBFBD><EFBFBD><EFBFBD><20><> 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)
;
;[ ] 17.12.2023 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
LD C,(IY+LOGDRV.PARTITION_RECORD_NUM) ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20> MBR <20><>
;
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
;HL:IX - SECTOR
; DE - ADDRESS
GBPB_H: PUSH IY
PUSH DE
LD L,A
;
LOGDRV_ENTRY_FIND LOGDRV
;
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 NUMBER +#80
;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 NUMBER +#80
;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 NUMBER +#80
;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 NUMBER +#80
;CHECK SECTOR
CHECKH: PUSH IY
CALL SELHDD
LD C,BIOS.DRV_VERIFY
RST ToBIOS
POP IY
RET
;-----------------
EASYDOS:
MEDIDOS:
HIGHDOS:
LD E,(IY+08)
LD D,(IY+09)
LD L,(IY+10)
LD H,(IY+11)
LD IX,(CURSECL)
ADD IX,DE
LD DE,(CURSECH)
ADC HL,DE
LD D,XH
LD E,XL
LD IX,(OFFSECT)
LD (IX+LOGDRV.SECTOR_OFFSET+0),E ;BPB SECTOR
LD (IX+LOGDRV.SECTOR_OFFSET+1),D
LD (IX+LOGDRV.SECTOR_OFFSET+2),L
LD (IX+LOGDRV.SECTOR_OFFSET+3),H
LD E,(IY+12)
LD D,(IY+13)
LD L,(IY+14)
LD H,(IY+15)
LD (IX+LOGDRV.SIZE_IN_SECTORS+0),E ;SIZE DISK
LD (IX+LOGDRV.SIZE_IN_SECTORS+1),D
LD (IX+LOGDRV.SIZE_IN_SECTORS+2),L
LD (IX+LOGDRV.SIZE_IN_SECTORS+3),H
;[ ] 17.12.2023 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
ExtendedPartitionFlag+1:
LD A,0
OR A ; !TODO <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A5AD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD A,#FF
JR NZ,.not_supported ; <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A5AD><EFBFBD><><E0A0A7><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
;
POP BC
PUSH BC
LD A,4 ;!HARDCODE MBR: Number of entries in the partition table
SUB B
.not_supported:
LD (IX+LOGDRV.PARTITION_RECORD_NUM),A
;
;!TEST <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5AEA2> <20><> <20><><EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A0A1><EFBFBD><EFBFBD> LOGDRV
LD A,(DRVCLC.count)
INC A
CP DSS_MAX_DRIVES_AMOUNT+1
RET NC
LD (DRVCLC.count),A
;
LD A,(DRV_NUM)
LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),A
LD DE,LOGDRV.TBL_Entry ;DSKITEM
ADD IX,DE
LD (OFFSECT),IX
JP NXTPART
; NXTPART:
; LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
; ADD IY,DE
; POP BC
; DJNZ DOSAGA
; AND A
; RET
;
NOEXTDS:
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
CP PartitionSysTypes.Win_Ext_LBA
JR Z,SUBLEV
;[x] 17/12/23 <20><EFBFBD><E0AEAF><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>, <20><><EFBFBD><E2A8AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E2A5AA>
;OR A ;PartitionSysTypes.Empty
;JR NZ,NXTPART
JR NXTPART ; ࠧ<><E0A0A7><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;POP BC ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>
;RET
;POP BC
;OR A
;RET Z
;NODEFIN:
;SCF
;RET
;
PARTIT: IN A,(SLOT3)
PUSH AF
LD A,SHARED_PAGE
OUT (SLOT3),A
CALL PARTIT1
POP AF
OUT (SLOT3),A
RET
PARTIT1:
LD IX,0
LD DE,0
LD (EXTDOSL),DE ;R01
LD (EXTDOSH),IX ;R01
PARTIT2:
LD (CURSECL),DE
LD (CURSECH),IX
CALL LOADSEC
;
LD HL,(PART+510) ;!HARDCODE Signature word
LD DE,#AA55
AND A
SBC HL,DE
;[ ] 17/12/23 <20><EFBFBD><E0AEAF><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>, <20><><EFBFBD><E2A8AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5A1><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD>
;JR NZ,NODEFIN
SCF
RET NZ
;
LD IY,PART+#01BE ;!HARDCODE MBR: Offset of partition table in the MBR
LD B,4 ;!HARDCODE MBR: Number of entries in the partition table
DOSAGA: PUSH BC
LD A,(IY+4)
CP PartitionSysTypes.Extended
JR NZ,NOEXTDS
SUBLEV: PUSH IY
LD DE,(CURSECL)
LD IX,(CURSECH)
PUSH DE
PUSH IX
;[ ] 17/12/23 <20><EFBFBD><E0AEAF><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>, <20><><EFBFBD><E2A8AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5A1><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD>
LD A,(ExtendedPartitionFlag)
INC A
LD (ExtendedPartitionFlag),A ; !TODO <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A5AD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;
CALL EXTDOS
;[ ] 17/12/23 <20><EFBFBD><E0AEAF><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>, <20><><EFBFBD><E2A8AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5A1><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD>
LD A,(ExtendedPartitionFlag)
DEC A
LD (ExtendedPartitionFlag),A ; !TODO <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A5AD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;
POP IX
POP DE
LD (CURSECL),DE
LD (CURSECH),IX
CALL LOADSEC
POP IY
NXTPART:
LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
ADD IY,DE
POP BC
DJNZ DOSAGA
AND A
RET
;
EXTDOS: LD HL,(EXTDOSL)
LD DE,(EXTDOSH)
LD A,L
OR H
OR E
OR D
LD E,(IY+08)
LD D,(IY+09)
LD L,(IY+10)
LD H,(IY+11)
JP NZ,EXTDOS2
LD (EXTDOSL),DE
LD (EXTDOSH),HL
LD IX,(EXTDOSH)
JP PARTIT2
;
EXTDOS2:
LD IX,(EXTDOSL)
ADD IX,DE
PUSH IX
LD DE,(EXTDOSH)
ADC HL,DE
PUSH HL
POP IX
POP DE
JP PARTIT2
LOADSEC:
PUSH IY
LD IX,(CURSECL)
LD HL,(CURSECH)
LD DE,PART
LD A,(DRV_NUM)
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP IY
RET
DRV_NUM DB #00 ;PHISICAL DRIVE NUMBER. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (#80/#81 - primary <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/᫥<><E1ABA5>, #82/#83 - secondary <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/᫥<><E1ABA5>)
CURSECL DW #0000 ;CURRENT SECTOR LOADED
CURSECH DW #0000
EXTDOSL DW #0000 ;CURRENT PARTITION TABLE
EXTDOSH DW #0000
OFFSECT DW LOGDRV ;POINTER ON CURRENT DISK RECORD
;=======================================================