commodore64: disk and tape framework added

This commit is contained in:
saxxonpike 2012-12-06 06:53:55 +00:00
parent cdd0e49726
commit 526ad358d1
7 changed files with 126 additions and 11 deletions

View File

@ -91,6 +91,8 @@
<Compile Include="Computers\Commodore64\Cartridge\Mapper0012.cs" />
<Compile Include="Computers\Commodore64\Cartridge\Mapper0013.cs" />
<Compile Include="Computers\Commodore64\Cartridge\Mapper0020.cs" />
<Compile Include="Computers\Commodore64\Disk\VIC1541.cs" />
<Compile Include="Computers\Commodore64\Disk\VIC1541.PLA.cs" />
<Compile Include="Computers\Commodore64\Media\PRG.cs" />
<Compile Include="Computers\Commodore64\Memory.cs" />
<Compile Include="Computers\Commodore64\Cartridge\Cart.cs" />
@ -119,6 +121,7 @@
<Compile Include="Computers\Commodore64\MOS\UserPort.cs" />
<Compile Include="Computers\Commodore64\MOS\Vic.cs" />
<Compile Include="Computers\Commodore64\MOS\Vic.VideoProvider.cs" />
<Compile Include="Computers\Commodore64\Tape\VIC1530.cs" />
<Compile Include="Consoles\Atari\2600\Atari2600.cs" />
<Compile Include="Consoles\Atari\2600\Atari2600.Core.cs" />
<Compile Include="Consoles\Atari\2600\Mappers\m3Fe.cs" />
@ -568,9 +571,7 @@
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Folder Include="Computers\Commodore64\Disk\" />
<Folder Include="Computers\Commodore64\Peripheral\" />
<Folder Include="Computers\Commodore64\Tape\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>

View File

