Szukałem ostatnio informacji o rozszerzeniach pamięci ZX-Spectrum i co znalazłem to to, że pamięć spectrusia podzielona jest na 4 sekcje po 16k każda i w ostatnią sekcje w ZX-Spectrum 128 i rosyjskich klonach można mapować pamięć rozszerzoną. czyli u nich mapują obszar $c000-$ffff tak samo, jak my $4000-$7fff. Trafiłem na stronę rozszerzenia pamięci ZX Spectrum do 4MB RAM, w którym (mniej więcej) można mapować pamięć rozszerzoną pod dowolną sekcję. Pomysł zadziałał na moją wyobraźnię ;) i pojawiło się pytanie, czy takie rozwiązanie byłoby możliwe na atari? Np wprowadzenie trzech dodatkowych rejestrów obok PORTB, które odpowiadałyby za podpięty pod daną sekcję bank? Z programistycznego punktu widzenia byłoby to fajne, np rysować w jednym banku w jednym miejscu i potem podmieniać go ANTICowi w innym i mamy sprzętowy double-buffering...

Oczywiście to tylko teoretyczne bajdurzenie i dlatego dałem do bałaganu, ale ciekawi mnie czy w ogóle coś takiego byłoby możliwe...

2

Z elektronicznego punktu widzenia oczywiście, że możliwe... ale oczywiście bardziej upierdliwe w realizacji niż typowe rozszerzenie ... przedewszystkim ze względu na konieczność większej ingerencji w dotychczasową strukturę atarki - cięcie ścieżek etc.

3 Ostatnio edytowany przez xxl (2007-03-05 17:41:14)

a 130xe przypadkiem nie ma rozdzialu na pamiec dla antica i 6502 tak ze masz podwojny bufor bez grzebania ?

bardziej interesujace by byla podmiana pierwszego 16k pamieci


---
albo totalny odlot: bankowane strony pamieci :-) np. $10 stron zerowych :-) 4 stosy ;-) hehe


tyle, ze z drugiej strony... ja osobiscie nie widze juz sensu w rozszerzeniach ktore nie sa w 100% kompatybilne z a130, szkoda, ze atarowcy nie doceniaja mozliwosci pracy antica i 6502 w tych samych adresach a roznych bankach... wkrotce kazdy bedzie mogl miec liniowa pamiec (oby) wiec po co dowalac 1-4 mb ramu bankowanego :p

http://atari.pl/hsc/ad.php?i=1.

Dziś mało kto ma 130xe _tylko_.

5

jest pare animacji wykorzystujących dostęp Antica do pamięci rozszerzonej, jednak takie zachowanie Antica nie przyjęło sie jako standardowe, lepiej jest posiadać więcej pamięci niż tego typu funkcjonalność

dlatego jeśli chcesz aby Twoj program korzystał z pamięci dodatkowej i zadziałał na każdym Atarku powinieneś umieszczać pamięć obrazu poza $4000..$7FFF

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

6

Tylko rozszerzenie Jeta i Mariusza Geislera (1 MB w atarkach 130xe) dziwnie odwołują zachowują się/nie działają jeżeli chodzi o dostęp Antica do ext ramu. W poprawnie zrobionym Rambo i w poprawnie zrobionym Compy Shopie nie ma z tym problemu (2 wiodące standardy), Antic ma poprawny dostęp do banków (tyle że w Rambo zależnie od CPU, ale ma), a unikanie dostępu Antica do ext ramu tylko dlatego, że jest ileś atarek, gdzie montujący ext ram spartolił sprawę, to jak unikanie używania trybu gr.9, bo w niektórych atarkach jest zwalone GTIA, które niepoprawnie wyświetla ten tryb.

7

może pod emulatorem działa, na mojej atarce z 1MB by Pasiu juz nie

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

8

Przy 1 MB banki są przełączane dla CPU i Antica równocześnie z powodu "braku" bitów w PortB. 1 bit musi być włączającym dostęp do dodatkowych banków, drugi jest odpowiedzialny za włączanie RAM-u pod ROM-em i ze względów praktycznych wydaje się nie do ruszenia. Podobnie jak bity w(y)łączający Basic i odpowiedzialny za dostęp Antica do dodatkowej pamięci, co jak wiadomo nie stanowiło przeszkody w ich użyciu.

