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

  1. ¢         NeoTracker - co i jak?¢¢                 Praca konkursowa¢               ____________________¢   By  sobie  magazyn  dyskowy. Nazywa ¢ si❎ Serious Magazine. Gdzie③ w numerze¢ jedenastym, Wielce  Szanowna  Redakcja¢ tegoə Magazynu og osi a konkurs...¢   Temat dowolny, forma dowolna, ma by⇨¢ o Atari i... najlepsze z najlepszych.¢¢  (to nie redakcja  og osi a  konkurs,¢  tylko ja, Zenon/DIAL, a Jager macza ¢  w tym swoje palce)¢¢   W czym wi❎c problem? Hehe... hmmm...¢ ee... no... tego... nie mia em əadnego¢ pomys u :( ...  A  Redaktor  Naczelny,¢ dobry przyjaciel nas wszystkich, a mj¢ szczeglnie,  napisa    do  mnie:  "No¢ a konkurs w Seriousie?  chyba tego nie¢ odpu③cisz?". Nie  mog em  wi❎c zawie③⇨¢ przyjaciela. Ca e wakacje my③la em, co¢ by tu przygotowa⇨. Moəe jaki③ modu ek,¢¢ ale  z  drugiej  strony...  mam  tylko¢ jeden, niezbyt dobry, no i ma pj③⇨ na¢ msx-compo  na  party... A po party by ¢ juə  kompletny  d , bo wena mnie kom-¢ pletnie opu③ci a. Ale, ale...¢¢   Z  nieco  innej  beczki.  Par❎  razy¢ rozmawiali③my  z  Pinokiem o tym, jaka¢ ta  Inertia i jaki ten ProTracker jest¢ be i w ogle. A bo  co③tam  mu d uəsze¢ modu ki  si❎ sypi⇧. A bo nie obs uguje¢ podkatalogw i w dodatku  tylko  kilka¢ modu w na jednym dysku. A on  ma HDD,¢ wi❎c go to boli. I ja go rozumiem...¢   A chcia em co③  takiego napisa⇨. Ale¢ by  jeden problem: sk⇧d taki nieuk jak¢ ja moəe wiedzie⇨, jak odtwarza⇨ sample¢ z rən⇧  cz❎stotliwo③ci⇧? Aə wstyd si❎¢ przyzna⇨,  jakie   absurdalne  pomys y¢ przychodzi y mi do g owy, zanim...¢   nadszed  TEN dzie: 12.08.07d2...¢   W  nocy z soboty  na  niedziel❎  nie¢ mog em zasn⇧⇨ i mniej wi❎cej o wp  do¢ trzeciej, po dwch godzinach  przewra-¢¢ cania si❎ z boku na bok...  Wpad em na¢ tak prost⇧ rzecz,  əe  teraz wstyd si❎¢ przyzna⇨, əe kocz⇧c 16 lat o niej nie¢ wiedzia em. O sssooo choozzziii? ;)¢   Przypomnia   mi  si❎  wtedy  artyku ¢ Krgera "Siedemnastobitowa arytmetyka"¢ a dok adniej...  u amki  binarne. Boəe¢ na  wysokim  niebie,  czemu  ja  na to¢ wcze③niej nie wpad em?!  Przecieə əeby¢ odtwarza⇨ sample z rən⇧ cz❎stotliwo③-¢ ci⇧, wystarczy zwi❎ksza⇨ adres aktual-¢ nie odtwarzanej prbki nie co 1, tylko¢ o mniejsze lub wi❎ksze warto③ci, cz❎s-¢ to nieca kowite, a w a③ciwa cz❎stotli-¢ wo③⇨ odtwarzania pozostaje sta a!¢ No... dobra, to  wiedzia em  juə nieco¢ wcze③niej,  aə  taki g upi nie jestem.¢ Tylko  əe we  bie mi si❎ nie mie③ci o,¢ jak moəna  dodawa⇨ u amki z tak⇧ szyb-¢ ko③ci⇧, əeby cz❎stotliwo③⇨ odtwarzania¢ nie  powodowa a  odruchu zwanego przez¢ X-Ray'a (gtx!) "zamykaniem uszu".  Jak¢ by to  uj❎ y  osoby  pokroju koleəanek¢ mojej siostry: "Obciach po maksie!"¢¢¢   Kiedy tylko si❎ obudzi em,  zacz⇧ em¢ robi⇨ tablice  cz❎stotliwo③ci, pche k❎¢ w QA, əeby potwierdzi⇨ oczywist⇧ hipo-¢ tez❎ i  kiedy  uda o  mi  si❎  odpali⇨¢ melodyjk❎ na  samplu w 15kHz, to  ci③-¢ nienie tak mi podskoczy o, əe  pisa em¢ na pe nych obrotach przez dwa tygodnie¢ aə wreszcie  skoczy em. Jednak  zanim¢ skoczy em, mia em  troch❎ przygd. Od¢ pocz⇧tku:¢¢   Nast❎pnego  dnia  mia em  juə  kilka¢ procek,   ekran  i  przede   wszystkim¢ nazw❎: NEOTRACKER. Poniewaə  poet⇧ nie¢ jestem, wi❎c na nic  lepszego nie by o¢ mnie sta⇨. Zmys   estetyczny  teə  mam¢ w⇧t y (ale mam! ;)) i dlatego  program¢ wygl⇧da, tak  jak  wygl⇧da.  Spieszy o¢ mi  si❎,  bo  w   tzw.  "mi❎dzyczasie"¢ wpad em  na kolejny genialny pomys ...¢ Oto jest  moja  praca  na konkurs naj-¢ poczytniejszego  maga  na  Atari!  Ale¢ wtedy dosta em "spida"... ;)¢¢   Dnia 15.08.07d2, czyli, jak  to  si❎¢ mwi,  w  ③rod❎  wieczorem,  nast⇧pi o¢ pierwsze  odpalenie modu ku w NeoTrac-¢ kerze.  MASAKRA  -  cz❎stotliwo③⇨   co¢ pi❎⇨  linii... 3.1kHz. Gratulacje. Ale¢ si❎ nie  podda em. Ca y tydzie ci❎əko¢ pracowa em, aby  przyspieszy⇨ j⇧ przy-¢ najmniej do 11kHz, bo kiedy postawi em¢ pierwsze LDA w  kodzie  Neo, zawzi⇧ em¢ si❎,  əe   b❎dzie  to  cacuszko,  wi❎c¢ jakbym   nie   przebi   cz❎stotliwo③ci¢ odtwarzania  z  Inertii,  to chyba bym¢ si❎   powiesi .  Tyle  roboty  i  taka¢ plama? Po kolei wi❎c wywalam wszystkie¢ ③mieci: adresowanie  po③rednie, jakie③¢ liczniki, w  kocu  ca o③⇨  l⇧duje  na¢ stronie zerowej, kontrol❎  naci③ni❎cia¢ spacji  doda em  do  przerwania taktu-¢ j⇧cego (czyli do czego③, co w "normal-¢ nych"  atarowskich  tracker-ach nazywa¢ si❎ "player-em co ramk❎"), duəa  cz❎③⇨¢ danych jest pobierana w trybie natych-¢ miastowym   (niech   əyje    assembler¢ i automodyfikacja!) ...¢¢   Kiedy  doszed em do 10.95kHz, ci⇧gle¢ by em  pewien,  əe  moəna  wi❎cej. Ale¢ nie mia em pomys w. Odpali em Inerti❎¢ wcisn⇧ em  SELECT+RESET, potem RETURN.¢ szukam playerka sampli w kodzie. Jest.¢ Be. Co  zobaczy em? Dok adnie to samo,¢ co u mnie, tylko gorzej, bo w Neo tak-¢ towanie  juə  by o na przerwaniu, a IP¢ po  prostu  odlicza  do  $D8,  po czym¢ wywo uje "ramk❎". Strata czasu.  Profi¢ wida⇨  da   si❎  zwie③⇨  nie  do koca¢ prawdziwej   teorii,   əe   od ⇧czenie¢ przerwa  przyspiesza  dzia anie prog-¢ ramu.  Umiej❎tne  wykorzystanie przer-¢ wania pozwala zaoszcz❎dzi⇨ sporo czasu¢ na  odliczaniu.   Wystarczy  podmieni⇨¢ zawarto③⇨ wektora NMIVEC...¢   W   niedziel❎   wieczorem   przysz o¢ kolejne  ol③nienie.  Zaraz! Po  co mam¢ porwnywa⇨  adres   prbki  z  adresem¢ koca  sampla,  skoro wystarczy go tak¢ umie③ci⇨,  aby  ostatni  bajt  by  pod¢ $7FFF, a przekroczenie  przez  starszy¢ bajt  adresu  warto③ci  $7F  spowoduje¢¢ ustawienie bitu N rejestru znacznikw.¢ A wi❎c... jedno BPL i  k opot z g owy!¢ B ogos awiony  niech  b❎dzie  ten, kto¢ ustawi   pami❎⇨  dodatkow⇧ w  obszarze¢ $4000-$7FFF!  Chociaə...  Gdyby   by a¢ w $8000-$BFFF, to moəna by  zastosowa⇨¢ podobny trik. Jak? Zgadnijcie sami! :)¢   Ostatecznie  na  pocz⇧tku nast❎pnego¢ tygodnia  procedura  odtwarzaj⇧ca by a¢ juə   kompletna,  a   wygl⇧da a   tak:¢ (listing dla X-Assemblera 2.5)¢¢         opt   h-¢         org   $00     ;cykli  suma¢¢ songpsl lda   #0         2    2¢ t1bnk   equ   *-1¢         sta   ^31        4    6¢         lda   #0         2    8¢ t1ind   equ   *-1¢         adc   #0         2    10¢ t1frq_l equ   *-1¢         sta   z:t1ind    3    13¢         lda   z:t1iadr   3    16¢         adc   #0         2    18¢ t1frq_h equ   *-1¢         sta   z:t1iadr   3    21¢         bcc   play1      3/4  24/25¢         inc   z:t1iadr+1 5    29¢         bpl   play1      3/4  32/33¢         lda   #0         2    34¢ t1rep_l equ   *-1¢         sta   z:t1iadr   3    37¢         lda   #0         2    39¢ t1rep_h equ   *-1¢         sta   z:t1iadr+1 3    42¢         jmp   spslt2     3    œŒ¢ play1   ldx   $4000      4    29/37¢ t1iadr  equ   *-2¢         lda   $d800,x    4    33/41¢ t1vol_  equ   *-1¢         sta   $d600      4    øÃ/œŒ¢ t1pflg  equ   *-1¢¢   I jeszcze  trzy  razy  dla kolejnych¢ trzech   kana w  (kaədy  zaczyna  si❎¢ od  etykiety  spslt°, gdzie ° to numer¢ kana u)  to  samo, oraz na samym kocu¢ jmp songpsl zajmuj⇧ce 3 cykle.¢   Algorytm, z ktrego wynika tre③⇨ tej¢ p❎telki  jest  opisany  w innym artku,¢ tutaj  ogranicz❎  si❎  do  opisu samej¢ procki.¢¢   Kolejne etykiety oznaczaj⇧:¢¢ songpsl - pocz⇧tek p❎tli odtwarzaj⇧cej¢   sample w oknie song (dla paternw¢   i pojedynczych sampli s⇧ osobne¢   procki)¢ t1bnk - kod banku na danej ③cieəce¢ t1ind - u amkowa cz❎③⇨ adresu¢ t1frq_l/h - okres d♪wi❎ku wzgl❎dem¢   cz❎stotliwo③ci bazowej¢ t1rep_l/h - adres pocz⇧tku p❎tli¢ spslt2 - pocz⇧tek fragmentu obs ugu-¢   j⇧cego kolejn⇧ ③cieək❎¢ play1 - tu zaczyna si❎ w a③ciwa¢   "odtwarzarka" ;)¢ t1iadr - adres prbki¢ t1ivol_ - adres tablicy g o③no③ci¢   (od $D800 zaczyna si❎ tablica dla¢   vol=$00 i tak co stron❎ aə do $F000,¢   gdzie jest tablica dla vol=$40)¢¢ t1pflg - jeəeli ③cieəka jest wy ⇧czo-¢   na, to tutaj zamiast $d6 program¢   wpisuje $FF, əeby na tej ③cieəce nic¢   nie gra o, a jednocze③nie əeby nie¢   traci⇨ czasu na sprawdzanie innych¢   zmiennych (ma gra⇨, czy nie?)¢¢   W ostatniej kolumnie z prawej strony¢ cykle s⇧ sumowane, ostateczne warto③ci¢ po  zakoczeniu  dzia ania  tej cz❎③ci¢ p❎tli s⇧ odpowiednio wyrənione. Wida⇨¢ wi❎c, əe  pojedynczy kana  jest obs u-¢ giwany w  czasie øàlub œŒ cykli, przy¢ czym  ta   druga   warto③⇨   wyst❎puje¢ ③rednio  raz  na  jakie③  190 wywo a.¢ Zaleəy  to  od  wysoko③ci  sampli   na¢ poszczeglnych  kana ach  i od pozycji¢ pocz⇧tku  p❎tli. Liczby te s⇧ wyra♪nie¢ mniejsze  niə w Inertii, mniejsza jest¢ teə rənica  mi❎dzy nimi, dzi❎ki czemu¢ cz❎stotliwo③⇨ odtwarzania jest wi❎ksza¢ i  bardziej  stabilna.  A  ile wynosi?¢ W sumie  procedura  zajmuje 4*37+3=õŒõ¢ cykli.  Raz  na  owo  statystyczne 190¢¢¢ moəe  mie⇨  4*45+3=õÕø  cykle.   Zegar¢ procesora  ma  w ci⇧gu sekundy õÃÃÕœã㢠cykle, tak  wi❎c  cz❎stotliwo③⇨ powta-¢ rzania  si❎  naszej  p❎tli to oko o...¢¢¢     190*1778400/(189*151+183) Hz¢¢¢ (mam nadziej❎, əe sposb wyprowadzenia¢ wzoru jest dla wszystkich jasny)¢¢   czyli... uwaga, uwaga...¢¢               õõÃÀœáז·¢¢   A  wi❎c  moəemy  przyj⇧⇨, əe jest to¢ 11.7 kHz. W tym momencie mnie zatka o,¢ bo na potrzeby tego opisu przelicza em¢ cykle  i  cz❎stotliwo③⇨  jeszcze   raz¢ i okaza o si❎, əe wcze③niej pope ni em¢ b ⇧d, uznaj⇧c, əe cz❎stotliwo③⇨ wynosi¢ 11.3 kHz. Szok. Ale bardzo mi y :)¢¢¢   To tyle  odno③nie samego odtwarzania¢ sampli.  Pozosta e "sztuczki", ktrych¢ opis wedle regulaminu jest "wskazany",¢ nie s⇧ juə tak spektakularne.¢   Procedura play_song odpowiedzialna¢ za odtwarzanie muzyki przenosi p❎tl❎¢ odtwarzaj⇧c⇧ na stron❎ zerow⇧, od ⇧cza¢ ROM  i  przerwania,  inicjuje zmienne,¢ ustawia  wektor przerwa NMI na  adres¢ pocz⇧tku  playera  i w ⇧cza przerwanie¢ VBLANK.¢   Player jest wywo ywany na przerwaniu¢ VBLANK, bezpo③rednio z wektora NMIVEC.¢ Na  samym  pocz⇧tku procka zapami❎tuje¢ zawarto③⇨    akumulatora.    Nast❎pnie¢ sprawdza,  czy  wci③ni❎to  spacj❎,  co¢ oznacza əe naleəy przerwa⇨ odgrywanie.¢ Nast❎puje wtedy przej③cie do procedury¢ kocz⇧cej odgrywanie - zdejmuje ona ze¢ stosu warto③⇨ akumulatora oraz 3 bajty¢ dla RTI, przywraca  poprzedni⇧  zawar-¢ to③⇨   strony   zerowej,   w ⇧cza  ROM¢ i przerwania oraz resetuje klawiatur❎.¢¢   Jeəeli spacja nie zosta a wci③ni❎ta,¢ to w  dalszej  cz❎③ci zmniejszany jest¢ licznik kontroluj⇧cy tempo odtwarzania¢ muzyki, jeəeli  osi⇧gnie zero, to jest¢ on ustawiany na aktualn⇧ warto③⇨ tempa¢ i rozpoczyna si❎ dekodowanie paternw,¢ ktre  nie   jest   jako③  szczeglnie¢ interesuj⇧ce  pod  wzgl❎dem "trickw".¢ Charakterystyczne  jest  tylko  to, əe¢ jeəeli nast⇧pi o przej③cie do kolejnej¢ linii w paternach (po kaədym wyzerowa-¢ niu  licznika), to na kocu  procedury¢ przerwania playera ze stosu zdejmowane¢ s⇧  cztery   bajty  (akumulator   oraz¢ F i PC-1 dla RTI) i  nast❎puje skok do¢ pocz⇧tku    procedury    odtwarzaj⇧cej¢ sample (songpsl = $00).  Dlaczego? Ano¢ dlatego, əe wywo anie przerwania mog o¢ wyst⇧pi⇨  np.  w  po owie  zwi❎kszania¢ adresw  na ktrym③ kanale, a w czasie¢ tego  przerwania na tym kanale pojawi ¢ si❎  nowy  d♪wi❎k i jego  adres zosta ¢ umieszczony  w  procedurze.  Tak  wi❎c¢ kocowym  efektem braku takiego zabez-¢¢ pieczenia  b❎dzie w najlepszym wypadku¢ "pykanie" w g o③nikach. W najgorszym -¢ mog yby  pojawi⇨  si❎  "zgrzyty". Sk⇧d¢ wiem? Gdybym tego nie zaobserwowa , to¢ zabezpieczenia tego by nie by o. :)¢   Normalne  wyj③cie z procedury przer-¢ wania (PLA, RTI) nast❎puje tylko je③li¢ licznik  taktuj⇧cy   odtwarzanie   nie¢ osi⇧gn⇧  jeszcze zera.¢   Wszystkie te cuda napisa em sam,  za¢ wyj⇧tkiem  procedury wykrywaj⇧cej  XMS¢ autorstwa  Foxa/TQA  (Syzygy #7). Moja¢ jako③  nie  chcia a dzia a⇨ na kompach¢ z pami❎ci⇧  poniəej 1MB... ;) a brak o¢ mi czasu na szukanie pluskwy.¢   I to  juə  chyba wszystkie szczeg y¢ techniczne dotycz⇧ce  nowinek obecnych¢ w  NeoTrackerze.  Sam  program wraz ze¢ szczeg ow⇧  instrukcj⇧  zosta  oddany¢ na r❎ce  Naczelnego, wi❎c powinien by⇨¢ gdzie③  w  plikach  ze stuff'em. Je③li¢ nie ma - odpowiada za to redakcja. Nie¢ mnie jest  dane decydowa⇨ o zawarto③ci¢ dyskw z zinem.¢¢¢   Wiecie juə chyba,  əe  stali③cie si❎¢ ofiarami  mojej   nudy  i  sp♪nionego¢ geniuszu? ;) ... hmm...¢ Do  programu   mia    by⇨   pierwotnie¢ do ⇧czony jeszcze program NeoPlayer do¢ odtwarzania  modu w .NEO i .MOD  oraz¢ pche ka do konwersji MODw  na  format¢ NeoTrackera.  Niestety,  za s abo  si❎¢ stara em.  W  kocu zacz❎ a si❎ szko a¢ i wszystko  trafi   szlag.  Ale ci⇧gle¢ pracuj❎ - kompletne archiwum (Neo 1.0)¢ b❎dzie dost❎pne juə nied ugo, a kolej-¢ ne, duəo  bardziej  rozbudowane wersje¢ juə... tuə tuə :) ...¢¢¢   A pki  co  mi ej  zabawy  i  rwnie¢ ciekawych  do③wiadcze,  jak  te  przy¢ pisaniu NeoTrackera, əyczy¢¢¢                        epi/Allegresse¢