warn = -pedantic -Wall
dbg = -g
-opt = -O2
+opt = -O3
def = -D__NO_CTYPE
inc = -I. -Isrc -Isrc/libc
-TC = m68k-elf-
+ARCH = m68k-elf
+TC = $(ARCH)-
CC = $(TC)gcc
AS = $(TC)as
CFLAGS = -m68000 -ffreestanding -fno-builtin -fcommon $(warn) $(dbg) $(opt) $(def) $(inc) -MMD
CPPFLAGS = $(def)
ASFLAGS = -m68000 $(inc)
-LDFLAGS = -T megadrive.ld -print-gc-sections
+LDFLAGS = -T megadrive.ld -Wl,-print-gc-sections -nostdlib -lgcc
Z80AS = vasmz80_oldstyle
Z80ASFLAGS = -Fvobj
$(OBJCOPY) -O binary $< $@
$(elf): $(obj)
- $(LD) -o $@ $(obj) -Map link.map $(LDFLAGS)
+ $(CC) -o $@ $(obj) -Wl,-Map,link.map $(LDFLAGS)
$(z80bin): $(z80obj)
$(Z80LD) -o $@ $(Z80LDFLAGS) $(z80obj)
.bss ALIGN(4): {
_bss_start = .;
* (.bss);
+ * (COMMON);
. = ALIGN(4);
_bss_end = .;
} >ram
+++ /dev/null
-/* libgcc routines for 68000 w/o floating-point hardware.
- Copyright (C) 1994-2019 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 3, or (at your option) any
-later version.
-
-This file is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-/* Use this one for any 680x0; assumes no floating point hardware.
- The trailing " '" appearing on some lines is for ANSI preprocessors. Yuk.
- Some of this code comes from MINIX, via the folks at ericsson.
- D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
-*/
-
-
- .text
- .globl __mulsi3
-__mulsi3:
- move.w 4(%sp), %d0 /* x0 -> d0 */
- mulu.w 10(%sp), %d0 /* x0*y1 */
- move.w 6(%sp), %d1 /* x1 -> d1 */
- mulu.w 8(%sp), %d1 /* x1*y0 */
- add.w %d1, %d0
- swap %d0
- clr.w %d0
- move.w 6(%sp), %d1 /* x1 -> d1 */
- mulu.w 10(%sp), %d1 /* x1*y1 */
- add.l %d1, %d0
- rts
+++ /dev/null
-/* Copyright (C) 2000-2019 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-unsigned long
-__udivmodsi4(unsigned long num, unsigned long den, int modwanted)
-{
- unsigned long bit = 1;
- unsigned long res = 0;
-
- while (den < num && bit && !(den & (1L<<31)))
- {
- den <<=1;
- bit <<=1;
- }
- while (bit)
- {
- if (num >= den)
- {
- num -= den;
- res |= bit;
- }
- bit >>=1;
- den >>=1;
- }
- if (modwanted) return num;
- return res;
-}
-
-long
-__divsi3 (long a, long b)
-{
- int neg = 0;
- long res;
-
- if (a < 0)
- {
- a = -a;
- neg = !neg;
- }
-
- if (b < 0)
- {
- b = -b;
- neg = !neg;
- }
-
- res = __udivmodsi4 (a, b, 0);
-
- if (neg)
- res = -res;
-
- return res;
-}
-
-long
-__modsi3 (long a, long b)
-{
- int neg = 0;
- long res;
-
- if (a < 0)
- {
- a = -a;
- neg = 1;
- }
-
- if (b < 0)
- b = -b;
-
- res = __udivmodsi4 (a, b, 1);
-
- if (neg)
- res = -res;
-
- return res;
-}
-
-
-long
-__udivsi3 (long a, long b)
-{
- return __udivmodsi4 (a, b, 0);
-}
-
-long
-__umodsi3 (long a, long b)
-{
- return __udivmodsi4 (a, b, 1);
-}
-