#include #include #include "emu.h" #include #include #include #include #include "config.h" #include "m68k.h" #include "disp.h" #include "iwm.h" #include "via.h" unsigned char *macRom; unsigned char *macRam; int rom_remap, video_remap=0, audio_remap=0; unsigned int m68k_read_memory_8(unsigned int address) { unsigned int ret; unsigned int pc=m68k_get_reg(NULL, M68K_REG_PC); if (address < 0x400000) { if (rom_remap) { ret=macRom[address & (TME_ROMSIZE-1)]; } else { ret=macRam[address & (TME_RAMSIZE-1)]; } } else if (address >= 0x600000 && address < 0xA00000) { 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 if (address >= 0xE80000 && address < 0xf00000) { ret=viaRead((address>>8)&0xf); } else if (address >= 0xc00000 && address < 0xe00000) { ret=iwmRead((address>>9)&0xf); } else { printf("PC %x: Read from %x\n", pc, address); ret=0xaa; } // printf("Rd %x = %x\n", address, ret); return ret; } void m68k_write_memory_8(unsigned int address, unsigned int value) { unsigned int pc=m68k_get_reg(NULL, M68K_REG_PC); if (address < 0x400000) { macRam[address & (TME_RAMSIZE-1)]=value; } else if (address >= 0x600000 && address < 0xA00000) { macRam[address & (TME_RAMSIZE-1)]=value; } else if (address >= 0xE80000 && address < 0xf00000) { viaWrite((address>>8)&0xf, value); } else if (address >= 0xc00000 && address < 0xe00000) { iwmWrite((address>>9)&0xf, value); } else { printf("PC %x: Write to %x: %x\n", pc, address, value); } } void tmeStartEmu(void *rom) { macRom=rom; macRam=malloc(TME_RAMSIZE); for (int x=0; x>16); m68k_write_memory_16(address+2, value); } void m68k_write_memory_16(unsigned int address, unsigned int value) { m68k_write_memory_8(address, (value>>8)&0xff); m68k_write_memory_8(address+1, value&0xff); } void viaCbPortAWrite(unsigned int val) { video_remap=(val&(1<<6))?1:0; rom_remap=(val&(1<<4))?1:0; audio_remap=(val&(1<<3))?1:0; } void viaCbPortBWrite(unsigned int val) { }