@ -1,6 +1,8 @@
using BizHawk.Emulation.CPUs.M6502;
using BizHawk.Emulation.Computers.Commodore64.Cartridge;
using BizHawk.Emulation.Computers.Commodore64.Disk;
using BizHawk.Emulation.Computers.Commodore64.MOS;
using BizHawk.Emulation.Computers.Commodore64.Tape;
using System;
using System.Collections.Generic;
using System.IO;
@ -33,6 +35,8 @@ namespace BizHawk.Emulation.Computers.Commodore64
// ------------------------------------
private Motherboard board;
private VIC1541 disk;
private VIC1530 tape;
// ------------------------------------
@ -45,6 +49,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
board = new Motherboard(initRegion);
InitRoms();
board.Init();
InitDisk(initRegion);
InitMedia();
// configure video
@ -52,6 +57,19 @@ namespace BizHawk.Emulation.Computers.Commodore64
CoreOutputComm.VsyncNum = board.vic.CyclesPerSecond;
}
private void InitDisk(Region initRegion)
{
string sourceFolder = CoreInputComm.C64_FirmwaresPath;
if (sourceFolder == null)
sourceFolder = @".\C64\Firmwares";
string diskFile = "dos1541";
string diskPath = Path.Combine(sourceFolder, diskFile);
if (!File.Exists(diskPath)) HandleFirmwareError(diskFile);
byte[] diskRom = File.ReadAllBytes(diskPath);
disk = new VIC1541(initRegion, diskRom);
}
private void InitMedia()
{
switch (extension.ToUpper())
@ -79,6 +97,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
string basicFile = "basic";
string charFile = "chargen";
string kernalFile = "kernal";
string diskFile = "dos1541";
string basicPath = Path.Combine(sourceFolder, basicFile);
string charPath = Path.Combine(sourceFolder, charFile);
@ -91,7 +110,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
byte[] basicRom = File.ReadAllBytes(basicPath);
byte[] charRom = File.ReadAllBytes(charPath);
byte[] kernalRom = File.ReadAllBytes(kernalPath);
board.basicRom = new Chip23XX(Chip23XXmodel.Chip2364, basicRom);
board.kernalRom = new Chip23XX(Chip23XXmodel.Chip2364, kernalRom);
board.charRom = new Chip23XX(Chip23XXmodel.Chip2332, charRom);

View File

@ -235,14 +235,6 @@ namespace BizHawk.Emulation.Computers.Commodore64
serPort.DeviceWriteClock = ((bool val) => { cia1DataA = Port.ExternalWrite(cia1DataA, (byte)(cia1DataA | (val ? 0x40 : 0x00)), cia1DirA); });
serPort.DeviceWriteData = ((bool val) => { cia1DataA = Port.ExternalWrite(cia1DataA, (byte)(cia1DataA | (val ? 0x80 : 0x00)), cia1DirA); });
serPort.DeviceWriteSrq = ((bool val) => { cia0FlagSerial = val; cia0.FLAG = cia0FlagCassette & cia0FlagSerial; });
serPort.SystemReadAtn = (() => { return true; });
serPort.SystemReadClock = (() => { return true; });
serPort.SystemReadData = (() => { return true; });
serPort.SystemReadSrq = (() => { return true; });
serPort.SystemWriteAtn = ((bool val) => { });
serPort.SystemWriteClock = ((bool val) => { });
serPort.SystemWriteData = ((bool val) => { });
serPort.SystemWriteReset = ((bool val) => { });
sid.ReadPotX = (() => { return 0; });
sid.ReadPotY = (() => { return 0; });

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Disk
{
public class VIC1541PLA
{
}
}

View File

@ -0,0 +1,59 @@
using BizHawk.Emulation.CPUs.M6502;
using BizHawk.Emulation.Computers.Commodore64.MOS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Disk
{
public class VIC1541
{
public VIC1541Motherboard board;
public VIC1541(Region initRegion, byte[] rom)
{
board = new VIC1541Motherboard(initRegion);
}
public void ConnectSerial(SerialPort newSerialPort)
{
board.Connect(newSerialPort);
}
public void Execute()
{
}
}
public class VIC1541Motherboard
{
public MOS6502X cpu;
public VIC1541PLA pla;
public SerialPort serPort;
public MOS6522 via0;
public MOS6522 via1;
public VIC1541Motherboard(Region initRegion)
{
cpu = new MOS6502X();
pla = new VIC1541PLA();
serPort = new SerialPort();
via0 = new MOS6522();
via1 = new MOS6522();
}
public void Connect(SerialPort newSerPort)
{
serPort = newSerPort;
serPort.SystemReadAtn = (() => { return true; });
serPort.SystemReadClock = (() => { return true; });
serPort.SystemReadData = (() => { return true; });
serPort.SystemReadSrq = (() => { return true; });
serPort.SystemWriteAtn = ((bool val) => { });
serPort.SystemWriteClock = ((bool val) => { });
serPort.SystemWriteData = ((bool val) => { });
serPort.SystemWriteReset = ((bool val) => { });
}
}
}

View File

@ -30,6 +30,26 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
// Connect() needs to set System functions above
public SerialPort()
{
DeviceReadAtn = (() => { return true; });
DeviceReadClock = (() => { return true; });
DeviceReadData = (() => { return true; });
DeviceReadReset = (() => { return true; });
DeviceWriteAtn = ((bool val) => { });
DeviceWriteClock = ((bool val) => { });
DeviceWriteData = ((bool val) => { });
DeviceWriteSrq = ((bool val) => { });
SystemReadAtn = (() => { return true; });
SystemReadClock = (() => { return true; });
SystemReadData = (() => { return true; });
SystemReadSrq = (() => { return true; });
SystemWriteAtn = ((bool val) => { });
SystemWriteClock = ((bool val) => { });
SystemWriteData = ((bool val) => { });
SystemWriteReset = ((bool val) => { });
}
public void HardReset()
{
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64.Tape
{
// common tape drive that works with the C64.
public class VIC1530
{
}
}