! 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 <nop>MikroF |
!! Bauplanbeschreibung und Bedienung
[{image}]
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
}}}