I think that ADC channels are wrong numbers in real mega48a chip (28pin pdip).
Instead reading adc0 it read 1,
adc1 - read adc 2,
adc2 - read adc 0.
When I program mega8 with same adc initialization for mega48a, mega8 work read ADC right.
Proteus simulating read adc for mega48a right.