mirror of
https://github.com/romychs/SprinterFirmware.git
synced 2025-04-16 00:55:16 +03:00
1692 lines
20 KiB
NASM
1692 lines
20 KiB
NASM
|
|
;[BEGIN]
|
|
;//MODULE: DOS5
|
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
;//UPDATE: 24-10-1999 DNS Restore module
|
|
;-------------------------------------------------------------
|
|
;Rev Date Name Description
|
|
;-------------------------------------------------------------
|
|
;R08 15-04-2003 DNS SAVE AND RESTORE CURPATH 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
|
|
INC B
|
|
DEC B
|
|
JR Z,RATTRIB
|
|
DEC B
|
|
JR Z,WATTRIB
|
|
JP NOPS
|
|
|
|
RATTRIB
|
|
XOR A
|
|
CALL OPENATR ;R02
|
|
RET C
|
|
LD C,A
|
|
LD A, (FM_BUF_ATTR)
|
|
LD B,A
|
|
LD A,C
|
|
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
|
|
LD C,A
|
|
LD A,(FM_BUF_AM)
|
|
SET 7,A
|
|
LD (FM_BUF_AM),A
|
|
|
|
RES 3,B ;CLEAR LABEL ATTR ;R03
|
|
LD A,B
|
|
LD (FM_BUF_ATTR),A
|
|
LD A,C
|
|
PUSH BC
|
|
CALL CLOSE
|
|
POP BC
|
|
RET C
|
|
LD A,B
|
|
AND A
|
|
RET
|
|
|
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
|
; OUTPUT: A - FM
|
|
|
|
CREATE
|
|
AND #E7 ;R04
|
|
LD (ACCESS),A
|
|
LD (PATH+1),HL
|
|
PUSH HL
|
|
CALL GETWORD
|
|
POP HL
|
|
RET C
|
|
LD HL,TMPNAME
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
CALL SEARCH
|
|
CALL NC,DELFILE ;FILE EXIST RECREAT
|
|
JR CREAT
|
|
|
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
|
; OUTPUT: A - FM
|
|
|
|
CREAT_N
|
|
AND #E7 ;R04 %76A00SHR
|
|
LD (ACCESS),A
|
|
LD (PATH+1),HL
|
|
PUSH HL
|
|
CALL GETWORD
|
|
POP HL
|
|
RET C
|
|
LD HL,TMPNAME
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
CALL SEARCH
|
|
LD A,7
|
|
CCF
|
|
RET C
|
|
|
|
CREAT
|
|
LD HL,MASKARE
|
|
LD DE,HANDBUF
|
|
LD BC,11
|
|
LDIR
|
|
EX DE,HL
|
|
LD A,(ACCESS)
|
|
LD (HL),A
|
|
INC HL
|
|
LD BC,#0A00
|
|
|
|
FIHND
|
|
LD (HL),C
|
|
INC HL
|
|
DJNZ FIHND
|
|
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
|
|
FIHND1
|
|
|
|
LD (HL),C
|
|
INC HL
|
|
DJNZ FIHND1
|
|
CALL WRT_HND
|
|
CALL SAVEDIR
|
|
|
|
PATH
|
|
LD HL,0x0
|
|
XOR A
|
|
JP OPEN
|
|
|
|
; TODO: Unknown code
|
|
DELETE0
|
|
BIT 0x0,A
|
|
SCF
|
|
LD A,0x8
|
|
RET NZ
|
|
|
|
; INPUT: HL - "filename.ext",#00 without simbols * ?
|
|
DELETE
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
LD HL,MASKARE
|
|
LD BC,11
|
|
LD A,"?"
|
|
CPIR
|
|
LD A,16
|
|
SCF
|
|
RET Z
|
|
CALL LOADDIR
|
|
CALL SEARCH
|
|
RET C
|
|
|
|
DELFILE
|
|
XOR A
|
|
CALL BANK
|
|
LD (IX+NAM),0xE5
|
|
LD E,(IX+CLU1)
|
|
LD D,(IX+CLU2)
|
|
OUT (PAGE3),A
|
|
LD A,E
|
|
OR D
|
|
JP Z,SAVEDIR ; SMALDEL
|
|
|
|
DEL01
|
|
EX DE,HL
|
|
CALL R_F_FAT
|
|
PUSH DE
|
|
PUSH AF
|
|
LD DE,#0000
|
|
CALL W_T_FAT
|
|
POP AF
|
|
POP DE
|
|
JR NC,DEL01
|
|
CALL WR_FAT
|
|
JP SAVEDIR
|
|
|
|
; SMALDEL
|
|
; CALL SAVEDIR
|
|
; AND A
|
|
; RET
|
|
|
|
; INPUT: HL - "old_name.ext",#00 without simbols * ?
|
|
; DE - "new_name.ext",#00 without simbols * ?
|
|
|
|
RENAME
|
|
PUSH DE
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
POP DE
|
|
RET C
|
|
LD HL,MASKARE
|
|
LD BC,11
|
|
LD A,"?"
|
|
CPIR
|
|
LD A,16
|
|
SCF
|
|
RET Z
|
|
PUSH DE
|
|
CALL LOADDIR
|
|
LD A,#33
|
|
CALL ASEARCH
|
|
POP HL
|
|
RET C
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
LD HL,MASKARE
|
|
LD BC,11
|
|
LD A,"?"
|
|
CPIR
|
|
LD A,16
|
|
SCF
|
|
RET Z
|
|
PUSH IX
|
|
LD A,#33
|
|
CALL ASEARCH
|
|
POP IX
|
|
LD A,7
|
|
CCF
|
|
RET C
|
|
XOR A
|
|
CALL BANK
|
|
LD HL,MASKARE
|
|
LD D,XH
|
|
LD E,XL
|
|
LD BC,11
|
|
LDIR
|
|
OUT (PAGE3),A
|
|
JP SAVEDIR
|
|
|
|
|
|
OPENATR
|
|
LD (ACCESS),A
|
|
CALL GETWORD
|
|
RET C
|
|
LD HL,TMPNAME
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
LD A,#37 ;%00AD0SHR
|
|
CALL ASEARCH
|
|
JR NC,OPENAT
|
|
RET
|
|
|
|
|
|
OPEN
|
|
LD (ACCESS),A
|
|
CALL GETWORD
|
|
RET C
|
|
LD HL,TMPNAME
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
|
|
OPENEXE
|
|
CALL SEARCH
|
|
RET C
|
|
|
|
OPENAT
|
|
CALL GET_FM
|
|
RET C
|
|
LD A,C
|
|
EX AF,AF'
|
|
EXX
|
|
LD (FM_BUF_HNDL),DE
|
|
EXX
|
|
LD HL,HANDBUF
|
|
LD DE, FM_BUF
|
|
LD BC,#0020
|
|
LDIR
|
|
LD A,(ACCESS)
|
|
LD (FM_BUF_AM),A
|
|
LD A,(TASK)
|
|
LD (FM_BUF_TASK),A
|
|
XOR A
|
|
LD (FM_BUF_FPL),A
|
|
LD (FM_BUF_FPL+1),A
|
|
LD (FM_BUF_FPH),A
|
|
LD (FM_BUF_FPH+1),A
|
|
LD A,(DRIVE)
|
|
LD (FM_BUF_DC),A
|
|
LD DE,(FM_BUF_ST_CL)
|
|
LD (FM_BUF_DIR_CL),DE
|
|
EX AF,AF'
|
|
AND A
|
|
RET
|
|
|
|
CLOSE ;R08
|
|
LD (ACCESS),A
|
|
CALL SET_FM
|
|
RET C
|
|
LD A,(FM_BUF_TASK)
|
|
LD C,A
|
|
LD A,(TASK)
|
|
CP C
|
|
LD A,0x13
|
|
SCF
|
|
RET NZ
|
|
LD A,(FM_BUF_AM)
|
|
BIT 7,A
|
|
JR Z,NOTMODF
|
|
LD DE, (FM_BUF_DIR_CL)
|
|
PUSH DE
|
|
XOR A
|
|
CALL SET_FM
|
|
POP DE
|
|
LD (FM_BUF_DIR_CL), DE
|
|
CALL LOADDIR
|
|
LD A,(ACCESS)
|
|
CALL SET_FM
|
|
LD HL,DIR
|
|
LD DE,#0020
|
|
LD BC,(FM_BUF_HNDL)
|
|
JR CLOSE2
|
|
CLOSE1
|
|
ADD HL,DE
|
|
DEC BC
|
|
CLOSE2
|
|
LD A,B
|
|
OR C
|
|
JR NZ,CLOSE1
|
|
EX DE,HL
|
|
;LD D,YH
|
|
;LD E,YL
|
|
XOR A
|
|
CALL BANK
|
|
LD HL, FM_BUF
|
|
LD BC,#0020
|
|
LDIR
|
|
OUT (PAGE3),A
|
|
CALL SAVEDIR
|
|
|
|
NOTMODF
|
|
LD A,(ACCESS)
|
|
JP RES_FM
|
|
|
|
//PATH0 DW #0000
|
|
|
|
ACCESS DB #00
|
|
|
|
HANDBUF DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
|
|
WRT_HND
|
|
XOR A
|
|
CALL BANK
|
|
PUSH AF
|
|
LD IX,DIR
|
|
EXX
|
|
LD DE,0
|
|
EXX
|
|
WRT_HN1
|
|
LD A,(IX+00)
|
|
OR A
|
|
JR Z,WRT_HN2
|
|
CP #E5
|
|
JR Z,WRT_HN2
|
|
LD BC,#0020
|
|
ADD IX,BC
|
|
JR NC,WRT_HN1
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
LD A,9
|
|
SCF
|
|
RET
|
|
|
|
WRT_HN2
|
|
LD D,XH
|
|
LD E,XL
|
|
LD HL,HANDBUF
|
|
LD BC,#0020
|
|
LDIR
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
LD HL,DIR
|
|
LD BC,(DIRSIZE)
|
|
DEC BC
|
|
ADD HL,BC
|
|
AND A
|
|
SBC HL,DE
|
|
RET NC
|
|
LD HL,(DIRSIZE)
|
|
LD BC,(B_P_C)
|
|
ADD HL,BC
|
|
LD (DIRSIZE),HL
|
|
AND A
|
|
RET
|
|
|
|
DOSNAME
|
|
INC B
|
|
DEC B
|
|
JR Z,GETNAME
|
|
DEC B
|
|
JP Z,MASK
|
|
LD A,1
|
|
SCF
|
|
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
|
|
|
|
DTABUF DW #0000
|
|
CURHND DW #0000
|
|
NO_NEXT DB #00
|
|
FNDMODE DB #00
|
|
|
|
F_FIRST
|
|
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
|
|
LD A,(ACCESS)
|
|
CALL ASEARCH
|
|
RET C
|
|
LD HL,MASKARE
|
|
LD DE,(DTABUF)
|
|
LD BC,11
|
|
LDIR
|
|
LD A,(ACCESS)
|
|
LD (DE),A
|
|
|
|
FIND_S
|
|
INC DE
|
|
LD BC,#0020
|
|
ADD IX,BC
|
|
LD (CURHND),IX
|
|
LD HL,HANDBUF+12
|
|
LD BC,20
|
|
LDIR
|
|
LD A,(HANDBUF+11)
|
|
LD (DE),A
|
|
INC DE
|
|
LD HL,HANDBUF
|
|
LD A,(FNDMODE)
|
|
OR A
|
|
JR NZ,FIND_M2
|
|
LD BC,11
|
|
LDIR
|
|
FIND_M1
|
|
LD A,1
|
|
LD (NO_NEXT),A
|
|
XOR A
|
|
RET
|
|
|
|
FIND_M2
|
|
CALL GETNAME
|
|
JR FIND_M1
|
|
|
|
F_NEXT
|
|
LD A,(NO_NEXT)
|
|
OR A
|
|
LD A,14
|
|
SCF
|
|
RET Z
|
|
LD (DTABUF),DE
|
|
LD HL,MASKARE
|
|
EX DE, HL
|
|
LD BC,11
|
|
LDIR
|
|
XOR A
|
|
LD (NO_NEXT),A
|
|
LD A,(HL)
|
|
PUSH HL
|
|
CALL NSEARCH
|
|
POP DE
|
|
RET C
|
|
JR FIND_S
|
|
|
|
NSEARCH
|
|
EX AF,AF'
|
|
XOR A
|
|
CALL BANK
|
|
PUSH AF
|
|
EX AF,AF'
|
|
CPL
|
|
LD C,A
|
|
EXX
|
|
LD DE,0
|
|
EXX
|
|
LD IX,(CURHND)
|
|
LD A,IXH
|
|
OR IXL
|
|
JR Z,SEARCH31
|
|
JR SEARCH1
|
|
|
|
DSEARCH
|
|
LD A,#10
|
|
CALL ASEARCH
|
|
RET NC
|
|
LD A,4
|
|
RET
|
|
|
|
SEARCH
|
|
LD A,0x27 ;%00100011
|
|
|
|
ASEARCH
|
|
EX AF,AF' ; 76ADLSHR
|
|
XOR A
|
|
CALL BANK
|
|
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,SEARCH32
|
|
CP #E5
|
|
JP Z,SEARCH3
|
|
LD A,(IX+11)
|
|
AND C
|
|
JP 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)
|
|
JP NZ,SEARCH3
|
|
SEARCH5
|
|
INC HL
|
|
INC DE
|
|
DJNZ SEARCH2
|
|
LD D,XH
|
|
LD E,XL
|
|
LD HL,HANDBUF
|
|
EX DE,HL
|
|
LD BC,#0020
|
|
LDIR
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
SEARCH3
|
|
EXX
|
|
INC DE
|
|
EXX
|
|
LD DE,#0020
|
|
ADD IX,DE
|
|
JP NC,SEARCH1
|
|
|
|
SEARCH31
|
|
LD E,0x23
|
|
JR SEARCH4
|
|
SEARCH32
|
|
LD E,0x3
|
|
|
|
SEARCH4
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
LD A,E
|
|
SCF
|
|
RET
|
|
|
|
GETWORD
|
|
LD DE,TMPNAME
|
|
LD BC,#0DFF
|
|
GETWRD1
|
|
LD A,(HL)
|
|
INC HL
|
|
CP "\\"
|
|
JR Z,DIRNAME
|
|
CP ":"
|
|
JR Z,DRVNAME
|
|
LD (DE),A
|
|
INC DE
|
|
CP #21
|
|
CCF
|
|
RET NC
|
|
DJNZ GETWRD1
|
|
LD A,16
|
|
SCF
|
|
RET
|
|
|
|
DIRNAME
|
|
LD A,#00
|
|
LD (DE),A
|
|
PUSH HL
|
|
LD HL,TMPNAME
|
|
CALL OPENDIR
|
|
POP HL
|
|
JR NC,GETWORD
|
|
RET
|
|
|
|
DRVNAME
|
|
LD A,(TMPNAME)
|
|
RES 5,A
|
|
SUB 0x41
|
|
PUSH HL
|
|
CALL OPENDSK
|
|
POP HL
|
|
JR NC,GETWORD
|
|
RET
|
|
|
|
TMPNAME DB " ",#00
|
|
|
|
OPENDSK
|
|
LD C,A
|
|
LD A,(DRIVE)
|
|
CP C
|
|
JR NZ,OPDISK1
|
|
JR OPDISK2
|
|
OPDISK1
|
|
LD A,C
|
|
CALL CHNDISK
|
|
RET C
|
|
OPDISK2
|
|
LD A,(LDRIVE)
|
|
AND A
|
|
RET
|
|
|
|
|
|
OPENDIR
|
|
XOR A
|
|
CALL SET_FM
|
|
LD A,(HL)
|
|
OR A
|
|
JR NZ,SUBDIR
|
|
REROOT1
|
|
LD DE,0
|
|
LD (FM_BUF_ST_CL),DE
|
|
CALL LOADDIR
|
|
LD HL,DIRSPEC
|
|
LD (HL),#5C ; \
|
|
INC HL
|
|
LD (HL),#00
|
|
AND A
|
|
RET
|
|
|
|
SUBDIR CP "."
|
|
JR NZ,SUBDIR2
|
|
LD A,(FM_BUF_ST_CL+1)
|
|
LD C,A
|
|
LD A,(FM_BUF_ST_CL)
|
|
OR C
|
|
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
|
|
LD (HL),#20
|
|
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 (FM_BUF_ST_CL),DE
|
|
LD DE,#4000
|
|
LD (FM_BUF_FSL),DE
|
|
CALL LOADDIR
|
|
AND A
|
|
RET
|
|
|
|
FINDD03
|
|
LD BC,#0020
|
|
ADD IX,BC
|
|
JR NC,FINDD01
|
|
FINDD04
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
LD A,4
|
|
SCF
|
|
RET
|
|
|
|
; FIND "MASKAREA" IN DIRECTORY
|
|
FINDDIR
|
|
XOR A
|
|
CALL BANK
|
|
PUSH AF
|
|
LD IX,DIR
|
|
FINDD01
|
|
LD A,(IX+00)
|
|
OR A
|
|
JR Z,FINDD04
|
|
CP #E5
|
|
JR Z,FINDD03
|
|
LD A,(IX+11)
|
|
AND #10
|
|
JR Z,FINDD03
|
|
LD HL,MASKARE
|
|
LD D,XH
|
|
LD E,XL
|
|
EX DE,HL
|
|
LD B,11
|
|
FINDD02
|
|
LD A,(DE)
|
|
CP "?"
|
|
JR Z,FINDD05
|
|
CP (HL)
|
|
JR NZ,FINDD03
|
|
FINDD05
|
|
INC HL
|
|
INC DE
|
|
DJNZ FINDD02
|
|
LD A,(IX+0)
|
|
CP "."
|
|
JR NZ,ADDSPEC
|
|
LD A,(IX+1)
|
|
CP "."
|
|
JR NZ,IT_DIR
|
|
LD HL,DIRSPEC
|
|
LD D,H
|
|
LD E,L
|
|
LD BC,#100
|
|
XOR A
|
|
CPIR
|
|
DEC HL
|
|
LD BC,#100
|
|
LD A,#5C ; \
|
|
CPDR
|
|
INC HL
|
|
AND A
|
|
EX DE,HL
|
|
SBC HL,DE
|
|
EX DE,HL
|
|
JR NZ,ROTZ
|
|
INC HL
|
|
ROTZ
|
|
LD (HL),0
|
|
IT_DIR
|
|
LD E,(IX+CLU1)
|
|
LD D,(IX+CLU2)
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
ADDSPEC LD E,XL
|
|
LD D,XH
|
|
LD HL,DIRSPEC
|
|
LD BC,#FF
|
|
XOR A
|
|
CPIR
|
|
DEC HL
|
|
DEC HL
|
|
LD A,#5C ;"\"
|
|
CP (HL)
|
|
INC HL
|
|
JR Z,ADDSPE0
|
|
LD (HL),A
|
|
INC HL
|
|
ADDSPE0 LD BC,#0820
|
|
MM1 LD A,(DE)
|
|
INC DE
|
|
CP C
|
|
JR Z,MM2
|
|
LD (HL),A
|
|
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
|
|
INC HL
|
|
|
|
MM3 LD (HL),0
|
|
JR IT_DIR
|
|
|
|
CURRDIR EX DE,HL
|
|
LD HL,DIRSPEC
|
|
CURDIR1 LD A,(HL)
|
|
OR A
|
|
LDI
|
|
JR NZ,CURDIR1
|
|
RET
|
|
|
|
LOADDIR
|
|
XOR A
|
|
LD L,A
|
|
LD H,A
|
|
PUSH HL
|
|
POP IX
|
|
LD B,A
|
|
CALL MOVE_FP
|
|
XOR A
|
|
CALL BANK
|
|
PUSH AF
|
|
LD HL,#C000
|
|
LD DE,#C001
|
|
LD BC,#3FFF
|
|
LD (HL),L
|
|
LDIR
|
|
LD A,(DRIVE)
|
|
LD (FM_BUF_DC),A
|
|
LD DE,(FM_BUF_ST_CL)
|
|
LD A,D
|
|
OR E
|
|
JR Z,LROTDIR
|
|
LD HL,DIR
|
|
LD DE,#4000
|
|
XOR A
|
|
CALL READ
|
|
LD (DIRSIZE),DE
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
LROTDIR
|
|
LD HL,(DIR_FRH)
|
|
LD IX,(DIR_FRL)
|
|
LD A,(DIR_S_S)
|
|
LD B,32
|
|
SUB B
|
|
JR NC,RTD1
|
|
ADD A,B
|
|
LD B,A
|
|
RTD1
|
|
LD A,(DRIVE)
|
|
LD C,5
|
|
LD DE,DIR
|
|
RST #18
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
SAVEDIR
|
|
XOR A
|
|
LD L,A
|
|
LD H,A
|
|
PUSH HL
|
|
POP IX
|
|
LD B,A
|
|
CALL MOVE_FP
|
|
XOR A
|
|
CALL BANK
|
|
PUSH AF
|
|
LD A,(DRIVE)
|
|
LD (FM_BUF_DC),A
|
|
LD DE,(FM_BUF_ST_CL)
|
|
LD A,D
|
|
OR E
|
|
JR Z,SROTDIR
|
|
LD HL,DIR
|
|
LD DE,(DIRSIZE)
|
|
XOR A
|
|
CALL WRITE
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
SROTDIR LD HL,(DIR_FRH)
|
|
LD IX,(DIR_FRL)
|
|
LD A,(DIR_S_S)
|
|
LD B,32
|
|
SUB B
|
|
JR NC,RTD1S
|
|
ADD A,B
|
|
LD B,A
|
|
RTD1S LD A,(DRIVE)
|
|
LD C,6
|
|
LD DE,DIR
|
|
RST #18
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
AND A
|
|
RET
|
|
|
|
DIRSIZE DW 0
|
|
|
|
BANK
|
|
LD C,A
|
|
LD B,0
|
|
LD HL,BANKTBL
|
|
ADD HL,BC
|
|
IN A,(PAGE3)
|
|
LD C,PAGE3
|
|
OUTI
|
|
AND A
|
|
RET
|
|
|
|
BANKTBL DB #FF,#FF,#FF,#FF
|
|
|
|
MASKARE
|
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
; 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),#20
|
|
LD BC,10
|
|
LDIR
|
|
POP DE
|
|
POP HL
|
|
LD A,(HL)
|
|
CP "." ;R07
|
|
SCF ;R07
|
|
JR Z,MASKB ;R07
|
|
CP #21
|
|
MASKB LD A,16
|
|
RET C
|
|
LD BC,#0902
|
|
MASK1 LD A,(HL)
|
|
CP #21
|
|
CCF
|
|
RET NC
|
|
CP #22
|
|
JR Z,MASK7
|
|
CP "*"
|
|
JR Z,MASK3
|
|
CP "+"
|
|
JR Z,MASK7
|
|
CP ","
|
|
JR Z,MASK7
|
|
CP "."
|
|
JR Z,MASK5
|
|
CP "/"
|
|
JR Z,MASK7
|
|
CP ":"
|
|
JR Z,MASK7
|
|
CP ";"
|
|
JR Z,MASK7
|
|
CP "<"
|
|
JR Z,MASK7
|
|
CP "="
|
|
JR Z,MASK7
|
|
CP ">"
|
|
JR Z,MASK7
|
|
CP "["
|
|
JR Z,MASK7
|
|
CP #5C ;"\"
|
|
JR Z,MASK7
|
|
CP "]"
|
|
JR Z,MASK7
|
|
CP "|"
|
|
JR Z,MASK7
|
|
; CP "a"
|
|
; JR C,MASK2
|
|
; CP "{"
|
|
; JR NC,MASK2
|
|
; SUB #20
|
|
CALL UPPER
|
|
MASK2
|
|
LD (DE),A
|
|
INC HL
|
|
INC DE
|
|
DJNZ MASK1
|
|
MASK7
|
|
LD A,16
|
|
SCF
|
|
RET
|
|
|
|
MASK3
|
|
LD A,"?"
|
|
INC HL
|
|
DJNZ MASK6
|
|
JR MASK7
|
|
|
|
MASK6
|
|
LD (DE),A
|
|
INC DE
|
|
DJNZ MASK6
|
|
LD B,1
|
|
JR MASK1
|
|
|
|
MASK5
|
|
LD A," "
|
|
INC HL
|
|
DJNZ MASK4
|
|
|
|
MASK51
|
|
LD B,4
|
|
DEC C
|
|
JR NZ,MASK1
|
|
JR MASK7
|
|
|
|
MASK4
|
|
LD (DE),A
|
|
INC DE
|
|
DJNZ MASK4
|
|
JR MASK51
|
|
|
|
UPPER
|
|
CP "a"
|
|
RET C
|
|
CP "{"
|
|
JR NC,MDUPPER
|
|
SUB #20
|
|
RET
|
|
|
|
MDUPPER
|
|
CP #A0
|
|
RET C
|
|
CP #B0
|
|
JR NC,BGUPPER
|
|
SUB #20
|
|
RET
|
|
|
|
BGUPPER
|
|
CP #E0
|
|
RET C
|
|
CP #F0
|
|
JR NC,HGUPPER
|
|
SUB #50
|
|
RET
|
|
|
|
HGUPPER
|
|
CP #F1
|
|
RET NZ
|
|
DEC A
|
|
RET
|
|
|
|
SYSTIME
|
|
LD C,#F5
|
|
RST #08
|
|
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,#F6
|
|
RST #08
|
|
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,#F6
|
|
RST #08
|
|
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,#F7
|
|
RST #08
|
|
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
|
|
|
|
RCMOS LD C,#F6
|
|
RST #08
|
|
; 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
|
|
|
|
NOCMOS LD DE,(NC_DAY) ;DAY/MONTH
|
|
LD HL,(NC_HOUR) ;HOUR/MINUTE
|
|
LD BC,(NC_SEC) ;SECOND/WEEKDAY
|
|
LD IX,(NC_YEAR) ;YEAR
|
|
AND A
|
|
RET
|
|
|
|
NOCMOS2 LD C,0
|
|
LD (NC_DAY),DE ;DAY/MONTH
|
|
LD (NC_HOUR),HL ;HOUR/MINUTE
|
|
LD (NC_SEC),BC ;SECOND/WEEKDAY
|
|
LD (NC_YEAR),IX ;YEAR
|
|
AND A
|
|
RET
|
|
|
|
SETTIME
|
|
DB 0xDD ; TODO: Undocumented
|
|
PUSH HL
|
|
PUSH BC
|
|
PUSH HL
|
|
PUSH DE
|
|
LD C,#F5
|
|
RST #08
|
|
JR 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,#F7
|
|
RST #08
|
|
|
|
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
|
|
|
|
|
|
WCMOS CALL HEX2BCD
|
|
LD C,#F7
|
|
RST #08
|
|
RET
|
|
|
|
; INPUT : A - HEX
|
|
; OUTPUT: A - BCD
|
|
HEX2BCD
|
|
LD BC,#0AFF
|
|
H2B INC C
|
|
SUB B
|
|
JR NC,H2B
|
|
ADD A,B
|
|
LD B,A
|
|
LD A,C
|
|
RLCA
|
|
RLCA
|
|
RLCA
|
|
RLCA
|
|
AND #F0
|
|
OR B
|
|
RET
|
|
|
|
NC_DAY DW DAY*256+MONTH ;DAY/MONTH
|
|
NC_HOUR DW 0x0000 ; HOUR/MINUTE
|
|
NC_SEC DW 0x0001 ; SECOND/WEEKDAY
|
|
NC_YEAR DW YEAR ; YEAR
|
|
|
|
|
|
GET_D_T
|
|
CALL SET_FM
|
|
RET C
|
|
LD E,(IY+TIM1)
|
|
LD D,(IY+TIM2)
|
|
LD C,(IY+DAT1)
|
|
LD B,(IY+DAT2)
|
|
CALL RMKTIME
|
|
AND A
|
|
RET
|
|
|
|
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+TIM1),E
|
|
LD (IY+TIM2),D
|
|
LD (IY+DAT1),C
|
|
LD (IY+DAT2),B
|
|
SET 7,(IY+AMODE) ;R06
|
|
AND A
|
|
RET
|
|
|
|
;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
|
|
|
|
;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
|
|
|
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME[\]",0
|
|
|
|
CHDIR CALL GETWORD
|
|
RET C
|
|
LD HL,TMPNAME
|
|
LD A,(HL)
|
|
OR A
|
|
CALL NZ,OPENDIR
|
|
RET
|
|
|
|
|
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
|
|
|
MKDIR
|
|
CALL GETWORD
|
|
RET C
|
|
LD HL,TMPNAME
|
|
LD DE,MASKARE
|
|
CALL MASK
|
|
RET C
|
|
CALL LOADDIR
|
|
CALL DSEARCH
|
|
LD A,15
|
|
CCF
|
|
RET C
|
|
CALL G_CLUST
|
|
RET C
|
|
PUSH HL
|
|
LD DE,(ENDCLUS)
|
|
CALL W_T_FAT
|
|
CALL WR_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
|
|
FIHND0
|
|
LD (HL),C
|
|
INC HL
|
|
DJNZ FIHND0
|
|
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
|
|
POP DE
|
|
PUSH DE
|
|
LD (HL),E
|
|
INC HL
|
|
LD (HL),D
|
|
INC HL
|
|
LD BC,#0400
|
|
FIHND2
|
|
LD (HL),C
|
|
INC HL
|
|
DJNZ FIHND2
|
|
CALL WRT_HND
|
|
CALL SAVEDIR
|
|
LD HL,SECBUF
|
|
LD (HL),"."
|
|
LD BC,0xA20
|
|
MKD02
|
|
INC HL
|
|
LD (HL),C
|
|
DJNZ MKD02
|
|
INC HL
|
|
LD DE,HANDBUF+11
|
|
EX DE,HL
|
|
LD BC,21
|
|
LDIR
|
|
EX DE,HL
|
|
LD (HL),"."
|
|
INC HL
|
|
LD (HL),"."
|
|
LD BC,0x0920
|
|
|
|
MKD03
|
|
INC HL
|
|
LD (HL),C
|
|
DJNZ MKD03
|
|
INC HL
|
|
PUSH HL
|
|
XOR A
|
|
CALL BANK
|
|
POP HL
|
|
PUSH AF
|
|
LD A,(DIR)
|
|
CP "."
|
|
LD DE,DIR+11
|
|
JR Z,MKD04
|
|
LD IX,HANDBUF
|
|
XOR A
|
|
LD (IX+CLU1),A
|
|
LD (IX+CLU2),A
|
|
LD DE,HANDBUF+11
|
|
|
|
MKD04
|
|
EX DE,HL
|
|
LD BC,21
|
|
LDIR
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
EX DE,HL
|
|
LD D,H
|
|
LD E,L
|
|
INC DE
|
|
LD (HL),0
|
|
LD BC,512-65
|
|
LDIR
|
|
POP HL
|
|
CALL NSECTOR
|
|
LD A,(S_P_C)
|
|
|
|
MKD12
|
|
PUSH AF
|
|
PUSH HL
|
|
PUSH IX
|
|
IN A,(PAGE3)
|
|
PUSH AF
|
|
IN A,(PAGE0)
|
|
OUT (PAGE3),A
|
|
;
|
|
LD DE,SECBUF+#C000
|
|
LD B,1
|
|
LD A,(DRIVE)
|
|
LD C,6
|
|
RST #18
|
|
;
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
|
|
LD HL,SECBUF
|
|
LD DE,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
|
|
|
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
|
|
|
RMDIR
|
|
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,16
|
|
SCF
|
|
RET Z
|
|
CALL LOADDIR
|
|
CALL DSEARCH
|
|
RET C
|
|
LD HL,(HANDBUF+CLU1)
|
|
PUSH IX
|
|
RMD17
|
|
PUSH HL
|
|
CALL NSECTOR
|
|
LD A,(S_P_C)
|
|
RMD12
|
|
PUSH AF
|
|
PUSH HL
|
|
PUSH IX
|
|
IN A,(PAGE3)
|
|
PUSH AF
|
|
IN A,(PAGE0)
|
|
OUT (PAGE3),A
|
|
|
|
LD DE,SECBUF+#C000
|
|
LD BC,#0105
|
|
LD A,(DRIVE)
|
|
RST #18
|
|
|
|
POP AF
|
|
OUT (PAGE3),A
|
|
|
|
LD B,16
|
|
LD HL,SECBUF
|
|
RMD10
|
|
LD A,(HL)
|
|
OR A
|
|
JR Z,RMD15 ; DIR EMPTY
|
|
CP "."
|
|
JR Z,RMD14
|
|
CP #E5
|
|
JR Z,RMD14
|
|
LD DE,11
|
|
ADD HL,DE
|
|
LD A,(HL)
|
|
SBC HL,DE
|
|
AND 0x8
|
|
JR Z,RMD16 ; 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
|
|
EX DE,HL
|
|
JR NC,RMD17
|
|
RMD18
|
|
POP IX
|
|
JP DELFILE
|
|
|
|
RMD15 POP IX
|
|
POP HL
|
|
POP AF
|
|
POP HL
|
|
JR RMD18
|
|
|
|
RMD16
|
|
POP IX
|
|
POP HL
|
|
POP AF
|
|
POP HL
|
|
POP IX
|
|
LD A,11
|
|
SCF
|
|
RET
|
|
|
|
;//MODULE: DOS5
|
|
;[END]
|
|
|