Fixed per scanline interrupts. No artifacts in MMCOI

This commit is contained in:
2026-05-15 23:38:40 +01:00
parent 4e745b4fbc
commit ec40e04ff3
8 changed files with 263 additions and 104 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.IO;
using Core.Interfaces;
using Core.Io;
@@ -97,6 +98,32 @@ namespace Core.Cpu
TotalTStates = 0;
}
public void SaveState(BinaryWriter bw)
{
bw.Write(TotalTStates);
bw.Write(InterruptMode);
bw.Write(IFF1);
bw.Write(IFF2);
bw.Write(InterruptRequested);
bw.Write(AF.Word); bw.Write(BC.Word); bw.Write(DE.Word); bw.Write(HL.Word);
bw.Write(AF_Prime.Word); bw.Write(BC_Prime.Word); bw.Write(DE_Prime.Word); bw.Write(HL_Prime.Word);
bw.Write(IX.Word); bw.Write(IY.Word);
bw.Write(PC); bw.Write(SP); bw.Write(I); bw.Write(R);
}
public void LoadState(BinaryReader br)
{
TotalTStates = br.ReadInt64();
InterruptMode = br.ReadInt32();
IFF1 = br.ReadBoolean();
IFF2 = br.ReadBoolean();
InterruptRequested = br.ReadBoolean();
AF.Word = br.ReadUInt16(); BC.Word = br.ReadUInt16(); DE.Word = br.ReadUInt16(); HL.Word = br.ReadUInt16();
AF_Prime.Word = br.ReadUInt16(); BC_Prime.Word = br.ReadUInt16(); DE_Prime.Word = br.ReadUInt16(); HL_Prime.Word = br.ReadUInt16();
IX.Word = br.ReadUInt16(); IY.Word = br.ReadUInt16();
PC = br.ReadUInt16(); SP = br.ReadUInt16(); I = br.ReadByte(); R = br.ReadByte();
}
private void ApplyWaitStates(ushort address)
{
// If a system (like a ULA) is attached and listening, ask it for the delay