SDL-1.2: atari: make it compilable with m68k-atari-mintelf

From 5aa604e49fb14c36449f94111bb38abb3a14ccd7 Mon Sep 17 00:00:00 2001
From: Miro Kropacek <[EMAIL REDACTED]>
Date: Sun, 24 Sep 2023 12:52:17 +0200
Subject: [PATCH] atari: make it compilable with m68k-atari-mintelf

Contributed by Thorsten Otto.
---
 include/symbols.h                          | 54 ++++++++++++++++++
 src/audio/mint/SDL_mintaudio_it.S          | 60 +++++++++++---------
 src/video/ataricommon/SDL_ataric2p.S       | 18 +++---
 src/video/ataricommon/SDL_atarieddi.S      |  6 +-
 src/video/ataricommon/SDL_ikbdinterrupt.S  | 66 +++++++++++-----------
 src/video/ataricommon/SDL_xbiosinterrupt.S | 66 +++++++++++-----------
 src/video/xbios/SDL_xbios.h                |  3 +
 src/video/xbios/SDL_xbios_nova.c           | 22 ++++----
 8 files changed, 183 insertions(+), 112 deletions(-)
 create mode 100644 include/symbols.h

diff --git a/include/symbols.h b/include/symbols.h
new file mode 100644
index 000000000..e407e1471
--- /dev/null
+++ b/include/symbols.h
@@ -0,0 +1,54 @@
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+#ifndef __IMMEDIATE_PREFIX__
+#define __IMMEDIATE_PREFIX__ #
+#endif
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels.  */
+
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+#ifdef __ELF__
+#define FUNC(x) .type SYM(x),function
+#else
+/* The .proc pseudo-op is accepted, but ignored, by GAS.  We could just	
+   define this to the empty string for non-ELF systems, but defining it
+   to .proc means that the information is available to the assembler if
+   the need arises.  */
+#define FUNC(x) .proc
+#endif
+		
+#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+
+#define IMM(x) CONCAT1 (__IMMEDIATE_PREFIX__, x)
+
+#define d0 REG(d0)
+#define d1 REG(d1)
+#define d2 REG(d2)
+#define d3 REG(d3)
+#define d4 REG(d4)
+#define d5 REG(d5)
+#define d6 REG(d6)
+#define d7 REG(d7)
+#define a0 REG(a0)
+#define a1 REG(a1)
+#define a2 REG(a2)
+#define a3 REG(a3)
+#define a4 REG(a4)
+#define a5 REG(a5)
+#define a6 REG(a6)
+#define a7 REG(a7)
+#define fp REG(fp)
+#define sp REG(sp)
+#define pc REG(pc)
+
+#define sr REG(sr)
diff --git a/src/audio/mint/SDL_mintaudio_it.S b/src/audio/mint/SDL_mintaudio_it.S
index cb033e6be..18de7d64d 100644
--- a/src/audio/mint/SDL_mintaudio_it.S
+++ b/src/audio/mint/SDL_mintaudio_it.S
@@ -20,26 +20,32 @@
     slouken@libsdl.org
 */
 
+#include "symbols.h"
+
 /*
 	Audio interrupts
 
-	Patrice Mandin, Didier Mquignon
+	Patrice Mandin, Didier M�quignon
  */
 
 	.text
 
-	.globl	_SDL_MintAudio_XbiosInterruptMeasureClock
-	.globl	_SDL_MintAudio_clocktics
+	.globl	SYM(SDL_MintAudio_XbiosInterruptMeasureClock)
+	.globl	SYM(SDL_MintAudio_clocktics)
+
+	.globl	SYM(SDL_MintAudio_XbiosInterrupt)
+	.globl	SYM(SDL_MintAudio_Dma8Interrupt)
+	.globl	SYM(SDL_MintAudio_StfaInterrupt)
 
-	.globl	_SDL_MintAudio_XbiosInterrupt
-	.globl	_SDL_MintAudio_Dma8Interrupt
-	.globl	_SDL_MintAudio_StfaInterrupt
+	.globl	SYM(SDL_MintAudio_num_its)
 
