ASEMBLER 6502 (cz.8)

O SKUTECZNYM PRZERWA SPOSOBIE


	Komputer podczas pracy jest podobny do... bo ja wiem, bibliotekarza?
Sekretarki? Kancelisty? W kadym razie do kogo wykonujcego zawd,
ktry nie wymaga zbyt wiele twrczego mylenia. Oczywicie - jakiekolwiek
tego typu porwnanie bdzie z definicji niecise. Kade, nawet najbardziej
nudne zajcie wymaga czasem cho odrobiny mylenia twrczego. Na
przykad bibliotekarz - wydawaoby si, e tylko przyjmuje, wypoycza i
ukada na pkach ksiki. I to wszystko. Ale co zdarzy si, gdy do biblioteki
wpadnie grony szaleniec z odbezpieczonym kaaszem? Komputer na sta-
nowisku bibliotekarza zapewne spytaby delikwenta, czy moe potrzebna
mu ksika na temat militariw z byego Zwizku Sowieckiego. Czowiek
za musiaby co wykombinowa, eby jako si z tej sytuacji wyplta
(niewykluczone zreszt, e mimo wszystko nie znalazby adnego rozsd-
nego wyjcia, ale to nie naley do sprawy).
	No dobrze, przejdmy teraz do waciwej treci dzisiejszego odcinka, tj.
do przerwa. Wiemy, e kad, wykonywan przez czowieka prac mona
PRZERWA. Wyobra sobie, e odrabiasz wanie lekcje, klnc cicho pro-
fesorw za zbyt wiele zada. Nagle dzwoni telefon. Nikogo innego w mie-
szkaniu nie ma. Co wic robisz? Z ulg PRZERYWASZ prac i przystpu-
jesz do omwienia kwestii pjcia do kina na MCMLXXVI cz Akademii
Policyjnej. Gdy ju dokadnie ustalisz szczegy, odkadasz suchawk, PO-
WRACASZ Z PRZERWANIA i kontynuujesz przygotowania do obrony pra-
cy domowej.
	W podobny sposb dziaa Twj komputer. Jego praca jest stosunkowo
czsto PRZERYWANA (z reguy co 1/50 sekundy). Podczas takiej przerwy
komputer zwykle sprawdza, czy kto aby nie nacisn ktrego z klawiszy,
mruga kursorem, przesuwa zegar i robi inne, podobnie fascynujce rzeczy.
Po wykonaniu tych wszystkich arcyciekawych czynnoci POWRACA do
programu, ktry wykonywa poprzednio. I wszystko gra, jak w orkiestrze
straackiej.
	Znaleli si jednak cwaniacy, ktrym taki obraz dziaania wszechwiata nie
do koca wystarcza. Mwili: "Przecie ten kursor nie moe tak miga, zrb-
my co!" Albo: "Dlaczego klawisze nie pikaj przy naciskaniu, jak w maszy-
nach profesjonalnych (np. ZX SPECTRUM...)?" Naprzeciw tym, niewtpliwie
susznym, daniom wyszli twrcy ukadu 6502 i... odpowiednio go zapro-
jektowali. Dziki temu kady, kto jako tako potrafi posugiwa si asemble-
rem (tak, tak! To wanie TY!), moe dowolnie zmienia procedury obsugi
przerwa (tak mdrzy ludzie nazwali to, co komputer robi w przerwaniu).
	Sprbujmy wic zrobi z przerwaniami co pozytywnego. I to najlepiej
tak, by mona byo przy okazji pisa jaki program w BASIC-u. O, mam ju
pomys. Niech w lewym grnym rogu pojawi si jaki napis. I jeli ten napis
bdzie si pojawia co 1/50 sekundy, ciko bdzie go skasowa. Ba! Na-
wet jeli komu si to uda, napis ten pojawi si znowu, za dokadnie 1/50
s! Dobre, co? Wpisz wic taki oto program:

	*=10000
	SEI
	LDA #<IRQ2
	STA $0314
	LDA #>IRQ2
	STA $0315
	CLI
	RTS
IRQ2	LDX #$00
PETLA	LDA TEKST,X
	STA $0400,X
	INX
	CPX #$0A
	BNE PETLA
	JMP $ea31
