diff options
| author | user <user@clank> | 2026-07-15 23:44:28 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-07-15 23:44:28 +0200 |
| commit | de725da74db5cba0f9bfd0755269e1683423d87b (patch) | |
| tree | dc39eca9fbd290393ed51de31eee5e4bd6af8375 /src/tasks.asm | |
| download | gbos-de725da74db5cba0f9bfd0755269e1683423d87b.tar.gz gbos-de725da74db5cba0f9bfd0755269e1683423d87b.tar.xz gbos-de725da74db5cba0f9bfd0755269e1683423d87b.zip | |
gbos scaffold: working cooperative microkernel (verified ABAB in emulator)
- fix ClearKernelRAM clobbering the kernel stack (only clear $C000-$CBFF)
- fix SyscallTrap clobbering DE (buffer arg) during table dispatch
- README: run via ~/dev/gbc --headless; note bring-up bugs
Diffstat (limited to 'src/tasks.asm')
| -rw-r--r-- | src/tasks.asm | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/tasks.asm b/src/tasks.asm new file mode 100644 index 0000000..1f84142 --- /dev/null +++ b/src/tasks.asm @@ -0,0 +1,33 @@ +; ============================================================================= +; tasks.asm - two demo userland tasks (text-in-ROM model). +; Each loops: write its letter to the console, then yield. This exercises the +; whole pipeline: syscall trap, console, and the HRAM context switch swapping +; RAM banks / SVBK between tasks. +; ============================================================================= +INCLUDE "include/gbos.inc" + +SECTION "tasks", ROM0 + +TaskA:: +.loop + ld de, .msg + ld b, 1 ; len + ld c, SYS_WRITE + rst $30 + ld c, SYS_YIELD + rst $30 + jr .loop +.msg + db "A" + +TaskB:: +.loop + ld de, .msg + ld b, 1 + ld c, SYS_WRITE + rst $30 + ld c, SYS_YIELD + rst $30 + jr .loop +.msg + db "B" |
