summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bankswap.c27
-rw-r--r--ports.asm19
2 files changed, 45 insertions, 1 deletions
diff --git a/bankswap.c b/bankswap.c
new file mode 100644
index 0000000..db4931c
--- /dev/null
+++ b/bankswap.c
@@ -0,0 +1,27 @@
+/* Memory bank swapping driver for 680 project.
+ *
+ * Copyright 2010, Astrid Smith
+ * GPL
+ */
+
+#include "asm_vars.h"
+
+void* pages[256];
+
+/* Address 0000 is always bound to ROM page 0. */
+
+/* Process orders to swap bank A (port 06, 0x4000). */
+void bankswap_4000_write(char data)
+{
+ mem_page_1 = pages[data];
+ mem_page_loc_1 = data;
+ return;
+}
+
+/* Process orders to swap bank B (port 07, 0x8000). */
+void bankswap_b_write(char data)
+{
+ mem_page_2 = pages[data];
+ mem_page_loc_2 = data;
+ return;
+}
diff --git a/ports.asm b/ports.asm
index b2587aa..815a69c 100644
--- a/ports.asm
+++ b/ports.asm
@@ -539,10 +539,24 @@ port_in_03:
port_out_03:
port_in_04:
port_out_04:
+ ;; Bank B paging
+ ;; XXX save registers
+ move.b d1,-(a7)
+ jsr bankswap_b_write
+ addq 2,a7
+ rts
+
port_in_05:
port_out_05:
port_in_06:
port_out_06:
+ ;; Bank A paging
+ ;; XXX save registers
+ move.b d1,-(a7)
+ jsr bankswap_a_write
+ addq 2,a7
+ rts
+
port_in_07:
port_out_07:
port_in_08:
@@ -663,6 +677,7 @@ port_out_10_set_row:
port_in_11:
;; LCD data
+ ;; XXX save registers
jsr video_read
move.b d0,d1 ; return value
rts
@@ -670,7 +685,9 @@ port_in_11:
port_out_11:
;; LCD data
move.b d1,-(a7)
- bra video_write
+ ;; XXX save registers
+ jsr video_write
+ rts
port_in_12:
port_out_12: