atarionline.pl MaxPlus - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1:
       
      CommentAuthorgienekp
    • CommentTime4 Sep 2022 zmieniony
     
    MaxFlash 128/+/512

    Zachciało mi się potestować DOSy. No ale że ten, o którym tak wszyscy piszą czyli SpartaDOS wymaga carta no to nie pozostało nic innego jak zrobić sobie takie cudo. Ponieważ, sam projekt rozpocząłem jakieś 4 miesiąc temu i nic nie wskazywało na to, że braknie GALi więc idąc na łatwiznę, stwierdziłem, że na płytce musi być minimum elementów. Pamięć musi być, a że cart będzie ReadOnly to i tak programator będzie potrzebny, więc wezmę największego GALa czyli ATF22V10C, przewlekane, jakiś kondensator przeciwzakłóceniowy i gotowe.

    Teoria teorią, wyszły mi 4 projekty (potem opiszę pozostałe). W każdym razie skoro jest jeden większy GAL to i nóżek programowalnych więcej. Więc można by coś więcej dodać.
    I tak powstał projekt MaxFlash128kBplus. Dlaczego PLUS to zaraz...

    Wszystko co potrzeba do zrozumienia co jest w GALach jest na GiHubie:
    ->link<-

    Projekt płytki jest banalny. Lecą same druty od ATARI do pamięci i GALa. Jeden kondensator, ale bez niego na moim starym zasilaczu działa. W zasadzie niema co tam śmiecić.
    Pamięci obsługiwane to: SST39SF010A, SST39SF020A, SST39SF040 (te miałem i te testowałem).

    Płytka została zrobiona na bazie szablonu kolegi Mariusza "Mq" za co należy mu bardzo podziękować! PCB pasuje do obudów Sikora.
    Projekt płytki udostępniłem eksperymentalnie na PCBWay. ->link<-
    Nie wiem jak to wyjdzie w praktyce to szarowanie z PCBWaya ale jest okazja przetestować. :)

    SpartaDOS dla MaxFlasha128kB zajmuje 128kB :) Pomyślałem, skoro mam niewykorzystane linie w GALu to pociągnę resztę Adresów i zrobię taki trik. Dla pamięci 256kB do pierwszej 128-ki wstawię SpartaDOS oficjalnego a do drugiej 128kB wstawię sobie Betę. SpartaDOS nic nie będzie wiedział, że jest jakieś inne 128kB a przełączanie tych... no nazwałem to stronami (a to dlatego, że poboczny pomysł z atr2car sugerował, że można by udawać obracanie dyskietki...inna bajka). SprataDOS pstryka $D500+x i wyłącza $D510. Jak mu klepnę POKE $D521,1 ($D52X - nr stron) to podmieni mu się całe 128kB. Robię reset i wstaje SpartaDOS beta który nic nie wie, że była jakaś inna rzeczywistość. Więc pstrykając $D500+x nadal wszystko działa.

    No a, że w praktyce pociągnięte są A7,A6,A5,A4 no to i MaxFlash(new) z pamięcią 512kB też zadziała. I tak w zasadzie jedną płytką można obskoczyć 3 standardy. W zależności co wgramy do GALa taki mamy standard.

    Wsady do GALi niewiele się różnią.

    MaxFlash128kB - Tutaj A0-A3 bankuje A5-A7 pilnuje zakresu $D5xx
    /* ****************** LOGIC *********************** */
    nPHI2 = ( !PHI2 );

    nRW = ( !RW );
    CCTL = ( !nCCTL );
    nA4 = ( !A4 );
    A = ( !A5 ) & ( !A6 ) & ( !A7 );

    nCE = ( nS5 # nRW );
    trig = ( A & CCTL);
    ntrig = !trig;

    RD5.D = !( ( trig & A4 ) # ( ( !trig ) & ( !RD5 ) ) );
    RD5.ar = 'b'0;
    RD5.sp = 'b'0;
    RD5.OE = 'b'1;

    A13.D = ( ( trig & A0 ) # ( ( !trig ) & A13 ) );
    A14.D = ( ( trig & A1 ) # ( ( !trig ) & A14 ) );
    A15.D = ( ( trig & A2 ) # ( ( !trig ) & A15 ) );
    A16.D = ( ( trig & A3 ) # ( ( !trig ) & A16 ) );
    A17.D = 'b'0;
    A18.D = 'b'0;


    MaxFlash 128kBplus - jak powyżej ale jest wybór strony, żeby zachować zgodność w dół. Za to można np. 4 SpartaDOSy wgrać.
    * ****************** LOGIC *********************** */
    nPHI2 = ( !PHI2 );

    nRW = ( !RW );
    CCTL = ( !nCCTL );
    nA4 = ( !A4 );
    A = ( !A5 ) & ( !A6 ) & ( !A7 );
    B = ( A5 ) & ( !A6 ) & ( !A7 );

    nCE = ( nS5 # nRW );
    trig = ( A & CCTL); /* & nRW );*/
    ntrig = !trig;
    mode = ( B & CCTL); /* & nRW );*/

    nmode = !mode;

    RD5.D = !( ( trig & A4 ) # ( ( !trig ) & ( !RD5 ) ) );
    RD5.ar = 'b'0;
    RD5.sp = 'b'0;
    RD5.OE = 'b'1;

    A13.D = ( ( trig & A0 ) # ( ( !trig ) & A13 ) );
    A14.D = ( ( trig & A1 ) # ( ( !trig ) & A14 ) );
    A15.D = ( ( trig & A2 ) # ( ( !trig ) & A15 ) );
    A16.D = ( ( trig & A3 ) # ( ( !trig ) & A16 ) );
    A17.D = ( ( mode & A0 ) # ( ( !mode ) & A17 ) );
    A18.D = ( ( mode & A1 ) # ( ( !mode ) & A18 ) );


    MaxFlash1MB(new) a w zasadzie JACART512kB ReadOnly - tu latamy po całym zakresie ALE bez A6.
    /* ****************** LOGIC *********************** */
    nPHI2 = ( !PHI2 );

    nRW = ( !RW );
    CCTL = ( !nCCTL );
    nA7 = ( !A7 );
    A = ( !A6 ) & ( !A7 );

    nCE = ( nS5 # nRW );
    trig = ( A & CCTL);
    ntrig = !trig;

    RD5.D = !( ( trig & A7 ) # ( ( !trig ) & ( !RD5 ) ) );
    RD5.ar = 'b'0;
    RD5.sp = 'b'0;
    RD5.OE = 'b'1;

    A13.D = ( ( trig & A0 ) # ( ( !trig ) & A13 ) );
    A14.D = ( ( trig & A1 ) # ( ( !trig ) & A14 ) );
    A15.D = ( ( trig & A2 ) # ( ( !trig ) & A15 ) );
    A16.D = ( ( trig & A3 ) # ( ( !trig ) & A16 ) );
    A17.D = ( ( trig & A4 ) # ( ( !trig ) & A17 ) );
    A18.D = ( ( trig & A5 ) # ( ( !trig ) & A18 ) );


    Uwagi:
    - atr2max i atr2jac z pobocznego wątku jest z tym zgodny
    - o wersję z zapisem to pytać jhusak i mq, oni mają swoje rozwiązania sprawdzone
    - GALi przewlekanych nie ma, ale są TSSOPY i można się ratować ->link<-
    - z tym projektem można robić co się chce. Kopiować, zmieniać, handlować...
    - jak dokończę pozostałe projekty to chętnym mogę wysłać płytki PCB. Zamawiałem to przy okazji innych projektów, a chińczyk zawsze coś tam więcej doprodukuje. Bez transportu, bez VATu itd
    • 2: CommentAuthorMq
    • CommentTime4 Sep 2022
     
    Bardzo fajny projekt. Gratuluję ukończenia:-)
    • 3:
       
      CommentAuthorpancio
    • CommentTime4 Sep 2022 zmieniony
     
    Super to wygląda.. jeszcze muszę się zagłębić w sczegóły ale juz mi się baaaardzo podoba :-) No i reflektowałbym ja jakies jedno PCB do testów
    • 4:
       
      CommentAuthorgienekp
    • CommentTime4 Sep 2022 zmieniony
     
    Tak będą PCB dla testerów, nie ma problemu.

    Wracając do tematu, to tak edukacyjnie, wyjaśnienia może wymagać jeden trik. Z moich obserwacji zwykle carty atari wymagają sterowania, gdzie COŚ jest zatrzaskiwane pod jakimś warunkiem i to zatrzaśnięte jeszcze jest korygowane (jakieś NOTy czy coś podobnego). Czyli jest zatrzask wyzwalany logiką i wyjście też pasowałoby potraktować logiką.

    Tymczasem GALe są budowane na jedno kopyto, gdzie jest logika i zatrzask na wyjściu.

    Ponieważ jedynie co można zrobić to zabrać sygnał z pinu wyjściowego i wpuścić do logiki, to robiąc trik z zatrzaskiwaniem na KAŻDYM zboczu PHI2 sygnału albo starego (starej wartości) albo nowego (nowej wartości) można jakby wybrnąć z tej sytuacji. Wtedy logika jest przed zatrzaskiem, ale działa jakby była wokół niego.
    • 5:
       
      CommentAuthorgienekp
    • CommentTime10 Sep 2022 zmieniony
     
    No a teraz projekt, który był troszkę wcześniej.
    Nakręcony kartami S-XEGS nie zauważyłem, że MaxFlashe lecą na adresach a nie na danych :)
    Kompletnie mi nie przyszło do głowy, że można coś samymi adresami robić. A że dane troszkę trudniej się robi, więc poprzeczka była wyżej.
    Tak czy siak prezentuję projekt jaki z tego wyszedł bo może kiedyś komuś taka wiedza się przyda, choćby edukacyjnie. Takiego standardu nie było, a że otwieram go totalnie i można z nim robić co się chce, nawet handlować, no to jakby ktoś chciał jakąś gierkę wydać i miał opory czy czasem jakieś licencje go nie blokują, to może wziąć ten projekt i będzie super.

    Kody są tu:
    ->link<-

    Płytka zgodna z obudowami Sikora i na szablonie Mq jest tu:
    ->link<-

    I dla porównania jak się GALem "robi" dane:
    nPHI2  = ( !PHI2 );

    nRW = ( !RW );
    CCTL = ( !nCCTL );
    nA4 = ( !A4 );
    A = ( !A5 ) & ( !A6 ) & ( !A7 );
    B = ( A5 ) & ( !A6 ) & ( !A7 );

    nCE = ( nS5 # nRW );
    trig = ( A & CCTL & nRW );
    ntrig = !trig;
    mode = ( B & CCTL & nRW );
    nmode = !mode;

    RD5.D = !( ( trig & A4 ) # ( ( !trig ) & ( !RD5 ) ) );
    RD5.ar = 'b'0;
    RD5.sp = 'b'0;
    RD5.OE = 'b'1;

    A13.D = ( ( trig & D0 ) # ( ( !trig ) & A13 ) );
    A14.D = ( ( trig & D1 ) # ( ( !trig ) & A14 ) );
    A15.D = ( ( trig & D2 ) # ( ( !trig ) & A15 ) );
    A16.D = ( ( trig & D3 ) # ( ( !trig ) & A16 ) );
    A17.D = ( ( mode & D0 ) # ( ( !mode ) & A17 ) );
    A18.D = ( ( mode & D1 ) # ( ( !mode ) & A18 ) );


    Czyli zamiast Ax jest Dx. Z tym, że przy danych już musi być na opadającym PHI2 więc ten trik z wpuszczeniem zegara do GALa i wypuszczeniem w negacji dla pinu dedykowanego do zatrzaskiwania musi być. Przy poprzednim rozwiązaniu jest to niekonieczne (adres można łapać i na narastającym zboczu).

    atr2max jest z tym zgodny. A to dlatego, że jak robimy
    LDX #$03 ; np. 3-ci bank
    STA $D500,X

    to ustawiamy i adres i dane.

    Więc robiąc jakiś program można go zrobić "podwójnie" zgodnym. I z maxflashem1Mbit i z tą płytką, która jest troszkę inaczej. I w ogóle można sobie powymyślać coś w tym GALu jeszcze i zrobić jak się komu podoba.
    c.d.n

    P.S. jak się ogarnę to i te płytki powysyłam gratisowo chętnym do testów.
    • 6:
       
      CommentAuthorpirx
    • CommentTime12 Sep 2022
     
    krótkie pytanko, bo na cartach się za bardzo nie znam - czy jest możliwość / istnieje kart, który by miał 32KiB ciągłej pamięci - od $4000 do $bfff, bez żadnego bankowania, po prostu 32 kilo.
    Jakby był, to by się na niego dało naszego skorcza zrobić.
    • 7:
       
      CommentAuthorpirx
    • CommentTime12 Sep 2022
     
    no dobra, pewnie się nie da, najwyżej od $8000 do $bfff, ale może jest jakaś magia(?)
    • 8:
       
      CommentAuthorPecus
    • CommentTime12 Sep 2022
     
    To ja Ci odpowiem :)
    Nie da się :)
    • 9:
       
      CommentAuthorgienekp
    • CommentTime12 Sep 2022
     
    ATARI chciało mieć tylko 2 przełączane banki. Pierwszy $8000-$9FFF i drugi $A000-$BFFF. Ale jakby trzeba ciągłości to możnaby jednym bankiem to zrobić. Przy INIT kopiować po 8k bajtów z banków najpierw do $4000-$5FFF potem przełączyć bank i skopiować do $6000-$7FFF potem do $8000... I na koniec zostawić $A000 i wyjść z init. RUN carta i system zacznie jakby od $4000 do $BFFF były dane.
    • 10: CommentAuthortebe
    • CommentTime12 Sep 2022 zmieniony
     
    tia, to może od razu 16MB, taki podręczny carcik do Rapiduska ;)
    • 11:
       
      CommentAuthorjhusak
    • CommentTime12 Sep 2022
     
    @pirx - takie gry się po prostu kopiuje z kartridża i uruchamia :) Trwa to moment niezauważalny.