Great article! Some points though:
- you get pushed into 6502/65816 emulation/native mode quickly. Maybe one or two sentences are in order to explain them in the first paragraph would be in order
- As a hardware guy I wonder how I would determine this condition: "Hence the logic must not assert ABORT until the processor has asserted the VDA or VPA signals". How do I know the VDA/VPA signals are valid and not leftovers from the previous cycle? I think it's just a wording thing...
- In the "interrupt handler considerations" you write "For NMOS processors, ..." - you do not explicitly explain which ones are the NMOS. Same for other places. Maybe again a sentence in the first paragraph would be in order
- The wording for pushing the index registers and considering the size is a bit complex (at least for a non-native speaker - although I have been accused of the same...
Not knowing much about the 65816 push/pull behaviour, I assume you mean that when you pull the registers with same size as you push them everything should work. I would assume so anyway, as the memory size on stack changes. But at the end of the ISR, how do you know which size you would have to use, if you had to change the index register width during the ISR? Do you have to pull the status then push it again to set the width bit before you pull the index registers? (Ah the next paragraph about the accumulator mentions the second copy of the SR...)
- when you explain using BRK as call operation, you should refer to the section with the BRK bug in NMOS processors
- I think the WAI/STP section has a wrong hrdware RESET vector address
- footnote 4: "no meaning" is a bit harsh... : it is not stored in the processor, only written to stack on ....
Great read!
André
_________________
Author of the GeckOS multitasking operating system, the usb65 stack, designer of the Micro-PET and many more 6502 content:
http://6502.org/users/andre/