TEKST	.TEXT"ROBIN HOOD"

(UWAGA! Jeli uywasz ktrego z moduw FINAL, to wycz go in-
strukcj KILL)

	Uruchom program znajom instrukcj SYS 10000. Jeli co nie dziaa, to
na wszelki wypadek odcz swj modu (nawet, jeli nie jest FINAL'em).
Na ekranie pokaza si napis "ROBIN HOOD" (a wiecie dlaczego? Bo nie
YAD!). Jakiekolwiek prby skasowania tego napisu skazane s na niepo-
wodzenie. Uczyni to mona jedynie kombinacj klawiszy RUN STOP/RE-
STORE, przyciskiem RESET, wycznikiem zasilania lub przez wycigni-
cie wtyczki z kontaktu.
	Dlaczego jednak TO dziaa? Popatrzmy. Na pocztku pojawia si taje-
mniczy rozkaz SEI. Odmy go na chwilk na bok. Co robimy dalej? Bie-
rzemy modszy bajt adresu pocztku procedury, ktr nazwaem "IRQ2", a
ktra zaczyna si od adresu $271d, i wstawiamy go do komrki $0314.
Nastpnie starszy bajt tego adresu wstawiamy do komrki $0315. Komrki
$0314/$0315 maj w systemie operacyjnym C-64 specyficzn rol. Zawie-
raj bowiem adres, do ktrego komputer ma skoczy kadorazowo po
przyjciu przerwania typu IRQ. Adres ten przedstawiamy w postaci mod-
szego i starszego bajtu, tak jak na przykadzie. Czyli, jeli praca procesora
zostanie przerwana przerwaniem IRO, procesor skoczy do naszej proce-
dury IR02, znajdujcej si pod adresem $271d. Wszystko jasne?
	Teraz wrmy do tajemniczego rozkazu SEI ("SEt Interrupt mask" -
wcz mask przerwa). Rozkaz ten powoduje, e komputer nie przyjmuje
przerwa IRQ. Po prostu te przerwania nie s wykonywane. Powoduje to
flaga I, nazywana te mask przerwa. Tak dugo, jak maska ta jest w-
czona, adne IRQ nie bd dla komputera na tyle wane, by przerywa
prac nad programem, ktry aktualnie wykonuje. W naszym porwnaniu
pracy komputera do odrabiania lekcji, maskowanie przerwa da si przed-
stawi jako wycignicie wtyczki telefonu z kontaktu. Od tej pory kady
moe dzwoni do woli, my i tak bdziemy robi swoje.
Przerwania IRQ wyczam nie bez powodu. Zaraz po wyczeniu prze-
rwa zmieniamy wektor IRQ, czyli adres, do ktrego procesor skacze po
przyjciu przerwania. Moe si bowiem zdarzy, e przerwanie zostanie
zgoszone PO wstawieniu nowej wartoci do $0314 a PRZED wstawie-
niem naszej liczby do $0315. (A dlaczego nie? Przecie przerwania IRQ
powtarzaj si co 1/50 s. Prawdopodobiestwo nie jest wic due, ale po
co ryzykowa.). I co si wtedy stanie? Zwykle wektor przerwa wskazuje
na adres $ea31. My za zmieniamy tylko modszy jego bajt, na $1d. Kom-
puter skoczy wic do $eaid, czyli w jakie maliny, w ktrych znale si
nie powinien. Natknie si tam na jakie gupie RTS i - jak to mwi starzy
wyjadacze - si powiesi. Wyczenie przerwa na ten krytyczny moment
jest wic racjonalne i ze wszechmiar uzasadnione. Zwaszcza, e i tak po
ponownym, poprawnym ustawieniu wektora wydajemy rozkaz CLI ("CLear
Interrupt mask" - wycz mask przerwa). CLI zezwala na ponowne uru-
chomienie IRQ.
	Na tym koczymy program. Pozostaje tylko RTS, by powrci do BASIC-
a. W BASIC-u moesz swobodnie dziaa, pisa programy, nagrywa, a-
dowa programy i robi, co tylko dusza zapragnie. "ROBIN HOOD" prze-
trwa wszystkie te prby i straszy bdzie nadal. Zaszkodzi mu moe jedy-
nie wadowanie jakiego programu, ktry zajmie komrki o adresach
10000 - 10050. Tam bowiem siedzi nasza procedura. Wykonuje si ona
co 1/50 s, wic wadowanie w jej miejsce jakiegokolwiek innego programu
spowoduje niechybne wpadnicie komputera w maliny i powieszenie z
rozpaczy.
	Procedura IRQ2 to banalne wywietlenie tekstu na ekranie. Nie wyma
adnego komentarza. Moe tylko koczcy j rozkaz JMP $ea31, a nie
jak zwykle, RTS albo BRK. Powoduje on skok do zwykej procedury obsu-
gi przerwa IRQ. Komputer robi tam swoje.
	Nie kady wie, e nacinicie klawisza RESTORE to take przerwanie.
W odrnieniu od IRQ, najczciej nie jest wywoywane przez zegar, ani
adne inne czynniki wewntrzne. Przerwanie to zgaszasz Ty sam tukc
w klawisz, najczciej w poczeniu z klawiszem RUN/STOP. Powoduje to
wystanie wprost do procesora impulsu wywoujcego przerwanie NMI
(Non-Maskable Interrupt - przerwanie niemaskowalne). Komputer zwykle
sprawdza, czy nacinity zosta drugi klawisz z "fantastycznej dwjki" i jeli
tak, to wykonuje procedur tzw. ciepego startu: wszystkie kolory ustawia
na standardowe, likwiduje duszki, wycza SID itd. Ma te to do siebie, e
przerywa dziaanie programu BASIC-owego nie czynic w nim adnych
zmian. Dlatego dla piszcych w BASIC-u jest zmor. Dla nas, specw od
asemblera, zmor nie bdzie, a czasem nawet moe si przyda. Dla ua-
twienia podpowiem, e wektor przerwania NMI to komrki $0318/$0319.
One wskazuj adres, pod ktry trzeba skoczy po przyjciu kadego prze-
rwania NMI. Wpisz wic taki oto programik:

	*=10000
	LDA #<NMI2
	STA $0318
	LDA #>NMI2
	STA $0319
	RTS
NMI2	INC $D020
	RTI

	Programik ten jest, szczliwie, jeszcze krtszy od poprzedniego. Ko
mentarz ogranicz do rzeczy niezbdnych. Nie wstawiem rozkazw SEI i
CLI, bo przerwania NMI s niemaskowalne - taka ju ich natura. Jeli zd-
ysz nacisn RESTORE po przestawieniu modszego bajta, a przed
przestawieniem starszego - twoja wina, twoja strata. Procedurka NMI2
jest krciutka - zmieniamy tylko kolor ramki we wszystkim znanej komrce
$d020 (jeeli nie wszystkim - odsyam do mapy pamici!). Zaraz potem wy-
stpuje tajemniczy jeszcze rozkaz RTI. Aby rozwia jego tajemniczo
podaj, e oznacza on "ReTurn from Interrupt", czyli "powr z przerwa-
nia". Jego wykonanie spowoduje powrt do wykonywania uczciwej pracy
czyli tego, co siedzi w programie. Tu jeszcze jedna wana wiadomo. Je
eli przerwiesz przerwanie IRQ, komputer nie straci gowy, lecz spokojnie
wykona przerwanie NMI, powrci za pomoc RTI do przerwania IRQ, a z
niego - do programu, ktry ley "na dnie".
	Na temat przerwa mona by jeszcze pisa dugo i szczliwie. Na po-
cztek jednak ta dawka teorii jest cakowicie wystarczajca. Ju niedugo
bdzie interfejs do Pamitnika Artylerzysty, czyli o przerwaniach rastra to i
owo, lecz z nieco innej strony.
			Wasz Niezmordowany Paskokrek
			Informacjonono-Stookulotoczny
			BARTEK KACHNIARZ


Dzi poznalimy rozkazy:

SEI - wczenie maski przerwa, czyli zakaz wywoywania przerwa IRQ

CLI - wyczenie maski przerwa, czyli uniewanienie zakazu wykony-
      wania przerwa IRQ

RTI - powrt z przerwania do miejsca, w ktrym program zosta prze-
      rwany
