From 4f5319db1129c1f9e3a9c00531ab52cefe6009c8 Mon Sep 17 00:00:00 2001 From: Nihilazo Date: Sun, 7 Nov 2021 19:54:35 +0000 Subject: [PATCH] use as a viewer --- apps/plugins/CATEGORIES | 2 +- apps/plugins/varvara/varvara.c | 38 ++++++++++++++++++++++------------ apps/plugins/viewers.config | 1 + 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES index bfb79dd6aa..fcd5b55f85 100644 --- a/apps/plugins/CATEGORIES +++ b/apps/plugins/CATEGORIES @@ -189,4 +189,4 @@ wormlet,games xobox,games xworld,games zxbox,viewers -varvara,apps +varvara,viewers diff --git a/apps/plugins/varvara/varvara.c b/apps/plugins/varvara/varvara.c index 251cbc6ab9..136de3ad7a 100644 --- a/apps/plugins/varvara/varvara.c +++ b/apps/plugins/varvara/varvara.c @@ -10,7 +10,7 @@ copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. -TODO proper support for greyscale displays +TODO optimise support for greyscale/1-bit displays TODO rom loading TODO other varvara devices TODO clean up @@ -544,18 +544,31 @@ static void run() { enum plugin_status plugin_start(const void* parameter) { - - (void)parameter; - - DEBUGF("Setting PPU size\n"); - ppu_init(&ppu, LCD_WIDTH, LCD_HEIGHT, framebuffer); - DEBUGF("UXN init\n"); - // Clear RAM and copy rom to VM. - DEBUGF("zeroing\n"); + if(!parameter) { + rb->splash(HZ, "Please open a .rom file using this plugin!"); + return PLUGIN_ERROR; + } + + DEBUGF("zeroing\n"); memzero8(&u, sizeof(Uxn)); - DEBUGF("copying ROM\n"); - memcpy(u.ram.dat + PAGE_PROGRAM, uxn_rom, sizeof(uxn_rom)); - DEBUGF("registering ports\n"); + + DEBUGF("loading ROM\n"); + char* filename = (char*) parameter; + + int fd = rb->open(filename, O_RDONLY); + if (fd < 0) { + rb->splash(HZ, "File Error"); + return PLUGIN_ERROR; + } + int numread = rb->read(fd, u.ram.dat + PAGE_PROGRAM, 65536-PAGE_PROGRAM); + if (numread==-1) { + rb->splash(HZ, "I/O Error"); + return PLUGIN_ERROR; + } + rb->close(fd); + + ppu_init(&ppu, LCD_WIDTH, LCD_HEIGHT, framebuffer); + // Register ports /* system */ devsystem = uxn_port(&u, 0x0, system_talk); /* console */ devconsole = uxn_port(&u, 0x1, console_talk); @@ -573,7 +586,6 @@ enum plugin_status plugin_start(const void* parameter) /* empty */ uxn_port(&u, 0xd, nil_talk); /* empty */ uxn_port(&u, 0xe, nil_talk); /* empty */ uxn_port(&u, 0xf, nil_talk); - DEBUGF("eval\n"); uxn_eval(&u, 0x0100); run(); return PLUGIN_OK; diff --git a/apps/plugins/viewers.config b/apps/plugins/viewers.config index 2bf052bb20..7be4673aa8 100644 --- a/apps/plugins/viewers.config +++ b/apps/plugins/viewers.config @@ -103,3 +103,4 @@ z7,viewers/frotz,- z8,viewers/frotz,- shopper,viewers/shopper,1 lnk,viewers/windows_lnk,- +rom,viewers/varvara,-