mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
DSS: детект разрядности FAT в BPB теперь по всем канонам. Допиливание до FAT32.
SYS: Загрузка System.dos > #4000 байтов. Исправлен баг с ненужной проверкой расстояния от BPB до FAT для HDD. SHELL: мелкие правки
This commit is contained in:
parent
9b975b7a88
commit
bb63a4071d
547
BOOT/DSSBOOT.ASM
547
BOOT/DSSBOOT.ASM
@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
OUTPUT 'build/DSSloader.bin'
|
OUTPUT 'build/DSSloader.bin'
|
||||||
|
|
||||||
ADRIVE EQU #00
|
;ADRIVE EQU #00
|
||||||
CDRIVE EQU #02
|
;CDRIVE EQU #02
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -33,8 +33,13 @@ DRIVE: _mSYSID
|
|||||||
;
|
;
|
||||||
LD C,BIOS.DRV_VERSION
|
LD C,BIOS.DRV_VERSION
|
||||||
RST ToBIOS_18
|
RST ToBIOS_18
|
||||||
|
;
|
||||||
|
LD HL,FAIL
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
LD A,INCORR
|
LD A,INCORR
|
||||||
JR C,FAIL
|
;JR C,FAIL
|
||||||
|
RET C
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
BIT 7,A
|
BIT 7,A
|
||||||
JR Z,GOOD_DRIVE
|
JR Z,GOOD_DRIVE
|
||||||
@ -42,145 +47,67 @@ DRIVE: _mSYSID
|
|||||||
LD DE,2*256 + 21 ;!HARDCODE ¥á«¨ ¢¥àá¨ï ¨¦¥ 2.21, â® ®è¨¡ª
|
LD DE,2*256 + 21 ;!HARDCODE ¥á«¨ ¢¥àá¨ï ¨¦¥ 2.21, â® ®è¨¡ª
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
LD A,INCORR
|
LD A,INCORR
|
||||||
JR C,FAIL
|
;JR C,FAIL
|
||||||
GOOD_DRIVE:
|
RET C
|
||||||
LD DE,#8200 ;!HARDCODE
|
GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||||
LD HL,0
|
LD HL,0
|
||||||
LD IX,2
|
LD IX,2
|
||||||
LD BC,2*256 + BIOS.DRV_READ
|
LD BC,2*256 + BIOS.DRV_READ
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
RST ToBIOS_18
|
RST ToBIOS_18
|
||||||
JR C,NULL
|
JP C,FAIL.NULL
|
||||||
JP CONTINUE
|
;
|
||||||
|
; CONTINUE
|
||||||
FAIL CALL MESSAGE
|
|
||||||
NULL LD A,FAILURE
|
|
||||||
CALL MESSAGE
|
|
||||||
DI
|
|
||||||
HALT
|
|
||||||
JR $
|
|
||||||
|
|
||||||
FMESAGE LD HL,MSG0
|
|
||||||
LD BC,MSGE-MSG0
|
|
||||||
INC A
|
|
||||||
EX AF,AF'
|
|
||||||
XOR A
|
|
||||||
EX AF,AF'
|
|
||||||
NEXTMSG EX AF,AF'
|
|
||||||
CPIR
|
|
||||||
RET PO
|
|
||||||
RET NZ
|
|
||||||
EX AF,AF'
|
|
||||||
DEC A
|
|
||||||
JR NZ,NEXTMSG
|
|
||||||
RET
|
|
||||||
|
|
||||||
MESSAGE CALL FMESAGE
|
|
||||||
JR PRINTZ
|
|
||||||
|
|
||||||
;R01 Start
|
|
||||||
PRINTZ LD A,(HL) ;R01
|
|
||||||
INC HL
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
CALL PRINTX
|
|
||||||
JR PRINTZ
|
|
||||||
|
|
||||||
PRINTX CP #0D
|
|
||||||
JR Z,CR_
|
|
||||||
CP #0A
|
|
||||||
JR Z,LF_
|
|
||||||
LD BC,1*256 + BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS_18
|
|
||||||
RET
|
|
||||||
CR_ LD C,BIOS.LP_GET_PLACE
|
|
||||||
RST ToBIOS_18
|
|
||||||
LD E,0
|
|
||||||
LD C,#84
|
|
||||||
RST ToBIOS_18
|
|
||||||
RET
|
|
||||||
LF_ LD C,BIOS.LP_GET_PLACE
|
|
||||||
RST ToBIOS_18
|
|
||||||
LD A,#1F
|
|
||||||
CP D
|
|
||||||
JR NZ,LF2
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
LD DE,#0020
|
|
||||||
LD BC,1*256 + BIOS.LP_SCROLL_UD
|
|
||||||
RST ToBIOS_18
|
|
||||||
LD DE,#1F00
|
|
||||||
LD C,BIOS.LP_SET_PLACE
|
|
||||||
RST ToBIOS_18
|
|
||||||
LD A," "
|
|
||||||
LD BC,#50 + BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS_18
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
DEC D
|
|
||||||
LF2 INC D
|
|
||||||
LD C,BIOS.LP_SET_PLACE
|
|
||||||
RST ToBIOS_18
|
|
||||||
RET ;R01
|
|
||||||
;R01 End
|
|
||||||
|
|
||||||
FAILURE EQU 0
|
|
||||||
INCORR EQU 1
|
|
||||||
ERRPART EQU 2
|
|
||||||
ERRIBPB EQU 3
|
|
||||||
NO_SYS EQU 4
|
|
||||||
NOSHELL EQU 5
|
|
||||||
STARTDO EQU 6
|
|
||||||
;a BIOS version that is incompatible with this version of DOS
|
|
||||||
; 0 10 20 30 40 50 60 70 80
|
|
||||||
MSG0: DB 0
|
|
||||||
DB 13,10,"The system has been halted. Press RESET to restart your computer.",13,10,0
|
|
||||||
DB 13,10,"You started your computer with a BIOS version that is incompatible with this",13,10
|
|
||||||
DB "version of DSS. Please update BIOS to run this version of DSS.",13,10,0
|
|
||||||
DB "Invalid partition table.",13,10,0
|
|
||||||
DB "Invalid BOOT sector.",13,10,0
|
|
||||||
DB "Can't open file SYSTEM.DOS...",13,10,0
|
|
||||||
DB 13,10,"Starting DSS... ",13,10,13,10,0
|
|
||||||
MSGE DB 0
|
|
||||||
|
|
||||||
CONTINUE:
|
|
||||||
;!TEST 26/03/2024
|
;!TEST 26/03/2024
|
||||||
LD SP,#C000
|
LD SP,#C000
|
||||||
;
|
;
|
||||||
|
|
||||||
LD HL,0
|
LD HL,0
|
||||||
LD (DISKL),HL
|
LD (DISKL),HL
|
||||||
LD (DISKH),HL
|
LD (DISKH),HL
|
||||||
|
;
|
||||||
LD BC,1*256 + BIOS.GetMem
|
LD BC,1*256 + BIOS.GetMem
|
||||||
RST ToBIOS_18 ;GET PAGE FOR DOS
|
RST ToBIOS_18 ;GET PAGE FOR DOS
|
||||||
LD (BANKDOS),A
|
LD (BANKDOS),A
|
||||||
|
;
|
||||||
|
OUT (SLOT0),A
|
||||||
|
;
|
||||||
CALL GET_BPB ;READ BPB
|
CALL GET_BPB ;READ BPB
|
||||||
LD A,ERRIBPB
|
LD A,ERRIBPB
|
||||||
JP C,FAIL
|
;JP C,FAIL
|
||||||
|
RET C
|
||||||
CALL GETROOT
|
CALL GETROOT
|
||||||
LD A,NO_SYS
|
LD A,NO_SYS
|
||||||
JP C,FAIL
|
;JP C,FAIL
|
||||||
|
RET C
|
||||||
|
; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||||
|
LD HL,(FSIZE1)
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,.set_size
|
||||||
|
LD DE,(FSIZE0)
|
||||||
|
LD HL,#4000
|
||||||
|
SBC HL,DE
|
||||||
|
RLA
|
||||||
|
.set_size: LD (BIG_SHELL),A
|
||||||
|
;
|
||||||
LD HL,(FCLUSTR)
|
LD HL,(FCLUSTR)
|
||||||
LD DE,#C000
|
LD DE,#C000
|
||||||
CALL FLOAD ; § £à㧪
|
CALL FLOAD ; § £à㧪
|
||||||
DI
|
DI
|
||||||
XOR A
|
XOR A
|
||||||
OUT (SYS_PORT.OFF),A
|
OUT (SYS_PORT.OFF),A
|
||||||
|
;
|
||||||
LD A,#10
|
LD A,#10
|
||||||
LD BC,#7FFD
|
LD BC,#7FFD
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
|
;
|
||||||
LD A,1
|
LD A,1
|
||||||
LD B,#1F ;1FFD
|
LD B,#1F ;1FFD
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
|
;
|
||||||
LD A,(BANKDOS)
|
; LD A,(BANKDOS)
|
||||||
OUT (SLOT0),A
|
; OUT (SLOT0),A
|
||||||
|
;DOS LOADED
|
||||||
;DOS LOADED
|
|
||||||
IF UNIVERSAL_BOOT
|
IF UNIVERSAL_BOOT
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
LD A,(DRIVE+1) ; ®¬¥à à §¤¥«
|
LD A,(DRIVE+1) ; ®¬¥à à §¤¥«
|
||||||
@ -189,19 +116,17 @@ CONTINUE:
|
|||||||
LD A,(DRIVE) ; ®¬¥à ãáâனáâ¢
|
LD A,(DRIVE) ; ®¬¥à ãáâனáâ¢
|
||||||
LD C,Dss.Version
|
LD C,Dss.Version
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
jp c,XFAIL.fail
|
JP C,XFAIL.fail
|
||||||
|
;
|
||||||
LD A,STARTDO
|
LD A,STARTDO
|
||||||
CALL DOSMESS
|
CALL DOSMESS
|
||||||
|
;
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
LD BC,Dss.BootDSK.Set
|
LD BC,Dss.BootDSK.Set
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
|
;
|
||||||
;LD B,high Dss.BootDSK.Get
|
|
||||||
LD BC,Dss.BootDSK.Get
|
LD BC,Dss.BootDSK.Get
|
||||||
ELSE
|
ELSE
|
||||||
|
|
||||||
IF ORIGINAL_DSS
|
IF ORIGINAL_DSS
|
||||||
LD C,Dss.Version
|
LD C,Dss.Version
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
@ -211,62 +136,49 @@ CONTINUE:
|
|||||||
RST ToDSS
|
RST ToDSS
|
||||||
jp c,XFAIL.fail
|
jp c,XFAIL.fail
|
||||||
LD C,Dss.BootDSK
|
LD C,Dss.BootDSK
|
||||||
ENDIF
|
ENDIF ;
|
||||||
|
|
||||||
LD A,STARTDO
|
LD A,STARTDO
|
||||||
CALL DOSMESS
|
CALL DOSMESS
|
||||||
|
|
||||||
IF ORIGINAL_DSS
|
IF ORIGINAL_DSS
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
LD BC,Dss.BootDSK.Set
|
LD BC,Dss.BootDSK.Set
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
|
|
||||||
;LD B,high Dss.BootDSK.Get
|
|
||||||
LD B‘,Dss.BootDSK.Get
|
LD B‘,Dss.BootDSK.Get
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDIF
|
ENDIF
|
||||||
|
;
|
||||||
;LD C,Dss.BootDSK
|
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
|
;
|
||||||
ADD A,"A"
|
ADD A,"A"
|
||||||
|
;
|
||||||
|
|
||||||
LD HL,ROOT
|
LD HL,ROOT
|
||||||
LD (HL),A
|
LD (HL),A
|
||||||
LD C,Dss.ChDir
|
LD C,Dss.ChDir
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
|
;
|
||||||
LD HL,PSHELL
|
LD HL,PSHELL
|
||||||
LD BC,Dss.Exec
|
LD BC,Dss.Exec
|
||||||
RST ToDSS
|
RST ToDSS
|
||||||
LD A,NOSHELL
|
.NoShell: LD A,NOSHELL
|
||||||
JP XFAIL
|
;JP XFAIL
|
||||||
|
|
||||||
PSHELL: DB '\SYSTEM.EXE /P',0
|
|
||||||
ROOT: DB 'X:\',0
|
|
||||||
|
|
||||||
DOSMESS CALL FMESAGE
|
|
||||||
LD C,Dss.PChars
|
|
||||||
RST ToDSS
|
|
||||||
RET
|
|
||||||
|
|
||||||
XFAIL: CALL DOSMESS
|
XFAIL: CALL DOSMESS
|
||||||
.fail: LD A,FAILURE
|
.fail: LD A,FAILURE
|
||||||
CALL DOSMESS
|
CALL DOSMESS
|
||||||
DI
|
DI
|
||||||
HALT
|
HALT
|
||||||
.halt: JR .halt
|
.halt: JR .halt
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
PART_TB: PUSH BC
|
PART_TB: PUSH BC
|
||||||
LD HL,(BOOT+510)
|
LD HL,(BOOT+510)
|
||||||
LD DE,#AA55
|
LD DE,#AA55
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NZ,ERRP
|
JR NZ,.ERRP
|
||||||
LD IX,BOOT+#01BE
|
LD IX,BOOT+#01BE
|
||||||
LD B,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR
|
LD B,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR
|
||||||
DOSAGA: LD A,(IX+4)
|
.DOSAGA: LD A,(IX+4)
|
||||||
CP PartitionSysTypes.FAT16_LBA
|
CP PartitionSysTypes.FAT16_LBA
|
||||||
JR Z,YEPDOS
|
JR Z,YEPDOS
|
||||||
CP PartitionSysTypes.FAT16
|
CP PartitionSysTypes.FAT16
|
||||||
@ -277,14 +189,16 @@ DOSAGA: LD A,(IX+4)
|
|||||||
JR Z,YEPDOS
|
JR Z,YEPDOS
|
||||||
.next: LD DE,#10
|
.next: LD DE,#10
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
DJNZ DOSAGA
|
DJNZ .DOSAGA
|
||||||
ERRP: LD A,ERRPART
|
.ERRP: LD A,ERRPART
|
||||||
JP FAIL
|
JP FAIL
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
YEPDOS: ;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
YEPDOS: ;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
LD A,#80
|
LD A,#80
|
||||||
CP (IX+0)
|
CP (IX+0)
|
||||||
JR NZ,DOSAGA.next
|
JR NZ,PART_TB.next
|
||||||
LD A,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR
|
LD A,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR
|
||||||
SUB B
|
SUB B
|
||||||
PUSH AF ; ®¬¥à § £à㧮箣® à §¤¥«
|
PUSH AF ; ®¬¥à § £à㧮箣® à §¤¥«
|
||||||
@ -309,7 +223,9 @@ YEPDOS: ;[ ] 17.12.2023
|
|||||||
;LD A,C
|
;LD A,C
|
||||||
;
|
;
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
SET_PRM: PUSH BC
|
SET_PRM: PUSH BC
|
||||||
LD A,B
|
LD A,B
|
||||||
LD C,BIOS.DRV_GET_PAR
|
LD C,BIOS.DRV_GET_PAR
|
||||||
@ -323,7 +239,9 @@ SET_PRM: PUSH BC
|
|||||||
POP BC
|
POP BC
|
||||||
LD A,C
|
LD A,C
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
GET_BPB: LD IX,#0000
|
GET_BPB: LD IX,#0000
|
||||||
LD HL,#0000
|
LD HL,#0000
|
||||||
LD DE,BOOT
|
LD DE,BOOT
|
||||||
@ -336,16 +254,16 @@ GET_BPB: LD IX,#0000
|
|||||||
AND #F0
|
AND #F0
|
||||||
LD C,A
|
LD C,A
|
||||||
CP #80
|
CP #80
|
||||||
JR NZ,NX1
|
JR NZ,.NX1
|
||||||
CALL PART_TB ;HDD
|
CALL PART_TB ;HDD
|
||||||
RET C
|
RET C
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
LD (DRIVE+1),HL
|
LD (DRIVE+1),HL
|
||||||
;
|
;
|
||||||
NX1: CP #00
|
.NX1: CP #00
|
||||||
JR NZ,NX2
|
JR NZ,.NX2
|
||||||
CALL SET_PRM ;FDD
|
CALL SET_PRM ;FDD
|
||||||
NX2: LD HL,(BOOT+510)
|
.NX2: LD HL,(BOOT+510)
|
||||||
LD DE,#AA55
|
LD DE,#AA55
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
@ -357,7 +275,7 @@ NX2: LD HL,(BOOT+510)
|
|||||||
RET C
|
RET C
|
||||||
LD HL,0 ;calc. first sector FAT
|
LD HL,0 ;calc. first sector FAT
|
||||||
LD (DIR_FRH),HL
|
LD (DIR_FRH),HL
|
||||||
|
;
|
||||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
||||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
@ -365,9 +283,9 @@ NX2: LD HL,(BOOT+510)
|
|||||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16) ;sectors in FAT
|
LD E,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16) ;sectors in FAT
|
||||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16+1)
|
LD D,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16+1)
|
||||||
LD A,(BOOT.Number_of_FATs) ;amount FATs
|
LD A,(BOOT.Number_of_FATs) ;amount FATs
|
||||||
C_DATA1: ADD HL,DE
|
.C_DATA1: ADD HL,DE
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,C_DATA1
|
JR NZ,.C_DATA1
|
||||||
LD (DIR_FRM),HL ;first sector DIR
|
LD (DIR_FRM),HL ;first sector DIR
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD L,(IY+_sBOOT_SECTOR_PARAMS.FilesInRootDIR) ;Number file handel
|
LD L,(IY+_sBOOT_SECTOR_PARAMS.FilesInRootDIR) ;Number file handel
|
||||||
@ -384,53 +302,49 @@ C_DATA1: ADD HL,DE
|
|||||||
LD H,0
|
LD H,0
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
LD (DAT_FRM),HL ;First sector data
|
LD (DAT_FRM),HL ;First sector data
|
||||||
|
;
|
||||||
LD C,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector) ;Size sector
|
LD C,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector) ;Size sector
|
||||||
LD B,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector+1)
|
LD B,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector+1)
|
||||||
LD HL,0
|
LD HL,0
|
||||||
LD A,(BOOT.SectorsPerCluster)
|
LD A,(BOOT.SectorsPerCluster)
|
||||||
NEXTAD3:
|
.NEXTAD3: ADD HL,BC ;calc. cluster size
|
||||||
ADD HL,BC ;calc. cluster size
|
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,NEXTAD3
|
JR NZ,.NEXTAD3
|
||||||
LD (CLU_LEN),HL
|
LD (CLU_LEN),HL
|
||||||
|
|
||||||
LD HL,BOOT.ID_FAT
|
LD HL,BOOT.ID_FAT
|
||||||
LD DE,FATMSG
|
LD DE,FATMSG
|
||||||
LD B,3
|
LD B,3
|
||||||
R_BPBL1:
|
.R_BPBL1: LD A,(DE)
|
||||||
LD A,(DE)
|
|
||||||
CP (HL)
|
CP (HL)
|
||||||
JP NZ,IBMDOS_
|
JP NZ,.IBMDOS_
|
||||||
INC HL
|
INC HL
|
||||||
INC DE
|
INC DE
|
||||||
DJNZ R_BPBL1
|
DJNZ .R_BPBL1
|
||||||
FID: LD A,(HL)
|
.FID: LD A,(HL)
|
||||||
INC HL
|
INC HL
|
||||||
CP " "
|
CP " "
|
||||||
JR Z,FID
|
JR Z,.FID
|
||||||
CP "1"
|
CP "1"
|
||||||
SCF
|
SCF
|
||||||
RET NZ
|
RET NZ
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
CP "6" ; FAT16
|
CP "6" ; FAT16
|
||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
JR Z,BPB_FAT
|
JR Z,.BPB_FAT
|
||||||
CP "2" ; FAT12
|
CP "2" ; FAT12
|
||||||
SCF
|
SCF
|
||||||
RET NZ
|
RET NZ
|
||||||
LD HL,#0FFF
|
LD HL,#0FFF
|
||||||
BPB_FAT
|
.BPB_FAT: LD (FAT_TYP),A
|
||||||
LD (FAT_TYP),A
|
|
||||||
LD (ENDCLUS),HL
|
LD (ENDCLUS),HL
|
||||||
|
;
|
||||||
LD IX,(DISKL)
|
LD IX,(DISKL)
|
||||||
LD HL,(DISKH)
|
LD HL,(DISKH)
|
||||||
LD DE,(FAT_FRM)
|
LD DE,(FAT_FRM)
|
||||||
LD BC,#0000
|
LD BC,#0000
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
ADC HL,BC
|
ADC HL,BC
|
||||||
;HL:IX
|
;HL:IX
|
||||||
LD DE,FAT
|
LD DE,FAT
|
||||||
LD BC,3*256 + BIOS.DRV_READ
|
LD BC,3*256 + BIOS.DRV_READ
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
@ -440,17 +354,18 @@ BPB_FAT
|
|||||||
LD (FatCache),HL
|
LD (FatCache),HL
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
IBMDOS_ LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
.IBMDOS_ LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||||
CP #F0
|
CP #F0
|
||||||
RET C
|
RET C
|
||||||
CP #F8
|
CP #F8
|
||||||
LD A,"6"
|
LD A,"6"
|
||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
JR Z,BPB_FAT
|
JR Z,.BPB_FAT
|
||||||
LD A,"2"
|
LD A,"2"
|
||||||
LD HL,#0FFF
|
LD HL,#0FFF
|
||||||
JR BPB_FAT
|
JR .BPB_FAT
|
||||||
|
;
|
||||||
|
|
||||||
; ¯®¨áª system.dos
|
; ¯®¨áª system.dos
|
||||||
GETROOT: LD HL,(DIR_FRH)
|
GETROOT: LD HL,(DIR_FRH)
|
||||||
@ -458,10 +373,10 @@ GETROOT: LD HL,(DIR_FRH)
|
|||||||
LD BC,(DISKL)
|
LD BC,(DISKL)
|
||||||
LD DE,(DISKH)
|
LD DE,(DISKH)
|
||||||
LD A,(DIR_S_S)
|
LD A,(DIR_S_S)
|
||||||
NEXTSEC: PUSH AF
|
.NEXTSEC: PUSH AF
|
||||||
ADD IX,BC
|
ADD IX,BC
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
;HL:IX
|
;HL:IX
|
||||||
PUSH IX
|
PUSH IX
|
||||||
PUSH HL
|
PUSH HL
|
||||||
LD BC,1*256 + BIOS.DRV_READ
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
@ -478,13 +393,15 @@ NEXTSEC: PUSH AF
|
|||||||
LD DE,0
|
LD DE,0
|
||||||
LD BC,1
|
LD BC,1
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,NEXTSEC
|
JR NZ,.NEXTSEC
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
|
SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
|
||||||
LD IX,DIR-#0020
|
LD IX,DIR-#0020
|
||||||
SKIPNAM: LD DE,#0020
|
.SKIPNAM: LD DE,#0020
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
DEC C
|
DEC C
|
||||||
RET Z
|
RET Z
|
||||||
@ -493,20 +410,20 @@ SKIPNAM: LD DE,#0020
|
|||||||
SCF
|
SCF
|
||||||
RET Z
|
RET Z
|
||||||
CP #E5
|
CP #E5
|
||||||
JR Z,SKIPNAM
|
JR Z,.SKIPNAM
|
||||||
LD A,(IX+11)
|
LD A,(IX+11)
|
||||||
AND #10
|
AND #10
|
||||||
JR NZ,SKIPNAM
|
JR NZ,.SKIPNAM
|
||||||
LD HL,MASKARE
|
LD HL,MASKARE
|
||||||
LD D,XH
|
LD D,XH
|
||||||
LD E,XL
|
LD E,XL
|
||||||
LD B,11
|
LD B,11
|
||||||
SEARCH2: LD A,(DE)
|
.SEARCH2: LD A,(DE)
|
||||||
CP (HL)
|
CP (HL)
|
||||||
JR NZ,SKIPNAM
|
JR NZ,.SKIPNAM
|
||||||
INC HL
|
INC HL
|
||||||
INC DE
|
INC DE
|
||||||
DJNZ SEARCH2
|
DJNZ .SEARCH2
|
||||||
LD D,XH
|
LD D,XH
|
||||||
LD E,XL
|
LD E,XL
|
||||||
LD HL,HANDBUF
|
LD HL,HANDBUF
|
||||||
@ -521,67 +438,86 @@ SEARCH2: LD A,(DE)
|
|||||||
; DE - ADDRESS
|
; DE - ADDRESS
|
||||||
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥¨¥ à §¬¥à SYSTEM.DOS ¨ ¢®§¬®¦®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ¨æë
|
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥¨¥ à §¬¥à SYSTEM.DOS ¨ ¢®§¬®¦®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ¨æë
|
||||||
FLOAD: LD (READMEM),DE
|
FLOAD: LD (READMEM),DE
|
||||||
LD_FILE: PUSH HL
|
.LD_FILE: PUSH HL ; system.dos first cluster
|
||||||
CALL NSECTOR
|
CALL NSECTOR ; Cluster to Sector
|
||||||
LD DE,(READMEM)
|
LD DE,(READMEM)
|
||||||
LD A,(BOOT.SectorsPerCluster)
|
LD A,(BOOT.SectorsPerCluster)
|
||||||
CP #20
|
CP #20
|
||||||
JR C,SMALL_CLUSTER
|
|
||||||
LD BC,#20*256 + BIOS.DRV_READ_LONG
|
|
||||||
LD A,(BANKDOS)
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,(DRIVE)
|
|
||||||
RST ToBIOS_18
|
|
||||||
POP HL
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
SMALL_CLUSTER:
|
|
||||||
LD B,A
|
|
||||||
LD C,BIOS.DRV_READ_LONG
|
LD C,BIOS.DRV_READ_LONG
|
||||||
|
JR C,.SMALL_CLUSTER
|
||||||
|
LD A,(BANKDOS)
|
||||||
|
EX AF,AF'
|
||||||
|
;LD BC,#20*256 + BIOS.DRV_READ_LONG
|
||||||
|
LD B,#20 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
||||||
|
.set_drv: LD A,(DRIVE)
|
||||||
|
RST ToBIOS_18
|
||||||
|
JP C,GOOD_DRIVE.NoShell
|
||||||
|
POP HL
|
||||||
|
; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||||
|
;AND A
|
||||||
|
;RET
|
||||||
|
LD A,(BIG_SHELL)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
LD (BIG_SHELL),A
|
||||||
|
PUSH HL
|
||||||
|
CALL NSECTOR
|
||||||
|
LD DE,#20 ; !HARDCODE ª®«-¢® ¯à®ç¨â ëå ᥪâ®à®¢
|
||||||
|
AND A
|
||||||
|
ADD IX,DE
|
||||||
|
JR NC,.no_inc_hl
|
||||||
|
INC HL
|
||||||
|
.no_inc_hl: LD BC,SUBLOAD_SIZE*256 + BIOS.DRV_READ ; !HARDCODE ª®«-¢® „ާ £à㦠¥¬ëå ᥪâ®à®¢
|
||||||
|
LD DE,#4000
|
||||||
|
JR .set_drv
|
||||||
|
;
|
||||||
|
.SMALL_CLUSTER: LD B,A
|
||||||
|
;LD C,BIOS.DRV_READ_LONG
|
||||||
LD A,(BANKDOS)
|
LD A,(BANKDOS)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
RST ToBIOS_18
|
RST ToBIOS_18
|
||||||
|
JP C,GOOD_DRIVE.NoShell
|
||||||
|
;
|
||||||
LD HL,(READMEM)
|
LD HL,(READMEM)
|
||||||
LD DE,(CLU_LEN)
|
LD DE,(CLU_LEN)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
LD (READMEM),HL
|
LD (READMEM),HL
|
||||||
|
; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||||
|
;POP HL
|
||||||
|
;RET C
|
||||||
|
CALL C,.more_than_1
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
CALL R_F_FAT
|
;
|
||||||
|
CALL R_F_FAT ; next cluster in chain
|
||||||
RET C
|
RET C
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
JP LD_FILE
|
JP .LD_FILE
|
||||||
|
; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||||
; HL - CLUSTER
|
.more_than_1: LD A,(BIG_SHELL)
|
||||||
; HL:IX - SECTOR
|
OR A
|
||||||
|
SCF
|
||||||
; NSECTOR:
|
RET Z
|
||||||
; DEC HL
|
IN A,(SLOT1)
|
||||||
; DEC HL
|
LD HL,BANKDOS
|
||||||
; EX DE,HL
|
CP (HL)
|
||||||
; LD A,(BOOT.SectorsPerCluster)
|
CCF
|
||||||
; LD B,A
|
RET Z
|
||||||
; LD HL,0
|
LD (BANKDOS),A
|
||||||
; LD IX,0
|
LD HL,#C000
|
||||||
; ADD_DE1 ADD IX,DE
|
LD (READMEM),HL
|
||||||
; JP NC,ADD_DE2
|
AND A
|
||||||
; INC HL
|
RET
|
||||||
; ADD_DE2 DJNZ ADD_DE1
|
|
||||||
; LD DE,(DAT_FRM)
|
|
||||||
; ADD IX,DE
|
|
||||||
; LD DE,#0000
|
|
||||||
; ADC HL,DE
|
|
||||||
|
|
||||||
; LD DE,(DISKL)
|
|
||||||
; ADD IX,DE
|
|
||||||
; LD DE,(DISKH)
|
|
||||||
; ADC HL,DE
|
|
||||||
; RET
|
|
||||||
|
|
||||||
|
|
||||||
NSECTOR:
|
;
|
||||||
LD DE,0
|
|
||||||
|
; --> HL - CLUSTER
|
||||||
|
; <-- HL:IX - SECTOR
|
||||||
|
NSECTOR: LD DE,0
|
||||||
DEC HL
|
DEC HL
|
||||||
DEC HL
|
DEC HL
|
||||||
LD A,(BOOT.SectorsPerCluster)
|
LD A,(BOOT.SectorsPerCluster)
|
||||||
@ -592,7 +528,6 @@ NSECTOR:
|
|||||||
.loop: ADD HL,HL
|
.loop: ADD HL,HL
|
||||||
RL E
|
RL E
|
||||||
RL D
|
RL D
|
||||||
;
|
|
||||||
RRA
|
RRA
|
||||||
JP NC,.loop
|
JP NC,.loop
|
||||||
;
|
;
|
||||||
@ -618,12 +553,13 @@ NSECTOR:
|
|||||||
R_F_FAT: PUSH HL
|
R_F_FAT: PUSH HL
|
||||||
LD A,(FAT_TYP)
|
LD A,(FAT_TYP)
|
||||||
CP "2"
|
CP "2"
|
||||||
JP Z,R_F_F12
|
JP Z,.R_F_F12
|
||||||
R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
|
;
|
||||||
|
.R_F_F16: LD DE,768 ; DE - CLUSTERS IN CASH
|
||||||
XOR A
|
XOR A
|
||||||
R_F_00H INC A ; HL - CLUSTER
|
.R_F_00H: INC A ; HL - CLUSTER
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP NC,R_F_00H
|
JP NC,.R_F_00H
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
DEC A
|
DEC A
|
||||||
@ -640,8 +576,8 @@ R_F_00H INC A ; HL - CLUSTER
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
R_F_F12 LD D,H
|
.R_F_F12 LD D,H
|
||||||
LD E,L
|
LD E,L
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
@ -656,9 +592,9 @@ R_F_F12 LD D,H
|
|||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
XOR A ; DE - SIZE SECTOR * 3
|
XOR A ; DE - SIZE SECTOR * 3
|
||||||
R_F_00 INC A ; HL - FAT OFFSET
|
.R_F_00: INC A ; HL - FAT OFFSET
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP NC,R_F_00
|
JP NC,.R_F_00
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
DEC A
|
DEC A
|
||||||
LD BC,(FatCache)
|
LD BC,(FatCache)
|
||||||
@ -670,13 +606,13 @@ R_F_00 INC A ; HL - FAT OFFSET
|
|||||||
LD E,(HL)
|
LD E,(HL)
|
||||||
INC HL
|
INC HL
|
||||||
LD D,(HL)
|
LD D,(HL)
|
||||||
JP C,R_F_F01
|
JP C,.R_F_F01
|
||||||
LD A,D
|
LD A,D
|
||||||
AND #0F
|
AND #0F
|
||||||
LD D,A
|
LD D,A
|
||||||
JP R_F_F02
|
JP .R_F_F02
|
||||||
|
;
|
||||||
R_F_F01 LD A,E
|
.R_F_F01: LD A,E
|
||||||
AND #F0
|
AND #F0
|
||||||
RR D ; ¢¯à ¢® 4 ¡¨âa
|
RR D ; ¢¯à ¢® 4 ¡¨âa
|
||||||
RRA
|
RRA
|
||||||
@ -687,13 +623,15 @@ R_F_F01 LD A,E
|
|||||||
RR D
|
RR D
|
||||||
RRA
|
RRA
|
||||||
LD E,A
|
LD E,A
|
||||||
R_F_F02 LD HL,#0FEF
|
.R_F_F02: LD HL,#0FEF
|
||||||
XOR A
|
XOR A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
RE_FAT PUSH HL
|
;
|
||||||
|
RE_FAT: PUSH HL
|
||||||
LD L,A
|
LD L,A
|
||||||
LD H,0
|
LD H,0
|
||||||
LD (FatCache),HL
|
LD (FatCache),HL
|
||||||
@ -705,15 +643,15 @@ RE_FAT PUSH HL
|
|||||||
LD DE,(FAT_FRM)
|
LD DE,(FAT_FRM)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
JR NC,NOINX
|
JR NC,.NOINX
|
||||||
INC IX
|
INC IX
|
||||||
NOINX LD HL,(DISKL)
|
.NOINX: LD HL,(DISKL)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD BC,(DISKH)
|
LD BC,(DISKH)
|
||||||
JR NC,NOINX2
|
JR NC,.NOINX2
|
||||||
INC IX
|
INC IX
|
||||||
NOINX2 ADD IX,BC
|
.NOINX2: ADD IX,BC
|
||||||
PUSH IX
|
PUSH IX
|
||||||
PUSH DE
|
PUSH DE
|
||||||
POP IX
|
POP IX
|
||||||
@ -724,11 +662,118 @@ NOINX2 ADD IX,BC
|
|||||||
RST ToBIOS_18
|
RST ToBIOS_18
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
MASKARE DB "SYSTEM DOS"
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
FAIL: CALL MESSAGE
|
||||||
|
.NULL: LD A,FAILURE
|
||||||
|
CALL MESSAGE
|
||||||
|
DI
|
||||||
|
HALT
|
||||||
|
JR $
|
||||||
|
;
|
||||||
|
|
||||||
FATMSG DB "FAT"
|
;
|
||||||
|
DOSMESS: CALL FMESAGE
|
||||||
|
LD C,Dss.PChars
|
||||||
|
JP ToDSS
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
FMESAGE: LD HL,MSG0
|
||||||
|
LD BC,MSGE-MSG0
|
||||||
|
INC A
|
||||||
|
EX AF,AF'
|
||||||
|
XOR A
|
||||||
|
EX AF,AF'
|
||||||
|
.NEXTMSG: EX AF,AF'
|
||||||
|
CPIR
|
||||||
|
RET PO
|
||||||
|
RET NZ
|
||||||
|
EX AF,AF'
|
||||||
|
DEC A
|
||||||
|
JR NZ,.NEXTMSG
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
MESSAGE: CALL FMESAGE
|
||||||
|
;R01 Start
|
||||||
|
PRINTZ: LD A,(HL) ;R01
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CALL PRINTX
|
||||||
|
JR PRINTZ
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
PRINTX: CP #0D
|
||||||
|
JR Z,.CR_
|
||||||
|
CP #0A
|
||||||
|
JR Z,.LF_
|
||||||
|
LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
RST ToBIOS_18
|
||||||
|
RET
|
||||||
|
.CR_: LD C,BIOS.LP_GET_PLACE
|
||||||
|
RST ToBIOS_18
|
||||||
|
LD E,0
|
||||||
|
LD C,#84
|
||||||
|
JP ToBIOS_18
|
||||||
|
;RET
|
||||||
|
;
|
||||||
|
.LF_: LD C,BIOS.LP_GET_PLACE
|
||||||
|
RST ToBIOS_18
|
||||||
|
LD A,#1F
|
||||||
|
CP D
|
||||||
|
JR NZ,.LF2
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
LD DE,#0020
|
||||||
|
LD BC,1*256 + BIOS.LP_SCROLL_UD
|
||||||
|
RST ToBIOS_18
|
||||||
|
LD DE,#1F00
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
RST ToBIOS_18
|
||||||
|
LD A," "
|
||||||
|
LD BC,#50 + BIOS.LP_PRINT_SYM
|
||||||
|
RST ToBIOS_18
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
DEC D
|
||||||
|
.LF2: INC D
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
JP ToBIOS_18
|
||||||
|
;RET ;R01
|
||||||
|
;R01 End
|
||||||
|
|
||||||
|
FAILURE EQU 0
|
||||||
|
INCORR EQU 1
|
||||||
|
ERRPART EQU 2
|
||||||
|
ERRIBPB EQU 3
|
||||||
|
NO_SYS EQU 4
|
||||||
|
NOSHELL EQU 5
|
||||||
|
STARTDO EQU 6
|
||||||
|
;a BIOS version that is incompatible with this version of DOS
|
||||||
|
; 0 10 20 30 40 50 60 70 80
|
||||||
|
MSG0: DB 0
|
||||||
|
DB 13,10,"The system has been halted. Press RESET to restart your computer.",13,10,0
|
||||||
|
DB 13,10,"You started your computer with a BIOS version that is incompatible with this",13,10
|
||||||
|
DB "version of DSS. Please update BIOS to run this version of DSS.",13,10,0
|
||||||
|
DB "Invalid partition table.",13,10,0
|
||||||
|
DB "Invalid BOOT sector.",13,10,0
|
||||||
|
DB "Can't open file SYSTEM.DOS...",13,10,0
|
||||||
|
DB 13,10,"Starting DSS... ",13,10,13,10,0
|
||||||
|
MSGE: DB 0
|
||||||
|
;
|
||||||
|
PSHELL: DB '\SYSTEM.EXE /P',0
|
||||||
|
ROOT: DB 'X:\',0
|
||||||
|
MASKARE: DB "SYSTEM DOS"
|
||||||
|
FATMSG: DB "FAT"
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
; Area for boot sector [512Bytes]
|
; Area for boot sector [512Bytes]
|
||||||
BOOT _sBOOT_SECTOR_PARAMS = $
|
BOOT _sBOOT_SECTOR_PARAMS = $
|
||||||
|
|
||||||
@ -775,7 +820,8 @@ FSIZE1 EQU VALUE+16+30
|
|||||||
DISKH EQU VALUE+48
|
DISKH EQU VALUE+48
|
||||||
DISKL EQU VALUE+50
|
DISKL EQU VALUE+50
|
||||||
READMEM EQU VALUE+52
|
READMEM EQU VALUE+52
|
||||||
SHEL_FM EQU VALUE+54
|
;SHEL_FM EQU VALUE+54
|
||||||
|
BIG_SHELL EQU VALUE+54
|
||||||
BANKDOS EQU VALUE+55
|
BANKDOS EQU VALUE+55
|
||||||
; EQU VALUE+56
|
; EQU VALUE+56
|
||||||
|
|
||||||
@ -791,14 +837,5 @@ BANKDOS EQU VALUE+55
|
|||||||
;STACK EQU (($/256)+2)*256
|
;STACK EQU (($/256)+2)*256
|
||||||
|
|
||||||
ENT
|
ENT
|
||||||
;START DI
|
|
||||||
; LD (SPZ+1),SP
|
|
||||||
; LD SP,#BFFF
|
|
||||||
; LD C,#FE
|
|
||||||
; CALL #3D13
|
|
||||||
;SPZ LD SP,#0000
|
|
||||||
; EI
|
|
||||||
; RET
|
|
||||||
|
|
||||||
OUTEND
|
OUTEND
|
||||||
;[]-----------------------------------------------------------[]
|
;[]-----------------------------------------------------------[]
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
include 'shared_includes/macroses/accelerator.z80'
|
include 'shared_includes/macroses/accelerator.z80'
|
||||||
include 'shared_includes/macroses/macros.z80'
|
include 'shared_includes/macroses/macros.z80'
|
||||||
include 'shared_includes/structures/FileSystem.inc'
|
include 'shared_includes/structures/FileSystem.inc'
|
||||||
|
include '../DSS/defines.inc'
|
||||||
|
|
||||||
DEFINE EXEinfoMACRO 0
|
DEFINE EXEinfoMACRO 0
|
||||||
DEFINE App_EXE_Version 1
|
DEFINE App_EXE_Version 1
|
||||||
@ -350,6 +351,8 @@ write_to_: ld a,(disk) ;
|
|||||||
scf
|
scf
|
||||||
ret z ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
ret z ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
dec c
|
dec c
|
||||||
|
CP #80 ;!HARDCODE ⨯ ¤à ©¢ - HDD
|
||||||
|
JR NC,.skip_FAT_check
|
||||||
push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
||||||
; [x] 02/02/2024 ¯à®¢¥àª ¢«¥§ ¥¬®áâì § £àã§ç¨ª (ç⮡ ¥ ¯®¯®àâ¨âì ä â)
|
; [x] 02/02/2024 ¯à®¢¥àª ¢«¥§ ¥¬®áâì § £àã§ç¨ª (ç⮡ ¥ ¯®¯®àâ¨âì ä â)
|
||||||
LD HL,0
|
LD HL,0
|
||||||
@ -364,6 +367,7 @@ write_to_: ld a,(disk) ;
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
|
.skip_FAT_check:;
|
||||||
push bc
|
push bc
|
||||||
ld a,b
|
ld a,b
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
|||||||
@ -79,7 +79,7 @@
|
|||||||
; POP BC
|
; POP BC
|
||||||
; JP C,NDISK11
|
; JP C,NDISK11
|
||||||
; LD A,B
|
; LD A,B
|
||||||
; LD (FatBuffer.DRIVE),A
|
; LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||||
; CALL RD_BPB
|
; CALL RD_BPB
|
||||||
; RET C
|
; RET C
|
||||||
; LD A,(LDRIVE)
|
; LD A,(LDRIVE)
|
||||||
|
|||||||
@ -62,9 +62,9 @@ DEL_FN: ;!TEST
|
|||||||
PUSH DE
|
PUSH DE
|
||||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||||
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
POP AF
|
|
||||||
POP DE
|
POP DE
|
||||||
EXX
|
EXX
|
||||||
|
POP AF
|
||||||
POP DE
|
POP DE
|
||||||
EXX
|
EXX
|
||||||
JP NC,.loop
|
JP NC,.loop
|
||||||
|
|||||||
@ -132,14 +132,14 @@ MKDIR:
|
|||||||
CP "."
|
CP "."
|
||||||
JR Z,.copy_dir_record
|
JR Z,.copy_dir_record
|
||||||
; fat32
|
; fat32
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x32
|
CP FAT_TYPE.x32
|
||||||
JR NZ,.fat16_root_dir
|
JR NZ,.fat16_root_dir
|
||||||
; fat 32
|
; fat 32
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(FatBuffer.RootDirStartCluster_L)
|
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL
|
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL
|
||||||
LD HL,(FatBuffer.RootDirStartCluster_H)
|
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL
|
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
JR .set_rec
|
JR .set_rec
|
||||||
@ -169,7 +169,7 @@ MKDIR:
|
|||||||
EXX
|
EXX
|
||||||
POP HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
POP HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||||
CALL CLUSTER_TO_SECTOR
|
CALL CLUSTER_TO_SECTOR
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||||||
.MKD12: PUSH AF
|
.MKD12: PUSH AF
|
||||||
PUSH HL ; áâ. à §àï¤
|
PUSH HL ; áâ. à §àï¤
|
||||||
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||||||
@ -178,7 +178,7 @@ MKDIR:
|
|||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||||
LD BC,1*256 + Dss.DRV.Write
|
LD BC,1*256 + Dss.DRV.Write
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
|
|||||||
@ -67,7 +67,7 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD (IY+_sFM.F_POSITION+1),A
|
LD (IY+_sFM.F_POSITION+1),A
|
||||||
LD (IY+_sFM.F_POSITION+2),A
|
LD (IY+_sFM.F_POSITION+2),A
|
||||||
LD (IY+_sFM.F_POSITION+3),A
|
LD (IY+_sFM.F_POSITION+3),A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD (IY+_sFM.DRIVE),A
|
LD (IY+_sFM.DRIVE),A
|
||||||
; fat32
|
; fat32
|
||||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
|
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
|
||||||
|
|||||||
@ -51,7 +51,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
PUSH HL
|
PUSH HL
|
||||||
EXX
|
EXX
|
||||||
CALL CLUSTER_TO_SECTOR
|
CALL CLUSTER_TO_SECTOR
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
LD B,A
|
LD B,A
|
||||||
LD C,Dss.DRV.Read
|
LD C,Dss.DRV.Read
|
||||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||||
@ -67,7 +67,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||||
;LD BC,1*256 + Dss.DRV.Read
|
;LD BC,1*256 + Dss.DRV.Read
|
||||||
LD B,1
|
LD B,1
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
|
|||||||
@ -18,7 +18,7 @@ WRITE.RD_ONLY:
|
|||||||
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§ĄëâŽçëĽ ˘ë§Ž˘ë WRITE_FAT_TABLE
|
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§ĄëâŽçëĽ ˘ë§Ž˘ë WRITE_FAT_TABLE
|
||||||
CALL .Start
|
CALL .Start
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,(FatBuffer.CacheUpdated)
|
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||||
OR A
|
OR A
|
||||||
CALL NZ,WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą Şă ŞĽč FAT ¨ § ݍá âě ĽŁŽ ¤¨áŞ
|
CALL NZ,WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą Şă ŞĽč FAT ¨ § ݍá âě ĽŁŽ ¤¨áŞ
|
||||||
POP AF
|
POP AF
|
||||||
|
|||||||
@ -16,7 +16,7 @@ CURDISK_FN:
|
|||||||
CURDISK:
|
CURDISK:
|
||||||
LD A,(LDRIVE)
|
LD A,(LDRIVE)
|
||||||
LD C,A
|
LD C,A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
@ -59,7 +59,7 @@ DISKINF: LD C,B
|
|||||||
1: LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
1: LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
||||||
CALL .mCOPY_LOOP
|
CALL .mCOPY_LOOP
|
||||||
; 12, 16 or 32
|
; 12, 16 or 32
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x16
|
CP FAT_TYPE.x16
|
||||||
JR C,.next_prm
|
JR C,.next_prm
|
||||||
;
|
;
|
||||||
@ -73,11 +73,11 @@ DISKINF: LD C,B
|
|||||||
.put_char: LD (DE),A
|
.put_char: LD (DE),A
|
||||||
POP DE
|
POP DE
|
||||||
;
|
;
|
||||||
.next_prm: LD HL,FatBuffer.BPB_SERIAL_NUMBER
|
.next_prm: LD HL,CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER
|
||||||
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||||||
CALL .mCOPY_LOOP
|
CALL .mCOPY_LOOP
|
||||||
;
|
;
|
||||||
LD HL,FatBuffer.BPB_LABEL
|
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
|
||||||
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||||||
CALL .mCOPY_LOOP
|
CALL .mCOPY_LOOP
|
||||||
; fat32
|
; fat32
|
||||||
@ -121,7 +121,7 @@ DISKINF: LD C,B
|
|||||||
;JR Z,CURRDS ;R06
|
;JR Z,CURRDS ;R06
|
||||||
.CurrentDisk: LD A,(CurrentPath)
|
.CurrentDisk: LD A,(CurrentPath)
|
||||||
SUB 'A'
|
SUB 'A'
|
||||||
LD HL,FatBuffer.DRIVE
|
LD HL,CORE_BUFFERS.FatBuffer.DRIVE
|
||||||
CP (HL)
|
CP (HL)
|
||||||
JR Z,.CheckFreeSpace
|
JR Z,.CheckFreeSpace
|
||||||
;
|
;
|
||||||
@ -138,15 +138,15 @@ DISKINF: LD C,B
|
|||||||
;.FRESP2:
|
;.FRESP2:
|
||||||
LD D,B
|
LD D,B
|
||||||
LD E,C
|
LD E,C
|
||||||
LD HL,(FatBuffer.MaxClusterLow)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||||
DEC HL
|
DEC HL
|
||||||
; fat 32
|
; fat 32
|
||||||
EXX
|
EXX
|
||||||
LD HL,(FatBuffer.MaxClusterHigh)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||||
DEC HL
|
DEC HL
|
||||||
EXX
|
EXX
|
||||||
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|||||||
@ -181,7 +181,7 @@ TMPNAME: DZ ' ' ; 12
|
|||||||
; IN: A - drive number
|
; IN: A - drive number
|
||||||
OPENDSK:;!TEST DRV.Open ®¡å®¤ R10
|
OPENDSK:;!TEST DRV.Open ®¡å®¤ R10
|
||||||
LD C,A
|
LD C,A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
CP C
|
CP C
|
||||||
IF CHECK_DRIVE_CHANGE
|
IF CHECK_DRIVE_CHANGE
|
||||||
JR NZ,.open
|
JR NZ,.open
|
||||||
@ -200,12 +200,12 @@ OPENDSK:;!TEST DRV.Open
|
|||||||
POP BC
|
POP BC
|
||||||
JP C,.error
|
JP C,.error
|
||||||
;[x] 29/02/2024 fix "open drive error"
|
;[x] 29/02/2024 fix "open drive error"
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD D,A
|
LD D,A
|
||||||
PUSH DE
|
PUSH DE
|
||||||
;
|
;
|
||||||
LD A,B
|
LD A,B
|
||||||
LD (FatBuffer.DRIVE),A
|
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||||
;
|
;
|
||||||
CALL RD_BPB
|
CALL RD_BPB
|
||||||
;[x] 29/02/2024 fix "open drive error"
|
;[x] 29/02/2024 fix "open drive error"
|
||||||
@ -217,6 +217,7 @@ OPENDSK:;!TEST DRV.Open
|
|||||||
.exit: LD A,(LDRIVE)
|
.exit: LD A,(LDRIVE)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
.error: CP DSS_Error.sys.INVALID_DRIVE
|
.error: CP DSS_Error.sys.INVALID_DRIVE
|
||||||
SCF
|
SCF
|
||||||
RET Z
|
RET Z
|
||||||
@ -356,7 +357,7 @@ MASK: LD HL,TMPNAME
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
;!TEST Current Dir ;[x] 15/10/23
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
DIR_PATH_CHANGE:
|
DIR_PATH_CHANGE:
|
||||||
.FullCurrent: LD A,(FatBuffer.DRIVE)
|
.FullCurrent: LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
ADD 'A'
|
ADD 'A'
|
||||||
LD (CurrentPath),A
|
LD (CurrentPath),A
|
||||||
;
|
;
|
||||||
@ -365,7 +366,7 @@ DIR_PATH_CHANGE:
|
|||||||
;
|
;
|
||||||
.FullWork: LD A,(CurrentPath)
|
.FullWork: LD A,(CurrentPath)
|
||||||
SUB 'A'
|
SUB 'A'
|
||||||
LD (FatBuffer.DRIVE),A
|
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||||
;
|
;
|
||||||
.Work: LD HL,WorkDirectory
|
.Work: LD HL,WorkDirectory
|
||||||
JP CURRDIR_FN
|
JP CURRDIR_FN
|
||||||
@ -391,7 +392,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
|||||||
JR Z,.checkDir
|
JR Z,.checkDir
|
||||||
;
|
;
|
||||||
LD HL,CurrentPath
|
LD HL,CurrentPath
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
ADD 'A'
|
ADD 'A'
|
||||||
CP (HL)
|
CP (HL)
|
||||||
JR NZ,.gotoPath
|
JR NZ,.gotoPath
|
||||||
@ -413,7 +414,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
|||||||
JR .gotoPath
|
JR .gotoPath
|
||||||
;
|
;
|
||||||
.checkDrive: LD HL,CurrentPath
|
.checkDrive: LD HL,CurrentPath
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
ADD 'A'
|
ADD 'A'
|
||||||
CP (HL)
|
CP (HL)
|
||||||
RET
|
RET
|
||||||
|
|||||||
@ -241,11 +241,16 @@ PORTAL.out_MAIN: ;
|
|||||||
CLEAR_BUFFER_AND_INIT_PROC:
|
CLEAR_BUFFER_AND_INIT_PROC:
|
||||||
;------[CLEAR BUFFERS]------;
|
;------[CLEAR BUFFERS]------;
|
||||||
;R07 ;R11
|
;R07 ;R11
|
||||||
|
XOR A
|
||||||
LD HL,CLEAR_ZONE.start
|
LD HL,CLEAR_ZONE.start
|
||||||
LD DE,CLEAR_ZONE.start+1
|
LD DE,CLEAR_ZONE.start+1
|
||||||
LD BC,CLEAR_ZONE.size-1
|
LD BC,CLEAR_ZONE.size-1
|
||||||
LD (HL),0
|
LD (HL),A
|
||||||
LDIR
|
LDIR
|
||||||
|
; A = 0
|
||||||
|
DEC A
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||||
|
;
|
||||||
;R07 ;R11
|
;R07 ;R11
|
||||||
;R11
|
;R11
|
||||||
LD HL,CORE_BUFFERS.FM_BUF
|
LD HL,CORE_BUFFERS.FM_BUF
|
||||||
@ -405,7 +410,8 @@ BUFFERSplace _sBuffers=$
|
|||||||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||||||
.Size EQU _sFM
|
.Size EQU _sFM
|
||||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||||
BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector ; [ ] fat32 ;!FIXIT CORE_BUFFERS.BootSector à §®© ¤«¨ë
|
;BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector ; [ ] fat32 ;!FIXIT CORE_BUFFERS.BootSector à §®© ¤«¨ë
|
||||||
|
FatBuffer _sFatBuffer = BUFFERSplace.FatBuffer
|
||||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
XSTACK EQU BUFFERSplace.Stack.SPoint
|
||||||
BUFFER EQU BUFFERSplace.Buffer
|
BUFFER EQU BUFFERSplace.Buffer
|
||||||
@ -415,11 +421,11 @@ CLEAR_ZONE.size EQU _sBuffers
|
|||||||
|
|
||||||
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
||||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
DISPLAY "BUFFERSplace.BootSector ",/H,CORE_BUFFERS.BUFFERSplace.BootSector
|
DISPLAY "BUFFERSplace ", /H, CORE_BUFFERS.BUFFERSplace
|
||||||
DISPLAY "BootSector ", /H, CORE_BUFFERS.BootSector
|
DISPLAY "FatBuffer ", /H, CORE_BUFFERS.FatBuffer
|
||||||
DISPLAY "BootSector.Size ", /D, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
DISPLAY "FatBuffer.Size ", /D, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.FatBuffer
|
||||||
DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||||||
DISPLAY "Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
DISPLAY "Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF
|
||||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
|
|
||||||
|
|
||||||
@ -597,7 +603,9 @@ DRV_CONTENT:
|
|||||||
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
|
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
|
||||||
|
|
||||||
DISPLAY "END ADDRESS: ",/H,$
|
DISPLAY "END ADDRESS: ",/H,$
|
||||||
ASSERT $<#4001,'-> Memory leack!!!';
|
DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512
|
||||||
|
ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!';
|
||||||
|
ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!';
|
||||||
;[END]
|
;[END]
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@ -345,9 +345,9 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
|||||||
JR NZ,.SUBDIR
|
JR NZ,.SUBDIR
|
||||||
.REROOT: ; fat32
|
.REROOT: ; fat32
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(FatBuffer.RootDirStartCluster_L)
|
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||||
LD HL,(FatBuffer.RootDirStartCluster_H)
|
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
CALL LOADDIR
|
CALL LOADDIR
|
||||||
@ -423,11 +423,11 @@ LOADDIR: ;!TODO optimize
|
|||||||
; ; LD (HL),L
|
; ; LD (HL),L
|
||||||
; ; LDIR
|
; ; LDIR
|
||||||
; ;
|
; ;
|
||||||
; LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
; LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
; LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||||
; ; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
; ; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||||
; ; [x] fat32
|
; ; [x] fat32
|
||||||
; LD A,(FatBuffer.FAT_TYPE)
|
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
; XOR 32
|
; XOR 32
|
||||||
; JR Z,.read_dir
|
; JR Z,.read_dir
|
||||||
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
@ -446,14 +446,14 @@ LOADDIR: ;!TODO optimize
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.LoadRootDir: LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
.LoadRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||||
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
CP B
|
CP B
|
||||||
JR NC,.RTD1
|
JR NC,.RTD1
|
||||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||||
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
.RTD1: LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -475,10 +475,10 @@ LOAD_SAVE_DIR_PREPARE:
|
|||||||
AND A
|
AND A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;
|
;
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD (IY+_sFM.DRIVE),A
|
LD (IY+_sFM.DRIVE),A
|
||||||
; [x] fat32
|
; [x] fat32
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x32 - 1
|
CP FAT_TYPE.x32 - 1
|
||||||
JR NC,.exit
|
JR NC,.exit
|
||||||
;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
@ -504,10 +504,10 @@ SAVEDIR: ;!TODO optimize
|
|||||||
; AND A
|
; AND A
|
||||||
; PUSH AF
|
; PUSH AF
|
||||||
; ;
|
; ;
|
||||||
; LD A,(FatBuffer.DRIVE)
|
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
; LD (IY+_sFM.DRIVE),A
|
; LD (IY+_sFM.DRIVE),A
|
||||||
; ; [x] fat32
|
; ; [x] fat32
|
||||||
; LD A,(FatBuffer.FAT_TYPE)
|
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
; XOR 32
|
; XOR 32
|
||||||
; JR Z,.save_dir
|
; JR Z,.save_dir
|
||||||
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||||
@ -528,15 +528,15 @@ SAVEDIR: ;!TODO optimize
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.SaveRootDir: LD HL,(FatBuffer.RootDirFirstSector_H)
|
.SaveRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H)
|
||||||
LD IX,(FatBuffer.RootDirFirstSector_L)
|
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L)
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||||
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
|
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
|
||||||
SUB B
|
SUB B
|
||||||
JR NC,.RTD1S
|
JR NC,.RTD1S
|
||||||
ADD A,B
|
ADD A,B
|
||||||
LD B,A
|
LD B,A
|
||||||
.RTD1S: LD A,(FatBuffer.DRIVE)
|
.RTD1S: LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD DE,DIRPAGE.buffer
|
LD DE,DIRPAGE.buffer
|
||||||
LD C,Dss.DRV.Write
|
LD C,Dss.DRV.Write
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -593,7 +593,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NC,SAVEDIR
|
JR NC,SAVEDIR
|
||||||
LD HL,(SAVEDIR.DIRSIZE)
|
LD HL,(SAVEDIR.DIRSIZE)
|
||||||
LD BC,(FatBuffer.BytesPerCluster)
|
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerCluster)
|
||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
LD (SAVEDIR.DIRSIZE),HL
|
LD (SAVEDIR.DIRSIZE),HL
|
||||||
AND A
|
AND A
|
||||||
@ -604,7 +604,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
; ¥ ¨á¯®«ì§ã¥âáï
|
; ¥ ¨á¯®«ì§ã¥âáï
|
||||||
; TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
; TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
||||||
; LD A,(FatBuffer.DRIVE)
|
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
; LD C,Dss.DRV.MediaCheck
|
; LD C,Dss.DRV.MediaCheck
|
||||||
; RST ToDSS.DRV
|
; RST ToDSS.DRV
|
||||||
; OR A
|
; OR A
|
||||||
@ -618,7 +618,7 @@ RD_BPB: LD C,SLOT3
|
|||||||
PUSH BC
|
PUSH BC
|
||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
||||||
LD C,Dss.DRV.GetBPB
|
LD C,Dss.DRV.GetBPB
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -642,6 +642,17 @@ RD_BPB: LD C,SLOT3
|
|||||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||||
CP #F0
|
CP #F0
|
||||||
JP C,DOS_X_Error.UnknownBPB
|
JP C,DOS_X_Error.UnknownBPB
|
||||||
|
;
|
||||||
|
;!TODO ¯à®¢¥à¨âì ¯® ¬¥âª¥ à §¤¥« , çâ® íâ® FAT, ¯®â®¬ ®¯à¥¤¥«ïâì ª ª®© FAT
|
||||||
|
;
|
||||||
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.BytesPerSector),HL
|
||||||
|
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.SectorsPerCluster),A
|
||||||
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER)
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER),HL
|
||||||
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER+2)
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER+2),HL
|
||||||
; calc. first sector FAT
|
; calc. first sector FAT
|
||||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||||
;
|
;
|
||||||
@ -650,19 +661,19 @@ RD_BPB: LD C,SLOT3
|
|||||||
; ADD HL,DE
|
; ADD HL,DE
|
||||||
;
|
;
|
||||||
;!FIXIT ¤«ï fat32 ¢âëª âì áî¤ á¥ªâ®à ªâ¨¢®© â ¡«¨æë
|
;!FIXIT ¤«ï fat32 ¢âëª âì áî¤ á¥ªâ®à ªâ¨¢®© â ¡«¨æë
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
LD (CORE_BUFFERS.FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||||
LD (FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||||
;[ ] fat32
|
;[ ] fat32
|
||||||
XOR A
|
XOR A
|
||||||
LD B,A
|
LD B,A
|
||||||
LD C,A
|
LD C,A
|
||||||
LD (FatBuffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
LD (CORE_BUFFERS.FatBuffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||||
LD (FatBuffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||||
LD (FatBuffer.RootDirStartCluster_L),BC ; [ ] fat32
|
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),BC ; [ ] fat32
|
||||||
LD (FatBuffer.RootDirStartCluster_H),BC ; [ ] fat32
|
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC ; [ ] fat32
|
||||||
LD (FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
||||||
LD (FatBuffer.MaxClusterHigh),BC ; [ ] fat32 reset variables
|
LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC ; [ ] fat32 reset variables
|
||||||
LD (FatBuffer.SectorsPerFAT_H),A ; [ ] fat32
|
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A ; [ ] fat32
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerFAT16)
|
LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerFAT16)
|
||||||
@ -670,20 +681,21 @@ RD_BPB: LD C,SLOT3
|
|||||||
OR D
|
OR D
|
||||||
JR NZ,.skip_high
|
JR NZ,.skip_high
|
||||||
;
|
;
|
||||||
LD BC,(CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.FAT32.SectorsPerFAT32+4)
|
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32+4)
|
||||||
LD (FatBuffer.SectorsPerFAT_H),BC
|
LD A,C
|
||||||
LD DE,(CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.FAT32.SectorsPerFAT32)
|
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||||
.skip_high: LD (FatBuffer.SectorsPerFAT_L),DE
|
LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32)
|
||||||
|
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
||||||
;
|
;
|
||||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs) ; amount FATs
|
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs) ; amount FATs
|
||||||
CP 1
|
CP 1
|
||||||
JR Z,.one_FAT
|
JR Z,.one_FAT
|
||||||
DEC A
|
DEC A
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
LD (FatBuffer.FAT2_SEC_L),HL
|
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
|
||||||
JR NC,.no_inc_BC
|
JR NC,.no_inc_BC
|
||||||
INC BC
|
INC BC
|
||||||
.no_inc_BC: LD (FatBuffer.FAT2_SEC_H),BC
|
.no_inc_BC: LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC
|
||||||
.one_FAT: ;C_DATA1
|
.one_FAT: ;C_DATA1
|
||||||
.loop1: ADD HL,DE
|
.loop1: ADD HL,DE
|
||||||
JR NC,.loop1_1
|
JR NC,.loop1_1
|
||||||
@ -691,9 +703,9 @@ RD_BPB: LD C,SLOT3
|
|||||||
.loop1_1: DEC A
|
.loop1_1: DEC A
|
||||||
JR NZ,.loop1
|
JR NZ,.loop1
|
||||||
;
|
;
|
||||||
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||||
|
|
||||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
LD A,B
|
LD A,B
|
||||||
AND A
|
AND A
|
||||||
;
|
;
|
||||||
@ -708,7 +720,7 @@ RD_BPB: LD C,SLOT3
|
|||||||
LD B,0 ; BC - File handels in sectors
|
LD B,0 ; BC - File handels in sectors
|
||||||
;;;;
|
;;;;
|
||||||
IF COMPILE_UNUSED_CODE
|
IF COMPILE_UNUSED_CODE
|
||||||
LD (FatBuffer.FilesPerSector),A
|
LD (CORE_BUFFERS.FatBuffer.FilesPerSector),A
|
||||||
ENDIF
|
ENDIF
|
||||||
;
|
;
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
@ -724,14 +736,14 @@ RD_BPB: LD C,SLOT3
|
|||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD C,A ; A - sectors in DIR
|
LD C,A ; A - sectors in DIR
|
||||||
LD B,0
|
LD B,0
|
||||||
LD (FatBuffer.DirSizeInSectors),A
|
LD (CORE_BUFFERS.FatBuffer.DirSizeInSectors),A
|
||||||
|
|
||||||
ADD HL,BC ; Start DATA area
|
ADD HL,BC ; Start DATA area
|
||||||
LD (FatBuffer.FirstDataSector_L),HL
|
LD (CORE_BUFFERS.FatBuffer.FirstDataSector_L),HL
|
||||||
; B = 0
|
; B = 0
|
||||||
;
|
;
|
||||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
LD HL,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
;!TODO FATcacheSize
|
;!TODO FATcacheSize
|
||||||
; calc. cluster size
|
; calc. cluster size
|
||||||
XOR 1
|
XOR 1
|
||||||
@ -741,7 +753,7 @@ RD_BPB: LD C,SLOT3
|
|||||||
RRA
|
RRA
|
||||||
JP NC,.loop3
|
JP NC,.loop3
|
||||||
.loop3.end: ;
|
.loop3.end: ;
|
||||||
LD (FatBuffer.BytesPerCluster),HL
|
LD (CORE_BUFFERS.FatBuffer.BytesPerCluster),HL
|
||||||
;
|
;
|
||||||
IF COMPILE_UNUSED_CODE
|
IF COMPILE_UNUSED_CODE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
@ -752,69 +764,71 @@ RD_BPB: LD C,SLOT3
|
|||||||
JP Z,DOS_X_Error.UnknownBPB
|
JP Z,DOS_X_Error.UnknownBPB
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NC,.loop4
|
JR NC,.loop4
|
||||||
LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
LD (CORE_BUFFERS.FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||||
ENDIF
|
ENDIF
|
||||||
;
|
|
||||||
;!TODO detect fat type by clusters!
|
////////////////////////////////////////////////////////////////
|
||||||
; [ ] fat32
|
////////////////////////////////////////////////////////////////
|
||||||
LD HL,CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.FAT16.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
////////////////////////////////////////////////////////////////
|
||||||
LD DE,FAT_STRING
|
; LD HL,CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||||
LD B,3
|
; LD DE,FAT_STRING
|
||||||
;R_BPBL1
|
; LD B,3
|
||||||
.loop5: LD A,(DE)
|
; ;R_BPBL1
|
||||||
CP (HL)
|
; .loop5: LD A,(DE)
|
||||||
JP NZ,.IBM_DOS
|
; CP (HL)
|
||||||
INC HL
|
; JP NZ,.IBM_DOS
|
||||||
INC DE
|
; INC HL
|
||||||
DJNZ .loop5
|
; INC DE
|
||||||
|
; DJNZ .loop5
|
||||||
;FID
|
;FID
|
||||||
.loop6: LD A,(HL)
|
; .loop6: LD A,(HL)
|
||||||
INC HL
|
; INC HL
|
||||||
CP ' '
|
; CP ' '
|
||||||
JR Z,.loop6
|
; JR Z,.loop6
|
||||||
;
|
; ;
|
||||||
CP '1'
|
; CP '1'
|
||||||
;[ ] fat32
|
; JP Z,.fat1x
|
||||||
JP Z,.fat1x
|
; CP '3'
|
||||||
CP '3'
|
; JP NZ,DOS_X_Error.UnknownBPB
|
||||||
JP NZ,DOS_X_Error.UnknownBPB
|
; LD A,#52 ; #52-#20 = #32 fat type
|
||||||
LD A,#52 ; #52-#20 = #32 fat type
|
; LD HL,#0FFF
|
||||||
LD HL,#0FFF
|
; LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||||
LD (FatBuffer.END_CHAIN_CLUSTER_H),HL
|
; LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
||||||
LD (FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
; LD H,L
|
||||||
LD H,L
|
; JR .BPB_FAT
|
||||||
JR .BPB_FAT
|
; ;
|
||||||
;
|
; .fat1x: LD A,(HL)
|
||||||
.fat1x: LD A,(HL)
|
; CP '2' ; FAT16
|
||||||
CP '2' ; FAT16
|
; LD HL,#0FFF
|
||||||
LD HL,#0FFF
|
; JR Z,.BPB_FAT
|
||||||
JR Z,.BPB_FAT
|
; CP '6' ; FAT12
|
||||||
CP '6' ; FAT12
|
; JP NZ,DOS_X_Error.UnknownBPB
|
||||||
JP NZ,DOS_X_Error.UnknownBPB
|
; LD H,L
|
||||||
LD H,L
|
; .BPB_FAT: SUB #20 ; A-#20 = fat type (#12, #16, #32)
|
||||||
.BPB_FAT: SUB #20 ; A-#20 = fat type (#12, #16, #32)
|
; LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A
|
||||||
LD (FatBuffer.FAT_TYPE),A
|
; LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||||
LD (FatBuffer.END_CHAIN_CLUSTER_L),HL
|
|
||||||
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; LD HL,0
|
; LD HL,0
|
||||||
; LD BC,(CORE_BUFFERS.BootSector.SectorsPerTrack) ; Sector per track
|
; LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerTrack) ; Sector per track
|
||||||
; LD A,(CORE_BUFFERS.BootSector.HEADS)
|
; LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.HEADS)
|
||||||
; .BPB_L1: ; calc. sector per cylinder
|
; .BPB_L1: ; calc. sector per cylinder
|
||||||
; ADD HL,BC
|
; ADD HL,BC
|
||||||
; DEC A
|
; DEC A
|
||||||
; JR NZ,.BPB_L1
|
; JR NZ,.BPB_L1
|
||||||
; LD (FatBuffer.S_X_H),HL
|
; LD (CORE_BUFFERS.FatBuffer.S_X_H),HL
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerDrive)
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerDrive)
|
||||||
LD DE,(FatBuffer.FirstDataSector_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JP NZ,.HDDSMAL
|
JP NZ,.HDDSMAL
|
||||||
;
|
;
|
||||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_L)
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_L)
|
||||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_H)
|
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_H)
|
||||||
|
PUSH BC ; Total Sectors high
|
||||||
|
PUSH HL ; Total Sectors low
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP NC,.HDDBIG
|
JP NC,.HDDBIG
|
||||||
@ -822,25 +836,104 @@ RD_BPB: LD C,SLOT3
|
|||||||
JP .HDDBIG
|
JP .HDDBIG
|
||||||
;
|
;
|
||||||
.HDDSMAL: ; CF = 0
|
.HDDSMAL: ; CF = 0
|
||||||
SBC HL,DE
|
|
||||||
LD BC,0
|
LD BC,0
|
||||||
.HDDBIG: LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
PUSH BC ; Total Sectors high
|
||||||
|
PUSH HL ; Total Sectors low
|
||||||
|
SBC HL,DE
|
||||||
|
;
|
||||||
|
.HDDBIG: LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
SCF
|
SCF
|
||||||
.S4C01: RRA
|
.loop7: RRA
|
||||||
JR C,.S4C02
|
JR C,.loop7_exit
|
||||||
RR B
|
RR B
|
||||||
RR C
|
RR C
|
||||||
RR H
|
RR H
|
||||||
RR L
|
RR L
|
||||||
JP .S4C01
|
JP .loop7
|
||||||
.S4C02: INC HL
|
;
|
||||||
LD (FatBuffer.MaxClusterLow),HL
|
.loop7_exit: INC HL
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL
|
||||||
;
|
;
|
||||||
XOR A
|
XOR A
|
||||||
LD H,A
|
LD H,A
|
||||||
LD L,A
|
LD L,A
|
||||||
LD (FatBuffer.CacheBlock),HL
|
LD (CORE_BUFFERS.FatBuffer.CacheBlock),HL
|
||||||
LD (FatBuffer.CacheUpdated),A
|
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||||
|
; A = 0
|
||||||
|
LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_H)
|
||||||
|
LD H,A
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L)
|
||||||
|
; DE:HL = SectorsPerFAT
|
||||||
|
;
|
||||||
|
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs)
|
||||||
|
LD B,A
|
||||||
|
DEC A
|
||||||
|
JR Z,.loop_mul_end
|
||||||
|
; .Number_of_FATs * .SectorsPerFAT
|
||||||
|
.loop_mul: ADD HL,HL
|
||||||
|
EX DE,HL
|
||||||
|
ADC HL,HL
|
||||||
|
EX DE,HL
|
||||||
|
DJNZ .loop_mul
|
||||||
|
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||||
|
LD B,0
|
||||||
|
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||||
|
LD C,A
|
||||||
|
ADD HL,BC
|
||||||
|
JR NC,.no_inc_DE
|
||||||
|
INC DE
|
||||||
|
.no_inc_DE: ; .RESERVED_SECTORS + .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||||
|
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||||
|
ADD HL,BC
|
||||||
|
JR NC,.no_inc_de
|
||||||
|
INC DE
|
||||||
|
.no_inc_de: ; Total_Sectors - (.RESERVED_SECTORS + .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT)
|
||||||
|
AND A
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
POP DE ; Total Sectors low
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,DE
|
||||||
|
EX (SP),HL ; Total Sectors high
|
||||||
|
SBC HL,BC
|
||||||
|
POP DE ; Total Sectors low
|
||||||
|
; HL:DE = DataSec
|
||||||
|
;
|
||||||
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
|
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||||
|
CALL DIV_for_SPC
|
||||||
|
; ¢ëïá塞 à §à冷áâì FAT
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,.its_FAT32
|
||||||
|
;
|
||||||
|
LD HL,4084
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.its_FAT12
|
||||||
|
;
|
||||||
|
LD HL,65525
|
||||||
|
SBC HL,BC
|
||||||
|
JR C,.its_FAT32
|
||||||
|
;
|
||||||
|
; It's FAT16
|
||||||
|
LD A,FAT_TYPE.x16
|
||||||
|
LD HL,#FFFF
|
||||||
|
JR .BPB_FAT
|
||||||
|
;
|
||||||
|
.its_FAT12: LD HL,#0FFF
|
||||||
|
LD A,FAT_TYPE.x12
|
||||||
|
JR .BPB_FAT
|
||||||
|
;
|
||||||
|
.its_FAT32: LD A,FAT_TYPE.x32
|
||||||
|
LD HL,#0FFF
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
||||||
|
LD H,L
|
||||||
|
;
|
||||||
|
.BPB_FAT: LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||||
|
;
|
||||||
|
|
||||||
SET_PAGE_X FATPAGE
|
SET_PAGE_X FATPAGE
|
||||||
|
|
||||||
@ -848,8 +941,9 @@ RD_BPB: LD C,SLOT3
|
|||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
; XOR A
|
; XOR A
|
||||||
; HL = 0
|
; HL = 0
|
||||||
EX DE,HL
|
; EX DE,HL
|
||||||
;
|
;
|
||||||
|
LD DE,0
|
||||||
CALL READ_FAT_TABLE
|
CALL READ_FAT_TABLE
|
||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -881,6 +975,7 @@ DOS_X_Error:
|
|||||||
;
|
;
|
||||||
;
|
;
|
||||||
;!TODO ª ¡ãä¥à ¬!
|
;!TODO ª ¡ãä¥à ¬!
|
||||||
|
/*
|
||||||
FatBuffer:
|
FatBuffer:
|
||||||
;.MSG: DB 'FAT'
|
;.MSG: DB 'FAT'
|
||||||
.DRIVE: DB #FF
|
.DRIVE: DB #FF
|
||||||
@ -918,4 +1013,5 @@ FatBuffer:
|
|||||||
;.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
;.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
;
|
;
|
||||||
|
*/
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -113,23 +113,23 @@ INC_FAT:
|
|||||||
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster
|
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster
|
||||||
; hl' = áâ à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
|
; hl' = áâ à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
|
||||||
CHECK_CLUSTER_IS_SMALLER:
|
CHECK_CLUSTER_IS_SMALLER:
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
XOR FAT_TYPE.x32
|
XOR FAT_TYPE.x32
|
||||||
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||||
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(FatBuffer.MaxClusterHigh)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||||
; CF = 0
|
; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
EXX
|
EXX
|
||||||
LD A,DSS_Error.sys.DISK_FULL
|
LD A,DSS_Error.sys.DISK_FULL
|
||||||
;RET C
|
;RET C
|
||||||
RET NZ ; ¥á«¨ FatBuffer.MaxClusterHigh - hl' != 0, â® ª« áâ¥à ª®à४âë©
|
RET NZ ; ¥á«¨ CORE_BUFFERS.FatBuffer.MaxClusterHigh - hl' != 0, â® ª« áâ¥à ª®à४âë©
|
||||||
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ®¬¥à ª« áâ¥à
|
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||||
.low: EX DE,HL
|
.low: EX DE,HL
|
||||||
LD HL,(FatBuffer.MaxClusterLow)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||||
; CF = 0
|
; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
@ -157,7 +157,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
|||||||
;
|
;
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x16
|
CP FAT_TYPE.x16
|
||||||
JR C,.FAT12
|
JR C,.FAT12
|
||||||
JR NZ,.FAT32
|
JR NZ,.FAT32
|
||||||
@ -255,9 +255,9 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
|||||||
; .Custom:
|
; .Custom:
|
||||||
; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ¢å®¤¥
|
; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ¢å®¤¥
|
||||||
;------------------------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------------------------
|
||||||
WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ; ®¬¥à ª« áâ¥à
|
WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ; ®¬¥à ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
LD DE,(FatBuffer.END_CHAIN_CLUSTER_H) ; ®¬¥à ª« áâ¥à
|
LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H) ; ®¬¥à ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
.Custom: PUSH DE
|
.Custom: PUSH DE
|
||||||
EXX
|
EXX
|
||||||
@ -278,9 +278,9 @@ WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ;
|
|||||||
PUSH DE ; ¬« ¤è¨© ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
PUSH DE ; ¬« ¤è¨© ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
||||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||||
;LD A,1
|
;LD A,1
|
||||||
;LD (FatBuffer.CacheUpdated),A
|
;LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||||
;
|
;
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x16
|
CP FAT_TYPE.x16
|
||||||
JR C,.FAT12
|
JR C,.FAT12
|
||||||
JR NZ,.FAT32
|
JR NZ,.FAT32
|
||||||
@ -296,7 +296,7 @@ WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ;
|
|||||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||||
XOR A
|
XOR A
|
||||||
INC A
|
INC A
|
||||||
LD (FatBuffer.CacheUpdated),A
|
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||||
; CF = 0
|
; CF = 0
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
@ -360,7 +360,7 @@ WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ;
|
|||||||
; out: C:HL - logical number
|
; out: C:HL - logical number
|
||||||
; B = 0
|
; B = 0
|
||||||
GET_SECTOR_OF_FAT:
|
GET_SECTOR_OF_FAT:
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥ãî
|
LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥ãî
|
||||||
XOR FAT_TYPE.x32
|
XOR FAT_TYPE.x32
|
||||||
JR Z,.next
|
JR Z,.next
|
||||||
@ -383,7 +383,7 @@ GET_SECTOR_OF_FAT:
|
|||||||
; ADC A,C
|
; ADC A,C
|
||||||
; EDUP
|
; EDUP
|
||||||
; LD C,A
|
; LD C,A
|
||||||
; LD A,(FatBuffer.FAT_TYPE)
|
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
; CP FAT_TYPE.x32
|
; CP FAT_TYPE.x32
|
||||||
; RET NZ
|
; RET NZ
|
||||||
; ADD HL,HL ;x2
|
; ADD HL,HL ;x2
|
||||||
@ -400,34 +400,34 @@ GET_SECTOR_OF_FAT:
|
|||||||
; DE - NEW FAT BLOCK
|
; DE - NEW FAT BLOCK
|
||||||
READ_FAT_TABLE: PUSH HL
|
READ_FAT_TABLE: PUSH HL
|
||||||
PUSH DE
|
PUSH DE
|
||||||
LD A,(FatBuffer.CacheUpdated)
|
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||||
OR A
|
OR A
|
||||||
CALL NZ,WRITE_FAT_TABLE.Start
|
CALL NZ,WRITE_FAT_TABLE.Start
|
||||||
POP DE
|
POP DE
|
||||||
;
|
;
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD (FatBuffer.CacheBlock),HL
|
LD (CORE_BUFFERS.FatBuffer.CacheBlock),HL
|
||||||
;
|
;
|
||||||
CALL GET_SECTOR_OF_FAT
|
CALL GET_SECTOR_OF_FAT
|
||||||
;
|
;
|
||||||
; BC:HL - ®¬¥à «®£.ᥪâ®à
|
; BC:HL - ®¬¥à «®£.ᥪâ®à
|
||||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.FAT1_SEC_L)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD XH,D
|
LD XH,D
|
||||||
LD XL,E
|
LD XL,E
|
||||||
LD HL,(FatBuffer.FAT1_SEC_H)
|
LD HL,(CORE_BUFFERS.FatBuffer.FAT1_SEC_H)
|
||||||
; JR NC,.no_inc
|
; JR NC,.no_inc
|
||||||
; INC HL
|
; INC HL
|
||||||
.no_inc: ADC HL,BC
|
.no_inc: ADC HL,BC
|
||||||
; HL:IX - SECTOR FAT FOR READING
|
; HL:IX - SECTOR FAT FOR READING
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
XOR FAT_TYPE.x32
|
XOR FAT_TYPE.x32
|
||||||
LD BC,FAT_CACHE.Sectors_16 * 256 + Dss.DRV.Read ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
LD BC,FAT_CACHE.Sectors_16 * 256 + Dss.DRV.Read ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
||||||
JR NZ,.next
|
JR NZ,.next
|
||||||
LD B,FAT_CACHE.Sectors_32 ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
LD B,FAT_CACHE.Sectors_32 ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
||||||
.next: LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
.next: LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
||||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
@ -443,7 +443,7 @@ WRITE_FAT_TABLE:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
RET
|
RET
|
||||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||||
.Start: LD HL,(FatBuffer.CacheBlock)
|
.Start: LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||||
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
||||||
CALL GET_SECTOR_OF_FAT
|
CALL GET_SECTOR_OF_FAT
|
||||||
; B=0, C:HL - ᬥ饨¥ ¢ ᥪâ®à å ¢ãâਠ⠡«¨æë FAT ç «® ¡«®ª
|
; B=0, C:HL - ᬥ饨¥ ¢ ᥪâ®à å ¢ãâਠ⠡«¨æë FAT ç «® ¡«®ª
|
||||||
@ -453,7 +453,7 @@ WRITE_FAT_TABLE:
|
|||||||
;LD C,L
|
;LD C,L
|
||||||
;
|
;
|
||||||
LD DE,FAT_CACHE.Sectors_32
|
LD DE,FAT_CACHE.Sectors_32
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x32
|
CP FAT_TYPE.x32
|
||||||
JR Z,.next
|
JR Z,.next
|
||||||
LD DE,FAT_CACHE.Sectors_16 ; !FIXIT ¡à âì íâ® § 票¥ ¨§ ¯¥à¥¬¥®© ¢¥§¤¥
|
LD DE,FAT_CACHE.Sectors_16 ; !FIXIT ¡à âì íâ® § 票¥ ¨§ ¯¥à¥¬¥®© ¢¥§¤¥
|
||||||
@ -466,10 +466,10 @@ WRITE_FAT_TABLE:
|
|||||||
;
|
;
|
||||||
.no_inc: ; ª®¥æ ¡«®ª ¢ë室¨â § ¯à¥¤¥«ë â ¡«¨æë?
|
.no_inc: ; ª®¥æ ¡«®ª ¢ë室¨â § ¯à¥¤¥«ë â ¡«¨æë?
|
||||||
LD B,E ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
LD B,E ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
||||||
LD A,(FatBuffer.SectorsPerFAT_H)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_H)
|
||||||
LD (.sub_A),A
|
LD (.sub_A),A
|
||||||
;LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
;LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
||||||
LD DE,(FatBuffer.SectorsPerFAT_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L)
|
||||||
AND A
|
AND A
|
||||||
LD A,C
|
LD A,C
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
@ -493,8 +493,8 @@ WRITE_FAT_TABLE:
|
|||||||
;PUSH HL
|
;PUSH HL
|
||||||
;
|
;
|
||||||
; B = ç¨á«® ᥪâ®à®¢
|
; B = ç¨á«® ᥪâ®à®¢
|
||||||
LD IX,(FatBuffer.FAT1_SEC_H)
|
LD IX,(CORE_BUFFERS.FatBuffer.FAT1_SEC_H)
|
||||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.FAT1_SEC_L)
|
||||||
;LD B,A
|
;LD B,A
|
||||||
;LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
|
;LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -505,26 +505,26 @@ WRITE_FAT_TABLE:
|
|||||||
CALL .SAVE_FAT_XX
|
CALL .SAVE_FAT_XX
|
||||||
; [x] ¥á«¨ ¢á¥£® ®¤ â ¡«¨æ FAT, â® ¯®¢â®à®© § ¯¨á¨ ¥ ¯à®¨á室¨â 13/03/2024
|
; [x] ¥á«¨ ¢á¥£® ®¤ â ¡«¨æ FAT, â® ¯®¢â®à®© § ¯¨á¨ ¥ ¯à®¨á室¨â 13/03/2024
|
||||||
POP BC ; B = ç¨á«® ᥪâ®à®¢, C = áâ à訩 ¡ ©â á¬¥é¥¨ï ¢ ᥪâ®à å
|
POP BC ; B = ç¨á«® ᥪâ®à®¢, C = áâ à訩 ¡ ©â á¬¥é¥¨ï ¢ ᥪâ®à å
|
||||||
LD HL,(FatBuffer.FAT1_SEC_H)
|
LD HL,(CORE_BUFFERS.FatBuffer.FAT1_SEC_H)
|
||||||
LD DE,(FatBuffer.FAT2_SEC_H)
|
LD DE,(CORE_BUFFERS.FatBuffer.FAT2_SEC_H)
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NZ,.not_one_FAT
|
JR NZ,.not_one_FAT
|
||||||
LD HL,(FatBuffer.FAT2_SEC_L)
|
LD HL,(CORE_BUFFERS.FatBuffer.FAT2_SEC_L)
|
||||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.FAT1_SEC_L)
|
||||||
; CF = 0
|
; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR Z,.only_one_FAT
|
JR Z,.only_one_FAT
|
||||||
;
|
;
|
||||||
; á®åà 塞 ¢â®àãî ª®¯¨î FAT
|
; á®åà 塞 ¢â®àãî ª®¯¨î FAT
|
||||||
.not_one_FAT: LD IX,(FatBuffer.FAT2_SEC_H)
|
.not_one_FAT: LD IX,(CORE_BUFFERS.FatBuffer.FAT2_SEC_H)
|
||||||
LD DE,(FatBuffer.FAT2_SEC_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.FAT2_SEC_L)
|
||||||
LD HL,(.save_hl)
|
LD HL,(.save_hl)
|
||||||
CALL .SAVE_FAT_XX
|
CALL .SAVE_FAT_XX
|
||||||
AND A ;!TODO ¥â ª®âà®«ï ®è¨¡®ª
|
AND A ;!TODO ¥â ª®âà®«ï ®è¨¡®ª
|
||||||
.only_one_FAT: ;
|
.only_one_FAT: ;
|
||||||
.ERR: LD A,0
|
.ERR: LD A,0
|
||||||
LD (FatBuffer.CacheUpdated),A
|
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||||
RET
|
RET
|
||||||
; ‚室: IX:DE - ç «® â ¡«¨æë FAT ¢ ᥪâ®à å
|
; ‚室: IX:DE - ç «® â ¡«¨æë FAT ¢ ᥪâ®à å
|
||||||
; C:HL - ᬥ饨¥ ¢ â ¡«¨æ¥ ¢ ᥪâ®à å
|
; C:HL - ᬥ饨¥ ¢ â ¡«¨æ¥ ¢ ᥪâ®à å
|
||||||
@ -546,7 +546,7 @@ WRITE_FAT_TABLE:
|
|||||||
LD XL,E
|
LD XL,E
|
||||||
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
||||||
LD DE,FATPAGE.cache ; ®âªã¤
|
LD DE,FATPAGE.cache ; ®âªã¤
|
||||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
LD C,Dss.DRV.Write
|
LD C,Dss.DRV.Write
|
||||||
JP ToDSS.DRV
|
JP ToDSS.DRV
|
||||||
|
|
||||||
@ -585,7 +585,7 @@ GET_FAT32_CELL:
|
|||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
|
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
|
||||||
POP HL
|
POP HL
|
||||||
@ -611,9 +611,9 @@ GET_FAT16_CELL:
|
|||||||
;
|
;
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
; [x] fat32 ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
; [x] fat32 ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
||||||
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
; LD BC,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
; CP C
|
; CP C
|
||||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
LD DE,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
CP E
|
CP E
|
||||||
LD E,A
|
LD E,A
|
||||||
;
|
;
|
||||||
@ -654,9 +654,9 @@ GET_FAT12_CELL:
|
|||||||
;AND FAT_CACHE.Part_Mask_16
|
;AND FAT_CACHE.Part_Mask_16
|
||||||
;
|
;
|
||||||
; [ ] ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
; [ ] ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
||||||
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
; LD BC,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
; CP C
|
; CP C
|
||||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
LD DE,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
CP E
|
CP E
|
||||||
LD E,A
|
LD E,A
|
||||||
;
|
;
|
||||||
@ -683,7 +683,7 @@ CLUSTER_TO_SECTOR:
|
|||||||
; DE:HL - cluster
|
; DE:HL - cluster
|
||||||
DEC HL
|
DEC HL
|
||||||
DEC HL
|
DEC HL
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
XOR 1
|
XOR 1
|
||||||
JR Z,.skip
|
JR Z,.skip
|
||||||
;
|
;
|
||||||
@ -698,13 +698,13 @@ CLUSTER_TO_SECTOR:
|
|||||||
.skip: EX DE,HL
|
.skip: EX DE,HL
|
||||||
LD XL,E
|
LD XL,E
|
||||||
LD XH,D
|
LD XH,D
|
||||||
LD DE,(FatBuffer.FirstDataSector_L)
|
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||||
; [x] fat32
|
; [x] fat32
|
||||||
;XOR A
|
;XOR A
|
||||||
;
|
;
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
; [x] fat32
|
; [x] fat32
|
||||||
LD DE,(FatBuffer.FirstDataSector_H)
|
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_H)
|
||||||
;LD D,A
|
;LD D,A
|
||||||
;LD E,A
|
;LD E,A
|
||||||
;
|
;
|
||||||
@ -720,7 +720,7 @@ CLUSTER_TO_SECTOR:
|
|||||||
; IX - buffer in RAM
|
; IX - buffer in RAM
|
||||||
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï
|
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï
|
||||||
BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||||
LD C,A
|
LD C,A
|
||||||
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï, C - SectorsPerCluster
|
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï, C - SectorsPerCluster
|
||||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||||
@ -809,7 +809,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
|||||||
JR NC,.skip2
|
JR NC,.skip2
|
||||||
INC HL
|
INC HL
|
||||||
.skip2: LD DE,(READ.PointerOnBuffer)
|
.skip2: LD DE,(READ.PointerOnBuffer)
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD B,C
|
LD B,C
|
||||||
LD C,Dss.DRV.Read
|
LD C,Dss.DRV.Read
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -817,7 +817,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
|||||||
JR C,.Error
|
JR C,.Error
|
||||||
POP BC ; B = ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã, C = (SectorsPerCluster - ®áâ ⮪) «¨¡® ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï
|
POP BC ; B = ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã, C = (SectorsPerCluster - ®áâ ⮪) «¨¡® ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
;!TEST
|
;!TEST
|
||||||
LD A,B
|
LD A,B
|
||||||
LD B,C
|
LD B,C
|
||||||
@ -833,7 +833,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
|||||||
RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã = 0?
|
RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã = 0?
|
||||||
LD B,A
|
LD B,A
|
||||||
;
|
;
|
||||||
.loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
.loop4: LD HL,CORE_BUFFERS.FatBuffer.SectorsPerCluster
|
||||||
LD A,B
|
LD A,B
|
||||||
SUB (HL)
|
SUB (HL)
|
||||||
LD B,A
|
LD B,A
|
||||||
@ -861,7 +861,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
|||||||
PUSH BC
|
PUSH BC
|
||||||
CALL CLUSTER_TO_SECTOR
|
CALL CLUSTER_TO_SECTOR
|
||||||
LD DE,(READ.PointerOnBuffer)
|
LD DE,(READ.PointerOnBuffer)
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD B,C
|
LD B,C
|
||||||
LD C,Dss.DRV.Read
|
LD C,Dss.DRV.Read
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -869,7 +869,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
|||||||
;
|
;
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
.loop3: ADD HL,DE
|
.loop3: ADD HL,DE
|
||||||
DEC C
|
DEC C
|
||||||
JR NZ,.loop3
|
JR NZ,.loop3
|
||||||
@ -915,7 +915,7 @@ CHECK_FIRST_CLUSTER:
|
|||||||
; IY - FM
|
; IY - FM
|
||||||
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||||||
BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||||
LD C,A
|
LD C,A
|
||||||
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï, C - SectorsPerCluster
|
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï, C - SectorsPerCluster
|
||||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||||
@ -1031,7 +1031,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
|||||||
INC HL
|
INC HL
|
||||||
; DOUBLE 1
|
; DOUBLE 1
|
||||||
.skip2: LD DE,(READ.PointerOnBuffer)
|
.skip2: LD DE,(READ.PointerOnBuffer)
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD B,C
|
LD B,C
|
||||||
LD C,Dss.DRV.Write
|
LD C,Dss.DRV.Write
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -1040,7 +1040,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
|||||||
JR C,.Error_3
|
JR C,.Error_3
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
;
|
;
|
||||||
LD A,B
|
LD A,B
|
||||||
LD B,C
|
LD B,C
|
||||||
@ -1057,7 +1057,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
|||||||
RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã = 0?
|
RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã = 0?
|
||||||
LD B,A
|
LD B,A
|
||||||
;
|
;
|
||||||
.big_loop: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
.big_loop: LD HL,CORE_BUFFERS.FatBuffer.SectorsPerCluster
|
||||||
LD A,B
|
LD A,B
|
||||||
SUB (HL)
|
SUB (HL)
|
||||||
LD B,A
|
LD B,A
|
||||||
@ -1090,7 +1090,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
|||||||
CALL CLUSTER_TO_SECTOR
|
CALL CLUSTER_TO_SECTOR
|
||||||
; DOUBLE 1
|
; DOUBLE 1
|
||||||
LD DE,(READ.PointerOnBuffer)
|
LD DE,(READ.PointerOnBuffer)
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
LD B,C
|
LD B,C
|
||||||
LD C,Dss.DRV.Write
|
LD C,Dss.DRV.Write
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
@ -1098,7 +1098,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
|||||||
JR C,.Error_3
|
JR C,.Error_3
|
||||||
POP BC
|
POP BC
|
||||||
LD HL,(READ.PointerOnBuffer)
|
LD HL,(READ.PointerOnBuffer)
|
||||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
.loop3: ADD HL,DE
|
.loop3: ADD HL,DE
|
||||||
DEC C
|
DEC C
|
||||||
JR NZ,.loop3
|
JR NZ,.loop3
|
||||||
@ -1268,12 +1268,12 @@ GET_OFFSET_IN_SECTORS:
|
|||||||
;!TODO fat32
|
;!TODO fat32
|
||||||
;=======================================================================
|
;=======================================================================
|
||||||
;BPB
|
;BPB
|
||||||
;LD (FatBuffer.FAT2_SEC_L),HL
|
;LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
|
||||||
;LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
;LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||||
;BPB32
|
;BPB32
|
||||||
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à¥¢®£® ª â «®£ (®¡ëç® 2) 4 ¡ ©â
|
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à¥¢®£® ª â «®£ (®¡ëç® 2) 4 ¡ ©â
|
||||||
;FAT Max Cluster
|
;FAT Max Cluster
|
||||||
;LD (FatBuffer.MaxClusterLow),HL
|
;LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL
|
||||||
;=======================================================================
|
;=======================================================================
|
||||||
|
|
||||||
;//MODULE: FAT_X
|
;//MODULE: FAT_X
|
||||||
|
|||||||
@ -538,5 +538,12 @@ GET_RAMDRV_NUM:
|
|||||||
LD A,(BC)
|
LD A,(BC)
|
||||||
OR #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
OR #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
||||||
RET
|
RET
|
||||||
ENDDRVR EQU $
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;TEST_DB_DEL_ME: DB 'Make here more than one page to load test'
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;ENDDRVR EQU $
|
||||||
;
|
;
|
||||||
@ -73,11 +73,52 @@
|
|||||||
; LEN2 EQU 29 ; AMODE EQU 41
|
; LEN2 EQU 29 ; AMODE EQU 41
|
||||||
; LEN3 EQU 30 ; FTASK EQU 42
|
; LEN3 EQU 30 ; FTASK EQU 42
|
||||||
|
|
||||||
|
;
|
||||||
|
STRUCT _sFatBuffer
|
||||||
|
;.MSG: BYTE 'FAT'
|
||||||
|
.DRIVE: BYTE #FF
|
||||||
|
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
|
||||||
|
.CacheBlock: WORD #0000
|
||||||
|
.CacheUpdated: BYTE #00
|
||||||
|
;.SectorsPerBank: BYTE #00
|
||||||
|
.RootDirStartCluster_L: WORD #0000
|
||||||
|
.RootDirStartCluster_H: WORD #0000 ; [ ] fat32
|
||||||
|
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||||
|
.FAT1_SEC_H: WORD #0000 ; [ ] fat32
|
||||||
|
.FAT2_SEC_L: WORD #0000
|
||||||
|
.FAT2_SEC_H: WORD #0000 ; [ ] fat32
|
||||||
|
.SectorsPerFAT_L WORD #0000
|
||||||
|
.SectorsPerFAT_H BYTE #00
|
||||||
|
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||||
|
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
||||||
|
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
||||||
|
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high ; [ ] fat32 ¡ë«® ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£
|
||||||
|
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
||||||
|
.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||||
|
.END_CHAIN_CLUSTER_H: WORD #0FFF ; [ ] fat3
|
||||||
|
.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
;
|
||||||
|
.BytesPerSector WORD #0000
|
||||||
|
.SectorsPerCluster BYTE #00
|
||||||
|
.BPB_SERIAL_NUMBER DWORD #00000000
|
||||||
|
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
|
; IF COMPILE_UNUSED_CODE
|
||||||
|
; .FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
|
; .ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||||
|
; ENDIF
|
||||||
|
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
|
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||||||
|
ENDS
|
||||||
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
STRUCT _sBuffers
|
STRUCT _sBuffers
|
||||||
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||||||
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||||||
.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
|
.FatBuffer _sFatBuffer
|
||||||
|
;.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
|
||||||
.EXE_Header _sEXE_HEADER ; 512 bytes
|
.EXE_Header _sEXE_HEADER ; 512 bytes
|
||||||
.Stack _sStack ; 256 bytes
|
.Stack _sStack ; 256 bytes
|
||||||
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
952
|
950
|
||||||
@ -150,3 +150,8 @@ MOUSE_BAUD:
|
|||||||
ENDIF
|
ENDIF
|
||||||
;----------------------------------------------------;
|
;----------------------------------------------------;
|
||||||
;
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;----------------------------------------------------;
|
||||||
|
SUBLOAD_SIZE EQU 10 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ¨æã
|
||||||
|
;----------------------------------------------------;
|
||||||
|
|||||||
@ -103,8 +103,14 @@ BATCH:
|
|||||||
;CALL Restore_Screen
|
;CALL Restore_Screen
|
||||||
;R10
|
;R10
|
||||||
;pop af
|
;pop af
|
||||||
ret c
|
JR NC,.good
|
||||||
ld (BAT_FM),a ; ¤¥áªà. bat-ä ©«
|
CP DSS_Error.sys.TOO_MANY_FILES_IN_DIR
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.good: ld (BAT_FM),a ; ¤¥áªà. bat-ä ©«
|
||||||
; ¢ë¯®«. ª®¬ ¤ bat-ä ©«
|
; ¢ë¯®«. ª®¬ ¤ bat-ä ©«
|
||||||
call NEWLINE
|
call NEWLINE
|
||||||
;!TODO ¢«®¦¥ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â® ¢ ¢ë§ë¢ î騩 bat
|
;!TODO ¢«®¦¥ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â® ¢ ¢ë§ë¢ î騩 bat
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
314
|
315
|
||||||
@ -1 +1 @@
|
|||||||
Subproject commit 18c132c6e9b507cb92d2144f5497278f021a0292
|
Subproject commit 0e2bbfb73ceb70a16b2ab2b5ee6cbc6bd5005bf7
|
||||||
Loading…
Reference in New Issue
Block a user