Mercurial > hg > Members > kono > nitros9-code
view level1/modules/scdwp.asm @ 3246:be3446f758ca
Updated dwread.asm and dwwrite.asm so that the 6551 routines could have specially defined
flags so that some of the addresses could be overridden by the make files if needed.
author | David Ladd <drencor-xeen@users.sourceforge.net> |
---|---|
date | Sun, 11 Mar 2018 01:30:30 -0600 |
parents | 05b648103e78 |
children |
line wrap: on
line source
******************************************************************** * scdwp.asm - CoCo DriveWire Printer Driver * * $Id$ * * Edt/Rev YYYY/MM/DD Modified by * Comment * ------------------------------------------------------------------ * 1 2009/03/06 Boisy G. Pitre * Started. nam scdwp ttl CoCo DriveWire Printer Driver ifp1 use defsfile use drivewire.d endc tylg set Drivr+Objct atrv set ReEnt+Rev rev set $00 edition set 1 mod eom,name,tylg,atrv,Start,Size fcb READ.+WRITE. name fcs /scdwp/ 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 . 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 * Check if D.DWSubAddr already holds a valid subroutine module pointer IFGT Level-1 ldx <D.DWSubAddr ELSE ldx >D.DWSubAddr ENDC bne InitEx * If here, D.DWSubAddr is 0, so we must link to subroutine module IFGT Level-1 ldx <D.Proc pshs x ldx <D.SysPrc stx <D.Proc ENDC clra leax dwioname,pcr os9 F$Link IFGT Level-1 puls x stx <D.Proc ENDC bcs InitEx IFGT Level-1 sty <D.DWSubAddr ELSE sty >D.DWSubAddr ENDC jsr ,y call init routine InitEx rts dwioname fcs /dwio/ * 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 * tfr a,b lda #OP_PRINT pshs d leax ,s ldy #$0002 IFGT Level-1 ldu <D.DWSubAddr ELSE ldu >D.DWSubAddr ENDC jsr 6,u puls d,pc * 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 clra clrb std R$Y,x clrb rts * get screen size GetStt L0123 clra ldb #80 std R$X,x ldb #24 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 Close cmpa #SS.Close close the device? bne L0173 lda #OP_PRINTFLUSH send PrintQueue Flush Packet pshs a ldy #$0001 leax ,s IFGT Level-1 ldu <D.DWSubAddr ELSE ldu >D.DWSubAddr ENDC jsr 6,u puls a,pc Read comb ldb #E$BMode rts L0173 comb ldb #E$UnkSVc rts emod eom equ * end