TOOLS.ARC	830214:1552 -- Greg Louis
>>> SYSEQU.MAC	820827:0928
>>> MATHEQU.MAC	820827:0928
>>> LINKEQU.MAC	820827:0928
>>> ACOMPR.MAC	820820:1707
>>> ADDA.MAC	820820:1709
>>> ADDAD.MAC	820820:1715
>>> ARGBUF.MAC	820820:1715
>>> BUFBLK.MAC	820820:1716
>>> CLOSE.MAC	820825:1543
>>> CONMSG.MAC	820825:1316
>>> CONPUT.MAC	820825:1655
>>> CRLF.MAC	820820:1716
>>> CRLFF.MAC	820820:1717
>>> CRLFMS.MAC	820820:1717
>>> CTODI.MAC	820830:1219
>>> CTOF.MAC	820820:1717
>>> CTOI.MAC	820820:1717
>>> DCMP.MAC	820820:1718
>>> DPL.MAC	820820:1718
>>> ERROR.MAC	820820:1718
>>> ESC.MAC	830214:1552
>>> EXIT.MAC	820820:1718
>>> FILL.MAC	820820:1718
>>> FILLBF.MAC	820820:1718
>>> FNB.MAC	820820:1718
>>> FNDBUF.MAC	820825:1521
>>> FTOC.MAC	820830:1542
>>> GETARG.MAC	820820:1719
>>> GETC.MAC	820820:1720
>>> GETCF.MAC	820820:1720
>>> GETLIN.MAC	820820:1720
>>> GETLNF.MAC	820902:1032
>>> GETWD.MAC	820820:1720
>>> HCTODI.MAC	820820:1723
>>> HCTOI.MAC	820820:1723
>>> HDCMP.MAC	820820:1723
>>> HLDDE.MAC	820820:1724
>>> HLMDE.MAC	820820:2333
>>> HLXDE.MAC	820820:2333
>>> INDEX.MAC	820821:0955
>>> INIT.MAC	820820:2333
>>> INPORT.MAC	820820:2333
>>> IPTBUF.MAC	820820:2335
>>> ISDIGD.MAC	820820:2335
>>> ISDIGH.MAC	820820:2335
>>> ITOC.MAC	820820:2335
>>> LENGTH.MAC  820927:1317
>>> LSTPUT.MAC	820825:1656
>>> MAKFCB.MAC	820823:1358
>>> MEMRY.MAC	820820:2336
>>> MOVEL.MAC	820820:2336
>>> MOVES.MAC	820820:2337
>>> MOVEU.MAC	820820:2345
>>> MPLD.MAC	820820:2346
>>> MPLS.MAC	820820:2347
>>> MPRD.MAC	820820:2352
>>> MPRS.MAC	820820:2354
>>> MPS0.MAC	820820:2354
>>> MPWAIT.MAC	820820:2354
>>> MTBUF.MAC	820820:2354
>>> NEGH.MAC	820820:2354
>>> OP32.MAC	820820:2354
>>> OPEN.MAC	820820:2355
>>> OUTPT.MAC	820820:2355
>>> PCSTR.MAC	820825:1740
>>> PCMSG.MAC	820825:1741
>>> PLMSG.MAC	820825:1742
>>> PLSTR.MAC	820825:1743
>>> PROMPT.MAC	820901:0957
>>> PUSHBF.MAC	820820:2355
>>> PUSHBK.MAC	820820:2356
>>> PUTC.MAC	820820:2356
>>> PUTCF.MAC	820820:2356
>>> PUTDCF.MAC	820825:1941
>>> PUTDEC.MAC	820825:1942
>>> PUTMSF.MAC	820825:1746
>>> PUTMSG.MAC	820825:1748
>>> PUTSTF.MAC	820825:1749
>>> PUTSTR.MAC	820825:1751
>>> RDCLK.MAC	820820:2356
>>> REMARK.MAC	820820:2356
>>> SELCMD.MAC	820820:2356
>>> SETBF.MAC	820820:2356
>>> SOUNDX.MAC	820820:2357
>>> SPXCH.MAC	820820:2357
>>> STDIO.MAC	820820:2357
>>> TABBER.MAC	820820:2357
>>> TABBRF.MAC	820820:2357
>>> TYPAHD.MAC	820901:1338
>>> UPCASE.MAC	820820:2357
*********************************************************
Insertion macro:
1QAI>>> IA9I.*13I-1LBCXIA@LV0UAS*-1MBGA@0LL
Deletion macro:
1QAUASA0LKUSA0LTLEUS>>>0L#K
Replacement macro:
1QAUASA0LKI*13IUSA0LTLEUS>>>0L#K
I>>> IA9I.*13I-1LBCXIA@LV0UAS*-1MBGKA@0LL
Extraction macro:
1QAUAS*USALTEUS>>>0L#XOA
Printout macro:
1QAUAS*USALIL8;R7213ITEUS>>>0L12QTF#XTF#V0-1K
*********************************************************
>>> SYSEQU.MAC	820827:0928
; General system equates for assembler programs
; 820819:1335
;
	.8080
