Modding the Kodak Reels 8mm Film Digitizer (Firmware Hack)

larryc39

New Tinkerer
Jan 2, 2025
10
3
3
I've reached out to Scorpion.Vision about shipping, when trying to check out the selected lens and spacer it only offers me the option of expedited shipping at the cost of the lens! No matter where you buy from, these lenses all seem to be in the range of $80-90USD.

It looks like the part is an Aliba item known as "ACH1228MAC ". I wasn't able to find anyone else selling lenses meeting the spec of these two.
 

domb84

New Tinkerer
Jan 27, 2025
23
3
3
@0dan0 do you have any details on how you fixed the low res capture and scaling and altered the white balance? I've now got working flashable firmware for the m127 and would like to replicate those fixes if possible.


If you have any pointers that would be amazing.
 

0dan0

Tinkerer
Jan 13, 2025
115
173
43
I've reached out to Scorpion.Vision about shipping, when trying to check out the selected lens and spacer it only offers me the option of expedited shipping at the cost of the lens! No matter where you buy from, these lenses all seem to be in the range of $80-90USD.

It looks like the part is an Aliba item known as "ACH1228MAC ". I wasn't able to find anyone else selling lenses meeting the spec of these two.
The best solution for the crazy shipping rate for international is using forward2me.com, it will get you a "local" UK address for free shipping from Scorpion, then forward to a US address via the shipping service and pricing you prefer.

This also does appear to be the same lens: https://www.alibaba.com/product-detail/2-3-F2-8-F5-6_60737321317.html, but cost are still high.
 

0dan0

Tinkerer
Jan 13, 2025
115
173
43
@0dan0 do you have any details on how you fixed the low res capture and scaling and altered the white balance? I've now got working flashable firmware for the m127 and would like to replicate those fixes if possible.


If you have any pointers that would be amazing.
Most of my methods and findings are documented in this thread. I used the serial port and shell to do memory dumps to find interesting data like the image size https://tinkerdifferent.com/threads...gitizer-firmware-hack.2897/page-13#post-35093

White balance was a little easier. That is a page earlier.
 

domb84

New Tinkerer
Jan 27, 2025
23
3
3
Thanks. Did you decompile the firmware in ghidra or some such? I'm a complete novice at C and hacking firmware!
 

0dan0

Tinkerer
Jan 13, 2025
115
173
43
Thanks. Did you decompile the firmware in ghidra or some such? I'm a complete novice at C and hacking firmware!
Yes, but that only help once you have found an address or something to look for. Ghidra is not very helpful on it own, but a good C knowledge is needed.
 

0dan0

