diff options
Diffstat (limited to '')
| -rw-r--r-- | src/net.asm | 22 | ||||
| -rw-r--r-- | src/programs.asm | 7 | ||||
| -rw-r--r-- | src/syscall.asm | 2 |
3 files changed, 31 insertions, 0 deletions
diff --git a/src/net.asm b/src/net.asm index 939b975..f2c4279 100644 --- a/src/net.asm +++ b/src/net.asm @@ -39,3 +39,25 @@ sys_srecv:: .got ld a, [rSB] ret + +; sys_srecv_nb() -> A = byte, CF set if none available (non-blocking). +sys_srecv_nb:: + ld a, $80 + ld [rSC], a + ld a, [rSC] + bit 7, a + jr z, .got + scf + ret +.got + ld a, [rSB] + and a ; CF = 0 (got a byte) + ret + +; sys_pollin() -> A = char typed on the OSK this poll, or 0 if none. +sys_pollin:: + call pad_poll + call osk_handle ; CF set + A = char if a key was pressed + ret c + xor a + ret 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 diff --git a/src/syscall.asm b/src/syscall.asm index cb16bbe..f926d89 100644 --- a/src/syscall.asm +++ b/src/syscall.asm @@ -65,6 +65,8 @@ SyscallTable: dw sys_pipe ; 28 PIPE dw sys_ssend ; 29 SSEND dw sys_srecv ; 30 SRECV + dw sys_srecv_nb ; 31 SRECVNB + dw sys_pollin ; 32 POLLIN ; ----------------------------------------------------------------------------- sys_nosys: |
