From 9fd1320c6f4b16d7aba4476f7d6caaf7e8f6bc2c Mon Sep 17 00:00:00 2001 From: Duncan Smith Date: Sat, 3 Jul 2010 21:30:14 -0700 Subject: Now it compiles properly. Still doesn't seem to run without address error, though. --- asm_vars.h | 2 +- bankswap.c | 2 -- loader.c | 8 +++++--- main.asm | 15 +++++++++++++++ ports.asm | 4 ++-- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/asm_vars.h b/asm_vars.h index 1901bb0..2dc35e9 100644 --- a/asm_vars.h +++ b/asm_vars.h @@ -12,6 +12,6 @@ extern void* mem_page_loc_3; extern void** pages; - +#define PAGE_SIZE 0x4000 #endif diff --git a/bankswap.c b/bankswap.c index 12dafc7..a8bb85b 100644 --- a/bankswap.c +++ b/bankswap.c @@ -6,8 +6,6 @@ #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). */ diff --git a/loader.c b/loader.c index 64910ee..932bc3f 100644 --- a/loader.c +++ b/loader.c @@ -5,17 +5,19 @@ * Copyright 2010, Duncan Smith * GPL */ -#include +#include #include "asm_vars.h" void init_load(void) { + int i; + pages = malloc(256 * sizeof(void*)); /* Page layout: * 0x40 RAM * 0x41 RAM - + * * 0x00 ROM * ... all the way to ... * 0x1f ROM @@ -26,7 +28,7 @@ void init_load(void) pages[0x41] = malloc(PAGE_SIZE * sizeof(char)); // ROM pages - for (int i = 0; i++; i <= 0x1f) { + for (i = 0; i++; i <= 0x1f) { pages[i] = pages[0x40]; } diff --git a/main.asm b/main.asm index 552d2e0..423eb01 100644 --- a/main.asm +++ b/main.asm @@ -67,6 +67,7 @@ __main: emu_setup: movea emu_plain_op,a5 lea emu_run,a2 + lea flag_storage,a3 rts @@ -97,11 +98,25 @@ mem_page_1: dc.l 0 ; bank 1 mem_page_2: dc.l 0 ; bank 2 mem_page_3: dc.l 0 ; bank 3 + xdef mem_page_0 + xdef mem_page_1 + xdef mem_page_2 + xdef mem_page_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 + xdef mem_page_loc_0 + xdef mem_page_loc_1 + xdef mem_page_loc_2 + xdef mem_page_loc_3 + +pages: dc.l 0 + + xdef pages + ;; Take a physical address in a0 and turn it into a virtual ;; address in d0 ;; Destroys d0 diff --git a/ports.asm b/ports.asm index ddc0bef..5834ae5 100644 --- a/ports.asm +++ b/ports.asm @@ -543,7 +543,7 @@ port_out_04: SAVEREG move.b d1,-(a7) jsr bankswap_b_write - addq 2,a7 + addq #2,a7 RESTREG rts @@ -555,7 +555,7 @@ port_out_06: SAVEREG move.b d1,-(a7) jsr bankswap_a_write - addq 2,a7 + addq #2,a7 RESTREG rts -- cgit v1.2.3