; CP/M calls
BOOT	EQU	0	; warmboot vector
BDOS	EQU	5	; system call point
WBOOT	EQU	0	; system reset
RDKBD	EQU	1	; console input
PRTCHR	EQU	2	; console output
LSTCHR	EQU	5	; list dev output
DIRIO	EQU	6	; direct console i/o
RDIOB	EQU	7	; read the iobyte
SETIOB	EQU	8	; set the iobyte
PRTSTR	EQU	9	; string console out
RDSTR	EQU	10	; string console in
RDCST	EQU	11	; read console status
RDVERS	EQU	12	; get version number
RSTDSK	EQU	13	; reset disk system
SELDSK	EQU	14	; select disk
OPENF	EQU	15	; open file
CLOSEF	EQU	16	; close file
FND1ST	EQU	17	; find first entry
FNDNXT	EQU	18	; find next entry
ERASEF	EQU	19	; delete file
RDSEQ	EQU	20	; read file sequent.
WRTSEQ	EQU	21	; write file sequent.
MAKEF	EQU	22	; create file
RENAME	EQU	23	; rename file
RDDSK	EQU	25	; return current disk
SETDMA	EQU	26	; set DMA addr
SETFIL	EQU	30	; set file attributes
USER	EQU	32	; get/set user code
RDRND	EQU	33	; read random
WRTRND	EQU	34	; write random
RDSIZE	EQU	35	; compute file size
SETRND	EQU	36	; set random record
RSTDRV	EQU	37	; reset drive(s)
WRTZER	EQU	40	; write random 0 fill
;
; ASCII character set and video control
;
ENDSTR	EQU	0	; end-of-string
BEL	EQU	7	; bell
BKS	EQU	8	; backspace
TAB	EQU	9	; tab-by-8
LF	EQU	10	; linefeed
NEWLIN	EQU	LF
VT	EQU	11	; vertical tab
FF	EQU	12	; formfeed
CR	EQU	13	; return
CEOL	EQU	14	; clear-line
CEOS	EQU	15	; clear-scr
CAN	EQU	24	; cancel line
EOF	EQU	26	; end-of-file
ESCAPE	EQU	27
BLANK	EQU	32	; space
SQUOTE	EQU	39	; '
PLUS	EQU	43	; +
MINUS	EQU	45	; -
PERIOD	EQU	46	; .
DEL	EQU	127
; other printing chars go in ''s
;
; System limitations
;
MAXDRV	EQU	4	; Number of drives
MAXLIN	EQU	120	; Biggest line allowed
SECTRS	EQU	8	; Sectors to buffer per file
;
; Non-CP/M peripherals
;
; 8251
S0DAT	EQU	0	; 8251 data port
S0CMD	EQU	1	; 8251 cmd/stat port
S0BRG	EQU	4	; baud rate gen
S0XRDY	EQU	1	; TxRDY
S0RRDY	EQU	2	; RxRDY
S08NOP	EQU	4EH	; 8 bits, no parity
S07EVN	EQU	7AH	; 7 bits, even par
;
; SS1
SBAS	EQU	50H	; SS1 BASE PORT ADDR
IMAST0	EQU	SBAS	; Interrupt master low
IMAST1	EQU	SBAS+1	; Interrupt master hi
ISLV0	EQU	SBAS+2	; Interrupt slave low
ISLV1	EQU	SBAS+3	; Interrupt slave hi
TIMER0	EQU	SBAS+4	; Timer/counter 0
TIMER1	EQU	SBAS+5
TIMER2	EQU	SBAS+6
TIMCTL	EQU	SBAS+7	; Timer/counter ctrl
MDATA	EQU	SBAS+8	; Math chip data
MCMDS	EQU	SBAS+9	; Math command/status
CSTAT	EQU	SBAS+10	; Clock status
CDATA	EQU	SBAS+11	; Clock data
UDATA	EQU	SBAS+12	; UART data
USTAT	EQU	SBAS+13	; UART status
UMODE	EQU	SBAS+14	; UART mode
UCMD	EQU	SBAS+15	; UART command
MCDLY	EQU	4000H	; Math chip timeout
;
; Message macro
MSG	MACRO	TEXT
	.XLIST
	IRP	N,<TEXT>
	DB	N
	ENDM
	DB	ENDSTR
	.LIST
	ENDM
