diff options
author | Ben Bridle <ben@derelict.engineering> | 2024-11-22 16:04:20 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2024-11-22 16:15:11 +1300 |
commit | 4f8805869c469cb1b3685e03c3ea34d7654b5cb7 (patch) | |
tree | efe555c1064b7a69738e3cf7fd107af7bdc0155f /arm9/source/core.c | |
parent | fcbc3968bd95e4d19b37d9fa4bca51b1db8596ff (diff) | |
download | bedrock-nds-4f8805869c469cb1b3685e03c3ea34d7654b5cb7.zip |
Implement file device
There is still a small amount of work to be done on the file device:
- Read file size only when requested
- Hide '.' and '..' directories
- Resize files
Diffstat (limited to 'arm9/source/core.c')
-rw-r--r-- | arm9/source/core.c | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/arm9/source/core.c b/arm9/source/core.c index 7136777..d792360 100644 --- a/arm9/source/core.c +++ b/arm9/source/core.c @@ -62,12 +62,9 @@ u8 dev_read(Bedrock *br, u8 port) { case 0x03: return 0x00; // program memory size case 0x04: return 0x00; // working stack size case 0x05: return 0x00; // return stack size - case 0x06: return 0xbc; - case 0x07: return 0x00; - - // TODO: available devices + case 0x06: return devices_high(); + case 0x07: return devices_low(); case 0x0A: return br->sys.wake; - // MEMORY DEVICE case 0x10: return mem_read1(&br->mem); case 0x11: return mem_read1(&br->mem); @@ -137,6 +134,23 @@ u8 dev_read(Bedrock *br, u8 port) { case 0x55: return LOW(br->scr.x); case 0x56: return HIGH(br->scr.y); case 0x57: return LOW(br->scr.y); +// FILE DEVICE + case 0xA0: return BOOL(br->fs.open); + case 0xA1: return BOOL(br->fs.success); + case 0xA2: return pb_read(&br->fs.path); + case 0xA3: return BOOL(br->fs.is_dir); + case 0xA4: return fs_read_byte(&br->fs); + case 0xA5: return fs_read_byte(&br->fs); + case 0xA6: return pb_read(&br->fs.child_path); + case 0xA7: return BOOL(br->fs.child_is_dir); + case 0xA8: return H_HIGH(br->fs.pointer); + case 0xA9: return H_LOW(br->fs.pointer); + case 0xAA: return L_HIGH(br->fs.pointer); + case 0xAB: return L_LOW(br->fs.pointer); + case 0xAC: return H_HIGH(br->fs.length); + case 0xAD: return H_LOW(br->fs.length); + case 0xAE: return L_HIGH(br->fs.length); + case 0xAF: return L_LOW(br->fs.length); default: return 0; } @@ -197,6 +211,23 @@ Signal dev_write(Bedrock *br, u8 port, u8 v) { // LOCAL DEVICE case 0x86: printf("%c", v); return 0; case 0x87: printf("%c", v); return 0; +// FILE DEVICE + case 0xA0: fs_push_entry(&br->fs,v); return 0; + case 0xA1: fs_push_action(&br->fs,v); return 0; + case 0xA2: pb_reset(&br->fs.path,v); return 0; + case 0xA3: fs_ascend(&br->fs); return 0; + case 0xA4: fs_write_byte(&br->fs,v); return 0; + case 0xA5: fs_write_byte(&br->fs,v); return 0; + case 0xA6: pb_reset(&br->fs.child_path,v); return 0; + case 0xA7: fs_descend(&br->fs); return 0; + case 0xA8: SET_H_HIGH(br->fs.pointer_write,v); return 0; + case 0xA9: SET_H_LOW(br->fs.pointer_write,v); return 0; + case 0xAA: SET_L_HIGH(br->fs.pointer_write,v); return 0; + case 0xAB: SET_L_LOW(br->fs.pointer_write,v); fs_seek(&br->fs); return 0; + case 0xAC: SET_H_HIGH(br->fs.length_write,v); return 0; + case 0xAD: SET_H_LOW(br->fs.length_write,v); return 0; + case 0xAE: SET_L_HIGH(br->fs.length_write,v); return 0; + case 0xAF: SET_L_LOW(br->fs.length_write,v); fs_resize(&br->fs); return 0; default: return SIG_NONE; } |