From: cuz Date: Mon, 3 Jun 2002 20:23:15 +0000 (+0000) Subject: Added support for the Oric atmos (with some help by Debrune Jérôme X-Git-Tag: V2.12.0~2325 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=eb568293d72628f17ef60076688579bdf0f4058f;p=cc65 Added support for the Oric atmos (with some help by Debrune Jérôme ) git-svn-id: svn://svn.cc65.org/cc65/trunk@1297 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/Makefile b/libsrc/Makefile index b7fb80010..3fb344c8c 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -12,13 +12,14 @@ AR = ../src/ar65/ar65 # List of all targets ALLTARGETS = apple2lib \ - atarilib \ - c64lib \ - c128lib \ + atarilib \ + atmoslib \ + c64lib \ + c128lib \ cbm510lib \ cbm610lib \ - geoslib \ - petlib \ + geoslib \ + petlib \ plus4lib #----------------------------------------------------------------------------- @@ -60,6 +61,22 @@ atarilib: $(AR) a atari.lib $$i/*.o;\ done +#----------------------------------------------------------------------------- +# Oric Atmos + +atmoslib: + for i in atmos common runtime; do \ + CC=$(CC) \ + AS=$(AS) \ + CFLAGS="-Osir -g -T -t atmos -I../../include" \ + AFLAGS="-t atmos -I../../asminc" \ + $(MAKE) -C $$i || exit 1; \ + done + mv atmos/crt0.o atmos.o + for i in atmos common runtime; do \ + $(AR) a atmos.lib $$i/*.o;\ + done + #----------------------------------------------------------------------------- # C64 diff --git a/libsrc/atmos/Makefile b/libsrc/atmos/Makefile new file mode 100644 index 000000000..454edd96a --- /dev/null +++ b/libsrc/atmos/Makefile @@ -0,0 +1,20 @@ +# +# makefile for CC65 runtime library +# + +.SUFFIXES: .o .s .c + +%.o: %.c + @$(CC) $(CFLAGS) $< + @$(AS) -o $@ $(AFLAGS) $(*).s + +%.o: %.s + @$(AS) -g -o $@ $(AFLAGS) $< + +OBJS = crt0.o + +all: $(OBJS) + +clean: + @rm -f $(OBJS) + diff --git a/libsrc/atmos/crt0.s b/libsrc/atmos/crt0.s new file mode 100644 index 000000000..5955fd94b --- /dev/null +++ b/libsrc/atmos/crt0.s @@ -0,0 +1,88 @@ +; +; Startup code for cc65 (Oric version) +; +; By Debrune Jérôme and Ullrich von Bassewitz +; +; This must be the *first* file on the linker command line +; + + .export _exit + .import initlib, donelib + .import push0, _main, zerobss + .import __RAM_START__, __RAM_SIZE__ ; Linker generated + + +; ------------------------------------------------------------------------ +; Define and export the ZP variables for the Oric runtime + + .exportzp sp, sreg, regsave + .exportzp ptr1, ptr2, ptr3, ptr4 + .exportzp tmp1, tmp2, tmp3, tmp4 + .exportzp regbank, zpspace + +.zeropage + +zpstart = * +sp: .res 2 ; Stack pointer +sreg: .res 2 ; Secondary register/high 16 bit for longs +regsave: .res 2 ; slot to save/restore (E)AX into +ptr1: .res 2 +ptr2: .res 2 +ptr3: .res 2 +ptr4: .res 2 +tmp1: .res 1 +tmp2: .res 1 +tmp3: .res 1 +tmp4: .res 1 +regbank: .res 6 ; 6 byte register bank + +zpspace = * - zpstart ; Zero page space allocated + +.code + +; ------------------------------------------------------------------------ +; Actual code + +; Clear the BSS data + + jsr zerobss + +; Save system stuff and setup the stack + + tsx + stx spsave ; save system stk ptr + + lda #<(__RAM_START__ + __RAM_SIZE__) + sta sp + lda #>(__RAM_START__ + __RAM_SIZE__) + sta sp+1 ; Set argument stack ptr + +; Call module constructors + + jsr initlib + +; Pass an empty command line + + jsr push0 ; argc + jsr push0 ; argv + + ldy #4 ; Argument size + jsr _main ; call the users code + +; Call module destructors. This is also the _exit entry. + +_exit: jsr donelib ; Run module destructors + +; Restore system stuff + + ldx spsave + txs + +; Back to BASIC + + rts + +.bss +spsave: .res 1 + +