<?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=Policzenie_aktywnych_bit%C3%B3w_magistrali_adresowej</id>
	<title>Policzenie aktywnych bitów magistrali adresowej - 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=Policzenie_aktywnych_bit%C3%B3w_magistrali_adresowej"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Policzenie_aktywnych_bit%C3%B3w_magistrali_adresowej&amp;action=history"/>
	<updated>2026-10-04T21:00:22Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Policzenie_aktywnych_bit%C3%B3w_magistrali_adresowej&amp;diff=3232&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=Policzenie_aktywnych_bit%C3%B3w_magistrali_adresowej&amp;diff=3232&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;== Przeznaczenie i wymagania ==&lt;br /&gt;
&lt;br /&gt;
Procedura ma za zadanie obliczyć, ile bitów adresowych [[65C816]] jest aktywnych ponad standardowe 16. Ta informacja daje pojęcie, ilu dodatkowych segmentów 64k [[Pamięć liniowa|pamięci liniowej]] można się spodziewać powyżej adresu $00FFFF.&lt;br /&gt;
&lt;br /&gt;
Procedura działa tak samo w obu trybach pracy 65C816 (natywnym i emulacji 6502). Jedyny wymóg to uruchomienie w segmencie 0 (czyli w pierwszych 64k przestrzeni adresowej).&lt;br /&gt;
&lt;br /&gt;
== Zmienne na stronie zerowej ==&lt;br /&gt;
&lt;br /&gt;
Wstępnie deklarujemy na stronie zerowej następujące zmienne:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bitcnt	.ds 1&lt;br /&gt;
adrmsk	.ds 1&lt;br /&gt;
adr	.ds 3&lt;br /&gt;
bsav	.ds 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kod ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adrtest stz adr&lt;br /&gt;
	stz adr+1&lt;br /&gt;
	ldx #$01&lt;br /&gt;
	stx adr+2&lt;br /&gt;
&lt;br /&gt;
	dex&lt;br /&gt;
?lp0    lda [adr]&lt;br /&gt;
	sta bsav,x&lt;br /&gt;
	asl adr+2&lt;br /&gt;
	inx&lt;br /&gt;
	bcc ?lp0&lt;br /&gt;
&lt;br /&gt;
	stz bitcnt&lt;br /&gt;
	stz adrmsk&lt;br /&gt;
&lt;br /&gt;
	rol adr+2&lt;br /&gt;
&lt;br /&gt;
?lp1    stz !$0000&lt;br /&gt;
	lda adr+2&lt;br /&gt;
	inc&lt;br /&gt;
	eor #$ff&lt;br /&gt;
	sta [adr]&lt;br /&gt;
	cmp [adr]&lt;br /&gt;
	bne ?nx1&lt;br /&gt;
	eor #$ff&lt;br /&gt;
	sta [adr]&lt;br /&gt;
	cmp [adr]&lt;br /&gt;
	bne ?nx1&lt;br /&gt;
	lda !$0000&lt;br /&gt;
	bne ?nx1&lt;br /&gt;
	lda adr+2&lt;br /&gt;
	tsb adrmsk&lt;br /&gt;
	inc bitcnt&lt;br /&gt;
?nx1    asl adr+2&lt;br /&gt;
	bcc ?lp1&lt;br /&gt;
&lt;br /&gt;
	rol adr+2&lt;br /&gt;
&lt;br /&gt;
?lp2    lda adr+2&lt;br /&gt;
	bit adrmsk&lt;br /&gt;
	beq ?nx2&lt;br /&gt;
	inc&lt;br /&gt;
	cmp [adr]&lt;br /&gt;
	beq ?nx2&lt;br /&gt;
	dec&lt;br /&gt;
	trb adrmsk&lt;br /&gt;
	dec bitcnt&lt;br /&gt;
?nx2    asl adr+2&lt;br /&gt;
	bcc ?lp2&lt;br /&gt;
&lt;br /&gt;
	rol adr+2&lt;br /&gt;
&lt;br /&gt;
	ldx #$00&lt;br /&gt;
?lp3    cpx bitcnt&lt;br /&gt;
	bcs ?end&lt;br /&gt;
	lda adr+2&lt;br /&gt;
	bit adrmsk&lt;br /&gt;
	beq ?nx3&lt;br /&gt;
	lda bsav,x&lt;br /&gt;
	sta [adr]&lt;br /&gt;
?nx3    asl adr+2&lt;br /&gt;
	inx&lt;br /&gt;
	bcc ?lp3&lt;br /&gt;
?end	rts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Użycie ==&lt;br /&gt;
&lt;br /&gt;
Procedurę uruchamiamy przez &amp;lt;code&amp;gt;jsr adrtest&amp;lt;/code&amp;gt;. Wyniki znajdują się w zmiennych zadeklarowanych jako &amp;lt;code&amp;gt;adrmsk&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;bitcnt&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* bitcnt - liczba aktywnych bitów adresowych powyżej szesnastu (czyli np. &amp;quot;1&amp;quot; oznacza, że mamy do dyspozycji 17 bitów adresu)&lt;br /&gt;
* adrmsk - maska AND dla najstarszego bajtu adresów (np. $01 dla 17 bitów adresu, $03 dla 18, $0F dla 20, $FF dla 24 itd.)&lt;br /&gt;
&lt;br /&gt;
== Uwagi ==&lt;br /&gt;
&lt;br /&gt;
Może być tak, że nie wszystkie kombinacje aktywnych bitów są wykorzystane. Np. [[Antonia 4 MB]] pozwala na włączenie 3 MB pamięci liniowej, zakres pamięci RAM obejmuje wtedy adresy od 0 do $2FFFFF. Ale liczba aktywnych bitów adresu wynosi 22 (maska $3F), jak dla 4 MB, a kombinacje najstarszych bitów adresu układają się następująco:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Bit 21&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Bit 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Znaczenie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| Wybór adresów $000000-$0FFFFF (pamięć RAM)&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| Wybór adresów $100000-$1FFFFF (pamięć RAM)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| Wybór adresów $200000-$2FFFFF (pamięć RAM)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| Wybór adresów $300000-$3FFFFF (pustka)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Programowanie Atari 8-bit]]&lt;br /&gt;
[[Kategoria:Akceleratory]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>