base:6510_features
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:6510_features [2015-04-17 04:30] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== 6510 features ====== | ||
+ | |||
+ | * PHP always pushes the Break (B) flag as a `1' to the stack. Jukka Tapanimäki claimed in C=lehti issue 3/89, on page 27 that the processor makes a logical OR between the status register' | ||
+ | |||
+ | * Indirect addressing modes do not handle page boundary crossing at all. When the parameter' | ||
+ | |||
+ | * Indexed zero page addressing modes never fix the page address on crossing the zero page boundary. E.g. LDX #$01 : LDA ($FF,X) loads the effective address from $00 and $01. | ||
+ | |||
+ | * The processor always fetches the byte following a relative branch instruction. If the branch is taken, the processor reads then the opcode from the destination address. If page boundary is crossed, it first reads a byte from the old page from a location that is bigger or smaller than the correct address by one page. | ||
+ | |||
+ | * If you cross a page boundary in any other indexed mode, the processor reads an incorrect location first, a location that is smaller by one page. | ||
+ | |||
+ | * Read-Modify-Write instructions write unmodified data, then modified (so INC effectively does LDX loc;STX loc;INX;STX loc) | ||
+ | |||
+ | * -RDY is ignored during writes (This is why you must wait 3 cycles before doing any DMA -- the maximum number of consecutive writes is 3, which occurs during interrupts except -RESET.) | ||
+ | |||
+ | * Some undefined opcodes may give really unpredictable results. | ||
+ | |||
+ | * All registers except the Program Counter remain unmodified after -RESET. (This is why you must preset D and I flags in the RESET handler.) | ||
base/6510_features.txt · Last modified: 2015-04-17 04:30 by 127.0.0.1