Compucolor.org – Virtual Media

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






;		PRINTER SPOOLER PROGRAM
;		    BY TOM DEVLIN
;		  115 EASTVIEW AVE
;		LAKE ORION, MI. 48035

;LAST REVISED 5/29/86

;  This program will print .SRC (ASCII) files while another
;program is running provided that the other program;
; (A) respects the BASIC top of memory pointer,
; (B) doesn't use RS232 output, (this includes SOUNDWARE)
; (C) doesn't use the user timer.
;(NOTE: If you intend to run a BASIC program BASIC must be
;initalized prior to running the spooler program. This is
;because an [ESC]-[W]-[RETURN] will overwrite the disk buffer
;and a <CPU RESET> will kill the spooler.)

; Both programs will run without interaction except that disk
;access by one program will temporarily pause the other one,
;this may cause you to lose key-strokes if you are typing
;when the spooler reads more data from the file. You can
;decrease the number and frequency of the disk accesses by
;increasing the BUFBLK value, this lowers the programs' ORG
;point and increases the size of the disk buffer in 128 byte
;increments. As written the program used a BUFBLK value of 8,
;this gives a 1K disk buffer and the program runs in just
;under 2K total starting at 0F800H. (0B800H for 16K machines)
;
;  Once printing has started you must not remove the disk
;containing the file being printed nor overwrite the file,
;anything else is OK.
;
;  You can re-start the program via [ESC]-[^] provided that
;it hasn't been over-written since it was last run. (It
;un-protects itself on exit.)
;
;  The program filters out Form Feeds and replaces them with
;line feed / carrage return pairs.
;
;  This program is based on the old Colorcue printer driver
;program as included on the MLDP disk. It has been EXTENSIVLY
;revised and is, I believe, now bug-free.

; USER CUSTOMIZING AREA

;PRINTER INFO (MX-80 TYPICAL), CHANGE ONLY IF NECESSARY
PW	EQU	80	;MAX CHARS/LINE OF PRINTER
PL	EQU	66	;MAX LINES/PAGE OF PRINTER

PRATE	EQU	0	;PRINTER BAUD RATE
;		USE YOUR PRINTERS' BAUD RATE (1-7)
;		AND THE SPOOLER WILL SET THE CC-II
;		RS-232 PORT FOR YOU. IF PRATE EQU 0
;		THE BAUD RATE WILL NOT BE CHANGED.

;PAGE FORMATTING VALUES, CHANGE AS DESIRED
LM	EQU	4	;LEFT MARGIN
RM	EQU	4	;RIGHT MARGIN
TM	EQU	2	;TOP MARGIN
BM	EQU	3	;BOTTOM MARGIN

TOPRAM	EQU	0FFFFH	;32K TOP OF MEMORY, FOR 16K USE 0BFFFH
BUFBLK	EQU	8	;NUMBER OF 128 BYTE DISK BUFFER BLOCKS

; END OF CUSTOMIZING AREA, BEYOND THIS POINT BE DRAGONS.

;	SYSTEM EQUATES
BAUD	EQU	5		;TMS-5501 BAUD RATE PORT
LO	EQU	0033H		;CHAR OUTPUT ROUTINE
BEGEX	EQU	0038H		;JUMPS TO BEGIN
ESCCRT	EQU	81BFH		;ESCAPE ^ JUMP VECTOR
RST1J	EQU	81C8H		;USER TIMER INTERUPT VECTOR
EXTBF	EQU	81D6H		;HOLDS TMS-5501 OUTPUT STATUS
INPCRT	EQU	81C5H		;JUMP VECTOR NUMBER 31
KBDFL	EQU	81DFH		;HAS NUMBER OF KBD JUMP VECTOR
CRATE	EQU	81E2H		;HOLDS CURRENT BAUD RATE
INPFL	EQU	81E3H		;SERIAL INPUT FLAG STORAGE
OUTFL	EQU	81F8H		;OUTPUT PORT FLAG
READY	EQU	81FFH		;KEYBOARD STATUS
KBCHA	EQU	81FEH		;KEYBOARD CHAR
MAXRAM	EQU	32940		;BASIC TOP OF MEMORY POINTER

