[comp.sys.atari.8bit] MYDOS RS-232 handlers

chasm@killer.DALLAS.TX.US (Charles Marslett) (06/26/89)

#	This is a shell archive (Part 1 of 2)
#
#	It contains the source code for the 5 MYDOS RS-232 handlers
#	included in part 2.  Full source files are included for
#	the Atari 850/P:R:Connection version, the ATR8000 version
#	for normal configurations, and the ATR8500 version.
#
#	Two "diff" files are included showing the changes required
#	(to the best of my knowldege) to run the RS-232 port of the
#	ATR8000 when the SWP hard disk controller and software are
#	installed.
#
#	I owe Richard Bennett (author of TOP-DOS) a debt of gratitude
#	for his sugguestion that the RS-232 handlers be made "reset-proof"
#	and unaffected by loading DUP.SYS.  He wrote the original version
#	of the Atari 850/P:R:Connection handler.
#
#	Richard Morris is also due gratitude for his efforts devoted to
#	permitting use of the RS-232 port on the ATR8500.  Since his work
#	in 1986, I have added Richard Bennett's ideas to the ATR8000 and
#	ATR8500 handlers, so this handler may not remain functional -- I
#	would appreciate any feedback on problems with any of the handlers.
#
#	Run this archive through the Bourne shell "sh" or an unshar
#	program, the desired driver can then be assembled using the
#	A65 assembler recently posted.  If the output file is named
#	AUTORUN.SYS and written to a diskette with DOS.SYS and DUP.SYS
#	on it, nothing further is required to have a fully operation
#	RS-232 handler installed under MYDOS.
#
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:   Shell Archiver
#	Run the following text with /bin/sh to create:
#	atari850.asm
#	rs232atr.doc
#	atr232.asm
#	hd_diff
#	hx_diff
#	atr8500.asm
# This archive created: Sat Jun 24 10:02:47 1989
sed 's/^X//' << \SHAR_EOF > atari850.asm
X	TITLE	'ATARI 850 AND ICD P:R:CONNECTION HANDLER'
X	SUBTTL	'BY RICHARD K. BENNETT'
X;
X;  This is a modification of the RS-232 loader code written by
X;  Richard Bennett for his Top-Dos operating system for the Atari
X;  8-bit computers.  This version has been included in MYDOS with
X;  his permission.
X;
XWARMST	=	$0008
XDOSINI	=	$000C
X;
XDDEVIC	=	$0300
XHATAB	=	$031A
XICCOM	=	$0342
XICBAL	=	$0344
XICBAH	=	$0345
XICBLL	=	$0348
XICBLH	=	$0349
X;
XOSBUF	=	$0500
X;
XCIOV	=	$E456
XSIOV	=	$E459
X;
X;  LOAD RS232 HANDLER FROM ATARI 850 OR ICD PR:Connection
X;
X	ORG	$37F2
X;
X;  Clear the WARM-START flag
X;
XSTART	LDA	#$00
X	STA	WARMST
X;
X;  Save the MYDOS INIT Vector
X;
X	LDA	DOSINI
X	STA	FMSINIT+1
X	LDA	DOSINI+1
X	STA	FMSINIT+2
X;
X;  Issue SIO call to the printer to start RS232 driver
X;  load by reading 12 bytes into a buffer at $0500.
X;
X	LDX	#12-1
XCPYLP1	LDA	QUERY,X
X	STA	DDEVIC,X
X	DEX
X	BPL	CPYLP1
X	JSR	SIOV
X	BMI	ERREXIT
X;
X;  If the printer has an RS232 driver, copy the command
X;  and issue it (loading the bootstrap loader into $0506)
X;
X	LDX	#12-1
XCPYLP2	LDA	OSBUF,X
X	STA	DDEVIC,X
X	DEX
X	BPL	CPYLP2
X	JSR	SIOV
X	BPL	SETUP
X;
X;  If any errors occur, issue error message
X;
XERREXIT	LDA	#LOW[MSG1]
X	LDX	#HIGH[MSG1]
X	LDY	#MSG1LN
X	BNE	PRINT		;JUMP ALWAYS!
X;
X;  If the loader code was successfully loaded, relocate
X;  and initialize it.
X;
XSETUP	JSR	OSBUF+6
X;
X;  And save the RS232 driver INIT Vector
X;
X	LDA	DOSINI
X	STA	RSINIT+1
X	LDA	DOSINI+1
X	STA	RSINIT+2
X;
X;  Is this an Atari 850?
X;
X	LDY	#$12
XTST850	LDA	(DOSINI),Y
X	CMP	ATARI850,Y
X	BNE	NOT850
X	DEY
X	BPL	TST850
X;
X;  REPLACE THE RELOCATION CODE OF THE 850 HANDLER
X;
X	LDY	#$43		;Offset to the bytes to be replaced
XPAT850	LDA	PATCH-$43,Y
X	STA	(DOSINI),Y
X	INY
X	CPY	#$43+8		;Patch 8 bytes
X	BNE	PAT850
X;
X;  POINT INIT VECTOR AT NEW CODE
X;
X	LDA	#$44
X	CLC
X	LDA	DOSINI		;SKIP OVER RELOCATION, ETC.
X	ADC	#$44
X	STA	DOSINI
X	BCC	DOINIT
X	INC	DOSINI+1
XDOINIT	JSR	RSINIT
X;
X;  Work all done, send message to screen and exit!
X;
X	LDA	#LOW[MSG2]
X	LDX	#HIGH[MSG2]
X	LDY	#MSG2LN		;TELL THE WORLD!
X	BNE	PRINT		;JUMP ALWAYS!
X;
X;  Not an 850, perhaps a P:R:Connection?
X;  If so, we INIT and report the fact...
X;
XNOT850	JSR	RSINIT		;ALLCOATE RAM, AND INITIALIZE R:
X;
X;  This one is easy, after standard INIT call, just print msg.
X;
X	LDA	#LOW[MSG3]
X	LDX	#HIGH[MSG3]
X	LDY	#MSG3LN		;TELL THE WORLD!
X;
X;  Print termination message, then exit back to MYDOS
X;
XPRINT	STA	ICBAL
X	STX	ICBAH
X	STY	ICBLL
X;
X	LDX	#0
X	LDA	#9
X	STA	ICCOM,X
X	LDA	#0
X	STA	ICBLH,X
X	JMP	CIOV
X;
XMSG1	DB	'ERROR - CAN',$27,'T LOAD RS232 DRIVER',$9B
XMSG1LN	EQU	*-MSG1
X;
XMSG2	DB	'850 RS232 HANDLER LOADED',$9B
XMSG2LN	EQU	*-MSG2
X;
XMSG3	DB	'P:R:Connection RS232 HANDLER LOADED',$9B
XMSG3LN	EQU	*-MSG3
X;
X;  QUERY: HEY, PRINTER DEVICE, DO YOU HAVE AN RS232 HANDLER?
X;    (BUFFER AT $0500, LENGTH OF 12 BYTES, 8 TICK TIMOUT)
X;
XQUERY	DB	'P',$01,'?',$40		;device, unit, command, direction
X	DW	$0500,8,12		;buffer addr, timeout, length
X	db	0,0			;aux bytes
X;
X;  18 BYTES OF ID INFORMATION FOR THE 850 DRIVER
X;
XATARI850 LDA	#0
X	LDX	#0
XFNDELP	CMP	HATAB,X
X	BEQ	ENDFND
X	INX
X	INX
X	INX
X	CPX	#32
X	BCC	FNDELP
X	RTS
XENDFND	LDA	#'R'
X;
X;  EIGHT BYTE PATCH TO KEEP 850 ACTIVE THROUGH A RESET
X;
XPATCH	DB	$60		;RTS
XFMSINIT DB	$20,$00,$00	;JSR $0000 [ADDRESS FILLED IN LATER]
XRSINIT	DB	$4C,$00,$00	;JMP $0000 [ADDRESS FILLED IN LATER]
X	DB	0		;BRK
X;
X;  INIT ENTRY VECTOR
X;
X	ORG	$02E2
X	DW	START
X;
X	END
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > rs232atr.doc
XThese RS232 drivers for the ATR8000
Xdiffer in where the Z80 code down-
Xloaded into the ATR8000 goes.  The
Xoriginal driver (ATR232.ASM) used
Xthe "User Page" of memory not used
Xby the ATR8000 ROM code ($D000).
X
XUnfortunately, the ATR8000 hard disk
Xinterface code is loaded here also,
Xtwo other alternatives are provided:
XATR232HD.ASM loads its code at $EC00
Xto $EFFF, and ATR232HX.ASM loads its
Xcode at $E000 to $E2FF.
X
XGood luck if you need to use one or
Xthe other of these!
X
XCharles Marslett
XJune 19, 1989
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > atr232.asm
X	TITLE	'ATR8000 AUTORUN.SYS INITIALIZER FOR RS232 I/O'
X	SUBTTL	'BY CHARLES MARSLETT, COPYRIGHT 1985, 1986, 1989'
X;  WORK AREA FOR AUTORUN PROGRAM
X;
XORIGIN	=	$6000
XDIF	=	$D4
XSPTR	=	$D6
XDPTR	=	$D8
X;
XMEMTOP	=	$02E7
X;
X;  CONFIGURATION DATA
X;
XSOBSIZ	=	32	;32 BYTE OUTPUT BUFFER
X;
X;  DRIVER DATA AREAS
X;
XDOSINI	=	$000C
XPOKMSK	=	$10
XBRKKEY	=	$11
XRTCLOK	=	$12
XDCMDZ	=	$22
XDAUX1Z	=	$2A
XDAUX2Z	=	$2B
XRSDATA	=	$43	;DATA BYTE NOT BUFFERED YET
X;
XVSERIN	=	$020A
XVIMIRQ	=	$0216
XCDTMV3	=	$021C
XCDTMF3	=	$022A
XSSKCTL	=	$0232
XDVSTAT	=	$02EA
XDDEVIC	=	$0300
XDUNIT	=	$0301
XDCMD	=	$0302
XDSTAT	=	$0303
XDBUF	=	$0304
XDTIMEO	=	$0306
XDLEN	=	$0308
XDAUX	=	$030A
XHATABS	=	$031A
X;
XAUDF1	=	$D200
XAUDCTL	=	$D208
XSKRES	=	$D20A
XSERIN	=	$D20D
XSEROUT	=	$D20D
XIRQEN	=	$D20E
XSKCTL	=	$D20F
XPBCTL	=	$D303
X;
XSIOV	=	$E459
X;
X;	WRITE A BYTE TO THE RS232 PORT
X;
X	ORG	ORIGIN
XRSWRIT	STA	RSDATA	;SAVE DATA BYTE
X	LDA	#$88
XREL001	JSR	OPNCHK	;CAN WE WRITE TO THIS CHANNEL?
X;
XREL002	LDA	CTLBYTE
X	AND	#$30
X	TAY
X	CMP	#$20
X	BCS	OUTASCI	;IF NO TRANSLATE
X	LDA	RSDATA
X	CMP	#$9B	;ATASCII CARRIAGE RETURN
X	BNE	NOXLEL
X	LDA	#$0D	;ASCII CARRIAGE RETURN
XREL003	JSR	OUTBYTE
X	BMI	EREXIT	;IF ERROR, RETURN IT
XREL004	LDA	CTLBYTE
X	ASL	A	;AUTO LF DESIRED?
X	BPL	NOXMIT	;IF NO AUTO LF, DONE!
X	LDA	#$0A
X	BNE	OUTBYTE
X;
XNOXLEL	AND	#$7F	;GET RID OF REVERSE VIDEO BIT
X	DEY		;HEAVY XLATE?
X	BMI	OUTBYTE	;IF LIGHT XLATE, NO MORE TESTING
X;
X	CMP	#$20	;ELSE, CONTROL CODE?
X	BCC	NOXMIT	;IF SO, DONE!
X	CMP	#$7D	;RUBOUT, TILDE, OR ???
X	BCC	OUTBYTE	;IF NOT, SEND IT
XNOXMIT	LDY	#1	;ELSE, DONE
XEREXIT	RTS
X;
XOUTBYTE	STA	RSDATA	;SAVE DATA BYTE
XOUTASCI	LDA	CTLBYTE
X	AND	#$03
X	BEQ	OUTREAL	;LEAVE PARITY UNCHANGED
X	ASL	RSDATA	;DISCARD PARITY BIT
X	CMP	#3
X	BEQ	OUTMARK	;SET PARITY (CY=1 IF EQ)
X	LSR	A
X	LDA	RSDATA
XPGENLP	BCC	NOFLIP
X	EOR	#$80
XNOFLIP	ASL	A
X	BNE	PGENLP
XOUTMARK	ROR	RSDATA	;FORCE MARK PARITY IF CY=1
XOUTREAL	LDY	SOBPUT
X	INY
X	CPY	#SOBSIZ
X	BCC	BUFWAIT
X	LDY	#0
XBUFWAIT	JSR	TSTBKY	;SEE IF BREAK PRESSED (ABORT)
XREL05X	CPY	SOBGET	;ELSE, IS BUFFER FULL?
X	BEQ	BUFWAIT	;IF SO, WAIT FOR ROOM
X;
X	LDA	RSDATA	;GET BYTE TO SEND
XREL005	STA	SOBUF,Y	;AND SAVE IN BUFFER
XREL060	STY	SOBPUT
X;
X	SEI
X	LDA	#$08	;ENABLE ONLY END OF TRANSMIT INT.
XREL006	BIT	BDRATE
X	BMI	ST2BIT	;IF 2 STOP BITS ARE TO BE SENT
X	LDA	#$18	;ENABLE BOTH TRANS. INTERRUPTS
X;
XST2BIT	LDY	#0
XREL007	JSR	SETMSK
X	CLI		;REENABLE INTERRUPTS AGAIN
X;
X	INY		;Y=1, RETURN GOOD STATUS
X	RTS
X;
XRSREAD	LDA	#$84
XREL008	JSR	OPNCHK
XREL080	LDY	SIBGET
XREL081	CPY	SIBPUT	;BYTE IN BUFFER?
X	BEQ	RSREAD	;IF NOT, WAIT FOR IT
XREL009	LDA	SIBUF,Y	;COPY BYTE FROM BUFFER
X	INY
XREL090	STY	SIBGET
X	STA	RSDATA	;TO RETURN AREA
X;
X;	VERIFY PARITY IF REQUIRED
X;
XREL010	LDA	CTLBYTE
X	AND	#$0C	;TEST INCOMING PARITY?
X	BEQ	NOPTST	;NO PARITY TESTING
X	CMP	#$0C
X	BEQ	CLRPTY	;STRIP OFF PARITY (IGNORE)
X	AND	#$04	;TEST FOR EVEN/ODD PARITY
X	EOR	RSDATA	;FLIP ONE BIT IF TESTING FOR EVEN PARITY
XPTSTLP	BCC	PRTYOK	;FIRST PASS CY=0
X	EOR	#$80	;THEREAFTER, EACH 1 BITS FLIPS THE NEXT
XPRTYOK	ASL	A
X	BNE	PTSTLP	;IF ALL 8 BITS=0, DONE!
X	BCC	CLRPTY	;IF PARITY EVEN, CONTINUE
X	LDA	#$20	;ELSE, SET ERROR FLAG
XREL100	ORA	ERRFLGS
XREL101	STA	ERRFLGS
XCLRPTY	ASL	RSDATA	;CLEAR PARITY BIT IN RSDATA
X	LSR	RSDATA
X;
X;	DO LIGHT OR HEAVY TRANSLATION IF REQUIRED
X;
XNOPTST	LDA	CTLBYTE
X	AND	#$30
X	TAY
X	LDA	RSDATA	;LOAD DATA BYTE
X	CPY	#$20
X	BCS	NOXIN
X	AND	#$7F	;INSURE PARITY IS CLEARED
X	CMP	#$0D	;IF CR, REPLACE WITH $9B
X	BNE	NOTCRIN
X	LDA	#$9B
XNOTCRIN	DEY		;ELSE, DONE IF LIGHT XLATE
X	BMI	NOXIN
X	CMP	#$20	;OR TEST FOR PORTABILITY IF HEAVY
X	BCC	NOTPOR
X	CMP	#$7D	;20-7C ARE PORTABLE
X	BMI	NOXIN	;THE REST ARE CONVERTED TO CANT
XNOTPOR	LDA	CANT
X;
X;	THEN RETURN DATA BYTE TO ROM OS
X;
XNOXIN	LDY	#1	;ELSE, LEAVE IT AS IT IS
X	RTS
X;
X;	READ STATUS BYTES FOR A CHANNEL
X;
XRSSTAT	BIT	CHSTAT
X	BMI	SNOOP
XREL011	BIT	CCSTAT
X	BPL	RETSTA
XSNOOP	JSR	RDSTLN
X	BMI	NO8000
X	LDY	#0
X	LDX	#0
X	STX	DVSTAT+3
X	LDA	DVSTAT+2
X	PHA
X	LSR	A
X	LSR	A
X	BCS	ZERDCD
XSETDCD	LDX	#$CC
XZERDCD	LSR	A
X	BCS	ZERRNG
XSETRI	LDY	#$30
XZERRNG	STY	DAUX2Z
X	TXA
X	ORA	DAUX2Z
X	TAX
X	PLA
X	BMI	ZERDAT
X	INX
XZERDAT	STX	DVSTAT+1
X	ASL	A
X	AND	#$04
XSTEXIT	ORA	ERRFLGS	;MERGE WITH ERROR FLAGS
X	STA	DVSTAT
X	LDY	#0
XREL111	STY	ERRFLGS
X	STY	DVSTAT+2
X	INY
X	RTS
X;
XRETSTA	SEC
XREL112	LDA	SIBPUT
XREL113	SBC	SIBGET
X	STA	DVSTAT+1
X	SEC
XREL114	LDA	SOBPUT
XREL115	SBC	SOBGET
X	AND	#SOBSIZ-1
X	STA	DVSTAT+3
X	LDA	#0
X	BEQ	STEXIT
X;
XNO8000	LDA	#$0F
X	BNE	STEXIT
X;
XRDSTLN	JSR	ZSET
X	BMI	NO8000
XHR001	LDY	#HIGH[Z80STAT]
XLR001	LDA	#LOW[Z80STAT]
XREL012	JSR	XFER
X	LDY	#$DE
XREL013	JSR	ZZSET	;DO LAST PART OF ZSET
X	LDA	#'R'	;READ STATUS BACK TO ATARI
X	STA	DCMD
X	LDA	#$40
X	STA	DSTAT
X	LDY	#HIGH[DVSTAT+1]
X	LDA	#LOW[DVSTAT+1]
X	STA	DBUF
X	LDA	#2	;READ 2 BYTES
X;
XSIORW	STY	DBUF+1
X	STA	DAUX
X	STA	DLEN
X	LDA	#0
X	STA	DLEN+1
X	JMP	SIOV	;WRITE CODE INTO Z80
X;
X;	OPEN THE RS232 PORT
X;
XRSOPEN	LDA	CHSTAT
X	BMI	NOTOPN
X	LDY	#150		;PORT ALREADY OPEN
X	RTS
X;
XNOTOPN	LDY	#0
XREL130	STY	ERRFLGS
X	LDA	DAUX1Z		;SAVE AUX1 AS PORT STATE
X	ORA	#$40		;MARK PORT OPEN
XREL014	STA	CHSTAT		;AND NOT ACTIVE
X	INY
X	RTS
X;
X;	CLOSE THE RS232 PORT
X;
XRSCLOS	BIT	CHSTAT
X	BVS	SMPLCL		;IF NOT CCIO TO SHUT DOWN
X	LDA	BRKKEY
X	BEQ	SMPLCL
XREL140	LDA	RSDONE
X	BEQ	RSCLOS		;IF NOT DONE YET, LOOP
X	CLC
X	LDA	RTCLOK+2
X	ADC	#6
XRSCLWT	CMP	RTCLOK+2
X	BNE	RSCLWT
X;
X;	RESTORE INTERRUPT HANDLING WITHOUT INTERRUPTS
X;
X	SEI
XREL015	JSR	SHUTDN
X	CLI
XSMPLCL	LDY	#$C0
XREL016	STY	CCSTAT
XREL017	STY	CHSTAT
X	LDY	#1
X	RTS
X;
XSHUTDN	LDA	#$34		;ASSERT COMMAND LINE
X	STA	PBCTL
X	LDA	#0
XREL180	STA	SOBGET
XREL181	STA	SOBPUT
XREL019	LDA	SYSIRQ		;RESTORE SYSTEM IRQ VECTOR
X	STA	VIMIRQ
XREL020	LDA	SYSIRQ+1
X	STA	VIMIRQ+1
X;
X	LDY	#6		;RESTORE 3
XRSTRVC	LDA	OLDISRS-1,Y	;SERIAL ISR VECTORS
X	STA	VSERIN-1,Y
X	DEY
X	BNE	RSTRVC
X	LDA	#$3C		;CLEAR COMMAND LINE
X	LDY	#128
X	STY	BRKKEY
X	STA	PBCTL
X	RTS
X;
X;	CONFIGURE AN RS232 CHANNEL
X;
XRSXIO	LDA	DCMDZ
X	AND	#$0F
X	CMP	#9
X	BCS	RCMDER
X	TAY
X	LSR	A
X	BCS	RCMDER
XREL021	LDA	XIOTAB+1,Y
X	PHA
XREL022	LDA	XIOTAB,Y
X	PHA
X	RTS		;VECTOR TO XIO ROUTINE
X;
XRCMDER	LDY	#132	;INVALID COMMAND
X	RTS
X;
X;	START CONCURRENT MODE I/O
X;
XRSCCIO	BIT	CHSTAT
X	BPL	CCNOPN
X	LDY	#133	;IOCB NOT OPEN
X	RTS
X;
XCCNOPN	BVS	NCCMOD
X	LDY	#153	;CONCURRENT MODE I/O ACTIVE ERROR CODE
XCCXIT1	RTS
X;
XNCCMOD	JSR	RDSTLN
X	BMI	CCXIT1
XREL023	LDA	MONITR
X	AND	DVSTAT+2
X	BEQ	SETCC
X	LDY	#139	;FAILURE TO START CCIO
X	RTS
X;
X;	BRING UP TRANSFER FUNCTION IN ATR8000
X;
XSETCC	JSR	ZSET	;POINT TO Z80 LOCATION EC00
X	BMI	ISFAIL
X	LDA	#$FF
XREL024	STA	LEVEL
X	LDA	#$51
XREL025	STA	PINSEL
XHR004	LDY	#HIGH[CCIO]
XLR004	LDA	#LOW[CCIO]
XREL026	JSR	XFER
X	BPL	SETISR
XISFAIL	JMP	XIOXIT
X;
X;	SET UP SERIAL I/O IN ATARI
X;
XSETISR	LDY	#0
XREL027	STY	CCSTAT
X	LDA	#$73	;SET 2-CLOCK ASYNC. XFER,
X	SEI
XREL280	STY	SOBGET
XREL281	STY	SOBPUT
XREL282	STY	SIBGET
XREL283	STY	SIBPUT
X	STA	SKCTL	;KEYBOARD ACTIVE
X;
X	LDA	#$78
X	STA	AUDCTL
X;
XREL028	LDA	BDRATE
X	AND	#$0F	;EXTRACT BAUD RATE DATA
X	TAY
XREL029	LDA	BAUDH,Y	;SET UP 2 16-BIT CLOCKS
X	STA	AUDF1+2
X	STA	AUDF1+6
XREL030	LDA	BAUDL,Y
X	STA	AUDF1
X	STA	AUDF1+4
X	LDA	#$A0
X	STA	AUDF1+1
X	STA	AUDF1+3
X	STA	AUDF1+5
X	STA	AUDF1+7
X	LDY	#6
XHISISR	LDA	VSERIN-1,Y	;SAVE SYSTEM ISRS
XREL031	STA	OLDISRS-1,Y
XREL032	LDA	ISRTBL-1,Y	;AND INSERT MINE
X	STA	VSERIN-1,Y
X	DEY
X	BNE	HISISR
X	LDA	VIMIRQ		;TAKE OVER IRQ VECTOR
XREL033	STA	SYSIRQ
XLR005	LDA	#LOW[BRKIRQ]
X	STA	VIMIRQ
X	LDA	VIMIRQ+1
XREL034	STA	SYSIRQ+1
XHR005	LDA	#HIGH[BRKIRQ]
X	STA	VIMIRQ+1
XREL035	LDA	CHSTAT	;CCIO NOW ACTIVE!
X	AND	#$BF	;TURN OFF BIT 6
XREL036	STA	CHSTAT
X	AND	#$04
X	BEQ	NOINPT	;IF NO INPUT ALLOWED,SKIP ENABLING
X	LDA	#$20	;ELSE, ENABLE SERIAL INTERRUPTS
XNOINPT	INY
XREL037	JSR	SETMSK
X	CLI		;REENABLE INTERRUPTS
XREL038	JMP	XIOXIT
X;
X;	SET BAUD RATE AND NO. OF STOP BITS
X;
XRSBAUD	LDA	DAUX1Z	;THIS JUST SAVES BAUD
XREL039	STA	BDRATE	;RATE AND STOP BITS FLAG
X	LDA	DAUX2Z
X	BEQ	STMON
X	LDA	#$02	;LINE TO MONITOR IS ALWAYS SAME
XSTMON	STA	MONITR
XREL040	JMP	RTNOK
X;
X;	SET TRANSLATE MODE AND PARITY
X;	(XIO 38 IS ENTIRELY INTERNAL TO THE ATARI)
X;
XRSXLAT	LDA	DAUX1Z	;SAVE TRANSLATE PARAMETERS
XREL041	STA	CTLBYTE
X	LDA	DAUX2Z	;AND UNTRANSLATABLE CODE
XREL042	STA	CANT
XRTNOK	LDY	#1
X;
X;	COMMON XIO CALL EXIT
X;
XXIOXIT	LDA	CHSTAT	;RESTORE AUX1 FOR R/W ACTIVITY
X	STA	DAUX1Z
X	TYA		;SET CONDITION CODE FOR CALLER
XFAILED	RTS
X;
X;	CONTROL THE RS232 CONTROL LINES:
X;	  DTR, RTS, AND TD (TRANSMIT DATA)
X;
XRSCTL	BIT	CHSTAT
X	BVS	BLKCTL
X	LDA	DAUX1Z
X	AND	#3
X	LSR	A
X	BEQ	RTNOK
X	LDA	#$73
X	BCS	SETMRK
X	ORA	#$80
XSETMRK	STA	SKCTL
X	BNE	RTNOK
X;
XBLKCTL	LDX	#$51	;DATA PIN IS PORT 51
X	LDA	DAUX1Z
X	LSR	A
X	ROR	A
X	BCC	NOBITC
XREL043	JSR	SETBIT
XNOBITC	LDX	#$55	;CONTROL PIN IS 55
X	LDA	DAUX1Z
X	LSR	A
X	AND	#$50
X	BEQ	NOCTLC
X	AND	DAUX1Z	;SEE IF SET OR CLEARED
X	BEQ	TOBECLR
X	LDA	#$80
XTOBECLR	EOR	#$80
XREL044	JSR	SETBIT
XNOCTLC	JMP	XIOXIT
X;
XSETBIT	STX	PINSEL
X	ASL	A
X	LDA	#0
X	ROL	A
XREL045	STA	LEVEL
XREL046	JSR	ZSET
X	BMI	FAILED
XHR006	LDY	#HIGH[Z80CTL]
XLR006	LDA	#LOW[Z80CTL]
X;
X;	ATR8000 SERIAL I/O ROUTINES
X;
XXFER	STA	DBUF
X	LDA	#'W'
X	STA	DCMD
X	LDA	#$80
X	STA	DSTAT
X	LDA	#CCIOL
XREL047	JSR	SIORW
X	BMI	FAILED
X	LDY	#'G'
X	BNE	ZCMDO
X;
XZSET	LDY	#$DC	;POINT TO $DC00
XZZSET	STY	DAUX+1	;POINT TO ANY PAGE
X	LDY	#'S'
XZCMDO	STY	DCMD
X	LDY	#$00
X	STY	DSTAT
X	STY	DAUX
X	INY
X	STY	DUNIT
X	INY
X	STY	DTIMEO
X	LDY	#'Z'
X	STY	DDEVIC
X	JMP	SIOV
X;
XBRKIRQ	BIT	IRQEN		;BREAK KEY PRESSED
X	BPL	HAVEBK		;IF SO, HANDLE IT
XREL048	JMP	(SYSIRQ)	;ELSE, LET ROM HANDLE IT
X;
XHAVEBK	PHA
X	TYA
X	PHA
XREL049	JSR	SHUTDN
X	ASL	BRKKEY
X	LDA	#$40
XREL050	ORA	CHSTAT	;SET CCIO-INACTIVE BIT
XREL051	STA	CHSTAT
X	BNE	INTRET
X;
XRSSERO	CLD
X	TYA
X	PHA
XREL500	LDY	SOBGET
XREL501	CPY	SOBPUT
X	BNE	NALDON	;IF NOT DONE THEN SEND NEXT BYTE
X	LDA	POKMSK
X	AND	#$E7	;TURN OFF OUTPUT INTERRUPTS
X	LDY	#1	;NEW VALUE OF RSDONE
XREL052	JSR	OUTMSK	;UPDATE POKMSK, IRQEN AND RSDONE
X	BNE	INTRET
X;
XNALDON	INY		;POINT TO NEXT BYTE
X	CPY	#SOBSIZ
X	BCC	REL053
X	LDY	#0
XREL053	LDA	SOBUF,Y
X	STA	SEROUT	;SEND BYTE TO RS232 PORT
XREL530	STY	SOBGET
XOIDON	LDA	IRQEN
X	EOR	#$FF
X	AND	POKMSK
X	AND	#$20
X	BEQ	NOINPI
X	LDA	#$D4
X	AND	POKMSK
X	STA	IRQEN
X	LDA	POKMSK
X	STA	IRQEN
XREL054	JSR	SERIH
XNOINPI	LDA	#$08
X	BIT	IRQEN	;OUTINT DONE?
X	BEQ	OIDON
XINTRET	PLA
X	TAY
X	PLA
X	RTI
X;
XRSSERI	CLD
X	TYA
X	PHA
XREL055	JSR	SERIH
X	PLA
X	TAY
X	PLA
X	RTI
X;
XSERIH	LDA	SERIN	;READ BYTE FROM HARDWARE
XREL550	LDY	SIBPUT	;GET BUFFER POINTER
XREL056	STA	SIBUF,Y	;SAVE BYTE IN BUFFER
X	LDA	SKCTL
X	STA	SKRES
X	EOR	#$FF	;REPORT FRAMING OR
X	AND	#$C0	;OTHER H/W ERRORS
XREL560	ORA	ERRFLGS
X	INY		;BUMP BUFFER POINTER
XREL561	CPY	SIBGET	;BUFFER OVERFLOW?
XREL562	STY	SIBPUT
X	BNE	UPDERR	;IF NOT SAVE GET POINTER
X	INY
X	ORA	#$10	;SET OVERRUN FLAG
XREL563	STY	SIBGET	;ERASE OLDEST BYTE IN BUFFER
XUPDERR	STA	ERRFLGS
X	RTS
X;
X;	UPDATE POKMSK, IRQEN AND RSDONE
X;
XSETMSK	ORA	POKMSK	;MERGE IN OLD BITS
XOUTMSK	STA	POKMSK
X	STA	IRQEN	;UPDATE HARDWARE REGISTER
XREL564	STY	RSDONE	;UPDATE DONE FLAG
X	RTS
X;
X;	TEST FOR RS232 PORT NOT OPEN OR BREAK PRESSED
X;
XOPNCHK	BIT	CHSTAT	;IS ACTION VALID?
X	BEQ	ERRNWR	;IF OPERATION NOT ENABLED
X	BMI	ERRNOP	;IF NOT OPEN
X;
X;	FIELD A BREAK KEY PRESSED WHEN RS232
X;	CHANNEL IS ACTIVE.
X;
XTSTBKY	BIT	CHSTAT	;IN CCIO?
X	BMI	ERRNOP	;NOT EVEN OPEN
X	BVC	INCCIO
XREL057	LDA	CCSTAT
X	BMI	NOBREAK
X	LDY	#$80
X	STY	BRKKEY
XREL058	STY	CCSTAT
X;
X	DB	$2C	;SKIP TO 'BKABRT'
XERRNWR	TAY		;WRITE NOT ENABLED
X	DEY		;I.E. $87
X	DB	$2C	;SKIP TO 'BKABRT'
XERRNOP	LDY	#133	;NOT OPEN ERROR
XBKABRT	PLA		;ELSE, FLUSH RETURN ADDRESS
X	PLA
X	TYA
XINCCIO	RTS
X;
XNOBREAK	JSR	RSCCIO	;START UP CCIO
X	BMI	BKABRT
X	RTS
X;
X;  ADJUST TOP OF OS POINTER
X;
XRSINIT	JSR	$07E0	;INITIALIZE DOS FIRST
XLR008	LDA	#LOW[MEMEND]
X	STA	MEMTOP
XHR008	LDA	#HIGH[MEMEND]
X	STA	MEMTOP+1
X;
X;  INSTALL RS232 HANDLER IN HANDLER TABLE
X;
X	LDY	#0
XFNDSLT	LDA	HATABS,Y ;LOOK FOR EMPTY SLOT IN HANDLER TABLE
X	BEQ	CLDSLT	;IF FOUND
X	CMP	#'R'	;ALREADY PRESENT?
X	BEQ	GOTSLT	;IF SO, REUSE IT
X	INY
X	INY
X	INY
X	CPY	#30	;END OF TABLE?
X	BCC	FNDSLT
X	RTS		;YES, RETURN WITH CY=1
X;
XCLDSLT
XGOTSLT	LDA	#'R'		;DEVICE NAME IS 'R'
X	STA	RSDONE
X	STA	HATABS,Y
X	SEC
XLR009	LDA	#LOW[RSVECT]	;POINT TO RS232 HANDLER ENTRY TABLE
X	STA	HATABS+1,Y
XHR009	LDA	#HIGH[RSVECT]
X	STA	HATABS+2,Y
X	LDY	#1
X	RTS
X;
XRSVECT	DW	RSOPEN-1,RSCLOS-1
X	DW	RSREAD-1,RSWRIT-1
X	DW	RSSTAT-1,RSXIO-1
X;
XXIOTAB	DW	RCMDER-1,RSCTL-1
X	DW	RSBAUD-1,RSXLAT-1
X	DW	RSCCIO-1
X;
XISRTBL	DW	RSSERI	;VALUES FOR INTERRUPT VECTORS
X	DW	RSSERO
X	DW	RSSERO
XVECEND	=	*-2
X;
X;	CONCURRENT I/O ROUTINE TO DOWNLOAD TO Z80
X;
XCCIO	DB	$F3		;DI
X	DB	$CD,$68,$F0	;CALL  SHUTDOWN
X	DB	$3E,$21		;LD    A,00100001B
X	DB	$D3,$83		;OUT   (CTC3),A
X	DB	$32,$2E,$FF	;LD    (DRVOFF),A
X	DB	$06,$04		;LD    B,04H
X	DB	$DB,$50	;CCIOLP	;IN    A,(50H)
X	DB	$07		;RLCA
X	DB	$D3,$50		;OUT   (50H),A
X	DB	$DB,$70		;IN    A,(70H)
X	DB	$07		;RLCA
X	DB	$D3,$51		;OUT   (51H),A
X	DB	$A0		;AND   B
X	DB	$C2,$0D,$DC	;JP    NZ,CCIOLP
X	DB	$3E,$FF		;LD    A,0FFH
X	DB	$D3,$51		;OUT   (51H),A
X	DB	$C3,$C6,$F7	;JMP   PWRWAIT+8
XCCIOL	=	*-CCIO
X;
XZ80CTL	DB	$3E		;LD    A,0FFH
XLEVEL	DB	$FF
X	DB	$D3		;OUT   (051H),A
XPINSEL	DB	$51
X	DB	$C9		;RET
X;
XZ80STAT	DB	$DB,$50		;IN    A,(050H)
X	DB	$32,$01,$DE	;LD    ($DE01),A
X	DB	$C9		;RET
X;
X;	BAUD RATE TABLES
X;
XBAUDH	DB	HIGH[2976]	;0   300 BPS
X	DB	HIGH[19661]	;1    45.5
X	DB	HIGH[17891]	;2    50
X	DB	HIGH[15727]	;3    56.875
X	DB	HIGH[11925]	;4    75
X	DB	HIGH[8128]	;5   110
X	DB	HIGH[6646]	;6   134.5
X	DB	HIGH[5959]	;7   150
X	DB	HIGH[2976]	;8   300
X	DB	HIGH[1484]	;9   600
X	DB	HIGH[739]	;10 1200
X	DB	HIGH[490]	;11 1800
X	DB	HIGH[366]	;12 2400
X	DB	HIGH[179]	;13 4800
X	DB	HIGH[86]	;14 9600
X	DB	HIGH[40]	;15 19,200 BPS
X;
XBAUDL	DB	LOW[2976]
X	DB	LOW[19661]
X	DB	LOW[17891]
X	DB	LOW[15727]
X	DB	LOW[11925]
X	DB	LOW[8128]
X	DB	LOW[6646]
X	DB	LOW[5959]
X	DB	LOW[2976]
X	DB	LOW[1484]
X	DB	LOW[739]
X	DB	LOW[490]
X	DB	LOW[366]
X	DB	LOW[179]
X	DB	LOW[86]
X	DB	LOW[40]
X;
XCHSTAT	DB	$C0	;BIT 7=CHANNEL CLOSED
X			;    6=CONCURRENT I/O INACTIVE
X			;    3=OUTPUT MODE
X			;    2=INPUT MODE
X;
XCTLBYTE	DB	0	;BIT 6=ADD LF TO CR (OUTPUT)
X			;BITS 5-4=XLATE MODE
X			;BITS 3-2=INPUT PARITY CTL
X			;BITS 1-0=OUTPUT PARITY CONTROL
XBDRATE	DB	0	;BIT 7=1 IF 2 STOP BITS
X			;BITS 3-0 = BAUDRATE
XCANT	DB	0	;WONT TRANSLATE CHARACTER FOR HEAVY XLTER
XMONITR	DB	0	;SIGNALS TO MONITOR
XCCSTAT	DB	$80	;IF -, STATUS IS NORMAL
X			;IF -, BYTE COUNTS ARE IN STATUS
XOLDISRS	DS	6	;VECTORS REPLACED IF CCIO ACTIVE
XSYSIRQ	DS	2	;SIMULATED DOS ENTRY ADDRESS
X;
XERRFLGS	DB	0	;ERROR STATUS
XRSDONE	DB	0	;IF = 0, RS232 PORT IS ACTIVE
XSIBGET	DB	$0
XSIBPUT	DB	$0
XSOBGET	DB	$0
XSOBPUT	DB	$0
X;
XSOBUF	DS	SOBSIZ
XSIBUF	DS	256
XMEMEND	=	*
XLEN	=	*-RSWRIT;LENGTH OF DRIVER=$6E2
X;
X;  AUTORUN.SYS PROGRAM TO INSTALL THE RS232 HANDLER
X;
X;  TURN OFF DTR FIRST
X;
XSTART	LDA	#$80
X	LDX	#$55
X	JSR	SETBIT
X;
X;  RELOCATE ABSOLUTE INSTRUCTION ADDRESSES AND VECTORS
X;
X	SEC
X	LDA	#LOW[RSWRIT]
X	STA	SPTR
X	SBC	MEMTOP
X	STA	DIF
X	LDA	#HIGH[RSWRIT]
X	STA	SPTR+1
X	SBC	MEMTOP+1
X	STA	DIF+1
X	LDX	#0
XRELOOP	CLC
X	LDA	RELTAB,X
X	BEQ	M256
X	ADC	SPTR
X	STA	SPTR
X	BCC	NOCY1
XM256	INC	SPTR+1
X	BCC	NOREL1
XNOCY1	LDY	#0
X	SEC
X	LDA	(SPTR),Y
X	SBC	DIF
X	STA	(SPTR),Y
X	INY
X	LDA	(SPTR),Y
X	SBC	DIF+1
X	STA	(SPTR),Y
XNOREL1	INX
X	CPX	#RELTSZ
X	BCC	RELOOP
X;
X;  RELOCATE HIGH/LOW IMMEDIATE MEMORY REFERENCES
X;
X	LDX	#0
XSCRELP	LDA	HRELT,X
X	STA	SPTR
X	LDA	LRELT,X
X	STA	DPTR
X	INX
X	LDA	HRELT,X
X	STA	SPTR+1
X	LDA	LRELT,X
X	STA	DPTR+1
X	INX
X	LDY	#0
X	SEC
X	LDA	(DPTR),Y
X	SBC	DIF
X	STA	(DPTR),Y
X	LDA	(SPTR),Y
X	SBC	DIF+1
X	STA	(SPTR),Y
X	CPX	#HLRTSZ
X	BCC	SCRELP
X;
X;  REDEFINE DOSINIT VECTOR IN ZERO PAGE
X;
X	LDA	DOSINI
X	STA	RSINIT+1
X	LDA	DOSINI+1
X	STA	RSINIT+2
XLR007	LDA	#LOW[RSINIT]
X	STA	DOSINI
XHR007	LDA	#HIGH[RSINIT]
X	STA	DOSINI+1
X;
X;  COPY HANDLER DOWN TO ITS RESIDENT MEMORY AREA
X;
X	LDA	MEMTOP
X	STA	DPTR
X	LDA	MEMTOP+1
X	STA	DPTR+1
X	LDA	#LOW[RSWRIT]
X	STA	SPTR
X	LDA	#HIGH[RSWRIT]
X	STA	SPTR+1
X	LDX	#HIGH[LEN+255]
X	LDY	#0
XMVLOOP	LDA	(SPTR),Y
X	STA	(DPTR),Y
X	INY
X	BNE	MVLOOP
X	INC	SPTR+1
X	INC	DPTR+1
X	DEX
X	BNE	MVLOOP
XREL059	JMP	RSINIT+3
X;
X;  RELOCATION TABLE FOR ABSOLUTE INSTRUCTIONS
X;
XRELTAB	DB	REL001+1-RSWRIT
X	DB	REL002-REL001
X	DB	REL003-REL002
X	DB	REL004-REL003
X	DB	OUTASCI-REL004
X	DB	OUTREAL-OUTASCI
X	DB	BUFWAIT-OUTREAL
X	DB	REL05X-BUFWAIT
X	DB	REL005-REL05X
X	DB	REL060-REL005
X	DB	REL006-REL060
X	DB	REL007-REL006
X	DB	REL008-REL007
X	DB	REL080-REL008
X	DB	REL081-REL080
X	DB	REL009-REL081
X	DB	REL090-REL009
X	DB	REL010-REL090
X	DB	REL100-REL010
X	DB	REL101-REL100
X	DB	NOPTST-REL101
X	DB	RSSTAT-NOPTST
X	DB	REL011-RSSTAT
X	DB	SNOOP-REL011
X	DB	STEXIT-SNOOP
X	DB	REL111-STEXIT
X	DB	REL112-REL111
X	DB	REL113-REL112
X	DB	REL114-REL113
X	DB	REL115-REL114
X	DB	RDSTLN-REL115
X	DB	REL012-RDSTLN
X	DB	REL013-REL012
X	DB	RSOPEN-REL013
X	DB	REL130-RSOPEN
X	DB	REL014-REL130
X	DB	RSCLOS-REL014
X	DB	REL140-RSCLOS
X	DB	REL015-REL140
X	DB	REL016-REL015
X	DB	REL017-REL016
X	DB	REL180-REL017
X	DB	REL181-REL180
X	DB	REL019-REL181
X	DB	REL020-REL019
X	DB	RSTRVC-REL020
X	DB	REL021-RSTRVC
X	DB	REL022-REL021
X	DB	RSCCIO-REL022
X	DB	NCCMOD-RSCCIO
X	DB	REL023-NCCMOD
X	DB	SETCC-REL023
X	DB	REL024-SETCC
X	DB	REL025-REL024
X	DB	REL026-REL025
X	DB	ISFAIL-REL026
X	DB	REL027-ISFAIL
X	DB	REL280-REL027
X	DB	REL281-REL280
X	DB	REL282-REL281
X	DB	REL283-REL282
X	DB	REL028-REL283
X	DB	REL029-REL028
X	DB	REL030-REL029
X	DB	REL031-REL030
X	DB	REL032-REL031
X	DB	REL033-REL032
X	DB	REL034-REL033
X	DB	REL035-REL034
X	DB	REL036-REL035
X	DB	REL037-REL036
X	DB	REL038-REL037
X	DB	REL039-REL038
X	DB	STMON-REL039
X	DB	REL040-STMON
X	DB	REL041-REL040
X	DB	REL042-REL041
X	DB	XIOXIT-REL042
X	DB	RSCTL-XIOXIT
X	DB	REL043-RSCTL
X	DB	REL044-REL043
X	DB	NOCTLC-REL044
X	DB	SETBIT-NOCTLC
X	DB	REL045-SETBIT
X	DB	REL046-REL045
X	DB	REL047-REL046
X	DB	REL048-REL047
X	DB	REL049-REL048
X	DB	REL050-REL049
X	DB	REL051-REL050
X	DB	REL500-REL051
X	DB	REL501-REL500
X	DB	REL052-REL501
X	DB	REL053-REL052
X	DB	REL530-REL053
X	DB	REL054-REL530
X	DB	REL055-REL054
X	DB	REL550-REL055
X	DB	REL056-REL550
X	DB	REL560-REL056
X	DB	REL561-REL560
X	DB	REL562-REL561
X	DB	REL563-REL562
X	DB	UPDERR-REL563
X	DB	REL564-UPDERR
X	DB	OPNCHK-REL564
X	DB	TSTBKY-OPNCHK
X	DB	REL057-TSTBKY
X	DB	REL058-REL057
X	DB	NOBREAK-REL058
X	DB	RSVECT-1-NOBREAK,2
X	DB	2,2
X	DB	2,2
X	DB	2,2
X	DB	2,2
X	DB	2
X	DB	2,2,2
X	DB	0,0,REL059+1-VECEND-512
XRELTSZ	=	*-RELTAB
X;
X;  HIGH/LOW IMMEDIATE MEMORY REFERENCE TABLE
X;
XHRELT	DW	HR001+1
X	DW	HR004+1
X	DW	HR005+1
X	DW	HR006+1
X	DW	HR008+1
X	DW	HR009+1
X	DW	HR007+1
XHLRTSZ	=	*-HRELT
X;
XLRELT	DW	LR001+1
X	DW	LR004+1
X	DW	LR005+1
X	DW	LR006+1
X	DW	LR008+1
X	DW	LR009+1
X	DW	LR007+1
X;
X	END	START,
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > hd_diff
X*** atr232.asm
X--- atr232hd.asm
X***************
X*** 239,245 ****
X  HR001	LDY	#HIGH[Z80STAT]
X  LR001	LDA	#LOW[Z80STAT]
X  REL012	JSR	XFER
X! 	LDY	#$DE
X  REL013	JSR	ZZSET	;DO LAST PART OF ZSET
X  	LDA	#'R'	;READ STATUS BACK TO ATARI
X  	STA	DCMD
X--- 239,245 ----
X  HR001	LDY	#HIGH[Z80STAT]
X  LR001	LDA	#LOW[Z80STAT]
X  REL012	JSR	XFER
X! 	LDY	#$EF
X  REL013	JSR	ZZSET	;DO LAST PART OF ZSET
X  	LDA	#'R'	;READ STATUS BACK TO ATARI
X  	STA	DCMD
X***************
X*** 506,512 ****
X  	LDY	#'G'
X  	BNE	ZCMDO
X  ;
X! ZSET	LDY	#$DC	;POINT TO $DC00
X  ZZSET	STY	DAUX+1	;POINT TO ANY PAGE
X  	LDY	#'S'
X  ZCMDO	STY	DCMD
X--- 506,512 ----
X  	LDY	#'G'
X  	BNE	ZCMDO
X  ;
X! ZSET	LDY	#$EC	;POINT TO $EC00
X  ZZSET	STY	DAUX+1	;POINT TO ANY PAGE
X  	LDY	#'S'
X  ZCMDO	STY	DCMD
X***************
X*** 702,708 ****
X  	DB	$07		;RLCA
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$A0		;AND   B
X! 	DB	$C2,$0D,$DC	;JP    NZ,CCIOLP
X  	DB	$3E,$FF		;LD    A,0FFH
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$C3,$C6,$F7	;JMP   PWRWAIT+8
X--- 702,708 ----
X  	DB	$07		;RLCA
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$A0		;AND   B
X! 	DB	$C2,$0D,$EC	;JP    NZ,CCIOLP
X  	DB	$3E,$FF		;LD    A,0FFH
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$C3,$C6,$F7	;JMP   PWRWAIT+8
X***************
X*** 715,721 ****
X  	DB	$C9		;RET
X  ;
X  Z80STAT	DB	$DB,$50		;IN    A,(050H)
X! 	DB	$32,$01,$DE	;LD    ($DE01),A
X  	DB	$C9		;RET
X  ;
X  ;	BAUD RATE TABLES
X--- 715,721 ----
X  	DB	$C9		;RET
X  ;
X  Z80STAT	DB	$DB,$50		;IN    A,(050H)
X! 	DB	$32,$01,$EF	;LD    ($EF01),A
X  	DB	$C9		;RET
X  ;
X  ;	BAUD RATE TABLES
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > hx_diff
X*** atr232.asm
X--- atr232hx.asm
X***************
X*** 239,245 ****
X  HR001	LDY	#HIGH[Z80STAT]
X  LR001	LDA	#LOW[Z80STAT]
X  REL012	JSR	XFER
X! 	LDY	#$DE
X  REL013	JSR	ZZSET	;DO LAST PART OF ZSET
X  	LDA	#'R'	;READ STATUS BACK TO ATARI
X  	STA	DCMD
X--- 239,245 ----
X  HR001	LDY	#HIGH[Z80STAT]
X  LR001	LDA	#LOW[Z80STAT]
X  REL012	JSR	XFER
X! 	LDY	#$E2
X  REL013	JSR	ZZSET	;DO LAST PART OF ZSET
X  	LDA	#'R'	;READ STATUS BACK TO ATARI
X  	STA	DCMD
X***************
X*** 506,512 ****
X  	LDY	#'G'
X  	BNE	ZCMDO
X  ;
X! ZSET	LDY	#$DC	;POINT TO $DC00
X  ZZSET	STY	DAUX+1	;POINT TO ANY PAGE
X  	LDY	#'S'
X  ZCMDO	STY	DCMD
X--- 506,512 ----
X  	LDY	#'G'
X  	BNE	ZCMDO
X  ;
X! ZSET	LDY	#$E0	;POINT TO $E000
X  ZZSET	STY	DAUX+1	;POINT TO ANY PAGE
X  	LDY	#'S'
X  ZCMDO	STY	DCMD
X***************
X*** 690,696 ****
X  ;	CONCURRENT I/O ROUTINE TO DOWNLOAD TO Z80
X  ;
X  CCIO	DB	$F3		;DI
X! 	DB	$CD,$68,$F0	;CALL  SHUTDOWN
X  	DB	$3E,$21		;LD    A,00100001B
X  	DB	$D3,$83		;OUT   (CTC3),A
X  	DB	$32,$2E,$FF	;LD    (DRVOFF),A
X--- 690,696 ----
X  ;	CONCURRENT I/O ROUTINE TO DOWNLOAD TO Z80
X  ;
X  CCIO	DB	$F3		;DI
X! 	DB	$EA,$EA,$EA	;$CD,$68,$F0	;(DID)CALL SHUTDOWN
X  	DB	$3E,$21		;LD    A,00100001B
X  	DB	$D3,$83		;OUT   (CTC3),A
X  	DB	$32,$2E,$FF	;LD    (DRVOFF),A
X***************
X*** 702,708 ****
X  	DB	$07		;RLCA
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$A0		;AND   B
X! 	DB	$C2,$0D,$DC	;JP    NZ,CCIOLP
X  	DB	$3E,$FF		;LD    A,0FFH
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$C3,$C6,$F7	;JMP   PWRWAIT+8
X--- 702,708 ----
X  	DB	$07		;RLCA
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$A0		;AND   B
X! 	DB	$C2,$0D,$E0	;JP    NZ,CCIOLP
X  	DB	$3E,$FF		;LD    A,0FFH
X  	DB	$D3,$51		;OUT   (51H),A
X  	DB	$C9		;$C3,$C6,$F7	;(DID)JMP PWRWAIT+8
X***************
X*** 705,711 ****
X  	DB	$C2,$0D,$DC	;JP    NZ,CCIOLP
X  	DB	$3E,$FF		;LD    A,0FFH
X  	DB	$D3,$51		;OUT   (51H),A
X! 	DB	$C3,$C6,$F7	;JMP   PWRWAIT+8
X  CCIOL	=	*-CCIO
X  ;
X  Z80CTL	DB	$3E		;LD    A,0FFH
X--- 705,711 ----
X  	DB	$C2,$0D,$E0	;JP    NZ,CCIOLP
X  	DB	$3E,$FF		;LD    A,0FFH
X  	DB	$D3,$51		;OUT   (51H),A
X! 	DB	$C9		;$C3,$C6,$F7	;(DID)JMP PWRWAIT+8
X  CCIOL	=	*-CCIO
X  ;
X  Z80CTL	DB	$3E		;LD    A,0FFH
X***************
X*** 715,721 ****
X  	DB	$C9		;RET
X  ;
X  Z80STAT	DB	$DB,$50		;IN    A,(050H)
X! 	DB	$32,$01,$DE	;LD    ($DE01),A
X  	DB	$C9		;RET
X  ;
X  ;	BAUD RATE TABLES
X--- 715,721 ----
X  	DB	$C9		;RET
X  ;
X  Z80STAT	DB	$DB,$50		;IN    A,(050H)
X! 	DB	$32,$01,$E2	;LD    ($E201),A
X  	DB	$C9		;RET
X  ;
X  ;	BAUD RATE TABLES
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > atr8500.asm
X	TITLE	'ATR8500 AUTORUN.SYS INITIALIZER FOR RS232 I/O'
X;
X;
X;  ATR 8000 AUTORUN.SYS by C.Marslett
X;  modified by Richard Morris for the ATR 8500
X;  918-437-7479 (2/23/86)
X;
X;
X;  WORK AREA FOR AUTORUN PROGRAM
X;
XORIGIN	=	$3400
XDIF	=	$D4
XSPTR	=	$D6
XDPTR	=	$D8
X;
XMEMTOP	=	$02E7
X;
X;  CONFIGURATION DATA
X;
XSOBSIZ	=	32	;32 BYTE OUTPUT BUFFER
X;
X;  DRIVER DATA AREAS
X;
XPOKMSK	=	$10
XBRKKEY	=	$11
XRTCLOK	=	$12
XDCMDZ	=	$22
XDAUX1Z	=	$2A
XDAUX2Z	=	$2B
XRSDATA	=	$43	;DATA BYTE NOT BUFFERED YET
XERRFLGS	=	$44	;ERROR STATUS
XRSDONE	=	$45	;IF = 0, RS232 PORT IS ACTIVE
XSIBGET	=	$46
XSIBPUT	=	$47
XSOBGET	=	$48
XSOBPUT	=	$49
X;
XVSERIN	=	$020A
XVIMIRQ	=	$0216
XCDTMV3	=	$021C
XCDTMF3	=	$022A
XSSKCTL	=	$0232
XDVSTAT	=	$02EA
XDDEVIC	=	$0300
XDUNIT	=	$0301
XDCMD	=	$0302
XDSTAT	=	$0303
XDBUF	=	$0304
XDTIMEO	=	$0306
XDLEN	=	$0308
XDAUX	=	$030A
XHATABS	=	$031A
XWBITMP	=	$1629
X;
XAUDF1	=	$D200
XAUDCTL	=	$D208
XSKRES	=	$D20A
XSERIN	=	$D20D
XSEROUT	=	$D20D
XIRQEN	=	$D20E
XSKCTL	=	$D20F
XPBCTL	=	$D303
X;
XSIOV	=	$E459
X;
X;	WRITE A BYTE TO THE RS232 PORT
X;
X	ORG	ORIGIN
XRSWRIT	STA	RSDATA	;SAVE DATA BYTE
X	LDA	#$88
XREL001	JSR	OPNCHK	;CAN WE WRITE TO THIS CHANNEL?
X;
XREL002	LDA	CTLBYTE
X	AND	#$30
X	TAY
X	CMP	#$20
X	BCS	OUTASCI	;IF NO TRANSLATE
X	LDA	RSDATA
X	CMP	#$9B	;ATASCII CARRIAGE RETURN
X	BNE	NOXLEL
X	LDA	#$0D	;ASCII CARRIAGE RETURN
XREL003	JSR	OUTBYTE
X	BMI	EREXIT	;IF ERROR, RETURN IT
XREL004	LDA	CTLBYTE
X	ASL	A	;AUTO LF DESIRED?
X	BPL	NOXMIT	;IF NO AUTO LF, DONE!
X	LDA	#$0A
X	BNE	OUTBYTE
X;
XNOXLEL	AND	#$7F	;GET RID OF REVERSE VIDEO BIT
X	DEY		;HEAVY XLATE?
X	BMI	OUTBYTE	;IF LIGHT XLATE, NO MORE TESTING
X;
X	CMP	#$20	;ELSE, CONTROL CODE?
X	BCC	NOXMIT	;IF SO, DONE!
X	CMP	#$7D	;RUBOUT, TILDE, OR ???
X	BCC	OUTBYTE	;IF NOT, SEND IT
XNOXMIT	LDY	#1	;ELSE, DONE
XEREXIT	RTS
X;
XOUTBYTE	STA	RSDATA	;SAVE DATA BYTE
XOUTASCI	LDA	CTLBYTE
X	AND	#$03
X	CMP	#3
X	BNE	OUTREAL	;LEAVE PARITY UNCHANGED
X	ASL	RSDATA	;DISCARD PARITY BIT
X	SEC
X	ROR	RSDATA	;FORCE MARK PARITY IF CY=1
XOUTREAL	LDY	SOBPUT
X	INY
X	CPY	#SOBSIZ
X	BCC	BUFWAIT
X	LDY	#0
XBUFWAIT	JSR	TSTBKY	;SEE IF BREAK PRESSED (ABORT)
X	CPY	SOBGET	;ELSE, IS BUFFER FULL?
X	BEQ	BUFWAIT	;IF SO, WAIT FOR ROOM
X;
X	LDA	RSDATA	;GET BYTE TO SEND
XREL005	STA	SOBUF,Y	;AND SAVE IN BUFFER
X	STY	SOBPUT
X;
X	SEI
X	LDA	#$08	;ENABLE ONLY END OF TRANSMIT INT.
X	LDY	#$00	
XREL007	JSR	SETMSK
X	CLI		;REENABLE INTERRUPTS AGAIN
X;
X	INY		;Y=1, RETURN GOOD STATUS
X	RTS
X;
XRSREAD	LDA	#$84
XREL008	JSR	OPNCHK
X	LDY	SIBGET
X	CPY	SIBPUT	;BYTE IN BUFFER?
X	BEQ	RSREAD	;IF NOT, WAIT FOR IT
XREL009	LDA	SIBUF,Y	;COPY BYTE FROM BUFFER
X	INY
X	STY	SIBGET
X	STA	RSDATA	;TO RETURN AREA
X;
X;	STRIP PARITY IF REQUIRED
X;
XREL010	LDA	CTLBYTE
X	AND	#$0C	;TEST INCOMING PARITY?
X	CMP	#$0C
X	BNE	NOPTST	;NO PARITY TESTING
X	ASL	RSDATA	;CLEAR PARITY BIT IN RSDATA
X	LSR	RSDATA
X;
X;	DO LIGHT OR HEAVY TRANSLATION IF REQUIRED
X;
XNOPTST	LDA	CTLBYTE
X	AND	#$30
X	TAY
X	LDA	RSDATA	;LOAD DATA BYTE
X	CPY	#$20
X	BCS	NOXIN
X	AND	#$7F	;INSURE PARITY IS CLEARED
X	CMP	#$0D	;IF CR, REPLACE WITH $9B
X	BNE	NOTCRIN
X	LDA	#$9B
XNOTCRIN	DEY		;ELSE, DONE IF LIGHT XLATE
X	BMI	NOXIN
X	CMP	#$20	;OR TEST FOR PORTABILITY IF HEAVY
X	BCC	NOTPOR
X	CMP	#$7D	;20-7C ARE PORTABLE
X	BMI	NOXIN	;THE REST ARE CONVERTED TO CANT
XNOTPOR	LDA	CANT
X;
X;	THEN RETURN DATA BYTE TO ROM OS
X;
XNOXIN	LDY	#1	;ELSE, LEAVE IT AS IT IS
X	RTS
X;
X;	READ STATUS BYTES FOR A CHANNEL
X;
XRSSTAT	BIT	CHSTAT
X	BMI	SNOOP
XREL011	BIT	CCSTAT
X	BPL	RETSTA
XSNOOP	JSR	RDSTLN
X	BMI	NO8000
X	LDA	LOCST
X	LSR	A
X	LSR	A
X	LSR	A
X	AND	#$07	;EXTRACT CONTROL LINES
X	TAY
X	LDA	STRET,Y
X	STA	DVSTAT+1
X	LDX	#0
X	STX	DVSTAT+3
X	LDA	DVSTAT+2
X	LDA	LOCST
X	BPL	NOBRK
X	DEC	DVSTAT+1
XNOBRK	EOR	#$FF
X	AND	MON1
X	BEQ	STEXIT
X	AND	#$04
XSTEXIT	ORA	ERRFLGS	;MERGE WITH ERROR FLAGS
X	STA	DVSTAT
X	LDY	#0
X	STY	ERRFLGS
X	STY	DVSTAT+2
X	INY
XCANNOT	RTS
X;
XRETSTA	SEC
X	LDA	SIBPUT
X	SBC	SIBGET
X	STA	DVSTAT+1
X	SEC
X	LDA	SOBPUT
X	SBC	SOBGET
X	STA	DVSTAT+3
X	LDA	#0
X	BEQ	STEXIT
X;
XNO8000	LDA	#$0F
X	BNE	STEXIT
X;
XRDSTLN	LDY	#HIGH[SIOSUP]
X	LDA	#LOW[SIOSUP]
X	LDX	#$E2
X	JSR	XFER
X	BMI	CANNOT
X	LDX	#$E2
X	STX	DAUX+1
X	LDX	#$FD
X	STX	DAUX
X	LDY	#0
X	STY	DLEN
X	LDA	#'S'
X	JSR	RDSET	;DO LAST PART OF XFER
X	LDA	#HIGH[LOCST]
X	STA	DBUF+1
X	LDA	#LOW[LOCST]
X	STA	DBUF
X	LDA	#'R'	;SET COMMAND
X	LDY	#$40	;DIRECTION AND
X	LDX	#3	;READ 3 BYTES
X	STA	DLEN+1
X	JMP	SIORW
X;
X;	OPEN THE RS232 PORT
X;
XRSOPEN	LDA	CHSTAT
X	BMI	NOTOPN
X	LDY	#150		;PORT ALREADY OPEN
X	RTS
X;
XNOTOPN	LDY	#0
X	STY	ERRFLGS
X	LDA	DAUX1Z		;SAVE AUX1 AS PORT STATE
X	ORA	#$40		;MARK PORT OPEN
XREL014	STA	CHSTAT		;AND NOT ACTIVE
X	INY
X	RTS
X;
X;	CLOSE THE RS232 PORT
X;
XRSCLOS	BIT	CHSTAT
X	BVS	SMPLCL		;IF NOT CCIO TO SHUT DOWN
X	LDA	BRKKEY
X	BEQ	SMPLCL
X	LDA	RSDONE
X	BEQ	RSCLOS		;IF NOT DONE YET, LOOP
X	CLC
X	LDA	RTCLOK+2
X	ADC	#6
XRSCLWT	CMP	RTCLOK+2
X	BNE	RSCLWT
X;
X;	RESTORE INTERRUPT HANDLING WITHOUT INTERRUPTS
X;
X	SEI
XREL015	JSR	SHUTDN
X	CLI
XSMPLCL	LDY	#$C0
XREL016	STY	CCSTAT
XREL017	STY	CHSTAT
X	LDY	#1
X	RTS
XSHUTDN	LDA	#$34		;ASSERT COMMAND LINE
X	STA	PBCTL
X	LDA	#0
X	STA	SOBGET
X	STA	SOBPUT
XREL019	LDA	SYSIRQ		;RESTORE SYSTEM IRQ VECTOR
X	STA	VIMIRQ
XREL020	LDA	SYSIRQ+1
X	STA	VIMIRQ+1
X;
X	LDY	#6		;RESTORE 3
XRSTRVC	LDA	OLDISRS-1,Y	;SERIAL ISR VECTORS
X	STA	VSERIN-1,Y
X	DEY
X	BNE	RSTRVC
X	LDA	#$3C		;CLEAR COMMAND LINE
X	LDY	#128
X	STY	BRKKEY
X	STA	PBCTL
X	RTS
X
X;	CONFIGURE AN RS232 CHANNEL
X;
XRSXIO	LDA	DCMDZ
X	AND	#$0F
X	CMP	#9
X	BCS	RCMDER
X	TAY
X	LSR	A
X	BCS	RCMDER
XREL021	LDA	XIOTAB+1,Y
X	PHA
XREL022	LDA	XIOTAB,Y
X	PHA
X	RTS		;VECTOR TO XIO ROUTINE
X;
XSHTDWM	LDA	#$04
X	ORA	ERRFLGS
X	STA	ERRFLGS
X	LDY	#139
X	BMI	ISFAIL
X;
XRCMDER	LDY	#132	;INVALID COMMAND
X	BMI	ISFAIL
X;
X;	START CONCURRENT MODE I/O
X;
XRSCCIO	BIT	CHSTAT
X	BPL	CCNOPN
X	LDY	#133	;IOCB NOT OPEN
X	BMI	ISFAIL
X;
XCCNOPN	BVS	SETCC
X	LDY	#153	;CONCURRENT MODE I/O ACTIVE ERROR CODE
X	BMI	ISFAIL
X;
X;	FREE UP BUFFERS FROM DISK I/O USAGE
X;
XSETCC	JSR	WBITMP
X;
X;	BRING UP TRANSFER FUNCTION IN ATR8500
X;
X	LDA	CR5
X	AND	#$EF	;STOP SENDING BREAK IF NEED BE
X	STA	CR5
X	JSR	RDSTLN	;SETUP BAUD RATE, ETC.
X	LDA	LOCST
X	AND	#0
XMON1	=	*-1
X	BNE	SHTDWM
XHR004	LDY	#HIGH[CCIO]
XLR004	LDA	#LOW[CCIO]
X	LDX	#$E3
X	JSR	XFER	;START COMMUNICATING
X	BPL	SETISR
XISFAIL	JMP	XIOXIT
X;
X;	SET UP SERIAL I/O IN ATARI
X;
XSETISR	LDY	#0
XREL027	STY	CCSTAT
X	LDA	#$73	;SET 2-CLOCK ASYNC. XFER,
X	SEI
X	STY	SOBGET
X	STY	SOBPUT
X	STY	SIBGET
X	STY	SIBPUT
X	STA	SKCTL	;KEYBOARD ACTIVE
X;
X	LDA	#$78
X	STA	AUDCTL
X	STA	AUDF1+2
X	STA	AUDF1+6
X	LDA	#40
X	STA	AUDF1
X	STA	AUDF1+4
X	LDA	#$A0
X	STA	AUDF1+1
X	STA	AUDF1+3
X	STA	AUDF1+5
X	STA	AUDF1+7
X;
X	LDY	#6
XHISISR	LDA	VSERIN-1,Y	;SAVE SYSTEM ISRS
XREL031	STA	OLDISRS-1,Y
XREL032	LDA	ISRTBL-1,Y	;AND INSERT MINE
X	STA	VSERIN-1,Y
X	DEY
X	BNE	HISISR
X	LDA	VIMIRQ		;TAKE OVER IRQ VECTOR
XREL033	STA	SYSIRQ
XLR005	LDA	#LOW[BRKIRQ]
X	STA	VIMIRQ
X	LDA	VIMIRQ+1
XREL034	STA	SYSIRQ+1
XHR005	LDA	#HIGH[BRKIRQ]
X	STA	VIMIRQ+1
XREL035	LDA	CHSTAT	;CCIO NOW ACTIVE!
X	AND	#$BF	;TURN OFF BIT 6
XREL036	STA	CHSTAT
X	AND	#$04
X	BEQ	NOINPT	;IF NO INPUT ALLOWED,SKIP ENABLING
X	LDA	#$20	;ELSE, ENABLE SERIAL INTERRUPTS
XNOINPT	INY
XREL037	JSR	SETMSK
X	CLI		;REENABLE INTERRUPTS
X	LDY	#1
X	BPL	ISFAIL
X;
X;	SET BAUD RATE AND NO. OF STOP BITS
X;
XRSBAUD	LDA	CR4
X	AND	#$F7
X	STA	CR4
X	LDA	DAUX1Z	;THIS JUST SAVES BAUD
X	BPL	SGLSTOP
X	LDA	CR4
X	ORA	#$08
X	STA	CR4
XSGLSTOP	LDA	DAUX1Z
X	AND	#$30
X	LSR	A
X	LSR	A
X	LSR	A
X	LSR	A
X	TAY
X	LDA	CR5
X	AND	#$9F
X	ORA	WSIZE,Y
X	STA	CR5
X	LDA	CR3
X	LDA	DAUX1Z
X	AND	#$0F
X	TAY
X	LDX	BDIV,Y
X	STX	TC2
X	LSR	A
X	LSR	A
X	TAY
X	LDA	CR4
X	AND	#$3F
X	ORA	CR4TAB,Y
X	STA	CR4
X	LDA	DAUX2Z
X	AND	#$07
X	TAY
X	LDA	CTLINS,Y
X	STA	MON1
X	JMP	RTNOK
X;
XWSIZE	DB	$60,$20,$40,$00
XCTLINS	DB	$00,$20,$00,$20
X	DB	$10,$30,$10,$30
XSTRET	DB	$01,$31,$01,$31
X	DB	$CD,$FD,$CD,$FD
X;
X;	SET TRANSLATE MODE AND PARITY
X;
XRSXLAT	LDA	CR4
X	AND	#$FC
X	TAY
X	LDA	DAUX1Z	;SAVE TRANSLATION PARAMETERS
X	STA	CTLBYTE
X	AND	#3
X	CMP	#1
X	BEQ	SPODD
X	CMP	#2
X	BNE	SPOFF
X	INY
X	INY
XSPODD	INY
XSPOFF	STY	CR4	;SET PARITY CONTROL BITS
X	LDA	DAUX2Z	;SAVE UNTRANSLATABLE CODE
XREL042	STA	CANT
XRTNOK	LDY	#1
X;
X;	COMMON XIO CALL EXIT
X;
XXIOXIT	LDA	CHSTAT	;RESTORE AUX1 FOR R/W ACTIVITY
X	STA	DAUX1Z
X	TYA		;SET CONDITION CODE FOR CALLER
XFAILED	RTS
X;
X;	CONTROL THE RS232 CONTROL LINES:
X;	  DTR, RTS, AND TD (TRANSMIT DATA)
X;
XRSCTL	LDX	CR5
X	LDA	DAUX1Z
X	AND	#3
X	LSR	A
X	TXA
X	AND	#$EF
X	BCS	SETMRK
X	ORA	#$10
XSETMRK	TAX
XNOCDAT	LDA	DAUX1Z
X	AND	#$30
X	BEQ	NOCRTS
X	CMP	#$30
X	TXA
X	ORA	#$80
X	BCS	SETRTS
X	AND	#$7F
XSETRTS	TAX
XNOCRTS	BIT	DAUX1Z
X	BPL	NOCDTR
X	TXA
X	ORA	#$02
X	BVS	SETDTR
X	AND	#$FD
XSETDTR	TAX
XNOCDTR	STA	CR5
X	BIT	CHSTAT
X	BVS	BLKCTL	;IF CCIO NOY ACTIVE NOW
X	LDY	#153	;WE BE TEMPORARILY 850 COMPATIBLE
X	BMI	XIOXIT
X;
X;
XSETBIT	STX	PINSEL
X	ASL	A
X	LDA	#0
X	ROL	A
XREL045	STA	LEVEL
XREL046	JSR	ZSET
X	BMI	FAILED
XBLKCTL	LDX	#$E2
XHR006	LDY	#HIGH[SIOSUP]
XLR006	LDA	#LOW[SIOSUP]
X;
X;
X;	ATR8500 SERIAL I/O ROUTINES
X;
XXFER	STY	DBUF+1
X	STA	DBUF
X	STX	DAUX+1	;POINT TO PAGE BEING LOADED
X	JSR	ZZSET	;POINT TO Z80 BUFFER
X	BMI	XIOXIT
X	LDA	#'W'
X	LDY	#$80
X	LDX	#CCIOL
XREL047	JSR	SIORW	;LOAD CODE INTO IT
X	BMI	XIOXIT
X	JSR	ZZSET
X	LDA	#'G'
X	JSR	ZCMD	;THEN RUN THE CODE
X	JMP	XIOXIT
X;
XZSET	LDA	#$EC	;POINT TO $E000
X;
XZZSET	LDA	#'S'	;SET Z80 MEMORY ADDRESS
XZCMD	LDY	#$00
X	LDX	#$0
XSIORW	STX	DAUX
X	STX	DLEN
XRDSET	STA	DCMD
X	STY	DSTAT
X	LDY	#0
X	STY	DLEN+1
X	INY
X	STY	DUNIT
X	INY
X	STY	DTIMEO
X	LDY	#'Z'
X	STY	DDEVIC
X	JMP	SIOV
X;
XBRKIRQ	BIT	IRQEN		;BREAK KEY PRESSED
X	BPL	HAVEBK		;IF SO, HANDLE IT
XREL048	JMP	(SYSIRQ)	;ELSE, LET ROM HANDLE IT
X;
XHAVEBK	PHA
X	TYA
X	PHA
XREL049	JSR	SHUTDN
X	ASL	BRKKEY
X	LDA	#$40
XREL050	ORA	CHSTAT	;SET CCIO-INACTIVE BIT
XREL051	STA	CHSTAT
X	BNE	INTRET
X;
XISXOFF	INC	XONXOF
X	LDA	POKMSK
X	STA	IRQEN
X	BNE	INTRET
X;
XRSSERO	CLD
X	TYA
X	PHA
X	LDY	SOBGET
X	CPY	SOBPUT
X	BNE	NALDON	;IF NOT DONE THEN SEND NEXT BYTE
X	LDA	POKMSK
X	AND	#$E7	;TURN OFF OUTPUT INTERRUPTS
X	LDY	#1	;NEW VALUE OF RSDONE
XREL052	JSR	OUTMSK	;UPDATE POKMSK, IRQEN AND RSDONE
X	BNE	INTRET
X;
XNALDON	BIT	XONXOF
X	BMI	ISXOFF	;DON'T SEND THAT BYTE!
X	INY	;POINT TO NEXT BYTE
XREL053	LDA	SOBUF,Y
X	STY	SOBGET
XSNDOUT	STA	SEROUT	;SEND BYTE TO RS232 PORT
XINTRET	PLA
X	TAY
X	PLA
X	RTI
X;
XRSSERI	CLD
X	TYA
X	PHA
X	LDA	SERIN	;READ BYTE FROM HARDWARE
X	CMP	#$1F
X	BEQ	SETESC
X	CMP	#$13
X	BEQ	SETXOF
X	CMP	#$11
X	BEQ	CLRXOF
X	ASL	ESCFLG
X	BCC	SAVIB
X	AND	#$1F
XSAVIB	LDY	SIBPUT	;GET BUFFER POINTER
X	STA	SIBUF,Y	;SAVE BYTE IN BUFFER
X	INY
X	STY	SIBPUT
X	LDA	SKCTL
X	STA	SKRES
X	EOR	#$FF	;REPORT FRAMING OR 
X	AND	#$C0	;OTHER HARDWARE ERRORS
X	ORA	ERRFLGS
X	CPY	SIBGET	;BUFFER OVERFLOW?
X	BNE	UPDERR	;IF NOT SAVE GET POINTER
X	INY
X	ORA	#$10	;SET OVERRUN FLAG
X	STY	SIBGET	;ERASE OLDEST BYTE IN BUFFER
XUPDERR	STA	ERRFLGS
X;
X	PLA
X	TAY
X	PLA
X	RTI
X;
XSETESC	ROR	ESCFLG
X	BMI	FLSHIN
X;
XSETXOF	ROR	XONXOF
X	BMI	FLSHIN
X;
XCLRXOF	AND	XONXOF
X	BEQ	NORST
X	LDA	POKMSK
X	ORA	#$10
X	STA	POKMSK
X	STA	IRQEN
X	LDA	#0
X	STA	XONXOF
X	JMP	XIOXIT
X;
XNORST	STA	XONXOF
XFLSHIN	LDA	SKCTL
X	STA	SKRES
X	EOR	#$FF
X	AND	#$C0
X	ORA	ERRFLGS
X	JMP	UPDERR
X;
X;	UPDATE POKMSK, IRQEN AND RSDONE
X;
XSETMSK	ORA	POKMSK	;MERGE IN OLD BITS
XOUTMSK	STA	POKMSK
X	STA	IRQEN	;UPDATE HARDWARE REGISTER
X	STY	RSDONE	;UPDATE DONE FLAG
X	RTS
X;
X;	TEST FOR RS232 PORT NOT OPEN OR BREAK PRESSED
X;
XOPNCHK	BIT	CHSTAT	;IS ACTION VALID?
X	BEQ	ERRNWR	;IF OPERATION NOT ENABLED
X	BMI	ERRNOP	;IF NOT OPEN
X;
X;	FIELD A BREAK KEY PRESSED WHEN RS232
X;	CHANNEL IS ACTIVE.
X;
XTSTBKY	BIT	CHSTAT	;IN CCIO?
X	BMI	ERRNOP	;NOT EVEN OPEN
X	BVC	INCCIO
XREL057	LDA	CCSTAT
X	BMI	NOBREAK
X	LDY	#$80
X	STY	BRKKEY
XREL058	STY	CCSTAT
X;
X	DB	$2C	;SKIP TO 'BKABRT'
XERRNWR	TAY		;WRITE NOT ENABLED
X	DEY		;I.E. $87
X	DB	$2C	;SKIP TO 'BKABRT'
XERRNOP	LDY	#133	;NOT OPEN ERROR
XBKABRT	PLA		;ELSE, FLUSH RETURN ADDRESS
X	PLA
X	TYA
XINCCIO	RTS
X;
XNOBREAK	JSR	RSCCIO	;START UP CCIO
X	BMI	BKABRT
X	RTS
X;
XRSVECT	DW	RSOPEN-1,RSCLOS-1
X	DW	RSREAD-1,RSWRIT-1
X	DW	RSSTAT-1,RSXIO-1
X;
XXIOTAB	DW	RCMDER-1,RSCTL-1
X	DW	RSBAUD-1,RSXLAT-1
X	DW	RSCCIO-1
X;
XISRTBL	DW	RSSERI	;VALUES FOR INTERRUPT VECTORS
X	DW	RSSERO
X	DW	RSSERO
X;
X;
X;	SETUP Z80 SIO CHIP AND BAUD RATE CLOCK
X;
XSIOSUP	DB	$DB,$43	;IN	A,(MODEM+2)
X	DB	$32,$FE,$E2		;LD	(STAT+1),A
X	DB	$3E,$01		;LD	A,1
X	DB	$D3,$43		;OUT	(MODEM+2),A
X	DB	$DB,$43		;IN	A,(MODEM+2)
X	DB	$32,$FF,$E2		;LD	(STAT+2),A
X	DB	$21,TC1-SIOSUP,$E2		;LD	HL,SUPTBL
X	DB	$01,$21,$02		;LD	BC,CTC1+2*256
X	DB	$ED,$B3		;OTIR
X	DB	$01,$43,$09		;LD	BC,SIOCTL+9*256
X	DB	$ED,$B3		;OTIR
X	DB	$DB,$43		;IN	A,(MODEM+2)
X	DB	$32,$FD,$E2		;LD	(STAT),A
X	DB	$C9		;RET
X;
XTC1	DB	$47
XTC2	DB	$80		;300 BPS
X	DB	0,4
XCR4	DB	$44		;NO PARITY, 1 STOP BIT
X	DB	3
XCR3	DB	$C1		;8 BIT RX CHAR
X	DB	5
XCR5	DB	$EA		;8 BIT TX CHAR. RTS,DTR SET
X	DB	$30		;CLEAR ERRORS
X	DB	$10		;CHECK STATUS LINES
XSIOSL	=	*-SIOSUP
X;
X;	CONCURRENT I/O ROUTINE TO DOWNLOAD TO Z80
X;
XCCIO	DB	$06		;LD     BO
X	DB	$48		;LD     C,B
X	DB	$58		;LD     E,B
X	DB	$68		;LD     L,B
X	DB	$C5		;PUSH     BC
X	DB	$26,$E1		;LOOP      LD H,0E1H
X	DB	$54		;LD     D,H
X	DB	$3E,$10		;LD     A,010H
X	DB	$D3,$42		;OUT     (ATARI+2),A
X	DB	$DB,$42		;IN    A,(ATARI+2)
X	DB	$CB,$57		;BIT     2,A
X	DB	$28,$14		;JR     Z,NOXMA
X	DB	$05		;DEC      B
X	DB	$04		;INC      B
X	DB	$28,$10		;JR      Z.NOXMA
X	DB	$7E		;LD     A,ESC
X	DB	$FE,$20		;CP     020H
X	DB	$30,$07		;JR     NC,OUTOK
X	DB	$F6,$40		;OR     040H
X	DB	$77		;LD     (HL),A
X	DB	$3E,$1F		;LD     A,ESC
X	DB	$18,$02		;JR     SAYIT
X	DB	$2C		;OUTOK     INC L
X	DB	$05		;DEC     B
X	DB	$D3,$40		;SAYIT OUT (ATARI),A
X	DB	$DB,$43		;NOXMA IN A,(MODEM+2)
X	DB	$CB,$47		;BIT 0,A
X	DB	$28,$05		;JR Z,CNTRX
X	DB	$DB,$41		;IN A,(MODEM)
X	DB	$12		;LD (DE),A
X	DB	$1C		;INC E
X	DB	$04		;INC B
X	DB	$63		;CNTRX LD H,E
X	DB	$E3		;EX (SP),HL
X	DB	$5C		;LD E,H
X;
X	DB	$26,$E0		;LD H,0E0H
X	DB	$54		;LD D,H
X	DB	$DB,$43		;IN A,(MODEM+2)
X	DB	$CB,$57		;BIT 2,A
X	DB	$28,$10		;JR Z,NOXMM
X	DB	$0D		;DEC C
X	DB	$0C		;INC C
X	DB	$28,$0C		;JR Z,NOXMM
X	DB	$7E		;LD A,(HL)
X	DB	$D3,$41		;OUT (MODEM),A
X	DB	$2C		;INC L
X	DB	$0D		;DEC C
X	DB	$79		;LD A,C
X	DB	$E6,$FC		;AND OFCH
X	DB	$FE,$7C		;CP 07CH
X	DB	$28,$35		;JR Z,RESUM
X	DB	$DB,$42		;NOXMM IN A,(ATARI+2)
X	DB	$CB,$6F		;BIT 5,A
X	DB	$28,$1F		;JR Z,EXIT
X	DB	$CB,$47		;BIT 0,A
X	DB	$28,$0A		;JR Z,CANTTX
X	DB	$79		;LD A,C
X	DB	$FE,$F0		;CP 240
X	DB	$30,$0A		;JR NC,FULLBF
X	DB	$DB,$40		;FOK IN A,(ATARI)
X	DB	$12		;LD (DE),A
X	DB	$1C		;INC E
X	DB	$0C		;INC C
X	DB	$63		;CANTTX LD H,E
X	DB	$E3		;EX (SP),HL
X	DB	$5C		;LD E,H
X	DB	$18,$9F		;JR LOOP
X;
X	DB	$DB,$42		;FULLBF IN A,(ATARI+2)
X	DB	$CB,$57		;BIT 2,A
X	DB	$28,$FA		;JR Z,FULLBF
X	DB	$3E,$13		;LD A,XOFF
X	DB	$D3,$40		;OUT (ATARI),A
X	DB	$18,$EA		;JR FOK
X;
X	DB	$D1		;EXIT POP DE
X	DB	$0C		;INC C
X	DB	$0D		;EXLP DEC C
X	DB	$C8		;RET Z
X	DB	$DB,$43		;AWAIT IN A,(MODEM+2)
X	DB	$CB,$57		;BIT 2,A
X	DB	$28,$FA		;JR Z,AWAIT
X	DB	$7E		;LD A,(HL)
X	DB	$D3,$41		;OUT (MODEM),A
X	DB	$2C		;INC L
X	DB	$18,$F2		;JR EXLP
X;
X	DB	$DB,$42		;RESUM IN A,(ATARI+2)
X	DB	$CB,$57		;BIT 2,A
X	DB	$28,$FA		;JR Z,RESUM
X	DB	$3E,$11		;LD A,XON
X	DB	$D3,$40		;OUT (ATARI),A
X	DB	$18,$BF		;JR NOXMM
XCCIOL	=	*-CCIO
X;
XZ80CTL	DB	$3E		;LD     A,OFFH
XLEVEL	DB	$FF
X	DB	$D3		;OUT     (051),A
XPINSEL	DB	$51
X	DB	$C9		;RETURN
X;
XZ80STAT	DB	$DB		;IN     A,(050H)
X	DB	$32,$01,$EF		;LD     ($EF01),A
X	DB	$C9		;RETURN
X;
X;	BAUD RATE TABLES
X;
XBDIV	DB	32		;300
X	DB	211		;45.5
X	DB	192		;50
X	DB	169		;56.875
X	DB	0		;75
X	DB	175		;110
X	DB	143		;134.5
X	DB	128		;150
X	DB	128		;300
X	DB	64		;600
X	DB	32		;1200
X	DB	21		;1800
X	DB	16		;2400
X	DB	8		;4800
X	DB	4		;9600
X	DB	4		;19,200 BPS
X;
XCR4TAB	DB	$C4		;300,45.5-56.875
X	DB	$84		;75-150
X	DB	$44		;300-1800
X	DB	$44		;2400-19200
X;
X
XCHSTAT	DB	$C0	;BIT 7=CHANNEL CLOSED
X			;    6=CONCURRENT I/O INACTIVE
X			;    3=OUTPUT MODE
X			;    2=INPUT MODE
X;
XCTLBYTE	DB	0	;BIT 6=ADD LF TO CR (OUTPUT)
X			;BITS 5-4=XLATE MODE
X			;BITS 3-2=INPUT PARITY CTL
X			;BITS 1-0=OUTPUT PARITY CONTROL
XCANT	DB	0	;WONT TRANSLATE CHARACTER FOR HEAVY XLTER
XLOCST	DB	0,0,0		;LOCAL COPY OF Z80 SIO STATUS BYTES
XCCSTAT	DB	$80	;IF -, STATUS IS NORMAL
X			;IF -, BYTE COUNTS ARE IN STATUS
XESCFLG	DS	1
XXONXOF	DS	1
XOLDISRS	DS	6	;VECTORS REPLACED IF CCIO ACTIVE
XSYSIRQ	DS	2	;SIMULATED DOS ENTRY ADDRESS
X;
XSOBUF	DS	SOBSIZ
XSIBUF	DS	256
XLEN	=	*-RSWRIT;LENGTH OF DRIVER=$6E2
X;
X;  AUTORUN.SYS PROGRAM TO INSTALL THE RS232 HANDLER
X;
X;  TURN OFF DTR FIRST
X;
XSTART	LDA	#$80
X	LDX	#$55
X	JSR	SETBIT
X;
X;  RELOCATE ABSOLUTE INSTRUCTION ADDRESSES AND VECTORS
X;
X	SEC
X	LDA	#LOW[RSWRIT]
X	STA	SPTR
X	SBC	MEMTOP
X	STA	DIF
X	LDA	#HIGH[RSWRIT]
X	STA	SPTR+1
X	SBC	MEMTOP+1
X	STA	DIF+1
X	LDX	#0
XRELOOP	CLC
X	LDA	RELTAB,X
X	BEQ	M256
X	ADC	SPTR
X	STA	SPTR
X	BCC	NOCY1
XM256	INC	SPTR+1
X	BCC	NOREL1
XNOCY1	LDY	#0
X	SEC
X	LDA	(SPTR),Y
X	SBC	DIF
X	STA	(SPTR),Y
X	INY
X	LDA	(SPTR),Y
X	SBC	DIF+1
X	STA	(SPTR),Y
XNOREL1	INX
X	CPX	#RELTSZ
X	BNE	RELOOP
X;
X;  RELOCATE HIGH/LOW IMMEDIATE MEMORY REFERENCES
X;
X	LDX	#0
XSCRELP	LDA	HRELT,X
X	STA	SPTR
X	LDA	LRELT,X
X	STA	DPTR
X	INX
X	LDA	HRELT,X
X	STA	SPTR+1
X	LDA	LRELT,X
X	STA	DPTR+1
X	INX
X	LDY	#0
X	SEC
X	LDA	(DPTR),Y
X	SBC	DIF
X	STA	(DPTR),Y
X	LDA	(SPTR),Y
X	SBC	DIF+1
X	STA	(SPTR),Y
X	CPX	#HLRTSZ
X	BNE	SCRELP
X;
X;  COPY HANDLER DOWN TO ITS RESIDENT MEMORY AREA
X;
X	LDA	MEMTOP
X	STA	DPTR
X	LDA	MEMTOP+1
X	STA	DPTR+1
X	LDA	#LOW[RSWRIT]
X	STA	SPTR
X	LDA	#HIGH[RSWRIT]
X	STA	SPTR+1
X	LDX	#HIGH[LEN+255]
X	LDY	#0
XMVLOOP	LDA	(SPTR),Y
X	STA	(DPTR),Y
X	INY
X	BNE	MVLOOP
X	INC	SPTR+1
X	INC	DPTR+1
X	DEX
X	BNE	MVLOOP
X;
X;  ADJUST TOP OF OS POINTER
X;
X	CLC
X	LDA	MEMTOP
X	ADC	#LOW[LEN]
X	STA	MEMTOP
X	LDA	MEMTOP+1
X	ADC	#HIGH[LEN]
X	STA	MEMTOP+1
X;
X;  INSTALL RS232 HANDLER IN HANDLER TABLE
X;
X	LDY	#0
XFNDSLT	LDA	HATABS,Y	;LOOK FOR EMPTY SLOT IN HANDLER TABLE
X	BEQ	CLDSLT	;IF FOUND
X	CMP	#'R'	;ALREADY PRESENT?
X	BEQ	GOTSLT	;IF SO, REUSE IT
X	INY
X	INY
X	INY
X	CPY	#30	;END OF TABLE?
X	BCC	FNDSLT
X	RTS		;YES, RETURN WITH CY=1
X;
XCLDSLT
XGOTSLT	LDA	#'R'	;DEVICE NAME IS 'R'
X	STA	RSDONE
X	STA	HATABS,Y
X	SEC
X	LDA	#LOW[RSVECT]	;POINT TO RS232 HANDLER ENTRY TABLE
X	SBC	DIF
X	STA	HATABS+1,Y
X	LDA	#HIGH[RSVECT]
X	SBC	DIF+1
X	STA	HATABS+2,Y
X	LDY	#1
X	RTS
X;
X;  RELOCATION TABLE FOR ABSOLUTE INSTRUCTIONS
X;
XRELTAB	DB	REL001+1-RSWRIT
X	DB	REL002-REL001
X	DB	REL003-REL002
X	DB	REL004-REL003
X	DB	OUTASCI-REL004
X	DB	BUFWAIT-OUTASCI
X	DB	REL005-BUFWAIT
X	DB	REL007-REL005
X	DB	REL008-REL007
X	DB	REL009-REL008
X	DB	REL010-REL009
X	DB	NOPTST-REL010
X	DB	RSSTAT-NOPTST
X	DB	REL011-RSSTAT
X	DB	SNOOP-REL011
X	DB	RDSTLN-SNOOP
X	DB	RSOPEN-RDSTLN
X	DB	REL014-RSOPEN
X	DB	RSCLOS-REL014
X	DB	REL015-RSCLOS
X	DB	REL016-REL015
X	DB	REL017-REL016
X	DB	REL019-REL017
X	DB	REL020-REL019
X	DB	RSTRVC-REL020
X	DB	REL021-RSTRVC
X	DB	REL022-REL021
X	DB	RSCCIO-REL022
X	DB	SETCC-RSCCIO
X	DB	ISFAIL-SETCC
X	DB	REL027-ISFAIL
X	DB	REL031-REL027
X	DB	REL032-REL031
X	DB	REL033-REL032
X	DB	REL034-REL033
X	DB	REL035-REL034
X	DB	REL036-REL035
X	DB	REL037-REL036
X	DB	RSXLAT-REL037
X	DB	REL047-RSXLAT
X	DB	REL048-REL047
X	DB	REL049-REL048
X	DB	REL050-REL049
X	DB	REL051-REL050
X	DB	REL052-REL051
X	DB	REL053-REL052
X	DB	OPNCHK-REL053
X	DB	TSTBKY-OPNCHK
X	DB	REL057-TSTBKY
X	DB	REL058-REL057
X	DB	NOBREAK-REL058
X	DB	RSVECT-1-NOBREAK,2
X	DB	2,2
X	DB	2,2
X	DB	2,2
X	DB	2,2
X	DB	2
X	DB	2,2,2
XRELTSZ	=	*-RELTAB
X;
X;  HIGH/LOW IMMEDIATE MEMORY REFERENCE TABLE
X;
XHRELT	DW	HR004+1
X	DW	HR005+1
X	DW	HR006+1
XHLRTSZ	=	*-HRELT
X;
XLRELT	DW	LR004+1
X	DW	LR005+1
X	DW	LR006+1
X;
X	END	START,
SHAR_EOF
#	End of shell archive
exit 0
===========================================================================
Charles Marslett
STB Systems, Inc.  <== Apply all standard disclaimers
Wordmark Systems   <== No disclaimers required -- that's just me
chasm@killer.dallas.tx.us

