1

Temat: a moze by tak SoftSynth 2

moze by tak odswiezyc pamiec na temat Softsyntha, sposobu tworzenia i odtwarzania przez niego instrumentow

i stworzyc cos bardziej przyjaznego w obsludze

czy ktos juz interesowal sie Softsynthem od srodka ? jak on dziala ?

moja teoria, ktora chodzi mi po glowie, to odgrywanie probek 256 bajtowych + liczne operacje na nich, cos jak MOD-y czy XM-y na PC w stylu chiptunes, tez tam sa krotkie sampelki, nawet mniej niz 256 bajtow a brzmia jak SID :)

co Wy na to ? tedy droga, czy cos pominalem ?

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

Odp: a moze by tak SoftSynth 2

Witam

Mówisz o samplach, czy o klasycznym POKEY'u? Jeśli o samplach, to raczej zastosowanie tego będzie raczej znikome, ze względu na duże obciążenie procesora. Napisanie edytora rzeczywiście pomogłoby w bardziej powszechnym tworzeniu muzyki, ale raczej z zastosowaniem tylko na msx compo.

Ostatnimi czasy staram się eksperymentować nad częstszym odtwarzaniem dzwięku na generatorach POKEY'a (nie membrana) z zastosowaniem do dema. W chwili obecnej dysponuję eksperymentalną i wczesną wersją player'a instrumentu odtwarzanego 16 razy na ramkę. Efekty są na razie średnie, ale prawda jest też taka, że jest to wczesna wersja i pełnego modelu jeszcze nie wprowadziłem. Na chwilę obecną przetestowałem samą modulację głośności i daje to w praktyce efekt lepszego basu (bardziej "chropowaty") oraz zdecydowanie mniejsze zniekształcenia dźwięku (ogólnie) przy odtwarzaniu wyższych częstotliwości.

Pozdrawiam
Marek Konopka

3

Odp: a moze by tak SoftSynth 2

no tak, obciazenie byloby i 100%, SoftSynth wykorzystuje na max-a CPU

chodziloby o nowszy, przyjazniejszy sposob tworzenia obwiedni, czy czegos tam co sie robi w SoftSynth, no i na pewno jakas optymalizacje szybkosci w stosunku do oryginalu tez daloby sie zrobic

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

4

Odp: a moze by tak SoftSynth 2

Z tego co sobie przypominam SoftSynth odtwarzał sample na membranie, tyle tylko, że były to takie małe owiednie właśnie, umieszczane w bibliotekach obwiedni i odpowiednio często odtwarzane. Można tym sposobem otrzymać dźwięk w stylu syntezatorowych, z oczywistych względów pozbawiony dużej złożoności, a na plus możnaby określić stosunkową małą wielkośc songu (dzięki odwołaniom do standardowych zestawów obwiedni).

5

Odp: a moze by tak SoftSynth 2

W chwili obecnej dysponuję eksperymentalną i wczesną wersją player'a instrumentu odtwarzanego 16 razy na ramkę.

Zdajesz sobie oczywiście sprawę, że przy tej częstotliwości to ty możesz nawet tych generatorów pokeya nie włączać i w playerze sterować tylko membraną?  8)
16 razy na ramkę to 800Hz. Czyli 400Hz dźwięk przy prostokątnej obwiedni. To już nawet nie jest bas :)

Aby odpackować teksty trzeba najpierw odpackować  program do ich odpackowywania - Energy #1

6

Odp: a moze by tak SoftSynth 2

Ostatnimi czasy staram się eksperymentować nad częstszym odtwarzaniem dzwięku na generatorach POKEY'a (nie membrana) z zastosowaniem do dema.

Cześć Marku,
To chyba pierwsza oficjalna wypowiedź, że rzeczywiście demo będzie.
Ekstraordynaryjnie :)

: 404. Stopka not found

7

Odp: a moze by tak SoftSynth 2

Przeciez nie napisał do jakiego dema. Może mówił tak ogólnie :)

