summaryrefslogtreecommitdiff
path: root/apps/plugins/rockboy/emu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/rockboy/emu.c')
-rw-r--r--apps/plugins/rockboy/emu.c117
1 files changed, 117 insertions, 0 deletions
diff --git a/apps/plugins/rockboy/emu.c b/apps/plugins/rockboy/emu.c
new file mode 100644
index 0000000..b6f2de7
--- /dev/null
+++ b/apps/plugins/rockboy/emu.c
@@ -0,0 +1,117 @@
+
+
+
+#include "rockmacros.h"
+#include "defs.h"
+#include "regs.h"
+#include "hw.h"
+#include "cpu.h"
+#include "mem.h"
+#include "lcd.h"
+#include "rc.h"
+#include "sound.h"
+#include "rtc.h"
+
+static int framelen = 16743;
+static int framecount;
+
+rcvar_t emu_exports[] =
+{
+ RCV_INT("framelen", &framelen),
+ RCV_INT("framecount", &framecount),
+ RCV_END
+};
+
+
+
+
+
+
+
+void emu_init(void)
+{
+
+}
+
+
+/*
+ * emu_reset is called to initialize the state of the emulated
+ * system. It should set cpu registers, hardware registers, etc. to
+ * their appropriate values at powerup time.
+ */
+
+void emu_reset(void)
+{
+ hw_reset();
+ lcd_reset();
+ cpu_reset();
+ mbc_reset();
+ sound_reset();
+}
+
+
+
+
+
+void emu_step(void)
+{
+ cpu_emulate(cpu.lcdc);
+}
+
+
+
+/* This mess needs to be moved to another module; it's just here to
+ * make things work in the mean time. */
+
+void emu_run(void)
+{
+ void *timer = sys_timer();
+ char meow[500];
+ int delay;
+ int framecount=0;
+
+ vid_begin();
+ lcd_begin();
+ while(shut==0)
+ {
+ cpu_emulate(2280);
+ while (R_LY > 0 && R_LY < 144)
+ emu_step();
+
+ vid_end();
+ rtc_tick();
+ sound_mix();
+ if (!pcm_submit())
+ {
+ delay = framelen - sys_elapsed(timer);
+ sys_sleep(delay);
+ sys_elapsed(timer);
+ }
+ doevents();
+ vid_begin();
+// if (framecount) { if (!--framecount) die("finished\n"); }
+
+ if (!(R_LCDC & 0x80))
+ cpu_emulate(32832);
+
+ while (R_LY > 0) /* wait for next frame */
+ emu_step();
+ framecount++;
+ snprintf(meow,499,"%d",framecount);
+ rb->lcd_putsxy(0,0,meow);
+ rb->lcd_update_rect(0,0,LCD_WIDTH,8);
+ rb->yield();
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+