I looked through the instruction set, and tried to come up with an outline for writing a 6502 assembly tutorial. The notes are kind of slapped together, but I think you can get the idea.
Introduction - Machine Language, and the 6502 processor. Brief description of what a register is and does, and what memory is used for. Nothing remotely in depth.
Quiz.
Binary and Hexadecimal. Why and how. Conversion between decimal, binary, and hex.
Exercises
Using the 6502 Simulator. Writing and running a first program with presupplied preprocessor code, using only LDA. Get user familiar with simulator, step through, watching registers, etc.
Exercises
Writing and running the second program. LDA, LDX, LDY. More talk about registers.
Explaining why 8 bits and value ranges.
Exercises
INX, INY, DEX, DEY.
Exercises
TAX, TAY, TXA, TYA
Exercises
ADC, SBC
Exercises
STA, STX, STY
Exercises
LDA, LDX, LDY Revisited (Loading from absolute memory, not immediate)
Exercises
INC, DEC
Exercises
ASCII and output to the screen
Exercises
Explanation of code preprocessor stuff (.org $0200, .db, etc.)
More output to the screen stuff using predefined memory, Indexed addressing
Various functions and exercises revisited with output.
Flags register introduction. Carry flag, CLC, SEC
16-32 bit addition exercise
JMP
Exercise
Zero flag, branching.
Looping / revisiting inc/dec
8 bit Multiplication exercise
AND/EOR/ORA, more branching
exercises
CMP, CPX, CPY, BIT, keep on branching and looping!
exercises
ASL, LSR, ROL, ROR
exercises
Introduction to the Stack
PSA, PLA
exercises
Subroutines, JRS, RTS
exercises
More exercises (don't know yet, but more advanced stuff)
Stuff about the stack I don't fully have an application for yet (TSX, TXS, PHP, PLP)
Zero Page
More flags stuff (decimal mode, interrupts, overflow flag)
Branching with overflows and negative flags.
NMI and interrupt codes (RTI)
Throw in NOP for good measure
Final exercise/project
Towards the very end I get a little sketchy about stuff, but I'm 99.99% I can learn that part before I get to the part of writing about it. The toughest part will be designing both educational and entertaining exercises. With some readjustment of my outline, it would be possible to get people to build on previous exercises and make a finite project in the end, which could be very challenging and rewarding. That will take a lot more outlining as well. Plus more sections need to be written for advanced techniques. Which techniques I'm a little at a loss for...
What do you guys think?
Introduction - Machine Language, and the 6502 processor. Brief description of what a register is and does, and what memory is used for. Nothing remotely in depth.
Quiz.
Binary and Hexadecimal. Why and how. Conversion between decimal, binary, and hex.
Exercises
Using the 6502 Simulator. Writing and running a first program with presupplied preprocessor code, using only LDA. Get user familiar with simulator, step through, watching registers, etc.
Exercises
Writing and running the second program. LDA, LDX, LDY. More talk about registers.
Explaining why 8 bits and value ranges.
Exercises
INX, INY, DEX, DEY.
Exercises
TAX, TAY, TXA, TYA
Exercises
ADC, SBC
Exercises
STA, STX, STY
Exercises
LDA, LDX, LDY Revisited (Loading from absolute memory, not immediate)
Exercises
INC, DEC
Exercises
ASCII and output to the screen
Exercises
Explanation of code preprocessor stuff (.org $0200, .db, etc.)
More output to the screen stuff using predefined memory, Indexed addressing
Various functions and exercises revisited with output.
Flags register introduction. Carry flag, CLC, SEC
16-32 bit addition exercise
JMP
Exercise
Zero flag, branching.
Looping / revisiting inc/dec
8 bit Multiplication exercise
AND/EOR/ORA, more branching
exercises
CMP, CPX, CPY, BIT, keep on branching and looping!
exercises
ASL, LSR, ROL, ROR
exercises
Introduction to the Stack
PSA, PLA
exercises
Subroutines, JRS, RTS
exercises
More exercises (don't know yet, but more advanced stuff)
Stuff about the stack I don't fully have an application for yet (TSX, TXS, PHP, PLP)
Zero Page
More flags stuff (decimal mode, interrupts, overflow flag)
Branching with overflows and negative flags.
NMI and interrupt codes (RTI)
Throw in NOP for good measure
Final exercise/project
Towards the very end I get a little sketchy about stuff, but I'm 99.99% I can learn that part before I get to the part of writing about it. The toughest part will be designing both educational and entertaining exercises. With some readjustment of my outline, it would be possible to get people to build on previous exercises and make a finite project in the end, which could be very challenging and rewarding. That will take a lot more outlining as well. Plus more sections need to be written for advanced techniques. Which techniques I'm a little at a loss for...
What do you guys think?