;       CONTROL CHARACTERS USED BY THIS PROGRAM
BELL	EQU	7	;BELL
TAB	EQU	9	;TAB
LF	EQU	10	;LINE FEED
FF	EQU	12	;FORM FEED
CR	EQU	13	;CARRAGE RETURN
R	EQU	17	;RED
G	EQU	18	;GREEN
Y	EQU	19	;YELLOW
B	EQU	20	;BLUE
M	EQU	21	;MAGENTA
C	EQU	22	;CYAN
W	EQU	23	;WHITE

; ASSORTED OTHER VALUES
CL	EQU	PW-LM-RM ;# PRINTABLE CHARACTER POSITIONS/LINE
BUFSIZ	EQU	BUFBLK*128  ;DISK BUFFER SIZE
PRGLEN	EQU	03FFH	    ;LENGTH OF RUNNING CODE + A LITTLE

RATE	EQU    ((128 SHL PRATE) SHR 8) OR ((126+PRATE) AND 128)
			;BAUD RATE BYTE (TRICKY, HUH?)

	ORG	TOPRAM-PRGLEN-BUFSIZ ; START ADDRESS OF PROGRAM

START:	CALL	SETUP		;OVERLAY JUMP TABLE IF V6.78
	MVI	A,12		;KEYBOARD
	STA	KBDFL		; TO BIT BUCKET
	STA	INPFL		;SERIAL PORT AS WELL
	LXI	H,MSG00		;PRINT
	CALL	OSTR		; STARTUP MESSAGE
FILES:	CALL	INBUFF		;GET FILE NAME
	CALL	INIIO		;SET THINGS UP
	CALL	EMESS		;IN CASE ERROR
	JNZ	FILES		;RETRY IF ERROR
	LXI	H,HLTMSG	;TELL HOW
	CALL	OSTR		; TO PAUSE PROGRAM
	XRA	A		;ZERO A
	LXI	H,MARCNT	;POINT TO MARGIN COUNTER
	MOV	M,A		; CLEAR IT
	INX	H		;POINT TO PAGE COUNTER
	MOV	M,A		; CLEAR IT
	INX	H		;POINT TO CHAR COUNTER
	MOV	M,A		; CLEAR IT
	INX	H		;POINT TO LINE COUNTER
	MOV	M,A		; CLEAR IT
	INX	H		;POINT TO OURFLG
	MOV	M,A		; START AT INT0:
	STA	OUTFL		;TO TURN OFF ANY XMIT INTERUPTS
	ORI	RATE		;GET BAUD RATE
	JZ	NORATE		; IF ZERO DON'T CHANGE EXISTING
	OUT	BAUD		;SET BAUD RATE PORT
	STA	CRATE		; UPDATE CURRENT RATE BYTE
NORATE:	LHLD	MAXRAM		;GET BASIC TOP OF MEMORY
	SHLD	TEMPTOP		; SAVE IT
	LXI	H,START-1	;PROTECT
	SHLD	MAXRAM		; THIS PROGRAM
	LXI	H,START-51	;INITALIZE BASICS'
	SHLD	80D2H		; STACK POINTER
	CALL	STARTUP		;START USER TIMER
BAILOUT:
	LXI	SP,8042H	;FCS STACK
	LXI	H,KBDFL		;KEYBOARD FLAG
	LXI	D,BEGEX		;DO NOTHING
	PUSH	D		; LOOP ADDRESS
	JMP	ESCD		;GO TO FCS
STARTUP:
	MVI	A,0C3H		;SET USER TIMER
	STA	RST1J		; VECTOR
	LXI	H,ENTRY		;  TO OUR
	SHLD	RST1J+1		;   ROUTINE
	MVI	A,0FFH		;START THEM INTERUPTS
	OUT	10		; A-GOIN OFF
	RET