>>> MATHEQU.MAC	820827:0928
; Math-chip opcode equates and call structure
; 820818:1056
	.8080

	EXT	MPWAIT,OP32
MC	MACRO	OPCODE
	.XLIST
	MVI	A,OPCODE
	CALL	MPWAIT
	.LIST
	ENDM

; 	HL op DE -> HL, Math-chip operations
DMC	MACRO	OPCODE
	.XLIST
	MVI	A,D&OPCODE
	CALL	OP32
	.LIST
	ENDM

; OPCODES:		RESULTS (on stack A B C D)
ACOS	EQU	6	; (ACOS A) U U U
ASIN	EQU	5	; (ASIN A) U U U
ATAN	EQU	7	; (ATAN A) B U U
CHSF	EQU	15H	; -A B C D
COS	EQU	3	; (COS A) B U U
EXP	EQU	0AH	; (e^A) B U U
FADD	EQU	10H	; (A+B) C D U
FDIV	EQU	13H	; (B/A) C D U
FLTD	EQU	1CH	; A B C U
FLTS	EQU	1DH	; A B C U
FMUL	EQU	12H	; (A*B) C D U
FSUB	EQU	11H	; (B-A) C D U
LOG	EQU	8	; (LOG A) B U U
LN	EQU	9	; (LN A) B U U
POPF	EQU	18H	; B C D A
PTOF	EQU	17H	; A A B C
PUPI	EQU	1AH	; 3.14... A B C
PWR	EQU	0BH	; (B^A) C U U
SIN	EQU	2	; (SIN A) B U U
SQRT	EQU	1	; (SQRT A) B U U
XCHF	EQU	19H	; B A C D
CHSD	EQU	34H	; -A B C D
DADD	EQU	2CH	; (A+B) C D A
DDIV	EQU	2FH	; (B/A) C D U
DMUL	EQU	2EH	; (A*B) C D U
DMUU	EQU	36H	; (A*B) C D U (Up.32)
DSUB	EQU	2DH	; (B-A) C D A
FIXD	EQU	1EH	; A B C U
POPD	EQU	38H	; B C D A
PTOD	EQU	37H	; A A B C
XCHD	EQU	39H	; B A C D
CHSS	EQU	74H	; -AU AL BU BL CU CL DU DL
FIXS	EQU	1FH	; A BU BL CU CL U U U
POPS	EQU	78H	; AL BU BL CU CL DU DL AU
PTOS	EQU	77H	; AU AU AL BU BL CU CL DU
SADD	EQU	6CH	; (AU+AL) BU BL CU CL DU DL AU
SDIV	EQU	6FH	; (AL/AU) BU BL CU CL DU DL U
SMUL	EQU	6EH	; (AU*AL) BU BL CU CL DU DL U
SMUU	EQU	76H	; (AU*AL) etc as above - up.16
SSUB	EQU	6DH	; (AL-AU) BU BL CU CL DU DL AU
XCHS	EQU	79H	; AL AU BU BL CU CL DU DL
MNOP	EQU	0	; AU AL BU BL CU CL DU DL
;
>>> LINKEQU.MAC	820827:0928
; FILE:	LINKEQU.MAC
; DATE:	820819:2255
; FOR:	Determining compilation of $MEMRY
LYNX	EQU	0FFFFH	; Lynx linker, use 108H
>>> ACOMPR.MAC	820820:1707
; FILE:	ACOMPR.MAC
; DATE:	820819:2149
; FOR:	See comment
	.8080
