static INT32 DrvFrame() { INT32 nInterleave = 4; if (DrvReset) { DrvDoReset(); } memset (DrvInputs, 0, 3); for (INT32 i = 0; i < 8; i++) { DrvInputs[0] |= (DrvJoy1[i] & 1) << i; DrvInputs[1] |= (DrvJoy2[i] & 1) << i; DrvInputs[2] |= (DrvJoy3[i] & 1) << i; } ToaClearOpposites(&DrvInputs[0]); ToaClearOpposites(&DrvInputs[1]); SekNewFrame(); ZetNewFrame(); SekOpen(0); ZetOpen(0); SekIdle(nCyclesDone[0]); ZetIdle(nCyclesDone[1]); nCyclesTotal[0] = (INT32)((INT64)10000000 * nBurnCPUSpeedAdjust / (0x0100 * REFRESHRATE)); nCyclesTotal[1] = INT32(28000000.0 / 8 / REFRESHRATE); SekSetCyclesScanline(nCyclesTotal[0] / 262); nToaCyclesDisplayStart = nCyclesTotal[0] - ((nCyclesTotal[0] * (TOA_VBLANK_LINES + 240)) / 262); nToaCyclesVBlankStart = nCyclesTotal[0] - ((nCyclesTotal[0] * TOA_VBLANK_LINES) / 262); bVBlank = false; for (INT32 i = 0; i < nInterleave; i++) { INT32 nNext; // Run 68000 nNext = (i + 1) * nCyclesTotal[0] / nInterleave; // Trigger VBlank interrupt if (nNext > nToaCyclesVBlankStart) { if (SekTotalCycles() < nToaCyclesVBlankStart) { nCyclesSegment = nToaCyclesVBlankStart - SekTotalCycles(); SekRun(nCyclesSegment); } if (pBurnDraw) { DrvDraw(); } memcpy (DrvSprBuf, DrvSprRAM, 0x1000); bVBlank = true; if (bEnableInterrupts) { SekSetIRQLine(4, SEK_IRQSTATUS_AUTO); } } nCyclesSegment = nNext - SekTotalCycles(); if (bVBlank || (!CheckSleep(0))) { SekRun(nCyclesSegment); } else { SekIdle(nCyclesSegment); } BurnTimerUpdateYM3812(i * (nCyclesTotal[1] / nInterleave)); } nToa1Cycles68KSync = SekTotalCycles(); BurnTimerEndFrameYM3812(nCyclesTotal[1]); if (pBurnSoundOut) BurnYM3812Update(pBurnSoundOut, nBurnSoundLen); nCyclesDone[0] = SekTotalCycles() - nCyclesTotal[0]; SekClose(); ZetClose(); return 0; }
int TmntFrame() { int nInterleave = 16; if (DrvReset) { TmntReset(); } TmntInpMake(); nCyclesTotal[0] = 8000000/60; nCyclesTotal[1] = 3579545/60; nCyclesDone[0] = nCyclesDone[1] = 0; int nSoundBufferPos = 0; SekOpen(0); ZetOpen(0); if (bInt5) { SekSetIRQLine(5, SEK_IRQSTATUS_AUTO); } for (int i = 0; i < nInterleave; i++) { int nCurrentCPU; int nNext; // Run 68000 nCurrentCPU = 0; nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave; nCyclesSegment = nNext - nCyclesDone[nCurrentCPU]; if (!CheckSleep(nCurrentCPU)) { // See if this CPU is busywaiting nCyclesDone[nCurrentCPU] += SekRun(nCyclesSegment); } else { nCyclesDone[nCurrentCPU] += nCyclesSegment; } // Run Z80 nCurrentCPU = 1; nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave; nCyclesSegment = nNext - nCyclesDone[nCurrentCPU]; nCyclesSegment = ZetRun(nCyclesSegment); nCyclesDone[nCurrentCPU] += nCyclesSegment; { // Render sound segment if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen / nInterleave; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); BurnYM2151Render(pSoundBuf, nSegmentLength); UPD7759Update(pSoundBuf, nSegmentLength); nSoundBufferPos += nSegmentLength; } } } { // Make sure the buffer is entirely filled. if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); if (nSegmentLength) { BurnYM2151Render(pSoundBuf, nSegmentLength); UPD7759Update(pSoundBuf, nSegmentLength); } } } // ZetClose(); SekClose(); // UPD7759Update(pBurnSoundOut, nBurnSoundLen); if (pBurnDraw) { TmntDraw(); // Draw screen if needed } return 0; }
static INT32 DrvInit() { INT32 nLen; Rallybik = 1; // bToaRotateScreen = true; BurnSetRefreshRate(REFRESHRATE); nBCU2ROMSize = 0x080000; nFCU2ROMSize = 0x080000; // Find out how much memory is needed AllMem = NULL; MemIndex(); nLen = MemEnd - (UINT8 *)0; if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) { return 1; } memset(AllMem, 0, nLen); MemIndex(); if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x040001, 2, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x040000, 3, 2)) return 1; if (BurnLoadRom(DrvZ80ROM, 4, 1)) return 1; ToaLoadTiles(BCU2ROM, 5, nBCU2ROMSize); // ToaLoadTiles(FCU2ROM, 9, nFCU2ROMSize); if (BurnLoadRom(FCU2ROM + 0x000000, 9, 1)) return 1; if (BurnLoadRom(FCU2ROM + 0x010000, 10, 1)) return 1; if (BurnLoadRom(FCU2ROM + 0x020000, 11, 1)) return 1; if (BurnLoadRom(FCU2ROM + 0x030000, 12, 1)) return 1; DrvSpriteDecode(); { SekInit(0, 0x68000); SekOpen(0); SekMapMemory(Drv68KROM, 0x000000, 0x00FFFF, SM_ROM); SekMapMemory(Drv68KROM + 0x40000, 0x040000, 0x07FFFF, SM_ROM); SekMapMemory(Drv68KRAM, 0x080000, 0x083FFF, SM_RAM); SekMapMemory(DrvSprRAM, 0x0c0000, 0x0C0FFF, SM_RAM); SekMapMemory(DrvPalRAM, 0x144000, 0x1447FF, SM_RAM); SekMapMemory(DrvPalRAM2, 0x146000, 0x1467FF, SM_RAM); SekSetReadWordHandler(0, rallybikReadWord); SekSetReadByteHandler(0, rallybikReadByte); SekSetWriteWordHandler(0, rallybikWriteWord); SekSetWriteByteHandler(0, rallybikWriteByte); SekMapHandler(1, 0x180000, 0x180FFF, SM_RAM); SekSetReadByteHandler(1, toaplan1ReadByteZ80RAM); SekSetReadWordHandler(1, toaplan1ReadWordZ80RAM); SekSetWriteByteHandler(1, toaplan1WriteByteZ80RAM); SekSetWriteWordHandler(1, toaplan1WriteWordZ80RAM); SekClose(); ZetInit(0); ZetOpen(0); ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM); ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM); ZetMapArea(0x8000, 0xffff, 0, DrvShareRAM); ZetMapArea(0x8000, 0xffff, 1, DrvShareRAM); ZetMapArea(0x8000, 0xffff, 2, DrvShareRAM); ZetSetOutHandler(rallybik_sound_write_port); ZetSetInHandler(rallybik_sound_read_port); ZetMemEnd(); ZetClose(); } nLayer0XOffset = 0x0d + 6; nLayer1XOffset = 0x0d + 4; nLayer2XOffset = 0x0d + 2; nLayer3XOffset = 0x0d + 0; nLayer0YOffset = nLayer1YOffset = nLayer2YOffset = nLayer3YOffset = 0x111; ToaInitBCU2(); ToaOpaquePriority = 0; nToaPalLen = nColCount; ToaPalSrc = DrvPalRAM; ToaPalSrc2 = DrvPalRAM2; ToaPalInit(); BurnYM3812Init(28000000 / 8, &toaplan1FMIRQHandler, &toaplan1SynchroniseStream, 0); BurnTimerAttachZetYM3812(28000000 / 8); bDrawScreen = true; DrvDoReset(); return 0; }
static int DrvFrame() { if (DrvReset) { DrvDoReset(); } ZetNewFrame(); { memset (DrvInputs, 0xff, 3); for (int i = 0; i < 8; i++) { DrvInputs[0] ^= (DrvJoy1[i] & 1) << i; DrvInputs[1] ^= (DrvJoy2[i] & 1) << i; DrvInputs[2] ^= (DrvJoy3[i] & 1) << i; } // Clear opposites if ((DrvInputs[1] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[1] & 0x0c) == 0) DrvInputs[1] |= 0x0c; if ((DrvInputs[2] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[2] & 0x0c) == 0) DrvInputs[1] |= 0x0c; } int nInterleave = 100; int nSoundBufferPos = 0; int nCyclesTotal[2] = { 3072000 / 60, 3072000 / 60 }; M6809Open(0); ZetOpen(0); for (int i = 0; i < nInterleave; i++) { M6809Run(nCyclesTotal[0] / nInterleave); BurnTimerUpdate(i * (nCyclesTotal[1] / nInterleave)); if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); BurnYM2203Update(pSoundBuf, nSegmentLength); nSoundBufferPos += nSegmentLength; } } BurnTimerEndFrame(nCyclesTotal[1]); if (*irq_enable) M6809SetIRQ(0, M6809_IRQSTATUS_AUTO); if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); if (nSegmentLength) { BurnYM2203Update(pSoundBuf, nSegmentLength); } } ZetClose(); M6809Close(); if (pBurnDraw) { DrvDraw(); } return 0; }
int TmntInit() { int nRet=0; int nLen=0; // Find out how much memory is needed Mem=NULL; MemIndex(); nLen=MemEnd-(unsigned char *)0; Mem=(unsigned char *)malloc(nLen); if (Mem==NULL) return 1; memset(Mem,0,nLen); // blank all memory MemIndex(); // Index the allocated memory TmntZ80Rom=(unsigned char *)malloc(0x08000); if (TmntZ80Rom==NULL) return 1; memset(TmntZ80Rom,0x11,0x08000); TmntZ80Ram=(unsigned char *)malloc(0x0800); if (TmntZ80Ram==NULL) return 1; memset(TmntZ80Ram,0x00,0x0800); nRet=LoadRoms(); if (nRet!=0) return 1; // Load the roms into memory SekInit(0,0x68000); // Allocate 68000 SekOpen(0); // Map in memory: // ----------------- Cpu 1 ------------------------ SekMapMemory(Tmnt68KROM01, 0x000000,0x05FFFF, SM_ROM); // 68000 Rom SekMapMemory(TmntRam06, 0x060000,0x063FFF, SM_RAM); SekMapMemory(TmntRam08, 0x080000,0x080FFF, SM_ROM); // Write goes through handler SekMapMemory(PriRam, 0x0c0000,0x0c00FF, SM_RAM); SekMapMemory(TmntRam10, 0x100000,0x107FFF, SM_RAM); SekMapMemory(K051960Ram, 0x140400,0x1407FF, SM_RAM); SekSetReadWordHandler(0,TmntReadWord); SekSetWriteWordHandler(0,TmntWriteWord); SekSetReadByteHandler(0,TmntReadByte); SekSetWriteByteHandler(0,TmntWriteByte); // ------------------------------------------------ // SekReset(); SekClose(); // Setup the Z80 emulation ZetInit(1); ZetOpen(0); ZetMapArea(0x0000, 0x7fff, 0, TmntZ80Rom); ZetMapArea(0x0000, 0x7fff, 2, TmntZ80Rom); ZetMapArea(0x8000, 0x87FF, 0, TmntZ80Ram); ZetMapArea(0x8000, 0x87FF,1, TmntZ80Ram); ZetMapArea(0x8000, 0x87FF, 2, TmntZ80Ram); ZetMemEnd(); ZetSetInHandler(tmntZ80In); ZetSetOutHandler(tmntZ80Out); ZetSetReadHandler(tmntZ80Read); ZetSetWriteHandler(tmntZ80Write); // ZetReset(); ZetClose(); // sound stuff // ym2151 BurnYM2151Init(3579545, 50.0); BurnYM2151SetIrqHandler(&tmntYM2151IRQHandler); // BurnYM2151Reset(); UPD7759Init(UPD7759_STANDARD_CLOCK, TmntSampleROM02); bInt5=0; GenericTilesInit(); TmntPalInit(); TmntReset(); return 0; }
static INT32 DrvInit() { INT32 nLen; #ifdef DRIVER_ROTATION bToaRotateScreen = false; #endif BurnSetRefreshRate(REFRESHRATE); nGP9001ROMSize[0] = 0x200000; // Find out how much memory is needed Mem = NULL; MemIndex(); nLen = MemEnd - (UINT8 *)0; if ((Mem = (UINT8 *)BurnMalloc(nLen)) == NULL) { return 1; } memset(Mem, 0, nLen); // blank all memory MemIndex(); // Index the allocated memory // Load the roms into memory if (LoadRoms()) { return 1; } { SekInit(0, 0x68000); // Allocate 68000 SekOpen(0); SekMapMemory(Rom01, 0x000000, 0x03FFFF, SM_ROM); // CPU 0 ROM SekMapMemory(Ram01, 0x080000, 0x082FFF, SM_RAM); SekMapMemory(RamPal, 0x0c0000, 0x0c0FFF, SM_RAM); // Palette RAM SekSetReadWordHandler(0, pipibibsReadWord); SekSetReadByteHandler(0, pipibibsReadByte); SekSetWriteWordHandler(0, pipibibsWriteWord); SekSetWriteByteHandler(0, pipibibsWriteByte); SekMapHandler(1, 0x190000, 0x190FFF, SM_RAM); SekSetReadByteHandler(1, toaplan1ReadByteZ80RAM); SekSetReadWordHandler(1, toaplan1ReadWordZ80RAM); SekSetWriteByteHandler(1, toaplan1WriteByteZ80RAM); SekSetWriteWordHandler(1, toaplan1WriteWordZ80RAM); SekClose(); ZetInit(0); ZetOpen(0); ZetMapArea(0x0000, 0x7fff, 0, RomZ80); ZetMapArea(0x0000, 0x7fff, 2, RomZ80); ZetMapArea(0x8000, 0x87ff, 0, RamZ80); ZetMapArea(0x8000, 0x87ff, 1, RamZ80); ZetMapArea(0x8000, 0x87ff, 2, RamZ80); ZetSetWriteHandler(pipibibs_sound_write); ZetSetReadHandler(pipibibs_sound_read); ZetMemEnd(); ZetClose(); } nToa1Cycles68KSync = 0; BurnYM3812Init(3375000, &toaplan1FMIRQHandler, pipibibsSynchroniseStream, 0); BurnTimerAttachZetYM3812(3375000); BurnYM3812SetRoute(BURN_SND_YM3812_ROUTE, 1.00, BURN_SND_ROUTE_BOTH); nSpriteYOffset = 0x0001; nLayer0XOffset = -0x01D6; nLayer1XOffset = -0x01D8; nLayer2XOffset = -0x01DA; ToaInitGP9001(); nToaPalLen = nColCount; ToaPalSrc = RamPal; ToaPalInit(); bDrawScreen = true; DrvDoReset(); // Reset machine return 0; }
static int DrvInit() { AllMem = NULL; MemIndex(); int nLen = MemEnd - (unsigned char *)0; if ((AllMem = (unsigned char *)malloc(nLen)) == NULL) return 1; memset(AllMem, 0, nLen); MemIndex(); { if (BurnLoadRom(DrvM6809ROM + 0x08000, 0, 1)) return 1; memcpy (DrvM6809ROM + 0x4000, DrvM6809ROM + 0xc000, 0x4000); if (BurnLoadRom(DrvM6809ROM + 0x0c000, 1, 1)) return 1; if (BurnLoadRom(DrvZ80ROM + 0x00000, 2, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x00000, 3, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x00000, 4, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x08000, 5, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00000, 6, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00100, 7, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00200, 8, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00300, 9, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00400, 10, 1)) return 1; DrvPaletteInit(); DrvGfxDecode(); } M6809Init(1); M6809Open(0); M6809MapMemory(DrvColRAM, 0x0000, 0x07ff, M6809_RAM); M6809MapMemory(DrvVidRAM, 0x0800, 0x0fff, M6809_RAM); M6809MapMemory(DrvSprRAM, 0x1000, 0x1fff, M6809_RAM); M6809MapMemory(DrvM6809ROM + 0x04000, 0x4000, 0xffff, M6809_ROM); M6809SetWriteByteHandler(scotrsht_main_write); M6809SetReadByteHandler(scotrsht_main_read); M6809Close(); ZetInit(1); ZetOpen(0); ZetMapArea(0x0000, 0x3fff, 0, DrvZ80ROM); ZetMapArea(0x0000, 0x3fff, 2, DrvZ80ROM); ZetMapArea(0x4000, 0x43ff, 0, DrvZ80RAM); ZetMapArea(0x4000, 0x43ff, 1, DrvZ80RAM); ZetMapArea(0x4000, 0x43ff, 2, DrvZ80RAM); ZetSetReadHandler(scotrsht_sound_read); ZetSetOutHandler(scotrsht_sound_out); ZetSetInHandler(scotrsht_sound_in); ZetMemEnd(); ZetClose(); BurnYM2203Init(1, 3072000, NULL, DrvSynchroniseStream, DrvGetTime, 0); BurnTimerAttachZet(3072000); DrvDoReset(); GenericTilesInit(); return 0; }
static INT32 DrvInit() { if (bBurnUseASMCPUEmulation) { bUseAsm68KCoreOldValue = bBurnUseASMCPUEmulation; bBurnUseASMCPUEmulation = false; } INT32 nLen; // bToaRotateScreen = true; BurnSetRefreshRate(REFRESHRATE); nBCU2ROMSize = 0x080000; nFCU2ROMSize = 0x080000; // Find out how much memory is needed AllMem = NULL; MemIndex(); nLen = MemEnd - (UINT8 *)0; if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) { return 1; } memset(AllMem, 0, nLen); MemIndex(); if (BurnLoadRom(Drv68KROM + 0x000001, 0, 2)) return 1; if (BurnLoadRom(Drv68KROM + 0x000000, 1, 2)) return 1; if (BurnLoadRom(DrvZ80ROM, 2, 1)) return 1; ToaLoadTiles(BCU2ROM, 5, nBCU2ROMSize); ToaLoadTiles(FCU2ROM, 9, nFCU2ROMSize); { SekInit(0, 0x68000); SekOpen(0); SekMapMemory(Drv68KROM, 0x000000, 0x03FFFF, SM_ROM); SekMapMemory(DrvPalRAM, 0x404000, 0x4047FF, SM_RAM); SekMapMemory(DrvPalRAM2, 0x406000, 0x4067FF, SM_RAM); SekMapMemory(Drv68KRAM, 0xc00000, 0xc03FFF, SM_RAM); SekSetReadWordHandler(0, demonwldReadWord); SekSetReadByteHandler(0, demonwldReadByte); SekSetWriteWordHandler(0, demonwldWriteWord); SekSetWriteByteHandler(0, demonwldWriteByte); SekMapHandler(1, 0x600000, 0x600FFF, SM_RAM); SekSetReadByteHandler(1, toaplan1ReadByteZ80RAM); SekSetReadWordHandler(1, toaplan1ReadWordZ80RAM); SekSetWriteByteHandler(1, toaplan1WriteByteZ80RAM); SekSetWriteWordHandler(1, toaplan1WriteWordZ80RAM); SekClose(); ZetInit(0); ZetOpen(0); ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM); ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM); ZetMapArea(0x8000, 0xffff, 0, DrvShareRAM); ZetMapArea(0x8000, 0xffff, 1, DrvShareRAM); ZetMapArea(0x8000, 0xffff, 2, DrvShareRAM); ZetSetOutHandler(demonwld_sound_write_port); ZetSetInHandler(demonwld_sound_read_port); ZetMemEnd(); ZetClose(); } ToaInitBCU2(); nToaPalLen = nColCount; ToaPalSrc = DrvPalRAM; ToaPalSrc2 = DrvPalRAM2; ToaPalInit(); ToaOpaquePriority = 2; BurnYM3812Init(28000000 / 8, &toaplan1FMIRQHandler, &toaplan1SynchroniseStream, 0); BurnTimerAttachZetYM3812(28000000 / 8); BurnYM3812SetRoute(BURN_SND_YM3812_ROUTE, 1.00, BURN_SND_ROUTE_BOTH); bDrawScreen = true; DrvDoReset(); return 0; }
static INT32 DrvInit() { BurnSetRefreshRate(60.00); AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1; memset(AllMem, 0, nLen); MemIndex(); { if (BurnLoadRom(DrvZ80ROM + 0x00000, 0, 1)) return 1; if (BurnLoadRom(DrvZ80ROM + 0x10000, 1, 1)) return 1; if (BurnLoadRom(t5182ROM + 0x00000, 2, 1)) return 1; if (BurnLoadRom(t5182ROM + 0x08000, 3, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x00000, 4, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x02000, 5, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x10000, 6, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x00000, 7, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x30000, 8, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x20000, 9, 1)) return 1; if (BurnLoadRom(DrvGfxROM2 + 0x00000, 10, 1)) return 1; if (BurnLoadRom(DrvGfxROM2 + 0x10000, 11, 1)) return 1; if (BurnLoadRom(DrvGfxROM2 + 0x20000, 12, 1)) return 1; if (BurnLoadRom(DrvGfxROM2 + 0x30000, 13, 1)) return 1; if (BurnLoadRom(DrvGfxROM3 + 0x00000, 14, 1)) return 1; if (BurnLoadRom(DrvGfxROM3 + 0x08000, 15, 1)) return 1; if (BurnLoadRom(DrvGfxROM4 + 0x00000, 16, 1)) return 1; if (BurnLoadRom(DrvGfxROM4 + 0x04000, 17, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00000, 18, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00100, 19, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00200, 20, 1)) return 1; if (BurnLoadRom(DrvColPROM + 0x00300, 21, 1)) return 1; decrypt_prg(); decrypt_gfx(); decrypt_snd(); DrvGfxDecode(); DrvPaletteInit(); } ZetInit(0); ZetOpen(0); ZetMapMemory(DrvZ80ROM, 0x0000, 0x7fff, MAP_ROM); ZetMapMemory(DrvZ80ROMDec, 0x0000, 0x7fff, MAP_FETCHOP); ZetMapMemory(DrvPalRAM, 0xd000, 0xd3ff, MAP_ROM); ZetMapMemory(DrvScrollRAM, 0xd400, 0xd4ff, MAP_RAM); ZetMapMemory(DrvVidRAM, 0xd800, 0xdfff, MAP_RAM); ZetMapMemory(DrvZ80RAM, 0xe000, 0xefff, MAP_RAM); ZetMapMemory(DrvSprRAM, 0xf000, 0xffff, MAP_RAM); ZetSetWriteHandler(darkmist_main_write); ZetSetReadHandler(darkmist_main_read); ZetClose(); t5182Init(1, 14318180/4); GenericTilesInit(); DrvDoReset(); return 0; }
void sms_init(void) { ZetInit(0); ZetOpen(0); /* Default: open bus */ data_bus_pullup = 0x00; data_bus_pulldown = 0x00; // bprintf(0, _T("Cart mapper: ")); /* Assign mapper */ if(cart.mapper == MAPPER_CODIES) { // bprintf(0, _T("codemasters\n")); ZetSetWriteHandler(writemem_mapper_codies); } else if (cart.mapper == MAPPER_MSX || cart.mapper == MAPPER_MSX_NEMESIS) { // bprintf(0, _T("msx\n")); ZetSetWriteHandler(writemem_mapper_msx); } else { // bprintf(0, _T("sega\n")); ZetSetWriteHandler(writemem_mapper_sega); } /* Force SMS (J) console type if FM sound enabled */ if(sms.use_fm) { sms.console = CONSOLE_SMSJ; sms.territory = TERRITORY_DOMESTIC; sms.display = DISPLAY_NTSC; } /* Initialize selected console emulation */ switch(sms.console) { case CONSOLE_SMS: ZetSetOutHandler(sms_port_w); ZetSetInHandler(sms_port_r); break; case CONSOLE_SMSJ: ZetSetOutHandler(smsj_port_w); ZetSetInHandler(smsj_port_r); break; case CONSOLE_SMS2: ZetSetOutHandler(sms_port_w); ZetSetInHandler(sms_port_r); data_bus_pullup = 0xFF; break; case CONSOLE_GG: ZetSetOutHandler(gg_port_w); ZetSetInHandler(gg_port_r); data_bus_pullup = 0xFF; break; case CONSOLE_GGMS: ZetSetOutHandler(ggms_port_w); ZetSetInHandler(ggms_port_r); data_bus_pullup = 0xFF; break; case CONSOLE_GEN: case CONSOLE_MD: ZetSetOutHandler(md_port_w); ZetSetInHandler(md_port_r); break; case CONSOLE_GENPBC: case CONSOLE_MDPBC: ZetSetOutHandler(md_port_w); ZetSetInHandler(md_port_r); data_bus_pullup = 0xFF; break; } ZetClose(); sms_reset(); }
static INT32 DrvFrame() { INT32 nInterleave = 8; if (DrvReset) { // Reset machine DrvDoReset(); } // Compile digital inputs DrvInput[0] = 0x00; // Buttons DrvInput[1] = 0x00; // Player 1 DrvInput[2] = 0x00; // Player 2 for (INT32 i = 0; i < 8; i++) { DrvInput[0] |= (DrvJoy1[i] & 1) << i; DrvInput[1] |= (DrvJoy2[i] & 1) << i; DrvInput[2] |= (DrvButton[i] & 1) << i; } ToaClearOpposites(&DrvInput[0]); ToaClearOpposites(&DrvInput[1]); SekNewFrame(); nCyclesTotal[0] = (INT32)((INT64)16000000 * nBurnCPUSpeedAdjust / (0x0100 * 60)); nCyclesTotal[1] = TOA_Z80_SPEED / 60; nCyclesDone[0] = nCyclesDone[1] = 0; SekOpen(0); SekSetCyclesScanline(nCyclesTotal[0] / 262); nToaCyclesDisplayStart = nCyclesTotal[0] - ((nCyclesTotal[0] * (TOA_VBLANK_LINES + 240)) / 262); nToaCyclesVBlankStart = nCyclesTotal[0] - ((nCyclesTotal[0] * TOA_VBLANK_LINES) / 262); bVBlank = false; INT32 nSoundBufferPos = 0; ZetOpen(0); for (INT32 i = 1; i <= nInterleave; i++) { INT32 nCurrentCPU; INT32 nNext; // Run 68000 nCurrentCPU = 0; nNext = i * nCyclesTotal[nCurrentCPU] / nInterleave; // Trigger VBlank interrupt if (!bVBlank && nNext > nToaCyclesVBlankStart) { if (nCyclesDone[nCurrentCPU] < nToaCyclesVBlankStart) { nCyclesSegment = nToaCyclesVBlankStart - nCyclesDone[nCurrentCPU]; if (!CheckSleep(nCurrentCPU)) { nCyclesDone[nCurrentCPU] += SekRun(nCyclesSegment); } else { nCyclesDone[nCurrentCPU] += SekIdle(nCyclesSegment); } } nIRQPending = 1; SekSetIRQLine(4, CPU_IRQSTATUS_AUTO); ToaBufferGP9001Sprites(); if (pBurnDraw) { DrvDraw(); // Draw screen if needed } bVBlank = true; } nCyclesSegment = nNext - nCyclesDone[nCurrentCPU]; if (!CheckSleep(nCurrentCPU)) { // See if this CPU is busywaiting nCyclesDone[nCurrentCPU] += SekRun(nCyclesSegment); nIRQPending = 0; } else { nCyclesDone[nCurrentCPU] += SekIdle(nCyclesSegment); } if ((i & 1) == 0) { // Run Z80 nCurrentCPU = 1; nNext = i * nCyclesTotal[nCurrentCPU] / nInterleave; nCyclesSegment = nNext - nCyclesDone[nCurrentCPU]; nCyclesDone[nCurrentCPU] += ZetRun(nCyclesSegment); // Render sound segment if (pBurnSoundOut) { INT32 nSegmentLength = (nBurnSoundLen * i / nInterleave) - nSoundBufferPos; INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); BurnYM2151Render(pSoundBuf, nSegmentLength); MSM6295Render(0, pSoundBuf, nSegmentLength); nSoundBufferPos += nSegmentLength; } } } SekClose(); { // Make sure the buffer is entirely filled. if (pBurnSoundOut) { INT32 nSegmentLength = nBurnSoundLen - nSoundBufferPos; INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); if (nSegmentLength) { BurnYM2151Render(pSoundBuf, nSegmentLength); MSM6295Render(0, pSoundBuf, nSegmentLength); } } } ZetClose(); return 0; }
int twinhawkFrame() { if (drvReset) { // Reset machine drvDoReset(); } twinhawkInpMake(); int nInterleave =10; SekNewFrame(); SekOpen(0); ZetOpen(0); nCyclesTotal[0] = 8000000/60; nCyclesTotal[1] = 4000000/60; rCyclesDone[0] = rCyclesDone[1] = 0; int nSoundBufferPos = 0; for (int i = 0; i < nInterleave; i++) { int nCurrentCPU; int nNext; // Run 68000 nCurrentCPU = 0; nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave; nCyclesSegment = nNext - rCyclesDone[nCurrentCPU]; rCyclesDone[nCurrentCPU] += SekRun(nCyclesSegment); // Run Z80 nCurrentCPU = 1; nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave; nCyclesSegment = nNext - rCyclesDone[nCurrentCPU]; nCyclesSegment = ZetRun(nCyclesSegment); rCyclesDone[nCurrentCPU] += nCyclesSegment; { // Render sound segment if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen / nInterleave; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); BurnYM2151Render(pSoundBuf, nSegmentLength); nSoundBufferPos += nSegmentLength; } } } { // Make sure the buffer is entirely filled. if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); if (nSegmentLength) { BurnYM2151Render(pSoundBuf, nSegmentLength); } } } SekSetIRQLine(2, SEK_IRQSTATUS_AUTO); ZetClose(); SekClose(); if (pBurnDraw) { twinhawkDraw(); // Draw screen if needed } return 0; }
int twinhawkInit() { int nRet=0; int nLen=0; //--------------Allocate Memory----------------- Mem=NULL; MemIndex(); nLen=MemEnd-(unsigned char *)0; Mem=(unsigned char *)malloc(nLen); if (Mem==NULL) return 1; memset(Mem,0,nLen); // blank all memory MemIndex(); // Index the allocated memory //--------------- Load Roms ------------------- nRet=LoadRoms(); if (nRet!=0) return 1; // Load the roms into memory // Map in memory: // ----------------- Cpu 1 68k ------------------------ SekInit(0, 0x68000); // Allocate 1 68000 SekOpen(0); SekMapMemory( Rom ,0x000000,0x3ffff,SM_ROM); // 68000 Rom SekMapMemory(twinhawk_src_pal,0xb00000,0xb00FFF,SM_RAM); SekMapMemory(sysbvidattr,0xd00000,0xd00fff,SM_RAM); SekMapMemory(sysbvidram,0xe00000,0xe03fff,SM_RAM); SekMapMemory(twinhawk_ram,0xf00000,0xf03fff,SM_RAM); SekSetReadWordHandler(0, twinhawkReadWord); SekSetWriteWordHandler(0, twinhawkWriteWord); SekSetReadByteHandler(0, twinhawkReadByte); SekSetWriteByteHandler(0, twinhawkWriteByte); SekClose(); // ------------------------------------------------ // ----------------- Cpu 2 Z80 ------------------------ ZetInit(1); ZetOpen(0); ZetSetReadHandler(twinhawkZ80Read); ZetSetWriteHandler(twinhawkZ80Write); ZetMapArea (0x0000,0x3FFF,0,z80_rom); ZetMapArea (0x0000,0x3FFF,2,z80_rom); // ZetMapArea (0x4000,0x7FFF,0,z80_rom+0x4000); // ZetMapArea (0x4000,0x7FFF,2,z80_rom+0x4000); ZetMapArea (0xc000,0xdfff,0,z80_ram); ZetMapArea (0xc000,0xdfff,2,z80_ram); ZetMapArea (0xc000,0xdfff,1,z80_ram); ZetMemEnd(); ZetMemCallback(0xe000, 0xFFFF, 0); // Read ZetMemCallback(0xe000, 0xFFFF, 1); // Write ZetReset(); ZetClose(); //------------------------------------------------- //-------- sound stuff ---------------------------- //---------- YM2151 Setup ---------------------- BurnYM2151Init(4000000, 50.0); BurnYM2151SetIrqHandler(&twinhawkYM2151IRQHandler); nCurrentBank=-1; //-------------------------------------------------- // ------- GFX Init ------------------- taito_pal=twinhawk_pal; SysXInit(0); drvDoReset(); return 0; }
int rastanInit() { int nRet=0; int nLen=0; //--------------Allocate Memory----------------- Mem=NULL; MemIndex(); nLen=MemEnd-(unsigned char *)0; Mem=(unsigned char *)malloc(nLen); if (Mem==NULL) return 1; memset(Mem,0,nLen); // blank all memory MemIndex(); // Index the allocated memory //--------------- Load Roms ------------------- nRet=LoadRoms(); if (nRet!=0) return 1; // Load the roms into memory taito_pal=rastan_pal; init_taito_gfx(); // Map in memory: // ----------------- Cpu 1 ------------------------ SekInit(0, 0x68000); // Allocate 1 68000 SekOpen(0); SekMapMemory( Rom ,0x000000,0x05ffff,SM_ROM); // 68000 Rom SekMapMemory(rastan_ram,0x10c000,0x10ffff,SM_RAM); //0x4000 SekMapMemory(rastan_src_pal,0x200000,0x200fff,SM_RAM); SekMapMemory(rastan_ram+0x4000,0x350008,0x350010,SM_RAM); SekMapMemory(PC090OJ_spritectrl,0x380000,0x380003,SM_RAM); SekMapMemory(rastan_ram+0x4012,0x3c0000,0x3c0003,SM_WRITE); SekMapMemory(PC080SN_word_0,0xc00000,0xc0ffff,SM_RAM); SekMapMemory(PC080SN_ctrl_word_0,0xc50000,0xc50003,SM_WRITE); SekMapMemory(PC090OJ_word_0,0xd00000,0xd03fff,SM_RAM); SekSetReadWordHandler(0, rastanReadWord); SekSetWriteWordHandler(0, rastanWriteWord); SekSetReadByteHandler(0, rastanReadByte); SekSetWriteByteHandler(0, rastanWriteByte); // ------------------------------------------------ SekClose(); ZetInit(1); ZetOpen(0); ZetSetReadHandler(RastanZ80Read); ZetSetWriteHandler(RastanZ80Write); ZetMapArea (0x0000,0x3FFF,0,z80_rom); ZetMapArea (0x0000,0x3FFF,2,z80_rom); ZetMapArea (0x4000,0x7FFF,0,z80_rom+0x4000); ZetMapArea (0x4000,0x7FFF,2,z80_rom+0x4000); ZetMapArea (0x8000,0x8FFF,0,z80_ram); ZetMapArea (0x8000,0x8FFF,1,z80_ram); ZetMemEnd(); ZetMemCallback(0x9000, 0xa001, 0); // Read ZetMemCallback(0x9000, 0xa001, 1); // Write ZetReset(); ZetClose(); //------------------------------------------------- BurnYM2151Init(4000000, 50.0); BurnYM2151SetIrqHandler(&RastanYM2151IRQHandler); BurnYM2151SetPortHandler(&rastanBankSwitch); nCurrentBank=0; // bank number 0 or 1 MSM5205Init(0,8000, 60,1); drvDoReset(); return 0; }
static INT32 DrvFrame() { INT32 nInterleave = 4; if (DrvReset) { // Reset machine DrvDoReset(); } // Compile digital inputs DrvInput[0] = 0x00; // Buttons DrvInput[1] = 0x00; // Player 1 DrvInput[4] = 0x00; // Player 2 for (INT32 i = 0; i < 8; i++) { DrvInput[0] |= (DrvJoy1[i] & 1) << i; DrvInput[1] |= (DrvJoy2[i] & 1) << i; DrvInput[4] |= (DrvButton[i] & 1) << i; } ToaClearOpposites(&DrvInput[0]); ToaClearOpposites(&DrvInput[1]); SekNewFrame(); ZetNewFrame(); SekOpen(0); ZetOpen(0); SekIdle(nCyclesDone[0]); ZetIdle(nCyclesDone[1]); nCyclesTotal[0] = (INT32)((INT64)10000000 * nBurnCPUSpeedAdjust / (0x0100 * REFRESHRATE)); nCyclesTotal[1] = INT32(28000000.0 / 8 / REFRESHRATE); SekSetCyclesScanline(nCyclesTotal[0] / 262); nToaCyclesDisplayStart = nCyclesTotal[0] - ((nCyclesTotal[0] * (TOA_VBLANK_LINES + 240)) / 262); nToaCyclesVBlankStart = nCyclesTotal[0] - ((nCyclesTotal[0] * TOA_VBLANK_LINES) / 262); bVBlank = false; for (INT32 i = 0; i < nInterleave; i++) { INT32 nNext; // Run 68000 nNext = (i + 1) * nCyclesTotal[0] / nInterleave; // Trigger VBlank interrupt if (nNext > nToaCyclesVBlankStart) { if (SekTotalCycles() < nToaCyclesVBlankStart) { nCyclesSegment = nToaCyclesVBlankStart - SekTotalCycles(); SekRun(nCyclesSegment); } if (pBurnDraw) { DrvDraw(); // Draw screen if needed } ToaBufferFCU2Sprites(); bVBlank = true; if (bEnableInterrupts) { SekSetIRQLine(4, SEK_IRQSTATUS_AUTO); } } nCyclesSegment = nNext - SekTotalCycles(); if (bVBlank || (!CheckSleep(0))) { // See if this CPU is busywaiting SekRun(nCyclesSegment); } else { SekIdle(nCyclesSegment); } BurnTimerUpdateYM3812(i * (nCyclesTotal[1] / nInterleave)); } nToa1Cycles68KSync = SekTotalCycles(); BurnTimerEndFrameYM3812(nCyclesTotal[1]); if (pBurnSoundOut) BurnYM3812Update(pBurnSoundOut, nBurnSoundLen); nCyclesDone[0] = SekTotalCycles() - nCyclesTotal[0]; nCyclesDone[1] = ZetTotalCycles() - nCyclesTotal[1]; // bprintf(PRINT_NORMAL, _T(" %i\n"), nCyclesDone[0]); ZetClose(); SekClose(); // ToaBufferFCU2Sprites(); return 0; }
INT32 Cps1Frame() { INT32 nDisplayEnd, nNext, i; if (CpsReset) { DrvReset(); } SekNewFrame(); if (Cps1Qs == 1) { QsndNewFrame(); } else { if (!Cps1DisablePSnd) { ZetOpen(0); PsndNewFrame(); } } if (CpsRunFrameStartCallbackFunction) { CpsRunFrameStartCallbackFunction(); } nCpsCycles = (INT32)((INT64)nCPS68KClockspeed * nBurnCPUSpeedAdjust >> 8); CpsRwGetInp(); // Update the input port values nDisplayEnd = (nCpsCycles * (nFirstLine + 224)) / nCpsNumScanlines; // Account for VBlank SekOpen(0); SekIdle(nCpsCyclesExtra); SekRun(nCpsCycles * nFirstLine / nCpsNumScanlines); // run 68K for the first few lines CpsObjGet(); // Get objects for (i = 0; i < 4; i++) { nNext = ((i + 1) * nCpsCycles) >> 2; // find out next cycle count to run to if (i == 2 && CpsRunFrameMiddleCallbackFunction) { CpsRunFrameMiddleCallbackFunction(); } if (SekTotalCycles() < nDisplayEnd && nNext > nDisplayEnd) { SekRun(nNext - nDisplayEnd); // run 68K memcpy(CpsSaveReg[0], CpsReg, 0x100); // Registers correct now SekSetIRQLine(Cps1VBlankIRQLine, SEK_IRQSTATUS_AUTO); // Trigger VBlank interrupt } SekRun(nNext - SekTotalCycles()); // run 68K // if (pBurnDraw) { // CpsDraw(); // Draw frame // } } //if (pBurnDraw) { CpsDraw(); // Draw frame if (Cps1Qs == 1) { QsndEndFrame(); } else { if (!Cps1DisablePSnd) { PsndSyncZ80(nCpsZ80Cycles); PsmUpdate(nBurnSoundLen); ZetClose(); } } if (CpsRunFrameEndCallbackFunction) { CpsRunFrameEndCallbackFunction(); } nCpsCyclesExtra = SekTotalCycles() - nCpsCycles; SekClose(); return 0; }
static INT32 DrvInit() { AllMem = NULL; MemIndex(); INT32 nLen = MemEnd - (UINT8 *)0; if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1; memset(AllMem, 0, nLen); MemIndex(); { if (BurnLoadRom(DrvZ80ROM0 + 0x000000, 0, 1)) return 1; memmove (DrvZ80ROM0 + 0x10000, DrvZ80ROM0 + 0x08000, 0x78000); if (BurnLoadRom(DrvZ80ROM1 + 0x000000, 1, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x000000, 2, 1)) return 1; memcpy (DrvSndROM + 0x000000, DrvGfxROM0 + 0x000000, 0x020000); memcpy (DrvSndROM + 0x040000, DrvGfxROM0 + 0x000000, 0x020000); memcpy (DrvSndROM + 0x080000, DrvGfxROM0 + 0x000000, 0x020000); memcpy (DrvSndROM + 0x0c0000, DrvGfxROM0 + 0x000000, 0x020000); memcpy (DrvSndROM + 0x020000, DrvGfxROM0 + 0x000000, 0x020000); memcpy (DrvSndROM + 0x060000, DrvGfxROM0 + 0x020000, 0x020000); memcpy (DrvSndROM + 0x0a0000, DrvGfxROM0 + 0x040000, 0x020000); memcpy (DrvSndROM + 0x0e0000, DrvGfxROM0 + 0x060000, 0x020000); if (BurnLoadRom(DrvGfxROM0 + 0x000000, 3, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x020000, 4, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x040000, 5, 1)) return 1; if (BurnLoadRom(DrvGfxROM0 + 0x060000, 6, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x000000, 7, 1)) return 1; if (BurnLoadRom(DrvGfxROM1 + 0x020000, 8, 1)) return 1; DrvGfxDecode(); } ZetInit(0); ZetOpen(0); ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM0); ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM0); ZetMapArea(0x8000, 0x87ff, 0, DrvPalRAM); // ZetMapArea(0x8000, 0x87ff, 1, DrvPalRAM); ZetMapArea(0x8000, 0x87ff, 2, DrvPalRAM); ZetMapArea(0x8800, 0x8fff, 0, DrvAttrRAM); ZetMapArea(0x8800, 0x8fff, 1, DrvAttrRAM); ZetMapArea(0x8800, 0x8fff, 2, DrvAttrRAM); ZetMapArea(0xa000, 0xbfff, 0, DrvZ80RAM0); ZetMapArea(0xa000, 0xbfff, 1, DrvZ80RAM0); ZetMapArea(0xa000, 0xbfff, 2, DrvZ80RAM0); ZetSetWriteHandler(speedspn_main_write); ZetSetOutHandler(speedspn_main_write_port); ZetSetInHandler(speedspn_main_read_port); ZetClose(); ZetInit(1); ZetOpen(1); ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM1); ZetMapArea(0x0000, 0x7fff, 2, DrvZ80ROM1); ZetMapArea(0x8000, 0x87ff, 0, DrvZ80RAM1); ZetMapArea(0x8000, 0x87ff, 1, DrvZ80RAM1); ZetMapArea(0x8000, 0x87ff, 2, DrvZ80RAM1); ZetSetWriteHandler(speedspn_sound_write); ZetSetReadHandler(speedspn_sound_read); ZetClose(); MSM6295Init(0, 1122000 / 132, 0); MSM6295SetRoute(0, 1.00, BURN_SND_ROUTE_BOTH); DrvDoReset(); GenericTilesInit(); return 0; }
INT32 Cps1Frame() { INT32 nDisplayEnd, nNext, i; if (CpsReset) { DrvReset(); } SekNewFrame(); if (Cps1Qs == 1) { QsndNewFrame(); } else { if (!Cps1DisablePSnd) { ZetOpen(0); PsndNewFrame(); } } if (CpsRunFrameStartCallbackFunction) { CpsRunFrameStartCallbackFunction(); } nCpsCycles = (INT32)((INT64)nCPS68KClockspeed * nBurnCPUSpeedAdjust >> 8); CpsRwGetInp(); // Update the input port values //HACK for 'follow finger' touchpad mode if (glob_ffingeron&&virtual_stick_on) { if ( wait_control==0 ) PatchMemory68KFFinger(); else wait_control--; } //8 bits => 0/1: touch off/on switch // 1/2: posX // 2/4: posY // 3/8: input0 // 4/16: input1 // 5/32: ... // 6/64: // 7/128: if ((glob_replay_mode==REPLAY_RECORD_MODE)&&(glob_replay_data_index<MAX_REPLAY_DATA_BYTES-MAX_REPLAY_FRAME_SIZE)) { if (glob_replay_flag) { //STORE FRAME_INDEX glob_replay_data_stream[glob_replay_data_index++]=glob_framecpt&0xFF; //frame index glob_replay_data_stream[glob_replay_data_index++]=(glob_framecpt>>8)&0xFF; //frame index glob_replay_data_stream[glob_replay_data_index++]=(glob_framecpt>>16)&0xFF; //frame index glob_replay_data_stream[glob_replay_data_index++]=(glob_framecpt>>24)&0xFF; //frame index //STORE FLAG glob_replay_data_stream[glob_replay_data_index++]=glob_replay_flag; if (glob_replay_flag&REPLAY_FLAG_POSX) { //MEMX HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=glob_replay_last_dx16&0xFF; glob_replay_data_stream[glob_replay_data_index++]=(glob_replay_last_dx16>>8)&0xFF; } if (glob_replay_flag&REPLAY_FLAG_POSY) { //MEMY HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=glob_replay_last_dy16&0xFF; glob_replay_data_stream[glob_replay_data_index++]=(glob_replay_last_dy16>>8)&0xFF; } if (glob_replay_flag&REPLAY_FLAG_IN0) { //INPUT0 HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=last_DrvInput[0]; } if (glob_replay_flag&REPLAY_FLAG_IN1) { //INPUT1 HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=last_DrvInput[1]; } if (glob_replay_flag&REPLAY_FLAG_IN2) { //INPUT2 HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=last_DrvInput[2]; } if (glob_replay_flag&REPLAY_FLAG_IN3) { //INPUT3 HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=last_DrvInput[3]; } if (glob_replay_flag&REPLAY_FLAG_IN4) { //INPUT4 HAS CHANGED glob_replay_data_stream[glob_replay_data_index++]=last_DrvInput[4]; } }