<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=SETVBLV</id>
	<title>SETVBLV - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=SETVBLV"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=SETVBLV&amp;action=history"/>
	<updated>2026-10-02T12:03:00Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=SETVBLV&amp;diff=3519&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=SETVBLV&amp;diff=3519&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Procedura służąca do ustawiania wektorów przerwań, głównie przerwania [[VBL]]. Punkt wejścia znajduje się pod $E45C.&lt;br /&gt;
&lt;br /&gt;
== Wstęp ==&lt;br /&gt;
&lt;br /&gt;
Przyczyną, dla której wektorów VBL nie należy ustawiać wprost, to znaczy sekwencją rozkazów LDA/STA/LDA/STA, jest to, że w ten sposób można zmienić tylko pół wektora (jeden bajt) na raz. Jeśli między przestawieniem jednego bajtu a przestawieniem drugiego wystąpi przerwanie, komputer &amp;quot;pójdzie w maliny&amp;quot;, na ogół zawieszając się mniej lub bardziej malowniczo.&lt;br /&gt;
&lt;br /&gt;
Z kolei wyłączanie przerwań [[NMI]] na czas ingerencji w wektory VBL ma dwie wady:&lt;br /&gt;
&lt;br /&gt;
* rejestr NMIEN jest tylko do zapisu, więc zmieniwszy go nie możemy odtworzyć jego stanu&lt;br /&gt;
* &amp;quot;ręczne&amp;quot; przestawienie wektora z wyłączaniem i ponownym włączaniem NMI zajmuje aż 22 bajty, podczas gdy wywołanie SETVBLV tylko 9.&lt;br /&gt;
&lt;br /&gt;
== Użycie procedury ==&lt;br /&gt;
&lt;br /&gt;
SETVBLV przyjmuje parametry w rejestrach procesora. Są to:&lt;br /&gt;
&lt;br /&gt;
* adres procedury, jaką ma wskazywać wektor przerwania (Y/X - młodszy/starszy bajt)&lt;br /&gt;
* numer wektora w akumulatorze&lt;br /&gt;
&lt;br /&gt;
Przed wywołaniem, jeśli program po zakończeniu się ma wracać do [[DOS]]-u, dobrze jest przechować pierwotną wartość wektora celem przywrócenia jej przed zakończeniem programu.&lt;br /&gt;
&lt;br /&gt;
Wymieniony wyżej &amp;quot;numer wektora&amp;quot; to nie adres, ale jego numer kolejny licząc od wektora VIMIRQ ($0216), albo inaczej mówiąc, liczony od tego wektora offset podzielony przez dwa. Sens mają następujące wartości wpisywane do akumulatora:&lt;br /&gt;
&lt;br /&gt;
* $00 - VIMIRQ ($0216)&lt;br /&gt;
* $01 - TIMCNT1 ($0218)&lt;br /&gt;
* $02 - TIMCNT2 ($021A)&lt;br /&gt;
* $03 - TIMCNT3 ($021C)&lt;br /&gt;
* $04 - TIMCNT4 ($021E)&lt;br /&gt;
* $05 - TIMCNT5 ($0220)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;$06 - VVBLKI ($0222)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;$07 - VVBLKD ($0224)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* $08 - TIMVEC1 ($0226)&lt;br /&gt;
* $09 - TIMVEC2 ($0228)&lt;br /&gt;
&lt;br /&gt;
TIMCNTx to nie wektory, tylko liczniki zliczające wstecz (od zadanej wartości do zera), zamiast adresu należy dla nich podać wartość początkową.&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Programowanie Atari 8-bit]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>