From: Brett Gordon Date: Sun, 12 Jun 2016 17:25:45 +0000 (-0400) Subject: dragon-nx32: dw_transaction to support direct to userspace X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=d1e2e5a46a4b370f4a25b092730b734b5634fc30;p=FUZIX.git dragon-nx32: dw_transaction to support direct to userspace --- diff --git a/Kernel/platform-dragon-nx32/drivewire.s b/Kernel/platform-dragon-nx32/drivewire.s index 3b90bb84..85962feb 100644 --- a/Kernel/platform-dragon-nx32/drivewire.s +++ b/Kernel/platform-dragon-nx32/drivewire.s @@ -25,21 +25,25 @@ _dw_transaction: pshs cc,y ; save caller orcc #0x50 ; stop interrupts - ldy 5,s ; Y = number of bytes to send - beq out@ ; no byte to write - leave + tstb ; rawflag? + beq skip@ ; nope - then skip switching to process map + jsr map_process_always +skip@ ldy 5,s ; Y = number of bytes to send + beq ok@ ; no bytes to write - leave jsr DWWrite ; send to DW ldx 7,s ; X is receive buffer ldy 9,s ; Y = number of bytes to receive - beq out@ ; no bytes to send - leave + beq ok@ ; no bytes to send - leave jsr DWRead ; read in that many bytes bcs frame@ ; C set on framing error bne part@ ; Z zet on all bytes received -out@ ldx #0 ; no error +ok@ ldx #0 ; no error +out@ jsr map_kernel puls cc,y,pc ; return frame@ ldx #-1 ; frame error - puls cc,y,pc ; return + bra out@ part@ ldx #-2 ; not all bytes received! - puls cc,y,pc ; return + bra out@ _dw_reset: ; maybe reinitalise PIA here?