cpu6502

package
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2015 License: ISC, ISC Imports: 4 Imported by: 0

Documentation

Overview

Package cpu6502 implements a 6502 emulator.

Index

Constants

View Source
const (
	P_C byte = 1 << iota
	P_Z
	P_I
	P_D
	P_B
	P_X // unused
	P_V
	P_N
)

Variables

View Source
var Opcodes = []Instruction{

	{ADC, 0x69, 0x65, 0x75, null, 0x6d, 0x7d, 0x79, null, 0x61, 0x71, null, null, _1},
	{AND, 0x29, 0x25, 0x35, null, 0x2d, 0x3d, 0x39, null, 0x21, 0x31, null, null, _1},
	{ASL, null, 0x06, 0x16, null, 0x0e, 0x1e, null, null, null, null, 0x0a, null, _2},
	{BCC, null, null, null, null, null, null, null, null, null, null, null, 0x90, _2},
	{BCS, null, null, null, null, null, null, null, null, null, null, null, 0xb0, _2},
	{BEQ, null, null, null, null, null, null, null, null, null, null, null, 0xf0, _2},
	{BIT, null, 0x24, null, null, 0x2c, null, null, null, null, null, null, null, _3},
	{BMI, null, null, null, null, null, null, null, null, null, null, null, 0x30, _2},
	{BNE, null, null, null, null, null, null, null, null, null, null, null, 0xd0, _2},
	{BPL, null, null, null, null, null, null, null, null, null, null, null, 0x10, _2},
	{BRK, null, null, null, null, null, null, null, null, null, null, null, 0x00, _K},
	{BVC, null, null, null, null, null, null, null, null, null, null, null, 0x50, _2},
	{BVS, null, null, null, null, null, null, null, null, null, null, null, 0x70, _2},
	{CLC, null, null, null, null, null, null, null, null, null, null, 0x18, null, _2},
	{CLD, null, null, null, null, null, null, null, null, null, null, 0xd8, null, _2},
	{CLI, null, null, null, null, null, null, null, null, null, null, 0x58, null, _2},
	{CLV, null, null, null, null, null, null, null, null, null, null, 0xb8, null, _2},
	{CMP, 0xc9, 0xc5, 0xd5, null, 0xcd, 0xdd, 0xd9, null, 0xc1, 0xd1, null, null, _1},
	{CPX, 0xe0, 0xe4, null, null, 0xec, null, null, null, null, null, null, null, _2},
	{CPY, 0xc0, 0xc4, null, null, 0xcc, null, null, null, null, null, null, null, _2},
	{DEC, null, 0xc6, 0xd6, null, 0xce, 0xde, null, null, null, null, null, null, _2},
	{DEX, null, null, null, null, null, null, null, null, null, null, 0xca, null, _2},
	{DEY, null, null, null, null, null, null, null, null, null, null, 0x88, null, _2},
	{EOR, 0x49, 0x45, 0x55, null, 0x4d, 0x5d, 0x59, null, 0x41, 0x51, null, null, _1},
	{INC, null, 0xe6, 0xf6, null, 0xee, 0xfe, null, null, null, null, null, null, _2},
	{INX, null, null, null, null, null, null, null, null, null, null, 0xe8, null, _2},
	{INY, null, null, null, null, null, null, null, null, null, null, 0xc8, null, _2},
	{JMP, null, null, null, null, 0x4c, null, null, 0x6c, null, null, null, null, _J},
	{JSR, null, null, null, null, 0x20, null, null, null, null, null, null, null, _2},
	{LDA, 0xa9, 0xa5, 0xb5, null, 0xad, 0xbd, 0xb9, null, 0xa1, 0xb1, null, null, _1},
	{LDX, 0xa2, 0xa6, null, 0xb6, 0xae, null, 0xbe, null, null, null, null, null, _1},
	{LDY, 0xa0, 0xa4, 0xb4, null, 0xac, 0xbc, null, null, null, null, null, null, _1},
	{LSR, null, 0x46, 0x56, null, 0x4e, 0x5e, null, null, null, null, 0x4a, null, _2},
	{NOP, null, null, null, null, null, null, null, null, null, null, 0xea, null, _2},
	{ORA, 0x09, 0x05, 0x15, null, 0x0d, 0x1d, 0x19, null, 0x01, 0x11, null, null, _1},
	{PHA, null, null, null, null, null, null, null, null, null, null, 0x48, null, _3},
	{PHP, null, null, null, null, null, null, null, null, null, null, 0x08, null, _3},
	{PLA, null, null, null, null, null, null, null, null, null, null, 0x68, null, _S4},
	{PLP, null, null, null, null, null, null, null, null, null, null, 0x28, null, _S4},
	{ROL, null, 0x26, 0x36, null, 0x2e, 0x3e, null, null, null, null, 0x2a, null, _2},
	{ROR, null, 0x66, 0x76, null, 0x6e, 0x7e, null, null, null, null, 0x6a, null, _2},
	{RTI, null, null, null, null, null, null, null, null, null, null, 0x40, null, _S6},
	{RTS, null, null, null, null, null, null, null, null, null, null, 0x60, null, _S6},
	{SBC, 0xe9, 0xe5, 0xf5, null, 0xed, 0xfd, 0xf9, null, 0xe1, 0xf1, null, null, _1},
	{SEC, null, null, null, null, null, null, null, null, null, null, 0x38, null, _2},
	{SED, null, null, null, null, null, null, null, null, null, null, 0xf8, null, _2},
	{SEI, null, null, null, null, null, null, null, null, null, null, 0x78, null, _2},
	{STA, null, 0x85, 0x95, null, 0x8d, 0x9d, 0x99, null, 0x81, 0x91, null, null, _3},
	{STX, null, 0x86, null, 0x96, 0x8e, null, null, null, null, null, null, null, _3},
	{STY, null, 0x84, 0x94, null, 0x8c, null, null, null, null, null, null, null, _3},
	{TAX, null, null, null, null, null, null, null, null, null, null, 0xaa, null, _2},
	{TAY, null, null, null, null, null, null, null, null, null, null, 0xa8, null, _2},

	{TSX, null, null, null, null, null, null, null, null, null, null, 0xba, null, _2},
	{TXA, null, null, null, null, null, null, null, null, null, null, 0x8a, null, _2},
	{TXS, null, null, null, null, null, null, null, null, null, null, 0x9a, null, _2},
	{TYA, null, null, null, null, null, null, null, null, null, null, 0x98, null, _2},

	{LAX, 0xab, 0xa7, null, 0xb7, 0xaf, null, 0xbf, null, 0xa3, 0xb3, null, null, _1},
	{SAX, null, 0x87, null, 0x97, 0x8f, null, null, null, 0x83, null, null, null, _3},
	{SBC, 0xeb, null, null, null, null, null, null, null, null, null, null, null, _1},
	{DCP, null, 0xc7, 0xd7, null, 0xcf, 0xdf, 0xdb, null, 0xc3, 0xd3, null, null, _2},
	{ISC, null, 0xe7, 0xf7, null, 0xef, 0xff, 0xfb, null, 0xe3, 0xf3, null, null, _2},
	{SLO, null, 0x07, 0x17, null, 0x0f, 0x1f, 0x1b, null, 0x03, 0x13, null, null, _2},
	{RLA, null, 0x27, 0x37, null, 0x2f, 0x3f, 0x3b, null, 0x23, 0x33, null, null, _2},
	{SRE, null, 0x47, 0x57, null, 0x4f, 0x5f, 0x5b, null, 0x43, 0x53, null, null, _2},
	{RRA, null, 0x67, 0x77, null, 0x6f, 0x7f, 0x7b, null, 0x63, 0x73, null, null, _2},
}
View Source
var Optable [0xff + 1]*Op

