aboutsummaryrefslogtreecommitdiffstats
path: root/src/syscall.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/syscall.asm')
-rw-r--r--src/syscall.asm38
1 files changed, 7 insertions, 31 deletions
diff --git a/src/syscall.asm b/src/syscall.asm
index 1051a4d..2adf5bf 100644
--- a/src/syscall.asm
+++ b/src/syscall.asm
@@ -132,41 +132,17 @@ KGetc::
call pad_poll ; poll joypad; drive the on-screen keyboard
call osk_handle ; CF set + A = byte if a key was typed
jr c, .done
- ld a, $80
- ld [rSC], a
- ld a, [rSC]
- bit 7, a
- jr nz, .yield
- ld a, [rSB] ; A = serial byte
- ; The link port is also the network. Skip SLIP frames (0xC0-delimited) so
- ; inbound packets never surface as console input; plain bytes (an injected
- ; command in headless use) still pass through.
- ld b, a
- ld a, [wConInSkip]
- or a
- jr nz, .inframe
- ld a, b
- cp SLIP_END
- jr z, .frameopen
- ld a, b ; ordinary byte -> console input
- jr .done
-.frameopen
- ld a, 1
- ld [wConInSkip], a
- jr .poll
-.inframe
- ld a, b
- cp SLIP_END
- jr nz, .poll ; still inside a frame -> discard
- xor a
- ld [wConInSkip], a ; frame end -> resume
+ ; The link port is the network. Pump it here so the Game Boy services the
+ ; net (answers pings, etc.) while sitting at the prompt; net_pump routes any
+ ; non-framed link bytes (a headless-injected command) to the console ring.
+ call net_pump
+ call con_pop ; queued console byte? CF clear -> return it
+ jr nc, .done
+ call SchedYield
jr .poll
.done
and a ; CF = 0 (not EOF)
ret
-.yield
- call SchedYield
- jr .poll
; -----------------------------------------------------------------------------
; KPutc(E = byte) - write to this process's stdout (console/file).