; Routine ACOMPR does lexical comparison
; between strings pointed to by HL & DE
; for length in register C, returning
; Z set if equal, C set if the DE string
; is less than the HL string, and both
; clear if the DE string is greater than
; the HL string.  Register A is preserved.
ACOMPR:: PUSH	H
	PUSH	D
	PUSH	B
	MOV	B,A
COMPLP:	LDAX	D
	CMP	M
	JNZ	COMPEX
	INX	H
	INX	D
	DCR	C
	JNZ	COMPLP
COMPEX:	MOV	A,B
	POP	B
	POP	D
	POP	H
	RET
	END
>>> ADDA.MAC	820820:1709
; FILE:	ADDA.MAC
; DATE: 820818:1310
; FOR:	A + HL -> HL

	TITLE	ADDA - A + HL -> HL
	.8080
ADDA::	ADD	L
	MOV	L,A
	RNC
	INR	H
	RET
	END
>>> ADDAD.MAC	820820:1715
; FILE:	ADDAD.MAC
; DATE: 820818:1312
; FOR:	Add A to 32-bit number on 9511 stack

	TITLE	ADDAD - Add A to 9511 D number
	.8080
	.XLIST
	INCLUDE SYSEQU
	INCLUDE MATHEQU
	.LIST
	EXT	MPLS,MPS0
ADDAD::	PUSH	H
	MOV	L,A
	MVI	H,0
	CALL	MPLS
	CALL	MPS0
	POP	H
	MC	DADD
	RET
	END
>>> ARGBUF.MAC	820820:1715
; FILE:	ARGBUF.MAC
; DATE:	820819:1532
; FOR:	Command-line buffer
	.8080
	CSEG
ARGBUF:: DS	100
NARGS::	DS	1
	DB	0
	END
>>> BUFBLK.MAC	820820:1716
; FILE:	BUFBLK.MAC
; DATE:	820819:1211
; FOR:	Channel allocation and buffer defs.
	.8080
	CSEG
CHANLS:: REPT	16
	DW	0
	ENDM
BUFBLS::
	REPT	15
	DW	0	;; End of buffer
	DS	2	;; Buffer pointer (-len to 0)
	DS	2	;; Buffer size (-len)
	DS	2	;; FCB address
	DB	0FFH	;; Buffer size in sectors
	DS	1	;; Read-write flag (w=0ffh)
	ENDM
	END
>>> CLOSE.MAC	820825:1543
; FILE:	CLOSE.MAC
; DATE:	820825:1538
; FOR:	Close file and free channel C

	TITLE	CLOSE - close and free channel
	.8080
	.XLIST
	INCLUDE SYSEQU
	.LIST
	EXT	FNDBUF,NEGH,SETBF,MTBUF
	EXT	ADDA,CHANLS,ERROR