; THIS IS THE RST1J VECTOR, WE COME IN HERE WHEN THE USER
;TIMER GOES OFF AND THEN BRANCH TO THE ACTIVE ROUTINE.
ENTRY:	PUSH	PSW		;SAVE AF AND
	PUSH	H		; HL ON USER STACK
	LXI	H,0		;CLEAR HL
	DAD	SP		;ADD USER STACK POINTER
	LXI	SP,STACK	;SWITCH TO OUR STACK
	PUSH	H		;SAVE USER STACK POINTER
	PUSH	D		; SAVE DE
	PUSH	B		;  AND BC
	LXI	H,EXIT		;SET EXIT AS THE
	PUSH	H		; PLACE TO RETURN TO
	LXI	H,OURFLG	;POINTER TO NEXT ROUTINE
	PUSH	H		;SAVE A COPY
	MOV	A,M		;GET ROUTINE POINTER
	LXI	H,TABLE		;GET TABLE BASE ADDRESS
	CALL	ADHLA		;INDEX UP TABLE
	MOV	A,M		;LO BYTE OF ROUTINE
	INX	H		;POINT TO
	MOV	H,M		; HIGH BYTE
	MOV	L,A		;ADDRESS COMPLETE
	XTHL			;SWAP TO TOP OF STACK
	RET			; AND GO TO THE ROUTINE

EXIT:	MVI	A,020H		;DELAY UNTIL USER TIMER
	OUT	10		; SENDS US TO ENTRY: AGAIN
	POP	B		;RESTORE BC
	POP	D		; AND DE
	POP	H		;GET USER STACK POINTER
	SPHL			; GO BACK TO USER STACK
	POP	H		;RESTORE HL
	POP	PSW		; AND AF
	EI			;ENABLE INTERUPTS
	RET			;AND RETURN TO USER

INT0: ;WE VECTOR HERE TO GET THE NEXT CHARACTER WHEN OURFLG=0
	LXI	H,MARCNT	;POINT AT MARGIN COUNTER
	INR	M		;BUMP COUNT
	MVI	A,LM		;GET MARGIN LENGTH
	CMP	M		;THERE YET?
	MVI	A,' '		;GET A SPACE TO SEND
	JNC	S1OUT		; IF MARGIN NOT COMPLETE
	INX	H		;POINT AT PAGE NUMBER
	MOV	E,M		; SAVE IT
	INX	H		;POINT TO CHAR COUNTER
	MVI	A,CL		;MAX CHARS/LINE
	CMP	M		; SEE IF NEW LINE NEEDED
	JZ	LFEED		;YES, DO CR/LF
	INX	H		;POINT TO LCOUNT
	MOV	A,E		;GET PAGE NUMBER BACK
	ORA	A		; IS IT PAGE ZERO?
	JZ	PAGE0		;  YES, SO NO TOF LINE FEEDS
	MOV	A,M		;GET CURRENT LINE #
	INR	A		;SEE IF NEXT LINE
	CPI	TM+1		; IS WITHIN TOP MARGIN
	JC	LFEED		; SEND CR/LF IF LINE <= TM
PAGE0:	MOV	A,M		;LINE # BACK
	XRI	PL-BM		;LAST LINE ON PAGE?
	JNZ	GETNXT		;NO, GET NEXT BYTE
	MOV	M,A		;CLEAR LINE COUNT
	DCX	H		;POINT TO
	DCX	H		; PAGENO
	INR	M		;COUNT NEW PAGE
	DCX	H		;POINT TO MARCNT
	MOV	M,A		; CLEAR IT
	MVI	A,FF		;DO A
	JMP	S1OUT		; FORM FEED

