DSS: детект разрядности FAT в BPB теперь по всем канонам. Допиливание до FAT32.

SYS: Загрузка System.dos > #4000 байтов. Исправлен баг с ненужной проверкой расстояния от BPB до FAT для HDD.
SHELL: мелкие правки
This commit is contained in:
Anatoliy Belyanskiy 2024-04-14 01:54:39 +10:00
parent 9b975b7a88
commit bb63a4071d
21 changed files with 1124 additions and 919 deletions

View File

@ -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,144 +47,66 @@ 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 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
@ -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,46 +302,42 @@ 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)
@ -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,7 +373,7 @@ 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
@ -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
;[]-----------------------------------------------------------[] ;[]-----------------------------------------------------------[]

View File

@ -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 ; áâ. à §àï¤ «®£. ᥪâ®à 

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
; ;

View File

@ -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
; ;

View File

@ -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

View File

@ -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]
; ;

View File

@ -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 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
; ;
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -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

View File

@ -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 $
; ;

View File

@ -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

View File

@ -1 +1 @@
952 950

View File

@ -150,3 +150,8 @@ MOUSE_BAUD:
ENDIF ENDIF
;----------------------------------------------------; ;----------------------------------------------------;
; ;
;
;----------------------------------------------------;
SUBLOAD_SIZE EQU 10 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ­ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ­¨æã
;----------------------------------------------------;

View File

@ -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

View File

@ -1 +1 @@
314 315

@ -1 +1 @@
Subproject commit 18c132c6e9b507cb92d2144f5497278f021a0292 Subproject commit 0e2bbfb73ceb70a16b2ab2b5ee6cbc6bd5005bf7