; ============================================================================= ; tasks.asm - the init task demonstrates fork() + exec(). ; ; init forks; the parent exec()s PROG_PING (ROM bank 2), the child exec()s ; PROG_PONG (ROM bank 3). Both program images are ORG'd at $4000, so the output ; "1212..." proves each process runs from its own ROM bank via PROC_ROMB - not ; from shared ROM0. ; ============================================================================= INCLUDE "include/gbos.inc" SECTION "tasks", ROM0 TaskInit:: ld c, SYS_FORK rst $30 ; A = child pid (parent) or 0 (child) or a jr z, .child .parent ld b, PROG_PING ld c, SYS_EXEC rst $30 ; never returns .child ld b, PROG_PONG ld c, SYS_EXEC rst $30 ; never returns