SprinterFirmware/DOS/dos5.asm
2024-05-27 11:03:22 +03:00

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]