コード例 #1
0
ファイル: zx128k.cs プロジェクト: Specchum/Zero-Emulator
        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!
            }
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
0
        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!
            }
        }