[Coco] NitrOS9 with Deluxe RS232 Pak

Ron Klein ron at kdomain.org
Thu Jun 18 14:35:31 EDT 2015


Hi Barry,

Thanks for sharing this driver.  Do most modern builds of NitrOS9 have
everything I need to compile this using the 'asm' command?

Can an RS232 driver be replaced on "live" system and does a new boot disk
need to be created?

I'm looking at some of the driver source below and it's not entirely clear
to me what the comm port settings are.

Thank you for your help!

-Ron



On Thu, Jun 18, 2015 at 12:38 AM, Barry Nelson <
barry.nelson at amobiledevice.com> 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
>
> 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 ?
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list