MM: banned, cytowanie 2 poprzednich wypowiedzi w calosci (rekord). Bedziesz mial wiecej czasu na TMC 2.0. BTW, czy naprawde KU^%$@ latwiej trafic w maly guzik "cytuj" niz w duzy "odpowiedz"?

Aby odpackować teksty trzeba najpierw odpackować  program do ich odpackowywania - Energy #1

8

Odp: a moze by tak SoftSynth 2

W chwili obecnej dysponuję eksperymentalną i wczesną wersją player'a instrumentu odtwarzanego 16 razy na ramkę.

Zdajesz sobie oczywiście sprawę, że przy tej częstotliwości to ty możesz nawet tych generatorów pokeya nie włączać i w playerze sterować tylko membraną?  8)
16 razy na ramkę to 800Hz. Czyli 400Hz dźwięk przy prostokątnej obwiedni. To już nawet nie jest bas :)

Sprawdziłem odtwarzanie z taką częstotliwością dźwięku na membranie i efekty są żenująco słabe. Możliwe jednak, że emulator nie działa prawidłowo. Na razie całkowicie darowałem sobie dalsze drążenie w tej materii. Zostaję przy czystych generatorach.

9

Odp: a moze by tak SoftSynth 2

Marek może zająbyś sie dokończeniem Soundtrackera Liebicha :) jak chcesz to podeśle Ci źródła od Tomka jak mi podeśle. Myśle że jakś fajna muza na digi przydałaby się w jakiejś nowej twojej produkcji ;) A tak wogóle to odezwałbyś się na gg lub email

10

Odp: a moze by tak SoftSynth 2

Marek może zająbyś sie dokończeniem Soundtrackera Liebicha :) jak chcesz to podeśle Ci źródła od Tomka jak mi podeśle. Myśle że jakś fajna muza na digi przydałaby się w jakiejś nowej twojej produkcji ;) A tak wogóle to odezwałbyś się na gg lub email

Dziękuję za propozycję, ale zajmę się swoim programem do tworzenia muzyki. Muzyka na samplach nie ma racji bytu w moim przyszłym ewentualnym demie ze względu na duże obciążenie procesora. A propos kontaktu, to już wysłałem do Ciebie email.

11

Odp: a moze by tak SoftSynth 2

Ostatnimi czasy staram się eksperymentować nad częstszym odtwarzaniem dzwięku na generatorach POKEY'a (nie membrana) z zastosowaniem do dema.

Cześć Marku,
To chyba pierwsza oficjalna wypowiedź, że rzeczywiście demo będzie.
Ekstraordynaryjnie :)

Hi

Nie potwierdzam, ani nie zaprzeczam.

12

Odp: a moze by tak SoftSynth 2

a Ktos, jakies konkretniejsze dane na temat SoftSyntha poda ?

moze scan numeru Bajtka z opisem SoftSyntha

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

13

Odp: a moze by tak SoftSynth 2

A jakie dane bys chcial ??

SoftSynth to cos w rodzaju jezyka programowania muzyki.
A operuje na "samplach" 4ro bitowych o dlugosci 256 bajtow. W zasadzie powinien byc w tych bajtach zawarty obraz jednego okresu fali, ktora ma generowac. Dodatkowo stosowana jest obwiednia (takze opis 4ro bitowy, ale z tego co pamietam dlugosc 64bajty). Dowolna obwiednia moze byc stosowana z dowolna fala. Dochodza jeszcze filtry i pare bajerow takich bardziej eksperymentalnych niz rzadzanych jakimis zasadami :)

Oczywiscie jesli pisze tu o 256 czy 64 bajtach to chodzi mi o bajty 4ro bitowe ;)

Sam program jest szalenie zagmatwany, probowalem go kiedys rozpracowywac. Glowny modul sterujacy i interpreter jest napisany w Basicu, z ogromna iloscia wstawek maszynowych (nawet do rozpoznawania komend). Wstawki na dodatek sa w zmiennych tekstowych, co dodatkowo "unieprzyjemnia" analize. Procedury odtwarzajacej w koncu nie przeanalizowalem, bo strasznie zagmatwany kod byl. Robilem te analize przed pisanem SoundTracker Playera, bo myslalem ze cos sie moze przydac, ale w koncu latwiejsze okazalo sie napisanie wlasnych procedur od podstaw... :)

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

