Rev 193 Rev 195
1 CCS PCW C Compiler, Version 3.110, 15448 1 CCS PCW C Compiler, Version 3.110, 15448
2   2  
3 Filename: mb01a.LST 3 Filename: mb01a.LST
4   4  
5 ROM used: 1536 (75%) 5 ROM used: 1536 (75%)
6 Largest free fragment is 512 6 Largest free fragment is 512
7 RAM used: 29 (17%) at main() level 7 RAM used: 29 (17%) at main() level
8 88 (50%) worst case 8 88 (50%) worst case
9 Stack: 6 worst case (5 in main + 1 for interrupts) 9 Stack: 6 worst case (5 in main + 1 for interrupts)
10   10  
11 * 11 *
12 0000: MOVLW 00 12 0000: MOVLW 00
13 0001: MOVWF 0A 13 0001: MOVWF 0A
14 0002: GOTO 595 14 0002: GOTO 595
15 0003: NOP 15 0003: NOP
16 0004: MOVWF 7F 16 0004: MOVWF 7F
17 0005: SWAPF 03,W 17 0005: SWAPF 03,W
18 0006: CLRF 03 18 0006: CLRF 03
19 0007: MOVWF 21 19 0007: MOVWF 21
20 0008: MOVF 7F,W 20 0008: MOVF 7F,W
21 0009: MOVWF 20 21 0009: MOVWF 20
22 000A: MOVF 0A,W 22 000A: MOVF 0A,W
23 000B: MOVWF 28 23 000B: MOVWF 28
24 000C: CLRF 0A 24 000C: CLRF 0A
25 000D: SWAPF 20,F 25 000D: SWAPF 20,F
26 000E: MOVF 04,W 26 000E: MOVF 04,W
27 000F: MOVWF 22 27 000F: MOVWF 22
28 0010: MOVF 77,W 28 0010: MOVF 77,W
29 0011: MOVWF 23 29 0011: MOVWF 23
30 0012: MOVF 78,W 30 0012: MOVF 78,W
31 0013: MOVWF 24 31 0013: MOVWF 24
32 0014: MOVF 79,W 32 0014: MOVF 79,W
33 0015: MOVWF 25 33 0015: MOVWF 25
34 0016: MOVF 7A,W 34 0016: MOVF 7A,W
35 0017: MOVWF 26 35 0017: MOVWF 26
36 0018: MOVF 7B,W 36 0018: MOVF 7B,W
37 0019: MOVWF 27 37 0019: MOVWF 27
38 001A: BCF 03.7 38 001A: BCF 03.7
39 001B: BCF 03.5 39 001B: BCF 03.5
40 001C: MOVLW 8C 40 001C: MOVLW 8C
41 001D: MOVWF 04 41 001D: MOVWF 04
42 001E: BTFSS 00.2 42 001E: BTFSS 00.2
43 001F: GOTO 022 43 001F: GOTO 022
44 0020: BTFSC 0C.2 44 0020: BTFSC 0C.2
45 0021: GOTO 0CB 45 0021: GOTO 0CB
46 0022: MOVF 22,W 46 0022: MOVF 22,W
47 0023: MOVWF 04 47 0023: MOVWF 04
48 0024: MOVF 23,W 48 0024: MOVF 23,W
49 0025: MOVWF 77 49 0025: MOVWF 77
50 0026: MOVF 24,W 50 0026: MOVF 24,W
51 0027: MOVWF 78 51 0027: MOVWF 78
52 0028: MOVF 25,W 52 0028: MOVF 25,W
53 0029: MOVWF 79 53 0029: MOVWF 79
54 002A: MOVF 26,W 54 002A: MOVF 26,W
55 002B: MOVWF 7A 55 002B: MOVWF 7A
56 002C: MOVF 27,W 56 002C: MOVF 27,W
57 002D: MOVWF 7B 57 002D: MOVWF 7B
58 002E: MOVF 28,W 58 002E: MOVF 28,W
59 002F: MOVWF 0A 59 002F: MOVWF 0A
60 0030: SWAPF 21,W 60 0030: SWAPF 21,W
61 0031: MOVWF 03 61 0031: MOVWF 03
62 0032: SWAPF 7F,F 62 0032: SWAPF 7F,F
63 0033: SWAPF 7F,W 63 0033: SWAPF 7F,W
64 0034: RETFIE 64 0034: RETFIE
65 .................... // Melodicky zvonek MB01A_1_00 65 .................... // Melodicky zvonek MB01A_1_00
66 .................... // 66 .................... //
67 .................... // Prohram pro melodicky zvonek s pouzitim knihovny Sound_t1.C 67 .................... // Prohram pro melodicky zvonek s pouzitim knihovny Sound_t1.C
68 .................... // 68 .................... //
69 .................... // (c)miho 2004, pefi 2004 69 .................... // (c)miho 2004, pefi 2004
70 .................... // 70 .................... //
71 .................... // Historie: 71 .................... // Historie:
72 .................... // 1.00 Uvodni verze 72 .................... // 1.00 Uvodni verze
73 .................... // 1.01 Zaveden WDT 73 .................... // 1.01 Zaveden WDT
74 .................... 74 ....................
75 .................... #include <16F819.h> // Definice procesoru 75 .................... #include <16F819.h> // Definice procesoru
76 .................... //////// Standard Header file for the PIC16F628 device //////////////// 76 .................... //////// Standard Header file for the PIC16F628 device ////////////////
77 .................... #device PIC16F819 77 .................... #device PIC16F819
78 .................... #list 78 .................... #list
79 .................... 79 ....................
80 .................... #fuses HS,NOPROTECT,WDT,PUT,NOLVP,NOBROWNOUT,WRT // Definice konfiguracniho slova 80 .................... #fuses HS,NOPROTECT,WDT,PUT,NOLVP,NOBROWNOUT,WRT // Definice konfiguracniho slova
81 .................... 81 ....................
82 .................... #define POWER_386 PIN_A4 // L zapne napajeni pro zesilovac LM386 82 .................... #define POWER_386 PIN_A4 // L zapne napajeni pro zesilovac LM386
83 .................... #define POWER_PIC PIN_A3 // L pripoji GND pro procesor PIC 83 .................... #define POWER_PIC PIN_A3 // L pripoji GND pro procesor PIC
84 .................... 84 ....................
85 .................... #define SOUND_HI PIN_B3 // Akusticky vystup 85 .................... #define SOUND_HI PIN_B3 // Akusticky vystup
86 .................... #define SOUND_LO PIN_B2 // Akusticky vystup 86 .................... #define SOUND_LO PIN_B2 // Akusticky vystup
87 .................... #define SOUND_CLOCK 20000000 // Frekvence hodin 87 .................... #define SOUND_CLOCK 20000000 // Frekvence hodin
88 .................... #define SOUND_LowOctave 1 // O oktavu vys protoze mame moc rychly krystal 88 .................... #define SOUND_LowOctave 1 // O oktavu vys protoze mame moc rychly krystal
89 .................... #define SOUND_WDT 1 // Budeme pouzivat WDT 89 .................... #define SOUND_WDT 1 // Budeme pouzivat WDT
90 .................... #include "Sound_T1.c" // Hudebni knihovna 90 .................... #include "Sound_T1.c" // Hudebni knihovna
91 .................... // Knihovna pro generovani hudebnich zvuku dane frekvence a delky nebo 91 .................... // Knihovna pro generovani hudebnich zvuku dane frekvence a delky nebo
92 .................... // dane noty temperovaneho ladeni a delky. 92 .................... // dane noty temperovaneho ladeni a delky.
93 .................... // 93 .................... //
94 .................... // Pro gnerovani pouziva casovac T0, T1 a jednotku CCP1. 94 .................... // Pro gnerovani pouziva casovac T0, T1 a jednotku CCP1.
95 .................... // 95 .................... //
96 .................... // POZOR -- POZOR -- POZOR 96 .................... // POZOR -- POZOR -- POZOR
97 .................... // Pri nizsi frekvenci XTALu (nez asi 5MHz) je rezie preruseni tak velka, ze spotrebuje 97 .................... // Pri nizsi frekvenci XTALu (nez asi 5MHz) je rezie preruseni tak velka, ze spotrebuje
98 .................... // veskery strojovy cas a uz nedojde k ukonceni rozehraneho tonu vyssi frekvence (z oktavy 7 98 .................... // veskery strojovy cas a uz nedojde k ukonceni rozehraneho tonu vyssi frekvence (z oktavy 7
99 .................... // nebo nad cca 8KHz). Resenim je pouzit vlastni INT proceduru s minimalni rezii. 99 .................... // nebo nad cca 8KHz). Resenim je pouzit vlastni INT proceduru s minimalni rezii.
100 .................... // 100 .................... //
101 .................... // (c)miho 2004, pefi 2004, 101 .................... // (c)miho 2004, pefi 2004,
102 .................... // 102 .................... //
103 .................... // Historie 103 .................... // Historie
104 .................... // 1.00 Uvodni verze 104 .................... // 1.00 Uvodni verze
105 .................... // 1.01 Pridana podpora zapnuteho WDT 105 .................... // 1.01 Pridana podpora zapnuteho WDT
106 .................... 106 ....................
107 .................... // Konfiguracni parametry 107 .................... // Konfiguracni parametry
108 .................... //#define SOUND_HI PIN_xx // Pozitivni vystup 108 .................... //#define SOUND_HI PIN_xx // Pozitivni vystup
109 .................... //#define SOUND_LO PIN_xx // Komplementarni vystup 109 .................... //#define SOUND_LO PIN_xx // Komplementarni vystup
110 .................... //#define SOUND_WDT 1 // Pokud je pouzit WDT 110 .................... //#define SOUND_WDT 1 // Pokud je pouzit WDT
111 .................... #ifndef SOUND_CLOCK 111 .................... #ifndef SOUND_CLOCK
112 .................... #define SOUND_CLOCK 4000000 // Frelvence krystalu v Hz 112 .................... #define SOUND_CLOCK 4000000 // Frelvence krystalu v Hz
113 .................... #endif 113 .................... #endif
114 .................... 114 ....................
115 .................... 115 ....................
116 .................... // Definice hudebnich tonu (not) pro proceduru SoundNote() 116 .................... // Definice hudebnich tonu (not) pro proceduru SoundNote()
117 .................... #define SOUND_C 0 117 .................... #define SOUND_C 0
118 .................... #define SOUND_Cis 1 118 .................... #define SOUND_Cis 1
119 .................... #define SOUND_D 2 119 .................... #define SOUND_D 2
120 .................... #define SOUND_Dis 3 120 .................... #define SOUND_Dis 3
121 .................... #define SOUND_E 4 121 .................... #define SOUND_E 4
122 .................... #define SOUND_F 5 122 .................... #define SOUND_F 5
123 .................... #define SOUND_Fis 6 123 .................... #define SOUND_Fis 6
124 .................... #define SOUND_G 7 124 .................... #define SOUND_G 7
125 .................... #define SOUND_Gis 8 125 .................... #define SOUND_Gis 8
126 .................... #define SOUND_A 9 126 .................... #define SOUND_A 9
127 .................... #define SOUND_Ais 10 127 .................... #define SOUND_Ais 10
128 .................... #define SOUND_H 11 128 .................... #define SOUND_H 11
129 .................... #define SOUND_Space 12 // Pomlka 129 .................... #define SOUND_Space 12 // Pomlka
130 .................... 130 ....................
131 .................... 131 ....................
132 .................... // Prototypy verejnych procedur 132 .................... // Prototypy verejnych procedur
133 .................... 133 ....................
134 .................... void SoundBeep(unsigned int16 Frequency, unsigned int16 Duration); 134 .................... void SoundBeep(unsigned int16 Frequency, unsigned int16 Duration);
135 .................... // Predava se frekvence v Hz a doba trvani v ms (0 znamena ticho) 135 .................... // Predava se frekvence v Hz a doba trvani v ms (0 znamena ticho)
136 .................... 136 ....................
137 .................... void SoundNote(unsigned int8 Note, Octave, unsigned int16 Duration); 137 .................... void SoundNote(unsigned int8 Note, Octave, unsigned int16 Duration);
138 .................... // Predava se cislo noty (0 je C), posunuti v oktavach (0 nejnizsi ton, 138 .................... // Predava se cislo noty (0 je C), posunuti v oktavach (0 nejnizsi ton,
139 .................... // SOUND_Space je ticho), doba trvani v ms 139 .................... // SOUND_Space je ticho), doba trvani v ms
140 .................... 140 ....................
141 .................... // Alternativni makra pro generovani konstatnich tonu 141 .................... // Alternativni makra pro generovani konstatnich tonu
142 .................... // SoundBeepMacro(Frequency, Duration) - frekvence nesmi byt 0 142 .................... // SoundBeepMacro(Frequency, Duration) - frekvence nesmi byt 0
143 .................... // SoundNoteMacro(Note, Octave, Duration) - nepodporuje SOUND_Space 143 .................... // SoundNoteMacro(Note, Octave, Duration) - nepodporuje SOUND_Space
144 .................... // SoundSpaceMacro(Duration) - hraje ticho 144 .................... // SoundSpaceMacro(Duration) - hraje ticho
145 .................... 145 ....................
146 .................... // Privatni cast 146 .................... // Privatni cast
147 .................... 147 ....................
148 .................... 148 ....................
149 .................... #int_ccp1 149 .................... #int_ccp1
150 .................... void IntCCP1() 150 .................... void IntCCP1()
151 .................... // Preruseni od jednotky CCP1 generuje vystup 151 .................... // Preruseni od jednotky CCP1 generuje vystup
152 .................... { 152 .................... {
153 .................... volatile int1 Data; // Posledni stav vystupu 153 .................... volatile int1 Data; // Posledni stav vystupu
154 .................... output_bit(SOUND_HI,Data); // Nastav vystup 154 .................... output_bit(SOUND_HI,Data); // Nastav vystup
155 * 155 *
156 00CB: BTFSC 72.0 156 00CB: BTFSC 72.0
157 00CC: GOTO 0CF 157 00CC: GOTO 0CF
158 00CD: BCF 06.3 158 00CD: BCF 06.3
159 00CE: GOTO 0D0 159 00CE: GOTO 0D0
160 00CF: BSF 06.3 160 00CF: BSF 06.3
161 00D0: BSF 03.5 161 00D0: BSF 03.5
162 00D1: BCF 06.3 162 00D1: BCF 06.3
163 .................... output_bit(SOUND_LO,~Data); 163 .................... output_bit(SOUND_LO,~Data);
164 00D2: BTFSS 72.0 164 00D2: BTFSS 72.0
165 00D3: GOTO 0D8 165 00D3: GOTO 0D8
166 00D4: BCF 03.5 166 00D4: BCF 03.5
167 00D5: BCF 06.2 167 00D5: BCF 06.2
168 00D6: GOTO 0DA 168 00D6: GOTO 0DA
169 00D7: BSF 03.5 169 00D7: BSF 03.5
170 00D8: BCF 03.5 170 00D8: BCF 03.5
171 00D9: BSF 06.2 171 00D9: BSF 06.2
172 00DA: BSF 03.5 172 00DA: BSF 03.5
173 00DB: BCF 06.2 173 00DB: BCF 06.2
174 .................... Data=~Data; // Otoc stav vystupu 174 .................... Data=~Data; // Otoc stav vystupu
175 00DC: MOVLW 01 175 00DC: MOVLW 01
176 00DD: XORWF 72,F 176 00DD: XORWF 72,F
177 .................... } 177 .................... }
178 .................... 178 ....................
179 .................... 179 ....................
180 .................... #if SOUND_CLOCK < (65535*32*4*2) // < 16.7 MHz 180 .................... #if SOUND_CLOCK < (65535*32*4*2) // < 16.7 MHz
181 .................... #define SOUND_PRESCALE 1 181 .................... #define SOUND_PRESCALE 1
182 .................... #elif SOUND_CLOCK < (65535*32*4*2*2) // < 33.6 MHz 182 .................... #elif SOUND_CLOCK < (65535*32*4*2*2) // < 33.6 MHz
183 .................... #define SOUND_PRESCALE 2 183 .................... #define SOUND_PRESCALE 2
184 .................... #elif SOUND_CLOCK < (65535*32*4*2*4) // < 67.1 MHz 184 .................... #elif SOUND_CLOCK < (65535*32*4*2*4) // < 67.1 MHz
185 .................... #define SOUND_PRESCALE 4 185 .................... #define SOUND_PRESCALE 4
186 .................... #elif SOUND_CLOCK < (65535*32*4*2*8) // < 134 MHz 186 .................... #elif SOUND_CLOCK < (65535*32*4*2*8) // < 134 MHz
187 .................... #define SOUND_PRESCALE 8 187 .................... #define SOUND_PRESCALE 8
188 .................... #else 188 .................... #else
189 .................... #error SOUND_CLOCK Frequency too high 189 .................... #error SOUND_CLOCK Frequency too high
190 .................... #endif 190 .................... #endif
191 00DE: BCF 03.5 191 00DE: BCF 03.5
192 00DF: BCF 0C.2 192 00DF: BCF 0C.2
193 00E0: BCF 0A.3 193 00E0: BCF 0A.3
194 00E1: GOTO 022 194 00E1: GOTO 022
195 .................... #bit T0IF=0x0B.2 195 .................... #bit T0IF=0x0B.2
196 .................... void SoundBeep(unsigned int16 Frequency, unsigned int16 Duration) 196 .................... void SoundBeep(unsigned int16 Frequency, unsigned int16 Duration)
197 .................... // Predava se frekvence v Hz a doba trvani v ms (0 znamena ticho) 197 .................... // Predava se frekvence v Hz a doba trvani v ms (0 znamena ticho)
198 .................... // Rozumne frekvence jsou od 32Hz 198 .................... // Rozumne frekvence jsou od 32Hz
199 .................... { 199 .................... {
200 .................... unsigned int16 Time; // Pocitadlo zlomkoveho casu 200 .................... unsigned int16 Time; // Pocitadlo zlomkoveho casu
201 .................... 201 ....................
202 .................... // Inicializace casovace 202 .................... // Inicializace casovace
203 .................... if (Frequency!=0) // Frekvence 0 znamena ticho 203 .................... if (Frequency!=0) // Frekvence 0 znamena ticho
204 .................... { 204 .................... {
205 .................... setup_ccp1(CCP_COMPARE_RESET_TIMER); 205 .................... setup_ccp1(CCP_COMPARE_RESET_TIMER);
206 .................... set_timer1(0); 206 .................... set_timer1(0);
207 .................... (int16)CCP_1=SOUND_CLOCK/SOUND_PRESCALE/4/2/Frequency; 207 .................... (int16)CCP_1=SOUND_CLOCK/SOUND_PRESCALE/4/2/Frequency;
208 .................... #if SOUND_PRESCALE==1 208 .................... #if SOUND_PRESCALE==1
209 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); 209 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
210 .................... #elif SOUND_PRESCALE==2 210 .................... #elif SOUND_PRESCALE==2
211 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); 211 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
212 .................... #elif SOUND_PRESCALE==4 212 .................... #elif SOUND_PRESCALE==4
213 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); 213 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
214 .................... #elif SOUND_PRESCALE==8 214 .................... #elif SOUND_PRESCALE==8
215 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); 215 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
216 .................... #endif 216 .................... #endif
217 .................... enable_interrupts(int_ccp1); 217 .................... enable_interrupts(int_ccp1);
218 .................... enable_interrupts(global); 218 .................... enable_interrupts(global);
219 .................... } 219 .................... }
220 .................... 220 ....................
221 .................... // Delka tonu merena casovacem T0 (bez preruseni) 221 .................... // Delka tonu merena casovacem T0 (bez preruseni)
222 .................... Time=0; 222 .................... Time=0;
223 .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 223 .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
224 .................... while (Duration) 224 .................... while (Duration)
225 .................... { 225 .................... {
226 .................... #ifdef SOUND_WDT 226 .................... #ifdef SOUND_WDT
227 .................... restart_wdt(); // Nuluj watchdog abychom se nezresetovali 227 .................... restart_wdt(); // Nuluj watchdog abychom se nezresetovali
228 .................... #endif 228 .................... #endif
229 .................... if (T0IF) // Preteceni T0 - kazdych (1/CLK)*4*256 229 .................... if (T0IF) // Preteceni T0 - kazdych (1/CLK)*4*256
230 .................... { 230 .................... {
231 .................... T0IF = 0; 231 .................... T0IF = 0;
232 .................... Time += (256*4*1000*2048+SOUND_CLOCK/2)/SOUND_CLOCK; 232 .................... Time += (256*4*1000*2048+SOUND_CLOCK/2)/SOUND_CLOCK;
233 .................... } 233 .................... }
234 .................... if (Time>>11) 234 .................... if (Time>>11)
235 .................... { 235 .................... {
236 .................... Time -= 2048; 236 .................... Time -= 2048;
237 .................... Duration--; 237 .................... Duration--;
238 .................... } 238 .................... }
239 .................... } 239 .................... }
240 .................... 240 ....................
241 .................... // Konec casovace 241 .................... // Konec casovace
242 .................... disable_interrupts(int_ccp1); 242 .................... disable_interrupts(int_ccp1);
243 .................... disable_interrupts(global); 243 .................... disable_interrupts(global);
244 .................... } 244 .................... }
245 .................... 245 ....................
246 .................... 246 ....................
247 .................... // Definice casu pulperody pro nejnizsi oktavu, v kvantech casovace T1 247 .................... // Definice casu pulperody pro nejnizsi oktavu, v kvantech casovace T1
248 .................... // Pulperiody tonu v dalsich oktavach se ziskavaji rotaci vpravo 248 .................... // Pulperiody tonu v dalsich oktavach se ziskavaji rotaci vpravo
249 .................... #define SOUND_Peri_C ((30578*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 30578us 249 .................... #define SOUND_Peri_C ((30578*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 30578us
250 .................... #define SOUND_Peri_Cis ((28862*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 28862us 250 .................... #define SOUND_Peri_Cis ((28862*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 28862us
251 .................... #define SOUND_Peri_D ((27242*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 27242us 251 .................... #define SOUND_Peri_D ((27242*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 27242us
252 .................... #define SOUND_Peri_Dis ((25713*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 25713us 252 .................... #define SOUND_Peri_Dis ((25713*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 25713us
253 .................... #define SOUND_Peri_E ((24270*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 24270us 253 .................... #define SOUND_Peri_E ((24270*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 24270us
254 .................... #define SOUND_Peri_F ((22908*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 22908us 254 .................... #define SOUND_Peri_F ((22908*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 22908us
255 .................... #define SOUND_Peri_Fis ((21622*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 21622us 255 .................... #define SOUND_Peri_Fis ((21622*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 21622us
256 .................... #define SOUND_Peri_G ((20408*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 20408us 256 .................... #define SOUND_Peri_G ((20408*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 20408us
257 .................... #define SOUND_Peri_Gis ((19263*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 19263us 257 .................... #define SOUND_Peri_Gis ((19263*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 19263us
258 .................... #define SOUND_Peri_A ((18182*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 18182us 258 .................... #define SOUND_Peri_A ((18182*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 18182us
259 .................... #define SOUND_Peri_Ais ((17161*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 17161us 259 .................... #define SOUND_Peri_Ais ((17161*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 17161us
260 .................... #define SOUND_Peri_H ((16198*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 16198us 260 .................... #define SOUND_Peri_H ((16198*(SOUND_CLOCK/1000)/1000/4/2)/SOUND_PRESCALE) // Perioda 16198us
261 .................... 261 ....................
262 .................... // Kontrola na delku konstanty (musi byt mensi nez delka citace) 262 .................... // Kontrola na delku konstanty (musi byt mensi nez delka citace)
263 .................... #if SOUND_Peri_C > 65535 263 .................... #if SOUND_Peri_C > 65535
264 .................... #error "SOUND_Peri_C too long (Note C requires delay > 65535 cycles)" 264 .................... #error "SOUND_Peri_C too long (Note C requires delay > 65535 cycles)"
265 .................... #endif 265 .................... #endif
266 .................... 266 ....................
267 .................... // Casove konstanty pro noty nejnizsi oktavy 267 .................... // Casove konstanty pro noty nejnizsi oktavy
268 .................... const unsigned int16 Table[12] = 268 .................... const unsigned int16 Table[12] =
269 .................... SOUND_Peri_C, SOUND_Peri_Cis, SOUND_Peri_D, SOUND_Peri_Dis, 269 .................... SOUND_Peri_C, SOUND_Peri_Cis, SOUND_Peri_D, SOUND_Peri_Dis,
270 .................... SOUND_Peri_E, SOUND_Peri_F, SOUND_Peri_Fis, SOUND_Peri_G, 270 .................... SOUND_Peri_E, SOUND_Peri_F, SOUND_Peri_Fis, SOUND_Peri_G,
271 .................... SOUND_Peri_Gis, SOUND_Peri_A, SOUND_Peri_Ais, SOUND_Peri_H; 271 .................... SOUND_Peri_Gis, SOUND_Peri_A, SOUND_Peri_Ais, SOUND_Peri_H;
272 * 272 *
273 0035: BCF 0A.0 273 0035: BCF 0A.0
274 0036: BCF 0A.1 274 0036: BCF 0A.1
275 0037: BCF 0A.2 275 0037: BCF 0A.2
276 0038: ADDWF 02,F 276 0038: ADDWF 02,F
277 0039: RETLW 4E 277 0039: RETLW 4E
278 003A: RETLW 95 278 003A: RETLW 95
279 003B: RETLW ED 279 003B: RETLW ED
280 003C: RETLW 8C 280 003C: RETLW 8C
281 003D: RETLW 04 281 003D: RETLW 04
282 003E: RETLW 85 282 003E: RETLW 85
283 003F: RETLW 8D 283 003F: RETLW 8D
284 0040: RETLW 7D 284 0040: RETLW 7D
285 0041: RETLW 81 285 0041: RETLW 81
286 0042: RETLW 76 286 0042: RETLW 76
287 0043: RETLW DB 287 0043: RETLW DB
288 0044: RETLW 6F 288 0044: RETLW 6F
289 0045: RETLW 93 289 0045: RETLW 93
290 0046: RETLW 69 290 0046: RETLW 69
291 0047: RETLW A6 291 0047: RETLW A6
292 0048: RETLW 63 292 0048: RETLW 63
293 0049: RETLW 0E 293 0049: RETLW 0E
294 004A: RETLW 5E 294 004A: RETLW 5E
295 004B: RETLW C7 295 004B: RETLW C7
296 004C: RETLW 58 296 004C: RETLW 58
297 004D: RETLW CB 297 004D: RETLW CB
298 004E: RETLW 53 298 004E: RETLW 53
299 004F: RETLW 17 299 004F: RETLW 17
300 0050: RETLW 4F 300 0050: RETLW 4F
301 .................... 301 ....................
302 .................... 302 ....................
303 .................... void SoundNote(unsigned int8 Note, Octave, unsigned int16 Duration) 303 .................... void SoundNote(unsigned int8 Note, Octave, unsigned int16 Duration)
304 .................... // Predava se cislo noty (0 je C), posunuti v oktavach (0 nejnizsi ton) 304 .................... // Predava se cislo noty (0 je C), posunuti v oktavach (0 nejnizsi ton)
305 .................... // doba trvani v ms (0 znamena ticho) 305 .................... // doba trvani v ms (0 znamena ticho)
306 .................... // Zahraje zadanou notu v zadane oktave dane delky 306 .................... // Zahraje zadanou notu v zadane oktave dane delky
307 .................... { 307 .................... {
308 .................... unsigned int16 Time; // Pocitadlo zlomkoveho casu 308 .................... unsigned int16 Time; // Pocitadlo zlomkoveho casu
309 .................... 309 ....................
310 .................... // Inicializace casovace 310 .................... // Inicializace casovace
311 .................... if (Note!=SOUND_Space) // Pokud se ma hrat spust hrani 311 .................... if (Note!=SOUND_Space) // Pokud se ma hrat spust hrani
312 * 312 *
313 00E2: MOVF 69,W 313 00E2: MOVF 69,W
314 00E3: SUBLW 0C 314 00E3: SUBLW 0C
315 00E4: BTFSC 03.2 315 00E4: BTFSC 03.2
316 00E5: GOTO 109 316 00E5: GOTO 109
317 .................... { 317 .................... {
318 .................... setup_ccp1(CCP_COMPARE_RESET_TIMER); 318 .................... setup_ccp1(CCP_COMPARE_RESET_TIMER);
319 00E6: MOVLW 0B 319 00E6: MOVLW 0B
320 00E7: MOVWF 17 320 00E7: MOVWF 17
321 .................... set_timer1(0); 321 .................... set_timer1(0);
322 00E8: CLRF 0F 322 00E8: CLRF 0F
323 00E9: CLRF 0E 323 00E9: CLRF 0E
324 .................... (int16)CCP_1=Table[Note]>>Octave; 324 .................... (int16)CCP_1=Table[Note]>>Octave;
325 00EA: BCF 03.0 325 00EA: BCF 03.0
326 00EB: RLF 69,W 326 00EB: RLF 69,W
327 00EC: MOVWF 77 327 00EC: MOVWF 77
328 00ED: MOVWF 6F 328 00ED: MOVWF 6F
329 00EE: INCF 6F,W 329 00EE: INCF 6F,W
330 00EF: CALL 035 330 00EF: CALL 035
331 00F0: MOVWF 7A 331 00F0: MOVWF 7A
332 00F1: MOVF 6F,W 332 00F1: MOVF 6F,W
333 00F2: CALL 035 333 00F2: CALL 035
334 00F3: MOVWF 70 334 00F3: MOVWF 70
335 00F4: MOVF 7A,W 335 00F4: MOVF 7A,W
336 00F5: MOVWF 71 336 00F5: MOVWF 71
337 00F6: MOVWF 16 337 00F6: MOVWF 16
338 00F7: MOVF 70,W 338 00F7: MOVF 70,W
339 00F8: MOVWF 15 339 00F8: MOVWF 15
340 00F9: MOVF 6A,W 340 00F9: MOVF 6A,W
341 00FA: MOVWF 77 341 00FA: MOVWF 77
342 00FB: BTFSC 03.2 342 00FB: BTFSC 03.2
343 00FC: GOTO 102 343 00FC: GOTO 102
344 00FD: BCF 03.0 344 00FD: BCF 03.0
345 00FE: RRF 16,F 345 00FE: RRF 16,F
346 00FF: RRF 15,F 346 00FF: RRF 15,F
347 0100: DECFSZ 77,F 347 0100: DECFSZ 77,F
348 0101: GOTO 0FD 348 0101: GOTO 0FD
349 .................... #if SOUND_PRESCALE==1 349 .................... #if SOUND_PRESCALE==1
350 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); 350 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
351 .................... #elif SOUND_PRESCALE==2 351 .................... #elif SOUND_PRESCALE==2
352 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); 352 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
353 0102: MOVLW 95 353 0102: MOVLW 95
354 0103: MOVWF 10 354 0103: MOVWF 10
355 .................... #elif SOUND_PRESCALE==4 355 .................... #elif SOUND_PRESCALE==4
356 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); 356 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
357 .................... #elif SOUND_PRESCALE==8 357 .................... #elif SOUND_PRESCALE==8
358 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); 358 .................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
359 .................... #endif 359 .................... #endif
360 .................... enable_interrupts(int_ccp1); 360 .................... enable_interrupts(int_ccp1);
361 0104: BSF 03.5 361 0104: BSF 03.5
362 0105: BSF 0C.2 362 0105: BSF 0C.2
363 .................... enable_interrupts(global); 363 .................... enable_interrupts(global);
364 0106: MOVLW C0 364 0106: MOVLW C0
365 0107: BCF 03.5 365 0107: BCF 03.5
366 0108: IORWF 0B,F 366 0108: IORWF 0B,F
367 .................... } 367 .................... }
368 .................... 368 ....................
369 .................... // Delka tonu merena casovacem T0 (bez preruseni) 369 .................... // Delka tonu merena casovacem T0 (bez preruseni)
370 .................... Time=0; 370 .................... Time=0;
371 0109: CLRF 6E 371 0109: CLRF 6E
372 010A: CLRF 6D 372 010A: CLRF 6D
373 .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 373 .................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
374 010B: BSF 03.5 374 010B: BSF 03.5
375 010C: MOVF 01,W 375 010C: MOVF 01,W
376 010D: ANDLW C0 376 010D: ANDLW C0
377 010E: IORLW 08 377 010E: IORLW 08
378 010F: MOVWF 01 378 010F: MOVWF 01
379 .................... while (Duration) 379 .................... while (Duration)
380 0110: BCF 03.5 380 0110: BCF 03.5
381 0111: MOVF 6B,W 381 0111: MOVF 6B,W
382 0112: IORWF 6C,W 382 0112: IORWF 6C,W
383 0113: BTFSC 03.2 383 0113: BTFSC 03.2
384 0114: GOTO 133 384 0114: GOTO 133
385 .................... { 385 .................... {
386 .................... if (T0IF) // Preteceni T0 - kazdych (1/CLK)*4*256 386 .................... if (T0IF) // Preteceni T0 - kazdych (1/CLK)*4*256
387 0115: BTFSS 0B.2 387 0115: BTFSS 0B.2
388 0116: GOTO 11C 388 0116: GOTO 11C
389 .................... { 389 .................... {
390 .................... T0IF = 0; 390 .................... T0IF = 0;
391 0117: BCF 0B.2 391 0117: BCF 0B.2
392 .................... Time += (256*4*1000*2048+SOUND_CLOCK/2)/SOUND_CLOCK; 392 .................... Time += (256*4*1000*2048+SOUND_CLOCK/2)/SOUND_CLOCK;
393 0118: MOVLW 69 393 0118: MOVLW 69
394 0119: ADDWF 6D,F 394 0119: ADDWF 6D,F
395 011A: BTFSC 03.0 395 011A: BTFSC 03.0
396 011B: INCF 6E,F 396 011B: INCF 6E,F
397 .................... } 397 .................... }
398 .................... if (Time>>11) 398 .................... if (Time>>11)
399 011C: CLRF 7A 399 011C: CLRF 7A
400 011D: RRF 6E,W 400 011D: RRF 6E,W
401 011E: MOVWF 79 401 011E: MOVWF 79
402 011F: RRF 79,F 402 011F: RRF 79,F
403 0120: RRF 79,F 403 0120: RRF 79,F
404 0121: MOVLW 1F 404 0121: MOVLW 1F
405 0122: ANDWF 79,F 405 0122: ANDWF 79,F
406 0123: MOVF 79,W 406 0123: MOVF 79,W
407 0124: IORWF 7A,W 407 0124: IORWF 7A,W
408 0125: BTFSC 03.2 408 0125: BTFSC 03.2
409 0126: GOTO 131 409 0126: GOTO 131
410 .................... { 410 .................... {
411 .................... Time -= 2048; 411 .................... Time -= 2048;
412 0127: MOVLW 00 412 0127: MOVLW 00
413 0128: SUBWF 6D,F 413 0128: SUBWF 6D,F
414 0129: MOVLW 08 414 0129: MOVLW 08
415 012A: BTFSS 03.0 415 012A: BTFSS 03.0
416 012B: MOVLW 09 416 012B: MOVLW 09
417 012C: SUBWF 6E,F 417 012C: SUBWF 6E,F
418 .................... Duration--; 418 .................... Duration--;
419 012D: MOVF 6B,W 419 012D: MOVF 6B,W
420 012E: BTFSC 03.2 420 012E: BTFSC 03.2
421 012F: DECF 6C,F 421 012F: DECF 6C,F
422 0130: DECF 6B,F 422 0130: DECF 6B,F
423 .................... } 423 .................... }
424 .................... #ifdef SOUND_WDT 424 .................... #ifdef SOUND_WDT
425 .................... restart_wdt(); // Nuluj watchdog abychom se nezresetovali 425 .................... restart_wdt(); // Nuluj watchdog abychom se nezresetovali
426 0131: CLRWDT 426 0131: CLRWDT
427 .................... #endif 427 .................... #endif
428 .................... } 428 .................... }
429 0132: GOTO 111 429 0132: GOTO 111
430 .................... 430 ....................
431 .................... // Konec casovace 431 .................... // Konec casovace
432 .................... disable_interrupts(int_ccp1); 432 .................... disable_interrupts(int_ccp1);
433 0133: BSF 03.5 433 0133: BSF 03.5
434 0134: BCF 0C.2 434 0134: BCF 0C.2
435 .................... disable_interrupts(global); 435 .................... disable_interrupts(global);
436 0135: BCF 03.5 436 0135: BCF 03.5
437 0136: BCF 0B.6 437 0136: BCF 0B.6
438 0137: BCF 0B.7 438 0137: BCF 0B.7
439 0138: BTFSC 0B.7 439 0138: BTFSC 0B.7
440 0139: GOTO 137 440 0139: GOTO 137
441 013A: RETLW 00 441 013A: RETLW 00
442 .................... } 442 .................... }
443 .................... 443 ....................
444 .................... 444 ....................
445 .................... #include "Data.c" // Datovy blok pro predpripravene skladby 445 .................... #include "Data.c" // Datovy blok pro predpripravene skladby
446 .................... // Tento soubor definuje vse potrebne pro ulozeni skladeb do pameti programu. 446 .................... // Tento soubor definuje vse potrebne pro ulozeni skladeb do pameti programu.
447 .................... // Dale definuje pislusna makra pro snadne definice. Tyto definice jsou voleny 447 .................... // Dale definuje pislusna makra pro snadne definice. Tyto definice jsou voleny
448 .................... // zamerne tak, aby mohl byt pouzit stejny soubor s definici skladby jak 448 .................... // zamerne tak, aby mohl byt pouzit stejny soubor s definici skladby jak
449 .................... // pro vlozeni primo do firmwaru v dobe prekladu tak i k dodatecnemu nahrani 449 .................... // pro vlozeni primo do firmwaru v dobe prekladu tak i k dodatecnemu nahrani
450 .................... // skladby pres seriovou linku. 450 .................... // skladby pres seriovou linku.
451 .................... 451 ....................
452 .................... // Definice hranic pameti pro ulozeni pisnicek 452 .................... // Definice hranic pameti pro ulozeni pisnicek
453 .................... #define STARTMEM 0x600 // Zde zacina pametoa oblast pro pisnicky 453 .................... #define STARTMEM 0x600 // Zde zacina pametoa oblast pro pisnicky
454 .................... #define ENDMEM 0x7ff // Zde konci pametova oblast pro pisnicky 454 .................... #define ENDMEM 0x7ff // Zde konci pametova oblast pro pisnicky
455 .................... 455 ....................
456 .................... // Definice konstant pro kodovani dat 456 .................... // Definice konstant pro kodovani dat
457 .................... #define ENDOFDATA 0x3FFF // Priznak konce pisnicek (prazdna pamet) 457 .................... #define ENDOFDATA 0x3FFF // Priznak konce pisnicek (prazdna pamet)
458 .................... #define DATABEGIN 0x2000 // Kod zacatku skladby 458 .................... #define DATABEGIN 0x2000 // Kod zacatku skladby
459 .................... #define MASKBEGIN 0x3800 459 .................... #define MASKBEGIN 0x3800
460 .................... #define DATATEMPO 0x2800 // Kod pro nastaveni tempa 460 .................... #define DATATEMPO 0x2800 // Kod pro nastaveni tempa
461 .................... #define MASKTEMPO 0x3800 461 .................... #define MASKTEMPO 0x3800
462 .................... #define DATAPAUSE 0x3000 // Kod pro nastaveni mezery mezi notami 462 .................... #define DATAPAUSE 0x3000 // Kod pro nastaveni mezery mezi notami
463 .................... #define MASKPAUSE 0x3800 463 .................... #define MASKPAUSE 0x3800
464 .................... #define MASKNOTE 0x2000 // Nejvissi bit 0 urcuje, ze jde o notu 464 .................... #define MASKNOTE 0x2000 // Nejvissi bit 0 urcuje, ze jde o notu
465 .................... 465 ....................
466 .................... // Pseudomakra pro jednoduchy zapis skladeb do zdrojaku jazyka C 466 .................... // Pseudomakra pro jednoduchy zapis skladeb do zdrojaku jazyka C
467 .................... #define BEGIN DATABEGIN+ // Zacatek pisnicky + posunuti oktav 467 .................... #define BEGIN DATABEGIN+ // Zacatek pisnicky + posunuti oktav
468 .................... #define TEMPO DATATEMPO+ // Delka nejskratsi noty v ms 468 .................... #define TEMPO DATATEMPO+ // Delka nejskratsi noty v ms
469 .................... #define PAUSE DATAPAUSE+ // Delka mezery mezi notami 469 .................... #define PAUSE DATAPAUSE+ // Delka mezery mezi notami
470 .................... #define END // Konec skladby, zde nic neznamena 470 .................... #define END // Konec skladby, zde nic neznamena
471 .................... 471 ....................
472 .................... // Pseudomakra pro zapis not, zapisuje se cislo oktavy, nota, delka noty 472 .................... // Pseudomakra pro zapis not, zapisuje se cislo oktavy, nota, delka noty
473 .................... #define C *16 + SOUND_C + 128 * 473 .................... #define C *16 + SOUND_C + 128 *
474 .................... #define Cis *16 + SOUND_Cis + 128 * 474 .................... #define Cis *16 + SOUND_Cis + 128 *
475 .................... #define D *16 + SOUND_D + 128 * 475 .................... #define D *16 + SOUND_D + 128 *
476 .................... #define Dis *16 + SOUND_Dis + 128 * 476 .................... #define Dis *16 + SOUND_Dis + 128 *
477 .................... #define E *16 + SOUND_E + 128 * 477 .................... #define E *16 + SOUND_E + 128 *
478 .................... #define F *16 + SOUND_F + 128 * 478 .................... #define F *16 + SOUND_F + 128 *
479 .................... #define Fis *16 + SOUND_Fis + 128 * 479 .................... #define Fis *16 + SOUND_Fis + 128 *
480 .................... #define G *16 + SOUND_G + 128 * 480 .................... #define G *16 + SOUND_G + 128 *
481 .................... #define Gis *16 + SOUND_Gis + 128 * 481 .................... #define Gis *16 + SOUND_Gis + 128 *
482 .................... #define A *16 + SOUND_A + 128 * 482 .................... #define A *16 + SOUND_A + 128 *
483 .................... #define Ais *16 + SOUND_Ais + 128 * 483 .................... #define Ais *16 + SOUND_Ais + 128 *
484 .................... #define H *16 + SOUND_H + 128 * 484 .................... #define H *16 + SOUND_H + 128 *
485 .................... #define Space SOUND_Space + 128 * 485 .................... #define Space SOUND_Space + 128 *
486 .................... 486 ....................
487 .................... // Pametova oblast 487 .................... // Pametova oblast
488 .................... #ORG 0x600,0x7FF {} // Vyhrazeni oblasti pameti pro ulozeni pisnicek 488 .................... #ORG 0x600,0x7FF {} // Vyhrazeni oblasti pameti pro ulozeni pisnicek
489 .................... #ROM 0x600 = { // Naplneni oblasti pameti daty 489 .................... #ROM 0x600 = { // Naplneni oblasti pameti daty
490 .................... 490 ....................
491 .................... // Pisnicky jako soucast firwaru se vkladaji sem 491 .................... // Pisnicky jako soucast firwaru se vkladaji sem
492 .................... // Museji mit stejny format jako uvedene priklady aby zafungovaly makra 492 .................... // Museji mit stejny format jako uvedene priklady aby zafungovaly makra
493 .................... #include "Skladby\TheFinalSoundDown.txt" 493 .................... #include "Skladby\TheFinalSoundDown.txt"
494 .................... // Pisnicka "The Final Sound Down" 494 .................... // Pisnicka "The Final Sound Down"
495 .................... // 495 .................... //
496 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy 496 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy
497 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani 497 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani
498 .................... 498 ....................
499 .................... BEGIN 3, // Zacatek skladby 499 .................... BEGIN 3, // Zacatek skladby
500 .................... TEMPO 100, // Delka nejkratsi noty v ms 500 .................... TEMPO 100, // Delka nejkratsi noty v ms
501 .................... PAUSE 100, // Delka mezery mezi notami 501 .................... PAUSE 100, // Delka mezery mezi notami
502 .................... 502 ....................
503 .................... 1 A 1, 503 .................... 1 A 1,
504 .................... 1 G 1, 504 .................... 1 G 1,
505 .................... 1 A 4, 505 .................... 1 A 4,
506 .................... 1 D 4, 506 .................... 1 D 4,
507 .................... Space 2, 507 .................... Space 2,
508 .................... 508 ....................
509 .................... 1 Ais 1, 509 .................... 1 Ais 1,
510 .................... 1 A 1, 510 .................... 1 A 1,
511 .................... 1 Ais 2, 511 .................... 1 Ais 2,
512 .................... 1 A 2, 512 .................... 1 A 2,
513 .................... 1 G 4, 513 .................... 1 G 4,
514 .................... Space 2, 514 .................... Space 2,
515 .................... 515 ....................
516 .................... 1 Ais 1, 516 .................... 1 Ais 1,
517 .................... 1 A 1, 517 .................... 1 A 1,
518 .................... 1 Ais 4, 518 .................... 1 Ais 4,
519 .................... 1 D 4, 519 .................... 1 D 4,
520 .................... Space 2, 520 .................... Space 2,
521 .................... 521 ....................
522 .................... 1 G 1, 522 .................... 1 G 1,
523 .................... 1 F 1, 523 .................... 1 F 1,
524 .................... 1 G 2, 524 .................... 1 G 2,
525 .................... 1 F 2, 525 .................... 1 F 2,
526 .................... 1 E 2, 526 .................... 1 E 2,
527 .................... 1 G 2, 527 .................... 1 G 2,
528 .................... 1 F 4, 528 .................... 1 F 4,
529 .................... Space 2, 529 .................... Space 2,
530 .................... 530 ....................
531 .................... 1 E 1, 531 .................... 1 E 1,
532 .................... 1 F 1, 532 .................... 1 F 1,
533 .................... 1 G 4, 533 .................... 1 G 4,
534 .................... Space 2, 534 .................... Space 2,
535 .................... 535 ....................
536 .................... 1 F 1, 536 .................... 1 F 1,
537 .................... 1 G 1, 537 .................... 1 G 1,
538 .................... 1 A 2, 538 .................... 1 A 2,
539 .................... 1 G 2, 539 .................... 1 G 2,
540 .................... 1 F 2, 540 .................... 1 F 2,
541 .................... 1 E 2, 541 .................... 1 E 2,
542 .................... 1 D 4, 542 .................... 1 D 4,
543 .................... 1 Ais 4, 543 .................... 1 Ais 4,
544 .................... 1 A 4, 544 .................... 1 A 4,
545 .................... Space 2, 545 .................... Space 2,
546 .................... 546 ....................
547 .................... 1 A 1, 547 .................... 1 A 1,
548 .................... 1 Ais 1, 548 .................... 1 Ais 1,
549 .................... 1 A 1, 549 .................... 1 A 1,
550 .................... 1 G 1, 550 .................... 1 G 1,
551 .................... 1 A 4, 551 .................... 1 A 4,
552 .................... Space 2, 552 .................... Space 2,
553 .................... 553 ....................
554 .................... END 554 .................... END
555 .................... 555 ....................
556 .................... #include "Skladby\BednaOdWhisky.txt" 556 .................... #include "Skladby\BednaOdWhisky.txt"
557 .................... // Pisnicka "Bedna od Whisky" 557 .................... // Pisnicka "Bedna od Whisky"
558 .................... // 558 .................... //
559 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy 559 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy
560 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani 560 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani
561 .................... 561 ....................
562 .................... BEGIN 2, // Zacatek skladby 562 .................... BEGIN 2, // Zacatek skladby
563 .................... TEMPO 100, // Delka nejkratsi noty v ms 563 .................... TEMPO 100, // Delka nejkratsi noty v ms
564 .................... PAUSE 100, // Delka mezery mezi notami 564 .................... PAUSE 100, // Delka mezery mezi notami
565 .................... 565 ....................
566 .................... 1 A 2, 566 .................... 1 A 2,
567 .................... 2 C 2, 567 .................... 2 C 2,
568 .................... 2 E 2, 568 .................... 2 E 2,
569 .................... 2 A 2, 569 .................... 2 A 2,
570 .................... 2 G 4, 570 .................... 2 G 4,
571 .................... 2 E 2, 571 .................... 2 E 2,
572 .................... 2 E 2, 572 .................... 2 E 2,
573 .................... 2 A 2, 573 .................... 2 A 2,
574 .................... 2 G 2, 574 .................... 2 G 2,
575 .................... 2 E 2, 575 .................... 2 E 2,
576 .................... 2 D 2, 576 .................... 2 D 2,
577 .................... 2 E 4, 577 .................... 2 E 4,
578 .................... Space 4, 578 .................... Space 4,
579 .................... 1 A 2, 579 .................... 1 A 2,
580 .................... 2 C 2, 580 .................... 2 C 2,
581 .................... 2 E 2, 581 .................... 2 E 2,
582 .................... 2 A 2, 582 .................... 2 A 2,
583 .................... 2 G 2, 583 .................... 2 G 2,
584 .................... 2 G 2, 584 .................... 2 G 2,
585 .................... 2 E 2, 585 .................... 2 E 2,
586 .................... 2 E 2, 586 .................... 2 E 2,
587 .................... 1 A 2, 587 .................... 1 A 2,
588 .................... 2 E 2, 588 .................... 2 E 2,
589 .................... 1 H 2, 589 .................... 1 H 2,
590 .................... 2 E 2, 590 .................... 2 E 2,
591 .................... 1 A 4, 591 .................... 1 A 4,
592 .................... Space 4, 592 .................... Space 4,
593 .................... 1 A 2, 593 .................... 1 A 2,
594 .................... 2 C 2, 594 .................... 2 C 2,
595 .................... 2 E 2, 595 .................... 2 E 2,
596 .................... 2 A 2, 596 .................... 2 A 2,
597 .................... 2 G 2, 597 .................... 2 G 2,
598 .................... 2 G 2, 598 .................... 2 G 2,
599 .................... 2 E 4, 599 .................... 2 E 4,
600 .................... 2 A 2, 600 .................... 2 A 2,
601 .................... 2 G 2, 601 .................... 2 G 2,
602 .................... 2 E 2, 602 .................... 2 E 2,
603 .................... 2 D 2, 603 .................... 2 D 2,
604 .................... 2 E 4, 604 .................... 2 E 4,
605 .................... Space 2, 605 .................... Space 2,
606 .................... 2 E 2, 606 .................... 2 E 2,
607 .................... 1 A 2, 607 .................... 1 A 2,
608 .................... 2 C 2, 608 .................... 2 C 2,
609 .................... 2 E 2, 609 .................... 2 E 2,
610 .................... 2 A 2, 610 .................... 2 A 2,
611 .................... 2 G 2, 611 .................... 2 G 2,
612 .................... 2 E 4, 612 .................... 2 E 4,
613 .................... 2 E 2, 613 .................... 2 E 2,
614 .................... 2 A 2, 614 .................... 2 A 2,
615 .................... 2 A 2, 615 .................... 2 A 2,
616 .................... 2 GIS 2, 616 .................... 2 GIS 2,
617 .................... 2 H 2, 617 .................... 2 H 2,
618 .................... 2 A 4, 618 .................... 2 A 4,
619 .................... Space 8, 619 .................... Space 8,
620 .................... 2 E 2, 620 .................... 2 E 2,
621 .................... 2 A 2, 621 .................... 2 A 2,
622 .................... 2 A 2, 622 .................... 2 A 2,
623 .................... 2 A 2, 623 .................... 2 A 2,
624 .................... 2 GIS 2, 624 .................... 2 GIS 2,
625 .................... 2 FIS 2, 625 .................... 2 FIS 2,
626 .................... 2 A 4, 626 .................... 2 A 4,
627 .................... 2 A 2, 627 .................... 2 A 2,
628 .................... 2 H 2, 628 .................... 2 H 2,
629 .................... 2 H 2, 629 .................... 2 H 2,
630 .................... 2 A 2, 630 .................... 2 A 2,
631 .................... 2 H 2, 631 .................... 2 H 2,
632 .................... 3 CIS 2, 632 .................... 3 CIS 2,
633 .................... 2 A 4, 633 .................... 2 A 4,
634 .................... 2 E 2, 634 .................... 2 E 2,
635 .................... 2 A 2, 635 .................... 2 A 2,
636 .................... 2 A 2, 636 .................... 2 A 2,
637 .................... 2 A 2, 637 .................... 2 A 2,
638 .................... 2 GIS 2, 638 .................... 2 GIS 2,
639 .................... 2 FIS 2, 639 .................... 2 FIS 2,
640 .................... 2 A 2, 640 .................... 2 A 2,
641 .................... 2 A 2, 641 .................... 2 A 2,
642 .................... 2 A 2, 642 .................... 2 A 2,
643 .................... 2 H 2, 643 .................... 2 H 2,
644 .................... 2 H 2, 644 .................... 2 H 2,
645 .................... 2 A 2, 645 .................... 2 A 2,
646 .................... 2 GIS 2, 646 .................... 2 GIS 2,
647 .................... 2 A 4, 647 .................... 2 A 4,
648 .................... Space 2, 648 .................... Space 2,
649 .................... 2 E 2, 649 .................... 2 E 2,
650 .................... 2 A 2, 650 .................... 2 A 2,
651 .................... 2 A 2, 651 .................... 2 A 2,
652 .................... 2 A 2, 652 .................... 2 A 2,
653 .................... 2 GIS 2, 653 .................... 2 GIS 2,
654 .................... 2 FIS 2, 654 .................... 2 FIS 2,
655 .................... 2 A 4, 655 .................... 2 A 4,
656 .................... 2 A 2, 656 .................... 2 A 2,
657 .................... 2 H 2, 657 .................... 2 H 2,
658 .................... 2 H 2, 658 .................... 2 H 2,
659 .................... 2 A 2, 659 .................... 2 A 2,
660 .................... 2 H 2, 660 .................... 2 H 2,
661 .................... 3 CIS 2, 661 .................... 3 CIS 2,
662 .................... 2 A 4, 662 .................... 2 A 4,
663 .................... 2 E 2, 663 .................... 2 E 2,
664 .................... 2 A 2, 664 .................... 2 A 2,
665 .................... 2 A 2, 665 .................... 2 A 2,
666 .................... 2 A 2, 666 .................... 2 A 2,
667 .................... 2 GIS 2, 667 .................... 2 GIS 2,
668 .................... 2 FIS 2, 668 .................... 2 FIS 2,
669 .................... 2 A 2, 669 .................... 2 A 2,
670 .................... Space 2, 670 .................... Space 2,
671 .................... 2 A 2, 671 .................... 2 A 2,
672 .................... 2 H 2, 672 .................... 2 H 2,
673 .................... 2 H 2, 673 .................... 2 H 2,
674 .................... 2 A 2, 674 .................... 2 A 2,
675 .................... 2 GIS 2, 675 .................... 2 GIS 2,
676 .................... 2 A 8, 676 .................... 2 A 8,
677 .................... 2 G 2, 677 .................... 2 G 2,
678 .................... 2 A 8, 678 .................... 2 A 8,
679 .................... 2 G 2, 679 .................... 2 G 2,
680 .................... 2 A 8, 680 .................... 2 A 8,
681 .................... 681 ....................
682 .................... END 682 .................... END
683 .................... 683 ....................
684 .................... #include "Skladby\KdyzMeBaliZaVojacka.txt" 684 .................... #include "Skladby\KdyzMeBaliZaVojacka.txt"
685 .................... // Pisnicka "Kdyz me brali za vojacka" 685 .................... // Pisnicka "Kdyz me brali za vojacka"
686 .................... // 686 .................... //
687 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy 687 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy
688 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani 688 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani
689 .................... 689 ....................
690 .................... BEGIN 2, // Zacatek skladby 690 .................... BEGIN 2, // Zacatek skladby
691 .................... TEMPO 150, // Delka nejkratsi noty v ms 691 .................... TEMPO 150, // Delka nejkratsi noty v ms
692 .................... PAUSE 100, // Delka mezery mezi notami 692 .................... PAUSE 100, // Delka mezery mezi notami
693 .................... 693 ....................
694 .................... 1 A 1, 694 .................... 1 A 1,
695 .................... 2 C 1, 695 .................... 2 C 1,
696 .................... 2 E 1, 696 .................... 2 E 1,
697 .................... 2 D 1, 697 .................... 2 D 1,
698 .................... 2 C 1, 698 .................... 2 C 1,
699 .................... 1 H 1, 699 .................... 1 H 1,
700 .................... 2 C 2, 700 .................... 2 C 2,
701 .................... 2 D 1, 701 .................... 2 D 1,
702 .................... 2 E 2, 702 .................... 2 E 2,
703 .................... 2 D 1, 703 .................... 2 D 1,
704 .................... 2 G 1, 704 .................... 2 G 1,
705 .................... 2 G 1, 705 .................... 2 G 1,
706 .................... 2 G 1, 706 .................... 2 G 1,
707 .................... 2 G 1, 707 .................... 2 G 1,
708 .................... 2 A 1, 708 .................... 2 A 1,
709 .................... 2 E 2, 709 .................... 2 E 2,
710 .................... Space 4, 710 .................... Space 4,
711 .................... 2 D 1, 711 .................... 2 D 1,
712 .................... 2 F 1, 712 .................... 2 F 1,
713 .................... 2 A 1, 713 .................... 2 A 1,
714 .................... 2 G 1, 714 .................... 2 G 1,
715 .................... 2 F 1, 715 .................... 2 F 1,
716 .................... 2 E 1, 716 .................... 2 E 1,
717 .................... 2 E 1, 717 .................... 2 E 1,
718 .................... 2 F 1, 718 .................... 2 F 1,
719 .................... 2 E 1, 719 .................... 2 E 1,
720 .................... 2 C 1, 720 .................... 2 C 1,
721 .................... 1 A 2, 721 .................... 1 A 2,
722 .................... 1 GIS 1, 722 .................... 1 GIS 1,
723 .................... 1 H 1, 723 .................... 1 H 1,
724 .................... 2 E 1, 724 .................... 2 E 1,
725 .................... 2 D 1, 725 .................... 2 D 1,
726 .................... 1 H 1, 726 .................... 1 H 1,
727 .................... 2 C 1, 727 .................... 2 C 1,
728 .................... 1 A 2, 728 .................... 1 A 2,
729 .................... Space 2, 729 .................... Space 2,
730 .................... 1 H 2, 730 .................... 1 H 2,
731 .................... 2 C 2, 731 .................... 2 C 2,
732 .................... Space 2, 732 .................... Space 2,
733 .................... 2 D 2, 733 .................... 2 D 2,
734 .................... 2 E 1, 734 .................... 2 E 1,
735 .................... 2 E 1, 735 .................... 2 E 1,
736 .................... 2 E 1, 736 .................... 2 E 1,
737 .................... 2 D 1, 737 .................... 2 D 1,
738 .................... 1 H 1, 738 .................... 1 H 1,
739 .................... 2 C 1, 739 .................... 2 C 1,
740 .................... 1 A 2, 740 .................... 1 A 2,
741 .................... 741 ....................
742 .................... END 742 .................... END
743 .................... 743 ....................
744 .................... #include "Skladby\Medvedi.txt" 744 .................... #include "Skladby\Medvedi.txt"
745 .................... // Pisnicka "Medvedi" 745 .................... // Pisnicka "Medvedi"
746 .................... // 746 .................... //
747 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy 747 .................... // Tato pisnicka je napsana ve formatu, ktery se da pouzit jak pro primy
748 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani 748 .................... // preklad do firmwaru melodickeho zvonku tak i pro dodatecne nahrani
749 .................... 749 ....................
750 .................... BEGIN 1, // Zacatek skladby 750 .................... BEGIN 1, // Zacatek skladby
751 .................... TEMPO 150, // Delka nejkratsi noty v ms 751 .................... TEMPO 150, // Delka nejkratsi noty v ms
752 .................... PAUSE 100, // Delka mezery mezi notami 752 .................... PAUSE 100, // Delka mezery mezi notami
753 .................... 753 ....................
754 .................... 1 C 1, // 1 754 .................... 1 C 1, // 1
755 .................... 1 C 1, 755 .................... 1 C 1,
756 .................... 1 C 1, 756 .................... 1 C 1,
757 .................... 1 E 1, 757 .................... 1 E 1,
758 .................... 1 D 1, 758 .................... 1 D 1,
759 .................... 0 G 1, 759 .................... 0 G 1,
760 .................... 760 ....................
761 .................... 1 C 3, // 2 761 .................... 1 C 3, // 2
762 .................... Space 4, 762 .................... Space 4,
763 .................... 763 ....................
764 .................... 1 E 1, // 3 764 .................... 1 E 1, // 3
765 .................... 1 E 1, 765 .................... 1 E 1,
766 .................... 1 E 1, 766 .................... 1 E 1,
767 .................... 1 E 1, 767 .................... 1 E 1,
768 .................... 1 D 1, 768 .................... 1 D 1,
769 .................... 1 G 1, 769 .................... 1 G 1,
770 .................... 770 ....................
771 .................... 1 E 2, // 4 771 .................... 1 E 2, // 4
772 .................... Space 4, 772 .................... Space 4,
773 .................... 773 ....................
774 .................... 1 G 1, // 5 774 .................... 1 G 1, // 5
775 .................... 1 G 1, 775 .................... 1 G 1,
776 .................... 1 A 1, 776 .................... 1 A 1,
777 .................... 1 G 1, 777 .................... 1 G 1,
778 .................... 1 F 1, 778 .................... 1 F 1,
779 .................... 1 E 1, 779 .................... 1 E 1,
780 .................... 780 ....................
781 .................... 1 F 1, // 6 781 .................... 1 F 1, // 6
782 .................... 1 A 1, 782 .................... 1 A 1,
783 .................... 1 G 1, 783 .................... 1 G 1,
784 .................... 1 F 1, 784 .................... 1 F 1,
785 .................... 1 E 1, 785 .................... 1 E 1,
786 .................... 1 D 1, 786 .................... 1 D 1,
787 .................... 787 ....................
788 .................... 1 C 1, // 7 788 .................... 1 C 1, // 7
789 .................... 0 H 1, 789 .................... 0 H 1,
790 .................... 1 C 1, 790 .................... 1 C 1,
791 .................... 1 E 1, 791 .................... 1 E 1,
792 .................... 1 D 1, 792 .................... 1 D 1,
793 .................... 0 G 1, 793 .................... 0 G 1,
794 .................... 794 ....................
795 .................... 1 C 3, // 8 795 .................... 1 C 3, // 8
796 .................... Space 4, 796 .................... Space 4,
797 .................... 1 A 1, // 9 797 .................... 1 A 1, // 9
798 .................... 1 A 1, 798 .................... 1 A 1,
799 .................... 1 A 1, 799 .................... 1 A 1,
800 .................... 1 A 1, 800 .................... 1 A 1,
801 .................... 1 H 1, 801 .................... 1 H 1,
802 .................... 2 D 1, 802 .................... 2 D 1,
803 .................... 803 ....................
804 .................... 2 C 4, // 10 804 .................... 2 C 4, // 10
805 .................... Space 2, 805 .................... Space 2,
806 .................... 806 ....................
807 .................... 2 E 1, // 11 807 .................... 2 E 1, // 11
808 .................... 2 E 1, 808 .................... 2 E 1,
809 .................... 2 E 1, 809 .................... 2 E 1,
810 .................... 2 E 1, 810 .................... 2 E 1,
811 .................... 2 D 1, 811 .................... 2 D 1,
812 .................... 2 G 1, 812 .................... 2 G 1,
813 .................... 813 ....................
814 .................... 2 E 4, // 12 814 .................... 2 E 4, // 12
815 .................... Space 2, 815 .................... Space 2,
816 .................... 816 ....................
817 .................... 2 G 1, // 13 817 .................... 2 G 1, // 13
818 .................... 2 G 1, 818 .................... 2 G 1,
819 .................... 2 A 1, 819 .................... 2 A 1,
820 .................... 2 G 1, 820 .................... 2 G 1,
821 .................... 2 F 1, 821 .................... 2 F 1,
822 .................... 2 E 1, 822 .................... 2 E 1,
823 .................... 823 ....................
824 .................... 2 F 1, // 14 824 .................... 2 F 1, // 14
825 .................... 2 A 1, 825 .................... 2 A 1,
826 .................... 2 G 1, 826 .................... 2 G 1,
827 .................... 2 F 1, 827 .................... 2 F 1,
828 .................... 2 E 1, 828 .................... 2 E 1,
829 .................... 2 D 1, 829 .................... 2 D 1,
830 .................... 830 ....................
831 .................... 2 C 1, // 15 831 .................... 2 C 1, // 15
832 .................... 1 H 1, 832 .................... 1 H 1,
833 .................... 2 C 1, 833 .................... 2 C 1,
834 .................... 2 E 1, 834 .................... 2 E 1,
835 .................... 2 D 1, 835 .................... 2 D 1,
836 .................... 1 G 1, 836 .................... 1 G 1,
837 .................... 837 ....................
838 .................... 2 C 4, // 16 838 .................... 2 C 4, // 16
839 .................... Space 2, 839 .................... Space 2,
840 .................... 840 ....................
841 .................... 1 C 6, // 1 841 .................... 1 C 6, // 1
842 .................... 0 G 2, 842 .................... 0 G 2,
843 .................... 843 ....................
844 .................... 1 D 3, // 2 844 .................... 1 D 3, // 2
845 .................... Space 3, 845 .................... Space 3,
846 .................... 846 ....................
847 .................... 1 G 1, // 3 847 .................... 1 G 1, // 3
848 .................... 1 G 1, 848 .................... 1 G 1,
849 .................... 1 Fis 1, 849 .................... 1 Fis 1,
850 .................... 1 G 1, 850 .................... 1 G 1,
851 .................... 1 A 1, 851 .................... 1 A 1,
852 .................... 1 Fis 1, 852 .................... 1 Fis 1,
853 .................... 853 ....................
854 .................... 1 G 2, // 4 854 .................... 1 G 2, // 4
855 .................... Space 4, 855 .................... Space 4,
856 .................... 856 ....................
857 .................... 1 G 1, // 5 857 .................... 1 G 1, // 5
858 .................... 1 G 1, 858 .................... 1 G 1,
859 .................... 1 A 1, 859 .................... 1 A 1,
860 .................... 1 G 1, 860 .................... 1 G 1,
861 .................... 1 F 1, 861 .................... 1 F 1,
862 .................... 1 E 1, 862 .................... 1 E 1,
863 .................... 863 ....................
864 .................... 1 F 1, // 6 864 .................... 1 F 1, // 6
865 .................... 1 A 1, 865 .................... 1 A 1,
866 .................... 1 G 1, 866 .................... 1 G 1,
867 .................... 1 F 1, 867 .................... 1 F 1,
868 .................... 1 E 1, 868 .................... 1 E 1,
869 .................... 1 D 1, 869 .................... 1 D 1,
870 .................... 870 ....................
871 .................... 1 C 6, // 7 871 .................... 1 C 6, // 7
872 .................... 1 E 2, 872 .................... 1 E 2,
873 .................... 873 ....................
874 .................... 1 D 3, // 8 874 .................... 1 D 3, // 8
875 .................... Space 3, 875 .................... Space 3,
876 .................... 876 ....................
877 .................... 1 C 6, // 9 877 .................... 1 C 6, // 9
878 .................... 0 G 2, 878 .................... 0 G 2,
879 .................... 879 ....................
880 .................... 1 D 3, // 10 880 .................... 1 D 3, // 10
881 .................... Space 3, 881 .................... Space 3,
882 .................... 882 ....................
883 .................... 1 G 1, // 11 883 .................... 1 G 1, // 11
884 .................... 1 G 1, 884 .................... 1 G 1,
885 .................... 1 Fis 1, 885 .................... 1 Fis 1,
886 .................... 1 G 1, 886 .................... 1 G 1,
887 .................... 1 A 1, 887 .................... 1 A 1,
888 .................... 1 Fis 1, 888 .................... 1 Fis 1,
889 .................... 889 ....................
890 .................... 1 G 2, // 12 890 .................... 1 G 2, // 12
891 .................... Space 4, 891 .................... Space 4,
892 .................... 892 ....................
893 .................... 1 G 1, // 13 893 .................... 1 G 1, // 13
894 .................... 1 G 1, 894 .................... 1 G 1,
895 .................... 1 A 1, 895 .................... 1 A 1,
896 .................... 1 G 1, 896 .................... 1 G 1,
897 .................... 1 F 1, 897 .................... 1 F 1,
898 .................... 1 E 1, 898 .................... 1 E 1,
899 .................... 899 ....................
900 .................... 1 F 1, // 14 900 .................... 1 F 1, // 14
901 .................... 1 A 1, 901 .................... 1 A 1,
902 .................... 1 G 1, 902 .................... 1 G 1,
903 .................... 1 F 1, 903 .................... 1 F 1,
904 .................... 1 E 1, 904 .................... 1 E 1,
905 .................... 1 D 1, 905 .................... 1 D 1,
906 .................... 906 ....................
907 .................... 1 C 1, // 15 907 .................... 1 C 1, // 15
908 .................... 0 H 1, 908 .................... 0 H 1,
909 .................... 1 C 1, 909 .................... 1 C 1,
910 .................... 1 E 1, 910 .................... 1 E 1,
911 .................... 1 D 1, 911 .................... 1 D 1,
912 .................... 0 G 1, 912 .................... 0 G 1,
913 .................... 913 ....................
914 .................... 1 C 2, // 16 914 .................... 1 C 2, // 16
915 .................... Space 4, 915 .................... Space 4,
916 .................... 916 ....................
917 .................... END 917 .................... END
918 .................... 918 ....................
919 .................... 919 ....................
920 .................... // Koncova znacka a konec oblasti pro skladby 920 .................... // Koncova znacka a konec oblasti pro skladby
921 .................... ENDOFDATA 921 .................... ENDOFDATA
922 .................... } 922 .................... }
923 .................... 923 ....................
924 .................... // Zruseni definic maker pro definici skladeb 924 .................... // Zruseni definic maker pro definici skladeb
925 .................... // V dalsim programu uz nebudou potreba 925 .................... // V dalsim programu uz nebudou potreba
926 .................... #undef BEGIN 926 .................... #undef BEGIN
927 .................... #undef TEMPO 927 .................... #undef TEMPO
928 .................... #undef PAUSE 928 .................... #undef PAUSE
929 .................... #undef END 929 .................... #undef END
930 .................... #undef C 930 .................... #undef C
931 .................... #undef Cis 931 .................... #undef Cis
932 .................... #undef D 932 .................... #undef D
933 .................... #undef Dis 933 .................... #undef Dis
934 .................... #undef E 934 .................... #undef E
935 .................... #undef F 935 .................... #undef F
936 .................... #undef Fis 936 .................... #undef Fis
937 .................... #undef G 937 .................... #undef G
938 .................... #undef Gis 938 .................... #undef Gis
939 .................... #undef A 939 .................... #undef A
940 .................... #undef Ais 940 .................... #undef Ais
941 .................... #undef H 941 .................... #undef H
942 .................... #undef Space 942 .................... #undef Space
943 .................... 943 ....................
944 .................... 944 ....................
945 .................... #define RXD PIN_B1 // Port pro RS232 945 .................... #define RXD PIN_B1 // Port pro RS232
946 .................... #use delay(CLOCK=20000000,RESTART_WDT) // Konfigurace pro casovani RS232 946 .................... #use delay(CLOCK=20000000,RESTART_WDT) // Konfigurace pro casovani RS232
947 .................... #use rs232(BAUD=9600,RCV=RXD,RESTART_WDT,INVERT,PARITY=N,BITS=8) // Prenosove parametry RS232 947 .................... #use rs232(BAUD=9600,RCV=RXD,RESTART_WDT,INVERT,PARITY=N,BITS=8) // Prenosove parametry RS232
948 * 948 *
949 0153: MOVLW 08 949 0153: MOVLW 08
950 0154: MOVWF 77 950 0154: MOVWF 77
951 0155: BSF 03.5 951 0155: BSF 03.5
952 0156: BSF 06.1 952 0156: BSF 06.1
953 0157: CLRWDT 953 0157: CLRWDT
954 0158: BCF 03.5 954 0158: BCF 03.5
955 0159: BTFSC 06.1 955 0159: BTFSC 06.1
956 015A: GOTO 15D 956 015A: GOTO 15D
957 015B: BSF 03.5 957 015B: BSF 03.5
958 015C: GOTO 157 958 015C: GOTO 157
959 015D: CLRF 61 959 015D: CLRF 61
960 015E: BSF 77.7 960 015E: BSF 77.7
961 015F: GOTO 16E 961 015F: GOTO 16E
962 0160: BCF 77.7 962 0160: BCF 77.7
963 0161: GOTO 16E 963 0161: GOTO 16E
964 0162: BCF 03.0 964 0162: BCF 03.0
965 0163: BTFSS 06.1 965 0163: BTFSS 06.1
966 0164: BSF 03.0 966 0164: BSF 03.0
967 0165: RRF 61,F 967 0165: RRF 61,F
968 0166: BSF 77.6 968 0166: BSF 77.6
969 0167: GOTO 16E 969 0167: GOTO 16E
970 0168: BCF 77.6 970 0168: BCF 77.6
971 0169: DECFSZ 77,F 971 0169: DECFSZ 77,F
972 016A: GOTO 162 972 016A: GOTO 162
973 016B: MOVF 61,W 973 016B: MOVF 61,W
974 016C: MOVWF 78 974 016C: MOVWF 78
975 016D: GOTO 17A 975 016D: GOTO 17A
976 016E: MOVLW A7 976 016E: MOVLW A7
977 016F: BTFSC 77.7 977 016F: BTFSC 77.7
978 0170: MOVLW 2D 978 0170: MOVLW 2D
979 0171: MOVWF 78 979 0171: MOVWF 78
980 0172: DECFSZ 78,F 980 0172: DECFSZ 78,F
981 0173: GOTO 172 981 0173: GOTO 172
982 0174: NOP 982 0174: NOP
983 0175: BTFSC 77.7 983 0175: BTFSC 77.7
984 0176: GOTO 160 984 0176: GOTO 160
985 0177: BTFSC 77.6 985 0177: BTFSC 77.6
986 0178: GOTO 168 986 0178: GOTO 168
987 0179: GOTO 162 987 0179: GOTO 162
988 017A: RETLW 00 988 017A: RETLW 00
989 .................... 989 ....................
990 .................... 990 ....................
991 .................... // Sada globalnich promennych 991 .................... // Sada globalnich promennych
992 .................... // -------------------------- 992 .................... // --------------------------
993 .................... // Vyuzivame globalni promenne protoze je to vyhodne z hlediska spotreby zdroju. Usetri 993 .................... // Vyuzivame globalni promenne protoze je to vyhodne z hlediska spotreby zdroju. Usetri
994 .................... // se vyznmane mnoho pameti programu pri predavani parametru 994 .................... // se vyznmane mnoho pameti programu pri predavani parametru
995 .................... 995 ....................
996 .................... 996 ....................
997 .................... unsigned int16 Adr; // Adresovy ukazatel do pameti skladeb 997 .................... unsigned int16 Adr; // Adresovy ukazatel do pameti skladeb
998 .................... unsigned int16 Data; // Prectena data nebo data pro zapis 998 .................... unsigned int16 Data; // Prectena data nebo data pro zapis
999 .................... unsigned int1 Mode; // 0=rezim testovani, 1=rezim zapisu do FLASH 999 .................... unsigned int1 Mode; // 0=rezim testovani, 1=rezim zapisu do FLASH
1000 .................... 1000 ....................
1001 .................... unsigned int16 Tempo; // Tempo (delka nejkratsi skladby v ms) 1001 .................... unsigned int16 Tempo; // Tempo (delka nejkratsi skladby v ms)
1002 .................... unsigned int16 Pause; // Delka mezery mezi notami v ms 1002 .................... unsigned int16 Pause; // Delka mezery mezi notami v ms
1003 .................... unsigned int8 Octava; // Posunuti skladby v oktavach 1003 .................... unsigned int8 Octava; // Posunuti skladby v oktavach
1004 .................... 1004 ....................
1005 .................... unsigned int8 Beep; // Druh pipnuti pro proceduru SoundSpec 1005 .................... unsigned int8 Beep; // Druh pipnuti pro proceduru SoundSpec
1006 .................... unsigned int1 Error; // Priznak chyby 1006 .................... unsigned int1 Error; // Priznak chyby
1007 .................... 1007 ....................
1008 .................... unsigned int8 CisloSkladby; // Cislo skladby pro proceduru Find a Play 1008 .................... unsigned int8 CisloSkladby; // Cislo skladby pro proceduru Find a Play
1009 .................... 1009 ....................
1010 .................... 1010 ....................
1011 .................... // Zvuky, posloupnost zadaneho poctu tonu 1011 .................... // Zvuky, posloupnost zadaneho poctu tonu
1012 .................... #define SoundEndOfLine 0x01 // Kratke pipnuti na konci radky 1012 .................... #define SoundEndOfLine 0x01 // Kratke pipnuti na konci radky
1013 .................... #define SoundPGM 0x03 // Trilek pri vstupu do rezimu programovani 1013 .................... #define SoundPGM 0x03 // Trilek pri vstupu do rezimu programovani
1014 .................... #define SoundPostPlay 0x03 // Po ukonceni prehravani 1014 .................... #define SoundPostPlay 0x03 // Po ukonceni prehravani
1015 .................... #define SoundERASE 0x02 // Zvuk pri smazani bloku FLASH pameti 1015 .................... #define SoundERASE 0x02 // Zvuk pri smazani bloku FLASH pameti
1016 .................... #define SoundERR 0x05 // Chyba syntaxe 1016 .................... #define SoundERR 0x05 // Chyba syntaxe
1017 .................... 1017 ....................
1018 .................... void SpecBeep() 1018 .................... void SpecBeep()
1019 .................... // Data - pocet pipnuti, 0 znamena ticho 1019 .................... // Data - pocet pipnuti, 0 znamena ticho
1020 .................... { 1020 .................... {
1021 .................... int Oct; 1021 .................... int Oct;
1022 .................... 1022 ....................
1023 .................... if (Error) Beep=SoundERR; 1023 .................... if (Error) Beep=SoundERR;
1024 * 1024 *
1025 013B: BTFSS 2D.1 1025 013B: BTFSS 2D.1
1026 013C: GOTO 13F 1026 013C: GOTO 13F
1027 013D: MOVLW 05 1027 013D: MOVLW 05
1028 013E: MOVWF 33 1028 013E: MOVWF 33
1029 .................... 1029 ....................
1030 .................... for(Oct=2;Beep!=0;Beep--) 1030 .................... for(Oct=2;Beep!=0;Beep--)
1031 013F: MOVLW 02 1031 013F: MOVLW 02
1032 0140: MOVWF 61 1032 0140: MOVWF 61
1033 0141: MOVF 33,F 1033 0141: MOVF 33,F
1034 0142: BTFSC 03.2 1034 0142: BTFSC 03.2
1035 0143: GOTO 151 1035 0143: GOTO 151
1036 .................... { 1036 .................... {
1037 .................... SoundNote(SOUND_A,Oct++,50); 1037 .................... SoundNote(SOUND_A,Oct++,50);
1038 0144: MOVF 61,W 1038 0144: MOVF 61,W
1039 0145: INCF 61,F 1039 0145: INCF 61,F
1040 0146: MOVWF 62 1040 0146: MOVWF 62
1041 0147: MOVLW 09 1041 0147: MOVLW 09
1042 0148: MOVWF 69 1042 0148: MOVWF 69
1043 0149: MOVF 62,W 1043 0149: MOVF 62,W
1044 014A: MOVWF 6A 1044 014A: MOVWF 6A
1045 014B: CLRF 6C 1045 014B: CLRF 6C
1046 014C: MOVLW 32 1046 014C: MOVLW 32
1047 014D: MOVWF 6B 1047 014D: MOVWF 6B
1048 014E: CALL 0E2 1048 014E: CALL 0E2
1049 .................... } 1049 .................... }
1050 014F: DECF 33,F 1050 014F: DECF 33,F
1051 0150: GOTO 141 1051 0150: GOTO 141
1052 .................... 1052 ....................
1053 .................... Error=0; 1053 .................... Error=0;
1054 0151: BCF 2D.1 1054 0151: BCF 2D.1
1055 0152: RETLW 00 1055 0152: RETLW 00
1056 .................... } 1056 .................... }
1057 .................... 1057 ....................
1058 .................... 1058 ....................
1059 .................... // Precti slovo z pameti programu 1059 .................... // Precti slovo z pameti programu
1060 .................... int16 ReadData() 1060 .................... int16 ReadData()
1061 .................... // Adr - adresa ze ktere se cte 1061 .................... // Adr - adresa ze ktere se cte
1062 .................... // Data - prectena data 1062 .................... // Data - prectena data
1063 .................... { 1063 .................... {
1064 .................... int8 a,b; // Pomocne promenne 1064 .................... int8 a,b; // Pomocne promenne
1065 .................... 1065 ....................
1066 .................... (int8)*EEADR = Adr; // Adresa, spodni cast 1066 .................... (int8)*EEADR = Adr; // Adresa, spodni cast
1067 * 1067 *
1068 01EF: MOVF 29,W 1068 01EF: MOVF 29,W
1069 01F0: BSF 03.6 1069 01F0: BSF 03.6
1070 01F1: MOVWF 0D 1070 01F1: MOVWF 0D
1071 .................... (int8)*EEADRH = Adr >> 8; // Adresa, horni cast 1071 .................... (int8)*EEADRH = Adr >> 8; // Adresa, horni cast
1072 01F2: BCF 03.6 1072 01F2: BCF 03.6
1073 01F3: MOVF 2A,W 1073 01F3: MOVF 2A,W
1074 01F4: BSF 03.6 1074 01F4: BSF 03.6
1075 01F5: MOVWF 0F 1075 01F5: MOVWF 0F
1076 .................... bit_set(*EECON1,EECON1_EEPGD); // Pamet programu 1076 .................... bit_set(*EECON1,EECON1_EEPGD); // Pamet programu
1077 01F6: BSF 03.5 1077 01F6: BSF 03.5
1078 01F7: BSF 0C.7 1078 01F7: BSF 0C.7
1079 .................... bit_set(*EECON1,EECON1_RD); // Operace cteni 1079 .................... bit_set(*EECON1,EECON1_RD); // Operace cteni
1080 01F8: BSF 0C.0 1080 01F8: BSF 0C.0
1081 .................... #ASM 1081 .................... #ASM
1082 .................... nop; // Povinne nop 1082 .................... nop; // Povinne nop
1083 01F9: NOP 1083 01F9: NOP
1084 .................... nop; 1084 .................... nop;
1085 .................... #ENDASM 1085 .................... #ENDASM
1086 01FA: NOP 1086 01FA: NOP
1087 .................... a = (int8)*EEDATA; // Prevezmi data 1087 .................... a = (int8)*EEDATA; // Prevezmi data
1088 01FB: BCF 03.5 1088 01FB: BCF 03.5
1089 01FC: MOVF 0C,W 1089 01FC: MOVF 0C,W
1090 01FD: BCF 03.6 1090 01FD: BCF 03.6
1091 01FE: MOVWF 61 1091 01FE: MOVWF 61
1092 .................... b = (int8)*EEDATAH; 1092 .................... b = (int8)*EEDATAH;
1093 01FF: BSF 03.6 1093 01FF: BSF 03.6
1094 0200: MOVF 0E,W 1094 0200: MOVF 0E,W
1095 0201: BCF 03.6 1095 0201: BCF 03.6
1096 0202: MOVWF 62 1096 0202: MOVWF 62
1097 .................... Data=make16(b,a); // Sestav vysledek ze 2 bajtu 1097 .................... Data=make16(b,a); // Sestav vysledek ze 2 bajtu
1098 0203: MOVF 62,W 1098 0203: MOVF 62,W
1099 0204: MOVWF 2C 1099 0204: MOVWF 2C
1100 0205: MOVF 61,W 1100 0205: MOVF 61,W
1101 0206: MOVWF 2B 1101 0206: MOVWF 2B
1102 0207: RETLW 00 1102 0207: RETLW 00
1103 .................... } 1103 .................... }
1104 .................... 1104 ....................
1105 .................... 1105 ....................
1106 .................... // Smazani cele pameti vyhrazene pro skladby 1106 .................... // Smazani cele pameti vyhrazene pro skladby
1107 .................... void Erase() 1107 .................... void Erase()
1108 .................... { 1108 .................... {
1109 .................... for(Adr=STARTMEM; Adr<=ENDMEM; Adr++) // Cela oblast 1109 .................... for(Adr=STARTMEM; Adr<=ENDMEM; Adr++) // Cela oblast
1110 * 1110 *
1111 0482: MOVLW 06 1111 0482: MOVLW 06
1112 0483: MOVWF 2A 1112 0483: MOVWF 2A
1113 0484: CLRF 29 1113 0484: CLRF 29
1114 0485: MOVF 2A,W 1114 0485: MOVF 2A,W
1115 0486: SUBLW 07 1115 0486: SUBLW 07
1116 0487: BTFSS 03.0 1116 0487: BTFSS 03.0
1117 0488: GOTO 4B8 1117 0488: GOTO 4B8
1118 .................... { 1118 .................... {
1119 .................... ReadData(); 1119 .................... ReadData();
1120 0489: CALL 1EF 1120 0489: CALL 1EF
1121 .................... if (Data!=0x3FFF) // Mazu jen bloky, ktere to potrebuji 1121 .................... if (Data!=0x3FFF) // Mazu jen bloky, ktere to potrebuji
1122 048A: INCFSZ 2B,W 1122 048A: INCFSZ 2B,W
1123 048B: GOTO 490 1123 048B: GOTO 490
1124 048C: MOVF 2C,W 1124 048C: MOVF 2C,W
1125 048D: SUBLW 3F 1125 048D: SUBLW 3F
1126 048E: BTFSC 03.2 1126 048E: BTFSC 03.2
1127 048F: GOTO 4B4 1127 048F: GOTO 4B4
1128 .................... { 1128 .................... {
1129 .................... if (input(POWER_PIC)!=0) return; // Nezapisuj pokud neni jumper povoleni programovani 1129 .................... if (input(POWER_PIC)!=0) return; // Nezapisuj pokud neni jumper povoleni programovani
1130 0490: BSF 03.5 1130 0490: BSF 03.5
1131 0491: BSF 05.3 1131 0491: BSF 05.3
1132 0492: MOVLW 00 1132 0492: MOVLW 00
1133 0493: BCF 03.5 1133 0493: BCF 03.5
1134 0494: BTFSC 05.3 1134 0494: BTFSC 05.3
1135 0495: MOVLW 01 1135 0495: MOVLW 01
1136 0496: XORLW 00 1136 0496: XORLW 00
1137 0497: BTFSC 03.2 1137 0497: BTFSC 03.2
1138 0498: GOTO 49A 1138 0498: GOTO 49A
1139 0499: GOTO 4B8 1139 0499: GOTO 4B8
1140 .................... (int8)*EEADR = Adr; // Adresa bloku, spodni cast 1140 .................... (int8)*EEADR = Adr; // Adresa bloku, spodni cast
1141 049A: MOVF 29,W 1141 049A: MOVF 29,W
1142 049B: BSF 03.6 1142 049B: BSF 03.6
1143 049C: MOVWF 0D 1143 049C: MOVWF 0D
1144 .................... (int8)*EEADRH = Adr >> 8; // Adresa bloku, horni cast 1144 .................... (int8)*EEADRH = Adr >> 8; // Adresa bloku, horni cast
1145 049D: BCF 03.6 1145 049D: BCF 03.6
1146 049E: MOVF 2A,W 1146 049E: MOVF 2A,W
1147 049F: BSF 03.6 1147 049F: BSF 03.6
1148 04A0: MOVWF 0F 1148 04A0: MOVWF 0F
1149 .................... bit_set(*EECON1,EECON1_EEPGD); // Pamet programu 1149 .................... bit_set(*EECON1,EECON1_EEPGD); // Pamet programu
1150 04A1: BSF 03.5 1150 04A1: BSF 03.5
1151 04A2: BSF 0C.7 1151 04A2: BSF 0C.7
1152 .................... bit_set(*EECON1,EECON1_WREN); // Povolit zapis 1152 .................... bit_set(*EECON1,EECON1_WREN); // Povolit zapis
1153 04A3: BSF 0C.2 1153 04A3: BSF 0C.2
1154 .................... bit_set(*EECON1,EECON1_FREE); // Operace mazani 1154 .................... bit_set(*EECON1,EECON1_FREE); // Operace mazani
1155 04A4: BSF 0C.4 1155 04A4: BSF 0C.4
1156 .................... (int8)*EECON2 = 0x55; // Povinna sekvence pro zapis 1156 .................... (int8)*EECON2 = 0x55; // Povinna sekvence pro zapis
1157 04A5: MOVLW 55 1157 04A5: MOVLW 55
1158 04A6: MOVWF 0D 1158 04A6: MOVWF 0D
1159 .................... (int8)*EECON2 = 0xAA; 1159 .................... (int8)*EECON2 = 0xAA;
1160 04A7: MOVLW AA 1160 04A7: MOVLW AA
1161 04A8: MOVWF 0D 1161 04A8: MOVWF 0D
1162 .................... bit_set(*EECON1,EECON1_WR); // Zahajeni mazani 1162 .................... bit_set(*EECON1,EECON1_WR); // Zahajeni mazani
1163 04A9: BSF 0C.1 1163 04A9: BSF 0C.1
1164 .................... #ASM 1164 .................... #ASM
1165 .................... nop; // Povinne prazdne instrukce 1165 .................... nop; // Povinne prazdne instrukce
1166 04AA: NOP 1166 04AA: NOP
1167 .................... nop; 1167 .................... nop;
1168 .................... #ENDASM 1168 .................... #ENDASM
1169 04AB: NOP 1169 04AB: NOP
1170 .................... bit_clear(*EECON1,EECON1_WREN); // Uz ne zapis 1170 .................... bit_clear(*EECON1,EECON1_WREN); // Uz ne zapis
1171 04AC: BCF 0C.2 1171 04AC: BCF 0C.2
1172 .................... bit_clear(*EECON1,EECON1_FREE); // Uz ne mazani 1172 .................... bit_clear(*EECON1,EECON1_FREE); // Uz ne mazani
1173 04AD: BCF 0C.4 1173 04AD: BCF 0C.4
1174 .................... bit_clear(*EECON1,EECON1_EEPGD); // Uz ne pamet programu 1174 .................... bit_clear(*EECON1,EECON1_EEPGD); // Uz ne pamet programu
1175 04AE: BCF 0C.7 1175 04AE: BCF 0C.7
1176 .................... Beep=SoundERASE; 1176 .................... Beep=SoundERASE;
1177 04AF: MOVLW 02 1177 04AF: MOVLW 02
1178 04B0: BCF 03.5 1178 04B0: BCF 03.5
1179 04B1: BCF 03.6 1179 04B1: BCF 03.6
1180 04B2: MOVWF 33 1180 04B2: MOVWF 33
1181 .................... SpecBeep(); 1181 .................... SpecBeep();
1182 04B3: CALL 13B 1182 04B3: CALL 13B
1183 .................... } 1183 .................... }
1184 .................... } 1184 .................... }
1185 04B4: INCF 29,F 1185 04B4: INCF 29,F
1186 04B5: BTFSC 03.2 1186 04B5: BTFSC 03.2
1187 04B6: INCF 2A,F 1187 04B6: INCF 2A,F
1188 04B7: GOTO 485 1188 04B7: GOTO 485
1189 .................... } 1189 .................... }
1190 .................... 1190 ....................
1191 .................... 1191 ....................
1192 .................... // Zapis do pameti programu po jednotlivych slovech. 1192 .................... // Zapis do pameti programu po jednotlivych slovech.
1193 .................... // Soucastka vyzaduje zapis vzdy celych osmi slov najednou. Vyuziva se toho, ze pamet FLASH 1193 .................... // Soucastka vyzaduje zapis vzdy celych osmi slov najednou. Vyuziva se toho, ze pamet FLASH
1194 .................... // umi zapisovat jen smerem do nuly a tak staci na pozice, ktere zrovna nechceme programovat 1194 .................... // umi zapisovat jen smerem do nuly a tak staci na pozice, ktere zrovna nechceme programovat
1195 .................... // zapsat same jednicky cimz se stav jejich stav nezmeni. 1195 .................... // zapsat same jednicky cimz se stav jejich stav nezmeni.
1196 .................... void WriteData() 1196 .................... void WriteData()
1197 .................... // Adr - adresa, kam se bude zapisovat 1197 .................... // Adr - adresa, kam se bude zapisovat
1198 .................... // Data - data, ktera se budou zapisovat 1198 .................... // Data - data, ktera se budou zapisovat
1199 .................... { 1199 .................... {
1200 .................... int i; 1200 .................... int i;
1201 .................... 1201 ....................
1202 .................... bit_set(*EECON1,EECON1_EEPGD); // Pamet programu 1202 .................... bit_set(*EECON1,EECON1_EEPGD); // Pamet programu
1203 * 1203 *
1204 0304: BSF 03.5 1204 0304: BSF 03.5
1205 0305: BSF 03.6 1205 0305: BSF 03.6
1206 0306: BSF 0C.7 1206 0306: BSF 0C.7
1207 .................... bit_set(*EECON1,EECON1_WREN); // Zapis 1207 .................... bit_set(*EECON1,EECON1_WREN); // Zapis
1208 0307: BSF 0C.2 1208 0307: BSF 0C.2
1209 .................... (int8)*EEADR = Adr & ~3; // Adresa, spodni cast, zaokrouhleno dolu na nasobek 8 1209 .................... (int8)*EEADR = Adr & ~3; // Adresa, spodni cast, zaokrouhleno dolu na nasobek 8
1210 0308: BCF 03.5 1210 0308: BCF 03.5
1211 0309: BCF 03.6 1211 0309: BCF 03.6
1212 030A: MOVF 29,W 1212 030A: MOVF 29,W
1213 030B: ANDLW FC 1213 030B: ANDLW FC
1214 030C: BSF 03.6 1214 030C: BSF 03.6
1215 030D: MOVWF 0D 1215 030D: MOVWF 0D
1216 .................... (int8)*EEADRH = Adr >> 8; // Adresa, horni cast 1216 .................... (int8)*EEADRH = Adr >> 8; // Adresa, horni cast
1217 030E: BCF 03.6 1217 030E: BCF 03.6
1218 030F: MOVF 2A,W 1218 030F: MOVF 2A,W
1219 0310: BSF 03.6 1219 0310: BSF 03.6
1220 0311: MOVWF 0F 1220 0311: MOVWF 0F
1221 .................... for (i=0; i<4; i++) 1221 .................... for (i=0; i<4; i++)
1222 0312: BCF 03.6 1222 0312: BCF 03.6
1223 0313: CLRF 61 1223 0313: CLRF 61
1224 0314: MOVF 61,W 1224 0314: MOVF 61,W
1225 0315: SUBLW 03 1225 0315: SUBLW 03
1226 0316: BTFSS 03.0 1226 0316: BTFSS 03.0
1227 0317: GOTO 33F 1227 0317: GOTO 33F
1228 .................... { 1228 .................... {
1229 .................... if ((Adr & 3) == i) // Pokud je adresa slova v bloku totozna s pozadovanou 1229 .................... if ((Adr & 3) == i) // Pokud je adresa slova v bloku totozna s pozadovanou
1230 0318: MOVF 29,W 1230 0318: MOVF 29,W
1231 0319: ANDLW 03 1231 0319: ANDLW 03
1232 031A: MOVWF 62 1232 031A: MOVWF 62
1233 031B: MOVF 2A,W 1233 031B: MOVF 2A,W
1234 031C: ANDLW 00 1234 031C: ANDLW 00
1235 031D: MOVWF 63 1235 031D: MOVWF 63
1236 031E: MOVF 61,W 1236 031E: MOVF 61,W
1237 031F: SUBWF 62,W 1237 031F: SUBWF 62,W
1238 0320: BTFSS 03.2 1238 0320: BTFSS 03.2
1239 0321: GOTO 32E 1239 0321: GOTO 32E
1240 0322: MOVF 63,F 1240 0322: MOVF 63,F
1241 0323: BTFSS 03.2 1241 0323: BTFSS 03.2
1242 0324: GOTO 32E 1242 0324: GOTO 32E
1243 .................... { 1243 .................... {
1244 .................... (int8)*EEDATA =Data; // Platne slovo, spodni cast 1244 .................... (int8)*EEDATA =Data; // Platne slovo, spodni cast
1245 0325: MOVF 2B,W 1245 0325: MOVF 2B,W
1246 0326: BSF 03.6 1246 0326: BSF 03.6
1247 0327: MOVWF 0C 1247 0327: MOVWF 0C
1248 .................... (int8)*EEDATAH=Data >> 8; // Platne slovo, horni cast 1248 .................... (int8)*EEDATAH=Data >> 8; // Platne slovo, horni cast
1249 0328: BCF 03.6 1249 0328: BCF 03.6
1250 0329: MOVF 2C,W 1250 0329: MOVF 2C,W
1251 032A: BSF 03.6 1251 032A: BSF 03.6
1252 032B: MOVWF 0E 1252 032B: MOVWF 0E
1253 .................... } 1253 .................... }
1254 .................... else // Ostatni bunky nemenime 1254 .................... else // Ostatni bunky nemenime
1255 032C: GOTO 332 1255 032C: GOTO 332
1256 032D: BCF 03.6 1256 032D: BCF 03.6
1257 .................... { 1257 .................... {
1258 .................... (int8)*EEDATA =0xFF; // Zbytek same jednicky 1258 .................... (int8)*EEDATA =0xFF; // Zbytek same jednicky
1259 032E: MOVLW FF 1259 032E: MOVLW FF
1260 032F: BSF 03.6 1260 032F: BSF 03.6
1261 0330: MOVWF 0C 1261 0330: MOVWF 0C
1262 .................... (int8)*EEDATAH=0xFF; 1262 .................... (int8)*EEDATAH=0xFF;
1263 0331: MOVWF 0E 1263 0331: MOVWF 0E
1264 .................... } 1264 .................... }
1265 .................... (int8)*EECON2 = 0x55; // Povinna sekvence pro zapis 1265 .................... (int8)*EECON2 = 0x55; // Povinna sekvence pro zapis
1266 0332: MOVLW 55 1266 0332: MOVLW 55
1267 0333: BSF 03.5 1267 0333: BSF 03.5
1268 0334: MOVWF 0D 1268 0334: MOVWF 0D
1269 .................... (int8)*EECON2 = 0xAA; 1269 .................... (int8)*EECON2 = 0xAA;
1270 0335: MOVLW AA 1270 0335: MOVLW AA
1271 0336: MOVWF 0D 1271 0336: MOVWF 0D
1272 .................... bit_set(*EECON1,EECON1_WR); // Zahajeni zapisu 1272 .................... bit_set(*EECON1,EECON1_WR); // Zahajeni zapisu
1273 0337: BSF 0C.1 1273 0337: BSF 0C.1
1274 .................... #ASM 1274 .................... #ASM
1275 .................... nop; // Povinne dve prazdne instrukce 1275 .................... nop; // Povinne dve prazdne instrukce
1276 0338: NOP 1276 0338: NOP
1277 .................... nop; 1277 .................... nop;
1278 .................... #ENDASM 1278 .................... #ENDASM
1279 0339: NOP 1279 0339: NOP
1280 .................... ((int8)*EEADR) ++; // Dalsi slovo 1280 .................... ((int8)*EEADR) ++; // Dalsi slovo
1281 033A: BCF 03.5 1281 033A: BCF 03.5
1282 033B: INCF 0D,F 1282 033B: INCF 0D,F
1283 .................... } 1283 .................... }
1284 033C: BCF 03.6 1284 033C: BCF 03.6
1285 033D: INCF 61,F 1285 033D: INCF 61,F
1286 033E: GOTO 314 1286 033E: GOTO 314
1287 .................... bit_clear(*EECON1,EECON1_WREN); // Konec zapisu 1287 .................... bit_clear(*EECON1,EECON1_WREN); // Konec zapisu
1288 033F: BSF 03.5 1288 033F: BSF 03.5
1289 0340: BSF 03.6 1289 0340: BSF 03.6
1290 0341: BCF 0C.2 1290 0341: BCF 0C.2
1291 .................... bit_clear(*EECON1,EECON1_EEPGD); // Uz ne pamet programu (bezpecnost) 1291 .................... bit_clear(*EECON1,EECON1_EEPGD); // Uz ne pamet programu (bezpecnost)
1292 0342: BCF 0C.7 1292 0342: BCF 0C.7
1293 .................... } 1293 .................... }
1294 .................... 1294 ....................
1295 .................... 1295 ....................
1296 .................... // Zapise data Data na adresu Adr a provede posun na dalsi adresu, zapisuje se jen do 1296 .................... // Zapise data Data na adresu Adr a provede posun na dalsi adresu, zapisuje se jen do
1297 .................... // dovolene oblasti pameti a jen v pripade, ze je Mode=1 1297 .................... // dovolene oblasti pameti a jen v pripade, ze je Mode=1
1298 .................... void WriteDataInc() 1298 .................... void WriteDataInc()
1299 .................... // Data - co se zapisuje 1299 .................... // Data - co se zapisuje
1300 .................... // Adr - kam se zapisuje, po zapisu se adresa posouva 1300 .................... // Adr - kam se zapisuje, po zapisu se adresa posouva
1301 .................... { 1301 .................... {
1302 .................... if (~Mode) return; // Neni rezim zapisu 1302 .................... if (~Mode) return; // Neni rezim zapisu
1303 * 1303 *
1304 02E0: BTFSC 2D.0 1304 02E0: BTFSC 2D.0
1305 02E1: GOTO 2E3 1305 02E1: GOTO 2E3
1306 02E2: GOTO 34A 1306 02E2: GOTO 34A
1307 .................... if ( (Adr>=STARTMEM) & (Adr<=ENDMEM) & (input(POWER_PIC)==0) ) 1307 .................... if ( (Adr>=STARTMEM) & (Adr<=ENDMEM) & (input(POWER_PIC)==0) )
1308 02E3: MOVF 2A,W 1308 02E3: MOVF 2A,W
1309 02E4: SUBLW 05 1309 02E4: SUBLW 05
1310 02E5: BTFSS 03.0 1310 02E5: BTFSS 03.0
1311 02E6: GOTO 2E9 1311 02E6: GOTO 2E9
1312 02E7: MOVLW 00 1312 02E7: MOVLW 00
1313 02E8: GOTO 2EA 1313 02E8: GOTO 2EA
1314 02E9: MOVLW 01 1314 02E9: MOVLW 01
1315 02EA: MOVWF 61 1315 02EA: MOVWF 61
1316 02EB: MOVF 2A,W 1316 02EB: MOVF 2A,W
1317 02EC: SUBLW 07 1317 02EC: SUBLW 07
1318 02ED: BTFSC 03.0 1318 02ED: BTFSC 03.0
1319 02EE: GOTO 2F1 1319 02EE: GOTO 2F1
1320 02EF: MOVLW 00 1320 02EF: MOVLW 00
1321 02F0: GOTO 2F2 1321 02F0: GOTO 2F2
1322 02F1: MOVLW 01 1322 02F1: MOVLW 01
1323 02F2: ANDWF 61,W 1323 02F2: ANDWF 61,W
1324 02F3: MOVWF 62 1324 02F3: MOVWF 62
1325 02F4: BSF 03.5 1325 02F4: BSF 03.5
1326 02F5: BSF 05.3 1326 02F5: BSF 05.3
1327 02F6: MOVLW 00 1327 02F6: MOVLW 00
1328 02F7: BCF 03.5 1328 02F7: BCF 03.5
1329 02F8: BTFSC 05.3 1329 02F8: BTFSC 05.3
1330 02F9: MOVLW 01 1330 02F9: MOVLW 01
1331 02FA: XORLW 00 1331 02FA: XORLW 00
1332 02FB: BTFSC 03.2 1332 02FB: BTFSC 03.2
1333 02FC: GOTO 2FF 1333 02FC: GOTO 2FF
1334 02FD: MOVLW 00 1334 02FD: MOVLW 00
1335 02FE: GOTO 300 1335 02FE: GOTO 300
1336 02FF: MOVLW 01 1336 02FF: MOVLW 01
1337 0300: ANDWF 62,W 1337 0300: ANDWF 62,W
1338 0301: XORLW 00 1338 0301: XORLW 00
1339 0302: BTFSC 03.2 1339 0302: BTFSC 03.2
1340 0303: GOTO 349 1340 0303: GOTO 349
1341 .................... { 1341 .................... {
1342 .................... WriteData(); 1342 .................... WriteData();
1343 .................... Adr++; 1343 .................... Adr++;
1344 * 1344 *
1345 0343: BCF 03.5 1345 0343: BCF 03.5
1346 0344: BCF 03.6 1346 0344: BCF 03.6
1347 0345: INCF 29,F 1347 0345: INCF 29,F
1348 0346: BTFSC 03.2 1348 0346: BTFSC 03.2
1349 0347: INCF 2A,F 1349 0347: INCF 2A,F
1350 .................... } 1350 .................... }
1351 .................... else 1351 .................... else
1352 0348: GOTO 34A 1352 0348: GOTO 34A
1353 .................... { 1353 .................... {
1354 .................... Error=1; 1354 .................... Error=1;
1355 0349: BSF 2D.1 1355 0349: BSF 2D.1
1356 .................... } 1356 .................... }
1357 034A: RETLW 00 1357 034A: RETLW 00
1358 .................... } 1358 .................... }
1359 .................... 1359 ....................
1360 .................... 1360 ....................
1361 .................... // Najdi zacatek zadaneho cisla skladby. Promenna Adr ukazuje na zacatek skladby. 1361 .................... // Najdi zacatek zadaneho cisla skladby. Promenna Adr ukazuje na zacatek skladby.
1362 .................... // Neni-li skladba nalezena ukazuje Adr na koncovou znacku (0x3FFF) posledni skladby 1362 .................... // Neni-li skladba nalezena ukazuje Adr na koncovou znacku (0x3FFF) posledni skladby
1363 .................... // nebo na konec pameti. 1363 .................... // nebo na konec pameti.
1364 .................... int1 Find() 1364 .................... int1 Find()
1365 .................... // CisloSkladby - poradove cislo skladby 1365 .................... // CisloSkladby - poradove cislo skladby
1366 .................... // Adr - adresa zacatku skladby 1366 .................... // Adr - adresa zacatku skladby
1367 .................... { 1367 .................... {
1368 .................... Adr=STARTMEM-1; // Od zacatku oblasti pro skladby 1368 .................... Adr=STARTMEM-1; // Od zacatku oblasti pro skladby
1369 * 1369 *
1370 0208: MOVLW 05 1370 0208: MOVLW 05
1371 0209: MOVWF 2A 1371 0209: MOVWF 2A
1372 020A: MOVLW FF 1372 020A: MOVLW FF
1373 020B: MOVWF 29 1373 020B: MOVWF 29
1374 .................... for(;1;) 1374 .................... for(;1;)
1375 .................... { 1375 .................... {
1376 .................... Adr++; 1376 .................... Adr++;
1377 020C: INCF 29,F 1377 020C: INCF 29,F
1378 020D: BTFSC 03.2 1378 020D: BTFSC 03.2
1379 020E: INCF 2A,F 1379 020E: INCF 2A,F
1380 .................... ReadData(); // Precti data 1380 .................... ReadData(); // Precti data
1381 020F: CALL 1EF 1381 020F: CALL 1EF
1382 .................... if (Data==ENDOFDATA) return 1; // Priznak konce dat 1382 .................... if (Data==ENDOFDATA) return 1; // Priznak konce dat
1383 0210: INCFSZ 2B,W 1383 0210: INCFSZ 2B,W
1384 0211: GOTO 219 1384 0211: GOTO 219
1385 0212: MOVF 2C,W 1385 0212: MOVF 2C,W
1386 0213: SUBLW 3F 1386 0213: SUBLW 3F
1387 0214: BTFSS 03.2 1387 0214: BTFSS 03.2
1388 0215: GOTO 219 1388 0215: GOTO 219
1389 0216: MOVLW 01 1389 0216: MOVLW 01
1390 0217: MOVWF 78 1390 0217: MOVWF 78
1391 0218: GOTO 236 1391 0218: GOTO 236
1392 .................... if (Adr==ENDMEM+1) return 1; // Uz jsme prosli celou pamet 1392 .................... if (Adr==ENDMEM+1) return 1; // Uz jsme prosli celou pamet
1393 0219: MOVF 29,F 1393 0219: MOVF 29,F
1394 021A: BTFSS 03.2 1394 021A: BTFSS 03.2
1395 021B: GOTO 223 1395 021B: GOTO 223
1396 021C: MOVF 2A,W 1396 021C: MOVF 2A,W
1397 021D: SUBLW 08 1397 021D: SUBLW 08
1398 021E: BTFSS 03.2 1398 021E: BTFSS 03.2
1399 021F: GOTO 223 1399 021F: GOTO 223
1400 0220: MOVLW 01 1400 0220: MOVLW 01
1401 0221: MOVWF 78 1401 0221: MOVWF 78
1402 0222: GOTO 236 1402 0222: GOTO 236
1403 .................... if ((Data&MASKBEGIN)==DATABEGIN) // Priznak zacatku skladby 1403 .................... if ((Data&MASKBEGIN)==DATABEGIN) // Priznak zacatku skladby
1404 0223: MOVF 2B,W 1404 0223: MOVF 2B,W
1405 0224: ANDLW 00 1405 0224: ANDLW 00
1406 0225: MOVWF 61 1406 0225: MOVWF 61
1407 0226: MOVF 2C,W 1407 0226: MOVF 2C,W
1408 0227: ANDLW 38 1408 0227: ANDLW 38
1409 0228: MOVWF 62 1409 0228: MOVWF 62
1410 0229: MOVF 61,F 1410 0229: MOVF 61,F
1411 022A: BTFSS 03.2 1411 022A: BTFSS 03.2
1412 022B: GOTO 235 1412 022B: GOTO 235
1413 022C: MOVF 62,W 1413 022C: MOVF 62,W
1414 022D: SUBLW 20 1414 022D: SUBLW 20
1415 022E: BTFSS 03.2 1415 022E: BTFSS 03.2
1416 022F: GOTO 235 1416 022F: GOTO 235
1417 .................... { 1417 .................... {
1418 .................... CisloSkladby--; // Otestuj pocitadlo skladeb 1418 .................... CisloSkladby--; // Otestuj pocitadlo skladeb
1419 0230: DECFSZ 34,F 1419 0230: DECFSZ 34,F
1420 .................... if (CisloSkladby==0) return 0; // Je to tato skladba 1420 .................... if (CisloSkladby==0) return 0; // Je to tato skladba
1421 0231: GOTO 235 1421 0231: GOTO 235
1422 0232: MOVLW 00 1422 0232: MOVLW 00
1423 0233: MOVWF 78 1423 0233: MOVWF 78
1424 0234: GOTO 236 1424 0234: GOTO 236
1425 .................... } 1425 .................... }
1426 .................... } 1426 .................... }
1427 0235: GOTO 20C 1427 0235: GOTO 20C
1428 0236: RETLW 00 1428 0236: RETLW 00
1429 .................... } 1429 .................... }
1430 .................... 1430 ....................
1431 .................... 1431 ....................
1432 .................... // Zahraj jednu notu 1432 .................... // Zahraj jednu notu
1433 .................... void PlayData() 1433 .................... void PlayData()
1434 .................... // Data = zakodovana nota 1434 .................... // Data = zakodovana nota
1435 .................... // Tempo, Octava, Pause = parametry hrane noty 1435 .................... // Tempo, Octava, Pause = parametry hrane noty
1436 .................... { 1436 .................... {
1437 .................... SoundNote((int8)Data&0xF,Octava+(((int8)Data>>4)&0x7),Tempo*((Data>>7)&0x3F)); // Nota 1437 .................... SoundNote((int8)Data&0xF,Octava+(((int8)Data>>4)&0x7),Tempo*((Data>>7)&0x3F)); // Nota
1438 0237: MOVF 2B,W 1438 0237: MOVF 2B,W
1439 0238: ANDLW 0F 1439 0238: ANDLW 0F
1440 0239: MOVWF 61 1440 0239: MOVWF 61
1441 023A: SWAPF 2B,W 1441 023A: SWAPF 2B,W
1442 023B: MOVWF 77 1442 023B: MOVWF 77
1443 023C: MOVLW 0F 1443 023C: MOVLW 0F
1444 023D: ANDWF 77,F 1444 023D: ANDWF 77,F
1445 023E: MOVF 77,W 1445 023E: MOVF 77,W
1446 023F: ANDLW 07 1446 023F: ANDLW 07
1447 0240: ADDWF 32,W 1447 0240: ADDWF 32,W
1448 0241: MOVWF 63 1448 0241: MOVWF 63
1449 0242: RRF 2C,W 1449 0242: RRF 2C,W
1450 0243: MOVWF 65 1450 0243: MOVWF 65
1451 0244: RRF 2B,W 1451 0244: RRF 2B,W
1452 0245: MOVWF 64 1452 0245: MOVWF 64
1453 0246: RRF 65,F 1453 0246: RRF 65,F
1454 0247: RRF 64,F 1454 0247: RRF 64,F
1455 0248: RRF 65,F 1455 0248: RRF 65,F
1456 0249: RRF 64,F 1456 0249: RRF 64,F
1457 024A: RRF 65,F 1457 024A: RRF 65,F
1458 024B: RRF 64,F 1458 024B: RRF 64,F
1459 024C: RRF 65,F 1459 024C: RRF 65,F
1460 024D: RRF 64,F 1460 024D: RRF 64,F
1461 024E: RRF 65,F 1461 024E: RRF 65,F
1462 024F: RRF 64,F 1462 024F: RRF 64,F
1463 0250: RRF 65,F 1463 0250: RRF 65,F
1464 0251: RRF 64,F 1464 0251: RRF 64,F
1465 0252: MOVLW 01 1465 0252: MOVLW 01
1466 0253: ANDWF 65,F 1466 0253: ANDWF 65,F
1467 0254: MOVF 64,W 1467 0254: MOVF 64,W
1468 0255: ANDLW 3F 1468 0255: ANDLW 3F
1469 0256: MOVWF 77 1469 0256: MOVWF 77
1470 0257: MOVF 65,W 1470 0257: MOVF 65,W
1471 0258: ANDLW 00 1471 0258: ANDLW 00
1472 0259: MOVWF 7A 1472 0259: MOVWF 7A
1473 025A: MOVF 77,W 1473 025A: MOVF 77,W
1474 025B: MOVWF 66 1474 025B: MOVWF 66
1475 025C: MOVF 7A,W 1475 025C: MOVF 7A,W
1476 025D: MOVWF 67 1476 025D: MOVWF 67
1477 025E: MOVF 2F,W 1477 025E: MOVF 2F,W
1478 025F: MOVWF 69 1478 025F: MOVWF 69
1479 0260: MOVF 2E,W 1479 0260: MOVF 2E,W
1480 0261: MOVWF 68 1480 0261: MOVWF 68
1481 0262: MOVF 7A,W 1481 0262: MOVF 7A,W
1482 0263: MOVWF 6B 1482 0263: MOVWF 6B
1483 0264: MOVF 77,W 1483 0264: MOVF 77,W
1484 0265: MOVWF 6A 1484 0265: MOVWF 6A
1485 0266: CALL 17B 1485 0266: CALL 17B
1486 0267: MOVF 79,W 1486 0267: MOVF 79,W
1487 0268: MOVWF 68 1487 0268: MOVWF 68
1488 0269: MOVF 78,W 1488 0269: MOVF 78,W
1489 026A: MOVWF 67 1489 026A: MOVWF 67
1490 026B: MOVF 61,W 1490 026B: MOVF 61,W
1491 026C: MOVWF 69 1491 026C: MOVWF 69
1492 026D: MOVF 63,W 1492 026D: MOVF 63,W
1493 026E: MOVWF 6A 1493 026E: MOVWF 6A
1494 026F: MOVF 79,W 1494 026F: MOVF 79,W
1495 0270: MOVWF 6C 1495 0270: MOVWF 6C
1496 0271: MOVF 78,W 1496 0271: MOVF 78,W
1497 0272: MOVWF 6B 1497 0272: MOVWF 6B
1498 0273: CALL 0E2 1498 0273: CALL 0E2
1499 .................... SoundNote(SOUND_Space,0,Pause); // Mezera 1499 .................... SoundNote(SOUND_Space,0,Pause); // Mezera
1500 0274: MOVLW 0C 1500 0274: MOVLW 0C
1501 0275: MOVWF 69 1501 0275: MOVWF 69
1502 0276: CLRF 6A 1502 0276: CLRF 6A
1503 0277: MOVF 31,W 1503 0277: MOVF 31,W
1504 0278: MOVWF 6C 1504 0278: MOVWF 6C
1505 0279: MOVF 30,W 1505 0279: MOVF 30,W
1506 027A: MOVWF 6B 1506 027A: MOVWF 6B
1507 027B: CALL 0E2 1507 027B: CALL 0E2
1508 027C: RETLW 00 1508 027C: RETLW 00
1509 .................... } 1509 .................... }
1510 .................... 1510 ....................
1511 .................... 1511 ....................
1512 .................... // Zahraj skladbu od zadane adresy v promenne Adr. 1512 .................... // Zahraj skladbu od zadane adresy v promenne Adr.
1513 .................... void Play() 1513 .................... void Play()
1514 .................... // CisloSkladby - cislo skladby k hrani 1514 .................... // CisloSkladby - cislo skladby k hrani
1515 .................... { 1515 .................... {
1516 .................... if (Find()) // Najdi zacatek skladby v pameti skladeb 1516 .................... if (Find()) // Najdi zacatek skladby v pameti skladeb
1517 027D: CALL 208 1517 027D: CALL 208
1518 027E: MOVF 78,F 1518 027E: MOVF 78,F
1519 027F: BTFSC 03.2 1519 027F: BTFSC 03.2
1520 0280: GOTO 282 1520 0280: GOTO 282
1521 .................... { 1521 .................... {
1522 .................... return; // Skladba nenalezena 1522 .................... return; // Skladba nenalezena
1523 0281: GOTO 2DF 1523 0281: GOTO 2DF
1524 .................... } 1524 .................... }
1525 .................... 1525 ....................
1526 .................... Tempo=100; // Default delka noty 1526 .................... Tempo=100; // Default delka noty
1527 0282: CLRF 2F 1527 0282: CLRF 2F
1528 0283: MOVLW 64 1528 0283: MOVLW 64
1529 0284: MOVWF 2E 1529 0284: MOVWF 2E
1530 .................... Pause=100; // Default mezera mezi notami 1530 .................... Pause=100; // Default mezera mezi notami
1531 0285: CLRF 31 1531 0285: CLRF 31
1532 0286: MOVWF 30 1532 0286: MOVWF 30
1533 .................... 1533 ....................
1534 .................... Octava=Data&~MASKBEGIN; // Posunuti oktav (povinna soucast zacatku skladby) 1534 .................... Octava=Data&~MASKBEGIN; // Posunuti oktav (povinna soucast zacatku skladby)
1535 0287: MOVF 2B,W 1535 0287: MOVF 2B,W
1536 0288: MOVWF 32 1536 0288: MOVWF 32
1537 .................... Adr++; 1537 .................... Adr++;
1538 0289: INCF 29,F 1538 0289: INCF 29,F
1539 028A: BTFSC 03.2 1539 028A: BTFSC 03.2
1540 028B: INCF 2A,F 1540 028B: INCF 2A,F
1541 .................... 1541 ....................
1542 .................... for (;1;) 1542 .................... for (;1;)
1543 .................... { 1543 .................... {
1544 .................... if (Adr==ENDMEM+1) return; // Konec pametove oblasti 1544 .................... if (Adr==ENDMEM+1) return; // Konec pametove oblasti
1545 028C: MOVF 29,F 1545 028C: MOVF 29,F
1546 028D: BTFSS 03.2 1546 028D: BTFSS 03.2
1547 028E: GOTO 294 1547 028E: GOTO 294
1548 028F: MOVF 2A,W 1548 028F: MOVF 2A,W
1549 0290: SUBLW 08 1549 0290: SUBLW 08
1550 0291: BTFSS 03.2 1550 0291: BTFSS 03.2
1551 0292: GOTO 294 1551 0292: GOTO 294
1552 0293: GOTO 2DF 1552 0293: GOTO 2DF
1553 .................... ReadData(); // Vezmi data 1553 .................... ReadData(); // Vezmi data
1554 0294: CALL 1EF 1554 0294: CALL 1EF
1555 .................... Adr++; // Posun adresu 1555 .................... Adr++; // Posun adresu
1556 0295: INCF 29,F 1556 0295: INCF 29,F
1557 0296: BTFSC 03.2 1557 0296: BTFSC 03.2
1558 0297: INCF 2A,F 1558 0297: INCF 2A,F
1559 .................... if (Data==ENDOFDATA) return; // Konec dat 1559 .................... if (Data==ENDOFDATA) return; // Konec dat
1560 0298: INCFSZ 2B,W 1560 0298: INCFSZ 2B,W
1561 0299: GOTO 29F 1561 0299: GOTO 29F
1562 029A: MOVF 2C,W 1562 029A: MOVF 2C,W
1563 029B: SUBLW 3F 1563 029B: SUBLW 3F
1564 029C: BTFSS 03.2 1564 029C: BTFSS 03.2
1565 029D: GOTO 29F 1565 029D: GOTO 29F
1566 029E: GOTO 2DF 1566 029E: GOTO 2DF
1567 .................... if ((Data&MASKBEGIN)==DATABEGIN) return; // Zacatek dalsi skladby 1567 .................... if ((Data&MASKBEGIN)==DATABEGIN) return; // Zacatek dalsi skladby
1568 029F: MOVF 2B,W 1568 029F: MOVF 2B,W
1569 02A0: ANDLW 00 1569 02A0: ANDLW 00
1570 02A1: MOVWF 61 1570 02A1: MOVWF 61
1571 02A2: MOVF 2C,W 1571 02A2: MOVF 2C,W
1572 02A3: ANDLW 38 1572 02A3: ANDLW 38
1573 02A4: MOVWF 62 1573 02A4: MOVWF 62
1574 02A5: MOVF 61,F 1574 02A5: MOVF 61,F
1575 02A6: BTFSS 03.2 1575 02A6: BTFSS 03.2
1576 02A7: GOTO 2AD 1576 02A7: GOTO 2AD
1577 02A8: MOVF 62,W 1577 02A8: MOVF 62,W
1578 02A9: SUBLW 20 1578 02A9: SUBLW 20
1579 02AA: BTFSS 03.2 1579 02AA: BTFSS 03.2
1580 02AB: GOTO 2AD 1580 02AB: GOTO 2AD
1581 02AC: GOTO 2DF 1581 02AC: GOTO 2DF
1582 .................... if ((Data&MASKTEMPO)==DATATEMPO) Tempo=Data&~DATATEMPO; // Paramter TEMPO 1582 .................... if ((Data&MASKTEMPO)==DATATEMPO) Tempo=Data&~DATATEMPO; // Paramter TEMPO
1583 02AD: MOVF 2B,W 1583 02AD: MOVF 2B,W
1584 02AE: ANDLW 00 1584 02AE: ANDLW 00
1585 02AF: MOVWF 61 1585 02AF: MOVWF 61
1586 02B0: MOVF 2C,W 1586 02B0: MOVF 2C,W
1587 02B1: ANDLW 38 1587 02B1: ANDLW 38
1588 02B2: MOVWF 62 1588 02B2: MOVWF 62
1589 02B3: MOVF 61,F 1589 02B3: MOVF 61,F
1590 02B4: BTFSS 03.2 1590 02B4: BTFSS 03.2
1591 02B5: GOTO 2BF 1591 02B5: GOTO 2BF
1592 02B6: MOVF 62,W 1592 02B6: MOVF 62,W
1593 02B7: SUBLW 28 1593 02B7: SUBLW 28
1594 02B8: BTFSS 03.2 1594 02B8: BTFSS 03.2
1595 02B9: GOTO 2BF 1595 02B9: GOTO 2BF
1596 02BA: MOVF 2B,W 1596 02BA: MOVF 2B,W
1597 02BB: MOVWF 2E 1597 02BB: MOVWF 2E
1598 02BC: MOVF 2C,W 1598 02BC: MOVF 2C,W
1599 02BD: ANDLW D7 1599 02BD: ANDLW D7
1600 02BE: MOVWF 2F 1600 02BE: MOVWF 2F
1601 .................... if ((Data&MASKPAUSE)==DATAPAUSE) Pause=Data&~DATAPAUSE; // Parametr PAUSE 1601 .................... if ((Data&MASKPAUSE)==DATAPAUSE) Pause=Data&~DATAPAUSE; // Parametr PAUSE
1602 02BF: MOVF 2B,W 1602 02BF: MOVF 2B,W
1603 02C0: ANDLW 00 1603 02C0: ANDLW 00
1604 02C1: MOVWF 61 1604 02C1: MOVWF 61
1605 02C2: MOVF 2C,W 1605 02C2: MOVF 2C,W
1606 02C3: ANDLW 38 1606 02C3: ANDLW 38
1607 02C4: MOVWF 62 1607 02C4: MOVWF 62
1608 02C5: MOVF 61,F 1608 02C5: MOVF 61,F
1609 02C6: BTFSS 03.2 1609 02C6: BTFSS 03.2
1610 02C7: GOTO 2D1 1610 02C7: GOTO 2D1
1611 02C8: MOVF 62,W 1611 02C8: MOVF 62,W
1612 02C9: SUBLW 30 1612 02C9: SUBLW 30
1613 02CA: BTFSS 03.2 1613 02CA: BTFSS 03.2
1614 02CB: GOTO 2D1 1614 02CB: GOTO 2D1
1615 02CC: MOVF 2B,W 1615 02CC: MOVF 2B,W
1616 02CD: MOVWF 30 1616 02CD: MOVWF 30
1617 02CE: MOVF 2C,W 1617 02CE: MOVF 2C,W
1618 02CF: ANDLW CF 1618 02CF: ANDLW CF
1619 02D0: MOVWF 31 1619 02D0: MOVWF 31
1620 .................... if ((Data&MASKNOTE)==0) // Nota 1620 .................... if ((Data&MASKNOTE)==0) // Nota
1621 02D1: MOVF 2B,W 1621 02D1: MOVF 2B,W
1622 02D2: ANDLW 00 1622 02D2: ANDLW 00
1623 02D3: MOVWF 61 1623 02D3: MOVWF 61
1624 02D4: MOVF 2C,W 1624 02D4: MOVF 2C,W
1625 02D5: ANDLW 20 1625 02D5: ANDLW 20
1626 02D6: MOVWF 62 1626 02D6: MOVWF 62
1627 02D7: MOVF 61,F 1627 02D7: MOVF 61,F
1628 02D8: BTFSS 03.2 1628 02D8: BTFSS 03.2
1629 02D9: GOTO 2DE 1629 02D9: GOTO 2DE
1630 02DA: MOVF 62,F 1630 02DA: MOVF 62,F
1631 02DB: BTFSS 03.2 1631 02DB: BTFSS 03.2
1632 02DC: GOTO 2DE 1632 02DC: GOTO 2DE
1633 .................... { 1633 .................... {
1634 .................... PlayData(); // Zahraj notu 1634 .................... PlayData(); // Zahraj notu
1635 02DD: CALL 237 1635 02DD: CALL 237
1636 .................... } 1636 .................... }
1637 .................... } 1637 .................... }
1638 02DE: GOTO 28C 1638 02DE: GOTO 28C
1639 02DF: RETLW 00 1639 02DF: RETLW 00
1640 .................... } 1640 .................... }
1641 .................... 1641 ....................
1642 .................... 1642 ....................
1643 .................... // Vycisli cislo z bufferu, posune ukazovatko na prvni nezpracovany znak, preskakuje mezery 1643 .................... // Vycisli cislo z bufferu, posune ukazovatko na prvni nezpracovany znak, preskakuje mezery
1644 .................... int16 Number(char line[], int *a, len) 1644 .................... int16 Number(char line[], int *a, len)
1645 .................... { 1645 .................... {
1646 .................... int16 Data; 1646 .................... int16 Data;
1647 .................... char c; 1647 .................... char c;
1648 .................... 1648 ....................
1649 .................... while((line[*a]==' ')&(*a<len)) // Vynech mezery na zacatku 1649 .................... while((line[*a]==' ')&(*a<len)) // Vynech mezery na zacatku
1650 * 1650 *
1651 0190: MOVF 62,W 1651 0190: MOVF 62,W
1652 0191: MOVWF 04 1652 0191: MOVWF 04
1653 0192: MOVF 61,W 1653 0192: MOVF 61,W
1654 0193: ADDWF 00,W 1654 0193: ADDWF 00,W
1655 0194: MOVWF 04 1655 0194: MOVWF 04
1656 0195: MOVF 00,W 1656 0195: MOVF 00,W
1657 0196: SUBLW 20 1657 0196: SUBLW 20
1658 0197: BTFSC 03.2 1658 0197: BTFSC 03.2
1659 0198: GOTO 19B 1659 0198: GOTO 19B
1660 0199: MOVLW 00 1660 0199: MOVLW 00
1661 019A: GOTO 19C 1661 019A: GOTO 19C
1662 019B: MOVLW 01 1662 019B: MOVLW 01
1663 019C: MOVWF 69 1663 019C: MOVWF 69
1664 019D: MOVF 62,W 1664 019D: MOVF 62,W
1665 019E: MOVWF 04 1665 019E: MOVWF 04
1666 019F: MOVF 63,W 1666 019F: MOVF 63,W
1667 01A0: SUBWF 00,W 1667 01A0: SUBWF 00,W
1668 01A1: BTFSS 03.0 1668 01A1: BTFSS 03.0
1669 01A2: GOTO 1A5 1669 01A2: GOTO 1A5
1670 01A3: MOVLW 00 1670 01A3: MOVLW 00
1671 01A4: GOTO 1A6 1671 01A4: GOTO 1A6
1672 01A5: MOVLW 01 1672 01A5: MOVLW 01
1673 01A6: ANDWF 69,W 1673 01A6: ANDWF 69,W
1674 01A7: XORLW 00 1674 01A7: XORLW 00
1675 01A8: BTFSC 03.2 1675 01A8: BTFSC 03.2
1676 01A9: GOTO 1AE 1676 01A9: GOTO 1AE
1677 .................... (*a)++; // Posouvej ukazovatko 1677 .................... (*a)++; // Posouvej ukazovatko
1678 01AA: MOVF 62,W 1678 01AA: MOVF 62,W
1679 01AB: MOVWF 04 1679 01AB: MOVWF 04
1680 01AC: INCF 00,F 1680 01AC: INCF 00,F
1681 01AD: GOTO 190 1681 01AD: GOTO 190
1682 .................... 1682 ....................
1683 .................... Data=0; 1683 .................... Data=0;
1684 01AE: CLRF 65 1684 01AE: CLRF 65
1685 01AF: CLRF 64 1685 01AF: CLRF 64
1686 .................... while (1) 1686 .................... while (1)
1687 .................... { 1687 .................... {
1688 .................... if (*a>=len) return Data; // Konec retezce 1688 .................... if (*a>=len) return Data; // Konec retezce
1689 01B0: MOVF 62,W 1689 01B0: MOVF 62,W
1690 01B1: MOVWF 04 1690 01B1: MOVWF 04
1691 01B2: MOVF 63,W 1691 01B2: MOVF 63,W
1692 01B3: SUBWF 00,W 1692 01B3: SUBWF 00,W
1693 01B4: BTFSS 03.0 1693 01B4: BTFSS 03.0
1694 01B5: GOTO 1BB 1694 01B5: GOTO 1BB
1695 01B6: MOVF 64,W 1695 01B6: MOVF 64,W
1696 01B7: MOVWF 78 1696 01B7: MOVWF 78
1697 01B8: MOVF 65,W 1697 01B8: MOVF 65,W
1698 01B9: MOVWF 79 1698 01B9: MOVWF 79
1699 01BA: GOTO 1EE 1699 01BA: GOTO 1EE
1700 .................... c=line[*a]; // Vezmi znak z pole 1700 .................... c=line[*a]; // Vezmi znak z pole
1701 01BB: MOVF 62,W 1701 01BB: MOVF 62,W
1702 01BC: MOVWF 04 1702 01BC: MOVWF 04
1703 01BD: MOVF 61,W 1703 01BD: MOVF 61,W
1704 01BE: ADDWF 00,W 1704 01BE: ADDWF 00,W
1705 01BF: MOVWF 04 1705 01BF: MOVWF 04
1706 01C0: MOVF 00,W 1706 01C0: MOVF 00,W
1707 01C1: MOVWF 66 1707 01C1: MOVWF 66
1708 .................... if ((c<'0')|(c>'9')) return Data; // Koncime pokud znak neni cislice 1708 .................... if ((c<'0')|(c>'9')) return Data; // Koncime pokud znak neni cislice
1709 01C2: MOVF 66,W 1709 01C2: MOVF 66,W
1710 01C3: SUBLW 2F 1710 01C3: SUBLW 2F
1711 01C4: BTFSC 03.0 1711 01C4: BTFSC 03.0
1712 01C5: GOTO 1C8 1712 01C5: GOTO 1C8
1713 01C6: MOVLW 00 1713 01C6: MOVLW 00
1714 01C7: GOTO 1C9 1714 01C7: GOTO 1C9
1715 01C8: MOVLW 01 1715 01C8: MOVLW 01
1716 01C9: MOVWF 67 1716 01C9: MOVWF 67
1717 01CA: MOVF 66,W 1717 01CA: MOVF 66,W
1718 01CB: SUBLW 39 1718 01CB: SUBLW 39
1719 01CC: BTFSS 03.0 1719 01CC: BTFSS 03.0
1720 01CD: GOTO 1D0 1720 01CD: GOTO 1D0
1721 01CE: MOVLW 00 1721 01CE: MOVLW 00
1722 01CF: GOTO 1D1 1722 01CF: GOTO 1D1
1723 01D0: MOVLW 01 1723 01D0: MOVLW 01
1724 01D1: IORWF 67,W 1724 01D1: IORWF 67,W
1725 01D2: XORLW 00 1725 01D2: XORLW 00
1726 01D3: BTFSC 03.2 1726 01D3: BTFSC 03.2
1727 01D4: GOTO 1DA 1727 01D4: GOTO 1DA
1728 01D5: MOVF 64,W 1728 01D5: MOVF 64,W
1729 01D6: MOVWF 78 1729 01D6: MOVWF 78
1730 01D7: MOVF 65,W 1730 01D7: MOVF 65,W
1731 01D8: MOVWF 79 1731 01D8: MOVWF 79
1732 01D9: GOTO 1EE 1732 01D9: GOTO 1EE
1733 .................... Data = Data * 10 + (c-'0'); // Pouzij cislici 1733 .................... Data = Data * 10 + (c-'0'); // Pouzij cislici
1734 01DA: MOVF 65,W 1734 01DA: MOVF 65,W
1735 01DB: MOVWF 69 1735 01DB: MOVWF 69
1736 01DC: MOVF 64,W 1736 01DC: MOVF 64,W
1737 01DD: MOVWF 68 1737 01DD: MOVWF 68
1738 01DE: CLRF 6B 1738 01DE: CLRF 6B
1739 01DF: MOVLW 0A 1739 01DF: MOVLW 0A
1740 01E0: MOVWF 6A 1740 01E0: MOVWF 6A
1741 01E1: CALL 17B 1741 01E1: CALL 17B
1742 01E2: MOVLW 30 1742 01E2: MOVLW 30
1743 01E3: SUBWF 66,W 1743 01E3: SUBWF 66,W
1744 01E4: ADDWF 78,W 1744 01E4: ADDWF 78,W
1745 01E5: MOVWF 64 1745 01E5: MOVWF 64
1746 01E6: MOVF 79,W 1746 01E6: MOVF 79,W
1747 01E7: MOVWF 65 1747 01E7: MOVWF 65
1748 01E8: BTFSC 03.0 1748 01E8: BTFSC 03.0
1749 01E9: INCF 65,F 1749 01E9: INCF 65,F
1750 .................... (*a)++; // Dalsi znak 1750 .................... (*a)++; // Dalsi znak
1751 01EA: MOVF 62,W 1751 01EA: MOVF 62,W
1752 01EB: MOVWF 04 1752 01EB: MOVWF 04
1753 01EC: INCF 00,F 1753 01EC: INCF 00,F
1754 .................... } 1754 .................... }
1755 01ED: GOTO 1B0 1755 01ED: GOTO 1B0
1756 01EE: RETLW 00 1756 01EE: RETLW 00
1757 .................... } 1757 .................... }
1758 .................... 1758 ....................
1759 .................... 1759 ....................
1760 .................... // Vyhledej klicove slovo a vrat jeho zkraceny kod 1760 .................... // Vyhledej klicove slovo a vrat jeho zkraceny kod
1761 .................... // Pokud slovo neexistuje vraci -1 1761 .................... // Pokud slovo neexistuje vraci -1
1762 .................... // Format definice - retezec ukonceny nulou + zastupny znak, na konci prazdny retezec (nula) 1762 .................... // Format definice - retezec ukonceny nulou + zastupny znak, na konci prazdny retezec (nula)
1763 .................... const char KeyWords[] = 1763 .................... const char KeyWords[] =
1764 .................... { 1764 .................... {
1765 .................... 'P','L','A','Y',0, 'P', 1765 .................... 'P','L','A','Y',0, 'P',
1766 .................... 'E','R','A','S','E',0, 'E', 1766 .................... 'E','R','A','S','E',0, 'E',
1767 .................... 'T','E','M','P','O',0, 't', 1767 .................... 'T','E','M','P','O',0, 't',
1768 .................... 'P','A','U','S','E',0, 'p', 1768 .................... 'P','A','U','S','E',0, 'p',
1769 .................... 'B','E','G','I','N',0, 'B', 1769 .................... 'B','E','G','I','N',0, 'B',
1770 .................... 'T','E','S','T',0, 'b', 1770 .................... 'T','E','S','T',0, 'b',
1771 .................... 'E','N','D',0, 'Z', 1771 .................... 'E','N','D',0, 'Z',
1772 .................... 'C',0. SOUND_C, 1772 .................... 'C',0. SOUND_C,
1773 .................... 'C','I','S',0, SOUND_Cis, 1773 .................... 'C','I','S',0, SOUND_Cis,
1774 .................... 'D',0, SOUND_D, 1774 .................... 'D',0, SOUND_D,
1775 .................... 'D','I','S',0, SOUND_Dis, 1775 .................... 'D','I','S',0, SOUND_Dis,
1776 .................... 'E',0, SOUND_E, 1776 .................... 'E',0, SOUND_E,
1777 .................... 'F',0, SOUND_F, 1777 .................... 'F',0, SOUND_F,
1778 .................... 'F','I','S',0, SOUND_Fis, 1778 .................... 'F','I','S',0, SOUND_Fis,
1779 .................... 'G',0, SOUND_G, 1779 .................... 'G',0, SOUND_G,
1780 .................... 'G','I','S',0, SOUND_Gis, 1780 .................... 'G','I','S',0, SOUND_Gis,
1781 .................... 'A',0, SOUND_A, 1781 .................... 'A',0, SOUND_A,
1782 .................... 'A','I','S',0, SOUND_Ais, 1782 .................... 'A','I','S',0, SOUND_Ais,
1783 .................... 'H',0, SOUND_H, 1783 .................... 'H',0, SOUND_H,
1784 .................... 'S','P','A','C','E',0, SOUND_Space 1784 .................... 'S','P','A','C','E',0, SOUND_Space
1785 .................... }; 1785 .................... };
1786 * 1786 *
1787 0051: BCF 0A.0 1787 0051: BCF 0A.0
1788 0052: BCF 0A.1 1788 0052: BCF 0A.1
1789 0053: BCF 0A.2 1789 0053: BCF 0A.2
1790 0054: ADDWF 02,F 1790 0054: ADDWF 02,F
1791 0055: RETLW 50 1791 0055: RETLW 50
1792 0056: RETLW 4C 1792 0056: RETLW 4C
1793 0057: RETLW 41 1793 0057: RETLW 41
1794 0058: RETLW 59 1794 0058: RETLW 59
1795 0059: RETLW 00 1795 0059: RETLW 00
1796 005A: RETLW 50 1796 005A: RETLW 50
1797 005B: RETLW 45 1797 005B: RETLW 45
1798 005C: RETLW 52 1798 005C: RETLW 52
1799 005D: RETLW 41 1799 005D: RETLW 41
1800 005E: RETLW 53 1800 005E: RETLW 53
1801 005F: RETLW 45 1801 005F: RETLW 45
1802 0060: RETLW 00 1802 0060: RETLW 00
1803 0061: RETLW 45 1803 0061: RETLW 45
1804 0062: RETLW 54 1804 0062: RETLW 54
1805 0063: RETLW 45 1805 0063: RETLW 45
1806 0064: RETLW 4D 1806 0064: RETLW 4D
1807 0065: RETLW 50 1807 0065: RETLW 50
1808 0066: RETLW 4F 1808 0066: RETLW 4F
1809 0067: RETLW 00 1809 0067: RETLW 00
1810 0068: RETLW 74 1810 0068: RETLW 74
1811 0069: RETLW 50 1811 0069: RETLW 50
1812 006A: RETLW 41 1812 006A: RETLW 41
1813 006B: RETLW 55 1813 006B: RETLW 55
1814 006C: RETLW 53 1814 006C: RETLW 53
1815 006D: RETLW 45 1815 006D: RETLW 45
1816 006E: RETLW 00 1816 006E: RETLW 00
1817 006F: RETLW 70 1817 006F: RETLW 70
1818 0070: RETLW 42 1818 0070: RETLW 42
1819 0071: RETLW 45 1819 0071: RETLW 45
1820 0072: RETLW 47 1820 0072: RETLW 47
1821 0073: RETLW 49 1821 0073: RETLW 49
1822 0074: RETLW 4E 1822 0074: RETLW 4E
1823 0075: RETLW 00 1823 0075: RETLW 00
1824 0076: RETLW 42 1824 0076: RETLW 42
1825 0077: RETLW 54 1825 0077: RETLW 54
1826 0078: RETLW 45 1826 0078: RETLW 45
1827 0079: RETLW 53 1827 0079: RETLW 53
1828 007A: RETLW 54 1828 007A: RETLW 54
1829 007B: RETLW 00 1829 007B: RETLW 00
1830 007C: RETLW 62 1830 007C: RETLW 62
1831 007D: RETLW 45 1831 007D: RETLW 45
1832 007E: RETLW 4E 1832 007E: RETLW 4E
1833 007F: RETLW 44 1833 007F: RETLW 44
1834 0080: RETLW 00 1834 0080: RETLW 00
1835 0081: RETLW 5A 1835 0081: RETLW 5A
1836 0082: RETLW 43 1836 0082: RETLW 43
1837 0083: RETLW 00 1837 0083: RETLW 00
1838 0084: RETLW 00 1838 0084: RETLW 00
1839 0085: RETLW 43 1839 0085: RETLW 43
1840 0086: RETLW 49 1840 0086: RETLW 49
1841 0087: RETLW 53 1841 0087: RETLW 53
1842 0088: RETLW 00 1842 0088: RETLW 00
1843 0089: RETLW 01 1843 0089: RETLW 01
1844 008A: RETLW 44 1844 008A: RETLW 44
1845 008B: RETLW 00 1845 008B: RETLW 00
1846 008C: RETLW 02 1846 008C: RETLW 02
1847 008D: RETLW 44 1847 008D: RETLW 44
1848 008E: RETLW 49 1848 008E: RETLW 49
1849 008F: RETLW 53 1849 008F: RETLW 53
1850 0090: RETLW 00 1850 0090: RETLW 00
1851 0091: RETLW 03 1851 0091: RETLW 03
1852 0092: RETLW 45 1852 0092: RETLW 45
1853 0093: RETLW 00 1853 0093: RETLW 00
1854 0094: RETLW 04 1854 0094: RETLW 04
1855 0095: RETLW 46 1855 0095: RETLW 46
1856 0096: RETLW 00 1856 0096: RETLW 00
1857 0097: RETLW 05 1857 0097: RETLW 05
1858 0098: RETLW 46 1858 0098: RETLW 46
1859 0099: RETLW 49 1859 0099: RETLW 49
1860 009A: RETLW 53 1860 009A: RETLW 53
1861 009B: RETLW 00 1861 009B: RETLW 00
1862 009C: RETLW 06 1862 009C: RETLW 06
1863 009D: RETLW 47 1863 009D: RETLW 47
1864 009E: RETLW 00 1864 009E: RETLW 00
1865 009F: RETLW 07 1865 009F: RETLW 07
1866 00A0: RETLW 47 1866 00A0: RETLW 47
1867 00A1: RETLW 49 1867 00A1: RETLW 49
1868 00A2: RETLW 53 1868 00A2: RETLW 53
1869 00A3: RETLW 00 1869 00A3: RETLW 00
1870 00A4: RETLW 08 1870 00A4: RETLW 08
1871 00A5: RETLW 41 1871 00A5: RETLW 41
1872 00A6: RETLW 00 1872 00A6: RETLW 00
1873 00A7: RETLW 09 1873 00A7: RETLW 09
1874 00A8: RETLW 41 1874 00A8: RETLW 41
1875 00A9: RETLW 49 1875 00A9: RETLW 49
1876 00AA: RETLW 53 1876 00AA: RETLW 53
1877 00AB: RETLW 00 1877 00AB: RETLW 00
1878 00AC: RETLW 0A 1878 00AC: RETLW 0A
1879 00AD: RETLW 48 1879 00AD: RETLW 48
1880 00AE: RETLW 00 1880 00AE: RETLW 00
1881 00AF: RETLW 0B 1881 00AF: RETLW 0B
1882 00B0: RETLW 53 1882 00B0: RETLW 53
1883 00B1: RETLW 50 1883 00B1: RETLW 50
1884 00B2: RETLW 41 1884 00B2: RETLW 41
1885 00B3: RETLW 43 1885 00B3: RETLW 43
1886 00B4: RETLW 45 1886 00B4: RETLW 45
1887 00B5: RETLW 00 1887 00B5: RETLW 00
1888 00B6: RETLW 0C 1888 00B6: RETLW 0C
1889 .................... signed int Word(char line[], unsigned int8 *a, len) 1889 .................... signed int Word(char line[], unsigned int8 *a, len)
1890 .................... { 1890 .................... {
1891 .................... unsigned int8 i; // Index do pole klicovych slov 1891 .................... unsigned int8 i; // Index do pole klicovych slov
1892 .................... unsigned int8 j; // index do zpracovavane radky 1892 .................... unsigned int8 j; // index do zpracovavane radky
1893 .................... 1893 ....................
1894 .................... while((line[*a]==' ')&(*a<len)) // Vynech mezery na zacatku 1894 .................... while((line[*a]==' ')&(*a<len)) // Vynech mezery na zacatku
1895 * 1895 *
1896 03A6: MOVF 62,W 1896 03A6: MOVF 62,W
1897 03A7: MOVWF 04 1897 03A7: MOVWF 04
1898 03A8: MOVF 61,W 1898 03A8: MOVF 61,W
1899 03A9: ADDWF 00,W 1899 03A9: ADDWF 00,W
1900 03AA: MOVWF 04 1900 03AA: MOVWF 04
1901 03AB: MOVF 00,W 1901 03AB: MOVF 00,W
1902 03AC: SUBLW 20 1902 03AC: SUBLW 20
1903 03AD: BTFSC 03.2 1903 03AD: BTFSC 03.2
1904 03AE: GOTO 3B1 1904 03AE: GOTO 3B1
1905 03AF: MOVLW 00 1905 03AF: MOVLW 00
1906 03B0: GOTO 3B2 1906 03B0: GOTO 3B2
1907 03B1: MOVLW 01 1907 03B1: MOVLW 01
1908 03B2: MOVWF 68 1908 03B2: MOVWF 68
1909 03B3: MOVF 62,W 1909 03B3: MOVF 62,W
1910 03B4: MOVWF 04 1910 03B4: MOVWF 04
1911 03B5: MOVF 63,W 1911 03B5: MOVF 63,W
1912 03B6: SUBWF 00,W 1912 03B6: SUBWF 00,W
1913 03B7: BTFSS 03.0 1913 03B7: BTFSS 03.0
1914 03B8: GOTO 3BB 1914 03B8: GOTO 3BB
1915 03B9: MOVLW 00 1915 03B9: MOVLW 00
1916 03BA: GOTO 3BC 1916 03BA: GOTO 3BC
1917 03BB: MOVLW 01 1917 03BB: MOVLW 01
1918 03BC: ANDWF 68,W 1918 03BC: ANDWF 68,W
1919 03BD: XORLW 00 1919 03BD: XORLW 00
1920 03BE: BTFSC 03.2 1920 03BE: BTFSC 03.2
1921 03BF: GOTO 3C4 1921 03BF: GOTO 3C4
1922 .................... (*a)++; // Posouvej ukazovatko 1922 .................... (*a)++; // Posouvej ukazovatko
1923 03C0: MOVF 62,W 1923 03C0: MOVF 62,W
1924 03C1: MOVWF 04 1924 03C1: MOVWF 04
1925 03C2: INCF 00,F 1925 03C2: INCF 00,F
1926 03C3: GOTO 3A6 1926 03C3: GOTO 3A6
1927 .................... 1927 ....................
1928 .................... for (i=0;i<sizeof(KeyWords);) // Slova ze slovniku 1928 .................... for (i=0;i<sizeof(KeyWords);) // Slova ze slovniku
1929 03C4: CLRF 64 1929 03C4: CLRF 64
1930 03C5: MOVF 64,W 1930 03C5: MOVF 64,W
1931 03C6: SUBLW 61 1931 03C6: SUBLW 61
1932 03C7: BTFSS 03.0 1932 03C7: BTFSS 03.0
1933 03C8: GOTO 430 1933 03C8: GOTO 430
1934 .................... { 1934 .................... {
1935 .................... for (j=*a;(j<len)&(KeyWords[i]!=0)&(KeyWords[i]==line[j]);i++,j++) // Znaky ze slova 1935 .................... for (j=*a;(j<len)&(KeyWords[i]!=0)&(KeyWords[i]==line[j]);i++,j++) // Znaky ze slova
1936 03C9: MOVF 62,W 1936 03C9: MOVF 62,W
1937 03CA: MOVWF 04 1937 03CA: MOVWF 04
1938 03CB: MOVF 00,W 1938 03CB: MOVF 00,W
1939 03CC: MOVWF 65 1939 03CC: MOVWF 65
1940 03CD: MOVF 63,W 1940 03CD: MOVF 63,W
1941 03CE: SUBWF 65,W 1941 03CE: SUBWF 65,W
1942 03CF: BTFSS 03.0 1942 03CF: BTFSS 03.0
1943 03D0: GOTO 3D3 1943 03D0: GOTO 3D3
1944 03D1: MOVLW 00 1944 03D1: MOVLW 00
1945 03D2: GOTO 3D4 1945 03D2: GOTO 3D4
1946 03D3: MOVLW 01 1946 03D3: MOVLW 01
1947 03D4: MOVWF 66 1947 03D4: MOVWF 66
1948 03D5: MOVF 64,W 1948 03D5: MOVF 64,W
1949 03D6: CALL 051 1949 03D6: CALL 051
1950 03D7: XORLW 00 1950 03D7: XORLW 00
1951 03D8: BTFSS 03.2 1951 03D8: BTFSS 03.2
1952 03D9: GOTO 3DC 1952 03D9: GOTO 3DC
1953 03DA: MOVLW 00 1953 03DA: MOVLW 00
1954 03DB: GOTO 3DD 1954 03DB: GOTO 3DD
1955 03DC: MOVLW 01 1955 03DC: MOVLW 01
1956 03DD: ANDWF 66,W 1956 03DD: ANDWF 66,W
1957 03DE: MOVWF 68 1957 03DE: MOVWF 68
1958 03DF: MOVF 64,W 1958 03DF: MOVF 64,W
1959 03E0: CALL 051 1959 03E0: CALL 051
1960 03E1: MOVWF 69 1960 03E1: MOVWF 69
1961 03E2: MOVF 61,W 1961 03E2: MOVF 61,W
1962 03E3: ADDWF 65,W 1962 03E3: ADDWF 65,W
1963 03E4: MOVWF 04 1963 03E4: MOVWF 04
1964 03E5: MOVF 00,W 1964 03E5: MOVF 00,W
1965 03E6: SUBWF 69,W 1965 03E6: SUBWF 69,W
1966 03E7: BTFSC 03.2 1966 03E7: BTFSC 03.2
1967 03E8: GOTO 3EB 1967 03E8: GOTO 3EB
1968 03E9: MOVLW 00 1968 03E9: MOVLW 00
1969 03EA: GOTO 3EC 1969 03EA: GOTO 3EC
1970 03EB: MOVLW 01 1970 03EB: MOVLW 01
1971 03EC: ANDWF 68,W 1971 03EC: ANDWF 68,W
1972 03ED: XORLW 00 1972 03ED: XORLW 00
1973 03EE: BTFSC 03.2 1973 03EE: BTFSC 03.2
1974 03EF: GOTO 3F4 1974 03EF: GOTO 3F4
1975 .................... { 1975 .................... {
1976 .................... } 1976 .................... }
1977 03F0: MOVF 64,W 1977 03F0: MOVF 64,W
1978 03F1: INCF 64,F 1978 03F1: INCF 64,F
1979 03F2: INCF 65,F 1979 03F2: INCF 65,F
1980 03F3: GOTO 3CD 1980 03F3: GOTO 3CD
1981 .................... if ((KeyWords[i]==0)&((line[j]==' ')|(j==len))) 1981 .................... if ((KeyWords[i]==0)&((line[j]==' ')|(j==len)))
1982 03F4: MOVF 64,W 1982 03F4: MOVF 64,W
1983 03F5: CALL 051 1983 03F5: CALL 051
1984 03F6: XORLW 00 1984 03F6: XORLW 00
1985 03F7: BTFSC 03.2 1985 03F7: BTFSC 03.2
1986 03F8: GOTO 3FB 1986 03F8: GOTO 3FB
1987 03F9: MOVLW 00 1987 03F9: MOVLW 00
1988 03FA: GOTO 3FC 1988 03FA: GOTO 3FC
1989 03FB: MOVLW 01 1989 03FB: MOVLW 01
1990 03FC: MOVWF 67 1990 03FC: MOVWF 67
1991 03FD: MOVF 61,W 1991 03FD: MOVF 61,W
1992 03FE: ADDWF 65,W 1992 03FE: ADDWF 65,W
1993 03FF: MOVWF 04 1993 03FF: MOVWF 04
1994 0400: MOVF 00,W 1994 0400: MOVF 00,W
1995 0401: SUBLW 20 1995 0401: SUBLW 20
1996 0402: BTFSC 03.2 1996 0402: BTFSC 03.2
1997 0403: GOTO 406 1997 0403: GOTO 406
1998 0404: MOVLW 00 1998 0404: MOVLW 00
1999 0405: GOTO 407 1999 0405: GOTO 407
2000 0406: MOVLW 01 2000 0406: MOVLW 01
2001 0407: MOVWF 69 2001 0407: MOVWF 69
2002 0408: MOVF 63,W 2002 0408: MOVF 63,W
2003 0409: SUBWF 65,W 2003 0409: SUBWF 65,W
2004 040A: BTFSC 03.2 2004 040A: BTFSC 03.2
2005 040B: GOTO 40E 2005 040B: GOTO 40E
2006 040C: MOVLW 00 2006 040C: MOVLW 00
2007 040D: GOTO 40F 2007 040D: GOTO 40F
2008 040E: MOVLW 01 2008 040E: MOVLW 01
2009 040F: IORWF 69,W 2009 040F: IORWF 69,W
2010 0410: ANDWF 67,W 2010 0410: ANDWF 67,W
2011 0411: XORLW 00 2011 0411: XORLW 00
2012 0412: BTFSC 03.2 2012 0412: BTFSC 03.2
2013 0413: GOTO 426 2013 0413: GOTO 426
2014 .................... { 2014 .................... {
2015 .................... if (j>=len) j=len-1; // Korekce abychom se nedostali za konec retezce 2015 .................... if (j>=len) j=len-1; // Korekce abychom se nedostali za konec retezce
2016 0414: MOVF 63,W 2016 0414: MOVF 63,W
2017 0415: SUBWF 65,W 2017 0415: SUBWF 65,W
2018 0416: BTFSS 03.0 2018 0416: BTFSS 03.0
2019 0417: GOTO 41B 2019 0417: GOTO 41B
2020 0418: MOVLW 01 2020 0418: MOVLW 01
2021 0419: SUBWF 63,W 2021 0419: SUBWF 63,W
2022 041A: MOVWF 65 2022 041A: MOVWF 65
2023 .................... *a=j+1; // Posun ukazovatko za zpracovane slovo 2023 .................... *a=j+1; // Posun ukazovatko za zpracovane slovo
2024 041B: MOVF 62,W 2024 041B: MOVF 62,W
2025 041C: MOVWF 04 2025 041C: MOVWF 04
2026 041D: MOVLW 01 2026 041D: MOVLW 01
2027 041E: ADDWF 65,W 2027 041E: ADDWF 65,W
2028 041F: MOVWF 00 2028 041F: MOVWF 00
2029 .................... 2029 ....................
2030 .................... return KeyWords[i+1]; // Vrat zastupnou hodnotu z tabulky klicovych slov 2030 .................... return KeyWords[i+1]; // Vrat zastupnou hodnotu z tabulky klicovych slov
2031 0420: MOVLW 01 2031 0420: MOVLW 01
2032 0421: ADDWF 64,W 2032 0421: ADDWF 64,W
2033 0422: CALL 051 2033 0422: CALL 051
2034 0423: MOVWF 78 2034 0423: MOVWF 78
2035 0424: MOVWF 78 2035 0424: MOVWF 78
2036 0425: GOTO 432 2036 0425: GOTO 432
2037 .................... } 2037 .................... }
2038 .................... while(KeyWords[i]!=0) i++; // Preskoc zbytek slova v tabulce 2038 .................... while(KeyWords[i]!=0) i++; // Preskoc zbytek slova v tabulce
2039 0426: MOVF 64,W 2039 0426: MOVF 64,W
2040 0427: CALL 051 2040 0427: CALL 051
2041 0428: XORLW 00 2041 0428: XORLW 00
2042 0429: BTFSC 03.2 2042 0429: BTFSC 03.2
2043 042A: GOTO 42D 2043 042A: GOTO 42D
2044 042B: INCF 64,F 2044 042B: INCF 64,F
2045 042C: GOTO 426 2045 042C: GOTO 426
2046 .................... i++; // Preskoc oddelovac 2046 .................... i++; // Preskoc oddelovac
2047 042D: INCF 64,F 2047 042D: INCF 64,F
2048 .................... i++; // Preskoc polozku se zastupnou hodnotou 2048 .................... i++; // Preskoc polozku se zastupnou hodnotou
2049 042E: INCF 64,F 2049 042E: INCF 64,F
2050 .................... } 2050 .................... }
2051 042F: GOTO 3C5 2051 042F: GOTO 3C5
2052 .................... return -1; // Prosli jsme cely slovnik a nedoslo ke shode 2052 .................... return -1; // Prosli jsme cely slovnik a nedoslo ke shode
2053 0430: MOVLW FF 2053 0430: MOVLW FF
2054 0431: MOVWF 78 2054 0431: MOVWF 78
2055 .................... } 2055 .................... }
2056 .................... 2056 ....................
2057 .................... 2057 ....................
2058 .................... // Programovani pres RS232 2058 .................... // Programovani pres RS232
2059 .................... #define LINELEN 40 // Delka radky pro RS232 2059 .................... #define LINELEN 40 // Delka radky pro RS232
2060 .................... #define CR 0x0D // Odradkovani 2060 .................... #define CR 0x0D // Odradkovani
2061 .................... #define BS 0x08 // Back Space 2061 .................... #define BS 0x08 // Back Space
2062 .................... 2062 ....................
2063 .................... #separate 2063 .................... #separate
2064 .................... void Download() 2064 .................... void Download()
2065 .................... { 2065 .................... {
2066 .................... char line[LINELEN]; // Buffer na radku 2066 .................... char line[LINELEN]; // Buffer na radku
2067 .................... unsigned char c; // Znak 2067 .................... unsigned char c; // Znak
2068 .................... unsigned int8 a; // Ukazovatko do bufferu 2068 .................... unsigned int8 a; // Ukazovatko do bufferu
2069 .................... unsigned int8 len; // Delka retezce v radce 2069 .................... unsigned int8 len; // Delka retezce v radce
2070 .................... unsigned int8 Oct; // Cislo oktavy u noty 2070 .................... unsigned int8 Oct; // Cislo oktavy u noty
2071 .................... 2071 ....................
2072 .................... output_low(POWER_386); // Zapni napajeni zesilovace 2072 .................... output_low(POWER_386); // Zapni napajeni zesilovace
2073 * 2073 *
2074 034B: BSF 03.5 2074 034B: BSF 03.5
2075 034C: BCF 05.4 2075 034C: BCF 05.4
2076 034D: BCF 03.5 2076 034D: BCF 03.5
2077 034E: BCF 05.4 2077 034E: BCF 05.4
2078 .................... SoundNote(SOUND_Space,3,10); // Mezera 2078 .................... SoundNote(SOUND_Space,3,10); // Mezera
2079 034F: MOVLW 0C 2079 034F: MOVLW 0C
2080 0350: MOVWF 69 2080 0350: MOVWF 69
2081 0351: MOVLW 03 2081 0351: MOVLW 03
2082 0352: MOVWF 6A 2082 0352: MOVWF 6A
2083 0353: CLRF 6C 2083 0353: CLRF 6C
2084 0354: MOVLW 0A 2084 0354: MOVLW 0A
2085 0355: MOVWF 6B 2085 0355: MOVWF 6B
2086 0356: CALL 0E2 2086 0356: CALL 0E2
2087 .................... Beep=SoundPGM; 2087 .................... Beep=SoundPGM;
2088 0357: MOVLW 03 2088 0357: MOVLW 03
2089 0358: MOVWF 33 2089 0358: MOVWF 33
2090 .................... Error=0; 2090 .................... Error=0;
2091 0359: BCF 2D.1 2091 0359: BCF 2D.1
2092 .................... SpecBeep(); // Pipni na znameni vstupu do programovani 2092 .................... SpecBeep(); // Pipni na znameni vstupu do programovani
2093 035A: CALL 13B 2093 035A: CALL 13B
2094 .................... 2094 ....................
2095 .................... Tempo=100; // Default hodnoty 2095 .................... Tempo=100; // Default hodnoty
2096 035B: CLRF 2F 2096 035B: CLRF 2F
2097 035C: MOVLW 64 2097 035C: MOVLW 64
2098 035D: MOVWF 2E 2098 035D: MOVWF 2E
2099 .................... Pause=100; 2099 .................... Pause=100;
2100 035E: CLRF 31 2100 035E: CLRF 31
2101 035F: MOVWF 30 2101 035F: MOVWF 30
2102 .................... Octava=0; 2102 .................... Octava=0;
2103 0360: CLRF 32 2103 0360: CLRF 32
2104 .................... Mode=0; // Mod hrani 2104 .................... Mode=0; // Mod hrani
2105 0361: BCF 2D.0 2105 0361: BCF 2D.0
2106 .................... Oct=0; 2106 .................... Oct=0;
2107 0362: CLRF 60 2107 0362: CLRF 60
2108 .................... a=0; // Na zacatku je radka prazdna 2108 .................... a=0; // Na zacatku je radka prazdna
2109 0363: CLRF 5E 2109 0363: CLRF 5E
2110 .................... 2110 ....................
2111 .................... for(;input(POWER_PIC)==0;) // Opakuj vse dokud je PGM rezim 2111 .................... for(;input(POWER_PIC)==0;) // Opakuj vse dokud je PGM rezim
2112 0364: BSF 03.5 2112 0364: BSF 03.5
2113 0365: BSF 05.3 2113 0365: BSF 05.3
2114 0366: MOVLW 00 2114 0366: MOVLW 00
2115 0367: BCF 03.5 2115 0367: BCF 03.5
2116 0368: BTFSC 05.3 2116 0368: BTFSC 05.3
2117 0369: MOVLW 01 2117 0369: MOVLW 01
2118 036A: XORLW 00 2118 036A: XORLW 00
2119 036B: BTFSS 03.2 2119 036B: BTFSS 03.2
2120 036C: GOTO 594 2120 036C: GOTO 594
2121 .................... { 2121 .................... {
2122 .................... Loop: 2122 .................... Loop:
2123 .................... c=Getc(); // Vezmi znak ze seriovky 2123 .................... c=Getc(); // Vezmi znak ze seriovky
2124 036D: CALL 153 2124 036D: CALL 153
2125 036E: MOVF 78,W 2125 036E: MOVF 78,W
2126 036F: MOVWF 5D 2126 036F: MOVWF 5D
2127 .................... if (c>=0x80) goto Loop; // Ignoruj znaky nad ASCII 2127 .................... if (c>=0x80) goto Loop; // Ignoruj znaky nad ASCII
2128 0370: MOVF 5D,W 2128 0370: MOVF 5D,W
2129 0371: SUBLW 7F 2129 0371: SUBLW 7F
2130 0372: BTFSC 03.0 2130 0372: BTFSC 03.0
2131 0373: GOTO 375 2131 0373: GOTO 375
2132 0374: GOTO 36D 2132 0374: GOTO 36D
2133 .................... if (c>=0x60) c=c-0x20; // Preved velka pismena na velka pismena 2133 .................... if (c>=0x60) c=c-0x20; // Preved velka pismena na velka pismena
2134 0375: MOVF 5D,W 2134 0375: MOVF 5D,W
2135 0376: SUBLW 5F 2135 0376: SUBLW 5F
2136 0377: BTFSC 03.0 2136 0377: BTFSC 03.0
2137 0378: GOTO 37B 2137 0378: GOTO 37B
2138 0379: MOVLW 20 2138 0379: MOVLW 20
2139 037A: SUBWF 5D,F 2139 037A: SUBWF 5D,F
2140 .................... if ((c==CR)|(c=='/')) // Konec radky nebo komentar 2140 .................... if ((c==CR)|(c=='/')) // Konec radky nebo komentar
2141 037B: MOVF 5D,W 2141 037B: MOVF 5D,W
2142 037C: SUBLW 0D 2142 037C: SUBLW 0D
2143 037D: BTFSC 03.2 2143 037D: BTFSC 03.2
2144 037E: GOTO 381 2144 037E: GOTO 381
2145 037F: MOVLW 00 2145 037F: MOVLW 00
2146 0380: GOTO 382 2146 0380: GOTO 382
2147 0381: MOVLW 01 2147 0381: MOVLW 01
2148 0382: MOVWF 61 2148 0382: MOVWF 61
2149 0383: MOVF 5D,W 2149 0383: MOVF 5D,W
2150 0384: SUBLW 2F 2150 0384: SUBLW 2F
2151 0385: BTFSC 03.2 2151 0385: BTFSC 03.2
2152 0386: GOTO 389 2152 0386: GOTO 389
2153 0387: MOVLW 00 2153 0387: MOVLW 00
2154 0388: GOTO 38A 2154 0388: GOTO 38A
2155 0389: MOVLW 01 2155 0389: MOVLW 01
2156 038A: IORWF 61,W 2156 038A: IORWF 61,W
2157 038B: XORLW 00 2157 038B: XORLW 00
2158 038C: BTFSC 03.2 2158 038C: BTFSC 03.2
2159 038D: GOTO 560 2159 038D: GOTO 560
2160 .................... { 2160 .................... {
2161 .................... while (c!=CR) c=Getc(); // Zpracuj znaky komentare 2161 .................... while (c!=CR) c=Getc(); // Zpracuj znaky komentare
2162 038E: MOVF 5D,W 2162 038E: MOVF 5D,W
2163 038F: SUBLW 0D 2163 038F: SUBLW 0D
2164 0390: BTFSC 03.2 2164 0390: BTFSC 03.2
2165 0391: GOTO 396 2165 0391: GOTO 396
2166 0392: CALL 153 2166 0392: CALL 153
2167 0393: MOVF 78,W 2167 0393: MOVF 78,W
2168 0394: MOVWF 5D 2168 0394: MOVWF 5D
2169 0395: GOTO 38E 2169 0395: GOTO 38E
2170 .................... len=a; // Zapamatuj si delku radky 2170 .................... len=a; // Zapamatuj si delku radky
2171 0396: MOVF 5E,W 2171 0396: MOVF 5E,W
2172 0397: MOVWF 5F 2172 0397: MOVWF 5F
2173 .................... a=0; // Postav se na zacatek radky 2173 .................... a=0; // Postav se na zacatek radky
2174 0398: CLRF 5E 2174 0398: CLRF 5E
2175 .................... Beep=SoundEndOfLine; // Default zuk na konci radky 2175 .................... Beep=SoundEndOfLine; // Default zuk na konci radky
2176 0399: MOVLW 01 2176 0399: MOVLW 01
2177 039A: MOVWF 33 2177 039A: MOVWF 33
2178 .................... // Zpracovani radky 2178 .................... // Zpracovani radky
2179 .................... while(a<len) 2179 .................... while(a<len)
2180 039B: MOVF 5F,W 2180 039B: MOVF 5F,W
2181 039C: SUBWF 5E,W 2181 039C: SUBWF 5E,W
2182 039D: BTFSC 03.0 2182 039D: BTFSC 03.0
2183 039E: GOTO 55D 2183 039E: GOTO 55D
2184 .................... { 2184 .................... {
2185 .................... restart_wdt(); // Nuluj watchdog abychom se nezresetovali 2185 .................... restart_wdt(); // Nuluj watchdog abychom se nezresetovali
2186 039F: CLRWDT 2186 039F: CLRWDT
2187 .................... c=Word(line,&a,len); 2187 .................... c=Word(line,&a,len);
2188 03A0: MOVLW 35 2188 03A0: MOVLW 35
2189 03A1: MOVWF 61 2189 03A1: MOVWF 61
2190 03A2: MOVLW 5E 2190 03A2: MOVLW 5E
2191 03A3: MOVWF 62 2191 03A3: MOVWF 62
2192 03A4: MOVF 5F,W 2192 03A4: MOVF 5F,W
2193 03A5: MOVWF 63 2193 03A5: MOVWF 63
2194 * 2194 *
2195 0432: MOVF 78,W 2195 0432: MOVF 78,W
2196 0433: MOVWF 5D 2196 0433: MOVWF 5D
2197 .................... if (c==-1) // Nezname klicove slovo 2197 .................... if (c==-1) // Nezname klicove slovo
2198 0434: MOVF 5D,W 2198 0434: MOVF 5D,W
2199 0435: SUBLW FF 2199 0435: SUBLW FF
2200 0436: BTFSS 03.2 2200 0436: BTFSS 03.2
2201 0437: GOTO 46B 2201 0437: GOTO 46B
2202 .................... { 2202 .................... {
2203 .................... if (a<len) // Nejsme uz na konci radky ?? 2203 .................... if (a<len) // Nejsme uz na konci radky ??
2204 0438: MOVF 5F,W 2204 0438: MOVF 5F,W
2205 0439: SUBWF 5E,W 2205 0439: SUBWF 5E,W
2206 043A: BTFSC 03.0 2206 043A: BTFSC 03.0
2207 043B: GOTO 46A 2207 043B: GOTO 46A
2208 .................... { 2208 .................... {
2209 .................... if ((line[a]>='0')&(line[a]<='9')) // Stojime na cislici -> je to cislo 2209 .................... if ((line[a]>='0')&(line[a]<='9')) // Stojime na cislici -> je to cislo
2210 043C: MOVLW 35 2210 043C: MOVLW 35
2211 043D: ADDWF 5E,W 2211 043D: ADDWF 5E,W
2212 043E: MOVWF 04 2212 043E: MOVWF 04
2213 043F: MOVF 00,W 2213 043F: MOVF 00,W
2214 0440: SUBLW 2F 2214 0440: SUBLW 2F
2215 0441: BTFSS 03.0 2215 0441: BTFSS 03.0
2216 0442: GOTO 445 2216 0442: GOTO 445
2217 0443: MOVLW 00 2217 0443: MOVLW 00
2218 0444: GOTO 446 2218 0444: GOTO 446
2219 0445: MOVLW 01 2219 0445: MOVLW 01
2220 0446: MOVWF 62 2220 0446: MOVWF 62
2221 0447: MOVLW 35 2221 0447: MOVLW 35
2222 0448: ADDWF 5E,W 2222 0448: ADDWF 5E,W
2223 0449: MOVWF 04 2223 0449: MOVWF 04
2224 044A: MOVF 00,W 2224 044A: MOVF 00,W
2225 044B: SUBLW 39 2225 044B: SUBLW 39
2226 044C: BTFSC 03.0 2226 044C: BTFSC 03.0
2227 044D: GOTO 450 2227 044D: GOTO 450
2228 044E: MOVLW 00 2228 044E: MOVLW 00
2229 044F: GOTO 451 2229 044F: GOTO 451
2230 0450: MOVLW 01 2230 0450: MOVLW 01
2231 0451: ANDWF 62,W 2231 0451: ANDWF 62,W
2232 0452: XORLW 00 2232 0452: XORLW 00
2233 0453: BTFSC 03.2 2233 0453: BTFSC 03.2
2234 0454: GOTO 461 2234 0454: GOTO 461
2235 .................... { 2235 .................... {
2236 .................... // Oct=Number(line,&a,len)&0x7; // tohle nefunguje protoze je chyba v prekladaci 2236 .................... // Oct=Number(line,&a,len)&0x7; // tohle nefunguje protoze je chyba v prekladaci
2237 .................... Oct=Number(line,&a,len); // prekladac prepoklada, z W obsahuje spodni bajt vysledku 2237 .................... Oct=Number(line,&a,len); // prekladac prepoklada, z W obsahuje spodni bajt vysledku
2238 0455: MOVLW 35 2238 0455: MOVLW 35
2239 0456: MOVWF 61 2239 0456: MOVWF 61
2240 0457: MOVLW 5E 2240 0457: MOVLW 5E
2241 0458: MOVWF 62 2241 0458: MOVWF 62
2242 0459: MOVF 5F,W 2242 0459: MOVF 5F,W
2243 045A: MOVWF 63 2243 045A: MOVWF 63
2244 045B: CALL 190 2244 045B: CALL 190
2245 045C: MOVF 78,W 2245 045C: MOVF 78,W
2246 045D: MOVWF 60 2246 045D: MOVWF 60
2247 .................... Oct&=0x7; // ale k navratu pouziva RETLW 0 coz smaze W ! 2247 .................... Oct&=0x7; // ale k navratu pouziva RETLW 0 coz smaze W !
2248 045E: MOVLW 07 2248 045E: MOVLW 07
2249 045F: ANDWF 60,F 2249 045F: ANDWF 60,F
2250 .................... } 2250 .................... }
2251 .................... else // Stojime na pismenu nebo oddelovaci 2251 .................... else // Stojime na pismenu nebo oddelovaci
2252 0460: GOTO 46A 2252 0460: GOTO 46A
2253 .................... { 2253 .................... {
2254 .................... if (line[a]!=' ') Error=1; // Neni to oddelovac - chyba 2254 .................... if (line[a]!=' ') Error=1; // Neni to oddelovac - chyba
2255 0461: MOVLW 35 2255 0461: MOVLW 35
2256 0462: ADDWF 5E,W 2256 0462: ADDWF 5E,W
2257 0463: MOVWF 04 2257 0463: MOVWF 04
2258 0464: MOVF 00,W 2258 0464: MOVF 00,W
2259 0465: SUBLW 20 2259 0465: SUBLW 20
2260 0466: BTFSC 03.2 2260 0466: BTFSC 03.2
2261 0467: GOTO 469 2261 0467: GOTO 469
2262 0468: BSF 2D.1 2262 0468: BSF 2D.1
2263 .................... a++; // Preskocim 1 znak (a kdyz to nepomuze dostanu se zase sem) 2263 .................... a++; // Preskocim 1 znak (a kdyz to nepomuze dostanu se zase sem)
2264 0469: INCF 5E,F 2264 0469: INCF 5E,F
2265 .................... } 2265 .................... }
2266 .................... } 2266 .................... }
2267 .................... } 2267 .................... }
2268 .................... else if (c=='P') // Play 2268 .................... else if (c=='P') // Play
2269 046A: GOTO 55C 2269 046A: GOTO 55C
2270 046B: MOVF 5D,W 2270 046B: MOVF 5D,W
2271 046C: SUBLW 50 2271 046C: SUBLW 50
2272 046D: BTFSS 03.2 2272 046D: BTFSS 03.2
2273 046E: GOTO 47D 2273 046E: GOTO 47D
2274 .................... { 2274 .................... {
2275 .................... CisloSkladby=Number(line,&a,len); 2275 .................... CisloSkladby=Number(line,&a,len);
2276 046F: MOVLW 35 2276 046F: MOVLW 35
2277 0470: MOVWF 61 2277 0470: MOVWF 61
2278 0471: MOVLW 5E 2278 0471: MOVLW 5E
2279 0472: MOVWF 62 2279 0472: MOVWF 62
2280 0473: MOVF 5F,W 2280 0473: MOVF 5F,W
2281 0474: MOVWF 63 2281 0474: MOVWF 63
2282 0475: CALL 190 2282 0475: CALL 190
2283 0476: MOVF 78,W 2283 0476: MOVF 78,W
2284 0477: MOVWF 34 2284 0477: MOVWF 34
2285 .................... Mode=0; 2285 .................... Mode=0;
2286 0478: BCF 2D.0 2286 0478: BCF 2D.0
2287 .................... Play(); 2287 .................... Play();
2288 0479: CALL 27D 2288 0479: CALL 27D
2289 .................... Beep=SoundPGM; 2289 .................... Beep=SoundPGM;
2290 047A: MOVLW 03 2290 047A: MOVLW 03
2291 047B: MOVWF 33 2291 047B: MOVWF 33
2292 .................... } 2292 .................... }
2293 .................... else if (c=='E') // Erase 2293 .................... else if (c=='E') // Erase
2294 047C: GOTO 55C 2294 047C: GOTO 55C
2295 047D: MOVF 5D,W 2295 047D: MOVF 5D,W
2296 047E: SUBLW 45 2296 047E: SUBLW 45
2297 047F: BTFSS 03.2 2297 047F: BTFSS 03.2
2298 0480: GOTO 4BB 2298 0480: GOTO 4BB
2299 .................... { 2299 .................... {
2300 .................... Mode=0; 2300 .................... Mode=0;
2301 0481: BCF 2D.0 2301 0481: BCF 2D.0
2302 .................... Erase(); 2302 .................... Erase();
2303 .................... Beep=SoundPGM; 2303 .................... Beep=SoundPGM;
2304 * 2304 *
2305 04B8: MOVLW 03 2305 04B8: MOVLW 03
2306 04B9: MOVWF 33 2306 04B9: MOVWF 33
2307 .................... } 2307 .................... }
2308 .................... else if (c=='t') // Tempo 2308 .................... else if (c=='t') // Tempo
2309 04BA: GOTO 55C 2309 04BA: GOTO 55C
2310 04BB: MOVF 5D,W 2310 04BB: MOVF 5D,W
2311 04BC: SUBLW 74 2311 04BC: SUBLW 74
2312 04BD: BTFSS 03.2 2312 04BD: BTFSS 03.2
2313 04BE: GOTO 4DB 2313 04BE: GOTO 4DB
2314 .................... { 2314 .................... {
2315 .................... Tempo=Number(line,&a,len)&~MASKTEMPO; 2315 .................... Tempo=Number(line,&a,len)&~MASKTEMPO;
2316 04BF: MOVLW 35 2316 04BF: MOVLW 35
2317 04C0: MOVWF 61 2317 04C0: MOVWF 61
2318 04C1: MOVLW 5E 2318 04C1: MOVLW 5E
2319 04C2: MOVWF 62 2319 04C2: MOVWF 62
2320 04C3: MOVF 5F,W 2320 04C3: MOVF 5F,W
2321 04C4: MOVWF 63 2321 04C4: MOVWF 63
2322 04C5: CALL 190 2322 04C5: CALL 190
2323 04C6: MOVF 78,W 2323 04C6: MOVF 78,W
2324 04C7: MOVWF 2E 2324 04C7: MOVWF 2E
2325 04C8: MOVF 79,W 2325 04C8: MOVF 79,W
2326 04C9: ANDLW C7 2326 04C9: ANDLW C7
2327 04CA: MOVWF 2F 2327 04CA: MOVWF 2F
2328 .................... if (Tempo==0) Tempo=100; 2328 .................... if (Tempo==0) Tempo=100;
2329 04CB: MOVF 2E,F 2329 04CB: MOVF 2E,F
2330 04CC: BTFSS 03.2 2330 04CC: BTFSS 03.2
2331 04CD: GOTO 4D4 2331 04CD: GOTO 4D4
2332 04CE: MOVF 2F,F 2332 04CE: MOVF 2F,F
2333 04CF: BTFSS 03.2 2333 04CF: BTFSS 03.2
2334 04D0: GOTO 4D4 2334 04D0: GOTO 4D4
2335 04D1: CLRF 2F 2335 04D1: CLRF 2F
2336 04D2: MOVLW 64 2336 04D2: MOVLW 64
2337 04D3: MOVWF 2E 2337 04D3: MOVWF 2E
2338 .................... Data=Tempo|DATATEMPO; 2338 .................... Data=Tempo|DATATEMPO;
2339 04D4: MOVF 2E,W 2339 04D4: MOVF 2E,W
2340 04D5: MOVWF 2B 2340 04D5: MOVWF 2B
2341 04D6: MOVF 2F,W 2341 04D6: MOVF 2F,W
2342 04D7: IORLW 28 2342 04D7: IORLW 28
2343 04D8: MOVWF 2C 2343 04D8: MOVWF 2C
2344 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu 2344 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu
2345 04D9: CALL 2E0 2345 04D9: CALL 2E0
2346 .................... } 2346 .................... }
2347 .................... else if (c=='p') // Pause 2347 .................... else if (c=='p') // Pause
2348 04DA: GOTO 55C 2348 04DA: GOTO 55C
2349 04DB: MOVF 5D,W 2349 04DB: MOVF 5D,W
2350 04DC: SUBLW 70 2350 04DC: SUBLW 70
2351 04DD: BTFSS 03.2 2351 04DD: BTFSS 03.2
2352 04DE: GOTO 4FB 2352 04DE: GOTO 4FB
2353 .................... { 2353 .................... {
2354 .................... Pause=Number(line,&a,len)&~MASKPAUSE; 2354 .................... Pause=Number(line,&a,len)&~MASKPAUSE;
2355 04DF: MOVLW 35 2355 04DF: MOVLW 35
2356 04E0: MOVWF 61 2356 04E0: MOVWF 61
2357 04E1: MOVLW 5E 2357 04E1: MOVLW 5E
2358 04E2: MOVWF 62 2358 04E2: MOVWF 62
2359 04E3: MOVF 5F,W 2359 04E3: MOVF 5F,W
2360 04E4: MOVWF 63 2360 04E4: MOVWF 63
2361 04E5: CALL 190 2361 04E5: CALL 190
2362 04E6: MOVF 78,W 2362 04E6: MOVF 78,W
2363 04E7: MOVWF 30 2363 04E7: MOVWF 30
2364 04E8: MOVF 79,W 2364 04E8: MOVF 79,W
2365 04E9: ANDLW C7 2365 04E9: ANDLW C7
2366 04EA: MOVWF 31 2366 04EA: MOVWF 31
2367 .................... if (Pause==0) Pause=100; 2367 .................... if (Pause==0) Pause=100;
2368 04EB: MOVF 30,F 2368 04EB: MOVF 30,F
2369 04EC: BTFSS 03.2 2369 04EC: BTFSS 03.2
2370 04ED: GOTO 4F4 2370 04ED: GOTO 4F4
2371 04EE: MOVF 31,F 2371 04EE: MOVF 31,F
2372 04EF: BTFSS 03.2 2372 04EF: BTFSS 03.2
2373 04F0: GOTO 4F4 2373 04F0: GOTO 4F4
2374 04F1: CLRF 31 2374 04F1: CLRF 31
2375 04F2: MOVLW 64 2375 04F2: MOVLW 64
2376 04F3: MOVWF 30 2376 04F3: MOVWF 30
2377 .................... Data=Pause|DATAPAUSE; 2377 .................... Data=Pause|DATAPAUSE;
2378 04F4: MOVF 30,W 2378 04F4: MOVF 30,W
2379 04F5: MOVWF 2B 2379 04F5: MOVWF 2B
2380 04F6: MOVF 31,W 2380 04F6: MOVF 31,W
2381 04F7: IORLW 30 2381 04F7: IORLW 30
2382 04F8: MOVWF 2C 2382 04F8: MOVWF 2C
2383 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu 2383 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu
2384 04F9: CALL 2E0 2384 04F9: CALL 2E0
2385 .................... } 2385 .................... }
2386 .................... else if (c=='B') // Begin 2386 .................... else if (c=='B') // Begin
2387 04FA: GOTO 55C 2387 04FA: GOTO 55C
2388 04FB: MOVF 5D,W 2388 04FB: MOVF 5D,W
2389 04FC: SUBLW 42 2389 04FC: SUBLW 42
2390 04FD: BTFSS 03.2 2390 04FD: BTFSS 03.2
2391 04FE: GOTO 512 2391 04FE: GOTO 512
2392 .................... { 2392 .................... {
2393 .................... CisloSkladby=~0; // Neplatne cislo skladby 2393 .................... CisloSkladby=~0; // Neplatne cislo skladby
2394 04FF: MOVLW FF 2394 04FF: MOVLW FF
2395 0500: MOVWF 34 2395 0500: MOVWF 34
2396 .................... Find(); // najde konec posledni skladby 2396 .................... Find(); // najde konec posledni skladby
2397 0501: CALL 208 2397 0501: CALL 208
2398 .................... Octava=Number(line,&a,len)&~MASKBEGIN; 2398 .................... Octava=Number(line,&a,len)&~MASKBEGIN;
2399 0502: MOVLW 35 2399 0502: MOVLW 35
2400 0503: MOVWF 61 2400 0503: MOVWF 61
2401 0504: MOVLW 5E 2401 0504: MOVLW 5E
2402 0505: MOVWF 62 2402 0505: MOVWF 62
2403 0506: MOVF 5F,W 2403 0506: MOVF 5F,W
2404 0507: MOVWF 63 2404 0507: MOVWF 63
2405 0508: CALL 190 2405 0508: CALL 190
2406 0509: MOVF 78,W 2406 0509: MOVF 78,W
2407 050A: MOVWF 32 2407 050A: MOVWF 32
2408 .................... Data=DATABEGIN|Octava; // Zacatecni znacka 2408 .................... Data=DATABEGIN|Octava; // Zacatecni znacka
2409 050B: MOVF 32,W 2409 050B: MOVF 32,W
2410 050C: MOVWF 2B 2410 050C: MOVWF 2B
2411 050D: MOVLW 20 2411 050D: MOVLW 20
2412 050E: MOVWF 2C 2412 050E: MOVWF 2C
2413 .................... Mode=1; // Mod zapisu do FLASH pameti 2413 .................... Mode=1; // Mod zapisu do FLASH pameti
2414 050F: BSF 2D.0 2414 050F: BSF 2D.0
2415 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu 2415 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu
2416 0510: CALL 2E0 2416 0510: CALL 2E0
2417 .................... } 2417 .................... }
2418 .................... else if (c=='b') // Test 2418 .................... else if (c=='b') // Test
2419 0511: GOTO 55C 2419 0511: GOTO 55C
2420 0512: MOVF 5D,W 2420 0512: MOVF 5D,W
2421 0513: SUBLW 62 2421 0513: SUBLW 62
2422 0514: BTFSS 03.2 2422 0514: BTFSS 03.2
2423 0515: GOTO 521 2423 0515: GOTO 521
2424 .................... { 2424 .................... {
2425 .................... Octava=Number(line,&a,len)&~MASKBEGIN; 2425 .................... Octava=Number(line,&a,len)&~MASKBEGIN;
2426 0516: MOVLW 35 2426 0516: MOVLW 35
2427 0517: MOVWF 61 2427 0517: MOVWF 61
2428 0518: MOVLW 5E 2428 0518: MOVLW 5E
2429 0519: MOVWF 62 2429 0519: MOVWF 62
2430 051A: MOVF 5F,W 2430 051A: MOVF 5F,W
2431 051B: MOVWF 63 2431 051B: MOVWF 63
2432 051C: CALL 190 2432 051C: CALL 190
2433 051D: MOVF 78,W 2433 051D: MOVF 78,W
2434 051E: MOVWF 32 2434 051E: MOVWF 32
2435 .................... Mode=0; 2435 .................... Mode=0;
2436 051F: BCF 2D.0 2436 051F: BCF 2D.0
2437 .................... } 2437 .................... }
2438 .................... else if (c=='Z') // End 2438 .................... else if (c=='Z') // End
2439 0520: GOTO 55C 2439 0520: GOTO 55C
2440 0521: MOVF 5D,W 2440 0521: MOVF 5D,W
2441 0522: SUBLW 5A 2441 0522: SUBLW 5A
2442 0523: BTFSS 03.2 2442 0523: BTFSS 03.2
2443 0524: GOTO 527 2443 0524: GOTO 527
2444 .................... { 2444 .................... {
2445 .................... Mode=0; 2445 .................... Mode=0;
2446 0525: BCF 2D.0 2446 0525: BCF 2D.0
2447 .................... } 2447 .................... }
2448 .................... else // Nota 2448 .................... else // Nota
2449 0526: GOTO 55C 2449 0526: GOTO 55C
2450 .................... { 2450 .................... {
2451 .................... Data=Number(line,&a,len); // Delka noty (nepovinna) 2451 .................... Data=Number(line,&a,len); // Delka noty (nepovinna)
2452 0527: MOVLW 35 2452 0527: MOVLW 35
2453 0528: MOVWF 61 2453 0528: MOVWF 61
2454 0529: MOVLW 5E 2454 0529: MOVLW 5E
2455 052A: MOVWF 62 2455 052A: MOVWF 62
2456 052B: MOVF 5F,W 2456 052B: MOVF 5F,W
2457 052C: MOVWF 63 2457 052C: MOVWF 63
2458 052D: CALL 190 2458 052D: CALL 190
2459 052E: MOVF 79,W 2459 052E: MOVF 79,W
2460 052F: MOVWF 2C 2460 052F: MOVWF 2C
2461 0530: MOVF 78,W 2461 0530: MOVF 78,W
2462 0531: MOVWF 2B 2462 0531: MOVWF 2B
2463 .................... Data&=0x3F; // Jen platny rozsah 2463 .................... Data&=0x3F; // Jen platny rozsah
2464 0532: MOVLW 3F 2464 0532: MOVLW 3F
2465 0533: ANDWF 2B,F 2465 0533: ANDWF 2B,F
2466 0534: MOVLW 00 2466 0534: MOVLW 00
2467 0535: ANDWF 2C,F 2467 0535: ANDWF 2C,F
2468 .................... if (Data==0) Data++; // Je-li nulova delka - dej jednotkovou 2468 .................... if (Data==0) Data++; // Je-li nulova delka - dej jednotkovou
2469 0536: MOVF 2B,F 2469 0536: MOVF 2B,F
2470 0537: BTFSS 03.2 2470 0537: BTFSS 03.2
2471 0538: GOTO 53F 2471 0538: GOTO 53F
2472 0539: MOVF 2C,F 2472 0539: MOVF 2C,F
2473 053A: BTFSS 03.2 2473 053A: BTFSS 03.2
2474 053B: GOTO 53F 2474 053B: GOTO 53F
2475 053C: INCF 2B,F 2475 053C: INCF 2B,F
2476 053D: BTFSC 03.2 2476 053D: BTFSC 03.2
2477 053E: INCF 2C,F 2477 053E: INCF 2C,F
2478 .................... Data<<=7; // Delka 2478 .................... Data<<=7; // Delka
2479 053F: RLF 2B,F 2479 053F: RLF 2B,F
2480 0540: RLF 2C,F 2480 0540: RLF 2C,F
2481 0541: RLF 2B,F 2481 0541: RLF 2B,F
2482 0542: RLF 2C,F 2482 0542: RLF 2C,F
2483 0543: RLF 2B,F 2483 0543: RLF 2B,F
2484 0544: RLF 2C,F 2484 0544: RLF 2C,F
2485 0545: RLF 2B,F 2485 0545: RLF 2B,F
2486 0546: RLF 2C,F 2486 0546: RLF 2C,F
2487 0547: RLF 2B,F 2487 0547: RLF 2B,F
2488 0548: RLF 2C,F 2488 0548: RLF 2C,F
2489 0549: RLF 2B,F 2489 0549: RLF 2B,F
2490 054A: RLF 2C,F 2490 054A: RLF 2C,F
2491 054B: RLF 2B,F 2491 054B: RLF 2B,F
2492 054C: RLF 2C,F 2492 054C: RLF 2C,F
2493 054D: MOVLW 80 2493 054D: MOVLW 80
2494 054E: ANDWF 2B,F 2494 054E: ANDWF 2B,F
2495 .................... Data|=c; // Nota 2495 .................... Data|=c; // Nota
2496 054F: MOVF 5D,W 2496 054F: MOVF 5D,W
2497 0550: IORWF 2B,F 2497 0550: IORWF 2B,F
2498 .................... Data|=(Oct<<4); // Oktava 2498 .................... Data|=(Oct<<4); // Oktava
2499 0551: SWAPF 60,W 2499 0551: SWAPF 60,W
2500 0552: MOVWF 77 2500 0552: MOVWF 77
2501 0553: MOVLW F0 2501 0553: MOVLW F0
2502 0554: ANDWF 77,F 2502 0554: ANDWF 77,F
2503 0555: MOVF 77,W 2503 0555: MOVF 77,W
2504 0556: IORWF 2B,F 2504 0556: IORWF 2B,F
2505 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu 2505 .................... WriteDataInc(); // Podmineny zapis do FLASH a posun na dalsi adresu
2506 0557: CALL 2E0 2506 0557: CALL 2E0
2507 .................... if (~Mode) 2507 .................... if (~Mode)
2508 0558: BTFSC 2D.0 2508 0558: BTFSC 2D.0
2509 0559: GOTO 55C 2509 0559: GOTO 55C
2510 .................... { 2510 .................... {
2511 .................... PlayData(); // Zahraj notu 2511 .................... PlayData(); // Zahraj notu
2512 055A: CALL 237 2512 055A: CALL 237
2513 .................... Beep=0; // Po zahrani noty uz nepipej na konci radky 2513 .................... Beep=0; // Po zahrani noty uz nepipej na konci radky
2514 055B: CLRF 33 2514 055B: CLRF 33
2515 .................... } 2515 .................... }
2516 .................... } 2516 .................... }
2517 .................... } 2517 .................... }
2518 055C: GOTO 39B 2518 055C: GOTO 39B
2519 .................... a=0; // Radka zpracovana, nuluj jeji delku 2519 .................... a=0; // Radka zpracovana, nuluj jeji delku
2520 055D: CLRF 5E 2520 055D: CLRF 5E
2521 .................... SpecBeep(); // Pipni 2521 .................... SpecBeep(); // Pipni
2522 055E: CALL 13B 2522 055E: CALL 13B
2523 .................... goto Loop; 2523 .................... goto Loop;
2524 055F: GOTO 36D 2524 055F: GOTO 36D
2525 .................... } 2525 .................... }
2526 .................... if ((c==BS)&(a>0)) {a--;goto Loop;} // Smaz znak 2526 .................... if ((c==BS)&(a>0)) {a--;goto Loop;} // Smaz znak
2527 0560: MOVF 5D,W 2527 0560: MOVF 5D,W
2528 0561: SUBLW 08 2528 0561: SUBLW 08
2529 0562: BTFSC 03.2 2529 0562: BTFSC 03.2
2530 0563: GOTO 566 2530 0563: GOTO 566
2531 0564: MOVLW 00 2531 0564: MOVLW 00
2532 0565: GOTO 567 2532 0565: GOTO 567
2533 0566: MOVLW 01 2533 0566: MOVLW 01
2534 0567: MOVWF 61 2534 0567: MOVWF 61
2535 0568: MOVF 5E,F 2535 0568: MOVF 5E,F
2536 0569: BTFSS 03.2 2536 0569: BTFSS 03.2
2537 056A: GOTO 56D 2537 056A: GOTO 56D
2538 056B: MOVLW 00 2538 056B: MOVLW 00
2539 056C: GOTO 56E 2539 056C: GOTO 56E
2540 056D: MOVLW 01 2540 056D: MOVLW 01
2541 056E: ANDWF 61,W 2541 056E: ANDWF 61,W
2542 056F: XORLW 00 2542 056F: XORLW 00
2543 0570: BTFSC 03.2 2543 0570: BTFSC 03.2
2544 0571: GOTO 574 2544 0571: GOTO 574
2545 0572: DECF 5E,F 2545 0572: DECF 5E,F
2546 0573: GOTO 36D 2546 0573: GOTO 36D
2547 .................... if ((c==',')|(c<=' ')) c=' '; // Vsechny ostatni ridici znaky i carka jsou oddelovac 2547 .................... if ((c==',')|(c<=' ')) c=' '; // Vsechny ostatni ridici znaky i carka jsou oddelovac
2548 0574: MOVF 5D,W 2548 0574: MOVF 5D,W
2549 0575: SUBLW 2C 2549 0575: SUBLW 2C
2550 0576: BTFSC 03.2 2550 0576: BTFSC 03.2
2551 0577: GOTO 57A 2551 0577: GOTO 57A
2552 0578: MOVLW 00 2552 0578: MOVLW 00
2553 0579: GOTO 57B 2553 0579: GOTO 57B
2554 057A: MOVLW 01 2554 057A: MOVLW 01
2555 057B: MOVWF 61 2555 057B: MOVWF 61
2556 057C: MOVF 5D,W 2556 057C: MOVF 5D,W
2557 057D: SUBLW 20 2557 057D: SUBLW 20
2558 057E: BTFSC 03.0 2558 057E: BTFSC 03.0
2559 057F: GOTO 582 2559 057F: GOTO 582
2560 0580: MOVLW 00 2560 0580: MOVLW 00
2561 0581: GOTO 583 2561 0581: GOTO 583
2562 0582: MOVLW 01 2562 0582: MOVLW 01
2563 0583: IORWF 61,W 2563 0583: IORWF 61,W
2564 0584: XORLW 00 2564 0584: XORLW 00
2565 0585: BTFSC 03.2 2565 0585: BTFSC 03.2
2566 0586: GOTO 589 2566 0586: GOTO 589
2567 0587: MOVLW 20 2567 0587: MOVLW 20
2568 0588: MOVWF 5D 2568 0588: MOVWF 5D
2569 .................... if (a<LINELEN) line[a++]=c; // Zapis znak do bufferu a posun ukazovatko 2569 .................... if (a<LINELEN) line[a++]=c; // Zapis znak do bufferu a posun ukazovatko
2570 0589: MOVF 5E,W 2570 0589: MOVF 5E,W
2571 058A: SUBLW 27 2571 058A: SUBLW 27
2572 058B: BTFSS 03.0 2572 058B: BTFSS 03.0
2573 058C: GOTO 593 2573 058C: GOTO 593
2574 058D: MOVF 5E,W 2574 058D: MOVF 5E,W
2575 058E: INCF 5E,F 2575 058E: INCF 5E,F
2576 058F: ADDLW 35 2576 058F: ADDLW 35
2577 0590: MOVWF 04 2577 0590: MOVWF 04
2578 0591: MOVF 5D,W 2578 0591: MOVF 5D,W
2579 0592: MOVWF 00 2579 0592: MOVWF 00
2580 .................... } 2580 .................... }
2581 0593: GOTO 364 2581 0593: GOTO 364
2582 0594: GOTO 5CB (RETURN) 2582 0594: GOTO 5CB (RETURN)
2583 .................... } 2583 .................... }
2584 .................... 2584 ....................
2585 .................... 2585 ....................
2586 .................... // Tabulka pro prekodovani tlacitek 2586 .................... // Tabulka pro prekodovani tlacitek
2587 .................... const int8 KeyTranslate[16] = {0, 1, 2, 5, 3, 6, 8, 11, 4, 7, 9, 12, 10, 13, 14, 15}; 2587 .................... const int8 KeyTranslate[16] = {0, 1, 2, 5, 3, 6, 8, 11, 4, 7, 9, 12, 10, 13, 14, 15};
2588 * 2588 *
2589 00B7: BCF 0A.0 2589 00B7: BCF 0A.0
2590 00B8: BCF 0A.1 2590 00B8: BCF 0A.1
2591 00B9: BCF 0A.2 2591 00B9: BCF 0A.2
2592 00BA: ADDWF 02,F 2592 00BA: ADDWF 02,F
2593 00BB: RETLW 00 2593 00BB: RETLW 00
2594 00BC: RETLW 01 2594 00BC: RETLW 01
2595 00BD: RETLW 02 2595 00BD: RETLW 02
2596 00BE: RETLW 05 2596 00BE: RETLW 05
2597 00BF: RETLW 03 2597 00BF: RETLW 03
2598 00C0: RETLW 06 2598 00C0: RETLW 06
2599 00C1: RETLW 08 2599 00C1: RETLW 08
2600 00C2: RETLW 0B 2600 00C2: RETLW 0B
2601 00C3: RETLW 04 2601 00C3: RETLW 04
2602 00C4: RETLW 07 2602 00C4: RETLW 07
2603 00C5: RETLW 09 2603 00C5: RETLW 09
2604 00C6: RETLW 0C 2604 00C6: RETLW 0C
2605 00C7: RETLW 0A 2605 00C7: RETLW 0A
2606 00C8: RETLW 0D 2606 00C8: RETLW 0D
2607 00C9: RETLW 0E 2607 00C9: RETLW 0E
2608 00CA: RETLW 0F 2608 00CA: RETLW 0F
2609 .................... 2609 ....................
2610 .................... void main() 2610 .................... void main()
2611 .................... { 2611 .................... {
2612 * 2612 *
2613 0595: CLRF 04 2613 0595: CLRF 04
2614 0596: MOVLW 1F 2614 0596: MOVLW 1F
2615 0597: ANDWF 03,F 2615 0597: ANDWF 03,F
2616 0598: MOVLW 07 2616 0598: MOVLW 07
2617 0599: BSF 03.5 2617 0599: BSF 03.5
2618 059A: MOVWF 1F 2618 059A: MOVWF 1F
2619 059B: BCF 05.0 2619 059B: BCF 05.0
2620 059C: BCF 03.5 2620 059C: BCF 03.5
2621 059D: BCF 05.0 2621 059D: BCF 05.0
2622 .................... Start: 2622 .................... Start:
2623 .................... 2623 ....................
2624 .................... if (restart_cause()==WDT_FROM_SLEEP) // Osetreni probuzeni od WDT 2624 .................... if (restart_cause()==WDT_FROM_SLEEP) // Osetreni probuzeni od WDT
2625 059E: MOVF 03,W 2625 059E: MOVF 03,W
2626 059F: ANDLW 18 2626 059F: ANDLW 18
2627 05A0: XORLW 00 2627 05A0: XORLW 00
2628 05A1: BTFSS 03.2 2628 05A1: BTFSS 03.2
2629 05A2: GOTO 5A4 2629 05A2: GOTO 5A4
2630 .................... { 2630 .................... {
2631 .................... sleep(); 2631 .................... sleep();
2632 05A3: SLEEP 2632 05A3: SLEEP
2633 .................... } 2633 .................... }
2634 .................... // Inicializace WDT 2634 .................... // Inicializace WDT
2635 .................... // setup_wdt(WDT_16MS); // nelze pouzit, zabira 15 instukci 2635 .................... // setup_wdt(WDT_16MS); // nelze pouzit, zabira 15 instukci
2636 .................... #asm 2636 .................... #asm
2637 .................... bsf 0x03,5 // banka 1 nebo 3 aby se mohlo k OPTION registu 2637 .................... bsf 0x03,5 // banka 1 nebo 3 aby se mohlo k OPTION registu
2638 05A4: BSF 03.5 2638 05A4: BSF 03.5
2639 .................... bcf 0x81,3 // WDT primo tedy 16ms 2639 .................... bcf 0x81,3 // WDT primo tedy 16ms
2640 .................... #endasm 2640 .................... #endasm
2641 05A5: BSF 03.5 2641 05A5: BSF 03.5
2642 05A6: BCF 01.3 2642 05A6: BCF 01.3
2643 .................... 2643 ....................
2644 .................... // Inicializace 2644 .................... // Inicializace
2645 .................... port_b_pullups(TRUE); // Zapni pull-up odpory na portu B 2645 .................... port_b_pullups(TRUE); // Zapni pull-up odpory na portu B
2646 05A7: BCF 01.7 2646 05A7: BCF 01.7
2647 .................... set_tris_a(0b00001000); // Nastav nepouzite vyvody jako vystupy 2647 .................... set_tris_a(0b00001000); // Nastav nepouzite vyvody jako vystupy
2648 05A8: MOVLW 08 2648 05A8: MOVLW 08
2649 05A9: MOVWF 05 2649 05A9: MOVWF 05
2650 .................... set_tris_b(0b11110000); // 1 znamena vstup 2650 .................... set_tris_b(0b11110000); // 1 znamena vstup
2651 05AA: MOVLW F0 2651 05AA: MOVLW F0
2652 05AB: MOVWF 06 2652 05AB: MOVWF 06
2653 .................... *0x9F = 6; // Vsechny vstupy jsou digitalni 2653 .................... *0x9F = 6; // Vsechny vstupy jsou digitalni
2654 05AC: MOVLW 06 2654 05AC: MOVLW 06
2655 05AD: MOVWF 1F 2655 05AD: MOVWF 1F
2656 .................... 2656 ....................
2657 .................... // Test na rezim programovani 2657 .................... // Test na rezim programovani
2658 .................... if ((input(POWER_PIC)==0)&(input(RXD)==0)) // Podminka programovani 2658 .................... if ((input(POWER_PIC)==0)&(input(RXD)==0)) // Podminka programovani
2659 05AE: BSF 05.3 2659 05AE: BSF 05.3
2660 05AF: MOVLW 00 2660 05AF: MOVLW 00
2661 05B0: BCF 03.5 2661 05B0: BCF 03.5
2662 05B1: BTFSC 05.3 2662 05B1: BTFSC 05.3
2663 05B2: MOVLW 01 2663 05B2: MOVLW 01
2664 05B3: XORLW 00 2664 05B3: XORLW 00
2665 05B4: BTFSC 03.2 2665 05B4: BTFSC 03.2
2666 05B5: GOTO 5B8 2666 05B5: GOTO 5B8
2667 05B6: MOVLW 00 2667 05B6: MOVLW 00
2668 05B7: GOTO 5B9 2668 05B7: GOTO 5B9
2669 05B8: MOVLW 01 2669 05B8: MOVLW 01
2670 05B9: MOVWF 36 2670 05B9: MOVWF 36
2671 05BA: BSF 03.5 2671 05BA: BSF 03.5
2672 05BB: BSF 06.1 2672 05BB: BSF 06.1
2673 05BC: MOVLW 00 2673 05BC: MOVLW 00
2674 05BD: BCF 03.5 2674 05BD: BCF 03.5
2675 05BE: BTFSC 06.1 2675 05BE: BTFSC 06.1
2676 05BF: MOVLW 01 2676 05BF: MOVLW 01
2677 05C0: XORLW 00 2677 05C0: XORLW 00
2678 05C1: BTFSC 03.2 2678 05C1: BTFSC 03.2
2679 05C2: GOTO 5C5 2679 05C2: GOTO 5C5
2680 05C3: MOVLW 00 2680 05C3: MOVLW 00
2681 05C4: GOTO 5C6 2681 05C4: GOTO 5C6
2682 05C5: MOVLW 01 2682 05C5: MOVLW 01
2683 05C6: ANDWF 36,W 2683 05C6: ANDWF 36,W
2684 05C7: XORLW 00 2684 05C7: XORLW 00
2685 05C8: BTFSC 03.2 2685 05C8: BTFSC 03.2
2686 05C9: GOTO 5CB 2686 05C9: GOTO 5CB
2687 .................... Download(); // Pripojen RS232 a propojka na PGM 2687 .................... Download(); // Pripojen RS232 a propojka na PGM
2688 05CA: GOTO 34B 2688 05CA: GOTO 34B
2689 .................... 2689 ....................
2690 .................... // Zapnuti napajeni 2690 .................... // Zapnuti napajeni
2691 .................... output_low(POWER_PIC); // Pripoj GND pro procesor 2691 .................... output_low(POWER_PIC); // Pripoj GND pro procesor
2692 05CB: BSF 03.5 2692 05CB: BSF 03.5
2693 05CC: BCF 05.3 2693 05CC: BCF 05.3
2694 05CD: BCF 03.5 2694 05CD: BCF 03.5
2695 05CE: BCF 05.3 2695 05CE: BCF 05.3
2696 .................... SoundNote(SOUND_Space,3,10); // Mezera 2696 .................... SoundNote(SOUND_Space,3,10); // Mezera
2697 05CF: MOVLW 0C 2697 05CF: MOVLW 0C
2698 05D0: MOVWF 69 2698 05D0: MOVWF 69
2699 05D1: MOVLW 03 2699 05D1: MOVLW 03
2700 05D2: MOVWF 6A 2700 05D2: MOVWF 6A
2701 05D3: CLRF 6C 2701 05D3: CLRF 6C
2702 05D4: MOVLW 0A 2702 05D4: MOVLW 0A
2703 05D5: MOVWF 6B 2703 05D5: MOVWF 6B
2704 05D6: CALL 0E2 2704 05D6: CALL 0E2
2705 .................... output_low(POWER_386); // Zapni napajeni zesilovace 2705 .................... output_low(POWER_386); // Zapni napajeni zesilovace
2706 05D7: BSF 03.5 2706 05D7: BSF 03.5
2707 05D8: BCF 05.4 2707 05D8: BCF 05.4
2708 05D9: BCF 03.5 2708 05D9: BCF 03.5
2709 05DA: BCF 05.4 2709 05DA: BCF 05.4
2710 .................... SoundNote(SOUND_Space,3,100); // Mezera (jinak se chybne detekuje tlacitko) 2710 .................... SoundNote(SOUND_Space,3,100); // Mezera (jinak se chybne detekuje tlacitko)
2711 05DB: MOVLW 0C 2711 05DB: MOVLW 0C
2712 05DC: MOVWF 69 2712 05DC: MOVWF 69
2713 05DD: MOVLW 03 2713 05DD: MOVLW 03
2714 05DE: MOVWF 6A 2714 05DE: MOVWF 6A
2715 05DF: CLRF 6C 2715 05DF: CLRF 6C
2716 05E0: MOVLW 64 2716 05E0: MOVLW 64
2717 05E1: MOVWF 6B 2717 05E1: MOVWF 6B
2718 05E2: CALL 0E2 2718 05E2: CALL 0E2
2719 .................... 2719 ....................
2720 .................... // Cteni tlacitek 2720 .................... // Cteni tlacitek
2721 .................... #use FAST_IO(B) 2721 .................... #use FAST_IO(B)
2722 .................... CisloSkladby=(input_b() >> 4) ^ 0xFF & 0xF; // Precti stav tlacitek 2722 .................... CisloSkladby=(input_b() >> 4) ^ 0xFF & 0xF; // Precti stav tlacitek
2723 05E3: SWAPF 06,W 2723 05E3: SWAPF 06,W
2724 05E4: MOVWF 77 2724 05E4: MOVWF 77
2725 05E5: MOVLW 0F 2725 05E5: MOVLW 0F
2726 05E6: ANDWF 77,F 2726 05E6: ANDWF 77,F
2727 05E7: MOVF 77,W 2727 05E7: MOVF 77,W
2728 05E8: XORLW 0F 2728 05E8: XORLW 0F
2729 05E9: MOVWF 34 2729 05E9: MOVWF 34
2730 .................... #use STANDARD_IO(B) 2730 .................... #use STANDARD_IO(B)
2731 .................... CisloSkladby=KeyTranslate[CisloSkladby]; // Prekoduj je do binarniho kodu 2731 .................... CisloSkladby=KeyTranslate[CisloSkladby]; // Prekoduj je do binarniho kodu
2732 05EA: MOVF 34,W 2732 05EA: MOVF 34,W
2733 05EB: CALL 0B7 2733 05EB: CALL 0B7
2734 05EC: MOVWF 78 2734 05EC: MOVWF 78
2735 05ED: MOVWF 34 2735 05ED: MOVWF 34
2736 .................... 2736 ....................
2737 .................... // Prehrani skladby 2737 .................... // Prehrani skladby
2738 .................... Play(); // Zahraj skladbu 2738 .................... Play(); // Zahraj skladbu
2739 05EE: CALL 27D 2739 05EE: CALL 27D
2740 .................... 2740 ....................
2741 .................... // Po odehrani usni a cekej na zmacknuti tlacitka 2741 .................... // Po odehrani usni a cekej na zmacknuti tlacitka
2742 .................... #use FAST_IO(B) 2742 .................... #use FAST_IO(B)
2743 .................... if (input_B()); // Precti stav portu B (vuci tomuto stavu se bude hlidat zmena) 2743 .................... if (input_B()); // Precti stav portu B (vuci tomuto stavu se bude hlidat zmena)
2744 05EF: MOVF 06,W 2744 05EF: MOVF 06,W
2745 05F0: XORLW 00 2745 05F0: XORLW 00
2746 05F1: BTFSC 03.2 2746 05F1: BTFSC 03.2
2747 05F2: GOTO 5F3 2747 05F2: GOTO 5F3
2748 .................... #use STANDARD_IO(B) 2748 .................... #use STANDARD_IO(B)
2749 .................... bit_clear(*0xB,0); // Nuluj priznak preruseni od zmeny stavu portu B 2749 .................... bit_clear(*0xB,0); // Nuluj priznak preruseni od zmeny stavu portu B
2750 05F3: BCF 0B.0 2750 05F3: BCF 0B.0
2751 .................... enable_interrupts(INT_RB); // Povol preruseni od zmeny stavu portu B 2751 .................... enable_interrupts(INT_RB); // Povol preruseni od zmeny stavu portu B
2752 05F4: BSF 0B.3 2752 05F4: BSF 0B.3
2753 .................... 2753 ....................
2754 .................... output_high(POWER_386); // Vypni napajeni zesilovace 2754 .................... output_high(POWER_386); // Vypni napajeni zesilovace
2755 05F5: BSF 03.5 2755 05F5: BSF 03.5
2756 05F6: BCF 05.4 2756 05F6: BCF 05.4
2757 05F7: BCF 03.5 2757 05F7: BCF 03.5
2758 05F8: BSF 05.4 2758 05F8: BSF 05.4
2759 .................... output_float(POWER_PIC); // Odpoj GND 2759 .................... output_float(POWER_PIC); // Odpoj GND
2760 05F9: BSF 03.5 2760 05F9: BSF 03.5
2761 05FA: BSF 05.3 2761 05FA: BSF 05.3
2762 .................... 2762 ....................
2763 .................... Sleep(); // Usni aby byla minimalni klidova spotreba 2763 .................... Sleep(); // Usni aby byla minimalni klidova spotreba
2764 05FB: SLEEP 2764 05FB: SLEEP
2765 .................... 2765 ....................
2766 .................... disable_interrupts(INT_RB); // Zakaz preruseni od portu 2766 .................... disable_interrupts(INT_RB); // Zakaz preruseni od portu
2767 05FC: BCF 03.5 2767 05FC: BCF 03.5
2768 05FD: BCF 0B.3 2768 05FD: BCF 0B.3
2769 .................... goto Start; // Po probuzeni skoc na zacatek 2769 .................... goto Start; // Po probuzeni skoc na zacatek
2770 05FE: GOTO 59E 2770 05FE: GOTO 59E
2771 .................... } 2771 .................... }
2772 .................... 2772 ....................
2773 05FF: SLEEP 2773 05FF: SLEEP