atarionline.pl PowerGraphics - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1:
         
        CommentAuthorKaz
      • CommentTime10 Jul 2012 18:07 zmieniony
       
      Dostalem plik tego Foxowego programu od Tebe, tam jest instrukcja obslugi, ktora moze sie przydac w kontekscie rozumienia rastrow:

      PowerGraphics 1.0 - instrukcja obsługi

      Nie wiem, czy pisanie tego tekstu ma
      jakikolwiek sens, bo na wstępie muszę
      ostrzec, że programik jest trochę trudny
      w obsłudze. Jeśli dla kogoś jest zbyt
      skomplikowany, to niech go nie używa
      albo się ze mną skontaktuje.
      No a do czego służy takie cudo?
      Ogólnie rzecz biorąc, do tworzenia
      grafiki. A tak naprawdę to program
      ochrzciłem jako asembler graficzny.
      Graficzny - wiadomo, ale dlaczego
      asembler? Ano dlatego, że w asemblerze
      można najwięcej osiągnąć. Tym programem
      da się zrobić prawie wszystko, na co
      pozwala atarowska grafika.

      Jak to działa?
      Po uruchomieniu ekran nie wygląda zbyt
      zachęcająco, no ale cóż...
      Na dole ekranu jest trochę tekstu,
      szczególnie należy zwrócić uwagę na
      napis 'LOAD'. Nie to, żeby był taki
      piękny, ale ponieważ oznacza, że aby
      cokolwiek zrobić, trzeba coś wczytać.
      Tym programem nie można nic narysować!
      Należy mieć wcześniej przygotowany
      rysunek w jednym z następujących
      formatów:
      *.CPR - "Trzmiel" skompresowany
      *.GR8 - "Trzmiel" nieskompresowany
      *.PIC - "Koala"/"XL-Art"
      *.MIC - "Microillustrator"/"Kleks"
      *.PGR - "PowerGraphics"
      Format jest utożsamiany z odpowiadającym
      mu rozszerzeniem nazwy. Jeżeli tak nie
      jest, to zostanie wyświetlony odpowiedni
      komunikat. Tak więc pakujemy dyskietkę
      do stacji 1, wpisujemy nazwę i spacją
      wybieramy format.
      Jeżeli odczyt przebiegł bezbłędnie,
      to znowu zobaczymy czarny ekran.
      W rogu powinien znajdować się napis
      'LINK' oznaczający, że możemy do już
      wczytanego rysunku dołączyć drugi.
      Po co to wszystko? Ano dlatego, że
      niemal wszystkie programy graficzne
      mają rozdzielczość pionową 192 linie.
      Jest to pewne marnotrawstwo, ponieważ
      atarka bez problemu wyświetla 239 linii.
      Aby je wykorzystać, należy narysować
      dwa rysunki: jeden przedstawiający
      górną część obrazka, drugi dolną.
      Najwygodniej, aby obrazki częściowo
      pokrywały się. Nie stanowi to problemu,
      ponieważ PowerGFX automatycznie wykrywa,
      w którym miejscu obrazki nachodzą na
      siebie i prawidłowo je skleja. Należy
      tylko pamiętać, aby obrazki były
      w tym samym formacie oraz aby
      na pierwszym obrazku wykorzystana była
      ostatnia linia, a na drugim pierwsza.
      Nie wykorzystane fragmenty rysunku
      powinny pozostać puste (w kolorze tła!).
      Jeżeli obrazki nie zachodzą na siebie,
      to zostaną umieszczone jeden pod drugim.
      Oczywiście nie ma przymusu, aby
      dołączać drugi rysunek, wyboru
      dokonujemy spacją. 'None'-'żaden'
      oznacza, że wystarczy nam już wczytany
      rysunek. W drugim przypadku należy
      wpisać nazwę pliku (uwaga! w celu
      wymazania starej używamy BackSpace).
      Jeżeli po złączeniu oba obrazki będa
      zajmować więcej niż 239 linii, to
      pokaże się komunikat 'Picture too high'.
      A i jeszcze jedno! Jeżeli wybraliśmy
      format PGR, to nie będzie 'LINK'a, lecz
      od razu przejdziemy do edycji.

      Jeśli szczęśliwie przebrnęliśmy przez
      proces wczytywania, to naszym oczom
      powinien ukazać się nasz obrazek
      na ekranie edycyjnym ('EDIT').
      Niby nic się nie stało, a jednak
      po wczytaniu program wykonał parę
      czynności nad obrazkiem. Jak już
      wcześniej wspomniałem, o ile wczytaliśmy
      dwa obrazki, to zostały sklejone.
      Następne zostały obcięte puste linii,
      to znaczy te, które nie zawierają
      żadnej grafiki. Ponadto jeśli to było
      możliwe, to został zwężony ekran
      (32 zamiast 40 bajtów w linii).
      Obrazek został automatycznie
      wypośrodkowany w pionie.

      Mając wczytany rysunek możemy przystąpić
      do jego obróbki. Zasadniczo pracujemy
      w jednym z dwóch trybów: EDIT oraz INIT,
      między którymi przechodzimy przy pomocy
      klawisza RETURN. Wciskając spację
      możemy obejrzeć ostateczny efekt naszej
      pracy. CTRL-L umożliwia wczytanie
      innego rysunku. CTRL-S powoduje
      przejście do opcji SAVE, w której
      wystarczy wpisać nazwę, aby cały rysunek
      został zapisany w formacie PGR.
      ESC umożliwia rezygnację z LOAD/SAVE,
      w pozostałych sytuacjach powoduje
      powrót do DOSa.

      Najpierw omówimy opcję INIT, do której,
      jak już napisałem, wchodzimy RETURNem.
      Jest to edycja tabeli inicjacji.
      Co to jest, spytasz pewnie? Aby ci to
      wytłumaczyć, muszę ci wyjaśnić, jak
      w ogóle działa ten program. Jeśli
      jesteś koderem, to nie powinno być to
      dla ciebie zbyt skomplikowane.

      Gdyby ktoś nie wiedział, to obraz
      na ekranie nie jest wyświetlany cały
      w jednej chwili, lecz jest tworzony
      linijka po linijce, a każda linia
      od prawej do lewej. Obraz jest tworzony
      przez układy ANTIC i GTIA na podstawie
      zawartości pamięci oraz rejestrów
      sprzętowych. W pamięci są dane o
      kształcie rysunku, duszków itp.,
      a w rejestrach kody kolorów, pozycji
      duszków i takie tam. Wystarczy więc
      wpisać co trzeba tam gdzie trzeba i
      obraz zostanie wyświetlony. Zgoda, ale
      tym sposobem atarowska grafika byłaby
      zwykle czterokolorowa w rozdzielczości
      160*192. A jak to wygląda, to chyba nie
      muszę każdemu przypominać (chociaż
      czasami trafi się ciekawy rysunek...).
      Co robić? Aby uzyskać więcej kolorów i
      duszków należy zatrudnić procesor.
      Wystarczy zmieniać zawartość
      odpowiednich rejestrów w czasie,
      gdy jest wyświetlany obraz.

      Po tym nieco długim i może niepotrzebnym
      wstępie czas na konkrety: jak już
      wspomniałem obraz tworzą ANTIC i GTIA.
      Ten pierwszy pobiera dane z pamięci
      i przesyła je do GTIA. Jego pracą
      steruje głównie program zapisany w
      pamięci, znany jako DL. Jest także kilka
      mniej lub bardziej ważnych rejestrów.
      Dla nas istotny jest tylko jeden:
      DMACTL. Aby nieco uprościć pracę,
      skróciłem jego nazwę do 'DC', podobne
      skróty mają pozostałe rejestry, należące
      do układu GTIA. Trzeba tylko wpisać do
      nich odpowiednie wartości. A jakie?
      Takie, jakie umieścimy w tabeli 'INIT'.
      Teraz wyjaśnię, co oznaczają dziwne
      znaczki w tabeli. Jest tam zapisane,
      jaka wartość ma się znaleźć w każdym
      z rejestrów. Np. zapis 32DC oznacza,
      że do rejestru DC zostanie zapisana
      liczba $32 szesnastkowo. Jedna z liczb
      jest wyróżniona kursorem, który
      przesuwamy strzałkami, ale tylko na
      boki! Przejście do innego wiersza osiąga
      się przez wyjechanie za koniec wiersza,
      w którym jesteśmy. Trochę to niewygodne,
      ale można się przyzwyczaić. Strzałki
      "góry" i "dół" służą do zmniejszania
      lub zwiększania o jeden. Można też
      zwyczajnie wpisać liczbę (dwie cyfry
      hex.). Tutaj pewna uwaga odnośnie
      rejestru DC. Jego starsza (lewa) cyfra
      jest na stałe równa 3. Po prostu nie ma
      potrzeby jej zmieniania. Drugiej cyfry
      też nie możemy ustawić dowolnie. Równa
      zero oznacza wyłączenie obrazu.
      Wartość 1 oznacza obraz wąski,
      2 - szeroki. Szerokość jest automatycz-
      nie ustawiana przez program po wczytaniu
      rysunku. Jeśli do tej liczby dodamy 4,
      to oznacza to włączenie przepisywania
      pocisków z pamięci, 8 odnosi się do
      graczy. Mam nadzieję, że wszyscy wiedzą,
      co to gracze i pociski, bo to nie jest
      temat na ten artykuł. Dla przykładu:
      3EDC oznacza włączony szeroki obraz,
      przepisywanie graczy i pocisków
      ($E=2+4+8). Pozostaje omówić pozostałe
      rejestry:
      P0 - pozycja pozioma gracza 0.
      Uwaga! Można ją ustawić w ten sposób, że
      duszek będzie widoczny na ekranie tylko
      częściowo, albo w ogóle!
      P1,P2,P3 - jw. dla pozostałych graczy
      M0,M1,M2,M3 - jw. dla pocisków
      S0,S1,S2,S3 - szerokość/rozmiar graczy:
      00 - normalna (tak jak GR.15)
      01 - podwójna (jak GR.9)
      03 - poczwórna
      SM - szerokość pocisków. Za każdy pocisk
      odpowiedzialne są dwa bity. Koderzy
      wiedzą, o co chodzi, pozostałym
      proponuję poniższą metodę:
      SM = szerokość pocisku 0 + 4*sz.p.1
      + $10*sz.p.2 + $40*sz.p.3
      gdzie każda szerokość jest ustalana tak,
      jak dla graczy (czyli 0, 1 lub 3)
      G0,G1,G2,G3 - rejestry grafiki graczy
      Jeśli włączyłeś przepisywanie duszków
      w DC, to zawartość Gx nie jest ważna,
      w przeciwnym wypadku określają kształt
      duszka. Duszek ma szerokość 8 pixli,
      każdemu pixlowi odpowiada 1 bit.
      Znowu nie będę się wdawał w szczegółowe
      wyjaśnianie, jeśli dla kogoś jest to
      trudne, to niech się poradzi osoby
      znającej się na tym.
      GM - rejestr grafiki pocisków.
      Pociski mają szerokość 2 pixle,
      bity 0 i 1 odpowiadają pociskowi 0,
      2 i 3 - 1 itd.
      R0,R1,R2,R3 - kolory duszków.
      GC - rejestr kontroli układu GTIA.
      Lewa cyfra określa włączenie dodatkowych
      trybów graficznych: 4-"GR.9" 8-"GR.10"
      C-"GR.11". Dodanie do niej 2 powoduje,
      że w miejscu, gdzie pokrywają się
      duszki 0 i 1 oraz 2 i 3 kolor części
      wspólnej będzie równy wartości OR ich
      kolorów. Możemy dodać też 1, co spowodu-
      je, że pociski będą miały wspólny kolor
      określony w K3 (normalnie pocisk 0 ma
      kolor taki, jak gracz 0 itd.).
      Prawa cyfra określa priorytet duszków,
      czyli to, czy duszki mają przykrywać
      grafikę, czy na odwrót. Można ją dobrać
      doświadczalnie albo zerknąć do odpowied-
      niej literatury.
      K0,K1,K2 - kolory grafiki.
      W rozdzielczości "ósemce" K2 oznacza
      kolor tła, a K1 jasność atramentu,
      K0 jest nieużywany. W "piętnastce"
      wszystkie trzy są odpowiedzialne za
      odpowiednie fragmenty rysunku.
      K3 - jego rola została omówiona przy GC
      K4 - kolor ramki/tła
      To wszystko, co możemy zmienić w 'INIT'.
      Efekty można od razu zaobserwować na
      ekranie.

      Teraz 'EDIT'. Tutaj wpisujemy, jakie
      rejestry zmienić w poszczególnych
      liniach. Odpowiednią linię wybieramy
      naciskając SHIFT oraz strzałki "góra"
      "dół". Po wciśnięciu SHIFT zostanie
      "ucięta" część rysunku poniżej linii,
      w której jesteśmy. Tak więc możemy
      zobaczyć, jak wygląda linia, nad którą
      pracujemy. CTRL  lub  pozwala na
      przeniesienie do pierwszej/ostatniej
      linii (jest ich 240, ostatnia ma numer
      239=$EF). Pewna niedogodność - przy
      skrolowaniu rysunku obraz trochę
      "mruga". Numer linii jest widoczny po
      'L='. Obok tego widnieje napis 'D=',
      który oznacza, jaki rozkaz DL dotyczy
      tej linii. Dalej mamy 'B=', po którym
      jest dwójkowy zapis liczby, na której
      stoi kursor. Poniżej widnieje napis
      w stylu '00A0 00A1 ... 00AM'.
      Oznacza on, jakie wartości dotyczące
      duszków w tej linii znajdują się w
      pamięci. Pamiętaj, że jeśli nie
      włączyłeś przepisywania duszków, to te
      liczby nie będą miały żadnego znaczenia.
      Jeśli jednak je włączyłeś, to wtedy rola
      Ax jest taka, jak Gx z tym, że odnosi
      się tylko do jednej linii. Kursorem
      poruszamy w sposób identyczny, jak w
      'INIT', również tak samo wpisujemy
      liczby. Jeżeli zejdziemy do wiersza
      tekstu poniżej, który na razie jest
      pusty, to okaże się, że tam też możemy
      wpisywać liczby (i nie tylko). Jest to
      obszar, w którym wklepujemy PROGRAM w
      dość specyficznym języku, który jest
      bardzo podobny do asemblera. Ważna jest
      więc znajomość podstaw asemblera.
      Koderzy mogą pominąć następny akapit.

      W procesorze jest kilka rejestrów,
      w których można umieszczać liczby.
      Nas będzie interesował tylko
      najważniejszy, czyli tzw. akumulator.
      Aby wpisać liczbę do jakiegoś rejestru,
      to należy ją najpierw "załadować" do
      akumulatora i dopiero stąd zapisać ją
      do rejestru, przy czym raz załadowaną
      liczbę można wpisać po kolei do kilku
      rejestrów. Instrukcja odpowiedzialna
      za załadowanie liczby do akumulatora
      wygląda tak: LDA #liczba, np. LDA #$3E
      Instrukcja powodująca zapisanie akumula-
      tora brzmi tak: STA gdzie, np. STA $d400
      Poznamy jeszcze jedną bardzo ciekawą
      instrukcję: NOP
      Ta instrukcja po prostu nic nie robi(!).
      Wbrew pozorom nie jest to bezsensowne,
      gdyż "wykonanie" tej instrukcji zabiera
      procesorowi trochę czasu. Otóż
      należałoby powiedzieć, że wykonanie
      innych instrukcji też zajmuje trochę
      czasu. Czas jest mierzony w cyklach.
      LDA # trwa 2 cykle, STA - 4 cykle,
      NOP - 2 cykle. To by było na tyle
      wykładu o asemblerze.

      Jak więc napisać ten program?
      Posługujemy się trzema typami
      instrukcji, dla przykładu:
      00 : tak, tak, te dwa zera to jest
      instrukcja. Powoduje ona wpisanie liczby
      zero do akumulatora. Jest to po prostu
      LDA #$00. Możemy podać dowolną,
      jednobajtową liczbę szesnastkową.
      P0 : a ta instrukcja powoduje zapisanie
      zawartości akumulatora do rejestru P0.
      Odpowiada to instrukcji STA. Nie ma
      potrzeby wpisywania strzałki, należy
      wpisać pierwszą literę, a potem drugą
      (ewentualnie cyfrę).
      -- : instrukcja NOP, uzyskujemy ją
      przez wciśnięcie CLEAR.

      Oprócz wpisywania komend mamy pewne
      (prymitywne) opcje edycyjne:
      INSERT - działa jak CTRL-INSERT
      w edytorze systemowym
      DELETE - jak standardowy CTRL-DELETE
      SHIFT-INSERT - skopiwanie zapisu w tej
      linii do linii poniżej z jednoczesnym
      przejściem do tej linii
      / - zmiana LDA/STA, właściwie to
      nieprzydatna.
      Poprawiania dokonujemy najeżdżając
      w odpowiednie miejsce i wpisując nową
      instrukcję. Warto zauważyć, że czas
      trwania instrukcji jest proporcjonalny
      do tego, ile znaków ona zajmuje
      ('xx' - 2 cykle, 'xx ' - 4, '--' - 2).
      W każdej linii mamy pewną ilość czasu,
      która ogranicza ilość instrukcji, jakie
      możemy wpisać. Trzeba też pamiętać,
      że jeśli zmienimy kolor w połowie
      wyświetlania linii, to kolor zmieni się
      w środku linii. Ten sam kolor można więc
      zmieniać kilkukrotnie uzyskujac więcej
      niż 4 kolory w linii, nie mówiąc już
      o tym, że w każdej linii możemy ustawić
      inne kolory. Możliwa jest także zmiana
      rozdzielczości w środku linii,
      dwukrotne wyświetlenie tego samego
      duszka itp. Efektów możliwych do
      uzyskanie jest naprawdę sporo, chociaż
      wymagają one pewnego nakładu pracy.

      To by było na tyle o obsłudze tego
      skromnego programiku. Jeśli masz
      z nim jakieś problemy, chcesz coś więcej
      wiedzieć, to skontaktuj się ze mną.
      Zrób to także, jeśli udało ci się
      cokolwiek zmajstrować przy pomocy PG.
      Nie będę więcej pisał, bo ten tekst
      i tak jest za długi.

      Program powstał w styczniu 1996.

      Program i instrukcję napisał
      Fox
      01/03/96 18:11(...)


      Program tutaj:
      ->link<-

      A tu fajna plazma z zalaczonych na dyskietce przykladow:

      • 2:
         
        CommentAuthorMaW
      • CommentTime11 Jul 2012 00:07 zmieniony
       
      Kaz, podmień opis na ten (bardziej czytelny):
      PowerGraphics 1.0 - instrukcja obsługi

      Nie wiem, czy pisanie tego tekstu ma jakikolwiek sens, bo na wstępie muszę ostrzec, że programik jest trochę trudny w obsłudze. Jeśli dla kogoś jest zbyt skomplikowany, to niech go nie używa albo się ze mną skontaktuje. No a do czego służy takie cudo? Ogólnie rzecz biorąc, do tworzenia grafiki. A tak naprawdę to program ochrzciłem jako asembler graficzny. Graficzny - wiadomo, ale dlaczego asembler? Ano dlatego, że w asemblerze można najwięcej osiągnąć. Tym programem da się zrobić prawie wszystko, na co pozwala atarowska grafika.

      Jak to działa? Po uruchomieniu ekran nie wygląda zbyt zachęcająco, no ale cóż... Na dole ekranu jest trochę tekstu, szczególnie należy zwrócić uwagę na napis 'LOAD'. Nie to, żeby był taki piękny, ale ponieważ oznacza, że aby cokolwiek zrobić, trzeba coś wczytać. Tym programem nie można nic narysować! Należy mieć wcześniej przygotowany rysunek w jednym z następujących formatów: *.CPR - "Trzmiel" skompresowany *.GR8 - "Trzmiel" nieskompresowany *.PIC - "Koala"/"XL-Art" *.MIC - "Microillustrator"/"Kleks" *.PGR - "PowerGraphics" Format jest utożsamiany z odpowiadającym mu rozszerzeniem nazwy. Jeżeli tak nie jest, to zostanie wyświetlony odpowiedni komunikat. Tak więc pakujemy dyskietkę do stacji 1, wpisujemy nazwę i spacją wybieramy format. Jeżeli odczyt przebiegł bezbłędnie, to znowu zobaczymy czarny ekran. W rogu powinien znajdować się napis 'LINK' oznaczający, że możemy do już wczytanego rysunku dołączyć drugi. Po co to wszystko? Ano dlatego, że niemal wszystkie programy graficzne mają rozdzielczość pionową 192 linie. Jest to pewne marnotrawstwo, ponieważ atarka bez problemu wyświetla 239 linii. Aby je wykorzystać, należy narysować dwa rysunki: jeden przedstawiający górną część obrazka, drugi dolną. Najwygodniej, aby obrazki częściowo pokrywały się. Nie stanowi to problemu, ponieważ PowerGFX automatycznie wykrywa, w którym miejscu obrazki nachodzą na siebie i prawidłowo je skleja. Należy tylko pamiętać, aby obrazki były w tym samym formacie oraz aby na pierwszym obrazku wykorzystana była ostatnia linia, a na drugim pierwsza. Nie wykorzystane fragmenty rysunku powinny pozostać puste (w kolorze tła!). Jeżeli obrazki nie zachodzą na siebie, to zostaną umieszczone jeden pod drugim. Oczywiście nie ma przymusu, aby dołączać drugi rysunek, wyboru dokonujemy spacją. 'None'-'żaden' oznacza, że wystarczy nam już wczytany rysunek. W drugim przypadku należy wpisać nazwę pliku (uwaga! w celu wymazania starej używamy BackSpace). Jeżeli po złączeniu oba obrazki będa zajmować więcej niż 239 linii, to pokaże się komunikat 'Picture too high'. A i jeszcze jedno! Jeżeli wybraliśmy format PGR, to nie będzie 'LINK'a, lecz od razu przejdziemy do edycji.

      Jeśli szczęśliwie przebrnęliśmy przez proces wczytywania, to naszym oczom powinien ukazać się nasz obrazek na ekranie edycyjnym ('EDIT'). Niby nic się nie stało, a jednak po wczytaniu program wykonał parę czynności nad obrazkiem. Jak już wcześniej wspomniałem, o ile wczytaliśmy dwa obrazki, to zostały sklejone. Następne zostały obcięte puste linii, to znaczy te, które nie zawierają żadnej grafiki. Ponadto jeśli to było możliwe, to został zwężony ekran (32 zamiast 40 bajtów w linii). Obrazek został automatycznie wypośrodkowany w pionie.

      Mając wczytany rysunek możemy przystąpić do jego obróbki. Zasadniczo pracujemy w jednym z dwóch trybów: EDIT oraz INIT, między którymi przechodzimy przy pomocy klawisza RETURN. Wciskając spację możemy obejrzeć ostateczny efekt naszej pracy. CTRL-L umożliwia wczytanie innego rysunku. CTRL-S powoduje przejście do opcji SAVE, w której wystarczy wpisać nazwę, aby cały rysunek został zapisany w formacie PGR. ESC umożliwia rezygnację z LOAD/SAVE, w pozostałych sytuacjach powoduje powrót do DOSa.

      Najpierw omówimy opcję INIT, do której, jak już napisałem, wchodzimy RETURNem. Jest to edycja tabeli inicjacji. Co to jest, spytasz pewnie? Aby ci to wytłumaczyć, muszę ci wyjaśnić, jak w ogóle działa ten program. Jeśli jesteś koderem, to nie powinno być to dla ciebie zbyt skomplikowane.

      Gdyby ktoś nie wiedział, to obraz na ekranie nie jest wyświetlany cały w jednej chwili, lecz jest tworzony linijka po linijce, a każda linia od prawej do lewej. Obraz jest tworzony przez układy ANTIC i GTIA na podstawie zawartości pamięci oraz rejestrów sprzętowych. W pamięci są dane o kształcie rysunku, duszków itp., a w rejestrach kody kolorów, pozycji duszków i takie tam. Wystarczy więc wpisać co trzeba tam gdzie trzeba i obraz zostanie wyświetlony. Zgoda, ale tym sposobem atarowska grafika byłaby zwykle czterokolorowa w rozdzielczości 160*192. A jak to wygląda, to chyba nie muszę każdemu przypominać (chociaż czasami trafi się ciekawy rysunek...). Co robić? Aby uzyskać więcej kolorów i duszków należy zatrudnić procesor. Wystarczy zmieniać zawartość odpowiednich rejestrów w czasie, gdy jest wyświetlany obraz.

      Po tym nieco długim i może niepotrzebnym wstępie czas na konkrety: jak już wspomniałem obraz tworzą ANTIC i GTIA. Ten pierwszy pobiera dane z pamięci i przesyła je do GTIA. Jego pracą steruje głównie program zapisany w pamięci, znany jako DL. Jest także kilka mniej lub bardziej ważnych rejestrów. Dla nas istotny jest tylko jeden: DMACTL. Aby nieco uprościć pracę, skróciłem jego nazwę do 'DC', podobne skróty mają pozostałe rejestry, należące do układu GTIA. Trzeba tylko wpisać do nich odpowiednie wartości. A jakie? Takie, jakie umieścimy w tabeli 'INIT'. Teraz wyjaśnię, co oznaczają dziwne znaczki w tabeli. Jest tam zapisane, jaka wartość ma się znaleźć w każdym z rejestrów. Np. zapis 32DC oznacza, że do rejestru DC zostanie zapisana liczba $32 szesnastkowo. Jedna z liczb jest wyróżniona kursorem, który przesuwamy strzałkami, ale tylko na boki! Przejście do innego wiersza osiąga się przez wyjechanie za koniec wiersza, w którym jesteśmy. Trochę to niewygodne, ale można się przyzwyczaić. Strzałki "góry" i "dół" służą do zmniejszania lub zwiększania o jeden. Można też zwyczajnie wpisać liczbę (dwie cyfry hex.). Tutaj pewna uwaga odnośnie rejestru DC. Jego starsza (lewa) cyfra jest na stałe równa 3. Po prostu nie ma potrzeby jej zmieniania. Drugiej cyfry też nie możemy ustawić dowolnie. Równa zero oznacza wyłączenie obrazu. Wartość 1 oznacza obraz wąski, 2 - szeroki. Szerokość jest automatycz- nie ustawiana przez program po wczytaniu rysunku. Jeśli do tej liczby dodamy 4, to oznacza to włączenie przepisywania pocisków z pamięci, 8 odnosi się do graczy. Mam nadzieję, że wszyscy wiedzą, co to gracze i pociski, bo to nie jest temat na ten artykuł. Dla przykładu: 3EDC oznacza włączony szeroki obraz, przepisywanie graczy i pocisków ($E=2+4+8). Pozostaje omówić pozostałe rejestry: P0 - pozycja pozioma gracza 0. Uwaga! Można ją ustawić w ten sposób, że duszek będzie widoczny na ekranie tylko częściowo, albo w ogóle! P1,P2,P3 - jw. dla pozostałych graczy M0,M1,M2,M3 - jw. dla pocisków S0,S1,S2,S3 - szerokość/rozmiar graczy: 00 - normalna (tak jak GR.15) 01 - podwójna (jak GR.9) 03 - poczwórna SM - szerokość pocisków. Za każdy pocisk odpowiedzialne są dwa bity. Koderzy wiedzą, o co chodzi, pozostałym proponuję poniższą metodę: SM = szerokość pocisku 0 + 4*sz.p.1 + $10*sz.p.2 + $40*sz.p.3 gdzie każda szerokość jest ustalana tak, jak dla graczy (czyli 0, 1 lub 3) G0,G1,G2,G3 - rejestry grafiki graczy Jeśli włączyłeś przepisywanie duszków w DC, to zawartość Gx nie jest ważna, w przeciwnym wypadku określają kształt duszka. Duszek ma szerokość 8 pixli, każdemu pixlowi odpowiada 1 bit. Znowu nie będę się wdawał w szczegółowe wyjaśnianie, jeśli dla kogoś jest to trudne, to niech się poradzi osoby znającej się na tym. GM - rejestr grafiki pocisków. Pociski mają szerokość 2 pixle, bity 0 i 1 odpowiadają pociskowi 0, 2 i 3 - 1 itd. R0,R1,R2,R3 - kolory duszków. GC - rejestr kontroli układu GTIA. Lewa cyfra określa włączenie dodatkowych trybów graficznych: 4-"GR.9" 8-"GR.10" C-"GR.11". Dodanie do niej 2 powoduje, że w miejscu, gdzie pokrywają się duszki 0 i 1 oraz 2 i 3 kolor części wspólnej będzie równy wartości OR ich kolorów. Możemy dodać też 1, co spowodu- je, że pociski będą miały wspólny kolor określony w K3 (normalnie pocisk 0 ma kolor taki, jak gracz 0 itd.). Prawa cyfra określa priorytet duszków, czyli to, czy duszki mają przykrywać grafikę, czy na odwrót. Można ją dobrać doświadczalnie albo zerknąć do odpowied- niej literatury. K0,K1,K2 - kolory grafiki. W rozdzielczości "ósemce" K2 oznacza kolor tła, a K1 jasność atramentu, K0 jest nieużywany. W "piętnastce" wszystkie trzy są odpowiedzialne za odpowiednie fragmenty rysunku. K3 - jego rola została omówiona przy GC K4 - kolor ramki/tła To wszystko, co możemy zmienić w 'INIT'. Efekty można od razu zaobserwować na ekranie.

      Teraz 'EDIT'. Tutaj wpisujemy, jakie rejestry zmienić w poszczególnych liniach. Odpowiednią linię wybieramy naciskając SHIFT oraz strzałki "góra" "dół". Po wciśnięciu SHIFT zostanie "ucięta" część rysunku poniżej linii, w której jesteśmy. Tak więc możemy zobaczyć, jak wygląda linia, nad którą pracujemy. CTRL  lub  pozwala na przeniesienie do pierwszej/ostatniej linii (jest ich 240, ostatnia ma numer 239=$EF). Pewna niedogodność - przy skrolowaniu rysunku obraz trochę "mruga". Numer linii jest widoczny po 'L='. Obok tego widnieje napis 'D=', który oznacza, jaki rozkaz DL dotyczy tej linii. Dalej mamy 'B=', po którym jest dwójkowy zapis liczby, na której stoi kursor. Poniżej widnieje napis w stylu '00A0 00A1 ... 00AM'. Oznacza on, jakie wartości dotyczące duszków w tej linii znajdują się w pamięci. Pamiętaj, że jeśli nie włączyłeś przepisywania duszków, to te liczby nie będą miały żadnego znaczenia. Jeśli jednak je włączyłeś, to wtedy rola Ax jest taka, jak Gx z tym, że odnosi się tylko do jednej linii. Kursorem poruszamy w sposób identyczny, jak w 'INIT', również tak samo wpisujemy liczby. Jeżeli zejdziemy do wiersza tekstu poniżej, który na razie jest pusty, to okaże się, że tam też możemy wpisywać liczby (i nie tylko). Jest to obszar, w którym wklepujemy PROGRAM w dość specyficznym języku, który jest bardzo podobny do asemblera. Ważna jest więc znajomość podstaw asemblera. Koderzy mogą pominąć następny akapit.

      W procesorze jest kilka rejestrów, w których można umieszczać liczby. Nas będzie interesował tylko najważniejszy, czyli tzw. akumulator. Aby wpisać liczbę do jakiegoś rejestru, to należy ją najpierw "załadować" do akumulatora i dopiero stąd zapisać ją do rejestru, przy czym raz załadowaną liczbę można wpisać po kolei do kilku rejestrów. Instrukcja odpowiedzialna za załadowanie liczby do akumulatora wygląda tak: LDA #liczba, np. LDA #$3E Instrukcja powodująca zapisanie akumula- tora brzmi tak: STA gdzie, np. STA $d400 Poznamy jeszcze jedną bardzo ciekawą instrukcję: NOP Ta instrukcja po prostu nic nie robi(!). Wbrew pozorom nie jest to bezsensowne, gdyż "wykonanie" tej instrukcji zabiera procesorowi trochę czasu. Otóż należałoby powiedzieć, że wykonanie innych instrukcji też zajmuje trochę czasu. Czas jest mierzony w cyklach. LDA # trwa 2 cykle, STA - 4 cykle, NOP - 2 cykle. To by było na tyle wykładu o asemblerze.

      Jak więc napisać ten program? Posługujemy się trzema typami instrukcji, dla przykładu: 00 : tak, tak, te dwa zera to jest instrukcja. Powoduje ona wpisanie liczby zero do akumulatora. Jest to po prostu LDA #$00. Możemy podać dowolną, jednobajtową liczbę szesnastkową. P0 : a ta instrukcja powoduje zapisanie zawartości akumulatora do rejestru P0. Odpowiada to instrukcji STA. Nie ma potrzeby wpisywania strzałki, należy wpisać pierwszą literę, a potem drugą (ewentualnie cyfrę). -- : instrukcja NOP, uzyskujemy ją przez wciśnięcie CLEAR.

      Oprócz wpisywania komend mamy pewne (prymitywne) opcje edycyjne: INSERT - działa jak CTRL-INSERT w edytorze systemowym DELETE - jak standardowy CTRL-DELETE SHIFT-INSERT - skopiwanie zapisu w tej linii do linii poniżej z jednoczesnym przejściem do tej linii / - zmiana LDA/STA, właściwie to nieprzydatna. Poprawiania dokonujemy najeżdżając w odpowiednie miejsce i wpisując nową instrukcję. Warto zauważyć, że czas trwania instrukcji jest proporcjonalny do tego, ile znaków ona zajmuje ('xx' - 2 cykle, 'xx ' - 4, '--' - 2). W każdej linii mamy pewną ilość czasu, która ogranicza ilość instrukcji, jakie możemy wpisać. Trzeba też pamiętać, że jeśli zmienimy kolor w połowie wyświetlania linii, to kolor zmieni się w środku linii. Ten sam kolor można więc zmieniać kilkukrotnie uzyskujac więcej niż 4 kolory w linii, nie mówiąc już o tym, że w każdej linii możemy ustawić inne kolory. Możliwa jest także zmiana rozdzielczości w środku linii, dwukrotne wyświetlenie tego samego duszka itp. Efektów możliwych do uzyskanie jest naprawdę sporo, chociaż wymagają one pewnego nakładu pracy.

      To by było na tyle o obsłudze tego skromnego programiku. Jeśli masz z nim jakieś problemy, chcesz coś więcej wiedzieć, to skontaktuj się ze mną. Zrób to także, jeśli udało ci się cokolwiek zmajstrować przy pomocy PG. Nie będę więcej pisał, bo ten tekst i tak jest za długi.

      Program powstał w styczniu 1996.

      Program i instrukcję napisał Fox 01/03/96 18:11(...)
      (po podmianie mój post usuń :-) )
      • 3: CommentAuthormono
      • CommentTime11 Jul 2012 10:07
       
      "Gdyby ktoś nie wiedział, to obraz
      na ekranie nie jest wyświetlany cały
      w jednej chwili, lecz jest tworzony
      linijka po linijce, a każda linia
      od prawej do lewej."
      A nie od lewej do prawej?
      • 4: CommentAuthorxxl
      • CommentTime11 Jul 2012 11:07
       
      z tego wynika, ze artek byl dyktowany w cieply letni dzien, wydekoltowana kobieta pisala. autor stal za monitorem, nachylony w strone komputera... i wszystko jasne.
      • 5:
         
        CommentAuthorjhusak
      • CommentTime11 Jul 2012 11:07 zmieniony
       
      Gdyby arabowie wynaleźli telewizję, to tak by niestety było...
      • 6:
         
        CommentAuthorlarek
      • CommentTime11 Jul 2012 12:07
       
      Może to była arabska wersja Atari? ;)
      • 7:
         
        CommentAuthoradv
      • CommentTime11 Jul 2012 12:07
       
      Dawno nic mnie tak nie wciągnęło, jak czytanie tej instrukcji. Jest napisana w przystępny sposób - to raz, nie jestem normalny - do dwa.
      • 8:
         
        CommentAuthorjhusak
      • CommentTime11 Jul 2012 12:07
       
      Dla niektórych wydekoltowana kobieta oznacza pytanie: Czy dało by się ją zaemulować na Atari?
      • 9:
         
        CommentAuthorKaz
      • CommentTime11 Jul 2012 13:07
       
      xxl - to byl 1 marca 1996 roku, godzina wieczorna, wiec raczej nie moglo byc cieplo. Reszta sie zgadza ;)
      • 10: CommentAuthor0xF
      • CommentTime12 Jul 2012 15:07
       
      Pomylenie kierunków zauważył Dracon jeszcze w latach '90. :)