-	.globl	_SDL_MintAudio_num_its
+	.globl	SYM(SDL_MintAudio_itbuffer)
+	.globl	SYM(SDL_MintAudio_itbuflen)
+	.globl	SYM(SDL_MintAudio_itsilence)
 
 /*--- Xbios interrupt vector to measure Falcon external clock ---*/
 
-_SDL_MintAudio_XbiosInterruptMeasureClock:          /* 1 mS */
+SYM(SDL_MintAudio_XbiosInterruptMeasureClock):          /* 1 mS */
 
 	/* state DMA sound */
 #if defined(__mcoldfire__)
@@ -51,7 +57,7 @@ _SDL_MintAudio_XbiosInterruptMeasureClock:          /* 1 mS */
 	btst	#0,0xFFFF8901:w
 #endif
 	beqs	SDL_MintAudio_EndIntMeasure
-	addql	#1,_SDL_MintAudio_clocktics
+	addql	#1,SYM(SDL_MintAudio_clocktics)
 SDL_MintAudio_EndIntMeasure:
 
 	/* Clear service bit */
@@ -69,8 +75,8 @@ SDL_MintAudio_EndIntMeasure:
 /*    Xbios, DMA 8 bits: need to set ISR on MFP */
 /*    STFA: do not touch MFP */
 
-_SDL_MintAudio_XbiosInterrupt:
-_SDL_MintAudio_Dma8Interrupt:
+SYM(SDL_MintAudio_XbiosInterrupt):
+SYM(SDL_MintAudio_Dma8Interrupt):
 #if defined(__mcoldfire__)
 	lea	sp@(-12),sp
 	moveml	d0-d1/a0,sp@
@@ -86,26 +92,26 @@ _SDL_MintAudio_Dma8Interrupt:
 	bclr	#5,0xfffffa0f:w
 #endif
 
-_SDL_MintAudio_StfaInterrupt:
-	move.l	_SDL_MintAudio_num_its,d0
+SYM(SDL_MintAudio_StfaInterrupt):
+	move.l	SYM(SDL_MintAudio_num_its),d0
 	addql	#1,d0
-	move.l	d0,_SDL_MintAudio_num_its
+	move.l	d0,SYM(SDL_MintAudio_num_its)
  
 	cmp.l	#5,d0
-	bmi.s	_SDL_MintAudio_nosilence
+	bmi.s	nosilence
 
-	move.l	_SDL_MintAudio_itbuffer,d1
-	beq.s	_SDL_MintAudio_nosilence
+	move.l	SYM(SDL_MintAudio_itbuffer),d1
+	beq.s	nosilence
 	move.l	d1,a0
 
-	move.l	_SDL_MintAudio_itbuflen,d0
-	move.l	_SDL_MintAudio_itsilence,d1
-_SDL_MintAudio_fillsilence:
+	move.l	SYM(SDL_MintAudio_itbuflen),d0
+	move.l	SYM(SDL_MintAudio_itsilence),d1
+fillsilence:
 	move.l	d1,a0@+
 	subq.l	#1,d0
-	bpl.s	_SDL_MintAudio_fillsilence
+	bpl.s	fillsilence
 
-_SDL_MintAudio_nosilence:
+nosilence:
 #if defined(__mcoldfire__)
 	moveml	sp@,d0-d1/a0
 	lea	sp@(12),sp
@@ -117,9 +123,9 @@ _SDL_MintAudio_nosilence:
 	.bss
 
 	.even
-	.comm	_SDL_MintAudio_clocktics,4
-	.comm	_SDL_MintAudio_num_its,4
+	.comm	SYM(SDL_MintAudio_clocktics),4
+	.comm	SYM(SDL_MintAudio_num_its),4
 
-	.comm	_SDL_MintAudio_itbuffer,4	/* Audio DMA buffer */
-	.comm	_SDL_MintAudio_itbuflen,4	/* Length in longword */
-	.comm	_SDL_MintAudio_itsilence,4	/* Silence value */
+	.comm	SYM(SDL_MintAudio_itbuffer),4	/* Audio DMA buffer */
+	.comm	SYM(SDL_MintAudio_itbuflen),4	/* Length in longword */
+	.comm	SYM(SDL_MintAudio_itsilence),4	/* Silence value */
diff --git a/src/video/ataricommon/SDL_ataric2p.S b/src/video/ataricommon/SDL_ataric2p.S
index 450003c53..97f374115 100644
--- a/src/video/ataricommon/SDL_ataric2p.S
+++ b/src/video/ataricommon/SDL_ataric2p.S
@@ -20,6 +20,8 @@
     slouken@libsdl.org
 */
 
