mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
2520 lines
34 KiB
NASM
2520 lines
34 KiB
NASM
|
||
;[BEGIN]
|
||
;
|
||
; SYSTEM.EXE /S /P
|
||
;
|
||
; /P Primary command processor
|
||
; /S Secondary command processor
|
||
; /C Execute batch file
|
||
|
||
;=====================================================================[]
|
||
;Rev. Date Name Description
|
||
;---------------------------------------------------------------------[]
|
||
;R10 16-05-2023 BAO TE•T MODE AND TEXT ARE RESTORED AFTER RETURNING FROM THE APP
|
||
;R09 ??-??-???? DNS ;????? ????
|
||
;R08 21-02-2003 DNS FIX BUG IN BAT-PARSER, IT SPLIT STRINGS
|
||
; WHEN LINE BEGAN AT #xx00 OFFSET
|
||
;R07 14-12-2002 DNS PARSING BATCH LINE
|
||
;R06 12-12-2002 DNS ADD %0, %1, %2 ...
|
||
;R05 11-12-2002 DNS IMPLEMENTED %VAR%
|
||
;R04 11-12-2002 DNS ADD 'EVALSTRING' ROUTINE
|
||
;R03 11-12-2002 DNS NEW VERSION
|
||
;R02 19-11-2002 DNS CORRECT SOME ERROR MESSAGES
|
||
;R01 19-11-2002 DNS ADD ENVIRONMENT %VARIABLE% IN ECHO
|
||
;=====================================================================[]
|
||
|
||
include 'shared_includes/constants/bios_equ.inc'
|
||
include 'shared_includes/constants/dss_equ.inc'
|
||
|
||
;
|
||
; Standart EQU section
|
||
;---------------------------------------------------------------------[]
|
||
org_addr EQU #8000 + CLP_Buffer
|
||
code_addr EQU START
|
||
stack_point EQU #BFFF
|
||
stack_buffer EQU 64
|
||
program_start EQU START
|
||
Loader_length EQU 0
|
||
;---------------------------------------------------------------------[]
|
||
;
|
||
|
||
;
|
||
; Program EQU section
|
||
;---------------------------------------------------------------------[]
|
||
CR EQU 13
|
||
LF EQU 10
|
||
;---------------------------------------------------------------------[]
|
||
;
|
||
OUTPUT './Build/system.exe'
|
||
include 'Shared_includes/constants/EXE_Header.z80'
|
||
ORG org_addr
|
||
|
||
START:
|
||
LD HL,WORK_BUFFERS
|
||
LD DE,WORK_BUFFERS+1
|
||
LD BC,BUFFERS_STRUCT-1
|
||
LD (HL),0
|
||
LDIR
|
||
|
||
;INIT
|
||
LD A,(IX-1)
|
||
LD (TASKX),A
|
||
PUSH IX
|
||
CALL CRLF
|
||
CALL GETPATH
|
||
POP IX
|
||
;
|
||
|
||
CALL GET_CMD
|
||
EI
|
||
LD A,(RUNMODE)
|
||
AND #80 ;TEST PRIMARY
|
||
JP NZ,FPRIMAR
|
||
LD A,(RUNMODE)
|
||
AND #20 ;TEST SECONDARY
|
||
JP NZ,FSECOND
|
||
LD A,(RUNMODE)
|
||
AND #10 ;TEST BATCH FILE
|
||
JP NZ,FBATCHS
|
||
LD A,(RUNMODE)
|
||
AND #40 ;TEST PROCESS
|
||
JP NZ,FBATCH
|
||
JP QUIT
|
||
|
||
FSECOND CALL VERS
|
||
JP CONSOLE
|
||
|
||
FBATCHS
|
||
LD HL,CMDLINE
|
||
CALL BATCH
|
||
JP QUIT
|
||
|
||
FBATCH
|
||
CALL CMDMODE
|
||
JP QUIT
|
||
|
||
FPRIMAR LD C,Dss.CTRLKey
|
||
RST ToDSS
|
||
LD A,B
|
||
AND #C0
|
||
JP NZ,CONSOLE
|
||
LD HL,BATNAME
|
||
CALL BATCH
|
||
JP CONSOLE
|
||
|
||
;R07
|
||
MAKE_BATCH_PRM_ARRAY
|
||
DEC HL
|
||
B_SKIP_SPACE
|
||
INC HL
|
||
LD A,(HL)
|
||
OR A
|
||
RET Z
|
||
CP " "
|
||
JR Z,B_SKIP_SPACE
|
||
CP 9
|
||
JR Z,B_SKIP_SPACE
|
||
EX DE,HL
|
||
LD (HL),E
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
EX DE,HL
|
||
B_FIND_SPACE
|
||
INC HL
|
||
LD A,(HL)
|
||
CP "!"
|
||
JR NC,B_FIND_SPACE
|
||
LD (HL),0
|
||
OR A
|
||
RET Z
|
||
DJNZ B_SKIP_SPACE
|
||
RET
|
||
|
||
|
||
BATCH: PUSH HL
|
||
LD DE,PRMLINE
|
||
BCHL1 LD A,(HL)
|
||
LDI
|
||
OR A
|
||
JR NZ,BCHL1
|
||
LD HL,PRMLINE
|
||
LD DE,BAT_PRM_ARRAY
|
||
LD B,10
|
||
CALL MAKE_BATCH_PRM_ARRAY
|
||
JR NZ,B_ALL_P
|
||
LD HL,NULL
|
||
EX DE,HL
|
||
B_CLR_P LD (HL),E
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
DJNZ B_CLR_P
|
||
EX DE,HL
|
||
B_ALL_P POP HL
|
||
;R07
|
||
XOR A
|
||
LD C,Dss.Open
|
||
RST ToDSS
|
||
;R10
|
||
CALL Restore_Screen
|
||
;R10
|
||
RET C
|
||
LD (BAT_FM),A
|
||
CALL NEWLINE
|
||
XOR A
|
||
RET
|
||
|
||
Restore_Screen:
|
||
PUSH AF
|
||
LD C,Dss.GetVMod
|
||
RST ToDSS
|
||
AND #80
|
||
JR Z,.exit
|
||
LD BC,1 * 256 + Dss.SetVMod
|
||
LD A,Dss.SetVMod.txt80x32
|
||
RST ToDSS
|
||
.exit: POP AF
|
||
RET
|
||
|
||
NEWLINE LD DE,CMDLINE
|
||
ADDBAT PUSH DE
|
||
CALL READBAT
|
||
POP DE
|
||
OR A
|
||
JR NZ,BATLINE
|
||
EX DE,HL
|
||
LD DE,CMDLINE
|
||
AND A
|
||
SBC HL,DE
|
||
RET Z
|
||
LD A,L
|
||
LD (CMDLINE-1),A
|
||
CALL CMDMODE
|
||
LD A,(BAT_FM)
|
||
LD C,Dss.Close
|
||
RST ToDSS
|
||
RET
|
||
|
||
BATLINE LD HL,BATBUFF
|
||
NBLINE CALL MOVWORD
|
||
JP C,ADDBAT
|
||
LD A,B
|
||
LD (BAT_LEN),A
|
||
PUSH HL
|
||
EX DE,HL
|
||
LD DE,CMDLINE
|
||
AND A
|
||
SBC HL,DE
|
||
LD A,L
|
||
LD (CMDLINE-1),A
|
||
CALL CMDMODE
|
||
LD DE,CMDLINE
|
||
POP HL
|
||
JP NBLINE
|
||
|
||
MOVWORD LD A,(BAT_LEN)
|
||
LD B,A
|
||
M00WORD LD A,(HL)
|
||
LD (DE),A
|
||
CP #20
|
||
JR C,M01WORD
|
||
INC HL
|
||
INC DE
|
||
DJNZ M00WORD
|
||
SCF
|
||
RET
|
||
|
||
M01WORD LD A,(HL)
|
||
CP #20
|
||
RET NC
|
||
INC HL
|
||
DJNZ M01WORD
|
||
;R08
|
||
PUSH DE
|
||
CALL READBAT
|
||
POP DE
|
||
LD HL,BATBUFF
|
||
LD A,(BAT_LEN)
|
||
LD B,A
|
||
OR A
|
||
JR NZ,M01WORD
|
||
SCF
|
||
;R08
|
||
RET
|
||
|
||
READBAT LD HL,BATBUFF
|
||
LD DE,128
|
||
LD C,Dss.Read
|
||
LD A,(BAT_FM)
|
||
RST ToDSS
|
||
LD A,E
|
||
LD (BAT_LEN),A
|
||
RET
|
||
|
||
CMDMODE: XOR A
|
||
LD (POSIT),A
|
||
CALL EVALCMD ;R05
|
||
LD IX,CMDLINE-2
|
||
LD HL,CMDLINE
|
||
LD A,(HL)
|
||
CP "@"
|
||
JR NZ,NOALPHA
|
||
DEC HL
|
||
DEC (HL)
|
||
JR Z,NOEC
|
||
LD C,(HL)
|
||
INC HL
|
||
LD B,0
|
||
LD D,H
|
||
LD E,L
|
||
INC HL
|
||
LDIR
|
||
JR NOEC
|
||
NOALPHA LD A,(ECHOFLG)
|
||
OR A
|
||
JR NZ,NOEC
|
||
LD DE,CMDLINE
|
||
CALL PRINT_S
|
||
CALL CRLF
|
||
LD A,(CMDLINE-1)
|
||
OR A
|
||
RET Z
|
||
CALL CRLF
|
||
CALL COMPBAT
|
||
RET
|
||
|
||
NOEC LD A,(CMDLINE-1)
|
||
OR A
|
||
RET Z
|
||
CALL COMPBAT
|
||
RET
|
||
|
||
COMPBAT LD HL,CMDLINE
|
||
DEC HL
|
||
LD C,(HL)
|
||
LD B,0
|
||
INC HL
|
||
COMP00B LD A,(HL)
|
||
CP " "
|
||
JR NZ,COMP01B
|
||
INC HL
|
||
DEC C
|
||
JR NZ,COMP00B
|
||
RET
|
||
COMP01B LD D,H
|
||
LD E,L
|
||
ADD HL,BC
|
||
LD (HL),0
|
||
SBC HL,BC
|
||
LD A,C
|
||
EX AF,AF'
|
||
LD A,#20
|
||
CPIR
|
||
JR NZ,COMPB05
|
||
INC C
|
||
COMPB05 EX AF,AF'
|
||
SUB C
|
||
LD C,A
|
||
LD HL,BATLIST
|
||
JP COMP004
|
||
|
||
CONSOLE:
|
||
CALL CRLF
|
||
RE_: CALL GETXY
|
||
CALL GETPATH
|
||
; CALL VERS
|
||
LD HL,CMDLINE
|
||
LD DE,CMDLINE+1
|
||
LD (HL),0
|
||
LD BC,#7F
|
||
LDIR
|
||
CALL INPUT
|
||
CALL CRLF
|
||
LD A,(CMDLINE-1)
|
||
OR A
|
||
JP Z,RE_
|
||
CALL CRLF
|
||
CALL COMP
|
||
JP RE_
|
||
|
||
GETXY LD C,Dss.Cursor
|
||
RST ToDSS
|
||
JP LOCAT
|
||
|
||
INPUT XOR A
|
||
LD (POSIT),A
|
||
LD (SHIFT),A
|
||
LD (LEN_NEW),A
|
||
LD IX,CMDLINE-2
|
||
CALL CEDIT
|
||
CALL RES_CUR
|
||
RET
|
||
|
||
COMP: CALL EVALCMD ;R05
|
||
LD HL,CMDLINE
|
||
DEC HL
|
||
LD C,(HL)
|
||
LD B,0
|
||
INC HL
|
||
COMP00 LD A,(HL)
|
||
CP " "
|
||
JR NZ,COMP01
|
||
INC HL
|
||
DEC C
|
||
JR NZ,COMP00
|
||
RET
|
||
COMP01 LD D,H
|
||
LD E,L
|
||
ADD HL,BC
|
||
LD (HL),0
|
||
SBC HL,BC
|
||
LD A,C
|
||
EX AF,AF'
|
||
LD A,#20
|
||
CPIR
|
||
JR NZ,COMP005
|
||
INC C
|
||
COMP005 EX AF,AF'
|
||
SUB C
|
||
LD C,A
|
||
LD HL,CMDLIST
|
||
COMP004 PUSH BC
|
||
PUSH DE
|
||
COMP000 LD A,(DE)
|
||
CP 'a'
|
||
JP C,COMP001
|
||
CP '{'
|
||
JP NC,COMP001
|
||
SUB #20
|
||
COMP001 CP (HL)
|
||
JP NZ,COMP002
|
||
INC HL
|
||
INC DE
|
||
DEC C
|
||
JP NZ,COMP000
|
||
XOR A
|
||
CP (HL)
|
||
JP NZ,COMP002
|
||
POP BC
|
||
POP BC
|
||
LD A,(DE)
|
||
CP " "
|
||
JR NZ,NOSPC
|
||
INC DE
|
||
NOSPC INC HL
|
||
LD A,(HL)
|
||
INC HL
|
||
LD H,(HL)
|
||
LD L,A
|
||
JP (HL)
|
||
|
||
COMP002 XOR A
|
||
;!TEST
|
||
;LD C,#FF
|
||
LD C,A
|
||
CPIR
|
||
.loop: ;CPI
|
||
;JP NZ,.loop
|
||
;
|
||
|
||
INC HL
|
||
INC HL
|
||
POP DE
|
||
POP BC
|
||
LD A,(HL)
|
||
OR A
|
||
JP NZ,COMP004
|
||
LD H,D ;CMDLINE
|
||
LD L,E
|
||
LD B,(HL)
|
||
INC HL
|
||
LD C,(HL)
|
||
INC HL
|
||
LD A,(HL)
|
||
OR A
|
||
JR NZ,RUN_EXT
|
||
LD A,":"
|
||
CP C
|
||
JR NZ,RUN_EXT
|
||
LD A,B
|
||
CP "a"
|
||
JR C,NOUP
|
||
CP "{"
|
||
JR NC,NOUP
|
||
AND #5F
|
||
NOUP SUB "A"
|
||
LD C,Dss.ChDisk
|
||
RST ToDSS
|
||
JP C,ERROR
|
||
JP GETPATH
|
||
|
||
SAVEHL DW 0
|
||
|
||
RUN_EXT EX DE,HL
|
||
LD (SAVEHL),HL
|
||
LD BC,Dss.EX_Path.GET_TYPE*256 + Dss.EX_Path
|
||
LD DE,EXTBF
|
||
RST ToDSS
|
||
LD HL,(SAVEHL)
|
||
JR C,RUN_EXE
|
||
BIT 1,A
|
||
JR Z,NON_EXT
|
||
LD DE,EXTBF
|
||
LD HL,BATBF
|
||
LD B,3
|
||
CALL COMPARE
|
||
LD HL,(SAVEHL)
|
||
JR Z,RUN_BAT
|
||
JP RUN_EXE
|
||
|
||
NON_EXT LD BC,0*256+Dss.Exec
|
||
RST ToDSS
|
||
;R10
|
||
CALL Restore_Screen
|
||
;R10
|
||
RET NC
|
||
LD HL,(SAVEHL)
|
||
CP 3
|
||
JP NZ,EXEERR
|
||
PUSH HL
|
||
LD A,(CMDLINE-1)
|
||
LD B,A
|
||
EXF000 LD A,(HL)
|
||
CP "!"
|
||
JR C,EXF001
|
||
INC HL
|
||
DJNZ EXF000
|
||
|
||
EXF001
|
||
LD E,B
|
||
LD D,0
|
||
ADD HL,DE
|
||
PUSH HL
|
||
LD E,4
|
||
ADD HL,DE
|
||
POP DE
|
||
EX DE,HL
|
||
LD C,B
|
||
LD B,0
|
||
INC C
|
||
LDDR
|
||
INC HL
|
||
LD (HL),"."
|
||
INC HL
|
||
LD (HL),"B"
|
||
INC HL
|
||
LD (HL),"A"
|
||
INC HL
|
||
LD (HL),"T"
|
||
; LD HL,(SAVEHL)
|
||
POP HL
|
||
JP RUN_BAT
|
||
|
||
RUN_EXE:
|
||
LD BC,0*256 + Dss.Exec
|
||
RST ToDSS
|
||
;R10
|
||
CALL Restore_Screen
|
||
;R10
|
||
RET NC
|
||
EXEERR CP 5
|
||
JP NC,ERROR
|
||
LD DE,0 ;BAD COMMAND OR FILENAME
|
||
JP ERR_MSG
|
||
|
||
RUN_BAT CALL BATCH
|
||
JP C,EXEERR
|
||
RET
|
||
|
||
; !! <09>¥ ¤¥« âì ®¤ã ª®¬ ¤ã > 256 ᨬ¢®«®¢)) !!
|
||
BATLIST DZ 'PAUSE' : DW CPAUSE
|
||
DZ 'REM' : DW CREM
|
||
CMDLIST DZ 'CD' : DW CCHDIR
|
||
DZ 'CHDIR' : DW CCHDIR
|
||
DZ 'CLS' : DW CLS
|
||
DZ 'DATE' : DW CDATE
|
||
DZ 'DEL' : DW CDELET
|
||
DZ 'DIR' : DW DIR
|
||
DZ 'ECHO' : DW CECHO
|
||
DZ 'ERASE' : DW CDELET
|
||
DZ 'EXIT' : DW CEXIT
|
||
DZ 'HELP' : DW HELP
|
||
DZ 'MD' : DW CMKDIR
|
||
DZ 'MKDIR' : DW CMKDIR
|
||
DZ 'PATH' : DW CPATH
|
||
DZ 'REN' : DW CRENAM
|
||
DZ 'RENAME' : DW CRENAM
|
||
DZ 'RD' : DW CRMDIR
|
||
DZ 'RMDIR' : DW CRMDIR
|
||
DZ 'SET' : DW CSET
|
||
DZ 'TIME' : DW CTIME
|
||
DZ 'VERSION' : DW VERS
|
||
DZ 'VER' : DW VERS
|
||
DB #00
|
||
|
||
CLS LD DE,#0000
|
||
LD HL,#2050
|
||
LD BC,7*256+Dss.Clear
|
||
LD A," "
|
||
RST ToDSS
|
||
LD DE,#0000
|
||
JP LOCAT
|
||
|
||
CRLF LD A,#0D
|
||
CALL PRINTX
|
||
LD A,#0A
|
||
JP PRINTX
|
||
|
||
CDATE EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
LD DE,DTA
|
||
LD A,(DE)
|
||
OR A
|
||
JR Z,NOSETD
|
||
CALL STR2DEC
|
||
JR C,ILLEG
|
||
XOR A
|
||
CP H
|
||
JR NZ,ILLEG
|
||
LD A,31
|
||
CP L
|
||
JR C,ILLEG
|
||
LD B,L
|
||
PUSH BC
|
||
CALL STR2DEC
|
||
POP BC
|
||
JR C,ILLEG
|
||
XOR A
|
||
CP H
|
||
JR NZ,ILLEG
|
||
LD A,12
|
||
CP L
|
||
JR C,ILLEG
|
||
LD C,L
|
||
PUSH BC
|
||
CALL STR2DEC
|
||
PUSH HL
|
||
LD C,Dss.SysTime
|
||
RST ToDSS
|
||
POP IX
|
||
POP DE
|
||
LD C,Dss.SetTime
|
||
RST ToDSS
|
||
NOSETD LD C,Dss.SysTime
|
||
RST ToDSS
|
||
PUSH IX
|
||
PUSH DE
|
||
LD A,D
|
||
LD HL,PRM1
|
||
CALL PUTB
|
||
LD A,"-"
|
||
LD (HL),A
|
||
INC HL
|
||
POP DE
|
||
LD A,E
|
||
CALL PUTB
|
||
LD A,"-"
|
||
LD (HL),A
|
||
INC HL
|
||
PUSH HL
|
||
POP IX
|
||
POP HL
|
||
CALL PDIGIT
|
||
LD DE,DATEMSG
|
||
JP MESSAGE
|
||
|
||
ILLEG LD DE,ILLGMSG
|
||
CALL MESSAGE
|
||
RET
|
||
|
||
CTIME EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
LD DE,DTA
|
||
LD A,(DE)
|
||
OR A
|
||
JR Z,NOSETT
|
||
CALL STR2DEC
|
||
JR C,ILLEG
|
||
XOR A
|
||
CP H
|
||
JR NZ,ILLEG
|
||
LD A,23
|
||
CP L
|
||
JR C,ILLEG
|
||
LD B,L
|
||
PUSH BC
|
||
CALL STR2DEC
|
||
POP BC
|
||
JR C,ILLEG
|
||
XOR A
|
||
CP H
|
||
JR NZ,ILLEG
|
||
LD A,59
|
||
CP L
|
||
JR C,ILLEG
|
||
LD C,L
|
||
PUSH BC
|
||
CALL STR2DEC
|
||
POP BC
|
||
JR C,ILLEG
|
||
XOR A
|
||
CP H
|
||
JR NZ,ILLEG
|
||
LD A,59
|
||
CP L
|
||
JR C,ILLEG
|
||
PUSH BC
|
||
LD A,L
|
||
PUSH AF
|
||
LD C,Dss.SysTime
|
||
RST ToDSS
|
||
POP BC
|
||
POP HL
|
||
LD C,Dss.SetTime
|
||
RST ToDSS
|
||
NOSETT LD C,Dss.SysTime
|
||
RST ToDSS
|
||
PUSH BC
|
||
PUSH HL
|
||
LD A,H
|
||
LD HL,PRM1
|
||
CALL PUTB
|
||
LD A,":"
|
||
LD (HL),A
|
||
INC HL
|
||
POP DE
|
||
LD A,E
|
||
CALL PUTB
|
||
LD A,":"
|
||
LD (HL),A
|
||
INC HL
|
||
POP AF
|
||
CALL PUTB
|
||
XOR A
|
||
LD (HL),A
|
||
LD DE,TIMEMSG
|
||
JP MESSAGE
|
||
|
||
CPAUSE LD DE,PAUSMSG
|
||
CALL MESSAGE
|
||
LD C,Dss.WaitKey
|
||
RST ToDSS
|
||
RET
|
||
|
||
|
||
;R09
|
||
PATHSTR DB "PATH=",0
|
||
|
||
CPATH LD A,(DE)
|
||
OR A
|
||
JP Z,PRNEPATH
|
||
INC DE
|
||
CP 9
|
||
JR Z,CPATH
|
||
CP "!"
|
||
JR C,CPATH
|
||
DEC DE
|
||
EX DE,HL
|
||
DEC HL
|
||
LD (HL),"="
|
||
DEC HL
|
||
LD (HL),"H"
|
||
DEC HL
|
||
LD (HL),"T"
|
||
DEC HL
|
||
LD (HL),"A"
|
||
DEC HL
|
||
LD (HL),"P"
|
||
LD BC,2*256+Dss.Environ
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
RET
|
||
PRNEPATH
|
||
LD DE,DTA
|
||
LD HL,PATHSTR
|
||
LD BC,1*256+Dss.Environ
|
||
RST ToDSS
|
||
JP C,ERROR
|
||
LD HL,PATHSTR
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
LD HL,DTA
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
CALL CRLF
|
||
RET
|
||
;R09
|
||
|
||
|
||
CSET LD A,(DE)
|
||
OR A
|
||
JP Z,PRNENVIR
|
||
INC DE ;R08
|
||
CP 9 ;R08
|
||
JR Z,CSET ;R08
|
||
CP "!" ;R08
|
||
JR C,CSET ;R08
|
||
DEC DE ;R08
|
||
EX DE,HL
|
||
LD BC,2*256+Dss.Environ
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
RET
|
||
|
||
PRNENVIR
|
||
LD HL,DTA
|
||
LD BC,0*256+Dss.Environ
|
||
RST ToDSS
|
||
LD HL,DTA
|
||
PRNENVX LD C,Dss.PChars
|
||
RST ToDSS
|
||
LD A,CR
|
||
LD C,Dss.PutChar
|
||
RST ToDSS
|
||
LD A,LF
|
||
LD C,Dss.PutChar
|
||
RST ToDSS
|
||
LD A,(HL)
|
||
OR A
|
||
JR NZ,PRNENVX
|
||
RET
|
||
|
||
|
||
CECHO EX DE,HL
|
||
LD A,(HL)
|
||
OR A
|
||
JR Z,ECHO_F
|
||
EX DE,HL
|
||
PUSH DE
|
||
LD B,3
|
||
LD HL,ECHOON
|
||
CALL COMPARE
|
||
POP DE
|
||
JR Z,ECHO_FS
|
||
PUSH DE
|
||
LD B,4
|
||
LD HL,ECHOOFF
|
||
CALL COMPARE
|
||
POP HL
|
||
JR Z,ECHO_FR
|
||
|
||
;R03 REMOVE R01
|
||
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
JP CRLF
|
||
|
||
ECHO_F LD A,(ECHOFLG)
|
||
OR A
|
||
LD DE,ON__MSG
|
||
JR Z,ECHON
|
||
LD DE,OFF_MSG
|
||
ECHON CALL FMESAGE
|
||
LD DE,PRM1
|
||
CALL PUTPRM
|
||
LD DE,ECHOMSG
|
||
CALL MESSAGE
|
||
RET
|
||
|
||
ECHO_FS XOR A
|
||
LD (ECHOFLG),A
|
||
RET
|
||
|
||
ECHO_FR LD A,#FF
|
||
LD (ECHOFLG),A
|
||
RET
|
||
|
||
;R04
|
||
|
||
EVALCMD
|
||
XOR A
|
||
LD HL,CMDLINE-1
|
||
LD C,(HL)
|
||
LD B,A
|
||
INC HL
|
||
ADD HL,BC
|
||
LD (HL),A
|
||
SBC HL,BC
|
||
LD DE,TMPLINE
|
||
CALL EVALSTR
|
||
LD HL,TMPLINE
|
||
LD DE,CMDLINE
|
||
LD BC,#00FF
|
||
MOVLBAK LD A,(HL)
|
||
LDI
|
||
INC B
|
||
OR A
|
||
JR NZ,MOVLBAK
|
||
DEC B
|
||
LD A,B
|
||
LD (CMDLINE-1),A
|
||
AND A
|
||
RET
|
||
|
||
; HL - STRING WITH %VAR%
|
||
EVALSTR
|
||
;R04 LD DE,DTA
|
||
VARLOOP
|
||
LD A,(HL)
|
||
CP "%"
|
||
JR Z,TVARIABLE
|
||
VARL1 LDI
|
||
OR A
|
||
JR NZ,VARLOOP
|
||
LD BC,0
|
||
LD (TVAR_PNT),BC
|
||
;R04 LD HL,DTA
|
||
;R04
|
||
RET
|
||
|
||
IZERO DB "ZERO",0
|
||
IONE DB "ONE",0
|
||
ITWO DB "TWO",0
|
||
ITHREE DB "THREE",0
|
||
IFOUR DB "FOUR",0
|
||
IFIVE DB "FIVE",0
|
||
ISIX DB "SIX",0
|
||
ISEVEN DB "SEVEN",0
|
||
IEIGHT DB "EIGHT",0
|
||
ININE DB "NINE",0
|
||
|
||
;R06
|
||
BAT_PRM_ARRAY
|
||
DW IZERO, IONE, ITWO, ITHREE, IFOUR, IFIVE, ISIX, ISEVEN, IEIGHT, ININE
|
||
DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
;R06
|
||
NULL DB 0 ;R07
|
||
|
||
;R01
|
||
TVAR_PNT
|
||
DW 0
|
||
|
||
TVARIABLE
|
||
LD BC,(TVAR_PNT)
|
||
LD A,B
|
||
OR C
|
||
LD A,"%"
|
||
LD (TVAR_PNT),DE
|
||
JR NZ,TVAR1 ;R06
|
||
INC HL ;R06
|
||
LD A,(HL) ;R06
|
||
CP "9"+1 ;R06
|
||
JR C,TVAR0 ;R06
|
||
TVAR2 LD A,"%" ;R06 > "9"
|
||
DEC HL ;R06
|
||
JP VARL1 ;R06
|
||
TVAR0 CP "0" ;R06
|
||
JR C,TVAR2 ;R06 < "0"
|
||
; BATCH PARAM %0, %1, %2 ...
|
||
INC HL ;R06
|
||
PUSH HL
|
||
LD (TVAR_PNT),BC
|
||
SUB "0"
|
||
ADD A,A
|
||
LD C,A
|
||
LD HL,BAT_PRM_ARRAY
|
||
ADD HL,BC
|
||
LD A,(HL)
|
||
INC HL
|
||
LD H,(HL)
|
||
LD L,A
|
||
OR H
|
||
JR Z,NOBTP ;NO BATCH PARM
|
||
MVBTP LD A,(HL)
|
||
LDI
|
||
OR A
|
||
JR NZ,MVBTP
|
||
DEC DE
|
||
NOBTP POP HL
|
||
JP VARLOOP ;R06
|
||
;R06
|
||
|
||
TVAR1 PUSH HL
|
||
LD H,D
|
||
LD L,E
|
||
DEC HL
|
||
AND A
|
||
SBC HL,BC
|
||
JR Z,TNOVAR
|
||
LD A,"="
|
||
LD (DE),A
|
||
INC DE
|
||
XOR A
|
||
LD (DE),A
|
||
LD D,B
|
||
LD E,C
|
||
LD H,B
|
||
LD L,C
|
||
INC HL
|
||
LD BC,1*256+Dss.Environ
|
||
RST ToDSS
|
||
TNOVAR POP HL
|
||
INC HL
|
||
LD BC,0
|
||
LD (TVAR_PNT),BC
|
||
JP VARLOOP
|
||
;R01
|
||
|
||
COMPARE LD A,(DE)
|
||
CP #61
|
||
JP C,COM001
|
||
CP #7B
|
||
JP NC,COM001
|
||
SUB #20
|
||
COM001 CP (HL)
|
||
RET NZ
|
||
INC HL
|
||
INC DE
|
||
DJNZ COMPARE
|
||
RET
|
||
|
||
CREM RET
|
||
|
||
CCHDIR: EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
XOR A
|
||
LD HL,DTA
|
||
CP (HL)
|
||
JR NZ,YP
|
||
LD (HL),"."
|
||
INC HL
|
||
LD (HL),"."
|
||
INC HL
|
||
LD (HL),0
|
||
DEC HL
|
||
DEC HL
|
||
YP: LD C,Dss.ChDir
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
CALL GETPATH
|
||
RET
|
||
|
||
CMKDIR EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
LD HL,DTA
|
||
LD C,Dss.MkDir
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
RET
|
||
|
||
CRMDIR: EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
LD HL,DTA
|
||
LD C,Dss.RmDir
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
RET
|
||
|
||
CDELET: EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
LD HL,DTA
|
||
LD C,Dss.Delete
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
RET
|
||
|
||
CRENAM: EX DE,HL
|
||
LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
;LD DE,DTA+128
|
||
LD DE,DTA_2
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
LD HL,DTA
|
||
;LD DE,DTA+128
|
||
LD DE,DTA_2
|
||
LD C,Dss.Rename
|
||
RST ToDSS
|
||
CALL C,ERROR
|
||
RET
|
||
|
||
ERROR: LD E,A
|
||
LD D,0
|
||
JP ERR_MSG
|
||
|
||
DIR: LD HL,0
|
||
LD (DIRNEX.files),HL
|
||
LD (S_LOW),HL
|
||
LD (S_HIGH),HL
|
||
EX DE,HL
|
||
LD A,(HL)
|
||
OR A
|
||
JR NZ,YPS
|
||
LD HL,ALLFS
|
||
YPS: LD DE,DTA
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
|
||
LD HL,DTA
|
||
LD DE,DTA
|
||
LD A,#37
|
||
LD BC,0*256+Dss.F_First
|
||
RST ToDSS
|
||
JP C,ERROR
|
||
|
||
LD A,(PATHF)
|
||
LD HL,PRM1
|
||
LD (HL),A
|
||
INC HL
|
||
LD (HL),":"
|
||
INC HL
|
||
LD (HL),0
|
||
|
||
LD HL,SER_NUM
|
||
LD DE,PRM2
|
||
CALL PUTPRM
|
||
CALL GETPATH
|
||
LD HL,PATHF
|
||
LD DE,PRM3
|
||
CALL PUTPRM
|
||
//call copy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||
|
||
LD DE,DIR1MSG
|
||
CALL MESSAGE
|
||
; CALL CRLF
|
||
; CALL CRLF
|
||
DIRNEX: LD HL,DTA
|
||
LD DE,33
|
||
ADD HL,DE
|
||
CALL PNAME
|
||
LD IX,DTA
|
||
LD A,(IX+32)
|
||
AND #10
|
||
JP NZ,NODADD
|
||
;LD HL,(FILES)
|
||
.files+1: LD HL,0 ;!TODO ¯à®â¥áâ¨âì ª ª ï ¯à®æ¥¤ãà ¨á¯®«ì§ãîé ï íâã ¯¥à¥¬¥ãî ç é¥ ¢ë§ë¢ ¥âáï ¨ ¢®âªãâì ¯¥à¥¬¥ãî âã¤
|
||
INC HL
|
||
LD (DIRNEX.files),HL
|
||
LD E,(IX+30)
|
||
LD D,(IX+31)
|
||
LD HL,(S_HIGH)
|
||
EXX
|
||
LD E,(IX+28)
|
||
LD D,(IX+29)
|
||
LD HL,(S_LOW)
|
||
|
||
|
||
CALL ADDXXX
|
||
LD (S_LOW),HL
|
||
EXX
|
||
LD (S_HIGH),HL
|
||
NODADD: LD DE,DTA
|
||
LD C,Dss.F_Next
|
||
RST ToDSS
|
||
JR NC,DIRNEX
|
||
;CALL ORDERS
|
||
;RET
|
||
ORDERS: LD HL,(DIRNEX.files)
|
||
LD IX,PRM1
|
||
CALL PDIGIT
|
||
LD HL,(S_LOW)
|
||
EXX
|
||
LD HL,(S_HIGH)
|
||
EXX
|
||
CALL MAKE_LN
|
||
LD HL,L32BIT_+9
|
||
LD A,(HL)
|
||
CP #20
|
||
JR NZ,ALR2
|
||
LD A,#30
|
||
LD (HL),A
|
||
ALR2: LD DE,SIZEBFF
|
||
LD HL,L32BIT_;; +1
|
||
LD A,(HL)
|
||
LDI
|
||
CP " "
|
||
JR Z,NOPO1
|
||
LD A,"."
|
||
NOPO1: LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LD A,(HL)
|
||
LDI
|
||
CP " "
|
||
JR Z,NOPO2
|
||
LD A,"."
|
||
NOPO2: LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LD A,(HL)
|
||
LDI
|
||
CP " "
|
||
JR Z,NOPO3
|
||
LD A,"."
|
||
NOPO3: LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD HL,SIZEBFF
|
||
LD DE,PRM2
|
||
CALL PUTPRM
|
||
LD DE,DIR2MSG
|
||
JP MESSAGE
|
||
|
||
;HL':HL + DE':DE
|
||
ADDXXX: ADD HL,DE
|
||
EXX
|
||
ADC HL,DE
|
||
EXX
|
||
RET
|
||
|
||
;FILES: DW 0
|
||
|
||
S_LOW: DW 0 ;!FIXIT ¢ ª®¬ ¤ã
|
||
S_HIGH: DW 0 ;!FIXIT ¢ ª®¬ ¤ã
|
||
|
||
|
||
;12345678 123 1 234 567 890 "
|
||
; SIZE
|
||
|
||
PNAME: LD BC,8
|
||
LD DE,PRM1
|
||
LDIR
|
||
XOR A
|
||
LD (DE),A
|
||
LD DE,PRM2
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD (DE),A
|
||
LD IX,DTA
|
||
CALL PRNSIZE
|
||
CALL PRNDATE
|
||
CALL PRNTIME
|
||
LD DE,DIR3MSG
|
||
JP MESSAGE
|
||
|
||
;!TODO
|
||
PRINTB:
|
||
; LD A,(HL)
|
||
; PUSH BC
|
||
; CALL PRINTX
|
||
; POP BC
|
||
; INC HL
|
||
; DJNZ PRINTB
|
||
; RET
|
||
;------------------
|
||
|
||
PUTB LD C,#2F
|
||
.PUTB1 INC C
|
||
SUB 10
|
||
JP NC,.PUTB1
|
||
ADD A,10
|
||
ADD A,#30
|
||
PUSH AF
|
||
LD A,C
|
||
LD (HL),A
|
||
INC HL
|
||
POP AF
|
||
LD (HL),A
|
||
INC HL
|
||
RET
|
||
|
||
;!TODO
|
||
PRNB:
|
||
; LD C,#2F
|
||
; .PRNB1 INC C
|
||
; SUB 10
|
||
; JP NC,.PRNB1
|
||
; ADD A,10
|
||
; ADD A,#30
|
||
; PUSH AF
|
||
; LD A,C
|
||
; CALL PRINTX
|
||
; POP AF
|
||
; JP PRINTX
|
||
|
||
STR2DEC: LD HL,0
|
||
.LOOP: LD A,(DE)
|
||
INC DE
|
||
OR A
|
||
RET Z
|
||
CP "-"
|
||
RET Z
|
||
CP ":"
|
||
RET Z
|
||
LD B,H
|
||
LD C,L
|
||
ADD HL,HL
|
||
ADD HL,HL
|
||
ADD HL,BC
|
||
ADD HL,HL
|
||
CALL ATODEC
|
||
RET C
|
||
ADD A,L
|
||
LD L,A
|
||
JR NC,.LOOP
|
||
INC H
|
||
JR .LOOP
|
||
|
||
ATODEC CP "0"
|
||
RET C
|
||
CP ":"
|
||
CCF
|
||
RET C
|
||
SUB "0"
|
||
RET
|
||
|
||
PDIGIT LD DE,10000
|
||
LD A,#C8
|
||
LD (RET_Z),A
|
||
CALL DIG
|
||
LD DE,1000
|
||
CALL DIG
|
||
LD DE,100
|
||
CALL DIG
|
||
LD DE,10
|
||
CALL DIG
|
||
LD A,L
|
||
ADD A,#30
|
||
|
||
;!TEST
|
||
;LD (IX+0),A
|
||
;INC IX
|
||
;LD (IX+0),0
|
||
LD (IX+0),A
|
||
LD (IX+1),0
|
||
;
|
||
RET
|
||
|
||
DIG: XOR A
|
||
.DIG1: INC A
|
||
SBC HL,DE
|
||
JR NC,.DIG1
|
||
ADD HL,DE
|
||
DEC A
|
||
RET_Z: RET Z
|
||
ADD A,#30
|
||
LD (IX+0),A
|
||
INC IX
|
||
XOR A
|
||
LD (RET_Z),A
|
||
RET
|
||
|
||
PRNSIZE: LD A,(IX+32)
|
||
LD HL,DIRIDD
|
||
AND #10
|
||
JP NZ,.PRZ
|
||
LD L,(IX+28)
|
||
LD H,(IX+29)
|
||
EXX
|
||
LD L,(IX+30)
|
||
LD H,(IX+31)
|
||
EXX
|
||
PUSH IX
|
||
CALL MAKE_LN
|
||
LD HL,L32BIT_+9
|
||
LD A,(HL)
|
||
CP ' '
|
||
JR NZ,.ALR
|
||
LD A,'0'
|
||
LD (HL),A
|
||
.ALR: LD DE,SIZEBFF
|
||
LD HL,L32BIT_;; +1
|
||
LDI
|
||
LD A," "
|
||
LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD HL,SIZEBFF
|
||
POP IX
|
||
.PRZ: LD DE,PRM3
|
||
JP PUTPRM
|
||
|
||
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||
PRNDATE: LD B,(IX+25)
|
||
LD C,(IX+24)
|
||
LD HL,SIZEBFF
|
||
CALL DATE
|
||
LD (HL),0
|
||
LD HL,SIZEBFF
|
||
LD DE,PRM4
|
||
LD A,(HL)
|
||
CP "0"
|
||
JP NZ,PUTPRM
|
||
LD (HL),#20
|
||
JP PUTPRM
|
||
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
PRNTIME: LD B,(IX+22)
|
||
LD C,(IX+23)
|
||
LD HL,SIZEBFF
|
||
CALL TIME
|
||
LD (HL),0
|
||
LD HL,SIZEBFF
|
||
LD DE,PRM5
|
||
LD A,(HL)
|
||
CP "0"
|
||
JP NZ,PUTPRM
|
||
LD (HL),' '
|
||
JP PUTPRM
|
||
; ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
|
||
TIME: SRL C
|
||
RR B
|
||
SRL C
|
||
RR B
|
||
SRL C
|
||
RR B
|
||
SRL B
|
||
SRL B
|
||
LD A,C
|
||
CALL NUMB
|
||
LD (HL),":"
|
||
INC HL
|
||
LD A,B
|
||
JP NUMB
|
||
; ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
|
||
DATE: LD A,C
|
||
AND #1F
|
||
PUSH BC
|
||
CALL NUMB
|
||
LD (HL),"."
|
||
INC HL
|
||
POP BC
|
||
LD A,C
|
||
SRL B
|
||
RLA
|
||
RLA
|
||
RLA
|
||
RLA
|
||
AND #0F
|
||
CALL NUMB
|
||
LD (HL),"."
|
||
INC HL
|
||
LD A,B
|
||
ADD A,#50
|
||
CP 100
|
||
JP C,NUMB
|
||
SUB100 SUB 100
|
||
CP 100
|
||
JP C,NUMB
|
||
JR SUB100
|
||
|
||
NUMB LD C,#2F
|
||
NUMB1 INC C
|
||
SUB 10
|
||
JP NC,NUMB1
|
||
ADD A,10
|
||
ADD A,'0'
|
||
LD (HL),C
|
||
INC HL
|
||
LD (HL),A
|
||
INC HL
|
||
RET
|
||
; „¥áïâ¨çë© 32-å à §àï¤ë© ¢ë¢®¤
|
||
MAKE_LN LD IX,L32BIT_
|
||
EXX
|
||
LD DE,#3B9A ; 1000000000
|
||
EXX
|
||
LD DE,#CA00
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#05F5 ; 100000000
|
||
EXX
|
||
LD DE,#E100
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#0098 ; 10000000
|
||
EXX
|
||
LD DE,#9680
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#000F ; 1000000
|
||
EXX
|
||
LD DE,#4240
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#0001 ; 100000
|
||
EXX
|
||
LD DE,#86A0
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#0000 ; 10000
|
||
EXX
|
||
LD DE,#2710
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#0000 ; 1000
|
||
EXX
|
||
LD DE,#03E8
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#0000 ; 100
|
||
EXX
|
||
LD DE,#0064
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,#0000 ; 10
|
||
EXX
|
||
LD DE,#000A
|
||
CALL GET_DIG
|
||
LD A,L ; 1
|
||
ADD A,#30
|
||
LD (IX+0),A
|
||
INC IX
|
||
LD HL,L32BIT_
|
||
LD DE,#2030
|
||
KILLZ LD A,(HL)
|
||
CP E
|
||
JR NZ,KILLZ2
|
||
LD (HL),D
|
||
INC HL
|
||
JP KILLZ
|
||
KILLZ2 LD HL,L32BIT_+9
|
||
LD A,(HL)
|
||
CP D
|
||
RET NZ
|
||
LD (HL),E
|
||
RET
|
||
|
||
; HL:HL - DE:DE
|
||
GET_DIG XOR A
|
||
INC_DG INC A
|
||
SBC HL,DE
|
||
EXX
|
||
SBC HL,DE
|
||
EXX
|
||
JP NC,INC_DG
|
||
ADD HL,DE
|
||
EXX
|
||
ADC HL,DE
|
||
EXX
|
||
DEC A
|
||
ADD A,#30
|
||
LD (IX+0),A
|
||
INC IX
|
||
RET
|
||
|
||
L32BIT_ DB "0000000000"
|
||
|
||
DIRIDD DB "<DIR> ",0
|
||
|
||
SIZEBFF DB "0 000 000 000",0,0
|
||
|
||
;-------------------
|
||
|
||
;!FIXIT «ãçè¥ â ªãî äãªæ¨î ¢ DSS ¯¨åãâì
|
||
; ¯à®ç¨â âì BPB ¤¨áª
|
||
/*
|
||
read_disk_info:
|
||
.disk+1: ld a,0 ; á®åà. ®¬¥à ¤¨áª
|
||
ld c,Dss.DRV.Open ; open device
|
||
rst ToDSS.DRV
|
||
jr c,get_inf_data_err
|
||
ld a,(read_disk_info.disk)
|
||
ld de,BPB ; ¡ãä¥à
|
||
ld c,Dss.DRV.GetBPB ; get BPB
|
||
rst ToDSS.DRV
|
||
;push af
|
||
ld a,(read_disk_info.disk) ; ®¬¥à ¤¨áª
|
||
ld c,Dss.DRV.Close ; close device
|
||
rst ToDSS.DRV
|
||
;pop af
|
||
;jr c,get_inf_data_err
|
||
get_inf_data_err:
|
||
; ‘¥à¨©ë© ®¬¥à «®£. ¤¨áª
|
||
ld hl,(BPB+41) ; áâ.ç áâì
|
||
ld de,SER_NUM ; xxxx-xxxx
|
||
call hex16
|
||
ld a,"-"
|
||
ld (de),a
|
||
inc de
|
||
ld hl,(BPB+39) ; ¬«.ç áâì
|
||
call hex16
|
||
;
|
||
; Œ¥âª ¤¨áª
|
||
ld a,(read_disk_info.disk) ; ®¬¥à ¤¨áª
|
||
cp 2 ; ¬¥ìè¥ "C:" ?
|
||
jr nc,get_inf_data1 ; ¬¥âª ¢ BPB
|
||
; floppy, ¬¥âª - ª ª § ¯¨áì ä ©«
|
||
ld c,Dss.ChDisk ; ãáâ. ¤¨áª
|
||
rst ToDSS
|
||
; ãáâ. ª®à¥ì ¤¨áª
|
||
ld hl,ROOT ; "\",0
|
||
ld c,Dss.ChDir
|
||
rst ToDSS
|
||
; ¯®¨áª ¬¥âª¨
|
||
ld hl,ALLFS ; "*.*" ¨¬ï ¬¥âª¨
|
||
ld de,DTA ; ªã¤
|
||
ld a,8 ; âਡãâ ¬¥âª¨ ⮬
|
||
ld bc,0*256 + Dss.F_First ; f_first, ä®à¬ â 11
|
||
rst ToDSS
|
||
push af
|
||
call restore_path ; ¢®ááâ. ⥪. ¯ãâì
|
||
pop af
|
||
jr c,no_volume_label ; ¬¥âª¨ ¥â
|
||
ld hl,DTA+33 ; ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
|
||
jr volume_label
|
||
;
|
||
get_inf_data1:
|
||
ld hl,BPB+53 ; ª®¥æ ¬¥âª¨ ¢ BPB
|
||
ld a,(hl)
|
||
cp " " ; ¥áâì ¬¥âª ?
|
||
ld hl,BPB+43 ; ç «® ¬¥âª¨ ¢ BPB
|
||
jr nz,volume_label ; ¤
|
||
; ¥â ¬¥âª¨
|
||
no_volume_label:
|
||
ld hl,volume_string1 ; "has no label "
|
||
ld de,volume_string ; ªã¤
|
||
ld bc,14
|
||
ldir
|
||
ret
|
||
; ¥áâì ¬¥âª
|
||
volume_label:
|
||
ex de,hl
|
||
ld hl,volume_string ; ªã¤
|
||
ld (hl),"i"
|
||
inc hl
|
||
ld (hl),"s"
|
||
inc hl
|
||
ld (hl)," "
|
||
inc hl
|
||
ex de,hl
|
||
; ᪮¯¨à. ¨¬ï ¬¥âª¨
|
||
ld bc,11 ; ¬ ªá. ¤«¨ ¬¥âª¨
|
||
ld a,(hl)
|
||
cp " "+1
|
||
jr nc,$+6
|
||
inc hl
|
||
dec c
|
||
jr $-7
|
||
ld a,11
|
||
sub c
|
||
ldir
|
||
ld b,a
|
||
or a ; ¤«¨ ¬¥âª¨ 11 ᨬ¢. ?
|
||
ret z ; ¤
|
||
; ¤®¯®«¨âì 墮áâ. ¯à®¡¥« ¬¨
|
||
ld (de),a
|
||
inc de
|
||
djnz $-2
|
||
ret
|
||
*/
|
||
; ‚뢮¤ HL ¢ hex-ä®à¬ â¥
|
||
; de=¡ãä¥à
|
||
; hl=ç¨á«®
|
||
hex16: ld a,h
|
||
call hex8
|
||
ld a,l
|
||
; ¢ë¢®¤ "a"
|
||
hex8: push af
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
call $+4
|
||
pop af
|
||
and 0Fh
|
||
add a,90h
|
||
daa
|
||
adc a,40h
|
||
daa
|
||
ld (de),a
|
||
inc de
|
||
ret
|
||
;-------------------
|
||
|
||
VERS: LD C,Dss.Version
|
||
RST ToDSS
|
||
PUSH BC
|
||
PUSH DE
|
||
|
||
LD L,D
|
||
LD H,0
|
||
LD DE,PRM1
|
||
CALL .num_ver ;decim2 ®¬¥à ¢¥àᨨ (0..9)
|
||
LD A,'.'
|
||
LD (DE),A
|
||
|
||
INC DE
|
||
POP HL
|
||
LD H,0
|
||
CALL .num_mod ;decim2 ®¬¥à ¬®¤¨ä¨ª 樨 (0..99)
|
||
POP HL
|
||
LD A,'.'
|
||
LD (DE),A
|
||
INC DE
|
||
CALL .num_build ;decim3 ®¬¥à ¡¨«¤ (0..999)
|
||
XOR A
|
||
LD (DE),A
|
||
|
||
LD DE,VERSMSG
|
||
JP MESSAGE
|
||
|
||
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
|
||
.num_ver:
|
||
.num_mod:
|
||
ld ix,.tmp1__
|
||
res 7,(ix+0)
|
||
jr .decim
|
||
|
||
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
|
||
.num_build:
|
||
ld ix,.tmp1__
|
||
res 7,(ix+0)
|
||
ld bc,100 ; 100
|
||
call .num16
|
||
.decim: ld bc,10 ; 10
|
||
call .num16
|
||
ld a,l
|
||
add a,"0"
|
||
jr .num16_exit
|
||
|
||
.tmp1__: BYTE 0
|
||
.num16: ld a,2Fh
|
||
and a
|
||
inc a
|
||
sbc hl,bc
|
||
jr nc,$-3
|
||
add hl,bc
|
||
cp "0"
|
||
jr z,$+6
|
||
set 7,(ix+0)
|
||
bit 7,(ix+0)
|
||
ret z
|
||
.num16_exit:
|
||
ld (de),a ; á®åà. ¢ ¡ãä¥à¥
|
||
inc de
|
||
ret
|
||
/*
|
||
VERS:
|
||
LD C,Dss.Version
|
||
RST ToDSS
|
||
PUSH BC
|
||
|
||
LD A,D
|
||
LD HL,PRM1
|
||
CALL GETnoZERO
|
||
LD A,"."
|
||
LD (HL),A
|
||
INC HL
|
||
|
||
LD A,E
|
||
CALL GETnoZERO
|
||
LD A,"."
|
||
LD (HL),A
|
||
INC HL
|
||
|
||
POP BC
|
||
LD A,C
|
||
CALL GETnoZERO
|
||
XOR A
|
||
LD (HL),A
|
||
|
||
LD DE,VERSMSG
|
||
JP MESSAGE
|
||
|
||
GETnoZERO:
|
||
LD B,#2F
|
||
.loop: INC B
|
||
SUB 10
|
||
JR NC,.loop
|
||
ADD A,10+"0"
|
||
LD C,A
|
||
LD A,"0"
|
||
CP B
|
||
LD A,C
|
||
JR Z,.mdec
|
||
LD (HL),B
|
||
INC HL
|
||
.mdec: LD (HL),A
|
||
INC HL
|
||
SCF
|
||
RET
|
||
|
||
GETyesZERO:
|
||
LD B,#2F
|
||
.loop: INC B
|
||
SUB 10
|
||
JR NC,.loop
|
||
ADD A,10
|
||
LD (HL),B
|
||
INC HL
|
||
RET Z
|
||
ADD A,"0"
|
||
LD (HL),A
|
||
INC HL
|
||
RET
|
||
*/
|
||
|
||
HELP LD DE,HELPMSG
|
||
CALL MESSAGE
|
||
RET
|
||
|
||
CEXIT LD A,(TASKX)
|
||
DEC A
|
||
DEC A
|
||
RET Z
|
||
POP HL
|
||
QUIT LD B,0
|
||
LD C,Dss.Exit
|
||
RST ToDSS
|
||
RET
|
||
|
||
ERR_MSG INC DE
|
||
LD HL,ERR0
|
||
LD BC,ERR1-ERR0
|
||
CALL LCPIR
|
||
CALL PRINTZ
|
||
CALL CRLF
|
||
JP CRLF
|
||
|
||
MESSAGE CALL FMESAGE
|
||
CALL PRINTZ
|
||
CALL GETXY
|
||
RET
|
||
|
||
FMESAGE INC DE
|
||
LD HL,MSG0
|
||
LD BC,MSG1-MSG0
|
||
LCPIR XOR A
|
||
CPIR
|
||
RET PO
|
||
RET NZ
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JP NZ,LCPIR
|
||
RET
|
||
|
||
PUTPRM LD BC,15
|
||
PUTPRMA LD A,(HL)
|
||
LDI
|
||
RET PO
|
||
OR A
|
||
JR NZ,PUTPRMA
|
||
RET
|
||
|
||
;!FIXIT § ¬¥¨âì PUTPRMA á ¢ëáâ ¢«¥¨¥¬ ¯¥à¥¤ ¢ë§®¢®¬ BC = 255 ¯à¨¬¥à
|
||
; ‘ª®¯¨à. áâபã (á ã«¥¬)
|
||
; (hl) -> (de)
|
||
//copy_string:
|
||
// ld a,(hl)
|
||
// ldi
|
||
// or a
|
||
// jr nz,copy_string
|
||
// ret
|
||
|
||
|
||
PRINTZ LD A,(HL)
|
||
INC HL
|
||
OR A
|
||
RET Z
|
||
CP "%"
|
||
JR NZ,PRINTZ2
|
||
LD A,(HL)
|
||
INC HL
|
||
SUB "1"
|
||
PUSH HL
|
||
LD L,A
|
||
LD H,0
|
||
ADD HL,HL
|
||
ADD HL,HL
|
||
ADD HL,HL
|
||
ADD HL,HL
|
||
LD BC,PRM1
|
||
ADD HL,BC
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
POP HL
|
||
JR PRINTZ
|
||
PRINTZ2 LD C,Dss.PutChar
|
||
RST ToDSS
|
||
JP PRINTZ
|
||
|
||
ROOT DB '\',0
|
||
|
||
ALLFS DB "*.*",0
|
||
|
||
SER_NUM DB "C37F-73AB",0
|
||
//SER_NUM DB "XXXX-XXXX",0
|
||
|
||
EXTBF BLOCK 4,0
|
||
|
||
BATBF DB "BAT"
|
||
|
||
ECHOON DB "ON",0
|
||
ECHOOFF DB "OFF",0
|
||
|
||
|
||
DIR1MSG EQU 0
|
||
VERSMSG EQU 1
|
||
DATEMSG EQU 2
|
||
TIMEMSG EQU 3
|
||
PAUSMSG EQU 4
|
||
ILLGMSG EQU 5
|
||
ECHOMSG EQU 6
|
||
ON__MSG EQU 7
|
||
OFF_MSG EQU 8
|
||
DIR2MSG EQU 9
|
||
DIR3MSG EQU 10
|
||
HELPMSG EQU 11
|
||
|
||
MSG0 DB 0
|
||
DB "Volume in drive %1 has no label",CR,LF ; !FIXIT
|
||
DB "Volume Serial number is %2",CR,LF
|
||
DB "Directory of %3",CR,LF,CR,LF,0
|
||
DB "Estex DSS: Version %1",CR,LF,0 ;R02
|
||
DB "Current date: %1",CR,LF,0
|
||
DB "Current time: %1",CR,LF,0
|
||
DB "Press any key to continue . . .",CR,LF,0
|
||
DB "Invalid parametr",CR,LF,0
|
||
DB "Echo is %1",CR,LF,0
|
||
DB "on",0
|
||
DB "off",0
|
||
DB " %1 file(s) %2 bytes",CR,LF,CR,LF,0
|
||
; FILENAME EXT SIZE DATE TIME
|
||
DB "%1 %2 %3 %4 %5",CR,LF,0
|
||
DB "COMMANDS:",CR,LF,CR,LF
|
||
DB "CD DEL HELP RD SET "
|
||
DB " ",CR,LF
|
||
DB "CHDIR DIR MD REN TIME "
|
||
DB " ",CR,LF
|
||
DB "CLS ERASE MKDIR RENAME VER "
|
||
DB " ",CR,LF
|
||
DB "DATE EXIT PATH RMDIR VERSION "
|
||
DB " ",CR,LF
|
||
DB 0
|
||
MSG1
|
||
|
||
ERR0 DB #00
|
||
DB "Bad command or file name",0
|
||
DB "Invalid function",0
|
||
DB "Invalid drive number",0
|
||
DB "File not found",0
|
||
DB "Path not found",0
|
||
DB "Invalid handle",0
|
||
DB "Extended error 6",0
|
||
DB "File exist",0
|
||
DB "File read only",0
|
||
DB "Root overflow",0
|
||
DB "No free space",0
|
||
DB "Directory not empty",0
|
||
DB "Can't delete current directory",0
|
||
DB "Invalid media",0
|
||
DB "Unknown operation",0 ;R02
|
||
DB "Directory exist",0
|
||
DB "Invalid filename",0
|
||
DB "Invalid EXE-file",0
|
||
DB "Not supported EXE-file",0
|
||
DB "Access denied",0
|
||
DB "Not ready",0
|
||
DB "Seek error",0
|
||
DB "Sector not found",0
|
||
DB "CRC error",0
|
||
DB "Write protect",0
|
||
DB "Read error",0
|
||
DB "Write error",0
|
||
DB "Drive failure",0
|
||
DB "Extended error 28",0
|
||
DB "Extended error 29",0
|
||
DB "No free memory",0
|
||
DB "Invalid memory block",0
|
||
DB "Extended error 32",0
|
||
DB "Extended error 33",0
|
||
DB "Extended error 34",0
|
||
DB "35",0
|
||
DB "36",0
|
||
DB "37",0
|
||
DB "38",0
|
||
DB "39",0
|
||
DB "40",0
|
||
DB "41",0
|
||
DB "42",0
|
||
DB "43",0
|
||
DB "44",0
|
||
DB "45",0
|
||
DB "46",0
|
||
DB "47",0
|
||
DB "48",0
|
||
DB "49",0
|
||
DB "50"
|
||
DB 0
|
||
ERR1
|
||
|
||
GETPATH:
|
||
LD C,Dss.CurDisk
|
||
RST ToDSS
|
||
LD HL,PATHF
|
||
ADD A,"A"
|
||
LD (HL),A
|
||
INC HL
|
||
LD (HL),":"
|
||
INC HL
|
||
LD C,Dss.CurDir
|
||
RST ToDSS
|
||
|
||
LD HL,PATHF
|
||
LD DE,PATH
|
||
LDI
|
||
LDI
|
||
LDI
|
||
PUSH HL
|
||
XOR A
|
||
LD BC,34 ;!HARDCODE
|
||
CPIR
|
||
JP NZ,LONGP
|
||
LD A,34 ;!HARDCODE
|
||
SUB C
|
||
LD C,A
|
||
POP HL
|
||
LDIR
|
||
JR PHLEN
|
||
|
||
LONGP CPIR
|
||
LD A,"."
|
||
LD (DE),A
|
||
INC DE
|
||
LD (DE),A
|
||
INC DE
|
||
LD (DE),A
|
||
INC DE
|
||
LD BC,31
|
||
AND A
|
||
SBC HL,BC
|
||
LDIR
|
||
POP HL
|
||
PHLEN LD HL,PATH
|
||
LD BC,40 ;!HARDCODE path
|
||
XOR A
|
||
CPIR
|
||
LD A,39 ;!HARDCODE
|
||
SUB C
|
||
LD (PATHLEN),A
|
||
LD C,A
|
||
INC C
|
||
INC C
|
||
LD A,80
|
||
SUB C
|
||
LD (WINDOW),A
|
||
RET
|
||
PRINT_B LD C,A
|
||
PRINTBB PUSH BC
|
||
CALL PRINTX
|
||
POP BC
|
||
LD A,C
|
||
DJNZ PRINTBB
|
||
RET
|
||
|
||
TEMPXY DW 0
|
||
|
||
CR_ LD C,Dss.Cursor
|
||
RST ToDSS
|
||
LD E,0
|
||
JP LOCAT
|
||
|
||
LF_ LD C,Dss.Cursor
|
||
RST ToDSS
|
||
LD A,D
|
||
CP #1F
|
||
JP Z,LFF
|
||
INC D
|
||
JP LOCAT
|
||
|
||
LFF PUSH HL
|
||
PUSH DE
|
||
LD BC,#018A
|
||
LD DE,#0020
|
||
EI
|
||
HALT
|
||
DI
|
||
RST ToBIOS
|
||
LD DE,#1F00
|
||
CALL LOCAT
|
||
LD A,#20
|
||
LD BC,#5082
|
||
RST ToBIOS
|
||
EI
|
||
POP DE
|
||
CALL LOCAT
|
||
POP HL
|
||
RET
|
||
|
||
PRINTX CP #20
|
||
JP NC,CHAR
|
||
CP #0D
|
||
JP Z,CR_
|
||
CP #0A
|
||
JP Z,LF_
|
||
CHAR PUSH BC
|
||
LD BC,#0182
|
||
RST ToBIOS
|
||
POP BC
|
||
RET
|
||
|
||
LOCAT LD (TEMPXY),DE
|
||
LD C,Dss.Locate
|
||
RST ToDSS
|
||
RET
|
||
|
||
;PRINTX LD C,Dss.PutChar
|
||
; RST #10
|
||
; RET
|
||
|
||
CEDIT PUSH IX
|
||
POP HL
|
||
INC HL
|
||
INC HL
|
||
LD (ETXS),HL
|
||
XOR A
|
||
LD (POSIT),A
|
||
LD (SHIFT),A
|
||
EDIT1 LD DE,(ETXS)
|
||
CALL PRINT_S
|
||
CALL KEY
|
||
CP 13
|
||
RET Z
|
||
LD HL,EDIT1
|
||
PUSH HL
|
||
AND A
|
||
LD HL,#5400
|
||
SBC HL,DE
|
||
JP Z,BACK
|
||
AND A
|
||
LD HL,#5600
|
||
SBC HL,DE
|
||
JP Z,FORW
|
||
CP #08
|
||
JP Z,DELET
|
||
CP #20
|
||
RET C
|
||
EX AF,AF'
|
||
LD A,(IX+1)
|
||
CP (IX+0)
|
||
CCF
|
||
RET C
|
||
LD A,(IX+1)
|
||
LD E,A
|
||
LD D,0
|
||
LD HL,(ETXS)
|
||
ADD HL,DE
|
||
LD A,(POSIT)
|
||
LD E,A
|
||
LD A,(IX+1)
|
||
SUB E
|
||
JR Z,ADD_SM
|
||
LD B,D
|
||
LD C,A
|
||
LD D,H
|
||
LD E,L
|
||
DEC HL
|
||
LDDR
|
||
EX DE,HL
|
||
ADD_SM EX AF,AF'
|
||
LD (HL),A
|
||
LD A,(POSIT)
|
||
INC A
|
||
LD (POSIT),A
|
||
LD (MAIN_X),A
|
||
INC (IX+1)
|
||
LD HL,(ETXE)
|
||
INC HL
|
||
LD (ETXE),HL
|
||
LD HL,SHIFT
|
||
SUB (HL)
|
||
CP (IX-1)
|
||
RET C
|
||
LD A,(STEP)
|
||
ADD A,(HL)
|
||
LD (HL),A
|
||
; CALL PAGE
|
||
RET
|
||
|
||
BACK LD A,(POSIT)
|
||
OR A
|
||
RET Z ;JP Z,BCK
|
||
DEC A
|
||
LD (POSIT),A
|
||
LD (MAIN_X),A
|
||
INC A
|
||
LD HL,SHIFT
|
||
SUB (HL)
|
||
RET NZ
|
||
LD A,(STEP)
|
||
LD E,A
|
||
LD A,(HL)
|
||
SUB E
|
||
LD (HL),A
|
||
; CALL PAGE
|
||
RET
|
||
|
||
FORW LD A,(POSIT)
|
||
CP (IX+1)
|
||
RET Z ; JP Z,FRD
|
||
INC A
|
||
LD (POSIT),A
|
||
LD (MAIN_X),A
|
||
LD HL,SHIFT
|
||
SUB (HL)
|
||
CP (IX-1)
|
||
RET C
|
||
LD A,(STEP)
|
||
ADD A,(HL)
|
||
LD (HL),A
|
||
; CALL PAGE
|
||
RET
|
||
|
||
DELET LD A,(POSIT)
|
||
OR A
|
||
RET Z ; JP Z,LINKSTR
|
||
LD HL,(ETXS)
|
||
LD E,A
|
||
LD D,0
|
||
ADD HL,DE
|
||
LD A,(IX+1)
|
||
SUB E
|
||
JR Z,SUB_SM
|
||
LD B,D
|
||
LD C,A
|
||
LD D,H
|
||
LD E,L
|
||
DEC DE
|
||
LDIR
|
||
SUB_SM XOR A
|
||
DEC HL
|
||
LD (HL),A
|
||
LD A,(POSIT)
|
||
DEC A
|
||
LD (POSIT),A
|
||
LD (MAIN_X),A
|
||
DEC (IX+1)
|
||
LD HL,(ETXE)
|
||
DEC HL
|
||
LD (ETXE),HL
|
||
LD HL,SHIFT
|
||
INC A
|
||
SUB (HL)
|
||
RET NZ
|
||
LD A,(STEP)
|
||
LD E,A
|
||
LD A,(HL)
|
||
SUB E
|
||
LD (HL),A
|
||
; CALL PAGE
|
||
RET
|
||
|
||
KEY ;RES 5,(IY+1)
|
||
LD A,(SHIFT)
|
||
LD E,A
|
||
LD A,(POSIT)
|
||
SUB E
|
||
INC A
|
||
LD HL,PATHLEN
|
||
ADD A,(HL)
|
||
LD (_X+1),A
|
||
LD A,(POSIT)
|
||
CP (IX+1)
|
||
JP C,KEY0
|
||
LD A,#20
|
||
LD (_A+1),A
|
||
JP KEY1
|
||
KEY0 LD E,A
|
||
LD D,0
|
||
LD HL,(ETXS)
|
||
ADD HL,DE
|
||
LD A,(HL)
|
||
LD (_A+1),A
|
||
KEY1 CALL CURSORF
|
||
EI
|
||
HALT
|
||
LD C,Dss.ScanKey
|
||
RST ToDSS
|
||
JP Z,KEY1
|
||
RET
|
||
|
||
CURSORX DB #00
|
||
|
||
CURSORF LD A,05
|
||
DEC A
|
||
LD (CURSORF+1),A
|
||
RET NZ
|
||
LD A,05
|
||
LD (CURSORF+1),A
|
||
LD DE,(TEMPXY)
|
||
_X LD E,#00
|
||
CALL LOCAT
|
||
LD A,(CURSORX)
|
||
XOR #FF
|
||
LD (CURSORX),A
|
||
LD A,"_"
|
||
JR NZ,YEPCUR
|
||
_A LD A,#20
|
||
YEPCUR CALL PRINTX
|
||
EI
|
||
RET
|
||
|
||
RES_CUR LD A,(CURSORX)
|
||
OR A
|
||
RET Z
|
||
XOR #FF
|
||
LD (CURSORX),A
|
||
LD DE,(TEMPXY)
|
||
LD A,(_X+1)
|
||
LD E,A
|
||
CALL LOCAT
|
||
LD A,(_A+1)
|
||
JP PRINTX
|
||
|
||
PRINT_S PUSH DE
|
||
CALL GETXY ;;;
|
||
LD DE,(TEMPXY)
|
||
LD E,0
|
||
CALL LOCAT
|
||
LD HL,PATH
|
||
CALL PRINTZ
|
||
LD A,">"
|
||
CALL PRINTX
|
||
POP DE
|
||
EX DE,HL
|
||
SH LD BC,#0000
|
||
ADD HL,BC
|
||
LD A,(SHIFT)
|
||
LD C,A
|
||
LD A,(IX+1)
|
||
SUB C
|
||
JP Z,EMT_STR
|
||
LD B,A
|
||
LD A,(IX-1)
|
||
SUB B
|
||
JR NC,PR_S
|
||
LD B,(IX-1)
|
||
PR_S PUSH BC
|
||
LD C,#86
|
||
RST ToBIOS
|
||
POP BC
|
||
EMT_STR LD A,(IX-1)
|
||
SUB B
|
||
EI
|
||
RET Z
|
||
LD B,A
|
||
LD C,#82
|
||
LD A,#20
|
||
RST ToBIOS
|
||
EI
|
||
RET
|
||
|
||
SHIFT EQU SH+1
|
||
|
||
GET_CMD LD D,XH
|
||
LD E,XL
|
||
EX DE,HL
|
||
LD E,(HL)
|
||
INC HL
|
||
LD D,0
|
||
EX DE,HL
|
||
ADD HL,DE
|
||
LD (HL),0
|
||
NEXTPRM EX DE,HL
|
||
SKIPSP LD A,(HL)
|
||
INC HL
|
||
CP " "
|
||
RET C
|
||
JR Z,SKIPSP
|
||
DEC HL
|
||
CP "/"
|
||
JR NZ,PROCESS
|
||
LD DE,BUFFER
|
||
LD C,Dss.GSwitch
|
||
RST ToDSS
|
||
PUSH AF
|
||
EX DE,HL ;SAVE HL IN DE
|
||
LD HL,BUFFER
|
||
INC HL
|
||
CALL ISWITCH
|
||
POP AF
|
||
JP NC,NEXTPRM
|
||
XOR A
|
||
RET
|
||
|
||
PROCESS LD DE,CMDLINE
|
||
LD BC,#00FF
|
||
NLDI LD A,(HL)
|
||
LDI
|
||
INC B
|
||
CP " "
|
||
JR NC,NLDI
|
||
DEC B
|
||
LD A,B
|
||
LD (CMDLINE-1),A
|
||
LD A,(RUNMODE)
|
||
OR #40 ;PROCESS
|
||
LD (RUNMODE),A
|
||
XOR A
|
||
RET
|
||
|
||
ISWITCH LD A,(HL)
|
||
CP "a"
|
||
JR C,NUP
|
||
CP "{"
|
||
JR NC,NUP
|
||
SUB #20
|
||
NUP
|
||
PR000 CP "P"
|
||
JR NZ,PR001
|
||
LD A,(RUNMODE)
|
||
OR #80 ;PRIMARY CONSOLE
|
||
LD (RUNMODE),A
|
||
RET
|
||
PR001 CP "S"
|
||
JR NZ,PR002
|
||
LD A,(RUNMODE)
|
||
OR #20 ;SECONDARY CONSOLE
|
||
LD (RUNMODE),A
|
||
PR002 CP "C"
|
||
JR NZ,PR003
|
||
LD A,(RUNMODE)
|
||
OR #10 ;RUN BATCH FILE
|
||
LD (RUNMODE),A
|
||
PR003 RET
|
||
|
||
TASKX DB 0
|
||
RUNMODE DB 0
|
||
STEP DB 8
|
||
MAIN_X DB 0
|
||
|
||
LEN_OLD DB 0
|
||
POSIT DB 0
|
||
|
||
ETXS DW 0
|
||
ETXE DW 0
|
||
; +0 - Size buffer
|
||
; +1 - Amount simbols
|
||
; -1 - Scroll Window
|
||
WINDOW DB #50
|
||
BUFFERC DB #FF
|
||
LEN_NEW DB #00
|
||
|
||
BATNAME DB "system.bat",0
|
||
BAT_BUFFER.size EQU 128 ;!FIXIT BAT_BUFFER LENGTH
|
||
|
||
|
||
|
||
|
||
|
||
STRUCT BUFFERS_STRUCT
|
||
CMDLINE BLOCK 256,0
|
||
TMPLINE BLOCK 256,0
|
||
PRMLINE BLOCK 256,0
|
||
;BUFFER
|
||
;BATBUFF
|
||
SHARED_BUFFER BLOCK BAT_BUFFER.size+1,0
|
||
;
|
||
PRM1 BLOCK 16,0
|
||
PRM2 BLOCK 16,0
|
||
PRM3 BLOCK 16,0
|
||
PRM4 BLOCK 16,0
|
||
PRM5 BLOCK 16,0
|
||
PRM6 BLOCK 16,0
|
||
PRM7 BLOCK 16,0
|
||
PRM8 BLOCK 16,0
|
||
PRM9 BLOCK 16,0
|
||
DTA BLOCK 256,0
|
||
DTA_2 BLOCK 256,0
|
||
BPB BLOCK 512,0
|
||
PATHF BLOCK 256,0
|
||
BAT_FM DB 0
|
||
BAT_LEN DB 0
|
||
ECHOFLG DB 0
|
||
PATHLEN DB 0
|
||
PATH BLOCK 40,0 ;!FIXIT PATH LENGTH
|
||
ENDS
|
||
|
||
|
||
WORK_BUFFERS BUFFERS_STRUCT = $
|
||
|
||
CMDLINE EQU WORK_BUFFERS.CMDLINE
|
||
TMPLINE EQU WORK_BUFFERS.TMPLINE
|
||
PRMLINE EQU WORK_BUFFERS.PRMLINE
|
||
BUFFER EQU WORK_BUFFERS.SHARED_BUFFER
|
||
BATBUFF EQU WORK_BUFFERS.SHARED_BUFFER
|
||
PRM1 EQU WORK_BUFFERS.PRM1
|
||
PRM2 EQU WORK_BUFFERS.PRM2
|
||
PRM3 EQU WORK_BUFFERS.PRM3
|
||
PRM4 EQU WORK_BUFFERS.PRM4
|
||
PRM5 EQU WORK_BUFFERS.PRM5
|
||
PRM6 EQU WORK_BUFFERS.PRM6
|
||
PRM7 EQU WORK_BUFFERS.PRM7
|
||
PRM8 EQU WORK_BUFFERS.PRM8
|
||
PRM9 EQU WORK_BUFFERS.PRM9
|
||
DTA EQU WORK_BUFFERS.DTA
|
||
DTA_2 EQU WORK_BUFFERS.DTA_2
|
||
BPB EQU WORK_BUFFERS.BPB ;!TEST
|
||
PATHF EQU WORK_BUFFERS.PATHF
|
||
BAT_FM EQU WORK_BUFFERS.BAT_FM
|
||
BAT_LEN EQU WORK_BUFFERS.BAT_LEN
|
||
ECHOFLG EQU WORK_BUFFERS.ECHOFLG
|
||
PATHLEN EQU WORK_BUFFERS.PATHLEN
|
||
PATH EQU WORK_BUFFERS.PATH
|
||
|
||
|
||
DISPLAY "BUFFERS_STRUCT = ",/D,BUFFERS_STRUCT
|
||
DISPLAY "WORK_BUFFERS start = ",/H,WORK_BUFFERS
|
||
DISPLAY "WORK_BUFFERS end = ",/H,WORK_BUFFERS+BUFFERS_STRUCT
|
||
|
||
/*
|
||
|
||
CMDLINE BLOCK 256,0
|
||
|
||
TMPLINE BLOCK 256,0
|
||
|
||
|
||
PRMLINE BLOCK 256,0
|
||
|
||
BUFFER:
|
||
|
||
BATBUFF: BLOCK BAT_BUFFER.size+1,0
|
||
;
|
||
|
||
PRM1 BLOCK 16,0
|
||
PRM2 BLOCK 16,0
|
||
PRM3 BLOCK 16,0
|
||
PRM4 BLOCK 16,0
|
||
PRM5 BLOCK 16,0
|
||
PRM6 BLOCK 16,0
|
||
PRM7 BLOCK 16,0
|
||
PRM8 BLOCK 16,0
|
||
PRM9 BLOCK 16,0
|
||
|
||
DTA: BLOCK 256,0
|
||
PATHF: BLOCK 256,0
|
||
|
||
BAT_FM: DB 0
|
||
BAT_LEN: DB 0
|
||
|
||
ECHOFLG: DB 0
|
||
|
||
PATHLEN: DB 0
|
||
PATH: BLOCK 40,0 ;!FIXIT PATH LENGTH
|
||
*/
|
||
|
||
OUTEND
|
||
;
|
||
;[End] |