# HG changeset patch # User boisy # Date 1041803313 0 # Node ID bd7c8348adecf7df2e7f9aab25cbf34cb7e5ea64 # Parent 5ed7f616e80b939706155563900a57b1b3f860a3 This is the serial printer driver from NitrOS-9, backported to OS-9 Level Two Note, the previous revision was actually the Disto printer driver. diff -r 5ed7f616e80b -r bd7c8348adec level2/modules/printer.asm --- a/level2/modules/printer.asm Sun Jan 05 21:47:48 2003 +0000 +++ b/level2/modules/printer.asm Sun Jan 05 21:48:33 2003 +0000 @@ -1,85 +1,347 @@ ******************************************************************** -* Printer - CoCo 3 serial port printer driver +* Printer - CoCo 3 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! +* * Ed. Comments Who YY/MM/DD * ------------------------------------------------------------------ -* 12 Original OS-9 L2 Tandy distribution +* NitrOS-9 2.00 distribution ??/??/?? +* 13 Back-ported to OS-9 Level Two BGP 03/01/05 - nam PRINTER - ttl CoCo 3 serial port printer driver - -* Disassembled 98/08/24 23:21:29 by Disasm v1.6 (C) 1988 by RML + nam Printer + ttl CoCo 3 Serial Printer Driver ifp1 use defsfile endc tylg set Drivr+Objct -atrv set ReEnt+rev +atrv set ReEnt+Rev rev set $01 -edition set 12 - - mod eom,name,tylg,atrv,start,size +edition set 13 -u0000 rmb 29 -u001D rmb 1 -u001E rmb 1 -u001F rmb 1 -size equ . - fcb $03 + mod eom,name,tylg,atrv,Start,Size + + fcb READ.+WRITE. name fcs /PRINTER/ - fcb edition + 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 NitrOS9 +* OS-9 Level Two 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 +* NitrOS-9 Level Two 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 equ * - lbra L006E - lbra L0028 - lbra L002C - lbra L005B - lbra L0057 - lbra L006C -L0028 comb - ldb #$CB - rts -L002C ldb >MPI.Slct - andb #$33 - pshs b - ldb #$33 - stb >MPI.Slct - tst >$FF52 - bmi L004A -L003D sta >$FF52 - sta >$FF52 + lbra Init + lbra Read + lbra Write + lbra GetStt + lbra SetStt +Term equ * + clrb + rts + +Init orcc #IntMasks + ldx #$FF20 + clr $01,X + ldd <$2C,Y get number of columns/rows + std $FF20 +L0080 pshs d + ldd MPI.Slct + ENDC + ldb $FF22 get a byte + lsrb + puls pc,b + +L00CB equ * + IFNE H6309 + clrd + ELSE + clra + clrb + ENDC + std $FF52 - bpl L003D - bra L004A -L0057 comb - ldb #$D0 + +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