14

Odp: a moze by tak SoftSynth 2

no i oto chodzilo

a czy ta obwiednia, to nie oznacza liczby powtorzen bajtow sampla, czyli nute ?

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

15

Odp: a moze by tak SoftSynth 2

Obwiednia w SS okreslala to, co powinna obwiednia, czyli przebieg glosnosci dzwieku w czasie. Kuna, jak to dzialalo, w dodatku na 4-rech kanalach i tyle efektow w rodzaju jakiejs polaryzacji kołowej (????) i w dodatku to sie z basica odpalało.... Gosciu jest niezlym rulerem (zreszta to autor Papyrusa na ST).

http://www.5oft.pl/

Odp: a moze by tak SoftSynth 2

Cześć!

Temat jest bardzo prosty, zajrzyjcie do procedur Epi'ego...

pozdrowienia,
zielony/waxsoft/bc

Odp: a moze by tak SoftSynth 2

Cześć!

To jest odpowiedź na e-maila, którego dzisiaj dostałem. Tylko czemu nie zadałeś tych pytań na AA?

Chybaśmy się nie zrozumieli, bo chodziło o prockę playera, jej zawiłość (?!),etc. , ale może to i lepiej... 

Oki, wybaczam, bo jesteś jeszcze młody... Szkoda tylko, że nikt Ci jeszcze nie powiedział, że nie da się, przynajmniej po raz drugi, odkryć AMERYKI! A gdybyś tak spojrzał na datę powstania SS...
Inną sprawą jest /oczywiste/ podobieństwo procedur (patrz dwa zdania wyżej).
Bo przecież nie zastanawiał Was fakt tak dużej rozdzielczości częstotliwości SS(?), bo mnie tak! Duża rozdzielczość wiąże za sobą konieczność zastosowania ultra szybkiej procedury playera i heada. I NIE JEST PRAWDĄ, ŻE CZĘŚĆ EFEKTÓW BYŁA DZIEŁEM PRZYPADKU, CZY JAKKOLWIEK EKSPERYMENTALNYCH (jak sugerował jeden z moich poprzedników i uściślając NIE autor w/w maila).
I tu koniec wiadomości do Ciebie KOLEGA!

Powstało w ten sposób kilkadziesiąt stron wydruku kodu...
Mnie zaś, najbardziej podobał się fragment, który tworzył pogłos - mistrzostwo! I ze strony drugiej, szkoda, że Autor SS nie zastosował prostej sztuczki w tablicy głośności do tworzenia 16 poziomów głośności synth'a, co prawdopodobnie jeszcze podniosło by "walory" programu.

Ale wracając do głównego TEMATU to jestem jak najbardziej za!!! Gdyby poprawić edytory obwiedni i tracków by były bardziej do ludzi. Ale procedury playera i heada zostawiłbym w spokoju (czytaj: nowe ale nadal uproszczone) bo używając synthów z wielokrotną falą w 256 bajtach, pojawią się nazbyt słyszalne szpilki w odtwarzanym utworze. 

Kiedyś jeden z moich kolegów - Pavlo (musicman C64) - słuchając kilku utworów Jakuba Husaka z SS wpadł na pomysł by posamplowć brzmienia z C64 i użyć je w SS. Wtedy problemem było oczywiście "rozciągnięcie" okresu fali C64 (lub jej wielokrotności) do owych 256 bajtów syntha i sampler (rozdzielczość 4 bity ale tylko 15 wartości próbki na wyjściu) którego schemat przysłał nam kol.Husak. Efekt był!!! Ale brakowało fazowania synth'ów tak znanych z brzmień C64!

I kilka wersów dla jednego z kolegów:
pomysł procedury: diabli wiedzą kto, lata 80-te

    clc
opu lda #0
    adc #delay :-o
    sta opu+1
    lda snt+1
    adc #0
    sta snt+1
snt ldy adr_synth
    lda tab_glos,y
    sta np.$d201

