summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm_vars.h17
-rw-r--r--loader.c42
-rw-r--r--main.asm35
3 files changed, 69 insertions, 25 deletions
diff --git a/asm_vars.h b/asm_vars.h
new file mode 100644
index 0000000..1783bfa
--- /dev/null
+++ b/asm_vars.h
@@ -0,0 +1,17 @@
+#ifndef ASM_VARS_H
+#define ASM_VARS_H
+
+extern void* mem_page_0;
+extern void* mem_page_1;
+extern void* mem_page_2;
+extern void* mem_page_3;
+extern void* mem_page_loc_0;
+extern void* mem_page_loc_1;
+extern void* mem_page_loc_2;
+extern void* mem_page_loc_3;
+
+extern void* pages[];
+
+
+
+#endif
diff --git a/loader.c b/loader.c
new file mode 100644
index 0000000..49fba5e
--- /dev/null
+++ b/loader.c
@@ -0,0 +1,42 @@
+/* Loading routines for 680 project.
+ *
+ * Includes splash screen, choose-an-image, etc.
+ *
+ * Copyright 2010, Astrid Smith
+ * GPL
+ */
+#include <tigcc.h>
+#include "asm_vars.h"
+
+void init_load(void)
+{
+ pages = malloc(256 * sizeof(void*));
+
+ /* Page layout:
+ * 0x40 RAM
+ * 0x41 RAM
+
+ * 0x00 ROM
+ * ... all the way to ...
+ * 0x1f ROM
+ */
+
+ pages[0x40] = malloc(PAGE_SIZE * sizeof(char));
+ pages[0x41] = malloc(PAGE_SIZE * sizeof(char));
+
+ for (int i = 0; i++; i <= 0x1f) {
+ pages[i] = pages[0x40];
+ }
+
+ mem_page_0 = pages[0];
+ mem_page_loc_0 = 0;
+ mem_page_1 = pages[0x40];
+ mem_page_loc_1 = 0x40;
+ mem_page_2 = pages[0];
+ mem_page_loc_2 = 0;
+ mem_page_3 = pages[0x40];
+ mem_page_loc_3 = 0x40;
+
+ return;
+
+}
diff --git a/main.asm b/main.asm
index 4a82d33..6f0a8d9 100644
--- a/main.asm
+++ b/main.asm
@@ -51,6 +51,7 @@
__main:
movem.l d0-d7/a0-a6,-(sp)
+ bsr init_load
bsr emu_setup
lea emu_plain_op,a5
bsr emu_run
@@ -63,27 +64,6 @@ __main:
include "alu.asm"
emu_setup:
- ;; Allocate memory pages; for now I assume this succeeds
- move.l #$4000,-(a7)
- ROM_CALL malloc
- addq #4,a7
- move.l a0,ref_0
-
- move.l #$4000,-(a7)
- ROM_CALL malloc
- addq #4,a7
- move.l a0,ref_1
-
- move.l #$4000,-(a7)
- ROM_CALL malloc
- addq #4,a7
- move.l a0,ref_2
-
- move.l #$4000,-(a7)
- ROM_CALL malloc
- addq #4,a7
- move.l a0,ref_3
-
movea emu_plain_op,a5
lea emu_run,a2
@@ -111,10 +91,15 @@ deref:
rts
deref_table:
-ref_0: dc.l 0 ; bank 0
-ref_1: dc.l 0 ; bank 1
-ref_2: dc.l 0 ; bank 2
-ref_3: dc.l 0 ; bank 3
+mem_page_0: dc.l 0 ; bank 0
+mem_page_1: dc.l 0 ; bank 1
+mem_page_2: dc.l 0 ; bank 2
+mem_page_3: dc.l 0 ; bank 3
+
+mem_page_loc_0: dc.b 0
+mem_page_loc_1: dc.b 0
+mem_page_loc_2: dc.b 0
+mem_page_loc_3: dc.b 0
;; Take a physical address in a0 and turn it into a virtual
;; address in d0