<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gbos.git/c/libc.c, branch master</title>
<subtitle>gbos - a tiny Unix-flavored OS for the Game Boy Color (kernel, shell, coreutils in C, RAM filesystem)</subtitle>
<id>https://git.sl0p.foo/gbos.git/atom/c/libc.c?h=master</id>
<link rel='self' href='https://git.sl0p.foo/gbos.git/atom/c/libc.c?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/'/>
<updated>2026-07-17T22:38:38Z</updated>
<entry>
<title>refactor: c/ -&gt; usr/, compiled program blobs out of the source tree</title>
<updated>2026-07-17T22:38:38Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-17T22:38:38Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=ba2d7ae1d7b319645b10aaa31a7f664f9f80c25c'/>
<id>urn:sha1:ba2d7ae1d7b319645b10aaa31a7f664f9f80c25c</id>
<content type='text'>
Userland sources live in usr/ (fits the Unix theme better than 'c').
SDCC output .bin blobs land in build/usr/ with the other build artifacts
instead of littering the source dir; programs.asm INCBINs them from there.
Byte-identical ROM.
</content>
</entry>
<entry>
<title>kernel: sys_sleep - a cooperative delay off the DIV timer (+ ping pacing)</title>
<updated>2026-07-17T11:43:10Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-17T11:43:10Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=b52f37602968768901d2dd83ccf966d953a532f0'/>
<id>urn:sha1:b52f37602968768901d2dd83ccf966d953a532f0</id>
<content type='text'>
There was no time source at all (IRQ vectors just reti; scheduler is purely
cooperative). The DIV register (FF04) free-runs at 16384 Hz regardless of
interrupts, so sys_sleep accumulates DIV deltas across SchedYields (other procs
keep running) until the requested number of 1/64-second units elapse.

- SYS_SLEEP(34): B = 1/64s units; libc gsleep(units) / msleep(ms) wrappers.
- ping now msleep(800) between echoes, so it paces like real ping instead of
  blasting all four at once.

Verified real-time (capped emulator): replies land ~0.85s apart. In --uncapped
runs the delay is GB-time (fast wall-clock), as expected.
</content>
</entry>
<entry>
<title>libc: option parsing (hasflag/optval); wc -l/-w/-c, head -n N</title>
<updated>2026-07-16T05:41:04Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-16T05:41:04Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=c303bcde76d0d90a5c6e623466fd3c8d7ff3a072'/>
<id>urn:sha1:c303bcde76d0d90a5c6e623466fd3c8d7ff3a072</id>
<content type='text'>
- hasflag(argv,argc,f): single-char flag present (-f or within -abc)
- optval(argv,argc,opt): value for -opt (-n 5 or -n5)
- wc supports -l/-w/-c (default all); head supports -n N (and bare N)
</content>
</entry>
<entry>
<title>tools: wc, head, and an argc/argv demo (args) + libc.c helpers</title>
<updated>2026-07-16T05:30:34Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-16T05:30:34Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=8682553498d32d3c18dea41c598ab40de18404a3'/>
<id>urn:sha1:8682553498d32d3c18dea41c598ab40de18404a3</id>
<content type='text'>
- c/libc.c: shared C helpers linked into every program - putu (print decimal),
  atou (parse decimal), argv_parse (tokenize getargs() into argc/argv).
- wc: count lines/words/chars of stdin. head [n]: first n lines (drains rest to
  EOF). args: argc/argv demo.
- pid now uses libc putu; build.sh links libc.c; Makefile CBLOBS + libc dep.
- README: document the new tools + argv_parse.
- verified: 'args one two three' -&gt; argc=3/argv[..]; wc '2 3 16'; head 2.
</content>
</entry>
</feed>