Functions

func ADC

func ADC(c *Cpu, b byte, v uint16, m Mode)

func AND

func AND(c *Cpu, b byte, v uint16, m Mode)

func ASL

func ASL(c *Cpu, b byte, v uint16, m Mode)

func BCC

func BCC(c *Cpu, b byte, v uint16, m Mode)

func BCS

func BCS(c *Cpu, b byte, v uint16, m Mode)

func BEQ

func BEQ(c *Cpu, b byte, v uint16, m Mode)

func BIT

func BIT(c *Cpu, b byte, v uint16, m Mode)

func BMI

func BMI(c *Cpu, b byte, v uint16, m Mode)

func BNE

func BNE(c *Cpu, b byte, v uint16, m Mode)

func BPL

func BPL(c *Cpu, b byte, v uint16, m Mode)

func BRK

func BRK(c *Cpu, b byte, v uint16, m Mode)

func BVC

func BVC(c *Cpu, b byte, v uint16, m Mode)

func BVS

func BVS(c *Cpu, b byte, v uint16, m Mode)

func CLC

func CLC(c *Cpu, b byte, v uint16, m Mode)

func CLD

func CLD(c *Cpu, b byte, v uint16, m Mode)

func CLI

func CLI(c *Cpu, b byte, v uint16, m Mode)

