Merged branch "master" into make.
This commit is contained in:
commit
42a09f0c23
7 changed files with 210 additions and 61 deletions
35
cfg/creativision.cfg
Normal file
35
cfg/creativision.cfg
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
SYMBOLS {
|
||||||
|
__STACKSIZE__: type = weak, value = $0180;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", define = yes, start = $0020, size = $00E0;
|
||||||
|
RAM: file = "", define = yes, start = $01FA, size = $0206;
|
||||||
|
ROM: file = %O, define = yes, start = $B000, size = $1000;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
ZP: load = ZP, type = zp, optional = yes;
|
||||||
|
VECTORS: load = ROM, run = RAM, type = rw, define = yes;
|
||||||
|
DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
CODE: load = ROM, type = ro;
|
||||||
|
INIT: load = ROM, type = ro;
|
||||||
|
RODATA: load = ROM, type = ro;
|
||||||
|
AUDIO: load = ROM, type = ro, optional = yes, start = $BF00;
|
||||||
|
SETUP: load = ROM, type = ro, start = $BFE8;
|
||||||
|
}
|
||||||
|
FEATURES {
|
||||||
|
CONDES: type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__,
|
||||||
|
segment = INIT;
|
||||||
|
CONDES: type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__,
|
||||||
|
segment = RODATA;
|
||||||
|
CONDES: type = interruptor,
|
||||||
|
label = __INTERRUPTOR_TABLE__,
|
||||||
|
count = __INTERRUPTOR_COUNT__,
|
||||||
|
segment = RODATA,
|
||||||
|
import = __CALLIRQ__;
|
||||||
|
}
|
|
@ -10,17 +10,18 @@ CBMS = c128 \
|
||||||
GEOS = geos-apple \
|
GEOS = geos-apple \
|
||||||
geos-cbm
|
geos-cbm
|
||||||
|
|
||||||
TARGETS = apple2 \
|
TARGETS = apple2 \
|
||||||
apple2enh \
|
apple2enh \
|
||||||
atari \
|
atari \
|
||||||
atarixl \
|
atarixl \
|
||||||
atmos \
|
atmos \
|
||||||
$(CBMS) \
|
creativision \
|
||||||
$(GEOS) \
|
$(CBMS) \
|
||||||
lynx \
|
$(GEOS) \
|
||||||
nes \
|
lynx \
|
||||||
sim6502 \
|
nes \
|
||||||
sim65c02 \
|
sim6502 \
|
||||||
|
sim65c02 \
|
||||||
supervision
|
supervision
|
||||||
|
|
||||||
DRVTYPES = emd \
|
DRVTYPES = emd \
|
||||||
|
|
102
libsrc/creativision/crt0.s
Normal file
102
libsrc/creativision/crt0.s
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
;
|
||||||
|
; Startup code for cc65 (CreatiVision version)
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _exit
|
||||||
|
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
||||||
|
.import zerobss, copydata
|
||||||
|
.import initlib, donelib, callmain
|
||||||
|
.import __VECTORS_LOAD__, __VECTORS_RUN__, __VECTORS_SIZE__
|
||||||
|
.import __ZP_LAST__, __STACKSIZE__, __RAM_START__
|
||||||
|
|
||||||
|
.include "zeropage.inc"
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
entry:
|
||||||
|
; Init the CPU
|
||||||
|
sei
|
||||||
|
cld
|
||||||
|
|
||||||
|
; Copy the IRQ vectors
|
||||||
|
ldx #<__VECTORS_SIZE__ - 1
|
||||||
|
: lda __VECTORS_LOAD__,x
|
||||||
|
sta __VECTORS_RUN__,x
|
||||||
|
dex
|
||||||
|
bpl :-
|
||||||
|
|
||||||
|
; Setup the CPU stack ptr
|
||||||
|
ldx #<__RAM_START__ - 1
|
||||||
|
txs
|
||||||
|
|
||||||
|
; Start interrupts
|
||||||
|
cli
|
||||||
|
|
||||||
|
; Clear the BSS data
|
||||||
|
jsr zerobss
|
||||||
|
|
||||||
|
; Copy data from ROM to RAM
|
||||||
|
jsr copydata
|
||||||
|
|
||||||
|
; Setup the argument stack ptr
|
||||||
|
lda #<(__ZP_LAST__ + __STACKSIZE__)
|
||||||
|
ldx #>(__ZP_LAST__ + __STACKSIZE__)
|
||||||
|
sta sp
|
||||||
|
stx sp+1
|
||||||
|
|
||||||
|
; Call module constructors
|
||||||
|
jsr initlib
|
||||||
|
|
||||||
|
; Call main()
|
||||||
|
jsr callmain
|
||||||
|
|
||||||
|
; Call module destructors. This is also the _exit entry.
|
||||||
|
_exit: jsr donelib
|
||||||
|
|
||||||
|
; TODO: Replace with some sort of reset
|
||||||
|
loop: jmp loop
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Define the IRQ vectors.
|
||||||
|
|
||||||
|
.segment "VECTORS"
|
||||||
|
|
||||||
|
irq1: jmp $FF3F
|
||||||
|
irq2: jmp $FF52
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Define CART setup values for BIOS.
|
||||||
|
|
||||||
|
.segment "SETUP"
|
||||||
|
|
||||||
|
; BIOS Jump Start
|
||||||
|
; This is where the entry point of the program needs to be
|
||||||
|
.addr entry
|
||||||
|
.addr irq2
|
||||||
|
|
||||||
|
.res 4
|
||||||
|
|
||||||
|
; VDP Setup
|
||||||
|
; This sets to Graphics Mode 1
|
||||||
|
.byte $00 ; Register 0
|
||||||
|
.byte $C0 ; Register 1 16K RAM, Active Display, Mode 1
|
||||||
|
.byte $04 ; Register 2 Name Table at $1000 - $12FF
|
||||||
|
.byte $60 ; Register 3 Colour Table at $1800 - $181F
|
||||||
|
.byte $00 ; Register 4 Pattern Table at $0000 - $07FF
|
||||||
|
.byte $10 ; Register 5 Sprite Attribute at $0800 - $087F
|
||||||
|
.byte $01 ; Register 6 Sprite Pattern
|
||||||
|
.byte $F1 ; Register 7 Text colour Foreground / background
|
||||||
|
|
||||||
|
.res 4
|
||||||
|
|
||||||
|
; BIOS Vector after NMI or RESET
|
||||||
|
; Keeping with retail cartridges, we jump back to BIOS ROM and have it
|
||||||
|
; setup zeropage etc, and show the Creativision logo and copyright.
|
||||||
|
.addr $F808
|
||||||
|
|
||||||
|
; BIOS Short Interrupt Handler
|
||||||
|
; Vectored from BIOS ROM:FE2C. This should contain a pointer to the user's
|
||||||
|
; BIOS interrupt handler.
|
||||||
|
.addr irq1
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
|
@ -246,10 +246,6 @@ static void SetSys (const char* Sys)
|
||||||
CBMSystem ("__PET__");
|
CBMSystem ("__PET__");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_BBC:
|
|
||||||
NewSymbol ("__BBC__", 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TGT_APPLE2:
|
case TGT_APPLE2:
|
||||||
NewSymbol ("__APPLE2__", 1);
|
NewSymbol ("__APPLE2__", 1);
|
||||||
break;
|
break;
|
||||||
|
@ -259,10 +255,16 @@ static void SetSys (const char* Sys)
|
||||||
NewSymbol ("__APPLE2ENH__", 1);
|
NewSymbol ("__APPLE2ENH__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_GEOS_CBM:
|
case TGT_ATMOS:
|
||||||
/* Do not handle as a CBM system */
|
NewSymbol ("__ATMOS__", 1);
|
||||||
NewSymbol ("__GEOS__", 1);
|
break;
|
||||||
NewSymbol ("__GEOS_CBM__", 1);
|
|
||||||
|
case TGT_BBC:
|
||||||
|
NewSymbol ("__BBC__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TGT_CREATIVISION:
|
||||||
|
NewSymbol ("__CREATIVISION__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_GEOS_APPLE:
|
case TGT_GEOS_APPLE:
|
||||||
|
@ -270,26 +272,24 @@ static void SetSys (const char* Sys)
|
||||||
NewSymbol ("__GEOS_APPLE__", 1);
|
NewSymbol ("__GEOS_APPLE__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGT_GEOS_CBM:
|
||||||
|
/* Do not handle as a CBM system */
|
||||||
|
NewSymbol ("__GEOS__", 1);
|
||||||
|
NewSymbol ("__GEOS_CBM__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case TGT_LUNIX:
|
case TGT_LUNIX:
|
||||||
NewSymbol ("__LUNIX__", 1);
|
NewSymbol ("__LUNIX__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_ATMOS:
|
case TGT_LYNX:
|
||||||
NewSymbol ("__ATMOS__", 1);
|
NewSymbol ("__LYNX__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_NES:
|
case TGT_NES:
|
||||||
NewSymbol ("__NES__", 1);
|
NewSymbol ("__NES__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_SUPERVISION:
|
|
||||||
NewSymbol ("__SUPERVISION__", 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TGT_LYNX:
|
|
||||||
NewSymbol ("__LYNX__", 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TGT_SIM6502:
|
case TGT_SIM6502:
|
||||||
NewSymbol ("__SIM6502__", 1);
|
NewSymbol ("__SIM6502__", 1);
|
||||||
break;
|
break;
|
||||||
|
@ -298,6 +298,10 @@ static void SetSys (const char* Sys)
|
||||||
NewSymbol ("__SIM65C02__", 1);
|
NewSymbol ("__SIM65C02__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGT_SUPERVISION:
|
||||||
|
NewSymbol ("__SUPERVISION__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
AbEnd ("Invalid target name: `%s'", Sys);
|
AbEnd ("Invalid target name: `%s'", Sys);
|
||||||
|
|
||||||
|
|
|
@ -202,10 +202,6 @@ static void SetSys (const char* Sys)
|
||||||
cbmsys ("__PET__");
|
cbmsys ("__PET__");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_BBC:
|
|
||||||
DefineNumericMacro ("__BBC__", 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TGT_APPLE2:
|
case TGT_APPLE2:
|
||||||
DefineNumericMacro ("__APPLE2__", 1);
|
DefineNumericMacro ("__APPLE2__", 1);
|
||||||
break;
|
break;
|
||||||
|
@ -215,10 +211,16 @@ static void SetSys (const char* Sys)
|
||||||
DefineNumericMacro ("__APPLE2ENH__", 1);
|
DefineNumericMacro ("__APPLE2ENH__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_GEOS_CBM:
|
case TGT_ATMOS:
|
||||||
/* Do not handle as a CBM system */
|
DefineNumericMacro ("__ATMOS__", 1);
|
||||||
DefineNumericMacro ("__GEOS__", 1);
|
break;
|
||||||
DefineNumericMacro ("__GEOS_CBM__", 1);
|
|
||||||
|
case TGT_BBC:
|
||||||
|
DefineNumericMacro ("__BBC__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TGT_CREATIVISION:
|
||||||
|
DefineNumericMacro ("__CREATIVISION__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_GEOS_APPLE:
|
case TGT_GEOS_APPLE:
|
||||||
|
@ -226,26 +228,24 @@ static void SetSys (const char* Sys)
|
||||||
DefineNumericMacro ("__GEOS_APPLE__", 1);
|
DefineNumericMacro ("__GEOS_APPLE__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGT_GEOS_CBM:
|
||||||
|
/* Do not handle as a CBM system */
|
||||||
|
DefineNumericMacro ("__GEOS__", 1);
|
||||||
|
DefineNumericMacro ("__GEOS_CBM__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case TGT_LUNIX:
|
case TGT_LUNIX:
|
||||||
DefineNumericMacro ("__LUNIX__", 1);
|
DefineNumericMacro ("__LUNIX__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_ATMOS:
|
case TGT_LYNX:
|
||||||
DefineNumericMacro ("__ATMOS__", 1);
|
DefineNumericMacro ("__LYNX__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_NES:
|
case TGT_NES:
|
||||||
DefineNumericMacro ("__NES__", 1);
|
DefineNumericMacro ("__NES__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGT_SUPERVISION:
|
|
||||||
DefineNumericMacro ("__SUPERVISION__", 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TGT_LYNX:
|
|
||||||
DefineNumericMacro ("__LYNX__", 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TGT_SIM6502:
|
case TGT_SIM6502:
|
||||||
DefineNumericMacro ("__SIM6502__", 1);
|
DefineNumericMacro ("__SIM6502__", 1);
|
||||||
break;
|
break;
|
||||||
|
@ -254,6 +254,10 @@ static void SetSys (const char* Sys)
|
||||||
DefineNumericMacro ("__SIM65C02__", 1);
|
DefineNumericMacro ("__SIM65C02__", 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGT_SUPERVISION:
|
||||||
|
DefineNumericMacro ("__SUPERVISION__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
AbEnd ("Unknown target system type %d", Target);
|
AbEnd ("Unknown target system type %d", Target);
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,7 @@ static const unsigned char CTPET [256] = {
|
||||||
/* One entry in the target map */
|
/* One entry in the target map */
|
||||||
typedef struct TargetEntry TargetEntry;
|
typedef struct TargetEntry TargetEntry;
|
||||||
struct TargetEntry {
|
struct TargetEntry {
|
||||||
char Name[12]; /* Target name */
|
char Name[13]; /* Target name */
|
||||||
target_t Id; /* Target id */
|
target_t Id; /* Target id */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -133,6 +133,7 @@ static const TargetEntry TargetMap[] = {
|
||||||
{ "c64", TGT_C64 },
|
{ "c64", TGT_C64 },
|
||||||
{ "cbm510", TGT_CBM510 },
|
{ "cbm510", TGT_CBM510 },
|
||||||
{ "cbm610", TGT_CBM610 },
|
{ "cbm610", TGT_CBM610 },
|
||||||
|
{ "creativision", TGT_CREATIVISION},
|
||||||
{ "geos", TGT_GEOS_CBM },
|
{ "geos", TGT_GEOS_CBM },
|
||||||
{ "geos-apple", TGT_GEOS_APPLE },
|
{ "geos-apple", TGT_GEOS_APPLE },
|
||||||
{ "geos-cbm", TGT_GEOS_CBM },
|
{ "geos-cbm", TGT_GEOS_CBM },
|
||||||
|
@ -166,18 +167,19 @@ static const TargetProperties PropertyTable[TGT_COUNT] = {
|
||||||
{ "cbm510", CPU_6502, BINFMT_BINARY, CTPET },
|
{ "cbm510", CPU_6502, BINFMT_BINARY, CTPET },
|
||||||
{ "cbm610", CPU_6502, BINFMT_BINARY, CTPET },
|
{ "cbm610", CPU_6502, BINFMT_BINARY, CTPET },
|
||||||
{ "pet", CPU_6502, BINFMT_BINARY, CTPET },
|
{ "pet", CPU_6502, BINFMT_BINARY, CTPET },
|
||||||
{ "bbc", CPU_6502, BINFMT_BINARY, CTNone },
|
|
||||||
{ "apple2", CPU_6502, BINFMT_BINARY, CTNone },
|
{ "apple2", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "apple2enh", CPU_65C02, BINFMT_BINARY, CTNone },
|
{ "apple2enh", CPU_65C02, BINFMT_BINARY, CTNone },
|
||||||
{ "geos-cbm", CPU_6502, BINFMT_BINARY, CTNone },
|
|
||||||
{ "geos-apple", CPU_65C02, BINFMT_BINARY, CTNone },
|
|
||||||
{ "lunix", CPU_6502, BINFMT_O65, CTNone },
|
|
||||||
{ "atmos", CPU_6502, BINFMT_BINARY, CTNone },
|
{ "atmos", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "nes", CPU_6502, BINFMT_BINARY, CTNone },
|
{ "bbc", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "supervision", CPU_65SC02, BINFMT_BINARY, CTNone },
|
{ "creativision", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
|
{ "geos-apple", CPU_65C02, BINFMT_BINARY, CTNone },
|
||||||
|
{ "geos-cbm", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
|
{ "lunix", CPU_6502, BINFMT_O65, CTNone },
|
||||||
{ "lynx", CPU_65C02, BINFMT_BINARY, CTNone },
|
{ "lynx", CPU_65C02, BINFMT_BINARY, CTNone },
|
||||||
|
{ "nes", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "sim6502", CPU_6502, BINFMT_BINARY, CTNone },
|
{ "sim6502", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "sim65c02", CPU_65C02, BINFMT_BINARY, CTNone },
|
{ "sim65c02", CPU_65C02, BINFMT_BINARY, CTNone },
|
||||||
|
{ "supervision", CPU_65SC02, BINFMT_BINARY, CTNone },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Target system */
|
/* Target system */
|
||||||
|
|
|
@ -64,25 +64,26 @@ typedef enum {
|
||||||
TGT_CBM510,
|
TGT_CBM510,
|
||||||
TGT_CBM610,
|
TGT_CBM610,
|
||||||
TGT_PET,
|
TGT_PET,
|
||||||
TGT_BBC,
|
|
||||||
TGT_APPLE2,
|
TGT_APPLE2,
|
||||||
TGT_APPLE2ENH,
|
TGT_APPLE2ENH,
|
||||||
TGT_GEOS_CBM,
|
|
||||||
TGT_GEOS_APPLE,
|
|
||||||
TGT_LUNIX,
|
|
||||||
TGT_ATMOS,
|
TGT_ATMOS,
|
||||||
TGT_NES,
|
TGT_BBC,
|
||||||
TGT_SUPERVISION,
|
TGT_CREATIVISION,
|
||||||
|
TGT_GEOS_APPLE,
|
||||||
|
TGT_GEOS_CBM,
|
||||||
|
TGT_LUNIX,
|
||||||
TGT_LYNX,
|
TGT_LYNX,
|
||||||
|
TGT_NES,
|
||||||
TGT_SIM6502,
|
TGT_SIM6502,
|
||||||
TGT_SIM65C02,
|
TGT_SIM65C02,
|
||||||
|
TGT_SUPERVISION,
|
||||||
TGT_COUNT /* Number of target systems */
|
TGT_COUNT /* Number of target systems */
|
||||||
} target_t;
|
} target_t;
|
||||||
|
|
||||||
/* Collection of target properties */
|
/* Collection of target properties */
|
||||||
typedef struct TargetProperties TargetProperties;
|
typedef struct TargetProperties TargetProperties;
|
||||||
struct TargetProperties {
|
struct TargetProperties {
|
||||||
const char Name[12]; /* Name of the target */
|
const char Name[13]; /* Name of the target */
|
||||||
cpu_t DefaultCPU; /* Default CPU for this target */
|
cpu_t DefaultCPU; /* Default CPU for this target */
|
||||||
unsigned char BinFmt; /* Default binary format for this target */
|
unsigned char BinFmt; /* Default binary format for this target */
|
||||||
const unsigned char* CharMap; /* Character translation table */
|
const unsigned char* CharMap; /* Character translation table */
|
||||||
|
|
Loading…
Add table
Reference in a new issue