Zkusil jsem vytvořit obdobu starších kalkulátorů - konkrétně repliku kalkulátoru TI-58C - s novodobějším procesorem, ATmega8. Podle odhadu by mohl mít přiměřenou velikost pamětí pro daný účel. Bohužel jsem se dostal jen na 90% práce na firmware, narazil jsem na zaplnění paměti ROM a nedokázal tam vměstnat celý potřebný kód. Převést kód na větší procesor jsem nechtěl, protože kód v assembleru se už stával nepřehledný, a tak budu dál pokračovat raději v C s větším procesorem, v nové koncepci.
Kalkulátor je použitelný jen jako kalkulátor, není funkční programování. Přesto ale má replika zajímavé vlastnosti, jako běžný kalkulátor - počítá s přesností 19 platných číslic, exponent 4 číslice, 60 paměťových buněk. Proto zde uvádím popis kalkulátoru, mohl by být někomu užitečný. Např. využít float knihovny v assembleru AVR.
Upozorňuji že konstrukci jsem odbyl jen jako nejnutnější, abych si vyzkoušel tvorbu firmware, tj. napájení je z USB, tlačítka bez hmatníků, nevhodná krabička a potisky “upatlané”. Řešil jsem jen software, ne hardware.
Ano, zřejmě tento projekt k tomu dospěje, že by mohl být dokončený s ATmega168. Jen už to nebude tak vtipné jako nacpat to do ATmega8.
Teď pomalu dokončuji variantu TI-59 s ATmega644p, ale v C. Kód je 4x větší a stejně tak pomalejší (výsledná rychlost srovnatelná s originálním TI), ale alespoň je dokončení reálnější. Možná pak poslouží jako vzor k dokončení rychlejší a úspornější ASM varianty.
Ono obcas treba rozmyslat pri programovani v Cku. Aby preklad bol pouzitelnejsi. Sice to obcas nejde, alebo kod v c vyzera všelijako. Na druhej strane pre vypoctoch co su na kalkulacke, sa to velm8 vylepsit nebude dat.
Zase 4x vecsi kod sa mi zda dost.
V c9m to robis?
Ve WinAvr. Ten rozdíl mezi C a ASM verzí je především v metodě. ASM verze je dost optimalizovaná podle vzoru kódu ZX Spectrum (makro kód, důsledné používání všech registrů). Ale C verze je psaná obecně - nejen aby byla nezávislá na procesoru, ale aby float knihovna měla konfigurovatelnou přesnost (arbitrary, navíc kompatibilní s IEEE formátem, který není sw implementaci moc nakloněný) - kvůli tomu, protože je to příprava pro následující verzi kalkulačky s ARM procesorem a podstatně vyšší přesností. Takže ten poměr 4x větší i pomalejší je asi tak přiměřený.
U ATmega používám nejčastěji -Os, optimalizace na velikost, bývá spíš problém s pamětí než s rychlostí. Ale stejně to nezmáčkne až tak moc jak by mohl, např. vkládá funke jako inline, musí se mu i tak ještě dost domlouvat.
Update: Dokončil jsem další mezi-prototyp kalkulátoru, rozšířená replika TI-59. Tentokrát už plně funkční, jen neodladěný, protože je to testovací meziverze (proto opět ošklivá kontrukce), ladit budu až poslední nejvyšší verzi. Mohou se proto objevit nefunkčnosti. Tahle verze by měla zajišťovat všechny funkce původní TI-59 plus nějaká nová rozšíření. Používá procesor ATmega644P naprogramovaný v C kódu. K dispozici je i emulátor pro Windows.
Parametry: přesnost 19 číslic, exponent 4 číslice, paměť 1000 programových kroků a 100 registrů, interní záložní paměť EEPROM, načítání programových modulů z SD karty, ukládání programů na SD kartu, tisk do souboru na SD kartu.
Challenge splněn - úspěšně vytvořen klon kalkulátoru TI-57 s rozšířenými funkcemi a “natlačen” do 8 KB ROM procesoru ATmega8. Obzvláště vhodný jako výukové programovadlo do škol, protože umožňuje ovládání externích periferií a je zcela open source. A i pořizovací náklady jsou příjemné (400 Kč).
Doplňuji nové info: Vytvořil jsem mini klon kalkulačky TI-57, programovatelná mini-kalkulačka ET-57M. Určená např. jako náramková kalkulačka na ruku. Má 6-místný LED displej, napájení z baterky CR2032, 12 ovládacích tlačítek a procesor ATmega8. Softwarově má plné vybavení jako kalkulačka ET-57.
I jsem o oled uvažoval a i nějaké koupil , ale zatím se k tomu nedostal a asi už přenechám další hraní jiným. Tady byl důvod pro LED aby se to trochu blížilo původní kalkulačce retro stylem (i když samozřejmě na oled by se asi dal vykouzlit lepší retro vzhled).