BizHawk/BizHawk.Emulation.Cores/Computers/Commodore64/Experimental/C64.Glue.cs

162 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Emulation.Cores.Computers.Commodore64.Experimental
{
public sealed partial class C64
{
public void InitializeConnections()
{
cia1.InputCNT = user.OutputCNT1;
cia1.InputFlag = ReadCia1Flag;
cia1.InputPortA = ReadCia1PortA;
cia1.InputPortB = ReadCia1PortB;
cia1.InputSP = user.OutputSP1;
cia2.InputCNT = user.OutputCNT2;
cia2.InputFlag = user.OutputFLAG2;
cia2.InputPortA = ReadCia2PortA;
cia2.InputPortB = user.OutputData;
cia2.InputSP = user.OutputSP2;
cpu.InputAEC = vic.OutputAEC;
cpu.InputIRQ = ReadIRQ;
cpu.InputNMI = ReadNMI;
cpu.InputPort = ReadCPUPort;
cpu.InputRDY = vic.OutputBA;
cpu.ReadMemory = pla.ReadMemory;
cpu.WriteMemory = pla.WriteMemory;
//expansion.InputBA = vic.OutputBA;
//expansion.InputData = ReadData;
//expansion.InputHiExpansion = ReadHiExpansion;
//expansion.InputHiRom = pla.OutputRomHi;
//expansion.InputIRQ = ReadIRQ;
//expansion.InputLoExpansion = ReadLoExpansion;
//expansion.InputLoRom = pla.OutputRomLo;
//expansion.InputNMI = ReadNMI;
//pla.InputAEC = vic.OutputAEC;
//pla.InputBA = vic.OutputBA;
//pla.InputCharen = ReadCharen;
//pla.InputExRom = expansion.OutputExRom;
//pla.InputGame = expansion.OutputGame;
//pla.InputHiRam = ReadHiRam;
//pla.InputLoRam = ReadLoRam;
//pla.InputVA = ReadVicAddress;
//serial.InputATN = ReadSerialATN;
//serial.InputClock = ReadSerialCLK;
//serial.InputData = ReadSerialDTA;
//user.InputCNT1 = cia1.OutputCNT;
//user.InputCNT2 = cia2.OutputCNT;
//user.InputData = cia2.OutputPortB;
//user.InputPA2 = ReadUserPA2;
//user.InputPC2 = cia2.OutputPC;
//user.InputSP1 = cia1.OutputSP;
//user.InputSP2 = cia2.OutputSP;
}
bool ReadCia1Cnt()
{
// this pin is not connected
return true;
}
bool ReadCia1Flag()
{
return serial.SRQ && cassette.Data;
}
int ReadCia1PortA()
{
return joystickB.Data & keyboard.Column;
}
int ReadCia1PortB()
{
return joystickA.Data & keyboard.Row;
}
int ReadCia2PortA()
{
int result = 0xFF;
if (!user.PA2)
result &= 0xFB;
if (!serial.Clock)
result &= 0xBF;
if (!serial.Data)
result &= 0x7F;
return result;
}
int ReadCPUPort()
{
return 0xFF;
}
bool ReadHiExpansion()
{
int addr = 0xFFFF;
return (addr >= 0xDF00 && addr < 0xE000);
}
bool ReadIRQ()
{
return (
cia1.IRQ &&
vic.IRQ &&
expansion.IRQ
);
}
bool ReadLoExpansion()
{
int addr = 0xFFFF;
return (addr >= 0xDE00 && addr < 0xDF00);
}
bool ReadLoRam()
{
return (cpu.Port & 0x1) != 0;
}
bool ReadNMI()
{
return (
cia2.IRQ &&
expansion.NMI
);
}
bool ReadSerialATN()
{
return (cia2.PortA & 0x08) != 0;
}
bool ReadSerialCLK()
{
return (cia2.PortA & 0x10) != 0;
}
bool ReadSerialDTA()
{
return (cia2.PortA & 0x20) != 0;
}
bool ReadUserPA2()
{
return (cia2.PortA & 0x04) != 0;
}
int ReadVicAddress()
{
//return (vic.Address | ((cia2.PortA & 0x3) << 14));
return 0xFFFF;
}
}
}