[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