aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-05-21 18:17:45 +0200
committerBad Diode <bd@badd10de.dev>2021-05-21 18:17:45 +0200
commit0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9 (patch)
tree301ef7d1f928e399a6951850a0c39299316fe303 /src
parent872faecf9660cc2469aa5586f81639f7986b6b8f (diff)
downloaduxngba-0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9.tar.gz
uxngba-0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9.zip
Add file_talk function
Diffstat (limited to 'src')
-rw-r--r--src/main.c53
1 files changed, 27 insertions, 26 deletions
diff --git a/src/main.c b/src/main.c
index 79bf788..a65b1fe 100644
--- a/src/main.c
+++ b/src/main.c
@@ -102,6 +102,29 @@ datetime_talk(Device *d, Uint8 b0, Uint8 w) {
102} 102}
103 103
104void 104void
105file_talk(Device *d, Uint8 b0, Uint8 w) {
106 Uint8 read = b0 == 0xd;
107 txt_printf("FILE TALK\n"); // DEBUG: Remove when done
108 if(w && (read || b0 == 0xf)) {
109 char *name = (char *)&d->mem[mempeek16(d->dat, 0x8)];
110 Uint16 result = 0, length = mempeek16(d->dat, 0xa);
111 Uint16 offset = mempeek16(d->dat, 0x4);
112 Uint16 addr = mempeek16(d->dat, b0 - 1);
113 int file_idx = fs_open_file(name);
114 if (file_idx >= 0) {
115 if (read) {
116 txt_printf("READING\n"); // DEBUG: Remove when done
117 result = fs_read(&d->mem[addr], length, file_idx, offset);
118 } else {
119 txt_printf("WRITING\n"); // DEBUG: Remove when done
120 result = fs_write(&d->mem[addr], length, file_idx, offset, offset > 0);
121 }
122 }
123 mempoke16(d->dat, 0x2, result);
124 }
125}
126
127void
105init_uxn(Uxn *u) { 128init_uxn(Uxn *u) {
106 // Initialize PPU. 129 // Initialize PPU.
107 initppu(&ppu, 30, 20, 0); 130 initppu(&ppu, 30, 20, 0);
@@ -120,7 +143,7 @@ init_uxn(Uxn *u) {
120 portuxn(u, 0x7, "---", nil_talk); 143 portuxn(u, 0x7, "---", nil_talk);
121 devctrl = portuxn(u, 0x8, "controller", nil_talk); 144 devctrl = portuxn(u, 0x8, "controller", nil_talk);
122 devmouse = portuxn(u, 0x9, "mouse", nil_talk); 145 devmouse = portuxn(u, 0x9, "mouse", nil_talk);
123 portuxn(u, 0xa, "---", nil_talk); 146 portuxn(u, 0xa, "file", file_talk);
124 portuxn(u, 0xb, "datetime", datetime_talk); 147 portuxn(u, 0xb, "datetime", datetime_talk);
125 portuxn(u, 0xc, "---", nil_talk); 148 portuxn(u, 0xc, "---", nil_talk);
126 portuxn(u, 0xd, "---", nil_talk); 149 portuxn(u, 0xd, "---", nil_talk);
@@ -248,6 +271,9 @@ EWRAM_BSS
248static Uint8 umem[65536]; 271static Uint8 umem[65536];
249 272
250int main(void) { 273int main(void) {
274 // Initialize filesystem.
275 fs_init();
276
251 // Register interrupts. 277 // Register interrupts.
252 irq_init(); 278 irq_init();
253 irs_set(IRQ_VBLANK, irs_stub); 279 irs_set(IRQ_VBLANK, irs_stub);
@@ -267,31 +293,6 @@ int main(void) {
267 }, &ppu.fg); 293 }, &ppu.fg);
268 txt_position(0,0); 294 txt_position(0,0);
269 295
270 fs_init();
271
272 // DEBUG:...
273 int file_idx;
274 char tmp_buffer[KB(1)] = {0};
275 if ((file_idx = fs_open_file("HELLO_FILE")) >= 0) {
276 fs_write("HEY", 3, file_idx, 0, false);
277 fs_write("THERE", 3, file_idx, 1, true);
278 txt_printf("file name: %s\n", filesystem.files[file_idx].name);
279 txt_printf("file size: %d\n", filesystem.files[file_idx].size);
280 if (fs_read(&tmp_buffer, filesystem.files[file_idx].size, file_idx, 0) > 0) {
281 txt_printf("READ: %s\n", tmp_buffer);
282 }
283 }
284 if ((file_idx = fs_open_file("HELLO_FOLKS")) >= 0) {
285 fs_write("AAAAAA", 6, file_idx, 0, false);
286 fs_write("XXX", 3, file_idx, 1, true);
287 txt_printf("file name: %s\n", filesystem.files[file_idx].name);
288 txt_printf("file size: %d\n", filesystem.files[file_idx].size);
289 if (fs_read(&tmp_buffer, filesystem.files[file_idx].size - 1, file_idx, 1) > 0) {
290 txt_printf("READ: %s\n", tmp_buffer);
291 }
292 }
293 txt_printf("num files: %d\n", filesystem.num_files);
294
295 // Main loop. 296 // Main loop.
296 int frame_counter = 0; 297 int frame_counter = 0;
297 evaluxn(&u, 0x0100); 298 evaluxn(&u, 0x0100);