Dodatkowe bloki ramdysku są podzielone na kawałki po 16K które można przełączać z obszarem RAMu zaczynającym się od szesnastkowo &4000.
Służy do tego komenda OUT &7F00,nr_bloku W rozszerzeniu 64K do CPC464 te bloki mają numery od 196 do 199, a standardowy blok to 192.
Bloki w rozszerzeniu dktronics sa numerowane od 0 do 3 lub 15 w zaleznosci czy to 64kb czy 256kb.
Z basica tak sie je przelacza: out #7f00, 196+(nr_banku and 3) + (bank AND 28)*2
Choć niektórzy je tak przerabiali by te bloki miały nr takie same jak ramdysk w CPC6128 czyli od 204 do 207, bo dzięki temu więcej softu dla tego modelu działała też na 464.
Banki na 6128 sa numerowane od 0 - te numery, ktore podajesz to nie numer banku tylko wartosc wpisywana do rejestru RMR. Definiuje ona uklad pamieci wg ponizszego schematu:
bit nr 7 6 5 4 3 2 1 0
stan 1 1 p p p x b b
gdy bit 2 jest rowny 1,to:
p stanowi numer 64k strony pamieci (od 0 do 7), Kazda ze stron jes podzielona na 16kb banki. bb definiuje nr banku pamieci (0-3) strony p, ktory jest mapowany pod #4000-#7fff
Gdy bit 2 jest rowny 0, to:
p stanowi numer 64k strony pamieci - od 0 do 7.
bity 1 i 0 definuja sposob mapowania bankow pamieci dodatkowej do glownej.
0 - tylko pamiec bazowa
1 - bank 3 strony p od #c000-#ffff
2 - cala pamiec glowna zastapiona strona pamieci p
3 - bank 3 strony p od #c000-#ffff, bank 3 bazowej pamieci #c000-#ffff zmapowany pod #4000-#7fff
Ten tryb (tzw. C3) czesto nie dziala w przypadku zewnetrznych rozszerzen pamieci, bo wymaga wymuszenia z zewnatrz na szynie adresowej sygnalu. Dktronics wykorzystuje tu trick, ktory moze sie zle skonczyc dla z80...
464 z Dktronics w kwestii pamieci jest w pelni kompatybilny z 6128. Ta pamiec dziala dokladnie tak samo - to, ze wpisujesz inne wartosci do outa wynika z tego, ze w basicu wiekszosc z opisanych trybow trudno wykorzystac ze wzgledu na polozenie zmiennych systemowych, basica, stosu itp.
Out 7f00, 196 - 196 to inaczej #c4 czyli binarnie 11000100, czyli tryb z bitem 2 rownym 1 - podlaczenie banku 0 ze strony 0 pod #4000. Dodajac 15-30 mozesz przetestowac cala pamiec np. czyms takim:
10 MEMORY &3FFF
20 total=64
30 FOR page=0 TO 7
40 FOR bank=0 TO 3
50 value=&C4+(page*8+bank)
70 OUT &7F00,value: POKE &4000,&FF: OUT &7F00,&C0: POKE &4000,&7F: OUT &7F00,value
80 retval=PEEK(&4000)
90 IF retval=&FF THEN total=total+16: PRINT "Found memory: page ";page;" bank: ";bank
110 NEXT:NEXT
120 OUT &7F00,&C0
130 PRINT "Total mem found:";total;"kb"
Dodałem mój tester RAMu w DSK. Obczaja rozszerzenia do 512K. Teoretycznie zmienna t zmieniona z 31 na 255 powinna badać nawet 4MB, ale w testach na niektórych emulatorach głupieje i bywa że każde dodatkowe 16K liczy jako 128K. Nie jestem pewien czy coś poknociłem w programie czy to te emulatory w rzeczywistości dodają tyle ile wykazuje mój program. Trzeba by to sprawdzić na prawdziwym. 
System wspiera tylko max 576kb - wynika to z prostego przeliczenia: 8 stron po 64kb + 64kb podstawowej pamieci. Wszystkie rozwiazania obslugi pamieci powyzej tej wartosci sa rozwiazaniami poszczegolnych producentow i oczywiscie nie sa ze soba w pelni kompatybilne. Zreszta chyba sa tylko 2 lub 3 takie karty