diff options
Diffstat (limited to 'src/syscall.asm')
| -rw-r--r-- | src/syscall.asm | 38 |
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). |
