changeset 1942:b41df77588b0

printer is now scbbp sio is now scbbt All references changed in various files
author boisy
date Sat, 26 Nov 2005 22:51:50 +0000
parents f408295c1f0a
children e119c4316e6c
files level1/cmds/grfdrv.asm level1/modules/makefile level1/modules/p_bbp.asm level1/modules/printer.asm level1/modules/scbbp.asm level1/modules/scbbt.asm level1/modules/sio.asm level1/modules/t1_bbt.asm level1/modules/term_bbt.asm level1/modules/term_sio.asm level2/coco3/bootlists/standard.bl level2/coco3_6309/bootlists/standard.bl level2/modules/makefile
diffstat 13 files changed, 1082 insertions(+), 1081 deletions(-) [+]
line wrap: on
line diff
--- a/level1/cmds/grfdrv.asm	Sat Nov 26 22:28:00 2005 +0000
+++ b/level1/cmds/grfdrv.asm	Sat Nov 26 22:51:50 2005 +0000
@@ -30,6 +30,7 @@
 size     equ   .
 
          fcb   $07 
+
 name     fcs   /GrfDrv/
          fcb   edition
 
--- a/level1/modules/makefile	Sat Nov 26 22:28:00 2005 +0000
+++ b/level1/modules/makefile	Sat Nov 26 22:51:50 2005 +0000
@@ -31,10 +31,10 @@
 		ddd0_80d.dd d0_80d.dd d1_80d.dd d2_80d.dd
 
 SCF		= scf.mn \
-		sc6551.dr vrn.dr printer.dr sio.dr sspak.dr vtio.dr \
+		sc6551.dr vrn.dr scbbp.dr scbbt.dr sspak.dr vtio.dr \
 		covdg.io cohr.io \
 		nil.dd p.dd pipe.dd ssp.dd \
-		term_sio.dt term_sc6551.dt t1.dd t2_sc6551.dd t3_sc6551.dd \
+		term_bbt.dt term_sc6551.dt t1.dd t2_sc6551.dd t3_sc6551.dd \
 		term32.dt term51.dt
 
 PIPE		= pipeman.mn \
--- a/level1/modules/p_bbp.asm	Sat Nov 26 22:28:00 2005 +0000
+++ b/level1/modules/p_bbp.asm	Sat Nov 26 22:51:50 2005 +0000
@@ -1,5 +1,5 @@
 ********************************************************************
-* P - CoCo serial printer device descriptor
+* P - CoCo Bit-Banger Printer Driver Device Descriptor
 *
 * $Id$
 *
@@ -9,7 +9,7 @@
 *          ????/??/??
 
          nam   P
-         ttl   CoCo serial printer device descriptor
+         ttl   CoCo Bit-Banger Printer Driver Device Descriptor
 
 * Disassembled 98/08/23 21:15:24 by Disasm v1.6 (C) 1988 by RML
 
@@ -58,7 +58,7 @@
 
 name     fcs   /p/
 mgrnam   fcs   /SCF/
-drvnam   fcs   /Printer/
+drvnam   fcs   /scbbp/
 
          emod  
 eom      equ   *
