Strangely I can't find this information anywhere online -- I've thoroughly looked at the datasheet, and I've searched things like "Z80 program counter initial value" -- but I can't find anything!

My question is simply: when the Z80 just turns on, what value does the program counter take? (i.e., what instruction does it start executing from?)

Logically, I'd assume it initialises to 0, but I want to be sure of this.

  • IIRC when we ran CP/M on a TRS-80 Model I, it required a hardware mod because there was a 4 k ROM starting at address 0, so the OS couldn't gain control of the hardware. Mar 28 '19 at 13:37

Yes, it starts from Zero - like the Intel 8080, the Z80 descends from.

Excerpt from Zilog's March 1978 Product Specification (datasheet), page 2, Pin Description, here the /RESET signal (emphasis mine):

Input, active low. RESET initializes the CPU as follows: reset interrupt enable flip-flop, clear PC and registers I and R and set interrupt to 8080A mode.

Similar the description in the 1977 Z80 Technical Manual (03-0029-01) on page 9.

  • 2
    Thanks! I actually didn't know that the 8080 started at zero either, but it makes complete sense. Mar 27 '19 at 17:50
  • 15
    @dashnick Many don't just start, but take a vector form a predefined location like 6500 and 6800 start at the vector residing at FFFE/FF, 68k takes the initial PC from Vector 1 (address 4..7). Other do start form some address where the IOC locates a loader record, and so on. Starting from Zero is only one of many ways.
    – Raffzahn
    Mar 27 '19 at 20:57
  • 10
    Intels 8086 employs an interesting combination by starting a offset zero, like 8080/Z80, but in segment FFFF, thus at absolute address FFFF0.
    – Raffzahn
    Mar 27 '19 at 21:19
  • 4
    6502 chip reset starts at a vector found at FFFC. FFFA and FFFE are for interrupts. In other words, reset makes a 6502 do JMP(FFFC). But the 6502 requires 0000-01FF be RAM since those are zero page (basically registers) and the stack. Mar 27 '19 at 23:39
  • 2
    PDP-11 starts from a location stored at location 50 (octal), if my memory from 40 years ago is to be trusted, or else a bootstrap program starting at that location. We called it the '50-sequence', and often had to enter it from the console toggle switches.
    – user207421
    Mar 28 '19 at 3:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.