ASEMBLER dla KADEGO (cz I)

W cigu miesica miae chyba wystarczajco duo czasu, by przynaj-
mniej zacz kompletowa oprogramowanie i ksiki o ktrym pisa-
em w poprzednim odcinku. Jeli dysponujesz ju omawianym wyposae-
niem moemy zabra si za wiczenia praktyczne.
Pierwszym celem, jaki sobie postawimy, bdzie wywietlenie na 
ekranie literki "A". Za pomoc BASIC zrobi to mona bardzo prosto - wystarczy
napisa:
	PRINT "A"
wcisn RETURN. "A" na pewno si pokae.
No dobrze, ale jeli chcemy mie "A"w lewym grnym rogu?
Prosz bardzo:
	PRINT CHR$ (147); "A"
   Bardzo adnie. Skrzaty mwi jednak, e w komputerze Commodore 64
mona zrobi wszystko za pomoc jednej lub kilku instrukcji POKE. 
Wpisz wic:
	POKE 1024,1
   Tak naprawd BASIC stanowi jedynie ogniwo porednie pomidzy uyt-
cownikiem i asemblerem. Komputer nie jest w stanie zrozumie 
kierowanych do niego angielskich stw PRINT, POKE czy LIST bez 
odpowiedniego programu w asemblerze. Wynika z tego, e program na wywietlenie 
literki "A" napisany w BASIC zosta, PRZED wykonaniem, przetumaczony na 
jzyk maszynowy. Czy wic nie byoby prociej da komputerowi rozkazy 
od razu w asemblerze? Ot byoby!
Uruchom teraz jeden ze swoich programw (monitor, asembler). Jeli
masz monitor, to wpisz:

A 2710 LDA #$01
A 2712 STA $0400
A 2715 RTS

Teraz wpisz G 2710 i wcinij RETURN. Jeli dysponujesz programem 
TurboAssembler wpisz:

*=$2710
LDA #$01
STA $0400
RTS

Nacinij teraz strzak w lewo, trjk, a potem "S".
   
   Obie operacje powinny da taki sam efekt: w lewym grnym rogu 
ekranu pojawi si literka "A". Jeli niezbyt podoba si nam "A", moemy j 
zastpi dowolnym innym znakiem, wpisujc zamiast LDA #$01, np. LDA #$02 
(litera B), LDA #$03 (C) i tak dalej. Jeli nie podoba Ci si miejsce 
w ktrym jest wywietlany Twj znak sprbuj zmodyfikowa wiersz zawierajcy 
instrukcj STA $0400.
   Tu naley si Tobie sowo wyjanienia na temat struktury ekranu na 
ktrym pojawia si tekst. Zastanw si nad nastpujcym zagadnieniem: w-
czysz komputer, wpisujesz jaki tekst, powiedzmy "ZABAWA Z KOMPUTE-
REM". O ile w domu nie wycz prdu tekst ten bdzie na ekranie 
widoczny tak dugo jak komputer bdzie wczony, chocia ekran telewizora czy 
monitora na pewno NIE JEST wyposaony w pami. Skd wic komputer wie
GDZIE i JAKI tekst na ekranie naley umieci?
   Rozwizano to niezwykle prosto: dane przeznaczone do wywietlenia 
na ekranie s najpierw zapisywane w specjalnym obszarze pamici 
okrelanej zwykle mianem "pamici ekranowej". Stamtd s one pobierane i po 
przetworzeniu wysyane na ekran telewizora. Wniosek z tego jest 
prosty: tekst mona wywietla tak dugo jak dugo jest on zawarty w pamici 
ekranowej komputera. Podobnie jest z grafik i kolorami, chocia dla nich 
zarezerwowano inne obszary pamici, maj one rwnie rn wielko (ok. 1 KB dla
ekranu tekstowego lub 8 KB dla grafiki).
   Obszar pamici ekranowej (tzn. pamici przeznaczonej do 
przechowywania TEKSTU) jest zlokalizowany w Commodore 64 od adresu 1024 do 
2023 co w systemie szesnastkowym odpowiada adresom $0400 do $07e7. 
Zwr uwag, e adres $0400 wymieniony w drugim wierszu programu 
odpowiada dokadnie komrce o adresie 1024 bdcej pierwsz komrk pamici ekra-
nu tekstowego. Zmiana adresu $0400 powinna wic spowodowa wywiet-
lenie litery "A" w innym miejscu ekranu. Sprbujmy teraz przyjrze 
si uwanie naszemu programikowi.
   LDA jest mnemonikiem czyli trzyliterowym skrtem (synonimem) 