...po_robocie (co tu optymalizować?)

Cytując Kolegę z innej platformy:
"Nie słucham techno ani rapu, więc jestem mało ziomalowy!"

Pozdrowienia,
zielony/waxsoft/bc

18

Odp: a moze by tak SoftSynth 2

waxsoft, kto przyslal Ci ten list, i z kim prowadzisz monolog ?

zamieszczony fragment jest identyczny z tym jaki wystepuje w playerach MOD-ow (Inertia, ProTracker)

czy jednak dla tak krotkich 256 bajtowych sampli, nie bedzie zbyt szybki?

najwiekszy problem stanowila implementacja chocby polowy fx-ow jakie udostepnia np. format MOD, przeciez samo odegranie sampla o okreslonej fali, obwiedni to nie problem, ale co dalej

przeciez nie moze to brzmiec jak Neo, gdzie wogole nut nie slychac, zadnej modulacji dzwieku

jak grac 256 bajtowymi probkami, aby wyszla z nich muza w stylu chiptunes, na PC tworza takie kawalki w XM czy tez MOD (dzwieki SID-owe)

ktory efekt sprawia ze tak krotki sampl brzmi jak SID-wo, czy to portamento, zreszta nawet nie wiem co to portamento ?? rozpiska wszystkich fx-ow z MOD-a byla, tylko nie mial kto wytlumaczyc co taki efekt robi z samplem

skoro PWM takie wazne, to budujac indywidualnie fale, mozemy to PWM sobie ustawic jak chcemy, tylko gdy konczy sie 256-a wartosc probki, licznik sie przekreci i bedzie zgrzyt, chyba ze koncowka sampla pokrywa sie z jego poczatkiem, chociaz gdy index odwolujacy sie do sampla bedzie zbyt duzy to i tak beda zgrzyty

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

19

Odp: a moze by tak SoftSynth 2

Cześć!

I kilka wersów dla jednego z kolegów:
pomysł procedury: diabli wiedzą kto, lata 80-te

Nie bede ich cytowal tylko sie ustosunkuje to tej "wypowiedzi". Ta procedura bedzie dzialac, ale nie jest najszybsza, Chyba ze bedzie na stronie zerowej umieszczona, tyle za takie procki musza byc 4 i jeszcze troche kodu, ktory powinien sie tam zmiescic, a sie nie zmiesci, ale to juz innego rodzaju problem. Problemem jest dodanie wszystkich efektow dostepnych w SS, wspomnijmy tylko o dwoch.
Ja sie poprostu zapytam: A gdzie tu modulacja kolowa (dostepna w SS) a gdzie FILTRY !!
O wlasnie Filtr dzialajacy na probkach. Mam nadzieje ze wszyscy tu wiedza ze zasada dzilania "filtrow" Pokeya jest taka iz nie potrafia one filtrowac dzwieku odtwarzanego przez bezposrednie sterowanie generatorami... No to jak u licha robi to SS?

Skoro trafiles na takiego "mondego" rozmowce (niechby moze cos na forum zaprezentowal), to moze udzieli Ci i tych odpowiedzi. Przypomne jeszcze ze SS umozliwial stosowanie szumu i znieksztalcen dodawanych do brzmien i to nie przygotowanych wczesniej jako "szumiacy sampl"

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

20

Odp: a moze by tak SoftSynth 2

ano SoftSynth to nie zwykly MOD player

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

Odp: a moze by tak SoftSynth 2

Cześć!

...I tu się Tebe mylisz... Choć tylko w połowie bo SS to najzwyklejszy mod player. I nie pisz proszę waxsoft, bo to nie jest eleganckie (o ile wiesz co to takiego).

Ale do rzeczy.

Po pierwsze ta procka jest najszybsza i NIE MUSI być na stronie zerowej (i O ZGROZO procedur heada). Nie można w niej lda snt+1, adc #0, sta snt+1 zastąpić inc snt+1 bo to wynika z istoty odgrywania synthów, które jak wiadomo mają 256 bajtów i zawiera się w nich jeden bądź wiele okresów fali. A jeśli chodziłeś na matematykę do szkoły to wiesz co to jest okres fali. Dlaczego nie można???... a dlatego by móc uzyskać możliwość odgrywania większej ilości częstotliwości dzwięku danego syntha.

