The Pentax K30 is made up of a dual core ARM Cortex M4 processor, DSP, a large amount of RAM and various GPIO devices (motors, LEDs etc). One core may be devoted to the DSP and I haven't found any multicore ARM execution just yet.

When the camera is turned on the firmware is loaded from EEPROM into RAM at 0xA0000000. Code execution begins at 0xA0000000, also known as the reset vector.

The K-30 firmware update doesn't include the reset vector and a number of other start-up routines, These seem to only be found on the camera itself. The firmware itself is composed into what looks like three binary blobs. At the moment I think these are core/OS, UI stuff, debug/factory mode.

Reset vector Edit

On boot the camera:

  • Forces the processor into big endian mode. This is probably because the RAM only supports addressing in this way
  • Sets a number of values around 0x60000000. This may be the DSP or another hardware device
  • Moves the processor to a variety of different modes and sets up the stack for each
  • Moves into supervisor mode
  • Sets a number of values around 0x90000000. This may be the DSP or another hardware device
  • Branches to two main() loops depending on whether 0xA0000930 == 0xA0000000 or not

General operation Edit

The main OS code looks like it's written in C. Given the fact that Fujitsu, who produce the chip, and Nikon both use the ITRON OS it's reasonable to assume this also does.

The main UI code is written in C++. It's heavily based around inheritance and singleton patterns. Overall it looks well designed...