public override void UseSNA(SNA_SNAPSHOT sna) { if (sna == null) { return; } if (sna is SNA_128K) { I = sna.HEADER.I; _HL = sna.HEADER.HL_; _DE = sna.HEADER.DE_; _BC = sna.HEADER.BC_; _AF = sna.HEADER.AF_; HL = sna.HEADER.HL; DE = sna.HEADER.DE; BC = sna.HEADER.BC; IY = sna.HEADER.IY; IX = sna.HEADER.IX; IFF1 = ((sna.HEADER.IFF2 & 0x04) != 0); _R = sna.HEADER.R; AF = sna.HEADER.AF; SP = sna.HEADER.SP; interruptMode = sna.HEADER.IM; borderColour = sna.HEADER.BORDER; PC = ((SNA_128K)sna).PC; int val = ((SNA_128K)sna).PORT_7FFD; for (int f = 0; f < 16; f++) { Array.Copy(((SNA_128K)sna).RAM_BANK[f], 0, RAMpage[f], 0, 8192); } PageReadPointer[2] = RAMpage[(int)RAM_BANK.FIVE_LOW]; PageReadPointer[3] = RAMpage[(int)RAM_BANK.FIVE_HIGH]; PageReadPointer[4] = RAMpage[(int)RAM_BANK.TWO_LOW]; PageReadPointer[5] = RAMpage[(int)RAM_BANK.TWO_HIGH]; PageWritePointer[2] = RAMpage[(int)RAM_BANK.FIVE_LOW]; PageWritePointer[3] = RAMpage[(int)RAM_BANK.FIVE_HIGH]; PageWritePointer[4] = RAMpage[(int)RAM_BANK.TWO_LOW]; PageWritePointer[5] = RAMpage[(int)RAM_BANK.TWO_HIGH]; Out(0x7ffd, val); //Perform a dummy Out to setup the remaining stuff! } }
public override void UseSNA(SNA_SNAPSHOT sna) { if (sna == null) { return; } if (sna is SNA_48K) { lock (lockThis) { I = sna.HEADER.I; _HL = sna.HEADER.HL_; _DE = sna.HEADER.DE_; _BC = sna.HEADER.BC_; _AF = sna.HEADER.AF_; HL = sna.HEADER.HL; DE = sna.HEADER.DE; BC = sna.HEADER.BC; IY = sna.HEADER.IY; IX = sna.HEADER.IX; IFF1 = ((sna.HEADER.IFF2 & 0x04) != 0); if (IFF1) { lastOpcodeWasEI = 1; //force ignore re-triggered interrupts } _R = sna.HEADER.R; AF = sna.HEADER.AF; SP = sna.HEADER.SP; interruptMode = sna.HEADER.IM; borderColour = sna.HEADER.BORDER; int screenAddr = DisplayStart; for (int f = 0; f < 49152; ++f) { PokeByteNoContend(screenAddr + f, ((SNA_48K)sna).RAM[f]); } PC = PeekWordNoContend(SP); SP += 2; } } }
public override void UseSNA(SNA_SNAPSHOT sna) { if (sna == null) { return; } if (sna is SNA_128K) { I = sna.HEADER.I; _HL = sna.HEADER.HL_; _DE = sna.HEADER.DE_; _BC = sna.HEADER.BC_; _AF = sna.HEADER.AF_; HL = sna.HEADER.HL; DE = sna.HEADER.DE; BC = sna.HEADER.BC; IY = sna.HEADER.IY; IX = sna.HEADER.IX; IFF1 = ((sna.HEADER.IFF2 & 0x04) != 0); //Force ignore re-triggered interrupts when loading SNA. Causes Shock Medademo 128k SNA to work incorrectly otherwise. if (IFF1) { lastOpcodeWasEI = 1; } _R = sna.HEADER.R; AF = sna.HEADER.AF; SP = sna.HEADER.SP; interruptMode = sna.HEADER.IM; borderColour = sna.HEADER.BORDER; PC = ((SNA_128K)sna).PC; int val = ((SNA_128K)sna).PORT_7FFD; for (int f = 0; f < 16; f++) { Array.Copy(((SNA_128K)sna).RAM_BANK[f], 0, RAMpage[f], 0, 8192); } PageReadPointer[2] = RAMpage[(int)RAM_BANK.FIVE_LOW]; PageReadPointer[3] = RAMpage[(int)RAM_BANK.FIVE_HIGH]; PageReadPointer[4] = RAMpage[(int)RAM_BANK.TWO_LOW]; PageReadPointer[5] = RAMpage[(int)RAM_BANK.TWO_HIGH]; PageWritePointer[2] = RAMpage[(int)RAM_BANK.FIVE_LOW]; PageWritePointer[3] = RAMpage[(int)RAM_BANK.FIVE_HIGH]; PageWritePointer[4] = RAMpage[(int)RAM_BANK.TWO_LOW]; PageWritePointer[5] = RAMpage[(int)RAM_BANK.TWO_HIGH]; if (((SNA_128K)sna).TR_DOS != 0) { PageReadPointer[0] = ROMpage[4]; PageReadPointer[1] = ROMpage[5]; PageWritePointer[0] = JunkMemory[0]; PageWritePointer[1] = JunkMemory[1]; trDosPagedIn = true; BankInPage0 = ROM_TR_DOS; } Out(0x7ffd, val); //Perform a dummy Out to setup the remaining stuff! } }