Konwersja numeru banku MEMAC B na PORTB i odwrotnie

From Atariki

Revision as of 13:30, 26 paź 2009; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Rdzeń FX VBXE może emulować wewnętrzne rozszerzenie pamięci Rambo XL. W takiej sytuacji część (wyższe 256 KB) pamięci VRAM jest widziana przez komputer jako 16 banków rozszerzenia pamięci RAM, którym steruje rejestr PORTB.

Kolejne banki pamięci Rambo XL odpowiadają bankom MEMAC B o numerach od 16 do 31, w następujący sposób:

MEMAC B $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A $1B $1C $1D $1E $1F
PORTB   $83 $87 $8B $8F $A3 $A7 $AB $AF $C3 $C7 $CB $CF $E3 $E7 $EB $EF

Powyższa tabela dotyczy rdzeni FX starszych niż wersja 1.20. W rdzeniu 1.20 odwrócono kolejność banków tak, że bank o kodzie PORTB $83 jest ostatnim, a nie pierwszym z listy banków MEMAC B współdzielonych z rozszerzeniem Rambo XL:

MEMAC B $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A $1B $1C $1D $1E $1F
PORTB   $EF $EB $E7 $E3 $CF $CB $C7 $C3 $AF $AB $A7 $A3 $8F $8B $87 $83

Zmianę tę wprowadzono ze względu na sposób alokacji pamięci dodatkowej przez SpartaDOS X. Ten DOS zajmuje banki rozszerzenia "od końca", a więc 64 KB dostępne jako banki PORTB o kodach $83-$8F zostaną zajęte jako pierwsze. W poprzednich rdzeniach ten obszar wypadał na środku pamięci VBXE, teraz jest to jej koniec.

W celu konwersji można skorzystać z tabelki jak powyżej albo, jeśli ważny jest raczej rozmiar programu niż czas jego wykonywania się, z jednej z poniższych procedur.

Konwersja MEMAC B na PORTB

; MEMAC B -> PORTB
; we: nr banku MEMAC B w akumulatorze
; wy: kod PORTB w akumulatorze

   ora #%11110000
   lsr 
   php
   lsr
   php
   asl
   plp
   rol
   plp
   rol
   rol
   rol

Dla rdzenia FX 1.20 na końcu procedurki należy dodać jeszcze eor #$6c.

Konwersja PORTB na MEMAC B

; PORTB -> MEMAC B
; we: kod PORTB w akumulatorze
; wy: nr banku MEMAC B w akumulatorze

   ora #%10000000
   lsr
   lsr
   lsr
   php
   lsr
   php
   lsr
   plp
   rol
   plp
   rol

Dla rdzenia FX 1.20 na początku procedurki należy dodać jeszcze eor #$6c.

Personal tools