CLOSE::	PUSH	H
	PUSH	D
	PUSH	B
	MOV	A,C
	ANI	15
	JZ	CLOSED
	CALL	FNDBUF
	STA	RWFLG
	MOV	A,H
	ORA	L
	JZ	CLOSED
	LDA	RWFLG
	INR	A
	JNZ	RLEASE
	PUSH	H
	INX	H
	INX	H	; Bufptr
	MOV	E,M
	INX	H	; +1
	MOV	D,M
	XCHG
	CALL	NEGH	; Space left
	XCHG
	MOV	A,E
	ORA	A
	RAL
	MOV	A,D
	RAL		; Sectors left
	INX	H	; Buflen
	PUSH	H	; Save for SETBF
	INX	H
	INX	H
	INX	H
	INX	H
	SUB	M	; Sectors in buffer
	POP	H	; Buflen
	CMA
	INR	A	; Sectors to write
	JZ	READY
	PUSH	PSW
	CALL	SETBF
	POP	PSW
	MOV	C,A
	CALL	MTBUF
READY:	POP	H
	PUSH	H
	MVI	A,6
	CALL	ADDA
	MOV	E,M
	INX	H
	MOV	D,M	; FCB
	MVI	C,CLOSEF
	CALL	BDOS
	INR	A	; 0 if failure to close
	JNZ	RLEASE-1
	CALL	ERROR
	MSG	<'CLOSE: Directory entry gone!'>
	POP	H
RLEASE:	MVI	M,0
	INX	H
	MVI	M,0
	POP	B
	PUSH	B
	MOV	A,C
	ADD	A
	LXI	H,CHANLS
	CALL	ADDA
	MVI	M,0
	INX	H
	MVI	M,0
CLOSED:	POP	B
	MOV	A,C
	ORA	A
	POP	D
	POP	H
	RET
RWFLG:	DS	1
	END
>>> CONMSG.MAC	820825:1316
; FILE:	CONMSG.MAC
; DATE: 820825:1312
; FOR:	Print string in <HL> with ENDSTR delim

	TITLE	CONMSG - Put string on CON:
	.8080
	.XLIST
	INCLUDE SYSEQU
	.LIST
CONMSG:: PUSH	D	; Save all but HL
	PUSH	B	; ..which will point
	PUSH	PSW	; ..past the ENDSTR
CM0:	MOV	A,M	; ..on exit.
	INX	H
	CPI	ENDSTR
	JZ	MSGEND
	PUSH	H
	MOV	E,A
	MVI	C,PRTCHR
	CALL	BDOS
	POP	H
	JMP	CM0
MSGEND:	POP	PSW
	POP	B
	POP	D
	RET
	END
>>> CONPUT.MAC	820825:1655
; FILE:	CONPUT.MAC
; DATE:	820825:1646
; FOR:	Put single char on CON: via PUTCF
	.8080
	TITLE	CONPUT - Put char on CON:
	EXT	PUTCF
CONPUT:: PUSH	B
	MVI	C,0
	CALL	PUTCF
	POP	B
	RET
	END
>>> CRLF.MAC	820820:1716
; FILE:	CRLF.MAC
; DATE: 820820:1352
; FOR:	Write CRLF to std output

	TITLE	CRLF - Write CRLF - std output
	.8080
	EXT	STDOUT,CRLFF
CRLF::	PUSH	B
	MOV	B,A
	LDA	STDOUT
	MOV	C,A
	CALL	CRLFF
	MOV	A,B
	POP	B
	RET
	END
>>> CRLFF.MAC	820820:1717
; FILE:	CRLFF.MAC
; DATE: 820820:1505
; FOR:	Write CR then LF to channel C

	TITLE	CRLFF - CRLF to channel C
	.8080
	.XLIST
	INCLUDE SYSEQU
	.LIST
	EXT	PUTCF
CRLFF::	PUSH	PSW
	MVI	A,CR
	CALL	PUTCF
	MVI	A,LF
	CALL	PUTCF
	POP	PSW
	RET
	END
>>> CRLFMS.MAC	820820:1717
; FILE:	CRLFMS.MAC
; DATE: 820818:1350
; FOR:	CRLF string

	.8080
	.XLIST
	INCLUDE SYSEQU
	.LIST
	CSEG
CRLFMS::
	MSG	<CR,LF>
	END
