! Arbeiten mit dem Atari Bus - Teil 4 - RS-232 Modul

von Rohland Büher, ABBUC Regionalgruppe Stuttgart (ARGS), Februar 1994



!! RS 232-Modul

Diesmal wenden wir uns einem anderen Baustein
zu. Er trägt die Bezeichnung 6551 und heißt "ACIA"

Er ist ebenfalls ein Peripheriebaustein Für die 65-er CPU und wird zur 
seriellen Datenübertragung eingesetzt. Er hat wie die PIA vier Register 
und übernimmt alle nötigen Funktionen für die, Datenübertragung.

Bauteile 

| 1 | ACIA 6551(A) + Quarz 1.8432 | 
| 1 | MAX 232 (oder Ersatz-Typ) |
| 4 | Elko 22 MikroF |

!! Bauplanbeschreibung und Bedienung

[{Image src='ARGSRS232.png' width='800' height='400'}]
Bauplan: [ARGSRS232.png]


Die Schaltung lehnt sich teilweise an das RS232-Interface des 
Atari-Magazins an (Atari Magazin 12/88). Dort sind auch weitere 
Informationen über Funktion und Programmierung des Bausteins zu finden. 
Geändert wurde die Steueradresse. Außerdem wurde auf drei 
Hardwarehandshake-Leitungen (DTR, DSR, DCD) verzichtet. Das alles 
vereinfacht die Schaltung ungemein und ermöglicht den Einbau in ein 
Modulgehäuse für den Modulschacht

Die IRQ-Leitung läßt sich am Modulschacht leider nicht abfragen. Aber der 
Baustein hat ein Register, in dem ein ausgelöster Interrupt 
softwaremäßig angezeigt wird. So kann man über einen externen Interrupt 
(VBI, DLI, Pokey) dieses Register abfragen und so auf den 
Hardwareinterrupt verzichten.

Nullmodenbetrieb: Die Standard-Leitungen Für eine serielle 
Datenübertragung  sind 

| TxD  | Datensenden |
| RxD  | Datenempfang  Masse/Ground |

Alle Informationen werden über diese Leitungen ausgetauscht.

Es ist nur ein sogenanntes „Softwarehandshake“ möglich. Dies geschieht 
normalerweise über die Befehle

* XON (17, CTRL-Q) = Datenempfang möglich 
* XOFF (19, CTRL-S) = kein Datenempfang möglich

Achtung: Man muß beim ARGS-RS-232 Modul zusätzlich die Leitungen RTS und 
CTS- miteinander verbinden Beim PC oder anderen Rechnern muß u.U. auch 
noch DSR, DTR, DCD miteinander verbunden werden.

Standard für den Atari XL/XE ist der Befehlssatz des 850er Interfaces 
Eine billige Alternative ist das Datari-Kabel das ein einfaches 
Nullmodemkabel darstellt und für diesen Einsatz kompatibel zum 850er 
ist. Der Handler für das ARGS-Interface ist (bisher nur) teilweise 
kompatibel zum 850er.

Man muß beim Datenaustausch immer bedenken, daß der Atari für Return den 
Wort 155 hat und nicht 13 (=> Wandlung !!!)

!! Software Für das RS-232-Modul

Was man dazu braucht ist schlicht ein R:-Handler Nun hat aber das 850-er 
Interface einen Standard vorgegeben, an den man sich halten sollte. 
Deswegen muß der Handler nicht nur mit dem ACIA-Baustein umgehen können, 
sondern muß auch die Befehle des 850-er Interfaces verstehen. Das macht 
die Sache leider etwas komplizierter, aber nicht unmöglich.

Nun zur Software:

* ARGSRS2.** R:-Handler mit hoher Kompatibilität zum 850-er Interface. 
Neue Version, Stand Juli 1994. Steht ab $2000 im Speicher und legt MEMLO 
hoch
* ARGSRSM** (M=Mini) Auf das Nötigste reduzierter R:-Handler. Nur 
Veränderung der Baud-Festeinstellung von Wortlänge (8 Bit), Parität 
(keine) und Stopbits (1). Nur Hardwarehandshake und keine 
Zeichenwandlung von 155 in 13. Reicht aber z.B. für <nop>BobTerm völlig. Steht 
auch ob $2000 im Speicher.
* ARGSRSRE.COM (RE=RElocobel) Relocierbarer R:-handler (ARGSRSM s.o.), 
der sich ob MEMLOW in den Speicher legt und dann MEMLOW entsprechend 
erhöht.

Weiche Programme laufen nun mit diesen Handlern? Pur jeden Fall alle die 
das 850-er Interface, voraussetzen und die Handler „Sauber“ abfragen und 
nicht irgendwie direkt einspringen, d.h.	Buffer direkt auslesen. Es 
funktionieren: 

* BOBTERM (vermutlich alle Versionen) 
* OMNICOM
* Kermit (K65V37NR.COM)