+#include "symbols.h"
+
 /*
 	Chunky to planar conversion routine
 	1 byte/pixel -> 4 or 8 bit planes
@@ -29,15 +31,15 @@
 	Mikael Kalms
 */
 
-	.globl	_SDL_Atari_C2pConvert
-	.globl	_SDL_Atari_C2pConvert8
-	.globl	_SDL_Atari_C2pConvert4
-	.globl	_SDL_Atari_C2pConvert4_pal
+	.globl	SYM(SDL_Atari_C2pConvert)
+	.globl	SYM(SDL_Atari_C2pConvert8)
+	.globl	SYM(SDL_Atari_C2pConvert4)
+	.globl	SYM(SDL_Atari_C2pConvert4_pal)
 
 /* ------------	Conversion C2P, 8 bits ------------ */
 
 	.text
-_SDL_Atari_C2pConvert8:
+SYM(SDL_Atari_C2pConvert8):
 #if !defined(__mcoldfire__)
 	movel	sp@(4),c2p_source
 	movel	sp@(8),c2p_dest
@@ -289,7 +291,7 @@ SDL_Atari_C2p8_nodblline:
 
 /* ------------	Conversion C2P, 4 bits ------------ */
 
-_SDL_Atari_C2pConvert4:
+SYM(SDL_Atari_C2pConvert4):
 #if !defined(__mcoldfire__)
 	movel	sp@(4),c2p_source
 	movel	sp@(8),c2p_dest
@@ -401,7 +403,7 @@ c2p4_nodblligne:
 
 /* ------------	Conversion of a light palette in 4 bits ------------ */
 
-_SDL_Atari_C2pConvert4_pal:
+SYM(SDL_Atari_C2pConvert4_pal):
 #if !defined(__mcoldfire__)
 	/* a0 is a 256-word light palette */
 	movel	sp@(4),a0
@@ -436,7 +438,7 @@ c2p_pal_initbyte:
 	.bss
 
 	.even
-_SDL_Atari_C2pConvert:
+SYM(SDL_Atari_C2pConvert):
 	.ds.l	1
 
 c2p_table:
diff --git a/src/video/ataricommon/SDL_atarieddi.S b/src/video/ataricommon/SDL_atarieddi.S
index 8e2cbf8ce..dbc127dcf 100644
--- a/src/video/ataricommon/SDL_atarieddi.S
+++ b/src/video/ataricommon/SDL_atarieddi.S
@@ -20,6 +20,8 @@
     slouken@libsdl.org
 */
 
+#include "symbols.h"
+
 /*
  *	Read EdDI version
  *
@@ -28,11 +30,11 @@
 
 	.text
 
-	.globl	_Atari_get_EdDI_version
+	.globl	SYM(Atari_get_EdDI_version)
 
 /*--- Vector installer ---*/
 
-_Atari_get_EdDI_version:
+SYM(Atari_get_EdDI_version):
 #if defined(__mcoldfire__)
 	movel	sp@(4),a0
 	movel	a0,eddi_cookie
diff --git a/src/video/ataricommon/SDL_ikbdinterrupt.S b/src/video/ataricommon/SDL_ikbdinterrupt.S
index 654c16df9..a9ee8c743 100644
--- a/src/video/ataricommon/SDL_ikbdinterrupt.S
+++ b/src/video/ataricommon/SDL_ikbdinterrupt.S
@@ -20,6 +20,8 @@
     slouken@libsdl.org
 */
 
