Mercurial > hg > Members > kono > nitros9-code
view level1/modules/scdpp.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 | 25b468210b37 |
children | c505ae3120c4 |
line wrap: on
line source
* Parallel Printer device for Dragon 32/64/Alpha. * * Disassembled from the Alpha OS-9 2005-06-14, P.Harvey-Smith. * nam scdpp ttl Dragon Parallel Printer Driver * Disassembled 1900/00/00 00:08:11 by Disasm v1.5 (C) 1988 by RML ifp1 use defsfile endc tylg set Drivr+Objct atrv set ReEnt+rev rev set $01 edition set 3 mod eom,name,tylg,atrv,start,size u0000 rmb 29 size equ . fcb $03 name equ * fcs /scdpp/ fcb edition start equ * 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 #$50 ; Disable Inturrupts ldx #PIA1DA ; Point to PIA1DA ldb 1,x ; Get CRA clr 1,x ; Zero CR and select DDRA lda #$FE ; Set bit 0 as input (cassette in), all others as input sta ,x stb 1,x ; Restore CRA ldx #PIA1DB ; Point at PIA1DB ldb 1,x ; Save CRB clr 1,x ; Zero CR and select DDRB lda ,x ; get DDRB anda #$FE ; Set bit 0 as input (printer busy), all others leave alone sta ,x stb 1,x ; restore CRB puls cc clrb ; Flag no error rts * Read * * Entry: * B = MSB of the disk's LSN * X = LSB of the disk's LSN * Y = address of path descriptor * U = address of device memory area * * Exit: * CC = carry set on error * B = error code * Read ldb #$CB ; Ilegal mode, cannot read from printer ! orcc #$01 rts * Write * * Entry: * B = MSB of the disk's LSN * X = LSB of the disk's LSN * Y = address of path descriptor * U = address of device memory area * * Exit: * CC = carry set on error * B = error code * Write pshs a L0053 ldb #$08 ; retry count L0055 lda >PIA1DB ; Get printer busy flag lsra ; Get busy bit into carry bcc WriteNotBusy ; Not busy : continue nop ; wait a little while nop decb ; decrement retry counter bne L0055 ; Non zero : check flag again pshs x ; Still busy: send calling process to sleep ldx #$0001 os9 F$Sleep puls x bra L0053 ; When we wake, poll busy again WriteNotBusy puls a pshs cc orcc #$50 ; disable inturrupts sta >PIA0DB ; Send character to printer lda >PIA1DA ; Toggle printer strobe line ora #$02 ; high sta >PIA1DA anda #$FD ; and low again sta >PIA1DA puls pc,cc ; restore and return * 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 #$01 bne L008A L0088 clrb rts L008A cmpa #$06 beq L0088 * * 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 comb ldb #$D0 rts * * Term * * Entry: * U = address of device memory area * * Exit: * CC = carry set on error * B = error code * Term rts emod eom equ * end