From 1dd8ded3279168ac19c993872fb142bac526b2e6 Mon Sep 17 00:00:00 2001 From: Jeroen Domburg Date: Fri, 3 Mar 2017 16:29:47 +0800 Subject: [PATCH] Sad mac, yay! --- Makefile | 4 ++-- disp.c | 8 ++++---- emu.c | 22 +++++++++++++++------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index b10aae1..1575c75 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ TARGET:=tme MUSASHI_GEN_SRC:=musashi/m68kops.c musashi/m68kopac.c musashi/m68kopdm.c musashi/m68kopnz.c OBJ:=$(MUSASHI_GEN_SRC:%.x=%.o) musashi/m68kcpu.o main.o emu.o disp.o #musashi/m68kdasm.o -CFLAGS=-Wall -I. -I./musashi -ggdb -LDFLAGS= +CFLAGS=-Wall -I. -I./musashi -ggdb `sdl2-config --cflags` +LDFLAGS=`sdl2-config --libs` $(TARGET): $(OBJ) $(CC) -o $(@) $(CFLAGS) $(LDFLAGS) $^ diff --git a/disp.c b/disp.c index 47baf3b..6de2837 100644 --- a/disp.c +++ b/disp.c @@ -1,6 +1,6 @@ #include #include -#include +#include const int SCREEN_WIDTH = 512; const int SCREEN_HEIGHT = 342; @@ -25,12 +25,12 @@ void dispInit() { void dispDraw(char *mem) { int x, y, z; - uint32_t pixels=drwsurf->pixels; SDL_LockSurface(drwsurf); + uint32_t *pixels=(uint32_t*)drwsurf->pixels; for (y=0; y>=1) { + if (*mem&z) *pixels=0xFF000000; else *pixels=0xFFFFFFFF; pixels++; } mem++; diff --git a/emu.c b/emu.c index 862b0d3..056fde2 100644 --- a/emu.c +++ b/emu.c @@ -17,17 +17,20 @@ int rom_remap; unsigned int m68k_read_memory_8(unsigned int address) { unsigned int ret; unsigned int pc=m68k_get_reg(NULL, M68K_REG_PC); - if (rom_remap && address < TME_ROMSIZE) { - ret=macRom[address]; - } else if (address < TME_RAMSIZE) { - ret=macRam[address]; + if (rom_remap && address < 0x400000) { + ret=macRom[address & (TME_ROMSIZE-1)]; + } else if (rom_remap && address > 0x600000 && address <= 0xA00000) { + ret=macRam[address & (TME_RAMSIZE-1)]; + } else if (address < 0x400000) { + ret=macRam[address & (TME_RAMSIZE-1)]; } else if (address>0x400000 && address<0x41FFFF) { int romAdr=address-0x400000; if (romAdr>TME_ROMSIZE) printf("PC %x:Huh? Read from ROM mirror (%x)\n", pc, address); ret=macRom[romAdr&(TME_ROMSIZE-1)]; +// rom_remap=0; //HACK } else { printf("PC %x: Read from %x\n", pc, address); - ret=0xff; + ret=rand(); } // printf("Rd %x = %x\n", address, ret); return ret; @@ -35,8 +38,10 @@ unsigned int m68k_read_memory_8(unsigned int address) { void m68k_write_memory_8(unsigned int address, unsigned int value) { unsigned int pc=m68k_get_reg(NULL, M68K_REG_PC); - if (address < TME_RAMSIZE) { - macRam[address]=value; + if (address < 0x400000) { + macRam[address & (TME_RAMSIZE-1)]=value; + } else if (rom_remap && address > 0x600000 && address <= 0xA00000) { + macRam[address & (TME_RAMSIZE-1)]=value; } else { printf("PC %x: Write to %x: %x\n", pc, address, value); } @@ -46,6 +51,7 @@ void m68k_write_memory_8(unsigned int address, unsigned int value) { void tmeStartEmu(void *rom) { macRom=rom; macRam=malloc(TME_RAMSIZE); + for (int x=0; x