<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gbos.git/c/save.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/save.c?h=master</id>
<link rel='self' href='https://git.sl0p.foo/gbos.git/atom/c/save.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>fs: reject open()/read() on a directory (EISDIR)</title>
<updated>2026-07-16T11:07:28Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-16T11:07:28Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=fc6f690727aac2b5c9bd368f9b13188fb0ba36a7'/>
<id>urn:sha1:fc6f690727aac2b5c9bd368f9b13188fb0ba36a7</id>
<content type='text'>
open() now checks the target's inode type: opening a directory as a file
returns $FE (EISDIR) instead of a valid fd, so 'cat docs' no longer streams the
raw directory block as bytes. cat reports 'is a directory'; wc/head/save treat
any invalid fd (&gt;3) as an open failure. (ls is unaffected - it uses the
structural opendir/list path, not open/getb.)
</content>
</entry>
<entry>
<title>filesystem: a RAM FS (WRAMX) + ls/cat/save/rm; wc/head read files</title>
<updated>2026-07-16T05:53:19Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-16T05:53:19Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=7b5c532625a864a3fbaf76f44df6aa99b0d6861e'/>
<id>urn:sha1:7b5c532625a864a3fbaf76f44df6aa99b0d6861e</id>
<content type='text'>
- fs.asm: 8-slot RAM filesystem in WRAMX ($D000-$DFFF), name[8]+len[2]+data[502];
  syscalls open/close/getb/putb/list/remove, seeded with a 'readme' at boot.
- libc: open/close/fgetc/fputc/flist/fremove wrappers + O_READ/O_WRITE/NOFD.
- tools: ls, save (stdin-&gt;file, one line), rm; cat/wc/head now take a file arg.
- fix: syscall dispatch clobbers A, so putb takes its byte in E (was reading the
  handler's low address byte, 0xDC); ls NUL-terminates 8-char names.
- verified: save/cat/ls/rm cycle; wc readme -&gt; '2 7 38'; head -n 1 readme.
- README: document the filesystem + the A-clobber ABI note.
</content>
</entry>
</feed>