+#include "symbols.h"
+
 /*
  *	IKBD 6301 interrupt routine
  *
@@ -28,22 +30,22 @@
 
 	.text
 
-	.globl	_SDL_AtariIkbd_Install
-	.globl	_SDL_AtariIkbd_Restore
+	.globl	SYM(SDL_AtariIkbd_Install)
+	.globl	SYM(SDL_AtariIkbd_Restore)
 
-	.globl	_SDL_AtariIkbd_keyboard
-	.globl	_SDL_AtariIkbd_mouseb
-	.globl	_SDL_AtariIkbd_mousex
-	.globl	_SDL_AtariIkbd_mousey
-	.globl	_SDL_AtariIkbd_joystick
+	.globl	SYM(SDL_AtariIkbd_keyboard)
+	.globl	SYM(SDL_AtariIkbd_mouseb)
+	.globl	SYM(SDL_AtariIkbd_mousex)
+	.globl	SYM(SDL_AtariIkbd_mousey)
+	.globl	SYM(SDL_AtariIkbd_joystick)
 
-	.globl	_SDL_AtariIkbd_enabled
+	.globl	SYM(SDL_AtariIkbd_enabled)
 
-	.globl	_Atari_UnhookXbra
+	.globl	SYM(Atari_UnhookXbra)
 
 /*--- Install our IKBD vector ---*/
 
-_SDL_AtariIkbd_Install:
+SYM(SDL_AtariIkbd_Install):
 	| Disable interrupts
 
 	movew	sr,d1
@@ -101,16 +103,16 @@ _SDL_AtariIkbd_Install:
 
 #if defined(__mcoldfire__)
 	movel	#0xffff,d0
-	movew	d0,_SDL_AtariIkbd_enabled
+	movew	d0,SYM(SDL_AtariIkbd_enabled)
 #else
-	movew	#0xffff,_SDL_AtariIkbd_enabled
+	movew	#0xffff,SYM(SDL_AtariIkbd_enabled)
 #endif
 	rts
 
 /*--- Uninstall our IKBD vector ---*/
 
-_SDL_AtariIkbd_Restore:
-	tstw	_SDL_AtariIkbd_enabled
+SYM(SDL_AtariIkbd_Restore):
+	tstw	SYM(SDL_AtariIkbd_enabled)
 	bnes	ikbd_installed
 	rts
 
@@ -141,7 +143,7 @@ ikbd_restoreimrb:
 	pea	ikbd(pc)
 	movel	#0x4c53444c,sp@-	/* "LSDL" */
 	pea	0x118/4:w
-	jsr	_Atari_UnhookXbra
+	jsr	SYM(Atari_UnhookXbra)
 	lea	sp@(12),sp
 
 	movew	sp@+,d1
@@ -162,7 +164,7 @@ ikbd_finbuffer:
 
 	| Interrupts done
 
-	clrw	_SDL_AtariIkbd_enabled
+	clrw	SYM(SDL_AtariIkbd_enabled)
 	rts
 
 	.bss
@@ -220,7 +222,7 @@ ikbd_yes_mouse:
 #else
 	andw	#3,d0
 #endif
-	movew	d0,_SDL_AtariIkbd_mouseb
+	movew	d0,SYM(SDL_AtariIkbd_mouseb)
 
 #if defined(__mcoldfire__)
 	movel	#ikbd_mousex,d0
@@ -245,7 +247,7 @@ ikbd_yes_joystick:
 
 ikbd_no_mouse:
 	moveb	d0,d1
-	lea		_SDL_AtariIkbd_keyboard,a0
+	lea		SYM(SDL_AtariIkbd_keyboard),a0
 #if defined(__mcoldfire__)
 	andl	#0x7f,d1
 	btst	#7,d0
@@ -308,14 +310,14 @@ ikbd_mousex:
 	moveb	0xfffffc02:w,d0
 	extw	d0
 #if defined(__mcoldfire__)
-	movew	_SDL_AtariIkbd_mousex,d1
+	movew	SYM(SDL_AtariIkbd_mousex),d1
 	addl	d1,d0
-	movew	d0,_SDL_AtariIkbd_mousex
+	movew	d0,SYM(SDL_AtariIkbd_mousex)
 
 	movel	#ikbd_mousey,d0
 	movel	d0,0x118:w
 #else
-	addw	d0,_SDL_AtariIkbd_mousex
+	addw	d0,SYM(SDL_AtariIkbd_mousex)
 
 	movel	#ikbd_mousey,0x118:w
 #endif
