Delete scratch.cpp

This commit is contained in:
ArthurFerreira2 2021-07-07 20:00:44 +02:00 committed by GitHub
parent 92c895243f
commit 423c72ce90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 0 additions and 655 deletions

View File

@ -1,655 +0,0 @@
notes
CALL -151
Emulating an enhanced Apple //e with an Apple IIe Extended 80-Column Text Card, with 64K of additional RAM and a disk ][ interface card in slot 6 with two floppy drives
Problems and bugs :
inverted space is normal ....
# Color Bit Pattern
01 Black 0xFF000000,
02 Dark blue 0xFFCD741C,
09 Magenta Dk red 0xFF5639E2,
Violet purple 0xFFAD6E7E,
04 Light blue 0xFFDFB290,
05 Brown 0xFF225897,
Dark green 0xFF80811F,
Gray1 0xFF7A8289,
Medium blue 0xFFE4A856,
10 Pink 0xFFF0CEFF,
Gray2 0xFF8F979E,
green 0xFF31C090,
13 Orange 0xFF156CEA,
Aqua Lt green 0xFFD5D29F,
15 Yellow 0xFFA6FDFF,
16 White 0xFFFFFFFF
GOOD:
const uint32_t dhcolor[16] = {
0xFF000000, // 01 Black
0xFFCD741C, // 02 Dark blue
0xFF80811F, // 03 Dark green
0xFFDFB290, // 04 Light blue
0xFF225897, // 05 Brown
0xFF7A8289, // Gray1
0xFF31C090, // green
0xFFE4A856, // Medium blue
0xFF5639E2, // 09 Magenta Dk red
0xFFAD6E7E, // Violet purple
0xFF8F979E, // Gray2
0xFFD5D29F, // Aqua Lt green
0xFF156CEA, // 13 Orange
0xFFF0CEFF, // 10 Pink
0xFFA6FDFF, // 15 Yellow
0xFFFFFFFF // 16 White
};
GOOD:
const uint32_t dlcolor[16] = {
0xFF000000, // 01 Black
0xFFCD741C, // 02 Dark blue
0xFF80811F, // 03 Dark green
0xFFDFB290, // 04 Light blue
0xFF225897, // 05 Brown
0xFF7A8289, // Gray1
0xFF31C090, // green
0xFFE4A856, // Medium blue
0xFF5639E2, // 09 Magenta Dk red
0xFFAD6E7E, // Violet purple
0xFF8F979E, // Gray2
0xFFD5D29F, // Aqua Lt green
0xFF156CEA, // 13 Orange
0xFFF0CEFF, // 10 Pink
0xFFA6FDFF, // 15 Yellow
0xFFFFFFFF // 16 White
};
# Color Bit Pattern
1 Black 0000 #121315 0xFF131512, #000000
9 Brown 0001 #874912 0xFF491287,
5 Dark green 0010 #238681 0xFF868123,
13 green 0011 #94C434 0xFFC43494,
3 Dark blue 0100 #1E79D2 0xFF79D21E,
11 Gray2 0101 #9D9690 0xFF96909D,
7 Medium blue 0110 #6BBDF9 0xFFBDF96B,
15 Aqua Lt green 0111 #99CDCB 0xFFCDCB99,
2 Magenta Dk Red 1000 #E73C5C 0xFF3C5CE7,
10 Orange 1001 #EE7420 0xFF7420EE,
6 Gray1 1010 #9C9791 0xFF97919C,
14 Yellow 1011 #FEFCA5 0xFFFCA5FE,
4 Violet purple 1100 #9384C2 0xFF84C293,
12 Pink 1101 #F7B5D8 0xFFB5D8F7,
8 Light blue 1110 #A2C4F2 0xFFC4F2A2,
16 White 1111 #FFFFFF 0xFFFFFFFF
const uint32_t dhcolor[16] = {
0xFF000000, 0xFF5639E2, 0xFFCD741C, 0xFFAD6E7E,
0xFF80811F, 0xFF7A8289, 0xFFE4A856, 0xFFDFB290,
0xFF225897, 0xFF156CEA, 0xFF8F979E, 0xFFF0CEFF,
0xFF31C090, 0xFFA6FDFF, 0xFFD5D29F, 0xFFFFFFFF
};
from aIIinPC
const uint32_t hdcolor[16] = {
0xFF131512,
0xFF3C5CE7,
0xFF79D21E,
0xFF84C293,
0xFF868123,
0xFF97919C,
0xFFBDF96B,
0xFFC4F2A2,
0xFF491287,
0xFF7420EE,
0xFF96909D,
0xFFB5D8F7,
0xFFC43494,
0xFFFCA5FE,
0xFFCDCB99,
0xFFFFFFFF
};
BAD :
const uint32_t color[16] = {
0xFF000000, 0xFF5639E2, 0xFF225897, 0xFF156CEA,
0xFF80811F, 0xFF7A8289, 0xFF31C090, 0xFFA6FDFF,
0xFFCD741C, 0xFFAD6E7E, 0xFF8F979E, 0xFFF0CEFF,
0xFFE4A856, 0xFFDFB290, 0xFFD5D29F, 0xFFFFFFFF
};
BAD :
const uint32_t dhcolor[16] = {
0xFF000000, 0xFF225897, 0xFF80811F, 0xFF31C090,
0xFFCD741C, 0xFF8F979E, 0xFFE4A856, 0xFFD5D29F,
0xFF5639E2, 0xFF156CEA, 0xFF7A8289, 0xFFA6FDFF,
0xFFAD6E7E, 0xFFF0CEFF, 0xFFDFB290, 0xFFFFFFFF
};
BAD :
const uint32_t dhcolor[16] = {
0xFFFFFFFF,
0xFFDFB290,
0xFFF0CEFF,
0xFFAD6E7E,
0xFFA6FDFF,
0xFF7A8289,
0xFF156CEA,
0xFF5639E2,
0xFFD5D29F,
0xFFE4A856,
0xFF8F979E,
0xFFCD741C,
0xFF31C090,
0xFF80811F,
0xFF225897,
0xFF000000
};
ROMS : https://comp.sys.apple2.narkive.com/yOkYv09h/rom-identification
Apple IIe
342-0134-A EF
342-0135-A CD
341-0150-A Keyboard (UK)
341-0151-A Keyboard (DE)
342-0160 Video (UK)
Apple //e Enhanced
342-0303 EF
342-0304 CD
342-0265 Video (Mousetext US)
Apple //e Platinum
342-0349-A CF
342-0150-A Keyboard (UK)
342-0273-A Video (Mousetext UK)
342-0275-A Video (Mousetext DE)
//e and //ee :
KEYBOARD :
Three special keys-Control, Shift, and Caps Lock-change the
codes generated by the other keys. The Control key is similar to the
ASCII CTRL key.
Three other keys have special functions: the Reset key, and two keys
marked with apples, one outlined (Open Apple) and one solid
(Solid Apple). Pressing the Reset key with the Control key depressed
resets the Apple Ile, as described in Chapter 4. The Apple keys are
connected to the one-bit game inputs, described later in this
chapter.
On the extended keyboard lie the Solid Apple key Is labeled
Option: the Solid Apple and Option keys are functionally
Identical. Also note that manuals accompanying products with
the Solid Apple labeled as Option may refer to the Open Apple
key as simply the Apple key
$COOO Keyboard data and strobe
$C010 Any-key-down flag and dear-strobe switch
Your program can find out whether any key is down, except the
Reset, Control, Shift, Caps Lock, Open Apple, and Solid Apple (or
Option, on the extended keyboard Ile) keys, by reading from
location $COOO
The Open Apple and Solid Apple keys are connected to switches 0
and 1 of the game I/0 connector inputs. If OA is pressed, switch 0 is
"pressed," and if Solid Apple is pressed, switch 1 is "pressed."
On the extended keyboard lie, the Shift key Is connected to
switch 2 of the game 1/0 ports via the X6 jumper (single-wire
Shift-key mod jumper).
Two more special keys are the Apple keys, Open Apple and Solid
Apple, located on either side of the Space bar. These keys are
connected to the one-bit game inputs, which are described later in
this chapter in the section switch Inputs." Pressing them in
combination with the Control and Reset keys causes the built-in
firmware to perform special reset and self-test cycles, described
with the reset routine in Chapter 4.
VIDEO :
composite video compatible with the standard set by the NTSC
For a clear 80-column display, you must use a high-resolution video monitor
with a bandwidth of 14 MHz or greater.
When you turn on power or reset the Apple Ile, the 80-column
firmware is inactive and the Apple IIe displays the primary
character set, even if an 80-column text card is installed. When you
activate the 80-column firmware, it switches to the alternate
character set.
There are actually two versions of 40-column text mode sup-
ported by the //e. The "standard" 40-column mode is the one that
is usually in effect and is easily identified by its characteristic
"checkerboard" cursor that is displayed whenever keyboard in-
formation is being requested. The other version is the "special"
40-column mode that is available when the //e's 80-column firm-
ware is being used; in this mode the cursor is an inverse block that
does not flash
Once you are in 80-column mode, you can switch between the
80-column mode and the special 40-column mode whenever key-
board information is being requested by using the two special
escape sequences discussed in Chapter 6: ESC 4 and ESC 8. For
example, if you are in 80-column mode and you want to enter the
special 40-column mode, enter the sequence
ESC 4
If you want to go in the opposite direction, enter the sequence
ESC 8
// TODO : implement double hi-res :
// high-resolution graphics, 140 by 192, in 6 colors
// high-resolution graphics, 280 by 192, in black and white
// double high-resolution graphics, 140 by 192, in 16 colors (with optional 64K text card)
// double high-resolution graphics, 560 by 192, in black and white (with optional 64K text card)
===
integration is Dear IMGUI
show :
- registers
- live disassembly
- memory dump one window per page ?
- video memory, page 1, page 2
- sound shape
- disassembler
- joystick setup / live view
- live callstack view with support for imported symbols
- stepping by cycle / frame
- VRAM viewer - HIRES page 1, page 2
- audio buffer viewer, with pretty waveform plots
- savestate support in the most hacky way possible
===
void GUI::renderHoverText(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
if (ImGui::IsItemHovered()) {
ImGui::BeginTooltip();
ImGui::TextV(fmt, args);
ImGui::EndTooltip();
}
va_end(args);
}
===
float fps = ImGui::GetIO().Framerate;
ImGui::Text("FPS: %.1f (%.1fx speed)", fps, fps / 61.0f);
===
ImGui::Text("Save state: ");
ImGui::PushID(0);
for (int i = 0; i < 10; ++i) {
if (i > 0)
ImGui::SameLine();
if (ImGui::SmallButton(std::to_string(i).c_str())) {
emu->saveState(i);
}
}
ImGui::PopID();
===
ImGui::Checkbox("Fast forward", &emu->cpu.fastForward);
ImGui::Checkbox("Step mode", &emu->cpu.stepMode);
if (ImGui::Button("Step instruction (space)")) {
emu->cpu.stepInst = true;
}
if (ImGui::Button("Step frame (f)")) {
emu->cpu.stepFrame = true;
}
===
ImGui::Text("cycle: %d", emu->cpu.c); // ticks
===
if (ImGui::CollapsingHeader("Disassembly @ PC", ImGuiTreeNodeFlags_DefaultOpen)) {
char buf[25 * 20];
buf[0] = '\0';
emu->cpu.disassemble(emu->cpu.r.pc, 20, buf);
ImGui::Text("%s", buf);
}
===
case SDLK_F1: // SAVES
if (ctrl) {
if (saveFloppy(0))
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Save", "\nDisk 1 saved back to file\n", NULL);
else
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Save", "\nTError while saving Disk 1\n", NULL);
} else if (alt) {
if (saveFloppy(1))
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Save", "\nDisk 2 saved back to file\n", NULL);
else
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Save", "\nError while saving Disk 2\n", NULL);
} else {
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_WARNING, "Save", "CTRL-F1 to save D1\nALT-F1 to save D2\n", NULL);
}
break;
===
case SDLK_F2: { // SCREENSHOTS
sshot = SDL_GetWindowSurface(wdo);
SDL_RenderReadPixels(rdr, NULL, SDL_GetWindowPixelFormat(wdo), sshot->pixels, sshot->pitch);
workDir[workDirSize] = 0;
int i = -1, a = 0, b = 0;
while (disk[0].filename[++i] != '\0') {
if (disk[0].filename[i] == '\\') a = i;
if (disk[0].filename[i] == '.') b = i;
}
strncat(workDir, "screenshots\\", 14);
if (a != b) strncat(workDir, disk[0].filename + a, b - a);
else strncat(workDir, "no disk", 10);
strncat(workDir, ".bmp", 5);
SDL_SaveBMP(sshot, workDir);
SDL_FreeSurface(sshot);
break;
}
===
if (opened_popup) {
ImGui::SetKeyboardFocusHere();
}
===
ImGui::Begin("RAM", &show_ram_window);
if (ImGui::Button("SEARCH")) {};
ImGui::SameLine();
if (ImGui::Button("DISASSEMBLE")) {};
ImGui::SameLine();
if (ImGui::Button("SET PC")) {};
ImGui::Separator();
ImGui::End();
===
----------------------------------------------------------------
| |
| |
| Rockwell |
| |
| 666 5555555 CCCC 000 22222 |
| 6 5 C C 0 0 2 2 |
| 6 5 C 0 0 0 2 |
| 666666 555555 C 0 0 0 222 |
| 6 6 5 C 0 0 0 2 |
| 6 6 5 C C 0 0 2 |
| 66666 555555 CCCC 000 2222222 |
| |
| 65C02 CMOS MICROPROCESSOR Instruction Set Summary |
| |
| |
| |
| |
| |
| _________ _________ |
| _| \__/ |_ ___ |
| Vss |_|1 40|_| RES <-- |
| _| |_ |
| --> RDY |_|2 39|_| CLK2 --> |
| _| |_ |
| <-- CLK1 |_|3 38|_| NC |
| ___ _| |_ |
| --> IRQ |_|4 37|_| CLK0 <-- |
| _| |_ |
| NC |_|5 36|_| NC |
| ___ _| |_ |
| --> NMI |_|6 35|_| NC |
| _| |_ _ |
| --> SYNC |_|7 34|_| R/W --> |
| _| |_ |
| Vcc |_|8 33|_| DB7 <--> |
| _| |_ |
| <-- A0 |_|9 32|_| DB6 <--> |
| _| |_ |
| <-- A1 |_|10 65C02 31|_| DB5 <--> |
| _| |_ |
| <-- A2 |_|11 30|_| DB4 <--> |
| _| |_ |
| <-- A3 |_|12 29|_| DB3 <--> |
| _| |_ |
| <-- A4 |_|13 28|_| DB2 <--> |
| _| |_ |
| <-- A5 |_|14 27|_| DB1 <--> |
| _| |_ |
| <-- A6 |_|15 26|_| DB0 <--> |
| _| |_ |
| <-- A7 |_|16 25|_| A15 --> |
| _| |_ |
| <-- A8 |_|17 24|_| A14 --> |
| _| |_ |
| <-- A9 |_|18 23|_| A13 --> |
| _| |_ |
| <-- A10 |_|19 22|_| A12 --> |
| _| |_ |
| <-- A11 |_|20 21|_| Vss |
| |______________________| |
| |
| |
| |
| |
| |
| |
|Written by Jonathan Bowen |
| Programming Research Group |
| Oxford University Computing Laboratory |
| 8-11 Keble Road |
| Oxford OX1 3QD |
| England |
| |
| Tel +44-865-273840 |
| |
|Created November 1984 |
|Updated April 1985 |
|Issue 1.1 Copyright (C) J.P.Bowen 1985|
----------------------------------------------------------------
----------------------------------------------------------------
|Mnem. |Op|NVBDIZC|A#ZBIRX@|~|Description |Notes |
|------+--+-------+--------+-+---------------------+-----------|
|ADC s|6D|**---**| XxX XX|4|Add with Carry |A=A+s+C %|
|AND s|2D|*----*-| XxX XX|4|Logical AND |A=A&s %|
|ASL d|0E|*----**| xx |6|Arith. Shift Left |d={C,d,0}<-|
|ASLA |0A|*----**|X |2|Arith. Shift Left |A={C,d,0}<-|
|BBRb z|0F|-------| * X |2|Branch if Bit Reset |If s<b>=0 |
|BBSb z|8F|-------| * X |2|Branch if Bit Set |If s<b>=1 |
|BCC a|90|-------| X |2|Branch if Carry Clear|If C=0(4~)%|
|BCS a|B0|-------| X |2|Branch if Carry Set |If C=1(4~)%|
|BEQ a|F0|-------| X |2|Branch if Equal |If Z=1(4~)%|
|BIT s|2C|**---*-| Xxx |4|Bit Test |A&s $|
|BMI a|30|-------| X |2|Branch if Minus |If N=1(4~)%|
|BNE a|D0|-------| X |2|Branch if Not Equal |If Z=0(4~)%|
|BPL a|10|-------| X |2|Branch if Plus |If N=0(4~)%|
|BRA a|80|-------| X |2|Branch Always |PC=a (4~)%|
|BRK |00|--+-1--| X |7|Break(-[S]={PC+2,P}) |PC=[FFFEH] |
|BVC a|50|-------| X |2|Branch if Overflw Clr|If V=0(4~)%|
|BVS a|70|-------| X |2|Branch if Overflw Set|If V=1(4~)%|
|CLC |18|------0| X |2|Clear Carry flag |C=0 |
|CLD |D8|---0---| X |2|Clear Decimal mode |D=0 |
|CLI |58|----0--| X |2|Clear Int. disable |I=0 |
|CLV |B8|-0-----| X |2|Clear Overflow flag |V=0 |
|CMP s|CD|*----**| XxX XX|4|Compare |A-s |
|CPX s|EC|*----**| X** |4|Compare index reg. |X-s |
|CPY s|CC|*----**| X** |4|Compare index reg. |Y-s |
|DEC d|CE|*----*-| xx |6|Decrement |d=d-1 |
|DECA |3A|*----*-|X |6|Decrement Acc. |A=A-1 |
|DEX |CA|*----*-| X |2|Decrement index reg. |X=X-1 |
|DEY |88|*----*-| X |2|Decrement index reg. |Y=Y-1 |
|EOR s|4D|*----*-| XxX XX|4|Logical Exclusive OR |A=Axs %|
|INC d|EE|*----*-| xx |6|Increment |d=d+1 |
|INCA |1A|*----*-|X |6|Increment Acc. |A=A+1 |
|INX |E8|*----*-| X |2|Increment index reg. |X=X+1 |
|INY |C8|*----*-| X |2|Increment index reg. |Y=Y+1 |
|JMP s|4C|-------| * X|3|Jump |PC=s $|
|JSR s|20|-------| * |6|Jump to Subroutine |-[S]=PC+2=s|
|LDA s|AD|*----*-| XxX XX|4|Load Accumulator |A=s %|
|LDX s|AE|*----*-| Xyy |4|Load index register |X=s $%|
|LDY s|AC|*----*-| Xxx |4|Load index register |Y=s %|
|LSR d|4E|0----**| xx |6|Logical Shift Right |d=->{0,d,C}|
|LSRA |4A|0----**|X |2|Logical Shift Right |A=->{0,A,C}|
|NOP |EA|-------| X |2|No Operation | |
|ORA s|0D|*----*-| XxX XX|4|Logical Inclusive OR |A=Avs |
|PHA |48|-------| X |3|Push Accumulator |-[S]=A |
|PHP |08|-------| X |3|Push status register |-[S]=P |
|PHX |DA|-------| X |2|Push index register |-[S]=X |
|PHY |5A|-------| X |2|Push index register |-[S]=Y |
|PLA |68|-------| X |4|Pull Accumulator |A=[S]+ |
|PLP |28|*******| X |4|Pull status register |P=[S]+ |
|PLX |FA|-------| X |2|Pull index register |X=[S]+ |
|PLY |7A|-------| X |2|Pull index register |Y=[S]+ |
|RMBb d|07|-------| * |5|Reset Memory Bit |d<b>=0 |
|ROL d|2E|*----**| xx |6|Rotate Left |d={C,d}<- |
|ROLA |2A|*----**|X |2|Rotate Left Acc. |A={C,A}<- |
|ROR d|6E|*----**| xx |6|Rotate Right |d=->{C,d} |
|RORA |6A|*----**|X |2|Rotate Right Acc. |A=->{C,A} |
|RTI |40|*******| X |6|Return from Interrupt|{PC,P}=[S]+|
|RTS |60|-------| X |6|Return from Subr. |PC={[S]+}+1|
|SBC s|ED|*----**| XxX XX|4|Subtract with Carry |A=A-s-C %|
|SEC |38|------1| X |2|Set Carry flag |C=1 |
|SED |F8|---1---| X |2|Set Decimal mode |D=1 |
|SEI |78|----1--| X |2|Set Interrupt disable|I=1 |
|SMBb d|87|-------| * |5|Set Memory Bit |d<b>=1 |
|STA d|8D|-------| xX XX|4|Store Accumulator |d=A |
|STX d|8E|-------| y* |4|Store index register |d=X |
|STY d|8C|-------| x* |4|Store index register |d=Y |
|STZ d|9C|-------| xx |4|Store Zero |d=0 $|
|TAX |AA|*----*-| X |2|Transfer Accumulator |X=A |
|TAY |A8|*----*-| X |2|Transfer Accumulator |Y=A |
|TRB d|1C|**---*-| ** |2|Test and Reset Bits |d=~A&d |
|TSB d|0C|**---*-| ** |2|Test and Set Bits |d=Avd |
|TSX |BA|*----*-| X |2|Transfer Stack ptr |X=S |
|TXA |8A|*----*-| X |2|Transfer index reg. |A=X |
|TXS |9A|-------| X |2|Transfer index reg. |S=X |
|TYA |98|*----*-| X |2|Transfer index reg. |A=Y |
|------+--+-------+--------+-+---------------------------------|
| |XX| | |X|Hexadecimal opcode/no. of cycles |
----------------------------------------------------------------
----------------------------------------------------------------
|Mnemonic |NVBDIZC|A#ZBIRX@|Description |
|---------+-------+--------+-----------------------------------|
| P |-*01+ | |Unaff/affected/reset/set/stack set |
| N |N | |Negative status (Bit 7) |
| V | V | |Overflow status (Bit 6) |
| B | B | |Break command indicator (Bit 4) |
| D | D | |Decimal mode control (Bit 3) |
| I | I | |Interrupt disable control (Bit 2) |
| Z | Z | |Zero status (Bit 1) |
| C | C| |Carry status (Bit 0) |
|------------------+--------+----------------------------------|
| |* |Only non-indexed mode valid |
| |x |X and non-indexed mode valid |
| |y |Y and non-indexed mode valid |
| |X |All modes valid |
|-----------------+--------+-----------------------------------|
| | |Add XXH to opcode |+XXH| |
| | |Subtract XXH from opcode |-XXH| |
| | |Add X to number of cycles | |+X|
| | |Subtract X from cycles | |-X|
|-----------------+--------+---------------------------+----+--|
| b | |Bit number (b=0-7) |+b0H| |
| A |A |Accumulator | | |
| #n | # |Immediate |-0CH|-2|
| #n | # | ditto (opcode = XDH) | X9H| 2|
| BIT #n | # | ditto (special case) | 89H| 2|
| <n | Z |Zero page |-08H|-1|
| STZ n | Z | ditto (special case) | 64H| 3|
| n | * |Zero page (direct mode) |-08H|-1|
| n,X | x |Zero page indexed (X) |+08H|+0|
| n,Y | y |Zero Page indexed (Y) |+08H|+0|
| >nn | B |Absolute |+00H|+0|
| nn | * |Absolute (extended mode) |+00H|+0|
| nn,X | x |Absolute indexed (X) |+10H|+0|
| nn,Y | y |Absolute indexed (Y) |+0CH|+0|
| LDX nn,Y | y | ditto (special case) | BEH| 4|
| | I |Implicit | | |
| a | R |Relative (PC=PC+1+offset) | |+2|
| [nn,X] | x |Indexed indirect (X) |-0CH|+2|
| [nn],Y | y |Indirect indexed (Y) |+04H|+1|
| [nn] | @|Absolute indirect |+05H|+1|
| JMP [nn] | @| ditto (special case) | 6CH| 5|
|--------------------------+-----------------------------------|
| A |Accumulator (8-bit) |
| P |Processor status register (8-bit) |
| PC |Program Counter (16-bit) |
| S |Stack pointer (9-bit, MSB=1) |
| X |Index register X (8-bit) |
| Y |Index register Y (8-bit) |
|--------------------------+-----------------------------------|
| a |Relative address (-128 to +127) |
| b |Bit number (0 to 7) |
| d |Destination |
| n |8-bit expression (0 to 255) |
| nn |16-bit expression (0 to 65535) |
| s |Source |
| z |Zero page, relative address (n,a) |
|--------------------------+-----------------------------------|
| + - |Arithmetic addition/subtraction |
| * / |Arithmetic multiplication/division |
| & ~ |Logical AND/NOT |
| v x |Logical inclusive/exclusive OR |
| <- -> |Rotate left/right |
| [ ] |Indirect addressing |
| [ ]+ |Post-increment indirect addressing |
| -[ ] |Pre-decrement indirect addressing |
| { } |Combination of operands |
| < > |Bit number |
| $ |Special case for addressing mode |
| % |~s=~s+1 if crossing page boundary |
|--------------------------+-----------------------------------|
|0000H to 00FFH |Page 0 (see zero page addressing) |
|0100H to 01FFH |Page 1 (stack area, 01FFH = start) |
|XX00H to XXFFH |Page n (where n=XXH) |
|FFFAH to FFFBH |Non maskable interrupt vector(NMI) |
|FFFCH to FFFDH |Reset (RES) vector |
|FFFEH to FFFFH |Interrupt Request vector (IRQ) |
|FFFEH to FFFFH |Break command vector (see BRK) |
----------------------------------------------------------------
===
===
===
===