mirror of
https://github.com/cc65/cc65.git
synced 2025-02-03 22:32:24 +00:00
Merge pull request #71 from groessler/something_to_pull2
Support to create cartridges for the Atari.
This commit is contained in:
commit
8304852521
44
cfg/atari-cart.cfg
Normal file
44
cfg/atari-cart.cfg
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $2000;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__CARTSIZE__: type = weak, value = $2000; # possible values: $2000 and $4000
|
||||||
|
__CART_HEADER__: type = import;
|
||||||
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
|
__RESERVED_MEMORY__: type = export, value = $0000;
|
||||||
|
__CARTFLAGS__: type = weak, value = $01; # see documentation for other possible values
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||||
|
RAM: file = "", define = yes, start = %S, size = __CARTSIZE__;
|
||||||
|
ROM: file = %O, define = yes, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - 6, fill = yes, fillval = $FF;
|
||||||
|
CARTID: file = %O, start = $BFFA, size = $0006;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
STARTUP: load = ROM, type = ro, define = yes, optional = yes;
|
||||||
|
LOWCODE: load = ROM, type = ro, define = yes, optional = yes;
|
||||||
|
INIT: load = ROM, type = ro, optional = yes;
|
||||||
|
CODE: load = ROM, type = ro, define = yes;
|
||||||
|
RODATA: load = ROM, type = ro, optional = yes;
|
||||||
|
DATA: load = ROM, run = RAM, type = rw, define = yes, optional = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes, optional = yes;
|
||||||
|
CARTHDR: load = CARTID, type = ro;
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
EXTZP: load = ZP, type = zp, optional = yes;
|
||||||
|
}
|
||||||
|
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__;
|
||||||
|
}
|
22
libsrc/atari/carthdr.s
Normal file
22
libsrc/atari/carthdr.s
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
; Cartridge "header"
|
||||||
|
; (In fact, it's at the end of the cartridge, so more a "trailer".)
|
||||||
|
;
|
||||||
|
; Christian Groessler, 06-Jan-2014
|
||||||
|
|
||||||
|
.ifndef __ATARIXL__
|
||||||
|
|
||||||
|
.import __CARTSIZE__, __CARTFLAGS__, cartinit, cartstart
|
||||||
|
.export __CART_HEADER__: absolute = 1
|
||||||
|
|
||||||
|
.include "atari.inc"
|
||||||
|
|
||||||
|
.segment "CARTHDR"
|
||||||
|
|
||||||
|
.word cartstart ; start routine
|
||||||
|
.byte 0 ; must be zero
|
||||||
|
.byte <__CARTFLAGS__
|
||||||
|
.word cartinit ; init routine
|
||||||
|
|
||||||
|
.assert (__CARTSIZE__ = $2000 || __CARTSIZE__ = $4000), error, "Cartridge size must either be $2000 or $4000"
|
||||||
|
|
||||||
|
.endif ; .ifndef __ATARIXL__
|
11
libsrc/atari/cartinit.s
Normal file
11
libsrc/atari/cartinit.s
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
; Cartridge init routine
|
||||||
|
;
|
||||||
|
; Christian Groessler, 06-Jan-2014
|
||||||
|
|
||||||
|
.ifndef __ATARIXL__
|
||||||
|
|
||||||
|
.export cartinit
|
||||||
|
|
||||||
|
cartinit: rts
|
||||||
|
|
||||||
|
.endif ; .ifndef __ATARIXL__
|
21
libsrc/atari/cartstart.s
Normal file
21
libsrc/atari/cartstart.s
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
; Cartridge start routine
|
||||||
|
;
|
||||||
|
; Christian Groessler, 06-Jan-2014
|
||||||
|
|
||||||
|
.ifndef __ATARIXL__
|
||||||
|
|
||||||
|
.export cartstart
|
||||||
|
|
||||||
|
.import start, copydata
|
||||||
|
.importzp ptr1, ptr2, tmp1, tmp2
|
||||||
|
|
||||||
|
.include "atari.inc"
|
||||||
|
|
||||||
|
; start routine of cartridge
|
||||||
|
; copy data segment to RAM and chain to entry point of crt0.s
|
||||||
|
|
||||||
|
cartstart: jsr copydata
|
||||||
|
jsr start ; run program
|
||||||
|
jmp (DOSVEC) ; return to DOS
|
||||||
|
|
||||||
|
.endif ; .ifndef __ATARIXL__
|
Loading…
x
Reference in New Issue
Block a user