Fiškálna tlačiareň FP-994

V rokoch 1996 a 1997 som písal firmware pre fiškalny modul FP-994 firmy TriPos. Modul bol založený na 8051 s externou pameťou programu a dát. Pamäť dát je zálohovaná akumulátorom. Modul obsahuje vlastný zdroj času s obvodom RTC fy Epson. K nadriadenému systému bol modul pripojený sériovým rozhraním. Na pripojenie tlačiarne je k dispozícii ešte jedno sériové rozhranie alebo paralelné rozhranie. Volitelne mohol mať modul pripojený aj dvojriadkový LCD displej pre zobrazovanie blokovaných položiek zákazníkovi.

Vývoj pozostával z kompletného vývoja software. Išlo hlavne o:

  1. Príjem príkazu od nadriadeného systému a návrat požadovaných výstupov
  2. Tlač bločku s výpočtom DPH (celkovo až tri rôzne DPH a nulová DPH)
  3. Výpočet denných, mesačných a ročných obratov v príslušných sadzbách DPH
  4. Vytváranie, denných, mesačných a ročných uzávierok a ich tlač
  5. Zobrazovanie údajov na LCD displeji

Jedným z veľkých problémov bolo vytvorenie aritmetiky ktorá by bola dostatočne presná pre požadované obraty (miliardy s presnosťou na haliere). Ukázalo sa že v jazyku C je aritmetika na tento účel nevhodná a preto som vytvoril vlastnú celečíselnú aritmetiku ktorá počítala s dĺžkou 5 byte, čo je 40 bitov. Takáto aritmetika dovoľuje spracovávať čisla v rozsahu -549,755,813,888 až 549,755,813,887. Celočíselná aritmetika vyhovuje, nakoľko je použitý malý fígeľ. Všetky čísla sú vlastne vynasobené hodnotou 100 a pri vypisovaní sa dá desatinná čiarka vždy pred posledné dve číslice.

Násobenie a delenie som robil s číslami s dvojnásobnou presnosťou teda 80 bitov Pri delení som tiež použil obdobnú fintu. Delenec som vynásobil číslom 1000 a tak som dostal výsledný podiel na tri desatinné miesta ktoré som nasledne zaokrúhlil na dve.

Pri výpočtoch denných, mesačných a ročných obratov je dôležité, aby boli konzistentné aj pri vypadku napájania. Pamäť dát je síce zálohovaná, ale celý modul nie. Bolo treba počítať že program pri výpočte môže kedykoľvek skončiť. Program preto používal rôzne príznaky a niekoľko oblastí pamäte tak, aby sa vždy podarilo zrekonštruovať posledný platný stav obratov. V podstate to bol taký malý transakčný systém ako to teraz robia dobré databazy, alebo žurnálové súborové systémy.
Ovladanie tlačiarne, displeja a RTC už bola len programátorská rutina. Nebolo tam toho veľa zaujímavého na riešenie. Bolo to iba hodne rozsiahle a nakoniec výsledný program pozná okolo 30 rôznych príkazov a jeho celková veľkosť je 15kB. Zdrojový tvar programu mal 157kB.

Hlavná stránka