; SwinSID SE ; created by Swinkels ; www.swinkels.tvtom.pl/swinsid ; firmware not intended for commercial usage .include "m8515def.inc" ;R0 - r7 reserved .def val2l=r8 .def val2h=r9 .def sid_ma=r10 .def sid_md=r11 .def sid_sreg=r12 .def pl=r13 .def ph=r14 .def new_ctrl=r16 .def vall=r17 .def valh=r18 .def tmp2=r19 .def sl=r21 .def sh=r22 .def ac=r23 .def reg2=r24 .def tmp=r25 ; rejestry R0 - R5 zarezerwowane .dseg .org 0x0100 ; 32 rejestry SID D000 - D01f freql1: .byte 1 freqh1: .byte 1 pwl1: .byte 1 pwh1: .byte 1 ctrl1: .byte 1 ad1: .byte 1 sr1: .byte 1 freql2: .byte 1 freqh2: .byte 1 pwl2: .byte 1 pwh2: .byte 1 ctrl2: .byte 1 ad2: .byte 1 sr2: .byte 1 freql3: .byte 1 freqh3: .byte 1 pwl3: .byte 1 pwh3: .byte 1 ctrl3: .byte 1 ad3: .byte 1 sr3: .byte 1 filterl: .byte 1 filterh: .byte 1 reson: .byte 1 vol_fil: .byte 1 potx: .byte 1 poty: .byte 1 osc3: .byte 1 env3: .byte 1 empty1d: .byte 1 empty1e: .byte 1 empty1f: .byte 1 ; bajty pomocnicze AVR volCount1: .byte 1 volume1: .byte 1 freqoldl1: .byte 1 freqoldh1: .byte 1 posl1: .byte 1 posh1: .byte 1 vol_old1: .byte 1 rev_posl1: .byte 1 rev_posh1: .byte 1 rev_stl1: .byte 1 rev_sth1: .byte 1 rev_ch1: .byte 1 rev_voll1: .byte 1 rev_volh1: .byte 1 volCount2: .byte 1 volume2: .byte 1 freqoldl2: .byte 1 freqoldh2: .byte 1 posl2: .byte 1 posh2: .byte 1 vol_old2: .byte 1 rev_posl2: .byte 1 rev_posh2: .byte 1 rev_stl2: .byte 1 rev_sth2: .byte 1 rev_ch2: .byte 1 rev_voll2: .byte 1 rev_volh2: .byte 1 volCount3: .byte 1 volume3: .byte 1 freqoldl3: .byte 1 freqoldh3: .byte 1 posl3: .byte 1 posh3: .byte 1 vol_old3: .byte 1 rev_posl3: .byte 1 rev_posh3: .byte 1 rev_stl3: .byte 1 rev_sth3: .byte 1 rev_ch3: .byte 1 rev_voll3: .byte 1 rev_volh3: .byte 1 .cseg .org 0 rjmp start .org INT0addr in xl, PIND in sid_md, PINC rjmp sid_cs .org OVF0addr sei rjmp mixing_loop ; przerwanie licznika ; ------------------------------- OBLUSGA CS ------------------------------ sid_cs: in sid_sreg, SREG lsr xl lsr xl lsr xl ;sbis PINB, 2 st x, sid_md out SREG, sid_sreg reti ; ------------------------------------------------------------------------------ // -------------------------------- MAKRO GENERUJ GLOS ----------------------------- .macro gen_voice ; obliczenie kroku SL I SH lds sh, @0 + 1 lds sl, @0 + 0 lsr sh ror sl lsr sh ror sl lsr sh ror sl ; aktualizacja nowej pozycji lds pl, @1 + 4 lds ph, @1 + 5 add pl, sl adc ph, sh sts @1 + 4, pl sts @1 + 5, ph ; obliczenie probki srodkowej dla oversamplingu mov vall, pl mov valh, ph mov val2l, sl mov val2h, sh lsr val2h ror val2l sub vall, val2l sbc valh, val2h ;W rejestrze pl bedzie teraz druga pozycja do oversamplingu mov pl, valh ; odczytanie glosnosci kanalu dla ADSR lds vall, @1 + 0; volume counter lds valh, @1 + 1; volume level vol_start: ; Sprawdzenie czy zbocze narastajace lds tmp, @1 + 6 ; wczytanie vol_old lds new_ctrl, @0 + 4 ; wczytanie vol_akt mov ac, new_ctrl ; control com tmp and ac, tmp bst ac, 0 brtc vol_downcheck ; skok - jesli nie ma zbocza narastajacego ; wykryto zbocze narastajace na GATE ; faza A - glosnosc na max ser valh ser vall rjmp vol_done vol_downcheck: ; Sprawdzenie czy zbocze opadajace lds ac, @1 + 6 ; wczytanie vol_old mov tmp, new_ctrl com tmp and ac, tmp bst ac, 0 brtc vol_dsr ; sprawdz czy D czy R zapisz_rev: ; wykryto opadajace zbocze na GATE ; Dla szumu brak reverbu bst new_ctrl, 7 brts vol_done ; Glosnosc reverb na max ser ac sts @1 + 9, sl ; rev_step_l sts @1 +10, sh ; rev_step_h sts @1 +12, ac ; rev_vol_l sts @1 +13, ac ; rev_vol_h mov ac, new_ctrl ; control - wybor fali swap ac andi ac, 0b00001111 ldi tmp, high (wave1 * 2) add tmp, ac sts @1 +11, tmp ; wave_channel dla reverb rjmp vol_done vol_dsr: ;Volume counter ; volh - glosnosc ; voll - counter glosnosci dec vall brne vol_done ; sprawdzenie czy D czy R bst new_ctrl, 0 brts D_faza R_faza: ; faza R - opadanie ; ustawienie kroku opadania zgodnie z tabela RELEASE_TABLE lds zl, @0 + 6 ; sid_sr andi zl, 0b00001111 ldi zh, high (release_table * 2) lpm val2l, z mul valh, val2l mov valh, r1 rjmp vol_done D_faza: ; Faza D lds ac, @0 + 6 ; sustain level ori ac, 0b00001111 cp ac, valh brsh vol_done ; Poziom Sustain lds zl, @0 + 5 ; decay time andi zl, 0b00001111 ldi zh, high (release_table * 2) lpm val2l, z mul valh, val2l mov valh, r1 vol_done: ; zaktuaizowanie glosnosci dla kanalu ; w VAL - glosnosc ; w VAL2 - krok glosnosci sts @1 + 0, vall ; vol counter sts @1 + 1, valh ; volume level sts @1 + 6, new_ctrl ; zapisanie wartosci vol_old ; Ustawienie rejestrow do czytania probki mov ac, new_ctrl ; control - wybor fali swap ac andi ac, 0b00001111 bst ac, 2 ; spr czy fala prostokatna brtc std_interpol ; Square wave oversampling lds tmp2, @0 + 2 andi tmp2, 0b11110000 lds tmp, @0 + 3 ; wczytanie stopnia modulacji andi tmp, 0b00001111 add tmp, tmp2 swap tmp mov tmp2, tmp ldi zh, high (pulse_pwm * 2) ;Pierwsza probka mov zl, ph lpm tmp, z ;Sprawdzenie zerowania próbki cp zl, tmp2 brlo pwm1_off clr tmp pwm1_off: ; Druga probka mov zl, pl lpm ac, z ;Sprawdzenie zerowania próbki cp zl, tmp2 brlo pwm2_off clr ac pwm2_off: ; Dodanie dwóch wartości próbek oversampling add ac, tmp ror ac rjmp probka_gotowa std_interpol: ; Interpolacja zwyklych fal ldi zh, high (wave1 * 2) add zh, ac ;Pierwsza probka mov zl, ph lpm tmp, z ;Druga probka mov zl, pl lpm ac, z ; Dodawnie dwoch probek add ac, tmp ror ac probka_gotowa: ; zamiana na signed ldi tmp, 128 eor ac, tmp ; przesuniecie w prawo z bitem znaku lsr valh lsr valh ; obliczenie próbki z glosnoscią muls ac, valh ; mnozenie * volume ;przeniesienie do r2 i r3 movw r2, r0 ; - REV _ OBSLUGA ---------------------------------------- REV ; aktualizacja pozycji REV lds pl, @1 + 7 lds ph, @1 + 8 lds sl, @1 + 9 lds sh, @1 +10 add pl, sl adc ph, sh sts @1 + 7, pl sts @1 + 8, ph ; aktualizacja glosnosci REV ldi ac, 2 mov val2l, ac clr val2h ; krok obnizania glosnosci REV lds vall, @1 + 12 ; rev_voll lds valh, @1 + 13 ; rev_volh tst valh breq rev_vol_done sub vall, val2l sbc valh, val2h rev_vol_done: sts @1 + 12, vall sts @1 + 13, valh ; wczytanie probki REV lds zh, @1 +11 ; wave_channel mov zl, ph lpm ac, z ; zamiana na signed ldi tmp, 128 eor ac, tmp ; przesuniecie w prawo - bit znaku lsr valh lsr valh lsr valh lsr valh ;obliczenie próbki z glosnoscią muls ac, valh ; mnozenie * volume ; makro zwraca wartosci sygnalu w R2 i R3 a rev R0 R1 ;rcall klawisze .endmacro ; ----------------------------------- KONIEC MAKRA ------------------------------- ; -------------------------- MIXING LOOP ------------------------- mixing_loop: clr ac out timsk, ac ldi ac, 0b10100000 out TCNT0, ac clr r6 clr r7 clr r4 clr r5 gen_voice freql1, volCount1 add r4, r0 ; reverb adc r5, r1 add r6, r2 ; glos adc r7, r3 gen_voice freql2, volCount2 add r4, r0 adc r5, r1 add r6, r2 adc r7, r3 gen_voice freql3, volCount3 add r4, r0 adc r5, r1 add r6, r2 adc r7, r3 ;mov r0, r6 ; przeniesienie sygnalu mono ;mov r1, r7 movw r0, r6 ; KANAL LEWY ; dodanie reverbu add r6, r4 adc r7, r5 ; przesuniecie 15 bit asr r7 ror r6 ; KANAL PRAWY ; dodanie reverbu sub r0, r4 sbc r1, r5 ; przesuniecie 15 bit asr r1 ror r0 mov r5, r7 ; R0 R1 - lewy ; R6 R7 - prawy ;generovani I2S pro DAC TDA1543 ;PS.: nic nemazat - je to presne nacasovano a kratsi uz to byt nemuze out spdr, r1 ;15 cyklu pauza ldi R16,5 ISPdel1: dec R16 brne ISPdel1 ; nop nop ; wysylamy mlodszy bajt nop; cli out spdr, r0 ;12 cyklu pauza ldi R16,4 ISPdel2: dec R16 brne ISPdel2 ; zamiast 3 rozkazow wieksza petla o 1 ; 17 bit - 3 * nop nop nop nop ; WS - zmiana kanalu sbi portb,3 ; 17 bit - SCK signal sbi portb, 7 cbi portb, 7 nop ;sei nop nop nop out spdr,r7 ; Pauza 15 cykli ldi R16,5 ISPdel3: dec R16 brne ISPdel3 nop nop nop ;cli out spdr, r6 ;pauza 12 cykli adiw R30,0 ;2 cykle adiw R30,0 ;2 cykle adiw R30,0 ;2 cykle nop nop nop nop nop nop ; 17 bit - 3 * nop nop nop nop ; WS - zmiana kanalu cbi portb,3 ; 17 bit - SCK signal sbi portb, 7 cbi portb, 7 nop; sei ldi ac, 128 eor r5, ac out porta, r5 reti start: cli ;!IE ldi ac, low(RAMEND) ;stos out SPL, ac ldi ac, high(RAMEND) out SPH, ac ldi ac, 0b00000010 ;maska dla timer0 out TIMSK, ac ; ldi ac, 0b00000010 ; 0b00000001 - clk/1 out TCCR0, ac ; 0b00000010 - dzielnik / 8 ldi ac, 255 ;ustawienie licznika out TCNT0, ac ; Port A wyjscie diody ldi ac, 0b00010000 out DDRA, ac ; Port C i D jako wejścia ldi ac, 0b00000000 out DDRC, ac out DDRD, ac ; wejscia od SIDa z podciaganiem do 1 ldi ac, 0b11111111 out PORTC, ac out PORTD, ac ; Port B SPI jako wyjscie SPI ldi ac, 0b11111000 out DDRB, ac ; 0b00000010 - opadajace ldi ac, 0b00000010 out MCUCR, ac ; zbocze INT0 ldi ac, 0b01000000 out GICR, ac ; włączenie przerwań dla INT0 ; ustawienie XH na poczatek rejestrow SID ldi xh, high ( ctrl1 ) ldi vall,0x89 ; 1000 Hz ldi valh,0x41 sts freql1, vall sts freqh1, valh ; SR - wolne opadanie ldi ac, 0b00000000 sts sr1, ac ; wlaczenie generatora ldi ac, 33 sts ctrl1, ac ldi ac, 0 sts ctrl2, ac sts ctrl2, ac ; glosnosc na max ldi ac, 255 sts volume1, ac sts volCount1, ac ldi reg2, 2 ;SPI rozhrani pro vytvoreni I2S sbernice ldi ac, 0b01010000 // jest ok out spcr, ac ldi ac, 0b00000001 out spsr, ac // jest ok clk/2 - max speed sei ; włączenie wxzystkich przerwan petla: out timsk, reg2 rjmp petla .org 0x0500 release_table: .db 2, 42 .db 108, 146 .db 188, 207 .db 216, 223 .db 232, 249 .db 254, 255 .db 255, 255 .db 255, 255 .org 0x0600 ; 0000 - nic nie gra wave1: .db 128, 131, 134, 137, 140, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174 .db 177, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216 .db 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244 .db 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255 .db 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246 .db 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220 .db 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179 .db 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 140, 137, 134, 131 .db 128, 125, 122, 119, 116, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82 .db 79, 77, 74, 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 43, 40 .db 38, 36, 34, 32, 30, 28, 26, 24, 22, 21, 19, 17, 16, 15, 13, 12 .db 11, 10, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 .db 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 10 .db 11, 12, 13, 15, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36 .db 38, 40, 43, 45, 47, 50, 52, 55, 57, 60, 63, 65, 68, 71, 74, 77 .db 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 116, 119, 122, 125 ; 0001 - trojkat - sinus .db 128, 131, 134, 137, 140, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174 .db 177, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216 .db 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244 .db 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255 .db 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246 .db 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220 .db 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179 .db 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 140, 137, 134, 131 .db 128, 125, 122, 119, 116, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82 .db 79, 77, 74, 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 43, 40 .db 38, 36, 34, 32, 30, 28, 26, 24, 22, 21, 19, 17, 16, 15, 13, 12 .db 11, 10, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 .db 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 10 .db 11, 12, 13, 15, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36 .db 38, 40, 43, 45, 47, 50, 52, 55, 57, 60, 63, 65, 68, 71, 74, 77 .db 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 116, 119, 122, 125 ; 0010 - pila .db 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143 .db 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159 .db 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 .db 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191 .db 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207 .db 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223 .db 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239 .db 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 212, 169 .db 127, 84, 41, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 .db 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 .db 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 .db 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 .db 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 .db 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 .db 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111 .db 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127 ; 0011 - trojkat + pila .db 128, 131, 134, 137, 140, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174 .db 177, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216 .db 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244 .db 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255 .db 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246 .db 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220 .db 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179 .db 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 140, 137, 134, 131 .db 128, 125, 122, 119, 116, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82 .db 79, 77, 74, 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 43, 40 .db 38, 36, 34, 32, 30, 28, 26, 24, 22, 21, 19, 17, 16, 15, 13, 12 .db 11, 10, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 .db 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 10 .db 11, 12, 13, 15, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36 .db 38, 40, 43, 45, 47, 50, 52, 55, 57, 60, 63, 65, 68, 71, 74, 77 .db 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 116, 119, 122, 125 ; 0100 - prostakat - vengabass square_wave: .db 128, 153, 178, 203, 228, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 28, 53, 78, 103 ; 0101 - prostakat + trojkat .db 128, 131, 134, 137, 140, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174 .db 177, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216 .db 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244 .db 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255 .db 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246 .db 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220 .db 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179 .db 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 140, 137, 134, 131 .db 128, 125, 122, 119, 116, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82 .db 79, 77, 74, 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 43, 40 .db 38, 36, 34, 32, 30, 28, 26, 24, 22, 21, 19, 17, 16, 15, 13, 12 .db 11, 10, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 .db 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 10 .db 11, 12, 13, 15, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36 .db 38, 40, 43, 45, 47, 50, 52, 55, 57, 60, 63, 65, 68, 71, 74, 77 .db 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 116, 119, 122, 125 ; 0110 - prostakat + pila .db 128, 131, 134, 137, 140, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174 .db 177, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216 .db 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244 .db 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255 .db 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246 .db 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220 .db 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179 .db 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 140, 137, 134, 131 .db 128, 125, 122, 119, 116, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82 .db 79, 77, 74, 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 43, 40 .db 38, 36, 34, 32, 30, 28, 26, 24, 22, 21, 19, 17, 16, 15, 13, 12 .db 11, 10, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 .db 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 10 .db 11, 12, 13, 15, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36 .db 38, 40, 43, 45, 47, 50, 52, 55, 57, 60, 63, 65, 68, 71, 74, 77 .db 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 116, 119, 122, 125 ; 0111 - prostakat + pila + trojkat .db 128, 131, 134, 137, 140, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174 .db 177, 179, 182, 185, 188, 191, 193, 196, 199, 201, 204, 206, 209, 211, 213, 216 .db 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244 .db 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255 .db 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246 .db 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220 .db 218, 216, 213, 211, 209, 206, 204, 201, 199, 196, 193, 191, 188, 185, 182, 179 .db 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 140, 137, 134, 131 .db 128, 125, 122, 119, 116, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82 .db 79, 77, 74, 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 43, 40 .db 38, 36, 34, 32, 30, 28, 26, 24, 22, 21, 19, 17, 16, 15, 13, 12 .db 11, 10, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1 .db 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 10 .db 11, 12, 13, 15, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36 .db 38, 40, 43, 45, 47, 50, 52, 55, 57, 60, 63, 65, 68, 71, 74, 77 .db 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 116, 119, 122, 125 ; 1000 - szum .db 75, 108, 203, 124, 172, 175, 168, 239, 203, 161, 62, 94, 0, 186, 166, 0 .db 33, 243, 120, 142, 137, 196, 203, 63, 14, 36, 56, 204, 8, 139, 214, 108 .db 80, 242, 61, 216, 61, 208, 134, 71, 168, 30, 73, 114, 232, 84, 157, 144 .db 214, 105, 27, 90, 202, 213, 218, 7, 154, 145, 114, 80, 161, 21, 252, 108 .db 181, 88, 16, 20, 46, 210, 197, 127, 229, 124, 180, 101, 49, 206, 244, 0 .db 235, 191, 29, 5, 106, 199, 73, 175, 135, 223, 13, 179, 153, 127, 131, 76 .db 121, 158, 67, 47, 127, 180, 100, 151, 130, 186, 126, 57, 218, 39, 171, 79 .db 96, 244, 128, 145, 107, 153, 23, 54, 212, 13, 8, 247, 242, 200, 106, 11 .db 158, 195, 214, 43, 47, 118, 99, 142, 126, 216, 169, 237, 227, 97, 193, 127 .db 52, 10, 67, 253, 204, 75, 70, 158, 129, 27, 99, 27, 171, 242, 177, 171 .db 35, 201, 200, 7, 64, 23, 193, 102, 219, 213, 52, 129, 75, 123, 56, 143 .db 105, 0, 102, 73, 141, 220, 213, 230, 141, 8, 29, 31, 196, 252, 87, 43 .db 8, 175, 27, 195, 177, 153, 128, 30, 152, 179, 31, 244, 20, 117, 15, 127 .db 254, 214, 232, 116, 173, 78, 196, 14, 250, 214, 56, 2, 60, 230, 94, 139 .db 76, 117, 206, 94, 130, 251, 159, 182, 181, 113, 105, 72, 61, 78, 70, 78 .db 243, 139, 203, 128, 46, 160, 18, 21, 199, 132, 179, 198, 21, 175, 197, 202 pulse_pwm: .db 64, 120, 160, 190, 218, 230, 245, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 228, 203, 178, 153 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 .exit