From 0cfa96f83d6c44b318cc0da0ec98e8e3bc97f7f9 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 21 May 2021 18:17:45 +0200 Subject: Add file_talk function --- src/main.c | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 79bf788..a65b1fe 100644 --- a/src/main.c +++ b/src/main.c @@ -101,6 +101,29 @@ datetime_talk(Device *d, Uint8 b0, Uint8 w) { (void)w; } +void +file_talk(Device *d, Uint8 b0, Uint8 w) { + Uint8 read = b0 == 0xd; + txt_printf("FILE TALK\n"); // DEBUG: Remove when done + if(w && (read || b0 == 0xf)) { + char *name = (char *)&d->mem[mempeek16(d->dat, 0x8)]; + Uint16 result = 0, length = mempeek16(d->dat, 0xa); + Uint16 offset = mempeek16(d->dat, 0x4); + Uint16 addr = mempeek16(d->dat, b0 - 1); + int file_idx = fs_open_file(name); + if (file_idx >= 0) { + if (read) { + txt_printf("READING\n"); // DEBUG: Remove when done + result = fs_read(&d->mem[addr], length, file_idx, offset); + } else { + txt_printf("WRITING\n"); // DEBUG: Remove when done + result = fs_write(&d->mem[addr], length, file_idx, offset, offset > 0); + } + } + mempoke16(d->dat, 0x2, result); + } +} + void init_uxn(Uxn *u) { // Initialize PPU. @@ -120,7 +143,7 @@ init_uxn(Uxn *u) { portuxn(u, 0x7, "---", nil_talk); devctrl = portuxn(u, 0x8, "controller", nil_talk); devmouse = portuxn(u, 0x9, "mouse", nil_talk); - portuxn(u, 0xa, "---", nil_talk); + portuxn(u, 0xa, "file", file_talk); portuxn(u, 0xb, "datetime", datetime_talk); portuxn(u, 0xc, "---", nil_talk); portuxn(u, 0xd, "---", nil_talk); @@ -248,6 +271,9 @@ EWRAM_BSS static Uint8 umem[65536]; int main(void) { + // Initialize filesystem. + fs_init(); + // Register interrupts. irq_init(); irs_set(IRQ_VBLANK, irs_stub); @@ -267,31 +293,6 @@ int main(void) { }, &ppu.fg); txt_position(0,0); - fs_init(); - - // DEBUG:... - int file_idx; - char tmp_buffer[KB(1)] = {0}; - if ((file_idx = fs_open_file("HELLO_FILE")) >= 0) { - fs_write("HEY", 3, file_idx, 0, false); - fs_write("THERE", 3, file_idx, 1, true); - txt_printf("file name: %s\n", filesystem.files[file_idx].name); - txt_printf("file size: %d\n", filesystem.files[file_idx].size); - if (fs_read(&tmp_buffer, filesystem.files[file_idx].size, file_idx, 0) > 0) { - txt_printf("READ: %s\n", tmp_buffer); - } - } - if ((file_idx = fs_open_file("HELLO_FOLKS")) >= 0) { - fs_write("AAAAAA", 6, file_idx, 0, false); - fs_write("XXX", 3, file_idx, 1, true); - txt_printf("file name: %s\n", filesystem.files[file_idx].name); - txt_printf("file size: %d\n", filesystem.files[file_idx].size); - if (fs_read(&tmp_buffer, filesystem.files[file_idx].size - 1, file_idx, 1) > 0) { - txt_printf("READ: %s\n", tmp_buffer); - } - } - txt_printf("num files: %d\n", filesystem.num_files); - // Main loop. int frame_counter = 0; evaluxn(&u, 0x0100); -- cgit v1.2.1