Tinkerer
Jan 13, 2025
115
173
43
@domb84 Can you confirm you have a work serial port? This is 95% needed for everything that happens after. Mac84 has a excellent breakdown on adding the serial port (https://docs.google.com/document/d/1htmhRHyY_kEjoiTgSInV0PeXvzyXTMaXDYJ_3Ai4A4A/edit?tab=t.0 ). On the Reels serial port you will get out output as debug statements:

No stock firmware I see this:
Info->sieCropHini = 762 Info->sieCropVini = 492 !!!!!!!!!!!!

That looks interesting, when I zoom-in these values go up (these are the coordinates for the top left corner.) So I use a good hexeditor, like HxD (free) or 010 Editor (way better as it has MIPS disassembler), and search on "sieCropHini" . At address 0xdbe478 in the firmware I find this string:

Info->sieCropHini = %d Info->sieCropVini = %d !!!!!!!!!!!!

So this is passed at a formatted output like printf() or sprintf(), with input values of x and y.

So we need to find where is referenced in 0xdbe390 in the code.

The compiler used for these old processors seems to always use the register 'a0' for the first parameter in a called function. So a call like printf(a0, a1, a2 ...), the string address (0xdbe390) is likely loaded into a0. MIPS is a old 32-bit CPU, so it can only load 16-bit into a register with a single instruction. So 0x00db is loaded separately to 0xe390.

BTW: I knew nothing about MIPS, I had to learn all of this while hacking. This is ghridra was a bit helpful, as a learning tool to explain MIPS to me, but also I used a lot of ChatGPT.

The compiler could load 0x00db like
lui $a0, 0x00db <- Load upper immediate

but in this case it did this
lui $a0, 0x00dc <- Load upper immediate

This seems weird, the default compiler behavior to use the add function for the second part.
addiu $a0, 0xe390 <- As 0xe000 has the top bit set (0x8000) is treated a negative (e.g. -0x1c70)

It is all weird, but logical. The add opcode is always

<addr> <command>
90 e3 84 24

So when I search on 90 e3 84 24 (little endian format), I found where the resolution is set up with the scanner.

1749510203468.png


So the opcodes for the highlighted bytes are:

lui $a0, 0x80dc - Load upper immediate
move $a2,$s2 - ignore for now as it is not $a0
sw $a2, 8($a0) - ignore for now as it is not $a0
jal - this is the call to printf() or similar
addiu $a0, $a0, -0x1c70 - Adding e390 to 0x80db0000, is the same as added -0x1c70 to 0x80dc0000.

More MIPS weirdness, the instruction following branch (jal) is executed before the call to 0x80160.

So search on the bottom 16-bits for the thing you want to find, then make sure the top 16-bit are setup correctly. Then you found the code area, to have ghidra look at. You can test by removing the print call. Replace 5800020c (jal 0x80160) with 00000000, a No Op. The code with run without the print.

I use the call to 0x80160 to add my own print-outs to learn more of the scanner behavior.
 
  • Like
Reactions: eyeidea

eyeidea

New Tinkerer
Jun 5, 2025
6
3
3
Hi y'all,

I received my Kodak Reels unit today: K3124148BK0XXXX
Ran a 50' Super8 test scan and the unit works as it should.
I used the firmware lookup: https://mac84.net/8mmlookup/
It said use 'B'.
I put the SD card back in the unit and formatted it.
Turned off the machine and ejected the card.
Loaded 'FWDV280.bin' to the root directory of the card.
Put card in unit and started up.
There was no 20-30 pause, it just started right up.
Firmware appears to still be on OEM 2.0.
Next I tried @0dan0 's 'FWDV280-TypeB-V6.0' firmware - same result.

Am I doing something wrong?

Thank you!
 

domb84

New Tinkerer
Jan 27, 2025
23
3
3
That's amazingly detailed thanks @0dan0. I've not setup a serial port. I'm not sure if there is one on the M127 so I'll take a look. Sadly my C knowledge is zero and I'm not a developer. I could hack around with it if it was something simple like Python but my brain isn't cut out for proper programming! I did notice all the serial port commands are hidden away in the binary with some syntax, so perhaps if I can find a serial port I'll take a look.
 

fishgee

New Tinkerer
Jan 6, 2025
16
6
3
Hi y'all,

I received my Kodak Reels unit today: K3124148BK0XXXX
Ran a 50' Super8 test scan and the unit works as it should.
I used the firmware lookup: https://mac84.net/8mmlookup/
It said use 'B'.
I put the SD card back in the unit and formatted it.
Turned off the machine and ejected the card.
Loaded 'FWDV280.bin' to the root directory of the card.
Put card in unit and started up.
There was no 20-30 pause, it just started right up.
Firmware appears to still be on OEM 2.0.
Next I tried @0dan0 's 'FWDV280-TypeB-V6.0' firmware - same result.

Am I doing something wrong?

Thank you!
For a Serial starting with K312, I believe you need firmware "C", not "B". That worked for me.
 
  • Like
Reactions: eyeidea

eyeidea

New Tinkerer
Jun 5, 2025
6
3
3
For a Serial starting with K312, I believe you need firmware "C", not "B". That worked for me.
@fishgee Tried firmware C, same result. Reels unit just boots as normal. Takes only a couple seconds.

Wondering if Kodak changed something in these newer ones? Should I return this and find an 'A' or 'B' version?
 

0dan0

Tinkerer
Jan 13, 2025
115
173
43
Make sure you are using a 32GB or smaller card. Firmware updates only works from FAT32 cards (smaller media)
 
  • Like
Reactions: eyeidea

0dan0

Tinkerer
Jan 13, 2025
115
173
43
BootLogo1600x1200-V6.1B.png
BootLogo1600x1200-V6.1C.png


v6.1 for type B & C

In an attempt to make the frame more stable, dark images can now increase to ISO 200 (range 50-200), rather than a 16ms shutter time (4ms is the max in v6.1.) The console logging is improved to support this:
iso:100 shut:3493 enc frame:26
iso:100 shut:3837 enc frame:27
iso:200 shut:2107 enc frame:27
iso:200 shut:2314 enc frame:28
iso:200 shut:2542 enc frame:28

Type B now has working exposure controls. In 6.0, the histogram was working, but the exposure controls where still pointing to Type C address. I've since found these difference between the units:
Type A:
0x80e56134 - ISO 50 to 1600 (0x32 to 0x640)
0x80e56138 - exposure time 230us to 32767 (0xe5 to 0x7fff (or more))

Type B:
0x80e56224 - ISO 50 to 1600 (0x32 to 0x640)
0x80e56228 - exposure time 230us to 32767 (0xe5 to 0x7fff (or more))

Type C:
0x80e556b4 - ISO 50 to 1600 (0x32 to 0x640)
0x80e556b8 - exposure time 230us to 32767 (0xe5 to 0x7fff (or more))
Type B is not not look as detailed as type C, don't why yet.
 

Attachments

  • FWDV280-TypeB-V6.1-0dan0.zip
    5.5 MB · Views: 13
  • FWDV280-TypeC-V6.1-0dan0.zip
    5.5 MB · Views: 12
Last edited:

eyeidea

New Tinkerer
Jun 5, 2025
6
3
3
@0dan0 Just flashed my Type C w/ 6.1 but the screen is still showing v.6.0 - the unit did go through the update process - :20 delay and all so maybe it worked and its just the screen graphic that is incorrect.

not complaining – just feedback 😎
 
  • Like
Reactions: fishgee

0dan0

Tinkerer
Jan 13, 2025
115
173
43
@0dan0 Just flashed my Type C w/ 6.1 but the screen is still showing v.6.0 - the unit did go through the update process - :20 delay and all so maybe it worked and its just the screen graphic that is incorrect.

not complaining – just feedback 😎
You are correct. Corrected Zip attached
 

Attachments

  • FWDV280-TypeC-V6.1-0dan0.zip
    5.5 MB · Views: 19
  • Like
Reactions: eyeidea

domb84

New Tinkerer
Jan 27, 2025
23
3
3
image.jpg

These look promising to get a serial connection running on the m127. If i manage to get a console up and running will have a go at resolving the issues in that firmware.