public class MOS6510 extends Object
Modifier and Type | Field and Description |
---|---|
protected EventScheduler |
context
Our event context copy.
|
protected Function<Integer,Byte> |
cpuRead |
protected BiConsumer<Integer,Byte> |
cpuWrite |
protected byte |
Cycle_Data |
protected int |
Cycle_EffectiveAddress
Data regarding current instruction
|
protected int |
Cycle_HighByteWrongEffectiveAddress |
protected int |
Cycle_Pointer |
protected int |
cycleCount
Current instruction and subcycle within instruction
|
protected boolean |
flagB |
protected boolean |
flagC |
protected boolean |
flagD |
protected boolean |
flagI |
protected boolean |
flagN |
protected boolean |
flagU |
protected boolean |
flagV |
protected boolean |
flagZ |
protected int |
interruptCycle
When IRQ was triggered.
|
protected boolean |
irqAssertedOnPin
IRQ asserted on CPU
|
protected Consumer<Integer> |
jmpJsr |
protected boolean |
nmiFlag
NMI requested?
|
protected byte |
Register_Accumulator |
protected int |
Register_ProgramCounter |
protected byte |
Register_StackPointer |
protected byte |
Register_X |
protected byte |
Register_Y |
protected boolean |
rstFlag
RST requested?
|
protected static byte |
SP_PAGE
Stack page location
|
static int |
SR_INTERRUPT
Status register interrupt bit.
|
protected Function<Boolean,Boolean> |
v |
Constructor and Description |
---|
MOS6510(EventScheduler context)
Create new CPU emu
|
Modifier and Type | Method and Description |
---|---|
protected void |
calculateInterruptTriggerCycle()
Evaluate when to execute an interrupt.
|
void |
clearIRQ()
Inform CPU that IRQ is no longer pulled low.
|
static String |
credits()
Module Credits
|
protected void |
doADC()
BCD adding
|
protected void |
doSBC()
BCD subtracting
|
protected void |
FetchHighAddr()
Fetch high address byte, increment PC (Absolute Addressing)
Low byte must have been obtained first! |
protected void |
FetchHighAddrX()
Fetch high byte of address, add index register X to low address byte,
increment PC Addressing Modes: Absolute Indexed |
protected void |
FetchHighAddrY()
Fetch high byte of address, add index register Y to low address byte,
increment PC Addressing Modes: Absolute Indexed |
protected void |
FetchHighEffAddr()
Fetch effective address high
Addressing Modes: Indirect Indexed Indirect (pre X) |
protected void |
FetchHighEffAddrY()
Fetch effective address high, add Y to low byte of effective address
Addressing Modes: Indirect indexed (post Y) |
protected void |
FetchHighPointer()
Fetch pointer address high, increment PC
Addressing Modes: Absolute Indirect |
protected void |
FetchLowAddr()
Fetch low address byte, increment PC
Addressing Modes: Stack Manipulation Absolute Zero Page Zero Page Indexed Absolute Indexed Absolute Indirect |
protected void |
FetchLowAddrX()
Read from address, add index register X to it
Addressing Modes: Zero Page Indexed |
protected void |
FetchLowAddrY()
Read from address, add index register Y to it
Addressing Modes: Zero Page Indexed |
protected void |
FetchLowEffAddr()
Fetch effective address low
Addressing Modes: Indirect Indexed Indirect (pre X) Indirect indexed (post Y) |
protected void |
FetchLowPointer()
Fetch pointer address low, increment PC
Addressing Modes: Absolute Indirect Indirect indexed (post Y) |
protected void |
fetchNextOpcode() |
void |
forcedJump(int address)
Force CPU to start execution at given address
|
EventScheduler |
getEventScheduler() |
byte |
getStalledOnByte()
When stalled by BA but not yet tristated by AEC, the CPU generates read
requests to the PLA chip.
|
protected void |
interrupt() |
protected void |
interruptEnd() |
protected void |
interruptsAndNextOpcode() |
protected void |
PopHighPC()
Increment stack and pull program counter high byte from stack,
|
protected void |
PopLowPC()
Increment stack and pull program counter low byte from stack,
|
protected void |
PopSR()
increment S, Pop P off stack
|
protected void |
PushHighPC()
Push Program Counter High Byte on stack, decrement S
|
protected void |
PushLowPC()
Push Program Counter Low Byte on stack, decrement S
|
protected void |
PushSR()
Push P on stack, decrement S
|
protected void |
PutEffAddrDataByte()
Write Cycle_Data to effective address.
|
void |
setEODHack(boolean hack) |
protected void |
setFlagsNZ(byte value)
Set N and Z flag values.
|
void |
setFlagV(boolean flag)
Set the value of V flag (often related to the SO pin)
|
void |
setJmpJsrHandler(Consumer<Integer> jmpJsr) |
void |
setMemoryHandler(Function<Integer,Byte> cpuRead,
BiConsumer<Integer,Byte> cpuWrite) |
void |
setRDY(boolean rdy)
Handle bus access signal.
|
void |
setVFlagHandler(Function<Boolean,Boolean> v) |
void |
triggerIRQ()
Pull IRQ line low on CPU.
|
void |
triggerNMI()
Trigger NMI interrupt on the CPU.
|
void |
triggerRST()
This forces the CPU to abort whatever it is doing and immediately enter
the RST interrupt handling sequence.
|
public static final int SR_INTERRUPT
protected static final byte SP_PAGE
protected final EventScheduler context
protected int cycleCount
protected int Cycle_EffectiveAddress
protected int Cycle_HighByteWrongEffectiveAddress
protected int Register_ProgramCounter
protected int Cycle_Pointer
protected byte Cycle_Data
protected byte Register_Accumulator
protected byte Register_X
protected byte Register_Y
protected byte Register_StackPointer
protected boolean flagN
protected boolean flagC
protected boolean flagD
protected boolean flagZ
protected boolean flagV
protected boolean flagI
protected boolean flagU
protected boolean flagB
protected BiConsumer<Integer,Byte> cpuWrite
protected boolean irqAssertedOnPin
protected int interruptCycle
protected boolean nmiFlag
protected boolean rstFlag
public MOS6510(EventScheduler context)
context
- The Event Contextpublic void setMemoryHandler(Function<Integer,Byte> cpuRead, BiConsumer<Integer,Byte> cpuWrite)
public void setFlagV(boolean flag)
flag
- new V flag stateprotected void calculateInterruptTriggerCycle()
protected void interruptsAndNextOpcode()
protected void interrupt()
protected void interruptEnd()
protected void fetchNextOpcode()
protected void FetchLowAddr()
protected void FetchLowAddrX()
protected void FetchLowAddrY()
protected void FetchHighAddr()
protected void FetchHighAddrX()
protected void FetchHighAddrY()
protected void FetchLowEffAddr()
protected void FetchHighEffAddr()
protected void FetchHighEffAddrY()
protected void FetchLowPointer()
protected void FetchHighPointer()
protected void PutEffAddrDataByte()
protected void PushLowPC()
protected void PushHighPC()
protected void PushSR()
protected void PopLowPC()
protected void PopHighPC()
protected void PopSR()
protected void doADC()
protected void doSBC()
public void forcedJump(int address)
address
- The address to start CPU execution at.public static String credits()
public final void setRDY(boolean rdy)
rdy
- new state for RDY signalpublic final void triggerRST()
public final void triggerNMI()
public final void triggerIRQ()
public final void clearIRQ()
protected final void setFlagsNZ(byte value)
value
- to set flags frompublic final byte getStalledOnByte()
public final EventScheduler getEventScheduler()
public void setEODHack(boolean hack)
Copyright © 2018 Ken Händel. All rights reserved.