STARTUJ ULUBIONE CO NOWEGO? AGNIESZKA CEGIELSKA - NIEOFICJALNY INTERNETOWY FANKLUB REDAKCJA KONTAKT
Informacje o aktualizacji Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Poczytaj lub dodaj wpis Czyli kto to tworzy Kontakt z nami




OSTATNI KOMENTARZ  ?

Budujemy carty ...
Sampler do c-6 ...
Byłem tam ... ...
Seks w szkole, ...

(32)
(17)
(3)
(2)
(2)



WYBIERZ MELODIĘ       ?


The last ninja
The l.n. The wilderness
The last ninja 2
The l.n.2 The basement
The l.n.2 The final battle
The l.n.2 The mansion
The l.n.2 The office
The l.n.2 The sewers
The l.n.2 The street
The great giana sisters
The green beret
Turrican intro
Bubble Bobble Remix
Creatures
Game over
Mayhem intro
Diablo
Doom 2 Hell on Earth
Hi-octane
Xenon 2
Mario in the Loonybin
Tetris (gameboy) remix


Jaws
Spy vs spy
Draconus
Ghoust busters
Tetris (c-gameboy)
Duke Nukem 3D




PROGRAMOWANIE 


$d012 - CZĘŚĆ PIERWSZA PODSTAWY



   Wyświetlaniem obrazu C64 zajmuje się specjalizowany układ VIC-II. Jego parametry nie są może oszałamiające, jednak w zupełności wystarczają na wizualizacyjne potrzeby Komcia.

    Komunikacja między programami, a procesorem obrazu odbywa się poprzez szereg rejestrów sterujących, które pozwalają nam wybrać adresy wyświetlanej grafiki, jej rodzaj, położenie itd. Dzięki dostępowi do nich z poziomu języka maszynowego, możemy niezwykle szybko je zapisywać i odczytywać, co pozwala nam na płynne skrolowanie, odczyty pióra świetlnego, czy zmianę wyświetlanego trybu graficznego wielokrotnie w czasie wyświetlania zawartości jednego ekranu. Jednak by móc tego dokonać musimy wpierw wiedzieć, który dokładnie obszar ekranu jest aktualnie wyświetlany. I tu z pomocą przychodzi nam rejestr "RASTER" o adresie $D012.

   Czym jest rejestr "RASTER"? Aby odpowiedzieć na to pytanie, musimy wpierw zastanowić się jak wyświetlany jest obraz na ekranie. Nawet oko nieuzbrojone w lupę potrafi zauważyć poziome prążki na kineskopie. Co niektórzy zauważą nawet pojedyncze piksele, ale będą pewnie i tacy, którzy niczego nie zauważą. Polecam im wymianę Rubina na jakiś nowszy telewizor lub włączenie telewizora albo wizytę u okulisty, ewentualnie odczekanie aż środki odurzające opuszczą organizm. Poziome prążki na ekranie to nic innego jak ślady po przejściu wiązki elektronów wywołujące świecenie luminofora.

   Otóż bez względu na to co jest wyświetlane na kineskopie (ekran TV, video, komputerowy), obraz zawsze powstaje w ten sam sposób. Wiązka elektronów wędruje z lewego, górnego rogu ekranu do prawego, dolnego. Linia po linii z prędkością 50, 60 i więcej (w nowszych komputerach) razy na sekundę.

   Warto zdać sobie sprawę z faktu, że nawet wyświetlenie jednego punktu, to pracowite omiatanie ekranu linia po linii (punkt po punkcie i skok na początek następnej linii), powrót do lewego, górnego rogu ekranu, a następnie powtórzenie całego cyklu. Każde pełne przejście wiązki elektronów przez ekran i utworzenie obrazu nazywamy "ramką". Ponieważ w PAL wyświetlenie jednego obrazu zajmuje 1/50 sekundy, więc w sekundzie mamy 50 "ramek". Skoro jedna "ramka" to cały obraz (z tłem), to w tym czasie działo elektronowe musi "narysować" 312 linii (PAL). Aby móc precyzyjnie określić, w której linii znajduje się wiązka elektronów posługujemy się komórką $D012.

   Przykładowy programik odczytujący numer wyświetlanej linii zajmuje tylko jedną linię w kodzie maszynowym i wygląda tak:

	lda $D012

   Natomiast program czekający na np. linię 128 (licząc od początku ekranu, gdyż obszar standardowo widoczny mieści się w przedziale 50-249) może wyglądać następująco:

	lda #$80
	cmp $D012
	bne *-3

   Język maszynowy jest na tyle szybki, by umożliwić nie tylko odczyt komórki RASTER, ale i wykonanie szeregu operacji "w międzyczasie". Na przykład zmienić kolor jednej linii:

