Compucolor.org – Virtual Media

Listing of file='B1.SRC;01' on disk='vmedia/source_3-sector.ccvf'


		BASIC INTERPRETER
		CCII  V8.79


LINBF		8046H		;LINE BUFFER
BUFP		8047H		;BASIC BUFFER
		80ABH		;DATA FLAG
		80ACH		;MAX RAM AVAIL
		80AEH		;STRING SPACE ADDR
		80CCH		;CURRENT LINE NO
		80D2H		;STACK
		80D2H		;$ SPACE ALLOCATION
		80D4H		;START OF BASIC ADDR
		80D6H		;END OF BASIC ADDR
				;START OF VARIABLES
		80D8H		;START OF ARRAYS ADDR
		80DAH		;END OF ARRAYS ADDR
TEMPHL		80DEH		;BUFFER POINTER
BRTRY		80E0H
RFLG		80E1H
CRTRY		80E2H
OBC		80E3H
FPB		80F7H
FATR		80F8H
FNAM		80F9H
FTYP		80FFH
FSBK		8103H
FSIZ		8105H
FLBC		8107H
FLAD		8108H
FSAD		810AH
FAUX		810FH
FHAN		8111H
FBLK		8115H
FBUF		8117H
FXBC		8119H
DBFE		819DH
XFFCN		819FH
XFBLK		81A1H
XFBUF		81A3H
XFXBC		81A5H
PUP		81B7H
THRUFL		81DEH		;
KBDFL		81DFH		;KYBD STATUS FLAG
		81F1H		;BASIC OUTPUT FLAG
		81E3H		;SERIAL INPUT FLAG
BASFL		81F1H
KBCHA		81FEH		;KYBD CHAR
READY		81FFH		;CHAR READY FLAG
		8200H		;INPUT FLAG PTR


		ORG	01F2CH


;		INTERPRETER START


1F2CH	START:	CALL	L356	;INIT BASIC
		LXI	H,2104H	;"READY" MSG
		CALL	DISPLAY	;PRINT IT
		JMP	ILKP	;INSERT LINK PTRS

1F38H		JMP	L3611	;ESC-I

1F3BH		JMP	L0641

1F3EH		CALL	INIT
		LXI	H,L027	;SET RETURN
		PUSH	H
		CALL	L067	;DO "AUTO"
		LHLD	8200H
		JMP	L064	;KYBD INPUT


1F4EH	L001:	LHLD	80C0H
		LDA	L3502	;(362BH)


		ORG	$-2


1F52H	L002:	DCX	H
		MVI	M,0
		MVI	A,0EBH


		ORG	$-1

;	CMPDH


1F56H	L003:	XCHG


;	CMPHD


1F57H	L004:	MOV	A,H
		SUB	D
		RNZ
		MOV	A,L
		SUB	E
		RET


1F5DH	L005:	XTHL
		SHLD	820BH
		POP	H
		MOV	C,M
		INX	H
		MOV	B,M
		INX	H
		PUSH	B
		JMP	820AH


;		MATH JUMP TABLE (?)


1F6AH		DW	32ADH		;SGN
		DW	3371H		;INT
		DW	32C3H		;ABS
		DW	3934H		;CALL
		DW	2CF2H		;FRE
		DW	8211H		;INP
		DW	2D20H		;POS
		DW	3547H		;SQR
		DW	361FH		;RND
		DW	31B2H		;LOG
		DW	358EH		;EXP
		DW	3653H		;COS
		DW	3659H		;SIN
		DW	36BAH		;TAN
		DW	36CFH		;ATN
		DW	307BH		;PEEK
		DW	2F85H		;LEN
		DW	2DA7H		;STR$
		DW	3060H		;VAL
		DW	2F94H		;ASC
		DW	2FA3H		;CHR$
		DW	2FB3H		;LEFT$
		DW	2FE3H		;RIGHT$
		DW	2FEDH		;MID$


;		SIGN JUMP TABLE (?)


1F9AH		DB	79H
		DW	3431H

		DB	79H
		DW	30B1H

		DB	7CH
		DW	31F0H

		DB	7CH
		DW	3232H

		DB	7FH
		DW	3550H

		DB	50H
		DW	2AE5H

		DB	46H
		DW	2AE4H

1FAFH		DB	-1


;	SUBTRACT 128 FROM NUMBER FOLLOWING TOKEN
;	TO OBTAIN ASCII VALUE OF ITS LAST CHAR.


1FB0H		DB	'EN',196	;END
		DB	'FO',210	;FOR
		DB	'NEX',212	;NEXT
		DB	'DAT',193	;DATA
		DB	'INPU',212	;INPUT
		DB	'DI',205	;DIM
		DB	'REA',196	;READ
		DB	'FIL',197	;FILE
		DB	'GOT',207	;GOTO
		DB	'RU',206	;RUN
		DB	'I',198		;IF
		DB	'RESTOR',197	;RESTORE
		DB	'GOSU',194	;GOSUB
		DB	'RETUR',206	;RETURN
		DB	'RE',205	;REM
		DB	'GE',212	;GET
		DB	'OU',212	;OUT
		DB	'PU',212	;PUT
		DB	'PLO',212	;PLOT
		DB	'SAV',197	;SAVE
		DB	'LOA',196	;LOAD

