1347 lines
27 KiB
NASM
1347 lines
27 KiB
NASM
; ---------------------------------
|
|
; MZ-800 BASIC Statement interprit
|
|
; FI:STMNT ver 1.0A 9.06.84
|
|
; Programed by T.Miho
|
|
; ---------------------------------
|
|
;
|
|
INCLD MACRO
|
|
;
|
|
LET: ENT
|
|
TEST1 FFH
|
|
CALL TEST1
|
|
DEFB FFH
|
|
ENDM
|
|
JP Z,PFUNCT
|
|
CALL INTGTV
|
|
PUSH BC
|
|
PUSH BC
|
|
PUSH AF
|
|
TESTX F4H ;=
|
|
CALL TESTX
|
|
DEFB F4H
|
|
ENDM
|
|
CALL EXPR
|
|
POP BC
|
|
LD A,(PRCSON)
|
|
CP B
|
|
JP NZ,ER04
|
|
EX (SP),HL ; VAR ADRS<>TEXTPOINT
|
|
EX DE,HL
|
|
CP 05H
|
|
JR Z,DAIBCK
|
|
PUSH BC
|
|
CALL STRDAI
|
|
POP AF
|
|
POP HL
|
|
POP BC
|
|
RET
|
|
;
|
|
DAIBCK: LD C,A
|
|
LD B,0
|
|
LDIR
|
|
POP HL
|
|
POP BC
|
|
RET
|
|
;
|
|
PFUNCT: ENT
|
|
TESTX C4H
|
|
CALL TESTX
|
|
DEFB C4H
|
|
ENDM
|
|
JP TIMDAI ;TI$=...
|
|
;
|
|
STRLET: ENT
|
|
PUSH DE
|
|
EX DE,HL
|
|
JR STRDI2
|
|
;
|
|
STRDAI: ENT
|
|
PUSH DE
|
|
CALL CVTSDC
|
|
|
|
STRDI2: LD HL,KEYBM1
|
|
LD M,A
|
|
LD B,A
|
|
LD C,A
|
|
INC HL
|
|
CALL LDHLDE
|
|
POP HL
|
|
LD A,M
|
|
CP C
|
|
JR Z,SMLNST
|
|
PUSH HL
|
|
OR A
|
|
CALL NZ,DELSTR
|
|
POP HL
|
|
LD A,(KEYBM1)
|
|
OR A
|
|
JR Z,STRNL1
|
|
PUSH HL
|
|
LD BC,(VARST)
|
|
SBC HL,BC
|
|
EX DE,HL
|
|
LD HL,(VARED)
|
|
DEC HL
|
|
DEC HL
|
|
LD M,E
|
|
INC HL
|
|
LD M,D
|
|
INC HL
|
|
LD BC,(STRST)
|
|
OR A
|
|
POP DE
|
|
PUSH HL
|
|
SBC HL,BC
|
|
EX DE,HL
|
|
LD M,A
|
|
LD B,A
|
|
INC HL
|
|
LD M,E
|
|
INC HL
|
|
LD M,D
|
|
POP HL
|
|
LD DE,KEYBM1
|
|
INC DE
|
|
CALL STRENT
|
|
CALL LDHL00
|
|
LD (TMPEND),HL
|
|
LD (VARED),HL
|
|
RET
|
|
;
|
|
STRNL1: LD M,0
|
|
RET
|
|
;
|
|
SMLNST: INC HL
|
|
LD E,M
|
|
INC HL
|
|
LD D,M
|
|
LD HL,(STRST)
|
|
ADD HL,DE
|
|
LD DE,KEYBM1
|
|
LD B,C
|
|
|
|
INC DE
|
|
JP STRENT
|
|
;
|
|
DELSTR: LD C,M
|
|
LD B,0
|
|
INC BC
|
|
INC BC
|
|
INC HL
|
|
LD E,M
|
|
INC HL
|
|
LD D,M
|
|
LD HL,(STRST)
|
|
ADD HL,DE
|
|
DEC HL
|
|
DEC HL
|
|
LD E,L
|
|
LD D,H
|
|
ADD HL,BC
|
|
PUSH BC
|
|
PUSH DE
|
|
EX DE,HL
|
|
LD HL,(VARED)
|
|
OR A
|
|
SBC HL,DE
|
|
LD C,L
|
|
LD B,H
|
|
EX DE,HL
|
|
POP DE
|
|
PUSH DE
|
|
JR Z,+4
|
|
LDIR
|
|
POP DE
|
|
POP BC
|
|
LD HL,(VARED)
|
|
OR A
|
|
SBC HL,BC
|
|
LD (VARED),HL
|
|
EX DE,HL
|
|
STRDE1: LD E,M
|
|
INC HL
|
|
LD D,M
|
|
LD A,D
|
|
OR E
|
|
RET Z
|
|
LD HL,(VARST)
|
|
ADD HL,DE
|
|
LD A,M
|
|
INC HL
|
|
LD E,M
|
|
INC HL
|
|
LD D,M
|
|
OR A
|
|
EX DE,HL
|
|
SBC HL,BC
|
|
EX DE,HL
|
|
LD M,D
|
|
DEC HL
|
|
LD M,E
|
|
PUSH BC
|
|
LD C,A
|
|
|
|
LD B,0
|
|
LD HL,(STRST)
|
|
ADD HL,DE
|
|
ADD HL,BC
|
|
POP BC
|
|
JR STRDE1
|
|
SKP H
|
|
|
|
;
|
|
FOR: ENT ;FOR TO STEP
|
|
POP BC
|
|
LD (FORRTA),BC
|
|
CALL LET
|
|
LD IX,0
|
|
ADD IX,SP
|
|
LD (FRTXPT),HL
|
|
CALL VAROFST
|
|
LD (FORVAD+1),BC
|
|
FOR3: LD E,(IX+0)
|
|
LD D,(IX+1)
|
|
LD HL,FF12H
|
|
OR A
|
|
SBC HL,DE
|
|
JR NZ,FOR1
|
|
LD E,(IX+6)
|
|
LD D,(IX+7)
|
|
EX DE,HL
|
|
OR A
|
|
SBC HL,BC
|
|
JR Z,FOR2 ;EQL FORVAR
|
|
LD DE,012H
|
|
ADD IX,DE
|
|
JR FOR3
|
|
FOR2: LD DE,012H
|
|
ADD IX,DE
|
|
LD SP,IX
|
|
FOR1: LD HL,(FRTXPT)
|
|
TESTX E0H ;TO
|
|
CALL TESTX
|
|
DEFB E0H
|
|
ENDM
|
|
CALL EXPR
|
|
PUSH AF
|
|
PUSH HL
|
|
EX DE,HL
|
|
LD DE,TODTBF
|
|
CALL LDIR5
|
|
POP HL
|
|
POP AF
|
|
CP E1H ;STEP
|
|
LD DE,FLONE
|
|
JR NZ,SSTEP1
|
|
INC HL
|
|
CALL EXPR
|
|
SSTEP1: LD (FRTXPT),HL
|
|
LD HL,FFF6H ;-10
|
|
ADD HL,SP
|
|
LD SP,HL
|
|
EX DE,HL
|
|
CALL LDIR5
|
|
LD HL,TODTBF
|
|
CALL LDIR5
|
|
FORVAD: LD HL,0
|
|
PUSH HL
|
|
DEFB 21H
|
|
FRTXPT: DEFS 2
|
|
PUSH HL
|
|
LD HL,(NXTLPT)
|
|
|
|
PUSH HL
|
|
LD HL,FF12H ;FOR MARK
|
|
PUSH HL
|
|
LD HL,-512
|
|
ADD HL,SP
|
|
LD DE,(TMPEND)
|
|
SBC HL,DE
|
|
LD A,11 ;FOR..NEXT ERR
|
|
JP C,NESTER
|
|
LD HL,(FRTXPT)
|
|
DEFB C3H
|
|
FORRTA: DEFS 2
|
|
;
|
|
;
|
|
NEXT: ENT ;NEXT
|
|
LD A,5
|
|
LD (PRCSON),A
|
|
POP BC
|
|
LD (NEXRTA),BC
|
|
NEXT6: PUSH AF
|
|
POP BC
|
|
LD (FRTXPT),HL
|
|
LD IX,0
|
|
ADD IX,SP
|
|
LD (FORSTK),IX
|
|
LD E,(IX+0)
|
|
LD D,(IX+1)
|
|
LD HL,FF12H
|
|
OR A
|
|
SBC HL,DE
|
|
JP NZ,ER13
|
|
PUSH BC
|
|
POP AF
|
|
JR NZ,NEXT1
|
|
;
|
|
LD E,(IX+4) ;FOR TEXTPO
|
|
LD D,(IX+5)
|
|
EX DE,HL
|
|
LD (NEXT4+1),HL
|
|
;
|
|
LD E,(IX+6) ;FORVAD
|
|
LD D,(IX+7)
|
|
LD HL,(VARST)
|
|
ADD HL,DE
|
|
;
|
|
LD BC,8 ;STEP ADR
|
|
ADD IX,BC
|
|
PUSH IX
|
|
POP DE
|
|
CALL ADD
|
|
INC DE
|
|
LD A,(DE)
|
|
LD IX,(FORSTK)
|
|
LD DE,0DH
|
|
ADD IX,DE
|
|
PUSH IX
|
|
POP DE
|
|
BIT 7,A
|
|
JR NZ,+3
|
|
EX DE,HL
|
|
|
|
CALL CMP
|
|
JR C,NEXT3 ;END
|
|
DEFB 31H
|
|
FORSTK: DEFS 2
|
|
LD HL,2
|
|
ADD HL,SP
|
|
LD A,M
|
|
INC HL
|
|
LD H,M
|
|
LD L,A
|
|
LD (NXTLPT),HL
|
|
NEXT4: LD HL,0 ;TEXTPO
|
|
NEXT5: DEFB C3H
|
|
NEXRTA: DEFS 2
|
|
NEXT3: LD DE,012H
|
|
LD HL,(FORSTK)
|
|
ADD HL,DE
|
|
LD SP,HL
|
|
LD HL,(FRTXPT)
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
JR NZ,NEXT5
|
|
;
|
|
LD (FRTXPT),HL
|
|
NEXT1: LD IX,0
|
|
ADD IX,SP
|
|
LD (FORSTK),IX
|
|
LD HL,(FRTXPT)
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
JP Z,NEXT6
|
|
CALL INTGTV
|
|
LD (FRTXPT),HL
|
|
CALL VAROFST
|
|
LD IX,(FORSTK)
|
|
NEXT12: LD E,(IX+0)
|
|
LD D,(IX+1)
|
|
LD HL,FF12H
|
|
OR A
|
|
SBC HL,DE
|
|
JP NZ,ER13
|
|
LD L,(IX+6)
|
|
LD H,(IX+7)
|
|
OR A
|
|
SBC HL,BC
|
|
LD HL,(FRTXPT)
|
|
JP Z,NEXT6
|
|
LD DE,012H
|
|
ADD IX,DE
|
|
LD (FORSTK),IX
|
|
LD SP,(FORSTK)
|
|
JR NEXT12
|
|
;
|
|
VAROFST:LD HL,BC
|
|
LD BC,(VARST)
|
|
OR A
|
|
|
|
SBC HL,BC
|
|
LD BC,HL
|
|
RET
|
|
;
|
|
TODTBF: DEFS 5
|
|
;
|
|
FRLNBF: DEFS 2
|
|
FRNLPT: DEFS 2
|
|
;
|
|
FORSKS: CALL IFSKSB
|
|
OR A
|
|
RET NZ
|
|
INC HL
|
|
PUSH DE
|
|
LD E,M
|
|
INC HL
|
|
LD D,M
|
|
LD A,D
|
|
OR E
|
|
INC HL
|
|
LD (FRNLPT+1),DE
|
|
LD E,M
|
|
INC HL
|
|
LD D,M
|
|
LD (FRLNBF+1),DE
|
|
POP DE
|
|
SCF
|
|
RET Z
|
|
JR FORSKS
|
|
SKP H
|
|
|
|
;
|
|
USR: ENT ;USR(adrs,source$,dest$)
|
|
CALL CH28H
|
|
CALL IDEEXP ;adrs
|
|
LD (USRADR+1),DE
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
JR NZ,USR2
|
|
CALL EXPR ;source$
|
|
CALL STROK
|
|
LD (USRSRC+1),DE
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
JR NZ,USR2
|
|
CALL INTGTV ;dest$
|
|
CALL STROK
|
|
LD (USRDST+1),BC
|
|
XOR A
|
|
USR2: PUSH HL
|
|
PUSH AF
|
|
USRSRC: LD HL,0 ;xxx
|
|
CALL CVTSDC
|
|
LD IX,ERRORJ
|
|
XOR A
|
|
USRADR: CALL 0 ;xxx
|
|
POP AF
|
|
JR NZ,USR8
|
|
LD A,B ;dest$ exist
|
|
EX DE,HL
|
|
USRDST: LD DE,0 ;xxx
|
|
CALL STRLET
|
|
USR8: POP HL
|
|
JP HCH29H
|
|
SKP H
|
|
|
|
;
|
|
;
|
|
PAUSE: ENT ;PAUSE command
|
|
CALL IDEEXP
|
|
PAUSE2: LD A,D
|
|
OR E
|
|
RET Z
|
|
LD B,FBH ;JAPAN 00H
|
|
DJNZ +0
|
|
SVC .BREAK
|
|
RST 3
|
|
DEFB .BREAK
|
|
ENDM
|
|
RET Z
|
|
DEC DE
|
|
JR PAUSE2
|
|
;
|
|
REM: ENT ;REM command
|
|
LABEL: ENT ;LABEL command
|
|
DATA: ENT ;DATA command
|
|
GSUB: ENT ;GOSUB command
|
|
DEC HL
|
|
DATA0: CALL IFSKSB
|
|
OR A
|
|
SCF
|
|
RET Z
|
|
CP ":"
|
|
RET Z
|
|
JR DATA0
|
|
;
|
|
OUT@: ENT ;OUT @port,data
|
|
CALL IBYTE
|
|
SUB E0H
|
|
CP 7
|
|
JP C,ER03 ;E0H .. E6H
|
|
CALL HCH2CH
|
|
PUSH DE
|
|
CALL IBYTE
|
|
POP BC
|
|
OUT (C),A
|
|
RET
|
|
;
|
|
INP@: ENT ;INP @port,vara
|
|
CALL IBYTE
|
|
CALL HCH2CH
|
|
PUSH DE
|
|
CALL INTGTV
|
|
CP 5
|
|
JP NZ,ER04
|
|
EX (SP),HL
|
|
PUSH BC
|
|
EX (SP),HL
|
|
POP BC
|
|
IN E,(C)
|
|
LD D,0
|
|
CALL FLTHEX
|
|
POP HL
|
|
RET
|
|
SKP H
|
|
|
|
;
|
|
CURSOR: ENT ;CURSOR x,y
|
|
CALL CSRXY
|
|
EX DE,HL
|
|
SVC .CURMV
|
|
RST 3
|
|
DEFB .CURMV
|
|
ENDM
|
|
EX DE,HL
|
|
RET
|
|
;
|
|
CSRXY: ENT
|
|
LD B,24
|
|
LD C,39
|
|
LD A,(CRTMD2) ;80 char. mode change
|
|
CP 3
|
|
JR C,CSRXY3
|
|
LD C,79
|
|
CSRXY3: CALL CSRXY2
|
|
JP C,ER03
|
|
RET
|
|
;
|
|
CSRXY2: PUSH BC
|
|
CALL IBYTE
|
|
PUSH AF
|
|
CALL HCH2CH
|
|
CALL IBYTE
|
|
LD D,E
|
|
POP AF
|
|
LD E,A
|
|
POP BC
|
|
LD A,C
|
|
CP E
|
|
RET C
|
|
LD A,B
|
|
CP D
|
|
RET
|
|
;
|
|
GETOP: ENT ;GET var
|
|
CALL INTGTV
|
|
LD (PRCSON),A
|
|
CP 5
|
|
JR Z,GETSUJ
|
|
PUSH HL ;GET STR
|
|
PUSH BC
|
|
LD A,FFH
|
|
SVC .INKEY
|
|
RST 3
|
|
DEFB .INKEY
|
|
ENDM
|
|
OR A
|
|
JR Z,NLGTKY
|
|
LD HL,(TMPEND)
|
|
LD M,A
|
|
LD A,1
|
|
NLGTKY: POP DE
|
|
CALL STRLET
|
|
POP HL
|
|
RET
|
|
;
|
|
|
|
GETSUJ: PUSH HL
|
|
PUSH BC
|
|
LD A,FFH
|
|
SVC .INKEY
|
|
RST 3
|
|
DEFB .INKEY
|
|
ENDM
|
|
SUB 30H
|
|
CP 0AH
|
|
JR C,+3
|
|
XOR A
|
|
LD E,A
|
|
LD D,0
|
|
POP HL
|
|
CALL FLTHEX
|
|
POP HL
|
|
RET
|
|
SKP H
|
|
|
|
;
|
|
POKE: ENT ;POKE ad,d1,d2,d3,...
|
|
CALL IDEEXP
|
|
CALL CH2CH
|
|
POKELP: PUSH DE
|
|
CALL IBYTE
|
|
POP DE
|
|
LD (DE),A
|
|
INC DE
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
RET NZ
|
|
JR POKELP
|
|
;
|
|
LIMIT: ENT ;LIMIT adrs
|
|
PUSH HL
|
|
TEST1 "M"
|
|
CALL TEST1
|
|
DEFB "M"
|
|
ENDM
|
|
JR NZ,LIMIT1
|
|
TEST1 "A"
|
|
CALL TEST1
|
|
DEFB "A"
|
|
ENDM
|
|
JR NZ,LIMIT1
|
|
TEST1 "X"
|
|
CALL TEST1
|
|
DEFB "X"
|
|
ENDM
|
|
JR NZ,LIMIT1
|
|
EX (SP),HL
|
|
LD HL,(MEMMAX)
|
|
JR LIMIT2
|
|
LIMIT1: POP HL
|
|
CALL IDEEXP
|
|
PUSH HL
|
|
LD HL,(MEMMAX)
|
|
OR A
|
|
SBC HL,DE
|
|
JP C,ER06'
|
|
LD HL,(TMPEND)
|
|
INC H
|
|
INC H
|
|
INC H
|
|
INC H
|
|
OR A
|
|
SBC HL,DE
|
|
JP NC,ER03
|
|
EX DE,HL
|
|
LIMIT2: CALL MEMSET
|
|
POP HL
|
|
POP DE
|
|
LD SP,(INTFAC)
|
|
LD BC,FFFFH
|
|
PUSH BC
|
|
PUSH DE
|
|
RET
|
|
|
|
SKP H
|
|
|
|
;
|
|
RETURN: ENT ;RETURN linenumber
|
|
POP IX
|
|
RETRN2: POP BC
|
|
PUSH BC
|
|
LD A,B
|
|
INC A
|
|
JP NZ,ER14
|
|
LD A,C
|
|
CP 12H
|
|
JR Z,RETRN6
|
|
CP FEH
|
|
JP NZ,ER14
|
|
POP BC
|
|
CALL ENDCHK
|
|
EX DE,HL
|
|
POP HL
|
|
LD (LNOBUF),HL
|
|
POP HL
|
|
LD (NXTLPT),HL
|
|
POP HL
|
|
PUSH IX
|
|
RET Z
|
|
EX DE,HL
|
|
JP GOTO
|
|
RETRN6: EX DE,HL
|
|
LD HL,12H
|
|
ADD HL,SP
|
|
LD SP,HL
|
|
EX DE,HL
|
|
JR RETRN2
|
|
;
|
|
GOSUB: ENT ;GOSUB linenumber
|
|
PUSH HL
|
|
CALL GSUB
|
|
EX DE,HL
|
|
POP HL
|
|
POP BC
|
|
PUSH DE
|
|
EXX
|
|
LD HL,(NXTLPT)
|
|
PUSH HL
|
|
LD HL,(LNOBUF)
|
|
PUSH HL
|
|
LD HL,FFFEH
|
|
PUSH HL
|
|
LD HL,-512
|
|
ADD HL,SP
|
|
LD DE,(TMPEND)
|
|
SBC HL,DE
|
|
LD A,10
|
|
JP C,NESTER
|
|
EXX
|
|
PUSH BC
|
|
JR GOTO
|
|
SKP H
|
|
|
|
;
|
|
ON: ENT ;ON command
|
|
TEST1 C1H
|
|
CALL TEST1
|
|
DEFB C1H
|
|
ENDM
|
|
JP Z,ONERRG ;ON ERROR
|
|
CALL IDEEXP
|
|
LD C,E
|
|
LD B,D
|
|
CP 87H
|
|
JP NC,ER01
|
|
CP 82H
|
|
JR NZ,ON.4
|
|
CALL INCHLF
|
|
LD E,81H
|
|
CP E4H
|
|
JR Z,ON.2
|
|
CP E0H
|
|
JP NZ,ER01
|
|
DEC E
|
|
ON.2: LD A,E
|
|
ON.4: PUSH HL
|
|
LD HL,SJPTBL
|
|
SUB 80H
|
|
ADD A,A
|
|
LD E,A
|
|
LD D,0
|
|
ADD HL,DE
|
|
CALL INDRCT
|
|
EX (SP),HL
|
|
INC HL
|
|
LD A,B
|
|
OR A
|
|
JR NZ,ON.9
|
|
LD A,C
|
|
OR A
|
|
JR Z,ON.9
|
|
LD B,A
|
|
ON.6: DEC B
|
|
RET Z
|
|
CALL HLFTCH
|
|
CALL LINE?
|
|
JP NZ,ER01
|
|
CALL DTSKL1
|
|
OR A
|
|
RET Z
|
|
INC HL
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
JR Z,ON.6
|
|
POP DE
|
|
JP ENDZ
|
|
ON.9: POP DE
|
|
JP DATA
|
|
SKP H
|
|
|
|
;
|
|
GOTO: ENT ;GOTO linenumber
|
|
CALL GETLIN
|
|
EX DE,HL
|
|
JR NZ,+5
|
|
LD HL,(TEXTST) ;GOTO 0
|
|
LD (NXTLPT),HL
|
|
XOR A
|
|
LD (CONTFG),A
|
|
JP NXLINE
|
|
;
|
|
IF: ENT ;IF THEN ELSE
|
|
CALL EXPR
|
|
EX AF,AF'
|
|
LD A,(DE)
|
|
OR A
|
|
JR Z,IFALSE
|
|
EX AF,AF'
|
|
CP E2H ;THEN
|
|
JR NZ,IF.4
|
|
IF.2: CALL INCHLF
|
|
CALL LINE?
|
|
JR Z,GOTO
|
|
IF.4: POP AF
|
|
JP MAIN
|
|
;
|
|
LINE?: ENT
|
|
CP '"'
|
|
RET Z
|
|
LINE?2: ENT
|
|
CP 0BH
|
|
RET Z
|
|
CP 0CH
|
|
RET
|
|
;
|
|
ELSE: ENT
|
|
CALL IFSKIP
|
|
JR NC,-3
|
|
RET
|
|
;
|
|
IFALSE: DEC HL
|
|
CALL IFSKIP
|
|
JR NC,IF.2
|
|
JP ENDLIN
|
|
;
|
|
IFSKIP: CALL IFSKSB
|
|
OR A
|
|
SCF
|
|
RET Z
|
|
CP C2H ;ELSE
|
|
RET Z
|
|
CP 93H ;IF
|
|
JR NZ,IFSKIP
|
|
CALL IFSKIP
|
|
RET C
|
|
JR IFSKIP
|
|
;
|
|
DTSKSB: ENT
|
|
INC HL
|
|
LD A,M
|
|
|
|
JR DTSKL1
|
|
;
|
|
IFSKSB: ENT
|
|
INC HL
|
|
LD A,M
|
|
CP 94H ;DATA
|
|
JR Z,IFDASK
|
|
DTSKL1: OR A
|
|
RET Z
|
|
CP '"'
|
|
JR Z,IFDQSK
|
|
CP FEH ;FUNC/OPTION
|
|
JR NC,IFFNRT
|
|
CP 97H ;REM
|
|
JR Z,IFDASK
|
|
CP 27H ;'
|
|
JR Z,IFDASK
|
|
CP 20H
|
|
RET NC
|
|
CP 0BH
|
|
RET C
|
|
CP 15H
|
|
JR NC,ISKFLT
|
|
INC HL
|
|
IFFNRT: INC HL
|
|
RET
|
|
;
|
|
;
|
|
IFDASK: LD A,M
|
|
OR A
|
|
RET Z
|
|
CP 3AH
|
|
RET Z
|
|
CP '"'
|
|
JR Z,DADQSK
|
|
INC HL
|
|
JR IFDASK
|
|
;
|
|
DADQSK: CALL IFDQSK
|
|
OR A
|
|
RET Z
|
|
INC HL
|
|
JR IFDASK
|
|
;
|
|
ISKFLT: AND 0FH
|
|
ADD A,L
|
|
LD L,A
|
|
LD A,20H
|
|
RET NC
|
|
INC H
|
|
RET
|
|
;
|
|
IFDQSK: INC HL
|
|
LD A,M
|
|
OR A
|
|
RET Z
|
|
CP '"'
|
|
RET Z
|
|
JR IFDQSK
|
|
SKP H
|
|
|
|
;
|
|
;
|
|
BEEP: ENT ;BEEP command
|
|
SVC .BELL
|
|
RST 3
|
|
DEFB .BELL
|
|
ENDM
|
|
RET
|
|
;
|
|
BYE: ENT ;BYE command
|
|
CALL ENDZ
|
|
SVC .CLRIO
|
|
RST 3
|
|
DEFB .CLRIO
|
|
ENDM
|
|
SVC .MONOP
|
|
RST 3
|
|
DEFB .MONOP
|
|
ENDM
|
|
RET
|
|
SKP H
|
|
|
|
;
|
|
CONSOL: ENT ;CONSOLE x,xl,y,yl
|
|
JR Z,CONSOI
|
|
LD A,(YS)
|
|
;
|
|
;CONSCK
|
|
LD D,0
|
|
LD E,A
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
JR Z,CONSOK
|
|
CALL IBYTE
|
|
CALL HCH2CH
|
|
CONSOK: LD C,E
|
|
PUSH BC
|
|
CALL IBYTE
|
|
POP BC
|
|
DEC A
|
|
JP M,ER03
|
|
ADD A,C
|
|
CP 25
|
|
JP NC,ER03
|
|
LD B,A
|
|
;
|
|
PUSH HL
|
|
LD H,B
|
|
LD L,C
|
|
SVC .DWIND
|
|
RST 3
|
|
DEFB .DWIND
|
|
ENDM
|
|
POP HL
|
|
RET
|
|
CONSOI: ENT ;CONSOLE INIT
|
|
PUSH HL
|
|
LD HL,1800H
|
|
SVC .DWIND
|
|
RST 3
|
|
DEFB .DWIND
|
|
ENDM
|
|
POP HL
|
|
RET
|
|
;
|
|
BOOT: ENT ;BOOT command
|
|
DI
|
|
OUT (E4H),A
|
|
JP 0
|
|
SKP H
|
|
|
|
;
|
|
;
|
|
SEARCH: ENT ;SEARCH#n "xxxx"
|
|
XOR A
|
|
DEFB 1
|
|
LIST: ENT ;LIST#n Start-End
|
|
LD A,1
|
|
LD (SELTF),A
|
|
PUSH AF
|
|
CALL GETLU
|
|
SVC .LUCHK
|
|
RST 3
|
|
DEFB .LUCHK
|
|
ENDM
|
|
JP C,ER64
|
|
BIT 1,A ;W?
|
|
JP Z,ER64
|
|
TEST1 ","
|
|
CALL TEST1
|
|
DEFB ","
|
|
ENDM
|
|
POP AF
|
|
OR A
|
|
JR NZ,LIST10
|
|
CALL STREXP ;SEARCH command only
|
|
LD A,B
|
|
LD (SECLEN),A
|
|
LD (SESTR),DE
|
|
CALL ENDZ
|
|
JR LIST10
|
|
;
|
|
LIST0: ENT
|
|
LD A,2
|
|
LD (SELTF),A
|
|
LIST10: CALL GTSTED
|
|
LD (LISTSN),DE
|
|
LD (LISTEN),BC
|
|
LD A,FFH
|
|
LD (DISPX),A
|
|
CALL PUSHR
|
|
LD HL,(TEXTST)
|
|
LIST20: CALL LDDEMI
|
|
LD A,D
|
|
OR E
|
|
RET Z
|
|
EX DE,HL
|
|
ADD HL,DE
|
|
DEC HL
|
|
DEC HL
|
|
EX DE,HL
|
|
PUSH DE
|
|
CALL LDDEMI
|
|
PUSH HL
|
|
DEFB 21H
|
|
LISTSN: DEFS 2
|
|
OR A
|
|
SBC HL,DE
|
|
JR C,LIST30
|
|
JR Z,LIST30
|
|
POP HL
|
|
|
|
POP HL
|
|
JR LIST20
|
|
;
|
|
LIST30: DEFB 21H
|
|
LISTEN: DEFS 2
|
|
OR A
|
|
SBC HL,DE
|
|
JR NC,LIST40
|
|
POP HL
|
|
POP HL
|
|
RET
|
|
;
|
|
;
|
|
LIST40: EX DE,HL
|
|
CALL ASCFIV
|
|
SVC .COUNT
|
|
RST 3
|
|
DEFB .COUNT
|
|
ENDM
|
|
LD HL,KEYBUF
|
|
CALL LDHLDE
|
|
LD M," "
|
|
INC HL
|
|
EX DE,HL
|
|
POP HL
|
|
CALL CVTXIM
|
|
LD A,(SELTF)
|
|
OR A
|
|
JR NZ,LIST50
|
|
CALL SSEST
|
|
JR NC,LIST60
|
|
LIST50: LD DE,KEYBUF
|
|
SVC .COUNT
|
|
RST 3
|
|
DEFB .COUNT
|
|
ENDM
|
|
SVC .PRSTR
|
|
RST 3
|
|
DEFB .PRSTR
|
|
ENDM
|
|
CALL PRTCR
|
|
LIST60: POP HL
|
|
LD A,(SELTF)
|
|
CP 2
|
|
JR Z,LIST20 ;ASCII SAVE
|
|
SVC .HALT
|
|
RST 3
|
|
DEFB .HALT
|
|
ENDM
|
|
JR LIST20
|
|
;
|
|
;
|
|
;
|
|
; HL=TEXT START ADDRESS
|
|
;
|
|
SSEST: EX DE,HL
|
|
SSESTL: PUSH HL
|
|
CALL SSESTS
|
|
POP HL
|
|
RET C
|
|
|
|
RET Z
|
|
INC HL
|
|
JR SSESTL
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; ent HL:CMP pointer
|
|
;
|
|
; ext CY=1 sane string
|
|
; CY=0 Acc=0 not same & text end
|
|
; Acc=FFH not same chr
|
|
;
|
|
SSESTS: LD A,(SECLEN) ;String Length
|
|
LD B,A
|
|
LD DE,(SESTR) ;String address
|
|
SSEST0: LD A,(HL)
|
|
INC HL
|
|
OR A
|
|
RET Z
|
|
CP 5
|
|
JR Z,SSEST1
|
|
CP 6
|
|
JR NZ,SSEST2
|
|
SSEST1: JR SSEST0
|
|
;
|
|
SSEST2: PUSH HL
|
|
LD C,A
|
|
SSEST4: LD A,(DE)
|
|
INC DE
|
|
CP 5
|
|
JR Z,SSEST3
|
|
CP 6
|
|
JR NZ,SSEST5
|
|
SSEST3: DEC B
|
|
SCF
|
|
POP HL
|
|
RET Z
|
|
PUSH HL
|
|
JR SSEST4
|
|
SSEST5: SUB C
|
|
POP HL
|
|
OR A
|
|
RET NZ ;1 Chr not same
|
|
DEC B
|
|
SCF
|
|
RET Z
|
|
JR SSEST0
|
|
;
|
|
;
|
|
SECLEN: DEFS 1 ;Stling length
|
|
;
|
|
SESTR: DEFS 2 ;Stling Addrsess
|
|
;
|
|
SSESTW: DEFS 2 ;Line No.
|
|
;
|
|
SELTF: DEFS 1 ;0:SEARCH , 1:LIST
|
|
;
|
|
SKP H
|
|
|
|
;
|
|
KLIST: ENT ;KEY LIST
|
|
TESTX 87H ;LIST
|
|
CALL TESTX
|
|
DEFB 87H
|
|
ENDM
|
|
CALL TESTP
|
|
PUSH HL
|
|
LD C,0
|
|
KLSTLP: SVC .&CR
|
|
RST 3
|
|
DEFB .&CR
|
|
ENDM
|
|
LD A,C
|
|
ADD A,"1"
|
|
LD D,A
|
|
LD E," "
|
|
CP 3AH
|
|
JR NZ,+5
|
|
LD DE,"01"
|
|
LD (KEYME2),DE
|
|
LD DE,KEYME1 ;'DEF KEY('
|
|
SVC .&MSG
|
|
RST 3
|
|
DEFB .&MSG
|
|
ENDM
|
|
LD A,C
|
|
CALL KEYBCL
|
|
LD B,M
|
|
INC HL
|
|
PUSH BC
|
|
CALL STKYMS ;(DE)=MSTRING
|
|
POP BC
|
|
INC C
|
|
LD A,C
|
|
CP 10
|
|
JR NZ,KLSTLP
|
|
SVC .&CR
|
|
RST 3
|
|
DEFB .&CR
|
|
ENDM
|
|
POP HL
|
|
RET
|
|
;
|
|
STKYMS: LD A,B
|
|
OR A
|
|
LD C,0
|
|
JR NZ,STKYM1
|
|
LD A,'"'
|
|
SVC .&1CX
|
|
RST 3
|
|
DEFB .&1CX
|
|
ENDM
|
|
SVC .&1CX
|
|
RST 3
|
|
DEFB .&1CX
|
|
ENDM
|
|
RET
|
|
STKYM1: LD A,M
|
|
CP 20H
|
|
|
|
JR C,CHRME1
|
|
CP '"'
|
|
JR Z,CHRME1
|
|
LD A,C
|
|
CP 1
|
|
JR Z,CHRM22
|
|
OR A
|
|
LD DE,KEYME3
|
|
JR NZ,+4
|
|
INC DE
|
|
INC DE
|
|
SVC .&MSG
|
|
RST 3
|
|
DEFB .&MSG
|
|
ENDM
|
|
CHRM22: LD A,M
|
|
SVC .&1CX
|
|
RST 3
|
|
DEFB .&1CX
|
|
ENDM
|
|
INC HL
|
|
LD C,1
|
|
DJNZ STKYM1
|
|
STKYE2: LD A,'"'
|
|
..&1CX: SVC .&1CX
|
|
RST 3
|
|
DEFB .&1CX
|
|
ENDM
|
|
RET
|
|
;
|
|
CHRME1: LD A,C
|
|
CP FFH
|
|
JR Z,CHRM12
|
|
OR A
|
|
LD DE,KEYME4
|
|
JR NZ,+4
|
|
INC DE
|
|
INC DE
|
|
SVC .&MSG
|
|
RST 3
|
|
DEFB .&MSG
|
|
ENDM
|
|
CHRM16: PUSH BC
|
|
PUSH HL
|
|
LD L,M
|
|
LD H,0
|
|
CALL ASCFIV
|
|
SVC .&MSG
|
|
RST 3
|
|
DEFB .&MSG
|
|
ENDM
|
|
POP HL
|
|
POP BC
|
|
INC HL
|
|
LD C,FFH
|
|
DJNZ STKYM1
|
|
LD A,")"
|
|
JP ..&1CX
|
|
;
|
|
CHRM12: LD A,","
|
|
|
|
SVC .&1CX
|
|
RST 3
|
|
DEFB .&1CX
|
|
ENDM
|
|
JR CHRM16
|
|
;
|
|
KEYME1: DEFM 'DEF KEY('
|
|
|
|
KEYME2: DEFS 2
|
|
DEFM ')='
|
|
DEFB 0
|
|
KEYME3: DEFM ')+"'
|
|
DEFB 0
|
|
KEYME4: DEFM '"+CHR$('
|
|
|
|
DEFB 0
|
|
SKP H
|
|
|
|
;
|
|
DEFOP: ENT ;DEF command
|
|
TEST1 B2H
|
|
CALL TEST1
|
|
DEFB B2H
|
|
ENDM
|
|
JR Z,DEFKEY ;DEF KEY(n)="..."
|
|
TESTX FFH
|
|
CALL TESTX
|
|
DEFB FFH
|
|
ENDM
|
|
TESTX C7H
|
|
CALL TESTX
|
|
DEFB C7H
|
|
ENDM
|
|
JP DEFFN ;DEF FNx(x)=expr
|
|
;
|
|
DEFKEY: TESTX "("
|
|
CALL TESTX
|
|
DEFB "("
|
|
ENDM
|
|
CALL IBYTE
|
|
TESTX ")"
|
|
CALL TESTX
|
|
DEFB ")"
|
|
ENDM
|
|
TESTX F4H ;=
|
|
CALL TESTX
|
|
DEFB F4H
|
|
ENDM
|
|
LD A,E
|
|
DEC A
|
|
CP 10
|
|
JP NC,ER03
|
|
PUSH HL
|
|
CALL KEYBCL
|
|
EX (SP),HL
|
|
CALL STREXP ;A,DE
|
|
EX (SP),HL
|
|
LD A,B
|
|
CP 16
|
|
JR C,+4
|
|
LD A,15
|
|
LD M,A
|
|
OR A
|
|
JR Z,ESCKPT
|
|
LD B,A
|
|
INC HL
|
|
LD A,(DE)
|
|
LD M,A
|
|
INC DE
|
|
INC HL
|
|
DJNZ -4
|
|
ESCKPT: POP HL
|
|
EI
|
|
RET
|
|
;
|
|
;
|
|
KEYBCL: ADD A,A
|
|
ADD A,A
|
|
|
|
ADD A,A
|
|
ADD A,A
|
|
LD HL,FUNBUF
|
|
JP ADDHLA
|
|
;
|
|
END
|