GETNXT:	CALL	GETBYTE		;READ NEXT BYTE FROM FILE
	CPI	FF		;FORM FEED?
	JZ	LFEED		;YES, REPLACE WITH CR/LF
	CPI	TAB		;TAB?
	JNZ	S1OUT		; NO, PRINT IT
	LXI	H,OURFLG	;POINT TO
	MVI	M,2		; INT2:

INT2: ;WE VECTOR HERE WHILE REPLACING TAB WITH SPACES
	MVI	E,' '		;SPACE
	LDA	CCOUNT	 	;TEST CURRENT COLUMN
	INR	A		; NUMBER FOR
	ANI	7		;  EVEN MULTIPLE OF 8
	JNZ	S1OUT+1		;>1 SPACE NEEDED
	MOV	M,A		;BACK TO MAIN ROUTINE
	JMP	S1OUT+1		;PRINT LAST SPACE

GETBYTE: ; READ NEXT BYTE FROM OPEN FILE
	LXI	H,FPB1		; POINT AT FILE PARAMETER BLOCK
	CALL	GTBYT		; GET NEXT BYTE
	RNC			; <C>=ERROR OR END OF FILE
	POP	H		;'EXIT' FROM SUBROUTINE
	MVI	A,6		;TO KILL PROGRAM
	STA	OURFLG		;  AFTER 1 FINAL CHARACTER
	MVI	A,FF		;ASSUME END OF FILE
	JZ	S1OUT		; IF SO, SEND FORM FEED
	MVI	A,BELL		;MUST BE DISK ERROR SO
	JMP	S1OUT		; RING PRINTER BELL INSTEAD

; VECTOR HERE IF OURFLG=4 BECAUSE WE COULDN'T PRINT ANYTHING
; LAST CYCLE. (TBUFFER WASN'T EMPTY OR CLEAR TO SEND WAS HIGH)
INT4:	LXI	D,TMPFLG	;POINT TO TEMP FLAG STORAGE
	LDAX	D		;MOVE CONTENTS
	MOV	M,A		; BACK TO OURFLG
	INX	D		;POINT TO NXTOUT
	LDAX	D		; GET CHARACTER TO SEND

S1OUT:	MOV	E,A		;SAVE CHARACTER
	IN	03H		;TBUFFER
	ANI	10H		; EMPTY?
	JZ	SVSTAT		;NO, TRY AGAIN LATER
	MVI	A,128		;READ
	OUT	7		; KEYBOARD
	IN	1		;PATTERN
	MOV	D,A		;SAVE PATTERN
	LDA	EXTBF		;ORIGINAL STATE
	OUT	7		;RESTORE PORT
	MOV	A,D		;GET PATTERN BACK
	ANI	070H		;CONTROL+SHIFT+REPEAT?
	JZ	PAUSE		; YES! MASTER WANTS US
	IN	1		;TEST CLEAR TO SEND
	ORA	A		;SET FLAGS
	JP	SVSTAT		;CTS WASN'T LO
	MOV	A,E		;SEND CHAR
	OUT	06H		; TO TX-BUFFER
	LXI	H,CCOUNT	;POINT AT CHAR COUNTER
	CPI	' '		;CONTROL CHAR?
	JC	NOCNT		;YES, DON'T COUNT IT
	INR	M		;COUNT PRINTABLE CHAR
NOCNT:	CPI	CR		;JUST SENT A CARRAGE RETURN?
	JNZ	TRYLF		;NO, SEE IF LINE FEED
	MVI	M,0-LM		;CLEAR CHAR COUNT
TRYLF:	INX	H		;POINT TO LINE COUNT
	XRI	LF		;LINE FEED?
	RNZ			;NO, EXIT
	INR	M		;COUNT NEW LINE
	STA	MARCNT		;CLEAR LEFT MARGIN COUNTER
	RET			; AND EXIT

SVSTAT:	LXI	H,OURFLG	;SAVE STATE TO RETURN TO
	MOV	A,M		;GET CURRENT FLAG
	MVI	M,4		; CHANGE OURFLG TO 4
	INX	H		;POINT TO TMPFLG
	MOV	M,A		;SAVE OLD FLAG
	INX	H		;POINT TO NXTOUT
	MOV	M,E		;SAVE CHARACTER
	RET			;GO BACK TO USER

INT6: ;FINAL EXIT FROM PRINT PROGRAM
	LHLD	TEMPTOP		;RESTORE TOP OF
	SHLDMA_RAM		; MEMORY POINTER
KILLIT:	LXI	H,0		;ZEROR*"U55e5
	ORG	$-2		;P)APAST?DUM;MY BYTES
	EI			; LOAD REAL
	RET			;  HL CONTENTS
	SHLD	RST1J		; KILL USER TIMER
	RET			;AND END PROGRAM

