<?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=Wykrycie_VBXE</id>
	<title>Wykrycie VBXE - 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=Wykrycie_VBXE"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Wykrycie_VBXE&amp;action=history"/>
	<updated>2026-10-02T23:35:25Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Wykrycie_VBXE&amp;diff=4244&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=Wykrycie_VBXE&amp;diff=4244&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 wykrycia rdzenia FX [[VBXE]] na stronie $D6 lub $D7 w komputerach [[XL]] i [[XE]].&lt;br /&gt;
&lt;br /&gt;
== Kod dla rdzeni 1.20 i nowszych ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
; 2009 by KMK/DLT&lt;br /&gt;
;&lt;br /&gt;
MEMAC_B_CTL = $5d&lt;br /&gt;
&lt;br /&gt;
vbxe_detect&lt;br /&gt;
        lda #$d6&lt;br /&gt;
        sta _vbxe_write+2&lt;br /&gt;
        ldy #MEMAC_B_CTL&lt;br /&gt;
        jsr ?clr&lt;br /&gt;
&lt;br /&gt;
        jsr ?try&lt;br /&gt;
        bcc ?ret&lt;br /&gt;
&lt;br /&gt;
        inc _vbxe_write+2&lt;br /&gt;
&lt;br /&gt;
?try    ldx $4000&lt;br /&gt;
        jsr ?chk&lt;br /&gt;
        bcc ?ret&lt;br /&gt;
        inx&lt;br /&gt;
        stx $4000&lt;br /&gt;
        jsr ?chk&lt;br /&gt;
        dec $4000&lt;br /&gt;
?ret    rts&lt;br /&gt;
&lt;br /&gt;
?chk    lda #$80&lt;br /&gt;
        jsr _vbxe_write&lt;br /&gt;
        cpx $4000&lt;br /&gt;
        bne ?fnd&lt;br /&gt;
        sec&lt;br /&gt;
        .byte $24&lt;br /&gt;
?fnd    clc&lt;br /&gt;
?clr    lda #$00&lt;br /&gt;
_vbxe_write&lt;br /&gt;
        sta $d600,y&lt;br /&gt;
        rts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kod dla rdzenia &amp;lt; 1.20 ==&lt;br /&gt;
&lt;br /&gt;
Dla rdzeni starszych niż 1.20 kod jest identyczny z tym wyjątkiem, że należy przyjąć $4c jako wartość &amp;lt;code&amp;gt;MEMAC_B_CTL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Działanie ==&lt;br /&gt;
&lt;br /&gt;
Podprogram próbuje podłączyć bank 0 VRAM-u jako (charakterystyczne dla rdzenia FX) okno MEMAC B (pod $4000-$7FFF) i sprawdza, czy się coś zmieniło w odnośnym obszarze pamięci.&lt;br /&gt;
&lt;br /&gt;
== Sposób użycia ==&lt;br /&gt;
&lt;br /&gt;
Wywołanie &amp;lt;code&amp;gt;JSR VBXE_DETECT&amp;lt;/code&amp;gt; wraca z ustawionym znacznikiem C, gdy VBXE nie wykryto lub ze skasowanym znacznikiem C, gdy wykryto. W tej ostatniej sytuacji pod adresem &amp;lt;code&amp;gt;_vbxe_write+2&amp;lt;/code&amp;gt; (1 bajt) jest numer strony, na której zdekodowana jest karta, a pod adresem $xx40 i $xx41 (gdzie &amp;quot;xx&amp;quot; to odpowiedni nr strony, tj. D6 lub D7) znajduje się kolejno:&lt;br /&gt;
&lt;br /&gt;
* $xx40 - &amp;quot;magiczna&amp;quot; wartość $10, oznaczająca rdzeń FX, wersja 1.&lt;br /&gt;
* $xx41 - numer rewizji rdzenia&lt;br /&gt;
&lt;br /&gt;
Przyjmuje się, że twórcy rdzeni niezgodnych z FX zadbają o dobranie innej i unikalnej wartości magicznej, co pozwoli na łatwą identyfikację rdzeni i uniknięcie problemów z kompatybilnością oprogramowania.&lt;br /&gt;
&lt;br /&gt;
Procedurę w powyższej postaci można wywołać wielokrotnie.&lt;br /&gt;
&lt;br /&gt;
== Numer rewizji rdzenia ==&lt;br /&gt;
&lt;br /&gt;
Numer rewizji rdzenia FX ($xx41) ma następującą strukturę:&lt;br /&gt;
&lt;br /&gt;
* bit 7 = 1, emulacja rozszerzenia [[Rambo XL]].&lt;br /&gt;
* bit 4-6, główny numer rewizji zapisany w kodzie BCD (wartości 0 - 7).&lt;br /&gt;
* bit 0-3, pomocniczy numer rewizji zapisany w kodzie BCD, (wartości 0 - 9)&lt;br /&gt;
&lt;br /&gt;
Różnica w pomocniczym numerze rewizji oznacza zmiany kompatybilne (np. poprawki błędów). Zmiana głównego numeru rewizji oznacza, że rdzeń jest niezgodny z poprzednimi.&lt;br /&gt;
&lt;br /&gt;
Ten schemat obowiązuje od wersji rdzenia 1.21. Rdzeń 1.20 nie ma znacznika Rambo. Rdzenie wcześniejsze od 1.20 mogą być niekompatybilne ze sobą mimo tego samego głównego numeru rewizji (tzn. 0 - rdzeń FX 1.10 nie istnieje). Rdzenie wcześniejsze niż 1.08 w ogóle nie mają numeru rewizji rdzenia, pod tym adresem odczyta się $FF.&lt;br /&gt;
&lt;br /&gt;
=== Odczyt numeru rewizji rdzenia FX ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
; 2010 by KMK/DLT&lt;br /&gt;
;&lt;br /&gt;
; Based on:&lt;br /&gt;
; VBXE FX core 1.21 Programmer&amp;#039;s Manual example code, (c) Electron&lt;br /&gt;
;&lt;br /&gt;
; run after jsr vbxe_detect&lt;br /&gt;
;&lt;br /&gt;
vb_rambo = $80&lt;br /&gt;
vb_rev   = $81&lt;br /&gt;
vb_page  = $82&lt;br /&gt;
;&lt;br /&gt;
get_fx_version&lt;br /&gt;
        lda #$00&lt;br /&gt;
        sta vb_rambo&lt;br /&gt;
        sta vb_page&lt;br /&gt;
        lda _vbxe_write+2&lt;br /&gt;
        sta vb_page+1&lt;br /&gt;
