I   PROGRAMOWANIE/JAMER
˛                            Programowanie koőci AGA
ł                           ooooooooooooooooooooooooo


 ą Na  poczćtek przestroga dla osób chcćcych programowaç nowe koőci graficzne od
strony  sprzętowej:   Commodore,  jak przystaîo na prawdziwych skurwysynów, nie
opublikowaî  do  tej  pory  "Hardware Reference Manual" dla AGi, więc wszystkie
informacje   zawarte  w  tym  artykule  pochodzć  z  róţnych  űródeî  i  testów
praktycznych,  a nie z jednego űródîa bo takiego po prostu nie ma.  Wszytkie te
dane  sć  więc  prawdziwe  lecz  nieudokumentowane.   UWAGA:  Wedîug niektórych
űródeî rejestry sprzętowe sć tymczasowe i mogć zostaç zmienione.

  Zaczniemy  moţe  od  tego jak wogóle dowiedzieç się na jekich kostkach zostaî
uruchomiony  nasz  program.   Sprawdzanie,  czy biblioteki sć w wersji v39+ nie
jest  dobrym  rozwićzaniem,  poniewaţ  do A500 teţ maţna zaîorzyç sobie KS 3.0.
Koőci graficzne naleţy sprawdzaç w następujćcy sposób:

  move.l  GfxBase,a6
  btst    #2,$ec(a6)    ;offset $ec od bazy graphics.library
  bne.s   ToJestAGA

...dla programów pisanych pod systemem, lub wywoîaç funkcję:

  chipbits=SetChipRev(chipset)         - ustala wersję chipsetu

offset funkcji: -888 od bazy graphics.library

Wejőcie:  chipset  (d0)  -  wersja  ukîadów do wîćczenia (lub $ffffffff dla
                            najlepszej moţliwej konfiguracji).
Wyjőcie:  chipbits       -  stan chipsetu.

...  dla np: demek pisanych bez uţycia systemu.

  chipset moţna okreőliç jako:

  Normal = $00
  ECS    = $03
  AGA    = $0f
  lub $ffffffff dla najlepszej moţliwej konfiguracji.

  Uwaga:  Ta funkcja jest dostępna tylko w KS 3.0.  (No cóţ, nie masz 3.0 - nie
masz AGA)


  Kiedy  juţ  wiemy jak dowiedzieç się jakie "chipsy" mamy to moţemy przejőç do
wîaőciwego tematu, czyli programowanie koőci AGA.

  Na poczćtek: w jaki sposób uzyskaç osiem bitplanów?

  Iloőç  bitplanów  okreslajć  bity  12-14 (BPU0-2) rejestru BPLCON0 ($100), no
dobrze,  ale  na  trzech  bitach  moţemy  zapisaç  liczbę od 0-7 !  Dodano więc
jeszcze  jeden  bit,  jest  to bit 4 (BPU3) tego samego rejestru BPLCON0.  Więc
jeţeli  chcesz  wîćczyç  osiem  bitplanów to poprostu ustaw ten bit.  Nie radzę
natomiast  ustawiaç wszystkich bitów BPUx, ţeby usyskaç np:  15 bitplanów (!!!)
bo to i tak nie będzie dziaîaç.

  Jest  jeszcze  jedna  kwestia  zwićzana  z AGowskimi bitplanami, a mianowicie
jeţeli  ustawimy  iloőç  kolorów na 64 (6 bitplanów) to sprzęt zinterpretuje to
jako  tryb  EHB.   Aby  temu  zapobiec  naleţy ustawiç bit 9 (KILLEHB) rejestru
BPLCON2 ($104).

  Aby wîćczyç tryb SuperHires, naleţy ustawiç bit 6 (SHRES) rejestru BPLCON0.

  Kolejna  sprawa:   kolory.   Jak  pewnie  wiecie  paleta  kolorów  jest teraz
