3 bajtem najstarszym,¢ a1 - najmodszym)¢ zawieraj⇧ca cz❎③⇨ uamkow⇧ c1 wpisywa-¢ n⇧ do CxIND. Czyli innymi sowy ukad¢ dodaje fizycznie liczb❎ dwubajtow⇧ do¢ czterobajtowej, ale najmodszy bajt¢ adresu to cz❎③⇨ uamkowa, bo wa③ciwy¢ adres znajduje si❎ w starszych 3 baj-¢ tach, zawieraj⇧cych cz❎③⇨ cakowit⇧¢ Tak wi❎c dla uproszczenia budowy uka-¢ du CxIND powinien znajdowa⇨ si❎ tuə¢ przed CxADR, stanowi⇧c z nim jedn⇧¢ cao③⇨ 32-bitowego adresu.¢¢ Bardziej opatologicznie juə nie¢ potrafi❎. Jeəeli masz problemy z tymi¢ uamkami, to zajrzyj do Seriousa o ile¢ dobrze pami❎tam numer #10, gdzie¢ Krger w artku pt. "Siedemnastobitowa¢ arytmetyka" bardzo rzeczowo opisa ten¢ temat.¢¢ Przykadowo odtwarzanie sampla tak,¢ jak jest zapisany w pami❎ci, czyli¢ bajt po bajcie, musi rozpocz⇧⇨ si❎¢ wpisaniem 0 do CxIND, adresu pocz⇧tku¢ sampla do CxADR, adresu koca sampla¢ do CxEND, adresu pocz⇧tku p❎tli do¢ CxREP, i w kocu $0100 do CxFRQ.¢¢¢ Dlaczego aqrat tyle? Bo wtedy uamkowa¢ cz❎③⇨ adresu nie jest w ogle ruszana¢ (dodawanie zera), w kaədym cyklu¢ POVOXa do cakowitej cz❎③ci adresu do-¢ dawane jest 1 (starszy bajt CxFRQ),¢ wi❎c prbki s⇧ puszczane po kolei.¢¢¢ Odtwarzanie sampla oktaw❎ niəej¢ realizuje si❎ przez wpisanie $0080 do¢ CxFRQ, a oktaw❎ wyəej - CxFRQ=$0200.¢¢ Jasne?¢¢ I wszystko byoby pi❎knie, gdyby nie..¢ moja dzika fanaberia ze zmian⇧ go③-¢ no③ci. Domy③lam si❎, əe o ile dodawa-¢ nie moəna zrealizowa⇨ w do③⇨ prosty,¢ dziaaj⇧cy szybko sposb, o tyle uka-¢ d wykonuj⇧cy odpowiednie dzielenia w¢ wystarczaj⇧co krtkim czasie byby¢ chyba zbyt skomplikowany, a nawet je③-¢ li nie, to pewnie zbyt drogi.¢ A w ogle - po co robi⇨ ukad o moəli-¢ wo③ciach arytmetycznych przewyəszaj⇧-¢ cych CPU, tylko do puszczania sampli?¢ No? Dlatego maj⇧c typowo koderski na-¢ wyk tablicowania wszystkiego, co si❎¢ da, proponuj❎ dooəenie EPROMki zawie-¢ raj⇧cej tablice go③no③ci.¢ Jeəeli ustali⇨ 32 poziomy go③no③ci¢ oraz poziom "0" - cisz❎ (jak w Neo),¢ to tablice zajmowayby rwno 8kB, przy¢ czym w tablicach pomijamy ow⇧ cisz❎,¢ bo ukad moəe atwo wykry⇨, əe jest¢ wpisana go③no③⇨ 0 i po prostu bez¢ əadnej zabawy wpisa⇨ 128 do wa③ciwego¢ rejestru COVOXa, ewentualnie rozpozna⇨¢ maksymaln⇧ go③no③⇨ i po prostu prze-¢ pisa⇨ sampla, z pomini❎ciem tablicy.¢¢¢ No i fajnie by byo, gdyby te tablice¢ byy numerowane tak jak w Neo- i Pro-¢ Trackerze, czyli parzystymi numerkami¢ z zakresu 0-64.¢¢ My③l❎, əe jest to jasne. No a je③li¢ nie... to wiesz, co masz robi⇨! ;>¢¢ To tyle opisu szczegowego, a teraz¢ rozpiska algorytmu, ktry miaby¢ realizowa⇨ opisywany interface¢ w kaədym swoim cyklu. Jest taki j❎zyk,¢ ktry nazywa si❎ BASIC. Moim zdaniem¢ jego najlepszym zastosowaniem jest¢ przedstawianie algorytmw w formie¢ krtkiej, zwi❎zej i zrozumiaej.¢ Wi❎c... jak nie znasz BASICa, to...¢ nie wracaj si❎ do podstawwki, tylko¢ czytaj Zientar❎! hehe... ;>¢ Jest mae ale... Otə tym razem¢ zastosuj❎ nieco zmodyfikowany TBXL, bo¢ mamy co③ takiego jak sowa 3-bajtowe¢¢¢ (24 bity), wi❎c odpowiednie dla nich¢ POKE i PEEK to TPOKE i TPEEK, analo-¢ gicznie jak dla 2-bajtowych s⇧ DPOKE¢ i DPEEK. A əe s⇧ teə sowa 4-bajtowe¢ (PEEK(CxIND)+TPEEK(CxADR)*256), to dla¢ uproszczenia zastosujemy do nich inst-¢ rukcj❎ QPOKE i funkcj❎ QPEEK. Jak¢ przebiega adresacja, to juə wiemy.¢¢ . pobranie danych z pami❎ci¢ 10 CPUHALT=1¢ 15 A=PEEK(TPEEK(C°ADR))¢ 20 CPUHALT=0¢¢ . wpisanie do COVOXa¢ 25 IF PEEK(C°VOL)=$40¢ 30 POKE COVOX°,A¢ 35 ELSE¢ 40 POKE COVOX°,VTAB(PEEK(C°VOL) DIV¢ 2,A)¢ ewentualnie:¢ 40 POKE COVOX°,EPEEK(PEEK(C°VOL) DIV¢ 2*128+A)¢ 45 ENDIF¢¢ . aktualizacja adresw¢ 50 QPOKE C°IND,QPEEK(C°IND)+DPEEK(C°FR¢ Q)¢ 55 IF TPEEK(C°ADR)>=TPEEK(C°END) THEN¢ TPOKE C°ADR,TPEEK(C°REP)¢¢ Takie "co③" kopiujemy cztery razy,¢ za "°" podstawiaj⇧c kolejno 1,2,3 i 4.¢ No i par❎ sw komentarza:¢ Do pierwszej cz❎③ci - umwmy si❎, əe¢ stan zmiennej CPUHALT odzwierciedla¢ stan blokady kompa. 1 oznacza, əe¢ praca 6502 jest wstrzymana. Oczywi③cie¢ ANTICa teə. O ile mi wiadomo, 6502 ma¢ moəliwo③⇨ zablokowania przez podanie¢ odpowiedniego sygnau na pin HALT (ty-¢ lko w ATARI), ale z ANTICiem b❎dziecie¢ si❎ chyba musieli troch❎ pom❎czy⇨.¢ Do cz❎③ci drugiej - sprawdzamy, czy¢ go③no③⇨ jest maksymalna, w praktyce¢ wystarczy sprawdzi⇨ stan bitu 6 (li-¢ cz⇧c od 0) - jeəeli jest ustawiony,¢ to go③no③⇨ jest maksymalna, wi❎c¢ przepisujemy prbk❎ prosto do COVOXa.¢¢¢ W przeciwnym razie pobieramy warto③⇨¢ z tablicy w EPROMce, gdzie modszy¢ bajt adresu w EPROM to bajt pobrany¢ z pami❎ci, a starszy skada si❎¢ z bitw 5-1 CxVOL. Funkcja EPEEK odpo-¢ wiada wa③nie za pobranie bajtu¢ z tablicy w EPROM.¢¢ Cz❎③⇨ trzecia jest chyba zrozumiaa.¢ "Dodawaczk❎" (element ALU) na upartego¢ moəna zoəy⇨ nawet z "paru" ;) bramek¢ logicznych.¢¢ Aha. No i jeszcze rejestr CVCTL.¢ Pierwsze, co przychodzi logicznie¢ my③l⇧cemu czowiekowi do gowy, je③li¢ chodzi o kontrol❎ ukadu, to (co jest¢ chyba jasne) jego w⇧czanie i wy⇧cza-¢ nie. Do tego wystarczy jeden dowolny¢ bit tego rejestru. Jeəeli ma wasny¢ zegar, o cz❎stotliwo③ci powiedzmy¢ 31kHz, bo taka jest potrzebna, je③li¢¢¢ odtwarzamy co p linii (dla zaokr⇧-¢ glenia moəna przyj⇧⇨ 32kHz), to kaədy¢ impuls takiego zegara powoduje¢ wykonanie algorytmu, nad ktrego¢ opisaniem tyle si❎ juə napociem, əe¢ mam juə do③⇨... Ale kto③ moəe zechcie⇨¢ wrci⇨ do 15.5 kHz, czyli co 1 lini❎,¢ i przydaaby si❎ moəliwo③⇨ ustawienia¢ takiego trybu, əe odtwarzania prbki¢ powodowaby tylko co drugi impuls.¢ Fanatycy, ktrzy zrealizuj⇧ ultra-¢ szybki ukad mog⇧ wsadzi⇨ zegar 62kHz,¢ a wtedy to nawet grzybiarzom gay¢ wyjd⇧ na wierzch, byleby bya moəli-¢ wo③⇨ redukcji do 31 i 15.5 kHz, ewen-¢ tualnie 20.67kHz (62/3). I to byby¢ jedyny przypadek, gdzie przydaby si❎¢ prosty dzielnik cz❎stotliwo③ci.¢¢ Natomiast jeəeli nie masz ochoty na¢ zabaw❎ z zegarkami i dzielnikami¢ cz❎stotliwo③ci, to mam ciekaw⇧¢ alternatyw❎: jakikolwiek wpis do¢ CVCTL powoduje wykonanie "procedurki".¢¢ I to juə wa③ciwie wszystko.¢¢ Hmm... domy③lam si❎, əe praktyczna¢ realizacja powyəszych postulatw moəe¢ by⇨ trudna, a cay ten "POVOX" moəe¢ mie⇨ rozmiary i cen❎ wi❎ksz⇧ od samego¢ kompa... Ale... To wszystko tylko¢ wymysy mojej wybujaej wyobra♪ni,¢ sprowokowanej przez przygody przy¢ pisaniu procedury odtwarzaj⇧cej sample¢ na COVOXie. W wi❎kszo③ci komputerw¢ ukady odpowiedzialne za generowanie¢ grafiki czy d♪wi❎ku odci⇧əaj⇧ w duəym¢ stopniu procesor w tych dziaaniach,¢ wi❎c dlaczego Atarka miaaby pozosta⇨¢ w tyle?¢¢ Tak w ogle, to zastanawiam si❎, czy¢ moəe to mie⇨ jaki③ sens, skoro Pasiu¢ ci⇧gle udoskonala swoj⇧ "Sodk⇧¢ szesnastk❎" i moəe zamiast pisa⇨ wer-¢ sje dla "POVOXa", zrobibym te same¢ dla 65c816 z zegarem powiedzmy 16MHz,¢ oczywi③cie w trybie natywnym... Co...?¢¢¢ Tylko czy Turbo-816 b❎dzie na tyle¢ dost❎pne? Tak czy inaczej nie zapomn❎¢ nigdy o posiadaczach "starego" COVOXa¢ (jak to adnie brzmi...) i ci⇧gle b❎d⇧¢ mieli nowe moəliwo③ci NeoTracker-a,¢ ale przy cz❎stotliwo③ci 11.7 kHz... :(¢¢ Powodzenia i... miej zabawy :) przy¢ pracy ;> nad "POVOXem" əyczy¢ epi/Allegresse¢¢ pe|es: wiem, əe juə chc❎ o wiele za¢ duəo, ale nie bijcie, dobra? ...¢ Moəe by tak jeszcze POVOX dziaa¢ w drug⇧ stron❎, to znaczy zamiast¢ przepisywa⇨ dane z pami❎ci na wyj③-¢ cie audio, przepisywaby je z wej③-¢ cia (przez przetworniki A/D) do¢ pami❎ci? To by byo cudo. :)¢ ...¢ A! Au! AAAAAAAA! Prosiem, əeby nie¢ bi⇨! Aaauuuu!!! Dooobra... spadam!¢