func CLV

func CLV(c *Cpu, b byte, v uint16, m Mode)

func CMP

func CMP(c *Cpu, b byte, v uint16, m Mode)

func CPX

func CPX(c *Cpu, b byte, v uint16, m Mode)

func CPY

func CPY(c *Cpu, b byte, v uint16, m Mode)

func DCP

func DCP(c *Cpu, b byte, v uint16, m Mode)

func DEC

func DEC(c *Cpu, b byte, v uint16, m Mode)

func DEX

func DEX(c *Cpu, b byte, v uint16, m Mode)

func DEY

func DEY(c *Cpu, b byte, v uint16, m Mode)

func EOR

func EOR(c *Cpu, b byte, v uint16, m Mode)

func INC

func INC(c *Cpu, b byte, v uint16, m Mode)

func INX

func INX(c *Cpu, b byte, v uint16, m Mode)

func INY

func INY(c *Cpu, b byte, v uint16, m Mode)

func ISC

func ISC(c *Cpu, b byte, v uint16, m Mode)

func JMP

func JMP(c *Cpu, b byte, v uint16, m Mode)

func JSR

func JSR(c *Cpu, b byte, v uint16, m Mode)

func LAX

func LAX(c *Cpu, b byte, v uint16, m Mode)

func LDA

func LDA(c *Cpu, b byte, v uint16, m Mode)

func LDX

func LDX(c *Cpu, b byte, v uint16, m Mode)

func LDY

func LDY(c *Cpu, b byte, v uint16, m Mode)

func LSR

func LSR(c *Cpu, b byte, v uint16, m Mode)

func NOP

func NOP(c *Cpu, b byte, v uint16, m Mode)

func ORA

func ORA(c *Cpu, b byte, v uint16, m Mode)

func PHA

func PHA(c *Cpu, b byte, v uint16, m Mode)

func PHP

func PHP(c *Cpu, b byte, v uint16, m Mode)

func PLA

func PLA(c *Cpu, b byte, v uint16, m Mode)

func PLP

func PLP(c *Cpu, b byte, v uint16, m Mode)

func RLA

func RLA(c *Cpu, b byte, v uint16, m Mode)

func ROL

func ROL(c *Cpu, b byte, v uint16, m Mode)

func ROR

func ROR(c *Cpu, b byte, v uint16, m Mode)

func RRA

func RRA(c *Cpu, b byte, v uint16, m Mode)

func RTI

func RTI(c *Cpu, b byte, v uint16, m Mode)

func RTS

func RTS(c *Cpu, b byte, v uint16, m Mode)

func SAX

func SAX(c *Cpu, b byte, v uint16, m Mode)

func SBC

func SBC(c *Cpu, b byte, v uint16, m Mode)

func SEC

func SEC(c *Cpu, b byte, v uint16, m Mode)

func SED

func SED(c *Cpu, b byte, v uint16, m Mode)

func SEI

func SEI(c *Cpu, b byte, v uint16, m Mode)

func SLO

func SLO(c *Cpu, b byte, v uint16, m Mode)

