1.7 KiB
m68kemu
A very minimalistic Motorola 68000 user-mode emulation written in Kotlin, with the actual cpu core emulation being less than 750 lines of code.
It can be used to emulate short pieces of 68000 binary code.
I used it for validation of the Raspberry Casket Pretracker replayer.
I had it lying around for so many years, I thought I could just publish it and maybe someone finds it useful.
Features
- Memory access abstraction
- User-mode only (no exceptions, interrupts, supervisor-instructions etc.)
- Instructions not implemented (might not be decoded correctly!):
- abcd, sbcd, nbcd
- movep, cmpm, addx/subx/tas on memory
- ori/andi/eori to CCR/SR, move from SR, move to CCR/SR, move USP
- illegal, trap, trapv, chk, stop, reset, rte, rtr
Note: Illegal (unavailable) addressing modes may not be detected as such. No 68020+ instructions or addressing modes are supported.
Usage
Create an instance of M68kCpu():
val cpu = M68kCpu()
Create some memory, custom chips, etc:
val ram = Ram(0x0, 0x10000)
val rom = Rom(0xfc0000, kickromimage)
val customChips = CustomChips()
ram.writeWord(0x100, 0x4e75) // just an rts
Configure your system, registers, program counter and run decode() for every instruction as long as you like:
with(cpu) {
memRegions.add(ram)
memRegions.add(rom)
memRegions.add(customChips)
a[7] = ram.start + ram.size // setup stack register
pushStack(OpSize.OS_LONG, 0) // write 0 return address
pc = 0x100 // start of program
while (pc != 0) {
decode()
}
}
The CustomChip classes are minimal stubs. There's also some Paula-Recorder class you might find useful.