I had two aims with this project:
1. to learn new MCU (STM32F4xx)
2. to produce practically usable result
There were also another interests (interest in hardware, calculators, way of relaxing... i.e. having fun making such projects
)
So I took MCU, LCD used in other of my procets, made keyborad and link connection, prepared battery holder. After ensuring that I am able to uderstand how TI-86 works (with easy PC application) I started my work on real hardware.
I think that the most difficult part was virtual USB gray-link. It was not problem of USB or MCU but with TI's PC TI connect application. It took me some days of debugging USB to find that not all virtual COM ports can work as gray link. After changing COM port number to sufficiently low number helped and suddenly everything worked as expected.
Another difficult thing to solve was low power after power off is applied. SMT32F4 - at least with RAM enabled - is not low power device. It consumes about 140uA. There are more solutions (external parallel/SPI/I2C RAM/flash/FRAM, SD card). To keep this project simple (MCU, LCD, keys, battery) I have decided to save all RAM into MCU's flash memory (about 1 hour after powering off). Now, the power is low enough (some microamps).
I realized the power of STM32F4 when I worked on reverse-engineering TI-58 preparing ROM dump (another recent project). Some years ago I would use FPGA, today one MCU is enough. Still missing some CPU power? Just add some extra clocks up to 168HMz. To be honest, such frequency is still over all my needs. TI-86 replica runs on 16MHz in idle and switches to 64MHz when needed (calculations or USB connection). When compared to real calculator speed it seems quite similar. I never tried running TI-86 replica at full STM32F4 speed - the reason is battery consumption. I tried to keep the consumption as low as possible for real calc use.
I haven't tried yet how grayscale works. LCD has not grayscale support so it should work as on real calculator: duty cycle of LCD content change will produce illusion of grayscale. The quiestion is how will it slow the calculator down. If such application will be needed, I would suggest to make two (or even more) buffers for LCD control to prevent time-consuming part of LCD data preparation.
My slogan is: until it works, do not modify it. So I have no plans to make any case for it yet. It even corresponds to many tools I have in my work: they are funtional but without any case. One of my ideas was to use original case but unfortunately I wasn't able to find this calc here. I was really near such solution but one fiend managed to throw nonfuctional TI-86 to bin before I asked for it.
It took some time to choose this calculator model. What I appreciate the most is straightforward Hex conversion which is not common for any other calculator. I use such formulas (calculationg many hex values from real inputs) quite often so this calculator helps me a lot every work day.
After some calc research I still think that TI-86 is one of the best calculators I can have for my job. I don't plan any extension or other model's support. But I think that it is not difficult task to do. If someone interested in such work will continue, I will be happy to read about results.