diff options
| author | Duncan Smith | 2010-06-26 21:28:22 -0700 |
|---|---|---|
| committer | Duncan Smith | 2010-06-26 21:28:22 -0700 |
| commit | 0248da5e2c262d6934fd48c23212d866e250b9ed (patch) | |
| tree | 2d97fb322ecc063e2804ed8d7914083ec3ee60ab | |
| parent | e9b9990833bfd1de7e8ed726a686076b2fb0e512 (diff) | |
Rewrote loader routine in C
| -rw-r--r-- | asm_vars.h | 17 | ||||
| -rw-r--r-- | loader.c | 42 | ||||
| -rw-r--r-- | main.asm | 35 |
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..9808b34 --- /dev/null +++ b/loader.c @@ -0,0 +1,42 @@ +/* Loading routines for 680 project. + * + * Includes splash screen, choose-an-image, etc. + * + * Copyright 2010, Duncan 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; + +} @@ -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 |
