Add Mike42 Machine Type
This commit is contained in:
4 files changed
+158
-9
No files matched your search
@@ -1,9 +1,9 @@
|
|||||||
SYMON - A 6502 System Simulator
|
kSYMON - A 6502 System Simulator
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
**Version:** 1.5.0
|
**Version:** 1.5.1k
|
||||||
|
|
||||||
**Last Updated:** 30 March, 2025
|
**Last Updated:** 24 September, 2026
|
||||||
|
|
||||||
See the file COPYING for license.
|
See the file COPYING for license.
|
||||||
|
|
||||||
@@ -71,6 +71,13 @@ memory.
|
|||||||
- `$6000`--`$600F`: 6522 VIA
|
- `$6000`--`$600F`: 6522 VIA
|
||||||
- `$8000`--`$FFFF`: 16KB ROM
|
- `$8000`--`$FFFF`: 16KB ROM
|
||||||
|
|
||||||
|
#### 3.1.5 Mike42 Memory Map
|
||||||
|
|
||||||
|
- `$0000`--`$7FFF`: 32KB RAM
|
||||||
|
- `$8000`--`$800F`: 6522 VIA
|
||||||
|
- `$8400`--`$8403`: MOS 6551 ACIA (Serial Console)
|
||||||
|
- `$C000`--`$FFFF`: 16KB ROM
|
||||||
|
|
||||||
### 3.2 Serial Console and CPU Status
|
### 3.2 Serial Console and CPU Status
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<groupId>com.loomcom.symon</groupId>
|
<groupId>com.loomcom.symon</groupId>
|
||||||
<artifactId>symon</artifactId>
|
<artifactId>symon</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>1.5.0</version>
|
<version>1.5.1k</version>
|
||||||
<name>symon</name>
|
<name>symon</name>
|
||||||
<url>https://git.loomcom.com/seth/symon</url>
|
<url>https://git.loomcom.com/seth/symon</url>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>logback-classic</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
<version>1.5.16</version>
|
<version>1.5.34</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-cli</groupId>
|
<groupId>commons-cli</groupId>
|
||||||
@@ -55,6 +55,11 @@
|
|||||||
<version>4.11.0</version>
|
<version>4.11.0</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.java.dev.jna</groupId>
|
||||||
|
<artifactId>jna</artifactId>
|
||||||
|
<version>5.14.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@@ -66,7 +71,7 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<transformers>
|
<transformers>
|
||||||
<transformer
|
<transformer
|
||||||
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||||
<mainClass>com.loomcom.symon.Main</mainClass>
|
<mainClass>com.loomcom.symon.Main</mainClass>
|
||||||
</transformer>
|
</transformer>
|
||||||
</transformers>
|
</transformers>
|
||||||
@@ -97,8 +102,8 @@
|
|||||||
<version>3.7.0</version>
|
<version>3.7.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<compilerArgument>-Xlint:unchecked</compilerArgument>
|
<compilerArgument>-Xlint:unchecked</compilerArgument>
|
||||||
<source>11</source>
|
<source>16</source>
|
||||||
<target>11</target>
|
<target>16</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,134 @@
|
|||||||
|
package com.loomcom.symon.machines;
|
||||||
|
|
||||||
|
import com.loomcom.symon.Bus;
|
||||||
|
import com.loomcom.symon.Cpu;
|
||||||
|
import com.loomcom.symon.InstructionTable;
|
||||||
|
import com.loomcom.symon.devices.*;
|
||||||
|
import com.loomcom.symon.exceptions.MemoryRangeException;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class MichaelBillingtonMachine implements Machine{
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(MichaelBillingtonMachine.class.getName());
|
||||||
|
|
||||||
|
// Constants used by the simulated system
|
||||||
|
private static final int BUS_BOTTOM = 0x0000;
|
||||||
|
private static final int BUS_TOP = 0xffff;
|
||||||
|
|
||||||
|
// 32k of ram, from $0000 to $7fff
|
||||||
|
private static final int MEMORY_BASE = 0x0000;
|
||||||
|
private static final int MEMORY_SIZE = 0x8000;
|
||||||
|
|
||||||
|
// VIA at $8000-$800f
|
||||||
|
private static final int PIA_BASE = 0x8000;
|
||||||
|
|
||||||
|
// ACIA at $8400-$8403
|
||||||
|
private static final int ACIA_BASE = 0x8400;
|
||||||
|
|
||||||
|
// 16k ROM from $c000 to $ffff
|
||||||
|
private static final int ROM_BASE = 0xc000;
|
||||||
|
private static final int ROM_SIZE = 0x4000;
|
||||||
|
|
||||||
|
private final Bus bus;
|
||||||
|
private final Cpu cpu;
|
||||||
|
private final Acia acia;
|
||||||
|
private final Pia pia;
|
||||||
|
private final Memory ram;
|
||||||
|
private Memory rom;
|
||||||
|
|
||||||
|
public MichaelBillingtonMachine(String romFile) throws Exception {
|
||||||
|
this.bus = new Bus(BUS_BOTTOM, BUS_TOP);
|
||||||
|
this.cpu = new Cpu();
|
||||||
|
this.ram = new Memory(MEMORY_BASE, MEMORY_BASE + MEMORY_SIZE - 1);
|
||||||
|
this.pia = new Via6522(PIA_BASE);
|
||||||
|
this.acia = new Acia6551(ACIA_BASE);
|
||||||
|
|
||||||
|
bus.addCpu(cpu);
|
||||||
|
bus.addDevice(ram);
|
||||||
|
bus.addDevice(pia);
|
||||||
|
bus.addDevice(acia);
|
||||||
|
|
||||||
|
if (romFile != null) {
|
||||||
|
File romImage = new File(romFile);
|
||||||
|
if (romImage.canRead()) {
|
||||||
|
logger.info("Loading ROM image from file {}", romImage);
|
||||||
|
this.rom = Memory.makeROM(ROM_BASE, ROM_BASE + ROM_SIZE - 1, romImage);
|
||||||
|
} else {
|
||||||
|
logger.info("Default ROM file {} not found, loading empty R/W memory image.", romImage);
|
||||||
|
this.rom = Memory.makeRAM(ROM_BASE, ROM_BASE + ROM_SIZE - 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.info("No ROM file specified, loading empty R/W memory image.");
|
||||||
|
this.rom = Memory.makeRAM(ROM_BASE, ROM_BASE + ROM_SIZE - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bus.addDevice(rom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bus getBus() {
|
||||||
|
return bus;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cpu getCpu() {
|
||||||
|
return cpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Memory getRam() {
|
||||||
|
return ram;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Acia getAcia() {
|
||||||
|
return acia;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pia getPia() {
|
||||||
|
return pia;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Crtc getCrtc() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Memory getRom() {
|
||||||
|
return rom;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRom(Memory rom) throws MemoryRangeException {
|
||||||
|
if (this.rom != null) {
|
||||||
|
bus.removeDevice(this.rom);
|
||||||
|
}
|
||||||
|
this.rom = rom;
|
||||||
|
bus.addDevice(this.rom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRomBase() {
|
||||||
|
return ROM_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRomSize() {
|
||||||
|
return ROM_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMemorySize() {
|
||||||
|
return MEMORY_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "mike42";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,6 +30,7 @@ import javax.swing.LookAndFeel;
|
|||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
import javax.swing.UnsupportedLookAndFeelException;
|
import javax.swing.UnsupportedLookAndFeelException;
|
||||||
|
|
||||||
|
import com.loomcom.symon.machines.*;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -84,7 +85,7 @@ public final class Ui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Class<?> showMachineSelectionDialog() {
|
public static Class<?> showMachineSelectionDialog() {
|
||||||
Object[] possibilities = { "Symon", "Multicomp", "Simple", "BenEater" };
|
Object[] possibilities = { "Symon", "Multicomp", "Simple", "BenEater", "Mike42" };
|
||||||
String s = (String) JOptionPane.showInputDialog(
|
String s = (String) JOptionPane.showInputDialog(
|
||||||
null,
|
null,
|
||||||
"Please choose the machine type to be emulated:",
|
"Please choose the machine type to be emulated:",
|
||||||
@@ -100,6 +101,8 @@ public final class Ui {
|
|||||||
return SimpleMachine.class;
|
return SimpleMachine.class;
|
||||||
} else if (s != null && s.equals("BenEater")) {
|
} else if (s != null && s.equals("BenEater")) {
|
||||||
return BenEaterMachine.class;
|
return BenEaterMachine.class;
|
||||||
|
} else if (s != null && s.equals("Mike42")) {
|
||||||
|
return MichaelBillingtonMachine.class;
|
||||||
} else {
|
} else {
|
||||||
return SymonMachine.class;
|
return SymonMachine.class;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user