add mapper.h, and move some data out into physical memory
This commit is contained in:
parent
010f91c99e
commit
73e899f9a4
5 changed files with 167 additions and 11 deletions
6
Makefile
6
Makefile
|
@ -29,7 +29,7 @@ F256 = $(HOME)/code/f256
|
||||||
#SYSLIBDIR = $(SYSTEM)/lib
|
#SYSLIBDIR = $(SYSTEM)/lib
|
||||||
#SYSINCDIR = $(SYSTEM)/include
|
#SYSINCDIR = $(SYSTEM)/include
|
||||||
|
|
||||||
TMPFLAGS = -D F256=1 -Wno-unknown-pragmas
|
TMPFLAGS = -D F256=1 -include src/mapper.h -Wno-unknown-pragmas
|
||||||
|
|
||||||
|
|
||||||
INCCMD = -I$(SYSINCDIR)
|
INCCMD = -I$(SYSINCDIR)
|
||||||
|
@ -111,6 +111,7 @@ CFLAGS = -Os -Wall -Werror -Wa,-al -fno-common
|
||||||
CXXFLAGS = -Os -Wall -Werror -Wa,-al -fno-common
|
CXXFLAGS = -Os -Wall -Werror -Wa,-al -fno-common
|
||||||
#ASFLAGS = -c -xassembler-with-cpp -Wa,-al
|
#ASFLAGS = -c -xassembler-with-cpp -Wa,-al
|
||||||
#LDFLAGS = -Wl,-Map,$(TARGET).map $(LIBCMD)
|
#LDFLAGS = -Wl,-Map,$(TARGET).map $(LIBCMD)
|
||||||
|
LDFLAGS = -Trickjr.ld --verbose
|
||||||
|
|
||||||
# Clear Default Suffixes
|
# Clear Default Suffixes
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
|
@ -122,6 +123,7 @@ all: $(TARGET)
|
||||||
$(TARGET): $(DEPS) $(OBJS) $(LIBS)
|
$(TARGET): $(DEPS) $(OBJS) $(LIBS)
|
||||||
${CC} $(CFLAGS) $(TMPFLAGS) $(INCCMD) -c ${F256}/f256lib/f256.c -o $(OBJDIR)/f256.o > $(LSTDIR)/$*.lst
|
${CC} $(CFLAGS) $(TMPFLAGS) $(INCCMD) -c ${F256}/f256lib/f256.c -o $(OBJDIR)/f256.o > $(LSTDIR)/$*.lst
|
||||||
$(LD) -o $@ $(addprefix $(OBJDIR)/,$(OBJS)) $(LIBS) $(LDFLAGS)
|
$(LD) -o $@ $(addprefix $(OBJDIR)/,$(OBJS)) $(LIBS) $(LDFLAGS)
|
||||||
|
llvm-objdump -d --print-imm-hex $(TARGET).elf > $(TARGET).lst
|
||||||
|
|
||||||
# Object Rules
|
# Object Rules
|
||||||
|
|
||||||
|
@ -157,7 +159,7 @@ $(TARGET): $(DEPS) $(OBJS) $(LIBS)
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(OBJDIR) *.o $(DEPDIR) *.map $(LSTDIR) $(TARGET) $(TARGET).elf $(TARGET).pgz
|
$(RM) $(OBJDIR) *.o $(DEPDIR) *.map $(LSTDIR) $(TARGET) $(TARGET).elf $(TARGET).pgz $(TARGET).lst
|
||||||
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
|
|
129
rickjr.ld
Normal file
129
rickjr.ld
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
/* RickJr Linker Script
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* fake C Stack */
|
||||||
|
PROVIDE(__stack = 0xA000);
|
||||||
|
/* entry point to my program */
|
||||||
|
PROVIDE(__f256_start = 0x300);
|
||||||
|
/* page size of a block of memory */
|
||||||
|
PROVIDE(__BLOCK_SIZE = 0x2000);
|
||||||
|
|
||||||
|
/* f256k uses first 16 bytes of ZP for mmu control? */
|
||||||
|
__rc0 = 0x10;
|
||||||
|
INCLUDE imag-regs.ld
|
||||||
|
ASSERT(__rc0 == 0x10, "Inconsistent zero page map.")
|
||||||
|
ASSERT(__rc31 == 0x2f, "Inconsistent zero page map.")
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
/* kernel uses 0xf0-0xff for parameter passing */
|
||||||
|
zp : ORIGIN = __rc31 + 1, LENGTH = 0xF0 - (__rc31 + 1)
|
||||||
|
ram (rw) : ORIGIN = __f256_start, LENGTH = 0xA000-__f256_start
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LMAs */
|
||||||
|
__fixed_lma = 0x0000a000;
|
||||||
|
|
||||||
|
__block8_lma = 0x010000;
|
||||||
|
__block9_lma = 0x012000;
|
||||||
|
__block10_lma = 0x014000;
|
||||||
|
__block11_lma = 0x016000;
|
||||||
|
__block12_lma = 0x018000;
|
||||||
|
__block13_lma = 0x01A000;
|
||||||
|
__block14_lma = 0x01C000;
|
||||||
|
__block15_lma = 0x01E000;
|
||||||
|
__block16_lma = 0x020000;
|
||||||
|
__block17_lma = 0x022000;
|
||||||
|
__block18_lma = 0x024000;
|
||||||
|
__block19_lma = 0x026000;
|
||||||
|
__block20_lma = 0x028000;
|
||||||
|
__block21_lma = 0x02A000;
|
||||||
|
__block22_lma = 0x02C000;
|
||||||
|
__block23_lma = 0x02E000;
|
||||||
|
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
block8 : ORIGIN = __block8_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block9 : ORIGIN = __block9_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block10 : ORIGIN = __block10_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block11 : ORIGIN = __block11_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block12 : ORIGIN = __block12_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block13 : ORIGIN = __block13_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block14 : ORIGIN = __block14_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block15 : ORIGIN = __block15_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
|
||||||
|
block16 : ORIGIN = __block16_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block17 : ORIGIN = __block17_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block18 : ORIGIN = __block18_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block19 : ORIGIN = __block19_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block20 : ORIGIN = __block20_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block21 : ORIGIN = __block21_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block22 : ORIGIN = __block22_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
block23 : ORIGIN = __block23_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
|
||||||
|
fixed : ORIGIN = __fixed_lma, LENGTH = __BLOCK_SIZE
|
||||||
|
}
|
||||||
|
|
||||||
|
REGION_ALIAS("c_writeable", ram)
|
||||||
|
/* REGION_ALIAS("c_readonly", fixed) */
|
||||||
|
/* I want to use the lower 40k */
|
||||||
|
REGION_ALIAS("c_readonly", ram)
|
||||||
|
|
||||||
|
SECTIONS {
|
||||||
|
|
||||||
|
INCLUDE c.ld
|
||||||
|
|
||||||
|
.fixed : { *(.fixed .fixed.*) } >fixed
|
||||||
|
|
||||||
|
.block8 : { *(.block8 .block8.*) } >block8
|
||||||
|
.block9 : { *(.block9 .block9.*) } >block9
|
||||||
|
.block10 : { *(.block10 .block10.*) } >block10
|
||||||
|
.block11 : { *(.block11 .block11.*) } >block11
|
||||||
|
.block12 : { *(.block12 .block12.*) } >block12
|
||||||
|
.block13 : { *(.block13 .block13.*) } >block13
|
||||||
|
.block14 : { *(.block14 .block14.*) } >block14
|
||||||
|
.block15 : { *(.block15 .block15.*) } >block15
|
||||||
|
.block16 : { *(.block16 .block16.*) } >block16
|
||||||
|
.block17 : { *(.block17 .block17.*) } >block17
|
||||||
|
.block18 : { *(.block18 .block18.*) } >block18
|
||||||
|
.block19 : { *(.block19 .block19.*) } >block19
|
||||||
|
.block20 : { *(.block20 .block20.*) } >block20
|
||||||
|
.block21 : { *(.block21 .block21.*) } >block21
|
||||||
|
.block22 : { *(.block22 .block22.*) } >block22
|
||||||
|
.block23 : { *(.block23 .block23.*) } >block23
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OUTPUT_FORMAT { FULL(cart_rom) } */
|
||||||
|
OUTPUT_FORMAT {
|
||||||
|
FULL(block8)
|
||||||
|
FULL(block9)
|
||||||
|
FULL(block10)
|
||||||
|
FULL(block11)
|
||||||
|
FULL(block12)
|
||||||
|
FULL(block13)
|
||||||
|
FULL(block14)
|
||||||
|
FULL(block15)
|
||||||
|
FULL(block16)
|
||||||
|
FULL(block17)
|
||||||
|
FULL(block18)
|
||||||
|
FULL(block19)
|
||||||
|
FULL(block20)
|
||||||
|
FULL(block21)
|
||||||
|
FULL(block22)
|
||||||
|
FULL(block23)
|
||||||
|
FULL(fixed)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
__attribute__((section(".bank30.rodata"))) const char bank30_s[] = "bank thirty";
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
__attribute__((noinline, section(".bank2.text"))) signed char bank2_fn(void) {
|
||||||
|
asm volatile("nop");
|
||||||
|
puts(bank2_s);
|
||||||
|
asm volatile("nop");
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
*/
|
|
@ -19,7 +19,7 @@
|
||||||
segment "dat";
|
segment "dat";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
entdata_t ent_entdata[ENT_NBR_ENTDATA] = {
|
RO_BLOCK(10) entdata_t ent_entdata[ENT_NBR_ENTDATA] = {
|
||||||
{0000, 0000, 000000, 000000, 0000, 0000, 0x00},
|
{0000, 0000, 000000, 000000, 0000, 0000, 0x00},
|
||||||
{0x18, 0x15, 000000, 000000, 0000, 0000, 0x00},
|
{0x18, 0x15, 000000, 000000, 0000, 0000, 0x00},
|
||||||
{0000, 0000, 000000, 000000, 0000, 0000, 0x00},
|
{0000, 0000, 000000, 000000, 0000, 0000, 0x00},
|
||||||
|
@ -101,7 +101,7 @@ entdata_t ent_entdata[ENT_NBR_ENTDATA] = {
|
||||||
{0x18, 0x10, 0x000c, 0x0005, 0x04, 0x04, 0x14},
|
{0x18, 0x10, 0x000c, 0x0005, 0x04, 0x04, 0x14},
|
||||||
};
|
};
|
||||||
|
|
||||||
U8 ent_sprseq[ENT_NBR_SPRSEQ] = {
|
RO_BLOCK(10) U8 ent_sprseq[ENT_NBR_SPRSEQ] = {
|
||||||
0000, 0x01, 0000, 0x02, 0x05, 0x03, 0x04, 0x03,
|
0000, 0x01, 0000, 0x02, 0x05, 0x03, 0x04, 0x03,
|
||||||
0x65, 0xff, 0x66, 0xff, 0x55, 0xff, 0000, 0x56,
|
0x65, 0xff, 0x66, 0xff, 0x55, 0xff, 0000, 0x56,
|
||||||
0xff, 0000, 0x57, 0xff, 0000, 0x58, 0x59, 0xff,
|
0xff, 0000, 0x57, 0xff, 0000, 0x58, 0x59, 0xff,
|
||||||
|
@ -122,7 +122,7 @@ U8 ent_sprseq[ENT_NBR_SPRSEQ] = {
|
||||||
0xff, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xff, 0x00,
|
0xff, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xff, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
mvstep_t ent_mvstep[ENT_NBR_MVSTEP] = {
|
RO_BLOCK(10) mvstep_t ent_mvstep[ENT_NBR_MVSTEP] = {
|
||||||
{ 0x10, 0, 0 } ,
|
{ 0x10, 0, 0 } ,
|
||||||
{ 0x0c, 0, 4 } ,
|
{ 0x0c, 0, 4 } ,
|
||||||
{ 0xfa, 0, 0 } ,
|
{ 0xfa, 0, 0 } ,
|
||||||
|
|
|
@ -19,7 +19,7 @@ segment "dat";
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "maps.h"
|
#include "maps.h"
|
||||||
|
|
||||||
map_t map_maps[MAP_NBR_MAPS] = {
|
RO_BLOCK(11) map_t map_maps[MAP_NBR_MAPS] = {
|
||||||
#ifdef IIGS
|
#ifdef IIGS
|
||||||
{0x0008, 0x008b, 0x0008, 000000, &samerica_lz4},
|
{0x0008, 0x008b, 0x0008, 000000, &samerica_lz4},
|
||||||
{0x0008, 0x008b, 0x0068, 0x0009, &egypt_lz4},
|
{0x0008, 0x008b, 0x0068, 0x0009, &egypt_lz4},
|
||||||
|
@ -35,7 +35,7 @@ map_t map_maps[MAP_NBR_MAPS] = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
submap_t map_submaps[MAP_NBR_SUBMAPS] = {
|
RO_BLOCK(11) submap_t map_submaps[MAP_NBR_SUBMAPS] = {
|
||||||
{000000, 000000, 000000, 000000},
|
{000000, 000000, 000000, 000000},
|
||||||
{000000, 0x0078, 0x0003, 0x0005},
|
{000000, 0x0078, 0x0003, 0x0005},
|
||||||
{000000, 0x0150, 0x0006, 0x0011},
|
{000000, 0x0150, 0x0006, 0x0011},
|
||||||
|
@ -85,7 +85,7 @@ submap_t map_submaps[MAP_NBR_SUBMAPS] = {
|
||||||
{0x0001, 0x1f5a, 0x0096, 0x0202},
|
{0x0001, 0x1f5a, 0x0096, 0x0202},
|
||||||
};
|
};
|
||||||
|
|
||||||
connect_t map_connect[MAP_NBR_CONNECT] = {
|
RO_BLOCK(11) connect_t map_connect[MAP_NBR_CONNECT] = {
|
||||||
|
|
||||||
/* map 0 */
|
/* map 0 */
|
||||||
|
|
||||||
|
@ -1322,7 +1322,7 @@ U8 map_bnums[MAP_NBR_BNUMS] = {
|
||||||
0xc0, 0xc0, 0000, 0000, 0000, 0000, 0000, 0000,
|
0xc0, 0xc0, 0000, 0000, 0000, 0000, 0000, 0000,
|
||||||
};
|
};
|
||||||
|
|
||||||
block_t map_blocks[MAP_NBR_BLOCKS] = {
|
RO_BLOCK(11) block_t map_blocks[MAP_NBR_BLOCKS] = {
|
||||||
{0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,
|
{0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,
|
||||||
0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
|
0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
|
||||||
{0x29, 0x2a, 0x2d, 0x2e, 0x2b, 0x2c, 0x2f, 0x30,
|
{0x29, 0x2a, 0x2d, 0x2e, 0x2b, 0x2c, 0x2f, 0x30,
|
||||||
|
@ -1837,7 +1837,7 @@ block_t map_blocks[MAP_NBR_BLOCKS] = {
|
||||||
0x22, 0x2d, 0x2e, 0xe7, 0x28, 0x2b, 0x2c, 0xea},
|
0x22, 0x2d, 0x2e, 0xe7, 0x28, 0x2b, 0x2c, 0xea},
|
||||||
};
|
};
|
||||||
|
|
||||||
mark_t map_marks[MAP_NBR_MARKS] = {
|
RO_BLOCK(11) mark_t map_marks[MAP_NBR_MARKS] = {
|
||||||
{0x18, 0x16, 0000, 0x08, 0x08}, /* 0 */
|
{0x18, 0x16, 0000, 0x08, 0x08}, /* 0 */
|
||||||
{0x18, 0x2a, 0x88, 0x01, 0x28},
|
{0x18, 0x2a, 0x88, 0x01, 0x28},
|
||||||
{0x38, 0x04, 0xf0, 0x15, 0x29},
|
{0x38, 0x04, 0xf0, 0x15, 0x29},
|
||||||
|
@ -2363,7 +2363,7 @@ mark_t map_marks[MAP_NBR_MARKS] = {
|
||||||
{0xff, 0000, 0000, 0000, 0000},
|
{0xff, 0000, 0000, 0000, 0000},
|
||||||
};
|
};
|
||||||
|
|
||||||
U8 map_eflg_c[MAP_NBR_EFLGC] = {
|
RO_BLOCK(11) U8 map_eflg_c[MAP_NBR_EFLGC] = {
|
||||||
0x4d, 0000, 0x0e, 0x02, 0x04, 0x04, 0x57, 0x08,
|
0x4d, 0000, 0x0e, 0x02, 0x04, 0x04, 0x57, 0x08,
|
||||||
0x08, 0x18, 0x03, 0x68, 0x3b, 0x48, 0x04, 0x80,
|
0x08, 0x18, 0x03, 0x68, 0x3b, 0x48, 0x04, 0x80,
|
||||||
0x37, 0000, 0x04, 0x02, 0x04, 0x04, 0x90, 0x08,
|
0x37, 0000, 0x04, 0x02, 0x04, 0x04, 0x90, 0x08,
|
||||||
|
|
25
src/mapper.h
Normal file
25
src/mapper.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
Special mapper macros for the F256 + mos-llvm, so we can put code
|
||||||
|
anywhere in physical ram
|
||||||
|
|
||||||
|
Currently only blocks 8-23 are defined in the linker file
|
||||||
|
|
||||||
|
If you need to go beyond the 128k of extra code, just add more definitions
|
||||||
|
into rickjr.ld
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(F256) && F256
|
||||||
|
|
||||||
|
/*
|
||||||
|
$$JGA TODO, sort out how to mark an entire file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define RAM_BLOCK(index) __attribute__((noinline, section(".block"#index)))
|
||||||
|
#define RO_BLOCK(index) __attribute__((section(".block"#index)))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define RAM_BLOCK(index)
|
||||||
|
#define RO_BLOCK(index)
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Reference in a new issue