2000H	L006	EQU	$-1

		DB	'POK',197	;POKE
		DB	'PRIN',212	;PRINT
		DB	'LIS',212	;LIST
		DB	'CON',212	;CONT
		DB	'CLEA',210	;CLEAR
		DB	'DE',198	;DEF
		DB	'WAI',212	;WAIT
		DB	'O',206		;ON
		DB	'TAB',168	;TAB(
		DB	'T',207		;TO
		DB	'F',206		;FN
		DB	'SPC',168	;SPC(
		DB	'THE',206	;THEN
		DB	'NO',212	;NOT
		DB	'STE',171	;STEP


;		THIS USE 1F9AH JUMP TABLE ?
;		(EXCEPT FOR AND/OR TOKENS)


		DB	173		;-
		DB	170		;*
		DB	175		;/
		DB	222		;^
		DB	'AN',196	;AND
		DB	'O',210		;OR
		DB	190		;>
		DB	189		;=
		DB	188		;<


;		THIS USE 1F6AH JUMP TABLE ?


		DB	'SG',206	;SGN
		DB	'IN',212	;INT
		DB	'AB',211	;ABS
		DB	'CAL',204	;CALL
		DB	'FR',197	;FRE
		DB	'IN',207	;INP
		DB	'PO',211	;POS
		DB	'SQ',210	;SQR
		DB	'RN',196	;RND
		DB	'LO',199	;LOG
		DB	'EX',208	;EXP
		DB	'CO',211	;COS
		DB	'SI',206	;SIN
		DB	'TA',206	;TAN
		DB	'AT',206	;ATN
		DB	'PEE',203	;PEEK
		DB	'LE',206	;LEN
		DB	'STR',164	;STR$
		DB	'VA',204	;VAL
		DB	'AS',195	;ASC
		DB	'CHR',164	;CHR$
		DB	'LEFT',164	;LEFT$
		DB	'RIGHT',164	;RIGHT$
		DB	'MID',164	;MID$
2096H		DB	0,0


2098H		DW	2625H
		DW	253EH
		DW	2976H
		DW	2739H

20A0H		DW	2886H
		DW	2B8AH
		DW	28C3H
		DW	39ECH
		DW	2705H
		DW	26E8H
		DW	27C8H
		DW	25F4H

20B0H		DW	26F4H
		DW	2723H
		DW	273BH
		DW	3C20H
		DW	821CH
		DW	3BCAH
		DW	265AH
		DW	384CH

20C0H		DW	37EBH
		DW	3085H
		DW	27E9H
		DW	247FH
		DW	2647H
		DW	26BCH
		DW	2D28H
		DW	3018H

20D0H		DW	27AAH


;	ERROR TABLE


20D2H		DB	'N','F'+128	;NEXT W/O FOR
		DB	'S','N'+128	;SYNTAX
		DB	'R','G'+128	;RET W/O GOSUB
		DB	'O','D'+128	;OUT OF DATA
		DB	'C','F'+128	;CALL FUNCTION
		DB	'O','V'+128	;OVERFLOW
		DB	'O','M'+128	;OUT OF MEMORY

20E0H		DB	'U','S'+128	;UNDEFINED LINE
		DB	'B','S'+128	;BAD SUBSCRIPT
		DB	'D','D'+128	;DOUBLE DIM
		DB	'0','/'+128	;/0
		DB	'I','D'+128	;ILLEGAL DIRECT
		DB	'T','M'+128	;TYPE MISMATCH
		DB	'O','S'+128	;OUT OF STRING
		DB	'L','S'+128	;LONG STRING

20F0H		DB	'S','T'+128	;STRING TEMPORIES
		DB	'C','N'+128	;CAN NOT
		DB	'U','F'+128	;UNDEFINED FUNCTION
		DB	'S','L'+128	;SAVE/LOAD

20F8H		DB	' ERRO','R'+128,0

20FFH		DB	' IN',160
2103H		DB	0

2104H		DB	13,10,255,13
		DB	'READY',10,13,10
		DB	0

2111H		DB	13,255
2113H		DB	13,'BREA',203,0


211AH	L007:	LXI	H,4
		DAD	SP
211EH	L008:	MOV	A,M
		INX	H
		CPI	129
		RNZ
		MOV	C,M
		INX	H
		MOV	B,M
		INX	H
		PUSH	H
		MOV	L,C
		MOV	H,B
		MOV	A,D
		ORA	E
		XCHG
		JZ	L009
		CALL	L003	;CMPDH
2133H	L009:	LXI	B,13
		POP	H
		RZ
		DAD	B
		JMP	L008


;	CK MEMORY SIZE
;	MOVE MEMORY TO MAKE ROOM FOR BASIC LINE


213CH	L010:	CALL	L016	;CK FREE MEMORY
213FH	L011:	PUSH	B
		XTHL
		POP	B
2142H	L012:	CALL	L004	;CMPHD
		MOV	A,M
		STAX	B
		RZ
		DCX	B
		DCX	H
		JMP	L012


214DH	L013:	PUSH	H
		LHLD	80DAH	;END OF ARRAYS
		MVI	B,0
		DAD	B
		DAD	B
		CALL	L016	;CK FREE MEMORY


		ORG	$-1


2157H	L014:	MOV	E,D
2158H	L015:	POP	H
		RET


;	CK FREE MEMORY


215AH	L016:	PUSH	D
		XCHG
		LXI	H,-40
		DAD	SP
		CALL	L004	;CMPHD
		XCHG
		POP	D
		RNC
2166H	L017:	MVI	E,12
		JMP	L022	;OM ERROR


216BH	L018:	LHLD	80C4H
		SHLD	80CCH	;CURRENT LINE NO




;===========================================================
;	ERROR TRAPS


2171H	L019:	MVI	E,2	;SYNTAX ERROR
		LXI	B,141EH


;		(LXI	B)
;		(MVI	E,14H)


		ORG	$-2


2174H	L020:	MVI	E,14H	;DIV BY 0 ERROR
		LXI	B,001EH


;		(LXI	B)
;		(MVI	E,0)


		ORG	$-2


2177H	L021:	MVI	E,0	;NEXT W/O FOR ERROR


;	PROCESS ERROR CODE


2179H	L022:	CALL	INIT2	;CLR STACK
		CALL	L135	;CR/LF,0 TO 8208H, 0 TO A
		CMA		;NOW 255
		CALL	L073	;TO CRT
		MVI	A,13	;CR
		CALL	L136	;BASOUT, 0 TO 8208H, 0 TO A
		LXI	H,20D2H	;ERROR TABLE
218BH	L023:	MOV	D,A	;0 TO D
		DAD	D	;POINT TO CODE IN TABLE
		MOV	A,M	;1ST CHAR OF ERROR
		CALL	L073	;PRINT IT
		CALL	L096	;2ND CHAR OF ERROR
		CALL	L073	;PRINT IT
		LXI	H,20F8H	;"ERROR" MSG
219AH	L024:	CALL	DISPLAY	;PRINT IT
		LHLD	80CCH	;CURRENT LINE NO
		MOV	A,H	;IF LINE #
		ANA	L	; = -1
		INR	A	;DON'T PRINT
		CNZ	L328	;DO PRINT
		MVI	A,193


;		(MVI	A,)
;		(POP	B)


		ORG	$-1


21A7H		POP	B
21A8H	L025:	LXI	H,2104H	;"READY" MSG
		CALL	DISPLAY	;PRINT IT




;=============================================================
;	COMMAND (ENTERING BASIC LINE) GROUP


21AEH	L026:	LXI	H,-1	;INIT CUR LINE
		SHLD	80CCH	;TO -1
		CALL	L062	;ZERO LINE BUFFER.  WAIT FOR
				;KYBD ENTRY.  CR/LF,0 TO 8208H
				;0 TO A, 8046H IN HL
21B7H	L027:	INX	H	;BUF+1
		MOV	A,M	;1ST CHAR
		CPI	10
		JZ	L028	;IF LF
		DCX	H	;8046H NOW
21BFH	L028:	CALL	L096	;NEXT CHAR, SKIP SPACES, <C>
				;IF ASCII NUMBER, <Z> IF ":"
				;OR 0  (END STATEMENT OR LINE)
		INR	A	;SET <Z><NZ> BUT
		DCR	A	;NO EFFECT CARRY
		JZ	L026	;NULL LINE-DO AGAIN
		PUSH	PSW
		CALL	L112	;DECIMAL # TO BINARY
				;IN DE.  IF NO # DE=0
		PUSH	D	;SAVE LINE NO
		CALL	L041	;CONVERT BASIC LINE IN BUFFER
				;TO TOKEN FORM.  BASIC BUFFER
				;NOW HAS A 1 LINE BASIC PROGRAM
				;8046H TO HL, 0 TO A, LINE LEN
				;TO C.
		MOV	B,A	;0 TO B
		POP	D	;LINE #
		POP	PSW	;FLAGS
		JNC	L092	;<NC> INDICATES A BASIC LINE TO
				;BE PROCESSED.  <C> INDICATES A
				;LINE TO BE STORED IN MEMY
		PUSH	D	;SAVE LINE
		PUSH	B	;SAVE LINE LEN
		CALL	L096	;1ST CHAR-SKIP SPACES.
				;<C> IF ASCII #
				;<Z> IF ":" OR 0
		ORA	A	;NULL?
		PUSH	PSW	;FLAGS
		CALL	L035	;GET LINE WITH # IN DE.  IF NOT
				;GET NEXT LINE.  <C> IF LINE
				;EXISTS, <Z> IF EOF.
				;BC  START ADDR
				;DE  LINE #
				;HL  NEXT LINE ADDR
		PUSH	B	;LINE START ADDR
		JNC	L030	;NEW LINE # JUMP
				;NO OLD LINE TO KILL
		XCHG		;NEXT LINE ADDR TO DE
		LHLD	80D6H	;END OF BASIC
21E7H	L029:	LDAX	D	;DELETE OLD VERSION
		STAX	B	;OF LINE FROM MEMORY
		INX	B	;NEXT LINE START ADDR
		INX	D	;TO END OF BASIC IS SHIFTED TO
				;OLD LINE START ADDR (DELETE
				;OLD LINE)
		CALL	L004	;CMPHD DONE IF DE=HL
		JNZ	L029	;NOT DONE
		MOV	H,B	;SHIFT NEW
		MOV	L,C	; END OF BASIC
		SHLD	80D6H	;  AND SAVE
21F6H	L030:	POP	D	;START ADDR FOR LINE
		POP	PSW	;NULL LINE?
		JZ	ILKP	;YES-INSERT LINK
		LHLD	80D6H	;END OF BASIC
		XTHL		;NEW LINE LEN TO HL
				;END OF BASIC TO STACK
		POP	B	;THEN TO BC
		DAD	B	;NEW END OF BASIC
		PUSH	H	; AND SAVE
		CALL	L010	;CK MEMORY SIZE.  MOVE MEMY TO
				;MAKE FOR NEW LINE
		POP	H	;NEW END OF BASIC
		SHLD	80D6H	; SAVED
		XCHG		;LINE START ADDR TO HL
		MOV	M,H	;INSERT # SO LINK <>0
		INX	H	;SKIP BASIC
		INX	H	; LINE NUMBER
		POP	D	;RESTORE LINE #
		MOV	M,E	;INSERT
		INX	H	; LINE
		MOV	M,D	;  NUMBER
		INX	H
		LXI	D,BUFP	;MOVE
2215H	L031:	LDAX	D	; BASIC
		MOV	M,A	;  LINE
		INX	H	;   TO
		INX	D	;    MEMORY
		ORA	A	;EOL?
		JNZ	L031	;NO


;	INSERT LINK PTRS


221DH	ILKP:	CALL	INIT	;INIT BASIC LINE PTRS.  ZERO
				;VARIABLES/ARRAYS.  INIT STACK
				;POINTER.  8299H TO HL
		INX	H	;START OF BASIC
		XCHG		; TO DE
2222H	ILKP1:	MOV	H,D	;START ADDR OF CURRENT
		MOV	L,E	;LINE TO HL
		MOV	A,M
		INX	H	;IF FWD PTR =0
		ORA	M	;THEN THIS IS END
		JZ	L026	;OF BASIC
		INX	H	;SKIP
		INX	H	; LINE
		INX	H	;  NUMBER
		XRA	A
222EH	ILKP2:	CMP	M	;FIND BEGIN
		INX	H	; OF NEXT
		JNZ	ILKP2	;  BASIC LINE
		XCHG		;PUT START ADDR
		MOV	M,E	;OF THIS LINE
		INX	H	;IN LINK PTR
		MOV	M,D	;OF PREV LINE
		JMP	ILKP1	;AND LOOP


;	GET LINE WITH # IN DE.
;	<C> IF LINE EXISTS
;	<Z> IF EOF
;	BC  START ADDR
;	DE  LINE #
;	HL  NEXT LINE ADDR


223AH	L035:	LHLD	80D4H	;START OF BASIC
223DH	L036:	MOV	B,H	;INTO BC
		MOV	C,L
		MOV	A,M	;CK FOR
		INX	H	; END OF
		ORA	M	;  BASIC
		DCX	H	;START OF LINE
		RZ		;IF EOF
		INX	H	;SKIP OVER
		INX	H	;LINK PTR
		MOV	A,M	;GET THE
		INX	H	; LINE
		MOV	H,M	;  NUMBER
		MOV	L,A
		CALL	L004	;LINE REQUIRED?
		MOV	H,B	;START ADDR OF
		MOV	L,C	; LINE TO HL
		MOV	A,M	;GET START ADDR
		INX	H	; OF NEXT LINE
		MOV	H,M	; & SAVE TO HL
		MOV	L,A
		CMC
		RZ		;IF LINE WANTED <Z><C> IS SET
		CMC		;TO <NC>
		RNC		;IF NO ACTUAL LINE #
		JMP	L036	;TRY AGAIN


;	INIT BASIC LINE PTRS
;	ZERO VARIABLES/ARRAYS
;	INIT STACK POINTER
;	8299H TO HL


225AH	INIT:	LHLD	80D4H	;START OF BASIC
		DCX	H	;-1
225EH	INIT1:	SHLD	80C8H	;SAVE
		LHLD	80ACH	;MAX RAM
		SHLD	80C0H	;SAVE
		CALL	L098
		LHLD	80D6H	;ZERO
		SHLD	80D8H	; VARIABLES
		SHLD	80DAH	;  & ARRAYS
2273H	INIT2:	POP	B	;SAVE RET ADDR
		LHLD	80D2H	;START OF STRING AREA
		SPHL		;INIT BASIC STACK
		LXI	H,80B0H	;BUFFER
		SHLD	80AEH	;BUFFER PTR
		XRA	A
		MOV	H,A	;ZERO TO
		MOV	L,A	; HL
		SHLD	80D0H	;=0
		STA	80C6H	;=0
		PUSH	H	;RST 0 TO STACK
		PUSH	B	;REPLACE RET ADDR
2289H	INIT3:	LHLD	80C8H	;BASIC START-1 TO HL
		RET


;	CONVERT BASIC LINE IN BUFFER TO TOKEN FORM.
;	BASIC BUFFER NOW HAS A 1 LINE BASIC PROGRAM
;	8046H TO HL, 0 TO A, LINE LEN TO C.


228DH	L041:	XRA	A
		STA	80ABH	;ZERO DATA FLAG
		MVI	C,5	;C = LEN OF BASIC TOKEN LINE.
				;STARTS AT 5 AS BASIC LINK,
				;LINE #, EOL = 5 BYTES
		LXI	D,BUFP	;BUFFER START ADDR FOR TOKEN
				;LINE.  SAME BUF AS USED BY
				;COMMAND LINE (ADDR IN HL).
				;COMMAND LINE IS OVER WRITTEN
				;BY TOKEN LINE
2296H	L042:	MOV	A,M	;1ST CHAR IN CMD LINE
		CPI	' '	;SPACE?
		INX	H	;BUF+1
		JZ	L042	;YES-SKIP
		DCX	H	;KEEP HL STRAIGHT
		MOV	B,A	;CHAR TO B
		CPI	'"'	;QUOTES?
		JZ	L052	;YES
		ORA	A	;EOL?
		JZ	L055	;YES
		LDA	80ABH	;DATA FLAG
		ORA	A	;SET FLAGS
		MOV	B,A
		MOV	A,M	;GET CHAR AGAIN
		JNZ	L048	;DATA FLAG<>0
		CPI	'?'	;? FOR PRINT?
		MVI	A,150	;SET PRINT TOKEN
		JZ	L048	;YES
		MOV	A,M	;CHAR AGAIN
		CPI	'0'
		JC	L043	;<>DIGIT
		CPI	'<'
		JC	L048	;< '<'
22C3H	L043:	PUSH	D	;SAVE TOKEN BUF ADDR
		LXI	D,1FB0H-1	;CMD TOKEN TABLE
		PUSH	H	;SAVE
		JMP	L045	;SHORT SKIP


22CBH	L044:	CALL	L096	;NEXT CHAR-SKIP SPACES
22CEH	L045:	INX	D	;NEXT TOKEN TABLE CHAR
22CFH	L046:	LDAX	D	;GET IT
		ANI	127	;STRIP A7 BIT
		JZ	L047	;IF 0 JUMP.  END OF TOKEN TABLE
		CMP	M	;TOKEN CHAR?
		JNZ	L053	;NO-NEXT ONE
		LDAX	D	;GET CHAR AGAIN
		ORA	A	;SET FLAGS
		JP	L044	;<128, DO MORE
		POP	PSW	;GET RID OF "PUSH H" IN L043
		MOV	A,B	;POSITION OF COMMAND IN TABLE
		ORI	128	;PLUS A7 ON GIVES TOKEN VALUE
		JP	7EE1H	;NOT REALLY!! <M> SET!


;		(JP)
;		(POP	H)
;		(MOV	A,M)


		ORG	$-2


22E3H	L047:	POP	H	;CMD LINE ADDR
		MOV	A,M	;GET CHAR
		POP	D	;TOKEN LINE ADDR
22E6H	L048:	INX	H	;NEXT CMD LINE CHAR
		STAX	D	;SAVE CHAR IN TOKEN LINE
		INX	D	;TOKEN BUF+1
		INR	C	;INCR TOKEN LINE LEN
		SUI	'9'+1	;IS IT A ":"?
		JZ	L049	;YES!
		CPI	'I'	;DATA? (131-58=73)
		JNZ	L050	;NO
22F4H	L049:	STA	80ABH	;SET DATA FLAG (0 OR 73)
22F7H	L050:	SUI	'T'	;REM?  (142-58=84)
		JNZ	L042	;NO-NEXT CMD
		MOV	B,A	;0 TO B
22FDH	L051:	MOV	A,M	;NEXT CHAR FROM CMD LINE
		ORA	A	;SET FLAGS
		JZ	L055	;IF EOL
		CMP	B	;QUOTES=34, REM=0
		JZ	L048	;YES
2306H	L052:	INX	H	;CMD LINE +1
		STAX	D	;STORE TOKEN CHAR
		INR	C	;INCR TOKEN LEN
		INX	D	;TOKEN BUF +1
		JMP	L051	;DO MORE


230DH	L053:	POP	H	;ADDR OF START OF CMD LINE
		PUSH	H
		INR	B	;KEEP TRACK OF CMD
		XCHG		;CMD TABLE TO HL
2311H	L054:	ORA	M	;SET FLAGS
		INX	H	;CMD TABLE +1
		JP	L054	;IF LAST CHAR IN CMD TABLE,
				;A7 IS ON.  LOOP UNTIL DONE
		XCHG		;CMD LINE TO HL
		JMP	L046	;NEXT CMD


231AH	L055:	LXI	H,LINBF	;LINE BUFFER
		STAX	D	;A=0, DE=TOKEN LINE ADDR
		INX	D	;INSERTS 3 ZEROS AT END OF
		STAX	D	;TOKEN LINE, ONE FOR EOL,
		INX	D	;TWO FOR EOF
		STAX	D
		RET




;=========================================================
;	KEYBOARD INTERRUPT GROUP


;	DELETE/RESTORE CHARS


2323H	L056:	MVI	A,25	;SET ->
		CALL	8205H	;ECHO IT
2328H	L057:	MVI	A,7	;DO BELL TOO
		CALL	8205H	;ECHO
		MVI	A,26	;SET <-
		CALL	8205H	;ECHO
2332H	L058:	MOV	A,M	;CURRENT CHAR
		CPI	' '	;COMMAND <25?
		MVI	A,25	;SET <-
		JC	L059	;YES
		MVI	A,' '	;A SPACE
		CALL	8205H	;ECHO
		MVI	A,26	;SET <-
2341H	L059:	CALL	8205H	;ECHO
		MOV	A,L	;LO BYTE OF BUF ADDR
		DCX	H	;BUF-1
		SHLD	TEMPHL	;SAVE IT
		CPI	46H	;CK LO BYTE OF BUFFER ADDR
				;FOR START OF BUFFER
		RNZ		;IF NOT
		CALL	L135	;CR/LF, 0 TO 8208H
234FH	L060:	LXI	H,LINBF	;LINE BUFFER
2352H	L061:	SHLD	TEMPHL	;BASIC BUF CHR PNTR
		RET


;	ZERO LINE BUFFER
;	WAIT FOR KYBD ENTRY
;	CR/LF,0 TO 8208H
;	0 TO A, 8046H IN HL



2356H	L062:	LXI	H,LINBF	;LINE BUFFER
		MVI	A,99	;ZERO
235BH	L063:	MVI	M,0	;BASIC
		INX	H	;INPUT
		DCR	A	;BUFFER
		JNZ	L063
		CALL	L060	;8046H TO 80DEH
		LHLD	8200H	;KBDFL TO HL
		MVI	M,23	;KYBD INPUT TO BASEX
		STA	THRUFL	;23 TO THRUFL


;	INPUT LOOP


236DH	L064:	EI		;ENABLE
		LDA	THRUFL	;WAIT FOR
		CPI	13	;ENTRY
		JNZ	L064	;NOT YET
		MVI	M,12	;12 TO 81DFH - ALL KYBD
				;ENTRIES IGNORED
		EI		;ENABLE AGAIN
		XRA	A
		STA	READY	;CLR READY FLAG
		JMP	L134	;8046H TO HL, CR/LF, 0 TO
				;8208H, RETURN


;	BASEX
;	KEYBOARD INTERRUPT ROUTINE


2380H	L0641:	LDA	THRUFL	;USED TO FLAG THAT 1ST KEY
				;OF AN ESC CODE HAS BEEN
				;SEEN.  NEXT CHAR IS CODE.
		CPI	27	;ESCAPE?
		JZ	L071	;YES
		MOV	A,E	;KYBD CHAR TO A
		DCR	A	;IS IT AUTO?
		JZ	L067	;YES
		XRA	A	;SET 0
		MOV	M,A	; INTO KBDFL
		MOV	A,E	;GET CHAR
		CPI	3	;PLOT?
		RZ		;YES!
		MVI	M,23	;23 TO KBDFL
		RC		;IF <3
		LHLD	TEMPHL	;BUFFER POINTER
		CPI	27	;ESCAPE?
		JZ	L070	;YES
		ANA	A	;SET FLAGS
		JP	L066	;IF <128
		CPI	214	;>214?
		JNC	L066	;YES!
		JMP	L086	;GET COMMAND FROM TOKEN
				;COMMAND ADDR IN DE.  NOTE
				;214 IS AN ERROR...CCII
				;TOKENS ARE 128 TO 197. A
				;198 TO 213 WILL GET GARBAGE.


23AAH	L065:	INX	H	;NEXT BUF BYTE
		MVI	M,' '	;SET A SPACE
		MOV	A,L	;END OF BUFFER IS 80A8H
		CPI	0A8H	;END?
		JZ	L056	;YES..DO ->,BELL,<-
		LDAX	D	;GET CMD CHAR
		INX	D	;CMD BUF+1
		ORA	A	;A7 ON? (LAST CMD CHAR)
		PUSH	PSW	;SAVE FLAGS
		ANI	127	;STRIP A7 BIT
		MOV	M,A	;CHAR TO BUFFER
		CALL	8205H	;ECHO
		POP	PSW	;FLAGS
		JP	L065	;NOT LAST CHAR
		MVI	A,' '	;SPACE AFTER TOKEN
23C3H	L066:	INX	H	;BUF+1
		CPI	25	;A ->?
		CZ	L244	;RESTORE NEXT BUF BYTE
		RZ		;IF NEXT BYTE=0
		DCX	H	;BACK TO ORIG
		CALL	8205H	;ECHO
		CPI	11	;EL?
		JZ	L060	;YES - 8046H TO 80DEH
		CPI	26	;A <-?
		JZ	L058	;YES
		CPI	12	;EP?
		RZ		;YES
		CPI	13	;CR?
		INX	H	;BUF+1
		JZ	L069	;YES
		MOV	M,A	;NO-SAVE CHAR
		MOV	A,L	;LO BYTE BUF ADDR
		CPI	0A8H	;END?
		JZ	L057	;DO BELL,<-
		JMP	L061	;NO-QUIT


;	"AUTO" - LOAD & RUN MENU PROGRAM


23EBH	L067:	LXI	H,LINBF	;LINE BUFFER
		LXI	D,2404H	;FCS "MENU" MSG
		MVI	B,9	;LENGTH
23F3H	L068:	INX	H	;MOVE FCS
		LDAX	D	; CMD MSG
		MOV	M,A	; TO BASIC
		INX	D	; LINE BUFFER
23F7H		DCR	B
		JNZ	L068
		INX	H
		MVI	A,13	;13 TO 81DEH
23FEH	L069:	STA	THRUFL
		MVI	M,0	;END OF FCS CMD LINE
		RET


				;148=TOKEN FOR LOAD
				;137=TOKEN FOR RUN

2404H		DB	148,'"MENU":',137


;	SETS BASEX FOR 2ND BYTE OF ESCAPE CODE


240DH	L070:	MOV	A,L	;BUFFER LO BYTE
		INX	H	;BUF+1
		MVI	M,' '	;A SPACE
		CPI	0A6H	;AT 80A6H? - 2 BYTES
				;BEFORE END TO ENSURE
				;ROOM FOR SECOND CHAR
		JNC	L056	;NOT ENOUGH ROOM!
				;DO ->,BELL,<-
		MOV	A,E	;GET CHAR (27)
		STA	THRUFL	; TO 81DEH
		RET


;	HANDLE ESCAPE CODES


241BH	L071:	XRA	A
		STA	THRUFL	;0 TO 81DEH
		MOV	A,E	;2ND CHAR
		ANI	31	;ALLOW ONLY #S
		LHLD	TEMPHL	;BUFFER ADDR
		INX	H	;+1
		CPI	4	;ESC-D?
		JZ	L072	;YES
		CPI	5	;ESC-E?
		JZ	L072	;YES
		CPI	23	;ESC-W?
		JZ	L072	;YES
		CPI	31	;ESC-CRT?
		JZ	L072	;YES
		MVI	A,27	;MUST BE ESC-ESC
		CALL	8205H	;SO ECHO IT
		MOV	M,A	;AND SAVE
		INX	H	;BUF+1
		MOV	A,E	;GET CHAR AGAIN
		CALL	8205H	;ECHO AGAIN
		MOV	M,A	;AND SAVE IT
		SHLD	TEMPHL	;AND BUFFER
		RET


;	PROCESS ESC-D, ESC-E, ESC-W, ESC-CRT


244AH	L072:	LHLD	0036H	;8042H TO HL (FCS STACK)
		SPHL		;RESET STACK POINTER
		LXI	H,0038H	;SET BEGEX
		PUSH	H
		LHLD	000BH	;008DH TO HL
				;START ADDR OF ESC TABLE
		MVI	D,0	;0 TO D
		MOV	E,A	;ESC CODE IN E
		DAD	D	;GET ESC
		DAD	D	; ROUTINE ADDR
		MOV	A,M	;ADDR LO
		INX	H
		MOV	H,M	;ADDR HI
		MOV	L,A
		PUSH	H	;ONTO STACK
		LHLD	8200H	;81DFH TO HL
		MVI	M,0	;0 TO KBDFL...KYBD TO VISUAL
		RET		;CURSOR DISPLAY, JMP TO ROUTINE




;
;==============================================================

;	BYTE TO CRT


2465H	L073:	CPI	' '
		JC	8205H	;ECHO
		PUSH	PSW
		LDA	8208H
		PUSH	H
		LXI	H,8209H
		CMP	M
		CNC	L135	;CR/LF, 0 TO 8208H, 0 TO A
		POP	H
		INR	A
		STA	8208H
		POP	PSW
		JMP	8205H	;ECHO


247FH		CALL	L112	;TO BINARY
		RNZ
		PUSH	H
		CALL	L035	;GET LINE IN DE
		PUSH	B
2488H	L074:	POP	H
		CALL	L005
		POP	B
		XRA	A
		STA	THRUFL
		MOV	A,B
		ORA	C
		JZ	L015
		PUSH	B
		CALL	L100	;KYBD CHECK
		CALL	L135	;CR/LF, 0 TO 8208H, 0 TO A
		CALL	L005
		XTHL
		CALL	L329	;PRINT BYTES FREE
		POP	H
		JMP	L076


24A8H	L075:	LDA	THRUFL
		ORA	A
		MVI	A,'9'+1
		JNZ	L080
		MVI	A,' '
		CALL	L073	;TO CRT
		MVI	A,'9'+1
		CALL	L073	;TO CRT
		INX	H
24BCH	L076:	MOV	A,M
		ORA	A
		JM	L078
		MVI	A,' '
24C3H	L077:	CALL	L073	;TO CRT
24C6H	L078:	MOV	A,M
		CPI	'"'
		JNZ	L079
		PUSH	PSW
		LDA	THRUFL
		XRI	1
		STA	THRUFL
		POP	PSW
24D6H	L079:	CPI	'9'+1
		JZ	L075
24DBH	L080:	ORA	A
		INX	H
		JZ	L074
		JP	L077
		MVI	B,0
		CALL	L084
		JC	L081
		PUSH	PSW
		MVI	A,' '
		MOV	B,A
		CALL	L073
		POP	PSW
24F3H	L081:	CALL	L086	;SEARCH TOKENS
24F6H	L082:	LDAX	D
		INX	D
		ORA	A
		PUSH	PSW
		ANI	127
		CALL	L073	;TO CRT
		POP	PSW
		JP	L082
		MOV	A,M
		ORA	A
		JP	L083
		CALL	L084
		JNC	L078
250EH	L083:	MOV	A,B
		JMP	L077


2512H	L084:	CPI	164	;"-" TOKEN
		JNC	L085
		CPI	157	;"TAB(" TOKEN
		STC
		RZ
		CPI	159	;"FN" TOKEN
		STC
		RZ
		CPI	160	;"SPC(" TOKEN
		STC
		RZ
		CMC
		RET


2525H	L085:	CPI	169	;"OR" TOKEN
		RZ
		CPI	170	;">" TOKEN
		RZ
		STC
		RET


;	SEARCH TOKENS


252DH	L086:	SUI	127
		MOV	C,A
		LXI	D,1FB0H-1;TOKEN TABLE
2533H	L087:	LDAX	D
		INX	D
		ORA	A
		JP	L087
		DCR	C
		JNZ	L087
		RET


253EH		MVI	A,100
		STA	80C6H
		CALL	L123
		XTHL
		CALL	L007
		POP	D
		JNZ	L088
		SPHL
2550H	L088:	XCHG
		MVI	C,8
		CALL	L013
		PUSH	H
		CALL	L119
		XTHL
		PUSH	H
		LHLD	80CCH	;CURRENT LINE NO
		XTHL
		CALL	L095
		SBB	M
		CALL	L160
		CALL	L159
		PUSH	H
		CALL	L300
		POP	H
		PUSH	B
		PUSH	D
		LXI	B,8100H
		MOV	D,C
		MOV	E,D
		MOV	A,M
		CPI	163
		MVI	A,1
		JNZ	L089
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		CALL	L159
		PUSH	H
		CALL	L300
		CALL	L292
		POP	H
258CH	L089:	PUSH	B
		PUSH	D
		PUSH	PSW
		INX	SP
		PUSH	H
		LHLD	80C8H
		XTHL
2595H	L090:	MVI	B,129
		PUSH	B
		INX	SP
2599H	L091:	CALL	L100	;KYBD CHECK
		SHLD	80C8H
		MOV	A,M
		CPI	'9'+1
		JZ	L092
		ORA	A
		JNZ	L019	;SYNTAX ERROR
		INX	H
		MOV	A,M
		INX	H
		ORA	M
		INX	H
		JZ	L102
		MOV	E,M
		INX	H
		MOV	D,M
		XCHG
		SHLD	80CCH	;CURRENT LINE NO
		XCHG
25B9H	L092:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		LXI	D,L091
		PUSH	D
25C0H	L093:	RZ
25C1H	L094:	SUI	128
		JC	L123
		CPI	29
		JNC	L019	;SYNTAX ERROR
		RLC
		MOV	C,A
		MVI	B,0
		XCHG
		LXI	H,2098H
		DAD	B
		MOV	C,M
		INX	H
		MOV	B,M
		PUSH	B
		XCHG
		JMP	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0


25DCH	L095:	MOV	A,M
		XTHL
		CMP	M
		INX	H
		XTHL
		JNZ	L019	;SYNTAX ERROR


;	NEXT CHAR-SKIP SPACE
;	<C> IF ASCII #
;	<Z> IF : OR 0


25E4H	L096:	INX	H
25E5H	L097:	MOV	A,M
		CPI	'9'+1
		RNC
		CPI	' '
		JZ	L096
		CPI	'0'
		CMC
		INR	A
		DCR	A
		RET


25F4H		CALL	L112	;TO BINARY
		MOV	A,D
		ORA	E
		JZ	L098
		PUSH	H
		CALL	L118
		POP	D
		JMP	L099


2604H	L098:	XCHG		;SAVE HL
		LHLD	80D4H	;START OF BASIC
		DCX	H	;-1
2609H	L099:	SHLD	80DCH	;SAVE
		XCHG		;GET HL
		RET


;		KEYBOARD CHECK


260EH	L100:	EI
		LDA	READY
		ANA	A
		RZ
		JP	L100
		XRA	A
		STA	READY
		LDA	KBCHA
		CALL	BASOUT
		CPI	10
		RNZ


;		SET FOR "BREAK"


		ORI	0C0H


		ORG	$-1


2625H		RNZ
		SHLD	80C8H
2629H	L101:	POP	B
262AH	L102:	PUSH	PSW
		LHLD	80CCH	;CURRENT LINE NO
		MOV	A,L
		ANA	H
		INR	A
		JZ	L103
		SHLD	80CEH
		LHLD	80C8H
		SHLD	80D0H
263DH	L103:	POP	PSW
		LXI	H,2111H	;"BREAK" MSG
		JNZ	L024	;PRINT IT
		JMP	L025	;READY INPUT


2647H		MVI	E,32
		LHLD	80D0H
		MOV	A,H
		ORA	L
		JZ	L022	;CN ERROR
		XCHG
		LHLD	80CEH
		SHLD	80CCH	;CURRENT LINE NO
		XCHG
		RET


265AH	L104:	CALL	L252
		CALL	8205H	;ECHO
		CALL	L097
		RZ
		CALL	L095
		INR	L
		JMP	L104


;		CHECK IF LETTER
;		< C>	BAD
;		<NC>	LETTER


266BH	L105:	MOV	A,M
		CPI	'A'
		RC
		CPI	'Z'+1
		CMC
		RET


2673H	L106:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
2676H	L107:	CALL	L159
2679H	L108:	CALL	L292
		JM	L111
267FH	L109:	LDA	RFLG
		CPI	144
2684H	L110:	JC	L309
		LXI	B,9080H
		LXI	D,0
		CALL	L307
		MOV	D,C
		RZ
2692H	L111:	MVI	E,8
		JMP	L022	;CF ERROR


;	ASCII DECIMAL # TO BINARY


2697H	L112:	DCX	H
2698H	L113:	LXI	D,0
269BH	L114:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		RNC
		PUSH	H
		PUSH	PSW
		LXI	H,MULHD
		CALL	L004	;CMPHD
		JC	L019	;SYNTAX ERROR
		MOV	H,D
		MOV	L,E
		DAD	D
		DAD	H
		DAD	D
		DAD	H
		POP	PSW
		SUI	'0'
		MOV	E,A
		MVI	D,0
		DAD	D
		XCHG
		POP	H
		JMP	L114


26BCH		JZ	INIT1
		CALL	L107
		CALL	L097
		RNZ
		PUSH	H
		LHLD	80ACH
		MOV	A,L
		SUB	E
		MOV	E,A
		MOV	A,H
		SBB	D
		MOV	D,A
		JC	L019	;SYNTAX ERROR
		LHLD	80D6H	;END OF BASIC
		LXI	B,40
		DAD	B
		CALL	L004	;CMPHD
		JNC	L017
		XCHG
		SHLD	80D2H	;STRING SPACE ALLOC
		POP	H
		JMP	INIT1


26E8H		JZ	INIT
		CALL	INIT1
		LXI	B,L091
		JMP	L115


26F4H		MVI	C,3
		CALL	L013
		POP	B
		PUSH	H
		PUSH	H
		LHLD	80CCH	;CURRENT LINE NO
		XTHL
		MVI	D,140
		PUSH	D
		INX	SP
2704H	L115:	PUSH	B
2705H	L116:	CALL	L112	;TO BINARY
2708H	L117:	CALL	L120
270BH	L118:	PUSH	H
		LHLD	80CCH	;CURRENT LINE NO
		CALL	L004	;CMPHD
		POP	H
		INX	H
		CC	L036
		CNC	L035	;GET LINE IN DE
		MOV	H,B
		MOV	L,C
		DCX	H
		RC
		MVI	E,14
		JMP	L022	;US ERROR


2723H		RNZ
		MVI	D,-1
		CALL	L007
		SPHL
		CPI	140
		MVI	E,4
		JNZ	L022	;RG ERROR
		POP	H
		SHLD	80CCH	;CURRENT LINE NO
		LXI	H,L091
		XTHL
2739H	L119:	LXI	B,0E3AH
		NOP


		ORG	$-2


273BH	L120:	MVI	C,0
		MVI	B,0
273FH	L121:	MOV	A,C
		MOV	C,B
		MOV	B,A
2742H	L122:	MOV	A,M
		ORA	A
		RZ
		CMP	B
		RZ
		INX	H
		CPI	'"'
		JZ	L121
		JMP	L122


2750H	L123:	CALL	L180
		CALL	L095
		XRA	H
		PUSH	D
		LDA	80AAH
		PUSH	PSW
		CALL	L163
		POP	PSW
		XTHL
		SHLD	80C8H
		RAR
		CALL	L162
		JZ	L127
276BH	L124:	PUSH	H
		LHLD	TEMPHL
		PUSH	H
		INX	H
		INX	H
		MOV	E,M
		INX	H
		MOV	D,M
		LXI	H,8208H
		CALL	L004	;CMPHD
		JNC	L125
		LHLD	80D2H	;STRING SPACE ALLOC
		CALL	L004	;CMPHD
		POP	D
		JNC	L126
		LHLD	80D6H	;END OF VARIABLES
		CALL	L004	;CMPHD
		JNC	L126
		MVI	A,209


		ORG	$-1


2792H	L125:	POP	D
		CALL	L242
		XCHG
		CALL	L210
279AH	L126:	CALL	L242
		POP	H
		CALL	L304
		POP	H
		RET


27A3H	L127:	PUSH	H
		CALL	L303
		POP	D
		POP	H
		RET


27AAH		CALL	L252
		MOV	A,M
		MOV	B,A
		CPI	188
		JZ	L128
		CALL	L095
		ADC	B
		DCX	H
27B9H	L128:	MOV	C,E
27BAH	L129:	DCR	C
		MOV	A,B
		JZ	L094
		CALL	L113
		CPI	','
		RNZ
		JMP	L129


27C8H		CALL	L163
		MOV	A,M
		CPI	136
		JZ	L130
		CALL	L095
		ORA	C
		DCX	H
27D6H	L130:	CALL	L292
		JZ	L120
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JC	L116
		JMP	L093


27E5H	L131:	DCX	H
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JZ	L135	;CR/LF, 0 TO 8208H, 0 TO A
27ECH	L132:	RZ
		CPI	157
		JZ	L140
		CPI	160
		JZ	L139
		PUSH	H
		CPI	','
		JZ	L138
		CPI	';'
		JZ	L143
		POP	B
		CALL	L163
		PUSH	H
		LDA	80AAH
		ORA	A
		JNZ	L133
		CALL	L330
		CALL	L214
		LHLD	TEMPHL
		LDA	8208H
		ADD	M
		PUSH	H
		LXI	H,8209H
		CMP	M
		POP	H
		CNC	L135	;CR/LF, 0 TO 8208H, 0 TO A
2824H	L133:	CALL	DISP1
		POP	H
		JMP	L131


282BH	L134:	LXI	H,LINBF


;	CR/LF, 0 TO 8208H, 0 TO A


282EH	L135:	MVI	A,13
		CALL	L073	;TO CRT
		MVI	A,10
2835H	L136:	CALL	L073	;TO CRT
2838H	L137:	XRA	A
		STA	8208H
		RET


283DH	L138:	MVI	A,9
		CALL	L073	;TO CRT
		LDA	8208H
		ORI	7
		INR	A
		STA	8208H
		JMP	L143


284EH	L139:	STC
284FH	L140:	PUSH	PSW
		CALL	L251
		CALL	L095
		DAD	H
		DCX	H
		POP	PSW
		CPI	160
		PUSH	H
		MVI	A,-1
		JZ	L141
		LDA	8208H
		CMA
2865H	L141:	ADD	E
		JNC	L143
		INR	A
		MOV	B,A
286BH	L142:	MVI	A,' '
		CALL	L073	;TO CRT
		DCR	B
		JNZ	L142
2874H	L143:	POP	H
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JMP	L132


287BH	L144:	LDA	80C7H
		ORA	A
		JNZ	L018
		POP	B
		JMP	INIT3


2886H		CPI	'"'
		JNZ	L145
		CALL	L215
		CALL	L095
		DCX	SP
		PUSH	H
		CALL	DISP1
		POP	H
		JMP	L146


289AH	L145:	MVI	A,'?'
		CALL	L073	;TO CRT
289FH	L146:	PUSH	H
		CALL	L208
		CALL	L062	;ZERO LINE BUFFER.  WAIT FOR
				;KYBD ENTRY.  CR/LF,0 TO 8208H
				;0 TO A, 8046H IN HL

		MVI	A,','
		STA	LINBF
		INX	H
		MOV	A,M
		CPI	10
		DCX	H
		POP	B
		JZ	L101
		PUSH	B
		ORA	A
		JNZ	L147
		INX	H
		MVI	M,' '
		INX	H
		MOV	M,A
		DCX	H
		DCX	H
		JMP	L147


28C3H		PUSH	H
		LHLD	80DCH
		ORI	0AFH


		ORG	$-1


28C8H	L147:	XRA	A
		STA	80C7H
		XTHL
		JMP	L149


28D0H	L148:	CALL	L095
		INR	L
28D4H	L149:	CALL	L180
		XTHL
		PUSH	D
		MOV	A,M
		CPI	','
		JZ	L150
		LDA	80C7H
		ORA	A
		JNZ	L155
		MVI	A,'?'
		CALL	L073	;TO CRT
		CALL	L062	;ZERO LINE BUFFER.  WAIT FOR
				;KYBD ENTRY.  CR/LF,0 TO 8208H
				;0 TO A, 8046H IN HL

28EEH	L150:	LDA	80AAH
		ORA	A
		JZ	L153
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		MOV	D,A
		MOV	B,A
		CPI	'"'
		JZ	L152
		MVI	D,':'
		MVI	B,','
		LDA	80C7H
		ORA	A
		JNZ	L151
		MOV	D,A
		SHLD	80C2H
		POP	H
		XTHL
		CALL	L097
		XTHL
		PUSH	H
		LHLD	80C2H
		JNZ	L151
		MOV	B,D
291CH	L151:	DCX	H
291DH	L152:	CALL	L216
		XCHG
		LXI	H,2934H
		XTHL
		PUSH	D
		JMP	L124


2929H	L153:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		CALL	L315
		XTHL
		CALL	L303
2934H		POP	H
		CALL	L097
		JZ	L154
		CPI	','
		JNZ	L144
293FH	L154:	XTHL
		CALL	L097
		JNZ	L148
		POP	D
		LDA	80C7H
		ORA	A
		XCHG
		JNZ	L099
		ORA	M
		XCHG
		RET


2952H	L155:	CALL	L119
		ORA	A
		JNZ	L156
		INX	H
		MOV	A,M
		INX	H
		ORA	M
		MVI	E,6
		JZ	L022	;OD ERROR
		INX	H
		MOV	E,M
		INX	H
		MOV	D,M
		XCHG
		SHLD	80C4H
		XCHG
296BH	L156:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		CPI	131
		JNZ	L155
		JMP	L150


2976H		LXI	D,0
2979H	L157:	CNZ	L180
		SHLD	80C8H
		CALL	L007
		JNZ	L021	;NF ERROR
		SPHL
		PUSH	D
		MOV	A,M
		INX	H
		PUSH	PSW
		PUSH	D
		CALL	L298
		XTHL
		PUSH	H
		CALL	L256
		POP	H
		CALL	L303
		POP	H
		CALL	L301
		PUSH	H
		CALL	L307
		POP	H
		POP	B
		SUB	B
		CALL	L301
		JZ	L158
		XCHG
		SHLD	80CCH	;CURRENT LINE NO
		MOV	L,C
		MOV	H,B
		JMP	L090


29B1H	L158:	SPHL
		LHLD	80C8H
		MOV	A,M
		CPI	','
		JNZ	L091
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		CALL	L157
29C1H	L159:	CALL	L163
29C4H	L160:	ORI	'7'


		ORG	$-1


29C5H	L161:	STC
29C6H	L162:	LDA	80AAH
		ADC	A
		RPE
29CBH		MVI	E,24
		JMP	L022	;TM ERROR


29D0H	L163:	DCX	H
		MVI	D,0
29D3H	L164:	PUSH	D
		MVI	C,1
		CALL	L013
		CALL	L169
		SHLD	80CAH
29DFH	L165:	LHLD	80CAH
29E2H		POP	B
		MOV	A,B
		CPI	120
		CNC	L160
		MOV	A,M
		MVI	D,0
29ECH	L166:	SUI	171
		JC	L167
		CPI	3
		JNC	L167
		CPI	1
		RAL
		XRA	D
		CMP	D
		MOV	D,A
		JC	L019	;SYNTAX ERROR
		SHLD	80C2H
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JMP	L166


2A08H	L167:	MOV	A,D
		ORA	A
		JNZ	L177
		MOV	A,M
		SHLD	80C2H
		SUI	164
		RC
		CPI	7
		RNC
		MOV	E,A
		LDA	80AAH
		DCR	A
		ORA	E
		MOV	A,E
		JZ	L233
		RLC
		ADD	E
		MOV	E,A
		LXI	H,1F9AH	;SIGN (?) JUMP TABLE
		DAD	D
		MOV	A,B
		MOV	D,M
		CMP	D
		RNC
		INX	H
		CALL	L160
2A30H	L168:	PUSH	B
		LXI	B,L165
		PUSH	B
		MOV	B,E
		MOV	C,D
		CALL	L297
		MOV	E,B
		MOV	D,C
		MOV	C,M
		INX	H
		MOV	B,M
		INX	H
		PUSH	B
		LHLD	80C2H
		JMP	L164


2A47H	L169:	XRA	A
		STA	80AAH
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JC	L315
		CALL	L105	;CK LETTER <C> IF NO
		JNC	L172
		CPI	164
		JZ	L169
		CPI	'.'
		JZ	L315
		CPI	165
		JZ	L171
		CPI	'"'
		JZ	L215
		CPI	162
		JZ	L179
		CPI	159
		JZ	L206
		SUI	174
		JNC	L173
2A7AH	L170:	CALL	L095
		DB	028H	;ILLEGAL!
		CALL	L163
		CALL	L095
		DAD	H
		RET


2A86H	L171:	MVI	D,125
		CALL	L164
		LHLD	80CAH
		PUSH	H
		CALL	L296
2A92H		CALL	L160
		POP	H
		RET


2A97H	L172:	CALL	L180
2A9AH		PUSH	H
		XCHG
		SHLD	TEMPHL
		LDA	80AAH
		ORA	A
		CZ	L298
		POP	H
		RET


2AA8H	L173:	MVI	B,0
		RLC
		MOV	C,A
		PUSH	B
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		MOV	A,C
		CPI	')'
		JC	L174
		CALL	L095
		DB	028H	;ILLEGAL!
		CALL	L163
		CALL	L095
		INR	L
		CALL	L161
		XCHG
		LHLD	80DEH
		XTHL
		PUSH	H
		XCHG
		CALL	L252
		XCHG
		XTHL
		JMP	L175


2AD3H	L174:	CALL	L170
		XTHL
		LXI	D,2A92H
		PUSH	D
2ADBH	L175:	LXI	B,1F6AH	;MATH (?) JUMP TABLE
		DAD	B
		MOV	C,M
		INX	H
		MOV	H,M
		MOV	L,C
		PCHL


2AE5H		ORI	175
		PUSH	PSW
		CALL	L160
		CALL	L109
		POP	PSW
		XCHG
		POP	B
		XTHL
		XCHG
		CALL	L299
		PUSH	PSW
		CALL	L109
		POP	PSW
		POP	B
		MOV	A,C
		LXI	H,L203
		JNZ	L176
		ANA	E
		MOV	C,A
		MOV	A,B
		ANA	D
		PCHL


2B07H	L176:	ORA	E
		MOV	C,A
		MOV	A,B
		ORA	D
		PCHL


2B0CH	L177:	LXI	H,2B1EH
		LDA	80AAH
		RAR
		MOV	A,D
		RAL
		MOV	E,A
		MVI	D,100
		MOV	A,B
		CMP	D
		RNC
		JMP	L168


2B1EH		DB	020H,02BH,079H,0B7H
		DB	01FH,0C1H,0D1H,0F5H
		DB	0CDH,0C6H,029H,021H
		DB	061H,02BH,0E5H,0CAH
		DB	019H,033H,0AFH,032H
		DB	0AAH,080H,0D5H,0CDH
		DB	059H,02FH,0D1H,0CDH
		DB	05DH,01FH,0CDH,05DH
		DB	01FH,0CDH,05DH,02FH
		DB	0CDH,0EDH,032H,0E1H
		DB	0E3H,055H,0E1H


2B49H	L178:	MOV	A,E
		ORA	D
		RZ
		MOV	A,D
		SUI	1
		RC
		XRA	A
		CMP	E
		INR	A
		RNC
		DCR	D
		DCR	E
		LDAX	B
		CMP	M
		INX	H
		INX	B
		JZ	L178
		CMC
		JMP	L293


2B61H		INR	A
		ADC	C
		POP	B
		ANA	B
		ADI	255
		SBB	A
		JMP	L294


2B6BH	L179:	MVI	D,'Z'
		CALL	L164
		CALL	L160
		CALL	L109
		MOV	A,E
		CMA
		MOV	C,A
		MOV	A,D
		CMA
		CALL	L203
		POP	B
		JMP	L165


2B82H		CALL	L097
		RZ
		CALL	L095
		INR	L
		LXI	B,2B82H
		PUSH	B
		ORI	0AFH


		ORG	$-1


2B8FH	L180:	XRA	A
		STA	80A9H
		MOV	B,M
2B94H	L181:	CALL	L105	;CK LETTER <C> IF NO
		JC	L019
		XRA	A
		MOV	C,A
		STA	80AAH
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JC	L182
		CALL	L105	;CK LETTER <C> IF NO
		JC	L184
2BABH	L182:	MOV	C,A
2BACH	L183:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		JC	L183
		CALL	L105	;CK LETTER <C> IF NO
		JNC	L183
2BB8H	L184:	SUI	'$'
		JNZ	L185
		INR	A
		STA	80AAH
		RRC
		ADD	C
		MOV	C,A
		CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
2BC7H	L185:	LDA	80C6H
		ADD	M
		SUI	'('
		JZ	L192
		XRA	A
		STA	80C6H
		PUSH	H
		LHLD	80D8H	;START OF ARRAYS
		XCHG
		LHLD	80D6H	;END OF BASIC
2BDCH	L186:	CALL	L004	;CMPHD
		JZ	L188
		MOV	A,C
		SUB	M
		INX	H
		JNZ	L187
		MOV	A,B
		SUB	M
2BEAH	L187:	INX	H
		JZ	L190
		INX	H
		INX	H
		INX	H
		INX	H
		JMP	L186


2BF5H	L188:	POP	H
		XTHL
		PUSH	D
		LXI	D,2A9AH
		CALL	L004	;CMPHD
		POP	D
		JZ	L191
		XTHL
		PUSH	H
		PUSH	B
		LXI	B,6
		LHLD	80DAH	;END OF ARRAYS
		PUSH	H
		DAD	B
		POP	B
		PUSH	H
		CALL	L010	;CK MEMORY SIZE-MOVE MEMORY
				;TO MAKE ROOM FOR BASIC LINE
		POP	H
		SHLD	80DAH	;END OF ARRAYS
		MOV	H,B
		MOV	L,C
		SHLD	80D8H	;START OF ARRAYS
2C1BH	L189:	CALL	L002
		JNZ	L189
		POP	D
		MOV	M,E
		INX	H
		MOV	M,D
		INX	H
2C26H	L190:	XCHG
		POP	H
		RET


2C29H	L191:	STA	RFLG
		LXI	H,2103H
		SHLD	TEMPHL
		POP	H
		RET


2C34H	L192:	PUSH	H
		LHLD	80A9H
		XTHL
		MOV	D,A
2C3AH	L193:	PUSH	D
		PUSH	B
		CALL	L106
		POP	B
		POP	PSW
		XCHG
		XTHL
		PUSH	H
		XCHG
		INR	A
		MOV	D,A
		MOV	A,M
		CPI	','
		JZ	L193
		CALL	L095
		DAD	H
		SHLD	80CAH
		POP	H
		SHLD	80A9H
		PUSH	D
		CALL	L430
		JC	L195
		LDA	80A9H
		ORA	A
		MVI	E,18
		JNZ	L022	;DD ERROR
		POP	PSW
		SUB	M
		JZ	L199
2C6DH	L194:	MVI	E,16
		JMP	L022	;BS ERROR


2C72H	L195:	LXI	D,4
		POP	PSW
		MOV	M,C
		INX	H
		MOV	M,B
		INX	H
		MOV	C,A
		CALL	L013
		INX	H
		INX	H
		SHLD	80C2H
		MOV	M,C
		INX	H
		LDA	80A9H
		RAL
		MOV	A,C
2C8AH	L196:	LXI	B,11
		JNC	L197
		POP	B
		INX	B
2C92H	L197:	MOV	M,C
		INX	H
		MOV	M,B
		INX	H
		PUSH	PSW
		PUSH	H
		CALL	L312
		XCHG
		POP	H
		POP	PSW
		DCR	A
		JNZ	L196
		PUSH	PSW
		MOV	B,D
		MOV	C,E
		XCHG
		DAD	D
		JC	L194
		CALL	L016	;CK FREE MEMORY
		SHLD	80DAH	;END OF ARRAYS
2CB0H	L198:	CALL	L002
		JNZ	L198
		INX	B
		MOV	D,A
		LHLD	80C2H
		MOV	E,M
		XCHG
		DAD	H
		DAD	B
		XCHG
		DCX	H
		DCX	H
		MOV	M,E
		INX	H
		MOV	M,D
		INX	H
		POP	PSW
		JC	L201
2CCAH	L199:	MOV	B,A
		MOV	C,A
		MOV	A,M
		INX	H
		MVI	D,225


		ORG	$-1


2CCFH	L200:	POP	H
		MOV	E,M
		INX	H
		MOV	D,M
		INX	H
		XTHL
		PUSH	PSW
		CALL	L004	;CMPHD
		JNC	L194
		PUSH	H
		CALL	L312
		POP	D
		DAD	D
		POP	PSW
		DCR	A
		MOV	B,H
		MOV	C,L
		JNZ	L200
		DAD	H
		DAD	H
		POP	B
		DAD	B
		XCHG
2CEEH	L201:	LHLD	80CAH
		RET


;		"FRE" TOKEN


2CF2H		LHLD	80DAH	;END OF ARRAYS
		XCHG
		LXI	H,0
		DAD	SP
		LDA	80AAH
		ORA	A
		JZ	L202
		CALL	L238
		CALL	L2311
		LHLD	80D2H	;STRING SPACE ALLOC
		XCHG
		LHLD	80C0H
2D0EH	L202:	MOV	A,L
		SUB	E
		MOV	C,A
		MOV	A,H
		SBB	D
2D13H	L203:	MOV	B,C
2D14H	L204:	MOV	D,B
		MVI	E,0
		LXI	H,80AAH
		MOV	M,E
		MVI	B,'Z'
		JMP	L295


;		"POS" TOKEN


2D20H		LDA	8208H
2D23H	L205:	MOV	B,A
		XRA	A
		JMP	L204


2D28H		CALL	L209
		CALL	L208
		LXI	B,L119
		PUSH	B
		PUSH	D
		CALL	L095
		NOP
		CALL	L180
		CALL	L160
		CALL	L095
		DAD	H
		CALL	L095
		XRA	H
		MOV	B,H
		MOV	C,L
		XTHL
		JMP	L207


2D4BH	L206:	CALL	L209
		PUSH	D
		CALL	L170
		CALL	L160
		XTHL
		CALL	L005
		POP	D
		CALL	L005
		POP	H
		CALL	L005
		CALL	L005
		DCX	H
		DCX	H
		DCX	H
		DCX	H
		PUSH	H
		CALL	L004	;CMPHD
		PUSH	D
		MVI	E,34
		JZ	L022	;UF ERROR
		CALL	L303
		POP	H
		CALL	L159
		CALL	L097
		JNZ	L019	;SN ERROR
		POP	H
		POP	D
		POP	B
2D82H	L207:	MOV	M,C
		INX	H
		MOV	M,B
		JMP	L213


2D88H	L208:	PUSH	H
		LHLD	80CCH	;CURRENT LINE NO
		INX	H
		MOV	A,H
		ORA	L
		POP	H
		RNZ
		MVI	E,22
		JMP	L022	;ID ERROR


2D96H	L209:	CALL	L095
		SBB	A
		MVI	A,128
		STA	80C6H
		ORA	M
		MOV	B,A
		CALL	L181
		JMP	L160


;		"STR$" TOKEN


2DA7H		CALL	L160
		CALL	L330
		CALL	L214
		CALL	L238
		LXI	B,2FAFH
		PUSH	B
2DB7H	L210:	MOV	A,M
		INX	H
		INX	H
		PUSH	H
		CALL	L223
		POP	H
		MOV	C,M
		INX	H
		MOV	B,M
		CALL	L212
		PUSH	H
		MOV	L,A
		CALL	L235
		POP	D
		RET


2DCCH	L211:	CALL	L223
2DCFH	L212:	LXI	H,80BCH
		PUSH	H
		MOV	M,A
		INX	H
2DD5H	L213:	INX	H
		MOV	M,E
		INX	H
		MOV	M,D
		POP	H
		RET


2DDBH	L214:	DCX	H
2DDCH	L215:	MVI	B,'"'
		MOV	D,B
2DDFH	L216:	PUSH	H
		MVI	C,-1
2DE2H	L217:	INX	H
		MOV	A,M
		INR	C
		ORA	A
		JZ	L218
		CMP	D
		JZ	L218
		CMP	B
		JNZ	L217
2DF1H	L218:	CPI	'"'
		CZ	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
		XTHL
		INX	H
		XCHG
		MOV	A,C
		CALL	L212
2DFDH	L219:	LXI	D,80BCH
		LHLD	80AEH	;STRING SPACE
		SHLD	TEMPHL
		MVI	A,1
		STA	80AAH
		CALL	L304
		CALL	L004	;CMPHD
		SHLD	80AEH	;STRING SPACE
		POP	H
		MOV	A,M
		RNZ
		MVI	E,30
		JMP	L022	;ST ERROR


;	DISPLAY ROUTINE


2E1CH		INX	H
2E1DH	DISPLAY:CALL	L214
2E20H	DISP1:	CALL	L238
		CALL	L301
		INR	E
2E27H	DISP2:	DCR	E
		RZ
		LDAX	B
		CALL	L073
		CPI	13
		CZ	L137
		INX	B
		JMP	DISP2


2E36H	L223:	ORA	A
		MVI	C,241


		ORG	$-1


2E38H		POP	PSW
		PUSH	PSW
		LHLD	80D2H	;STRING SPACE ALLOC
		XCHG
		LHLD	80C0H
		CMA
		MOV	C,A
		MVI	B,-1
		DAD	B
		INX	H
		CALL	L004	;CMPHD
		JC	L224
		SHLD	80C0H
		INX	H
		XCHG
		POP	PSW
		RET


2E54H	L224:	POP	PSW
		MVI	E,26
		JZ	L022	;OS ERROR
		CMP	A
		PUSH	PSW
		LXI	B,2E38H
		PUSH	B
2E60H	L225:	LHLD	80ACH
2E63H	L226:	SHLD	80C0H
		LXI	H,0
		PUSH	H
		LHLD	80D2H	;STRING SPACE ALLOC
		PUSH	H
		LXI	H,80B0H
2E71H		XCHG
		LHLD	80AEH	;STRING SPACE
		CALL	L003	;CMPDH
		LXI	B,2E71H
		JNZ	L230
		LHLD	80D6H	;END OF BASIC
2E81H	L227:	XCHG
		LHLD	80D8H	;START OF ARRAYS
		CALL	L003	;CMPDH
		JZ	L229
		MOV	A,M
		INX	H
		INX	H
		ORA	A
		CALL	L231
		JMP	L227


2E95H	L228:	POP	B
2E96H	L229:	XCHG
		LHLD	80DAH	;END OF ARRAYS
		CALL	L003	;CMPDH
		JZ	L232
		CALL	L301
		MOV	A,E
		PUSH	H
		DAD	B
		ORA	A
		JP	L228
		SHLD	80C2H
		POP	H
		MOV	C,M
		MVI	B,0
		DAD	B
		DAD	B
		INX	H
2EB4H		XCHG
		LHLD	80C2H
		CALL	L003	;CMPDH
		JZ	L229
		LXI	B,2EB4H
2EC1H	L230:	PUSH	B
		ORI	128
2EC4H	L231:	MOV	A,M
		INX	H
		INX	H
		MOV	E,M
		INX	H
		MOV	D,M
		INX	H
		RP
		ORA	A
2ECDH	L2311:	RZ
		MOV	B,H
		MOV	C,L
		CALL	L001
		MOV	H,B
		MOV	L,C
		RC
		POP	H
		XTHL
		CALL	L004	;CMPHD
		XTHL
		PUSH	H
		MOV	H,B
		MOV	L,C
		RNC
		POP	B
		POP	PSW
		POP	PSW
		PUSH	H
		PUSH	D
		PUSH	B
		RET


2EE7H	L232:	POP	D
		POP	H
		MOV	A,L
		ORA	H
		RZ
		DCX	H
		MOV	B,M
		DCX	H
		MOV	C,M
		PUSH	H
		DCX	H
		DCX	H
		MOV	L,M
		MVI	H,0
		DAD	B
		MOV	D,B
		MOV	E,C
		DCX	H
		MOV	B,H
		MOV	C,L
		LHLD	80C0H
		CALL	L011
		POP	H
		MOV	M,C
		INX	H
		MOV	M,B
		MOV	L,C
		MOV	H,B
		DCX	H
		JMP	L226


2F0CH	L233:	PUSH	B
		PUSH	H
		LHLD	TEMPHL
		XTHL
		CALL	L169
		XTHL
		CALL	L161
		MOV	A,M
		PUSH	H
		LHLD	TEMPHL
		PUSH	H
		ADD	M
		MVI	E,28
		JC	L022	;LS ERROR
		CALL	L211
		POP	D
		CALL	L240
		XTHL
		CALL	L239
		PUSH	H
		LHLD	80BEH
		XCHG
		CALL	L234
		CALL	L234
		LXI	H,29E2H
		XTHL
		PUSH	H
		JMP	L219


2F43H	L234:	POP	H
		XTHL
		CALL	L005
		MOV	C,M
		INX	H
		MOV	B,M
		POP	H
2F4CH	L235:	INR	L
2F4DH	L236:	DCR	L
		RZ
		LDAX	B
		STAX	D
		INX	B
		INX	D
		JMP	L236


2F56H	L237:	CALL	L161
2F59H	L238:	LHLD	TEMPHL
2F5CH	L239:	XCHG
2F5DH	L240:	CALL	L242
		XCHG
		RNZ
		PUSH	D
		MOV	D,B
		MOV	E,C
		DCX	D
		MOV	C,M
		CALL	L001
		JNZ	L241
		MOV	B,A
		DAD	B
		SHLD	80C0H
2F72H	L241:	POP	H
		RET


2F74H	L242:	LHLD	80AEH	;STRING SPACE
		DCX	H
		MOV	B,M
		DCX	H
		MOV	C,M
		DCX	H
		DCX	H
		CALL	L004	;CMPHD
		RNZ
		SHLD	80AEH	;STRING SPACE
		RET


;		"LEN" TOKEN


2F85H		LXI	B,L205
		PUSH	B
2F89H	L243:	CALL	L237
		XRA	A
		MOV	D,A
		STA	80AAH
2F91H	L244:	MOV	A,M
		ORA	A
		RET


;		"ASC" TOKEN


2F94H		CALL	L243
		JZ	L111
		INX	H
		INX	H
		MOV	E,M
		INX	H
		MOV	D,M
		LDAX	D
		JMP	L205


;		"CHR$" TOKEN


2FA3H		MVI	A,1
		CALL	L211
		CALL	L253
		LHLD	80BEH
		MOV	M,E
2FAFH		POP	B
		JMP	L219


;		"LEFT$" TOKEN


2FB3H		CALL	L248
		XRA	A
2FB7H	L245:	XTHL
		MOV	C,A
2FB9H		PUSH	H
		MOV	A,M
		CMP	B
		JC	L246
		MOV	A,B
		LXI	D,0EH


		ORG	$-2


2FC1H	L246:	MVI	C,0
		PUSH	B
		CALL	L223
		POP	B
		POP	H
		PUSH	H
		INX	H
		INX	H
		MOV	B,M
		INX	H
		MOV	H,M
		MOV	L,B
		MVI	B,0
		DAD	B
		MOV	B,H
		MOV	C,L
		CALL	L212
		MOV	L,A
		CALL	L235
		POP	D
		CALL	L240
		JMP	L219


;		"RIGHT$" TOKEN


2FE3H		CALL	L248
		POP	D
		PUSH	D
		LDAX	D
		SUB	B
		JMP	L245


;		"MID$" TOKEN


2FEDH		XCHG
		MOV	A,M
		CALL	L249
		PUSH	B
		MVI	E,-1
		CPI	')'
		JZ	L247
		CALL	L095
		INR	L
		CALL	L252
3001H	L247:	CALL	L095
		DAD	H
		POP	PSW
		XTHL
		LXI	B,2FB9H
		PUSH	B
		DCR	A
		CMP	M
		MVI	B,0
		RNC
		MOV	C,A
		MOV	A,M
		SUB	C
		CMP	E
		MOV	B,A
		RC
		MOV	B,E
		RET


3018H		CALL	L250
		PUSH	PSW
		MVI	E,0
		CALL	L097
		JZ	8222H
		CALL	L095
		INR	L
		CALL	L252
		JMP	8222H


302EH	L248:	XCHG
		CALL	L095
		DAD	H
3033H	L249:	POP	B
		POP	D
		PUSH	B
		MOV	B,E
		INR	B
		DCR	B
		RNZ
		JMP	L111


303DH	L250:	CALL	L252
		STA	8224H
		STA	8220H
		CALL	L095
		INR	L
		JMP	L252


304DH	L251:	CALL	L096	;NEXT CHAR-SKIP SPACE
				;<C> IF ASCII #
				;<Z> IF : OR 0
3050H	L252:	CALL	L159
3053H	L253:	CALL	L108
		MOV	A,D
		ORA	A
		JNZ	L111
		CALL	L097
		MOV	A,E
		RET


;		"VAL" TOKEN


3060H		CALL	L243
		JZ	L265
		MOV	E,A
		INX	H
		INX	H
		MOV	A,M
		INX	H
		MOV	H,M
		MOV	L,A
		PUSH	H
		DAD	D
		MOV	B,M
		MOV	M,D
		XTHL
		PUSH	B
		MOV	A,M
		CALL	L315
		POP	B
		POP	H
		MOV	M,B
		RET


;		"PEEK" TOKEN


307BH		CALL	L292
		CALL	L254
		LDAX	D
		JMP	L205


3085H		CALL	L159
		CALL	L292
		CALL	L254
		PUSH	D
		CALL	L095
		INR	L
		CALL	L252
		POP	D
		STAX	D
		RET


3099H	L254:	JM	L109
		LDA	RFLG
		CPI	145
		JMP	L110


30A4H	L255:	LXI	H,352CH
30A7H	L256:	CALL	L301
		JMP	L259


30ADH	L257:	CALL	L301
		LXI	H,0D1C1H
30B3H	L258:	CALL	L296
30B6H	L259:	MOV	A,B
		ORA	A
		RZ
		LDA	RFLG
		ORA	A
		JZ	L299
		SUB	B
		JNC	L260
		CMA
		INR	A
		XCHG
		CALL	L297
		XCHG
		CALL	L299
		POP	B
		POP	D
30D0H	L260:	CPI	25
		RNC
		PUSH	PSW
		CALL	L306
		MOV	H,A
		POP	PSW
		CALL	L275
		ORA	H
		LXI	H,TEMPHL
		JP	L261
		CALL	L273
		JNC	L269
		INX	H
		INR	M
		JZ	L272
		MVI	L,1
		CALL	L279
		JMP	L269


30F6H	L261:	XRA	A
		SUB	B
		MOV	B,A
		MOV	A,M
		SBB	E
		MOV	E,A
		INX	H
		MOV	A,M
		SBB	D
		MOV	D,A
		INX	H
		MOV	A,M
		SBB	C
		MOV	C,A
3104H	L262:	CC	L274
3107H	L263:	MOV	L,B
		MOV	H,E
		XRA	A
310AH	L264:	MOV	B,A
		MOV	A,C
		ORA	A
		JNZ	L268
		MOV	C,D
		MOV	D,H
		MOV	H,L
		MOV	L,A
		MOV	A,B
		SUI	8
		CPI	224
		JNZ	L264
311CH	L265:	XRA	A
311DH	L266:	STA	RFLG
		RET


3121H	L267:	DCR	B
		DAD	H
		MOV	A,D
		RAL
		MOV	D,A
		MOV	A,C
		ADC	A
		MOV	C,A
3129H	L268:	JP	L267
		MOV	A,B
		MOV	E,H
		MOV	B,L
		ORA	A
		JZ	L269
		LXI	H,RFLG
		ADD	M
		MOV	M,A
		JNC	L265
		RZ
313CH	L269:	MOV	A,B
313DH	L270:	LXI	H,RFLG
		ORA	A
		CM	L271
		MOV	B,M
		INX	H
		MOV	A,M
		ANI	128
		XRA	C
		MOV	C,A
		JMP	L299


314EH	L271:	INR	E
		RNZ
		INR	D
		RNZ
		INR	C
		RNZ
		MVI	C,128
		INR	M
		RNZ
3158H	L272:	MVI	E,10
		JMP	L022	;OV ERROR


315DH	L273:	MOV	A,M
		ADD	E
		MOV	E,A
		INX	H
		MOV	A,M
		ADC	D
		MOV	D,A
		INX	H
		MOV	A,M
		ADC	C
		MOV	C,A
		RET


3169H	L274:	LXI	H,CRTRY
		MOV	A,M
		CMA
		MOV	M,A
		XRA	A
		MOV	L,A
		SUB	B
		MOV	B,A
		MOV	A,L
		SBB	E
		MOV	E,A
		MOV	A,L
		SBB	D
		MOV	D,A
		MOV	A,L
		SBB	C
		MOV	C,A
		RET


317DH	L275:	MVI	B,0
317FH	L276:	SUI	8
		JC	L277
		MOV	B,E
		MOV	E,D
		MOV	D,C
		MVI	C,0
		JMP	L276


318CH	L277:	ADI	9
		MOV	L,A
318FH	L278:	XRA	A
		DCR	L
		RZ
		MOV	A,C
3193H	L279:	RAR
		MOV	C,A
		MOV	A,D
		RAR
		MOV	D,A
		MOV	A,E
		RAR
		MOV	E,A
		MOV	A,B
		RAR
		MOV	B,A
		JMP	L278


31A1H		DB	000H,000H,000H,081H
31A5H		DB	003H,0AAH,056H,019H
		DB	080H,0F1H,022H,076H
		DB	080H,045H,0AAH,038H
		DB	082H


;		"LOG" TOKEN


31B2H	L280:	CALL	L292
		JPE	L111
		LXI	H,RFLG
		MOV	A,M
		LXI	B,8035H
		LXI	D,04F3H
		SUB	B
		PUSH	PSW
		MOV	M,B
		PUSH	D
		PUSH	B
		CALL	L259
		POP	B
		POP	D
		INR	B
		CALL	L286
		LXI	H,31A1H
		CALL	L257
		LXI	H,31A5H
		CALL	L348
		LXI	B,8080H
		LXI	D,0
		CALL	L259
		POP	PSW
		CALL	L326
31E9H	L281:	LXI	B,8031H
		LXI	D,7218H
		LXI	H,0D1C1H


		ORG	$-2


31F0H		POP	B
		POP	D
31F2H	L282:	CALL	L292
		RZ
		MVI	L,0
		CALL	L287
		MOV	A,C
		STA	8238H
		XCHG
		SHLD	8233H
		LXI	B,0
		MOV	D,B
		MOV	E,B
		LXI	H,L263
		PUSH	H
		LXI	H,3214H
		PUSH	H
		PUSH	H
		LXI	H,TEMPHL
3214H		MOV	A,M
		INX	H
		ORA	A
		JZ	L283
		PUSH	H
		XCHG
		MVI	E,8
		JMP	822BH


3221H	L283:	MOV	B,E
		MOV	E,D
		MOV	D,C
		MOV	C,A
		RET


3226H	L284:	CALL	L297
		LXI	B,8420H
		LXI	D,0
		CALL	L299
3232H	L285:	POP	B
		POP	D
3234H	L286:	CALL	L292
		JZ	L020	;/0 ERROR
		MVI	L,-1
		CALL	L287
		INR	M
		INR	M
		DCX	H
		MOV	A,M
		STA	8258H
		DCX	H
		MOV	A,M
		STA	8254H
		DCX	H
		MOV	A,M
		STA	8250H
		MOV	B,C
		XCHG
		XRA	A
		MOV	C,A
		MOV	D,A
		MOV	E,A
		STA	825BH
		JMP	824CH


325CH	L287:	MOV	A,B
		ORA	A
		JZ	L290
		MOV	A,L
		LXI	H,RFLG
		XRA	M
		ADD	B
		MOV	B,A
		RAR
		XRA	B
		MOV	A,B
		JP	L289
		ADI	128
		MOV	M,A
		JZ	824AH
		CALL	L306
		MOV	M,A
		DCX	H
		RET


327AH	L288:	CALL	L292
		CMA
		POP	H
327FH	L289:	ORA	A
3280H	L290:	POP	H
		JP	L265
		JMP	L272


3287H	L291:	CALL	L300
		MOV	A,B
		ORA	A
		RZ
		ADI	2
		JC	L272
		MOV	B,A
		CALL	L259
		LXI	H,RFLG
		INR	M
		RNZ
		JMP	L272


329EH	L292:	LDA	RFLG
		ORA	A
		RZ
		LDA	BRTRY
		CPI	47
		RAL
32A9H	L293:	SBB	A
		RNZ
		INR	A
		RET


;		"SGN" TOKEN


32ADH		CALL	L292
32B0H	L294:	MVI	B,136
		LXI	D,0
32B5H	L295:	LXI	H,RFLG
		MOV	C,A
		MOV	M,B
		MVI	B,0
		INX	H
		MVI	M,128
		RAL
		JMP	L262


;		"ABS" TOKEN


32C3H		CALL	L292
		RP
32C7H	L296:	LXI	H,BRTRY
		MOV	A,M
		XRI	128
		MOV	M,A
		RET


32CFH	L297:	XCHG
		LHLD	TEMPHL
		XTHL
		PUSH	H
		LHLD	BRTRY
		XTHL
		PUSH	H
		XCHG
		RET


32DCH	L298:	CALL	L301
32DFH	L299:	XCHG
		SHLD	TEMPHL
		MOV	H,B
		MOV	L,C
		SHLD	BRTRY
		XCHG
		RET


32EAH	L300:	LXI	H,TEMPHL
32EDH	L301:	MOV	E,M
		INX	H
		MOV	D,M
		INX	H
		MOV	C,M
		INX	H
		MOV	B,M
32F4H	L302:	INX	H
		RET


32F6H	L303:	LXI	D,TEMPHL
32F9H	L304:	MVI	B,4
32FBH	L305:	LDAX	D
		MOV	M,A
		INX	D
		INX	H
		DCR	B
		JNZ	L305
		RET


3304H	L306:	LXI	H,BRTRY
		MOV	A,M
		RLC
		STC
		RAR
		MOV	M,A
		CMC
		RAR
		INX	H
		INX	H
		MOV	M,A
		MOV	A,C
		RLC
		STC
		RAR
		MOV	C,A
		RAR
		XRA	M
		RET


3319H	L307:	MOV	A,B
		ORA	A
		JZ	L292
		LXI	H,32A7H
		PUSH	H
		CALL	L292
		MOV	A,C
		RZ
		LXI	H,BRTRY
		XRA	M
		MOV	A,C
		RM
		CALL	L308
		RAR
		XRA	C
		RET


3333H	L308:	INX	H
		MOV	A,B
		CMP	M
		RNZ
		DCX	H
		MOV	A,C
		CMP	M
		RNZ
		DCX	H
		MOV	A,D
		CMP	M
		RNZ
		DCX	H
		MOV	A,E
		SUB	M
		RNZ
		POP	H
		POP	H
		RET


3346H	L309:	MOV	B,A
		MOV	C,A
		MOV	D,A
		MOV	E,A
		ORA	A
		RZ
		PUSH	H
		CALL	L300
		CALL	L306
		XRA	M
		MOV	H,A
		CM	L310
		MVI	A,152
		SUB	B
		CALL	L275
		MOV	A,H
		RAL
		CC	L271
		MVI	B,0
		CC	L274
		POP	H
		RET


336AH	L310:	DCX	D
		MOV	A,D
		ANA	E
		INR	A
		RNZ
		DCR	C
		RET


;		"INT" TOKEN


3371H	L311:	LXI	H,RFLG
		MOV	A,M
		CPI	152
		LDA	TEMPHL
		RNC
		MOV	A,M
		CALL	L309
		MVI	M,152
		MOV	A,E
		PUSH	PSW
		MOV	A,C
		RAL
		CALL	L262
		POP	PSW
		RET


;	END PART 1