24-bitowa.  Ţeby to umoţliwiç jest teraz 256 rejestrów kolorów 24-bitowych, ale
ţeby  zachowaç zgodnoőç ze starymi ukîadami, mamy dostęp, tak jak dawniej tylko
do  32,  12-bitowych  rejestrów  kolorów (sic!).  AGA pracuje z oőmioma róţnymi
paletami 32 kolorowymi (8*32=256), uţywajćc rejestrów COLOR00-31.  Zeby zmieniç
numer  aktualnego  banku  naleţy  wpisaç jego numer (0-7) do bitów 13-15 nowego
rejestru BPLCON3 ($106).

  Ale przecieţ te rejestry sć nadal 12-bitowe !  Aby wpisaç do rejestru wartoőç
koloru  24-bitowego  naleţy  najpierw  wyczyőciç bit 9 (LOCT) rejestru BPLCON3,
wpisaç wyţsze poîowy wartoőci kolorów do odpowiedniego rejestru kolory, ustawiç
bit  9  (LOCT) rejestru BPLCON3 i wpisaç niţsze poîowy wartoőci kolorów.  Brzmi
to  trochę  niezrozumiale?   Podam  więc przykîad:  Aby wpisaç kolor o wartoőci
$123456 (24-bit) do np:  rejestru koloru nr.  152 naleţy procedurkę typu:

Kolor  equ     152               ;numer koloru
Bank   equ     Kolor/32
Rej    equ     Kolor-Bank*32

       lea     $dff000,a5        ;custom-base
       lea     $180(a5),a6       ;rejestry kolorów
       move.w  #Bank,d0          ;numer banku do d0
       ror.w   #3,d0             ;bity 0-2 do 13-15
       and.w   #$1fff,$106(a5)   ;wyczyőç bity 13-15 BPLCON3 (nr.banku)
       or.w    d0,$106(a5)       ;numer nowego banku do BPLCON3
       bclr    #9,$106(a5)       ;bit LOCT=0 - wyţsze wartoőci
       move.w  #$135,Rej(a6)     ;wpisanie wyţszych wartoőci kaţdego ze
                                 ;skîadnika koloru - RGB
       bset    #9,$106(a5)       ;bit LOCT=1 - niţsze wartoőci
       move.w  #$246,Rej(a6)     ;wpisanie niţszych wartoőci kaţdego ze
                                 ;skîadników koloru - RGB

    ;wartoőç koloru : $123456    (R=$12;G=$34;B=$56)
    ;wyţsze poîówki : $1 3 5
    ;niţsze poîówki : $ 2 4 6
    ;proste ?

  Przjdűmy  do kolejnej sprawy:  FMode.  Pod tć tajemniczć nazwć kryje się nowy
rejestr  ($dff1fc).   Czy  widzieliőcie  kiedyő  jakieő np:  demko, czy gierkę,
która  po  uruchomieniu  na  AGA  produkuje  na  ekranie gustowne krzaczki?  To
wîaőnie  sprawka  tego  rejestru,  który  jest  odpowiedzialny  za  iloőç  sîów
przesyîanych  pomiędzy  Chip-RAMem a Lisć.  Wartoőci które moţna wpisaç do tego
rejestru to:

0 - Normalnie - jedna sîowo (16 bitów)
1 - Podwójna  - dîugie sîowo (32 bity) dla ekranów o rozdzielczoőci 640x256
                i więcej niţ 16-tu kolorach
2 - Potrójna  - to samo co wyţej
3 - Poczwórna - dwa dîugie sîowa (64 bity) dla trybów 1280x256...

  Z  powodu  istnienia  tego  rejestru,  pamiętaj  ţeby  w kaţdym programie nie
korzystajćcym z intuition, pisanym na starych koőciach (OCS, ECS) wyzerowaç ten
rejestr!   Starym  ukîadom  to  nie  zaszkodzi  (osobiőcie sprawdziîem na kilku
modelach  z  kostkami  OCS  i  ECS), a w AGA zapobiegnie powstawaniu "kaszy" na
ekranie.


                           ˛      Tym pozytywistycznym akcentem kończy Wasz:

                            ł                             Jamer / Alms Houze
¶