;?SEND CR/LF TO PRINTER IN TWO PASSES
LFEED:	MVI	A,8		;POINT TO
	STA	OURFLG		; SEND LF ROUTINE
	MVI	A/CR		;SEND THE
	JMP	S1OUT		; CARRAGE RETURN
INT8:	MVI	M,0		;BACK TO MAIN ROUTINE
	MVI	A,LF		;SEND THE
	JMP	S1OUT		; LINE FEED

; IF <COMMAND>&<REPEAT> KEYS ARE PRESSED WHILE PRINTING
;  WE SAVE THE STATE WE ARE MN AND SuT UP A PATCH TO INTERCEPT
;  THE NEXT KEY,PRESSED.
PAUSE:	s}LL	SVSTAT		;SO RETURO?TOSU?INW7?TO?ROUTINE
	INX	H		;1st BYTE OF INPCRT STORAGE
	XCHG			; TO DE
	LXI	H,INPCRT	;GET KEYBOARD VECTOR
	PUSH	H		;SAVE IT
	MVI	B,3		;MOVE INPCRT CONTENTS
	CALL	MOVDH		; TO STORAGE AREA
	LXI	H,KBDFL		;SAVE
	MOV	A,M		; KBDFL
	STAX	D		;  CONTENTS
	MVI	M,31		;SO WE GET THE NEXT KEY
	POP	H		;INPCRT ADDRESS BACK
	MVI	M,0C3H		;JMP
	LXI	H,CAPTURE	;WHERE NEXT KEY WILL VECTOR
	SHLD	INPCRT+1
	JMP	KILLIT		;HOLD FOR NEXT KEY

;NOTE THAT THIS ROUTINE IS NOT PART OF THE PROGRAM PROPER,
;IT'S A PATCH WE HOOK TO THE KEYBOARD ROUTINE THRU INPCRT
;WHEN WE WANT THE NEXT KEY PRESSED.
CAPTURE:
	MOV	L,B		;POINT TO READY
	MOV	M,A		;SIGNAL NO KEY IN
	LXI	H,UVEC		;USER INPCRT VECTOR STORAGE
	LXI	D,INPCRT	;RESTORE
	MVI	B,3		; ORIGINAL
	CALL	MOVDH		;  INPCRT VECTOR
	MOV	A,M		;RESTORE
	STA	KBDFL		;USER KBDFL CONTENTS
	LXI	H,KBCHA		;GET
	MOV	A,M		; THE KEY
	MVI	M,0		;CLEAR KBCHA
	CPI	LF		;LINE FEED?
	JNZ	STARTUP		;NO, RESUME PRINTING
	JMP	INT6		;PROGRAM ABORTED

 ;PRINT MESSAGE AND INPUT BUFFER WITH BACKSPACE EDITING
INBUFF:	LXI	H,MSG01		;DISPLAY
	CALL	OSTR		; 'PRINT>'
	CALL	RESET		;RESET DISK IF ERROR
	LXI	H,BUFFER	;POINT AT BUFFER
L02:	XRA	A		;ZERO A
	MOV	M,A		;INSERT BUFFER TERMINATOR
	LXI	D,KBCHA		;ZERO
	STAX	D		; KBCHA
