summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flags.asm2
-rw-r--r--loader.c40
2 files changed, 42 insertions, 0 deletions
diff --git a/flags.asm b/flags.asm
index 786148e..343e8a6 100644
--- a/flags.asm
+++ b/flags.asm
@@ -283,6 +283,8 @@ lut_ccr:
;; 256-byte LUT for the Parity bit.
;; Keep this last so all storage references require only one
;; extension word.
+ ;;
+ ;; This table taken from another z80 emulator
lut_parity:
dc.b 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4
dc.b 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0
diff --git a/loader.c b/loader.c
index b445474..0ad58d4 100644
--- a/loader.c
+++ b/loader.c
@@ -78,6 +78,46 @@ void init_load(void)
}
+/* Loads an image file into the emulator, restoring state.
+ */
+void load_descriptor(char *folder, char *descriptor)
+{
+
+}
+
+/* Load a page into the emulator's data structures. Only stores a
+ * pointer to it; does not copy due to space constraints.
+ *
+ * ROM pages can (and should) be archived, but RAM pages must be
+ * unarchived.
+ */
+void load_page(int pageno, WORD *pptr)
+{
+ /* check the version */
+ if (*pptr != IMG_MAGIC)
+ ER_throw(ER_DATATYPE);
+
+ pptr++;
+
+ /* check the size */
+ if (*pptr != 0x4000)
+ ER_throw(ER_INVALID_BLOCK_STRUCTURE);
+
+ pptr++;
+
+ if (*pptr != (WORD)pageno)
+ ER_throw(ER_INVALID_LABEL);
+
+ pptr++;
+
+ if (*pptr != (WORD)c_TI83P)
+ ER_throw(ILLEGAL_TAG_ERROR);
+
+ pptr++;
+
+ pages[pageno] = pptr;
+}
+
void unload(void)
{
return;