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 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 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
     
    "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
     
    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 zmieniony
     
    Gdyby arabowie wynaleźli telewizję, to tak by niestety było...
    • 6:
       
      CommentAuthorlarek
    • CommentTime11 Jul 2012
     
    Może to była arabska wersja Atari? ;)
    • 7:
       
      CommentAuthoradv
    • CommentTime11 Jul 2012
     
    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
     
    Dla niektórych wydekoltowana kobieta oznacza pytanie: Czy dało by się ją zaemulować na Atari?
    • 9:
       
      CommentAuthorKaz
    • CommentTime11 Jul 2012
     
    xxl - to byl 1 marca 1996 roku, godzina wieczorna, wiec raczej nie moglo byc cieplo. Reszta sie zgadza ;)
    • 10: CommentAuthor0xF
    • CommentTime12 Jul 2012
     
    Pomylenie kierunków zauważył Dracon jeszcze w latach '90. :)