Po drugie musi być szybka by uzyskać np. efekt płynnego gillsanda (tak się to chyba pisze), a w przypadku tak krótkich "sampli" (256 bajtów) to sprawa oczywista.

Po trzecie to napisałem o ile pamiętam "np.$d201" czyli można się domyśleć, że muszą być cztery procki w playerze no i head - czyli procka która czyta nuty muzyki i podstawia odpowiednie parametry do playera
(loop 4 procki + jmp loop -> kod playera)

Cytat:
"jak grac 256 bajtowymi probkami, aby wyszla z nich muza w stylu chiptunes, na PC tworza takie kawalki w XM czy tez MOD (dzwieki SID-owe)

ktory efekt sprawia ze tak krotki sampl brzmi jak SID-wo, czy to portamento, zreszta nawet nie wiem co to portamento ?? rozpiska wszystkich fx-ow z MOD-a byla, tylko nie mial kto wytlumaczyc co taki efekt robi z samplem

skoro PWM takie wazne, to budujac indywidualnie fale, mozemy to PWM sobie ustawic jak chcemy, tylko gdy konczy sie 256-a wartosc probki, licznik sie przekreci i bedzie zgrzyt, chyba ze koncowka sampla pokrywa sie z jego poczatkiem, chociaz gdy index odwolujacy sie do sampla bedzie zbyt duzy to i tak beda zgrzyty"

Pamiętasz matematykę i teorię okresu fali? (do zdania powyżej) W SS nie ma indexów!

...a zastąp w NEO dłuugie sample 256 bajtowymi próbkami (o pełnym okresie fali) a usłyszysz odpowiedź!

Tylko nie rób tego z typowymi chiptunes bo NEO ma błędnie napisaną prockę playera (różne długości czasów wykonywania tej samej procedury w różnych momentach wyjścia z niej) Chyba, że zostało to poprawione!

pozdrawiam,
zielony/waxsoft/bc

PS. a maila dostałem od niejakiego "KOLEGI" i nie bardzo wiem kto to...

22

Odp: a moze by tak SoftSynth 2

Chłopaki widzę że trwa zażarta dyskusja więc wstawię swoje zdanie - co do szybkości odtwarzania to kolega Zielony ma racje im szybsze tym lepszy efekt można uzyskać - z tym że z reguły head , player - jak go tam zwał jest odpalany co 1/50 sekundy więc dla jakiegokolwiek efektu podobnego jak w protrackerze nie potrzeba cudów.

Jeżeli chce ktoś aby mu wytłumaczyć podstawowe komendy protrackera to chętnie pomogę.

Tu jest kolejne sprostowanie - żadna komenda protrackera nie ingeruje w sampla a jedynie w jego głośnośc bądź częstotliwość no i oczywiście początek !!! (komenda 9 - sample offset)

Pozostałe efekty robione są przy użyciu 1 lub kilku sampli o np. różnym PWM lub stopniu filtracji.

Pecuś: najprostszy w implementacji jest filtr dolnoprzepustowy, trzeba jedynie kilka-kilkanaście tablic dla filtru.

Wzór na Dolnoprzepustowy filtr wygląda następująco:


y(i)=alfa*y(i-1)+(1-alfa)*x(i)

x(i) - wejscie danych , oznacza biezaca probke danych

y(i) - wyjscie danych

y(i-1) poprzednio odtworzona probka

Alfa - wspolczynnik filtra 0<=alfa<1

PI=3.14159
Fs=44100 :Przykladowa czestotliwosc probkowania (odtwarzania)
F1_LPF=30 :Czestotliwosc graniczna filtru

alfa=exp((-2.0*pi*F1_LPF)/Fs)

Oczywiście przy stałej częstotliwości odtwarzania wystarczy zrobić tablicę Alfa*255 dla określonych częstotliwości - np z krokiem 38 Hz dla czestotliwosci 9600 lub całkiem nieliniową tablicę.

