[Coco] NitrOS9 with Deluxe RS232 Pak
Ron Klein
ron at kdomain.org
Thu Jun 18 14:46:48 EDT 2015
Hi Gene,
That is a fascinating story about the Coco! As a kid, I remember seeing
your name quite a bit but then left the Coco world for many, many years. I
love hearing stories like this from pioneer hackers like yourself. Marty
Goodman was another person who seemed legendary in the Coco scene. I
actually had some very pleasant email exchanges with him back in the 90's
and purchased a few things from him. It doesn't appear he's an active
participant in the Coco scene any longer. I hope he's doing well, wherever
he may be.
As an FYI, I don't know if my RS232 Pak has been modded in any way. Not
sure if this would be important for my purposes. My intent is to use the
RS232 pak as a way to remote into my Coco.
As always, thank you for all your help!
-Ron
On Thu, Jun 18, 2015 at 4:17 AM, Gene Heskett <gheskett at wdtv.com> wrote:
> On Thursday 18 June 2015 01:38:29 Barry Nelson wrote:
> > 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
>
> This worked flawlessly for 15 years, using /t1, from the forgotten chip
> article in RBow all those years ago. It functioned in this case as a
> personality storage/retrieval system for a Grass Valley Group 300-3A/B
> production video switcher. Written in B09, running on a coco2 at WDTV.
> Grass had a somewhat similar device called an EDisk that ran 4x slower
> and was downright klunky to use, but they wanted $20,000 for their
> version. I sold the tv station a coco2 out of my collection with that
> added acia on some perfboard under the keyboard, with 2 disk drives for
> $245. But it gave our Tech Directors running a newscast, the ability
> for each of them to save and recall his own "bag of tricks" to use to
> pretty up a newscast. Grass's version had to be setup by the time the
> cast opened because it was so slow, mine was fast enough the T.D. could
> discover that button didn't do what he expected, he could run to the
> keyboard and call up his stuff, and it was done by the end of the
> opening commercial break. They loved it.
>
> Bruce Istead I think it was, made up a patch that because the 6551 was
> drain bamaged, (and because of that, I have never really understood why
> it was so widely used) swapped two of the status lines which made the 7
> wire hardware flow control protocol work correctly, and it was in the
> next generation driver, SACIA.dr, but I am not convinced that patch
> survived the nitros9 conversion to sc6551.dr. My rs232 pack has that
> hardware hack in it, and I have never been able to make flow controls
> work properly with it since it became sc6551.dr. Someone with time on
> their hands needs to check that out and make it work again. Its
> controlled by a bit in the descriptor, plays with the DCR/DCD functions
> being reversed, IIRC. I hope that patch is on RTSI, if not I may have a
> copy. I used it extensively when nitros9 was at about V1.16-V1.22.
>
> > 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 ?
>
> Cheers, Gene Heskett
> --
> "There are four boxes to be used in defense of liberty:
> soap, ballot, jury, and ammo. Please use in that order."
> -Ed Howdershelt (Author)
> Genes Web page <http://geneslinuxbox.net:6309/gene>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>
More information about the Coco
mailing list