From d1e2e5a46a4b370f4a25b092730b734b5634fc30 Mon Sep 17 00:00:00 2001 From: Brett Gordon Date: Sun, 12 Jun 2016 13:25:45 -0400 Subject: [PATCH] dragon-nx32: dw_transaction to support direct to userspace --- Kernel/platform-dragon-nx32/drivewire.s | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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? -- 2.34.1