Hi everyone,
I'm new here so hope you won't mind a (very) basic question, and apologies if it has been asked before!
I was browsing through Tom Owad's Apple 1 Replica Creation book for some information on Apple 1 / Replica 1's memory map and trying to understand the initialisation process when the unit is switched on, and I understand that like any other 6502-based system it ultimately looks for an address (a reset vector) at a specific memory location. Looking at what it says in the book (from Chapter 7, page 216):
" The 6502 microprocessor requires that a memory address be stored at addresses $FFFE and $FFFF (the address is 16-bit, so it takes two bytes). When the 6502 is reset, it immediately loads the address at $FFEF and $FFFF into its program counter and begins executing that address. Thus, you need to have a ROM at $FFFE–$FFFF"
A couple of questions
- It mentions $FFFE and $FFFF, then in the next sentence mentions $FFEF and $FFFF - is this just a typo?
- I fired up my Replica 1 to check $FFFE and $FFFF and found 00 00. I did a bit more digging online and I found that for other 6502 based machines the reset vector is in $FFFC and $FFFD, and I can see that these memory locations indeed contain 00 FF (referring to $FF00), which is the start location of the WozMon. Also it seems that $FFFE-$FFFF is the location of the interrupt request/break vector in the 6502 memory map (unused in the Apple 1). Is this a mistake in the book?
Thanks,
Gabriele (neonblurb)
With full respect to the site owner, what you have found is a mistake. The 6502 reset vector is indeed taken from $FFFC $FFFD in "little-endian" order. This is confirmed in authoritative books about the operation of the Apple II, including Winston Gayler's "The Apple II Circuit Description" and Jim Sather's "Understanding the Apple II".
The reset vector is also correctly printed in the Apple I Monitor ROM listing in the original 1976 manual.
As said by robespierre, the 6502 looks at address FFFC and FFFD for the reset vector.
If you look in the source code of WOZMON, you will see that it contains RESET (ie: 00 FF), the address of WOZMON itself.
https://github.com/jefftranter/6502/blob/22166afa9b612e34636c45527dcd985bf4fcaa4e/asm/wozmon/wozmon.s#L159