start
	lda #$80
	cmp $D012
	bne *-3
	inc $d020
	lda #$81
	cmp $d012
	bne *-3
	dec $D020
	jmp start

   Zaraz, zaraz! Przecież $D012 to tylko 8 bitów i można tam zapisać wartości od 0 do 255! Jak zmieścić 312 w 255? Niestety to prawda i nie da się zapisać w rejestrze RASTER wszystkich numerów wyświetlanych linii. To co robić? Twórcy C64 oddali nam do dyspozycji jeszcze najstarszy, siódmy bit rejestru SCROLY ($D011). Wystarczy sprawdzić wartość tego bitu, by określić dokładny numer wyświetlanej linii, np.:

	lda $D011
	and #$80

   Warto jeszcze wiedzieć, iż po starcie Komody jest tam zapisywana różna wartość w zależności od wersji Kernela. Niby nic wielkiego, ale jeśli ktoś chce pisać gierkę lub demo z obsługą przerwań RASTER (wtedy nie odczytujemy, a zapisujemy $D012) powinien ten fakt uwzględnić. Czy można pominąć zapis i odczyt $D011? Wbrew pozorom można sobie na to pozwolić bez problemu. Już wyjaśniam: Wyobraźmy sobie, że w naszym programie chcemy wyświetlić tło białe między liniami 20 i 40, oraz czarne na reszcie ekranu. Najprostszy, ale błędny program wyglądałby tak:

start
	lda #$14
	cmp $D012
	bne *-3
	lda #$01
	sta $D020
	lda #$1e
	cmp $D012
	bne *-3
	lda #$00
	sta $D020
	jmp start

   Program wykonuje się dwukrotnie w "ramce", a nie o to chodziło. Okazuje się, że można sobie z tym poradzić nawet bez zabawy ze SCROLY. Oto przykład:

start
	lda #$80  ;taki numer linii jest osiągany
		  ;tylko raz na "ramkę"
	cmp $D012
	bne *-3
	
; tu można wrzucić jakąś procedurkę

	lda #$15  ;ta wartość musi być większa
		  ;od naszej "pierwszej" linii
	cmp $d012
	bne *-3
	
; tutaj też można coś wsadzić (np. odtwarzanie muzyczki)

	lda #$14
	cmp $D012
	bne *-3
	lda #$01
	sta $D020
	lda #$1e
	cmp $D012
	bne *-3
	lda #$00
	sta $D020
	jmp start

   W tak banalnym przykładzie takie karkołomne sztuczki nie mają sensu, ale czasem może się zdarzyć, że potrzebujemy wywołać kilka przerwań w "ramce", w różnych miejscach ekranu (np. zmiana trybów graficznych). Wtedy każde z nich można skrócić o zapis najstarszego bitu w $D011 przez odpowiednie rozplanowanie wywołań linii przerwania.

   To tyle w tym krótkim odcinku. W następnym, mam nadzieję, pobawimy się w odtwarzanie muzyki i różne tryby graficzne w jednej "ramce". Życzę udanych prób z programowaniem.



Autor:
Data realizacji:
Data publikacji:
Data modyfikacji:
Pierwsza publikacja:



Asl (Nipson)
-
24.5.2001
-
Filety on-line





DODAJ SWÓJ KOMENTARZ



#1Dzień 18-6-2015godz.16:40:06Autor: Ultimion / Caution
Status: Brak błędówAdrIP: Ukryty
   Właśnie szukałem jak się wywoływało przerwanie w dolnej lub górnej linii $10 ... wiedziałem ze d011, ale nie pamietalem jak .... :-D
   Pozdrawiam

Instrukcja używania systemu komentarzy    

  1. W polu "Podpisz się" umieszczasz swoje Imię, Nazwisko albo Pseudonim używając znaków alfanumerycznych: A-Z, 0-9 oraz znaków specjalnych, np.: !^<>" ' itp.
    Tagi HTML są nieaktywne.
  2.    
  3. W polu "Wpisz treść" umieszczasz komentarz używając znaków alfanumerycznych: A-Z, 0-9 oraz znaków specjalnych, np.: !^<>" ' itp. Klawisz ENTER tworzy nowy akapit.
    Tagi HTML są aktywne. Możesz:

  4.    Możliwość:

    Komenda:

    Przykład:

       a.   Pogrubić tekst: <B></B> Pogrubiony
       b.   Pochylić tekst: <I></I> Pochylony
       c.   Podkreślić tekst: <U></U> Podkreślony
       d.   Stworzyć indeks górny: <SUP></SUP> Indeks górny
       e.   Stworzyć indeks dolny: <SUB></SUB> Indeks dolny
        f.   Użyć czcionki maszynowej: <TT></TT> Czcionka maszynowa


    Adresy URL wpisujemy w postaci http://nazwastrony.pl, ftp://nazwastrony.pl.
    Adresy email wpisujemy w postaci nazwa@nazwa.pl.
    Adresy Gadu-Gadu wpisujemy w postaci gg:1234567 (bez spacji).

    Proszę pamiętać o domykaniu otwartych tagów.
    Przed naciśnięciem przycisku Komentuj, zaznacz checkboks przy jego prawym boku.

Podpisz się:

Wpisz treść:

   wyślij mój komentarz    ukryj mój adres IP