mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
-bug in NSECTOR сам затупил, сам починил.
Рефакторинг
This commit is contained in:
parent
5cf26d589f
commit
0e38bd4a91
@ -523,27 +523,61 @@ SMALL_CLUSTER:
|
|||||||
; HL - CLUSTER
|
; HL - CLUSTER
|
||||||
; HL:IX - SECTOR
|
; HL:IX - SECTOR
|
||||||
|
|
||||||
NSECTOR DEC HL
|
; NSECTOR:
|
||||||
|
; DEC HL
|
||||||
|
; DEC HL
|
||||||
|
; EX DE,HL
|
||||||
|
; LD A,(BOOT.S_P_C)
|
||||||
|
; LD B,A
|
||||||
|
; LD HL,0
|
||||||
|
; LD IX,0
|
||||||
|
; ADD_DE1 ADD IX,DE
|
||||||
|
; JP NC,ADD_DE2
|
||||||
|
; INC HL
|
||||||
|
; 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
|
||||||
|
DEC HL
|
||||||
DEC HL
|
DEC HL
|
||||||
EX DE,HL
|
|
||||||
LD A,(BOOT.S_P_C)
|
LD A,(BOOT.S_P_C)
|
||||||
LD B,A
|
XOR 1
|
||||||
LD HL,0
|
JR Z,.skip
|
||||||
LD IX,0
|
;
|
||||||
ADD_DE1 ADD IX,DE
|
RRA
|
||||||
JP NC,ADD_DE2
|
.loop: ADD HL,HL
|
||||||
INC HL
|
RL E
|
||||||
ADD_DE2 DJNZ ADD_DE1
|
RL D
|
||||||
LD DE,(DAT_FRM)
|
;
|
||||||
|
RRA
|
||||||
|
JP NC,.loop
|
||||||
|
;
|
||||||
|
.skip: EX DE,HL
|
||||||
|
LD XL,E
|
||||||
|
LD XH,D
|
||||||
|
LD DE,(DAT_FRM) ;first data sector
|
||||||
|
XOR A
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
LD DE,#0000
|
LD D,A
|
||||||
|
LD E,A
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
|
;
|
||||||
LD DE,(DISKL)
|
LD DE,(DISKL)
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
LD DE,(DISKH)
|
LD DE,(DISKH)
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;-----------------
|
;-----------------
|
||||||
;!TODO ᤥ« âì íâ® ¬ ªà®á ¬¨ ¨«¨ ¨ª«î¤ ¬¨ 㨢¥àá «ì묨. ¯®¢â®àïîâáï ¢ ¤®á¥ ¨ ¥éñ £¤¥-â®
|
;!TODO ᤥ« âì íâ® ¬ ªà®á ¬¨ ¨«¨ ¨ª«î¤ ¬¨ 㨢¥àá «ì묨. ¯®¢â®àïîâáï ¢ ¤®á¥ ¨ ¥éñ £¤¥-â®
|
||||||
; HL - CLUSTER
|
; HL - CLUSTER
|
||||||
@ -611,15 +645,15 @@ R_F_00 INC A ; HL - FAT OFFSET
|
|||||||
|
|
||||||
R_F_F01 LD A,E
|
R_F_F01 LD A,E
|
||||||
AND #F0
|
AND #F0
|
||||||
|
RR D ; ¢¯à ¢® 4 ¡¨âa
|
||||||
|
RRA
|
||||||
|
RR D
|
||||||
|
RRA
|
||||||
|
RR D
|
||||||
|
RRA
|
||||||
|
RR D
|
||||||
|
RRA
|
||||||
LD E,A
|
LD E,A
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
R_F_F02 LD HL,#0FEF
|
R_F_F02 LD HL,#0FEF
|
||||||
XOR A
|
XOR A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
|
|||||||
180
DSS/API.asm
Normal file
180
DSS/API.asm
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R011 17-04-2023 BAO ‚६¥ë© ª®áâë«ì ¤«ï ¥¤®¯ã᪠¨ï ¯¥à¥¯®«¥¨ï ¡ãä¥à ¯ã⨠ª â «®£
|
||||||
|
;R010 15-04-2023 BAO FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH
|
||||||
|
;R009 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
|
||||||
|
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||||
|
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||||
|
;R008 - 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
||||||
|
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
|
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
|
;R007 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN FROM "." ".NAM"
|
||||||
|
;R006 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME
|
||||||
|
;R005 26-11-2002 DNS FIX ERROR IN CHDIR, DON'T ALLOWED "." FOR ROOT
|
||||||
|
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
||||||
|
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
||||||
|
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
||||||
|
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||||
|
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||||
|
;R001 16-12-1999 DNS Y2K fix
|
||||||
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
|
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
||||||
|
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
||||||
|
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||||
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
|
|
||||||
|
;
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
include 'API/Version.asm'
|
||||||
|
include 'API/bootDsk.asm'
|
||||||
|
include 'API/curDisk.asm'
|
||||||
|
include 'API/diskINF.asm'
|
||||||
|
include 'API/ScanDRV.asm'
|
||||||
|
include 'API/Attribute.asm'
|
||||||
|
include 'API/Create.asm'
|
||||||
|
include 'API/Delete.asm'
|
||||||
|
include 'API/Rename.asm'
|
||||||
|
include 'API/Open.asm'
|
||||||
|
include 'API/Close.asm'
|
||||||
|
include 'API/Find.asm'
|
||||||
|
include 'API/ChnDisk.asm'
|
||||||
|
include 'API/CurrDir.asm'
|
||||||
|
include 'API/Time.asm'
|
||||||
|
include 'API/GetDateTime.asm'
|
||||||
|
include 'API/SetDateTime.asm'
|
||||||
|
include 'API/ChDir.asm'
|
||||||
|
include 'API/MkDir.asm'
|
||||||
|
include 'API/RmDir.asm'
|
||||||
|
include 'API/DosName.asm'
|
||||||
|
|
||||||
|
;R09
|
||||||
|
;„ã¡«ì - CHNDISK = OPENDSK
|
||||||
|
;CHNDISK:
|
||||||
|
; PUSH AF
|
||||||
|
; LD C,Dss.DRV.Open
|
||||||
|
; RST ToDSS.DRV
|
||||||
|
; POP BC
|
||||||
|
; JP C,NDISK11
|
||||||
|
; LD A,B
|
||||||
|
; LD (FatBuffer.DRIVE),A
|
||||||
|
; CALL RD_BPB
|
||||||
|
; RET C
|
||||||
|
; LD A,(LDRIVE)
|
||||||
|
; AND A
|
||||||
|
; RET
|
||||||
|
;NDISK11:
|
||||||
|
; CP DSS_Error.sys.INVALID_DRIVE
|
||||||
|
; SCF
|
||||||
|
; RET Z
|
||||||
|
; LD A,DSS_Error.sys.NOT_READY
|
||||||
|
; RET
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;R04
|
||||||
|
;SIZE2CL: LD DE,(B_P_C)
|
||||||
|
; XOR A
|
||||||
|
; SCF
|
||||||
|
;S2C01: RR D
|
||||||
|
; RR E
|
||||||
|
; JR C,S2C02
|
||||||
|
; RR H
|
||||||
|
; RR L
|
||||||
|
; RR B
|
||||||
|
; RR C
|
||||||
|
; JP NC,S2C01
|
||||||
|
; LD A,1
|
||||||
|
; JP S2C01
|
||||||
|
;S2C02: OR A
|
||||||
|
; RET Z
|
||||||
|
; INC BC
|
||||||
|
; RET
|
||||||
|
;L_SEC_X: DW 0
|
||||||
|
;H_SEC_X: DW 0
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;GOD EQU 1999-1980*512
|
||||||
|
|
||||||
|
;FHAND DB " "
|
||||||
|
; DB " "
|
||||||
|
; DB #20
|
||||||
|
; DW 0,0,0,0,0
|
||||||
|
; DW #0000
|
||||||
|
; DW 5*32+19+GOD
|
||||||
|
;SAVEC DW #0000
|
||||||
|
;SIZEC DW #0000,#0000
|
||||||
|
;=============================================
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;[END]
|
||||||
|
|
||||||
|
;R11
|
||||||
|
; IF SAVE_PATH_MACRO
|
||||||
|
; SAVE_CUR_PATH
|
||||||
|
; PUSH IX
|
||||||
|
; PUSH IY
|
||||||
|
; PUSH HL
|
||||||
|
; PUSH DE
|
||||||
|
; PUSH BC
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; SET_PAGE_X ENVPAGE
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; CALL CURRDSK
|
||||||
|
; ADD A,"A"
|
||||||
|
; LD HL,TMP_CURDIR_AUTO
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; LD A,":"
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; CALL CURRDIR_FN
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; POP BC
|
||||||
|
; POP DE
|
||||||
|
; POP HL
|
||||||
|
; POP IY
|
||||||
|
; POP IX
|
||||||
|
; RET
|
||||||
|
;
|
||||||
|
; BACK_CUR_PATH:
|
||||||
|
; RET NC
|
||||||
|
; .force: PUSH IY
|
||||||
|
; PUSH IX
|
||||||
|
; PUSH HL
|
||||||
|
; PUSH DE
|
||||||
|
; PUSH BC
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; SET_PAGE_X ENVPAGE
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; LD HL,TMP_CURDIR_AUTO
|
||||||
|
; CALL CHDIR
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; POP BC
|
||||||
|
; POP DE
|
||||||
|
; POP HL
|
||||||
|
; POP IX
|
||||||
|
; POP IY
|
||||||
|
; RET
|
||||||
|
; ENDIF
|
||||||
|
;
|
||||||
81
DSS/API/Attribute.asm
Normal file
81
DSS/API/Attribute.asm
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
|
; A - ATTRIB
|
||||||
|
; B - MODE
|
||||||
|
; B = 0 GET ATTRIB
|
||||||
|
; B = 1 SET ATTRIB
|
||||||
|
; OUTPUT: A - ATTRIB
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
LD C,A
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
;
|
||||||
|
;
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,.READ
|
||||||
|
DEC B
|
||||||
|
JP Z,.WRITE
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
;XOR A
|
||||||
|
;
|
||||||
|
CALL .OPENATR ;R002
|
||||||
|
RET C
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
LD A,(HANDBUF+_sFM.ATTRIBUT)
|
||||||
|
;LD B,(IY+_sFM.ATTRIBUT)
|
||||||
|
;PUSH BC
|
||||||
|
;CALL CLOSE
|
||||||
|
;POP BC
|
||||||
|
;RET C
|
||||||
|
;LD A,B
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.WRITE: PUSH AF
|
||||||
|
XOR A
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
LD (OPEN_FN.TMP),A
|
||||||
|
;
|
||||||
|
CALL .OPENATR ;R002
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
CALL NC,OPEN_FN.FM
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
RET C
|
||||||
|
SET 7,(IY+_sFM.ACCESS_MODE)
|
||||||
|
RES 3,B ;CLEAR LABEL ATTR ;R003 ;!HARDCODE attribute bit
|
||||||
|
LD (IY+_sFM.ATTRIBUT),B
|
||||||
|
PUSH BC
|
||||||
|
CALL CLOSE_FN
|
||||||
|
.error: POP BC
|
||||||
|
RET C
|
||||||
|
LD A,B
|
||||||
|
RET
|
||||||
|
;R002
|
||||||
|
.OPENATR:
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
;LD (OPEN.TMP),A ; à ¡. ï祩ª (§¤¥áì âਡãâ § ¯¨á¨)
|
||||||
|
;
|
||||||
|
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
LD A,FAT_ATTR.NoVolID
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
JP SEARCH.Custom
|
||||||
|
;CALL SEARCH.Custom
|
||||||
|
;RET C ; § ¯¨áì ¥ ©¤¥
|
||||||
|
;JP OPEN.FM ; ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;R002
|
||||||
35
DSS/API/ChDir.asm
Normal file
35
DSS/API/ChDir.asm
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1D. ‘¬¥ ⥪ã饣® ª â «®£ .
|
||||||
|
; Œ¥ï¥â ⥪ã騩 ª â «®£ ¨ ⥪ã騩 ¤¨áª, ¥á«¨ ® 㪠§ ¢ ä ©«®¢®©
|
||||||
|
; ᯥæ¨ä¨ª 樨. …᫨ ¯ãâì ç¨ ¥âáï á "\" - íâ® ®§ ç ¥â ¯ãâì ®â
|
||||||
|
; ª®à¥¢®£® ª â «®£ , ¨ ç¥ ®â ⥪ã饣®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME[\]",0
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CHDIR_FN:
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
CALL CHDIR
|
||||||
|
; ¥á«¨ 㤠ç®, â® ª®¯¨à㥬 WorkDirectory ¢ CurrentDirectory
|
||||||
|
JP NC,DIR_PATH_CHANGE.FullCurrent
|
||||||
|
; ¥á«¨ ¥ã¤ ç®, â® ¢®§¢à é ¥¬áï â㤠®âªã¤ ¯à¨è«¨
|
||||||
|
PUSH AF
|
||||||
|
LD HL,CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
CHDIR: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
LD HL,TMPNAME
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
CALL NZ,OPENDIR
|
||||||
|
RET
|
||||||
|
;
|
||||||
25
DSS/API/ChnDisk.asm
Normal file
25
DSS/API/ChnDisk.asm
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CHNDISK_FN:
|
||||||
|
CALL CHNDISK
|
||||||
|
RET C
|
||||||
|
PUSH AF
|
||||||
|
CALL DIR_PATH_CHANGE.FullCurrent
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
CHNDISK:;[x] ¡®«¥¥ ª®à४â ï ᬥ ¤¨áª
|
||||||
|
CALL OPENDSK
|
||||||
|
;
|
||||||
|
;R010
|
||||||
|
RET C
|
||||||
|
LD HL,WorkDirectory
|
||||||
|
LD (HL),0
|
||||||
|
PUSH AF
|
||||||
|
CALL OPENDIR
|
||||||
|
POP BC
|
||||||
|
RET C
|
||||||
|
LD A,B
|
||||||
|
RET
|
||||||
|
;
|
||||||
74
DSS/API/Close.asm
Normal file
74
DSS/API/Close.asm
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;‚å®¤ë¥ § 票ï:
|
||||||
|
; C - #12
|
||||||
|
; A - ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||||||
|
;‚ëå®¤ë¥ § 票ï:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CLOSE_FN:
|
||||||
|
;R008 ;
|
||||||
|
;CLOSE: ;
|
||||||
|
LD (.TMP),A
|
||||||
|
CALL SET_FM
|
||||||
|
RET C
|
||||||
|
LD A,(TASK)
|
||||||
|
CP (IY+_sFM.TASK_NUM)
|
||||||
|
LD A,DSS_Error.sys.ACCESS_DENIED
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
BIT 7,(IY+_sFM.ACCESS_MODE)
|
||||||
|
JR Z,.NOTMODF
|
||||||
|
LD E,(IY+_sFM.DIR_CLUSTER)
|
||||||
|
LD D,(IY+_sFM.DIR_CLUSTER+1)
|
||||||
|
PUSH DE
|
||||||
|
; [x] 15/11/2023 -bug with bad clusters ;!TEST
|
||||||
|
LD A,(IY+_sFM.DRIVE)
|
||||||
|
CALL OPENDSK
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
CALL SET_FM
|
||||||
|
POP DE
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER),E
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER+1),D
|
||||||
|
; [x] 15/11/2023 -bug with bad clusters ;!TEST
|
||||||
|
LD (IY+_sFM.ST_CLUSTER),E
|
||||||
|
LD (IY+_sFM.ST_CLUSTER+1),D
|
||||||
|
;
|
||||||
|
CALL LOADDIR
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
CALL SET_FM
|
||||||
|
;
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
;
|
||||||
|
;TEST 9/11/23
|
||||||
|
; LD HL,DIR
|
||||||
|
; LD DE,#0020
|
||||||
|
; LD C,(IY+_sFM.HANDLE)
|
||||||
|
; LD B,(IY+_sFM.HANDLE+1)
|
||||||
|
; JR .CLOSE2
|
||||||
|
; .CLOSE1:
|
||||||
|
; ADD HL,DE
|
||||||
|
; DEC BC
|
||||||
|
; .CLOSE2:
|
||||||
|
; LD A,B
|
||||||
|
; OR C
|
||||||
|
; JR NZ,.CLOSE1
|
||||||
|
LD L,(IY+_sFM.HANDLE)
|
||||||
|
LD H,(IY+_sFM.HANDLE+1)
|
||||||
|
;
|
||||||
|
LD D,YH
|
||||||
|
LD E,YL
|
||||||
|
EX DE,HL
|
||||||
|
;PUSH HL
|
||||||
|
;SET_PAGE_X DIRPAGE
|
||||||
|
;POP HL
|
||||||
|
LD BC,#0020 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL SAVEDIR
|
||||||
|
.NOTMODF:
|
||||||
|
LD A,(.TMP)
|
||||||
|
;CALL RES_FM
|
||||||
|
JP RES_FM
|
||||||
|
;RET
|
||||||
|
;
|
||||||
82
DSS/API/Create.asm
Normal file
82
DSS/API/Create.asm
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
|
; OUTPUT: A - FM
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL .Prepare
|
||||||
|
RET C
|
||||||
|
CALL SEARCH.File
|
||||||
|
CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
|
||||||
|
JR .DO
|
||||||
|
;
|
||||||
|
.NEW: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL .Prepare
|
||||||
|
RET C
|
||||||
|
CALL SEARCH.File
|
||||||
|
LD A,DSS_Error.sys.FILE_EXISTS
|
||||||
|
CCF
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
.DO: LD HL,MASKARE
|
||||||
|
LD DE,HANDBUF
|
||||||
|
LD BC,11
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD BC,#0A00 ;!HARDCODE
|
||||||
|
;
|
||||||
|
.loop1: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop1
|
||||||
|
;
|
||||||
|
PUSH HL
|
||||||
|
CALL SYSTIME
|
||||||
|
CALL MK_TIME
|
||||||
|
POP HL
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
LD (HL),C
|
||||||
|
INC HL
|
||||||
|
LD (HL),B
|
||||||
|
INC HL
|
||||||
|
LD BC,#0600
|
||||||
|
;
|
||||||
|
.loop2: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop2
|
||||||
|
;
|
||||||
|
CALL WRT_HND
|
||||||
|
RET C
|
||||||
|
;CALL SAVEDIR
|
||||||
|
.PATH0+1:
|
||||||
|
LD HL,0
|
||||||
|
XOR A
|
||||||
|
LD (OPEN_FN.TMP),A
|
||||||
|
JP OPEN_FN.FILE ;R008
|
||||||
|
.Prepare:
|
||||||
|
AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
||||||
|
LD (.TMP),A
|
||||||
|
LD (.PATH0),HL
|
||||||
|
CALL GETWORD
|
||||||
|
RET C
|
||||||
|
; LD HL,TMPNAME
|
||||||
|
; LD DE,MASKARE
|
||||||
|
JP MASK
|
||||||
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
|
; OUTPUT: A - FM
|
||||||
|
CREAT_N EQU CREATE.NEW
|
||||||
|
;
|
||||||
24
DSS/API/CurrDir.asm
Normal file
24
DSS/API/CurrDir.asm
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1E. ˆä®à¬ æ¨ï ® ⥪ã饬 ª â «®£¥.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CURRDIR: LD DE,WorkDirectory
|
||||||
|
JR CURRDIR_FN.skip
|
||||||
|
CURRDIR_FN:
|
||||||
|
LD DE,CurrentDirectory
|
||||||
|
.skip: EX DE,HL
|
||||||
|
LD BC,DIRECTORY_PATH_LENGTH ;[x] 15/11/2023 ¬®£«® ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à
|
||||||
|
XOR A
|
||||||
|
.loop: CP (HL)
|
||||||
|
LDI
|
||||||
|
JP PO,.error ;[x] 15/11/2023 ¬®£«® ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à
|
||||||
|
JR NZ,.loop
|
||||||
|
RET
|
||||||
|
;[x] 15/11/2023 ¬®£«® ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à
|
||||||
|
.error: LD A,DSS_Error.sys.TOO_DEEP_DIR_DEPTH
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
51
DSS/API/Delete.asm
Normal file
51
DSS/API/Delete.asm
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ?
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
DEL_FN: ;!TEST
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
CALL LOADDIR
|
||||||
|
CALL SEARCH.File
|
||||||
|
RET C
|
||||||
|
;JP .DELETE
|
||||||
|
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
|
.DELETE: SET_PAGE_X DIRPAGE
|
||||||
|
LD (IX+_sFM.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
||||||
|
LD E,(IX+_sFM.ST_CLUSTER) ; ü ¯¥à¢®£® ª« áâ¥à
|
||||||
|
LD D,(IX+_sFM.ST_CLUSTER+1)
|
||||||
|
;
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,E
|
||||||
|
OR D
|
||||||
|
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
.loop: EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||||
|
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
PUSH AF
|
||||||
|
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||||
|
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
|
POP AF
|
||||||
|
POP DE
|
||||||
|
JP NC,.loop
|
||||||
|
CALL WR_FAT
|
||||||
|
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
;
|
||||||
22
DSS/API/DosName.asm
Normal file
22
DSS/API/DosName.asm
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;‚å®¤ë¥ § 票ï:
|
||||||
|
; C - #44
|
||||||
|
; B = 0, ¯à¥®¡à §®¢ âì ¨§ 11 ᨬ¢®«ì®£® ä®à¬ â ¢ ä®à¬ â „Ž‘
|
||||||
|
; HL - 11 ᨬ¢®«®¢ ¨¬¥¨ ä ©«
|
||||||
|
; DE - ¡ãä¥à ¤«ï ¨¬¥¨ ¢ ä®à¬ ⥠„Ž‘
|
||||||
|
; B = 1, ¯à¥®¡à §®¢ âì ¨§ ä®à¬ â „Ž‘ ¢ 11 ᨬ¢®«ìë© ä®à¬ â
|
||||||
|
; HL - ¨¬ï ä ©« ¢ ä®à¬ ⥠„Ž‘
|
||||||
|
; DE - 11 ᨬ¢®«®¢ ¨¬¥¨ ä ©«
|
||||||
|
;‚ëå®¤ë¥ § 票ï:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
DOSNAME:
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,GetName
|
||||||
|
DEC B
|
||||||
|
JP Z,MASK.custom
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
126
DSS/API/Find.asm
Normal file
126
DSS/API/Find.asm
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;‚å®¤ë¥ § 票ï:
|
||||||
|
; C - #19
|
||||||
|
; HL - 㪠§ ⥫ì ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
|
||||||
|
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨ ç¥ 256 ¡ ©â
|
||||||
|
; ;!!!!! á ¬®¬ ¤¥«¥ ᥩç á ¥á«¨ B=1, à ¡®ç¨© ¡ãä¥à 46 ¡ ©â
|
||||||
|
; A - âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
|
||||||
|
; B = 0 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠11 ¡ ©â "FilenameExt"
|
||||||
|
; B = 1 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||||||
|
;‚ëå®¤ë¥ § 票ï:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
F_FIRST:
|
||||||
|
; Current Dir [x] 15/10/23
|
||||||
|
; LD C,A
|
||||||
|
; PUSH HL
|
||||||
|
; PUSH DE
|
||||||
|
; PUSH BC
|
||||||
|
; CALL DIR_PATH_CHECK
|
||||||
|
; POP BC
|
||||||
|
; POP DE
|
||||||
|
; POP HL
|
||||||
|
; RET C
|
||||||
|
; LD A,C
|
||||||
|
; ;
|
||||||
|
LD (.TMP),A
|
||||||
|
LD (.DTABUF),DE
|
||||||
|
LD A,B
|
||||||
|
LD (.FNDMODE),A
|
||||||
|
PUSH HL
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL LOADDIR
|
||||||
|
POP HL
|
||||||
|
CALL GETWORD
|
||||||
|
RET C
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
LD A,(.TMP)
|
||||||
|
CALL SEARCH.Custom
|
||||||
|
RET C
|
||||||
|
LD HL,MASKARE
|
||||||
|
.DTABUF+1:
|
||||||
|
LD DE,0
|
||||||
|
LD BC,11 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
LD (DE),A
|
||||||
|
.FIND_S:
|
||||||
|
INC DE
|
||||||
|
LD BC,#0020
|
||||||
|
ADD IX,BC
|
||||||
|
LD (F_NEXT.CURHND),IX
|
||||||
|
LD HL,HANDBUF+12 ;!HARDCODE
|
||||||
|
LD BC,HANDBUF.SIZE-12 ;????? ¬¥âªã ¢¬¥áâ® ç¨á« ?
|
||||||
|
LDIR
|
||||||
|
LD A,(HANDBUF+11)
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LD HL,HANDBUF
|
||||||
|
.FNDMODE+1:
|
||||||
|
LD A,0
|
||||||
|
OR A
|
||||||
|
JR NZ,.FIND_M2
|
||||||
|
LD BC,11 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
LD A,F_NEXT.NO_NEXT.NO
|
||||||
|
LD (F_NEXT.NO_NEXT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
.FIND_M2:
|
||||||
|
CALL GetName
|
||||||
|
LD A,F_NEXT.NO_NEXT.NO
|
||||||
|
LD (F_NEXT.NO_NEXT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
F_NEXT:
|
||||||
|
.NO_NEXT.YES EQU 0
|
||||||
|
.NO_NEXT.NO EQU #FF
|
||||||
|
.NO_NEXT+1:
|
||||||
|
LD A,0
|
||||||
|
OR A
|
||||||
|
LD A,DSS_Error.sys.INVALID_ACCESS
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
LD (F_FIRST.DTABUF),DE
|
||||||
|
EX DE,HL
|
||||||
|
LD DE,MASKARE
|
||||||
|
LD BC,11 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
|
||||||
|
XOR A ; F_NEXT.NO_NEXT.YES
|
||||||
|
LD (F_NEXT.NO_NEXT),A
|
||||||
|
|
||||||
|
LD A,(HL)
|
||||||
|
PUSH HL
|
||||||
|
CALL .NSEARCH
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
JP F_FIRST.FIND_S
|
||||||
|
.NSEARCH:
|
||||||
|
EX AF,AF'
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
;PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
CPL
|
||||||
|
LD C,A
|
||||||
|
;TEST 9/11/23
|
||||||
|
; EXX
|
||||||
|
; LD DE,0
|
||||||
|
; EXX
|
||||||
|
;
|
||||||
|
.CURHND+2:
|
||||||
|
LD IX,0
|
||||||
|
LD A,XH
|
||||||
|
OR XL
|
||||||
|
JP Z,SEARCH.error_too_many_files
|
||||||
|
JP SEARCH.loop
|
||||||
|
;
|
||||||
24
DSS/API/GetDateTime.asm
Normal file
24
DSS/API/GetDateTime.asm
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #17. ˆä®à¬ æ¨ï ® ¤ ⥠¨ ¢à¥¬¥¨ ä ©« .
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¤¥áªà¨¯â®à ä ©«
|
||||||
|
; ¢ë室: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
GET_D_T:
|
||||||
|
CALL SET_FM
|
||||||
|
RET C
|
||||||
|
; ¢à¥¬ï/¤ âã ¨§ áâàãªâãàë ¤¥áªà.
|
||||||
|
LD E,(IY+_sFM.TIME) ; ¢à¥¬ï
|
||||||
|
LD D,(IY+_sFM.TIME+1) ;
|
||||||
|
LD C,(IY+_sFM.DATE) ; ¤ â
|
||||||
|
LD B,(IY+_sFM.DATE+1) ;
|
||||||
|
CALL RMKTIME ; à ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
167
DSS/API/MkDir.asm
Normal file
167
DSS/API/MkDir.asm
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1B. ‘®§¤ ¨¥ ª â «®£ .
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
CALL .START
|
||||||
|
PUSH AF
|
||||||
|
LD HL,CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.START: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
;LD HL,TMPNAME ; 8.3 ¨¬ï
|
||||||
|
;LD DE,MASKARE ; ¡ãä¥à ¨¬¥¨ 11 ᨬ¢. ä®à¬ â
|
||||||
|
CALL MASK ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||||
|
RET C
|
||||||
|
;!TEST optimization à ¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
||||||
|
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
|
;
|
||||||
|
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
LD A,DSS_Error.sys.DIR_EXISTS
|
||||||
|
CCF
|
||||||
|
RET C ; ª â «®£ ©¤¥
|
||||||
|
;
|
||||||
|
CALL G_CLUST
|
||||||
|
RET C
|
||||||
|
PUSH HL
|
||||||
|
LD DE,(FatBuffer.ENDCLUS) ; ®¬¥à ª« áâ¥à
|
||||||
|
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
|
CALL WR_FAT ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD DE,HANDBUF
|
||||||
|
LD BC,11
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
LD A,#10 ; âਡãâ § ¯¨á¨ ª â «®£
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD BC,#0A00 ; b=áç¥â稪
|
||||||
|
;
|
||||||
|
.loop1: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop1
|
||||||
|
;
|
||||||
|
PUSH HL
|
||||||
|
CALL SYSTIME ; ã§ âì ⥪. ¤ âã ¨ ¢à¥¬ï
|
||||||
|
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
POP HL
|
||||||
|
LD (HL),E ; de=¢à¥¬ï
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
LD (HL),C ; ¤¥ì
|
||||||
|
INC HL
|
||||||
|
LD (HL),B ; ¬¥áïæ
|
||||||
|
INC HL
|
||||||
|
POP DE
|
||||||
|
PUSH DE
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
LD BC,#0400 ; b=áç¥â稪
|
||||||
|
;
|
||||||
|
.loop2: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop2
|
||||||
|
;
|
||||||
|
CALL WRT_HND ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||||||
|
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
|
||||||
|
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||||||
|
LD BC,10*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||||||
|
;
|
||||||
|
.loop3: INC HL
|
||||||
|
LD (HL),C
|
||||||
|
DJNZ .loop3
|
||||||
|
;
|
||||||
|
INC HL
|
||||||
|
LD DE,HANDBUF+11 ; ï祩ª âਡã⮢ ä ©«
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,21
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£
|
||||||
|
INC HL
|
||||||
|
LD (HL),"."
|
||||||
|
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||||||
|
.MKD03: INC HL
|
||||||
|
LD (HL),C
|
||||||
|
DJNZ .MKD03
|
||||||
|
;
|
||||||
|
INC HL
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
LD A,(DIRPAGE.buffer)
|
||||||
|
CP "."
|
||||||
|
LD DE,DIRPAGE.buffer+11 ; âਡãâë § ¯¨á¨ ;!HARDCODE
|
||||||
|
JP Z,.MKD04
|
||||||
|
LD IX,HANDBUF
|
||||||
|
XOR A
|
||||||
|
LD (IX+_sFM.ST_CLUSTER),A
|
||||||
|
LD (IX+_sFM.ST_CLUSTER+1),A
|
||||||
|
LD DE,HANDBUF+11 ; ï祩ª âਡã⮢ ä ©«
|
||||||
|
.MKD04: EX DE,HL
|
||||||
|
LD BC,HANDBUF.SIZE-11
|
||||||
|
LDIR
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
INC DE
|
||||||
|
LD (HL),0
|
||||||
|
LD BC,512-65 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP HL
|
||||||
|
CALL NSECTOR
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.S_P_C) ; ᥪâ®à®¢ ª« áâ¥à
|
||||||
|
.MKD12: PUSH AF
|
||||||
|
PUSH HL ; áâ. à §àï¤
|
||||||
|
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||||
|
LD BC,1*256 + Dss.DRV.Write
|
||||||
|
RST ToDSS.DRV
|
||||||
|
;
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
LD HL,CORE_BUFFERS.SECBUF
|
||||||
|
LD DE,CORE_BUFFERS.SECBUF+1
|
||||||
|
LD BC,511
|
||||||
|
LD (HL),0
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
INC IX
|
||||||
|
LD A,XH
|
||||||
|
OR XL
|
||||||
|
JR NZ,.MKD11
|
||||||
|
INC HL
|
||||||
|
.MKD11 POP AF
|
||||||
|
DEC A
|
||||||
|
JR NZ,.MKD12
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
69
DSS/API/Open.asm
Normal file
69
DSS/API/Open.asm
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #11. Žâªàë⨥ ä ©« .
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ä ©«
|
||||||
|
; A - ०¨¬ ¤®áâ㯠:
|
||||||
|
; A=0 ç⥨¥/§ ¯¨áì
|
||||||
|
; A=1 ç⥨¥
|
||||||
|
; A=2 § ¯¨áì
|
||||||
|
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
|
||||||
|
; CF=1, A - ª®¤ ®è¨¡ª¨.
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
LD (.TMP),A
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK.forceCheck
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
JR .start
|
||||||
|
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
|
||||||
|
;R008 ;
|
||||||
|
;OPEN: ;
|
||||||
|
LD (.TMP),A ; enter point from CREATE
|
||||||
|
.start: CALL GETWORD
|
||||||
|
RET C
|
||||||
|
CALL MASK ; enter point from OPEN_FN
|
||||||
|
RET C
|
||||||
|
.FILE: CALL SEARCH.File ; enter point from EXEC
|
||||||
|
RET C
|
||||||
|
;R002 ;
|
||||||
|
.FM: CALL GET_FM ; enter point from ATTRIB
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
EX AF,AF'
|
||||||
|
EXX
|
||||||
|
LD (IY+_sFM.HANDLE),E
|
||||||
|
LD (IY+_sFM.HANDLE+1),D
|
||||||
|
EXX
|
||||||
|
LD D,YH
|
||||||
|
LD E,YL
|
||||||
|
LD HL,HANDBUF
|
||||||
|
LD BC,HANDBUF.SIZE
|
||||||
|
LDIR
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
LD (IY+_sFM.ACCESS_MODE),A
|
||||||
|
LD A,(TASK)
|
||||||
|
LD (IY+_sFM.TASK_NUM),A
|
||||||
|
XOR A
|
||||||
|
;
|
||||||
|
LD (IY+_sFM.KnownCluster_L),A
|
||||||
|
LD (IY+_sFM.KnownCluster_H),A
|
||||||
|
LD (IY+_sFM.KnownOffset_L),A
|
||||||
|
LD (IY+_sFM.KnownOffset_H),A
|
||||||
|
;
|
||||||
|
LD (IY+_sFM.F_POSITION),A
|
||||||
|
LD (IY+_sFM.F_POSITION+1),A
|
||||||
|
LD (IY+_sFM.F_POSITION+2),A
|
||||||
|
LD (IY+_sFM.F_POSITION+3),A
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
LD (IY+_sFM.DRIVE),A
|
||||||
|
LD HL,CORE_BUFFERS.FM_BUF+_sFM.ST_CLUSTER
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER),E
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER+1),D
|
||||||
|
EX AF,AF'
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
72
DSS/API/Rename.asm
Normal file
72
DSS/API/Rename.asm
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #10. <20>¥à¥¨¬¥®¢ ¨¥ ä ©« .
|
||||||
|
; ƒ«®¡ «ìë¥ á¨¬¢®«ë * ¨ ? ¢ ¨¬¥ å ä ©«®¢ ¥ ¤®¯ã᪠îâáï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ ⥫ì áâ ஥ ¨¬ï ä ©«
|
||||||
|
; DE - 㪠§ â¥«ì ®¢®¥ ¨¬ï ä ©«
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; INPUT: HL - "old_name.ext",#00 without simbols * ?
|
||||||
|
; DE - "new_name.ext",#00 without simbols * ?
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
RENAME: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
CALL DIR_PATH_CHECK.forceCheck
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
;LD DE,MASKARE
|
||||||
|
CALL MASK.name
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
PUSH DE
|
||||||
|
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
|
;LD A,#33
|
||||||
|
LD A,FAT_ATTR.NoSYSnoVolID
|
||||||
|
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;LD DE,MASKARE
|
||||||
|
CALL MASK.name
|
||||||
|
RET C
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
PUSH IX
|
||||||
|
LD A,FAT_ATTR.NoSYSnoVolID
|
||||||
|
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
POP IX
|
||||||
|
LD A,DSS_Error.sys.FILE_EXISTS
|
||||||
|
CCF
|
||||||
|
RET C
|
||||||
|
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD BC,11
|
||||||
|
LDIR
|
||||||
|
OUT (SLOT3),A
|
||||||
|
JP SAVEDIR
|
||||||
|
;
|
||||||
110
DSS/API/RmDir.asm
Normal file
110
DSS/API/RmDir.asm
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
||||||
|
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
CALL .START
|
||||||
|
PUSH AF
|
||||||
|
LD HL,CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
CALL DIR_PATH_CHANGE.Current
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.START: CALL GETWORD
|
||||||
|
RET C
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
CALL LOADDIR
|
||||||
|
CALL SEARCH.Dir
|
||||||
|
RET C
|
||||||
|
LD HL,(HANDBUF+_sFM.ST_CLUSTER)
|
||||||
|
PUSH IX
|
||||||
|
.RMD17: PUSH HL
|
||||||
|
CALL NSECTOR
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||||
|
.RMD12: PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
|
||||||
|
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||||
|
LD BC,1*256 + Dss.DRV.Read
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
RST ToDSS.DRV
|
||||||
|
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
|
||||||
|
LD B,16 ;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||||||
|
LD HL,CORE_BUFFERS.SECBUF
|
||||||
|
.RMD10: LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JP Z,.RMD15 ;DIR EMPTY
|
||||||
|
CP "."
|
||||||
|
JR Z,.RMD14
|
||||||
|
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥¨ï ä ©«
|
||||||
|
JR Z,.RMD14
|
||||||
|
LD DE,11 ;!HARDCODE ᬥé. ¤® ¡ ©â âਡã⮢
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(HL)
|
||||||
|
SBC HL,DE
|
||||||
|
;BIT 3,A
|
||||||
|
AND %0000'1000
|
||||||
|
JP Z,.error ;DIR NOT EMPTY
|
||||||
|
.RMD14: LD DE,#0020
|
||||||
|
ADD HL,DE
|
||||||
|
DJNZ .RMD10
|
||||||
|
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
INC IX
|
||||||
|
LD A,XH
|
||||||
|
OR XL
|
||||||
|
JR NZ,.RMD11
|
||||||
|
INC HL
|
||||||
|
.RMD11: POP AF
|
||||||
|
DEC A
|
||||||
|
JR NZ,.RMD12
|
||||||
|
POP HL ; ®¬¥à ª« áâ¥à
|
||||||
|
CALL R_F_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
JR NC,.RMD17 ; ¥ ª®¥æ 楯®çª¨
|
||||||
|
.RMD18: POP IX
|
||||||
|
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
|
.RMD15: POP IX
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
POP HL
|
||||||
|
JR .RMD18
|
||||||
|
.error: POP IX
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
38
DSS/API/ScanDRV.asm
Normal file
38
DSS/API/ScanDRV.asm
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
;R12
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ®¬¥à ¯®á«¥¤¥£® «®£. ¤¨áª ¢ á¨á⥬¥
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; INCLUDE 'ScanDRV.asm'
|
||||||
|
;!TODO ª®¤ ¤¨ª® ª®áâë«ìë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
|
||||||
|
SCANDRV:
|
||||||
|
; 1. § ¯®¬¨ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
LD A,R
|
||||||
|
DI
|
||||||
|
PUSH AF
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 2. ã§ ñ¬ ¡ãª¢ã ¡ãâ-¤¨áª
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
CALL BOOTDSK.GET
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 3. ¢ë§ë¢ ¥¬ à¥áª
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; A = Boot disk
|
||||||
|
LD B,A
|
||||||
|
LD A,Dss.DRV.RescanDRV
|
||||||
|
LD C,Dss.DRV.RescanDRV
|
||||||
|
RST ToDSS.DRV
|
||||||
|
LD (LDRIVE),A
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 4. ¢ë室
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
POP AF
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
30
DSS/API/SetDateTime.asm
Normal file
30
DSS/API/SetDateTime.asm
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #18. ˆ§¬¥¥¨¥ ¤ âë ¨ ¢à¥¬¥¨ ä ©« .
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¤¥áªà¨¯â®à ä ©«
|
||||||
|
; D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
PUT_D_T:
|
||||||
|
PUSH AF
|
||||||
|
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
POP AF ; ¤¥áªà¨¯â®à
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
CALL SET_FM
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
LD (IY+_sFM.TIME),E
|
||||||
|
LD (IY+_sFM.TIME+1),D
|
||||||
|
LD (IY+_sFM.DATE),C
|
||||||
|
LD (IY+_sFM.DATE+1),B
|
||||||
|
SET 7,(IY+_sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
180
DSS/API/Time.asm
Normal file
180
DSS/API/Time.asm
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #21. ’¥ªãé ï ¤ â ¨ ¢à¥¬ï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; C - ¤¥ì ¥¤¥«¨
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
SYSTIME:
|
||||||
|
LD C,BIOS.CMOS_TEST
|
||||||
|
RST ToBIOS
|
||||||
|
JP C,.NOCMOS
|
||||||
|
LD D,7 ;DAY
|
||||||
|
CALL RCMOS
|
||||||
|
PUSH AF
|
||||||
|
LD D,8 ;MONTH
|
||||||
|
CALL RCMOS
|
||||||
|
POP DE
|
||||||
|
LD E,A
|
||||||
|
PUSH DE
|
||||||
|
LD D,4 ;HOUR
|
||||||
|
CALL RCMOS
|
||||||
|
PUSH AF
|
||||||
|
LD D,2 ;MINUTE
|
||||||
|
CALL RCMOS
|
||||||
|
POP DE
|
||||||
|
LD E,A
|
||||||
|
PUSH DE
|
||||||
|
LD D,0 ;SECOND
|
||||||
|
CALL RCMOS
|
||||||
|
PUSH AF
|
||||||
|
LD D,6 ;WEEK DAY
|
||||||
|
LD C,BIOS.CMOS_RD
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE
|
||||||
|
LD E,A
|
||||||
|
PUSH DE
|
||||||
|
LD D,9 ;YEAR
|
||||||
|
CALL RCMOS ;READ AND CONVERT TO DECIMAL
|
||||||
|
PUSH AF
|
||||||
|
LD D,#32 ;CENTURY
|
||||||
|
LD C,BIOS.CMOS_RD
|
||||||
|
RST ToBIOS
|
||||||
|
LD XH,A
|
||||||
|
|
||||||
|
POP AF
|
||||||
|
CP 80 ;R001, TEST DECIMAL FIX
|
||||||
|
PUSH AF
|
||||||
|
JR C,.XXIAGE
|
||||||
|
LD A,#19
|
||||||
|
CP XH
|
||||||
|
JR Z,.GOODAGE
|
||||||
|
JR .BADAGE
|
||||||
|
.XXIAGE:
|
||||||
|
LD A,#20
|
||||||
|
CP XH
|
||||||
|
JR Z,.GOODAGE
|
||||||
|
.BADAGE:
|
||||||
|
PUSH AF
|
||||||
|
LD D,#32 ;CENTURY
|
||||||
|
LD C,BIOS.CMOS_WR
|
||||||
|
RST ToBIOS
|
||||||
|
POP AF
|
||||||
|
LD XH,A
|
||||||
|
.GOODAGE:
|
||||||
|
POP AF
|
||||||
|
LD XL,A
|
||||||
|
LD A,XH
|
||||||
|
CALL BCD2HEX
|
||||||
|
LD L,A
|
||||||
|
LD H,0
|
||||||
|
LD C,L
|
||||||
|
LD B,H
|
||||||
|
LD XH,B
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,BC
|
||||||
|
ADD HL,HL ;*10
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,BC
|
||||||
|
ADD HL,HL ;*10(100)
|
||||||
|
EX DE,HL
|
||||||
|
ADD IX,DE
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.NOCMOS:
|
||||||
|
.NC_DAY+1:
|
||||||
|
LD DE,DAY*256+MONTH ;DAY/MONTH
|
||||||
|
.NC_HOUR+1:
|
||||||
|
LD HL,0 ;HOUR/MINUTE
|
||||||
|
.NC_SEC+1:
|
||||||
|
LD BC,1 ;SECOND/WEEKDAY
|
||||||
|
.NC_YEAR+2:
|
||||||
|
LD IX,YEAR ;YEAR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #22. “áâ ®¢¨âì ⥪ãéãî ¤ âã ¨ ¢à¥¬ï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
SETTIME:
|
||||||
|
PUSH IX
|
||||||
|
PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD C,BIOS.CMOS_TEST
|
||||||
|
RST ToBIOS
|
||||||
|
JP C,.NOCMOS2
|
||||||
|
POP AF
|
||||||
|
PUSH AF
|
||||||
|
LD D,7 ;DAY
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,8 ;MONTH
|
||||||
|
CALL WCMOS
|
||||||
|
POP AF
|
||||||
|
PUSH AF
|
||||||
|
LD D,4 ;HOUR
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,2 ;MINUTE
|
||||||
|
CALL WCMOS
|
||||||
|
POP AF
|
||||||
|
PUSH AF
|
||||||
|
LD D,0 ;SECOND
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,6 ;WEEK DAY
|
||||||
|
LD C,BIOS.CMOS_WR
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
POP HL
|
||||||
|
XOR A
|
||||||
|
LD DE,100
|
||||||
|
.YR: INC A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,.YR
|
||||||
|
ADD HL,DE
|
||||||
|
DEC A
|
||||||
|
PUSH HL
|
||||||
|
LD D,#32 ;CENTURY
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,9 ;YEAR
|
||||||
|
CALL WCMOS
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; !FIXIT ®¢ë© ¡¨®á ¢ëáâ ¢«ï¥â ¢à¥¬ï, ¥á«¨ á ¨¬ çâ®-â® ¥ â ª.
|
||||||
|
.NOCMOS2:
|
||||||
|
LD C,0
|
||||||
|
LD (SYSTIME.NC_DAY),DE ;DAY/MONTH
|
||||||
|
LD (SYSTIME.NC_HOUR),HL ;HOUR/MINUTE
|
||||||
|
LD (SYSTIME.NC_SEC),BC ;SECOND/WEEKDAY
|
||||||
|
LD (SYSTIME.NC_YEAR),IX ;YEAR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
19
DSS/API/Version.asm
Normal file
19
DSS/API/Version.asm
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #00. ‚¥àá¨ï „Ž‘.
|
||||||
|
; ‚®§¢à é ¥â ®¬¥à ¢¥àᨨ ¤¨áª®¢®© á¨á⥬ë.
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: DE = ®¬¥à ¢¥àᨨ/¬®¤¨ä¨ª 樨
|
||||||
|
; BC = ®¬¥à ¡¨«¤ (0..999)
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
VERSION:
|
||||||
|
;XOR A
|
||||||
|
;LD H,A ;!TODO ¯¨å âì áî¤ OSINFO
|
||||||
|
;LD L,A
|
||||||
|
LD HL,0
|
||||||
|
LD DE,VERS*256+MODF
|
||||||
|
LD BC,BUILD
|
||||||
|
RET
|
||||||
|
|
||||||
|
//;R10
|
||||||
|
//OSINFO:
|
||||||
|
//OSINFO_SIG: DB "OSINFOSTRUCTURE",0
|
||||||
57
DSS/API/bootDsk.asm
Normal file
57
DSS/API/bootDsk.asm
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #09. <20>®¬¥à á¨á⥬®£® ¤¨áª .
|
||||||
|
; ‚®§¢à é ¥â ®¬¥à ¤¨áª , c ª®â®à®£® § £à㦥 á¨á⥬ .
|
||||||
|
;
|
||||||
|
; ¢å®¤: B = 0 (01h - ¨á¯. boot-§ £àã§ç¨ª á¨á⥬ë)
|
||||||
|
; ¢ë室: A - ®¬¥à á¨á⥬®£® ¤¨áª (0=A,1=B,..)
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
BOOTDSK:
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET
|
||||||
|
DEC B
|
||||||
|
.chg: JR Z,.SET ;R13 ¬¥ï¥âáï JR ‘,SETBOOT ¯®á«¥ ¯¥à¢®£® 㤠箣® ¨á¯®«¥¨ï SETBOOT
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.GET: ;GET BOOT DISK
|
||||||
|
.NUM+1: LD A,0 ;R09
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; ‘®®¡é¨âì DSS á ª ª®£® ¤¨áª § £à㦠¥âáï á¨á⥬ .
|
||||||
|
; ˆá¯. § £àã§ç¨ª á¨áâ¥¬ë ¤«ï ¨¨æ. ï祩ª¨ "boot_disk".
|
||||||
|
.SET: LD B,A ;SET BOOT DISK
|
||||||
|
LD C,0
|
||||||
|
.loop: PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD DE,#55AA
|
||||||
|
LD BC,256*0 + Dss.DRV.GenIOCTL
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP BC
|
||||||
|
JR C,.NoSupport
|
||||||
|
EX AF,AF' ;PHISICAL DRIVE NUMBER
|
||||||
|
CP B
|
||||||
|
JR NZ,.NoSupport
|
||||||
|
;R13
|
||||||
|
LD A,#38 ; opcode for JR C,addr
|
||||||
|
LD (BOOTDSK.chg),A
|
||||||
|
;R13
|
||||||
|
LD A,C
|
||||||
|
LD (BOOTDSK.NUM),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.NoSupport:
|
||||||
|
INC C
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
CP C
|
||||||
|
JR NZ,.loop
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
; <20>®¬¥à ¯®á«¥¤¥£® ¤¨áª ¢ á¨á⥬¥
|
||||||
|
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
|
||||||
|
IF COMPILE_UNUSED_CODE
|
||||||
|
TDRIVE: DB #00
|
||||||
|
TCLUST: DW #0000
|
||||||
|
TCOUNT: DW #0000
|
||||||
|
ENDIF
|
||||||
|
;
|
||||||
16
DSS/API/curDisk.asm
Normal file
16
DSS/API/curDisk.asm
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #02. <20>®¬¥à ⥪ã饣® ¤¨áª .
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ®¬¥à ¤¨áª (0=A,1=B,..)
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
CURDISK_FN:
|
||||||
|
LD A,(CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
RET NC
|
||||||
|
LD A,DSS_Error.sys.INVALID_DRIVE
|
||||||
|
RET
|
||||||
|
CURDISK: LD A,(FatBuffer.DRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
139
DSS/API/diskINF.asm
Normal file
139
DSS/API/diskINF.asm
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; [ ] ®¢ ï ¯®¤äãªæ¨ï á ¡¨â®¬ 7 ¢ ॣ. €
|
||||||
|
; ‚®§¢à é ¥â ¨ä®à¬ æ¨î ®¡ ®¡é¥¬ ¨ ᢮¡®¤®¬ ¯à®áâà á⢥ ¤¨áª®¢®£®
|
||||||
|
; ãáâனá⢠.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ®¬¥à ¤¨áª (0=A,1=B .. 25=Z. #FF-⥪ã騩)
|
||||||
|
; <09>ਠA bit7 = 1:
|
||||||
|
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥ëå ¤ ëå:
|
||||||
|
; B != 0 - áç¨â âì ᢮¡®¤®¥ ¬¥áâ®
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; ” ©«®¢ ï á¨á⥬
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; Œ¥âª ¤¨áª
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; ‡ १¥à¢¨à®¢ ®...
|
||||||
|
; ;
|
||||||
|
; A xor #80 - ®¬¥à ¤¨áª
|
||||||
|
;
|
||||||
|
; ¢ë室: A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å, ¥á«¨ CF=0
|
||||||
|
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||||
|
; DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
||||||
|
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||||||
|
MACRO _mCOPY_LOOP
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDIR
|
||||||
|
; .loop:
|
||||||
|
; LD (HL),A
|
||||||
|
; INC DE
|
||||||
|
; INC HL
|
||||||
|
; LD A,(DE)
|
||||||
|
; DJNZ .loop
|
||||||
|
ENDM
|
||||||
|
;
|
||||||
|
DISKINF:; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||||||
|
LD C,B
|
||||||
|
LD B,1
|
||||||
|
;
|
||||||
|
CP #80
|
||||||
|
JR C,.CustomDisk
|
||||||
|
CP #FF
|
||||||
|
JR Z,.CurrentDisk
|
||||||
|
; more info
|
||||||
|
LD B,C
|
||||||
|
PUSH HL
|
||||||
|
AND %0111'1111
|
||||||
|
CALL .CustomDisk
|
||||||
|
JR C,.error
|
||||||
|
;
|
||||||
|
EX (SP),HL
|
||||||
|
PUSH AF
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
;;;;
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,CORE_BUFFERS.BootSector.ID_FAT
|
||||||
|
LD A,8 ;!HARDCODE _sBOOT_SEC.ID_FAT.length
|
||||||
|
_mCOPY_LOOP
|
||||||
|
;
|
||||||
|
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
|
||||||
|
LD A,4 ;!HARDCODE _sBOOT_SEC.BPB_SERIAL_NUMBER
|
||||||
|
_mCOPY_LOOP
|
||||||
|
;
|
||||||
|
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
|
||||||
|
LD A,11 ;!HARDCODE _sBOOT_SEC.BPB_LABEL
|
||||||
|
_mCOPY_LOOP
|
||||||
|
;
|
||||||
|
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
;;;;
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
POP AF
|
||||||
|
.error: POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;CP #FF ; !FIXIT WorkDirectory
|
||||||
|
;!TEST Current Dir
|
||||||
|
;JR Z,CURRDS ;R06
|
||||||
|
.CurrentDisk:
|
||||||
|
LD A,(CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
LD HL,FatBuffer.DRIVE
|
||||||
|
CP (HL)
|
||||||
|
JR Z,.CheckFreeSpace
|
||||||
|
;
|
||||||
|
.CustomDisk:
|
||||||
|
PUSH BC
|
||||||
|
CALL CHNDISK ;R06
|
||||||
|
POP BC
|
||||||
|
RET C ;R06
|
||||||
|
;
|
||||||
|
.CheckFreeSpace:
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
OR B
|
||||||
|
CALL NZ,.CURRDS
|
||||||
|
;
|
||||||
|
;
|
||||||
|
.FRESP2:
|
||||||
|
LD D,B
|
||||||
|
LD E,C
|
||||||
|
LD HL,(FAT_Max_Cluster)
|
||||||
|
DEC HL
|
||||||
|
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.CURRDS:
|
||||||
|
LD HL,2
|
||||||
|
LD BC,0
|
||||||
|
.FRESP: PUSH BC
|
||||||
|
CALL R_F_FAT
|
||||||
|
POP BC
|
||||||
|
CP DSS_Error.sys.DISK_FULL
|
||||||
|
RET Z
|
||||||
|
|
||||||
|
LD A,E
|
||||||
|
OR D
|
||||||
|
JR NZ,.SKIC
|
||||||
|
INC BC
|
||||||
|
.SKIC: INC HL
|
||||||
|
JP .FRESP
|
||||||
|
;
|
||||||
2397
DSS/DOS5.ASM
2397
DSS/DOS5.ASM
File diff suppressed because it is too large
Load Diff
@ -961,9 +961,10 @@ WRITE: LD (.R_POINT),HL
|
|||||||
////////////// NEW //////////////////
|
////////////// NEW //////////////////
|
||||||
; in: HL - CLUSTER
|
; in: HL - CLUSTER
|
||||||
; out: HL:IX - SECTOR
|
; out: HL:IX - SECTOR
|
||||||
NSECTOR: DEC HL
|
NSECTOR:
|
||||||
DEC HL
|
|
||||||
LD DE,0
|
LD DE,0
|
||||||
|
DEC HL
|
||||||
|
DEC HL
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||||
XOR 1
|
XOR 1
|
||||||
JR Z,.skip
|
JR Z,.skip
|
||||||
@ -971,7 +972,8 @@ NSECTOR: DEC HL
|
|||||||
RRA
|
RRA
|
||||||
.loop: ADD HL,HL
|
.loop: ADD HL,HL
|
||||||
RL E
|
RL E
|
||||||
; RL D
|
RL D
|
||||||
|
;
|
||||||
RRA
|
RRA
|
||||||
JP NC,.loop
|
JP NC,.loop
|
||||||
;
|
;
|
||||||
@ -984,6 +986,7 @@ NSECTOR: DEC HL
|
|||||||
LD D,A
|
LD D,A
|
||||||
LD E,A
|
LD E,A
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
|
;!TODO ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«¥¨¥ HL:IX?
|
||||||
RET
|
RET
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
512
DSS/DOS_Proc.asm
Normal file
512
DSS/DOS_Proc.asm
Normal file
@ -0,0 +1,512 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||||
|
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||||
|
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
|
;R10 - 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
|
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||||
|
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||||
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
|
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
||||||
|
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
||||||
|
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||||
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: FAT_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; HL - 11 bytes filename "FILENAMEEXT"
|
||||||
|
; DE - DOS filename "FILENAME.EXT",0
|
||||||
|
; GetName:
|
||||||
|
; LD BC,#08FF
|
||||||
|
; .GETN1: LD A,(HL)
|
||||||
|
; CP " "
|
||||||
|
; JR NZ,.GETN3
|
||||||
|
; .GETN2: INC HL
|
||||||
|
; DJNZ .GETN2
|
||||||
|
; JR .GETN4
|
||||||
|
; .GETN3: LDI
|
||||||
|
; DJNZ .GETN1
|
||||||
|
; ;
|
||||||
|
; .GETN4: LD A,(HL)
|
||||||
|
; CP " "
|
||||||
|
; LD A,"."
|
||||||
|
; JR NZ,.GETN5
|
||||||
|
; LD A,#00
|
||||||
|
; .GETN5: LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; RET Z
|
||||||
|
; LD B,#03
|
||||||
|
; .GETN6: LD A,(HL)
|
||||||
|
; CP " "
|
||||||
|
; RET Z
|
||||||
|
; LDI
|
||||||
|
; XOR A
|
||||||
|
; LD (DE),A
|
||||||
|
; DJNZ .GETN6
|
||||||
|
; RET
|
||||||
|
;---------------;---------------;---------------
|
||||||
|
GetName:
|
||||||
|
LD BC,#08FF ;!HARDCODE ¤«¨ ¨¬¥¨ + áçñâ稪
|
||||||
|
LD A,' '
|
||||||
|
.loop: CP (HL)
|
||||||
|
JR Z,.skip
|
||||||
|
LDI
|
||||||
|
DJNZ .loop
|
||||||
|
;;;;
|
||||||
|
JP .extension
|
||||||
|
;;;;
|
||||||
|
.skip: LD C,B
|
||||||
|
LD B,0
|
||||||
|
; CF=0
|
||||||
|
ADC HL,BC
|
||||||
|
;;;;
|
||||||
|
.extension:
|
||||||
|
CP (HL)
|
||||||
|
LD A,"."
|
||||||
|
JR NZ,.copy_extension
|
||||||
|
XOR A
|
||||||
|
.copy_extension:
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
RET Z ;no copy extension
|
||||||
|
; copy extension
|
||||||
|
LD BC,#03FF ;!HARDCODE ¤«¨ à áè¨à¥¨ï + áçñâ稪
|
||||||
|
LD A,' '
|
||||||
|
.loop2: CP (HL)
|
||||||
|
JR Z,.exit
|
||||||
|
LDI
|
||||||
|
DJNZ .loop2
|
||||||
|
.exit: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||||
|
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||||
|
; ¢ë室: (TMPNAME)
|
||||||
|
GETWORD:
|
||||||
|
; !TEST
|
||||||
|
INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
DEC HL
|
||||||
|
CP ':'
|
||||||
|
JR NZ,.dir_loop
|
||||||
|
|
||||||
|
LD A,(HL)
|
||||||
|
CP 'a'
|
||||||
|
JR C,.next
|
||||||
|
CP '{'
|
||||||
|
JR NC,.next
|
||||||
|
SUB #20
|
||||||
|
.next: SUB 'A'
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
PUSH HL
|
||||||
|
CALL CHNDISK
|
||||||
|
;CALL OPENDSK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CP ' ' ;
|
||||||
|
RET Z
|
||||||
|
CP '\' ;
|
||||||
|
SCF
|
||||||
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
|
RET NZ
|
||||||
|
INC HL
|
||||||
|
;
|
||||||
|
.dir_loop:
|
||||||
|
LD DE,TMPNAME
|
||||||
|
LD BC,#0DFF
|
||||||
|
;
|
||||||
|
.loop: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP '\' ;
|
||||||
|
JR Z,.DIR_NAME
|
||||||
|
; AND A
|
||||||
|
; JR Z,.DIR_NAME
|
||||||
|
;CP ':'
|
||||||
|
;JR Z,.DRV_NAME
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
CP ' '+1
|
||||||
|
CCF
|
||||||
|
RET NC
|
||||||
|
DJNZ .loop
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.DIR_NAME:
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
PUSH HL
|
||||||
|
LD HL,TMPNAME
|
||||||
|
CALL OPENDIR
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
JR .dir_loop
|
||||||
|
; .DRV_NAME:
|
||||||
|
; LD A,(TMPNAME)
|
||||||
|
; CP 'a'
|
||||||
|
; JR C,.next
|
||||||
|
; CP '{'
|
||||||
|
; JR NC,.next
|
||||||
|
; SUB #20
|
||||||
|
; .next: SUB 'A'
|
||||||
|
; PUSH HL
|
||||||
|
; ;!TEST CHNDISK OPENDSK
|
||||||
|
; ;CALL OPENDSK
|
||||||
|
; CALL CHNDISK
|
||||||
|
; ;
|
||||||
|
; POP HL
|
||||||
|
; RET C
|
||||||
|
; JR .loop
|
||||||
|
;
|
||||||
|
|
||||||
|
; <20>ãä¥à ¨¬¥¨ 8.3 ä®à¬ â
|
||||||
|
TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; IN: A - drive number
|
||||||
|
;
|
||||||
|
OPENDSK:
|
||||||
|
;!TEST DRV.Open ®¡å®¤ R10
|
||||||
|
LD C,A
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
CP C
|
||||||
|
IF CHECK_DRIVE_CHANGE
|
||||||
|
JR NZ,.open
|
||||||
|
PUSH BC
|
||||||
|
LD C,Dss.DRV.MediaCheck
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP BC
|
||||||
|
ENDIF
|
||||||
|
JR Z,.exit
|
||||||
|
|
||||||
|
.open: LD A,C
|
||||||
|
;
|
||||||
|
.force: PUSH AF
|
||||||
|
LD C,Dss.DRV.Open
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP BC
|
||||||
|
JP C,.error
|
||||||
|
LD A,B
|
||||||
|
LD (FatBuffer.DRIVE),A
|
||||||
|
CALL RD_BPB
|
||||||
|
RET C
|
||||||
|
.exit: LD A,(LDRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.error: CP DSS_Error.sys.INVALID_DRIVE
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
LD A,DSS_Error.sys.NOT_READY
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
OPENDIR:;!TEST ;[x] some optimize
|
||||||
|
;XOR A
|
||||||
|
;CALL SET_FM
|
||||||
|
LD IY,CORE_BUFFERS.FM_BUF
|
||||||
|
;
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.SUBDIR
|
||||||
|
.REROOT1:
|
||||||
|
LD DE,0
|
||||||
|
;!TEST ;[x] some optimize
|
||||||
|
;LD (IY+_sFM.ST_CLUSTER),E
|
||||||
|
;LD (IY+_sFM.ST_CLUSTER+1),D
|
||||||
|
EX DE,HL
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL
|
||||||
|
EX DE,HL
|
||||||
|
;
|
||||||
|
CALL LOADDIR
|
||||||
|
LD HL,WorkDirectory
|
||||||
|
LD (HL),'\'
|
||||||
|
INC HL
|
||||||
|
LD (HL),#00
|
||||||
|
; CF=0
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
|
.SUBDIR:
|
||||||
|
CP "."
|
||||||
|
JR NZ,.SUBDIR2
|
||||||
|
;!TEST ;[x] some optimize
|
||||||
|
;LD A,(IY+_sFM.ST_CLUSTER) ;R005
|
||||||
|
LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;R005
|
||||||
|
;
|
||||||
|
OR (IY+_sFM.ST_CLUSTER+1) ;R005
|
||||||
|
JR NZ,.SUDI1 ;R005
|
||||||
|
INC HL ;R005
|
||||||
|
LD A,(HL) ;R005
|
||||||
|
OR A ;R005
|
||||||
|
DEC HL ;R005
|
||||||
|
JR Z,.REROOT1 ;R005
|
||||||
|
.SUDI1: EXX
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD DE,MASKARE+1
|
||||||
|
LD BC,10 ;!HARDCODE
|
||||||
|
LD (HL),' '
|
||||||
|
LDIR
|
||||||
|
EXX
|
||||||
|
LD DE,MASKARE
|
||||||
|
.loop: LDI
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.loop
|
||||||
|
JR .SUBDIR3
|
||||||
|
.SUBDIR2:
|
||||||
|
CALL MASK.name
|
||||||
|
RET C
|
||||||
|
.SUBDIR3:
|
||||||
|
CALL FINDDIR
|
||||||
|
RET C
|
||||||
|
;!TEST ;[x] some optimize
|
||||||
|
;LD (IY+_sFM.ST_CLUSTER),E
|
||||||
|
;LD (IY+_sFM.ST_CLUSTER+1),D
|
||||||
|
;LD DE,#4000 ;!HARDCODE
|
||||||
|
;LD (IY+_sFM.F_SIZE),E
|
||||||
|
;LD (IY+_sFM.F_SIZE+1),D
|
||||||
|
EX DE,HL
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL
|
||||||
|
LD HL,#4000 ;!HARDCODE
|
||||||
|
LD (CORE_BUFFERS.FM_BUF + _sFM.F_SIZE),HL
|
||||||
|
EX DE,HL
|
||||||
|
;
|
||||||
|
CALL LOADDIR
|
||||||
|
; CF=0
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; .custom:
|
||||||
|
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||||
|
; ¢å®¤: hl = 8.3 ¨¬ï
|
||||||
|
; de = ¡ãä¥à ¨¬¥¨ 11 ᨬ¢. ä®à¬ â
|
||||||
|
; ¯à¨ ®è¨¡ª¥ CF - ¥¤®¯. ¨¬ï
|
||||||
|
;
|
||||||
|
; HL - MASK "file*.t??"
|
||||||
|
; DE - 11 bytes filename
|
||||||
|
; RET: C=2 FILE WITHOUT EXTENTION
|
||||||
|
; C=1 FILE WITH EXTENTION
|
||||||
|
MASK: LD HL,TMPNAME
|
||||||
|
.name: LD DE,MASKARE
|
||||||
|
.custom: PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD H,D
|
||||||
|
LD L,E
|
||||||
|
INC DE
|
||||||
|
LD (HL),' '
|
||||||
|
LD BC,10 ;!HARDCODE = size (FileName + Extension - 1)
|
||||||
|
LDIR
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP '.' ;R007
|
||||||
|
SCF ;R007
|
||||||
|
JR Z,.MASKB ;R007
|
||||||
|
CP ' '+1
|
||||||
|
.MASKB: LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
RET C
|
||||||
|
LD BC,#0902 ; B - áç¥â稪
|
||||||
|
.MASK1: LD A,(HL)
|
||||||
|
CP ' '+1
|
||||||
|
CCF
|
||||||
|
RET NC
|
||||||
|
CP '"'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '*'
|
||||||
|
JR Z,.MASK3
|
||||||
|
CP '+'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ','
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '.'
|
||||||
|
JR Z,.MASK5
|
||||||
|
CP '/'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ':'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ';'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '<'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '='
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '>'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '['
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '\'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ']'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '|'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
; CP 'a' ;?????
|
||||||
|
; JR C,.MASK2
|
||||||
|
; CP 'z' + 1
|
||||||
|
; JR NC,.MASK2
|
||||||
|
; SUB #20
|
||||||
|
CALL UPPER ; a..z -> A..Z
|
||||||
|
.MASK2: LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ .MASK1
|
||||||
|
.MASK_ERR:
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.MASK3: LD A,'?'
|
||||||
|
INC HL
|
||||||
|
DJNZ .MASK6
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.MASK6: LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ .MASK6
|
||||||
|
LD B,1
|
||||||
|
JR .MASK1
|
||||||
|
.MASK5: LD A,' '
|
||||||
|
INC HL
|
||||||
|
DJNZ .MASK4
|
||||||
|
LD B,4
|
||||||
|
DEC C
|
||||||
|
JP NZ,.MASK1
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.MASK4: LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ .MASK4
|
||||||
|
LD B,4
|
||||||
|
DEC C
|
||||||
|
JP NZ,.MASK1
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
DIR_PATH_CHANGE:
|
||||||
|
.FullCurrent: LD A,(FatBuffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
LD (CurrentPath),A
|
||||||
|
;
|
||||||
|
.Current: LD HL,CurrentDirectory
|
||||||
|
JP CURRDIR
|
||||||
|
;
|
||||||
|
.FullWork: LD A,(CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
LD (FatBuffer.DRIVE),A
|
||||||
|
;
|
||||||
|
.Work: LD HL,WorkDirectory
|
||||||
|
JP CURRDIR_FN
|
||||||
|
;
|
||||||
|
DIR_PATH_CHECK: LD A,(HL)
|
||||||
|
CP '\'
|
||||||
|
JR NZ,.notRootDir
|
||||||
|
;
|
||||||
|
CALL .checkDrive
|
||||||
|
RET Z
|
||||||
|
LD A,(CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
JP OPENDSK
|
||||||
|
;
|
||||||
|
.notRootDir: INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP ':'
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
.forceCheck: LD HL,CurrentDirectory+1
|
||||||
|
LD BC,CurrentDirectory.DEPTH-1
|
||||||
|
CALL .checkDrive
|
||||||
|
JR Z,.checkDir
|
||||||
|
;
|
||||||
|
LD HL,CurrentPath
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
CP (HL)
|
||||||
|
JR NZ,.gotoPath
|
||||||
|
;
|
||||||
|
.checkDir: LD HL,CurrentDirectory+1
|
||||||
|
LD DE,WorkDirectory+1
|
||||||
|
;
|
||||||
|
.loop: LD A,(DE)
|
||||||
|
AND A
|
||||||
|
JR Z,.end
|
||||||
|
CP (HL)
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
JR Z,.loop
|
||||||
|
JP .gotoPath
|
||||||
|
;
|
||||||
|
.end: CP (HL)
|
||||||
|
RET Z
|
||||||
|
JR .gotoPath
|
||||||
|
;
|
||||||
|
.checkDrive: LD HL,CurrentPath
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
CP (HL)
|
||||||
|
RET
|
||||||
|
.gotoPath: CALL FINDDIR.CHECK_SLASH
|
||||||
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
|
RET C
|
||||||
|
LD HL,CurrentPath
|
||||||
|
JP GETWORD
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CHECK_NAME:
|
||||||
|
LD HL,MASKARE
|
||||||
|
.custom: LD BC,11 ;!HARDCODE
|
||||||
|
LD A,"?"
|
||||||
|
CPIR
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
799
DSS/DOS_X.ASM
799
DSS/DOS_X.ASM
@ -1,799 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: DOS_X
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
|
||||||
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
|
||||||
;R11 - 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
|
||||||
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
|
||||||
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
|
||||||
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
|
||||||
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
|
||||||
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
|
||||||
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
|
||||||
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
|
||||||
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
|
||||||
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
|
||||||
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
; RGADR EQU #89 ;VIDEO CONTROL REGISTER
|
|
||||||
; SLOT0 EQU #82 ;WIN #0000-#3FFF
|
|
||||||
; SLOT1 EQU #A2 ;WIN #4000-#7FFF
|
|
||||||
; SLOT2 EQU #C2 ;WIN #8000-#BFFF
|
|
||||||
; SLOT3 EQU #E2 ;WIN #C000-#FFFF
|
|
||||||
|
|
||||||
; SYSPAGE EQU #FE
|
|
||||||
|
|
||||||
;Commands for restart #10
|
|
||||||
//NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
// SCF
|
|
||||||
// RET
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #00. ‚¥àá¨ï „Ž‘.
|
|
||||||
; ‚®§¢à é ¥â ®¬¥à ¢¥àᨨ ¤¨áª®¢®© á¨á⥬ë.
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: DE = ®¬¥à ¢¥àᨨ/¬®¤¨ä¨ª 樨
|
|
||||||
; BC = ®¬¥à ¡¨«¤ (0..999)
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
VERSION:
|
|
||||||
;XOR A
|
|
||||||
;LD H,A ;!TODO ¯¨å âì áî¤ OSINFO
|
|
||||||
;LD L,A
|
|
||||||
LD HL,0
|
|
||||||
LD DE,VERS*256+MODF
|
|
||||||
LD BC,BUILD
|
|
||||||
RET
|
|
||||||
|
|
||||||
//;R10
|
|
||||||
//OSINFO:
|
|
||||||
//OSINFO_SIG: DB "OSINFOSTRUCTURE",0
|
|
||||||
|
|
||||||
//BOOTDRV: DB 0
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #09. <20>®¬¥à á¨á⥬®£® ¤¨áª .
|
|
||||||
; ‚®§¢à é ¥â ®¬¥à ¤¨áª , c ª®â®à®£® § £à㦥 á¨á⥬ .
|
|
||||||
;
|
|
||||||
; ¢å®¤: B = 0 (01h - ¨á¯. boot-§ £àã§ç¨ª á¨á⥬ë)
|
|
||||||
; ¢ë室: A - ®¬¥à á¨á⥬®£® ¤¨áª (0=A,1=B,..)
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
BOOTDSK:
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JR Z,GETBOOT
|
|
||||||
DEC B
|
|
||||||
.chg: JR Z,SETBOOT ;R13 ¬¥ï¥âáï JR ‘,SETBOOT ¯®á«¥ ¯¥à¢®£® 㤠箣® ¨á¯®«¥¨ï SETBOOT
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;GET BOOT DISK
|
|
||||||
GETBOOT:
|
|
||||||
BOOTDRV+1: LD A,0 ;R09
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;SET BOOT DISK
|
|
||||||
; ‘®®¡é¨âì DSS á ª ª®£® ¤¨áª § £à㦠¥âáï á¨á⥬ .
|
|
||||||
; ˆá¯. § £àã§ç¨ª á¨áâ¥¬ë ¤«ï ¨¨æ. ï祩ª¨ "boot_disk".
|
|
||||||
SETBOOT:
|
|
||||||
LD B,A
|
|
||||||
LD C,0
|
|
||||||
.loop: PUSH BC
|
|
||||||
LD A,C
|
|
||||||
LD DE,#55AA
|
|
||||||
LD BC,256*0 + Dss.DRV.GenIOCTL
|
|
||||||
RST ToDSS.DRV
|
|
||||||
POP BC
|
|
||||||
JR C,.NoSupport
|
|
||||||
EX AF,AF' ;PHISICAL DRIVE NUMBER
|
|
||||||
CP B
|
|
||||||
JR NZ,.NoSupport
|
|
||||||
;R13
|
|
||||||
LD A,#38 ; opcode for JR C,addr
|
|
||||||
LD (BOOTDSK.chg),A
|
|
||||||
;R13
|
|
||||||
LD A,C
|
|
||||||
LD (BOOTDRV),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
.NoSupport:
|
|
||||||
INC C
|
|
||||||
LD A,(LDRIVE)
|
|
||||||
CP C
|
|
||||||
JR NZ,.loop
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;R09
|
|
||||||
|
|
||||||
;!!!!! „ã¡«ì - CHNDISK = OPENDSK
|
|
||||||
/*
|
|
||||||
CHNDISK:
|
|
||||||
PUSH AF
|
|
||||||
LD C,Dss.DRV.Open
|
|
||||||
RST ToDSS.DRV
|
|
||||||
POP BC
|
|
||||||
JP C,NDISK11
|
|
||||||
LD A,B
|
|
||||||
LD (FatBuffer.DRIVE),A
|
|
||||||
CALL RD_BPB
|
|
||||||
RET C
|
|
||||||
LD A,(LDRIVE)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
NDISK11:
|
|
||||||
CP DSS_Error.sys.INVALID_DRIVE
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
LD A,DSS_Error.sys.NOT_READY
|
|
||||||
RET
|
|
||||||
*/
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #02. <20>®¬¥à ⥪ã饣® ¤¨áª .
|
|
||||||
;
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: A - ®¬¥à ¤¨áª (0=A,1=B,..)
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
CURRDSK_FN:
|
|
||||||
LD A,(CurrentPath)
|
|
||||||
SUB 'A'
|
|
||||||
RET NC
|
|
||||||
LD A,DSS_Error.sys.INVALID_DRIVE
|
|
||||||
RET
|
|
||||||
CURRDSK: LD A,(FatBuffer.DRIVE)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; [ ] ®¢ ï ¯®¤äãªæ¨ï á ¡¨â®¬ 7 ¢ ॣ. €
|
|
||||||
; ‚®§¢à é ¥â ¨ä®à¬ æ¨î ®¡ ®¡é¥¬ ¨ ᢮¡®¤®¬ ¯à®áâà á⢥ ¤¨áª®¢®£®
|
|
||||||
; ãáâனá⢠.
|
|
||||||
;
|
|
||||||
; ¢å®¤: A - ®¬¥à ¤¨áª (0=A,1=B .. 25=Z. #FF-⥪ã騩)
|
|
||||||
; <09>ਠA bit7 = 1:
|
|
||||||
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥ëå ¤ ëå:
|
|
||||||
; B != 0 - áç¨â âì ᢮¡®¤®¥ ¬¥áâ®
|
|
||||||
; ;
|
|
||||||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
|
||||||
; ” ©«®¢ ï á¨á⥬
|
|
||||||
; ;
|
|
||||||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
|
||||||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
|
||||||
; ;
|
|
||||||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
|
||||||
; Œ¥âª ¤¨áª
|
|
||||||
; ;
|
|
||||||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
|
||||||
; ‡ १¥à¢¨à®¢ ®...
|
|
||||||
; ;
|
|
||||||
; A xor #80 - ®¬¥à ¤¨áª
|
|
||||||
;
|
|
||||||
; ¢ë室: A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å, ¥á«¨ CF=0
|
|
||||||
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
|
||||||
; DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
|
||||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
|
||||||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
|
||||||
;/////////////////////////////////////////////////////////////////////
|
|
||||||
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
|
||||||
MACRO _mCOPY_LOOP
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
LDIR
|
|
||||||
; .loop:
|
|
||||||
; LD (HL),A
|
|
||||||
; INC DE
|
|
||||||
; INC HL
|
|
||||||
; LD A,(DE)
|
|
||||||
; DJNZ .loop
|
|
||||||
ENDM
|
|
||||||
;
|
|
||||||
DISKINF:; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
|
||||||
LD C,B
|
|
||||||
LD B,1
|
|
||||||
;
|
|
||||||
CP #80
|
|
||||||
JR C,.CustomDisk
|
|
||||||
CP #FF
|
|
||||||
JR Z,.CurrentDisk
|
|
||||||
; more info
|
|
||||||
LD B,C
|
|
||||||
PUSH HL
|
|
||||||
AND %0111'1111
|
|
||||||
CALL .CustomDisk
|
|
||||||
JR C,.error
|
|
||||||
;
|
|
||||||
EX (SP),HL
|
|
||||||
PUSH AF
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
;;;;
|
|
||||||
;
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT
|
|
||||||
LD A,8 ;!HARDCODE _sBOOT_SEC.ID_FAT.length
|
|
||||||
_mCOPY_LOOP
|
|
||||||
;
|
|
||||||
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
|
|
||||||
LD A,4 ;!HARDCODE _sBOOT_SEC.BPB_SERIAL_NUMBER
|
|
||||||
_mCOPY_LOOP
|
|
||||||
;
|
|
||||||
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
|
|
||||||
LD A,11 ;!HARDCODE _sBOOT_SEC.BPB_LABEL
|
|
||||||
_mCOPY_LOOP
|
|
||||||
;
|
|
||||||
|
|
||||||
XOR A
|
|
||||||
LD (DE),A
|
|
||||||
;;;;
|
|
||||||
POP BC
|
|
||||||
POP DE
|
|
||||||
POP AF
|
|
||||||
.error: POP HL
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
|
|
||||||
;CP #FF ; !FIXIT WorkDirectory
|
|
||||||
;!TEST Current Dir
|
|
||||||
;JR Z,CURRDS ;R06
|
|
||||||
.CurrentDisk:
|
|
||||||
LD A,(CurrentPath)
|
|
||||||
SUB 'A'
|
|
||||||
LD HL,FatBuffer.DRIVE
|
|
||||||
CP (HL)
|
|
||||||
JR Z,.CheckFreeSpace
|
|
||||||
;
|
|
||||||
.CustomDisk:
|
|
||||||
PUSH BC
|
|
||||||
CALL CHNDISK ;R06
|
|
||||||
POP BC
|
|
||||||
RET C ;R06
|
|
||||||
|
|
||||||
.CheckFreeSpace:
|
|
||||||
;
|
|
||||||
XOR A
|
|
||||||
OR B
|
|
||||||
CALL NZ,.CURRDS
|
|
||||||
;
|
|
||||||
;
|
|
||||||
.FRESP2:
|
|
||||||
LD D,B
|
|
||||||
LD E,C
|
|
||||||
LD HL,(FAT_Max_Cluster)
|
|
||||||
DEC HL
|
|
||||||
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.CURRDS:
|
|
||||||
LD HL,2
|
|
||||||
LD BC,0
|
|
||||||
.FRESP: PUSH BC
|
|
||||||
CALL R_F_FAT
|
|
||||||
POP BC
|
|
||||||
CP DSS_Error.sys.DISK_FULL
|
|
||||||
RET Z
|
|
||||||
|
|
||||||
LD A,E
|
|
||||||
OR D
|
|
||||||
JR NZ,.SKIC
|
|
||||||
INC BC
|
|
||||||
.SKIC: INC HL
|
|
||||||
JP .FRESP
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
; <20>®¬¥à ¯®á«¥¤¥£® ¤¨áª ¢ á¨á⥬¥
|
|
||||||
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
|
|
||||||
IF COMPILE_UNUSED_CODE
|
|
||||||
TDRIVE: DB #00
|
|
||||||
TCLUST: DW #0000
|
|
||||||
TCOUNT: DW #0000
|
|
||||||
ENDIF
|
|
||||||
;R04SIZE2CL LD DE,(B_P_C)
|
|
||||||
;R04 XOR A
|
|
||||||
;R04 SCF
|
|
||||||
;R04S2C01 RR D
|
|
||||||
;R04 RR E
|
|
||||||
;R04 JR C,S2C02
|
|
||||||
;R04 RR H
|
|
||||||
;R04 RR L
|
|
||||||
;R04 RR B
|
|
||||||
;R04 RR C
|
|
||||||
;R04 JP NC,S2C01
|
|
||||||
;R04 LD A,1
|
|
||||||
;R04 JP S2C01
|
|
||||||
;R04S2C02 OR A
|
|
||||||
;R04 RET Z
|
|
||||||
;R04 INC BC
|
|
||||||
;R04 RET
|
|
||||||
|
|
||||||
;R04L_SEC_X DW 0
|
|
||||||
;R04H_SEC_X DW 0
|
|
||||||
|
|
||||||
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
|
||||||
IF COMPILE_UNUSED_CODE
|
|
||||||
TESTDSK:
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD C,Dss.DRV.MediaCheck
|
|
||||||
RST ToDSS.DRV
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
ENDIF
|
|
||||||
RD_BPB: LD C,SLOT3
|
|
||||||
IN B,(C)
|
|
||||||
PUSH BC
|
|
||||||
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;R08
|
|
||||||
;LD DE,BOOT+#C000
|
|
||||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
|
||||||
;R08
|
|
||||||
LD A,(FatBuffer.DRIVE) ;¢ë§®¢ RD_BPB ¬®¦¥â ¢ ¤ «ì¥©è¥¬ ¯® ¤®¡¨âìáï, ¯ã᪠© ® á ¬ ¤®áâ ñâ ¯¥à¥¬¥ãî DRIVE
|
|
||||||
|
|
||||||
LD C,Dss.DRV.GetBPB
|
|
||||||
RST ToDSS.DRV
|
|
||||||
POP BC
|
|
||||||
OUT (C),B
|
|
||||||
JP C,DOS_X_Error.Not_ready
|
|
||||||
|
|
||||||
//PUSH IY ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
|
||||||
|
|
||||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
|
||||||
LD HL,(CORE_BUFFERS.SECBUF+510) ;R08 ;R07
|
|
||||||
;R05
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
JP NZ,DOS_X_Error.UnknownBPB
|
|
||||||
;R08
|
|
||||||
LD HL,CORE_BUFFERS.SECBUF
|
|
||||||
LD DE,CORE_BUFFERS.BootSector
|
|
||||||
LD BC,_sBOOT_SEC ; size
|
|
||||||
LDIR
|
|
||||||
;
|
|
||||||
|
|
||||||
//LD IY,BootSector ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
|
||||||
//LD A,(IY+_sBOOT_SEC.ID_FORM)
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
|
|
||||||
|
|
||||||
CP #F0
|
|
||||||
JP C,DOS_X_Error.UnknownBPB
|
|
||||||
|
|
||||||
;!TEST
|
|
||||||
;LD HL,0 ; calc. first sector FAT
|
|
||||||
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
|
||||||
;LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
|
||||||
;ADD HL,DE
|
|
||||||
|
|
||||||
//LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
|
||||||
//LD H,(IY+_sBOOT_SEC.RESERVE+1)
|
|
||||||
LD HL,(CORE_BUFFERS.BootSector.RESERVE)
|
|
||||||
;
|
|
||||||
|
|
||||||
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
|
||||||
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
|
|
||||||
; ADD HL,DE
|
|
||||||
|
|
||||||
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
|
|
||||||
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
|
|
||||||
LD (FatBuffer.FAT2_XX),HL
|
|
||||||
|
|
||||||
//LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
|
|
||||||
//LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
|
||||||
LD DE,(CORE_BUFFERS.BootSector.S_P_F)
|
|
||||||
|
|
||||||
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.FAT_NUM) ; amount FATs
|
|
||||||
CP 1
|
|
||||||
JR Z,.loop1
|
|
||||||
DEC A
|
|
||||||
ADD HL,DE
|
|
||||||
LD (FatBuffer.FAT2_XX),HL
|
|
||||||
;C_DATA1
|
|
||||||
.loop1: ADD HL,DE
|
|
||||||
DEC A
|
|
||||||
JR NZ,.loop1
|
|
||||||
LD (FatBuffer.DIR_FRM),HL ; first sector DIR
|
|
||||||
; CF = ? ¬ «® «¨
|
|
||||||
AND A
|
|
||||||
; CF = 0
|
|
||||||
|
|
||||||
//LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors
|
|
||||||
//LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
|
||||||
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
|
||||||
; RL C
|
|
||||||
; RL B
|
|
||||||
; RL C
|
|
||||||
; RL B
|
|
||||||
; RL C
|
|
||||||
; RL B
|
|
||||||
; LD C,B
|
|
||||||
; LD B,0 ; BC - File handels in sectors
|
|
||||||
; LD A,C
|
|
||||||
;;;;
|
|
||||||
LD A,B
|
|
||||||
RL C
|
|
||||||
RLA
|
|
||||||
RL C
|
|
||||||
RLA
|
|
||||||
RL C
|
|
||||||
RLA
|
|
||||||
LD C,A
|
|
||||||
LD B,0 ; BC - File handels in sectors
|
|
||||||
;;;;
|
|
||||||
LD (FatBuffer.F_P_S),A
|
|
||||||
|
|
||||||
//LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
|
|
||||||
//LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
|
|
||||||
LD DE,(CORE_BUFFERS.BootSector.F_P_DIR)
|
|
||||||
|
|
||||||
EX DE,HL
|
|
||||||
DEC HL
|
|
||||||
XOR A
|
|
||||||
;NEXTAD2
|
|
||||||
.loop2: INC A
|
|
||||||
JP Z,DOS_X_Error.UnknownBPB
|
|
||||||
SBC HL,BC
|
|
||||||
JR NC,.loop2
|
|
||||||
|
|
||||||
EX DE,HL
|
|
||||||
LD C,A ; A - sectors in DIR
|
|
||||||
LD B,0
|
|
||||||
LD (FatBuffer.DIR_S_S),A
|
|
||||||
ADD HL,BC ; Start DATA area
|
|
||||||
LD (FatBuffer.DAT_FRM),HL
|
|
||||||
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
IF COMPILE_UNUSED_CODE
|
|
||||||
;LD HL,0
|
|
||||||
|
|
||||||
;LD H,B ; âãâ ¢ B ®«ì ¤®«¦¥ ¡ëâì
|
|
||||||
;LD L,B
|
|
||||||
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
|
||||||
;LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
|
||||||
|
|
||||||
//LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
|
||||||
//LD H,(IY+_sBOOT_SEC.B_P_S+1)
|
|
||||||
LD HL,(CORE_BUFFERS.BootSector.B_P_S) ; Size sector
|
|
||||||
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!TODO FATcacheSize
|
|
||||||
;NEXTAD3
|
|
||||||
; .loop3: ADD HL,BC ; calc. cluster size
|
|
||||||
; DEC A
|
|
||||||
; JR NZ,.loop3
|
|
||||||
;!TODO ¯à®¢¥à¨âì ¯à ¢¨«ì® «¨ áç¨â ¥â
|
|
||||||
XOR 1 ; calc. cluster size
|
|
||||||
JR Z,.loop3.end
|
|
||||||
RRA
|
|
||||||
.loop3: ADD HL,HL
|
|
||||||
RRA
|
|
||||||
JP NC,.loop3
|
|
||||||
.loop3.end:
|
|
||||||
;
|
|
||||||
|
|
||||||
LD (FatBuffer.CLU_LEN),HL
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,#3FFF ;!TODO FATcacheSize
|
|
||||||
XOR A
|
|
||||||
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤ ¯® ¤®¡¨âáï
|
|
||||||
.loop4: INC A
|
|
||||||
JP Z,DOS_X_Error.UnknownBPB
|
|
||||||
SBC HL,DE
|
|
||||||
JR NC,.loop4
|
|
||||||
LD (FatBuffer.C_P_B),A ; A - Clusters per bank (16k)
|
|
||||||
ENDIF
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
|
||||||
LD DE,FatBuffer.MSG
|
|
||||||
LD B,3
|
|
||||||
;R_BPBL1
|
|
||||||
.loop5: LD A,(DE)
|
|
||||||
CP (HL)
|
|
||||||
JP NZ,.IBM_DOS
|
|
||||||
INC HL
|
|
||||||
INC DE
|
|
||||||
DJNZ .loop5
|
|
||||||
;FID
|
|
||||||
.loop6: LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
CP ' '
|
|
||||||
JR Z,.loop6
|
|
||||||
|
|
||||||
CP '1'
|
|
||||||
JP NZ,DOS_X_Error.UnknownBPB
|
|
||||||
LD A,(HL)
|
|
||||||
CP '6' ; FAT16
|
|
||||||
LD HL,#FFFF
|
|
||||||
JR Z,.BPB_FAT
|
|
||||||
CP '2' ; FAT12
|
|
||||||
JP NZ,DOS_X_Error.UnknownBPB
|
|
||||||
LD HL,#0FFF
|
|
||||||
.BPB_FAT:
|
|
||||||
LD (FatBuffer.FAT_TYP),A
|
|
||||||
LD (FatBuffer.ENDCLUS),HL
|
|
||||||
|
|
||||||
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
IF COMPILE_UNUSED_CODE
|
|
||||||
|
|
||||||
LD HL,0
|
|
||||||
|
|
||||||
//LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
|
|
||||||
//LD B,(IY+_sBOOT_SEC.S_P_T+1)
|
|
||||||
LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track
|
|
||||||
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
|
||||||
.BPB_L1: ; calc. sector per cylinder
|
|
||||||
ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,.BPB_L1
|
|
||||||
LD (FatBuffer.S_X_H),HL
|
|
||||||
ENDIF
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
LD DE,(FatBuffer.DAT_FRM)
|
|
||||||
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
|
||||||
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
|
|
||||||
; AND A
|
|
||||||
; SBC HL,DE
|
|
||||||
; EX DE,HL
|
|
||||||
|
|
||||||
//LD L,(IY+_sBOOT_SEC.S_P_D)
|
|
||||||
//LD H,(IY+_sBOOT_SEC.S_P_D+1)
|
|
||||||
LD HL,(CORE_BUFFERS.BootSector.S_P_D)
|
|
||||||
|
|
||||||
LD A,H
|
|
||||||
OR L
|
|
||||||
JP NZ,.HDDSMAL
|
|
||||||
;
|
|
||||||
//LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
|
|
||||||
//LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
|
|
||||||
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS)
|
|
||||||
|
|
||||||
//LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
|
|
||||||
//LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
|
|
||||||
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS+2)
|
|
||||||
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
JP NC,.HDDBIG
|
|
||||||
DEC BC
|
|
||||||
JP .HDDBIG
|
|
||||||
.HDDSMAL:
|
|
||||||
;AND A ;âãâ CF ¯®«î¡ á á¡à®è¥ ¤®«¦¥ ¡ëâì
|
|
||||||
SBC HL,DE
|
|
||||||
LD BC,0
|
|
||||||
.HDDBIG: LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
|
||||||
SCF
|
|
||||||
.S4C01: RRA
|
|
||||||
JR C,.S4C02
|
|
||||||
RR B
|
|
||||||
RR C
|
|
||||||
RR H
|
|
||||||
RR L
|
|
||||||
JP .S4C01
|
|
||||||
.S4C02: INC HL
|
|
||||||
LD (FAT_Max_Cluster),HL
|
|
||||||
|
|
||||||
//POP IY
|
|
||||||
|
|
||||||
; LD DE,FAT
|
|
||||||
; LD HL,0
|
|
||||||
; LD IX,(FAT_FRM)
|
|
||||||
; LD B,3
|
|
||||||
; LD A,(DRIVE)
|
|
||||||
; LD C,Dss.DRV.Read
|
|
||||||
; RST ToDSS.DRV
|
|
||||||
; JP C,RDERR1
|
|
||||||
LD HL,0
|
|
||||||
LD (FatCache),HL
|
|
||||||
|
|
||||||
SET_PAGE_X FATPAGE
|
|
||||||
|
|
||||||
PUSH AF
|
|
||||||
XOR A
|
|
||||||
CALL RE_FAT
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL R_CLUST
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
.IBM_DOS:
|
|
||||||
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
|
|
||||||
CP #F0
|
|
||||||
JR C,DOS_X_Error.UnknownBPB
|
|
||||||
;????? ¤® «¨ ¨§¬¥¨âì?
|
|
||||||
// OR 2
|
|
||||||
// CP #FA ; ID ram-¤¨áª
|
|
||||||
CP #F8 ; ¥á«¨ ¥ F8?
|
|
||||||
;?????
|
|
||||||
LD A,'6'
|
|
||||||
LD HL,#FFFF
|
|
||||||
JP Z,.BPB_FAT
|
|
||||||
|
|
||||||
LD A,'2'
|
|
||||||
LD HL,#0FFF
|
|
||||||
JP .BPB_FAT
|
|
||||||
|
|
||||||
DOS_X_Error:
|
|
||||||
.UnknownBPB:
|
|
||||||
|
|
||||||
//POP IY
|
|
||||||
|
|
||||||
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
.Not_ready:
|
|
||||||
LD A,DSS_Error.sys.NOT_READY
|
|
||||||
; CF = 1
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;!TODO ª ¡ãä¥à ¬!
|
|
||||||
FatBuffer:
|
|
||||||
.MSG: DB 'FAT'
|
|
||||||
.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
|
||||||
.BLOCK: DB #00
|
|
||||||
.DIR_CLU: DW #0000
|
|
||||||
.DRIVE: DB #FF
|
|
||||||
.FAT_FRM:
|
|
||||||
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
|
|
||||||
.FAT2_XX: DW #0000
|
|
||||||
.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR
|
|
||||||
.DIR_FRL:
|
|
||||||
.DIR_FRM: DW #0000 ; MSD_CAT_SEC first sector DIR
|
|
||||||
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
|
||||||
.DIR_S_S: DB #00 ; DIR_SEC_SIZE
|
|
||||||
.DAT_FRM: DW #0000 ; MSD_DAT_SEC
|
|
||||||
.CLU_LEN:
|
|
||||||
.B_P_C: DW #0000 ; CLUSTER_LEN
|
|
||||||
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
|
||||||
.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit)
|
|
||||||
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
|
||||||
.ENDCLUS: DW #FFFF
|
|
||||||
;
|
|
||||||
|
|
||||||
;!TODO ª ¡ãä¥à ¬!
|
|
||||||
CurrentPath: DB 'X'
|
|
||||||
DB ':'
|
|
||||||
CurrentDirectory: DB '\'
|
|
||||||
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
|
||||||
BLOCK CurrentDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
|
||||||
|
|
||||||
IF SAVE_PATH_CODE
|
|
||||||
WorkDirectory: DB '\'
|
|
||||||
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
|
||||||
BLOCK WorkDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
|
||||||
ELSE
|
|
||||||
WorkDirectory EQU CurrentDirectory
|
|
||||||
.DEPTH EQU CurrentDirectory.DEPTH
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
;R12
|
|
||||||
;///////////////////////////////////////////////////////////////////////
|
|
||||||
; ”ãªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
|
|
||||||
;
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: A - ®¬¥à ¯®á«¥¤¥£® «®£. ¤¨áª ¢ á¨á⥬¥
|
|
||||||
;///////////////////////////////////////////////////////////////////////
|
|
||||||
; INCLUDE 'ScanDRV.asm'
|
|
||||||
;!TODO ª®¤ ¤¨ª® ª®áâë«ìë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
|
|
||||||
SCANDRV:
|
|
||||||
; 1. § ¯®¬¨ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
LD A,R
|
|
||||||
DI
|
|
||||||
PUSH AF
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
; 2. ã§ ñ¬ ¡ãª¢ã ¡ãâ-¤¨áª
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
CALL GETBOOT
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
; 3. ¢ë§ë¢ ¥¬ à¥áª
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
; A = Boot disk
|
|
||||||
LD B,A
|
|
||||||
LD A,Dss.DRV.RescanDRV
|
|
||||||
LD C,Dss.DRV.RescanDRV
|
|
||||||
RST ToDSS.DRV
|
|
||||||
LD (LDRIVE),A
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
; 4. ¢ë室
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
POP AF
|
|
||||||
RET PO
|
|
||||||
EI
|
|
||||||
RET
|
|
||||||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
|
||||||
;///////////////////////////////////////////////////////////////////////
|
|
||||||
;
|
|
||||||
|
|
||||||
;GOD EQU 1999-1980*512
|
|
||||||
|
|
||||||
;FHAND DB " "
|
|
||||||
; DB " "
|
|
||||||
; DB #20
|
|
||||||
; DW 0,0,0,0,0
|
|
||||||
; DW #0000
|
|
||||||
; DW 5*32+19+GOD
|
|
||||||
;SAVEC DW #0000
|
|
||||||
;SIZEC DW #0000,#0000
|
|
||||||
;=============================================
|
|
||||||
;//MODULE: DOS_X
|
|
||||||
;[END]
|
|
||||||
|
|
||||||
;R11
|
|
||||||
; IF SAVE_PATH_MACRO
|
|
||||||
; SAVE_CUR_PATH
|
|
||||||
; PUSH IX
|
|
||||||
; PUSH IY
|
|
||||||
; PUSH HL
|
|
||||||
; PUSH DE
|
|
||||||
; PUSH BC
|
|
||||||
; PUSH AF
|
|
||||||
;
|
|
||||||
; SET_PAGE_X ENVPAGE
|
|
||||||
; PUSH AF
|
|
||||||
;
|
|
||||||
; CALL CURRDSK
|
|
||||||
; ADD A,"A"
|
|
||||||
; LD HL,TMP_CURDIR_AUTO
|
|
||||||
; LD (HL),A
|
|
||||||
; INC HL
|
|
||||||
; LD A,":"
|
|
||||||
; LD (HL),A
|
|
||||||
; INC HL
|
|
||||||
; CALL CURRDIR_FN
|
|
||||||
;
|
|
||||||
; POP AF
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
; POP AF
|
|
||||||
; POP BC
|
|
||||||
; POP DE
|
|
||||||
; POP HL
|
|
||||||
; POP IY
|
|
||||||
; POP IX
|
|
||||||
; RET
|
|
||||||
;
|
|
||||||
; BACK_CUR_PATH:
|
|
||||||
; RET NC
|
|
||||||
; .force: PUSH IY
|
|
||||||
; PUSH IX
|
|
||||||
; PUSH HL
|
|
||||||
; PUSH DE
|
|
||||||
; PUSH BC
|
|
||||||
; PUSH AF
|
|
||||||
;
|
|
||||||
; SET_PAGE_X ENVPAGE
|
|
||||||
; PUSH AF
|
|
||||||
;
|
|
||||||
; LD HL,TMP_CURDIR_AUTO
|
|
||||||
; CALL CHDIR
|
|
||||||
;
|
|
||||||
; POP AF
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
; POP AF
|
|
||||||
; POP BC
|
|
||||||
; POP DE
|
|
||||||
; POP HL
|
|
||||||
; POP IX
|
|
||||||
; POP IY
|
|
||||||
; RET
|
|
||||||
; ENDIF
|
|
||||||
;
|
|
||||||
@ -377,7 +377,7 @@ GO_ZERO EQU #0000
|
|||||||
ADRST10: ;DS 512 ;,0
|
ADRST10: ;DS 512 ;,0
|
||||||
;...............................................[LOW ADDRESS ]:
|
;...............................................[LOW ADDRESS ]:
|
||||||
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
||||||
DB low F_START, low CHNDISK_FN, low CURRDSK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
DB low F_START, low CHNDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
||||||
DB low CREATE, low CREAT_N, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
|
DB low CREATE, low CREAT_N, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
|
||||||
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR_FN ; 2 14..1D
|
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR_FN ; 2 14..1D
|
||||||
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
||||||
@ -404,7 +404,7 @@ ADRST10: ;DS 512 ;,0
|
|||||||
;[ ] R09
|
;[ ] R09
|
||||||
ENDIF
|
ENDIF
|
||||||
;...............................................[HIGH ADDRESS]:
|
;...............................................[HIGH ADDRESS]:
|
||||||
DB high F_START, high CHNDISK_FN,high CURRDSK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
DB high F_START, high CHNDISK_FN,high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
||||||
DB high CREATE, high CREAT_N, high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
DB high CREATE, high CREAT_N, high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
||||||
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR_FN
|
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR_FN
|
||||||
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
@ -437,18 +437,47 @@ ADRST10: ;DS 512 ;,0
|
|||||||
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
||||||
INCLUDE "KEYINTER.ASM" ;!FIXIT ¨§-§ ¡ãä¥à á ¢ëà ¢¨¢ ¨¥¬ align 256 ¢ ç «¥ ¯à¨å®¤¨âáï ADRST10 ¤®¡¨¢ âì ã«ï¬¨ ¢ ª®æ¥
|
INCLUDE "KEYINTER.ASM" ;!FIXIT ¨§-§ ¡ãä¥à á ¢ëà ¢¨¢ ¨¥¬ align 256 ¢ ç «¥ ¯à¨å®¤¨âáï ADRST10 ¤®¡¨¢ âì ã«ï¬¨ ¢ ª®æ¥
|
||||||
INCLUDE "VIDEO.ASM"
|
INCLUDE "VIDEO.ASM"
|
||||||
INCLUDE "FAT_X.ASM"
|
INCLUDE "API.ASM"
|
||||||
INCLUDE "DOS_X.ASM"
|
INCLUDE "DOS_Proc.asm"
|
||||||
|
INCLUDE "FS/FAT/FAT.ASM"
|
||||||
INCLUDE "DOS_FM.ASM"
|
INCLUDE "DOS_FM.ASM"
|
||||||
INCLUDE "DOS5.ASM"
|
|
||||||
INCLUDE "EXECUTE.ASM"
|
INCLUDE "EXECUTE.ASM"
|
||||||
INCLUDE "ENVIRON.ASM"
|
INCLUDE "ENVIRON.ASM"
|
||||||
INCLUDE "INTMOUSE.ASM"
|
INCLUDE "INTMOUSE.ASM"
|
||||||
|
INCLUDE "Procedures.asm"
|
||||||
|
|
||||||
|
|
||||||
|
;!FIXIT ª ¡ãä¥à ¬
|
||||||
|
; Œ áᨢ «®£. ®¬¥à®¢ ¡ ®ª à áè¨à¥¨ï DSS
|
||||||
|
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE
|
||||||
|
HANDBUF: BLOCK HANDBUF.SIZE,0
|
||||||
|
;
|
||||||
|
|
||||||
|
MASKARE: BLOCK 8,0 ; ¨¬ï ä ©«
|
||||||
|
BLOCK 3,0 ; à áè.
|
||||||
|
BLOCK 21,0 ; 11+21=32
|
||||||
;
|
;
|
||||||
DISPLAY "DOS-MAIN end address: ",/H,$-1
|
DISPLAY "DOS-MAIN end address: ",/H,$-1
|
||||||
;
|
;
|
||||||
|
|
||||||
|
;!TODO ª ¡ãä¥à ¬!
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
CurrentPath: DB 'X'
|
||||||
|
DB ':'
|
||||||
|
CurrentDirectory: DB '\'
|
||||||
|
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||||||
|
BLOCK CurrentDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
||||||
|
|
||||||
|
IF SAVE_PATH_CODE
|
||||||
|
WorkDirectory: DB '\'
|
||||||
|
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||||||
|
BLOCK WorkDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
||||||
|
ELSE
|
||||||
|
WorkDirectory EQU CurrentDirectory
|
||||||
|
.DEPTH EQU CurrentDirectory.DEPTH
|
||||||
|
ENDIF
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
;
|
;
|
||||||
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
||||||
|
|||||||
@ -50,7 +50,7 @@ INITENV:
|
|||||||
PUSH AF
|
PUSH AF
|
||||||
;
|
;
|
||||||
;R02
|
;R02
|
||||||
LD A,(BOOTDRV)
|
LD A,(BOOTDSK.NUM)
|
||||||
ADD A,'A'
|
ADD A,'A'
|
||||||
LD (DEFAULT_ENV.boot_disk),A
|
LD (DEFAULT_ENV.boot_disk),A
|
||||||
;
|
;
|
||||||
|
|||||||
@ -180,7 +180,7 @@ EX_PATH: EXX
|
|||||||
DEC B
|
DEC B
|
||||||
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||||||
DEC B
|
DEC B
|
||||||
JP Z,GETNAME ;8 ; ŻŕĽŽĄŕ. ¨Źď 11 -> 8.3 äŽŕŹ â
|
JP Z,GetName ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
|
||||||
DEC B
|
DEC B
|
||||||
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||||
EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
|
EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
@ -839,7 +839,7 @@ EXEC: LD (CMDLINE),HL
|
|||||||
EXEC_1: ;LD (CMDLINE),HL
|
EXEC_1: ;LD (CMDLINE),HL
|
||||||
LD HL,(CMDLINE)
|
LD HL,(CMDLINE)
|
||||||
LD A,FAT_ATTR.READ_ONLY
|
LD A,FAT_ATTR.READ_ONLY
|
||||||
LD (OPEN.TMP),A
|
LD (OPEN_FN.TMP),A
|
||||||
CALL GETWORD
|
CALL GETWORD
|
||||||
RET C
|
RET C
|
||||||
; LD HL,TMPNAME
|
; LD HL,TMPNAME
|
||||||
@ -850,7 +850,7 @@ EXEC_1: ;LD (CMDLINE),HL
|
|||||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
RET C
|
RET C
|
||||||
_mINCTASK ;R08
|
_mINCTASK ;R08
|
||||||
CALL OPEN.FILE
|
CALL OPEN_FN.FILE
|
||||||
JR C,.Error
|
JR C,.Error
|
||||||
POP HL ; ã¡¨à ¥¬ «¨è¨© ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
|
POP HL ; ã¡¨à ¥¬ «¨è¨© ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
|
||||||
JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
|
JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
|
||||||
@ -999,7 +999,7 @@ TST_EXT: LD HL,EXE_EXT ; "EXE"
|
|||||||
ERREXE0: LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
ERREXE0: LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
||||||
ERREXE: PUSH AF
|
ERREXE: PUSH AF
|
||||||
LD A,(EXE_FM)
|
LD A,(EXE_FM)
|
||||||
CALL CLOSE
|
CALL CLOSE_FN
|
||||||
_mDECTASK
|
_mDECTASK
|
||||||
POP AF
|
POP AF
|
||||||
RET
|
RET
|
||||||
@ -1166,7 +1166,7 @@ LEAVE: LD A,B
|
|||||||
;[x] 25/10/23 close EXE FM
|
;[x] 25/10/23 close EXE FM
|
||||||
POP AF
|
POP AF
|
||||||
;CALL RES_FM
|
;CALL RES_FM
|
||||||
CALL CLOSE
|
CALL CLOSE_FN
|
||||||
_mDECTASK
|
_mDECTASK
|
||||||
;
|
;
|
||||||
POP AF
|
POP AF
|
||||||
@ -1235,7 +1235,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
|||||||
LD (HL),B
|
LD (HL),B
|
||||||
INC HL
|
INC HL
|
||||||
;!FIXIT âãâ ¢®ááâ ¢«¨¢ âì ¯à ¢¨«ìë© ª â «®£
|
;!FIXIT âãâ ¢®ááâ ¢«¨¢ âì ¯à ¢¨«ìë© ª â «®£
|
||||||
CALL CURRDSK
|
CALL CURDISK
|
||||||
ADD A,'A'
|
ADD A,'A'
|
||||||
LD (HL),A
|
LD (HL),A
|
||||||
INC HL
|
INC HL
|
||||||
|
|||||||
829
DSS/FS/FAT/FAT.asm
Normal file
829
DSS/FS/FAT/FAT.asm
Normal file
@ -0,0 +1,829 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: FAT
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; <20>®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ª â «®£
|
||||||
|
;
|
||||||
|
; ¢å®¤: a= âਡãâ § ¯¨á¨
|
||||||
|
; ¢ë室: de'=¨¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£
|
||||||
|
; (HANDBUF) = file's direcory record
|
||||||
|
; CF - ª â «®£ ¥ ©¤¥
|
||||||
|
SEARCH:
|
||||||
|
.Dir: LD A,FAT_ATTR.DIRECTORY
|
||||||
|
CALL SEARCH.Custom
|
||||||
|
RET NC
|
||||||
|
CP DSS_Error.sys.PATH_NOT_FOUND + 1
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
SCF
|
||||||
|
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.File: LD A,FAT_ATTR.NoDIRnoVolID
|
||||||
|
.Custom: EX AF,AF' ; A = 76ADLSHR
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
;PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
CPL
|
||||||
|
LD C,A
|
||||||
|
LD IX,DIRPAGE.buffer
|
||||||
|
;!TEST 9/11/23
|
||||||
|
; EXX
|
||||||
|
; LD DE,0
|
||||||
|
; EXX
|
||||||
|
;
|
||||||
|
.loop: LD A,(IX+00)
|
||||||
|
OR A
|
||||||
|
JR Z,.error_file_not_found
|
||||||
|
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥ë
|
||||||
|
JR Z,.next_record
|
||||||
|
LD A,(IX+11)
|
||||||
|
AND C
|
||||||
|
JR NZ,.next_record
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD B,11
|
||||||
|
EX DE,HL
|
||||||
|
.loop_compare:
|
||||||
|
LD A,(DE)
|
||||||
|
CP '?'
|
||||||
|
JR Z,.next_char
|
||||||
|
CP (HL)
|
||||||
|
JR NZ,.next_record
|
||||||
|
.next_char:
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ .loop_compare
|
||||||
|
;!TEST 9/11/23 ;[x] some optimize
|
||||||
|
; LD D,XH
|
||||||
|
; LD E,XL
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
EXX
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
LD HL,HANDBUF
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,HANDBUF.SIZE
|
||||||
|
LDIR
|
||||||
|
;POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
EX AF,AF'
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.next_record:
|
||||||
|
;!TEST 9/11/23 ;[x] some optimize
|
||||||
|
; EXX
|
||||||
|
; INC DE
|
||||||
|
; EXX
|
||||||
|
;
|
||||||
|
LD DE,#0020 ;!HARDCODE
|
||||||
|
ADD IX,DE
|
||||||
|
JR NC,.loop
|
||||||
|
.error_too_many_files:
|
||||||
|
;POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.error_file_not_found:
|
||||||
|
;POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;
|
||||||
|
;!TODO ?
|
||||||
|
;GHANDLE:
|
||||||
|
; PUSH DE
|
||||||
|
; PUSH HL
|
||||||
|
; PUSH IX
|
||||||
|
; CALL TESTDSK
|
||||||
|
; JP C,G_HAND1
|
||||||
|
; CALL LOADDIR
|
||||||
|
; POP DE
|
||||||
|
; LD HL,DIR
|
||||||
|
; LD BC,#0020
|
||||||
|
;G_HAND2:
|
||||||
|
; LD A,D
|
||||||
|
; OR E
|
||||||
|
; JP Z,G_HAND3
|
||||||
|
; ADD HL,BC
|
||||||
|
; DEC DE
|
||||||
|
; JP G_HAND2
|
||||||
|
;G_HAND3:
|
||||||
|
; EXX
|
||||||
|
; POP DE
|
||||||
|
; EXX
|
||||||
|
;G_HAND4:
|
||||||
|
; EX DE,HL
|
||||||
|
; LD A,DIRPAGE
|
||||||
|
; CALL BANK
|
||||||
|
; EX DE,HL
|
||||||
|
; LD DE,HANDTA
|
||||||
|
;
|
||||||
|
; DUP 32
|
||||||
|
; LDI
|
||||||
|
; EDUP
|
||||||
|
;
|
||||||
|
; EXX
|
||||||
|
; OUT (SLOT3),A
|
||||||
|
; LD HL,HANDTA
|
||||||
|
;
|
||||||
|
; DUP 32
|
||||||
|
; LDI
|
||||||
|
; EDUP
|
||||||
|
;
|
||||||
|
; EXX
|
||||||
|
; POP BC
|
||||||
|
; DEC BC
|
||||||
|
; LD A,B
|
||||||
|
; OR C
|
||||||
|
; RET Z
|
||||||
|
; PUSH BC
|
||||||
|
; JP G_HAND4
|
||||||
|
;G_HAND1 POP IX
|
||||||
|
; POP HL
|
||||||
|
; POP DE
|
||||||
|
; RET
|
||||||
|
;HANDTA BLOCK 32,0
|
||||||
|
;
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; FIND "MASKAREA" IN DIRECTORY
|
||||||
|
FINDDIR:
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
;
|
||||||
|
PUSH AF
|
||||||
|
LD IX,DIRPAGE.buffer
|
||||||
|
.big_loop:
|
||||||
|
LD A,(IX+00)
|
||||||
|
OR A
|
||||||
|
JR Z,.error
|
||||||
|
CP #E5
|
||||||
|
JR Z,.next_step
|
||||||
|
LD A,(IX+11) ;!HARDCODE
|
||||||
|
AND #10 ;!HARDCODE
|
||||||
|
JR Z,.next_step
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
EX DE,HL
|
||||||
|
LD B,11 ;!HARDCODE
|
||||||
|
.loop: LD A,(DE)
|
||||||
|
CP "?"
|
||||||
|
JR Z,.compared
|
||||||
|
CP (HL)
|
||||||
|
JR NZ,.next_step
|
||||||
|
.compared:
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ .loop
|
||||||
|
;
|
||||||
|
LD A,(IX+0)
|
||||||
|
CP "."
|
||||||
|
JP NZ,.ADDSPEC
|
||||||
|
LD A,(IX+1) ;!HARDCODE
|
||||||
|
CP "."
|
||||||
|
JP NZ,.IT_DIR
|
||||||
|
LD HL,WorkDirectory
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
INC HL
|
||||||
|
LD BC,WorkDirectory.DEPTH
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
JP PO,.error ;[x] 20/11/23 ¯à®¢¥àª ¢ë室 § £à ¨æë
|
||||||
|
DEC HL ;R009
|
||||||
|
DEC HL
|
||||||
|
LD BC,WorkDirectory.DEPTH
|
||||||
|
LD A,'\'
|
||||||
|
CPDR
|
||||||
|
INC HL
|
||||||
|
EX DE,HL
|
||||||
|
; CF = 0
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
JR NZ,.MM3
|
||||||
|
INC HL
|
||||||
|
.MM3: LD (HL),0
|
||||||
|
JP .IT_DIR
|
||||||
|
;
|
||||||
|
.next_step:
|
||||||
|
LD BC,#0020 ;!HARDCODE
|
||||||
|
ADD IX,BC
|
||||||
|
JR NC,.big_loop
|
||||||
|
;
|
||||||
|
.error: POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.ADDSPEC:
|
||||||
|
LD HL,WorkDirectory+1
|
||||||
|
LD BC,WorkDirectory.DEPTH-1
|
||||||
|
CALL .CHECK_SLASH
|
||||||
|
JR C,.error
|
||||||
|
;R011
|
||||||
|
LD A,B
|
||||||
|
AND A
|
||||||
|
JR NZ,.nxt
|
||||||
|
LD A,C
|
||||||
|
CP 8+1+3 ;!HARDCODE ¨¬ï ª â «®£ + â®çª + à áè¨à¥¨¥
|
||||||
|
JR C,.error
|
||||||
|
.nxt: ;
|
||||||
|
LD E,XL
|
||||||
|
LD D,XH
|
||||||
|
; [x] ®¯â¨¬¨§ æ¨ï ¯® à §¬¥àã
|
||||||
|
EX DE,HL
|
||||||
|
CALL GetName
|
||||||
|
EX DE,HL
|
||||||
|
;
|
||||||
|
|
||||||
|
; LD BC,256*8 + ' ' ;!HARDCODE
|
||||||
|
; .MM1: LD A,(DE)
|
||||||
|
; INC DE
|
||||||
|
; CP C
|
||||||
|
; JR Z,.MM2
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; .MM2 DJNZ .MM1 ;x42-40 50-55
|
||||||
|
; LD A,(DE)
|
||||||
|
; INC DE
|
||||||
|
; CP C
|
||||||
|
; JR Z,.MM3
|
||||||
|
; LD (HL),"."
|
||||||
|
; INC HL
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; LD A,(DE)
|
||||||
|
; INC DE
|
||||||
|
; CP C
|
||||||
|
; JR Z,.MM3
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; LD A,(DE)
|
||||||
|
; CP C
|
||||||
|
; JR Z,.MM3
|
||||||
|
; LD (HL),A
|
||||||
|
; .MM2_5: INC HL
|
||||||
|
; .MM3: LD (HL),0
|
||||||
|
; ; JP IT_DIR
|
||||||
|
;
|
||||||
|
.IT_DIR:
|
||||||
|
LD E,(IX+_sFM.ST_CLUSTER)
|
||||||
|
LD D,(IX+_sFM.ST_CLUSTER+1)
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.CHECK_SLASH:
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
;[x] 20/11/23 ¯à®¢¥àª ¢ë室 § £à ¨æë
|
||||||
|
SCF
|
||||||
|
RET PO
|
||||||
|
;
|
||||||
|
DEC HL
|
||||||
|
DEC HL
|
||||||
|
LD A,'\' ; #5C
|
||||||
|
CP (HL)
|
||||||
|
INC HL
|
||||||
|
RET Z
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
|
LOADDIR:
|
||||||
|
XOR A
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
LD IX,0
|
||||||
|
LD B,A ; ®â ç « ä ©«
|
||||||
|
CALL MOVE_FP
|
||||||
|
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
|
||||||
|
PUSH AF
|
||||||
|
;!TEST no ldir
|
||||||
|
; ®ç¨áâ¨âì ª¥è ª â «®£
|
||||||
|
; LD HL,#C000
|
||||||
|
; LD DE,#C001
|
||||||
|
; LD BC,#3FFF
|
||||||
|
; LD (HL),L
|
||||||
|
; LDIR
|
||||||
|
;
|
||||||
|
;
|
||||||
|
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
|
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||||
|
LD D,(IY+_sFM.ST_CLUSTER) ; de=®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||||
|
LD E,(IY+_sFM.ST_CLUSTER+1)
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP Z,.LROTDIR ; root ??
|
||||||
|
LD HL,DIRPAGE.buffer ; ªã¤
|
||||||
|
LD DE,#4000 ; ᪮«ìª®
|
||||||
|
XOR A ; ¤¥áªà¨¯â®à
|
||||||
|
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||||
|
;!FIXIT ¯à®¢¥àª ®è¨¡ªã
|
||||||
|
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.LROTDIR:
|
||||||
|
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
|
||||||
|
LD IX,(FatBuffer.DIR_FRL) ; ®¬¥à «®£. ᥪâ®à
|
||||||
|
LD A,(FatBuffer.DIR_S_S)
|
||||||
|
;!TEST
|
||||||
|
LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
|
CP B
|
||||||
|
JR NC,.RTD1
|
||||||
|
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||||
|
;LD B,32 ; !HARDCODE 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
|
;SUB B
|
||||||
|
;JR NC,.RTD1
|
||||||
|
;ADD A,B
|
||||||
|
;LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||||
|
;
|
||||||
|
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
|
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||||
|
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||||||
|
; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
WRT_HND: SET_PAGE_X DIRPAGE
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
LD IX,DIRPAGE.buffer
|
||||||
|
;TEST 9/11/23
|
||||||
|
; EXX
|
||||||
|
; LD DE,0
|
||||||
|
; EXX
|
||||||
|
;
|
||||||
|
.loop: LD A,(IX+00)
|
||||||
|
OR A
|
||||||
|
JR Z,.WRT_HN2
|
||||||
|
CP #E5
|
||||||
|
JR Z,.WRT_HN2
|
||||||
|
LD BC,#0020
|
||||||
|
ADD IX,BC
|
||||||
|
JR NC,.loop
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,DSS_Error.sys.ROOT_OVERFLOW
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.WRT_HN2:
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD HL,HANDBUF
|
||||||
|
LD BC,HANDBUF.SIZE
|
||||||
|
LDIR
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD HL,DIRPAGE.buffer
|
||||||
|
LD BC,(SAVEDIR.DIRSIZE)
|
||||||
|
DEC BC
|
||||||
|
ADD HL,BC
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,SAVEDIR
|
||||||
|
LD HL,(SAVEDIR.DIRSIZE)
|
||||||
|
LD BC,(FatBuffer.B_P_C)
|
||||||
|
ADD HL,BC
|
||||||
|
LD (SAVEDIR.DIRSIZE),HL
|
||||||
|
AND A
|
||||||
|
JP SAVEDIR
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;!TODO FAT procedures
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ‘¡à®á¨âì ª¥è ª â «®£ ¤¨áª.
|
||||||
|
; ¢å®¤: iy=áâàãªâãà ¤¥áªà¨¯â®à
|
||||||
|
SAVEDIR:
|
||||||
|
XOR A
|
||||||
|
LD HL,0
|
||||||
|
LD IX,0
|
||||||
|
LD B,0
|
||||||
|
CALL MOVE_FP
|
||||||
|
;
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
LD (IY+_sFM.DRIVE),A
|
||||||
|
LD D,(IY+_sFM.ST_CLUSTER)
|
||||||
|
LD E,(IY+_sFM.ST_CLUSTER+1)
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP Z,.SROTDIR
|
||||||
|
LD HL,DIRPAGE.buffer
|
||||||
|
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||||
|
.DIRSIZE+1:
|
||||||
|
LD DE,0
|
||||||
|
XOR A
|
||||||
|
CALL WRITE
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.SROTDIR:
|
||||||
|
LD HL,(FatBuffer.DIR_FRH)
|
||||||
|
LD IX,(FatBuffer.DIR_FRL)
|
||||||
|
LD A,(FatBuffer.DIR_S_S)
|
||||||
|
LD B,32 ;!HARDCODE
|
||||||
|
SUB B
|
||||||
|
JR NC,.RTD1S
|
||||||
|
ADD A,B
|
||||||
|
LD B,A
|
||||||
|
.RTD1S: LD A,(FatBuffer.DRIVE)
|
||||||
|
LD DE,DIRPAGE.buffer
|
||||||
|
LD C,Dss.DRV.Write
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
||||||
|
IF COMPILE_UNUSED_CODE
|
||||||
|
TESTDSK:
|
||||||
|
LD A,(FatBuffer.DRIVE)
|
||||||
|
LD C,Dss.DRV.MediaCheck
|
||||||
|
RST ToDSS.DRV
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
ENDIF
|
||||||
|
RD_BPB: LD C,SLOT3
|
||||||
|
IN B,(C)
|
||||||
|
PUSH BC
|
||||||
|
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;R08
|
||||||
|
;LD DE,BOOT+#C000
|
||||||
|
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||||
|
;R08
|
||||||
|
LD A,(FatBuffer.DRIVE) ;¢ë§®¢ RD_BPB ¬®¦¥â ¢ ¤ «ì¥©è¥¬ ¯® ¤®¡¨âìáï, ¯ã᪠© ® á ¬ ¤®áâ ñâ ¯¥à¥¬¥ãî DRIVE
|
||||||
|
|
||||||
|
LD C,Dss.DRV.GetBPB
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP BC
|
||||||
|
OUT (C),B
|
||||||
|
JP C,DOS_X_Error.Not_ready
|
||||||
|
|
||||||
|
//PUSH IY ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
||||||
|
|
||||||
|
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||||
|
LD HL,(CORE_BUFFERS.SECBUF+510) ;R08 ;R07
|
||||||
|
;R05
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JP NZ,DOS_X_Error.UnknownBPB
|
||||||
|
;R08
|
||||||
|
LD HL,CORE_BUFFERS.SECBUF
|
||||||
|
LD DE,CORE_BUFFERS.BootSector
|
||||||
|
LD BC,_sBOOT_SEC ; size
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
|
||||||
|
//LD IY,BootSector ; ¯®ª ¡¥§ ¨¤¥ªá®£®, ® ¬®¦¥â ¯à¨£®¤¨âìáï
|
||||||
|
//LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
|
||||||
|
|
||||||
|
CP #F0
|
||||||
|
JP C,DOS_X_Error.UnknownBPB
|
||||||
|
|
||||||
|
;!TEST
|
||||||
|
;LD HL,0 ; calc. first sector FAT
|
||||||
|
;LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||||
|
;LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
||||||
|
;ADD HL,DE
|
||||||
|
|
||||||
|
//LD L,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||||
|
//LD H,(IY+_sBOOT_SEC.RESERVE+1)
|
||||||
|
LD HL,(CORE_BUFFERS.BootSector.RESERVE)
|
||||||
|
;
|
||||||
|
|
||||||
|
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
||||||
|
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
|
||||||
|
; ADD HL,DE
|
||||||
|
|
||||||
|
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
|
||||||
|
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
|
||||||
|
LD (FatBuffer.FAT2_XX),HL
|
||||||
|
|
||||||
|
//LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
|
||||||
|
//LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
||||||
|
LD DE,(CORE_BUFFERS.BootSector.S_P_F)
|
||||||
|
|
||||||
|
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.FAT_NUM) ; amount FATs
|
||||||
|
CP 1
|
||||||
|
JR Z,.loop1
|
||||||
|
DEC A
|
||||||
|
ADD HL,DE
|
||||||
|
LD (FatBuffer.FAT2_XX),HL
|
||||||
|
;C_DATA1
|
||||||
|
.loop1: ADD HL,DE
|
||||||
|
DEC A
|
||||||
|
JR NZ,.loop1
|
||||||
|
LD (FatBuffer.DIR_FRM),HL ; first sector DIR
|
||||||
|
; CF = ? ¬ «® «¨
|
||||||
|
AND A
|
||||||
|
; CF = 0
|
||||||
|
|
||||||
|
//LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sectors
|
||||||
|
//LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||||
|
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
|
||||||
|
; RL C
|
||||||
|
; RL B
|
||||||
|
; RL C
|
||||||
|
; RL B
|
||||||
|
; RL C
|
||||||
|
; RL B
|
||||||
|
; LD C,B
|
||||||
|
; LD B,0 ; BC - File handels in sectors
|
||||||
|
; LD A,C
|
||||||
|
;;;;
|
||||||
|
LD A,B
|
||||||
|
RL C
|
||||||
|
RLA
|
||||||
|
RL C
|
||||||
|
RLA
|
||||||
|
RL C
|
||||||
|
RLA
|
||||||
|
LD C,A
|
||||||
|
LD B,0 ; BC - File handels in sectors
|
||||||
|
;;;;
|
||||||
|
LD (FatBuffer.F_P_S),A
|
||||||
|
|
||||||
|
//LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
|
||||||
|
//LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
|
||||||
|
LD DE,(CORE_BUFFERS.BootSector.F_P_DIR)
|
||||||
|
|
||||||
|
EX DE,HL
|
||||||
|
DEC HL
|
||||||
|
XOR A
|
||||||
|
;NEXTAD2
|
||||||
|
.loop2: INC A
|
||||||
|
JP Z,DOS_X_Error.UnknownBPB
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.loop2
|
||||||
|
|
||||||
|
EX DE,HL
|
||||||
|
LD C,A ; A - sectors in DIR
|
||||||
|
LD B,0
|
||||||
|
LD (FatBuffer.DIR_S_S),A
|
||||||
|
ADD HL,BC ; Start DATA area
|
||||||
|
LD (FatBuffer.DAT_FRM),HL
|
||||||
|
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
IF COMPILE_UNUSED_CODE
|
||||||
|
;LD HL,0
|
||||||
|
|
||||||
|
;LD H,B ; âãâ ¢ B ®«ì ¤®«¦¥ ¡ëâì
|
||||||
|
;LD L,B
|
||||||
|
;LD C,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||||
|
;LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||||
|
|
||||||
|
//LD L,(IY+_sBOOT_SEC.B_P_S) ; Size sector
|
||||||
|
//LD H,(IY+_sBOOT_SEC.B_P_S+1)
|
||||||
|
LD HL,(CORE_BUFFERS.BootSector.B_P_S) ; Size sector
|
||||||
|
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!TODO FATcacheSize
|
||||||
|
;NEXTAD3
|
||||||
|
; .loop3: ADD HL,BC ; calc. cluster size
|
||||||
|
; DEC A
|
||||||
|
; JR NZ,.loop3
|
||||||
|
;!TODO ¯à®¢¥à¨âì ¯à ¢¨«ì® «¨ áç¨â ¥â
|
||||||
|
XOR 1 ; calc. cluster size
|
||||||
|
JR Z,.loop3.end
|
||||||
|
RRA
|
||||||
|
.loop3: ADD HL,HL
|
||||||
|
RRA
|
||||||
|
JP NC,.loop3
|
||||||
|
.loop3.end:
|
||||||
|
;
|
||||||
|
|
||||||
|
LD (FatBuffer.CLU_LEN),HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,#3FFF ;!TODO FATcacheSize
|
||||||
|
XOR A
|
||||||
|
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤ ¯® ¤®¡¨âáï
|
||||||
|
.loop4: INC A
|
||||||
|
JP Z,DOS_X_Error.UnknownBPB
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,.loop4
|
||||||
|
LD (FatBuffer.C_P_B),A ; A - Clusters per bank (16k)
|
||||||
|
ENDIF
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||||
|
LD DE,FatBuffer.MSG
|
||||||
|
LD B,3
|
||||||
|
;R_BPBL1
|
||||||
|
.loop5: LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
JP NZ,.IBM_DOS
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ .loop5
|
||||||
|
;FID
|
||||||
|
.loop6: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP ' '
|
||||||
|
JR Z,.loop6
|
||||||
|
|
||||||
|
CP '1'
|
||||||
|
JP NZ,DOS_X_Error.UnknownBPB
|
||||||
|
LD A,(HL)
|
||||||
|
CP '6' ; FAT16
|
||||||
|
LD HL,#FFFF
|
||||||
|
JR Z,.BPB_FAT
|
||||||
|
CP '2' ; FAT12
|
||||||
|
JP NZ,DOS_X_Error.UnknownBPB
|
||||||
|
LD HL,#0FFF
|
||||||
|
.BPB_FAT:
|
||||||
|
LD (FatBuffer.FAT_TYP),A
|
||||||
|
LD (FatBuffer.ENDCLUS),HL
|
||||||
|
|
||||||
|
;!TODO ¥ ¨á¯®«ì§ãîâáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
IF COMPILE_UNUSED_CODE
|
||||||
|
|
||||||
|
LD HL,0
|
||||||
|
|
||||||
|
//LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
|
||||||
|
//LD B,(IY+_sBOOT_SEC.S_P_T+1)
|
||||||
|
LD BC,(CORE_BUFFERS.BootSector.S_P_T) ; Sector per track
|
||||||
|
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.HEADS) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||||
|
.BPB_L1: ; calc. sector per cylinder
|
||||||
|
ADD HL,BC
|
||||||
|
DEC A
|
||||||
|
JR NZ,.BPB_L1
|
||||||
|
LD (FatBuffer.S_X_H),HL
|
||||||
|
ENDIF
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
LD DE,(FatBuffer.DAT_FRM)
|
||||||
|
; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec
|
||||||
|
; LD D,(IY+_sBOOT_SEC.HIDDEN+1)
|
||||||
|
; AND A
|
||||||
|
; SBC HL,DE
|
||||||
|
; EX DE,HL
|
||||||
|
|
||||||
|
//LD L,(IY+_sBOOT_SEC.S_P_D)
|
||||||
|
//LD H,(IY+_sBOOT_SEC.S_P_D+1)
|
||||||
|
LD HL,(CORE_BUFFERS.BootSector.S_P_D)
|
||||||
|
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JP NZ,.HDDSMAL
|
||||||
|
;
|
||||||
|
//LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
|
||||||
|
//LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
|
||||||
|
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS)
|
||||||
|
|
||||||
|
//LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
|
||||||
|
//LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
|
||||||
|
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS+2)
|
||||||
|
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JP NC,.HDDBIG
|
||||||
|
DEC BC
|
||||||
|
JP .HDDBIG
|
||||||
|
.HDDSMAL:
|
||||||
|
;AND A ;âãâ CF ¯®«î¡ á á¡à®è¥ ¤®«¦¥ ¡ëâì
|
||||||
|
SBC HL,DE
|
||||||
|
LD BC,0
|
||||||
|
.HDDBIG: LD A,(CORE_BUFFERS.BootSector.S_P_C) ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||||
|
SCF
|
||||||
|
.S4C01: RRA
|
||||||
|
JR C,.S4C02
|
||||||
|
RR B
|
||||||
|
RR C
|
||||||
|
RR H
|
||||||
|
RR L
|
||||||
|
JP .S4C01
|
||||||
|
.S4C02: INC HL
|
||||||
|
LD (FAT_Max_Cluster),HL
|
||||||
|
|
||||||
|
//POP IY
|
||||||
|
|
||||||
|
; LD DE,FAT
|
||||||
|
; LD HL,0
|
||||||
|
; LD IX,(FAT_FRM)
|
||||||
|
; LD B,3
|
||||||
|
; LD A,(DRIVE)
|
||||||
|
; LD C,Dss.DRV.Read
|
||||||
|
; RST ToDSS.DRV
|
||||||
|
; JP C,RDERR1
|
||||||
|
LD HL,0
|
||||||
|
LD (FatCache),HL
|
||||||
|
|
||||||
|
SET_PAGE_X FATPAGE
|
||||||
|
|
||||||
|
PUSH AF
|
||||||
|
XOR A
|
||||||
|
CALL READ_FAT
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL R_CLUST
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
.IBM_DOS:
|
||||||
|
LD A,(CORE_BUFFERS.BootSector.ID_FORM)
|
||||||
|
CP #F0
|
||||||
|
JR C,DOS_X_Error.UnknownBPB
|
||||||
|
;????? ¤® «¨ ¨§¬¥¨âì?
|
||||||
|
// OR 2
|
||||||
|
// CP #FA ; ID ram-¤¨áª
|
||||||
|
CP #F8 ; ¥á«¨ ¥ F8?
|
||||||
|
;?????
|
||||||
|
LD A,'6'
|
||||||
|
LD HL,#FFFF
|
||||||
|
JP Z,.BPB_FAT
|
||||||
|
|
||||||
|
LD A,'2'
|
||||||
|
LD HL,#0FFF
|
||||||
|
JP .BPB_FAT
|
||||||
|
;
|
||||||
|
DOS_X_Error:
|
||||||
|
.UnknownBPB:
|
||||||
|
//POP IY
|
||||||
|
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.Not_ready:
|
||||||
|
LD A,DSS_Error.sys.NOT_READY
|
||||||
|
; CF = 1
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;!TODO ª ¡ãä¥à ¬!
|
||||||
|
FatBuffer:
|
||||||
|
.MSG: DB 'FAT'
|
||||||
|
.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
|
.BLOCK: DB #00
|
||||||
|
.DIR_CLU: DW #0000
|
||||||
|
.DRIVE: DB #FF
|
||||||
|
.FAT_FRM:
|
||||||
|
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
|
||||||
|
.FAT2_XX: DW #0000
|
||||||
|
.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.DIR_FRL:
|
||||||
|
.DIR_FRM: DW #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
|
.DIR_S_S: DB #00 ; DIR_SEC_SIZE
|
||||||
|
.DAT_FRM: DW #0000 ; MSD_DAT_SEC
|
||||||
|
.CLU_LEN:
|
||||||
|
.B_P_C: DW #0000 ; CLUSTER_LEN
|
||||||
|
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
|
.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit)
|
||||||
|
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
|
.ENDCLUS: DW #FFFF
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
INCLUDE "FAT12_16.ASM"
|
||||||
|
;
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
; FAT 12-16
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
;[BEGIN]
|
;[BEGIN]
|
||||||
;//MODULE: FAT_X
|
;//MODULE: FAT_X
|
||||||
@ -6,7 +9,7 @@
|
|||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;Rev Date Name Description
|
;Rev Date Name Description
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;R01 10-02-1999 DNS UPGRADE FAT CASH
|
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
; “áâ ®¢¨âì ç «ìë© ª« áâ¥à ¤«ï ç⥨ï
|
; “áâ ®¢¨âì ç «ìë© ª« áâ¥à ¤«ï ç⥨ï
|
||||||
@ -50,7 +53,7 @@ INC_FAT PUSH HL
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;R01
|
;RX01
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
@ -82,20 +85,20 @@ R_F_F16:
|
|||||||
LD A,H
|
LD A,H
|
||||||
LD B,H
|
LD B,H
|
||||||
;AND #0F
|
;AND #0F
|
||||||
AND FAT_CACHE.Mask
|
AND FAT_CACHE.Size_Mask_16
|
||||||
LD H,A
|
LD H,A
|
||||||
LD A,B
|
LD A,B
|
||||||
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||||
DUP FAT_CACHE.Degree
|
DUP FAT_CACHE.Degree_16
|
||||||
RRCA
|
RRCA
|
||||||
EDUP
|
EDUP
|
||||||
;AND #0F
|
;AND #0F
|
||||||
AND FAT_CACHE.Mask2
|
AND FAT_CACHE.Part_Mask_16
|
||||||
;
|
;
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||||
CP C
|
CP C
|
||||||
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
|
CALL NZ,READ_FAT ; A != C - READ NEW BLOCK FAT
|
||||||
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
||||||
ADD HL,DE ; ï祩ªã FAT
|
ADD HL,DE ; ï祩ªã FAT
|
||||||
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
||||||
@ -108,7 +111,7 @@ R_F_F16:
|
|||||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
R_F_F12:
|
R_F_F12:
|
||||||
LD D,H
|
LD D,H
|
||||||
LD E,L
|
LD E,L
|
||||||
@ -130,7 +133,7 @@ R_F_F12:
|
|||||||
AND #07
|
AND #07
|
||||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||||
CP C
|
CP C
|
||||||
CALL NZ,RE_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
CALL NZ,READ_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
||||||
;ENDIF
|
;ENDIF
|
||||||
;
|
;
|
||||||
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
||||||
@ -144,7 +147,7 @@ R_F_F12:
|
|||||||
AND #0F
|
AND #0F
|
||||||
LD D,A
|
LD D,A
|
||||||
JP R_F_F02
|
JP R_F_F02
|
||||||
|
;
|
||||||
R_F_F01:
|
R_F_F01:
|
||||||
LD A,E
|
LD A,E
|
||||||
AND #F0
|
AND #F0
|
||||||
@ -175,7 +178,8 @@ R_F_F02:
|
|||||||
; in: HL - CLUSTER
|
; in: HL - CLUSTER
|
||||||
; out: DE - (CLUSTER)
|
; out: DE - (CLUSTER)
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
W_T_FAT PUSH DE
|
W_T_FAT:
|
||||||
|
PUSH DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(FAT_Max_Cluster)
|
LD HL,(FAT_Max_Cluster)
|
||||||
AND A
|
AND A
|
||||||
@ -199,20 +203,20 @@ W_T_F16:
|
|||||||
LD A,H
|
LD A,H
|
||||||
LD B,H
|
LD B,H
|
||||||
;AND #0F
|
;AND #0F
|
||||||
AND FAT_CACHE.Mask
|
AND FAT_CACHE.Size_Mask_16
|
||||||
LD H,A
|
LD H,A
|
||||||
LD A,B
|
LD A,B
|
||||||
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||||
DUP FAT_CACHE.Degree
|
DUP FAT_CACHE.Degree_16
|
||||||
RRCA
|
RRCA
|
||||||
EDUP
|
EDUP
|
||||||
;AND #0F
|
;AND #0F
|
||||||
AND FAT_CACHE.Mask2
|
AND FAT_CACHE.Part_Mask_16
|
||||||
;
|
;
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ;!HARDCODE fat16 - à §¬¥à § ¯¨á¨ FAT
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ;!HARDCODE fat16 - à §¬¥à § ¯¨á¨ FAT
|
||||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||||
CP C
|
CP C
|
||||||
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
|
CALL NZ,READ_FAT ; A != C - READ NEW BLOCK FAT
|
||||||
LD DE,FATPAGE.cache
|
LD DE,FATPAGE.cache
|
||||||
ADD HL,DE ; ï祩ªã FAT
|
ADD HL,DE ; ï祩ªã FAT
|
||||||
POP DE
|
POP DE
|
||||||
@ -226,7 +230,7 @@ W_T_F16:
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
; fat12
|
; fat12
|
||||||
W_T_F12:
|
W_T_F12: ;!FIXIT ŻĽŕĽ¤ĽŤ âě ŻĽŕĽŹĽëĽ FAT_CACHE
|
||||||
PUSH DE
|
PUSH DE
|
||||||
LD D,H
|
LD D,H
|
||||||
LD E,L
|
LD E,L
|
||||||
@ -253,7 +257,7 @@ W_T_F12:
|
|||||||
AND #07
|
AND #07
|
||||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||||
CP C
|
CP C
|
||||||
CALL NZ,RE_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
CALL NZ,READ_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
||||||
;ENDIF
|
;ENDIF
|
||||||
;
|
;
|
||||||
LD DE,FATPAGE.cache
|
LD DE,FATPAGE.cache
|
||||||
@ -272,8 +276,7 @@ W_T_F12:
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
||||||
SLA E
|
SLA E
|
||||||
LD A,E
|
LD A,E
|
||||||
@ -298,10 +301,12 @@ W_T_F01:;
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;R01
|
;RX01
|
||||||
|
;RE_FAT:
|
||||||
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||||
; A - NEW FAT BLOCK
|
; A - NEW FAT BLOCK
|
||||||
RE_FAT: PUSH HL
|
READ_FAT:
|
||||||
|
PUSH HL
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,(FatCache.Update)
|
LD A,(FatCache.Update)
|
||||||
OR A
|
OR A
|
||||||
@ -310,23 +315,23 @@ RE_FAT: PUSH HL
|
|||||||
LD L,A
|
LD L,A
|
||||||
LD H,0
|
LD H,0
|
||||||
LD (FatCache),HL
|
LD (FatCache),HL
|
||||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
|
||||||
DUP FAT_CACHE.Degree
|
DUP FAT_CACHE.Degree_16
|
||||||
ADD HL,HL ;x2
|
ADD HL,HL ;x2
|
||||||
EDUP
|
EDUP
|
||||||
LD DE,(FatBuffer.FAT_FRM)
|
LD DE,(FatBuffer.FAT_FRM)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
;
|
;
|
||||||
PUSH DE
|
LD XH,D
|
||||||
POP IX
|
LD XL,E
|
||||||
;LD IX,0
|
;LD IX,0
|
||||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||||
;
|
;
|
||||||
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
|
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
|
||||||
LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
||||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;༣ B: 16 * 512 = 8192 (CASH SIZE)
|
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;༣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
@ -342,9 +347,10 @@ WR_FAT: SET_PAGE_X FATPAGE
|
|||||||
.Start: LD HL,(FatCache)
|
.Start: LD HL,(FatCache)
|
||||||
LD H,0
|
LD H,0
|
||||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
;FAT BLOCK * 16 = SECTOR OF FAT
|
||||||
DUP FAT_CACHE.Degree
|
DUP FAT_CACHE.Degree_16
|
||||||
ADD HL,HL ;x2
|
ADD HL,HL ;x2
|
||||||
EDUP
|
EDUP
|
||||||
|
; HL - ŽŹĽŕ ŤŽŁ. ἪâŽŕ
|
||||||
PUSH HL
|
PUSH HL
|
||||||
LD B,H
|
LD B,H
|
||||||
LD C,L ;BC - BLOCK OF FAT
|
LD C,L ;BC - BLOCK OF FAT
|
||||||
@ -361,15 +367,15 @@ WR_FAT: SET_PAGE_X FATPAGE
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP C,.ERR
|
JP C,.ERR
|
||||||
LD A,L
|
LD A,L
|
||||||
.WALLFAT:
|
.WALLFAT:; !TODO çńĄ áŕ §ă ˘ IX Ľ Łŕ㧨âě FAT_FRM?
|
||||||
LD H,B
|
LD H,B
|
||||||
LD L,C
|
LD L,C
|
||||||
LD DE,(FatBuffer.FAT_FRM)
|
LD DE,(FatBuffer.FAT_FRM)
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
;
|
;
|
||||||
PUSH DE
|
LD XH,D
|
||||||
POP IX
|
LD XL,E
|
||||||
;LD IX,0
|
;LD IX,0
|
||||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||||
;
|
;
|
||||||
@ -387,8 +393,8 @@ WR_FAT: SET_PAGE_X FATPAGE
|
|||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
;
|
;
|
||||||
PUSH DE
|
LD XH,D
|
||||||
POP IX
|
LD XL,E
|
||||||
;LD IX,0
|
;LD IX,0
|
||||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||||
;
|
;
|
||||||
@ -407,6 +413,7 @@ WR_FAT: SET_PAGE_X FATPAGE
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FatCache: WORD #0000
|
FatCache: WORD #0000
|
||||||
.Block EQU FatCache
|
.Block EQU FatCache
|
||||||
.Update EQU FatCache+1
|
.Update EQU FatCache+1
|
||||||
@ -416,7 +423,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
|||||||
;[END]
|
;[END]
|
||||||
|
|
||||||
|
|
||||||
;R01
|
;RX01
|
||||||
;; HL - CLUSTER
|
;; HL - CLUSTER
|
||||||
;; DE - (CLUSTER)
|
;; DE - (CLUSTER)
|
||||||
;
|
;
|
||||||
@ -441,7 +448,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
|||||||
; DEC A
|
; DEC A
|
||||||
; LD BC,(FatCache) ; A - ELEMENT OF CASH
|
; LD BC,(FatCache) ; A - ELEMENT OF CASH
|
||||||
; CP C
|
; CP C
|
||||||
; CALL NZ,RE_FAT
|
; CALL NZ,READ_FAT
|
||||||
; LD DE,FAT
|
; LD DE,FAT
|
||||||
; ADD HL,DE
|
; ADD HL,DE
|
||||||
; LD E,(HL)
|
; LD E,(HL)
|
||||||
@ -528,4 +535,4 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
|||||||
; LD C,6
|
; LD C,6
|
||||||
; RST #18
|
; RST #18
|
||||||
; RET
|
; RET
|
||||||
;
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -270,15 +270,15 @@ DRVCLC: ; INC A
|
|||||||
;---------------------------------------------------------------------[^]
|
;---------------------------------------------------------------------[^]
|
||||||
|
|
||||||
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
; ;+01 LONG SECTOR OFFSET
|
; ;+01 DWORD SECTOR OFFSET
|
||||||
; ;+05 LONG SIZE IN SECTORS
|
; ;+05 DWORD SIZE IN SECTORS
|
||||||
; ;+09 FREE
|
; ;+09 FREE
|
||||||
; ;+15
|
; ;+15
|
||||||
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
||||||
; .TBL_Entry EQU 16
|
; .TBL_Entry EQU 16
|
||||||
; .Size EQU $-LOGDRV
|
; .Size EQU $-LOGDRV
|
||||||
|
|
||||||
|
;!TODO § ¬¥¨âì PUSH EXX?
|
||||||
SELHDD: PUSH DE
|
SELHDD: PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
PUSH HL
|
PUSH HL
|
||||||
@ -420,9 +420,8 @@ RESE_H: XOR A
|
|||||||
STAT_H: XOR A
|
STAT_H: XOR A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
CHEK_H:
|
CHEK_H: ;LD A,#FF
|
||||||
LD A,#FF
|
XOR A
|
||||||
;XOR A
|
|
||||||
;AND A
|
;AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
|||||||
191
DSS/Procedures.asm
Normal file
191
DSS/Procedures.asm
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
;!TODO Procedures
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ‡ ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
; ¢å®¤: de - ¤¥ì/¬¥áïæ
|
||||||
|
; hl - ç áë/¬¨ãâë
|
||||||
|
; b - ᥪã¤ë
|
||||||
|
; ix - £®¤
|
||||||
|
; ¢ë室: de - ¢à¥¬ï
|
||||||
|
; bc - ¬¥áïæ/¤¥ì
|
||||||
|
; ix - £®¤
|
||||||
|
;
|
||||||
|
;INPUT: D - DAY; E - MONTH
|
||||||
|
; H - HOUR; L - MINUTE
|
||||||
|
; B - SECOND (0...59)
|
||||||
|
; IX- YEAR (0...65535)
|
||||||
|
;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
|
||||||
|
; BC - yyyyyyymmmmddddd y - year, m - month, d - day
|
||||||
|
; (1980-2108)
|
||||||
|
MK_TIME:
|
||||||
|
LD A,L
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
SLA A
|
||||||
|
RL H
|
||||||
|
SLA A
|
||||||
|
RL H
|
||||||
|
SLA A
|
||||||
|
RL H
|
||||||
|
SRL B
|
||||||
|
OR B
|
||||||
|
LD L,A
|
||||||
|
|
||||||
|
LD BC,#F844 ;(-1980)
|
||||||
|
ADD IX,BC
|
||||||
|
LD A,E
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #F0
|
||||||
|
LD B,XL
|
||||||
|
SLA A
|
||||||
|
RL B
|
||||||
|
OR D
|
||||||
|
LD C,A
|
||||||
|
EX DE,HL
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;!TODO Procedures
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; <20> ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
; ¢å®¤: de - ¢à¥¬ï
|
||||||
|
; bc - ¬¥áïæ/¤¥ì
|
||||||
|
; ix - £®¤
|
||||||
|
; ¢ë室: de - ¤¥ì/¬¥áïæ
|
||||||
|
; hl - ç áë/¬¨ãâë
|
||||||
|
; b - ᥪã¤ë
|
||||||
|
; ix - £®¤
|
||||||
|
;
|
||||||
|
;INPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
|
||||||
|
; BC - yyyyyyymmmmddddd y - year, m - month, d - day
|
||||||
|
; (1980-2108)
|
||||||
|
;OUTPUT: D - DAY; E - MONTH
|
||||||
|
; H - HOUR; L - MINUTE
|
||||||
|
; B - SECOND (0...59)
|
||||||
|
; IX- YEAR (0...65535)
|
||||||
|
RMKTIME:
|
||||||
|
EX DE,HL
|
||||||
|
LD A,C
|
||||||
|
AND #1F
|
||||||
|
LD D,A
|
||||||
|
SRL B
|
||||||
|
RR C
|
||||||
|
LD A,C
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
LD E,A
|
||||||
|
LD C,B
|
||||||
|
LD B,0
|
||||||
|
LD IX,1980
|
||||||
|
ADD IX,BC
|
||||||
|
LD A,L
|
||||||
|
AND #1F
|
||||||
|
ADD A,A
|
||||||
|
LD B,A
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL L
|
||||||
|
SRL L
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; a..z -> A..Z
|
||||||
|
UPPER: CP 'a'
|
||||||
|
RET C
|
||||||
|
CP 'z' + 1
|
||||||
|
JR NC,.MDUPPER
|
||||||
|
SUB #20
|
||||||
|
.NOUPPER:
|
||||||
|
RET
|
||||||
|
.MDUPPER:
|
||||||
|
CP ' ' ; àãááª ï ¡ãª¢ , ª®¤ #A0
|
||||||
|
JR C,.NOUPPER
|
||||||
|
CP '¯' ; àãááª ï ¡ãª¢ ¯, ª®¤ #B0
|
||||||
|
JR NC,.BGUPPER
|
||||||
|
SUB #20
|
||||||
|
RET
|
||||||
|
.BGUPPER:
|
||||||
|
CP 'à' ; àãááª ï ¡ãª¢ à, ª®¤ #E0
|
||||||
|
JR C,.NOUPPER
|
||||||
|
CP 'ð' ; àãááª ï ¡ãª¢ ð, ª®¤ #F0
|
||||||
|
JR NC,.HGUPPER
|
||||||
|
SUB #50
|
||||||
|
RET
|
||||||
|
.HGUPPER: CP 'ñ' ; àãááª ï ¡ãª¢ ñ, ª®¤ #F1
|
||||||
|
RET NZ
|
||||||
|
DEC A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;!TODO hardware
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; —⥨¥ ॣ¨áâ஢ CMOS
|
||||||
|
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||||||
|
RCMOS: LD C,BIOS.CMOS_RD
|
||||||
|
RST ToBIOS
|
||||||
|
;JP BCD2HEX
|
||||||
|
; INPUT : A - BCD
|
||||||
|
; OUTPUT: A - HEX
|
||||||
|
BCD2HEX:
|
||||||
|
LD E,A
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
LD D,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,D
|
||||||
|
ADD A,A
|
||||||
|
LD D,A
|
||||||
|
LD A,E
|
||||||
|
AND #0F
|
||||||
|
ADD A,D
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;!TODO hardware
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;!FIXIT ¯¥à¥¤¥« âì ¯® ¤®ª¥ „ «« á ¨ § ¨áì ¢ ï祩ª¨ ç ᮢ
|
||||||
|
; ‡ ¯¨áì ॣ¨áâ஢ CMOS
|
||||||
|
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||||||
|
WCMOS: CALL HEX2BCD
|
||||||
|
LD C,BIOS.CMOS_WR
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
; INPUT : A - HEX
|
||||||
|
; OUTPUT: A - BCD
|
||||||
|
HEX2BCD:
|
||||||
|
LD BC,#0AFF
|
||||||
|
.loop: INC C
|
||||||
|
SUB B
|
||||||
|
JR NC,.loop
|
||||||
|
ADD A,B
|
||||||
|
LD B,A
|
||||||
|
LD A,C
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #F0
|
||||||
|
OR B
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
@ -1 +1 @@
|
|||||||
734
|
759
|
||||||
@ -15,23 +15,30 @@
|
|||||||
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
||||||
;
|
;
|
||||||
FAT_CACHE:
|
FAT_CACHE:
|
||||||
.Size EQU #2000 ; bytes
|
.Size EQU #2000
|
||||||
.Sector_Size EQU 512
|
.Sector_Size EQU #200
|
||||||
.Sectors EQU .Size / .Sector_Size
|
.Sectors EQU .Size / .Sector_Size
|
||||||
.bytes_record EQU 2
|
; for FAT16
|
||||||
.Degree EQU _shift ;.Sectors >>> (.Sectors/8)
|
.bytes_record_16 EQU 2
|
||||||
.Mask EQU high (.Size/.bytes_record - 1) ;#07 ;.Sectors - 1
|
.Degree_16 EQU _shift
|
||||||
.Mask2 EQU ((1<<(.bytes_record*8)) / (.Size/2))-1
|
.Size_Mask_16 EQU high (.Size/.bytes_record_16 - 1)
|
||||||
|
.Part_Mask_16 EQU ((1<<(.bytes_record_16*8)) / (.Size/2))-1
|
||||||
|
; for FAT12
|
||||||
|
.bytes_record_12 EQU 2
|
||||||
|
.Degree_12 EQU _shift
|
||||||
|
.Size_Mask_12 EQU high (.Size/.bytes_record_12 - 1)
|
||||||
|
.Part_Mask_12 EQU ((1<<(.bytes_record_12*8)) / (.Size/2))-1
|
||||||
|
DISPLAY "bytes_record_16 = ",/H,.bytes_record_16
|
||||||
|
DISPLAY "Degree_16 = ",/H,.Degree_16
|
||||||
|
DISPLAY "Size_Mask_16 = ",/H,.Size_Mask_16
|
||||||
|
DISPLAY "Part_Mask_16 = ",/H,.Part_Mask_16
|
||||||
|
DISPLAY "bytes_record_12 = ",/H,.bytes_record_12
|
||||||
|
DISPLAY "Degree_12 = ",/H,.Degree_12
|
||||||
|
DISPLAY "Size_Mask_12 = ",/H,.Size_Mask_12
|
||||||
|
DISPLAY "Part_Mask_12 = ",/H,.Part_Mask_12
|
||||||
;
|
;
|
||||||
undefine _bit
|
undefine _bit
|
||||||
undefine _shift
|
undefine _shift
|
||||||
|
|
||||||
DISPLAY ".Size = ",/A,.Size
|
|
||||||
DISPLAY ".Sectors = ",/A,.Sectors
|
|
||||||
DISPLAY ".Degree = ",/A,.Degree
|
|
||||||
DISPLAY ".Mask = ",/A,.Mask
|
|
||||||
DISPLAY ".Mask2 = ",/A,.Mask2
|
|
||||||
; DISPLAY " test = ",/A, (1<?((.t)&128)) + (1<?((.t)&4)) + (1<?((.t)&4))
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
;
|
;
|
||||||
DSS_MAX_DRIVES_AMOUNT EQU 26
|
DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||||
@ -42,6 +49,7 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
|
|||||||
DEFINE CLASSIC_CURSOR 0
|
DEFINE CLASSIC_CURSOR 0
|
||||||
DEFINE SAVE_PATH_CODE 1
|
DEFINE SAVE_PATH_CODE 1
|
||||||
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
|
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
|
||||||
|
DEFINE CHECK_DRIVE_CHANGE 1 ; 1 - â®à¬®§¥¥, ® ¡¥§®¯ ᥥ
|
||||||
;
|
;
|
||||||
;-------------------[MEMORY]-------------------------;
|
;-------------------[MEMORY]-------------------------;
|
||||||
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user