enum CPU::AddressModes

Overview

The modes of addressing

Defined in:

cr6502/addressing.cr

Enum Members

Accumulator = 0

There are a number of "atomic read/modify/write" instructions which can address EITHER Memory OR the Accumulator (A)

Immediate = 1

A better name for this mode might be Immediate Value as no "addressing" actually takes place.

ZeroPage = 2

Much like Absolute Addressing, but can only address the first 256 (0..255) bytes of memory.

ZeroPageX = 3

In Zero-Page Addressing the destination address is fixed by the programmer (or assembler) at assembly time. By using the hard-coded address as a base, and CPU#x_index as an Index, a more dynamic addressing system can be implemented. With Zero-Page, only the first 256 (0..255) bytes of memory may be addressed. So if the result of Base+CPU#x_index is greater than $FF, wrapping will occur.

ZeroPageY = 4

In Zero-Page Addressing the destination address is fixed by the programmer (or assembler) at assembly time. By using the hard-coded address as a base, and CPU#y_index as an Index, a more dynamic addressing system can be implemented. With Zero-Page, only the first 256 (0..255) bytes of memory may be addressed. So if the result of Base+CPU#y_index is greater than $FF, wrapping will occur.

Absolute = 5

Read a value from a 16-bit address Remember without special external hardware for paging, the 6502 only has a maximum of 64K of address space available - so 16-bits is enough to address ANY byte of memory.

AbsoluteX = 6

In Absolute Addressing the destination address is fixed by the programmer (or assembler) at assembly time. By using the hard-coded address as a base, and CPU#x_index as an Index, a more dynamic addressing system can be implemented. If the result of Base+CPU#x_index is greater than $FFFF, wrapping will occur.

AbsoluteY = 7

In Absolute Addressing the destination address is fixed by the programmer (or assembler) at assembly time. By using the hard-coded address as a base, and CPU#y_index as an Index, a more dynamic addressing system can be implemented. If the result of Base+CPU#y_index is greater than $FFFF, wrapping will occur.

Indirect = 8

With this instruction, the 8-but address (location) supplied by the programmer is considered to be a Zero-Page address, that is, an address in the first 256 (0..255) bytes of memory. The content of this Zero-Page address must contain the low 8-bits of a memory address The following byte (the contents of address+1) must contain the upper 8-bits of a memory address Once this memory address has been read from the Zero-Page location (specified by the programmer), this calculated memory address is then examined, and it's contents are returned.

IndirectX = 9

This addressing mode is only available with X. Much like Indirect Addressing, but the contents of the index register is added to the Zero-Page address (location) If Base_Location+Index is greater than $FF, wrapping will occur.

IndirectY = 10

This addressing mode is only available with Y. Much like Indexed Addressing, but the contents of the index register is added to the Base_Location after it is read from Zero-Page memory. If Base_Location+Index is greater than $FFFF, wrapping will occur.

Instance Method Summary

Instance Method Detail

def absolute? #

[View source]
def absolute_x? #

[View source]
def absolute_y? #

[View source]
def accumulator? #

[View source]
def immediate? #

[View source]
def indirect? #

[View source]
def indirect_x? #

[View source]
def indirect_y? #

[View source]
def zero_page? #

[View source]
def zero_page_x? #

[View source]
def zero_page_y? #

[View source]