From c2b16e5e27c250b7eab9de0a65ec4da585bff06a Mon Sep 17 00:00:00 2001 From: Astrid Smith Date: Thu, 20 Oct 2011 22:30:28 -0700 Subject: Loader --- flags.asm | 2 ++ loader.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) 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; -- cgit v1.2.3