23

Odp: a moze by tak SoftSynth 2

ktos tu zzieleniał ze złości  :lol:

Ale do rzeczy.

Zaraz przygotuje przykladowa procedurke (wycieta z inertii), bez strony zerowej itp, tak zeby bylo latwo modyfikowac.

I chce zobaczyc jak zajebiscie i wyk**** szybko modyfikujecie ją, dodajac obsluge coraz to nowszych fx-ow z MOD-a  :D Jestem ciekaw jak szybko teoria przechodzi w praktyke.

p.s.
jak na aarea mozna dodac plik do posta (trzeba miec swoj serwer ?)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

24

Odp: a moze by tak SoftSynth 2

do Zielonego wyslalem, ale do Ciebie  Świety e-maila nie mam, podaj go to tez wysle pseudo player do synthow


;-------------------
;- Synth Player v1.0
;- 20.02.2004
;-------------------

   opt h+
   org $b000

tmp     equ $00

tempo           equ 6           ; tempo, ilosc pelnych przebiegow length_Loop
length_Loop     equ 255         ; dlugosc petli playera, ile ma odegrac wartosci z sampla

audc1           equ $d201       ;rejestry Pokeya
audc2           equ $d203
audc3           equ $d205
audc4           equ $d207

;------------------------------------
;- PROCEDURKA PLAYER-a DLA 4 KANALOW
;------------------------------------

player equ *

;- kanal #1
        clc
delay0  lda #0
delay0m adc #0
        sta delay0+1
   
        lda adres0+1
        adc #0
        sta adres0+1
       
adres0  ldx $ffff       ; adres 1-ego sampla
volume0 lda $ff00,x     ; adres tablicy glosnosci dla 1-ego sampla
ch0     sta audc1

;- kanal #2
        clc
delay1  lda #0
delay1m adc #0
        sta delay1+1
       
        lda adres1+1
        adc #0
        sta adres1+1

adres1  ldx $ffff       ; adres 2-ego sampla
volume1 lda $ff00,x     ; adres tablicy glosnosci dla 2-ego sampla
ch1     sta audc2

;- kanal #3
        clc
delay2  lda #0
delay2m adc #0
        sta delay2+1
       
        lda adres2+1
        adc #0
        sta adres2+1

adres2  ldx $ffff       ; adres 3-ego sampla
volume2 lda $ff00,x     ; adres tablicy glosnosci dla 3-ego sampla
ch2     sta audc3

;- kanal #4
        clc
delay3  lda #0
delay3m adc #0
        sta delay3+1
       
        lda adres3+1
        adc #0
        sta adres3+1

adres3  ldx $ffff       ; adres 4-ego sampla
volume3 lda $ff00,x     ; adres tablicy glosnosci dla 4-ego sampla
ch3     sta audc4

        dey
        beq test

        jmp player

*-----------------

test    ldy #length_Loop

        dec tmp       ; tempo wyrazone w liczbie powtorzen petli playera
        beq HEAD

        jmp player

;-----------------------------------
;- dekodowanie patternu
;- ustawienie nowych czestotliwosci
;- glosnosci itp.
;-----------------------------------

HEAD

        inc timer+1     ; licznik na potrzeby testow, ustawia po kolei 32 glosnosci i 32 czestotliwosci
timer   lda #0
        and #$1f
        tay
       
        tax
;        ldx #0          ; numer sampla i czestotliwosc

* track 0
        lda Adr_Volume,y
        sta volume0+2

        lda frq,x
        sta delay0m+1
        lda #0
        sta delay0+1
       
        lda Adr_Instr,x
        sta adres0+2
        lda #0          ; mlodszy adres sampla =0
        sta adres0+1
       
* track 1
        lda Adr_Volume,y
        sta volume1+2

        lda frq,x
        sta delay1m+1
        lda #0
        sta delay1+1

        lda Adr_Instr,x
        sta adres1+2
        lda #0
        sta adres1+1

