ASEMBLER 6502 (cz.7)

SKOKI - KOMPUTER ABK


	Jak zapewne spostrzegte, komputer ma ju
prost umiejtno wypisywania gupot (czasem
i mdroci, ale duo, duo rzadziej) na swoim
ekranie. Czyli odpowiednie procedury ju "sie-
dz" gdzie we wntrzu naszej maszyny. Naj-
lepszym miejscem jest ku temu pami ROM,
ktra to potrafi przechowywa sw zawarto
niezalenie od tego, czy jest zasilana prdem,
czy te nie. Dodatkow jej zalet jest fakt, e
nie da si zmieni jej zawartoci.
	No, ale do tych gupot, przejdmy do kon-
kretw. eby wydrukowa na ekranie jak lite-
r trzeba nam byo najpierw wstawi j do aku-
mulatora rozkazem LDA a potem wyrzuci na
ekran jakim innym rozkazem (STA, ale to po-
mimy). Duym uatwieniem naszej pracy byby,
po pobraniu numeru litery, skok do jakiej pro-
cedury (ach, stodkie jzyki wyszego rzdu i ich
procedury!) bez przejmowania si, c mdrego
jest waciwie w tych procedurach, byle jeno ro-
biy, co chcemy (czyli drukoway litery; jeszcze,
ale ju niedugo - nie tylko).
	W ROM C-64 istnieje procedura, ktra nazywa
si tajemniczo "CHROUT'. Skrzaty mwi, e
przy ukadaniu jej nazwy chodzito gwnie o to,
by nie dao si jej wymwi. A oznacza ona
CHaRacter OUTput, czyli - wypchnicie znaku.
Suy moe do rnych celw - do wydrukowa-
nia danego znaku na drukarce, zapisania na
dysku, albo (i o to wanie chodzi) - na ekranie.
Wystarczy jedynie wstawi znak do akumulato-
ra (LDA) i skoczy...


	*=10000
	LDA #$01
	JSR $ffd2
	RTS

	Krtkie, proste, ale skuteczne. Mamy "A". Jeli
pomylisz chwil, zaraz si domylisz, jak t
metod drukowa dusze wyrazy, czy cae zda-
nia. Przy czym ciekawe jest, e wcale nie intere-
suje nas, jak to si dzieje - litera po prostu si
pokazuje i ju. atwo zauway, e dziaamy tu-
taj metod tak sam, jak np. w BASIC-u czy
PASCAL-u - jeeli pewna cz programu musi
by powtarzana wicej razy, prociej jest odwo-
ywa si do niej kiedy trzeba, a nie wpisywa
przy kadej koniecznoci. Dziki temu moliwe
staje si osawione programowanie strukturalne.
Swoj drog, jeeli nie byoby ono moliwe w
asemblerze, jak mona by wyobrazi sobie tak
moliwo w jakimkolwiek innym jzyku? Asem-
bler to podstawa. WSZYSTKO, co mona zro-
bi np. w BASIC-u - zostato ju wczeniej zro-
bione w asemblerze, tylko e nie przez nas,
lecz przez autorw interpretera.
	Rozkaz JSR moe wic nam stuy, jeeli
chcemy z jakiegokolwiek miejsca programu sko-
czy do innego. Dodatkow zalet tego rozkazu
jest fakt, e w pewnym miejscu pamici, zwa-
nym STOSem przechowuje adres, do ktrego
powinien wrci po wykonaniu procedury. Po-
wrt nastpuje automatycznie, po napotkaniu
rozkazu RTS. Jeeli procesor trafi na ten roz-
kaz, to powraca do gwnego biegu programu.
	Innym "skaczacym" rozkazem jest JMP
(JuMP). Jego cech jest to, e skacze bezpo-
renio pod wskazany adres i nie zostawia ad-
nych znakw szczeglnych (takich jak JSR na
stosie), by mona byto go po nich wyledzi. Je-
eli skoczymy gdzie poprzez JMP, nie istnieje
moliwo powrotu do poprzedniej czsci pro-
gramu. Rozkaz ten dziaa wic tak samo jak in-
strukcja GOTO w BASIC-u.
	Jeszcze winien jestem wyjanienia w sprawie
dalszego uproszczenia drukowania tekstw na
ekranie. Ot w pewnym miejscu w pamici
ROM istnieje procedura, ktra ma za zadanie
wywietlenie zadanego tekstu. Ot, i wszystko.
Nie musimy ju w tym celu konstruowa ptli,
pobiera kolejnych znakw itd. Wszystko zrobili
ju za nas autorzy systemu operacyjnego. Trze-
ba tylko:
 a) wiedzie gdzie jest ta procedura,
 b) umie zleci komputerowi jej wykonanie,