Es funktionieren nicht

* ANSITERM (hat wohl keinen echten R:-Handler)

!! Steueraddressen

Steueradressen: (CCTL + A3) 
----

|| ACIA  || Aufgabe	||  Atari-Bus (Modulschacht)  
| DATA	  | Ein-/Ausgabe  | $D508/54536 
| STATUS	| IRQ, Fehler, DSR, DCD  | $D509/54537  
| COMMAND  | Parität, Echo, IRQ, RTS | $D50A/54538  
| DATA	  | Baud, Stopbit, Wortlänge | $D5OB/54539  

----

!! Platinen Layout ( Main.GuusAssmann )

für die ARGS RS-232 Cart 

!! Treiber Quellen

!ARGSRS.SRC
{{{

***		 RS 232 HANDLER			 ***
*** Fuer A.R.G.S. RS232 Interface ***
***	Mit Pokey-Timer-Interrupt	***
***		  Version 1.23			  ***
***		von Sven Traenkle		  ***

			ORG $2000,$A800

ACDATA	EQU $D508
ACSTAT	EQU $D509
ACCOMM	EQU $D50A
ACCONT	EQU $D50B


DOSINI	EQU $C
DOSVEC	EQU $A
COLOR1	EQU 709
COLOR2	EQU 710
COLOR4	EQU 712
MEMLO	 EQU 743
ICAX1Z	EQU $2A
ICAX2Z	EQU $2B
ICCOMZ	EQU $22
BRKKEY	EQU 17
POKMSK	EQU 16
DVSTAT	EQU 746

PHENTV	EQU $E486
IRQEN	 EQU $D20E
AUDF1	 EQU $D200
KBCODE	EQU $2FC
VTIMR1	EQU 528
STIMER	EQU 53769


*************************
* Jetzt gehts los !!!	*
*************************

PROT	  DFB 2 *+0
STOP	  DFB 19 *+1
CONT	  DFB 17 *+2
FULLFL	DFB 0 *+3
DATABRK  DFB 0 *+4
ERR		DFB 0 *+5
STAT	  DFB 0 *+6
CHECK	 DFB 0 *+7
OFF		DFB 0 *+8
RWFL	  DFB 0 *+9
NOCHR	 DFB 1 *+A
TRANS	 DFB 1 *+B

IIN		DFB 0 *+C
IOUT	  DFB 0 *+D
OIN		DFB 0 *+E
OOUT	  DFB 0 *+F


INIT	  LDA #END:L
			STA MEMLO
			LDA #END:H
			STA MEMLO+1


*** TREIBER IN TABELLE EINTRAGEN

			LDX #'R 
			LDA #TAB:H
			LDY #TAB:L
			SEC
			JSR PHENTV
			BCC OKA
			RTS ; EINTRAG NICHT ERFOLGREICH
OKA		LDA #5
			STA COLOR4


*** VOREINSTELLUNGEN

			LDA #9
			STA ACCOMM
			LDA #23
			STA ACCONT
			RTS

TAB		DFW OPEN-1
			DFW CLOSE-1
			DFW GET-1
			DFW PUT-1
			DFW STATUS-1
			DFW SPECIAL-1
			JMP OKA


***  HANDLERROUTINEN ***

************
*** OPEN ***
************

OPEN	  LDY #1
			LDA ICAX1Z
			STA RWFL
			LDA #$00
			STA IIN
			STA IOUT
			STA OIN
			STA OOUT


*** POKEY-INT. INIT:

			LDA POKMSK
			ORA #$01
			STA POKMSK
			STA IRQEN
			LDA FREQ
			STA AUDF1
			LDA #INT:L
			STA VTIMR1
			LDA #INT:H
			STA VTIMR1+1
			LDA #1
			STA STIMER
			JSR AN
			RTS


****************
*** CLOSE	 ***
****************

CLOSE	 LDA #0
			STA OFF
			LDA POKMSK
			AND #$FE
			STA POKMSK
			STA IRQEN
			JSR AUS
			LDY #1
			RTS


****************
*** GET ********
****************

GET		LDA BRKKEY
			BEQ BREAK
			LDA #$00
			STA NOCHR
			LDA IIN
			CMP IOUT
			BNE BUFCHK
			LDA ERR
			BNE ERROR
			LDA RWFL
			CMP #12
			BEQ GET
			LDA #$1
			STA NOCHR
			LDA #$00
			JMP NEXT
BUFCHK	LDA FULLFL
			BEQ GETCHR
			LDA IOUT
			SEC
			SBC IIN
			CLC
			CMP #10
			BNE GETCHR
			JSR AN
			LDA #$0
			STA FULLFL

GETCHR	LDY IOUT
			INC IOUT
			LDA IBUF,Y
*		  PHA
*		  LDA TRANS
*		  BNE NOTRL
*		  PLA
*		  AND #127
*		  CMP #13
*		  BNE NOCR
*		  LDA #155
*NOCR	 PHA
*
*NOTRL	PLA
*
NEXT	  LDY #$1
			RTS

ERROR	 LDA ERR
			AND #1
			BNE PARITY
			LDY #169
			JMP ENDERR
			LDA ERR
			AND #2
			BNE STASTO
OVERRUN  LDY #137
			JMP ENDERR
BREAK	 LDY #128
			INC BRKKEY
			RTS
PARITY	LDY #143
			JMP ENDERR
STASTO	LDY #166
ENDERR	LDA #$00
			STA ERR
			RTS		


**************
*** PUT  *****
**************

PUT		PHA
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
PUTL	  LDA BRKKEY
			BEQ BREAK
			LDA OIN
			CLC
			ADC #2
			CMP OOUT
			BEQ PUTL
			LDY OIN
			INC OIN

*		  LDA TRANS
*		  BNE NOTRLA
*			PLA
*			CMP #155
*		  BNE NOEOL
*			LDA #13
*
*NOEOL	AND #127
*		  PHA
*
NOTRLA	PLA
			STA OBUF,Y
			LDY #1
			RTS


********************
*** SPECIAL ********
********************

SPECIAL  LDA ICCOMZ
			CMP #36
			BEQ X36
			CMP #38
			BEQ X38
			LDY #1
			RTS

*** XIO 38 (UEBERSETZUNG, PARITAET)

X38		LDA ICAX1Z
			AND #5
			CMP #5
			BEQ UNGER
			LDA ICAX1Z
			AND #10
			CMP #10
			BEQ GERADE
KEINE	 LDA ACCOMM
			AND #$DF
			STA ACCOMM
			LDY #1
			RTS * JMP TL
UNGER	 LDA ACCOMM
			AND #$3F
			ORA #32
			LDY #1
			RTS
GERADE	LDA ACCOMM
			AND #$7F
			ORA #32
			LDY #1
			RTS
*TL		LDA ICAX1Z
*		  AND #32
*		  BNE NTRANS
*		  LDA #$00
*		  STA TRANS
*		  LDY #1
*		  RTS
*NTRANS  LDA #$01
*		  STA TRANS
*		  LDY #1
*		  RTS


*** XIO 36 (BAUDRATE,WORTLAENGE...)

X36		LDA ICAX1Z
			AND #15
			LDX #0
			JSR COMP
			STX WAITS
			STA HELPFL
			LDA ICAX1Z
			AND #48
			ASL
			ADC HELPFL
			ADC #16
			STA HELPFL
			LDA ICAX1Z
			AND #128
			ADC HELPFL
			STA ACCONT
			STY FREQ
			STY AUDF1
			LDY #1
			RTS
*
COMP	  CMP #9
			BEQ B600
			CMP #10
			BEQ B1200
			CMP #11
			BEQ B1800
			CMP #12
			BEQ B2400
			CMP #13
			BEQ B4800
			CMP #14
			BEQ B9600
			CMP #15
			BEQ B19200
			LDA #6
			LDY #$FF
			RTS
B600	  LDA #7
			LDY #$FF
			RTS
B1200	 LDA #8
			LDY #$FF
			RTS
B1800	 LDA #9
			LDY #$FF
			RTS
B2400	 LDA #10
			LDY #160
			RTS
B4800	 LDA #12
			LDY #80
			RTS
B9600	 LDA #14
			LDY #40
			LDX #2
			RTS
B19200	LDA #15
			LDY #20
			LDX #6
			RTS

HELPFL	DFB 00
FREQ	  DFB 255
WAITS	 DFB 0


****************
*** STATUS  ****
****************

STATUS	LDA #$00
			STA DVSTAT+2
			LDA IIN
			SEC
			SBC IOUT
			STA DVSTAT+1
			LDA OIN
			SEC
			SBC OOUT
			STA DVSTAT+3
			CLC
			LDY #$1
			RTS


*************************************
*  INTERRUPT								*
*************************************

INT		TYA
			PHA
			TXA
			PHA
			LDA ACSTAT
			STA STAT
			AND #128
			BNE ACIA
**
*		  LDA KBCODE
*		  CMP #227 * Taste N mit Shift u. Ctrl.
*		  BNE NON
*		  LDA #0
*		  STA PROT
*NON	  CMP #254 * SHFT.-CTRL. S
*		  BNE NOS
*		  LDA #1
*		  STA PROT
*NOS	  CMP #249 *SHFT.-CTRL. H
*		  BNE BACK
*		  LDA #2
*		  STA PROT
BACK	  PLA
			TAX
			PLA
			TAY
			PLA
			RTI
ACIA	  LDA CHECK
			AND STAT
			BEQ OK
			JMP BACK
OK		 LDA STAT
			AND #8
			BEQ NOTFULL
			JSR REC
NOTFULL  LDA STAT
			AND #16
			BEQ NOTEMPT
			JMP TRANSF
NOTEMPT  JMP BACK

***********************
* Byte in Inputbuffer *
***********************

REC		LDA STAT
			AND #1
			BNE ERRO
			LDA PROT
			CMP #1
			BNE NOSO
			LDA ACDATA
			CMP STOP
			BEQ HALT
			CMP CONT
			BEQ WEITER
			JMP INBUF

NOSO	  LDA ACDATA
INBUF	 LDY IIN
			STA IBUF,Y
			INC IIN
			LDA IOUT
			SEC
			SBC IIN
			CMP #8
			BEQ VOLL
			RTS

VOLL	  JSR AUS
			LDA #1
			STA FULLFL
			RTS

ERRO	  LDA STAT
			AND #1
			STA ERR
			RTS

HALT	  LDA #1
			STA DATABRK
			RTS

WEITER	PHA
			LDA DATABRK
			BEQ INBU
			LDA #0
			STA DATABRK
			PLA
			RTS
INBU	  PLA
			JMP INBUF

******************************
* Byte aus Outputbuffer		*
******************************


TRANSF	LDA WAIT
			BEQ ENDWAIT
			DEC WAIT
			JMP BACK
ENDWAIT  LDA WAITS
			STA WAIT
			LDA DATABRK
			BNE NOTRANS
			LDA OOUT
			CMP OIN
			BNE AUSG
NOTRANS  LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
			LDA OFF
			BNE ZU
			JMP BACK
ZU		 JSR AUS
			JMP BACK

AUSG	  TAY
			LDA OBUF,Y
			STA ACDATA
			INC OOUT
			JMP BACK

WAIT	  DFB 03


***************************
* READY AN SENDER MELDEN  *
***************************

AN		 LDA PROT
			BNE HAND
			RTS
HAND	  CMP #2
			BNE AN1
			LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
			RTS
AN1		LDA ACCOMM
			AND #12
			CMP #4
			BEQ AN2
			LDY #1
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
AN2		LDA ACSTAT
			AND #16
			BEQ AN2
			LDA CONT
			STA ACDATA
			CPY #1
			BEQ END2
			LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
END2	  RTS


**************************
* NICHT READY MELDEN	  *
**************************

AUS		LDA PROT
			BNE HAND1
			RTS
HAND1	 CMP #2
			BNE AUS1
			LDA ACCOMM
			AND #243
			STA ACCOMM
			RTS
AUS1	  LDA ACCOMM
			AND #12
			CMP #4
			BEQ AUS2
			LDY #1
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
AUS2	  LDA ACSTAT
			AND #16
			BEQ AUS2
			LDA STOP
			STA ACDATA
			CPY #1
			BEQ ENDE
			LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
ENDE	  RTS


*******************
*** BUFFER		 **
*******************

IBUF	  ASC '********************************'
			ASC '  A.R.G.S. (Atari Regionalgruppe'
			ASC ' Stuttgart) is the best !!!	  '
			ASC '********************************'
			ASC '										  '
			ASC 'ARGS-RS 232 Handler (p)1992/93  '
			ASC 'Sven Traenkle (mit mehr oder wen'
			ASC 'iger grosser Unterstuetzung von '
			DFB 255
OBUF	  ASC 'Roland Buehler, Holger Pfeil, Pe'
			ASC 'ter Straif, Star Trek - The next'
			ASC ' Generation, Al Bundy und seiner'
			ASC ' schrecklich netten Familie, der'
			ASC 'Lindenstrasse, 21st Century Digi'
			ASC 'tal Boy, Ramones, Coca Cola, Stu'
			ASC 'ttgarter Hofbraeu, Bofrost,Wing '
			ASC 'Com.II und meinem genialen Hirn.'
END		DFB 255
}}}

