home *** CD-ROM | disk | FTP | other *** search
/ Serious Magazine 12 / Serious_Magazine_12_2003_01_07_Dial_pl_Side_A.atr / wyzwanie._12 < prev    next >
Text File  |  2023-02-26  |  21KB  |  1 lines

  1. ¢¢        Wyzwanie dla elektronika¢       --                      --¢         --                  --¢           --     ---      --¢¢   "O co mu znowu chodzi?"¢   Hmm... niby proste... a jednak.¢¢¢¢   Sprawa  przedstawia si❎ nast❎puj⇧co:¢ Pisz⇧c   NeoTracker-a,  mwi⇧c  wprost¢ i bez  fa szywej skromno③ci, doszed em¢ do  granic  moəliwo③ci  Atarki. Czy to¢ ♪le, czy  dobrze - pozostawiam  waszej¢ indywidualnej  ocenie. Wed ug  mnie to¢ bardzo  ♪le, bo...  S uch mj nie jest¢ na  pewno genialny, ale na tyle czu y,¢ əe mog❎ bez  əadnych problemw stwier-¢ dzi⇨,  əe 11.7 kHz to  zdecydowanie za¢ ma o i  po  prostu  razi  to  odczucia¢ estetyczne kaədego  cz owieka obdarzo-¢ nego  jakimkolwiek s uchem. Gorzej, əe¢¢ programowo wi❎cej wycisn⇧⇨ si❎ nie da.¢ Jeəeli mi  nie wierzycie, to spytajcie¢ bardziej  do③wiadczonych i zas uəonych¢ koderw,   cho⇨by   Fox-a   -  mistrza¢ w  liczeniu  cykli.  `rd wka  procki¢ odtwarzaj⇧cej  sample  z  NeoTracker-a¢ jest rozebrana  na  czynniki  pierwsze¢ w  ktrym③  z  artyku w w tym numerze¢ (mam  nadziej❎...),  wi❎c  b❎dzie mia ¢ podstaw❎ do os⇧du.¢¢   Dlatego  po  ca ym tygodniu m❎ki nad¢ wyciskaniem  wody  (a w a③ciwie cykli)¢ z  procedurki   odtwarzaj⇧cej   sample¢ w  wyəej  wymienionym  programie,  juə¢ dok adnie  wiedzia em,  czego w Atarce¢ brakuje.¢   Ale najpierw  ma a  dygresja: Drodzy¢ Koderzy! Czy  nie  wkurza  was  to, əe¢ wszystkim  musicie  zajmowa⇨  si❎  Wy,¢ tylko  dlatego, əe projektanci uk adw¢ specjalizowanych w  Atarce  byli  zbyt¢ leniwi i wi❎kszo③⇨  zada  zrzucili na¢ 6502?! Mnie  teə  to wkurzy o, dlatego¢¢ przedstawiam   pomys    uk adu,  ktry¢ odci⇧əy   CPU  przy  niezwykle  praco-¢ ch onnym  odgrywaniu  sampli.  Nazywa⇨¢ si❎ to moəe POKEY8, COVOX-2 albo POVOX¢ czy  jak  tam  kto  woli. W opisie dla¢ porz⇧dku  b❎d❎  uəywa   tej  ostatniej¢ nazwy, bo  jest  najkrtsza. Tak  wi❎c¢ okre③lenie   "COVOX"   oznacza   cz❎③⇨¢ uk adu odpowiedzialn⇧ za samo  genero-¢ wanie d♪wi❎ku, czyli  cztery  8-bitowe¢ przetworniki  D/A, a "POVOX"  to  ca y¢ hipotetyczny  uk ad, o ktrym  jest tu¢ mowa,    ⇧cznie  z   samym   COVOX-em.¢ A poniewaə  uk ad  ten  ma  zast❎powa⇨¢ procedurk❎ wykonywan⇧ cyklicznie, wi❎c¢ dzia anie odpowiadaj⇧ce  jednokrotnemu¢ wykonaniu  takiej  procki nazwiemy juə¢ na   wst❎pie  "cyklem  POVOX-a",  əeby¢ potem unikn⇧⇨ niedomwie, przyd ugich¢ opisw, itd.¢¢   Poniewaə  sam na warsztatach z elek-¢ troniki   zamiast   lutowa⇨   cyfrwk❎¢ maluj❎  sto y,  to   jestem   zmuszony¢¢ pom❎czy⇨   elektronikw,   ktrych  na¢ naszej  scenie  wcale  nie  jest  ma o¢ i w  dodatku  trzymaj⇧  niewiarygodnie¢ wysoki  poziom. Jak  widz❎, co  tworz⇧¢ np.  Pasiu  albo   Zenon,  to  w asnym¢ oczom  nie  wierz❎, wi❎c  postanowi em¢ pu③ci⇨   wodze  fantazji  i  da⇨  Wam,¢ mistrzowie  lutownicy i "odcycacza" ;)¢ zaj❎cie na d ugie jesienne (moəe nawet¢ zimowe) wieczory.¢   Na  tyle, na  ile przez te kilka lat¢ posiadania  kompa spod znaku gry Fuji¢ dowiedzia em   si❎  co  nieco  o  jego¢ budowie   oraz  o  dzia aniu   rənych¢ uk adw elektronicznych, postaram  si❎¢ mniej wi❎cej naprowadzi⇨ potencjalnego¢ projektanta  takiego  uk adu  na takie¢ rozwi⇧zania,   jakie    moim   zdaniem¢ sprawdzi yby  si❎  najlepiej.  Ale, əe¢ elektronik  ze  mnie  marny,  wi❎c  to¢ wykonawca  b❎dzie mia  ostatnie s owo.¢ Rwnieə   w    sprawie     ochrzczenia¢ interface'u  jak⇧③   d♪wi❎czn⇧  nazw⇧.¢ Byle efekty  dzia ania by y takie same¢¢      Wi❎c... do rzeczy!¢¢    Pomys  jest taki:¢¢   Uk adzik, ktry  sam b❎dzie pobiera ¢ z pami❎ci  odpowiednie dane i wpisywa ¢ je do COVOXa. ⑧eby  by o  trudniej, to¢ powinien   jeszcze   obs ugiwa⇨   ca ⇧¢ dodatkow⇧ pami❎⇨  (podstawow⇧ zostawmy¢ w spokoju) z  pomini❎ciem  CPU i o ile¢ to  moəliwe  takəe  PIA, a  takəe  sam¢ przelicza⇨  adresy  (24-bitowe) kolej-¢ nych bajtw sampli. ⑧eby by o  jeszcze¢ trudniej, to  niech  ma  w asny zegar,¢ əeby granie by o dobrze  zsynchronizo-¢ wane  w czasie,  nawet  przy w ⇧czonym¢ ekranie  i   aktywnych   przerwaniach.¢ No i oczywi③cie  dobrze by by o, gdyby¢ by  kompatybilny ze starym COVOXem.¢   Ale  to  nie wszystko. :> Maksymalny¢ czas  trwania  jednego  cyklu  to  p ¢ linii ekranu (57 taktw CPU), a CPU ma¢ by⇨ od ⇧czany TYLKO NA CZAS POBIERANIA¢ DANYCH  z  pami❎ci  przez  POVOX.  Jak¢¢  atwo  zgadn⇧⇨,  wskazane jest rwnieə¢ od ⇧czanie  ANTICa  na  t⇧ chwilk❎, bo¢ a nuə  widelec  kto③ pu③ci sample przy¢ w ⇧czonym ekranie i moəe  pokaza⇨  si❎¢ sieczka.  POVOX  ma  dzia a⇨  zupe nie¢ niezaleənie od reszty uk adw, wstrzy-¢ muj⇧c ich  dzia anie, je③li korzystaj⇧¢ one z pami❎ci.¢   Czyli  oglnie  ma  by⇨ to  uk ad do¢ odtwarzania  sampli z dowoln⇧  cz❎sto-¢ tliwo③ci⇧, z pami❎ci "wypoəyczanej" od¢ reszty  uk adw jako z w asnego bufora¢ adresowanego  samodzielnie  na  szynie¢ adresowej  o  szeroko③ci  zaleənej  od¢ ilo③ci   pami❎ci   rozszerzonej.  Taki¢ POKEY, tylko əe zamiast na syntetykach¢ 4-bitowych gra na 8-bitowych samplach.¢ I  wcale   do   tego   nie  potrzebuje¢ zaawansowanych  dzielnikw  cz❎stotli-¢ wo③ci!  Dlaczego?  O  tym nieco niəej.¢ A teraz...¢   Najpierw  przedstawi❎ swoj⇧ propozy-¢ cj❎  rozk adu  rejestrw POVOX-a (jest¢ ich od groma i troch❎...):¢  adres nazwa   znaczenie¢ --------------------------------------¢ $D600 COVOX1  sygna  na ③cieəce¢               pierwszej (po oəenie¢               membrany)¢ $D601 COVOX2  sygna  na ③cieəce 2¢ $D602 COVOX3  sygna  na ③cieəce 3¢ $D603 COVOX4  sygna  na ③cieəce 4¢¢ do tej pory jest tak samo jak w starym¢ COVOXie. A wyimaginowany uk ad ma wpi-¢ sywa⇨ do tych rejestrw to, co trzeba,¢ korzystaj⇧c z kolejnych rejestrw:¢¢ $D604 C1IND u amkowa cz❎③⇨ adresu¢             w C1IADR ($D605)¢ $D605 C1ADR adres prbki - ③cieəka 1¢             (3 bajty, ale 20 bitw¢             chyba wystarczy, pod¢             $D605 - najm odszy bajt,¢             $D607 - najstarszy)¢ $D608 C1END adres koca prbki¢ $D60B C1REP adres pocz⇧tku p❎tli¢ $D60E C1FRQ cz❎stotliwo③⇨ na ③cieəce 1¢ $D610 C1VOL g o③no③⇨ na ③cieəce 1¢   i dalej w tej  samej  kolejno③ci  to¢ samo dla kolejnych ③cieəek. Na  koniec¢ potrzebny jest jeszcze jeden  rejestr,¢ nazwijmy go CVCTL, do kontroli uk adu,¢ ktrej  temat  rozwin❎  jeszcze  nieco¢ p♪niej, a  tymczasem  wyt umacz❎,  co¢ znacz⇧  niezrozumia e  skrty  my③lowe¢ w powyəszej tabelce.¢   W dalszych  opisach  nazwy rejestrw¢ b❎d❎  zapisywa   z  x-em  oznaczaj⇧cym¢ ③cieək❎, ktr⇧  rejestr ten obs uguje.¢ Np. CxVOL moəe oznacza⇨  C1VOL, C2VOL,¢ C3VOL jak i C4VOL, ale poniewaə nie ma¢ to wp ywu na sam  algorytm, wi❎c, əeby¢ go  nie  zaciemnia⇨, po prostu numerek¢ ukry em.¢   Co do rejestrw, to mam ma ⇧ pro③b❎:¢ by oby  niezmiernie  mi o, gdyby przy-¢ najmiej  rejestry  COVOXx i CxADR da y¢ si❎ odczytywa⇨. Po co? Bo przy pisaniu¢ programu  obs uguj⇧cego   takie  cudo,¢ moəna si❎  pokusi⇨ o bajerki. Pobiera-¢ j⇧c dane z COVOXx robi si❎ oscyloskop,¢ a z CxADR - wska♪nik  aktualnie odgry-¢ wanej prbki.¢¢   A teraz  "kilka" ;) s w o adresowa-¢ niu  pami❎ci  przez  POVOXa.  Jest  to¢ z punktu widzenia  kodera  szczeglnie¢ waəna  rzecz,  əeby  by o  tak, a  nie¢ inaczej  (chyba,  əe   kto③   znajdzie¢ lepszy sposb), dlatego si❎ tak okrut-¢ nie rozpisa em. Jak na mj gust, to ta¢ metoda jest teə chyba naj atwiejsza do¢ praktycznego zrealizowania.¢   Adres  aktualnie  odtwarzanego bajtu¢ sampla naleəy rozumie⇨ nast❎puj⇧co:¢¢       bajt3    bajt2    bajt 1¢      CxADR+2  CxADR+1  CxADR¢     ----------------------------¢      ....xxxx xxyyyyyy yyyyyyyy¢¢   Spacje s⇧ tylko po to, əeby rozdzie-¢ li⇨  pojedyncze  bajty od siebie. Bity¢ ukryte  pod  igrekami   tworz⇧   adres¢ odtwarzanego  bajtu  wzgl❎dem pocz⇧tku¢ adresu  banku  dodatkowej pami❎ci  dla¢ CPU ($4000), a owe banki s⇧ numerowane¢ za  pomoc⇧ bitw ukrytych  pod  x-ami.¢¢¢   Bitw tych w przyk adzie jest sze③⇨,¢ co daje  64  banki  (1 MB)  dodatkowej¢ pami❎ci,  ale   ilo③⇨   wykorzystanych¢ bitw powinna by⇨ dobrana w zaleəno③ci¢ od ilo③ci pami❎ci w danym kompie.¢   Banki powinny by⇨ numerowane zgodnie¢ z bitami  portu B,  to  znaczy: jeəeli¢ w  porcie B znacz⇧ce  s⇧  cztery  bity¢ (+256kB),  np.  6,5,3 i 2, to  powinny¢ one  odpowiada⇨  bitom  CxADR  w  taki¢ sposb:¢¢      7ÀŒ4øØ10                 PORTB¢       ⁿⁿ ⁿⁿ¢ ......°° °°yyyyyy yyyyyyyy    CxADR¢  bajt 3    bajt 2    bajt 1¢¢   Bity  ukryte  pod  kropkami nie maj⇧¢ wp ywu na prac❎ uk adu.¢   Jeəeli  w kompie jest 1MB (64 banki,¢ czyli 6 bitw prze ⇧czaj⇧cych Portu B,¢ zazwyczaj: 7,6,5,3,2 i 1), to  przypo-¢ rz⇧dkowanie wygl⇧da tak:¢      ÃÀŒ4øØõ0                 PORTB¢      ⁿⁿⁿ »ⁿⁿ¢  ....°°°° °°yyyyyy yyyyyyyy   CxADR¢   bajt 3   bajt 2   bajt 1¢¢   Czyli wykorzystywane jest tylko tyle¢ bitw  x,  ile  jest  aktywnych  bitw¢ prze ⇧czaj⇧cych PORT B.¢   Na  tej  samej  zasadzie  podaje si❎¢ adresy w CxADR, CxREP i CxEND.¢¢   Proste, prawda?¢¢   Dlaczego  tak  namota em  przy  tych¢ x-ach?  Bo  jeəeli omijamy PIA, to nie¢ podajemy  juə   numeru  banku  jak  do¢ PORTu B  przy   normalnym  adresowaniu¢ jak CPU,  tylko  traktujemy  dodatkow⇧¢ pami❎⇨ jakby by a ci⇧g ym, pojedynczym¢ buforem   karty    d♪wi❎kowej,   gdzie¢ przechowywane  s⇧  sample i adresujemy¢¢ ca ⇧  przestrze  tej pami❎ci od razu,¢ a nie bankami. Podzia  jest zasadniczo¢ wyimaginowany i s uəy tylko temu, əeby¢   koder w symbiozie z  procesorem  nie¢ pogubili si❎ przy adresowaniu. Dlatego¢ kolejno③⇨ bankw powinna by⇨ logicznie¢ powi⇧zana z  kolejno③ci⇧  obszarw  po¢ $4000  bajtw  w  pami❎ci POVOXa. Naj-¢ w a③ciwsze   rozwi⇧zanie,  to  w a③nie¢ tablica, w ktrej numery bankw u oəo-¢ ne b❎d⇧ w kolejno③ci  rosn⇧cej. Jeəeli¢ chcemy  wiedzie⇨,  do   ktrego  banku¢ musimy si❎ odwo a⇨, aby uzyska⇨ dost❎p¢ do okre③lonego  adresu pami❎ci POVOXa,¢ bierzemy  cz❎③⇨  tego  adresu  opisan⇧¢ x-ami  i  traktujemy  j⇧  jako  indeks¢ w tej  tablicy. Wtedy  procesor ZAWSZE¢ b❎dzie  mg  uzyska⇨ dost❎p do w a③ci-¢ wego miejsca w pami❎ci.¢   Czyli  adres  dla  tego  interface'u¢ moəe   wygl⇧da⇨   np.   tak:   $02E1F5¢ (binarnie: %00101110000111110101), ale¢ CPU, əeby odpowiedni bajt zaadresowa⇨,¢ b❎dzie  musia  z tego adresu wydzieli⇨¢¢ numer banku  (%001011),  na  jego pod-¢ stawie pobra⇨ z tablicy kod  banku dla¢ PIA, pozosta ⇧ cz❎③⇨ (%10000111110101)¢¢ doda⇨ do $4000 (bitowe OR), aby otrzy-¢ ma⇨   adres   wewn⇧trz   banku,  czyli¢ %0110000111110101 - po ludzku $61F5.¢¢   Przy  takim  adresowaniu  nie trzeba¢ si❎   bawi⇨  w  prze ⇧czanie   bankw,¢ prbki mog⇧ mie⇨ wi❎c dowoln⇧ d ugo③⇨,¢ ograniczon⇧  tylko  ilo③ci⇧ dodatkowej¢ pami❎ci. POVOX  adresuje  ca ⇧  pami❎⇨¢ nie   zwracaj⇧c  uwagi  na podzia   na¢ banki, CPU dalej korzysta z niej przez¢ PORT  B  i  obszar  $4000-$7FFF,  wi❎c¢ w  zasadzie  wszystko  dzia a tak, jak¢ do tej pory.¢¢   Po  takim    opatologicznym   opisie¢ wszystko powinno by⇨ jasne. Jeəeli nie¢ jest - id♪  na  piwo, wytrze♪wiej, id♪¢ na  piwo,  wy③pij   si❎,  wytrze♪wiej,¢ wypij  dwie  szklanki  wody mineralnej¢ niegazowanej,  zjedz   co③   syc⇧cego,¢¢ odprowad♪  z  organizmu   niepotrzebne¢ substancje i w  pe ni skupiony i wypo-¢¢ cz❎ty zacznij czytanie od linii numer¢ jeden. Jeəeli  dalej nie rozumiesz, to¢ wr⇨  si❎  do  podstawwki.  Po  kilku¢ (-nastu) latach moəe zrozumiesz. ;>¢¢   A Ci, ktrzy zrozumieli, mog⇧ z dum⇧¢ i rozkosz⇧  rozpocz⇧⇨ dalsze czytanie.¢¢   Poniewaə  POVOX  ma  zast❎powa⇨ ca ⇧¢ procedurk❎ odtwarzania sampli,  ⇧cznie¢ z ich  zap❎tlaniem, wi❎c po doj③ciu do¢ adresu  okre③lonego  w CxEND, powinien¢ wstawia⇨ adres pocz⇧tku p❎tli CxREP do¢ CxADR.¢¢   Jak  wiadomo,  aby  odtwarza⇨ sample¢ z  rən⇧  cz❎stotliwo③ci⇧,  naleəy  po¢ przepisaniu   odpowiedniej   danej  do¢ rejestru  COVOXa,    naleəy  zwi❎kszy⇨¢ adres o pewn⇧ sta ⇧ warto③⇨, od ktrej¢ zaleəy  wysoko③⇨  d♪wi❎ku. Warto③⇨  ta¢ bardzo cz❎sto  ma "co③" po  przecinku,¢ st⇧d rejestr CxIND okre③laj⇧cy u amko-¢ w⇧ cz❎③⇨  adresu, ktrej  warto③⇨  nie¢¢¢ ma  wp ywu  na  to,  sk⇧d pobierane s⇧¢ dane.  Rejestr  CxFRQ  rwnieə zawiera¢ liczb❎ w takim zakamuflowanym zmienno-¢ (a w a③ciwie sta o- bo przecinek  stoi¢ zawsze  mi❎dzy  sidmym a smym bitem)¢ przecinkowym  formacie,  gdzie m odszy¢ bajt oznacza  cz❎③⇨ u amkow⇧, dodawan⇧¢ do CxIND w kaədym przebiegu, a starszy¢ jest  dodawany  do  najm odszego bajtu¢ CxADR. Proste, prawda?¢   Symbolicznie moəna zapisa⇨ dzia ania¢ przy  dodawaniu  adresw w nast❎puj⇧cy¢ sposb:¢              x3x2x1.y1¢             +    z2.z1¢        ----------------¢              a3a2a1.c1¢¢ x3x2x1  to  zawarto③⇨  rejestru CxADR,¢ gdzie  x3  to  bajt najstarszy, a x1 -¢ najm odszy. y1 to CxIND,  czyli u amek¢ w adresie, z1  to  m odszy bajt CxFRQ,¢ z2 to  bajt  starszy.¢¢¢ Teraz chyba jest to zrozumia e.  Wyni-¢ kiem jest liczba a3a2a1, wpisywana  do¢ CxADR (a3 bajtem najstarszym,¢        a1 - najm odszym)¢ zawieraj⇧ca cz❎③⇨ u amkow⇧ c1 wpisywa-¢ n⇧ do CxIND.  Czyli innymi s owy uk ad¢ dodaje fizycznie liczb❎ dwubajtow⇧  do¢ czterobajtowej,  ale  najm odszy  bajt¢ adresu to cz❎③⇨ u amkowa, bo  w a③ciwy¢ adres znajduje si❎ w starszych  3 baj-¢ tach, zawieraj⇧cych   cz❎③⇨  ca kowit⇧¢ Tak wi❎c dla uproszczenia budowy uk a-¢ du CxIND powinien  znajdowa⇨  si❎  tuə¢ przed  CxADR,  stanowi⇧c  z nim  jedn⇧¢ ca o③⇨ 32-bitowego adresu.¢¢   Bardziej   opatologicznie   juə  nie¢ potrafi❎. Jeəeli  masz problemy z tymi¢ u amkami, to zajrzyj do Seriousa o ile¢ dobrze   pami❎tam   numer  #10,  gdzie¢ Krger w artku  pt. "Siedemnastobitowa¢ arytmetyka" bardzo rzeczowo opisa  ten¢ temat.¢¢   Przyk adowo  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  koca  sampla¢ do CxEND,  adresu  pocz⇧tku  p❎tli  do¢ CxREP,  i  w  kocu  $0100  do  CxFRQ.¢¢¢ Dlaczego aqrat tyle? Bo wtedy u amkowa¢ cz❎③⇨ adresu  nie jest w ogle ruszana¢ (dodawanie   zera),  w  kaədym   cyklu¢ POVOXa do ca kowitej cz❎③ci adresu do-¢ dawane  jest  1  (starszy bajt CxFRQ),¢ wi❎c  prbki  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 by oby pi❎knie, gdyby nie..¢   moja dzika fanaberia ze zmian⇧ g o③-¢ no③ci. Domy③lam si❎,  əe o ile dodawa-¢ nie moəna zrealizowa⇨ w  do③⇨  prosty,¢ dzia aj⇧cy szybko sposb, o tyle uk a-¢ d wykonuj⇧cy odpowiednie  dzielenia  w¢ wystarczaj⇧co   krtkim  czasie  by by¢ chyba zbyt skomplikowany, a nawet je③-¢ li nie, to pewnie zbyt drogi.¢ A w ogle - po co robi⇨ uk ad 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❎ do oəenie EPROMki zawie-¢ raj⇧cej tablice g o③no③ci.¢ Jeəeli ustali⇨  32  poziomy  g o③no③ci¢ oraz poziom  "0" - cisz❎  (jak w Neo),¢ to tablice zajmowa yby rwno 8kB, przy¢ czym w tablicach pomijamy  ow⇧  cisz❎,¢ bo  uk ad  moəe   atwo wykry⇨, əe jest¢ wpisana  g o③no③⇨  0  i po  prostu bez¢ əadnej zabawy wpisa⇨ 128 do w a③ciwego¢ rejestru COVOXa, ewentualnie rozpozna⇨¢ maksymaln⇧ g o③no③⇨ i po prostu  prze-¢ pisa⇨ sampla, z  pomini❎ciem  tablicy.¢¢¢ No i fajnie by by o, gdyby  te tablice¢ by y 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 szczeg owego, a teraz¢ rozpiska   algorytmu,   ktry   mia by¢ realizowa⇨     opisywany     interface¢ w kaədym swoim cyklu. Jest taki j❎zyk,¢ ktry  nazywa  si❎ BASIC. Moim zdaniem¢ jego  najlepszym  zastosowaniem   jest¢ przedstawianie   algorytmw  w  formie¢ krtkiej, zwi❎z ej i zrozumia ej.¢ Wi❎c... jak  nie  znasz  BASICa, to...¢ nie  wracaj  si❎ do podstawwki, tylko¢ czytaj Zientar❎! hehe... ;>¢   Jest  ma e  ale...  Otə  tym  razem¢ zastosuj❎ nieco zmodyfikowany TBXL, bo¢ mamy co③ takiego jak  s owa  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ə s owa 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 adresw¢ 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❎ s w komentarza:¢   Do pierwszej cz❎③ci - umwmy 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 sygna u na pin HALT (ty-¢ lko w ATARI), ale z ANTICiem b❎dziecie¢ si❎ chyba musieli troch❎ pom❎czy⇨.¢   Do  cz❎③ci drugiej - sprawdzamy, czy¢ g o③no③⇨  jest  maksymalna, w praktyce¢ wystarczy  sprawdzi⇨  stan bitu 6 (li-¢ cz⇧c od 0) -  jeəeli  jest  ustawiony,¢ to   g o③no③⇨  jest  maksymalna,  wi❎c¢ przepisujemy  prbk❎ prosto do COVOXa.¢¢¢ W przeciwnym  razie  pobieramy warto③⇨¢ z tablicy  w  EPROMce,  gdzie  m odszy¢ bajt adresu w EPROM  to  bajt  pobrany¢ z  pami❎ci,  a  starszy   sk ada   si❎¢ z bitw 5-1 CxVOL. Funkcja EPEEK odpo-¢ wiada   w a③nie   za   pobranie  bajtu¢ z tablicy w EPROM.¢¢   Cz❎③⇨ trzecia jest chyba zrozumia a.¢ "Dodawaczk❎" (element ALU) na upartego¢ moəna z oəy⇨  nawet z "paru" ;) bramek¢ logicznych.¢¢   Aha.  No  i  jeszcze  rejestr CVCTL.¢ Pierwsze,  co   przychodzi   logicznie¢ my③l⇧cemu cz owiekowi do  g owy, je③li¢ chodzi o kontrol❎  uk adu, to (co jest¢ chyba jasne) jego w ⇧czanie i wy ⇧cza-¢ nie. Do tego  wystarczy  jeden dowolny¢ bit tego  rejestru. Jeəeli  ma  w asny¢ 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   ktrego¢ opisaniem  tyle  si❎ juə napoci em, əe¢ mam juə do③⇨... Ale kto③ moəe zechcie⇨¢ wrci⇨  do 15.5 kHz, czyli co 1 lini❎,¢ i przyda aby si❎  moəliwo③⇨ ustawienia¢ takiego  trybu, əe  odtwarzania prbki¢ powodowa by  tylko  co  drugi  impuls.¢ Fanatycy,  ktrzy   zrealizuj⇧  ultra-¢ szybki uk ad mog⇧ wsadzi⇨ zegar 62kHz,¢ a  wtedy  to  nawet  grzybiarzom  ga y¢ wyjd⇧ na wierzch, byleby  by a  moəli-¢ wo③⇨  redukcji do 31 i 15.5 kHz, ewen-¢ tualnie  20.67kHz (62/3). I  to  by by¢ jedyny przypadek, gdzie przyda by  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ə w a③ciwie wszystko.¢¢   Hmm... domy③lam si❎,  əe  praktyczna¢ realizacja  powyəszych postulatw moəe¢ by⇨ trudna, a  ca y  ten  "POVOX" moəe¢ mie⇨ rozmiary i cen❎ wi❎ksz⇧ od samego¢ kompa...   Ale...  To  wszystko  tylko¢ wymys y  mojej   wybuja ej  wyobra♪ni,¢ sprowokowanej  przez   przygody   przy¢ pisaniu procedury odtwarzaj⇧cej sample¢ na  COVOXie. W  wi❎kszo③ci  komputerw¢ uk ady  odpowiedzialne  za generowanie¢ grafiki czy d♪wi❎ku  odci⇧əaj⇧ w duəym¢ stopniu  procesor w tych  dzia aniach,¢ wi❎c dlaczego Atarka  mia aby pozosta⇨¢ w tyle?¢¢   Tak w ogle, to zastanawiam si❎, czy¢ moəe to mie⇨  jaki③  sens, skoro Pasiu¢ ci⇧gle   udoskonala   swoj⇧    "S odk⇧¢ szesnastk❎" i moəe  zamiast pisa⇨ wer-¢ sje  dla  "POVOXa",  zrobi bym 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... mi ej 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 dzia a ¢   w drug⇧ stron❎, to znaczy zamiast¢   przepisywa⇨ dane z pami❎ci na wyj③-¢   cie audio, przepisywa by je z wej③-¢   cia (przez przetworniki A/D) do¢   pami❎ci? To by by o cudo. :)¢ ...¢  A ! Au! AAAAAAAA! Prosi em, əeby nie¢   bi⇨! Aaauuuu!!! Dooobra... spadam!¢