From 96d59333e330fc6604bc6baeeb9e872f8e0a3f1a Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Sat, 9 Feb 2019 03:45:23 +0100 Subject: [PATCH] 3rdparty: build with ATARICROSS=1 --- 3rdparty/Makefile | 37 +- 3rdparty/SDL-1.2.15-atari-timer.patch | 562 ++++++++++++++++++++++++++ 3rdparty/lua-atari-log2.patch | 11 + 3 files changed, 607 insertions(+), 3 deletions(-) create mode 100644 3rdparty/SDL-1.2.15-atari-timer.patch create mode 100644 3rdparty/lua-atari-log2.patch diff --git a/3rdparty/Makefile b/3rdparty/Makefile index b36fe31f..714601cc 100644 --- a/3rdparty/Makefile +++ b/3rdparty/Makefile @@ -26,7 +26,8 @@ SDLARCH = $(SDL).tar.gz SDLURL = https://www.libsdl.org/release/$(SDLARCH) SDLSHA256 = d6d316a793e5e348155f0dd93b979798933fb98aa1edebcc108829d6474aad00 SDLPATCHES = SDL-1.2.15-patch-src_video_x11_SDL_x11sym.h \ - SDL-1.2.15-quartzvideo.patch + SDL-1.2.15-quartzvideo.patch \ + SDL-1.2.15-atari-timer.patch SDLDEVEL = SDL-devel-1.2.15-mingw32.tar.gz SDLDEVELURL = https://www.libsdl.org/release/$(SDLDEVEL) SDLDEVELPATCH = SDL-1.2.15.patch @@ -101,6 +102,7 @@ LUAARCH=$(LUA).tar.gz LUAURL=https://www.lua.org/ftp/$(LUAARCH) LUAURLALT=https://www.tecgraf.puc-rio.br/lua/mirror/ftp/$(LUAARCH) LUASHA256=0c2eed3f960446e1a3e4b9a1ca2f3ff893b6ce41942cf54d5dd59ab4b3b058ac +LUAPATCHES = lua-atari-log2.patch # https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.6.1.tar.gz RECOILVER=4.3.1 RECOIL=recoil-$(RECOILVER) @@ -156,6 +158,20 @@ CFLAGS = $(CROSS_CFLAGS) LDFLAGS = $(CROSS_LDFLAGS) endif +ifdef ATARICROSS +ATARI = 1 +ARCH ?= m68k +MCPU ?= -m68020-60 +CROSS_CC ?= $(ARCH)-atari-mint-gcc +CROSS_AR ?= $(ARCH)-atari-mint-ar +CROSS_RANLIB ?= $(ARCH)-atari-mint-ranlib +CROSS_STRIP ?= $(ARCH)-atari-mint-strip +CC = $(CROSS_CC) +AR = $(CROSS_AR) +RANLIB = $(CROSS_RANLIB) +STRIP = $(CROSS_STRIP) +endif + HOST = $(shell $(CC) -dumpmachine) #HOST = i686-pc-mingw32 DATE = $(shell date -R) @@ -211,6 +227,10 @@ ifdef WIN32 done echo "The Windows distribution of Grafx2 is linked with Lua v$(LUAVER)" > ../doc/README-lua.txt else +ifdef ATARI + cd $(LUA) && $(MAKE) PLAT=generic CC=$(CC) RANLIB=$(RANLIB) AR="$(AR) rcs" + cd $(LUA) && $(MAKE) install PLAT=generic INSTALL_TOP=$(PREFIX) +else ifeq ($(PLATFORM), FreeBSD) cd $(LUA) && $(MAKE) freebsd install INSTALL_TOP=$(PREFIX) else @@ -223,6 +243,7 @@ else cd $(LUA) && $(MAKE) posix install INSTALL_TOP=$(PREFIX) endif endif +endif endif echo "Lua v$(LUAVER)" > ../doc/README-lua.txt endif @@ -320,6 +341,9 @@ $(PREFIX)/lib/libSDLmain.a: archives/$(SDLDEVEL) tail --lines +3 $(SDL)/README-SDL.txt >> ../doc/README-SDL.txt else SDLDISABLE = --disable-joystick --disable-audio +ifdef ATARI +SDLDISABLE += --disable-video-opengl --disable-threads +endif ifeq ($(PLATFORM), Darwin) SDLDISABLE += --without-x # the following trick was stolen from macports @@ -333,6 +357,9 @@ $(PREFIX)/lib/libSDLmain.a: $(SDL)/.ok $(SDLDISABLE) cd $(SDL) && $(MAKE) cd $(SDL) && $(MAKE) install +ifdef ATARI + $(RM) $(PREFIX)/include/SDL/SDL_opengl.h +endif $(CP) $(SDL)/README-SDL.txt ../doc/README-SDL.txt endif @@ -374,7 +401,11 @@ $(PREFIX)/lib/libSDL_ttf.a: $(PREFIX)/lib/libSDLmain.a $(PREFIX)/lib/libSDL_ttf.a: $(SDLTTF)/.ok cd $(SDLTTF) && PKG_CONFIG_PATH=$(PREFIX)/lib/pkgconfig \ CC=$(CC) CPPFLAGS=-I$(PREFIX)/include LDFLAGS="-L$(PREFIX)/lib $(LDFLAGS) $(ADDLDFLAGS)" \ - ./configure --prefix=$(PREFIX) --with-sdl-prefix=$(PREFIX) --with-freetype-prefix=$(PREFIX) --host=$(HOST) + ./configure --prefix=$(PREFIX) --with-sdl-prefix=$(PREFIX) --with-freetype-prefix=$(PREFIX) \ + --host=$(HOST) +ifdef ATARI + sed -i.bak 's/-O2/-O0/' $(SDLTTF)/Makefile +endif cd $(SDLTTF) && $(MAKE) cd $(SDLTTF) && $(MAKE) install ifdef WIN32 @@ -479,7 +510,7 @@ else # configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX] # [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR] # [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"] - cd $(ZLIB) && ./configure --prefix=$(PREFIX) && $(MAKE) test + cd $(ZLIB) && CC=$(CC) AR=$(AR) RANLIB=$(RANLIB) ./configure --prefix=$(PREFIX) && $(MAKE) test cd $(ZLIB) && $(MAKE) install endif $(CP) $(ZLIB)/README ../doc/README-zlib1.txt diff --git a/3rdparty/SDL-1.2.15-atari-timer.patch b/3rdparty/SDL-1.2.15-atari-timer.patch new file mode 100644 index 00000000..4f54c0cc --- /dev/null +++ b/3rdparty/SDL-1.2.15-atari-timer.patch @@ -0,0 +1,562 @@ +# HG changeset patch +# User Patrice Mandin +# Date 1406540679 -7200 +# Node ID 4a9c67d11c9f688b9c47fb6ee46d3c903ec35f22 +# Parent 7f4407040fbd31079fbab9264076450bdd20b1ec +atari: Do not use system interrupt for handling timer. Do it from userspace, like RISCOS backend. + +diff -r 7f4407040fbd -r 4a9c67d11c9f configure.in +--- a/configure.in Sun Jul 27 19:19:47 2014 +0200 ++++ b/configure.in Mon Jul 28 11:44:39 2014 +0200 +@@ -2865,7 +2865,6 @@ + else + AC_DEFINE(SDL_TIMER_MINT) + SOURCES="$SOURCES $srcdir/src/timer/mint/*.c" +- SOURCES="$SOURCES $srcdir/src/timer/mint/*.S" + fi + have_timers=yes + fi +diff -r 7f4407040fbd -r 4a9c67d11c9f src/timer/mint/SDL_systimer.c +--- a/src/timer/mint/SDL_systimer.c Sun Jul 27 19:19:47 2014 +0200 ++++ b/src/timer/mint/SDL_systimer.c Mon Jul 28 11:44:39 2014 +0200 +@@ -25,7 +25,7 @@ + + /* + * TOS/MiNT timer driver +- * based on vbl vector ++ * based on RISCOS backend + * + * Patrice Mandin + */ +@@ -44,106 +44,119 @@ + + #include "SDL_timer.h" + #include "../SDL_timer_c.h" +-#include "SDL_thread.h" + + #include "../../video/ataricommon/SDL_atarisuper.h" + +-#include "SDL_vbltimer_s.h" ++/* from src/video/ataricommon/SDL_atarievents.c */ ++void SDL_AtariMint_BackgroundTasks(void); + +-/* from audio/mint */ +-void SDL_MintAudio_CheckFpu(void); ++static Uint32 readHz200Timer(void); + + /* The first ticks value of the application */ + static Uint32 start; +-static SDL_bool read_hz200_from_vbl = SDL_FALSE; ++ + static int mint_present; /* can we use Syield() ? */ + ++/* Timer SDL_arraysize(Timer ),start/reset time */ ++static Uint32 timerStart; ++ + void SDL_StartTicks(void) + { +- void *old_stack; + long dummy; + +- /* Set first ticks value */ +- old_stack = (void *)Super(0); +- start = *((volatile long *)_hz_200); +- SuperToUser(old_stack); +- +- start *= 5; /* One _hz_200 tic is 5ms */ ++ /* Set first ticks value, one _hz_200 tic is 5ms */ ++ start = readHz200Timer() * 5; + + mint_present = (Getcookie(C_MiNT, &dummy) == C_FOUND); + } + + Uint32 SDL_GetTicks (void) + { +- Uint32 now = start; ++ Uint32 now = readHz200Timer() * 5; + +- if (read_hz200_from_vbl) { +- now = SDL_Atari_hz200; +- } else { +- void *old_stack = (void *)Super(0); +- now = *((volatile long *)_hz_200); +- SuperToUser(old_stack); +- } +- +- return((now*5)-start); ++ return(now-start); + } + + void SDL_Delay (Uint32 ms) + { + Uint32 now; + ++ /* No need to loop for delay below resolution */ ++ if (ms<5) { ++ SDL_AtariMint_BackgroundTasks(); ++ if (mint_present) { ++ Syield(); ++ } ++ return; ++ } ++ + now = SDL_GetTicks(); + while ((SDL_GetTicks()-now)= SDL_alarm_interval) ++ { ++ Uint32 ms; ++ ++ ms = SDL_alarm_callback(SDL_alarm_interval); ++ if ( ms != SDL_alarm_interval ) ++ { ++ if ( ms ) ++ { ++ SDL_alarm_interval = ROUND_RESOLUTION(ms); ++ } else ++ { ++ SDL_alarm_interval = 0; ++ SDL_timer_running = 0; ++ } ++ } ++ if (SDL_alarm_interval) timerStart = SDL_GetTicks(); ++ } + } + + #endif /* SDL_TIMER_MINT */ +diff -r 7f4407040fbd -r 4a9c67d11c9f src/timer/mint/SDL_vbltimer.S +--- a/src/timer/mint/SDL_vbltimer.S Sun Jul 27 19:19:47 2014 +0200 ++++ /dev/null Thu Jan 01 00:00:00 1970 +0000 +@@ -1,228 +0,0 @@ +-/* +- SDL - Simple DirectMedia Layer +- Copyright (C) 1997-2012 Sam Lantinga +- +- This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- This library 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 +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with this library; if not, write to the Free Software +- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +- +- Sam Lantinga +- slouken@libsdl.org +-*/ +- +-/* +- * VBL queue routine +- * +- * Patrice Mandin +- */ +- +-#define _vbl_queue 0x456 +-#define _hz_200 0x4ba +- +- .text +- +- .globl _SDL_AtariVblInstall +- .globl _SDL_AtariVblUninstall +- +- .globl _SDL_MintAudio_hasfpu +- +-/*--- Save/restore FPU context ---*/ +- +-#if defined(__mcoldfire__) +- +-#define SAVE_FPU_CONTEXT \ +- lea sp@(-216),sp; \ +- fsave sp@; \ +- fmovel fpiar,sp@-; \ +- lea sp@(-64),sp; \ +- fmovemd fp0-fp7,sp@ +- +-#define RESTORE_FPU_CONTEXT \ +- fmovemd sp@,fp0-fp7; \ +- lea sp@(64),sp; \ +- fmovel sp@+,fpiar; \ +- frestore sp@; \ +- lea sp@(216),sp +- +-#else +- +-#define SAVE_FPU_CONTEXT \ +- .chip 68k/68881; \ +- fsave sp@-; \ +- fmoveml fpcr/fpsr/fpiar,sp@-; \ +- fmovemx fp0-fp7,sp@-; \ +- .chip 68k +- +-#define RESTORE_FPU_CONTEXT \ +- .chip 68k/68881; \ +- fmovemx sp@+,fp0-fp7; \ +- fmoveml sp@+,fpcr/fpsr/fpiar; \ +- frestore sp@+; \ +- .chip 68k +- +-#endif +- +-/*--- Vector installer ---*/ +- +-_SDL_AtariVblInstall: +-#if defined(__mcoldfire__) +- movel sp@(4),d0 +- movel d0,my_vector +-#else +- movel sp@(4),my_vector +-#endif +- +- lea _my_vbl,a0 +- +- clrw vbl_mutex +-#if defined(__mcoldfire__) +- movel _hz_200.w,d0 +- movel d0, _SDL_Atari_hz200 +-#else +- movel _hz_200.w, _SDL_Atari_hz200 +-#endif +- +- /* Stop interrupts */ +- +- movew #0x2700,sr +- +- /* Read vbl_queue pointer */ +- movel _vbl_queue.w,a1 +- +- /* Search a free place */ +- moveq #7,d0 +-bcl_search_place: +- movel (a1),d1 +- beqs place_found +- addql #4,a1 +-#if defined(__mcoldfire__) +- subql #1,d0 +- bpls bcl_search_place +-#else +- dbra d0,bcl_search_place +-#endif +- +- /* Not found */ +- moveq #1,d0 +- bras exit_vbl_queue +- +- /* Then install ourselves */ +-place_found: +- movel a0,(a1) +- moveq #0,d0 +- +-exit_vbl_queue: +- /* Restart interrupts */ +- movew #0x2300,sr +- +- rts +- +-/*--- Vector uninstaller ---*/ +- +-_SDL_AtariVblUninstall: +- movel sp@(4),d0 +- cmpl my_vector,d0 +- bnes badvector +- +- movel #_my_vbl,d0 +- +- /* Stop interrupts */ +- +- movew #0x2700,sr +- +- /* Read vbl_queue pointer */ +- movel _vbl_queue.w,a1 +- +- /* Search where we are */ +- moveq #7,d1 +-bcl2_search_place: +- cmpl (a1),d0 +- bnes next_place +- clrl (a1) +- moveq #0,d1 +-next_place: +- addql #4,a1 +-#if defined(__mcoldfire__) +- subql #1,d1 +- bpls bcl_search_place +-#else +- dbra d1,bcl2_search_place +-#endif +- +- /* Restart interrupts */ +- movew #0x2300,sr +-badvector: +- rts +- +-/*--- Our vbl ---*/ +- +-_my_vbl: +-#if defined(__mcoldfire__) +- lea sp@(-60),sp +- moveml d0-d7/a0-a6,sp@ +-#else +- moveml d0-d7/a0-a6,sp@- +-#endif +- +- /* Update _hz_200 */ +-#if defined(__mcoldfire__) +- movel _hz_200.w,d0 +- movel d0, _SDL_Atari_hz200 +-#else +- movel _hz_200.w, _SDL_Atari_hz200 +-#endif +- +- /* Verify if this is not already running */ +- +- tstw vbl_mutex +- bnes vbl_end +-#if defined(__mcoldfire__) +- movew vbl_mutex,d0 +- notl d0 +- movew d0,vbl_mutex +-#else +- notw vbl_mutex +-#endif +- +- /* Save FPU if needed */ +- tstw _SDL_MintAudio_hasfpu +- beqs SDL_AtariVbl_nofpu1 +- SAVE_FPU_CONTEXT +-SDL_AtariVbl_nofpu1: +- +- movel my_vector,a0 +- jsr a0@ +- +- /* Restore FPU if needed */ +- tstw _SDL_MintAudio_hasfpu +- beqs SDL_AtariVbl_Xbios_nofpu2 +- RESTORE_FPU_CONTEXT +-SDL_AtariVbl_Xbios_nofpu2: +- +- clrw vbl_mutex +-vbl_end: +-#if defined(__mcoldfire__) +- moveml sp@,d0-d7/a0-a6 +- lea sp@(60),sp +-#else +- moveml sp@+,d0-d7/a0-a6 +-#endif +- rts +- +- .data +- .even +- .comm _SDL_Atari_hz200,4*1 +- .even +- .comm vbl_mutex,2*1 +- .even +- .comm my_vector,4*1 +diff -r 7f4407040fbd -r 4a9c67d11c9f src/timer/mint/SDL_vbltimer_s.h +--- a/src/timer/mint/SDL_vbltimer_s.h Sun Jul 27 19:19:47 2014 +0200 ++++ /dev/null Thu Jan 01 00:00:00 1970 +0000 +@@ -1,35 +0,0 @@ +-/* +- SDL - Simple DirectMedia Layer +- Copyright (C) 1997-2012 Sam Lantinga +- +- This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- This library 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 +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with this library; if not, write to the Free Software +- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +- +- Sam Lantinga +- slouken@libsdl.org +-*/ +-#include "SDL_config.h" +- +-/* +- * TOS/MiNT timer driver +- * based on vbl vector +- * +- * Patrice Mandin +- */ +- +-extern volatile long SDL_Atari_hz200; +- +-/* Functions prototypes */ +-extern int SDL_AtariVblInstall(void *newvector); +-extern void SDL_AtariVblUninstall(void *newvector); +diff -r 7f4407040fbd -r 4a9c67d11c9f src/video/ataricommon/SDL_atarievents.c +--- a/src/video/ataricommon/SDL_atarievents.c Sun Jul 27 19:19:47 2014 +0200 ++++ b/src/video/ataricommon/SDL_atarievents.c Mon Jul 28 11:44:39 2014 +0200 +@@ -34,6 +34,7 @@ + + #include "../../events/SDL_sysevents.h" + #include "../../events/SDL_events_c.h" ++#include "../../timer/SDL_timer_c.h" + + #include "SDL_atarikeys.h" + #include "SDL_atarievents_c.h" +@@ -41,6 +42,9 @@ + #include "SDL_gemdosevents_c.h" + #include "SDL_ikbdevents_c.h" + ++/* from src/timer/mint/SDL_systimer.c */ ++void SDL_AtariMint_CheckTimer(void); ++ + enum { + MCH_ST=0, + MCH_STE, +@@ -232,3 +236,8 @@ + + return(keysym); + } ++ ++void SDL_AtariMint_BackgroundTasks(void) ++{ ++ if (SDL_timer_running) SDL_AtariMint_CheckTimer(); ++} +diff -r 7f4407040fbd -r 4a9c67d11c9f src/video/ataricommon/SDL_atarievents_c.h +--- a/src/video/ataricommon/SDL_atarievents_c.h Sun Jul 27 19:19:47 2014 +0200 ++++ b/src/video/ataricommon/SDL_atarievents_c.h Mon Jul 28 11:44:39 2014 +0200 +@@ -44,6 +44,8 @@ + + extern void SDL_Atari_InitInternalKeymap(_THIS); + ++extern void SDL_AtariMint_BackgroundTasks(void); ++ + /* Atari to Unicode charset translation table */ + extern Uint16 SDL_AtariToUnicodeTable[256]; + SDL_keysym *SDL_Atari_TranslateKey(int scancode, SDL_keysym *keysym, +diff -r 7f4407040fbd -r 4a9c67d11c9f src/video/ataricommon/SDL_biosevents.c +--- a/src/video/ataricommon/SDL_biosevents.c Sun Jul 27 19:19:47 2014 +0200 ++++ b/src/video/ataricommon/SDL_biosevents.c Mon Jul 28 11:44:39 2014 +0200 +@@ -71,6 +71,8 @@ + int i; + SDL_keysym keysym; + ++ SDL_AtariMint_BackgroundTasks(); ++ + /* Update pressed keys */ + SDL_memset(bios_currentkeyboard, 0, ATARIBIOS_MAXKEYS); + +diff -r 7f4407040fbd -r 4a9c67d11c9f src/video/ataricommon/SDL_gemdosevents.c +--- a/src/video/ataricommon/SDL_gemdosevents.c Sun Jul 27 19:19:47 2014 +0200 ++++ b/src/video/ataricommon/SDL_gemdosevents.c Mon Jul 28 11:44:39 2014 +0200 +@@ -72,6 +72,8 @@ + int i; + SDL_keysym keysym; + ++ SDL_AtariMint_BackgroundTasks(); ++ + /* Update pressed keys */ + SDL_memset(gemdos_currentkeyboard, 0, ATARIBIOS_MAXKEYS); + +diff -r 7f4407040fbd -r 4a9c67d11c9f src/video/ataricommon/SDL_ikbdevents.c +--- a/src/video/ataricommon/SDL_ikbdevents.c Sun Jul 27 19:19:47 2014 +0200 ++++ b/src/video/ataricommon/SDL_ikbdevents.c Mon Jul 28 11:44:39 2014 +0200 +@@ -73,6 +73,8 @@ + int i; + SDL_keysym keysym; + ++ SDL_AtariMint_BackgroundTasks(); ++ + /*--- Send keyboard events ---*/ + + for (i=0; i