--- a/level1/modules/printer.asm	Sat Nov 26 22:28:00 2005 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,416 +0,0 @@
-********************************************************************
-* Printer - CoCo Serial Printer Driver
-*
-* $Id$
-*
-* Enhanced and re-written by Alan DeKok
-*
-* Problems with original:
-*   returns wrong error on Read/SetStt
-*   doesn't block output.  The printer is a single-user device!
-*
-* Edt/Rev  YYYY/MM/DD  Modified by
-* Comment
-* ------------------------------------------------------------------
-*  13      2003/01/05  Boisy G. Pitre
-* Back-ported to OS-9 Level Two.
-*
-*          2003/09/04  Boisy G. Pitre
-* Back-ported to OS-9 Level One.
-
-         nam   Printer
-         ttl   CoCo Serial Printer Driver
-
-         ifp1
-         use   defsfile
-         endc
-
-tylg     set   Drivr+Objct   
-atrv     set   ReEnt+Rev
-rev      set   $00
-edition  set   13
-
-         mod   eom,name,tylg,atrv,Start,Size
-
-         fcb   READ.+WRITE.
-
-name     fcs   /Printer/
-         fcb   edition    one more revision level than the stock printer
-
-* Device memory area: offset from U
-         org   V.SCF      V.SCF: free memory for driver to use
-V.PAR    rmb   1          1=space, 2=mark parity
-V.BIT    rmb   1          0=7, 1=8 bits
-V.STP    rmb   1          0=1 stop bit, 1=2 stop bits
-V.COM    rmb   2          Com Status baud/parity (=Y from SS.Comst Set/GetStt
-V.COL    rmb   1          columns
-V.ROW    rmb   1          rows
-V.WAIT   rmb   2          wait count for baud rate?
-V.TRY    rmb   2          number of re-tries if printer is busy
-V.RTRY   rmb   1          low nibble of parity=high byte of number of retries
-V.BUFF   rmb   $80        room for 128 blocked processes
-size     equ   .
-
-* Baud Rate Delay Table
-BaudDly  equ   *
-         IFEQ  Level-1
-* OS-9 Level One delay values (0.89MHz)
-         fdb   $0482    110 baud
-         fdb   $01A2    300 baud
-         fdb   $00CD    600 baud
-         fdb   $0063    1200 baud
-         fdb   $002D    2400 baud
-         fdb   $0013    4800 baud
-         fdb   $0005    9600 baud
-         ELSE
-         IFEQ  H6309
-* OS-9 Level Two delay values (1.78MHz)
-         fdb   $090C    110 baud
-         fdb   $034C    300 baud
-         fdb   $01A2    600 baud
-         fdb   $00CE    1200 baud
-         fdb   $0062    2400 baud
-         fdb   $002E    4800 baud
-         fdb   $0012    9600 baud
-         fdb   $0003    32000 baud
-         ELSE   
-* NitrOS-9 Level Two delay values (1.78MHz)
-         fdb   $090C    110 baud (Unchanged, unknown)
-         fdb   $03D0    300 baud
-         fdb   $01A2    600 baud (Unchanged, unknown)
-         fdb   $00F0    1200 baud
-         fdb   $0073    2400 baud
-         fdb   $0036    4800 baud
-         fdb   $0017    9600 baud
-         fdb   $0003    32000 baud (Unchanged, unknown)
-         ENDC
-         ENDC
-
-
-start    equ   *
-         lbra  Init
-         lbra  Read
-         lbra  Write
-         lbra  GetStt
-         lbra  SetStt
-
-* Term
-*
-* Entry:
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code   
-*
-Term     equ   *
-         clrb
-         rts
-
-* Init
-*
-* Entry:
-*    Y  = address of device descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Init     orcc  #IntMasks
-         ldx   #PIA1Base
-         clr   $01,x
-         ldd   <IT.COL,y	get number of columns/rows
-         std   <V.COL,u 	save it in statics
-         lda   #$FE
-         sta   ,x
-         lda   #$36
-         sta   $01,x
-         lda   ,x
-         andcc #^IntMasks
-         ldd   <IT.PAR,y	parity and baud rate
-         lbsr  L0138		setup parity/baud in device memory
-         lbsr  L0104		get low bit of $FF22 into carry
-         lbcs  L0100		it's the ready flag
-* clear out buffer
-         leax  V.BUFF,u   room for 128 blocked processes
-         ldb   #128
-I010     clr   ,x+        we're more concerned with room
-         decb             than with speed, so we don't use TFM
-         bne   I010
-         rts
-
-L005F    ldb   <PD.BAU,y	get baud rate in path desc.
-         andb  #$0F		keep lower nibble
-         cmpb  #$07		compare against highest
-         lbhs  Read
-         aslb  
-         leax  <BaudDly,pc	table of delay times
-         ldx   b,x		get delay counter
-         stx   <V.WAIT,u	save it off
-         clrb  
-         rts
-
-Bit_2    ldb   #$02
-L007D    stb   >PIA1Base
-L0080    pshs  d
-         ldd   <V.WAIT,u	get wait count for baud rate
-L0085    equ   *
-         IFNE  H6309
-         decd             count down by one
-         ELSE
-         subd  #$0001
-         ENDC
-         bne   L0085
-         puls  pc,d
-
-* Write
-*
-* Entry:
-*    A  = character to write
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Write    equ   *
-         leax  V.BUFF,u   point to the buffer
-         ldb   V.BUSY,u   get my process number
-         tst   ,x         get allowed process number
-         bne   W010       if not zero, else
-         stb   ,x         I'm the only one allowed to use it
-
-W010     cmpb  ,x         am I allowed to use /p?
-         beq   W030       if yes, go write a character
-
-***************************************************************
-* WARNING: If more than 128 processes try to use the printer,
-* this will CRASH BADLY.  Since Level II on the Coco is limited
-* to 32 processes, I don't think it's a problem.
-***************************************************************
-
-W020     tst   ,x+		if not, find the first non-zero entry
-         bne   W020
-         stb   -1,x		and save my process number at the first zero
-         pshs  a
-         lda   V.BUFF,u		process that's allowed to use /p
-         sta   V.BUSY,u		make it the busy one
-         ldb   #S$Wake		wake it up
-         os9   F$Send		send a signal to wake it
-         IFNE  H6309
-         tfr   0,x
-         ELSE
-         ldx   #$0000
-         ENDC
-         os9   F$Sleep		and go to sleep forever
-         puls  a		restore character to be sent, and continue
-
-W030     bsr   L005F		set up baud rate, etc in memory
-         bcs   L00CA
-         pshs  a
-         bsr   L00CB      make sure that the device is ready
-         puls  a
-         bcs   L00CA      if the device is not ready
-         IFNE  H6309
-         lde   #$09       9 bits to send out
-         ELSE
-         pshs b,a
-         lda  #$09
-         sta  1,s
-         puls a
-         ENDC
-         orcc  #IntMasks  turn off interrupts
-         tst   <V.BIT,u   number of bits
-         beq   L00AC      if 7 bits, count down by one
-         IFNE  H6309
-         dece             initially send out start bit
-         ELSE
-         dec   ,s
-         ENDC
-
-L00AC    bsr   L007D      write B to $FF20 and wait
-         clrb
-         lsra             move A into carry
-         rolb
-         rolb
-         IFNE  H6309
-         dece             count down on the number of bits to send
-         ELSE
-         dec   ,s
-         ENDC
-         bne   L00AC
-         IFEQ  H6309
-         puls  b
-         ENDC
-         ldb   <V.PAR,u		space/mark parity
-         beq   L00BC		0=no parity
-         andb  #$FE		1=space, 0=mark parity
-* should be andb #$FD I think...
-         bsr   L007D		dump out parity
-L00BC    bsr   Bit_2		and a stop bit
-         tst   <V.STP,u		do another one?
-         beq   L00C9
-         bsr   Bit_2		yes, dump out another stop bit
-L00C9    andcc #^IntMasks
-L00CA    rts
-
-L0104    pshs  b
-         ldb   >PIA1Base+$02	get a byte
-         lsrb  
-         puls  pc,b
-
-L00CB    equ   *
-         IFNE  H6309
-         clrd
-         ELSE
-         clra
-         clrb
-         ENDC
-         std   <V.TRY,u
-L00D0    ldd   #$0303
-L00D3    bsr   L0104		get device ready status
-         bcs   L00DE		if not ready, wait for a bit
-         IFNE  H6309
-         bsr   L0080		wait
-         ELSE
-         lbsr  L0080		wait
-         ENDC
-         decb  
-         bne   L00D3		try again
-         clrb  
-         rts   
-
-L00DE    lbsr  L0080		wait for a while
-         deca			try 3 times,
-         bne   L00D3
-         pshs  x
-         ldx   #$0001
-         os9   F$Sleep		sleep for the rest of this tick
-         puls  x
-         ldd   <V.TRY,u
-         IFNE  H6309
-         incd			we've tried once more and failed...
-         ELSE
-         addd  #$0001
-         ENDC
-         std   <V.TRY,u
-         ldb   <V.RTRY,u	number of retries to do
-         beq   L00D0		if unspecified, keep retrying
-         cmpb  <V.TRY,u		if exceeded number of retries,
-         bhi   L00D0		then we crap out
-
-L0100    comb  
-         ldb   #E$NotRdy
-         rts   
-
-* GetStat
-*
-* Entry:
-*    A  = function code
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code 
-*
-GetStt   cmpa  #SS.EOF		end of file?
-         bne   L0112
-         clrb			if so, exit with no error
-         rts   
-
-L0112    ldx   PD.RGS,y
-         cmpa  #SS.ScSiz
-         beq   L0123
-         cmpa  #SS.ComSt
-         bne   L0173
-         ldd   <V.COM,u		get Com status
-         std   R$Y,x
-         clrb
-         rts
-
-* get screen size GetStt
-L0123    clra  
-         ldb   <V.COL,u
-         std   R$X,x
-         ldb   <V.ROW,u
-         std   R$Y,x
-         clrb
-         rts
-
-* SetStat
-*
-* Entry:
-*    A  = function code
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code 
-*
-SetStt   cmpa  #SS.ComSt
-         bne   Close		if not, check if it's a close
-         ldx   PD.RGS,y
-         ldd   R$Y,x
-* A = Parity byte
-* B = baud rate
-L0138    std   <V.COM,u		save parity, baud rate in com status
-         IFNE  H6309
-         clrd
-         ELSE
-         clra
-         clrb
-         ENDC
-         std   <V.PAR,u
-         sta   <V.STP,u
-         ldd   <V.COM,u
-         tstb
-         bpl   L014C
-         inc   <V.STP,u		do 2 stop bits
-L014C    bitb  #$40		make sure the bit is zero
-         bne   Read
-         bitb  #$20		0=8, 1=7 bits
-         beq   L0157
-         inc   <V.BIT,u
-L0157    bita  #$20
-         beq   L0169		if=0, no parity
-         bita  #$80
-         beq   Read		if high bit set (only for ACIA devices), error out
-         inc   <V.PAR,u		parity
-         bita  #$40
-         bne   L0169		1=space,
-         inc   <V.PAR,u		2=mark parity
-L0169    anda  #$0F
-         sta   <V.RTRY,u
-         rts   
-
-Read     comb  
-         ldb   #E$BMode
-         rts
-
-L0173    comb
-         ldb   #E$UnkSVc
-         rts
-
-Close    cmpa  #SS.Close	close the device?
-         bne   L0173
-         leax  V.BUFF,u		point to blocked process buffer
-
-C010     lda   1,x		get next process number
-         sta   ,x+
-         bne   C010		do until we have a zero byte
-
-         lda   V.BUFF,u		get the first process in the queue
-         beq   C020		if none left
-         ldb   #S$Wake		wake up signal
-         os9   F$Send		re-start the blocked process
-
-C020     clrb
-         rts
-
-         emod
-eom      equ   *
-         end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/scbbp.asm	Sat Nov 26 22:51:50 2005 +0000
@@ -0,0 +1,416 @@
+********************************************************************
+* scbbp.asm - CoCo Bit-Banger Printer Driver
+*
+* $Id$
+*
+* Enhanced and re-written by Alan DeKok
+*
+* Problems with original:
+*   returns wrong error on Read/SetStt
+*   doesn't block output.  The printer is a single-user device!
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*  13      2003/01/05  Boisy G. Pitre
+* Back-ported to OS-9 Level Two.
+*
+*          2003/09/04  Boisy G. Pitre
+* Back-ported to OS-9 Level One.
+
+         nam   scbbp
+         ttl   CoCo Bit-Banger Printer Driver
+
+         ifp1
+         use   defsfile
+         endc
+
+tylg     set   Drivr+Objct   
+atrv     set   ReEnt+Rev
+rev      set   $00
+edition  set   13
+
+         mod   eom,name,tylg,atrv,Start,Size
+
+         fcb   READ.+WRITE.
+
+name     fcs   /scbbp/
+         fcb   edition    one more revision level than the stock printer
+
+* Device memory area: offset from U
+         org   V.SCF      V.SCF: free memory for driver to use
+V.PAR    rmb   1          1=space, 2=mark parity
+V.BIT    rmb   1          0=7, 1=8 bits
+V.STP    rmb   1          0=1 stop bit, 1=2 stop bits
+V.COM    rmb   2          Com Status baud/parity (=Y from SS.Comst Set/GetStt
+V.COL    rmb   1          columns
+V.ROW    rmb   1          rows
+V.WAIT   rmb   2          wait count for baud rate?
+V.TRY    rmb   2          number of re-tries if printer is busy
+V.RTRY   rmb   1          low nibble of parity=high byte of number of retries
+V.BUFF   rmb   $80        room for 128 blocked processes
+size     equ   .
+
+* Baud Rate Delay Table
+BaudDly  equ   *
+         IFEQ  Level-1
+* OS-9 Level One delay values (0.89MHz)
+         fdb   $0482    110 baud
+         fdb   $01A2    300 baud
+         fdb   $00CD    600 baud
+         fdb   $0063    1200 baud
+         fdb   $002D    2400 baud
+         fdb   $0013    4800 baud
+         fdb   $0005    9600 baud
+         ELSE
+         IFEQ  H6309
+* OS-9 Level Two delay values (1.78MHz)
+         fdb   $090C    110 baud
+         fdb   $034C    300 baud
+         fdb   $01A2    600 baud
+         fdb   $00CE    1200 baud
+         fdb   $0062    2400 baud
+         fdb   $002E    4800 baud
+         fdb   $0012    9600 baud
+         fdb   $0003    32000 baud
+         ELSE   
+* NitrOS-9 Level Two delay values (1.78MHz)
+         fdb   $090C    110 baud (Unchanged, unknown)
+         fdb   $03D0    300 baud
+         fdb   $01A2    600 baud (Unchanged, unknown)
+         fdb   $00F0    1200 baud
+         fdb   $0073    2400 baud
+         fdb   $0036    4800 baud
+         fdb   $0017    9600 baud
+         fdb   $0003    32000 baud (Unchanged, unknown)
+         ENDC
+         ENDC
+
+
+start    equ   *
+         lbra  Init
+         lbra  Read
+         lbra  Write
+         lbra  GetStt
+         lbra  SetStt
+
+* Term
+*
+* Entry:
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code   
+*
+Term     equ   *
+         clrb
+         rts
+
+* Init
+*
+* Entry:
+*    Y  = address of device descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Init     orcc  #IntMasks
+         ldx   #PIA1Base
+         clr   $01,x
+         ldd   <IT.COL,y	get number of columns/rows
+         std   <V.COL,u 	save it in statics
+         lda   #$FE
+         sta   ,x
+         lda   #$36
+         sta   $01,x
+         lda   ,x
+         andcc #^IntMasks
+         ldd   <IT.PAR,y	parity and baud rate
+         lbsr  L0138		setup parity/baud in device memory
+         lbsr  L0104		get low bit of $FF22 into carry
+         lbcs  L0100		it's the ready flag
+* clear out buffer
+         leax  V.BUFF,u   room for 128 blocked processes
+         ldb   #128
+I010     clr   ,x+        we're more concerned with room
+         decb             than with speed, so we don't use TFM
+         bne   I010
+         rts
+
+L005F    ldb   <PD.BAU,y	get baud rate in path desc.
+         andb  #$0F		keep lower nibble
+         cmpb  #$07		compare against highest
+         lbhs  Read
+         aslb  
+         leax  <BaudDly,pc	table of delay times
+         ldx   b,x		get delay counter
+         stx   <V.WAIT,u	save it off
+         clrb  
+         rts
+
+Bit_2    ldb   #$02
+L007D    stb   >PIA1Base
+L0080    pshs  d
+         ldd   <V.WAIT,u	get wait count for baud rate
+L0085    equ   *
+         IFNE  H6309
+         decd             count down by one
+         ELSE
+         subd  #$0001
+         ENDC
+         bne   L0085
+         puls  pc,d
+
+* Write
+*
+* Entry:
+*    A  = character to write
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Write    equ   *
+         leax  V.BUFF,u   point to the buffer
+         ldb   V.BUSY,u   get my process number
+         tst   ,x         get allowed process number
+         bne   W010       if not zero, else
+         stb   ,x         I'm the only one allowed to use it
+
+W010     cmpb  ,x         am I allowed to use /p?
+         beq   W030       if yes, go write a character
+
+***************************************************************
+* WARNING: If more than 128 processes try to use the printer,
+* this will CRASH BADLY.  Since Level II on the Coco is limited
+* to 32 processes, I don't think it's a problem.
+***************************************************************
+
+W020     tst   ,x+		if not, find the first non-zero entry
+         bne   W020
+         stb   -1,x		and save my process number at the first zero
+         pshs  a
+         lda   V.BUFF,u		process that's allowed to use /p
+         sta   V.BUSY,u		make it the busy one
+         ldb   #S$Wake		wake it up
+         os9   F$Send		send a signal to wake it
+         IFNE  H6309
+         tfr   0,x
+         ELSE
+         ldx   #$0000
+         ENDC
+         os9   F$Sleep		and go to sleep forever
+         puls  a		restore character to be sent, and continue
+
+W030     bsr   L005F		set up baud rate, etc in memory
+         bcs   L00CA
+         pshs  a
+         bsr   L00CB      make sure that the device is ready
+         puls  a
+         bcs   L00CA      if the device is not ready
+         IFNE  H6309
+         lde   #$09       9 bits to send out
+         ELSE
+         pshs b,a
+         lda  #$09
+         sta  1,s
+         puls a
+         ENDC
+         orcc  #IntMasks  turn off interrupts
+         tst   <V.BIT,u   number of bits
+         beq   L00AC      if 7 bits, count down by one
+         IFNE  H6309
+         dece             initially send out start bit
+         ELSE
+         dec   ,s
+         ENDC
+
+L00AC    bsr   L007D      write B to $FF20 and wait
+         clrb
+         lsra             move A into carry
+         rolb
+         rolb
+         IFNE  H6309
+         dece             count down on the number of bits to send
+         ELSE
+         dec   ,s
+         ENDC
+         bne   L00AC
+         IFEQ  H6309
+         puls  b
+         ENDC
+         ldb   <V.PAR,u		space/mark parity
+         beq   L00BC		0=no parity
+         andb  #$FE		1=space, 0=mark parity
+* should be andb #$FD I think...
+         bsr   L007D		dump out parity
+L00BC    bsr   Bit_2		and a stop bit
+         tst   <V.STP,u		do another one?
+         beq   L00C9
+         bsr   Bit_2		yes, dump out another stop bit
+L00C9    andcc #^IntMasks
+L00CA    rts
+
+L0104    pshs  b
+         ldb   >PIA1Base+$02	get a byte
+         lsrb  
+         puls  pc,b
+
+L00CB    equ   *
+         IFNE  H6309
+         clrd
+         ELSE
+         clra
+         clrb
+         ENDC
+         std   <V.TRY,u
+L00D0    ldd   #$0303
+L00D3    bsr   L0104		get device ready status
+         bcs   L00DE		if not ready, wait for a bit
+         IFNE  H6309
+         bsr   L0080		wait
+         ELSE
+         lbsr  L0080		wait
+         ENDC
+         decb  
+         bne   L00D3		try again
+         clrb  
+         rts   
+
+L00DE    lbsr  L0080		wait for a while
+         deca			try 3 times,
+         bne   L00D3
+         pshs  x
+         ldx   #$0001
+         os9   F$Sleep		sleep for the rest of this tick
+         puls  x
+         ldd   <V.TRY,u
+         IFNE  H6309
+         incd			we've tried once more and failed...
+         ELSE
+         addd  #$0001
+         ENDC
+         std   <V.TRY,u
+         ldb   <V.RTRY,u	number of retries to do
+         beq   L00D0		if unspecified, keep retrying
+         cmpb  <V.TRY,u		if exceeded number of retries,
+         bhi   L00D0		then we crap out
+
+L0100    comb  
+         ldb   #E$NotRdy
+         rts   
+
+* GetStat
+*
+* Entry:
+*    A  = function code
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code 
+*
+GetStt   cmpa  #SS.EOF		end of file?
+         bne   L0112
+         clrb			if so, exit with no error
+         rts   
+
+L0112    ldx   PD.RGS,y
+         cmpa  #SS.ScSiz
+         beq   L0123
+         cmpa  #SS.ComSt
+         bne   L0173
+         ldd   <V.COM,u		get Com status
+         std   R$Y,x
+         clrb
+         rts
+
+* get screen size GetStt
+L0123    clra  
+         ldb   <V.COL,u
+         std   R$X,x
+         ldb   <V.ROW,u
+         std   R$Y,x
+         clrb
+         rts
+
+* SetStat
+*
+* Entry:
+*    A  = function code
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code 
+*
+SetStt   cmpa  #SS.ComSt
+         bne   Close		if not, check if it's a close
+         ldx   PD.RGS,y
+         ldd   R$Y,x
+* A = Parity byte
+* B = baud rate
+L0138    std   <V.COM,u		save parity, baud rate in com status
+         IFNE  H6309
+         clrd
+         ELSE
+         clra
+         clrb
+         ENDC
+         std   <V.PAR,u
+         sta   <V.STP,u
+         ldd   <V.COM,u
+         tstb
+         bpl   L014C
+         inc   <V.STP,u		do 2 stop bits
+L014C    bitb  #$40		make sure the bit is zero
+         bne   Read
+         bitb  #$20		0=8, 1=7 bits
+         beq   L0157
+         inc   <V.BIT,u
+L0157    bita  #$20
+         beq   L0169		if=0, no parity
+         bita  #$80
+         beq   Read		if high bit set (only for ACIA devices), error out
+         inc   <V.PAR,u		parity
+         bita  #$40
+         bne   L0169		1=space,
+         inc   <V.PAR,u		2=mark parity
+L0169    anda  #$0F
+         sta   <V.RTRY,u
+         rts   
+
+Read     comb  
+         ldb   #E$BMode
+         rts
+
+L0173    comb
+         ldb   #E$UnkSVc
+         rts
+
+Close    cmpa  #SS.Close	close the device?
+         bne   L0173
+         leax  V.BUFF,u		point to blocked process buffer
+
+C010     lda   1,x		get next process number
+         sta   ,x+
+         bne   C010		do until we have a zero byte
+
+         lda   V.BUFF,u		get the first process in the queue
+         beq   C020		if none left
+         ldb   #S$Wake		wake up signal
+         os9   F$Send		re-start the blocked process
+
+C020     clrb
+         rts
+
+         emod
+eom      equ   *
+         end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/scbbt.asm	Sat Nov 26 22:51:50 2005 +0000
@@ -0,0 +1,579 @@
+********************************************************************
+* scbbt - CoCo Bit-Banger Terminal Driver
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*   9      ????/??/??  ???
+* Original Tandy L2 distribution version.
+*
+*  10      ????/??/??  ???
+* Added baud delay table for NitrOS-9.
+*
+*  11      2003/12/15  Boisy G. Pitre
+* Merged Level 1 and Level 2 sources for now.
+
+         nam   scbbt
+         ttl   CoCo Bit-Banger Terminal Driver
+
+* Disassembled 98/08/23 20:58:36 by Disasm v1.6 (C) 1988 by RML
+
+         ifp1
+         use   defsfile
+         endc
+
+tylg     set   Drivr+Objct   
+atrv     set   ReEnt+rev
+rev      set   $00
+edition  set   9
+
+         mod   eom,name,tylg,atrv,start,size
+
+         fcb   UPDAT.
+
+name     fcs   /scbbt/
+         fcb   edition
+
+         IFGT  Level-1
+
+u0000    rmb   29
+u001D    rmb   1
+u001E    rmb   1
+u001F    rmb   1
+u0020    rmb   2
+u0022    rmb   2
+u0024    rmb   1
+u0025    rmb   1
+size     equ   .
+
+* Baud Rate Delay Table
+DelayTbl
+         IFEQ  H6309
+* 6809 delay values (1.89MHz)
+         fdb   $090C	110 baud
+         fdb   $034C	300 baud
+         fdb   $01A2	600 baud
+         fdb   $00CE	1200 baud
+         fdb   $0062	2400 baud
+         fdb   $002E	4800 baud
+         fdb   $0012	9600 baud
+         fdb   $0003	32000 baud
+         ELSE
+* 6309 native mode delay values (1.89MHz)
+         fdb   $090C	110 baud (Unchanged, unknown)
+         fdb   $03D0	300 baud
+         fdb   $01A2	600 baud (Unchanged, unknown)
+         fdb   $00F0	1200 baud
+         fdb   $0073	2400 baud
+         fdb   $0036	4800 baud
+         fdb   $0017	9600 baud
+         fdb   $0003	32000 baud (Unchanged, unknown)
+         ENDC
+
+start    lbra  Init
+         lbra  Read
+         lbra  Write
+         lbra  GetStat
+         lbra  SetStat
+         lbra  Term
+
+* Init
+*
+* Entry:
+*    Y  = address of device descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Init     pshs  cc
+         orcc  #IntMasks
+         ldx   #PIA1Base
+         clr   $01,x
+         ldd   <IT.COL,y		get col/row bytes
+         std   <u0024,u
+         lda   #$FE
+         sta   ,x
+         lda   #$36
+         sta   $01,x
+         lda   ,x
+         ldd   <IT.PAR,y		get parity/baud
+         lbsr  L0148
+         puls  cc
+         clrb
+
+* Term
+*
+* Entry:
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Term     rts
+
+* Read
+*
+* Entry:
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    A  = character read
+*    CC = carry set on error
+*    B  = error code
+*
+Read     bsr   L00AC
+         bcs   L00C8
+         ldb   #$08
+         pshs  b,cc
+         tst   <u001E,u
+         beq   L0066
+         dec   $01,s
+L0066    bra   L0077
+L0068    lda   <PD.BAU,y
+         anda  #$0F
+         cmpa  #$07
+         beq   L0077
+         ldx   #$0001
+         os9   F$Sleep
+L0077    pshs  y
+         ldy   #$FFFF
+L007D    lda   >PIA1Base+2
+         leay  -$01,y
+         beq   L008B
+         lsra
+         bcs   L007D
+         puls  y
+         bra   L0090
+L008B    puls  y
+         lsra
+         bcs   L0068
+L0090    orcc  #IntMasks
+         clra
+         bsr   L00D5
+L0095    bsr   L00CE
+         ldb   >PIA1Base+2
+         lsrb
+         rora
+         dec   $01,s
+         bne   L0095
+         bsr   L00D5
+         tst   <u001E,u
+         beq   L00A8
+         lsra
+L00A8    puls  b,cc
+         clrb
+         rts
+L00AC    pshs  a
+         lda   <PD.BAU,y
+         anda  #$0F
+         cmpa  #$08
+         bcc   L00C4
+         lsla
+         leax  >DelayTbl,pcr
+         ldd   a,x
+         std   <u0020,u
+         clrb
+         puls  pc,a
+L00C4    ldb   #E$BMode
+         puls  a
+L00C8    orcc  #Carry
+         rts
+L00CB    stb   >PIA1Base
+L00CE    pshs  b,a
+         ldd   <u0020,u
+         bra   L00DC
+L00D5    pshs  b,a
+         ldd   <u0020,u
+         lsra
+         rorb
+L00DC    subd  #$0001
+         bne   L00DC
+         puls  pc,b,a
+
+* Write
+*
+* Entry:
+*    A  = character to write
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Write    bsr   L00AC
+         bcs   L00C8
+         ldb   #$09
+         pshs  b,cc
+         orcc  #IntMasks
+         tst   <u001E,u
+         beq   L00F4
+         dec   $01,s
+L00F4    andcc #^Carry
+L00F6    ldb   #$02
+         bcs   L00FB
+         clrb
+L00FB    bsr   L00CB
+         lsra
+         dec   $01,s
+         bne   L00F6
+         ldb   <u001D,u
+         beq   L010B
+         andb  #$FE
+         bsr   L00CB
+L010B    ldb   #$02
+         bsr   L00CB
+         tst   <u001F,u
+         beq   L0118
+         ldb   #$02
+         bsr   L00CB
+L0118    puls  pc,b,cc
+
+* GetStat
+*
+* Entry:
+*    A  = function code
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+GetStat  cmpa  #SS.EOF
+         bne   L0120
+L011E    clrb
+         rts
+L0120    ldx   PD.RGS,y
+         cmpa  #SS.ScSiz
+         beq   L0131
+         cmpa  #SS.ComSt
+         bne   L017E
+         ldd   <u0022,u
+         std   R$Y,x
+         bra   L011E
+L0131    ldx   PD.RGS,y
+         clra
+         ldb   <u0024,u
+         std   R$X,x
+         ldb   <u0025,u
+         std   R$Y,x
+         bra   L011E
+
+* SetStat
+*
+* Entry:
+*    A  = function code
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+SetStat  cmpa  #SS.ComSt
+         bne   L017E
+         ldx   PD.RGS,y
+         ldd   R$Y,x
+L0148    std   <u0022,u
+         clra
+         clrb
+         std   <u001D,u
+         sta   <u001F,u
+         ldd   <u0022,u
+         tstb
+         bpl   L015C
+         inc   <u001F,u
+L015C    bitb  #$40
+         bne   L017A
+         bitb  #$20
+         beq   L0167
+         inc   <u001E,u
+L0167    bita  #$20
+         beq   L0179
+         bita  #$80
+         beq   L017A
+         inc   <u001D,u
+         bita  #$40
+         bne   L0179
+         inc   <u001D,u
+L0179    rts
+L017A    comb
+         ldb   #E$BMode
+         rts
+L017E    comb
+         ldb   #E$UnkSvc
+         rts
+
+         ELSE
+
+         rmb   V.SCF
+u001D    rmb   1
+u001E    rmb   1
+u001F    rmb   1
+BaudCnt  rmb   2	baud rate counter
+u0022    rmb   2
+u0024    rmb   1
+u0025    rmb   1
+size     equ   .
+
+BaudTbl  fdb   $0482      110 baud
+         fdb   $01A2      300 baud
+         fdb   $00CD      600 baud
+         fdb   $0063     1200 baud
+         fdb   $002D     2400 baud
+         fdb   $0013     4800 baud
+         fdb   $0005     9600 baud
+
+start    lbra  Init
+         lbra  Read
+         lbra  Write
+         lbra  GetStat
+         lbra  SetStat
+         lbra  Term
+
+* Init
+*
+* Entry:
+*    Y  = address of device descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Init     pshs  cc
+         orcc  #IntMasks
+         ldx   #PIA1Base
+         clr   $01,x
+         ldd   <IT.COL,y		get col/row bytes
+         std   <u0024,u
+         lda   #$FE
+         sta   ,x
+         lda   #$36
+         sta   $01,x
+         lda   ,x
+         ldd   <IT.PAR,y		get parity/baud
+         lbsr  L014D
+         puls  cc
+         clrb
+
+* Term
+*
+* Entry:
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Term     rts
+
+* Read
+*
+* Entry:
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    A  = character read
+*    CC = carry set on error
+*    B  = error code
+*
+Read     bsr   L00B1
+         bcs   L00CD
+         ldb   #$08
+         pshs  b,cc
+         tst   <u001E,u
+         beq   L0066
+         dec   $01,s
+L0066    bra   L006E
+L0068    ldx   #$0001
+         os9   F$Sleep
+L006E    lda   >PIA1Base+2
+         lsra
+         pshs  x,a
+         lda   >$FF69
+         bpl   L0091
+         lda   >PIA1Base+3
+         bita  #$01
+         beq   L0091
+         bita  #$80
+         beq   L0091
+         orcc  #Entire
+         leax  <L0091,pcr
+         pshs  x
+         pshs  u,y,x,dp,b,a,cc
+         jmp   [D.SvcIRQ]
+L0091    puls  x,a
+         bcs   L0068
+         orcc  #IntMasks
+         clra
+         bsr   L00DA
+L009A    bsr   L00D3
+         ldb   >PIA1Base+2
+         lsrb
+         rora
+         dec   $01,s
+         bne   L009A
+         bsr   L00DA
+         tst   <u001E,u
+         beq   L00AD
+         lsra
+L00AD    puls  b,cc
+         clrb
+         rts
+L00B1    pshs  a
+         lda   <PD.BAU,y
+         anda  #$0F            mask out baud rate
+         cmpa  #B19200
+         bcc   L00C9
+         lsla
+         leax  >BaudTbl,pcr
+         ldd   a,x
+         std   <BaudCnt,u
+         clrb
+         puls  pc,a
+L00C9    ldb   #E$BMode
+         puls  a
+L00CD    orcc  #Carry
+         rts
+L00D0    stb   >PIA1Base
+L00D3    pshs  b,a
+         ldd   <BaudCnt,u
+         bra   L00E1
+L00DA    pshs  b,a
+         ldd   <BaudCnt,u
+         lsra
+         rorb
+L00E1    subd  #$0001
+         bne   L00E1
+         puls  pc,b,a
+
+* Write
+*
+* Entry:
+*    A  = character to write
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+Write    bsr   L00B1
+         bcs   L00CD
+         ldb   #$09
+         pshs  b,cc
+         orcc  #IntMasks
+         tst   <u001E,u
+         beq   L00F9
+         dec   $01,s
+L00F9    andcc #^Carry
+L00FB    ldb   #$02
+         bcs   L0100
+         clrb
+L0100    bsr   L00D0
+         lsra
+         dec   $01,s
+         bne   L00FB
+         ldb   <u001D,u
+         beq   L0110
+         andb  #$FE
+         bsr   L00D0
+L0110    ldb   #$02
+         bsr   L00D0
+         tst   <u001F,u
+         beq   L011D
+         ldb   #$02
+         bsr   L00D0
+L011D    puls  pc,b,cc
+
+* GetStat
+*
+* Entry:
+*    A  = function code
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+GetStat  cmpa  #SS.EOF
+         bne   L0125
+L0123    clrb
+         rts
+L0125    ldx   PD.RGS,y
+         cmpa  #SS.ScSiz
+         beq   L0136
+         cmpa  #SS.ComSt
+         bne   L0183
+         ldd   <u0022,u
+         std   R$Y,x
+         bra   L0123
+L0136    ldx   PD.RGS,y
+         clra
+         ldb   <u0024,u
+         std   R$X,x
+         ldb   <u0025,u
+         std   R$Y,x
+         bra   L0123
+
+* SetStat
+*
+* Entry:
+*    A  = function code
+*    Y  = address of path descriptor
+*    U  = address of device memory area
+*
+* Exit:
+*    CC = carry set on error
+*    B  = error code
+*
+SetStat  cmpa  #SS.ComSt
+         bne   L0183
+         ldx   PD.RGS,y
+         ldd   R$Y,x
+L014D    std   <u0022,u
+         clra
+         clrb
+         std   <u001D,u
+         sta   <u001F,u
+         ldd   <u0022,u
+         tstb
+         bpl   L0161
+         inc   <u001F,u
+L0161    bitb  #$40
+         bne   L017F
+         bitb  #$20
+         beq   L016C
+         inc   <u001E,u
+L016C    bita  #$20
+         beq   L017E
+         bita  #$80
+         beq   L017F
+         inc   <u001D,u
+         bita  #$40
+         bne   L017E
+         inc   <u001D,u
+L017E    rts
+L017F    comb
+         ldb   <E$BMode
+         rts
+L0183    comb
+         ldb   #E$UnkSvc
+         rts
+
+         ENDC
+
+         emod
+eom      equ   *
+         end
+
--- a/level1/modules/sio.asm	Sat Nov 26 22:28:00 2005 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,579 +0,0 @@
-********************************************************************
-* SIO - CoCo Serial driver
-*
-* $Id$
-*
-* Edt/Rev  YYYY/MM/DD  Modified by
-* Comment
-* ------------------------------------------------------------------
-*   9      ????/??/??  ???
-* Original Tandy L2 distribution version.
-*
-*  10      ????/??/??  ???
-* Added baud delay table for NitrOS-9.
-*
-*  11      2003/12/15  Boisy G. Pitre
-* Merged Level 1 and Level 2 sources for now.
-
-         nam   SIO
-         ttl   CoCo Serial driver
-
-* Disassembled 98/08/23 20:58:36 by Disasm v1.6 (C) 1988 by RML
-
-         ifp1
-         use   defsfile
-         endc
-
-tylg     set   Drivr+Objct   
-atrv     set   ReEnt+rev
-rev      set   $00
-edition  set   9
-
-         mod   eom,name,tylg,atrv,start,size
-
-         fcb   UPDAT.
-
-name     fcs   /SIO/
-         fcb   edition
-
-         IFGT  Level-1
-
-u0000    rmb   29
-u001D    rmb   1
-u001E    rmb   1
-u001F    rmb   1
-u0020    rmb   2
-u0022    rmb   2
-u0024    rmb   1
-u0025    rmb   1
-size     equ   .
-
-* Baud Rate Delay Table
-DelayTbl
-         IFEQ  H6309
-* 6809 delay values (1.89MHz)
-         fdb   $090C	110 baud
-         fdb   $034C	300 baud
-         fdb   $01A2	600 baud
-         fdb   $00CE	1200 baud
-         fdb   $0062	2400 baud
-         fdb   $002E	4800 baud
-         fdb   $0012	9600 baud
-         fdb   $0003	32000 baud
-         ELSE
-* 6309 native mode delay values (1.89MHz)
-         fdb   $090C	110 baud (Unchanged, unknown)
-         fdb   $03D0	300 baud
-         fdb   $01A2	600 baud (Unchanged, unknown)
-         fdb   $00F0	1200 baud
-         fdb   $0073	2400 baud
-         fdb   $0036	4800 baud
-         fdb   $0017	9600 baud
-         fdb   $0003	32000 baud (Unchanged, unknown)
-         ENDC
-
-start    lbra  Init
-         lbra  Read
-         lbra  Write
-         lbra  GetStat
-         lbra  SetStat
-         lbra  Term
-
-* Init
-*
-* Entry:
-*    Y  = address of device descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Init     pshs  cc
-         orcc  #IntMasks
-         ldx   #PIA1Base
-         clr   $01,x
-         ldd   <IT.COL,y		get col/row bytes
-         std   <u0024,u
-         lda   #$FE
-         sta   ,x
-         lda   #$36
-         sta   $01,x
-         lda   ,x
-         ldd   <IT.PAR,y		get parity/baud
-         lbsr  L0148
-         puls  cc
-         clrb
-
-* Term
-*
-* Entry:
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Term     rts
-
-* Read
-*
-* Entry:
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    A  = character read
-*    CC = carry set on error
-*    B  = error code
-*
-Read     bsr   L00AC
-         bcs   L00C8
-         ldb   #$08
-         pshs  b,cc
-         tst   <u001E,u
-         beq   L0066
-         dec   $01,s
-L0066    bra   L0077
-L0068    lda   <PD.BAU,y
-         anda  #$0F
-         cmpa  #$07
-         beq   L0077
-         ldx   #$0001
-         os9   F$Sleep
-L0077    pshs  y
-         ldy   #$FFFF
-L007D    lda   >PIA1Base+2
-         leay  -$01,y
-         beq   L008B
-         lsra
-         bcs   L007D
-         puls  y
-         bra   L0090
-L008B    puls  y
-         lsra
-         bcs   L0068
-L0090    orcc  #IntMasks
-         clra
-         bsr   L00D5
-L0095    bsr   L00CE
-         ldb   >PIA1Base+2
-         lsrb
-         rora
-         dec   $01,s
-         bne   L0095
-         bsr   L00D5
-         tst   <u001E,u
-         beq   L00A8
-         lsra
-L00A8    puls  b,cc
-         clrb
-         rts
-L00AC    pshs  a
-         lda   <PD.BAU,y
-         anda  #$0F
-         cmpa  #$08
-         bcc   L00C4
-         lsla
-         leax  >DelayTbl,pcr
-         ldd   a,x
-         std   <u0020,u
-         clrb
-         puls  pc,a
-L00C4    ldb   #E$BMode
-         puls  a
-L00C8    orcc  #Carry
-         rts
-L00CB    stb   >PIA1Base
-L00CE    pshs  b,a
-         ldd   <u0020,u
-         bra   L00DC
-L00D5    pshs  b,a
-         ldd   <u0020,u
-         lsra
-         rorb
-L00DC    subd  #$0001
-         bne   L00DC
-         puls  pc,b,a
-
-* Write
-*
-* Entry:
-*    A  = character to write
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Write    bsr   L00AC
-         bcs   L00C8
-         ldb   #$09
-         pshs  b,cc
-         orcc  #IntMasks
-         tst   <u001E,u
-         beq   L00F4
-         dec   $01,s
-L00F4    andcc #^Carry
-L00F6    ldb   #$02
-         bcs   L00FB
-         clrb
-L00FB    bsr   L00CB
-         lsra
-         dec   $01,s
-         bne   L00F6
-         ldb   <u001D,u
-         beq   L010B
-         andb  #$FE
-         bsr   L00CB
-L010B    ldb   #$02
-         bsr   L00CB
-         tst   <u001F,u
-         beq   L0118
-         ldb   #$02
-         bsr   L00CB
-L0118    puls  pc,b,cc
-
-* GetStat
-*
-* Entry:
-*    A  = function code
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-GetStat  cmpa  #SS.EOF
-         bne   L0120
-L011E    clrb
-         rts
-L0120    ldx   PD.RGS,y
-         cmpa  #SS.ScSiz
-         beq   L0131
-         cmpa  #SS.ComSt
-         bne   L017E
-         ldd   <u0022,u
-         std   R$Y,x
-         bra   L011E
-L0131    ldx   PD.RGS,y
-         clra
-         ldb   <u0024,u
-         std   R$X,x
-         ldb   <u0025,u
-         std   R$Y,x
-         bra   L011E
-
-* SetStat
-*
-* Entry:
-*    A  = function code
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-SetStat  cmpa  #SS.ComSt
-         bne   L017E
-         ldx   PD.RGS,y
-         ldd   R$Y,x
-L0148    std   <u0022,u
-         clra
-         clrb
-         std   <u001D,u
-         sta   <u001F,u
-         ldd   <u0022,u
-         tstb
-         bpl   L015C
-         inc   <u001F,u
-L015C    bitb  #$40
-         bne   L017A
-         bitb  #$20
-         beq   L0167
-         inc   <u001E,u
-L0167    bita  #$20
-         beq   L0179
-         bita  #$80
-         beq   L017A
-         inc   <u001D,u
-         bita  #$40
-         bne   L0179
-         inc   <u001D,u
-L0179    rts
-L017A    comb
-         ldb   #E$BMode
-         rts
-L017E    comb
-         ldb   #E$UnkSvc
-         rts
-
-         ELSE
-
-         rmb   V.SCF
-u001D    rmb   1
-u001E    rmb   1
-u001F    rmb   1
-BaudCnt  rmb   2	baud rate counter
-u0022    rmb   2
-u0024    rmb   1
-u0025    rmb   1
-size     equ   .
-
-BaudTbl  fdb   $0482      110 baud
-         fdb   $01A2      300 baud
-         fdb   $00CD      600 baud
-         fdb   $0063     1200 baud
-         fdb   $002D     2400 baud
-         fdb   $0013     4800 baud
-         fdb   $0005     9600 baud
-
-start    lbra  Init
-         lbra  Read
-         lbra  Write
-         lbra  GetStat
-         lbra  SetStat
-         lbra  Term
-
-* Init
-*
-* Entry:
-*    Y  = address of device descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Init     pshs  cc
-         orcc  #IntMasks
-         ldx   #PIA1Base
-         clr   $01,x
-         ldd   <IT.COL,y		get col/row bytes
-         std   <u0024,u
-         lda   #$FE
-         sta   ,x
-         lda   #$36
-         sta   $01,x
-         lda   ,x
-         ldd   <IT.PAR,y		get parity/baud
-         lbsr  L014D
-         puls  cc
-         clrb
-
-* Term
-*
-* Entry:
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Term     rts
-
-* Read
-*
-* Entry:
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    A  = character read
-*    CC = carry set on error
-*    B  = error code
-*
-Read     bsr   L00B1
-         bcs   L00CD
-         ldb   #$08
-         pshs  b,cc
-         tst   <u001E,u
-         beq   L0066
-         dec   $01,s
-L0066    bra   L006E
-L0068    ldx   #$0001
-         os9   F$Sleep
-L006E    lda   >PIA1Base+2
-         lsra
-         pshs  x,a
-         lda   >$FF69
-         bpl   L0091
-         lda   >PIA1Base+3
-         bita  #$01
-         beq   L0091
-         bita  #$80
-         beq   L0091
-         orcc  #Entire
-         leax  <L0091,pcr
-         pshs  x
-         pshs  u,y,x,dp,b,a,cc
-         jmp   [D.SvcIRQ]
-L0091    puls  x,a
-         bcs   L0068
-         orcc  #IntMasks
-         clra
-         bsr   L00DA
-L009A    bsr   L00D3
-         ldb   >PIA1Base+2
-         lsrb
-         rora
-         dec   $01,s
-         bne   L009A
-         bsr   L00DA
-         tst   <u001E,u
-         beq   L00AD
-         lsra
-L00AD    puls  b,cc
-         clrb
-         rts
-L00B1    pshs  a
-         lda   <PD.BAU,y
-         anda  #$0F            mask out baud rate
-         cmpa  #B19200
-         bcc   L00C9
-         lsla
-         leax  >BaudTbl,pcr
-         ldd   a,x
-         std   <BaudCnt,u
-         clrb
-         puls  pc,a
-L00C9    ldb   #E$BMode
-         puls  a
-L00CD    orcc  #Carry
-         rts
-L00D0    stb   >PIA1Base
-L00D3    pshs  b,a
-         ldd   <BaudCnt,u
-         bra   L00E1
-L00DA    pshs  b,a
-         ldd   <BaudCnt,u
-         lsra
-         rorb
-L00E1    subd  #$0001
-         bne   L00E1
-         puls  pc,b,a
-
-* Write
-*
-* Entry:
-*    A  = character to write
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-Write    bsr   L00B1
-         bcs   L00CD
-         ldb   #$09
-         pshs  b,cc
-         orcc  #IntMasks
-         tst   <u001E,u
-         beq   L00F9
-         dec   $01,s
-L00F9    andcc #^Carry
-L00FB    ldb   #$02
-         bcs   L0100
-         clrb
-L0100    bsr   L00D0
-         lsra
-         dec   $01,s
-         bne   L00FB
-         ldb   <u001D,u
-         beq   L0110
-         andb  #$FE
-         bsr   L00D0
-L0110    ldb   #$02
-         bsr   L00D0
-         tst   <u001F,u
-         beq   L011D
-         ldb   #$02
-         bsr   L00D0
-L011D    puls  pc,b,cc
-
-* GetStat
-*
-* Entry:
-*    A  = function code
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-GetStat  cmpa  #SS.EOF
-         bne   L0125
-L0123    clrb
-         rts
-L0125    ldx   PD.RGS,y
-         cmpa  #SS.ScSiz
-         beq   L0136
-         cmpa  #SS.ComSt
-         bne   L0183
-         ldd   <u0022,u
-         std   R$Y,x
-         bra   L0123
-L0136    ldx   PD.RGS,y
-         clra
-         ldb   <u0024,u
-         std   R$X,x
-         ldb   <u0025,u
-         std   R$Y,x
-         bra   L0123
-
-* SetStat
-*
-* Entry:
-*    A  = function code
-*    Y  = address of path descriptor
-*    U  = address of device memory area
-*
-* Exit:
-*    CC = carry set on error
-*    B  = error code
-*
-SetStat  cmpa  #SS.ComSt
-         bne   L0183
-         ldx   PD.RGS,y
-         ldd   R$Y,x
-L014D    std   <u0022,u
-         clra
-         clrb
-         std   <u001D,u
-         sta   <u001F,u
-         ldd   <u0022,u
-         tstb
-         bpl   L0161
-         inc   <u001F,u
-L0161    bitb  #$40
-         bne   L017F
-         bitb  #$20
-         beq   L016C
-         inc   <u001E,u
-L016C    bita  #$20
-         beq   L017E
-         bita  #$80
-         beq   L017F
-         inc   <u001D,u
-         bita  #$40
-         bne   L017E
-         inc   <u001D,u
-L017E    rts
-L017F    comb
-         ldb   <E$BMode
-         rts
-L0183    comb
-         ldb   #E$UnkSvc
-         rts
-
-         ENDC
-
-         emod
-eom      equ   *
-         end
-
--- a/level1/modules/t1_bbt.asm	Sat Nov 26 22:28:00 2005 +0000
+++ b/level1/modules/t1_bbt.asm	Sat Nov 26 22:51:50 2005 +0000
@@ -1,5 +1,5 @@
 ********************************************************************
-* T1 - CoCo serial device descriptor
+* T1 - CoCo Bit-Banger Terminal Device Descriptor
 *
 * $Id$
 *
@@ -8,7 +8,7 @@
 * ------------------------------------------------------------------
 
          nam   T1
-         ttl   CoCo serial device descriptor
+         ttl   CoCo Bit-Banger Terminal Device Descriptor
 
 * Disassembled 98/08/23 21:16:45 by Disasm v1.6 (C) 1988 by RML
 
@@ -61,7 +61,7 @@
 
 name     fcs   /T1/
 mgrnam   fcs   /SCF/
-drvnam   fcs   /SIO/
+drvnam   fcs   /scbbt/
 
          emod  
 eom      equ   *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/level1/modules/term_bbt.asm	Sat Nov 26 22:51:50 2005 +0000
@@ -0,0 +1,68 @@
+********************************************************************
+* TERM - CoCo Bit-Banger Terminal Device Descriptor
+*
+* $Id$
+*
+* Edt/Rev  YYYY/MM/DD  Modified by
+* Comment
+* ------------------------------------------------------------------
+*          ????/??/??
+* From Tandy OS-9 Level One VR 02.00.00
+
+         nam   TERM
+         ttl   CoCo Bit-Banger Terminal Device Descriptor
+
+* Disassembled 98/08/23 21:16:45 by Disasm v1.6 (C) 1988 by RML
+
+         ifp1  
+         use   defsfile
+         use   scfdefs
+         endc  
+
+tylg     set   Devic+Objct
+atrv     set   ReEnt+rev
+rev      set   $00
+
+         mod   eom,name,tylg,atrv,mgrnam,drvnam
+
+         fcb   UPDAT.     mode byte
+         fcb   HW.Page    extended controller address
+         fdb   $0000      physical controller address
+         fcb   initsize-*-1 initilization table size
+         fcb   DT.SCF     device type:0=scf,1=rbf,2=pipe,3=scf
+         fcb   $00        case:0=up&lower,1=upper only
+         fcb   $01        backspace:0=bsp,1=bsp then sp & bsp
+         fcb   $00        delete:0=bsp over line,1=return
+         fcb   $01        echo:0=no echo
+         fcb   $01        auto line feed:0=off
+         fcb   $00        end of line null count
+         fcb   $01        pause:0=no end of page pause
+         fcb   24         lines per page
+         fcb   C$BSP      backspace character
+         fcb   C$DEL      delete line character
+         fcb   C$CR       end of record character
+         fcb   C$EOF      end of file character
+         fcb   C$RPRT     reprint line character
+         fcb   C$RPET     duplicate last line character
+         fcb   C$PAUS     pause character
+         fcb   C$INTR     interrupt character
+         fcb   C$QUIT     quit character
+         fcb   C$BSP      backspace echo character
+         fcb   C$BELL     line overflow character (bell)
+         fcb   PARNONE    init value for dev ctl reg
+         fcb   B300+WORD8+STOP1       baud rate
+         fdb   name       copy of descriptor name address
+         fcb   $00        acia xon char
+         fcb   $00        acia xoff char
+         fcb   80         (szx) number of columns for display
+         fcb   24         (szy) number of rows for display
+initsize equ   *
+
+name     fcs   /term/
+mgrnam   fcs   /SCF/
+drvnam   fcs   /scbbt/
+
+         emod  
+eom      equ   *
+         end   
+
--- a/level1/modules/term_sio.asm	Sat Nov 26 22:28:00 2005 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-********************************************************************
-* TERM - CoCo Serial Device Descriptor for Terminal
-*
-* $Id$
-*
-* Edt/Rev  YYYY/MM/DD  Modified by
-* Comment
-* ------------------------------------------------------------------
-*          ????/??/??
-* From Tandy OS-9 Level One VR 02.00.00
-
-         nam   T1
-         ttl   CoCo Serial Device Descriptor for Terminal
-
-* Disassembled 98/08/23 21:16:45 by Disasm v1.6 (C) 1988 by RML
-
-         ifp1  
-         use   defsfile
-         use   scfdefs
-         endc  
-
-tylg     set   Devic+Objct
-atrv     set   ReEnt+rev
-rev      set   $00
-
-         mod   eom,name,tylg,atrv,mgrnam,drvnam
-
-         fcb   UPDAT.     mode byte
-         fcb   HW.Page    extended controller address
-         fdb   $0000      physical controller address
-         fcb   initsize-*-1 initilization table size
-         fcb   DT.SCF     device type:0=scf,1=rbf,2=pipe,3=scf
-         fcb   $00        case:0=up&lower,1=upper only
-         fcb   $01        backspace:0=bsp,1=bsp then sp & bsp
-         fcb   $00        delete:0=bsp over line,1=return
-         fcb   $01        echo:0=no echo
-         fcb   $01        auto line feed:0=off
-         fcb   $00        end of line null count
-         fcb   $01        pause:0=no end of page pause
-         fcb   24         lines per page
-         fcb   C$BSP      backspace character
-         fcb   C$DEL      delete line character
-         fcb   C$CR       end of record character
-         fcb   C$EOF      end of file character
-         fcb   C$RPRT     reprint line character
-         fcb   C$RPET     duplicate last line character
-         fcb   C$PAUS     pause character
-         fcb   C$INTR     interrupt character
-         fcb   C$QUIT     quit character
-         fcb   C$BSP      backspace echo character
-         fcb   C$BELL     line overflow character (bell)
-         fcb   PARNONE    init value for dev ctl reg
-         fcb   B300+WORD8+STOP1       baud rate
-         fdb   name       copy of descriptor name address
-         fcb   $00        acia xon char
-         fcb   $00        acia xoff char
-         fcb   80         (szx) number of columns for display
-         fcb   24         (szy) number of rows for display
-initsize equ   *
-
-name     fcs   /term/
-mgrnam   fcs   /SCF/
-drvnam   fcs   /SIO/
-
-         emod  
-eom      equ   *
-         end   
-
--- a/level2/coco3/bootlists/standard.bl	Sat Nov 26 22:28:00 2005 +0000
+++ b/level2/coco3/bootlists/standard.bl	Sat Nov 26 22:51:50 2005 +0000
@@ -152,7 +152,7 @@
 *../MODULES/SCF/term_vdg.dt
 *../MODULES/SCF/term_win40.dt
 ../MODULES/SCF/term_win80.dt
-*../MODULES/SCF/term_sio.dt
+*../MODULES/SCF/term_bbt.dt
 *../MODULES/SCF/term_sc6551.dt
 *
 * Select as many window descriptors as needed
@@ -175,8 +175,8 @@
 *../MODULES/SCF/v7.dw
 *
 * Serial port drivers
-* Built-In RS-232 port
-*../MODULES/SCF/sio.dr
+* CoCo Bit-Banger terminal port
+*../MODULES/SCF/scbbt.dr
 *../MODULES/SCF/t1.dd
 * 6551 ACIA
 *../MODULES/SCF/sc6551.dr
@@ -188,7 +188,7 @@
 *../MODULES/SCF/m2.dd
 *
 * Printer drivers
-* ../MODULES/SCF/printer.dr
+* ../MODULES/SCF/scbbp.dr
 * ../MODULES/SCF/p.dd
 *
 * VRN is a driver module used by certain games, including King's Quest III,
--- a/level2/coco3_6309/bootlists/standard.bl	Sat Nov 26 22:28:00 2005 +0000
+++ b/level2/coco3_6309/bootlists/standard.bl	Sat Nov 26 22:51:50 2005 +0000
@@ -152,7 +152,7 @@
 *../MODULES/SCF/term_vdg.dt
 *../MODULES/SCF/term_win40.dt
 ../MODULES/SCF/term_win80.dt
-*../MODULES/SCF/term_sio.dt
+*../MODULES/SCF/term_bbt.dt
 *../MODULES/SCF/term_sc6551.dt
 *
 * Select as many window descriptors as needed
@@ -175,8 +175,8 @@
 *../MODULES/SCF/v7.dw
 *
 * Serial port drivers
-* Built-In RS-232 port
-*../MODULES/SCF/sio.dr
+* CoCo Bit-Banger terminal port
+*../MODULES/SCF/scbbt.dr
 *../MODULES/SCF/t1.dd
 * 6551 ACIA
 *../MODULES/SCF/sc6551.dr
@@ -188,7 +188,7 @@
 *../MODULES/SCF/m2.dd
 *
 * Printer drivers
-* ../MODULES/SCF/printer.dr
+* ../MODULES/SCF/scbbp.dr
 * ../MODULES/SCF/p.dd
 *
 * VRN is a driver module used by certain games, including King's Quest III,
--- a/level2/modules/makefile	Sat Nov 26 22:28:00 2005 +0000
+++ b/level2/modules/makefile	Sat Nov 26 22:51:50 2005 +0000
@@ -37,14 +37,14 @@
 		
 
 SCF		= scf.mn \
-		vtio.dr vrn.dr printer.dr sio.dr sspak.dr sc6551.dr \
+		vtio.dr vrn.dr scbbp.dr scbbt.dr sspak.dr sc6551.dr \
 		cowin.io cogrf.io covdg.io covdg_small.io \
 		keydrv_cc3.sb snddrv_cc3.sb \
 		joydrv_joy.sb joydrv_6551L.sb joydrv_6552L.sb \
 		joydrv_6551M.sb joydrv_6552M.sb \
 		nil.dd p.dd \
 		t1.dd t2_sc6551.dd t3_sc6551.dd \
-		ftdd.dd vi.dd ssp.dd term_sio.dt term_sc6551.dt \
+		ftdd.dd vi.dd ssp.dd term_bbt.dt term_sc6551.dt \
 		term_vdg.dt term_win40.dt term_win80.dt w.dw w1.dw w2.dw \
 		w3.dw w4.dw w5.dw w6.dw w7.dw v1.dw v2.dw v3.dw v4.dw v5.dw \
 		v6.dw v7.dw