rozkazu LoaD Accumulator (zaaduj akumulator). Wymieniona za nim liczba 
(zwana argumentem) jest, w tym wypadku, wartoci do wczytania do 
akumulatora.
   STA jest mnemonikiem rozkazu STore Accumulator (zapisz zawarto
akumulatora). Rozkaz ten powoduje zapisanie liczby wpisanej 
uprzednio do akumulatora w miejscu okrelonym liczb wpisan bezporednio po STA.
W naszym programie bdzie to komrka pamici o adresie $0400 (1024 dzie-
sitnie).
   Rozkaz RTS umoliwia powrt do BASIC zaraz po zakoczeniu naszego
programu. Jest to jeden z rozkazw nie wymagajcych podawania argu-
mentw.
   Jeli zajrzysz do spisu rozkazw asemblera, zobaczysz:

LDA - LoaD Accumulator (zaaduj akumulator)
STA - STore Accumulator (zapisz akumulator)
RTS - ReTurn from Subroutine (powr z podprogramu)

   Moemy z tego wywnioskowa, e miejsce w pamici, do ktrego kom
ter wpisa liczb $01 (1 dziesitnie), nazywa si akumulatorem. 
Akumulator moe przechowywa tylko jedn liczb; jeli wpiszesz do now liczb,
stara zawarto akumulatora zostanie bezpowrotnie skasowana.
   No dobrze. O rozkazach, ktrych uywamy, wiemy ju nieco wicej.
Wiemy te, czego si po nich spodziewa. Wpiszmy wic:

	*=$2710
	LDA #$01
	STA $0400
	LDA #$02
	STA $0401
	LDA #$03
	STA $0402
	RTS
Strzaka w lewo "3","a"

   Teraz na ekranie powinien si pokaza cig liter: A, B. C. I to 
wszystko za pomoc dwch, najprostszych rozkazw asemblera. Aby nabra wprawy
proponuj jeszcze troch samemu poeksperymentowa. Sprbuj naprzy-
kad wywietli zamiast liter "ABC" litery X, Y i Z w drugim 
wierszu na ekranie (w jednym wierszu mieci si 40 znakw).
   Po jakich trzech, czterech prbach wywietlania liter, proponuj co
bardziej rozbudowanego: oprcz litery, zmieni jeszcze jej kolor. 
Wiemy ju, e kolory s przechowywane, podobnie jak tekst, w okrelonym obszarze
pamici RAM komputera; pami t nazywamy pamici koloru. Mieci si
ona w obszarze od $d800 a $dbff (55296 - 56319 dziesitnie).
   Jak jednak obliczy numer komrki, do ktrej wstawimy kolor? To stosun-
kowo proste - od adresu komrki pamici ekranowej, w ktrej zawarta jest
nasza litera (np. $0428) odejmij $0400 (zostanie $28), a potem 
dodaj $d800 w wyniku czego otrzymasz $d828. Warto zapisana w tej komrce ($d828)
decyduje o kolorze znaku zapisanego w pamici ekranowej (komrka $0428).
Jeli masz problemy z przeliczaniem adresw w systemie 
szesnastkowym to podaj adresy w postaci dziesitnej:

pami ekranowa

 $0400 = 1024
+$0028 =   40
-------------
 $0428 = 1064


pami koloru

 $d800 = 55296
+$0028 =    40
--------------
 $d828 = 55336

   Jeeli kod szesnastkowy nie chce Ci wej adn miar do gowy
moe warto byoby zaopatrzy si w jaki podrczny kalkulator majcy mo-
liwoci przeliczania wartoci w trzech systemach: dziesitnym, szesnastko-
wym i binarnym. Teraz wpisz i sprbuj uruchomi ten oto program:

	*=$2710
	LDA #$01
	STA $0428
	LDA #$00
	STA $D828
	RTS
	Strzaka w lewo "3", "a"

   Mamy ju czarn liter "A"! Moe by te biaa, czerwona - jak tylko chcemy.
Trzeba w tym celu zmieni warto argumentu po rozkazie LDA w linii 2715.

	BARTOMIEJ I. KACHNIARZ


Dzi poznalimy instrukcje:

LDA #xx - wstaw warto xx do akumulatora
STA xxxx - zapisz akumulator do komrki o adresie xxxx
RTS - powr z podprogramu