* track 2
        lda Adr_Volume,y
        sta volume2+2

        lda frq,x
        sta delay2m+1
        lda #0
        sta delay2+1

        lda Adr_Instr,x
        sta adres2+2
        lda #0
        sta adres2+1

* track 3
        lda Adr_Volume,y
        sta volume3+2

        lda frq,x
        sta delay3m+1
        lda #0
        sta delay3+1

        lda Adr_Instr,x
        sta adres3+2
        lda #0
        sta adres3+1

* let's go
        lda #tempo
        sta tmp
       
        ldy #length_Loop
        jmp player

*----
*- tutaj startuje program po wczytaniu do pamieci
*----
main
        lda 20
        cmp 20
        beq *-2

        sei             ;wylaczenie ROM-u i wszystkich przerwan
        lda #0
        sta $d40e
        sta $d400
        lda #$fe
        sta $d301
       
        lda #0          ;zerujemy POKEY
        sta $d208
        lda #3
        sta $d20f

        ldx #33       
        ldy #0          ;ustawiamy 4-bit w tablicach glosnosci dla Pokeya
cnv0    lda volume,y    ;w przypadku Covoxa, nie musielibysmy tego robic
        ora #%00010000
cnv1    sta volume,y
        iny
        bne cnv0
        inc cnv0+2
        inc cnv1+2
        dex
        bne cnv0
       
        jmp timer       ;startujemy od zera (timer=0)
   
   
*----
*- tablice na 4-ej stronie
*----
        org $0400
       
*----
*- instrumenty, czyli 256-bajtowe sample (32)
*----

Sampl00                 ; fala prostokatna
:128 dta b($0f)
:128 dta b($00)

Sampl01                 ; fala trojkatna
:8 dta b(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)

;- adresy instrumentow
Adr_Instr
:32 dta h(Sampl01)

*----
*- tablice z opuznieniami dla kazdej z czestotliwosci (nuty)
*----

;- oryginalna z INERTI (2 bajtowe wartosci L, H)
; dta l(50),l(53),l(57),l(60),l(63)
; dta l(67),l(71),l(76),l(80)
; dta l(85),l(90),l(95),l(101)
; dta l(107),l(113),l(120),l(127)
; dta l(135),l(143),l(151),l(160)
; dta l(170),l(180),l(190),l(202)
; dta l(214),l(227),l(240),l(254)
; dta l(270),l(286),l(302),l(320)
; dta l(339),l(360),l(381),l(404)
; dta l(428),l(453),l(480),l(508)
; dta l(539),l(571),l(605),l(641)
; dta l(679),l(719),l(762)

*- i dla obecnego playera, wziete z kosmosu :), trzeba je dobrac porzadniej
*- 48 wartosci
frq
dta l(050,053,056,059,062,065,068,071,074,077,080,083)
dta l(086,089,092,095,098,101,104,107,110,113,116,119)
dta l(122,125,128,131,134,137,140,143,146,149,152,155)
dta l(158,161,164,167,107,173,176,179,182,185,188,191)

       
*----
*- tablica ze starszymi adresami glosnosci (33)
*----
Adr_Volume
dta h(volume,volume+$100,volume+$200,volume+$300,volume+$400,volume+$500,volume+$600,volume+$700)
dta h(volume+$800,volume+$900,volume+$a00,volume+$b00,volume+$c00,volume+$d00,volume+$e00,volume+$f00)
dta h(volume+$1000,volume+$1100,volume+$1200,volume+$1300,volume+$1400,volume+$1500,volume+$1600,volume+$1700)
dta h(volume+$1800,volume+$1900,volume+$1a00,volume+$1b00,volume+$1c00,volume+$1d00,volume+$1e00,volume+$1f00)
dta h(volume+$2000)

*----
*- 33 tablice z glosnosciami, kazda po 256 bajtow
*- dla Pokeya, trzeba ustawic 4-bit we wszystkich tablicach
*----
        org $1000

volume  ins 'volume.tab'

*---
        run main

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

25

Odp: a moze by tak SoftSynth 2

tebe: można znacznie przyspieszyć tą procedurę stosując prekalkulację tablic nut.