aboutsummaryrefslogtreecommitdiff
path: root/src/state.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.h')
-rw-r--r--src/state.h41
1 files changed, 24 insertions, 17 deletions
diff --git a/src/state.h b/src/state.h
index 0ebdce5..e10463c 100644
--- a/src/state.h
+++ b/src/state.h
@@ -19,7 +19,9 @@
-------------------------------------------------------------------------
- Stores assembly state.
+ Stores assembly state (passes, memory, etc).
+
+ Memory is arranged in banks of RAM of 64K each.
*/
@@ -28,23 +30,37 @@
/* ---------------------------------------- TYPES
*/
+#define BANK_SIZE 0x10000u
+
typedef enum
{
MSB_Word,
LSB_Word
} WordMode;
+
+typedef struct mbnk
+{
+ unsigned number; /* The bank number, 0 .. n */
+ Byte memory[BANK_SIZE]; /* The memory in that bank */
+ int min_address_used; /* Will be BANK_SIZE if not used */
+ int max_address_used; /* Will be -1 if not used */
+ struct mbnk *next; /* The next memory bank */
+} MemoryBank;
+
/* ---------------------------------------- INTERFACES
*/
-/* Clear state to default. This creates 64K of RAM to write into.
+/* Clear state to default. This creates 64K of RAM to write into and sets
+ zero as the current bank.
*/
void ClearState(void);
-/* Sets the number of bytes in RAM. Addressing always starts from zero.
+/* Sets the current bank to use. If it's never been used before it will be
+ initialised as an empty 64K of RAM.
*/
-void SetAddressSpace(int size);
+void SetAddressBank(unsigned bank);
/* Move onto the next pass
@@ -103,22 +119,13 @@ void PCWriteWord(int i);
void PCWriteWordMode(int i, WordMode mode);
-/* Get the minimum address written to
-*/
-int GetMinAddressWritten(void);
-
-
-/* Get the maximum address written to
-*/
-int GetMaxAddressWritten(void);
-
-
-/* Access the address space directly
+/* Gets a list of the banks used. A NULL return means no memory was written
+ to at all.
*/
-const Byte *AddressSpace(void);
+const MemoryBank *MemoryBanks(void);
-/* Read a byte from the address space
+/* Read a byte from the current bank.
*/
Byte ReadByte(int addr);