DFI Mod
This commit is contained in:
parent
4ec645a60e
commit
3330d7b3c1
|
@ -0,0 +1,70 @@
|
||||||
|
|
||||||
|
prefix = /usr/local
|
||||||
|
exec_prefix = ${prefix}
|
||||||
|
bindir = ${exec_prefix}/bin
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
LD = $(CC)
|
||||||
|
AS = $(CC)
|
||||||
|
INSTALL = /usr/bin/install -c
|
||||||
|
|
||||||
|
CFLAGS = -ansi -pedantic -Wall -O3 -fstrength-reduce -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -fexpensive-optimizations -fforce-addr -fomit-frame-pointer
|
||||||
|
LDFLAGS = $(CFLAGS) -s
|
||||||
|
ASFLAGS = $(CFLAGS)
|
||||||
|
|
||||||
|
TARGETS = xgnuboy fbgnuboy sdlgnuboy
|
||||||
|
|
||||||
|
ASM_OBJS =
|
||||||
|
|
||||||
|
SYS_DEFS = -DHAVE_CONFIG_H -DIS_LITTLE_ENDIAN -DIS_LINUX -D_SVID_SOURCE
|
||||||
|
SYS_OBJS = sys/nix/nix.o $(ASM_OBJS)
|
||||||
|
SYS_INCS = -I/usr/local/include -I./sys/nix
|
||||||
|
|
||||||
|
FB_OBJS = sys/linux/fbdev.o sys/linux/kb.o sys/pc/keymap.o sys/linux/joy.o sys/oss/oss.o
|
||||||
|
FB_LIBS =
|
||||||
|
|
||||||
|
SVGA_OBJS = sys/svga/svgalib.o sys/pc/keymap.o sys/linux/joy.o sys/oss/oss.o
|
||||||
|
SVGA_LIBS = -L/usr/local/lib -lvga
|
||||||
|
|
||||||
|
SDL_OBJS = sys/sdl/sdl.o sys/sdl/sdl-audio.o sys/sdl/keymap.o
|
||||||
|
SDL_LIBS = -L/usr/lib/x86_64-linux-gnu -lSDL
|
||||||
|
SDL_CFLAGS = -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT
|
||||||
|
|
||||||
|
X11_OBJS = sys/x11/xlib.o sys/x11/keymap.o sys/linux/joy.o sys/oss/oss.o
|
||||||
|
X11_LIBS = -lX11 -lXext
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
include Rules
|
||||||
|
|
||||||
|
fbgnuboy: $(OBJS) $(SYS_OBJS) $(FB_OBJS)
|
||||||
|
$(LD) $(LDFLAGS) $(OBJS) $(SYS_OBJS) $(FB_OBJS) -o $@ $(FB_LIBS)
|
||||||
|
|
||||||
|
sgnuboy: $(OBJS) $(SYS_OBJS) $(SVGA_OBJS)
|
||||||
|
$(LD) $(LDFLAGS) $(OBJS) $(SYS_OBJS) $(SVGA_OBJS) -o $@ $(SVGA_LIBS)
|
||||||
|
|
||||||
|
sdlgnuboy: $(OBJS) $(SYS_OBJS) $(SDL_OBJS)
|
||||||
|
$(LD) $(LDFLAGS) $(OBJS) $(SYS_OBJS) $(SDL_OBJS) -o $@ $(SDL_LIBS)
|
||||||
|
|
||||||
|
sys/sdl/sdl.o: sys/sdl/sdl.c
|
||||||
|
$(MYCC) $(SDL_CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
sys/sdl/keymap.o: sys/sdl/keymap.c
|
||||||
|
$(MYCC) $(SDL_CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
xgnuboy: $(OBJS) $(SYS_OBJS) $(X11_OBJS)
|
||||||
|
$(LD) $(LDFLAGS) $(OBJS) $(SYS_OBJS) $(X11_OBJS) -o $@ $(X11_LIBS)
|
||||||
|
|
||||||
|
install: all
|
||||||
|
$(INSTALL) -d $(bindir)
|
||||||
|
$(INSTALL) -m 755 $(TARGETS) $(bindir)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *gnuboy gmon.out *.o sys/*.o sys/*/*.o asm/*/*.o $(OBJS)
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f config.* sys/nix/config.h Makefile
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
18
emu.c
18
emu.c
|
@ -1,6 +1,3 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "regs.h"
|
#include "regs.h"
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
|
@ -17,6 +14,8 @@
|
||||||
static int framelen = 16743;
|
static int framelen = 16743;
|
||||||
static int framecount;
|
static int framecount;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
rcvar_t emu_exports[] =
|
rcvar_t emu_exports[] =
|
||||||
{
|
{
|
||||||
RCV_INT("framelen", &framelen),
|
RCV_INT("framelen", &framelen),
|
||||||
|
@ -25,17 +24,10 @@ rcvar_t emu_exports[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void emu_init()
|
void emu_init()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* emu_reset is called to initialize the state of the emulated
|
* emu_reset is called to initialize the state of the emulated
|
||||||
* system. It should set cpu registers, hardware registers, etc. to
|
* system. It should set cpu registers, hardware registers, etc. to
|
||||||
|
@ -49,6 +41,7 @@ void emu_reset()
|
||||||
cpu_reset();
|
cpu_reset();
|
||||||
mbc_reset();
|
mbc_reset();
|
||||||
sound_reset();
|
sound_reset();
|
||||||
|
emu_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,6 +64,9 @@ void emu_run()
|
||||||
{
|
{
|
||||||
void *timer = sys_timer();
|
void *timer = sys_timer();
|
||||||
int delay;
|
int delay;
|
||||||
|
|
||||||
|
unsigned char x,y;
|
||||||
|
|
||||||
|
|
||||||
vid_begin();
|
vid_begin();
|
||||||
lcd_begin();
|
lcd_begin();
|
||||||
|
@ -95,7 +91,7 @@ void emu_run()
|
||||||
|
|
||||||
if (!(R_LCDC & 0x80))
|
if (!(R_LCDC & 0x80))
|
||||||
cpu_emulate(32832);
|
cpu_emulate(32832);
|
||||||
|
|
||||||
while (R_LY > 0) /* wait for next frame */
|
while (R_LY > 0) /* wait for next frame */
|
||||||
emu_step();
|
emu_step();
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
1
sys.h
1
sys.h
|
@ -29,7 +29,6 @@ void kb_init();
|
||||||
void kb_poll();
|
void kb_poll();
|
||||||
void kb_close();
|
void kb_close();
|
||||||
|
|
||||||
|
|
||||||
/* FIXME these have different prototype for obsolete ( == M$ ) platforms */
|
/* FIXME these have different prototype for obsolete ( == M$ ) platforms */
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
int sys_elapsed(struct timeval *prev);
|
int sys_elapsed(struct timeval *prev);
|
||||||
|
|
123
sys/sdl/sdl.c
123
sys/sdl/sdl.c
|
@ -13,11 +13,31 @@
|
||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
|
/* Von Stefan */
|
||||||
|
#include <string.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#define BUFSIZE 5760
|
||||||
|
#define SERVICE_PORT 2323
|
||||||
|
#define FRAME_SKIP -1
|
||||||
|
/* Ende von Stefan */
|
||||||
|
|
||||||
|
|
||||||
#include "fb.h"
|
#include "fb.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "rc.h"
|
#include "rc.h"
|
||||||
|
|
||||||
|
/* By Stefan */
|
||||||
|
static struct sockaddr_in myaddr, remaddr;
|
||||||
|
static int fd, slen=sizeof(remaddr);
|
||||||
|
static char frame[BUFSIZE]; /* message buffer */
|
||||||
|
static char *server = "195.160.169.37"; /* change this to use a different server */
|
||||||
|
static int frameCount = 0;
|
||||||
|
/* End Stefan */
|
||||||
|
|
||||||
struct fb fb;
|
struct fb fb;
|
||||||
|
|
||||||
static int use_yuv = -1;
|
static int use_yuv = -1;
|
||||||
|
@ -203,6 +223,37 @@ void vid_init()
|
||||||
fb.enabled = 1;
|
fb.enabled = 1;
|
||||||
fb.dirty = 0;
|
fb.dirty = 0;
|
||||||
|
|
||||||
|
/* Start Init Stefan */
|
||||||
|
/* create a socket */
|
||||||
|
printf("Start Init\n");
|
||||||
|
if ((fd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
|
||||||
|
printf("socket created\n");
|
||||||
|
|
||||||
|
/* bind it to all local addresses and pick any port number */
|
||||||
|
|
||||||
|
memset((char *)&myaddr, 0, sizeof(myaddr));
|
||||||
|
myaddr.sin_family = AF_INET;
|
||||||
|
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
|
myaddr.sin_port = htons(0);
|
||||||
|
|
||||||
|
if (bind(fd, (struct sockaddr *)&myaddr, sizeof(myaddr)) < 0) {
|
||||||
|
die("bind failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now define remaddr, the address to whom we want to send messages */
|
||||||
|
/* For convenience, the host address is expressed as a numeric IP address */
|
||||||
|
/* that we will convert to a binary format via inet_aton */
|
||||||
|
|
||||||
|
memset((char *) &remaddr, 0, sizeof(remaddr));
|
||||||
|
remaddr.sin_family = AF_INET;
|
||||||
|
remaddr.sin_port = htons(SERVICE_PORT);
|
||||||
|
if (inet_aton(server, &remaddr.sin_addr)==0) {
|
||||||
|
fprintf(stderr, "inet_aton() failed\n");
|
||||||
|
die("1");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("End Init\n");
|
||||||
|
/* Ende Stefan */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -403,6 +454,9 @@ void vid_settitle(char *title)
|
||||||
|
|
||||||
void vid_begin()
|
void vid_begin()
|
||||||
{
|
{
|
||||||
|
int x;
|
||||||
|
char y;
|
||||||
|
|
||||||
if (overlay)
|
if (overlay)
|
||||||
{
|
{
|
||||||
SDL_LockYUVOverlay(overlay);
|
SDL_LockYUVOverlay(overlay);
|
||||||
|
@ -411,6 +465,75 @@ void vid_begin()
|
||||||
}
|
}
|
||||||
SDL_LockSurface(screen);
|
SDL_LockSurface(screen);
|
||||||
fb.ptr = screen->pixels;
|
fb.ptr = screen->pixels;
|
||||||
|
|
||||||
|
frameCount++;
|
||||||
|
|
||||||
|
if (frameCount % FRAME_SKIP) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Stefan Start - Sending Frame via UDP to DFI*/
|
||||||
|
|
||||||
|
/* Geht so halb...
|
||||||
|
for(x=0; x<144*40; x++){
|
||||||
|
if(fb.ptr[x*16]==29) frame[x]=0;
|
||||||
|
if(fb.ptr[x*16]==99) frame[x]=1;
|
||||||
|
if(fb.ptr[x*16]==107) frame[x]=2;
|
||||||
|
if(fb.ptr[x*16]==156) frame[x]=3;
|
||||||
|
|
||||||
|
if(fb.ptr[(x*16)+4]==29) frame[x]+=0;
|
||||||
|
if(fb.ptr[(x*16)+4]==99) frame[x]+=4;
|
||||||
|
if(fb.ptr[(x*16)+4]==107) frame[x]+=8;
|
||||||
|
if(fb.ptr[(x*16)+4]==156) frame[x]+=12;
|
||||||
|
|
||||||
|
if(fb.ptr[(x*16)+8]==29) frame[x]+=0;
|
||||||
|
if(fb.ptr[(x*16)+8]==99) frame[x]+=16;
|
||||||
|
if(fb.ptr[(x*16)+8]==107) frame[x]+=32;
|
||||||
|
if(fb.ptr[(x*16)+8]==156) frame[x]+=48;
|
||||||
|
|
||||||
|
if(fb.ptr[(x*16)+12]==29) frame[x]+=0;
|
||||||
|
if(fb.ptr[(x*16)+12]==99) frame[x]+=64;
|
||||||
|
if(fb.ptr[(x*16)+12]==107) frame[x]+=128;
|
||||||
|
if(fb.ptr[(x*16)+12]==156) frame[x]+=192;
|
||||||
|
} */
|
||||||
|
|
||||||
|
int displaySize = 144*160;
|
||||||
|
|
||||||
|
for(x=0; x<displaySize; x++){
|
||||||
|
int color = fb.ptr[x*4];
|
||||||
|
|
||||||
|
if (color == 41) {
|
||||||
|
y=0;
|
||||||
|
} else if (color == 99) {
|
||||||
|
y=1;
|
||||||
|
} else if (color <= 107) {
|
||||||
|
y=2;
|
||||||
|
} else if (color <= 156) {
|
||||||
|
y=3;
|
||||||
|
} else {
|
||||||
|
y=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pixelModulo = x %4;
|
||||||
|
|
||||||
|
if (pixelModulo == 0) {
|
||||||
|
frame[x/4] =y;
|
||||||
|
} else if (pixelModulo == 1) {
|
||||||
|
frame[x/4]+=(y<<2);
|
||||||
|
} else if (pixelModulo == 2) {
|
||||||
|
frame[x/4]+=(y<<4);
|
||||||
|
} else if (pixelModulo == 3) {
|
||||||
|
frame[x/4]+=(y<<6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendto(fd, frame, BUFSIZE, 0, (struct sockaddr *)&remaddr, slen)==-1) {
|
||||||
|
printf("error sending frame\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*printf("send; %d\n",frameCount);*/
|
||||||
|
|
||||||
|
/* Stefan Ende */
|
||||||
}
|
}
|
||||||
|
|
||||||
void vid_end()
|
void vid_end()
|
||||||
|
|
Loading…
Reference in New Issue