Delete RS-97 port (no longer needed), fix GCW0 port and make minor

changes to audio code.
We are now linking against the newer toolchain with support for Huge pages.
This commit is contained in:
gameblabla 2020-10-04 23:17:10 +02:00
parent 978028f5db
commit be19161bfb
No known key found for this signature in database
GPG Key ID: B24EFBB23B5F76CB
8 changed files with 120 additions and 1108 deletions

76
Makefile.350h Normal file
View File

@ -0,0 +1,76 @@
PRGNAME = sms_sdl
CC = /opt/gcw0-toolchain-static/usr/bin/mipsel-linux-gcc
# Possible choices : rs97, k3s (PAP K3S), sdl, amini, fbdev
PORT = 350h
# Possible choices : alsa, pulse (pulseaudio), oss, sdl12 (SDL 1.2 sound output), portaudio, libao
SOUND_OUTPUT = alsa
# Possible choices : crabemu_sn76489 (less accurate, GPLv2), maxim_sn76489 (somewhat problematic license but good accuracy)
SOUND_ENGINE = maxim_sn76489
# Possible choices : z80 (accurate), eighty (EightyZ80's core, GPLv2)
Z80_CORE = z80
SCALE2X_UPSCALER = 1
PROFILE = 0
ZIP_SUPPORT = 1
SRCDIR = ./source ./source/cpu_cores/$(Z80_CORE) ./source/sound ./source/unzip
SRCDIR += ./source/scalers ./source/ports/$(PORT) ./source/sound/$(SOUND_ENGINE) ./source/sound_output/$(SOUND_OUTPUT)
VPATH = $(SRCDIR)
SRC_C = $(foreach dir, $(SRCDIR), $(wildcard $(dir)/*.c))
SRC_CP = $(foreach dir, $(SRCDIR), $(wildcard $(dir)/*.cpp))
OBJ_C = $(notdir $(patsubst %.c, %.o, $(SRC_C)))
OBJ_CP = $(notdir $(patsubst %.cpp, %.o, $(SRC_CP)))
OBJS = $(OBJ_C) $(OBJ_CP)
CFLAGS = -Ofast -fdata-sections -ffunction-sections -mframe-header-opt -mno-fp-exceptions -mno-check-zero-division -fsingle-precision-constant -fno-common -march=mips32r2 -mtune=mips32r2 -mno-abicalls -fno-PIC -flto
# SMS Plus GX suffers from alignment issues so setting these to 1 helps.
CFLAGS += -falign-functions=1 -falign-jumps=1 -falign-loops=1 -falign-labels=1
CFLAGS += -fipa-pta -fsection-anchors -fdelete-dead-exceptions
CFLAGS += -DALIGN_DWORD -DNOBLANKING_LEFTCOLUM
CFLAGS += -DLSB_FIRST -std=gnu99
CFLAGS += -Isource -Isource/cpu_cores/$(Z80_CORE) -Isource/scalers -Isource/ports/$(PORT) -I./source/sound -Isource/unzip -Isource/sdl -Isource/sound/$(SOUND_ENGINE) -Isource/sound_output
SRCDIR += ./source/text/fb
CFLAGS += -Isource/text/fb
ifeq ($(PROFILE), YES)
CFLAGS += -fprofile-generate=/usr/local/home/.smsplus
else ifeq ($(PROFILE), APPLY)
CFLAGS += -fprofile-use -fbranch-probabilities
endif
ifeq ($(SOUND_ENGINE), maxim_sn76489)
CFLAGS += -DMAXIM_PSG
endif
ifeq ($(ZIP_SUPPORT), 0)
CFLAGS += -DNOZIP_SUPPORT
endif
ifeq ($(SCALE2X_UPSCALER), 1)
CFLAGS += -DSCALE2X_UPSCALER
CFLAGS += -Isource/scale2x
SRCDIR += ./source/scale2x
endif
LDFLAGS = -nodefaultlibs -lc -lgcc -lSDL -lasound -lm -Wl,--as-needed -Wl,--gc-sections -flto -s
ifeq ($(SOUND_OUTPUT), portaudio)
LDFLAGS += -lportaudio
endif
ifeq ($(SOUND_OUTPUT), libao)
LDFLAGS += -lao
endif
ifeq ($(SOUND_OUTPUT), alsa)
LDFLAGS += -lasound
endif
# Rules to make executable
$(PRGNAME): $(OBJS)
$(CC) $(CFLAGS) -o $(PRGNAME) $^ $(LDFLAGS)
$(OBJ_C) : %.o : %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f $(PRGNAME) *.o

View File

@ -10,8 +10,9 @@ SOUND_ENGINE = maxim_sn76489
# Possible choices : z80 (accurate), eighty (EightyZ80's core, GPLv2)
Z80_CORE = z80
SCALE2X_UPSCALER = 1
PROFILE = 0
PROFILE = APPLY
ZIP_SUPPORT = 1
HUGE_PAGES = 1
SRCDIR = ./source ./source/cpu_cores/$(Z80_CORE) ./source/sound ./source/unzip
SRCDIR += ./source/scalers ./source/ports/$(PORT) ./source/sound/$(SOUND_ENGINE) ./source/sound_output/$(SOUND_OUTPUT)
@ -22,11 +23,11 @@ OBJ_C = $(notdir $(patsubst %.c, %.o, $(SRC_C)))
OBJ_CP = $(notdir $(patsubst %.cpp, %.o, $(SRC_CP)))
OBJS = $(OBJ_C) $(OBJ_CP)
CFLAGS = -Ofast -fdata-sections -ffunction-sections -mno-fp-exceptions -mno-check-zero-division -fsingle-precision-constant -fno-common -mips32 -fno-PIC -mno-abicalls -flto
CFLAGS = -Ofast -fdata-sections -ffunction-sections -mframe-header-opt -mno-fp-exceptions -mno-check-zero-division -fsingle-precision-constant -fno-common -march=mips32r2 -mtune=mips32r2 -flto
# SMS Plus GX suffers from alignment issues so setting these to 1 helps.
CFLAGS += -falign-functions=1 -falign-jumps=1 -falign-loops=1 -falign-labels=1
CFLAGS += -fipa-pta -fsection-anchors -fdelete-dead-exceptions
CFLAGS += -DALIGN_DWORD -DNOBLANKING_LEFTCOLUM
CFLAGS += -DALIGN_DWORD -DNOBLANKING_LEFTCOLUM -DOPENDINGUX_GCD_16PIXELS_ISSUE
CFLAGS += -DLSB_FIRST -std=gnu99
CFLAGS += -Isource -Isource/cpu_cores/$(Z80_CORE) -Isource/scalers -Isource/ports/$(PORT) -I./source/sound -Isource/unzip -Isource/sdl -Isource/sound/$(SOUND_ENGINE) -Isource/sound_output
@ -53,7 +54,13 @@ CFLAGS += -Isource/scale2x
SRCDIR += ./source/scale2x
endif
LDFLAGS = -nodefaultlibs -lc -lgcc -lSDL -lm -Wl,--as-needed -Wl,--gc-sections -flto
ifeq ($(HUGE_PAGES), 0)
LDFLAGS = -nodefaultlibs
endif
LDFLAGS += -lc -lgcc -lSDL -lasound -lm -flto -s
ifeq ($(HUGE_PAGES), 1)
LDFLAGS += -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152 -lhugetlbfs
endif
ifeq ($(SOUND_OUTPUT), portaudio)
LDFLAGS += -lportaudio
@ -71,9 +78,12 @@ endif
# Rules to make executable
$(PRGNAME): $(OBJS)
$(CC) $(CFLAGS) -o $(PRGNAME) $^ $(LDFLAGS)
ifeq ($(HUGE_PAGES), 1)
hugeedit --text --data $(PRGNAME)
endif
$(OBJ_C) : %.o : %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f $(PRGNAME) *.o

View File

@ -2,7 +2,7 @@ PRGNAME = sms_sdl
CC = /opt/rs97-toolchain/bin/mipsel-linux-gcc
STRIP = /opt/rs97-toolchain/bin/mipsel-linux-strip
# Possible choices : rs97, k3s (PAP K3S), sdl, amini, fbdev
PORT = rs97
PORT = gcw0
# Possible choices : alsa, pulse (pulseaudio), oss, sdl12 (SDL 1.2 sound output), portaudio, libao
SOUND_OUTPUT = oss
# Possible choices : crabemu_sn76489 (less accurate, GPLv2), maxim_sn76489 (somewhat problematic license but good accuracy)
@ -10,7 +10,7 @@ SOUND_ENGINE = maxim_sn76489
# Possible choices : z80 (accurate but proprietary), eighty (EightyZ80's core, GPLv2)
Z80_CORE = z80
SCALE2X_UPSCALER = 1
PROFILE = APPLY
PROFILE = YES
ZIP_SUPPORT = 1
SRCDIR = ./source ./source/cpu_cores/$(Z80_CORE) ./source/sound ./source/unzip
@ -22,8 +22,8 @@ OBJ_C = $(notdir $(patsubst %.c, %.o, $(SRC_C)))
OBJ_CP = $(notdir $(patsubst %.cpp, %.o, $(SRC_CP)))
OBJS = $(OBJ_C) $(OBJ_CP)
CFLAGS = -Ofast -fdata-sections -ffunction-sections -mno-fp-exceptions -mno-check-zero-division -mframe-header-opt -fsingle-precision-constant -fno-common -mxgot -mips32 -mno-mips16 -fno-PIC -mno-abicalls -flto -fwhole-program
CFLAGS += -DALIGN_DWORD
CFLAGS = -Ofast -fdata-sections -ffunction-sections -mno-fp-exceptions -mno-check-zero-division -mframe-header-opt -fsingle-precision-constant -fno-common -mxgot -mips32 -mno-mips16 -fno-PIC -mno-abicalls -flto
CFLAGS += -DALIGN_DWORD -DRS97 -Wall -Wextra
CFLAGS += -DLSB_FIRST -std=gnu99
CFLAGS += -Isource -Isource/cpu_cores/$(Z80_CORE) -Isource/scalers -Isource/ports/$(PORT) -I./source/sound -Isource/unzip -Isource/sdl -Isource/sound/$(SOUND_ENGINE) -Isource/sound_output

View File

@ -14,9 +14,8 @@
#include "font_drawing.h"
#include "sound_output.h"
#if !SDL_TRIPLEBUF
#define SDL_TRIPLEBUF SDL_DOUBLEBUF
#endif
#define SDL_FLAGS SDL_HWSURFACE
static SDL_Joystick * sdl_joy[3];
#define joy_commit_range 8192
@ -133,7 +132,17 @@ static void video_update()
dst.h = vdp.height;
}
dst.y = 0;
SDL_BlitSurface(sms_bitmap,&dst,sdl_screen,NULL);
#ifdef OPENDINGUX_GCD_16PIXELS_ISSUE
dst2.x = width_remove ? 4 : 0;
dst2.y = 0;
#endif
SDL_BlitSurface(sms_bitmap,&dst,sdl_screen,
#ifdef OPENDINGUX_GCD_16PIXELS_ISSUE
&dst2
#else
NULL
#endif
);
break;
// Hqx
case 3:
@ -999,22 +1008,26 @@ static void Cleanup(void)
system_shutdown();
}
#define SDL_FLAGS SDL_HWSURFACE
uint32_t update_window_size(uint32_t w, uint32_t h)
{
if (sdl_screen) SDL_FreeSurface(sdl_screen);
if (option.fullscreen == 0)
{
sdl_screen = SDL_SetVideoMode(HOST_WIDTH_RESOLUTION, HOST_HEIGHT_RESOLUTION, 16, SDL_FLAGS);
}
else
{
#ifdef OPENDINGUX_GCD_16PIXELS_ISSUE
if (w == 248 && h == 192) w = 256;
#endif
sdl_screen = SDL_SetVideoMode(w, h, 16, SDL_FLAGS);
}
if (!sdl_screen)
{
printf("SDL_SetVideoMode error\n");
fprintf(stderr,"SDL_SetVideoMode Initialisation error : %s",SDL_GetError());
printf("Width %d, Height %d, FLAGS 0x%x\n", w, h, SDL_FLAGS);
return 1;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,57 +0,0 @@
#ifndef SMSPLUS_H
#define SMSPLUS_H
#include <SDL/SDL.h>
#define HOST_WIDTH_RESOLUTION 320
#define HOST_HEIGHT_RESOLUTION 240
#define VIDEO_WIDTH_SMS 256
#define VIDEO_HEIGHT_SMS 192
#define VIDEO_WIDTH_GG 160
#define VIDEO_HEIGHT_GG 144
/* Input defines for custom remapping */
#define CONFIG_BUTTON_UP 0
#define CONFIG_BUTTON_DOWN 1
#define CONFIG_BUTTON_LEFT 2
#define CONFIG_BUTTON_RIGHT 3
#define CONFIG_BUTTON_BUTTON1 4
#define CONFIG_BUTTON_BUTTON2 5
#define CONFIG_BUTTON_START 6
/* Colecovision specific */
#define CONFIG_BUTTON_DOLLARS 7
#define CONFIG_BUTTON_ASTERISK 8
#define CONFIG_BUTTON_ONE 9
#define CONFIG_BUTTON_TWO 10
#define CONFIG_BUTTON_THREE 11
#define CONFIG_BUTTON_FOUR 12
#define CONFIG_BUTTON_FIVE 13
#define CONFIG_BUTTON_SIX 14
#define CONFIG_BUTTON_SEVEN 15
#define CONFIG_BUTTON_EIGHT 16
#define CONFIG_BUTTON_NINE 17
/* End of Defines for input remapping */
extern SDL_Surface* sms_bitmap;
#define LOCK_VIDEO SDL_LockSurface(sms_bitmap);
#define UNLOCK_VIDEO SDL_UnlockSurface(sms_bitmap);
typedef struct {
char gamename[256];
char sramdir[256];
char sramfile[256];
char stdir[256];
char scrdir[256];
char biosdir[256];
} gamedata_t;
void smsp_state(uint8_t slot_number, uint8_t mode);
#define SOUND_FREQUENCY 44100
#define SOUND_SAMPLES_SIZE 1024
#endif

View File

@ -132,7 +132,7 @@ void Sound_Update(void)
if (!handle) return;
for (i = 0; i < (len); i++)
for (i = 0; i < (SOUND_FREQUENCY / snd.fps); i++)
{
buffer_snd[i * 2] = snd.output[1][i] * option.soundlevel;
buffer_snd[i * 2 + 1] = snd.output[0][i] * option.soundlevel;

View File

@ -37,13 +37,14 @@ void Sound_Init()
void Sound_Update()
{
int32_t i;
for (i = 0; i < (SOUND_FREQUENCY / snd.fps); i++)
size_t i;
size_t len = (SOUND_FREQUENCY / snd.fps);
for (i = 0; i < len; i++)
{
buffer_snd[i * 2] = snd.output[1][i] * option.soundlevel;
buffer_snd[i * 2 + 1] = snd.output[0][i] * option.soundlevel;
}
if (pa_simple_write(pulse_stream, buffer_snd, (size_t) (SOUND_FREQUENCY / snd.fps), NULL) < 0)
if (pa_simple_write(pulse_stream, buffer_snd, len * 4, NULL) < 0)
{
fprintf(stderr, "PulseAudio: pa_simple_write() failed!\n");
}