diff options
| author | user <user@clank> | 2026-07-17 01:39:29 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-07-17 01:39:29 +0200 |
| commit | c4b9a1b1c4f8c211f765a089b34b66a2d046f3be (patch) | |
| tree | 2f9245dc8c0741a8e547cc8ae77073cf2d5c56d9 /src/programs.asm | |
| parent | net: wget - real HTTP over the link port via the gateway (diff) | |
| download | gbos-c4b9a1b1c4f8c211f765a089b34b66a2d046f3be.tar.gz gbos-c4b9a1b1c4f8c211f765a089b34b66a2d046f3be.tar.xz gbos-c4b9a1b1c4f8c211f765a089b34b66a2d046f3be.zip | |
net: chat client - async receive + OSK send over the link port
The application layer of the link-port demo, and it ties the whole system
together: the LCD terminal displays, the on-screen keyboard types, and the
link port carries a live chat.
Kernel: sys_srecv_nb (non-blocking link receive; A=byte, CF=none) and
sys_pollin (poll the OSK for a typed char without blocking) - syscalls
31/32. Both are what a poll loop needs to receive and type at once.
Userland: c/chat.c runs a poll loop - it feeds non-blocking bytes through a
SLIP receive state machine and prints whole incoming frames as messages,
while pollin() drives the on-screen keyboard; SELECT shows the keys, type a
line, START sends it as a frame. libc srecv_nb()/pollin().
Host: tools/gateway.py --mode chat is a simple bot peer (echoes each GB
message and injects a few async ones); --keys can drive the OSK for tests.
Verified: the gateway pushes 'welcome', '<alice> hey gameboy!', '<bob> nice
link cable' unprompted and the GB displays all three (async receive); typing
'hi' on the OSK echoes it and emits the SLIP frame \xC0hi\xC0 (send). A Game
Boy in the chat, keyboard on screen, over the link cable.
Diffstat (limited to 'src/programs.asm')
| -rw-r--r-- | src/programs.asm | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/programs.asm b/src/programs.asm index fbe6067..180f551 100644 --- a/src/programs.asm +++ b/src/programs.asm @@ -115,6 +115,9 @@ ProgNecho: SECTION "prog_wget", ROMX[$4000], BANK[26] ProgWget: INCBIN "c/wget.bin" +SECTION "prog_chat", ROMX[$4000], BANK[27] +ProgChat: + INCBIN "c/chat.bin" ; ----------------------------------------------------------------------------- ; PROG_SH (bank 3) - the shell, now written in C (c/sh.c): parses >/</| and @@ -207,6 +210,8 @@ ProgramTable:: dw ProgNecho db LOW(BANK(ProgWget)), HIGH(BANK(ProgWget)) dw ProgWget + db LOW(BANK(ProgChat)), HIGH(BANK(ProgChat)) + dw ProgChat ; ----------------------------------------------------------------------------- ; NameTable (ROM0) - command name -> program id, searched by sys_lookup. @@ -263,4 +268,6 @@ NameTable:: db PROG_NECHO db "wget", 0 db PROG_WGET + db "chat", 0 + db PROG_CHAT db 0 |