GET1:	LDAX	D		;WAIT
	ORA	A		; FOR A
	JZ	GET1		;KEY
	CPI	LF		; USER WANT OUT?
	JZ	BAILOUT		;  YES! EXIT PROGRAM
	CPI	CR		;IS KEY A CARRAGE RETURN?
	JZ	CRLF		; PRINT CR/LF AND EXIT SUB
	LXI	B,L02		;PUSH LO2: ONTO THE
	PUSH	B		; STACK FOR RETURN
	CPI	26		;IS KEY LEFT ARROW?
	JZ	KILL1		; YES, DELETE LAST CHAR
	CPI	07FH		;DELETE MAYBE?
	JNZ	L03		; NO, KEEP GOING
KILL1:	MOV	A,L		;ARE WE AT THE
	CPI	BUFFER AND 255	; START OF THE LINE?
	RZ			;YES, SO DON'T DELETE ANYTHING
	DCX	H		;BACK UP 1 POSITION
	PUSH	H		;SAVE BUFFER STATE
	LXI	H,BACKUP	;ERASE LAST
	CALL	OSTR		; LETTER
	POPh		;RESTORE BUFFER POINTER
	RET	B'
9CONTINUE LOOP AT L02:
L03:	CPI	' '		;CONTROL CHARACTER?
	RC			; YES, IGNORE IT
	MOV	A,L		; GET BUFFER LO BYTE
	CPI	(BUFFER+4+6+1+3+1+2) AND255
	RZ			;1 TOO MANY!
	LDAX	D		;GET KEY AGAIN
	CPI	'a'-1		;CAPS LOCK UP?
	JC	UPPER		; NO, USE AS IS
	SUI	'a'-'A'		;CONVERT TO UPPER CASE
UPPER:	MOV	M,A		;BUFGER KEY
	INX	H		;BUMP POINTER

LO		;ECHO KEY AND GO AFTER ANOTHER

;	FPB?- FILE PARAMETER BLOCK LAYOUT

FOPT	EQU	0
FATR	eQU	1
FNAMQTUBKgQeQTUBj
FVERiEQU	11
fSBK	EQU12
FSIZ	EQU	14
FLBC	EQTNU	16
FLAD	EQU	17
FSAD	EQU	19!%EQU	21
FDBK	EQU	22
FDEN	EQU	23
FaUX	EQU	24
FHAN	EQU	26
ffCN	EQU	28
FDRV	EQU	29
FBLK	EQU	30
FBUF	EQU	32
FXBC	EQU	34
FPTR	EQU	36

; GET INFO FROM COMMAND LINE BUFFER INTO FILE PARAMETER BLOCK
INIIO:	LXI	H,BUFFER	; POINT AT BUFFER
	LXI	D,FPB1		; POINT AT INPUT FPB
	LXI	B,DEFAULT	; POINT AT DEFAULT TYPE
	CALL	PFSPC		; PARSE FILE SPEC
	RC			; IF CARRY THEN ERROR
	XRA	A		; ZERO A
	LXI	H,FJ	; POINT AT INPUT FPB
	MOW	M,A		; 0=OLD FILE
	CALL	OPEN		; OPEN wHE FILE
	RC			; ERROR
	LXI	H,IBUF		; POINT AT INPUT zUFFER
	SHLD	FPB1+FBUFi;YINPUTT
IUMM5	LXi	H,BUFSIZ	; SETUP BUFFER SIZE
	SHLD	F^B1+FXBC	; SAVE INPUT8zUFFER SIZE
	LXI	H,FPr9		; POINT AT INPUT FPB
JMTRWSuQI		; REWIND INPUT FILE & RETUSN

TAzLE	9
 T?_OMNTS TO NE\T/SOUWMOE
GW	INW<
		;<,%r=I51WEJ