&lt;br /&gt;
        ldy #$40&lt;br /&gt;
        lda (vb_page),y         ;get CORE_VERSION&lt;br /&gt;
        cmp #$10&lt;br /&gt;
        bne not_fx&lt;br /&gt;
&lt;br /&gt;
        iny&lt;br /&gt;
        lda (vb_page),y         ;get CORE_REVISION&lt;br /&gt;
        cmp #$ff&lt;br /&gt;
        beq not_fx&lt;br /&gt;
        asl&lt;br /&gt;
        ror vb_rambo&lt;br /&gt;
        lsr&lt;br /&gt;
        sta vb_rev&lt;br /&gt;
        and #$70&lt;br /&gt;
        cmp #$20                ;arbitrary revision number to be tested&lt;br /&gt;
        bne not_fx&lt;br /&gt;
        lda vb_rev&lt;br /&gt;
        clc&lt;br /&gt;
        rts&lt;br /&gt;
&lt;br /&gt;
not_fx  sec&lt;br /&gt;
        rts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykładowy program odczytuje numer wersji wykrytego (przez &amp;lt;code&amp;gt;jsr vbxe_detect&amp;lt;/code&amp;gt;) rdzenia FX. Jeśli rdzeń nie jest zgodny z FX 1.20, następuje powrót z ustawionym znacznikiem C. Jeśli rdzeń jest zgodny z FX 1.20, powrót następuje ze skasowanym znacznikiem C i dokładnym numerem rewizji w akumulatorze oraz, w przypadku rdzenia RAMBO, z ustawionym bitem 7 komórki &amp;lt;code&amp;gt;vb_rambo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
UWAGA: rdzeń FX o dokładnym numerze rewizji $20, tzn. 1.20, nie wykaże rozszerzenia RAMBO, gdyż użyty znacznik jest zdefiniowany dopiero od rdzenia 1.21; dla 1.20 trzeba przeprowadzić osobny test na tożsamość banków wybieranych przez [[Rejestry PIA#PORTB|PORTB]] i MEMAC.&lt;br /&gt;
&lt;br /&gt;
== Uwagi ==&lt;br /&gt;
&lt;br /&gt;
Test nie działa w przypadku rdzeni GTIA_emu (= tylko emulacja [[GTIA]]), gdyż nie mają one mechanizmów bankowania pamięci zaimplementowanych w FX. Rdzeń GTIA_emu ma tylko wartość magiczną CORE_VERSION ustawioną na $11, oraz zgodną z powyższym opisem wartość CORE_REVISION. Wykrycie takiego rdzenia polega więc na kolejnym odczycie $d640 i $d740, a jeśli odczytaną wartością jest $11, to przy odrobinie szczęścia mamy do czynienia z rdzeniem GTIA_emu wersja 1, i odpowiedniej rewizji (albo czymkolwiek innym, co akurat wykorzystuje strony d6-d7 i ustawi tam takie wartości).&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Niezbędnik kodera]]&lt;br /&gt;
[[Kategoria:Peryferia 8-bit]]&lt;br /&gt;
[[Kategoria:Programowanie Atari 8-bit]]&lt;br /&gt;
[[Kategoria:VBXE]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>