Policzenie aktywnych bitów magistrali adresowej

From Atariki

Jump to: navigation, search

Spis treści

Przeznaczenie i wymagania

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ęci liniowej można się spodziewać powyżej adresu $00FFFF.

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).

Zmienne na stronie zerowej

Wstępnie deklarujemy na stronie zerowej następujące zmienne:

bitcnt	.ds 1
adrmsk	.ds 1
adr	.ds 3
bsav	.ds 8

Kod

adrtest stz adr
	stz adr+1
	ldx #$01
	stx adr+2

	dex
?lp0    lda [adr]
	sta bsav,x
	asl adr+2
	inx
	bcc ?lp0

	stz bitcnt
	stz adrmsk

	rol adr+2

?lp1    stz !$0000
	lda adr+2
	inc
	eor #$ff
	sta [adr]
	cmp [adr]
	bne ?nx1
	eor #$ff
	sta [adr]
	cmp [adr]
	bne ?nx1
	lda !$0000
	bne ?nx1
	lda adr+2
	tsb adrmsk
	inc bitcnt
?nx1    asl adr+2
	bcc ?lp1

	rol adr+2

?lp2    lda adr+2
	bit adrmsk
	beq ?nx2
	inc
	cmp [adr]
	beq ?nx2
	dec
	trb adrmsk
	dec bitcnt
?nx2    asl adr+2
	bcc ?lp2

	rol adr+2

	ldx #$00
?lp3    cpx bitcnt
	bcs ?end
	lda adr+2
	bit adrmsk
	beq ?nx3
	lda bsav,x
	sta [adr]
?nx3    asl adr+2
	inx
	bcc ?lp3
?end	rts

Użycie

Procedurę uruchamiamy przez jsr adrtest. Wyniki znajdują się w zmiennych zadeklarowanych jako adrmsk i bitcnt:

  • bitcnt - liczba aktywnych bitów adresowych powyżej szesnastu (czyli np. "1" oznacza, że mamy do dyspozycji 17 bitów adresu)
  • 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.)

Uwagi

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:

Bit 21Bit 20Znaczenie
00Wybór adresów $000000-$0FFFFF (pamięć RAM)
01Wybór adresów $100000-$1FFFFF (pamięć RAM)
10Wybór adresów $200000-$2FFFFF (pamięć RAM)
11Wybór adresów $300000-$3FFFFF (pustka)
Personal tools