diff options
| author | Astrid Smith | 2010-06-26 21:33:19 -0700 |
|---|---|---|
| committer | Astrid Smith | 2010-06-26 21:33:19 -0700 |
| commit | 69e9fcc59363e3be82d4783bf5fc46daf40bfa15 (patch) | |
| tree | 40b337db39d33b274d15e7ebe69c0be63d5769dd | |
| parent | 4255008dbb6c950ea73280eaef84bc814323ca0e (diff) | |
Added bank-swapping routines (incomplete: doesn't implement memory map mode 1)
| -rw-r--r-- | bankswap.c | 27 | ||||
| -rw-r--r-- | ports.asm | 19 |
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; +} @@ -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: |
