src/state.h

Fri, 03 Dec 2010 01:43:57 +0000

author
Philip Pemberton <philpem@philpem.me.uk>
date
Fri, 03 Dec 2010 01:43:57 +0000
changeset 46
7d14fab5e4aa
parent 44
f928be115194
child 52
a350dfa92895
permissions
-rw-r--r--

add comments for some write-only regs, fix LOG_NOT_HANDLED_R(32) in read16, basic LED reg decoding

philpem@18 1 #ifndef _STATE_H
philpem@18 2 #define _STATE_H
philpem@18 3
philpem@18 4 #include <stddef.h>
philpem@18 5 #include <stdint.h>
philpem@18 6 #include <stdbool.h>
philpem@18 7
philpem@18 8 // Maximum size of the Boot PROMs. Must be a binary power of two.
philpem@18 9 #define ROM_SIZE 32768
philpem@18 10
philpem@18 11 /**
philpem@18 12 * @brief Emulator state storage
philpem@18 13 *
philpem@18 14 * This structure stores the internal state of the emulator.
philpem@18 15 */
philpem@18 16 typedef struct {
philpem@18 17 // Boot PROM can be up to 32Kbytes total size
philpem@18 18 uint8_t rom[ROM_SIZE]; ///< Boot PROM data buffer
philpem@18 19
philpem@18 20 // Main system RAM
philpem@18 21 uint8_t *ram; ///< RAM data buffer
philpem@18 22 size_t ram_size; ///< Size of RAM buffer in bytes
philpem@18 23
philpem@24 24 // Video RAM
philpem@24 25 uint8_t vram[0x8000]; ///< Video RAM
philpem@24 26
philpem@26 27 // Map RAM
philpem@26 28 uint8_t map[0x800]; ///< Map RAM
philpem@26 29
philpem@37 30 // Registers
philpem@37 31 uint16_t genstat; ///< General Status Register
philpem@37 32 uint16_t bsr0; ///< Bus Status Register 0
philpem@37 33 uint16_t bsr1; ///< Bus Status Register 1
philpem@32 34
philpem@46 35 // MISCELLANEOUS CONTROL REGISTER
philpem@46 36 uint8_t leds; ///< LED status, 1=on, in order red3/green2/yellow1/red0 from bit3 to bit0
philpem@46 37
philpem@18 38 // GENERAL CONTROL REGISTER
philpem@18 39 /// GENCON.ROMLMAP -- false ORs the address with 0x800000, forcing the
philpem@18 40 /// 68010 to access ROM instead of RAM when booting. TRM page 2-36.
philpem@24 41 bool romlmap;
philpem@44 42 /// GENCON.PIE -- Parity Error Check Enable
philpem@44 43 bool pie;
philpem@18 44 } S_state;
philpem@18 45
philpem@18 46 // Global emulator state. Yes, I know global variables are evil, please don't
philpem@18 47 // email me and lecture me about it. -philpem
philpem@18 48 #ifndef _STATE_C
philpem@18 49 extern S_state state;
philpem@18 50 #else
philpem@18 51 S_state state;
philpem@18 52 #endif
philpem@18 53
philpem@18 54 /**
philpem@18 55 * @brief Initialise system state
philpem@18 56 *
philpem@18 57 * @param ramsize RAM size in bytes -- must be a multiple of 512KiB, min 512KiB, max 4MiB.
philpem@18 58 *
philpem@18 59 * Initialises the emulator's internal state.
philpem@18 60 */
philpem@18 61 int state_init(size_t ramsize);
philpem@18 62
philpem@18 63 /**
philpem@18 64 * @brief Deinitialise system state
philpem@18 65 *
philpem@18 66 * Deinitialises the saved state, and frees all memory. Call this function
philpem@18 67 * before exiting your program to avoid memory leaks.
philpem@18 68 */
philpem@18 69 void state_done();
philpem@18 70
philpem@18 71 #endif