mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-26 09:29:45 +00:00
Merge pull request #1004 from TomHarte/FastRAM
Adds fast RAM to the Amiga, along with size selection for both fast & chip.
This commit is contained in:
commit
7ce335d9da
@ -17,7 +17,28 @@ namespace Static {
|
|||||||
namespace Amiga {
|
namespace Amiga {
|
||||||
|
|
||||||
struct Target: public Analyser::Static::Target, public Reflection::StructImpl<Target> {
|
struct Target: public Analyser::Static::Target, public Reflection::StructImpl<Target> {
|
||||||
Target() : Analyser::Static::Target(Machine::Amiga) {}
|
ReflectableEnum(ChipRAM,
|
||||||
|
FiveHundredAndTwelveKilobytes,
|
||||||
|
OneMegabyte,
|
||||||
|
TwoMegabytes);
|
||||||
|
ReflectableEnum(FastRAM,
|
||||||
|
None,
|
||||||
|
OneMegabyte,
|
||||||
|
TwoMegabytes,
|
||||||
|
FourMegabytes,
|
||||||
|
EightMegabytes);
|
||||||
|
|
||||||
|
ChipRAM chip_ram = ChipRAM::FiveHundredAndTwelveKilobytes;
|
||||||
|
FastRAM fast_ram = FastRAM::EightMegabytes;
|
||||||
|
|
||||||
|
Target() : Analyser::Static::Target(Machine::Amiga) {
|
||||||
|
if(needs_declare()) {
|
||||||
|
DeclareField(fast_ram);
|
||||||
|
DeclareField(chip_ram);
|
||||||
|
AnnounceEnum(FastRAM);
|
||||||
|
AnnounceEnum(ChipRAM);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ class ConcreteMachine:
|
|||||||
public:
|
public:
|
||||||
ConcreteMachine(const Analyser::Static::Amiga::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) :
|
ConcreteMachine(const Analyser::Static::Amiga::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) :
|
||||||
mc68000_(*this),
|
mc68000_(*this),
|
||||||
|
memory_(target.chip_ram, target.fast_ram),
|
||||||
chipset_(memory_, PALClockRate)
|
chipset_(memory_, PALClockRate)
|
||||||
{
|
{
|
||||||
// Temporary: use a hard-coded Kickstart selection.
|
// Temporary: use a hard-coded Kickstart selection.
|
||||||
@ -146,6 +147,13 @@ class ConcreteMachine:
|
|||||||
// LOG("CIA " << (((address >> 12) & 3)^3) << " " << (cycle.operation & Microcycle::Read ? "read " : "write ") << std::dec << (reg & 0xf) << " of " << PADHEX(4) << +cycle.value16());
|
// LOG("CIA " << (((address >> 12) & 3)^3) << " " << (cycle.operation & Microcycle::Read ? "read " : "write ") << std::dec << (reg & 0xf) << " of " << PADHEX(4) << +cycle.value16());
|
||||||
} else if(address >= 0xdf'f000 && address <= 0xdf'f1be) {
|
} else if(address >= 0xdf'f000 && address <= 0xdf'f1be) {
|
||||||
chipset_.perform(cycle);
|
chipset_.perform(cycle);
|
||||||
|
} else if(address >= 0xe8'0000 && address < 0xe9'0000) {
|
||||||
|
// This is the Autoconf space; right now the only
|
||||||
|
// Autoconf device this emulator implements is fast RAM,
|
||||||
|
// which if present is provided as part of the memory map.
|
||||||
|
//
|
||||||
|
// Relevant quote: "The Zorro II configuration space is the 64K memory block $00E8xxxx"
|
||||||
|
memory_.perform(cycle);
|
||||||
} else {
|
} else {
|
||||||
// This'll do for open bus, for now.
|
// This'll do for open bus, for now.
|
||||||
if(cycle.operation & Microcycle::Read) {
|
if(cycle.operation & Microcycle::Read) {
|
||||||
|
@ -9,6 +9,12 @@
|
|||||||
#ifndef MemoryMap_hpp
|
#ifndef MemoryMap_hpp
|
||||||
#define MemoryMap_hpp
|
#define MemoryMap_hpp
|
||||||
|
|
||||||
|
#include "../../Analyser/Static/Amiga/Target.hpp"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <cassert>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace Amiga {
|
namespace Amiga {
|
||||||
|
|
||||||
class MemoryMap {
|
class MemoryMap {
|
||||||
@ -18,16 +24,17 @@ class MemoryMap {
|
|||||||
static constexpr auto PermitReadWrite = PermitRead | PermitWrite;
|
static constexpr auto PermitReadWrite = PermitRead | PermitWrite;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// TODO: decide what of the below I want to be dynamic.
|
|
||||||
std::array<uint8_t, 1024*1024> chip_ram{};
|
|
||||||
std::array<uint8_t, 512*1024> kickstart{0xff};
|
std::array<uint8_t, 512*1024> kickstart{0xff};
|
||||||
|
std::vector<uint8_t> chip_ram{};
|
||||||
|
|
||||||
struct MemoryRegion {
|
struct MemoryRegion {
|
||||||
uint8_t *contents = nullptr;
|
uint8_t *contents = nullptr;
|
||||||
unsigned int read_write_mask = 0;
|
unsigned int read_write_mask = 0;
|
||||||
} regions[64]; // i.e. top six bits are used as an index.
|
} regions[64]; // i.e. top six bits are used as an index.
|
||||||
|
|
||||||
MemoryMap() {
|
using FastRAM = Analyser::Static::Amiga::Target::FastRAM;
|
||||||
|
using ChipRAM = Analyser::Static::Amiga::Target::ChipRAM;
|
||||||
|
MemoryMap(ChipRAM chip_ram_size, FastRAM fast_ram_size) {
|
||||||
// Address spaces that matter:
|
// Address spaces that matter:
|
||||||
//
|
//
|
||||||
// 00'0000 – 08'0000: chip RAM. [or overlayed KickStart]
|
// 00'0000 – 08'0000: chip RAM. [or overlayed KickStart]
|
||||||
@ -45,6 +52,42 @@ class MemoryMap {
|
|||||||
// f8'0000 — : 256kb Kickstart if 2.04 or higher.
|
// f8'0000 — : 256kb Kickstart if 2.04 or higher.
|
||||||
// fc'0000 – : 256kb Kickstart otherwise.
|
// fc'0000 – : 256kb Kickstart otherwise.
|
||||||
set_region(0xfc'0000, 0x1'00'0000, kickstart.data(), PermitRead);
|
set_region(0xfc'0000, 0x1'00'0000, kickstart.data(), PermitRead);
|
||||||
|
|
||||||
|
switch(chip_ram_size) {
|
||||||
|
default:
|
||||||
|
case ChipRAM::FiveHundredAndTwelveKilobytes:
|
||||||
|
chip_ram.resize(512 * 1024);
|
||||||
|
break;
|
||||||
|
case ChipRAM::OneMegabyte:
|
||||||
|
chip_ram.resize(1 * 1024 * 1024);
|
||||||
|
break;
|
||||||
|
case ChipRAM::TwoMegabytes:
|
||||||
|
chip_ram.resize(2 * 1024 * 1024);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(fast_ram_size) {
|
||||||
|
default:
|
||||||
|
fast_autoconf_visible_ = false;
|
||||||
|
break;
|
||||||
|
case FastRAM::OneMegabyte:
|
||||||
|
fast_ram_.resize(1 * 1024 * 1024);
|
||||||
|
fast_ram_size_ = 5;
|
||||||
|
break;
|
||||||
|
case FastRAM::TwoMegabytes:
|
||||||
|
fast_ram_.resize(2 * 1024 * 1024);
|
||||||
|
fast_ram_size_ = 6;
|
||||||
|
break;
|
||||||
|
case FastRAM::FourMegabytes:
|
||||||
|
fast_ram_.resize(4 * 1024 * 1024);
|
||||||
|
fast_ram_size_ = 7;
|
||||||
|
break;
|
||||||
|
case FastRAM::EightMegabytes:
|
||||||
|
fast_ram_.resize(8 * 1024 * 1024);
|
||||||
|
fast_ram_size_ = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +107,75 @@ class MemoryMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Performs the provided microcycle, which the caller guarantees to be a memory access,
|
||||||
|
/// and in the Zorro register range.
|
||||||
|
bool perform(const CPU::MC68000::Microcycle &cycle) {
|
||||||
|
if(!fast_autoconf_visible_) return false;
|
||||||
|
|
||||||
|
const uint32_t register_address = *cycle.address & 0xfe;
|
||||||
|
|
||||||
|
using Microcycle = CPU::MC68000::Microcycle;
|
||||||
|
if(cycle.operation & Microcycle::Read) {
|
||||||
|
// Re: Autoconf:
|
||||||
|
//
|
||||||
|
// "All read registers physically return only the top 4 bits of data, on D31-D28";
|
||||||
|
// (this is from Zorro III documentation; I'm assuming it to be D15–D11 for the
|
||||||
|
// 68000's 16-bit bus);
|
||||||
|
//
|
||||||
|
// "Every AUTOCONFIG register is logically considered to be 8 bits wide; the
|
||||||
|
// 8 bits actually being nybbles from two paired addresses."
|
||||||
|
|
||||||
|
uint8_t value = 0xf;
|
||||||
|
switch(register_address) {
|
||||||
|
default: break;
|
||||||
|
|
||||||
|
case 0x00: // er_Type (high)
|
||||||
|
value =
|
||||||
|
0xc | // Zoro II-style PIC.
|
||||||
|
0x2; // Memory will be linked into the free pool
|
||||||
|
break;
|
||||||
|
case 0x02: // er_Type (low)
|
||||||
|
value = fast_ram_size_;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// er_Manufacturer
|
||||||
|
//
|
||||||
|
// On the manufacturer number: this is supposed to be assigned
|
||||||
|
// by Commodore. TODO: find and crib a real fast RAM number, if it matters.
|
||||||
|
//
|
||||||
|
// (0xffff seems to be invalid, so _something_ needs to be supplied)
|
||||||
|
case 0x10: case 0x12:
|
||||||
|
value = 0xa; // Manufacturer's number, high byte.
|
||||||
|
break;
|
||||||
|
case 0x14: case 0x16:
|
||||||
|
value = 0xb; // Manufacturer's number, low byte.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shove the value into the top of the data bus.
|
||||||
|
cycle.set_value16(uint16_t(0x0fff | (value << 12)));
|
||||||
|
} else {
|
||||||
|
fast_autoconf_visible_ &= !(register_address >= 0x4c && register_address < 0x50);
|
||||||
|
|
||||||
|
switch(register_address) {
|
||||||
|
default: break;
|
||||||
|
|
||||||
|
case 0x48: { // ec_BaseAddress (A23–A16)
|
||||||
|
const auto address = uint32_t(cycle.value8_high()) << 16;
|
||||||
|
set_region(address, uint32_t(address + fast_ram_.size()), fast_ram_.data(), PermitRead | PermitWrite);
|
||||||
|
fast_autoconf_visible_ = false;
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::vector<uint8_t> fast_ram_{};
|
||||||
|
uint8_t fast_ram_size_ = 0;
|
||||||
|
|
||||||
|
bool fast_autoconf_visible_ = true;
|
||||||
bool overlay_ = false;
|
bool overlay_ = false;
|
||||||
|
|
||||||
void set_region(uint32_t start, uint32_t end, uint8_t *base, unsigned int read_write_mask) {
|
void set_region(uint32_t start, uint32_t end, uint8_t *base, unsigned int read_write_mask) {
|
||||||
|
@ -124,7 +124,7 @@ typedef int Kilobytes;
|
|||||||
|
|
||||||
- (nullable instancetype)initWithFileAtURL:(NSURL *)url;
|
- (nullable instancetype)initWithFileAtURL:(NSURL *)url;
|
||||||
|
|
||||||
- (instancetype)initWithAmigaModel:(CSMachineAmigaModel)model;
|
- (instancetype)initWithAmigaModel:(CSMachineAmigaModel)model chipMemorySize:(Kilobytes)chipMemorySize fastMemorySize:(Kilobytes)fastMemorySize;
|
||||||
- (instancetype)initWithAmstradCPCModel:(CSMachineCPCModel)model;
|
- (instancetype)initWithAmstradCPCModel:(CSMachineCPCModel)model;
|
||||||
- (instancetype)initWithAppleIIModel:(CSMachineAppleIIModel)model diskController:(CSMachineAppleIIDiskController)diskController;
|
- (instancetype)initWithAppleIIModel:(CSMachineAppleIIModel)model diskController:(CSMachineAppleIIDiskController)diskController;
|
||||||
- (instancetype)initWithAppleIIgsModel:(CSMachineAppleIIgsModel)model memorySize:(Kilobytes)memorySize;
|
- (instancetype)initWithAppleIIgsModel:(CSMachineAppleIIgsModel)model memorySize:(Kilobytes)memorySize;
|
||||||
|
@ -50,11 +50,28 @@
|
|||||||
|
|
||||||
// MARK: - Machine-based Initialisers
|
// MARK: - Machine-based Initialisers
|
||||||
|
|
||||||
- (instancetype)initWithAmigaModel:(CSMachineAmigaModel)model {
|
- (instancetype)initWithAmigaModel:(CSMachineAmigaModel)model chipMemorySize:(Kilobytes)chipMemorySize fastMemorySize:(Kilobytes)fastMemorySize {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if(self) {
|
if(self) {
|
||||||
using Target = Analyser::Static::Amiga::Target;
|
using Target = Analyser::Static::Amiga::Target;
|
||||||
auto target = std::make_unique<Target>();
|
auto target = std::make_unique<Target>();
|
||||||
|
|
||||||
|
switch(chipMemorySize) {
|
||||||
|
default: return nil;
|
||||||
|
case 512: target->chip_ram = Target::ChipRAM::FiveHundredAndTwelveKilobytes; break;
|
||||||
|
case 1024: target->chip_ram = Target::ChipRAM::OneMegabyte; break;
|
||||||
|
case 2048: target->chip_ram = Target::ChipRAM::TwoMegabytes; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(fastMemorySize) {
|
||||||
|
default: return nil;
|
||||||
|
case 0: target->fast_ram = Target::FastRAM::None; break;
|
||||||
|
case 1024: target->fast_ram = Target::FastRAM::OneMegabyte; break;
|
||||||
|
case 2048: target->fast_ram = Target::FastRAM::TwoMegabytes; break;
|
||||||
|
case 4096: target->fast_ram = Target::FastRAM::FourMegabytes; break;
|
||||||
|
case 8192: target->fast_ram = Target::FastRAM::EightMegabytes; break;
|
||||||
|
}
|
||||||
|
|
||||||
_targets.push_back(std::move(target));
|
_targets.push_back(std::move(target));
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@ -67,29 +67,75 @@ Gw
|
|||||||
<rect key="frame" x="10" y="7" width="400" height="222"/>
|
<rect key="frame" x="10" y="7" width="400" height="222"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="g7g-ZA-Uge">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qfH-1l-GXp">
|
||||||
<rect key="frame" x="18" y="186" width="364" height="16"/>
|
<rect key="frame" x="110" y="178" width="80" height="25"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="At present only a 1mb Amiga 500 is supported." id="Isk-qc-yKa">
|
<popUpButtonCell key="cell" type="push" title="512 kb" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="512" imageScaling="axesIndependently" inset="2" selectedItem="Zev-ku-jDG" id="vdO-VR-mUx">
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" id="Zvi-ox-ip4">
|
||||||
|
<items>
|
||||||
|
<menuItem title="512 kb" state="on" tag="512" id="Zev-ku-jDG"/>
|
||||||
|
<menuItem title="1 mb" tag="1024" id="7Zs-HM-qwH"/>
|
||||||
|
<menuItem title="2 mb" tag="2048" id="GJT-os-38F"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P6K-dt-stj">
|
||||||
|
<rect key="frame" x="18" y="184" width="89" height="16"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Chip Memory:" id="FIO-ZR-rsA">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YD0-OJ-2bY">
|
||||||
|
<rect key="frame" x="18" y="154" width="87" height="16"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Fast Memory:" id="Rpz-39-jyt">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="af8-pF-qc9">
|
||||||
|
<rect key="frame" x="108" y="148" width="72" height="25"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" title="None" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="axesIndependently" inset="2" selectedItem="zV7-V8-c7s" id="39D-ms-pf9">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" id="yIx-1y-Ab0">
|
||||||
|
<items>
|
||||||
|
<menuItem title="None" state="on" id="zV7-V8-c7s"/>
|
||||||
|
<menuItem title="1 mb" tag="1024" id="84E-wf-572"/>
|
||||||
|
<menuItem title="2 mb" tag="2048" id="UpJ-qr-ymv"/>
|
||||||
|
<menuItem title="4 mb" tag="4096" id="wpd-BF-y2L"/>
|
||||||
|
<menuItem title="8 mb" tag="8192" id="0Zf-ll-t4F"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="trailing" secondItem="g7g-ZA-Uge" secondAttribute="trailing" constant="20" symbolic="YES" id="aGA-6p-c9w"/>
|
<constraint firstItem="P6K-dt-stj" firstAttribute="centerY" secondItem="qfH-1l-GXp" secondAttribute="centerY" id="2MX-S7-si1"/>
|
||||||
<constraint firstItem="g7g-ZA-Uge" firstAttribute="top" secondItem="5zS-Nj-Ynx" secondAttribute="top" constant="20" symbolic="YES" id="xzI-rP-iIw"/>
|
<constraint firstItem="qfH-1l-GXp" firstAttribute="leading" secondItem="P6K-dt-stj" secondAttribute="trailing" constant="8" symbolic="YES" id="3W0-21-5um"/>
|
||||||
<constraint firstItem="g7g-ZA-Uge" firstAttribute="leading" secondItem="5zS-Nj-Ynx" secondAttribute="leading" constant="20" symbolic="YES" id="ya2-No-rfZ"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="af8-pF-qc9" secondAttribute="trailing" constant="20" symbolic="YES" id="6jL-bp-K7H"/>
|
||||||
|
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="af8-pF-qc9" secondAttribute="bottom" constant="20" symbolic="YES" id="801-yv-nJo"/>
|
||||||
|
<constraint firstItem="YD0-OJ-2bY" firstAttribute="leading" secondItem="5zS-Nj-Ynx" secondAttribute="leading" constant="20" symbolic="YES" id="8PF-Vw-1NA"/>
|
||||||
|
<constraint firstItem="qfH-1l-GXp" firstAttribute="top" secondItem="5zS-Nj-Ynx" secondAttribute="top" constant="20" symbolic="YES" id="Vda-cc-L3w"/>
|
||||||
|
<constraint firstItem="af8-pF-qc9" firstAttribute="top" secondItem="qfH-1l-GXp" secondAttribute="bottom" constant="10" symbolic="YES" id="WV4-Em-q7l"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="qfH-1l-GXp" secondAttribute="trailing" constant="20" symbolic="YES" id="aWw-pp-jL6"/>
|
||||||
|
<constraint firstItem="af8-pF-qc9" firstAttribute="centerY" secondItem="YD0-OJ-2bY" secondAttribute="centerY" id="vES-ku-YOg"/>
|
||||||
|
<constraint firstItem="af8-pF-qc9" firstAttribute="leading" secondItem="YD0-OJ-2bY" secondAttribute="trailing" constant="8" symbolic="YES" id="vfw-Go-uNs"/>
|
||||||
|
<constraint firstItem="P6K-dt-stj" firstAttribute="leading" secondItem="5zS-Nj-Ynx" secondAttribute="leading" constant="20" symbolic="YES" id="yJF-1t-gtt"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
<tabViewItem label="Amstrad CPC" identifier="cpc" id="ZGX-Fz-lFd">
|
<tabViewItem label="Amstrad CPC" identifier="cpc" id="ZGX-Fz-lFd">
|
||||||
<view key="view" id="afR-Xr-omP">
|
<view key="view" id="afR-Xr-omP">
|
||||||
<rect key="frame" x="10" y="7" width="400" height="223"/>
|
<rect key="frame" x="10" y="7" width="400" height="222"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2zv-Zo-rmO">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2zv-Zo-rmO">
|
||||||
<rect key="frame" x="67" y="179" width="96" height="25"/>
|
<rect key="frame" x="67" y="178" width="96" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="CPC6128" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="6128" imageScaling="axesIndependently" inset="2" selectedItem="LgZ-9j-YQl" id="yH2-Vm-hiD">
|
<popUpButtonCell key="cell" type="push" title="CPC6128" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="6128" imageScaling="axesIndependently" inset="2" selectedItem="LgZ-9j-YQl" id="yH2-Vm-hiD">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@ -103,7 +149,7 @@ Gw
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c3g-96-b3x">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c3g-96-b3x">
|
||||||
<rect key="frame" x="18" y="185" width="46" height="16"/>
|
<rect key="frame" x="18" y="184" width="46" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Model:" id="53v-92-jmf">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Model:" id="53v-92-jmf">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -627,11 +673,11 @@ Gw
|
|||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
<tabViewItem label="Vic-20" identifier="vic20" id="cyO-PU-hSU">
|
<tabViewItem label="Vic-20" identifier="vic20" id="cyO-PU-hSU">
|
||||||
<view key="view" id="fLI-XB-QCr">
|
<view key="view" id="fLI-XB-QCr">
|
||||||
<rect key="frame" x="10" y="7" width="400" height="223"/>
|
<rect key="frame" x="10" y="7" width="400" height="222"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ueK-gq-gaF">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ueK-gq-gaF">
|
||||||
<rect key="frame" x="71" y="179" width="146" height="25"/>
|
<rect key="frame" x="71" y="178" width="146" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="European (PAL)" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="axesIndependently" inset="2" selectedItem="45i-0n-gau" id="yi7-eo-I0q">
|
<popUpButtonCell key="cell" type="push" title="European (PAL)" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="axesIndependently" inset="2" selectedItem="45i-0n-gau" id="yi7-eo-I0q">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@ -647,7 +693,7 @@ Gw
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2eV-Us-eEv">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2eV-Us-eEv">
|
||||||
<rect key="frame" x="108" y="149" width="116" height="25"/>
|
<rect key="frame" x="108" y="148" width="116" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="Unexpanded" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="axesIndependently" inset="2" selectedItem="fOl-8Q-fsA" id="rH0-7T-pJE">
|
<popUpButtonCell key="cell" type="push" title="Unexpanded" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="axesIndependently" inset="2" selectedItem="fOl-8Q-fsA" id="rH0-7T-pJE">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@ -661,7 +707,7 @@ Gw
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MTh-9p-FqC">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MTh-9p-FqC">
|
||||||
<rect key="frame" x="18" y="185" width="50" height="16"/>
|
<rect key="frame" x="18" y="184" width="50" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Region:" id="F3g-Ya-ypU">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Region:" id="F3g-Ya-ypU">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -669,7 +715,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gRS-DK-rIy">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gRS-DK-rIy">
|
||||||
<rect key="frame" x="18" y="155" width="87" height="16"/>
|
<rect key="frame" x="18" y="154" width="87" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory Size:" id="a4I-vG-yCp">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory Size:" id="a4I-vG-yCp">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -677,7 +723,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Lrf-gL-6EI">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Lrf-gL-6EI">
|
||||||
<rect key="frame" x="18" y="128" width="177" height="18"/>
|
<rect key="frame" x="18" y="127" width="177" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Attach C-1540 disk drive" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tsq-YD-xw8">
|
<buttonCell key="cell" type="check" title="Attach C-1540 disk drive" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tsq-YD-xw8">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@ -903,10 +949,12 @@ Gw
|
|||||||
<constraint firstAttribute="bottom" secondItem="hKn-1l-OSN" secondAttribute="bottom" constant="20" symbolic="YES" id="rG2-Ea-klR"/>
|
<constraint firstAttribute="bottom" secondItem="hKn-1l-OSN" secondAttribute="bottom" constant="20" symbolic="YES" id="rG2-Ea-klR"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="-1" y="106.5"/>
|
<point key="canvasLocation" x="-320" y="103"/>
|
||||||
</window>
|
</window>
|
||||||
<customObject id="192-Eb-Rpg" customClass="MachinePicker" customModule="Clock_Signal" customModuleProvider="target">
|
<customObject id="192-Eb-Rpg" customClass="MachinePicker" customModule="Clock_Signal" customModuleProvider="target">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="amigaChipRAMButton" destination="qfH-1l-GXp" id="3PG-QC-tyI"/>
|
||||||
|
<outlet property="amigaFastRAMButton" destination="af8-pF-qc9" id="laa-1H-JfD"/>
|
||||||
<outlet property="appleIIDiskControllerButton" destination="LSB-WP-FMi" id="Ssa-jd-t63"/>
|
<outlet property="appleIIDiskControllerButton" destination="LSB-WP-FMi" id="Ssa-jd-t63"/>
|
||||||
<outlet property="appleIIModelButton" destination="jli-ac-Sij" id="Jm3-f7-C17"/>
|
<outlet property="appleIIModelButton" destination="jli-ac-Sij" id="Jm3-f7-C17"/>
|
||||||
<outlet property="appleIIgsMemorySizeButton" destination="nQa-YS-utT" id="pTV-XL-zX3"/>
|
<outlet property="appleIIgsMemorySizeButton" destination="nQa-YS-utT" id="pTV-XL-zX3"/>
|
||||||
|
@ -19,6 +19,10 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate {
|
|||||||
@IBOutlet var machineSelector: NSTabView!
|
@IBOutlet var machineSelector: NSTabView!
|
||||||
@IBOutlet var machineNameTable: NSTableView!
|
@IBOutlet var machineNameTable: NSTableView!
|
||||||
|
|
||||||
|
// MARK: - Amiga properties
|
||||||
|
@IBOutlet var amigaChipRAMButton: NSPopUpButton!
|
||||||
|
@IBOutlet var amigaFastRAMButton: NSPopUpButton!
|
||||||
|
|
||||||
// MARK: - Apple II properties
|
// MARK: - Apple II properties
|
||||||
@IBOutlet var appleIIModelButton: NSPopUpButton!
|
@IBOutlet var appleIIModelButton: NSPopUpButton!
|
||||||
@IBOutlet var appleIIDiskControllerButton: NSPopUpButton!
|
@IBOutlet var appleIIDiskControllerButton: NSPopUpButton!
|
||||||
@ -92,6 +96,10 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Amiga settings
|
||||||
|
amigaChipRAMButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.amigaChipRAM"))
|
||||||
|
amigaFastRAMButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.amigaFastRAM"))
|
||||||
|
|
||||||
// Apple II settings
|
// Apple II settings
|
||||||
appleIIModelButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.appleIIModel"))
|
appleIIModelButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.appleIIModel"))
|
||||||
appleIIDiskControllerButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.appleIIDiskController"))
|
appleIIDiskControllerButton.selectItem(withTag: standardUserDefaults.integer(forKey: "new.appleIIDiskController"))
|
||||||
@ -149,6 +157,10 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate {
|
|||||||
// Machine type
|
// Machine type
|
||||||
standardUserDefaults.set(machineSelector.selectedTabViewItem!.identifier as! String, forKey: "new.machine")
|
standardUserDefaults.set(machineSelector.selectedTabViewItem!.identifier as! String, forKey: "new.machine")
|
||||||
|
|
||||||
|
// Amiga settings
|
||||||
|
standardUserDefaults.set(amigaChipRAMButton.selectedTag(), forKey: "new.amigaChipRAM")
|
||||||
|
standardUserDefaults.set(amigaFastRAMButton.selectedTag(), forKey: "new.amigaFastRAM")
|
||||||
|
|
||||||
// Apple II settings
|
// Apple II settings
|
||||||
standardUserDefaults.set(appleIIModelButton.selectedTag(), forKey: "new.appleIIModel")
|
standardUserDefaults.set(appleIIModelButton.selectedTag(), forKey: "new.appleIIModel")
|
||||||
standardUserDefaults.set(appleIIDiskControllerButton.selectedTag(), forKey: "new.appleIIDiskController")
|
standardUserDefaults.set(appleIIDiskControllerButton.selectedTag(), forKey: "new.appleIIDiskController")
|
||||||
@ -228,7 +240,7 @@ class MachinePicker: NSObject, NSTableViewDataSource, NSTableViewDelegate {
|
|||||||
switch machineSelector.selectedTabViewItem!.identifier as! String {
|
switch machineSelector.selectedTabViewItem!.identifier as! String {
|
||||||
|
|
||||||
case "amiga":
|
case "amiga":
|
||||||
return CSStaticAnalyser(amigaModel: .A500)
|
return CSStaticAnalyser(amigaModel: .A500, chipMemorySize: Kilobytes(amigaChipRAMButton.selectedTag()), fastMemorySize: Kilobytes(amigaFastRAMButton.selectedTag()))
|
||||||
|
|
||||||
case "appleii":
|
case "appleii":
|
||||||
var model: CSMachineAppleIIModel = .appleII
|
var model: CSMachineAppleIIModel = .appleII
|
||||||
|
@ -1016,7 +1016,19 @@ void MainWindow::start_amiga() {
|
|||||||
using Target = Analyser::Static::Amiga::Target;
|
using Target = Analyser::Static::Amiga::Target;
|
||||||
auto target = std::make_unique<Target>();
|
auto target = std::make_unique<Target>();
|
||||||
|
|
||||||
/* There are no options yet for an Amiga. */
|
switch(ui->amigaChipRAMComboBox->currentIndex()) {
|
||||||
|
default: target->chip_ram = Target::ChipRAM::FiveHundredAndTwelveKilobytes; break;
|
||||||
|
case 1: target->chip_ram = Target::ChipRAM::OneMegabyte; break;
|
||||||
|
case 2: target->chip_ram = Target::ChipRAM::TwoMegabytes; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(ui->amigaFastRAMComboBox->currentIndex()) {
|
||||||
|
default: target->fast_ram = Target::FastRAM::None; break;
|
||||||
|
case 1: target->fast_ram = Target::FastRAM::OneMegabyte; break;
|
||||||
|
case 2: target->fast_ram = Target::FastRAM::TwoMegabytes; break;
|
||||||
|
case 3: target->fast_ram = Target::FastRAM::FourMegabytes; break;
|
||||||
|
case 4: target->fast_ram = Target::FastRAM::EightMegabytes; break;
|
||||||
|
}
|
||||||
|
|
||||||
launchTarget(std::move(target));
|
launchTarget(std::move(target));
|
||||||
}
|
}
|
||||||
@ -1247,6 +1259,10 @@ void MainWindow::launchTarget(std::unique_ptr<Analyser::Static::Target> &&target
|
|||||||
/* Machine selection. */ \
|
/* Machine selection. */ \
|
||||||
Tabs(machineSelectionTabs, "machineSelection"); \
|
Tabs(machineSelectionTabs, "machineSelection"); \
|
||||||
\
|
\
|
||||||
|
/* Amiga. */ \
|
||||||
|
ComboBox(amigaChipRAMComboBox, "amiga.chipRAM"); \
|
||||||
|
ComboBox(amigaFastRAMComboBox, "amiga.fastRAM"); \
|
||||||
|
\
|
||||||
/* Apple II. */ \
|
/* Apple II. */ \
|
||||||
ComboBox(appleIIModelComboBox, "appleII.model"); \
|
ComboBox(appleIIModelComboBox, "appleII.model"); \
|
||||||
ComboBox(appleIIDiskControllerComboBox, "appleII.diskController"); \
|
ComboBox(appleIIDiskControllerComboBox, "appleII.diskController"); \
|
||||||
|
@ -33,27 +33,103 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Amiga</string>
|
<string>Amiga</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="amigaLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item alignment="Qt::AlignTop">
|
<item>
|
||||||
<widget class="QLabel" name="amigaLabel">
|
<layout class="QHBoxLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>At present only a 1mb Amiga 500 is supported.</string>
|
<string>Chip RAM:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="amigaChipRAMComboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>512 kb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1 mb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2 mb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Fast RAM:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QComboBox" name="amigaFastRAMComboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>None</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1 mb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2 mb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>4 mb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>8 mb</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="appleIITab">
|
<widget class="QWidget" name="appleIITab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Apple II</string>
|
<string>Apple II</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="appleIILayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="appleIIHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="appleIIFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="appleIIModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -84,7 +160,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="appleIIDiskControllerLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Disk Controller:</string>
|
<string>Disk Controller:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -112,7 +188,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="appleIIHSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -132,13 +208,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Apple IIgs</string>
|
<string>Apple IIgs</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="appleIIgsLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="appleIIgsHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="appleIIgsFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="appleIIgsModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -164,7 +240,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="appleIIgsMemorySizeLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Memory Size:</string>
|
<string>Memory Size:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -192,7 +268,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="appleIIgsHSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -212,13 +288,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Amstrad CPC</string>
|
<string>Amstrad CPC</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="amstradCPCLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="amstradCPCHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="amstradCPCFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="amstradCPCModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -246,7 +322,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="amstradCPCHSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -266,9 +342,9 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Atari ST</string>
|
<string>Atari ST</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="atariSTLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item alignment="Qt::AlignTop">
|
<item alignment="Qt::AlignTop">
|
||||||
<widget class="QLabel" name="atariSTLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>At present only a 512k Atari ST is supported.</string>
|
<string>At present only a 512k Atari ST is supported.</string>
|
||||||
</property>
|
</property>
|
||||||
@ -280,7 +356,7 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Electron</string>
|
<string>Electron</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="electronLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="electronDFSCheckBox">
|
<widget class="QCheckBox" name="electronDFSCheckBox">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -310,7 +386,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -328,13 +404,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Enterprise</string>
|
<string>Enterprise</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="enterpriseLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="enterpriseHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="enterpriseFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="enterpriseModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -360,7 +436,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="enterpriseSpeedLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Speed:</string>
|
<string>Speed:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -381,7 +457,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="enterpriseEXOSLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>EXOS:</string>
|
<string>EXOS:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -407,7 +483,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="enterpriseBASICLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>BASIC:</string>
|
<string>BASIC:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -438,7 +514,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="enterpriseDOSLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>DOS:</string>
|
<string>DOS:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -461,7 +537,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="enterpriseHSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -481,13 +557,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Macintosh</string>
|
<string>Macintosh</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="macintoshLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="macintoshHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="macintoshFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="macintoshModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -520,7 +596,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="macintoshSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -540,13 +616,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>MSX</string>
|
<string>MSX</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="msxLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="msxHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="msxFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="msxRegionLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Region</string>
|
<string>Region</string>
|
||||||
</property>
|
</property>
|
||||||
@ -574,7 +650,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="msxSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -596,7 +672,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer_2">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -614,13 +690,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Oric</string>
|
<string>Oric</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="oricLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="oricHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="oricFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="oricModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -646,7 +722,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="oricDiskInterfaceLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Disk Interface:</string>
|
<string>Disk Interface:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -684,7 +760,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="oricHSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -704,13 +780,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Vic-20</string>
|
<string>Vic-20</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="vic20Layout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="vic20HorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="vic20FormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="vic20RegionLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Region:</string>
|
<string>Region:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -746,7 +822,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="vic20MemorySizeLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Memory Size:</string>
|
<string>Memory Size:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -774,7 +850,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="vic20HSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -796,7 +872,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="vic20VSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -814,13 +890,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>ZX80</string>
|
<string>ZX80</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="zx80Layout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="zx80HorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="zx80FormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="zx80MemorySizeLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Memory Size:</string>
|
<string>Memory Size:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -843,7 +919,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="zx80HSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -865,7 +941,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="zx81VSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -883,13 +959,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>ZX81</string>
|
<string>ZX81</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="zx81Layout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="zx81HorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="zx81FormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="zx81MemorySizeLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Memory Size:</string>
|
<string>Memory Size:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -912,7 +988,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="zx81Spacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -932,13 +1008,13 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>ZX Spectrum</string>
|
<string>ZX Spectrum</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="spectrumLayout">
|
<layout class="QVBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="spectrumHorizontalLayout">
|
<layout class="QHBoxLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QFormLayout" name="spectrumFormLayout">
|
<layout class="QFormLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="spectrumModelLabel">
|
<widget class="QLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Model:</string>
|
<string>Model:</string>
|
||||||
</property>
|
</property>
|
||||||
@ -981,7 +1057,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="spectrumHSpacer">
|
<spacer>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
Loading…
Reference in New Issue
Block a user