wW	INT2zb7'	IUQ%95
DWInT)	4 kUWAITING<FOZ>
U/Je:;6,T*AEXIW
U(ʊKKK SEND LINE FEEG

'jMMյHju0:	DB21$11,MIrڱ{Z,LF,7\RIUŚA-Q3UOoLER '
	ֱ'V1.37,R,' (FOR7,G,' /SIՊB%' FILuS?OOLY)',KR,Ik
MSg05:	Dr
C,sZ,DF$7XRiNT>$7$w,;
hDTESG:	Drb,Gm	UPRESS'.Y,'><{OMMANt>7,G,'0ANF)
	DB	' <REPU;b:' KEYS TO PAUSE PRINTING,',CR,LF
	DB	Y,'<DOWN ARROW>',G,' THEN?KMLLSqRAM,'
	DB	Y,' <RETURN>',G,' RESUMES<IT.',CR,LF,LG/W}C/C
	DB	'YOU MAY NOW RUN ANOTHER%ZqM',{R,LF,LF,239
DEFU"	SRC'
BACKUP:	DB	26,''239

NEWTAB:
; ROM JUMP T((DEFAULT = V8.79)
OS*H
182AH
EMESS:	JMP	0AD6H
PFSPC:	JMP	14ADH
RESET:	JMP	0B48H
OXEN	JMBLLQLHHu5UE5)	JMP
15
GWbYT:	JMBNz5

:	Jm^194EH
MOVJJ)5A%1871H
*UN
ESCf:	׺UYJMPFFHʍSETUP:	LXI	D/OEWTAB	;AGDRESS?OF JUMPTABLE
LXI	HOLU	%;ADdRESS OFzYI1e5
	MVI	B$LEFT}z	;NUMBuzYJYTeSX TO MOVE
	LDA	1		IS GCS VERSION
	CPI	0BAH	;rj
CNZ&!%	;NO, sALL V6.78 MOVH/ʕ%A,0C3H		;JMP'
	STA	ESCCRT		;ESEC-^ VECTOR
	POP	H		;USE THE RETURN ADDRESS
	SHLD	ESCCRT+1	; FOR ANY FUTURE RE-ENTRY
	PCHL			;  INCLUDING THIS ONE

OLDTAB:	; V6.78 ADDRESSES (WILL OVERLAY JUMP TABLE IF NEEDED)
	JMP	33F4H
	JMP	262DH
	JMP	3077H
	JMP	26A5H
JMP	2DArH
	JMP	30C6H
	JMP	322CH
	JMP	3518H
	JMP	343BH
	JMP	338BH
	JMP	32C9H
LENTAB	EQU	$-OLDTAB

ENDPRG:	;END OF(UU1.PRG CODE

	ORG	SETUPK	;SAVE A LITTLE RAM SPACE

;DATA AREAS (ORDER IS IMPORTANT)
TEMPTOP: DS	2		; TEMP BASIC TOP MEMORY POINTER
MARCNT:	DS	1		; LEFT MARGIN COUNTER
PAGENO:	DS	1		; PAGE NUMBER
CCOUNT:	DS	1		; CURRENT CHAR COUNT
LCOUNT:	DS	1		; CURRENT LINE COUNT
OURFLG:	DS	1		; POINTS TO CURRENT ROUTINE
TMPFLG:	DS	1		; USED BY INT4 ROUTINE
NXTOUT: DS	1		; NEXT CHAR TO SEND
UVEC:	DS	3		; USER INPCRT VECTOR STORAGE
FLAG:	DS	1		; STORES KBDFL

FPB1:	DS	38		;INPUT FPB
BUFFER:	DS	100		;COMMAND LINE BUFFER
STACK:				; AnD STACK AREA  (ONu GO UP
				;AND DA UDDER GO DOWN)
IBUF:	DS	BUFSIZ		;DISK BUFFER
DUMMY	EQU	ENDPRG		;JUST A REFERENCE FOR THE
				; .LDA TO .PRGUIM%=95
	END	START