! ARGSRS2.SRC
{{{

***		 RS 232 HANDLER			 ***
*** Fuer A.R.G.S. RS232 Interface ***
***	Mit Pokey-Timer-Interrupt	***
***		  Version 1.23			  ***
***		von Sven Traenkle		  ***
*** modifiziert v. RoBue 23.08.94 ***

			ORG $2000,$A800

ACDATA	EQU $D508
ACSTAT	EQU $D509
ACCOMM	EQU $D50A
ACCONT	EQU $D50B


DOSINI	EQU $C
DOSVEC	EQU $A
COLOR1	EQU 709
COLOR2	EQU 710
COLOR4	EQU 712
MEMLO	 EQU 743
ICAX1Z	EQU $2A
ICAX2Z	EQU $2B
ICCOMZ	EQU $22
BRKKEY	EQU 17
POKMSK	EQU 16
DVSTAT	EQU 746

PHENTV	EQU $E486
IRQEN	 EQU $D20E
AUDF1	 EQU $D200
KBCODE	EQU $2FC
VTIMR1	EQU 528
STIMER	EQU 53769


*************************
* Jetzt gehts los !!!	*
*************************

PROT	  DFB 2 *+0
STOP	  DFB 19 *+1
CONT	  DFB 17 *+2
FULLFL	DFB 0 *+3
DATABRK  DFB 0 *+4
ERR		DFB 0 *+5
STAT	  DFB 0 *+6
CHECK	 DFB 0 *+7
OFF		DFB 0 *+8
RWFL	  DFB 0 *+9
NOCHR	 DFB 1 *+A
TRANS	 DFB 1 *+B

IIN		DFB 0 *+C
IOUT	  DFB 0 *+D
OIN		DFB 0 *+E
OOUT	  DFB 0 *+F


INIT	  LDA #END:L
			STA MEMLO
			LDA #END:H
			STA MEMLO+1


*** TREIBER IN TABELLE EINTRAGEN

			LDX #'R 
			LDA #TAB:H
			LDY #TAB:L
			SEC
			JSR PHENTV
			BCC OKA
			RTS ; EINTRAG NICHT ERFOLGREICH
OKA		LDA #5
			STA COLOR4


*** VOREINSTELLUNGEN

			LDA #9
			STA ACCOMM
			LDA #23
			STA ACCONT
			RTS

TAB		DFW OPEN-1
			DFW CLOSE-1
			DFW GET-1
			DFW PUT-1
			DFW STATUS-1
			DFW SPECIAL-1
			JMP OKA


***  HANDLERROUTINEN ***

************
*** OPEN ***
************

OPEN	  LDY #1
			LDA ICAX1Z
			STA RWFL
			LDA #$00
			STA IIN
			STA IOUT
			STA OIN
			STA OOUT


*** POKEY-INT. INIT:

			LDA POKMSK
			ORA #$01
			STA POKMSK
			STA IRQEN
			LDA FREQ
			STA AUDF1
			LDA #INT:L
			STA VTIMR1
			LDA #INT:H
			STA VTIMR1+1
			LDA #1
			STA STIMER
			JSR AN
			RTS


****************
*** CLOSE	 ***
****************

CLOSE	 LDA #0
			STA OFF
			LDA POKMSK
			AND #$FE
			STA POKMSK
			STA IRQEN
			JSR AUS
			LDY #1
			RTS


****************
*** GET ********
****************

GET		LDA BRKKEY
			BEQ BREAK
			LDA #$00
			STA NOCHR
			LDA IIN
			CMP IOUT
			BNE BUFCHK
			LDA ERR
			BNE ERROR
			LDA RWFL
			CMP #12
			BEQ GET
			LDA #$1
			STA NOCHR
			LDA #$00
			JMP NEXT
BUFCHK	LDA FULLFL
			BEQ GETCHR
			LDA IOUT
			SEC
			SBC IIN
			CLC
			CMP #10
			BNE GETCHR
			JSR AN
			LDA #$0
			STA FULLFL
*
GETCHR	LDY IOUT
			INC IOUT
			LDA IBUF,Y
			PHA
			LDA TRANS
			BNE NOTRL
			PLA
			AND #127
			CMP #13
			BNE NOCR
			LDA #155
NOCR	  PHA
*
NOTRL	 PLA
*
NEXT	  LDY #$1
			RTS

BREAK	 LDY #128
			INC BRKKEY
			RTS
ERROR	 LDA #$00
			STA ERR
			LDY #163
			RTS		


**************
*** PUT  *****
**************

PUT		PHA
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
PUTL	  LDA BRKKEY
			BNE PUTLL
			PLA
			JMP BREAK
PUTLL	 LDA OIN
			CLC
			ADC #2
			CMP OOUT
			BEQ PUTL
			LDY OIN
			INC OIN
*
			LDA TRANS
			BNE NOTRLA
			PLA
			CMP #155
			BNE NOEOL
			LDA #13
*
NOEOL	 AND #127
			PHA
*
NOTRLA	PLA
			STA OBUF,Y
			LDY #1
			RTS


********************
*** SPECIAL ********
********************

SPECIAL  LDA ICCOMZ
			CMP #36
			BEQ X36
			CMP #38
			BEQ X38
			LDY #1
			RTS

*** XIO 38 (UEBERSETZUNG, PARITAET)

X38		LDA ICAX1Z
			AND #5
			CMP #5
			BEQ UNGER
			LDA ICAX1Z
			AND #10
			CMP #10
			BEQ GERADE
KEINE	 LDA ACCOMM
			AND #$DF
			STA ACCOMM
			LDY #1
			JMP TL
UNGER	 LDA ACCOMM
			AND #$3F
			ORA #32
			LDY #1
			RTS
GERADE	LDA ACCOMM
			AND #$7F
			ORA #32
			LDY #1
			RTS
TL		 LDA ICAX1Z
			AND #32
			BNE NTRANS
			LDA #$00
			STA TRANS
			LDY #1
			RTS
NTRANS	LDA #$01
			STA TRANS
			LDY #1
			RTS


*** XIO 36 (BAUDRATE,WORTLAENGE...)

X36		LDA ICAX1Z
			AND #15
			LDX #0
			JSR COMP
			STX WAITS
			STA HELPFL
			LDA ICAX1Z
			AND #48
			ASL
			ADC HELPFL
			ADC #16
			STA HELPFL
			LDA ICAX1Z
			AND #128
			ADC HELPFL
			STA ACCONT
			STY FREQ
			STY AUDF1
			LDY #1
			RTS
*
COMP	  CMP #9
			BEQ B600
			CMP #10
			BEQ B1200
			CMP #11
			BEQ B1800
			CMP #12
			BEQ B2400
			CMP #13
			BEQ B4800
			CMP #14
			BEQ B9600
			CMP #15
			BEQ B19200
			LDA #6
			LDY #$FF
			RTS
B600	  LDA #7
			LDY #$FF
			RTS
B1200	 LDA #8
			LDY #$FF
			RTS
B1800	 LDA #9
			LDY #$FF
			RTS
B2400	 LDA #10
			LDY #160
			RTS
B4800	 LDA #12
			LDY #80
			RTS
B9600	 LDA #14
			LDY #40
			LDX #2
			RTS
B19200	LDA #15
			LDY #20
			LDX #6
			RTS

HELPFL	DFB 00
FREQ	  DFB 255
WAITS	 DFB 0


****************
*** STATUS  ****
****************

STATUS	LDA #$00
			STA DVSTAT+2
			LDA IIN
			SEC
			SBC IOUT
			STA DVSTAT+1
			LDA OIN
			SEC
			SBC OOUT
			STA DVSTAT+3
			CLC
			LDA ERR
			STA DVSTAT
			LDY #$1
			RTS


*************************************
*  INTERRUPT								*
*************************************

INT		LDA ACSTAT
			BPL BACK1
			STA STAT
			TYA
			PHA

**
*		  LDA KBCODE
*		  CMP #227 * Taste N mit Shift u. Ctrl.
*		  BNE NON
*		  LDA #0
*		  STA PROT
*NON	  CMP #254 * SHFT.-CTRL. S
*		  BNE NOS
*		  LDA #1
*		  STA PROT
*NOS	  CMP #249 *SHFT.-CTRL. H
*		  BNE BACK
*		  LDA #2
*		  STA PROT

ACIA	  LDA CHECK
			AND STAT
			BEQ OK
			JMP BACK
OK		 LDA STAT
			AND #8
			BEQ NOTFULL
			JSR REC
NOTFULL  LDA STAT
			AND #16
			BEQ BACK
			JMP TRANSF

BACK	  PLA
			TAY
BACK1	 PLA
			RTI

***********************
* Byte in Inputbuffer *
***********************

REC		LDA STAT
			AND #7
			BNE ERRO
			LDA PROT
			CMP #1
			BNE NOSO
			LDA ACDATA
			CMP STOP
			BEQ HALT
			CMP CONT
			BEQ WEITER
			JMP INBUF

NOSO	  LDA ACDATA
INBUF	 LDY IIN
			STA IBUF,Y
			INC IIN
			LDA IOUT
			SEC
			SBC IIN
			CMP #8
			BEQ VOLL
			RTS

VOLL	  JSR AUS
			LDA #1
			STA FULLFL
			RTS

ERRO	  STA ERR
			RTS

HALT	  LDA #1
			STA DATABRK
			RTS

WEITER	PHA
			LDA DATABRK
			BEQ INBU
			LDA #0
			STA DATABRK
			PLA
			RTS
INBU	  PLA
			JMP INBUF

******************************
* Byte aus Outputbuffer		*
******************************


TRANSF	LDA WAIT
			BEQ ENDWAIT
			DEC WAIT
			JMP BACK
ENDWAIT  LDA WAITS
			STA WAIT
			LDA DATABRK
			BNE NOTRANS
			LDA OOUT
			CMP OIN
			BNE AUSG
NOTRANS  LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
			LDA OFF
			BNE ZU
			JMP BACK
ZU		 JSR AUS
			JMP BACK

AUSG	  TAY
			LDA OBUF,Y
			STA ACDATA
			INC OOUT
			JMP BACK

WAIT	  DFB 03


***************************
* READY AN SENDER MELDEN  *
***************************

AN		 LDA PROT
			BNE HAND
			RTS
HAND	  CMP #2
			BNE AN1
			LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
			RTS
AN1		LDA ACCOMM
			AND #12
			CMP #4
			BEQ AN2
			LDY #1
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
AN2		LDA ACSTAT
			AND #16
			BEQ AN2
			LDA CONT
			STA ACDATA
			CPY #1
			BEQ END2
			LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
END2	  RTS


**************************
* NICHT READY MELDEN	  *
**************************

AUS		LDA PROT
			BNE HAND1
			RTS
HAND1	 CMP #2
			BNE AUS1
			LDA ACCOMM
			AND #243
			STA ACCOMM
			RTS
AUS1	  LDA ACCOMM
			AND #12
			CMP #4
			BEQ AUS2
			LDY #1
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
AUS2	  LDA ACSTAT
			AND #16
			BEQ AUS2
			LDA STOP
			STA ACDATA
			CPY #1
			BEQ ENDE
			LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
ENDE	  RTS


*******************
*** BUFFER		 **
*******************

IBUF	  ASC '********************************'
			ASC '  A.R.G.S. (Atari Regionalgruppe'
			ASC ' Stuttgart) is the best !!!	  '
			ASC '********************************'
			ASC '										  '
			ASC 'ARGS-RS 232 Handler (p)1992/93  '
			ASC 'Sven Traenkle (mit mehr oder wen'
			ASC 'iger grosser Unterstuetzung von '
			DFB 255
OBUF	  ASC 'Roland Buehler, Holger Pfeil, Pe'
			ASC 'ter Straif, Star Trek - The next'
			ASC ' Generation, Al Bundy und seiner'
			ASC ' schrecklich netten Familie, der'
			ASC 'Lindenstrasse, 21st Century Digi'
			ASC 'tal Boy, Ramones, Coca Cola, Stu'
			ASC 'ttgarter Hofbraeu, Bofrost,Wing '
			ASC 'Com.II und meinem genialen Hirn.'
END		DFB 255
}}}

