mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
DSS boot loader: trying to optimize for size
This commit is contained in:
parent
cac616722c
commit
fda917aed8
472
BOOT/DSSBOOT.ASM
472
BOOT/DSSBOOT.ASM
@ -47,49 +47,28 @@ DRIVE: _mSYSID
|
||||
RET C ; goto FAIL
|
||||
LD A,(DRIVE)
|
||||
BIT 7,A
|
||||
JP Z,GOOD_DRIVE
|
||||
JR Z,GOOD_DRIVE
|
||||
EX DE,HL
|
||||
LD DE,2*256 + 21 ;!HARDCODE ¥á«¨ ¢¥àá¨ï ¨¦¥ 2.21, â® ®è¨¡ª
|
||||
SBC HL,DE
|
||||
LD HL,MESSAGES.INCORR
|
||||
RET C ; goto FAIL
|
||||
JP GOOD_DRIVE
|
||||
;
|
||||
GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||
LD HL,0
|
||||
LD IX,2
|
||||
LD BC,LOAD_SECTORS*256 + BIOS.DRV_READ ; ¤®§ £à㧪 ᥪâ®à®¢ § £àã§ç¨ª
|
||||
LD A,(DRIVE)
|
||||
RST ToBIOS_18
|
||||
JP NC,CONTINUE
|
||||
JR FAIL.NULL
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
FAIL: CALL MESSAGE
|
||||
.NULL: LD HL,MESSAGES.FAILURE
|
||||
CALL MESSAGE
|
||||
DI
|
||||
HALT
|
||||
JR $
|
||||
;
|
||||
|
||||
;
|
||||
; DOSMESS: CALL FMESAGE
|
||||
; LD C,Dss.PChars
|
||||
; RST ToDSS
|
||||
; RET
|
||||
;
|
||||
|
||||
;
|
||||
; 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
|
||||
MESSAGE: ;R01 Start
|
||||
XOR A
|
||||
OUT (SYS_PORT.ON),A
|
||||
.loop: LD A,(HL) ;R01
|
||||
@ -124,9 +103,11 @@ PRINTX: CP "\r" ;
|
||||
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
|
||||
@ -139,56 +120,30 @@ PRINTX: CP "\r" ;
|
||||
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
|
||||
|
||||
MESSAGES:; 0 10 20 30 40 50 60 70 80
|
||||
.FAILURE: DB "\r\nFatal error! Press RESET to restart.\r\n",0
|
||||
.INCORR: DB "\r\nUnsupported BIOS version! Update BIOS to run this version of DSS.\r\n",0
|
||||
.INCORR: DB "\r\nOld BIOS version.\r\n",0
|
||||
.ERRPART: DB "\r\nUnknown partition table.",0
|
||||
.ERRIBPB: DB "\r\nInvalid BOOT sector.",0
|
||||
.NO_SYS: DB "\r\nCan't open file SYSTEM.DOS...",0
|
||||
.NOSHELL: DB "\r\nCan't open file SYSTEM.EXE...",0
|
||||
.NO_SYS: DB "\r\nCan't open SYSTEM.DOS...",0
|
||||
.NOSHELL: DB "\r\nCan't open SYSTEM.EXE...",0
|
||||
.STARTDO: DB "\r\nStarting DSS... \r\n\n",0
|
||||
;
|
||||
SHELL_NAME: DB '\SYSTEM.EXE /P',0
|
||||
ROOT: DB 'X:\',0
|
||||
CORE_NAME: DB "SYSTEM DOS"
|
||||
.Size EQU $-CORE_NAME
|
||||
FATMSG: DB "FAT"
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
ASSERT $<#8200, "Error!!! BIOS LOADING ONLY FIRST #200 BYTES"
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||
LD HL,0
|
||||
LD IX,2
|
||||
LD BC,LOAD_SECTORS*256 + BIOS.DRV_READ ; ¤®§ £à㧪 ᥪâ®à®¢ § £àã§ç¨ª
|
||||
LD A,(DRIVE)
|
||||
RST ToBIOS_18
|
||||
JP C,FAIL.NULL
|
||||
;
|
||||
; CONTINUE
|
||||
LD HL,0
|
||||
CONTINUE: LD HL,0
|
||||
LD (PARTITION_START_L),HL
|
||||
LD (PARTITION_START_H),HL
|
||||
;
|
||||
LD BC,1*256 + BIOS.GetMem
|
||||
RST ToBIOS_18 ;GET PAGE FOR DOS
|
||||
LD (BANKDOS),A
|
||||
LD (LOAD_CORE.BANKDOS),A
|
||||
;
|
||||
OUT (SLOT0),A
|
||||
;
|
||||
@ -196,6 +151,7 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||
LD HL,MESSAGES.ERRIBPB
|
||||
RET C ; goto FAIL
|
||||
CALL GETROOT
|
||||
;
|
||||
LD HL,MESSAGES.NO_SYS
|
||||
RET C ; goto FAIL
|
||||
; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||
@ -208,7 +164,7 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||
SBC HL,DE
|
||||
JR NC,.set_no_size
|
||||
.set_size: LD A,#FF
|
||||
.set_no_size: LD (BIG_CORE),A
|
||||
.set_no_size: LD (LOAD_CORE.BIG_CORE),A
|
||||
OR A
|
||||
PUSH AF
|
||||
; § £à㧪
|
||||
@ -226,10 +182,10 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||
JR C,.no_big_core
|
||||
;
|
||||
IN A,(SLOT1)
|
||||
LD (BANKDOS),A
|
||||
LD (LOAD_CORE.BANKDOS),A
|
||||
LD A,SUBLOAD_SIZE
|
||||
LD (LOAD_CORE.max_sectors),A
|
||||
LD (BIG_CORE),A ; ⥯¥àì íâ® áçñâ稪 ®áâ ¢è¨åáï ᥪâ®à®¢
|
||||
LD (LOAD_CORE.BIG_CORE),A ; ⥯¥àì íâ® áçñâ稪 ®áâ ¢è¨åáï ᥪâ®à®¢
|
||||
;
|
||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
||||
@ -255,8 +211,6 @@ RUN_CORE: DI
|
||||
LD B,#1F ;1FFD
|
||||
OUT (C),A
|
||||
;
|
||||
; LD A,(BANKDOS)
|
||||
; OUT (SLOT0),A
|
||||
;DOS LOADED
|
||||
;IF UNIVERSAL_BOOT
|
||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
@ -319,20 +273,6 @@ RUN_CORE: DI
|
||||
JP NZ,FAIL
|
||||
JP FAIL.NULL
|
||||
|
||||
; .NoShell: LD HL,MESSAGES.NOSHELL
|
||||
; JP C,FAIL
|
||||
; LD HL,MESSAGES.FAILURE
|
||||
; JP FAIL
|
||||
|
||||
|
||||
; XFAIL: CALL DOSMESS
|
||||
; .fail: LD HL,MESSAGES.FAILURE
|
||||
; CALL DOSMESS
|
||||
; DI
|
||||
; HALT
|
||||
; .halt: JR .halt
|
||||
;
|
||||
|
||||
;
|
||||
INC_SECTOR_NUM: PUSH DE
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
@ -345,22 +285,14 @@ INC_SECTOR_NUM: PUSH DE
|
||||
LD BC,RUN_CORE
|
||||
PUSH BC
|
||||
PUSH HL ; ¤«ï ¡ « á
|
||||
;EXX
|
||||
PUSH HL ; ¤«ï ¡ « á
|
||||
;EXX
|
||||
JP LOAD_CORE.subload
|
||||
|
||||
; CALL .set_stack
|
||||
; JP RUN_CORE
|
||||
; .set_stack: PUSH HL
|
||||
; JP LOAD_CORE.subload
|
||||
;
|
||||
|
||||
;
|
||||
PART_TB: PUSH BC
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.MBR_SIGNATURE)
|
||||
LD DE,#AA55
|
||||
;AND A
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
SCF
|
||||
@ -368,21 +300,23 @@ PART_TB: PUSH BC
|
||||
LD IX,BOOT_BUFFER + BOOT_SECTOR.PARTITION_TABLE
|
||||
LD B, +(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD)
|
||||
;
|
||||
LD HL,YEPDOS
|
||||
PUSH HL
|
||||
.part_loop: LD A,(IX + _sMBR_PARTITION_RECORD.FS_ID)
|
||||
; …‘‹ˆ ¤®¡ ¢¨âáï ¯®¤¤¥à¦ª ¥éñ ®¤®£® ⨯ ”‘, â® ¯®¬¥ïâì 1 2
|
||||
; 1
|
||||
CP PartitionSysTypes.FAT16_LBA
|
||||
JR Z,YEPDOS
|
||||
RET Z ;JR Z,YEPDOS
|
||||
CP PartitionSysTypes.FAT16
|
||||
JR Z,YEPDOS
|
||||
RET Z ;JR Z,YEPDOS
|
||||
CP PartitionSysTypes.FAT16_32Mb
|
||||
JR Z,YEPDOS
|
||||
RET Z ;JR Z,YEPDOS
|
||||
CP PartitionSysTypes.FAT12
|
||||
JR Z,YEPDOS
|
||||
RET Z ;JR Z,YEPDOS
|
||||
CP PartitionSysTypes.FAT32
|
||||
JR Z,YEPDOS
|
||||
RET Z ;JR Z,YEPDOS
|
||||
CP PartitionSysTypes.FAT32_LBA
|
||||
JR Z,YEPDOS
|
||||
RET Z ;JR Z,YEPDOS
|
||||
;
|
||||
; 2
|
||||
;EXX
|
||||
@ -416,8 +350,7 @@ PART_TB: PUSH BC
|
||||
; .Size EQU $-SUPPORTED_PARTITIONS
|
||||
;
|
||||
|
||||
|
||||
|
||||
;
|
||||
YEPDOS: ;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
LD A,#80
|
||||
CP (IX + _sMBR_PARTITION_RECORD.isActive)
|
||||
@ -426,13 +359,13 @@ YEPDOS: ;[ ] 17.12.2023
|
||||
SUB B
|
||||
PUSH AF ; ®¬¥à § £à㧮箣® à §¤¥«
|
||||
;
|
||||
LD E,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||
LD D,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||
LD L,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||
LD H,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||
PUSH HL
|
||||
LD (PARTITION_START_L),HL
|
||||
LD L,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||
LD H,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||
PUSH DE
|
||||
POP IX
|
||||
LD (PARTITION_START_L),IX
|
||||
LD (PARTITION_START_H),HL
|
||||
LD A,(DRIVE)
|
||||
LD DE,BOOT_BUFFER
|
||||
@ -443,7 +376,6 @@ YEPDOS: ;[ ] 17.12.2023
|
||||
POP BC
|
||||
LD L,A ; ®¬¥à § £à㧮箣® à §¤¥«
|
||||
LD A,C
|
||||
;LD A,C
|
||||
;
|
||||
RET
|
||||
;
|
||||
@ -596,8 +528,18 @@ GET_BPB: LD IX,#0000
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
;/*
|
||||
GET_BPB: LD IX,#0000
|
||||
LD HL,#0000
|
||||
GET_BPB: LD HL,#0000
|
||||
;
|
||||
LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1 ; fat32
|
||||
LD (FatBuffer.RootDirFirstSector_H),HL
|
||||
;LD (FatBuffer.CacheBlock),HL
|
||||
XOR A
|
||||
LD (FatBuffer.SectorsPerFAT_H),A ; fat32
|
||||
;
|
||||
PUSH HL
|
||||
POP IX
|
||||
; LD IX,#0000
|
||||
; LD HL,#0000
|
||||
LD DE,BOOT_BUFFER
|
||||
LD BC,1*256 + BIOS.DRV_READ
|
||||
LD A,(DRIVE)
|
||||
@ -625,58 +567,28 @@ GET_BPB: LD IX,#0000
|
||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerTrack)
|
||||
LD L,A
|
||||
POP AF
|
||||
;PUSH AF
|
||||
LD C,BIOS.DRV_SET_PAR
|
||||
RST ToBIOS_18
|
||||
;POP BC
|
||||
;LD A,C ; å¥à ?
|
||||
;RET
|
||||
|
||||
;
|
||||
.NX2: LD HL,(BOOT_BUFFER + BOOT_SECTOR.MBR_SIGNATURE)
|
||||
LD DE,#AA55
|
||||
AND A
|
||||
;AND A
|
||||
SBC HL,DE
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
;RD_BPB: ; CALL READ_BPB
|
||||
; JP C,DOS_X_Error.Not_ready
|
||||
; ;
|
||||
; LD DE,#AA55 ; ᨣ âãà ;R05
|
||||
; LD HL,(BOOT_BUFFER + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||
; ;R05
|
||||
; AND A
|
||||
; SBC HL,DE
|
||||
; JP NZ,DOS_X_Error.UnknownBPB
|
||||
;
|
||||
; ;R08 ; [x] fat32
|
||||
; LD HL,BOOT_BUFFER
|
||||
; LD DE,BootSector
|
||||
; LD BC,_sBOOT_SECTOR_PARAMS_FAT32 ; size
|
||||
; LDIR
|
||||
;
|
||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
RET C
|
||||
;
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||
LD (FatBuffer.BytesPerSector),HL
|
||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
LD (FatBuffer.SectorsPerCluster),A
|
||||
; calc. first sector FAT
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||
LD (FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||
; fat32
|
||||
XOR A
|
||||
LD B,A
|
||||
LD C,A
|
||||
LD (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 (FatBuffer.RootDirFirstSector_H),BC
|
||||
LD (FatBuffer.SectorsPerFAT_H),A ; fat32
|
||||
;
|
||||
;
|
||||
LD BC,0
|
||||
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
|
||||
LD A,E
|
||||
OR D
|
||||
@ -688,16 +600,14 @@ GET_BPB: LD IX,#0000
|
||||
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
||||
.skip_high: LD (FatBuffer.SectorsPerFAT_L),DE
|
||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||
LD (FatBuffer.Number_Of_FATs),A
|
||||
CP 1
|
||||
JR Z,.one_FAT
|
||||
DEC A
|
||||
ADD HL,DE
|
||||
LD (FatBuffer.FAT2_SEC_L),HL
|
||||
JR NC,.no_inc_BC
|
||||
INC BC
|
||||
.no_inc_BC: LD (FatBuffer.FAT2_SEC_H),BC
|
||||
.one_FAT: ;C_DATA1
|
||||
.no_inc_BC: ;
|
||||
.one_FAT: ;
|
||||
.loop1: ADD HL,DE
|
||||
JR NC,.loop1_1
|
||||
INC BC
|
||||
@ -706,7 +616,7 @@ GET_BPB: LD IX,#0000
|
||||
;
|
||||
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||
LD (FatBuffer.FirstDataSector_H),BC
|
||||
LD BC,(FatBuffer.BytesPerSector)
|
||||
LD BC,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||
LD A,B
|
||||
AND A
|
||||
;
|
||||
@ -719,10 +629,6 @@ GET_BPB: LD IX,#0000
|
||||
;
|
||||
LD C,A
|
||||
LD B,0 ; BC - File handels in sectors
|
||||
;;;;
|
||||
IF COMPILE_UNUSED_CODE
|
||||
LD (FatBuffer.FilesPerSector),A
|
||||
ENDIF
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32
|
||||
@ -748,10 +654,8 @@ GET_BPB: LD IX,#0000
|
||||
LD (FatBuffer.FirstDataSector_L),HL
|
||||
; B = 0
|
||||
;
|
||||
LD HL,(FatBuffer.BytesPerSector)
|
||||
;LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||
LD A,(FatBuffer.SectorsPerCluster)
|
||||
;LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
;!TODO FATcacheSize
|
||||
; calc. cluster size
|
||||
XOR 1
|
||||
@ -762,47 +666,24 @@ GET_BPB: LD IX,#0000
|
||||
JP NC,.loop3
|
||||
.loop3.end: ;
|
||||
LD (FatBuffer.BytesPerCluster),HL
|
||||
; fat32
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerDrive)
|
||||
LD DE,(FatBuffer.FirstDataSector_L)
|
||||
LD BC,0
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,.HDDSMAL
|
||||
;
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_L)
|
||||
LD BC,(BOOT_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H)
|
||||
.HDDSMAL: ;
|
||||
PUSH BC ; Total Sectors high
|
||||
PUSH HL ; Total Sectors low
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JP NC,.HDDBIG
|
||||
DEC BC
|
||||
JP .HDDBIG
|
||||
;
|
||||
.HDDSMAL: ; CF = 0
|
||||
LD BC,0
|
||||
PUSH BC ; Total Sectors high
|
||||
PUSH HL ; Total Sectors low
|
||||
SBC HL,DE
|
||||
;
|
||||
.HDDBIG: CALL SectorToCluster
|
||||
INC HL
|
||||
LD (FatBuffer.MaxClusterLow),HL
|
||||
LD A,L
|
||||
OR H
|
||||
JR NZ,.no_inc_bc
|
||||
INC BC
|
||||
.no_inc_bc: LD (FatBuffer.MaxClusterHigh),BC
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD (FatBuffer.CacheBlock),HL
|
||||
LD (FatBuffer.CacheUpdated),A
|
||||
;LD H,A
|
||||
;LD L,A
|
||||
;LD (FatBuffer.CacheBlock),HL
|
||||
; A = 0
|
||||
LD HL,(FatBuffer.SectorsPerFAT_H)
|
||||
LD H,A
|
||||
EX DE,HL
|
||||
LD DE,(FatBuffer.SectorsPerFAT_H)
|
||||
LD D,A
|
||||
LD HL,(FatBuffer.SectorsPerFAT_L)
|
||||
; DE:HL = SectorsPerFAT
|
||||
;
|
||||
@ -841,9 +722,30 @@ GET_BPB: LD IX,#0000
|
||||
; HL:DE = DataSec
|
||||
;
|
||||
LD A,(FatBuffer.SectorsPerCluster)
|
||||
;LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
CALL DIV_for_SPC
|
||||
;CALL DIV_for_SPC
|
||||
LD C,A
|
||||
DEC A
|
||||
JR Z,.DIV_exit
|
||||
;
|
||||
AND E
|
||||
LD B,A ; ®áâ ⮪
|
||||
LD A,C
|
||||
RRCA
|
||||
;
|
||||
.DIV_loop: SRL H
|
||||
RR L
|
||||
RR D
|
||||
RR E
|
||||
RRCA
|
||||
JP NC,.DIV_loop
|
||||
LD A,B
|
||||
.DIV_exit: LD B,D
|
||||
LD C,E
|
||||
EX DE,HL
|
||||
LD H,0
|
||||
LD L,A
|
||||
;
|
||||
; ¢ëïá塞 à §à冷áâì FAT
|
||||
LD A,D
|
||||
OR E
|
||||
@ -851,29 +753,13 @@ GET_BPB: LD IX,#0000
|
||||
;
|
||||
LD HL,4084
|
||||
SBC HL,BC
|
||||
JR NC,.its_FAT12
|
||||
LD A,FAT_TYPE.x12
|
||||
JR NC,.SET_VARS
|
||||
;
|
||||
LD HL,65525
|
||||
SBC HL,BC
|
||||
JR C,.its_FAT32
|
||||
;
|
||||
; It's FAT16
|
||||
LD HL,#FFFF
|
||||
LD A,FAT_TYPE.x16
|
||||
.set_vars: EXX
|
||||
LD HL,0
|
||||
LD (FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
LD (FatBuffer.RootDirStartCluster_L),HL
|
||||
LD (FatBuffer.RootDirStartCluster_H),HL
|
||||
LD HL,BOOT_BUFFER + BOOT_SECTOR.FAT.LABEL
|
||||
EXX
|
||||
LD DE,(BOOT_BUFFER + BOOT_SECTOR.FAT.SERIAL_NUMBER)
|
||||
LD BC,(BOOT_BUFFER + BOOT_SECTOR.FAT.SERIAL_NUMBER+2)
|
||||
JR .SET_VARS
|
||||
;
|
||||
.its_FAT12: LD HL,#0FFF
|
||||
LD A,FAT_TYPE.x12
|
||||
JR .set_vars
|
||||
JR NC,.SET_VARS
|
||||
;
|
||||
.its_FAT32: LD A,(BOOT_BUFFER + BOOT_SECTOR.MainFATnumber)
|
||||
CP #80
|
||||
@ -897,90 +783,48 @@ GET_BPB: LD IX,#0000
|
||||
;
|
||||
.first_FAT_active:
|
||||
LD (FatBuffer.FAT1_SEC_L),HL
|
||||
LD (FatBuffer.FAT2_SEC_L),HL
|
||||
EXX
|
||||
LD (FatBuffer.FAT1_SEC_H),HL
|
||||
LD (FatBuffer.FAT2_SEC_H),HL
|
||||
;
|
||||
.mirrored_FATs: ;
|
||||
LD HL,BOOT_BUFFER + BOOT_SECTOR.FAT32.LABEL
|
||||
;
|
||||
EXX
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.RootDirStartCluster)
|
||||
LD (FatBuffer.RootDirStartCluster_L),HL
|
||||
LD DE,(BOOT_BUFFER + BOOT_SECTOR.RootDirStartCluster+2)
|
||||
LD (FatBuffer.RootDirStartCluster_H),DE
|
||||
;
|
||||
CALL CLUSTER_TO_SECTOR.no_prepare
|
||||
LD (FatBuffer.RootDirFirstSector_L),IX
|
||||
LD (FatBuffer.RootDirFirstSector_H),HL
|
||||
;
|
||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.FSINFO_Sector)
|
||||
LD (FatBuffer.FSINFO_Sector),HL
|
||||
;
|
||||
LD A,FAT_TYPE.x32
|
||||
LD HL,#0FFF
|
||||
LD (FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
LD H,L
|
||||
LD DE,(BOOT_BUFFER + BOOT_SECTOR.FAT32.SERIAL_NUMBER)
|
||||
LD BC,(BOOT_BUFFER + BOOT_SECTOR.FAT32.SERIAL_NUMBER+2)
|
||||
;
|
||||
.SET_VARS: LD (FatBuffer.FAT_TYPE),A
|
||||
LD (FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||
LD (FatBuffer.BPB_SERIAL_NUMBER),DE
|
||||
LD (FatBuffer.BPB_SERIAL_NUMBER+2),BC
|
||||
EXX
|
||||
LD DE,FatBuffer.BPB_LABEL
|
||||
LD BC,11 ;!HARDCODE
|
||||
LDIR
|
||||
LD DE,0
|
||||
CALL READ_FAT_TABLE
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
;;;;;;;;
|
||||
|
||||
; --> BC:HL - Sector
|
||||
; <-- BC:HL - Cluster
|
||||
SectorToCluster:
|
||||
LD A,B
|
||||
AND #0F
|
||||
LD B,A
|
||||
LD A,(FatBuffer.SectorsPerCluster)
|
||||
;LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
SCF
|
||||
.loop: RRA
|
||||
RET C
|
||||
RR B
|
||||
RR C
|
||||
RR H
|
||||
RR L
|
||||
JP .loop
|
||||
;
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
DIV_for_SPC:
|
||||
LD C,A
|
||||
DEC A
|
||||
JR Z,.exit
|
||||
;
|
||||
AND E
|
||||
LD B,A ; ®áâ ⮪
|
||||
LD A,C
|
||||
RRCA
|
||||
;
|
||||
.loop: SRL H
|
||||
RR L
|
||||
RR D
|
||||
RR E
|
||||
RRCA
|
||||
JP NC,.loop
|
||||
LD A,B
|
||||
.exit: LD B,D
|
||||
LD C,E
|
||||
EX DE,HL
|
||||
LD H,0
|
||||
LD L,A
|
||||
RET
|
||||
; DIV_for_SPC:
|
||||
; LD C,A
|
||||
; DEC A
|
||||
; JR Z,.DIV_exit
|
||||
; ;
|
||||
; AND E
|
||||
; LD B,A ; ®áâ ⮪
|
||||
; LD A,C
|
||||
; RRCA
|
||||
; ;
|
||||
; .DIV_loop: SRL H
|
||||
; RR L
|
||||
; RR D
|
||||
; RR E
|
||||
; RRCA
|
||||
; JP NC,.DIV_loop
|
||||
; LD A,B
|
||||
; .DIV_exit: LD B,D
|
||||
; LD C,E
|
||||
; EX DE,HL
|
||||
; LD H,0
|
||||
; LD L,A
|
||||
; RET
|
||||
;
|
||||
;NSECTOR:
|
||||
; in: HL':HL - CLUSTER
|
||||
@ -1009,11 +853,11 @@ CLUSTER_TO_SECTOR:
|
||||
RL D
|
||||
;
|
||||
RRA
|
||||
JP NC,.loop
|
||||
JR NC,.loop
|
||||
;
|
||||
.skip: EX DE,HL
|
||||
LD XL,E
|
||||
LD XH,D
|
||||
PUSH DE
|
||||
POP IX
|
||||
LD DE,(FatBuffer.FirstDataSector_L)
|
||||
ADD IX,DE
|
||||
LD DE,(FatBuffer.FirstDataSector_H)
|
||||
@ -1038,8 +882,10 @@ GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||
LD A,(FatBuffer.SectorsPerCluster);!FIXIT ¯à®çâñâ ⮫쪮 ¯¥à¢ë© ª« áâ¥à ä ©«®¢ FAT32
|
||||
.NEXTSEC: PUSH AF
|
||||
ADD IX,BC
|
||||
ADC HL,DE
|
||||
;HL:IX
|
||||
JR NC,.skip_inc
|
||||
INC HL
|
||||
;ADC HL,DE
|
||||
.skip_inc: ;HL:IX
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
LD BC,1*256 + BIOS.DRV_READ
|
||||
@ -1053,19 +899,17 @@ GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||
RET C
|
||||
RET NZ
|
||||
LD A,B
|
||||
LD DE,0
|
||||
;LD DE,0
|
||||
LD BC,1
|
||||
DEC A
|
||||
JR NZ,.NEXTSEC
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
;
|
||||
SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
|
||||
LD IX, DIR_BUFFER - FAT_DIRECTORY_RECORD
|
||||
.SKIPNAM: LD DE,FAT_DIRECTORY_RECORD
|
||||
ADD IX,DE
|
||||
.SKIPNAM_DE: ADD IX,DE
|
||||
DEC C
|
||||
RET Z
|
||||
;
|
||||
@ -1075,11 +919,11 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
|
||||
RET Z
|
||||
;
|
||||
CP #E5
|
||||
JR Z,.SKIPNAM
|
||||
JR Z,.SKIPNAM_DE
|
||||
;
|
||||
LD A,(IX+FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||
AND FAT_ATTR.DIRECTORY
|
||||
JR NZ,.SKIPNAM
|
||||
JR NZ,.SKIPNAM_DE
|
||||
;
|
||||
LD DE,CORE_NAME
|
||||
PUSH IX
|
||||
@ -1131,7 +975,7 @@ LOAD_CORE: LD (READMEM),DE
|
||||
.subload: LD A,(.max_sectors)
|
||||
LD B,A
|
||||
LD C,BIOS.DRV_READ_LONG
|
||||
LD A,(BANKDOS)
|
||||
LD A,(LOAD_CORE.BANKDOS)
|
||||
EX AF,AF'
|
||||
LD A,(DRIVE)
|
||||
RST ToBIOS_18
|
||||
@ -1140,12 +984,11 @@ LOAD_CORE: LD (READMEM),DE
|
||||
POP HL
|
||||
EXX
|
||||
POP HL
|
||||
;AND A
|
||||
RET
|
||||
;
|
||||
.SMALL_CLUSTER: LD B,A
|
||||
LD C,BIOS.DRV_READ_LONG
|
||||
LD A,(BANKDOS)
|
||||
.BANKDOS+1: LD A,0
|
||||
EX AF,AF'
|
||||
LD A,(DRIVE)
|
||||
RST ToBIOS_18
|
||||
@ -1161,9 +1004,10 @@ LOAD_CORE: LD (READMEM),DE
|
||||
CCF
|
||||
RET NC
|
||||
; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||
LD A,(BIG_CORE)
|
||||
|
||||
.BIG_CORE+1: LD A,0
|
||||
DEC A
|
||||
LD (BIG_CORE),A
|
||||
LD (.BIG_CORE),A
|
||||
RET Z
|
||||
;
|
||||
CALL READ_FROM_FAT
|
||||
@ -1306,9 +1150,7 @@ NSECTOR: LD DE,0
|
||||
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥
|
||||
; CF - ª®¥æ 楯®çª¨
|
||||
;------------------------------------------------------------------------------------------------
|
||||
READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
||||
RET C
|
||||
PUSH HL
|
||||
READ_FROM_FAT: PUSH HL
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
PUSH AF
|
||||
@ -1433,8 +1275,6 @@ GET_FAT12_CELL: LD D,H
|
||||
;AND FAT_CACHE.Part_Mask_16
|
||||
;
|
||||
; [ ] ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
||||
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
; CP C
|
||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
CP E
|
||||
LD E,A
|
||||
@ -1451,7 +1291,6 @@ GET_FAT12_CELL: LD D,H
|
||||
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
||||
GET_FAT16_CELL: LD A,H
|
||||
LD B,H
|
||||
;AND #0F
|
||||
AND FAT_CACHE.Size_Mask_16
|
||||
LD H,A
|
||||
LD A,B
|
||||
@ -1464,8 +1303,6 @@ GET_FAT16_CELL: LD A,H
|
||||
;
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||
; [x] fat32 ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
||||
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
; CP C
|
||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
CP E
|
||||
LD E,A
|
||||
@ -1513,32 +1350,6 @@ GET_FAT32_CELL: ;
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
RET
|
||||
;
|
||||
; [x] fat32 ;!TEST
|
||||
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster
|
||||
; hl' = áâ à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
|
||||
CHECK_CLUSTER_IS_SMALLER:
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
XOR FAT_TYPE.x32
|
||||
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
EXX
|
||||
EX DE,HL
|
||||
LD HL,(FatBuffer.MaxClusterHigh)
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
EXX
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
RET C
|
||||
RET NZ
|
||||
; ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
.low: EX DE,HL
|
||||
LD HL,(FatBuffer.MaxClusterLow)
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
RET
|
||||
;
|
||||
/*
|
||||
;-----------------
|
||||
; HL - CLUSTER
|
||||
@ -1677,12 +1488,14 @@ READ_FAT_TABLE: PUSH HL
|
||||
; BC:HL - ®¬¥à «®£.ᥪâ®à
|
||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
;
|
||||
; EX DE,HL
|
||||
; LD XH,D
|
||||
; LD XL,E
|
||||
PUSH HL
|
||||
POP IX
|
||||
;
|
||||
LD HL,(FatBuffer.FAT1_SEC_H)
|
||||
; JR NC,.no_inc
|
||||
; INC HL
|
||||
.no_inc: ADC HL,BC
|
||||
; HL:IX - SECTOR FAT FOR READING
|
||||
;
|
||||
@ -1691,6 +1504,7 @@ READ_FAT_TABLE: PUSH HL
|
||||
LD DE,(PARTITION_START_H)
|
||||
ADC HL,DE
|
||||
LD DE,FAT_SECTORS_BUFFER
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
PUSH AF
|
||||
LD A,SHARED_PAGE
|
||||
@ -1810,29 +1624,15 @@ FatBuffer EQU VALUE
|
||||
|
||||
HANDBUF EQU VALUE + _sysFatBuffer
|
||||
FCLUSTER_H EQU HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
|
||||
; FTIME EQU HANDBUF + FAT_DIRECTORY_RECORD.TIME
|
||||
; FDATE EQU HANDBUF + FAT_DIRECTORY_RECORD.DATE
|
||||
FCLUSTR_L EQU HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
|
||||
FSIZE0 EQU HANDBUF + FAT_DIRECTORY_RECORD.F_SIZE
|
||||
FSIZE1 EQU HANDBUF + FAT_DIRECTORY_RECORD.F_SIZE + 2
|
||||
PARTITION_START_H EQU FSIZE1+2
|
||||
PARTITION_START_L EQU PARTITION_START_H+2
|
||||
READMEM EQU PARTITION_START_L+2
|
||||
BIG_CORE EQU READMEM+2
|
||||
BANKDOS EQU BIG_CORE+1
|
||||
;SHEL_FM EQU VALUE+54
|
||||
; EQU VALUE+56
|
||||
;BIG_CORE EQU READMEM+2
|
||||
|
||||
;-----------------
|
||||
; BLOCK #8600-$-3,0
|
||||
; DB 'SPT'
|
||||
; BIGA EQU (($/256)+1)*256
|
||||
; BIGA2 EQU BIGA-$-2
|
||||
; DS BIGA2
|
||||
; DB "dp"
|
||||
; E______
|
||||
|
||||
;STACK EQU (($/256)+2)*256
|
||||
|
||||
DISPLAY "BOOT_BUFFER ",/H,BOOT_BUFFER
|
||||
DISPLAY "DIR_BUFFER ",/H,DIR_BUFFER
|
||||
|
||||
@ -19,18 +19,18 @@
|
||||
;
|
||||
;
|
||||
STRUCT _sysFatBuffer
|
||||
.DRIVE: BYTE #FF
|
||||
;.DRIVE: BYTE #FF
|
||||
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
|
||||
.CacheBlock: WORD #0000
|
||||
.CacheUpdated: BYTE #00
|
||||
;.CacheUpdated: BYTE #00
|
||||
;.SectorsPerBank: BYTE #00
|
||||
.RootDirStartCluster_L: WORD #0000
|
||||
.RootDirStartCluster_H: WORD #0000 ; fat32
|
||||
;.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
|
||||
.Number_Of_FATs BYTE #02
|
||||
;.FAT2_SEC_L: WORD #0000
|
||||
;.FAT2_SEC_H: WORD #0000 ; fat32
|
||||
;.Number_Of_FATs BYTE #02
|
||||
.SectorsPerFAT_L WORD #0000
|
||||
.SectorsPerFAT_H BYTE #00
|
||||
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||
@ -39,15 +39,15 @@
|
||||
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
||||
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
|
||||
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
||||
.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||
.END_CHAIN_CLUSTER_H: WORD #0FFF
|
||||
.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
.BytesPerSector: WORD #0000
|
||||
;.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||
;.END_CHAIN_CLUSTER_H: WORD #0FFF
|
||||
;.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
;.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
;.BytesPerSector: WORD #0000
|
||||
.SectorsPerCluster: BYTE #00
|
||||
.FSINFO_Sector: WORD #01
|
||||
.BPB_SERIAL_NUMBER: DWORD #00000000
|
||||
.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||
;.FSINFO_Sector: WORD #01
|
||||
;.BPB_SERIAL_NUMBER: DWORD #00000000
|
||||
;.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||
;.UPD_FSINFO: BYTE 0
|
||||
;.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
||||
;.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
||||
@ -77,7 +77,7 @@
|
||||
BYTE ' Anatoliy '
|
||||
BYTE ' Belyanskiy. '
|
||||
BYTE ' Sprinter Team, '
|
||||
BYTE ' 2023 '
|
||||
BYTE ' 2024 '
|
||||
ENDM
|
||||
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@ CLOSE_FN:
|
||||
RET NZ
|
||||
BIT 7,(IY+_sFM.ACCESS_MODE)
|
||||
JR Z,.NOTMODF
|
||||
;
|
||||
LD E,(IY+_sFM.DIR_CLUSTER_L)
|
||||
LD D,(IY+_sFM.DIR_CLUSTER_L+1)
|
||||
PUSH DE
|
||||
@ -81,7 +82,5 @@ CLOSE_FN:
|
||||
CALL SAVEDIR
|
||||
.NOTMODF:
|
||||
LD A,(.TMP)
|
||||
;CALL RES_FM
|
||||
JP RES_FM
|
||||
;RET
|
||||
;
|
||||
@ -158,10 +158,10 @@ SEARCH:
|
||||
OR A
|
||||
JR Z,.error_file_not_found
|
||||
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥ë
|
||||
JR Z,.next_record
|
||||
JR Z,.next_record_DE
|
||||
LD A,(IX+FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||
AND C
|
||||
JR NZ,.next_record
|
||||
JR NZ,.next_record_DE
|
||||
LD HL,MASKARE
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
@ -199,12 +199,13 @@ SEARCH:
|
||||
AND A
|
||||
RET
|
||||
.next_record:
|
||||
LD DE,FAT_DIRECTORY_RECORD
|
||||
.next_record_DE:
|
||||
;!TEST 9/11/23 record index
|
||||
; EXX
|
||||
; INC DE
|
||||
; EXX
|
||||
;
|
||||
LD DE,FAT_DIRECTORY_RECORD
|
||||
ADD IX,DE
|
||||
JR NC,.loop
|
||||
.error_too_many_files:
|
||||
|
||||
@ -98,6 +98,7 @@ PUTCHAR:
|
||||
RET Z
|
||||
DEC E
|
||||
JP LOCATE
|
||||
;
|
||||
.LF_: CALL CURSOR
|
||||
LD A,D
|
||||
CP #1F
|
||||
|
||||
Loading…
Reference in New Issue
Block a user