>>> CTODI.MAC	820830:1219
; FILE:	CTODI.MAC
; DATE: 820818:1213
; MOD:	820820:1612	; Complete externals
; FOR:	Convert string at <HL> to 32bit in <DE>

	TITLE	CTODI - Convert chars to 32bit
	.8080
	.COMMENT "
This routine returns a 32-bit integer in
<DE> to <DE+3> and advances HL to point to
the first non-digit character in the string,
which serves as the terminator and is returned
in A.
"
	.XLIST
	INCLUDE SYSEQU
	INCLUDE MATHEQU
	.LIST
	EXT	ADDA,NEGH,ISDIGD,FNB
	EXT	MPLS,MPS0,MPRD,DPL
CTODI::	PUSH	B
	MOV	B,H
	MOV	C,L
	MVI	A,0FFH
	STA	DPL
	CALL	FNB
	LXI	H,0
	CPI	MINUS
	JNZ	CT0
	DCX	H
	JMP	CT1
CT0:	CPI	PLUS
	JNZ	CT2
CT1:	INX	B
	LDAX	B
CT2:	PUSH	H
	CALL	MPS0
	CALL	MPS0
CT3:	CALL	ISDIGD
	JC	CT4
	PUSH	PSW
	LXI	H,10
	CALL	MPLS
	CALL	MPS0
	MC	DMUL
	POP	PSW
	MOV	L,A
	MVI	H,0
	CALL	MPLS
	CALL	MPS0
	MC	DADD
	LDA	DPL
	ORA	A
	JM	CT3A
	INR	A
	STA	DPL
CT3A:	INX	B
	LDAX	B
	JMP	CT3
CT4:	CPI	PERIOD
	JNZ	CT5
	LDA	DPL
	ORA	A
	JP	CT5
	INR	A
	STA	DPL
	JMP	CT3A
CT5:	POP	H
	MOV	A,H
	ORA	L
	JZ	CT6
	MC	CHSD
CT6:	XCHG
	CALL	MPRD
	XCHG
	MOV	H,B
	MOV	L,C
	LDA	DPL
	ORA	A
	JP	CT7
	INR	A
	STA	DPL
CT7:	MOV	A,M
	POP	B
	RET
	END
>>> CTOF.MAC	820820:1717
; FILE:	CTOF.MAC
; DATE: 820818:1353
; FOR:	Convert string at <HL> to floating

	TITLE	CTOF - Convert chars to float
	.8080
	.COMMENT "
This routine returns a floating point number
on the 9511 stack and advances HL to point to
the first non-digit character in the string,
which serves as the terminator and is returned
in A.
"
	.XLIST
	INCLUDE SYSEQU
	INCLUDE MATHEQU
	.LIST
	EXT	CTODI,CTOI,ERROR
	EXT	MPLS,MPS0,MPLD,DPL
CTOF::	PUSH	D
	LXI	D,MANTIS
	CALL	CTODI
	ORI	20H	; force lower case
	CPI	'e'
	LDA	DPL
	STA	EXPOFF
	LXI	D,0
	JNZ	NOEXP
	INX	H
	CALL	CTOI	; exponent in DE
NOEXP:	PUSH	H
	LXI	H,10	; Base
	CALL	MPLS
	MC	FLTS
	LXI	H,EXPOFF
	MOV	A,E	; Subtract offset
	SUB	M
	MOV	E,A
	JNC	$+4
	DCR	D
	XCHG
	CALL	MPLS
	MC	FLTS
	MC	PWR	; Base^exponent
	ANI	1EH	; All 4 error flags
	JZ	CTF0	; If no errors
	CPI	8	; Only over/under?
	JC	CTF1	; if over/under error
	CALL	ERROR
	MSG	<'CTOF: Exponent out of range'>
CTF0:	LXI	H,MANTIS
	CALL	MPLD
	MC	FLTD
	ANI	2
	JNZ	CTF2	; Overflow error
	MC	FMUL
	ANI	6
	JZ	CTF3
CTF1:	ANI	2
	JNZ	CTF2	; Overflow error
	MC	POPF	; Junk exp or result
	CALL	MPS0
	CALL	MPS0	; Load 0
	JMP	CTF3
