[Coco] NitrOS9 with Deluxe RS232 Pak
Barry Nelson
barry.nelson at amobiledevice.com
Thu Jun 18 01:38:29 EDT 2015
This page seems to have a good collection of null modem wiring diagrams.
http://www.pccompci.com/rs232-cable-technology.html
Here is what I believe is my last version of the ACAIPAK driver that I used to use with my BBS. This is assembly source code, and needs to be compiled with:
asm aciapak o=aciapak #40k
This is optional, but if I recall, it has some enhancements and stability improvements. It should certainly wait indefinitely for a connection. It appears to be hardcoded to have the RS232 pak in slot 1 of the multipak. I think this is the case for the regular driver as well.
nam ACIAPAK
ifp1
use /dd/defs/defsfile
endc
ttl New ACIAPAK with set screen size.
verson equ $01
mod endmod,namemd,drivr+objct,reent+verson,xferad,endmem
IRQReq set %10000111
ErrorFl set %00000111
INSIZ set 255 <- Must be between 32 and 255
OUTSIZ set 255 <- Must be between 32 and 255
org V.SCF
INXTI rmb $0001
INXTO rmb $0001
INCNT rmb $0001
ONXTI rmb $0001
ONXTO rmb $0001
HALTED rmb $0001
INHALT rmb $0001
LASTDCD rmb $0001
SIGPRC rmb $0002
STATUS rmb $0001
Parity rmb $0001
Baud rmb $0001
COLS rmb $0001
ROWS rmb $0003
INBUF rmb INSIZ
OUTBUF rmb OUTSIZ+1
virqmem rmb 5
endmem equ .
nam ACIAPAK
lFF92 equ $00AF
PDESCADD equ $0050
cFF92 equ $0092
xFF22 equ $FF22
xFF23 equ $FF23
MultPak equ $FF7F
xFF92 equ $FF92
IT.COL equ $2C
IT.PAR equ $26
fcb $03
namemd fcs "ACIAPAK"
fcb $0C
xferad
lbra INIT
lbra READ
lbra WRITE
lbra GETSTA
lbra SETSTA
lbra TERM
irqpakt
fcb 0
fcb IRQReq
fcb 10
virqpkt
fcb 0,3
fcb 0,3
fcb $80
*****************************
* Initialize the RS232 pak. *
*****************************
INIT ldx V.PORT,u
stb $01,x
ldd IT.COL,y
std COLS,u
ldd IT.PAR,y
lbsr SetComSt
ldd V.PORT,u
addd #$0001
leax irqpakt,pcr
leay IRQRout,pcr
os9 f$irq
bcs InitEnd
****************
* Install VIRQ *
****************
leay virqpkt,pcr
leax virqmem,u
ldb #5
vcopy
lda ,y+
sta ,x+
decb
bne vcopy
ldx #1
leay virqmem,u
ldd #3
os9 f$virq
bcs InitEnd
pshs cc
orcc #$50
lda >xFF23
anda #$FC
sta >xFF23
lda >xFF22
lda <cFF92
ora #$01
sta <cFF92
sta >xFF92
puls cc
lda #$03
sta >MultPak
clrb
InitEnd rts
z006E orcc #$50
lda ,x
lda ,x
lda $01,x
ldb $01,x
ldb $01,x
bmi z00E0
lda #$02
sta HALTED,u
clra
andb #$60
std INHALT,u
clrb
std INXTI,u
std ONXTI,u
sta INCNT,u
std SIGPRC,u
andcc #$AF
rts
RecMT bsr Sleep
********************
* Read a character *
********************
READ
orcc #$50
lda INHALT,u
ble z00B1
ldb INCNT,u
cmpb #$0A
bhi z00B1
ldb V.XON,u
orb #$80
stb INHALT,u
ldb #$05
lbsr IPort1
z00B1 tst SIGPRC,u
bne z00E0
ldb INXTO,u
leax INBUF,u
cmpb INXTI,u
beq RecMT
abx
lda ,x
dec INCNT,u
incb
cmpb #INSIZ-1
bls z00CF
clrb
z00CF stb INXTO,u
ldb V.ERR,u
beq ExitWrOk
stb PD.ERR,y
clr V.ERR,u
comb
ldb #$F4
bra ExitWr
z00E0 comb
ldb #$F6
rts
Sleep pshs x,b,a
lda V.BUSY,u
sta V.WAKE,u
andcc #$AF
ldx #0
os9 f$sleep
ldx <PDESCADD
ldb $19,x
beq z00FD
cmpb #$03
bls z0113
z00FD clra
lda $0C,x
bita #$02
bne z0113
ldb #$DC
lda V.ERR,u
bita #$20
bne z010E
puls pc,x,b,a
z010E inc $3F,y
clr V.ERR,u
z0113 leas $06,s
coma
rts
TXFull bsr Sleep
*********************
* Write a character *
*********************
WRITE
orcc #$50
leax OUTBUF,u
ldb ONXTI,u
abx
sta ,x
incb
cmpb #OUTSIZ-1
bls z0128
clrb
z0128
cmpb ONXTO,u
beq TXFull
stb ONXTI,u
lda HALTED,u
beq ExitWrOk
anda #$FD
sta HALTED,u
bne ExitWrOk
ldb #$05
lbsr IPort1
ExitWrOk clrb
ExitWr andcc #$AF
rts
***********************
* Get status routines *
***********************
GETSTA ldx PD.RGS,y
cmpa #SS.Ready
bne NotSSRDY
ldb INCNT,u
beq z00E0
stb R$B,x
ExitSta clrb
rts
NotSSRDY cmpa #SS.Eof
beq ExitSta
cmpa #SS.ScSiz
beq GetScSiz
cmpa #SS.ComSt
bne NotFound
ldd Parity,u
std R$Y,x
bra ExitSta
GetScSiz clra
ldb COLS,u
std R$X,x
ldb ROWS,u
std R$Y,x
bra ExitSta
NotFound comb
ldb #$D0
rts
***********************
* Set status routines *
***********************
SETSTA ldx PD.RGS,y
cmpa #SS.SSig
bne NotSSig
lda PD.CPR,y
ldb R$X+1,x
orcc #$50
tst INCNT,u
bne SendSig
std SIGPRC,u
bra ExitWrOk
SendSig andcc #$AF
os9 f$send
clrb
rts
NotSSig cmpa #SS.Open
beq SetOpen
cmpa #SS.Close
beq SetClose
cmpa #SS.ScSiz
beq SetScSiz
cmpa #SS.Relea
bne NotRelea
lda PD.CPR,y
cmpa SIGPRC,u
bne ExitSta
clr SIGPRC,u
rts
SetScSiz clra
ldd R$X,x
stb COLS,u
ldd R$Y,x
stb ROWS,u
clrb
rts
NotRelea cmpa #SS.ComSt
bne NotFound
ldd R$Y,x
SetComSt std Parity,u
andb #$E0
pshs b
ldb Baud,u
andb #$07
leax <z01D7,pcr
ldb b,x
orb ,s+
anda #$E0
sta V.TYPE,u
ldx V.PORT,u
lda $02,x
anda #$1F
ora V.TYPE,u
std $02,x
bra z020C
z01D7 fcb $13
fcb $16
fcb $17
fcb $18
fcb $1A
fcb $1C
fcb $1E
fcb $1F
SetOpen ldb #$09
lda $07,x
cmpa #$01
bne z020C
orcc #$50
lbsr IPort1
lbra z006E
SetClose lda $07,x
bne z020C
ldb #$0B
lda Parity,u
bita #$10
beq z01FD
z01FC clrb
z01FD pshs b
z01FF bsr z0211
bcs z01FF
puls b
orcc #$50
lbsr IPort1
andcc #$AF
z020C clrb
rts
z020E lbsr Sleep
z0211 ldb ONXTI,u
orcc #$50
cmpb ONXTO,u
bne z020E
rts
************************
* Terminate the device *
************************
TERM ldx <PDESCADD
lda ,x
sta V.BUSY,u
sta V.LPRC,u
bsr z01FC
lda <cFF92
anda #$FE
sta <cFF92
sta >xFF92
ldx #0
os9 f$irq
*******************
* De-install VIRQ *
*******************
ldx #0
leay virqmem,u
ldd #3
os9 f$virq
clrb
rts
***********************
* IRQ handler routine *
***********************
another ldb >xFF92
orb <lFF92
bra reentry
IRQRout
ldb <lFF92
reentry
andb #$FE
stb <lFF92
ldx V.PORT,u
sta STATUS,u
tfr a,b
andb #$60
cmpb LASTDCD,u
beq dcdok
tfr b,a
eorb LASTDCD,u
sta LASTDCD,u
lda STATUS,u
bitb #$20
beq z027F
bita #$20
beq z027F
lda Parity,u
bita #$10
beq ExitIRQ
ldx V.PDLHd,u
beq nocd2
nocd inc $3F,x
ldx $3D,x
bne nocd
nocd2 lda #$20
bsr setverr
bra wake
z027F bitb #$40
beq ExitIRQ
bita #$40
lbne z03A2
lbra z0391
dcdok bita #$08
bne INPUT
bita #ErrorFl Error flags?
bne ERROR Handle it
bita #$10
beq ExitIRQ
lda INHALT,u
bpl NotHalt
anda #$7F
sta ,x
eora V.XON,u
anda #$7F
sta INHALT,u
lda HALTED,u
bne z02CF
bra ExitIRQ
NotHalt leay OUTBUF,u
ldb ONXTO,u
cmpb ONXTI,u
beq TXMT
clra
lda d,y
incb
cmpb #OUTSIZ-1
bls z02BD
clrb
z02BD stb ONXTO,u
sta ,x
cmpb ONXTI,u
bne wake
TXMT lda HALTED,u
ora #$02
sta HALTED,u
z02CF ldb #$09
lbsr IPort2
wake ldb #$01
lda V.WAKE,u
wake2 beq ExitIRQ
clr V.WAKE,u
wake3 os9 f$send
ExitIRQ ldx V.PORT,u
lda $01,x
lbmi another
clrb
rts
setverr ora V.ERR,u
sta V.ERR,u
rts
INPUT
bita #$07
beq InputOk
ERROR
tfr a,b
tst ,x
anda #ErrorFl
bsr setverr
lda $02,x
sta $01,x
sta $02,x
bra ExitIRQ
InputOk lda ,x
beq StorINP
cmpa V.INTR,u
lbeq z0380
cmpa V.QUIT,u
lbeq z0384
cmpa V.PCHR,u
beq z0378
cmpa V.XON,u
lbeq z0391
cmpa V.XOFF,u
lbeq z03A2
StorINP leax INBUF,u
ldb INXTI,u
abx
sta ,x
incb
cmpb #INSIZ-1
bls notend1
clrb
notend1
stb INXTI,u
cmpb INXTO,u
bne NotFull
lda INXTO,u
inca
cmpa #INSIZ-1
bls notend2
clra
notend2
sta INXTO,u
lda #INSIZ-1
sta INCNT,u
lda #$04
bsr setverr
bra NoInc
NotFull
inc INCNT,u
NoInc
tst SIGPRC,u
beq z034A
ldd SIGPRC,u
clr SIGPRC,u
lbra wake3
z034A lda V.XOFF,u
lbeq wake
ldb INCNT,u
cmpb #INSIZ-32
lbcs wake
ldb INHALT,u
lbne wake
anda #$7F
sta V.XOFF,u
ora #$80
sta INHALT,u
ldb #$05
bsr IPort1
lbra wake
IPort1 ldx V.PORT,u
IPort2 orb V.TYPE,u
stb $02,x
clrb
rts
z0378 ldx V.DEV2,u
beq StorINP
sta $08,x
bra StorINP
z0380 ldb #$03
bra z0386
z0384 ldb #$02
z0386 pshs a
lda V.LPRC,u
lbsr wake2
puls a
lbra StorINP
z0391 lda HALTED,u
anda #$FE
sta HALTED,u
bne z039F
ldb #$05
bsr IPort2
z039F lbra ExitIRQ
z03A2 lda HALTED,u
bne z03AB
ldb #$09
bsr IPort2
z03AB ora #$01
sta HALTED,u
bra z039F
emod
endmod equ *
end
On Jun 17, 2015, at 11:18 PM, coco-request at maltedmedia.com wrote:
> Date: Wed, 17 Jun 2015 23:15:55 -0400
> From: Michael Brant <brant.michael.l at gmail.com>
> To: CoCoList for Color Computer Enthusiasts <coco at maltedmedia.com>
> Subject: Re: [Coco] NitrOS9 with Deluxe RS232 Pak
> Message-ID:
> <CAGJGKwjr5JQDvhLnvJq3CA_2i-Xd=b-=MiKevX_T10xsKxNJEg at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> Will all this talk of rs232 and null modem cables. How would one make
> one? Or does anyone know where they can aquired ?
More information about the Coco
mailing list