26

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.

1
  • 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.
    – user4766
    Commented Mar 28, 2019 at 13:37

1 Answer 1

27

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.

8
  • 2
    Thanks! I actually didn't know that the 8080 started at zero either, but it makes complete sense. Commented Mar 27, 2019 at 17:50
  • 17
    @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
    Commented Mar 27, 2019 at 20:57
  • 11
    Intels 8086 employs an interesting combination by starting a offset zero, like 8080/Z80, but in segment FFFF, thus at absolute address FFFF0.
    – Raffzahn
    Commented Mar 27, 2019 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. Commented Mar 27, 2019 at 23:39
  • 3
    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
    Commented Mar 28, 2019 at 3:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .