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
Ldx
Od 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ęci![]() Powyż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 File
W kolejnym artykule będziemy kontynuować rozważania nad PMG.
Tomasz Bielak
Rafał Bielecki |