Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Cartrige do C64 - problem ze zmiana banków pamięci.

11111olo 05 Wrz 2008 19:45 18820 13
  • #1 05 Wrz 2008 19:45
    11111olo
    Poziom 43  

    Witam.
    Wiem ogólnie ja zrobić swój cartridge do Comodorka i wiem również, że linia 7 (IO/1) steruje się przez $DE00.
    Tylko nie wiem dokładnie jak. Zna ktoś odpowiedź?

    0 13
  • Pomocny post
    #2 06 Wrz 2008 00:44
    gsm_virus
    VIP Zasłużony dla elektroda

    11111olo napisał:
    steruje się przez $DEOO.
    Sorry ale dawno nie miałem do czynienia z "komódką" , ale ten kod powinien być jako $DE00 (końcówka to zero zero) i kod jest z assemblera pod C64.

    0
  • Pomocny post
    #3 06 Wrz 2008 01:56
    homis
    Poziom 16  

    Witam

    Jest dokładnie odwrotnie.
    Za adresowanie RAM/ROM jest odpowiedzialny w starszych wersjach C64 układ programowalnej tablicy logicznej ( PLA ) 82S100 i 74LS139 przez kombinację stanów logicznych na tych układach.
    A w nowszych C64II układ logic VLSI SHARP 252535-L01 który jest odpowiedzialny za adresowanie RAM/ROM + układ video 8565R2 + układ sid 8580R5 i tak dalej.

    Reasumując: To nie adres $DE00 steruje linią 7 (IO/1) tylko linia 7 adresem w powiązaniu z innymi liniami a do tego dochodzi jeszcze linia IRQ.
    Dzięki temu Commodorek był tak elastyczny i biedaczek dawał się oszukiwać (sprites poza ramką czy 256KB ram).

    Jest jeszcze jedna sprawa, w zależności od rodzaju programu w zawartego w cartridgu musi on zawierać sekwencję startową (pierwsze bajty) dla danego rodzaju adresu. W normalnych warunkach, tzn. programu wykonywalnego np. gry nie uruchomisz pod adresem $400 (pamięć ekranu) ponieważ pamięć C64 jest (teoretycznie) podzielona na Banki z przydzieleniem im funkcji, (adresy od $310 do $312 są odpowiedzialne za autostart gier po załadowaniu tam odpowiedniego kodu bez wpisywania RUN ), ale fachowcy od Commodorka potrafili wszystko na nim zrobić.

    Kiedyś, wiele lat temu gdy Commodore chylił się ku upadkowi trafiłem na ruską stronę z C64 16MB ram plus HDD, na zdjęciach to działało ale czy to prawda to głowy pod topór nie dam :/P

    Polecam lekturę

    1. Radosław Zieliński Programować może każdy.
    2. Krzysztof Gajewski,Bogusław Radziszewski Commodore 64 od środka, oraz parę innych na, allegro, na forach C64 i w internecie w Wyspiarskim języku :).
    Pozdrawiam

    Acha Istotne Adresy

    VIC $D000 - D02E
    Sid $D400 - $D7FF
    Color RAM $D800 - $DBFF
    CIA1 $DC00 - $DC0F
    CIA2 $DD00 - $DD0F
    I/01 $DE00 - $DEFF
    I/02 $DF00 - $DFFF
    Basic Rom $A000 - $BFFF
    Kernal Rom $E000 -$FFFF
    Character Rom $D000 - DFFF

    Adresy są takie same w obu wersjach C64

    Powodzenia

    0
  • Pomocny post
    #4 06 Wrz 2008 02:37
    MARCIN.SLASK
    Specjalista AGD

    Nie wiem czy to był żart, ale podobno odpalono na C64 z 256KB ramu i dwiema stacjami dyskietek coś co przypominało Windowsa i podobno umiał się połączyć z netem.

    0
  • Pomocny post
    #5 06 Wrz 2008 02:44
    homis
    Poziom 16  

    MARCIN.SLASK napisał:
    Nie wiem czy to był żart, ale podobno odpalono na C64 z 256KB ramu i dwiema stacjami dyskietek coś co przypominało Windowsa i podobno umiał się połączyć z netem.


    Witam
    1. To coś nazywało się GEOS C64.
    2. Nie wiem wtedy jeszcze w Polsce nie było Internetu dla Mass. :) , i ja internetu nie miałem :(
    Natomiast prawdą jest że GEOS 64 potrafił zaadresować 256KB Ramu ( jak to nazwać? "natywnie?" ) ponieważ była to konwersja z IBM a w tym czasie nikt nie przewidywał upadku Commodore.
    Na bazie GEOSA powstały potem Cartrige Final III i Final VII czyli tak zwane okienkowe (Windows) :)

    Pozdrawiam

    0
  • Pomocny post
    #6 06 Wrz 2008 07:58
    tronics
    Poziom 36  

    Cytat:
    Kiedyś, wiele lat temu gdy Commodore chylił się ku upadkowi trafiłem na ruską stronę z C64 16MB ram plus HDD, na zdjęciach to działało ale czy to prawda to głowy pod topór nie dam :/P

    SuperCPU/Super6502 lub po prostu 65816 - 16 bitowy większy brat procesora stosowanego w C64. Coś jak A64 vs Athlon XP ;) Chłopaki zrobili akcelerator, moduł super ram, dysk twardy...i 1 grę która wykorzystywała nowy procesor + 'odkryty' specjalny tryb graficzny (wyższa rozdzielczość). 256KB w C64 to chyba poprzez zmianę banków było obsługiwane.

    Może to koledze pomoże 'nieco'?
    http://home.wanadoo.nl/arjenvellekoop/indexuk.html

    0
  • #7 06 Wrz 2008 10:19
    11111olo
    Poziom 43  

    Dalej nikt nie odpowiedział na pytanie. Linia 7 nie może być WYJŚCIEM gdyż do niej podłączony jest pin 13 74LS393 - czyli zanegowane CLK (to podwójny licznik binarny).

    0
  • Pomocny post
    #8 06 Wrz 2008 15:40
    homis
    Poziom 16  

    Linia 7 jest wyjściem z cartrige port
    oto przykłady.

    Cartrige do C64 - problem ze zmiana banków pamięci. Cartrige do C64 - problem ze zmiana banków pamięci.Cartrige do C64 - problem ze zmiana banków pamięci.

    Linia 7 jest oznaczona jako I/O1

    Pozdrawiam

    0
  • #9 06 Wrz 2008 16:34
    11111olo
    Poziom 43  

    No dobra. Linia jest wyjściem. O to mi chodziło od początku tylko odwrotnie napisałem :/
    Ktoś wie jak nią sterować?

    0
  • Pomocny post
    #10 06 Wrz 2008 18:09
    homis
    Poziom 16  

    :arrow: Tronics podał link i tam jest w pdfie najprostrzy cartrige do C64 zresztą bardzo podobny do mojego pierwszego obrazka.

    Cytat z serwisówki C64
    Adresowanie układów wejścia/wyjścia

    Wyjście F5 układu PLA (k.12) oznaczone jako I/O przechodzi w stan "niski", jeżeli wybrany jest którykolwiek układ we/we sterowany przez układ 74LS139.

    Port Cartrige

    Port rozszerzenia jest przedłużeniem szyny danych, szyny adresowej i sygnałów sterujących mikroprocesora. Oprócz tego, wyprowadzone są sygnały ROML i ROMH. Pierwszy z nich uaktywnia układy umieszczone od adresu $8000 do $9FFF, a drugi od $E000 do $FFFF.
    Przy pomocy tych wyjść układ pla wybiera cartrige zainstalowany na porcie.
    Dalsze sygnały I/O1 i I/O2 generuje układ 74LS139.
    Sygnał I/O1 uakytwnia układy umieszczone od adresu $DE00 do #DEFF. sygnał I/O2 uaktywnia układy umieszczone od adresu $DF00 do $DFFF.

    Reasumując, tymi sygnałami steruje się przez odpowiednią konfigurację cartriga i doprowadzonych do niego sygnałów.
    Teraz należy przeanalizować podane schematy, poeksperymentować i powinno zadziałać.

    Powodzenia i Pozdrawiam

    0
  • #12 06 Wrz 2008 23:42
    homis
    Poziom 16  

    Ok tylko proszę podać na PW dwa numery pcb.

    PCB Assy no. xxxxxx
    PCB no xxxx REV x

    Tych wersji jest sporo i nie wszystkie mam, ale coś się dobierze.
    Oraz gdzie mam to wysłać

    Pozdrawiam

    0
  • #13 21 Wrz 2008 19:20
    11111olo
    Poziom 43  

    Przeczytałem dokładnie to co napisaliście i nadal nie uzyskałem odpowiedzi.
    Piszecie bardzo ogólnie i krążycie wokół tematu.
    Może to wam ułatwi na odpowiedzenie na moje pytanie.

    Posiadam cartridge'a Super Game Pack III.
    Jest w nim EPROM 64 KB (512Kb).
    Dorobiłem sobie przełącznik do dumpowania cartridg'y i w ten sposób skopiowałem pierwsze 8 KB na IEC-ATA.
    Zauważyłem również że menu cartridge'a zaczyna się od c000 i dlatego poniżej zamieściłem program na odczyt 1 i 7 gry.

    Code:

    c0c9 ldx #00    Załaduj #00 do rejestru X   |
    c0cb lda #90    Załaduj #90 do akumulatora  |
    c0cd jsr c141   Wykonaj podprogram od c141  | Przepisanie 1 gry
    c0d0 jsr c159   Wykonaj podprogram od c159  |
    c0d3 rts        Zakończ działanie programu  |
    ...
    c117 ldx #06    Załaduj #06 do rejestru X   |
    c119 lda #9f    Załaduj #9f do akumulatora  |
    c11b jsr c141   Wykonaj podprogram od c141  | Przepisanie 7 gry
    c11e jsr c159   Wykonaj podprogram od c159  |
    c121 rts        Zakończ działanie programu  |

    c141 sta   fc   Zapisz zawartość akumulatora do komórki fc
    c143 lda #00    Załaduj #00 do akumulatora
    c145 sta   fb   Zapisz zawartość akumulatora do komórki fb
    c147 lda #01    Załaduj #01 do akumulatora
    c149 sta   fd   Zapisz zawartość akumulatora do komórki fd
    c14b lda #08    Załaduj #08 do akumulatora
    c14d sta   fe   Zapisz zawartość akumulatora do komórki fe
    c14f txa        Wpisz zawartość rejestru X do akumulatora
    c150 beq c164   Jeśli zawartość akumulatora = 0 wtedy wykonaj warunkowy skok do c164
    c152 sta de00   Zapisz zawartość akumulatora do komórki de00 (co ta komórka oznacza?
    c155 dex        Odejmij 1 od rejestru X
    c156 jmp c14f   Wykonaj bezwarunkowy skok do c178
    c159 lda #00    Załaduj #00 do akumulatora
    c15b sta   fb   Zapisz zawartość akumulatora do komórki fb
    c15d lda #80    Załaduj #80 do akumulatora
    c15f sta   fc   Zapisz zawartość akumulatora do komórki fc
    c161 sta de00   Zapisz zawartość akumulatora do komórki de00 (co ta komórka oznacza?)
    c164 ldy #00    Załaduj #00 do rejestru Y
    c166 lda (fb),y Załaduj zawartość komórki fb do akumulatora w sposób pośredni Y
    c168 sta (fd),y Zapisz zawartość akumulatora do komórki fd w sposób pośredni Y
    c16a iny        Dodaj 1 do rejestru Y
    c16b bne c166   Jeśli Y <> 0 wykonaj warunkowy skok do c166
    c16d inc   fc   Dodaj 1 do komórki fc
    c16f inc   fe   Dodaj 1 do komórki fe
    c171 lda   fc   Załaduj zawartość komórki fc do akumulatora
    c173 cmp #a0    Porównaj zawartość akumulatora z wartością #a0
    c175 bne c166   Jeśli <> wykonaj bezwarunkowy skok do c166
    c177 rts        Zakończ działanie programu 


    Jak widać znam się na asemblerze C64 tylko nie rozumiem co w sposób fizyczny robią linie c152 i c161.

    Znalazłem na stronie http://www.fooman.fi/load.php?topic=programming&doc=Jens coś takiego:


    Cytat:
    RR Control Register ($DE00)

    7 6 5 4 3 2 1 0
    A15 StdMap ROM/RAM A14 A13 Disable ~/EXROM /GAME

    Bit 5: 0=ROM, 1=RAM. The operation of bits 0 and 1 is mixed: /GAME is active (line low) when bit 0 is one, but /EXROM is active (line low) when bit 1 is zero! Normal cartridge mode is thus achieved with register value 0, ie. /GAME high and /EXROM low, which makes the cartridge visible at $8000.

    When the Freeze button is pressed, the RR invokes a special memory configuration. Bit 6 restores the standard memory map after a Freeze. It's a toggle type bit, which needs to be written with a 1 before returning from Freeze handling. Bits 7, 4 and 3 drive the FlashROM's (or RAM's for bits 4 and 3) corresponding address lines. Bit 2 is also toggle and writing a 1 to it will immediately make the RR disappear until hardware reset.


    Linie A15, A14, A13 i /GAME nie są wykorzystane w tym cartridge'u.

    W jaki sposób to działa?

    0
  • Pomocny post
    #14 19 Sie 2009 21:18
    r2d2004
    Poziom 31  

    Witam!

    11111olo napisał:
    ... de00 (co ta komórka oznacza?)


    "
    OBSZAR PAMIECI: 56832 - 57087 (DE00 - DEFF) - odpowiedzialny za sterowanie cartridge'ami.

    Ten obszar pamięci nie jest używany w sposób bezpośredni przez wewnętrzny hardware C64. Jest on dostępny przez złącze 7 wtyku cartridge'a (expansion port) i może być użyty do sterowania cartridge'm dołączonym do tego wtyku. Na przykład, moduł CP/M używa tego obszaru do sprawdzania, jaki mikroprocesor zarządza systemem. Przez zapis do lokacji tego bloku, mikroprocesor Z-80 (w module CP/M) jest włączany lub wyłączany. Innym Cartridge'm używającym tego obszaru jest "Simon's BASIC". Ten Cartridge o pojemności 16k jest adresowany w obszarze 32768-49151 (8000-BFFF), co oznacza, że pokrywa on wewnętrzny ROM interpretera BASIC-a znajdującego się w lokacjach 40960-49151 (A000-BFFF). Ponieważ "Simon's BASIC" zawiera dodatki dla wewnętrznego BASIC-a Commodore 64, musi używać również ROM-u interpretera. Problem ten jest rozwiązywany przez przekopiowanie zawartości cartridge'a z lokacji 32768-40959 (8000-9FFF) do pamięci RAM i przez włączanie i wyłączanie go przez zapis lub odczyt lokacji 56832 (DE00).
    "
    Koniec cytatu, który pochodzi z tłumaczenia polskiego, doskonałej pozycji: Sheldon Leemon "Mapping the Commodore 64". Pozycja obowiązkowa dla wszystkich, którzy chcą "pogrzebać" w tej kultowej "maszynce", jaką jest C64 (tłumaczenie tej pozycji jest na pewno dostępne w środowisku "Commodorowców").

    Pozdrawiam
    PS Np. TUTAJ dostępne są schematy do wszystkich komputerów Commodore i urządzeń z nimi współpracujących. Warto ściągnąć, póki link jest aktywny.

    0