Let's see five words: 早上,晚上,中午,上午,下午。
The first two words 早上&晚上,上 is no meaning in these words, so we use neutral tone.
But 上 in 上午 do have meaning, like above noon or befere noon, so is forth tone.
Anyway, the neutral tone is come from forth tone. If you prounce zǎoshàng instead of zǎoshang, is not a big deal. That's why you can see two versions of the pronunciation.