chasm@killer.DALLAS.TX.US (Charles Marslett) (06/26/89)

#	This is a shell archive (Part 2 of 2)
#
#	It contains 5 RS-232 handlers or AUTORUN.SYS files.
#
#	Run it through the Bourne shell "sh" or an unshar program
#	after reading the following paragraphs, the desired driver
#	can then be UUDECODEd to create an executable AUTORUN.SYS file.
#
#The five AUTORUN.SYS files in this SHAR archive are the RS-232 drivers for
#three common RS-232 adapters used with Atari 8-bit computers.  The
#ATARI850 file will load the RS-232 driver from an Atari 850 interface or
#from ICD's P:R:Connection.  The ATR232 file is the standard RS-232 driver
#for an ATR8000's serial port (the ATR232HD and ATR232HX are very similar
#RS-232 drivers for an ATR8000 with the SWP hard disk interface installed),
#and the ATR8500 file is an RS232 handler for the SWP ATR8500, second
#generation interface.
#
#The RS232 drivers for the ATR8000 differ in where the Z80 code down-
#loaded into the ATR8000 goes.  The original driver (ATR232) used the "User
#Page" of memory not used by the ATR8000 ROM code ($D000).
#
#Unfortunately, the ATR8000 hard disk interface code is loaded here also,
#two other alternatives are provided: ATR232HD loads its code at $EC00 to $EFFF,
#and ATR232HX loads its code at $E000 to $E2FF.
#
#Each file, when uudecoded, will have the same name (AUTORUN.SYS) even though
#the uuencoded files have distinguishing names.  So don't decode them all in
#the same directory!
#
#These drivers can be combined with the RAMdisk initialization AUTORUN.SYS
#files by formatting a disk (with the I command), copying MYDOS to it (with
#the H command), copying the desired RS-232 driver to the disk naming it
#AUTORUN.SYS, and then appending the normal RAMdisk AUTORUN.SYS file to it.
#The two copy operations are specified with lines similar to these:
#
#   D2:ATARI850.AUT,D1:AUTORUN.SYS
#
#   D2:AUTORUN.SYS,D1:AUTORUN.SYS/A
#
#which would combine the 850 handler with the standard RAMdisk startup code.
#
#Charles Marslett               chasm@killer.dallas.tx.us
#Wordmark Systems
#June 20, 1989
#
#
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:   Shell Archiver
#	Run the following text with /bin/sh to create:
#	rs232.uue
#	atr232.uue
#	atr232hd.uue
#	atr232hx.uue
#	atr8500.uue
# This archive created: Fri Jun 23 19:59:42 1989
sed 's/^X//' << \SHAR_EOF > rs232.uue
Xbegin 666 autorun.sys
XV___R-_$XJ0"%"*4,C00YI0V-!3FB"[WC.)T``\H0]R!9Y#`0H@N]``6=``/*$/<@6>00"*F&5
XVHCB@(-!&(`8%I0R-!SFE#8T(.:`2L0S9[SC0)X@0]J!#N;\XD0S(P$O0]JE$&*4,:42%#)`"<
XVY@T@!CFIIJ(XH!G0"2`&.:F_HCB@)(U$`XY%`XQ(`Z(`J0F=0@.I`)U)`TQ6Y$524D]2("T@X
XV0T%.)U0@3$]!1"!24S(S,B!$4DE615*;.#4P(%)3,C,R($A!3D1,15(@3$]!1$5$FU`Z4CI#$
XV;VYN96-T:6]N(%)3,C,R($A!3D1,15(@3$]!1$5$FU`!/T``!0@`#````*D`HO(X"3D`W1H#%
X:\`CHZ.C@()#T8*E28"```$P```#B`N,"\C<`-
X``
Xend
Xsize 296
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > atr232.uue
Xbegin 666 autorun.sys
XV__\`8/]@A4.IB"#]8ZW'9"DPJ,D@L"FE0\F;T!&I#2`X8#`9K<=D"A`1J0K0$"E_B#`+R2"0O
XV!,E]D`.@`6"%0ZW'9"D#\!(&0\D#\`I*I4.0`DF`"M#Y9D.LV63(P""0`J``(`1DS-AD\/BED
XV0YG:9(S99'BI""S(9#`"J1B@`"#R8UC(8*F$(/UCK-9DS-=D\/.Y^F3(C-9DA4.MQV0I#/`=P
XVR0SP%2D$14.0`DF`"M#YD`BI(`W49(W49`9#1D.MQV0I,*BE0\`@L!8I?\D-T`*IFX@P"\D@A
XVD`3)?3`#K<EDH`%@+,9D,`4LRV00.R!!83!0H`"B`([M`JWL`DA*2K`"HLQ*L`!A_V$"H#"$"
XV*XH%*ZIH,`'HCNL""BD$#=1DC>H"H`",U&2,[`+(8#BMUV3MUF2-ZP(XK=ED[=AD*1^-[0*I_
XV`/#6J0_0TB`X8S#WH&2IH"`@8Z#>(#ICJ5*-`@.I0(T#`Z`"J>N-!`.I`HP%`XT*`XT(`ZD`:
XVC0D#3%GDK<9D,`.@EF"@`(S49*4J"4"-QF3(8"S&9'`7I1'P$ZW59/#R&*44:0;%%-#\>""SK
XV85B@P(S+9(S&9*`!8*DTC0/3J0"-V&2-V62MTF2-%@*MTV2-%P*@!KG+9)D)`HC0]ZD\H("$C
XV$8T#TV"E(BD/R0FP#:A*L`FY:F1(N6ED2&"@A&`LQF00`Z"%`&+_8F!P`Z"98"!!83#ZK<ID2
XV+>P"\`.@BV`@.&,P$ZG_C9QDJ5&-GF2@9*EY("!C$`-,S6*@`(S+9*ES>(S89(S99(S69(S75
XV9(T/TJEXC0C2K<AD*0^HN:9DC0+2C0;2N;9DC0#2C032J:"-`=*-`]*-!=*-!]*@!KD)`IG+4
XV9+ER9)D)`HC0\:T6`HW29*E:C18"K1<"C=-DJ6.-%P*MQF0IOXW&9"D$\`*I(,@@\F-83,UBZ
XVI2J-R&2E*_`"J0*-RF1,RV*E*HW'9*4KC<EDH`&MQF2%*IA@+,9D<!*E*BD#2O#KJ7.P`@F`H
XVC0_2T."B4:4J2FJ0`R`-8Z)5I2I**5#P"R4`8_]C*O`"J8!)@"`-8TS-8HZ>9`JI`"J-G&0@8
XV.&,PMZ!DJ9N-!`.I5XT"`ZF`C0,#J2(@96$PGZ!'T`>@W(P+`Z!3C`(#H`",`P.,"@/(C`$#G
XVR(P&`Z!:C``#3%GD+`[2$`-LTF1(F$@@LV$&$:E`#<9DC<9DT$?8F$BLV&3,V630"Z40*>>@Z
XV`2#T8]`QR,`@D`*@`+G:9(T-THS89*T.TDG_)1`I(/`/J=0E$(T.TJ40C0[2(,ECJ0@L#M+P*
XVWVBH:$#8F$@@R6-HJ&A`K0W2K-=DF?IDK0_2C0K22?\IP`W49,C,UF2,UV30!L@)$(S69(W4=
XV9&`%$(40C0[2C-5D8"S&9`!DRV3P%C`7+,9D,!)0%:W+9#`1H("$$8S+9"RHB"R@A6AHF&`@5
XV^6$P]V`@X`>I^HWG`JEEC>@"H`"Y&@/P#,E2\`C(R,C`'I#P8*E2C=5DF1H#.*E=F1L#J629S
XV'`.@`6!U88MA?F#_7]U@X&'U8=-BKV+`8OAAOV-T8W1C\\UH\#XATX,R+O\&!-M0!]-0VW`'@
XVTU&@P@W</O_34</&]S[_TU')VU`R`=[)"TQ%/2X?&1<+!0(!`0```*#-XV^5P/9'H,SCZFZS4
XV5BC``````(#49-ED````````^F7Y9JF`HE4@#6,XJ0"%UNWG`H74J6"%U^WH`H75H@`8O9]F>
XV\`9EUH76D`3FUY`0H``XL=;EU)'6R+'6Y=61UNC@?Y#;H@"]'F>%UKTL9X78Z+T>9X77O2QG@
XVA=GHH``XL=CEU)'8L=;EU9'6X`Z0UZ4,C2ADI0V-*62I)X4,J62%#:WG`H78K>@"A=FI`(76(
XVJ6"%UZ(&H`"QUI'8R-#YYM?FV<K0\DPJ9`4#$@4<&0H#!P,&"0@#`P4$!1H#!R4%!2L("0,'_
XV`Q`)!2<*!P4)#P8##0,#!@@?!`@-!0L'!0<%!08#`P,+!@D<`PP+"`4*!`4)`P4%!0<?%`,#?
XV!P,8,`8'`PCZ9CEG`PL,!AH1"@,-!`,(`PL$!P<)#3L"`@("`@("`@("`@("```F1V$F8I9BW
X<'6,P9%9D=69)82ABBV(?8RMD461Q9N("XP+Z90``/
X``
Xend
Xsize 1594
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > atr232hd.uue
Xbegin 666 autorun.sys
XV__\`8/]@A4.IB"#]8ZW'9"DPJ,D@L"FE0\F;T!&I#2`X8#`9K<=D"A`1J0K0$"E_B#`+R2"0O
XV!,E]D`.@`6"%0ZW'9"D#\!(&0\D#\`I*I4.0`DF`"M#Y9D.LV63(P""0`J``(`1DS-AD\/BED
XV0YG:9(S99'BI""S(9#`"J1B@`"#R8UC(8*F$(/UCK-9DS-=D\/.Y^F3(C-9DA4.MQV0I#/`=P
XVR0SP%2D$14.0`DF`"M#YD`BI(`W49(W49`9#1D.MQV0I,*BE0\`@L!8I?\D-T`*IFX@P"\D@A
XVD`3)?3`#K<EDH`%@+,9D,`4LRV00.R!!83!0H`"B`([M`JWL`DA*2K`"HLQ*L`!A_V$"H#"$"
XV*XH%*ZIH,`'HCNL""BD$#=1DC>H"H`",U&2,[`+(8#BMUV3MUF2-ZP(XK=ED[=AD*1^-[0*I_
XV`/#6J0_0TB`X8S#WH&2IH"`@8Z#O(#ICJ5*-`@.I0(T#`Z`"J>N-!`.I`HP%`XT*`XT(`ZD`K
XVC0D#3%GDK<9D,`.@EF"@`(S49*4J"4"-QF3(8"S&9'`7I1'P$ZW59/#R&*44:0;%%-#\>""SK
XV85B@P(S+9(S&9*`!8*DTC0/3J0"-V&2-V62MTF2-%@*MTV2-%P*@!KG+9)D)`HC0]ZD\H("$C
XV$8T#TV"E(BD/R0FP#:A*L`FY:F1(N6ED2&"@A&`LQF00`Z"%`&+_8F!P`Z"98"!!83#ZK<ID2
XV+>P"\`.@BV`@.&,P$ZG_C9QDJ5&-GF2@9*EY("!C$`-,S6*@`(S+9*ES>(S89(S99(S69(S75
XV9(T/TJEXC0C2K<AD*0^HN:9DC0+2C0;2N;9DC0#2C032J:"-`=*-`]*-!=*-!]*@!KD)`IG+4
XV9+ER9)D)`HC0\:T6`HW29*E:C18"K1<"C=-DJ6.-%P*MQF0IOXW&9"D$\`*I(,@@\F-83,UBZ
XVI2J-R&2E*_`"J0*-RF1,RV*E*HW'9*4KC<EDH`&MQF2%*IA@+,9D<!*E*BD#2O#KJ7.P`@F`H
XVC0_2T."B4:4J2FJ0`R`-8Z)5I2I**5#P"R4`8_]C*O`"J8!)@"`-8TS-8HZ>9`JI`"J-G&0@8
XV.&,PMZ!DJ9N-!`.I5XT"`ZF`C0,#J2(@96$PGZ!'T`>@[(P+`Z!3C`(#H`",`P.,"@/(C`$#W
XVR(P&`Z!:C``#3%GD+`[2$`-LTF1(F$@@LV$&$:E`#<9DC<9DT$?8F$BLV&3,V630"Z40*>>@Z
XV`2#T8]`QR,`@D`*@`+G:9(T-THS89*T.TDG_)1`I(/`/J=0E$(T.TJ40C0[2(,ECJ0@L#M+P*
XVWVBH:$#8F$@@R6-HJ&A`K0W2K-=DF?IDK0_2C0K22?\IP`W49,C,UF2,UV30!L@)$(S69(W4=
XV9&`%$(40C0[2C-5D8"S&9`!DRV3P%C`7+,9D,!)0%:W+9#`1H("$$8S+9"RHB"R@A6AHF&`@5
XV^6$P]V`@X`>I^HWG`JEEC>@"H`"Y&@/P#,E2\`C(R,C`'I#P8*E2C=5DF1H#.*E=F1L#J629S
XV'`.@`6!U88MA?F#_7]U@X&'U8=-BKV+`8OAAOV-T8W1C\\UH\#XATX,R+O\&!-M0!]-0VW`'@
XVTU&@P@WL/O_34</&]S[_TU')VU`R`>_)"TQ%/2X?&1<+!0(!`0```*#-XV^5P/9'H,SCZFZSU
XV5BC``````(#49-ED````````^F7Y9JF`HE4@#6,XJ0"%UNWG`H74J6"%U^WH`H75H@`8O9]F>
XV\`9EUH76D`3FUY`0H``XL=;EU)'6R+'6Y=61UNC@?Y#;H@"]'F>%UKTL9X78Z+T>9X77O2QG@
XVA=GHH``XL=CEU)'8L=;EU9'6X`Z0UZ4,C2ADI0V-*62I)X4,J62%#:WG`H78K>@"A=FI`(76(
XVJ6"%UZ(&H`"QUI'8R-#YYM?FV<K0\DPJ9`4#$@4<&0H#!P,&"0@#`P4$!1H#!R4%!2L("0,'_
XV`Q`)!2<*!P4)#P8##0,#!@@?!`@-!0L'!0<%!08#`P,+!@D<`PP+"`4*!`4)`P4%!0<?%`,#?
XV!P,8,`8'`PCZ9CEG`PL,!AH1"@,-!`,(`PL$!P<)#3L"`@("`@("`@("`@("```F1V$F8I9BW
X<'6,P9%9D=69)82ABBV(?8RMD461Q9N("XP+Z90``/
X``
Xend
Xsize 1594
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > atr232hx.uue
Xbegin 666 autorun.sys
XV__\`8/]@A4.IB"#]8ZW%9"DPJ,D@L"FE0\F;T!&I#2`X8#`9K<5D"A`1J0K0$"E_B#`+R2"0K
XV!,E]D`.@`6"%0ZW%9"D#\!(&0\D#\`I*I4.0`DF`"M#Y9D.LUV3(P""0`J``(`1DS-9D\/BE>
XV0YG89(S79'BI""S&9#`"J1B@`"#R8UC(8*F$(/UCK-1DS-5D\/.Y^&3(C-1DA4.MQ60I#/`=@
XVR0SP%2D$14.0`DF`"M#YD`BI(`W29(W29`9#1D.MQ60I,*BE0\`@L!8I?\D-T`*IFX@P"\D@;
XVD`3)?3`#K<=DH`%@+,1D,`4LR600.R!!83!0H`"B`([M`JWL`DA*2K`"HLQ*L`!A_V$"H#"$\
XV*XH%*ZIH,`'HCNL""BD$#=)DC>H"H`",TF2,[`+(8#BMU63MU&2-ZP(XK==D[=9D*1^-[0*IS
XV`/#6J0_0TB`X8S#WH&2IGB`@8Z#B(#ICJ5*-`@.I0(T#`Z`"J>N-!`.I`HP%`XT*`XT(`ZD`<
XVC0D#3%GDK<1D,`.@EF"@`(S29*4J"4"-Q&3(8"S$9'`7I1'P$ZW39/#R&*44:0;%%-#\>""SA
XV85B@P(S)9(S$9*`!8*DTC0/3J0"-UF2-UV2MT&2-%@*MT62-%P*@!KG)9)D)`HC0]ZD\H("$5
XV$8T#TV"E(BD/R0FP#:A*L`FY:F1(N6ED2&"@A&`LQ&00`Z"%`&+_8F!P`Z"98"!!83#ZK<AD.
XV+>P"\`.@BV`@.&,P$ZG_C9IDJ5&-G&2@9*EY("!C$`-,S6*@`(S)9*ES>(S69(S79(S49(S5'
XV9(T/TJEXC0C2K<9D*0^HN:1DC0+2C0;2N;1DC0#2C032J:"-`=*-`]*-!=*-!]*@!KD)`IG),
XV9+ER9)D)`HC0\:T6`HW09*E:C18"K1<"C=%DJ6.-%P*MQ&0IOXW$9"D$\`*I(,@@\F-83,UBR
XVI2J-QF2E*_`"J0*-R&1,RV*E*HW%9*4KC<=DH`&MQ&2%*IA@+,1D<!*E*BD#2O#KJ7.P`@F`<
XVC0_2T."B4:4J2FJ0`R`-8Z)5I2I**5#P"R4`8_]C*O`"J8!)@"`-8TS-8HZ<9`JI`"J-FF0@4
XV.&,PMZ!DJ9F-!`.I5XT"`ZF`C0,#J2`@96$PGZ!'T`>@X(P+`Z!3C`(#H`",`P.,"@/(C`$#G
XVR(P&`Z!:C``#3%GD+`[2$`-LT&1(F$@@LV$&$:E`#<1DC<1DT$?8F$BLUF3,UV30"Z40*>>@P
XV`2#T8]`QR,`@D`*@`+G89(T-THS69*T.TDG_)1`I(/`/J=0E$(T.TJ40C0[2(,ECJ0@L#M+P&
XVWVBH:$#8F$@@R6-HJ&A`K0W2K-5DF?ADK0_2C0K22?\IP`W29,C,U&2,U630!L@)$(S49(W2/
XV9&`%$(40C0[2C--D8"S$9`!DR63P%C`7+,1D,!)0%:W)9#`1H("$$8S)9"RHB"R@A6AHF&`@)
XV^6$P]V`@X`>I^(WG`JEEC>@"H`"Y&@/P#,E2\`C(R,C`'I#P8*E2C=-DF1H#.*E=F1L#J629O
XV'`.@`6!U88MA?F#_7]U@X&'U8=-BKV+`8OAAOV-T8W1C\^KJZCXATX,R+O\&!-M0!]-0VW`'Y
XVTU&@P@W@/O_34<D^_]-1R=M0,@'BR0M,13TN'QD7"P4"`0$```"@S>-OE<#V1Z#,X^INLU8HC
XVP`````"`TF379````````/AE]V:I@*)5(`UC.*D`A=;MYP*%U*E@A=?MZ`*%U:(`&+V=9O`&,
XV9=:%UI`$YM>0$*``.+'6Y=21ULBQUN75D=;HX'^0VZ(`O1QGA=:]*F>%V.B]'&>%U[TJ9X79`
XVZ*``.+'8Y=21V+'6Y=61UN`.D->E#(TH9*4-C2EDJ2>%#*EDA0VMYP*%V*WH`H79J0"%UJE@S
XVA=>B!J``L=:1V,C0^>;7YMG*T/),*F0%`Q(%'!D*`P<#!@D(`P,%!`4:`P<E!04K"`D#!P,0)
XV"04G"@<%"0\&`PT#`P8('P0(#04+!P4'!04&`P,#"P8)'`,,"P@%"@0%"0,%!04''Q0#`P<#6
XV&#`&!P,(^&8W9P,+#`8:$0H##00#"`,+!`<'"0T[`@("`@("`@("`@("`@``)$=A)F*68AUCG
X:,&169'-F26$H8HMB'V,K9%%D;V;B`N,"^&4`)
X``
Xend
Xsize 1592
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > atr8500.uue
Xbegin 666 autorun.sys
XV__\`-/\TA4.IB"!:.*UY.2DPJ,D@L"FE0\F;T!&I#2`X-#`9K7DY"A`1J0K0$"E_B#`+R2"0K
XV!,E]D`.@`6"%0ZUY.2D#R0/0!09#.&9#I$G(P""0`J``(&$XQ$CP^:5#F8DYA$EXJ0B@`"!0Z
XV.%C(8*F$(%HXI$;$1_#UN:DYR(1&A4.M>3DI#,D,T`0&0T9#K7DY*3"HI4/`(+`6*7_)#=`"S
XVJ9N(,`O)()`$R7TP`ZUZ.:`!8"QX.3`%+'XY$#L@##4P2JU[.4I*2BD'J+G--HWK`J(`CNT"E
XVK>P"K7LY$`/.ZP))_RWL-?`"*00%1(WJ`J``A$2,[`+(8#BE1^5&C>L".*5)Y0`U_S5(C>T",
XVJ0#PWJD/T-J@.*F@HN(@2S<PW*+BC@L#HOV."@.@`(P(`ZE3('TWJ3F-!0.I>XT$`ZE2H$"BY
XV`XT)`TQW-ZUX.3`#H)9@H`"$1*4J"4"->#G(8"QX.7`6I1'P$J5%\/,8I11I!L44T/QX('PUY
XV6*#`C'XYC'@YH`%@J32-`].I`(5(A4FMASF-%@*MB#F-%P*@!KF`.9D)`HC0]ZD\H("$$8T#8
XVTV"E(BD/R0FP%ZA*L!.YD3A(N9`X2&"I!`5$A42@BS`SH(0P+RQX.1`$H(4P)G`$H)DP("`IU
XV%JW)."GOC<DX(`PUK7LY*0#0SJ`XJ<RBXR!+-Q`#3/<VH`",`#;_-GXYJ7-XA$B$281&A$>-0
XV#]*I>(T(THT"THT&TJDHC0#2C032J:"-`=*-`]*-!=*-!]*@!KD)`IF`.;F9.)D)`HC0\:T6-
XV`HV'.:F8C18"K1<"C8@YJ3>-%P*M>#DIOXUX.2D$\`*I(,@@4#A8H`$0BZW%."GWC<4XI2H0R
XV"*W%.`D(C<4XI2HI,$I*2DJHK<DX*9\9P3:-R3BMQSBE*BD/J+YD.8[".$I*J*W%."D_&70YK
XVC<4XI2LI!ZBYQ3:-[#5,]39@($```"``(!`P$#`!,0$QS?W-_:W%."G\J*4JC7DY*0/)`?`&T
XVR0+0`\C(R(S%.*4KC7HYH`&M>#F%*IA@KLD`-_\W.*4J*0-*BBGOL`()$*JE*BDP\`K),(H);
XV@+`"*7^J)"H0"(H)`G`"*?VJC<DX+'@Y<!.@F3#!CETY"JD`*HU;.2!O-S"XHN*@.*F@C`4#B
XVC00#C@L#('$W,)ZI5Z"`HHX@=S<PDR!Q-ZE'(',W3/<VJ>RI4Z``H@"."@.."`.-`@.,`P.@M
XV`(P)`\B,`0/(C`8#H%J,``-,6>0L#M(0`VR'.4B82"!\-081J4`->#F->#G0+.Z`.:40C0[2D
XVT"+8F$BD2,1)T`NE$"GGH`$@4CC0#BR`.3#=R+F).81(C0W2:*AH0-B82*T-TLD?\#+)$_`S>
XVR1'P-`Y_.9`"*1^D1YFI.0`X_SC(A$>M#]*-"M))_RG`!43$1M`%R`D0A$:%1&BH:$!N?SDP8
XV'FZ`.3`9+8`Y\!&E$`D0A1"-#M*I`(V`.4SW-HV`.:T/THT*TDG_*<`%1$P8.`40A1"-#M*$;
XV16`L>#GP%C`7+'@Y,!)0%:U^.3`1H("$$8Q^.2RHB"R@A6AHF&`@RS4P]V!`-54U:33_,ZXT\
XVIS7&-?TV;C;4-LHUXC>\-[PWVT,R_N(^`=-#VT,R_^(A(>(!(0+MLP%#">VSVT,R_>+)1X```
XV!$0#P07J,!`&2%AHQ2;A5#X0TT+;0LM7*!0%!"@0?OX@,`?V0'<^'Q@"+`730-M#RT<H!=M!\
XV$AP$8^-<`#E^.2;@5-M#RU<H$`T,*`Q^TT$L#7GF_/Y\*#7;0LMO*!_+1R@*>?[P,`K;0!(<L
XV#&/C7!B?VT++5RCZ/A/30!CJT0P-R-M#RU<H^G[302P8\MM"RU<H^CX1TT`8OS[_TU')VS(!:
XV[\D@T\"I`*^/@(!`(!40"`0$Q(1$1,```````("I.J@[J8"B52`V-SBI`(76[><"A=2I-(77.
XV[>@"A=6B`!B]=COP!F76A=:0!.;7D!"@`#BQUN74D=;(L=;EU9'6Z.!!T-NB`+VW.X76O;T[:
XVA=CHO;<[A=>]O3N%V>B@`#BQV.74D=BQUN75D=;@!M#7K><"A=BMZ`*%V:D`A=:I-(77H@>@Q
XV`+'6D=C(T/GFU^;9RM#R&*WG`FFIC><"K>@":0:-Z`*@`+D:`_`,R5+P",C(R,`>D/!@J5*%7
XV19D:`SBIA.74F1L#J3CEU9D<`Z`!8`4#$@4<%PD*"`D(#24%!5,U$`47!@,1!@@?!!,/(`4W;
XV`PP+"`4*;HH^!@<#'@N$!P<)#:D[PCL%`@("`@("`@("`@("`O`U5#9(-_(U239*-^("XP*I/
X!.@``Z
X``
Xend
Xsize 1729
SHAR_EOF
#	End of shell archive
exit 0
===========================================================================
Charles Marslett
STB Systems, Inc.  <== Apply all standard disclaimers
Wordmark Systems   <== No disclaimers required -- that's just me
chasm@killer.dallas.tx.us