PISZEMY DEMOKolory - co wiemy, a czego jeszcze nie wiemyColpm0 - Colpm3 ($D012-$D015) Colpf0 - Colpf3 ($D016-$D019) Colbak ($D01A) oraz odpowiadające im cienie: Colpm0s - Colpm3s ($2C0-$2C3) Colpf0s - Colpf3s ($2C4-$2C7) Colbaks ($2C8) Nazwy te są o tyle logiczne, że kojarzą się z pełnymi angielskimi nazwami rejestrów, np. Colbaks (COLor BAcKground Shadow register). Rejestr Colbak we wszystkich trybach ANTICa określa kolor tła. W trybach $02, $03, $OF ANTIC-a punkt "zgaszony" przyjmuje kolor z rejestru Colpf2, natomiast punkt "zapalony" kolor z Colpf2 a jasność z Colpf1. W innych trybach dwukolorowych, czyli w trybach $09, $0B i $0C punkt "zgaszony" przyjmuje kolor z Colbak, a punkt "zapalony" z rejestru Colpf0. W czterokolorowych trybach $08, $0A, $0D i $0E ANTICa kolory "zapalonych" punktów wybierane są z rejestrów Colpf0-Colpf2 a punkty zgaszone (czyli tło) przyjmują kolor Colbak. W trybach tekstowych $06 i $07 ANTIC'a kolor wszystkich pixeli znaku jest wybierany według dwóch najstarszych bitów znaku z rejestrów Colpf0-Colpf3. W pozostałych tekstowych trybach $04 i $05 znaki są wielokolorowe. Kolory poszczególnych pixeli ustalane są według rejestrów Colbak i Colpf0-Colpf2. Ustawiony bit 7 numeru znaku spowoduje ustalenie kolorów pixeli według rejestrów Colbak, Colpf0, Colpf1 i Colpf3. Jak widać w trybach tych można osiągnąć pięcio-kolorowe znaki, lub po przedefiniowaniu zestawu znaków - dokładną pięciokolorową grafikę. Dlatego też tryby te wykorzystywane są w grach, np. we Fredzie i Misji. Dodatkowe tryby graficzne
Tryby $09-$0B OS są jedynymi trybami wielokolorowymi. W trybie $09 OS kolor pixeli pobierany jest z rejestru Colbak. Tylko w tym trybie możliwe jest uzyskanie 16 odcieni tego samego koloru w jednej linii ekranu. Przy umiejętnym połączeniu tego trybu z przerwaniem Display List możliwe jest osiągnięcie 256 kolorów na raz na ekranie, co prezentuje poniższy program: Program Equ $8800 List_mem Equ %00000ll0 List_err Equ %00000l01 Code_mem Equ %00010000 Code_dsk Equ %00100000 Colbak Equ $D01A Dliv Equ $0200 Dlptrs Equ $0230 Gtictls Equ $026F Nmien Equ $D40E Wsync Equ $D40A Pomoc Equ $F0 Pomoc2 Equ $F2 Opt List_err+Code_mem Org Program LdxOd etykiety DList znajduje się Display List. Bajty między etykietami Przep i Wpisz tworzą rząd prostokątów w tym samym kolorze o różnych odcieniach. Dane pamięci obrazu umieszczone są od etykiety Dane_o. Po uruchomieniu program powiela część Display List tak, aby ANTIC mógł wyświetlić 16 rzędów prostokątów. W każdym rzędzie prostokątów wywoływane jest przerwanie Display List (etykieta Przerw) modyfikujące rejestr Colbak. W trybie $0A OS maksymalnie można osiągnąć dziewięć różnych barw o różnych jasnościach i kolorach wykorzystując wszystkie rejestry kolorów. Natomiast w trybie $0B jasność pixeli pobierana jest z rejestru Colbak. Tylko w tym trybie możliwe jest więc uzyskanie 16 kolorów w tych samych jasnościach. Gracze i pociskiDmactl a PMGOrganizacja pamięciPowyższy rysunek przedstawia organizację pamięci PMG (rysunek wykonano przy pomocy Panthera). Pmbase na rysunku oznacza numer strony, od początku które) znajduje się pamięć dla graczy i pocisków. Wartość ta musi być podzielna przez 4 dla rozdzielczości dwuliniowej i podzielna przez 8 dla rozdzielczości jednoliniowej. Otrzymaną liczbę należy wpisać do rejestru Pmbase ($D407) aby poinformować GTIA skąd ma pobierać dane. W rozdzielczości jednoliniowej gracz zajmuje $100 bajtów pamięci, w rozdzielczości dwuliniowej - 880 bajtów. Pojedynczy bajt w tym obszarze odpowiada ośmiu poziomym punktom gracza. Każdy ustawiony bit w tym bajcie spowoduje wyświetlenie punktu. Aby gracz pojawił się na dole ekranu należy dane wpisywać pod koniec obszaru pamięci wydzielonego dla gracza. Analogicznie gracz pojawi się na górze ekranu, gdy dane wpisywane będą na początek tego obszaru. W praktyce nie można zobaczyć wszystkich danych dla gracza, gdyż część z nich nie mieści się na ekranie. Dla czterech pocisków przeznaczony jest taki sam obszar pamięci co dla jednego gracza. Kolejne pary bitów pojedynczego bajtu danych definiują wygląd jednej linii kolejnych pocisków. Pierwszy gracz na ekraniePo wykonaniu tych czynności należy ustalić pozycję poziomą graczy i pocisków. Każdy gracz i każdy pocisk posiada odrębny rejestr, do którego wpisywane są wartości pozycji poziomej. W rejestrach tych nie można przechowywać wartości pozycji, ponieważ przy odczycie rejestry pełnią inne funkcje. Dlatego też wartości pozycji należy przechowywać w innych komórkach pamięci. Rejestry te umieszczone są od adresu $D000-$D007: Hposp0-Hposp3 ($D000-$D003) - pozioma pozycja gracza 0-3 Hposm0-Hposm3 ($D004-$D007) - pozioma pozycja pocisku 0-3 Pojedynczego gracza można rozszerzyć dwukrotnie lub czterokrotnie. Dotyczy to również pocisków. Aby to uczynić konieczne jest wpisanie do odpowiednich rejestrów następujących wartości: 0 - dla normalnej szerokości 1 - dla podwójnej szerokości 3 - dla poczwórnej szerokości Rejestry kontroli szerokości: Sizep0-Sizep3 ($D008-$D00B) - szerokość gracza 0-3 Sizem ($D00C) - szerokość pocisków Kolejnym krokiem powinno być ustalenie kolorów obiektów. Poniższy program pokazuje gracza 0 na środku ekranu: Program Equ $8800 List_mem Equ %00000110 List_err Equ %00000101 Code_mem Equ %00010000 Code_dsk Equ %00100000 Colpm0s Equ $02C0 Dmactls Equ $022F Hposp0 Equ $D000 Pmbase Equ $D407 Pmcntl Equ $D01D Sizep0 Equ $D008 Players Equ $A000 Opt List err+Code_mem Org Program Ldx #$00 Txa L1 L1 Sta Players+$400,x Inx Bne L1 Ldx #$0B L2 Lda Dane,x Sta Players+$478,x Dex Bpl L2 Lda #$3E Sta Dmactls Lda >Players Sta Pmbase Lda #$02 Sta Pmcntl Lda #$78 Sta Hposp0 Lda #$00 Sta Sizep0 Lda #$0E Sta Colpm0s Rts Dane Dta B($18),B($24) Dta B($42),B($81) Dta B($A5),B($A5) Dta B($81),B($81) Dta B($99),B($42) Dta B($24),B($18) End of FileW kolejnym artykule będziemy kontynuować rozważania nad PMG. Tomasz Bielak
Rafał Bielecki |