diff options
| author | user <user@clank> | 2026-07-16 12:20:57 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-07-16 12:20:57 +0200 |
| commit | 4f2d40ca35e0e39886dc881d06256fc25ba27a77 (patch) | |
| tree | 368474d3d24a2480b45c0efd8ffe0b7ee018b879 /c/libc.s | |
| parent | fs rewrite stage 1: persistent block device (bounce buffer, cart SRAM) (diff) | |
| download | gbos-4f2d40ca35e0e39886dc881d06256fc25ba27a77.tar.gz gbos-4f2d40ca35e0e39886dc881d06256fc25ba27a77.tar.xz gbos-4f2d40ca35e0e39886dc881d06256fc25ba27a77.zip | |
fs rewrite stage 2: inodes + root directory (block-based, persistent)
- fs.asm: a real block filesystem on the persistent block device - superblock,
block/inode bitmaps, a 32-entry inode table (type, size, 8 direct block
pointers -> files up to 2 KiB), and a root directory of 16-byte entries.
Metadata cached in WRAMX; one-block data cache streams file/dir blocks.
- same syscall interface (open/getb/putb/list/remove) -> tools unchanged;
ls now enumerates until flist() runs out (16 files, was hardcoded 8).
- old 8-slot WRAM FS removed; cart RAM partitioned: process banks 0-7, disk 8-11.
- two register-clobber bugs fixed: alloc_block/alloc_inode returned the
bitmap-block number (write_bitmap clobbers C); db_use loaded the wrong block
on a transition (db_flush->write_block clobbers C) -> multi-block files broke.
- verified: 10+ files, multi-block (300-byte) files, delete, and persistence
across reboots. Debug 'blk' disk tool retained (fill/peek).
- README: document the block filesystem.
Diffstat (limited to '')
| -rw-r--r-- | c/libc.s | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -200,7 +200,7 @@ _reap: rst #0x30 ret - .globl _bfill, _bpeek + .globl _bfill, _bpeek, _bpeek2 ;; void bfill(unsigned char block /*A*/, unsigned char byte /*E*/) _bfill: ld b, a @@ -210,6 +210,14 @@ _bfill: ;; unsigned char bpeek(unsigned char block /*A*/) -> A _bpeek: ld b, a + ld e, #0 ld c, #24 ; SYS_BPEEK rst #0x30 ret + ;; unsigned char bpeek2(unsigned char block /*A*/, unsigned char off /*E*/) -> A +_bpeek2: + ld b, a + ld c, #24 ; SYS_BPEEK (off already in E) + rst #0x30 + ret + |