@@ -343,14 +345,14 @@ ikbd_mousey:
 	moveb	0xfffffc02:w,d0
 	extw	d0
 #if defined(__mcoldfire__)
-	movew	_SDL_AtariIkbd_mousey,d1
+	movew	SYM(SDL_AtariIkbd_mousey),d1
 	addl	d1,d0
-	movew	d0,_SDL_AtariIkbd_mousey
+	movew	d0,SYM(SDL_AtariIkbd_mousey)
 
 	movel	#ikbd,d0
 	movel	d0,0x118:w
 #else
-	addw	d0,_SDL_AtariIkbd_mousey
+	addw	d0,SYM(SDL_AtariIkbd_mousey)
 
 	movel	#ikbd,0x118:w
 #endif
@@ -377,14 +379,14 @@ ikbd_joystick:
 
 #if defined(__mcoldfire__)
 	moveb	0xfffffc02:w,d0
-	moveb	d0,_SDL_AtariIkbd_joystick+1
+	moveb	d0,SYM(SDL_AtariIkbd_joystick)+1
 
 	movel	#ikbd,d0
 	movel	d0,0x118:w
 
 	bra	ikbd_endit_stack
 #else
-	moveb	0xfffffc02:w,_SDL_AtariIkbd_joystick+1
+	moveb	0xfffffc02:w,SYM(SDL_AtariIkbd_joystick)+1
 
 	movel	#ikbd,0x118:w
 
@@ -394,19 +396,19 @@ ikbd_joystick:
 	.data
 
 	.even
-_SDL_AtariIkbd_enabled:
+SYM(SDL_AtariIkbd_enabled):
 	.dc.w	0
 
 	.bss
 
 	.even
-_SDL_AtariIkbd_keyboard:
+SYM(SDL_AtariIkbd_keyboard):
 	.ds.b	128
-_SDL_AtariIkbd_mousex:
+SYM(SDL_AtariIkbd_mousex):
 	.ds.w	1
-_SDL_AtariIkbd_mousey:
+SYM(SDL_AtariIkbd_mousey):
 	.ds.w	1
-_SDL_AtariIkbd_mouseb:
+SYM(SDL_AtariIkbd_mouseb):
 	.ds.w	1
-_SDL_AtariIkbd_joystick:
+SYM(SDL_AtariIkbd_joystick):
 	.ds.w	1
diff --git a/src/video/ataricommon/SDL_xbiosinterrupt.S b/src/video/ataricommon/SDL_xbiosinterrupt.S
index 6b0008440..d000194f7 100644
--- a/src/video/ataricommon/SDL_xbiosinterrupt.S
+++ b/src/video/ataricommon/SDL_xbiosinterrupt.S
@@ -20,6 +20,8 @@
     slouken@libsdl.org
 */
 
+#include "symbols.h"
+
 /*
  *	XBIOS mouse & joystick vectors
  *
@@ -28,22 +30,22 @@
 
 	.text
 
-	.globl	_SDL_AtariXbios_Install
-	.globl	_SDL_AtariXbios_Restore
+	.globl	SYM(SDL_AtariXbios_Install)
+	.globl	SYM(SDL_AtariXbios_Restore)
 
-	.globl	_SDL_AtariXbios_installmousevector
-	.globl	_SDL_AtariXbios_mouselock
-	.globl	_SDL_AtariXbios_mouseb
-	.globl	_SDL_AtariXbios_mousex
-	.globl	_SDL_AtariXbios_mousey
-	.globl	_SDL_AtariXbios_installjoystickvector
-	.globl	_SDL_AtariXbios_joystick
+	.globl	SYM(SDL_AtariXbios_installmousevector)
+	.globl	SYM(SDL_AtariXbios_mouselock)
+	.globl	SYM(SDL_AtariXbios_mouseb)
+	.globl	SYM(SDL_AtariXbios_mousex)
+	.globl	SYM(SDL_AtariXbios_mousey)
+	.globl	SYM(SDL_AtariXbios_installjoystickvector)
+	.globl	SYM(SDL_AtariXbios_joystick)
 
-	.globl	_Atari_UnhookXbra
+	.globl	SYM(Atari_UnhookXbra)
 
 /*--- Vector installer ---*/
 