czego wanie mam zamiar Was nauczy.
Na pocztek musz Wam przekaza, jak kom-
puter zapisuje w pamici dusze adresy. Robi
to za pomoc tzw. starszych i modszych baj-
tw. Aby wyliczy jaki adres majc starszy i
mtodszy bajt, trzeba ten starszy przemnoy
przez 256 i do wyniku doda modszy. Brzmi to
moe nieco zawile, ale nie zapominajmy, e
mylimy cigle systemem dziesitnym (ach,
gdyby tak Bg stworzy cztowieka z szesnasto-
ma palcami!), komputer za dwjkowym, ktre-
go skrconym zapisem jest system szesnastko-
wy. Dlatego te roztoenie liczby dwubajtowej
(czyli wikszej ni 255, $ff) jest w systemie
szesnastkowym proste, w dziesitnym za - ju
nie tak bardzo. Dla liczby $1234 starszy bajt (z
angielska MSB - More Significant Byte) wynosi
$12, za modszy (LSB - Less Significant Byte) -
$34. Liczb dzielimy wic po prostu na dwie
czci. Pierwsze dwie cyfry to bajt starszy, dwie
ostatnie - modszy. Za w systemie dziesitnym
rozpiska liczby 12345 wyglda tak: 12345 dzieli-
my na 256 (tu ukon w stron red. Kalkulatora),
wynik: 48.222656. Od tego odrzucamy cz po
przecinku, zostaje wic 48. I to jest starszy bajt.
Przechodzimy wic do modszego. Pomnmy
48 przez 256, wyjdzie 12288. Teraz musimy je-
szcze od naszej pocztkowej liczby (12345) od-
j to nieszczsne 12288. Mi wyszto 57. Ten
etap byt zreszt najbardziej dramatyczny. Stary,
blisko piciocentymetrowej (!) gruboci Texas
Instruments odmwi wsppracy i musiaem
szuka czego innego. Sprawdmy jednak, czy
wynik jest prawdziwy. 48*256+57=12345.
Wszystko si wic zgadza. Dla porzdku przed-
stawi jeszcze algorytmy w BASIC-u:
 MSB=I NT(AD/256)
 LSB=AD-256*MSB
	Na pewno przydadz si nie raz. Do czego
jednak byty potrzebne w tym przypadku? Do po-
informowania komputera o adresie, od ktrego
zaczyna si tekst do wywietlenia na ekranie.
Wpiszmy teraz jaki tekst do pamici, od adresu
- niech bdzie $3000, czyli 12288, posugujc
si metod przedstawion przeze mnie w po-
przednim odcinku. Tym razem jednak koniecz-
nie wstaw na kocu znaczek "@" o kodzie $00,
0. Gotowe? Jeli tak, to wpisz:

	*=$2710
	LDY #$30
	LDA #$00
	JSR $ab1e
	RTS

...i uruchom to jak zwykle - SYS 10000,
G2710, czy strzaka w lewo, 3 i S. Teraz na
ekranie pojawi si cay potrzebny Ci tekst, bez
blu, szybko i skutecznie. Jeeli masz ochot
tekst ten jeszcze jako sformatowa, zmieni
kolory, czy co tam jeszcze - skorzystaj z tabeli
kodw ASCII znajdujcej si gdzie pod koniec
instrukcji obsugi. Jak wida, rol starszego i
modszego bajtu wzity na siebie dwa rejestry
procesora - jako starszy wystpi rejestr Y, jako
modszy - akumulator. Jest wic, jak obiecaem
- umiemy wydrukowa tekst za pomoc jednego
rozkazu.
	A teraz mia niespodzianka dla uytkownikw
TurboAssemblera. Nie wiem, czy metoda ta za-
dziaa w innych programach tego typu, ja
sprawdziem j jeszcze w Magic Assemblerze.
Wpisz (tym razem monitorowcy mog np. za-
mkn oczy):

	*=$2710
	LDY #>reklama
	LDA #<reklama
	JSR $able
	RTS
reklama.TEXT "C&A - TWOI DOSTAWCY
	      NARKOTYKOW"

	Dziaa? I to jak! Od tej chwili moesz w ten
sposb uatwi sobie dziaania na modszych i
starszych bajtach tym wanie prostym sposo-
bem, o czym zawiadamia ostrzcy przy szkwa-
tach

				BARTOMIEJ I. KACHNIARZ
