3 Nie zawsze wina jest programu.1 Na poczātku rzetelnie ostrzegam. Nie oczekuj tutaj jakiegoō super wciāgajācego arta. Dla ludzi przyzwyczajonych do artów o lepszym poziomie polecam inne, na pewno ciekawsze, a dziėki temu zaoszczėdzisz trochė czasu i nerwów. Acha tytuī jest trochė filozoficzny, gdyū tak naprawdė to bėdzie to art w stylu "mój pierwszy raz". Kiedyō chciaīem nauczyź siė asemblera (i ciāgle siė uczė). Zaopatrzyīem siė wiėc w asembler i zaczāīem przepisywaź procedurki z róūnych magazynów komputerowych. Wszystko byīo O. K., dopóki sam nie postanowiīem stworzyź czegoō. Myōlė sobie: nic prostszego, algorytm, przeīoūyź na asembler, skompilowaź i gotowe. I tu siė srogo przeliczyīem. Otóū zaczāīem od rzeczy prostej tzn. otwarcia systemowego ekranu i namalowania na nim jakiegoō prostego rysunku. Algorytm byī bardzo prosty, surówka poszīa jako tako dziėki jednemu z artykuīów w "Amigowcu", ale sam proces kompilacji... Co prawda nie wykazaī on ūadnych bīėdów, jednak po uruchomieniu programu otrzymaīem ramkė znanā wszystkim, mrugajācā sobie wesoīo. Co jest u licha. Przecieū wszystko byīo O. K. Jak siė jednak okazaīo zrobiīem jeden maīy bīād i podaīem zīy adres otwieranego ekranu. Podejōcie drugie, Pass1... Pass2... writeobject, uruchomienie i... Nie teraz juū nie czerwona ramka, a tylko kaszana na ekranie. Sprawdzam surówkā raz, drugi, trzeci i ciāgle wszystko jest w porzādku. Rzuciīem to w przepastnego jak na owe czasy czeluōcie twardziela i zajāīem siė czymō mniej powaūnym (czytaj mordowaniem kosmitów). Jednak sprawa ta nie dawaīa mi spokoju, wiėc któregoō īadnego popoīudnia zaczāīem analizowaź przykīadowe listingi z "Amigowca". Ciāgle nic. Jednak dla chcācego nic trudnego. Wyīāczyīem koōci AGA i wszystko byīo na swoim miejscu bez ūadnej kaszany. Niewiele mi to jeszcze wtedy mówiīo, ale zawsze krok w przód. Jednak póśniej przyszīa wiosna, na dworze ciepīo, wiėc rower poszedī w ruch a asembler w odstawkė. Pod koniec czerwca dokonaīem zakupu ksiāūki o asemblerze. Jakiū byīem dumny gdy po jej lekturze dowiedziaīem siė, iū powodem moich kīopotów z obrazkiem byīa wartoōź modulo. Jeszcze wiėkszā radoōź wzbudziīo u mnie malowanie linii za pomocā coppera (maīa rzecz a cieszy). Dziėki tej ksiāūce poznaīem jako tako copper, z braku konwertera IFF na RAW pomināīem rozdziaī o playfieldzie i rzuciīem siė na blitter. Jednak tu teū potrzebne byīy rysunki w RAW-ie, wiėc domowym sposobem przekonwertowaīem sobie cliparta na RAW (po prostu zapisaīem w PPaint rysunek jako ASCII w dwóch odcieniach szaroōci 1 i 0, a nastėpnie rėcznie dopisywaīem dc.l % (...), % etc.). Wkurzyīem siė przy tym ostro, ale kiedy sobie uōwiadomiīem przy 180 lini obrazka (który miaī ich 256) iū to wszystko mogīem zrobiź przy pomocy makroinstrukcji o maīo nie walnāīem ībem w klawiaturė. Jednak obeszīo siė bez uszczerbku zarówno dla mnie jak i dla komputera. Dalsza konwersja poleciaīa makroinstrukcjā. Umieōciīem ten rysunek pod adresem ekranu, adres ekranu do copperlisty, uruchomiīem copperlistė i po raz kolejny ujrzaīem kaszanė. E, to pewnie modulo, grunt ūe nie ma czerwonej rameczki. Metodā prób i bīėdów ustaliīem modulo i gotowe. Rysunek w caīej okazaīoōci. Postanowiīem przejōź do czegoō ambitniejszego. Moim wyzwaniem staī siė scrol. W pionie nic prostszego, tylko dodawanie po jednej linii, ale w poziomie?? Owszem oōmio punktowy da siė zrobiź, ale jedno punktowy? Z pomocā przyszedī mi blitter. Jednak nie poszīo to tak īatwo: 20 razy skompilowany program zawieszaī komputer, z 30 razy na ekranie oglādaīem kaszanė. Daīem sobie spokój. To na pewno wina asemblera (a wtedy miaīem jednā z najprostszych wersji AsmOne`a). Popiszė do ludzi, na pewno podeōlā mi nowszā wersjė. Oczywiōcie nie zawiodīem siė. Na poczātku dostaīem wersjė demonstracyjnā kompilatora Barfly a nastėpnie nowszā wersjė AsmOne`a. Po prawie miesiėcznej przerwie siadīem znowu do asemblera. Postanowiīem jeszcze raz skompilowaź surówki, lecz mimo tego dalej kaszana na ekranie. Wiėc wydrukowaīem sobie caīā surówkė i spokojnie siadīem z kartkami przed sobā szukajāc bīėdów. Spokojna analiza i jest juū pierwszy, o nastėpny, o jeszcze jeden, po jakie tutaj clr.l (a0). Fakt faktem po 2 godzinach znalazīem teoretycznie wszystkie bīėdy, wiėc "wyrzuciīem" braciszka sprzed komputera i zabraīem siė do wprowadzania zmian. EUREKA! IT`S WORKS!!! Po odtaļczeniu taļca radoōci siadīem przed czymō mniej powaūnym (czyt. jw.). Jednak blitter to nie tylko scrol, to takūe malowanie lini. I tu siė zaczėīy prawdziwe schody. Wydawaīo mi siė, ūe jak juū tyle przeszedīem, to juū mnie nic nie zaskoczy, a jednak. Postanowiīem napisaź algorytm. No tak tylko jak siė do tego zabraź. Ogólnikowe: wyznacz oktan, wpisz odpowiednie wartoōci do rejestrów blittera i wypad, nie zadowalaīo mnie pod ūadnym wzglėdem. Zaczāīem od wyznaczenia oktanu. Na poczātku byīo to krāūenie w kóīko, tak, ūe algorytm zajāī mi 2 kartki A4, a i tak po przeīoūeniu go na asembler nie dziaīaī poprawnie. Druga wersja algorytmu byīa o poīowė chudsza, ale teū nie dziaīaīa poprawnie. Hej, coō jest nie tak. Zajrzaīem do mādrych artykuīów i bardzo proszė. Napisali: "wiėkszoōź koderów dla przyspieszenia swojej procedury maluje linie tylko w jednym kierunku, np. tylko z góry do doīu". No wiėc zabraīem siė do pisania procedurki, która by zamieniaīa wspóīrzėdne odcinka, tak, aby zawsze byī on malowany z góry na dóī. Poszīo mi to bardzo szybko (zaledwie 2 godziny), wiėc zabraīem siė za powtórne pisanie algorytmu wyznaczania oktanów. Teraz byīo lepiej. Mimo iū algorytm nie ulegī skróceniu, to jednak dziaīaī. Tu jednak musiaīem przerwaź moje zapėdy z powodu choroby uczniów, czyli sprawdziany w szkole. Po dwóch tygodniach powróciīem do wyznaczania oktanów. Postanowiīem jeszcze raz napisaź algorytm. Tym razem zajāī on mi zaledwie stronė z zeszytu (jednak lekcje matematyki na coō siė przydajā), a i z jego uruchomieniem nie byīo kīopotów. Oktan byī wyznaczany prawidīowo. Teraz wystarczy wysīaź odpowiednie wartoōci do rejestrów blittera. Pierwsze algorytmy nie mieōciīy siė w rejestrach, kolejne zmniejszaīy swoje zapotrzebowanie na nie. Ostatecznie 8 czy 9 algorytm zmieōciī siė w rejestrach danych, nie wykorzystujāc prawie wcale rejestrów adresowych. Przeīoūenie tego algorytmu na surówkė zajėīo mi "chwilė" (niecaīe 3 godziny), a i tak jego uruchomienie zakoļczyīo siė fiaskiem. Uūyīem sprawdzonej metody: wydrukowaź, sprawdziź, poprawiź. Owszem znalazīem parė bīėdów, ale mimo tego uruchomienie programu koļczyīo siė kaszanā na ekranie. Nie, to nie moūliwe. Na pewno i ta wersja AsmOne`a jest uszkodzona. Trzeba siė rozejrzeź za nastėpnā. Wpadī do mnie wtedy kumpel. Niestety skasowaī on mi parė surówek, za co sklāīem go porzādnie, jednak nie ma tego zīego co by na dobre nie wyszīo. N-te przeīoūenie algorytmu na surówkė poskutkowaīo. Na ekranie zostaī namalowany kwadracik za pomocā blittera. No to czas na animacjė. Cóū to dla mnie, wystarczy zmieniaź tylko co pewien czas wartoōci punktów, tak aby np. obracaīy siė one wokóī jakiejō osi. Po raz kolejny moja duma zostaīa skarcona. Na poczātku postanowiīem wykonaź obrót doōź prymitywnā metodā. Po prostu zapisaīem wszystkie wierzchoīki w tablicy razem z ich obrotami. Pomijajāc sprawė, iū dopiero 5 kompilacja z poprawianiem bīėdów daīa oczekiwany efekt, procedura byīa bardzo prymitywna, a od kumpla dostaīem C&A z opisami jak naleūy wykonywaź obroty "za pomocā" sinusów i cosinusów, wiėc pokusiīem siė o wykorzystanie tego. Podszedīem do tego z pewnym sceptycyzmem. W koļcu moja procedura malowania lini wykorzystuje wszystkie rejestry danych, a tu mam jeszcze jednā procedurė dodaź? Ostatecznie udaīo mi siė rozwiāzaź ten problem poprzez redukcjė rejestrów wykorzystywanych przez procedurė malowania lini, ale czerwona ramka pojawiaīa siė czėsto i gėsto. A propos. Raz udaīo mi siė uzyskaź doōź ciekawy efekt, tzn. komputer malowaī sobie linie na ekranie bez īadu i skīadu, a ja siedziaīem pogrāūony w smutku, czekajāc z niechėciā na ramkė. Jednak ona nie pojawiaīa siė, program dalej pracowaī. Stwierdziwszy niemoūnoōź wyjōcia z programu, nacisnāīem trzy magiczne. Jakieū byīo moje zdziwienie gdy zobaczyīem czerwony ekran. Nie jakāō tam ramkė, a caīy ekran byī czerwony. Co pewien czas dioda POWER zaczynaīa mrugaź, jak przy resecie, a potem znowu czerwono mi... Nie pomógī nawet 30 sec. reset i musiaīem wyīāczyź komputer. Jakaū szkoda iū nie wiem jak ja to zrobiīem (a po raz drugi tego efektu nie udaīo mi siė uzyskaź), gdyū miaībym juū jakiō zaczātek do napisania wirusa. A tak... Ostatecznie jednak udaīo mi siė skompilowaź program i wszystko wydawaīo siė O. K., ale co pewien czas jedna z lini odrywaīa siė od pozostaīych i wėdrowaīa sobie w nicoōź. Wina zostaīa oczywiōcie zrzucona na asembler. Jednak nie dawaīo mi to spokoju. Starā metodā WSP (wydrukuj, sprawdś, popraw) przeanalizowaīem caīā surówkė. Wyglādaīa porzādnie. Po kilkukrotnej analizie udaīo mi siė tylko zoptymalizowaź niektóre czėōci, ale bīėdu i tak nie znalazīem. Postanowiīem skorzystaź wiėc z DEBBUGER`a. Byī to naprawdė bardzo dobry pomysī. Jak siė okazaīo wszelkie przekleļstwa wysīane pod adresem programu asemblujācego okazaīy siė niepotrzebne, a ja z pokorā podchodzė obecnie do kaūdego pisanego programiku, upatrujāc winė w swojej gīupocie, a nie w gīupocie innych. To pozwala uniknāź mi wielu stresów. Chciaībym pogratulowaź wszystkim którzy dotarli do koļca tego arta. Przepraszam jednoczeōnie wszystkich, dla których art byī zbyt nudny, dīugi, gīupawy etc. Jest to jednak mój pierwszy artykuī, wiėc sorry za wszystko. 3CLeveR/Ind.1 P.S. A pisaīem, abyō nie czytaī tego artykuīu... P.S.2. Pass1...Pass2...Uruchomienie... Co?!? Znowu ta czerwona ramka??? Po cholerė mi taki zīy AsmOne. Chyba siādė do Amosa...