From eb568293d72628f17ef60076688579bdf0f4058f Mon Sep 17 00:00:00 2001 From: cuz Date: Mon, 3 Jun 2002 20:23:15 +0000 Subject: [PATCH] =?utf8?q?Added=20support=20for=20the=20Oric=20atmos=20(wi?= =?utf8?q?th=20some=20help=20by=20Debrune=20J=C3=A9r=C3=B4me=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.cc65.org/cc65/trunk@1297 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/Makefile | 27 ++++++++++--- libsrc/atmos/Makefile | 20 ++++++++++ libsrc/atmos/crt0.s | 88 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 libsrc/atmos/Makefile create mode 100644 libsrc/atmos/crt0.s 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 + + -- 2.39.5