wersja 1.0

Mapa pamięci C64+

(Memory expansion bassed on internal 256 kB memory expansion published in MikroBITTI, version called 1795 done by Kenjiro/3lux in 1995, see old prototype foto assebled with 2x44256!, optional software: 
http://www.zimmers.net/anonftp/pub/cbm/documents/projects/memory/c64/index.html)

Rozszerzenie do 2MB.

Bank0 $0000 - $3FFFF;
Bank1 $4000 - $7FFFF;
Bank3 $8000 - $BFFFF;
Bank4 $C000 - $FFFFF;

Po restarcie ustawienie banków wynosi CDEF; Przykładowo ustwiajając wartość na CCCC w adresach 0000-00ff, 4000-40ff, 8000-80ff, c000-c0ff jest strona zerowa.
Możliwych kombinacji ustawień jednego banku jest 128 co przy wielkości banku 16KB daje przestrzeń adresową 2MB, widzianą przez vic i cpu.

Wszystkie adresy rejestrów rozszerzenia w normalnej konfiguracji znajdują się w obszarze adresowym CIA1 czyli $DC00 - DCFF;
W obszarze $DC00 - DC3F znajdują sie adresy 6526 (CIA1)

DC80-DC9F - rejestry 1Fx IDE
DCA0-DCBf - rejestry 3Fx IDE

Odczyt 16BIT:
LDA $DC80 *
STA LOBYTE
LDA $DC81
STA HIBYTE

ZAPIS 16BIT
LDA HIBYTE
STA $DC81
LDA LOBYTE
STA $DC80 *

Rejestr $DC80 jest 16 bitowy (*-fizyczny odczyt/zapis wartości 16-bitowej) , pozostałe rejestry są 8-bitowe.
-------------------------------------------------------------------
DCC0-DCE0 - rejestry rozszerzenia
W celu zachowania zgodności z softem datowanym na 10-20 lat wstecz, adresy rozszerzenia emulują "troche" 6821.
DCC0 - rejestr Bank 0 i 1 (ustawienie po resecie $DC)
DCC1 - rejestr Bank 0 i 1 ($00) (BITY (0-1) Bank0 HI ($00); BIT 2- zezwolenie zapisu wartości $DCC0 (0-blokada);BIT (3) wystawienie $1000 pod DF00, używane do szybkiego getbyte, putbyte i do fixowania adresu VIC'a (uwaga na cartridge !); Bit4-bit6 Bank1 HI)
Przestrzeń adresowa max Bank0 4+2x16kB=1MB
Przestrzeń adresowa max Bank1 4+3x16kB=2MB
DCC2 - rejestr Bank 2 i Bank3 LO ($FE)
DCC3 -rejestr Bank 2 i 3 HI ($00) (BIT 0-1 Bank2; BIT2 -zezwolenie zapisu wartości $DCC2 (0-blokada),BIT 3 Bank2, BIT 4-6 Bank3)
Pozostałe bity powinny być ustawiane na zero i traktowane jako zarezerwowane.
Typowe ustawienie rejestrów:
LDA #$04
STA $dcC1
Sta $dcC3
lda #$DC
sta $DCC0
lda #$FE
STA $DCC2
Zapis do BANK 0 (LO i HI) powoduje zmianę banku F-ROM (16KBx5bit=512KB max, po resecie: %01101)	
-------------------------------------------------------------------------------------------
Obszar $dc40 - $dc7F
FLashROM:
Adres $DC40- - DC41

TRYB FLASH (zworki w pozycji flash)
DC40 - LO adres flash
DC41 - BIT 0-2 Hi adres flash 3-6 nieużywane 7 - zezwolenie na zapis/odczyt z adresu 
$DF00-$DFFF

DF00-DFFF - zawartość flesh'a po zezwoleniu zapis/odczyt.
		------------------------------------------------------
TRYB PRACY NORMAL:
DC40 - lo byte PWM - jeżeli SWAP = '0';
	hi byte PWM - jeżeli SWAP = '1';
DC41 - 0-3 hi nibble PWM, jeżeli SWAP = '0'
	0-3 lo nibble PWM, jeżeli SWAP = '1'		
	BIT 7 - przyśpieszenie ca. +28,5% (1,266MHz) (1-ON po resecie 0)
		pomysł z artykułu Spider/APD www.filety.pl/sprzęt/przełącznik1.4MHz. 
	BIT 6 - PCM signed/unsigned (wykonuje XOR MSB w zależności od wartości 			SWAP);
	BIT 5 - swap , zamiana bitów (DC40 HI byte, DC41 LO nibble), 
				----------------------------------
				16PCM 
				lda pcm16lo
				lsr a
				lsr a
				lsr a
				lsr a
				ora #%01100000 ; SWAP=1, value signed.
				sta $dc41
				lda pcm16hi
				sta $dc40
				-----------------------------------
				12PCM - 2 value player
				lda pcm12lo1
				sta $dc40     ; LSB
				lda pcm12hi
				and #$0f      ; unsigned 12bit
				sta $dc41     ; hi nibble
						
				lda pcm12hi
				lsr a
				lsr a
				lsr a
				lsr a
				ora #%00100000 ; unsigned 12bit swap=1
				sta $dc41      ; lo nibble  
				lda pcm12hi2
				sta $dc40     ; MSB    
				------------------------------------
				8PCM
				lda #%01100000 ; 0-3 możemy używać do dihteringu
				sta $dc41 ; ustawiamy tylko raz

				lda pcm8       ; MSB
				sta $dc40
				
	---------------------------------------------------------------------------------
DC60 - DC7F - Obszar sterowania MSP430 (underconstruction)
		DC60 in/out register,
		DC81 output only register z handshake
		DC62 Status register
			B7 - handshake read only,
			B6 - kierunek in/out (0 - in)
			B0 - komenda/dane (0 - command)
-------------------------------------------------------------------------------------------
5.05.08 by Kisiel/ICON

	