! ARGSRSM.SRC
{{{

***		 RS 232 HANDLER			 ***
*** Fuer A.R.G.S. RS232 Interface ***
***	Mit Pokey-Timer-Interrupt	***
***		von Sven Traenkle		  ***
***		  neue Version			  ***
***			 by RoBue				 ***
***			20.08.1994				***


			ORG $2000,$A800

ACDATA	EQU $D508			ACIA-
ACSTAT	EQU $D509			REGISTER
ACCOMM	EQU $D50A
ACCONT	EQU $D50B

DOSINI	EQU $C
DOSVEC	EQU $A
COLOR1	EQU 709
COLOR2	EQU 710
COLOR4	EQU 712
MEMLO	 EQU 743
ICAX1Z	EQU $2A
ICAX2Z	EQU $2B
ICCOMZ	EQU $22
BRKKEY	EQU 17
POKMSK	EQU 16
DVSTAT	EQU 746

PHENTV	EQU $E486
IRQEN	 EQU $D20E
AUDF1	 EQU $D200
KBCODE	EQU $2FC
VTIMR1	EQU 528
STIMER	EQU 53769


*************************
* Jetzt gehts los !!!	*
*************************


INIT	  LDA #END:L		  NEUES
			STA MEMLO			MEMLO
			LDA #END:H		  FESTLEGEN
			STA MEMLO+1


*** TREIBER IN TABELLE EINTRAGEN

			LDX #'R 
			LDA #TAB:H
			LDY #TAB:L
			SEC
			JSR PHENTV
			BCC OKA
			RTS					EINTRAG NICHT ERFOLGREICH
OKA		LDA #5
			STA COLOR4


*** VOREINSTELLUNGEN

			LDA #9				300/8/N/1
			STA ACCOMM
			LDA #23
			STA ACCONT
			RTS

TAB		DFW OPEN-1
			DFW CLOSE-1
			DFW GET-1
			DFW PUT-1
			DFW STATUS-1
			DFW SPECIAL-1
			JMP OKA


***  HANDLERROUTINEN ***

************
*** OPEN ***
************

OPEN	  LDY #0
			STY IIN			  BUFFER
			STY IOUT			 ZURUECK-
			STY OIN			  SETZEN
			STY OOUT
			INY

			LDA POKMSK		  POKEY-
			ORA #$01			 IRQ
			STA POKMSK		  EIN
			STA IRQEN
			LDA FREQ
			STA AUDF1
			LDA #INT:L
			STA VTIMR1
			LDA #INT:H
			STA VTIMR1+1
			LDA #1
			STA STIMER
			JMP AN

****************
*** CLOSE	 ***
****************

CLOSE	 LDA POKMSK		  POKEY-
			AND #$FE			 IRQ
			STA POKMSK		  AUS
			STA IRQEN
			JSR AUS
			LDY #1
			RTS


****************
*** GET ********
****************

GET		LDA BRKKEY		  BREAK?
			BEQ BREAK
			LDA IIN
			CMP IOUT
			BEQ GET
BUFCHK	LDA FULLFL
			BEQ GETCHR
			LDA IOUT
			SEC
			SBC IIN
			CLC
			CMP #10
			BNE GETCHR
			JSR AN
			LDA #$0
			STA FULLFL
GETCHR	LDY IOUT
			INC IOUT
			LDA IBUF,Y
NEXT	  LDY #$1
			RTS

BREAK	 LDY #128
			INC BRKKEY
			RTS


**************
*** PUT  *****
**************

PUT		PHA
			LDA ACCOMM
			AND #243
			ORA #4
			STA ACCOMM
PUT0	  LDA BRKKEY		  BREAK?
			BNE PUT1
			PLA
			JMP BREAK
PUT1	  LDA OIN
			CLC
			ADC #2
			CMP OOUT
			BEQ PUT0
			LDY OIN
			PLA
			STA OBUF,Y
			INC OIN
			LDY #1
			RTS


********************
*** SPECIAL ********
********************

SPECIAL  LDA ICCOMZ
			CMP #36
			BEQ X36
			LDY #1
			RTS


*** XIO 36 (BAUDRATE,WORTLAENGE...)

X36		LDA ICAX1Z
			AND #15
			JSR COMP			 Baudrate u. Pokey-Freq.
			SEI
			PHA
			LDA ACCONT
			AND #%11110000
			STA ICAX1Z
			PLA
			ORA ICAX1Z
			STA ACCONT
			STY FREQ
			STY AUDF1
			CLI
			LDY #1
			RTS
*
*		  AKKU: Baudrate
*		  YREG: IRQ-Frequenz
COMP	  CMP #10
			BEQ B1200
			CMP #12
			BEQ B2400
			CMP #13
			BEQ B4800
			CMP #14
			BEQ B9600
			CMP #15
			BEQ B19200
			LDA #6				300/8/N/1 
			LDY #$FF
			RTS
B1200	 LDA #8
			LDY #$FF
			RTS
B2400	 LDA #10
			LDY #160
			RTS
B4800	 LDA #12
			LDY #80
			RTS
B9600	 LDA #14
			LDY #40
			RTS
B19200	LDA #15
			LDY #20
			RTS


****************
*** STATUS  ****
****************

STATUS	LDA #$00
			STA DVSTAT+2
			LDA IIN
			SEC
			SBC IOUT
			STA DVSTAT+1
			LDA OIN
			SEC
			SBC OOUT
			STA DVSTAT+3
			CLC
			LDY #$1
			RTS


*************************************
*  INTERRUPT								*
*************************************

INT		LDA ACSTAT
			BPL BACK1
			STA STAT
			TYA
			PHA

ACIA	  LDA STAT
			AND #8
			BEQ NOTFULL
			JSR REC
NOTFULL  LDA STAT
			AND #16
			BEQ BACK
			JSR TRANSF

BACK	  PLA
			TAY
BACK1	 PLA
			RTI

***********************
* Byte in Inputbuffer *
***********************

REC		LDA STAT
			AND #%00000111
			BEQ NOSO
			LDA ACDATA
			RTS
NOSO	  LDA ACDATA
INBUF	 LDY IIN
			STA IBUF,Y
			INC IIN
			LDA IOUT
			SEC
			SBC IIN
			CMP #8
			BEQ VOLL
			RTS

VOLL	  JSR AUS
			LDA #1
			STA FULLFL
			RTS

******************************
* Byte aus Outputbuffer		*
******************************


TRANSF	LDA DATABRK
			BNE NOTRANS
			LDA OOUT
			CMP OIN
			BNE AUSG
NOTRANS  JMP AUS

AUSG	  TAY
			LDA OBUF,Y
			STA ACDATA
			INC OOUT
			RTS

***************************
* READY AN SENDER MELDEN  *
***************************

AN		 LDA ACCOMM
			AND #243
			ORA #8
			STA ACCOMM
			RTS


**************************
* NICHT READY MELDEN	  *
**************************

AUS		LDA ACCOMM
			AND #243
			STA ACCOMM
			RTS


*************************
* VARIABLE ETC.			*
*************************


FULLFL	DFB 0
DATABRK  DFB 0
STAT	  DFB 0 
FREQ	  DFB 255

IIN		DFB 0
IOUT	  DFB 0
OIN		DFB 0
OOUT	  DFB 0


*******************
*** BUFFER		 **
*******************

IBUF	  ASC '********************************'
			ASC '  A.R.G.S. (Atari Regionalgruppe'
			ASC ' Stuttgart) is the best !!!	  '
			ASC '********************************'
			ASC '										  '
			ASC 'ARGS-RS 232 Handler (p)1992/93  '
			ASC 'Sven Traenkle (mit mehr oder wen'
			ASC 'iger grosser Unterstuetzung von '
			DFB 255
OBUF	  ASC 'Roland Buehler, Holger Pfeil, Pe'
			ASC 'ter Straif, Star Trek - The next'
			ASC ' Generation, Al Bundy und seiner'
			ASC ' schrecklich netten Familie, der'
			ASC 'Lindenstrasse, 21st Century Digi'
			ASC 'tal Boy, Ramones, Coca Cola, Stu'
			ASC 'ttgarter Hofbraeu, Bofrost,Wing '
			ASC 'Com.II und meinem genialen Hirn.'
END		DFB 255
}}}