-_SDL_AtariXbios_Install:
+SYM(SDL_AtariXbios_Install):
 #if defined(__mcoldfire__)
 	lea	sp@(-8),sp
 	moveml	d2/a2,sp@
@@ -69,7 +71,7 @@ _SDL_AtariXbios_Install:
 
 	/* Save old mouse vector, set our routine */
 
-	tstw	_SDL_AtariXbios_installmousevector
+	tstw	SYM(SDL_AtariXbios_installmousevector)
 	beqs	no_new_mouse_vector
 #if defined(__mcoldfire__)
 	movel	a0@(16),a1
@@ -84,7 +86,7 @@ no_new_mouse_vector:
 
 	/* Save old joystick vector, set our routine */
 
-	tstw	_SDL_AtariXbios_installjoystickvector
+	tstw	SYM(SDL_AtariXbios_installjoystickvector)
 	beqs	no_new_joystick_vector
 #if defined(__mcoldfire__)
 	movel	a0@(24),a1
@@ -105,7 +107,7 @@ no_new_joystick_vector:
 
 /*--- Vector restorer ---*/
 
-_SDL_AtariXbios_Restore:
+SYM(SDL_AtariXbios_Restore):
 #if defined(__mcoldfire__)
 	lea	sp@(-8),sp
 	moveml	d2/a2,sp@
@@ -143,7 +145,7 @@ _SDL_AtariXbios_Restore:
 	pea	newmousevector(pc)
 	movel	#0x4c53444c,sp@-	/* "LSDL" */
 	pea	a0@(16)
-	jsr	_Atari_UnhookXbra
+	jsr	SYM(Atari_UnhookXbra)
 	lea	sp@(12),sp
 	clrl	oldmousevector
 
@@ -166,7 +168,7 @@ no_restore_mouse:
 	pea	newjoystickvector(pc)
 	movel	#0x4c53444c,sp@-	/* "LSDL" */
 	pea	a0@(24)
-	jsr	_Atari_UnhookXbra
+	jsr	SYM(Atari_UnhookXbra)
 	lea	sp@(12),sp
 	clrl	oldjoystickvector
 
@@ -202,32 +204,32 @@ newmousevector:
 #else
 	andw	#3,d0
 #endif
-	movew	d0,_SDL_AtariXbios_mouseb
+	movew	d0,SYM(SDL_AtariXbios_mouseb)
 
 	/* X movement */
 	moveb	a0@(1),d0
 	extw	d0
 #if defined(__mcoldfire__)
-	movew	_SDL_AtariXbios_mousex,d1
+	movew	SYM(SDL_AtariXbios_mousex),d1
 	addl	d1,d0
-	movew	d0,_SDL_AtariXbios_mousex
+	movew	d0,SYM(SDL_AtariXbios_mousex)
 #else
-	addw	d0,_SDL_AtariXbios_mousex
+	addw	d0,SYM(SDL_AtariXbios_mousex)
 #endif
 
 	/* Y movement */
 	moveb	a0@(2),d0
 	extw	d0
 #if defined(__mcoldfire__)
-	movew	_SDL_AtariXbios_mousey,d1
+	movew	SYM(SDL_AtariXbios_mousey),d1
 	addl	d1,d0
-	movew	d0,_SDL_AtariXbios_mousey
+	movew	d0,SYM(SDL_AtariXbios_mousey)
 #else
-	addw	d0,_SDL_AtariXbios_mousey
+	addw	d0,SYM(SDL_AtariXbios_mousey)
 #endif
 
 	/* Lock mouse position ? */
-	tstw	_SDL_AtariXbios_mouselock
+	tstw	SYM(SDL_AtariXbios_mouselock)
 	beq.s	no_mouse_lock
 	clrb	a0@(1)
 	clrb	a0@(2)
@@ -247,15 +249,15 @@ no_mouse_lock:
 	.data
 
 	.even
-_SDL_AtariXbios_installmousevector:
+SYM(SDL_AtariXbios_installmousevector):
 	.dc.w	0