Rozszerzenia do 576 kB można zrobić kompatybilne ze 130XE.

Kiedyś była podejmowana próba dołożenia dodatkowego PIA, dzięki czemu można było wsadzić do Atari 4 MB pamięci. Próba być może zakończyła się powodzeniem, tylko softu jakoś brak. ;)

Zawsze mam rację, tylko nikt mnie nie słucha.

9 Ostatnio edytowany przez drac030 (2007-03-05 23:46:10)

Ja bym powiedział, że już 1 MB RAM-u w bankach to dyskusyjna ilość, a co dopiero 4 MB. Ale ja mam twardziel, a jak się to ma, ramdysku się zasadniczo nie używa (bo i do czego), a innych zastosowań rozszerzenia ponad 320k w zasadzie brak. Niemniej ktoś, kto ma stację 720k, 1 MB pamięci sobie będzie cenił z łatwych do wyobrażenia względów.

EDIT: podmiana pierwszych 16k RAM pozwalałaby na znośny multitasking (tyle procesów, ile banków).

KMK
? HEX$(6670358)

10

W przypadku 1MB pamięci w bankach mamy do czynienia z ujemnym sprzężeniem zwrotnym: żadne demo nie korzystało, bo ludzie krzyczeli, żeby takich nie robić, bo nie wszyscy mają - na wielu zlotach było właśnie ograniczenie 320kB - i dlatego nikt tyle nie wymagał  i starał się zmieścić w 320kB. Dlatego chociażby atarowskie dema cierpią na brak dezignu, bo prawie w ogóle nie stosuje się hiresowej grafiki. Ostatnio ograniczenie przestało się pojawiać (odkąd Vasco przestał organizować zloty ;P), ale dem powstaje teraz jakoś dziwnie mało.

11

Hm, a ja już mam pomysł co zrobić z 1 MB. Pora się zabrać do roboty. :)

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

12

xxl napisał/a:

albo totalny odlot: bankowane strony pamieci :-) np. $10 stron zerowych :-) 4 stosy ;-) hehe

:) - 65c816?? - bo chyba tam można tym jeździć po pierwszych 64k jak po łysej kobyle :D

Kontakt: pin@usdk.pl

13

No właśnie. Direct Page można ustawić na dowolne miejsce w zerowym banku pamięci. Niby ładnie pięknie i super relokowalnie ale, to ma sens tylko w jakiś programach użytkowych wygenerowanych przez kompilator C, bo w demach jest zupełnie nieopłacalne: umieszczenie D poza granicą strony (młodszy bajt różny od zera) pożera dodatkowy cykl, a ograniczenie przesuwania D tylko do zerowego banku jest wręcz frustrujące w momencie, gdy "pamięć wysoka" potrafi być 8 razy szybsza od banku zerowego.
Chciałbym żyć w alternatywnym wszechświecie, który różniłby się tylko tym, że w 65c816 rejestr D wciąż 16-bitowy można byłoby ustawić na dowolną stronę w 16 MB pamięci, a nie dowolny bajt w banku zerowym. Ale pomarzyć dobra rzecz...

14

laoo napisał/a:

Chciałbym żyć w alternatywnym wszechświecie, który różniłby się tylko tym, że w 65c816 rejestr D wciąż 16-bitowy można byłoby ustawić na dowolną stronę w 16 MB pamięci, a nie dowolny bajt w banku zerowym.

Lutownica w dłoń i przelutuj logikę proca ;)

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

15

laoo/ng napisał/a:

ograniczenie przesuwania D tylko do zerowego banku jest wręcz frustrujące w momencie, gdy "pamięć wysoka" potrafi być 8 razy szybsza od banku zerowego.

Nie jest tak tragicznie. Co prawda na Warpie właśnie jest tak, jak piszesz, każde odwołanie do "niskiej" pamięci kosztuje  nie dość, ze przełączenie zegara na 1,77 MHz, to jeszcze dodatkowo wiąże się to z nieznaną (przy 14 MHz, od zera do ośmiu) liczbą waitstate'ów, o ile dobrze rozumiem, jak to ustrojstwo działa. W takim układzie korzystanie ze strony zerowej nie opłaca się kompletnie, a rezygnacja z niej oznacza pożeganie ze sporą liczbą trybów adresowania (chyba z połową?).