CTF2:	CALL	ERROR
	MSG	<'CTOF: Floating-point overflow'>
CTF3:	POP	H
	POP	D
	MOV	A,M
	RET
MANTIS:	DS	4
EXPOFF:	DS	1
	END
>>> CTOI.MAC	820820:1717
; FILE:	CTOI.MAC
; DATE: 820818:1137
; MOD:	820820:1616	; Complete externals
; FOR:	Convert string at <HL> to 16bit in DE

	TITLE	CTOI - Convert chars to 16bit
	.8080
	.COMMENT "
This routine returns a sixteen-bit integer in
DE and advances HL to point to the first
non-digit character in the string, which
serves as the terminator and is returned in A.
"
	.XLIST
	INCLUDE SYSEQU
	.LIST
	EXT	ADDA,NEGH,ISDIGD,FNB
CTOI::	PUSH	B
	MOV	B,H
	MOV	C,L
	CALL	FNB
	LXI	H,0
	CPI	MINUS
	JNZ	CT0
	DCX	H
	JMP	CT1
CT0:	CPI	PLUS
	JNZ	CT2
CT1:	INX	B
	LDAX	B
CT2:	PUSH	H
	LXI	H,0
CT3:	CALL	ISDIGD
	JC	CT4
	MOV	E,L
	MOV	D,H
	DAD	H
	DAD	H
	DAD	D
	DAD	H
	CALL	ADDA
	INX	B
	LDAX	B
	JMP	CT3
CT4:	POP	D
	MOV	A,D
	ORA	E
	CNZ	NEGH
	XCHG
	MOV	H,B
	MOV	L,C
	MOV	A,M
	POP	B
	RET
	END
>>> DCMP.MAC	820820:1718
; FILE:	DCMP.MAC
; DATE: 820818:1449
; FOR:	Compare two 32-bit nos in memory

	TITLE	DCMP - compare 32-bit integers
	.8080
	.XLIST
	INCLUDE SYSEQU
	INCLUDE MATHEQU
	.LIST
	EXT	MPLD
DCMP::	CALL	MPLD
	XCHG
	CALL	MPLD
	XCHG
	MC	DSUB
	RET
	END
>>> DPL.MAC	820820:1718
; FILE:	DPL.MAC
; DATE:	820818:1248
; FOR:	Decimal-place counter
	.8080
	CSEG
DPL::	DS	1
	END
>>> ERROR.MAC	820820:1718
; FILE:	ERROR.MAC
; DATE: 820818:1347
; MOD:	820820:1618	; Read definition file
; FOR:	Print inline string and quit

	TITLE	ERROR - Complain and quit
	.8080
	.XLIST
	INCLUDE	SYSEQU
	.LIST
	EXT	CONMSG,CRLFMS
ERROR::	LXI	H,CRLFMS
	CALL	CONMSG
	POP	H
	CALL	CONMSG
	JMP	BOOT
	END
>>> ESC.MAC	820820:1718
; FILE:	ESC.MAC
; DATE: 830214:1553
; FOR:	Interpret @ escape char

	TITLE	ESC - get char, interpret @
	.8080
	.XLIST
	INCLUDE SYSEQU
	.LIST
	EXT	ISDIGD,HCTOI
ESC::	LDA	ESCSW
	CPI	CR
	JNZ	ESC0
	XRA	A
	STA	ESCSW
	MVI	A,LF
	RET
ESC0:	MOV	A,M
	INX	H
	CPI	'@'
	RNZ
	MOV	A,M
	CPI	ENDSTR
	JNZ	ESC00
	MVI	A,'@'
	RET
ESC00:	CPI	'n'
	JZ	ESC02
ESC01:	CPI	'N'
	JNZ	ESC1
ESC02:	MVI	A,CR
	STA	ESCSW
	INX	H
	RET
ESC1:	PUSH	H
	PUSH	B
	LXI	H,ESCTBL
	MVI	C,ESCLEN
ESC1