mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
2254 lines
40 KiB
NASM
2254 lines
40 KiB
NASM
|
||
;[BEGIN]
|
||
;//MODULE: DOS5
|
||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||
;//UPDATE: 24-10-1999 DNS Restore module
|
||
;-------------------------------------------------------------
|
||
;Rev Date Name Description
|
||
;-------------------------------------------------------------
|
||
;R11 17-04-2023 BAO ‚६¥ë© ª®áâë«ì ¤«ï ¥¤®¯ã᪠¨ï ¯¥à¥¯®«¥¨ï ¡ãä¥à ¯ã⨠ª â «®£
|
||
;R10 15-04-2023 BAO ;????? FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH ;!FIXIT ¯®ª ¢ ¢¨¤¥ § ¯« ⪨ ¯®«ã¥à ¡®â î饩
|
||
;R09 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
|
||
;R08 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
||
;R07 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN
|
||
; FROM "." ".NAM"
|
||
;R06 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME
|
||
;R05 26-11-2002 DNS FIX ERROR IN CHDIR, DON'T ALLOWED "." FOR ROOT
|
||
;R04 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
||
;R03 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
||
;R02 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
||
;R01 16-12-1999 DNS Y2K fix
|
||
;-------------------------------------------------------------
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; 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,.RATTRIB
|
||
DEC B
|
||
JP Z,.WATTRIB
|
||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||
SCF
|
||
RET
|
||
.RATTRIB:
|
||
XOR A
|
||
CALL .OPENATR ;R02
|
||
RET C
|
||
LD B,(IY+_sFM.ATTRIBUT)
|
||
PUSH BC
|
||
CALL CLOSE
|
||
POP BC
|
||
RET C
|
||
LD A,B
|
||
;AND A
|
||
RET
|
||
.WATTRIB:
|
||
PUSH AF
|
||
XOR A
|
||
CALL .OPENATR ;R02
|
||
POP BC
|
||
RET C
|
||
SET 7,(IY+_sFM.ACCESS_MODE)
|
||
RES 3,B ;CLEAR LABEL ATTR ;R03 ;!HARDCODE attribute bit
|
||
LD (IY+_sFM.ATTRIBUT),B
|
||
PUSH BC
|
||
CALL CLOSE
|
||
POP BC
|
||
RET C
|
||
LD A,B
|
||
;AND A
|
||
RET
|
||
;R02
|
||
.OPENATR:
|
||
LD (F_FIRST.ACCESS),A ; à ¡. ï祩ª (§¤¥áì âਡãâ § ¯¨á¨)
|
||
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||
RET C
|
||
LD HL,TMPNAME
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
LD A,FAT_ATTR.NoVolID
|
||
CALL SEARCH.ASEARCH
|
||
; JR NC,OPENAT ; ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à
|
||
; ; § ¯¨áì ¥ ©¤¥
|
||
; RET
|
||
RET C ; § ¯¨áì ¥ ©¤¥
|
||
JP OPEN.FM ; ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à
|
||
;R02
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; 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
|
||
CALL NC,DELETE ;FILE EXIST RECREAT
|
||
JR .DO
|
||
;
|
||
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||
; OUTPUT: A - FM
|
||
.NEW: ;!Test Current Dir ;[x] 15/10/23
|
||
PUSH HL
|
||
CALL DIR_PATH_CHECK
|
||
POP HL
|
||
RET C
|
||
;
|
||
CALL .Prepare
|
||
RET C
|
||
CALL SEARCH
|
||
LD A,DSS_Error.sys.FILE_EXISTS
|
||
CCF
|
||
RET C
|
||
;
|
||
.DO: LD HL,MASKARE
|
||
LD DE,HANDBUF
|
||
LD BC,11
|
||
LDIR
|
||
EX DE,HL
|
||
LD A,(F_FIRST.ACCESS)
|
||
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
|
||
CALL SAVEDIR
|
||
.PATH0+1:
|
||
LD HL,0
|
||
XOR A
|
||
JP OPEN ;R08
|
||
.Prepare:
|
||
AND #E7 ;R04 %76A00SHR = !FAT_ATTR
|
||
LD (F_FIRST.ACCESS),A
|
||
LD (.PATH0),HL
|
||
CALL GETWORD
|
||
RET C
|
||
LD HL,TMPNAME
|
||
LD DE,MASKARE
|
||
JP MASK
|
||
CREAT_N EQU CREATE.NEW
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; 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
|
||
LD HL,TMPNAME
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
;
|
||
; LD DE,MASKARE
|
||
; CALL MASK
|
||
; RET C
|
||
LD HL,MASKARE
|
||
LD BC,11
|
||
LD A,"?"
|
||
CPIR
|
||
LD A,DSS_Error.sys.INVALID_NAME
|
||
SCF
|
||
RET Z
|
||
CALL LOADDIR
|
||
CALL SEARCH
|
||
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 ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #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
|
||
PUSH HL
|
||
PUSH DE
|
||
CALL DIR_PATH_CHECK.forceCheck
|
||
POP DE
|
||
POP HL
|
||
RET C
|
||
;
|
||
|
||
PUSH DE
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
POP DE
|
||
RET C
|
||
LD HL,MASKARE
|
||
LD BC,11
|
||
LD A,"?"
|
||
CPIR
|
||
LD A,DSS_Error.sys.INVALID_NAME
|
||
SCF
|
||
RET Z
|
||
PUSH DE
|
||
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||
;LD A,#33
|
||
LD A,FAT_ATTR.NoSYSnoVolID
|
||
CALL SEARCH.ASEARCH ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª
|
||
POP HL
|
||
RET C
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
LD HL,MASKARE
|
||
LD BC,11
|
||
LD A,"?"
|
||
CPIR
|
||
LD A,DSS_Error.sys.INVALID_NAME
|
||
SCF
|
||
RET Z
|
||
PUSH IX
|
||
LD A,FAT_ATTR.NoSYSnoVolID
|
||
CALL SEARCH.ASEARCH ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª
|
||
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
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #11. Žâªàë⨥ ä ©« .
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ä ©«
|
||
; A - ०¨¬ ¤®áâ㯠:
|
||
; A=0 ç⥨¥/§ ¯¨áì
|
||
; A=1 ç⥨¥
|
||
; A=2 § ¯¨áì
|
||
; ¢ë室: A - ¤¥áªà¨¯â®à ä ©« , ¥á«¨ CF=0
|
||
; ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
////////////////////////////////////////////////////////////////////////
|
||
OPEN_FN:;!Test Current Dir ;[x] 15/10/23
|
||
LD C,A
|
||
PUSH HL
|
||
PUSH BC
|
||
CALL DIR_PATH_CHECK.forceCheck
|
||
POP BC
|
||
POP HL
|
||
RET C
|
||
LD A,C
|
||
;
|
||
;R08
|
||
OPEN: LD (F_FIRST.ACCESS),A
|
||
CALL GETWORD
|
||
RET C
|
||
LD HL,TMPNAME
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
.FILE: CALL SEARCH
|
||
RET C
|
||
;R02
|
||
.FM: CALL GET_FM
|
||
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
|
||
LD A,(F_FIRST.ACCESS)
|
||
LD (IY+_sFM.ACCESS_MODE),A
|
||
LD A,(TASK)
|
||
LD (IY+_sFM.TASK_NUM),A
|
||
XOR 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
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
;‚å®¤ë¥ § 票ï:
|
||
; C - #12
|
||
; A - ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||
;‚ëå®¤ë¥ § 票ï:
|
||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
////////////////////////////////////////////////////////////////////////
|
||
CLOSE_FN:
|
||
;R08
|
||
CLOSE: LD (F_FIRST.ACCESS),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 D,(IY+_sFM.DIR_CLUSTER)
|
||
LD E,(IY+_sFM.DIR_CLUSTER+1)
|
||
PUSH DE
|
||
XOR A
|
||
CALL SET_FM
|
||
POP DE
|
||
LD (IY+_sFM.DIR_CLUSTER),D
|
||
LD (IY+_sFM.DIR_CLUSTER+1),E
|
||
CALL LOADDIR
|
||
LD A,(F_FIRST.ACCESS)
|
||
CALL SET_FM
|
||
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 D,YH
|
||
LD E,YL
|
||
EX DE,HL
|
||
PUSH HL
|
||
|
||
SET_PAGE_X DIRPAGE
|
||
|
||
POP HL
|
||
LD BC,#0020
|
||
LDIR
|
||
OUT (SLOT3),A
|
||
CALL SAVEDIR
|
||
.NOTMODF:
|
||
LD A,(F_FIRST.ACCESS)
|
||
CALL RES_FM
|
||
RET
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
;‚å®¤ë¥ § 票ï:
|
||
; C - #19
|
||
; HL - 㪠§ ⥫ì ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
|
||
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨ ç¥ 256 ¡ ©â
|
||
; A - âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
|
||
; B = 0 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠11 ¡ ©â "FilenameExt"
|
||
; B = 1 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||
;‚ëå®¤ë¥ § 票ï:
|
||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
////////////////////////////////////////////////////////////////////////
|
||
F_FIRST:
|
||
;!Test Current Dir
|
||
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 (.ACCESS),A
|
||
LD (.DTABUF),DE
|
||
LD A,B
|
||
LD (.FNDMODE),A
|
||
PUSH HL
|
||
CALL LOADDIR
|
||
POP HL
|
||
CALL GETWORD
|
||
RET C
|
||
LD HL,TMPNAME
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
.ACCESS+1:
|
||
LD A,0
|
||
CALL SEARCH.ASEARCH
|
||
RET C
|
||
LD HL,MASKARE
|
||
.DTABUF+1:
|
||
LD DE,0
|
||
LD BC,11 ;!HARDCODE
|
||
LDIR
|
||
LD A,(.ACCESS)
|
||
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
|
||
|
||
EXX
|
||
LD DE,0
|
||
EXX
|
||
.CURHND+2:
|
||
LD IX,0
|
||
LD A,XH
|
||
OR XL
|
||
JP Z,SEARCH.error
|
||
JP SEARCH.SEARCH1
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
;
|
||
;
|
||
////////////////////////////////////////////////////////////////////////
|
||
CHNDISK_FN:
|
||
CALL CHNDISK
|
||
RET C
|
||
PUSH AF
|
||
CALL DIR_PATH_CHANGE.FullCurrent
|
||
POP AF
|
||
RET
|
||
CHNDISK:
|
||
;!TEST
|
||
CALL OPENDSK
|
||
;CALL OPENDSK.force
|
||
;
|
||
;????? R10
|
||
RET C
|
||
LD HL,WorkDirectory
|
||
LD (HL),0
|
||
PUSH AF
|
||
CALL OPENDIR
|
||
POP BC
|
||
RET C
|
||
LD A,B
|
||
; RET C
|
||
; PUSH AF
|
||
; CALL LOADDIR
|
||
; POP AF
|
||
RET
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #1E. ˆä®à¬ æ¨ï ® ⥪ã饬 ª â «®£¥.
|
||
;
|
||
; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â
|
||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
; !FIXIT ¬®¦¥â ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à ?
|
||
////////////////////////////////////////////////////////////////////////
|
||
CURRDIR: LD DE,WorkDirectory
|
||
JR CURRDIR_FN.skip
|
||
CURRDIR_FN:
|
||
LD DE,CurrentDirectory
|
||
.skip: EX DE,HL
|
||
XOR A
|
||
.loop: CP (HL)
|
||
LDI
|
||
JR NZ,.loop
|
||
RET
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #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 ;R01, 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
|
||
|
||
; „ â ¯®-㬮«ç ¨î
|
||
; NC_DAY DW DAY*256+MONTH ;DAY/MONTH
|
||
; NC_HOUR DW #0000 ;HOUR/MINUTE
|
||
; NC_SEC DW #0001 ;SECOND/WEEKDAY
|
||
; NC_YEAR DW YEAR ;YEAR
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #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
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #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) ;R06 ; ãáâ. ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||
AND A
|
||
RET
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #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
|
||
JP DIR_PATH_CHANGE.FullCurrent
|
||
;
|
||
CHDIR: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||
RET C
|
||
LD HL,TMPNAME
|
||
LD A,(HL)
|
||
OR A
|
||
CALL NZ,OPENDIR
|
||
RET
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #1B. ‘®§¤ ¨¥ ª â «®£ .
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;
|
||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||
////////////////////////////////////////////////////////////////////////
|
||
MKDIR: ;!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
|
||
;
|
||
|
||
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||
RET C
|
||
LD HL,TMPNAME ; 8.3 ¨¬ï
|
||
LD DE,MASKARE ; ¡ãä¥à ¨¬¥¨ 11 ᨬ¢. ä®à¬ â
|
||
CALL MASK ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||
RET C
|
||
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||
CALL DSEARCH ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
||
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
|
||
|
||
; IF OLD_SET_BANK
|
||
; PUSH HL
|
||
; ENDIF
|
||
|
||
SET_PAGE_X DIRPAGE
|
||
|
||
; IF OLD_SET_BANK
|
||
; POP HL
|
||
; ENDIF
|
||
|
||
PUSH AF
|
||
LD A,(DIR)
|
||
CP "."
|
||
LD DE,DIR+11 ; âਡãâë § ¯¨á¨
|
||
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
|
||
LDIR ;!FIXIT 㦮 «¨ â ª ¬®£® £à®å âì?
|
||
|
||
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 ;!FIXIT 㦮 «¨ â ª ¬®£® £à®å âì?
|
||
|
||
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
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
||
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;
|
||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||
////////////////////////////////////////////////////////////////////////
|
||
RMDIR: ;!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
|
||
;
|
||
CALL GETWORD
|
||
RET C
|
||
LD HL,TMPNAME
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
LD HL,MASKARE
|
||
LD BC,11
|
||
LD A,"?"
|
||
CPIR
|
||
LD A,DSS_Error.sys.INVALID_NAME
|
||
SCF
|
||
RET Z
|
||
CALL LOADDIR
|
||
CALL DSEARCH
|
||
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 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
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
;‚å®¤ë¥ § 票ï:
|
||
; 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
|
||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||
SCF
|
||
RET
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; —⥨¥ ॣ¨áâ஢ 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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
;!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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; ‡ ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||
; ¢å®¤: 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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; <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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||
WRT_HND:
|
||
SET_PAGE_X DIRPAGE
|
||
|
||
PUSH AF
|
||
LD IX,DIR
|
||
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
|
||
;
|
||
POP 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
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
LD HL,DIR
|
||
LD BC,(SAVEDIR.DIRSIZE)
|
||
DEC BC
|
||
ADD HL,BC
|
||
AND A
|
||
SBC HL,DE
|
||
RET NC
|
||
LD HL,(SAVEDIR.DIRSIZE)
|
||
LD BC,(FatBuffer.B_P_C)
|
||
ADD HL,BC
|
||
LD (SAVEDIR.DIRSIZE),HL
|
||
AND A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; 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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; <20>®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ª â «®£
|
||
;
|
||
; ¢å®¤: a= âਡãâ § ¯¨á¨
|
||
; ¢ë室: de'=¨¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£
|
||
; CF - ª â «®£ ¥ ©¤¥
|
||
DSEARCH:
|
||
LD A,FAT_ATTR.DIRECTORY
|
||
CALL SEARCH.ASEARCH
|
||
RET NC
|
||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
SEARCH: LD A,FAT_ATTR.NoDIRnoVolID
|
||
.ASEARCH:
|
||
EX AF,AF' ; 76ADLSHR
|
||
|
||
SET_PAGE_X DIRPAGE
|
||
|
||
PUSH AF
|
||
EX AF,AF'
|
||
CPL
|
||
LD C,A
|
||
LD IX,DIR
|
||
EXX
|
||
LD DE,0
|
||
EXX
|
||
.SEARCH1:
|
||
LD A,(IX+00)
|
||
OR A
|
||
JR Z,.SEARCH4
|
||
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥ë
|
||
JR Z,.SEARCH3
|
||
LD A,(IX+11)
|
||
AND C
|
||
JR NZ,.SEARCH3
|
||
LD HL,MASKARE
|
||
LD D,XH
|
||
LD E,XL
|
||
LD B,11
|
||
EX DE,HL
|
||
.SEARCH2:
|
||
LD A,(DE)
|
||
CP '?'
|
||
JR Z,.SEARCH5
|
||
CP (HL)
|
||
JR NZ,.SEARCH3
|
||
.SEARCH5:
|
||
INC HL
|
||
INC DE
|
||
DJNZ .SEARCH2
|
||
LD D,XH
|
||
LD E,XL
|
||
LD HL,HANDBUF
|
||
EX DE,HL
|
||
LD BC,HANDBUF.SIZE
|
||
LDIR
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
AND A
|
||
RET
|
||
.SEARCH3:
|
||
EXX
|
||
INC DE
|
||
EXX
|
||
LD DE,#0020 ;!HARDCODE
|
||
ADD IX,DE
|
||
JR NC,SEARCH.SEARCH1
|
||
.error: POP AF
|
||
OUT (SLOT3),A
|
||
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
|
||
SCF
|
||
RET
|
||
.SEARCH4:
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||
SCF
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||
; ¢å®¤: hl=áâப ¨¬¥¨
|
||
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
|
||
;!TEST CHNDISK OPENDSK
|
||
;CALL OPENDSK
|
||
CALL CHNDISK
|
||
;
|
||
POP HL
|
||
RET C
|
||
;
|
||
.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 ª ¡ãä¥à ¬
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
;????? R10
|
||
OPENDSK:
|
||
;!TEST DRV.Open ®¡å®¤
|
||
LD C,A
|
||
LD A,(FatBuffer.DRIVE)
|
||
CP C
|
||
JR Z,.exit
|
||
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:
|
||
XOR A
|
||
CALL SET_FM
|
||
LD A,(HL)
|
||
OR A
|
||
JR NZ,.SUBDIR
|
||
.REROOT1:
|
||
LD DE,0
|
||
LD (IY+_sFM.ST_CLUSTER),E
|
||
LD (IY+_sFM.ST_CLUSTER+1),D
|
||
CALL LOADDIR
|
||
;LD HL,CurrentDirectory
|
||
.dir+1: LD HL,WorkDirectory
|
||
LD (HL),'\'
|
||
INC HL
|
||
LD (HL),#00
|
||
AND A
|
||
RET
|
||
.SUBDIR:
|
||
CP "."
|
||
JR NZ,.SUBDIR2
|
||
LD A,(IY+_sFM.ST_CLUSTER) ;R05 ;!FIXIT ¬®¦® ¯¥à¥¤¥« âì ¯àï¬ë¥ áá뫪¨ ¡¥§ IY
|
||
OR (IY+_sFM.ST_CLUSTER+1) ;R05 ;!FIXIT ¬®¦® ¯¥à¥¤¥« âì ¯àï¬ë¥ áá뫪¨ ¡¥§ IY
|
||
JR NZ,.SUDI1 ;R05
|
||
INC HL ;R05
|
||
LD A,(HL) ;R05
|
||
OR A ;R05
|
||
DEC HL ;R05
|
||
JR Z,.REROOT1 ;R05
|
||
.SUDI1: EXX
|
||
LD HL,MASKARE
|
||
LD DE,MASKARE+1
|
||
LD BC,10 ;!HARDCODE
|
||
LD (HL),' '
|
||
LDIR
|
||
EXX
|
||
LD DE,MASKARE
|
||
.SUBDIR0:
|
||
LDI
|
||
LD A,(HL)
|
||
OR A
|
||
JR NZ,.SUBDIR0
|
||
JR .SUBDIR3
|
||
.SUBDIR2:
|
||
LD DE,MASKARE
|
||
CALL MASK
|
||
RET C
|
||
.SUBDIR3:
|
||
CALL FINDDIR
|
||
RET C
|
||
LD (IY+_sFM.ST_CLUSTER),E
|
||
LD (IY+_sFM.ST_CLUSTER+1),D
|
||
LD DE,#4000
|
||
LD (IY+_sFM.F_SIZE),E
|
||
LD (IY+_sFM.F_SIZE+1),D
|
||
CALL LOADDIR
|
||
AND A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; FIND "MASKAREA" IN DIRECTORY
|
||
FINDDIR:
|
||
SET_PAGE_X DIRPAGE
|
||
;
|
||
PUSH AF
|
||
LD IX,DIR
|
||
.F_01: LD A,(IX+00)
|
||
OR A
|
||
JR Z,.error
|
||
CP #E5
|
||
JR Z,.F_03
|
||
LD A,(IX+11)
|
||
AND #10
|
||
JR Z,.F_03
|
||
LD HL,MASKARE
|
||
LD D,XH
|
||
LD E,XL
|
||
EX DE,HL
|
||
LD B,11
|
||
.loop: LD A,(DE)
|
||
CP "?"
|
||
JR Z,.F_05
|
||
CP (HL)
|
||
JR NZ,.F_03
|
||
.F_05: INC HL
|
||
INC DE
|
||
DJNZ .loop
|
||
LD A,(IX+0)
|
||
CP "."
|
||
JP NZ,.ADDSPEC
|
||
LD A,(IX+1)
|
||
CP "."
|
||
JP NZ,.IT_DIR
|
||
;LD HL,CurrentDirectory
|
||
LD HL,WorkDirectory
|
||
LD D,H
|
||
LD E,L
|
||
INC HL
|
||
;LD BC,CurrentDirectory.DEPTH
|
||
LD BC,WorkDirectory.DEPTH
|
||
XOR A
|
||
CPIR ;!FIXIT ¥â ¯à®¢¥àª¨ § ¢¥à襨¥ ¯® BC=0
|
||
DEC HL ;R09 ;[x] ¨á¯à ¢«¥ ¡ £ á ¯ àᨣ®¬ ¡ãä¥à ª â «®£
|
||
DEC HL
|
||
;LD BC,CurrentDirectory.DEPTH
|
||
LD BC,WorkDirectory.DEPTH
|
||
LD A,'\'
|
||
CPDR
|
||
INC HL
|
||
;AND A
|
||
; CF = 0
|
||
EX DE,HL
|
||
SBC HL,DE
|
||
EX DE,HL
|
||
JR NZ,.MM3
|
||
JP .MM2_5
|
||
.F_03: LD BC,#0020
|
||
ADD IX,BC
|
||
JR NC,.F_01
|
||
.error: POP AF
|
||
OUT (SLOT3),A
|
||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||
SCF
|
||
RET
|
||
.ADDSPEC:
|
||
LD E,XL
|
||
LD D,XH
|
||
;LD HL,CurrentDirectory+1
|
||
;LD BC,CurrentDirectory.DEPTH-1
|
||
LD HL,WorkDirectory+1
|
||
LD BC,WorkDirectory.DEPTH-1
|
||
; XOR A
|
||
; CPIR ;!FIXIT ¥â ¯à®¢¥àª¨ § ¢¥à襨¥ ¯® BC=0
|
||
; DEC HL
|
||
; DEC HL
|
||
; LD A,'\' ; #5C
|
||
; CP (HL)
|
||
; INC HL
|
||
; JR Z,.ADDSPE0
|
||
; LD (HL),A
|
||
; INC HL
|
||
; .ADDSPE0:
|
||
CALL .CHECK_SLASH
|
||
;R11
|
||
LD A,B
|
||
AND A
|
||
JR NZ,.MM1
|
||
LD A,C
|
||
CP 8
|
||
JR C,FINDDIR.error
|
||
;R11
|
||
LD BC,#0820
|
||
.MM1: LD A,(DE)
|
||
INC DE
|
||
CP C
|
||
JR Z,.MM2
|
||
LD (HL),A ;!FIXIT ¢®â âãâ ¬®¦¥â ¢ë«¥§ âì § ¯à¥¤¥«ë ¡ãä¥à ¯à¨ ¤«¨®¬ ¯ã⨠¨ £à®å âì ª®¤ ¨ ¤ ë¥. R11 ¢à¥¬¥® «¥ç¨â ª®áâë«ñ¬
|
||
INC HL
|
||
.MM2 DJNZ .MM1
|
||
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 ;!FIXIT ¥â ¯à®¢¥àª¨ § ¢¥à襨¥ ¯® BC=0
|
||
DEC HL
|
||
DEC HL
|
||
LD A,'\' ; #5C
|
||
CP (HL)
|
||
INC HL
|
||
RET Z
|
||
LD (HL),A
|
||
INC HL
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; <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: 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 '.' ;R07
|
||
SCF ;R07
|
||
JR Z,.MASKB ;R07
|
||
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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; 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
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; <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,DIR ; ªã¤
|
||
LD DE,#4000 ; ᪮«ìª®
|
||
XOR A ; ¤¥áªà¨¯â®à
|
||
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||
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)
|
||
LD B,32 ; !HARDCODE à §¬¥à root-ª â «®£
|
||
SUB B
|
||
JR NC,.RTD1
|
||
ADD A,B
|
||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||
LD DE,DIR ; ¡ãä¥à
|
||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||
RST ToDSS.DRV
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
AND A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; ‘¡à®á¨âì ª¥è ª â «®£ ¤¨áª.
|
||
; ¢å®¤: 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,DIR
|
||
; à §¬¥à ᯨ᪠ª â «®£ 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
|
||
SUB B
|
||
JR NC,.RTD1S
|
||
ADD A,B
|
||
LD B,A
|
||
.RTD1S: LD A,(FatBuffer.DRIVE)
|
||
LD DE,DIR
|
||
LD C,Dss.DRV.Write
|
||
RST ToDSS.DRV
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
AND A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
DIR_PATH_CHANGE:
|
||
.FullCurrent: LD A,(FatBuffer.DRIVE)
|
||
ADD 'A'
|
||
LD (CurrentPath),A
|
||
;
|
||
.Current: LD HL,WorkDirectory
|
||
LD DE,CurrentDirectory
|
||
LD BC,DIRECTORY_PATH_LENGTH
|
||
LDIR
|
||
RET
|
||
;
|
||
.FullWork: LD A,(CurrentPath)
|
||
SUB 'A'
|
||
LD (FatBuffer.DRIVE),A
|
||
;
|
||
.Work: LD HL,CurrentDirectory
|
||
LD DE,WorkDirectory
|
||
LD BC,DIRECTORY_PATH_LENGTH
|
||
LDIR
|
||
RET
|
||
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 FINDDIR.CHECK_SLASH
|
||
CALL .checkDrive
|
||
JR Z,.checkDir
|
||
;
|
||
LD HL,CurrentPath
|
||
LD A,(FatBuffer.DRIVE)
|
||
ADD 'A'
|
||
CP (HL)
|
||
JP 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
|
||
;
|
||
JR .ReDir
|
||
.end: CP (HL)
|
||
RET Z
|
||
.ReDir: LD HL,CurrentPath
|
||
JP .gotoPath
|
||
;
|
||
.checkDrive: LD HL,CurrentPath
|
||
LD A,(FatBuffer.DRIVE)
|
||
ADD 'A'
|
||
CP (HL)
|
||
RET
|
||
.gotoPath: CALL FINDDIR.CHECK_SLASH
|
||
JP GETWORD
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
|
||
|
||
;!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
|
||
;
|
||
|
||
;PATH0: DW #0000
|
||
;ACCESS: DB #00
|
||
;DTABUF: DW #0000
|
||
;CURHND: DW #0000
|
||
;NO_NEXT: DB #00
|
||
;.YES EQU 0
|
||
;.NO EQU #FF
|
||
;FNDMODE: DB #00
|
||
;//MODULE: DOS5
|
||
;[END]
|
||
|
||
;DIRSIZE: WORD 0 ; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||
|
||
|
||
;!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
|
||
;----------------------------------------------------------------------;
|
||
; ;!TEST
|
||
; SAVE_CURRENT_PATH:
|
||
; SET_PAGE_X ENVPAGE
|
||
; PUSH AF
|
||
; CALL CURRDSK
|
||
; ADD A,"A"
|
||
; LD HL,TMP_CURDIR
|
||
; LD (HL),A
|
||
; INC HL
|
||
; LD A,":"
|
||
; LD (HL),A
|
||
; INC HL
|
||
; CALL CURRDIR
|
||
; POP AF
|
||
; OUT (SLOT3),A
|
||
; RET
|
||
; BACK_CURRENT_PATH:
|
||
; SET_PAGE_X ENVPAGE
|
||
; PUSH AF
|
||
; LD HL,TMP_CURDIR
|
||
; CALL CHDIR
|
||
; POP AF
|
||
; OUT (SLOT3),A
|
||
; RET
|
||
; ;
|
||
;----------------------------------------------------------------------;
|
||
;!TEST
|
||
;BANK:
|
||
; LD C,A
|
||
; LD B,0
|
||
; LD HL,BANKTBL
|
||
; ADD HL,BC
|
||
; IN A,(SLOT3)
|
||
; LD C,SLOT3
|
||
; OUTI
|
||
; RET
|
||
;
|