func SRE

func SRE(c *Cpu, b byte, v uint16, m Mode)

func STA

func STA(c *Cpu, b byte, v uint16, m Mode)

func STX

func STX(c *Cpu, b byte, v uint16, m Mode)

func STY

func STY(c *Cpu, b byte, v uint16, m Mode)

func TAX

func TAX(c *Cpu, b byte, v uint16, m Mode)

func TAY

func TAY(c *Cpu, b byte, v uint16, m Mode)

func TRB

func TRB(c *Cpu, b byte, v uint16, m Mode)

func TSB

func TSB(c *Cpu, b byte, v uint16, m Mode)

func TSX

func TSX(c *Cpu, b byte, v uint16, m Mode)

func TXA

func TXA(c *Cpu, b byte, v uint16, m Mode)

func TXS

func TXS(c *Cpu, b byte, v uint16, m Mode)

func TYA

func TYA(c *Cpu, b byte, v uint16, m Mode)

Types

type Cpu

type Cpu struct {
	Register
	M Memory
	T Ticker

	DisableDecimal bool

	// If non nil, will record registers on each step.
	L     []Log
	LI    int // Log index
	Debug bool
	// contains filtered or unexported fields
}

func New

func New(m Memory) *Cpu

func (*Cpu) B

func (c *Cpu) B() bool

func (*Cpu) C

func (c *Cpu) C() bool

func (*Cpu) CLC

func (c *Cpu) CLC()

func (*Cpu) CLD

func (c *Cpu) CLD()

func (*Cpu) CLI

func (c *Cpu) CLI()

func (*Cpu) CLV

func (c *Cpu) CLV()

func (*Cpu) D

func (c *Cpu) D() bool

func (*Cpu) I

func (c *Cpu) I() bool

func (*Cpu) Interrupt

func (c *Cpu) Interrupt()

func (*Cpu) N

func (c *Cpu) N() bool

func (*Cpu) Reset

func (c *Cpu) Reset()

func (*Cpu) Run

func (c *Cpu) Run()

func (*Cpu) SEC

func (c *Cpu) SEC()

func (*Cpu) SED

func (c *Cpu) SED()

func (*Cpu) SEI

func (c *Cpu) SEI()

func (*Cpu) SEV

func (c *Cpu) SEV()

func (*Cpu) Step

func (c *Cpu) Step()

func (*Cpu) String

func (c *Cpu) String() string

func (*Cpu) StringLog

func (c *Cpu) StringLog() string

func (*Cpu) Tick

func (c *Cpu) Tick(i int)

func (*Cpu) V

func (c *Cpu) V() bool

func (*Cpu) Z

func (c *Cpu) Z() bool

type Func

type Func func(*Cpu, byte, uint16, Mode)

type Instruction

type Instruction struct {
	F               Func
	Imm             byte
	ZP, ZPX, ZPY    byte
	ABS, ABSX, ABSY byte
	IND, INDX, INDY byte
	SNGL, BRA       byte
	TIM             timing
}

type Log

type Log struct {
	R    Register
	O    *Op
	I    byte // instruction
	C    int  // cycles
	V, T uint16
	B    byte
}

func (Log) String

func (l Log) String() string

type Memory

type Memory interface {
	Read(uint16) byte
	Write(uint16, byte)
}

type Mode

type Mode int
const (
	MODE_IMM Mode = iota
	MODE_ZP
	MODE_ZPX
	MODE_ZPY
	MODE_ABS
	MODE_ABSX
	MODE_ABSY
	MODE_IND
	MODE_INDX
	MODE_INDY
	MODE_SNGL
	MODE_BRA

	IRQ   = 0xfffe
	RESET = 0xfffc
	NMI   = 0xfffa
)

func (Mode) Format

func (m Mode) Format() string

type Op

type Op struct {
	Mode
	F Func
	T int
}

func (*Op) String

func (o *Op) String() string

type Register

type Register struct {
	A, X, Y, S, P byte
	PC            uint16
}

type Ticker

type Ticker interface {
	Tick()
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL