mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
-bug in NSECTOR сам затупил, сам починил.
Рефакторинг
This commit is contained in:
parent
5cf26d589f
commit
0e38bd4a91
@ -523,27 +523,61 @@ SMALL_CLUSTER:
|
||||
; HL - CLUSTER
|
||||
; 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
|
||||
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)
|
||||
XOR 1
|
||||
JR Z,.skip
|
||||
;
|
||||
RRA
|
||||
.loop: ADD HL,HL
|
||||
RL E
|
||||
RL D
|
||||
;
|
||||
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
|
||||
LD DE,#0000
|
||||
LD D,A
|
||||
LD E,A
|
||||
ADC HL,DE
|
||||
;
|
||||
LD DE,(DISKL)
|
||||
ADD IX,DE
|
||||
LD DE,(DISKH)
|
||||
ADC HL,DE
|
||||
RET
|
||||
|
||||
;-----------------
|
||||
;!TODO ᤥ« âì íâ® ¬ ªà®á ¬¨ ¨«¨ ¨ª«î¤ ¬¨ 㨢¥àá «ì묨. ¯®¢â®àïîâáï ¢ ¤®á¥ ¨ ¥éñ £¤¥-â®
|
||||
; HL - CLUSTER
|
||||
@ -611,15 +645,15 @@ R_F_00 INC A ; HL - FAT OFFSET
|
||||
|
||||
R_F_F01 LD A,E
|
||||
AND #F0
|
||||
RR D ; ¢¯à ¢® 4 ¡¨âa
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
RR D
|
||||
RRA
|
||||
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
|
||||
XOR A
|
||||
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 //////////////////
|
||||
; in: HL - CLUSTER
|
||||
; out: HL:IX - SECTOR
|
||||
NSECTOR: DEC HL
|
||||
DEC HL
|
||||
NSECTOR:
|
||||
LD DE,0
|
||||
DEC HL
|
||||
DEC HL
|
||||
LD A,(CORE_BUFFERS.BootSector.S_P_C)
|
||||
XOR 1
|
||||
JR Z,.skip
|
||||
@ -971,7 +972,8 @@ NSECTOR: DEC HL
|
||||
RRA
|
||||
.loop: ADD HL,HL
|
||||
RL E
|
||||
; RL D
|
||||
RL D
|
||||
;
|
||||
RRA
|
||||
JP NC,.loop
|
||||
;
|
||||
@ -984,6 +986,7 @@ NSECTOR: DEC HL
|
||||
LD D,A
|
||||
LD E,A
|
||||
ADC HL,DE
|
||||
;!TODO ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«¥¨¥ HL:IX?
|
||||
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
|
||||
;...............................................[LOW ADDRESS ]:
|
||||
; 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 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
|
||||
@ -404,7 +404,7 @@ ADRST10: ;DS 512 ;,0
|
||||
;[ ] R09
|
||||
ENDIF
|
||||
;...............................................[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 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
|
||||
@ -437,18 +437,47 @@ ADRST10: ;DS 512 ;,0
|
||||
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
||||
INCLUDE "KEYINTER.ASM" ;!FIXIT ¨§-§ ¡ãä¥à á ¢ëà ¢¨¢ ¨¥¬ align 256 ¢ ç «¥ ¯à¨å®¤¨âáï ADRST10 ¤®¡¨¢ âì ã«ï¬¨ ¢ ª®æ¥
|
||||
INCLUDE "VIDEO.ASM"
|
||||
INCLUDE "FAT_X.ASM"
|
||||
INCLUDE "DOS_X.ASM"
|
||||
INCLUDE "API.ASM"
|
||||
INCLUDE "DOS_Proc.asm"
|
||||
INCLUDE "FS/FAT/FAT.ASM"
|
||||
INCLUDE "DOS_FM.ASM"
|
||||
INCLUDE "DOS5.ASM"
|
||||
|
||||
INCLUDE "EXECUTE.ASM"
|
||||
INCLUDE "ENVIRON.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
|
||||
;
|
||||
|
||||
;!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 < < < < < < < < < < < < < < < <
|
||||
|
||||
@ -50,7 +50,7 @@ INITENV:
|
||||
PUSH AF
|
||||
;
|
||||
;R02
|
||||
LD A,(BOOTDRV)
|
||||
LD A,(BOOTDSK.NUM)
|
||||
ADD A,'A'
|
||||
LD (DEFAULT_ENV.boot_disk),A
|
||||
;
|
||||
|
||||
@ -180,7 +180,7 @@ EX_PATH: EXX
|
||||
DEC B
|
||||
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||||
DEC B
|
||||
JP Z,GETNAME ;8 ; ŻŕĽŽĄŕ. ¨Źď 11 -> 8.3 äŽŕŹ â
|
||||
JP Z,GetName ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
|
||||
DEC B
|
||||
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||
EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||
@ -839,7 +839,7 @@ EXEC: LD (CMDLINE),HL
|
||||
EXEC_1: ;LD (CMDLINE),HL
|
||||
LD HL,(CMDLINE)
|
||||
LD A,FAT_ATTR.READ_ONLY
|
||||
LD (OPEN.TMP),A
|
||||
LD (OPEN_FN.TMP),A
|
||||
CALL GETWORD
|
||||
RET C
|
||||
; LD HL,TMPNAME
|
||||
@ -850,7 +850,7 @@ EXEC_1: ;LD (CMDLINE),HL
|
||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||
RET C
|
||||
_mINCTASK ;R08
|
||||
CALL OPEN.FILE
|
||||
CALL OPEN_FN.FILE
|
||||
JR C,.Error
|
||||
POP HL ; ã¡¨à ¥¬ «¨è¨© ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
|
||||
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
|
||||
ERREXE: PUSH AF
|
||||
LD A,(EXE_FM)
|
||||
CALL CLOSE
|
||||
CALL CLOSE_FN
|
||||
_mDECTASK
|
||||
POP AF
|
||||
RET
|
||||
@ -1166,7 +1166,7 @@ LEAVE: LD A,B
|
||||
;[x] 25/10/23 close EXE FM
|
||||
POP AF
|
||||
;CALL RES_FM
|
||||
CALL CLOSE
|
||||
CALL CLOSE_FN
|
||||
_mDECTASK
|
||||
;
|
||||
POP AF
|
||||
@ -1235,7 +1235,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||
LD (HL),B
|
||||
INC HL
|
||||
;!FIXIT âãâ ¢®ááâ ¢«¨¢ âì ¯à ¢¨«ìë© ª â «®£
|
||||
CALL CURRDSK
|
||||
CALL CURDISK
|
||||
ADD A,'A'
|
||||
LD (HL),A
|
||||
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]
|
||||
;//MODULE: FAT_X
|
||||
@ -6,7 +9,7 @@
|
||||
;---------------------------------------------------------------
|
||||
;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
|
||||
RET
|
||||
|
||||
;R01
|
||||
;RX01
|
||||
|
||||
;-----------------------------------------------------------
|
||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
@ -82,20 +85,20 @@ R_F_F16:
|
||||
LD A,H
|
||||
LD B,H
|
||||
;AND #0F
|
||||
AND FAT_CACHE.Mask
|
||||
AND FAT_CACHE.Size_Mask_16
|
||||
LD H,A
|
||||
LD A,B
|
||||
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||
DUP FAT_CACHE.Degree
|
||||
DUP FAT_CACHE.Degree_16
|
||||
RRCA
|
||||
EDUP
|
||||
;AND #0F
|
||||
AND FAT_CACHE.Mask2
|
||||
AND FAT_CACHE.Part_Mask_16
|
||||
;
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
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-
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
||||
@ -108,7 +111,7 @@ R_F_F16:
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
RET
|
||||
|
||||
;
|
||||
R_F_F12:
|
||||
LD D,H
|
||||
LD E,L
|
||||
@ -130,7 +133,7 @@ R_F_F12:
|
||||
AND #07
|
||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
||||
CALL NZ,READ_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
||||
;ENDIF
|
||||
;
|
||||
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
||||
@ -144,7 +147,7 @@ R_F_F12:
|
||||
AND #0F
|
||||
LD D,A
|
||||
JP R_F_F02
|
||||
|
||||
;
|
||||
R_F_F01:
|
||||
LD A,E
|
||||
AND #F0
|
||||
@ -175,7 +178,8 @@ R_F_F02:
|
||||
; in: HL - CLUSTER
|
||||
; out: DE - (CLUSTER)
|
||||
;-----------------------------------------------------------
|
||||
W_T_FAT PUSH DE
|
||||
W_T_FAT:
|
||||
PUSH DE
|
||||
EX DE,HL
|
||||
LD HL,(FAT_Max_Cluster)
|
||||
AND A
|
||||
@ -199,20 +203,20 @@ W_T_F16:
|
||||
LD A,H
|
||||
LD B,H
|
||||
;AND #0F
|
||||
AND FAT_CACHE.Mask
|
||||
AND FAT_CACHE.Size_Mask_16
|
||||
LD H,A
|
||||
LD A,B
|
||||
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||
DUP FAT_CACHE.Degree
|
||||
DUP FAT_CACHE.Degree_16
|
||||
RRCA
|
||||
EDUP
|
||||
;AND #0F
|
||||
AND FAT_CACHE.Mask2
|
||||
AND FAT_CACHE.Part_Mask_16
|
||||
;
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ;!HARDCODE fat16 - à §¬¥à § ¯¨á¨ FAT
|
||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
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
|
||||
ADD HL,DE ; ï祩ªã FAT
|
||||
POP DE
|
||||
@ -226,7 +230,7 @@ W_T_F16:
|
||||
RET
|
||||
;
|
||||
; fat12
|
||||
W_T_F12:
|
||||
W_T_F12: ;!FIXIT ŻĽŕĽ¤ĽŤ âě ŻĽŕĽŹĽëĽ FAT_CACHE
|
||||
PUSH DE
|
||||
LD D,H
|
||||
LD E,L
|
||||
@ -253,7 +257,7 @@ W_T_F12:
|
||||
AND #07
|
||||
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
||||
CALL NZ,READ_FAT ; ŻŕŽç¨â âě ˘ ŞĽč 16 ἪâŽŕŽ˘ FAT-
|
||||
;ENDIF
|
||||
;
|
||||
LD DE,FATPAGE.cache
|
||||
@ -272,8 +276,7 @@ W_T_F12:
|
||||
OUT (SLOT3),A
|
||||
AND A
|
||||
RET
|
||||
|
||||
|
||||
;
|
||||
W_T_F01:; ¢«¥¢® 4 ¡¨âa
|
||||
SLA E
|
||||
LD A,E
|
||||
@ -298,10 +301,12 @@ W_T_F01:;
|
||||
AND A
|
||||
RET
|
||||
|
||||
;R01
|
||||
;RX01
|
||||
;RE_FAT:
|
||||
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-
|
||||
; A - NEW FAT BLOCK
|
||||
RE_FAT: PUSH HL
|
||||
READ_FAT:
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FatCache.Update)
|
||||
OR A
|
||||
@ -310,23 +315,23 @@ RE_FAT: PUSH HL
|
||||
LD L,A
|
||||
LD H,0
|
||||
LD (FatCache),HL
|
||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
||||
DUP FAT_CACHE.Degree
|
||||
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
|
||||
DUP FAT_CACHE.Degree_16
|
||||
ADD HL,HL ;x2
|
||||
EDUP
|
||||
LD DE,(FatBuffer.FAT_FRM)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
;
|
||||
PUSH DE
|
||||
POP IX
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
;LD IX,0
|
||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
;
|
||||
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
|
||||
LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
||||
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
|
||||
POP HL
|
||||
RET
|
||||
@ -342,9 +347,10 @@ WR_FAT: SET_PAGE_X FATPAGE
|
||||
.Start: LD HL,(FatCache)
|
||||
LD H,0
|
||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
||||
DUP FAT_CACHE.Degree
|
||||
DUP FAT_CACHE.Degree_16
|
||||
ADD HL,HL ;x2
|
||||
EDUP
|
||||
; HL - ŽŹĽŕ ŤŽŁ. ἪâŽŕ
|
||||
PUSH HL
|
||||
LD B,H
|
||||
LD C,L ;BC - BLOCK OF FAT
|
||||
@ -361,15 +367,15 @@ WR_FAT: SET_PAGE_X FATPAGE
|
||||
SBC HL,DE
|
||||
JP C,.ERR
|
||||
LD A,L
|
||||
.WALLFAT:
|
||||
.WALLFAT:; !TODO çńĄ áŕ §ă ˘ IX Ľ Łŕ㧨âě FAT_FRM?
|
||||
LD H,B
|
||||
LD L,C
|
||||
LD DE,(FatBuffer.FAT_FRM)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
;
|
||||
PUSH DE
|
||||
POP IX
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
;LD IX,0
|
||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
;
|
||||
@ -387,8 +393,8 @@ WR_FAT: SET_PAGE_X FATPAGE
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
;
|
||||
PUSH DE
|
||||
POP IX
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
;LD IX,0
|
||||
;ADD IX,DE ; ®¬¥à «®£. ᥪâ®à
|
||||
;
|
||||
@ -407,6 +413,7 @@ WR_FAT: SET_PAGE_X FATPAGE
|
||||
RET
|
||||
|
||||
|
||||
|
||||
FatCache: WORD #0000
|
||||
.Block EQU FatCache
|
||||
.Update EQU FatCache+1
|
||||
@ -416,7 +423,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
||||
;[END]
|
||||
|
||||
|
||||
;R01
|
||||
;RX01
|
||||
;; HL - CLUSTER
|
||||
;; DE - (CLUSTER)
|
||||
;
|
||||
@ -441,7 +448,7 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
||||
; DEC A
|
||||
; LD BC,(FatCache) ; A - ELEMENT OF CASH
|
||||
; CP C
|
||||
; CALL NZ,RE_FAT
|
||||
; CALL NZ,READ_FAT
|
||||
; LD DE,FAT
|
||||
; ADD HL,DE
|
||||
; LD E,(HL)
|
||||
@ -528,4 +535,4 @@ FAT_Max_Cluster: WORD #0FF0 ;
|
||||
; LD C,6
|
||||
; RST #18
|
||||
; RET
|
||||
;
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -270,15 +270,15 @@ DRVCLC: ; INC A
|
||||
;---------------------------------------------------------------------[^]
|
||||
|
||||
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||
; ;+01 LONG SECTOR OFFSET
|
||||
; ;+05 LONG SIZE IN SECTORS
|
||||
; ;+01 DWORD SECTOR OFFSET
|
||||
; ;+05 DWORD SIZE IN SECTORS
|
||||
; ;+09 FREE
|
||||
; ;+15
|
||||
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0 ;!FIXIT ¯¥à¥¥á⨠ª ¡ãä¥à ¬ ¢ ª®¥æ áâà ¨æë
|
||||
; .TBL_Entry EQU 16
|
||||
; .Size EQU $-LOGDRV
|
||||
|
||||
|
||||
;!TODO § ¬¥¨âì PUSH EXX?
|
||||
SELHDD: PUSH DE
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
@ -420,9 +420,8 @@ RESE_H: XOR A
|
||||
STAT_H: XOR A
|
||||
RET
|
||||
|
||||
CHEK_H:
|
||||
LD A,#FF
|
||||
;XOR A
|
||||
CHEK_H: ;LD A,#FF
|
||||
XOR A
|
||||
;AND A
|
||||
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))
|
||||
;
|
||||
FAT_CACHE:
|
||||
.Size EQU #2000 ; bytes
|
||||
.Sector_Size EQU 512
|
||||
.Size EQU #2000
|
||||
.Sector_Size EQU #200
|
||||
.Sectors EQU .Size / .Sector_Size
|
||||
.bytes_record EQU 2
|
||||
.Degree EQU _shift ;.Sectors >>> (.Sectors/8)
|
||||
.Mask EQU high (.Size/.bytes_record - 1) ;#07 ;.Sectors - 1
|
||||
.Mask2 EQU ((1<<(.bytes_record*8)) / (.Size/2))-1
|
||||
; for FAT16
|
||||
.bytes_record_16 EQU 2
|
||||
.Degree_16 EQU _shift
|
||||
.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 _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
|
||||
@ -42,6 +49,7 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||
DEFINE CLASSIC_CURSOR 0
|
||||
DEFINE SAVE_PATH_CODE 1
|
||||
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
|
||||
DEFINE CHECK_DRIVE_CHANGE 1 ; 1 - â®à¬®§¥¥, ® ¡¥§®¯ ᥥ
|
||||
;
|
||||
;-------------------[MEMORY]-------------------------;
|
||||
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
||||
|
||||
Loading…
Reference in New Issue
Block a user