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

1209 lines
15 KiB
NASM

;[BEGIN]
;//MODULE: EXECUTE
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
;//UPDATE: 24-10-1999 DNS Restore module
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R01 14-05-1999 DNS DECREASE HEADER SIZE FOR EXE-FILE
;R02 24-05-1999 DNS FIX CREATE PSP AND
; MOVE EXEC STACK
;R03 19-11-2002 DNS CHECK SUBFN. FOR FN. EXEC
;R04 26-11-2002 DNS TRY TO FIX EXEC WITH PATH
;R05 02-12-2002 DNS ADD APP_PATH TO THE PROGRAM PREFIX
;R06 02-12-2002 DNS FIX BUG WITH NULL-TERMINATED STRING
;R07 05-12-2002 DNS FIX FOR EXECUTING IN CURRENT DIR WITHOUT PATH
;R08 05-12-2002 DNS FIX BUG WITH INCREMENT TASK ID AND OPEN *.EXE ERROR
;R09 14-04-2003 DNS NOW EXEC DON'T FOLLOW TO PROGRAM'S DIR
;---------------------------------------------------------------
;
; APPLICATION INFO
;====================
;
; B = 0 - GET APP_PARAM
; B = 1 - GET APP_PATH
; B = 2 - GET APP_FULLNAME
LAST_PSP_PTR DW 0
APPINFO INC B
APPINF0 DJNZ APPINF1
EX DE,HL
XOR A
LD (DE),A
LD HL,(LAST_PSP_PTR)
LD C,(HL)
INC C
RET Z
INC HL
LDIR
AND A
RET
APPINF1 DJNZ APPINF2
EX DE,HL
LD HL,(LAST_PSP_PTR)
LD C,(HL)
INC HL
ADD HL,BC
INC HL
INC HL
PUSH HL
LD BC,#0100
XOR A
CPIR
LD A,#5C ;"\"
CPDR
INC HL
INC HL
POP BC
AND A
SBC HL,BC
LD A,B ;EX HL,A,BC
LD B,H
LD H,A
LD A,C
LD C,L
LD L,A
LDIR
XOR A
LD (DE),A
RET
APPINF2 DJNZ APPINF3
EX DE,HL
LD HL,(LAST_PSP_PTR)
LD C,(HL)
INC HL
ADD HL,BC
INC HL
INC HL
APINF2 LD A,(HL)
LDI
OR A
JR NZ,APINF2
RET
APPINF3 LD A,ERR_INVALID_FUNCTION
SCF
RET
;=================== function 45H ===================
; HL - Input command line
GLOB_PR EQU 7 ;%10000000
DRIV_PR EQU 3 ;%00001000
PATH_PR EQU 2 ;%00000100
EXTN_PR EQU 1 ;%00000010
NAM_PR EQU 0 ;%00000001
EX_PATH EXX
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH
LD (NM_PATH),HL
LD HL,NM_NAME_A
LD (NM_NAME),HL
LD HL,NM_EXTN_A
LD (NM_EXTN),HL
LD HL,NM_DRIVE_A
LD (NM_DRIVE),HL
EXX
INC B
DEC B
JR Z,EX_GET_ALL ;0
DEC B
JR Z,EX_GET_DRIVE ;1
DEC B
JR Z,EX_GET_PATH ;2
DEC B
JR Z,EX_GET_NAME ;3
DEC B
JR Z,EX_GET_TYPE ;4
DEC B
JR Z,EX_GET_ALL_EX ;5
DEC B
JR Z,EX_RESR ;6
DEC B
JP Z,GSWITCH ;7
DEC B
JP Z,GETNAME ;8
DEC B
JP Z,MASK ;9
EX_RESR LD A,1
SCF
RET
EX_GET_DRIVE
LD (NM_DRIVE),DE
CALL EX_FULL
RET C
LD DE,(NM_DRIVE)
LD A,(DE)
DEC A
CP #FF
RET Z
CP "A"-1
JR C,ERGD001
CP "Z"
JR NC,ERGD001
SUB "A"-1
RET
ERGD001 LD A,2
SCF
RET
EX_GET_PATH
LD (NM_PATH),DE
JR EX_FULL
EX_GET_NAME
LD (NM_NAME),DE
JR EX_FULL
EX_GET_TYPE
LD (NM_EXTN),DE
JR EX_FULL
EX_GET_ALL
JR EX_FULL
EX_GET_ALL_EX
EX DE,HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_DRIVE),BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_PATH),BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD (NM_NAME),BC
LD C,(HL)
INC HL
LD B,(HL)
LD (NM_EXTN),BC
EX DE,HL
JR EX_FULL
EX_FULL EX AF,AF'
EXX
XOR A
LD HL,(NM_PATH)
LD (HL),A
LD HL,(NM_NAME)
LD (HL),A
LD HL,(NM_EXTN)
LD (HL),A
LD HL,(NM_DRIVE)
LD (HL),A
EXX
EX AF,AF'
EX_PAT0 LD DE,TMPBUF
LD BC,#0D01
EX_PAT1 LD A,(HL)
CALL UPPER
LD (DE),A
INC HL
INC DE
INC C
CP #5C ; \
JR Z,PATH_YEP
CP ":"
JR Z,DRIVE_YEP
CP #21
JR C,NAME_YEP
CP "?"
JR Z,GLOBP1
CP "*"
JR Z,GLOBP1
EX_PAT2 DJNZ EX_PAT1
LD A,16
SCF
RET
GLOBP1 EX AF,AF'
SET GLOB_PR,A
EX AF,AF'
JR EX_PAT2
NAME_YEP
LD A,2
CP C
JR Z,NOFNAME
PUSH HL
LD HL,TMPBUF
LD DE,(NM_NAME)
LD B,0
DEC C
DEC C
LD A,C
LDIR
LD C,A
XOR A
LD (DE),A
LD HL,(NM_NAME)
LD A,"."
CPIR
JR NZ,NOEXTN
LD C,3
LD DE,(NM_EXTN)
EXTSK0 LD A,(HL)
OR A
JR NZ,EXTSK1
LD A,#20
DEC HL
EXTSK1 LD (DE),A
INC HL
INC DE
DEC C
JR NZ,EXTSK0
XOR A
LD (DE),A
EX AF,AF'
SET EXTN_PR,A
EX AF,AF'
NOEXTN EX AF,AF'
SET NAM_PR,A
EX AF,AF'
POP HL
NOFNAME
EX AF,AF'
AND A
RET
DRIVE_YEP
XOR A
LD (DE),A
PUSH HL
LD HL,TMPBUF
LD DE,(NM_DRIVE)
LD B,0
LDIR
POP HL
EX AF,AF'
SET DRIV_PR,A
EX AF,AF'
JP EX_PAT0
PATH_YEP
XOR A
LD (DE),A
PUSH HL
PUSH BC
LD HL,(NM_PATH)
LD BC,#00FF
CPIR
DEC HL
EX DE,HL
LD HL,TMPBUF
POP BC
LD B,0
LDIR
POP HL
EX AF,AF'
SET PATH_PR,A
EX AF,AF'
JP EX_PAT0
TMPBUF DB " ",#00
NM_DRIVE DW NM_DRIVE_A
NM_NAME DW NM_NAME_A
NM_EXTN DW NM_EXTN_A
NM_PATH DW NM_PATH_A
NM_DRIVE_A DB 0,0,0,0,0,0,0,0,0
NM_NAME_A DB " ",#00
NM_EXTN_A DB " ",0
NM_PATH_A EQU BUFFER ;DS 256
;===================== function 45h end ================
;ENTRY: HL - COMMAND LINE
; DE - SWITCH BUFFER
;EXIT: BUFFER
GSWITCH XOR A
LD (DE),A
GSWIT1 LD A,(HL)
INC HL
CP " "
RET C
JR Z,GSWIT1
GSWIT2 LD (DE),A
LD A,(HL)
INC HL
INC DE
CP "!"
JR NC,GSWIT2
CP " "
LD A,0
LD (DE),A
RET
;RET: HL - ALL MEMORY
; BC - FREE MEMORY
FREEMEM LD C,#C0
RST #08
RET
; B - SIZE BLOCK
; RET: A - ID MEMORY BLOCK
GETMEM
LD C,#C2
RST #08
LD E,A
LD A,30
RET C
LD D,#00
LD HL,MEMTAB
ADD HL,DE
LD A,(TASK)
LD (HL),A
LD A,E
AND A
RET
; A - ID BLOCK
RETMEM
LD E,A
LD D,#00
LD HL,MEMTAB
ADD HL,DE
LD A,(TASK)
CP (HL)
LD A,31
SCF
RET NZ
PUSH DE
LD A,E
LD C,#C3
RST #08
POP DE
LD A,31
RET C
LD HL,MEMTAB
ADD HL,DE
XOR A
LD (HL),A
RET
; A - ID BLOCK
; B - NEW SIZE
SETMEM LD E,A
LD D,#00
LD HL,MEMTAB
ADD HL,DE
LD A,(TASK)
CP (HL)
LD A,31
SCF
RET NZ
LD D,B
PUSH DE
LD A,E
CALL SIZEBLK
POP DE
LD A,31
RET C
LD A,B
CP D
RET Z
JR C,INCMEM
DECMEM LD B,D
LD A,E
LD C,#9D
RST #08
LD A,B
LD C,#C3
RST #08
XOR A
RET
INCMEM LD A,D
SUB B
LD B,A
LD C,E
PUSH BC
LD C,#C2
RST #08
POP BC
LD B,A
LD A,30
RET C
LD A,C
LD C,#9E
RST #08
XOR A
RET
SIZEBLK LD B,#FF
LD C,A
BLK001 INC B
PUSH BC
LD A,C
LD C,#C4
RST #08
POP BC
JR NC,BLK001
OR A
SCF
RET Z
XOR A
RET
LEAVMEM LD HL,MEMTAB
LD BC,256
LEVMEM LD A,(TASK)
CPIR
RET NZ
PUSH HL
PUSH BC
DEC HL
AND A
LD DE,MEMTAB
SBC HL,DE
LD A,L
CALL RETMEM
POP BC
POP HL
JR LEVMEM
; B - LOGICAL PAGE
; A - ID BLOCK
; HL - BIT 15&14 WINDOW
; RET: A - PAGE (WIN)
; if B = 0FFh, then logical page number got from DE
SETWIN BIT 7,H ;if 08000h or high?
JR Z,SETWIN1 ;no, go to open in PAGE1
BIT 6,H ;if 0C000h or high?
JR Z,SETWIN2 ;no, go to open in PAGE2
JR SETWIN3 ;yes, go to open in PAGE3
; B - LOGICAL PAGE
; A - ID BLOCK
; RET: A - PAGE (WIN)
SETWIN1 LD C,#C4
EX DE,HL
RST #08
EX DE,HL
RET C
LD C,PAGE1
IN B,(C)
OUT (C),A
LD A,B
RET
SETWIN2 LD C,#C4
EX DE,HL
RST #08
EX DE,HL
RET C
LD C,PAGE2
IN B,(C)
OUT (C),A
LD A,B
RET
SETWIN3 LD C,#C4
EX DE,HL
RST #08
EX DE,HL
RET C
LD C,PAGE3
IN B,(C)
OUT (C),A
LD A,B
RET
EXEC
INC B ;R03
DEC B ;R03
JP Z,EXEC0 ;R03
DEC B ;R03
JP Z,EXEC1 ;R03
LD A,ERR_INVALID_FUNCTION ;R03
SCF ;R03
RET ;R03
CHECKPATH
LD A,(HL)
INC HL
CP #5C ;"\"
RET Z
CP "/" ;ALT SLASH
RET Z
CP "!"
JR NC,CHECKPATH
RET
RELATIVE_DIR EQU 0
ABSOLUTE_DIR EQU 1
FINDPATH
LD A,ENVPAGE
CALL BANK
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
CALL MAKE_PATH_ARRAY
LD HL,PATH_PNT_ARRAY
NEXTPATHI
LD E,(HL)
INC HL
LD D,(HL)
INC HL
BIT ABSOLUTE_DIR,(HL)
INC HL
PUSH HL
PUSH BC
EX DE,HL
CALL Z,GOTO_CURDIR
;
;DBUG CALL DPRINT
;
CALL CHDIR
JR C,BADPATH
LD HL,EXEBUFF
LD DE,MASKARE
CALL MASK
JR C,BADPATH
CALL TST_EXT
JR C,BADPATH
CALL SEARCH
BADPATH
POP BC
POP HL
JR NC,PATHFOUND
DJNZ NEXTPATHI
SCF
PATHFOUND
POP BC
LD A,B
OUT (PAGE3),A
RET
GOTO_CURDIR
PUSH HL
LD HL,TMP_CURDIR
;
;DBUG CALL DPRINT
;
CALL CHDIR
POP HL
RET
MAKE_PATH_ARRAY
LD HL,PATH_PNT_ARRAY-1 ;R04 -1
LD DE,ENVTEMP-1
LD B,#00
NEXTAR LD (HL),C ;R04
INC HL ;R04
XOR A
LD (DE),A
LD C,A
INC DE
LD (HL),E
INC HL
LD (HL),D
INC HL
;R04 LD (HL),C
;R04 INC HL
INC B
NEXTRT LD A,(DE)
CP #5C ;\
JR NZ,NEXTCH
NEXTDR SET ABSOLUTE_DIR,C
NEXTRL ;SET RELATIVE_DIR,C
NEXTCH LD A,(DE)
CP ";"
JR Z,NEXTAR
INC DE
; CP "."
; JR Z,NEXTRL
CP ":"
JR Z,NEXTRT
OR A
JR NZ,NEXTCH
LD (HL),C ;R04
INC HL ;R04
LD (HL),A
INC HL
LD (HL),A
RET
ENVPATH DB "PATH=",0
;;; DEBUG ;;;
;DPRINT
; PUSH HL
; CALL PCHARS
; LD HL,C1310
; CALL PCHARS
; POP HL
; RET
;
;C1310 DB 13,10,0
;;;
ENVTEMP EQU #FE00
TMP_CURDIR EQU #FD00
PATH_PNT_ARRAY EQU #FC80
INCTASK LD HL,TASK ;R08
INC (HL) ;R08
RET ;R08
DECTASK LD HL,TASK ;R08
DEC (HL) ;R08
RET ;R08
EXEC0
LD (CMDLINE),HL
CALL CHECKPATH ;CHECK FOR '\' - SHORT/FULL NAME
LD HL,(CMDLINE)
JR C,EXEC0_SHORT
EXEC1
LD (CMDLINE),HL
LD A,#01
LD (ACCESS),A
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
CALL MASK
RET C
CALL TST_EXT
LD A,3
RET C
CALL INCTASK ;R08
CALL OPENEXE
JR NC,EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
JR DECTASK ;R08
EXEC0_SHORT
;SHORT NAME
; TRY TO FIND IN CURRENT DIRECTORY
LD A,#01
LD (ACCESS),A
CALL GETWORD
RET C
LD HL,TMPNAME
LD DE,MASKARE
CALL MASK
RET C
CALL TST_EXT
LD A,3
RET C
CALL INCTASK
;R08 LD HL,TASK
;R08 INC (HL)
CALL OPENEXE
JR NC,EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
CALL DECTASK ;R08
;R07
;FILE NO FOUND, SEACHING IN PATH
; GET PATH AND ETC.
LD HL,ENVPATH
LD DE,ENVTEMP
LD B,1
CALL ENVIRON
LD HL,(CMDLINE)
LD DE,EXEBUFF
COPYEXN LD A,(HL)
LDI
OR A
JR NZ,COPYEXN
CALL FINDPATH
LD HL,(CMDLINE)
JR EXEC1
;EXEC00
EXEC02
LD (EXE_FM),A
LD HL,EXEBUFF
LD DE,#0080 ;!#0200(512) ;R02
LD A,(EXE_FM)
CALL READ
JP C,ERREXE
LD IX,EXEBUFF
LD HL,(EXEBUFF)
LD DE,#5845
SBC HL,DE
LD A,17
SCF
JP NZ,ERREXE
LD A,(IX+3)
OR A
LD A,18
SCF
JP NZ,ERREXE
LD DE,(LOADER)
LD A,E
OR D
JP NZ,PRELOAD
LD L,A
LD H,A
PUSH HL
POP IX
LD B,#02
LD A,(EXE_FM)
CALL MOVE_FP
LD DE,(LD_ADDR)
LD A,D
AND #3F
LD D,A
ADD IX,DE
LD DE,#0000
ADC HL,DE
LD A,XH
SLA A
RL L
RL H
SLA A
RL L
RL H
OR XL
JR Z,NOINK
INC HL
NOINK
LD A,H
OR A
JP NZ,ERREXE0
LD B,L
CALL GETMEM
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(PAGE3)
LD D,A
IN A,(PAGE2)
LD E,A
IN A,(PAGE1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
LD DE,RAMMAP
LD BC,#00C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
INC DE
LD BC,#01C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
INC DE
LD BC,#02C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
INC DE
LD BC,#03C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
LD HL,(CMDLINE)
LD DE,SECBUF+1
CALL SCOPYS
LD A,#80
SUB B
LD (SECBUF),A
LD SP,EXEBUFF+510 ;R02
LD A,#FF
OUT (PAGE1),A
OUT (PAGE2),A
OUT (PAGE3),A
LD HL,(LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
CP #40
JR Z,FR4000
CP #80
JR Z,FR8000
CP #C0
JR Z,FRC000
FR4000 LD A,(DE)
OUT (PAGE1),A
INC DE
FR8000
LD A,(DE)
OUT (PAGE2),A
INC DE
FRC000
LD A,(DE)
OUT (PAGE3),A
CALL M_PSP
LD HL,(OFFCOD2)
LD IX,(OFFCOD1)
LD B,#00
LD A,(EXE_FM)
CALL MOVE_FP
LD SP,#403F
LD DE,(LD_ADDR)
XOR A
LD L,A
LD H,A
SBC HL,DE
EX DE,HL
LD HL,(LD_ADDR)
LD A,(EXE_FM)
CALL READ
LD A,(EXE_FM)
CALL CLOSE
LD SP,(SP_REG)
LD HL,(LD_ADDR)
LD DE,#0080
AND A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(PC_REG)
LD DE,RETFAR
PUSH DE
PUSH HL
RET
RETFAR JP LEAVE
TST_EXT LD HL,EXE_EXT
LD DE,MASKARE+8
LD B,3
LD A,(DE)
CP #20
JR NZ,TSTE1
LDI
LDI
LDI
XOR A
RET
TSTE1 LD A,(DE)
CP (HL)
SCF
RET NZ
INC HL
INC DE
DJNZ TSTE1
XOR A
RET
ERREXE0 LD A,30
ERREXE PUSH AF
LD A,(EXE_FM)
CALL CLOSE
LD HL,TASK
DEC (HL)
POP AF
RET
PRELOAD EX DE,HL
LD DE,(LD_ADDR)
LD A,D
AND #3F
LD D,A
ADC HL,DE
XOR A
SLA H
RLA
SLA H
RLA
LD B,A
LD A,H
OR L
JR Z,NOINK2
INC B
NOINK2
CALL GETMEM
JR C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(PAGE3)
LD D,A
IN A,(PAGE2)
LD E,A
IN A,(PAGE1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
LD DE,RAMMAP
LD BC,#00C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
INC DE
LD BC,#01C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
INC DE
LD BC,#02C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
INC DE
LD BC,#03C4
LD A,(EXE_MEM)
RST #08
LD (DE),A
LD HL,(CMDLINE)
LD DE,SECBUF+1
CALL SCOPYS
LD A,#80
SUB B
LD (SECBUF),A
LD SP,EXEBUFF+510
LD A,#FF
OUT (PAGE1),A
OUT (PAGE2),A
OUT (PAGE3),A
LD HL,(LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
CP #40
JR Z,FR4000H
CP #80
JR Z,FR8000H
CP #C0
JR Z,FRC000H
FR4000H LD A,(DE)
OUT (PAGE1),A
INC DE
FR8000H LD A,(DE)
OUT (PAGE2),A
INC DE
FRC000H
LD A,(DE)
OUT (PAGE3),A
CALL M_PSP
LD HL,(OFFCOD2)
LD IX,(OFFCOD1)
LD B,#00
LD A,(EXE_FM)
CALL MOVE_FP
LD SP,#403F
LD HL,(LD_ADDR)
LD DE,(LOADER)
LD A,(EXE_FM)
CALL READ
LD SP,(SP_REG)
LD HL,(LD_ADDR)
LD DE,#0080
AND A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(PC_REG)
LD DE,RETFAR
PUSH DE
PUSH HL
RET
LEAVE LD A,B
LD (ERLEVEL),A
CALL LEAVMEM
LD HL,TASK
DEC (HL)
LD SP,(EXSTACK)
POP AF
POP HL
OUT (PAGE1),A
LD A,L
OUT (PAGE2),A
LD A,H
OUT (PAGE3),A
POP DE
POP HL
LD (EXSTACK),SP
LD SP,HL
EX DE,HL
LD A,(ERLEVEL)
AND A
JP (HL)
WAIT LD A,(ERLEVEL)
AND A
RET
M_PSP LD HL,(LD_ADDR)
DEC H
LD D,H
LD E,L
INC DE
LD BC,#00FF
LD (HL),B
LDIR
EX DE,HL
DEC H
LD DE,#0080
ADD HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,SECBUF
LD C,(HL)
INC C
LDIR
EX DE,HL ;R06
LD (HL),B
LD A,(TASK)
LD (IX-1),A
LD A,(EXE_MEM)
LD (IX-2),A
LD A,(EXE_FM)
LD (IX-3),A
;R05
INC HL
LD (HL),B
INC HL
CALL CURRDSK
ADD A,"A"
LD (HL),A
INC HL
LD A,":"
LD (HL),A
INC HL
PUSH HL
CALL CURRDIR
POP HL
XOR A
LD BC,#0100
CPIR
DEC HL
DEC HL
LD A,#5C ;"\"
CP (HL)
INC HL
JR Z,YP_ESLA
LD (HL),A
INC HL
YP_ESLA EX DE,HL
LD HL,TMPNAME
ENMLP1 LD A,(HL)
LDI
CP "!"
JR NC,ENMLP1
DEC DE
XOR A
LD (DE),A
LD (LAST_PSP_PTR),IX
;R05
RET
SCOPYS LD BC,#8021
SCOP0 LD A,(HL)
CP C
JR C,SCOP1
INC HL
DJNZ SCOP0
XOR A
LD (DE),A
LD B,#80
RET
SCOP1 LD BC,#8020
SCOP2 LD A,(HL)
LD (DE),A
INC HL
INC DE
CP C
RET C
DJNZ SCOP2
RET
EXE_EXT DB "E","X","E"
TASK DB #01
RAMMAP DB #00,#00,#00,#00
ERLEVEL DB #00
EXE_FM DB #00
EXE_MEM DB #00
CMDLINE DW #0000
EXSTACK DW XSTACK
EXEBUFF
DB "EXE"
DB #00
OFFCOD1 DW #0000
OFFCOD2 DW #0000
LOADER DW #0000
DW #0000
DW #0000
DW #0000
LD_ADDR DW #0000
PC_REG DW #0000
SP_REG DW #0000
DS 512-($-EXEBUFF)
;(!!!HERE STACK FOR EXEC!!!)
DS 255
XSTACK DB #00
;//MODULE: EXECUTE
;[END]