Rev Author Line No. Line
44 luis 1 ;*******************************************************************************
2 ;*Dekodovani
3 ;*******************************************************************************
4 ;Algorytmus pro dekodovaci proces. Vstupni parametr je Pismeno a tabulka sloupecku.
5 ;Kazdé písmeno je kodovavano jako 3 dvojce sloupeèkù. Ka¾dá dvojce je kodovana 4 bitami.
6 ;První a druhá dvojce je je ulo¾ena v jednom bajtu, posunutém od 00h o hodnotu písmene
7 ;poslední dvojce je ulo¾ená v bajtu zaèínajícím od 20h, sudá písmena v dolních itech, lichá v horních
8 ;
9 ;*******************************************************************************
10 ; dodelat: adresy písmen nemohou být od 00h
11 ;*******************************************************************************
12  
13 ;*Deklarace HW promìnných
14 ;************************
15 f0 equ 0x00 ;registr neprimeho adresovani
16 pcl equ 0x02
17 status equ 0x03
18 fsr equ 0x04 ;registr adresy neprimeho adresovani
19  
20  
21 w equ 0 ; Výsledek ince jde do rW, registr f nezmìnìn.
22 f equ 1 ; Výsledek ince jde do registru f, rW nezmìnìn.
23  
24 ;*Deklarace systémových promìnných
25 ;*********************************
26 RamZ equ 30h ;Zacatek pro pgmove promenne
27 RamK equ 4Fh ;Zacatek pro systemove promenne (roste nahoru)
28  
29 ;Pamì» pro stavový vektor
30 pismeno equ RamZ ;aktualni pismeno k nacteni
31 buffer equ RamZ+1 ;zacatek vykreslovaciho bufferu
32  
33 sloupek1 equ RamK-1 ;jeden sloupecek z navratu
34 sloupek2 equ RamK-1 ;druhy sloupecek z navratu
35 uBuffer equ RamK-4 ;ukazatel na pozici v bufferu
36 dekbajt equ RamK-5 ;bajt, který je práve dekodovan
37 zalohaFsr equ RamK-6 ;zaloha fsr v podprogramech
38  
39 ;*******************************************************************************
40 ;*MAKRA
41 ;*******************************************************************************
42 MBank0 macro
43 bcf status,5 ; makro pro bank0
44 endm
45  
46 MBank1 macro
47 bsf status,5 ; makro pro bank1
48 endm
49  
50  
51  
52 ;*******************************************************************************
53 ;*KONFIGURACE A PREKLAD
54 ;*******************************************************************************
55  
56 list p = 16F84
57 __config 0x3FF1 ;nastaveni konfigurace
58  
59  
60 ;*******************************************************************************
61 ;ZACATEK PROGRAMU
62 ;*******************************************************************************
63 org 0x0000 ;adresa zacatku programu
64 goto ZInit ;skoci na zacatek hlavniho programu
65  
66  
67 ;*******************************************************************************
68 ;*INICIALIZACE
69 ;*******************************************************************************
70  
71  
72 ZInit nop
73  
74  
75 ;*******************************************************************************
76 ;*ZAKLADNI CYKL - OBSLUHY PROCESù
77 ;*******************************************************************************
78 Main: nop
79 movlw B'00000001'
80 call pDekoduj
81  
82 Stuj: nop
83 goto Stuj
84  
85  
86 pDekoduj:
87 clrf uBuffer ;vynulovani ukazatele bufferu
88  
89 movf pismeno, w ;ziskani adresy pismene
90 movwf fsr
91 movf f0,w
92 movwf dekbajt ;ulozeni prave dekodovaneho bajtu do promenne
93  
94 call pPriprav ; vymaskuje bity a vynasobi 4ma
95 call tTabulka1; ; dekoduje první 2 sloupky
96 call pUloz ;ulozi vystup z tabulky na prislusna mista v bufferu
97  
98 swapf f0,w
99 movwf dekbajt ;ulozeni horni casti dekodovaneho bajtu do promene
100  
101 call pPriprav ; vymaskuje bity a vynasobi 4ma
102 call tTabulka2; ; dekoduje druhé 2 sloupky
103 call pUloz
104  
105 rlw fsr,f ;sloupecky 5+6 jsou ulozeny na bajtech o 20h posunutých, a na jendom bajtu jsou v¾dy 2 kody
106 movlw 0x20
107 addwf fsr,f
108  
109 movf f0,w
110 movwf dekbajt ;ulozeni prave dekodovaneho bajtu do promenne
111  
112 btfsc pismeno,0 ; licha pismena jsou ulozena v horních 4 bitech
113 swapf dekbajt
114  
115 call pPriprav ; vymaskuje bity a vynasobi 4ma
116 call tTabulka3; ; dekoduje poslední 2 sloupky
117 call pUloz
118 return
119  
120  
121 pUloz: movwf sloupek2 ;ulozime druhy sloupek z W do promenne
122  
123 movf fsr,w ;uschovame FSR
124 movwf zalohaFsr
125  
126  
127 movlw buffer ;nastaveni fsr na pozici v bufferu
128 addwf uBuffer, w
129 movwf fsr
130  
131 movf sloupek1,w ;ulozeni prvnoho sloupecku
132 movwf f0
133  
134 incf fsr, f ;posun ukazatele
135  
136 movf sloupek2,w ;ulozeni druheho sloupecku
137 movwf f0
138  
139 incf fsr,w ;ulozeni ukazatele, tak aby ukazaoval na dasli polozku
140 movwf uBuffer
141  
142 movf zalohaFsr,w ;obnovicme stare fsr
143 movwf fsr
144 return
145  
146  
147 pPriprav: movlw B'00001111' ;zajimaji nas jenom prvni 4 bity
148 andwf dekbajt,f
149 rlw dekbajt,f ;vynásobíme zádost 4, takze skok bude po 4 instrukcíh
150 rlw dekbajt,w
151 return
152  
153 tTabulka1: addwf pcl,f ;pricte W k citaci instrukci
154 movlw B'00000000' ;prvni kombinace
155 movwf sloupek1 ;ulozi prvni sloupecek do promene
156 retlw B'11000000' ; ulozi druhy sloupecek do W
157 nop
158 movlw B'00000000' ;pruha kombinace
159 movwf sloupek1 ;ulozi prvni sloupecek do promene
160 retlw B'11000000' ; ulozi druhy sloupecek do W
161 nop
162 movlw B'00000000' ;treti kombinace...
163 movwf sloupek1 ;ulozi prvni sloupecek do promene
164 retlw B'11000000' ; ulozi druhy sloupecek do W
165  
166  
167 tTabulka2: addwf pcl,f ;pricte W k citaci instrukci
168 movlw B'00000000' ;prvni kombinace
169 movwf sloupek1 ;ulozi prvni sloupecek do promene
170 retlw B'11000000' ; ulozi druhy sloupecek do W
171 nop
172 movlw B'00000000' ;pruha kombinace
173 movwf sloupek1 ;ulozi prvni sloupecek do promene
174 retlw B'11000000' ; ulozi druhy sloupecek do W
175 nop
176 movlw B'00000000' ;treti kombinace...
177 movwf sloupek1 ;ulozi prvni sloupecek do promene
178 retlw B'11000000' ; ulozi druhy sloupecek do W
179  
180  
181 tTabulka3: addwf pcl,f ;pricte W k citaci instrukci
182 movlw B'00000000' ;prvni kombinace
183 movwf sloupek1 ;ulozi prvni sloupecek do promene
184 retlw B'11000000' ; ulozi druhy sloupecek do W
185 nop
186 movlw B'00000000' ;pruha kombinace
187 movwf sloupek1 ;ulozi prvni sloupecek do promene
188 retlw B'11000000' ; ulozi druhy sloupecek do W
189 nop
190 movlw B'00000000' ;treti kombinace...
191 movwf sloupek1 ;ulozi prvni sloupecek do promene
192 retlw B'11000000' ; ulozi druhy sloupecek do W
193  
194