Ale na karcie Pasia użycie strony zerowej i w ogóle banku zerowego nie jest takie bolesne. Primo, odczyty są szybkie (to znaczy - moga być, to zależy od konfiguracji karty, ale zakładamy, że defaultowo są).

Secundo, przełączenie zegara, nawet jeśli następuje, jest bez waitstate'ów (pozornie - synchronizacja jest szybkim zegarem, a nie wolnym jak w Warpie, a utrata jednego cyklu zegara 14 MHz nie boli tak, jak utrata do jednego cyklu zegara 1,77 MHz; ale może bredzę).

Tertio - zapisy też są szybkie, o ile, jak mi się wydaje, nie następują zbyt często. To znaczy, pojedynczy zapis do niskiej pamięci chyba kosztuje tyle samo co do fastu. Co prawda on nie dociera natychmiast do pamięci Atari, ale to nie szkodzi, bo procesor nie czeka aż zapis się wykona; gdyby ta dana była od razu potrzebna (np. przy PHA/PLA), odczyt leci z "cache'u" i jest szybki. Dopiero, wydaje mi się, kilka zapisów pod rząd może spowodować zahaltowanie procesora do momentu, aż wszystkie dane "wyjdą". Jeśli się tu gdzieś nie mylę, to łatwo tego uniknąć, po prostu trzeba robić zapisy do banku 0 nie częściej niż co np. 8 cykli :)

KMK
? HEX$(6670358)

16 Ostatnio edytowany przez laoo/ng (2007-03-11 10:32:54)

Z wydajnosciowego punktu widzenia (demo? emulator z80? ;) ) oba rozszerzenia są kompletnie inne: nie używanie banku zerowego w ogóle, a używanie go chociaż do odczytu to wielka różnica. Zrobienie sobie kilku małych lookupów przed pętlą krytyczną i korzystanie z nich adresowaniem zerostronicowym może dać niezłego kopa. A jak prawdą jest to co mówisz, że zapis co 8 cykli nie haltuje procesora to nawet procedurę przepisywania ekranu można napisać tak, żeby przy okazji robiła trochę obliczeń (co może być przydatne, bo format ekranu roboczego możę być inny niż dane wymagane przez antica) i zapisywała nie częśniej niż te 8 cykli.

W rezultacie kod programu/dema musiałby być inny dla Warpa i dla F7, jeśli chcielibyśmy wykorzystać potencjał tego drugiego, a nie chcielibyśmy kompletnie zatkać tego pierwszego. Trzeba uświadomić sobie teraz, gdy nie ma większej ilości żadnej z tych dopałek, że są "trochę" niekompatybilne i w przyszłości lutować na większą skalę tylko jedną z nich, bo produkowanie obu zrobi więcej szkód niż pożytku. Tylko, że F7 jest chyba zbyt trudne, żeby dał rade lutować to ktoś inny niż Pasiu... Obym się mylił.

17 Ostatnio edytowany przez drac030 (2007-03-11 11:33:12)

laoo/ng napisał/a:

W rezultacie kod programu/dema musiałby być inny dla Warpa i dla F7, jeśli chcielibyśmy wykorzystać potencjał tego drugiego, a nie chcielibyśmy kompletnie zatkać tego pierwszego.

Dokładnie, aczkolwiek zgniły kompromis jest zawsze możliwy: kod, który będzie wszystko trzymał w fastramie, a banku zerowego dotykał tylko w ostateczności i z obrzydzeniem, będzie chodził dobrze na Warpie, i całkiem (= równie) dobrze na F7. Optymalizacja pod tę ostatnią kartę da niewielki zysk na niej, ale na Warpie będzie porażka. A więc, jak zwykle, jeśli komuś się nie chce pisać dwóch wersji tego samego programu, pozostaje optymalizacja pod Warpa.

Co do kwestii dostępności obu, obawiam się, że chyba masz rację :/ Dodatkowo Pasiu sprawia wrażenie, że nie bardzo ma czas na lutowanie czegokolwiek.

KMK
? HEX$(6670358)