-_SDL_AtariXbios_mouselock:
+SYM(SDL_AtariXbios_mouselock):
 	.dc.w	0
-_SDL_AtariXbios_mousex:
+SYM(SDL_AtariXbios_mousex):
 	.dc.w	0
-_SDL_AtariXbios_mousey:
+SYM(SDL_AtariXbios_mousey):
 	.dc.w	0
-_SDL_AtariXbios_mouseb:
+SYM(SDL_AtariXbios_mouseb):
 	.dc.w	0
 
 /*--- Our joystick vector ---*/
@@ -277,7 +279,7 @@ newjoystickvector:
 #else
 	andw	#0x8f,d0
 #endif
-	movew	d0,_SDL_AtariXbios_joystick
+	movew	d0,SYM(SDL_AtariXbios_joystick)
 
 	/* Jump through old vector */
 	movel	sp@+,d0
@@ -288,7 +290,7 @@ newjoystickvector:
 	.data
 
 	.even
-_SDL_AtariXbios_installjoystickvector:
+SYM(SDL_AtariXbios_installjoystickvector):
 	.dc.w	0
-_SDL_AtariXbios_joystick:
+SYM(SDL_AtariXbios_joystick):
 	.dc.w	0
diff --git a/src/video/xbios/SDL_xbios.h b/src/video/xbios/SDL_xbios.h
index de418acde..5d8ab9b7b 100644
--- a/src/video/xbios/SDL_xbios.h
+++ b/src/video/xbios/SDL_xbios.h
@@ -152,4 +152,7 @@ void SDL_XBIOS_VideoInit_Milan(_THIS);
 /* SDL_xbios_ctpci.c */
 void SDL_XBIOS_VideoInit_Ctpci(_THIS);
 
+/* SDL_xbios_nova.c */
+void SDL_XBIOS_VideoInit_Nova(_THIS, void *cookie_nova);
+
 #endif /* _SDL_xbios_h */
diff --git a/src/video/xbios/SDL_xbios_nova.c b/src/video/xbios/SDL_xbios_nova.c
index 07a898d36..8e91d8b67 100644
--- a/src/video/xbios/SDL_xbios_nova.c
+++ b/src/video/xbios/SDL_xbios_nova.c
@@ -266,10 +266,10 @@ static void NOVA_SetMode(_THIS, int num_mode)
 	oldstack = (void *)Super(NULL);
 
 	__asm__ __volatile__ (
-			"moveql	#0,d0\n\t"
-			"movel	%0,a0\n\t"
-			"movel	%1,a1\n\t"
-			"jsr	a1@"
+			"moveql	#0,%%d0\n\t"
+			"movel	%0,%%a0\n\t"
+			"movel	%1,%%a1\n\t"
+			"jsr	%%a1@"
 		: /* no return value */
 		: /* input */
 			"g"(&NOVA_modes[num_mode]), "g"(NOVA_xcb->p_chres)
@@ -287,9 +287,9 @@ static void NOVA_SetScreen(_THIS, void *screen)
 	oldstack = (void *)Super(NULL);
 
 	__asm__ __volatile__ (
-			"movel	%0,a0\n\t"
-			"movel	%1,a1\n\t"
-			"jsr	a1@"
+			"movel	%0,%%a0\n\t"
+			"movel	%1,%%a1\n\t"
+			"jsr	%%a1@"
 		: /* no return value */
 		: /* input */
 			"g"(screen), "g"(NOVA_xcb->p_setscr)
@@ -312,10 +312,10 @@ static void NOVA_SetColor(_THIS, int index, int r, int g, int b)
 	oldstack = (void *)Super(NULL);
 
 	__asm__ __volatile__ (
-			"movel	%0,d0\n\t"
-			"movel	%1,a0\n\t"
-			"movel	%2,a1\n\t"
-			"jsr	a1@"
+			"movel	%0,%%d0\n\t"
+			"movel	%1,%%a0\n\t"
+			"movel	%2,%%a1\n\t"
+			"jsr	%%a1@"
 		: /* no return value */
 		: /* input */
 			"g"(index), "g"(color), "g"(NOVA_xcb->p_setcol)