atarionline.pl 8MB RAM do Atari XL/XE - 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: CommentAuthorAcidMaker
      • CommentTime23 Oct 2025 02:06
       
      Witam,

      Projektuję nowe rozszerzenie pamięci do XL/XE. Generalnie wyszło to tak trochę przez przypadek. Postanowiliśmy z Lotharkiem przetestować PSRAM'y QSPI jako pamięć do Atari zamiast klasycznych układów SRAM. No i tak jakoś wyszło, że mamy na PCB układ 8MB PSRAM i warto go wykorzystać w całości, bo czemu nie.

      8MB daje łącznie 512 bloków po 16k. 4 bloki oczywiście idą na "pamięć podstawową". Zostaje zatem 508 bloków do dyspozycji. Najpierw do tego dodałem klasyczne 16 bloków w standardzie Rambo - zasadniczo sterowanie bitami 2,3,5,6 portu B PIA ($D301) przy zgaszonym bicie 4.

      Potem do tego doszedł Axlon - 255 bloków przełączanych zapisem do ROM.

      Po tych zabiegach zostało prawie 4MB RAM niewykorzystane, więc na razie "na szybko" dodałem 3 bity z wirtualnego drugiego PIA (adres $D305) i w ten sposób razem z 4 bitami z $D301 mamy dodatkowe 2MB - razem z Axlonem i pamięcią podstawową daje to trochę ponad 6MB.

      No i męczy mnie to, że nadal mam bloki RAM, które można jakoś przełączać i dzięki temu uzyskać dostęp do pełnych 8MB.

      Do tego mam dostęp do sygnału HALT, więc teoretycznie mógłbym sterować oddzielnie blokami dla CPU i oddzielnie dla ANTIC'a - ale to już chyba nie ma większego sensu.

      Piszę tutaj, bo może macie jakieś pomysły na to. Na razie mogę dodać bez problemów więcej bitów z $D305 i w ten sposób przełączać w zasadzie wszystkie bloki - oczywiście w takim układzie jakieś kombinacje będą niepoprawne. A może zamiast $D305 jakoś inaczej to przełączać? Ogólnie jak od 512 odejmiemy 4 bloki podstawowej i 255 Axlona to zostają 253 bloki do dyspozycji.

      Zostaje też ewentualnie kwestia magicznych 2kB z obszaru $D000-$D7FF, które też mógłbym w jakiś sposób gdzieś udostępnić po podaniu jakiejś kombinacji.

      Na razie mój pomysł jest taki:

      $D301 - bit 4 - jak zapalony to albo pamięć podstawowa, albo 1..255 z Axlon'a
      Jak bit 4 w $D301 zgaszony to:
      bierzemy biity 6,5,3,2 z $D301 oraz 6,5,3,2 z $D305. Mamy 8 bitów. Kombinacje 0..252 przełączają odpowiedni bank. Kombinacja 253,254 i 255 - sam nie wiem - bank podstawowy? Chyba najsensowniej.
      $D305 - bit 4 - przełączanie tego bloku $D000-$D7FF - pytanie pod jakie adresy go pakować?

      Dodam, że układ jest w całości pod CPU, więc nie łączymy niczego do fizycznego PIA. Port D301 i D305 są w zasadzie portami wirtualnymi w FPGA. PIA nadal standardowo będzie wystawiać sobie te bity niezależnie, czy zapis pójdzie do D301, czy D305 - stąd nie mogę używać bitów 0,1 i 7 - te standardowo idą do MMU i będą przełączały OS,BASIC i SELF-TEST.

      Wszelkie sugestie mile widziane.
      • 2: CommentAuthormono
      • CommentTime23 Oct 2025 03:44
       
      RAM podstawowy (i też ten w $D000-$D7FF) chyba najlepiej jako MapRAM ->link<- , albo jak Newell Industries ->link<- .
      • 3: CommentAuthorAcidMaker
      • CommentTime23 Oct 2025 09:32
       
      Ciekawy pomysł w tym Newell Industries. W zasadzie to w tym momencie kombinacje 253,254 i 255 mogą pod $4000-$7FFF mapować odpowiednio bloki pamięci podstawowej $0000-$3FFF dla 253, $8000-$BFFF dla 254 no i na koniec $C000-$FFFF dla 255. To pozwoli dobrać się do pamięci $D000-$D7FF i zarazem rozwiązuje kwestię tych niewykorzystanych kombinacji.

      Dodam jeszcze, że na płytce będą trzy zworki pozwalające wyłączyć pewne funkcje. Na razie pomysł jest taki aby:

      zworka 1 wyłączała Axlon'a
      zworka 2 wyłączała PORTB
      zworka 3 wyłączała coldreset

      Nie pisałem wcześniej, ale dodałem do tego ustrojstwa eksperymentalnie coldreset. Jak się reset przytrzyma dłużej niż sekundę to potem przy pierwszym odczycie z komórki $244 (580) COLDST jest zawsze zwracane $FF co powoduje coldreset. Wydaje mi się, że powinna to być funkcja, którą da się wyłączyć.
      • 4:
         
        CommentAuthorjhusak
      • CommentTime23 Oct 2025 11:06
       
      Zworki zrób tak, żeby współpracowały z Ultimate 1MB. Ale to pewnie wiesz :)
      • 5: CommentAuthorlemiel
      • CommentTime23 Oct 2025 12:04
       
      Dla tych dwóch programów na krzyż nie robi się rozszerzenia zgodnego z Compy Shop?
      • 6:
         
        CommentAuthorPeri Noid
      • CommentTime23 Oct 2025 14:10
       
      CompyShop jest zgodne z klasycznym bankowaniem ze 130XE (dostęp dla Antica) także ma to trochę sens.
      • 7: CommentAuthorpajero
      • CommentTime23 Oct 2025 17:32
       
      Oby nie zapomnieli, ExtSel to wszystko powinno ładnie odłączyć od magistrali :D
      • 8: CommentAuthor0xF
      • CommentTime23 Oct 2025 18:05 zmieniony
       
      Przede wszystkim megabajt pod PORTB. Albo 2 MB - było takie rozszerzenie - przy skasowanym bicie 4 pozostałe 7 bitów wybiera bank, stan ROMów zapamiętany sprzed skasowania bitu 4.

      Jak mamy megabajty RAMu, to nie rozumiem, dlaczego mielibyśmy główkować nad wykorzystaniem 2 KB z pamięci podstawowej?

      edit:
      Bank mogłyby wybierać jednocześnie bity z PORTB i Axlona. Starczy na 512 MB. Po co komplikować wprowadzając trzeci rejestr, niezgodny z niczym.
      • 9: CommentAuthorAcidMaker
      • CommentTime23 Oct 2025 18:52
       
      No właśnie jest problem z tym, że mam tylko dostęp do CPU i RAM. Nie mogę zmienić stanu bitów 0,1 i 7 na oryginalnym PIA. Oryginalne PIA nadal siedzi w Atari i nadal wysyła do MMU sygnały OS,BASIC i SELFTEST (u Soboli na MMU REN,BE i MAP) i robi to niezależnie od tego czy bit 4 jest zapalony czy zgaszony.

      Też bym może chętnie zrobił "standardowe" 576k lub 1088k (czy też więcej), ale bez podpięcia się pod MMU nie da rady. Na razie mamy tylko prostą płytkę pod CPU i nic więcej. Żadnych kabelków. Pracuję na razie z tym co mam.

      A zatem mogę używać tylko i wyłącznie bitów 2,3,4,5,6 z PIA (które mam po prostu sklonowane w FPGA) i tu mam pełną swobodę. Stąd oczywiście standard Rambo, który jest bardzo prosty i pozwala na przełączenie 16 banków dla CPU+ANTIC razem. Dlatego Compy Shop odpada - mimo szczerych chęci, bo tam bit 7 działa inaczej gdy bity 4 i 5 są zapalone, a inaczej gdy któryś jest zgaszony.

      Mogę chyba łatwo zrobić 192k w wariancie podobnym do 130XE, ale to trochę chyba mało. O ile te różne Axlony i wszystko powyżej 320kB to trochę już zabawa i sztuka dla sztuki, o tyle te 320kB jednak jest wykorzystywane przez różne dema i gry (pewnie głównie dema). Z tym 130XE i bankowaniem Antic osobno i CPU osobno to chyba też tak bardziej sztuka dla sztuki. Czy coś z tego w ogóle korzysta?

      Pomysł połączenia Axlon i PORTB ogólnie ciekawy, ale trochę się boję, że tego to już nikt nie ogarnie. To co obecnie wymyśliłem przynajmniej ma standardowego Axlon'a i standardowe Rambo jako podzbiór. SysInfo ładnie pokazuje oba rozszerzenia. Mógłbym na tym poprzestać, ale szkoda tego RAM'u. Pakować 8MB do Atari po to aby wykorzystać z tego tylko 4.3MB?

      Oczywiście mogę przechwycić zapis do czegokolwiek, więc te dodatkowe bity mogę umieścić równie dobrze pod $FFFF i zrobić takiego Axlona Bis i tam wpakować te wszystkie bloki, które mi zostały. Ten "sztuczny" port $D305 jakoś tak mi przyszedł do głowy trochę na zasadzie udawania dwóch PIA w Atari, ale zgadzam się, że w momencie tworzenia w zasadzie nowego standardu to można wszystko. Trochę stąd ten wątek założyłem.
      • 10: CommentAuthorAcidMaker
      • CommentTime23 Oct 2025 18:59
       
      @pajero. Tak obsługujemy standardowo CI i EXTSEL, zatem inne rozszerzenia, które wystawią CI lub EXTSEL będą "ważniejsze" od tego, bo odłączą naszą płytkę :)
      • 11: CommentAuthorAcidMaker
      • CommentTime23 Oct 2025 19:04
       
      A napisałem wcześniej żadnych kabelków. Ehhh. No niestety CI oraz EXTSEL wypada podpiąć. Mogę oczywiście wygenerować wewnętrznie CI, ale wolę aby szło z płyty - choćby po to aby się to np. z Ultimatem nie pogryzło. No niestety dwa kabelki są CI i EXTSEL, ale nic więcej. To było pierwotnie projektowane jako zamiennik standardowego SRAM'a pod CPU - tam idzie CI oraz EXTSEL i tu też.
      • 12: CommentAuthorAcidMaker
      • CommentTime28 Oct 2025 12:26
       
      Update.

      Pod wpływem waszych komentarzy postanowiłem to trochę jednak przerobić tak aby umożliwić zarówno 'mapram' jak i rambo 1088k oraz compy 576k. Będzie to wymagało zainstalowania drugiej płytki pod PIA, ale bez kabelków.

      Zworki:
      1. Jest płytka pod PIA (gdy założona zakłada istnienie płytki pod PIA i daje 1088k rambo/576k compy). brak zworki - to co było - czyli 320k rambo/192k compy
      2. włącz compy - gdy założona to 576k compy lub 192k compy, gdy zdjęta to rambo 1088k/320k
      3. jeszcze nie wiem

      Natomiast jak zacząłem robić rozeznanie to wyszło, że 1088k działa inaczej w MIST'cie, inaczej w U1MB i inaczej wszędzie indziej. Generalnie MIST to jest masakra - BASIC jest przełączany bitem 1 PORTB niezależnie od stanu bitu 4 PORTB - niezgodne z niczym. U1MB ma zatrzaski na bitach 1 i 7 PORTB sterowane tylko bitem 4 PORTB (w compy również bit 5 powinien być uwzględniony, a nie jest). Cała reszta świata ma po prostu logikę, która odłącza BASIC i SELFTEST (bit 1 i 7) gdy zgaszony jest bit 4 (rambo) lub jeden z 4,5 (compy).

      Jak ktoś chce się sam przekonać to podaję prosty test z BASIC:
      POKE 54017,255-2-16
      POKE 54017,255-16

      U1MB - można wykonać oba POKE i komputer nadal działa w BASIC - generalnie U1MB pozwala na pracę z 1088k w BASIC'u bo ma zatrzaski na bitach 1 i 7 - jest to totalnie niezgodne z niczym, ale ciekawe

      MIST - pierwszy przechodzi (bo sterowanie BASIC jest niezależne od bitu 4), a na drugim zwis (bo wyłączamy BASIC przełączając banki - bardzo złe)

      Reszta (testowałem SUBCART/AVGCART, Atirra, Atari800(Fujisan), Atari800MacX) - zwis/wyjątek po pierwszym POKE - każdorazowe przestawianie banków wyłącza natychmiast BASIC i SELFTEST.

      Będę raczej robił implementację taką jak "Reszta". No chyba, że ktoś z was mnie przekona, że lepiej zrobić U1MB - mimo, że jest to formalnie niestandardowe.

      Pytania - co powinna robić zworka nr.3?
      - wyłączać AXLON'a
      - wyłączać COLDSTART
      - wyłączać PORTB zupełnie
      - wyłączać AXLON BIS (patrz niżej)

      Nadal nie wiem jak dobrać się do reszty banków, bo PORTB daje tylko maks 64 banki, a mam 253 do dyspozycji. Mój pomysł na chwilę obecną to taki Axlon Bis:
      - zapis do $EFC0-$EFFF rozszerza aktualnie używany PORTB - czyli 1-N pokrywają się z obecnymi bankami PORTB, a (N+1)..253 dodatkowe banki. Funkcje bitów 4 i 5 z PORTB bez zmian. N zależne od zworek. Dla 1088k:64, dla 576k:32, 320k:16 i 192k:8.
      • 13: CommentAuthormono
      • CommentTime28 Oct 2025 13:34 zmieniony
       
      Weź pod uwagę, że banki są przełączane czasem tymczasowo na przerwaniach i miło jest, jak programista może odczytać aktualną konfigurację pamięci, a potem sobie ją przywrócić. Jak się pisze coś systemowego, bo jak ktoś robi grę i sobie rozpoznał co ma, to sobie sam zrobi rejestr żeby wiedzieć co ustawił.
      • 14: CommentAuthorAcidMaker
      • CommentTime28 Oct 2025 17:46
       
      AXLON praktycznie z definicji nie pozwala na odczyt aktualnej konfiguracji, to samo oczywiście będzie w tym AXLON BIS, natomiast PORTB będzie działał "normalnie" - to co się zapisze, to też zostanie odczytane. Dlatego płytka pod PIA aby właśnie nie robić jakichś dziwnych sztuczek na poziomie CPU.

      Tu jest tylko kwestia sporej różnicy pomiędzy Ultimate, a w zasadzie całą resztą. Ultimate z jednej strony jest niekompatybilny, a z drugiej strony jest to ciekawe rozwiązanie (modulo bit 5, ale to inna sprawa).

      W Ultimate ze względu na zatrzask ta sama wartość w D301 może dawać różne efekty w zależności od tego co było wcześniej. Tak nie ma nigdzie indziej.

      Przykład:

      Ultimate zapisy do $D301 ciągu $FD->$ED - BASIC będzie włączony (bo był przed wpisaniem $ED)
      Zapis ciągu $FF->$ED - BASIC będzie wyłączony (bo był wyłączony przed wpisaniem $ED)
      Czyli ta sama wartość $ED w $D301 pod Ultimate może dawać różne efekty

      W wypadku całej reszty świata (tego co byłem w stanie przetestować oczywiście) $ED to zawsze wyłączony BASIC mimo tego, że teoretycznie bit od BASIC'a (bit 1) jest zgaszony, co powinno niby oznaczać włączenie BASIC'a, ale zgaszenie bitu 4 nadpisuje na stałe znaczenie bitu 1.

      Do tego na deser jeszcze dochodzi MIST, w którym to już zupełnie jest słabo. Tu zapis $FF->$ED spowoduje włączenie BASIC'a mimo, że wcześniej nie był włączony - to już jest bardzo złe. Od razu powiem, że testowałem CORE'a z 2021, więc może od tego czasu coś tam zostało poprawione.

      Zatem wracając do uwagi o przełączeniach tymczasowych. To właśnie Ultimate będzie tu mieszał, bo jak przeczytam sobie takie $ED i potem będę przywracał to w zależności od tego co było "po drodze" mogę nagle skończyć z innym ustawieniem BASIC'a niż było wcześniej. Dlatego skłaniam się ku temu aby tego nie robić tak jak w Ultimate mimo, że pozwala to na pracę z 1088k w BASIC'u, co z jednej strony jest ciekawe, ale z drugiej niestandardowe i właśnie mogące powodować jakieś nieoczekiwane efekty.
      • 15: CommentAuthorAcidMaker
      • CommentTime28 Oct 2025 17:54
       
      Oczywiście jeden potencjalny problem jaki widzę to zapis do $EFFF, który przełączy banki, a nie przestawi tego co pokazuje PORTB. Ale to będzie dotyczyło sytuacji, w której ktoś świadomie użyje tego AXLON BIS - a wtedy to ten ktoś już świadomie będzie tym zarządzał.

      Opcja 2 jest taka:
      PORTB jest zawsze niezależny i ma swoje N banków a AXLON BIS ma po prostu zawsze (253-N) banków działających jak AXLON - czyli widocznych zawsze dla CPU+ANTIC i tylko wtedy gdy PORTB wskazuje zarówno dla CPU jak i ANTIC'a bank "podstawowy".

      Może tak rzeczywiście będzie lepiej i bardziej kompatybilnie.
      • 16:
         
        CommentAuthorDracon
      • CommentTime28 Oct 2025 22:23
       
      O ile te różne Axlony i wszystko powyżej 320kB to trochę już zabawa i sztuka dla sztuki, o tyle te 320kB jednak jest wykorzystywane przez różne dema i gry (pewnie głównie dema). Z tym 130XE i bankowaniem Antic osobno i CPU osobno to chyba też tak bardziej sztuka dla sztuki. Czy coś z tego w ogóle korzysta?

      A potem takie "Trabant demo" nie działa... albo "Wormhole" z Halle Project. :|
      Mając TOMS 260XE (standard RAMBO bodajże) natrafiałem na rzeczy, które u mnie nie działały albo działały ze "śmieciami", bo twórcy danego dema mieli u siebie inne rozszerzenie np. Compy Shop. :(
      • 17:
         
        CommentAuthorAlex
      • CommentTime29 Oct 2025 11:10 zmieniony
       
      Nie wiedziałem, że w U1MB są takie błędy. U mnie wszystko działa i śmiga :)

      Natomiast zastanawiam się nad sensem takiego egzotycznego rozszerzenia? Ja bym tę pamięć raczej widział jako liniową dla 65c816 jak to jest w Antonii lub jako podtrzymywany bateryjnie RAM disk ukryty gdzieś w wolnych obszarach I/O.

      To takie moje trzy grosze ;)
      • 18: CommentAuthortebe
      • CommentTime29 Oct 2025 11:39
       
      bo elektronicy lubią się bawić, nie zawsze racjonalnie
      • 19:
         
        CommentAuthorAlex
      • CommentTime29 Oct 2025 12:29
       
      tebe: Wiem, bo sam się bawię od lat :)
      • 20: CommentAuthorlemiel
      • CommentTime29 Oct 2025 12:45
       
      MISTa się pewnie da poprawić.
      Ciekawe jak MISTer?

      A reszta super. Więcej nie napiszę, bo się nie znam.

      Natomiast wpadło mi do głowy, że moje 65 XE ma przełącznik 192/256 kB nie tylko do ograniczania ilości pamięci ale może do przełączania trybu Compy/ Rambo... Kiedyś sprawdzę.
      • 21:
         
        CommentAuthorDracon
      • CommentTime30 Oct 2025 09:41
       

      Alex:

      Nie wiedziałem, że w U1MB są takie błędy. U mnie wszystko działa i śmiga :)

      Czy to było skierowane do mnie? Nie mam żadnego U1MB. W dawnych czasach (te 30-35 lat temu) nie było popularnych takich dużych rozszerzeń, tylko, z tego co mi wiadomo, były co najmniej "dwa obozy" rozszerzeń ponad 128 kB - standard Rambo (Newell?) i CompyShop. Chodziło m.in. o inną obsługę rozszerzonej pamięci. Dema pisane na jedno z tych rozszerzeń mogły nie działać na drugim i tak się nieraz niestety działo... :|
      • 22:
         
        CommentAuthorPeri Noid
      • CommentTime30 Oct 2025 10:29 zmieniony
       
      A co jakby wykorzystać drugie 4MB do... drugiej instancji systemu? Odpalasz kompa korzystając z pierwszych 4MB,zgodnie z konfiguracją. Jeśli przytrzymasz Reset przez co najmniej 4 sekundy (łatwo wykryć) to rozszerzenie podmienia całą pamięć na drugie 4MB. Komputer powinien się zachować jakby wystartował od nowa. Kolejny przytrzymany Reset - powrót do pierwszego banku - jeśli się nie mylę, to powinno wznowić pracę poprzedniej instancji. Modulo ustrojstwa zewnętrzne, które pamiętają swój stan wewnętrzny między resetami (jakieś zablokowane rejestry itp.).

      Takie "dwie w jednej".
      • 23:
         
        CommentAuthorJacques
      • CommentTime30 Oct 2025 11:05 zmieniony
       
      @AcidMaker, @Dracon

      Przecież U1MB oferuje tryb rozszerzenia 576KB COMPY SHOP, więc z Waszej luźnej rozmowy zaraz wyjdzie jakiś nowy mit. I oczywiście dema z serii Arsantica działają.
      • 24:
         
        CommentAuthorsun
      • CommentTime30 Oct 2025 12:14
       
      @lemiel śledzisz rozwój MISTERa? Wczoraj pojawił się chyba merdż rikłest z dodaną obsługą vbxe, tyle, że zajęte całe fpga i tam dyskusja trwa co z tym fantem zrobić.
      • 25:
         
        CommentAuthorAlex
      • CommentTime30 Oct 2025 13:35
       
      @Dracon: Nie do Ciebie, tylko do autora wątku :)