1 Ostatnio edytowany przez Gienek (2023-07-08 11:24:36)

Jeżeli nCCTL=0 to podpinana jest strona $D5xx. Ale to jest adres 8-bit.

Jaki stan na złączu carta w tym czasie mają: A12, A11, A10, A9, A8 ?
Same ZERO
Same JEDEN
Czy kopia magistrali ATARI czyli 10101?

2

CCTL aktywowany jest kiedy adresowana jest strona $D5. Nie musisz korzystać z górnych bitów magistrali adresowej bo będą wskazywać adres $15. 13 bitów adresu przydaje się kiedy aktywowany jest S4 lub S5 bo oznacza to czytanie/zapisywanie komórki z 8KB obszaru $8000-$9FFF (S4) lub $A000-$BFFF (S5).

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

Ale potrzebuje przetestować taki trik:
A000-BFFF normalnie pstrykane jak w maxflash8mbit, ale z jednym wyjątkiem banki przełączam tylko na ZAPIS do $D500
Natomiast na odczyt z $D5XX chcę podłączyć bank carta, bez względu na to, czy on jest ON czy OFF.

Taki trik spowoduje, że w zakresie $D500-$D5FF mam procedurę niezniszczalną (nie musze trzymać kopii w RAM), odporną na włączanie i wyłączanie carta oraz na wszelkie przełączania ROM/RAM i pamięci rozszerzone itd.

Tylko, który fragment bloku 8kB podepnie się pod te 256 bajtów.
Jeżeli wyższe adresy są nie ruszane. Tzn. że
D5 -> 11010101
To by znaczyło, że:
A15 - 1
A14 - 1
A13 - 0
Te idą na złącza carta:
A12 - 1
A11 - 0
A10 - 1
A9 - 0
A8 - 1
10101 to jest $15 czyli pod $D5XX podepnie mi się $1500 - $15FF obszaru carta.
Podsumowując miałbym pod D5 kopię kodu z banku od 5376 do 5631.
Takie okienko 256-bajtowe widziane ZAWSZE przez dziurkę $D5XX,

4 Ostatnio edytowany przez perinoid (2023-07-08 12:54:26)

Nie znam się Ale logika podpowiada, że powinieneś wszystkie starsze bity zignorować i sobie je w takiej sytuacji ustalić tak jak potrzebujesz. Czyli jeśli ncctl jest 1 to bierzesz z szyny a jak 0 to ustalasz na jakąś wartość konkretną. W zasadzie to mógłbyś mieć do tego nawet osobny układ adresowany wyłącznie niskimi bitami adresu.

Ma to sens?

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

5

Nie za bardzo można zignorować bo coś w sobie mają.

Załóżmy, że cart ma 8kB pamięci. I można go włączać/wyłączać zapisem do D500. No to ten cart pojawiał się będzie w obszarze A000-BFFF. Tu jest wszystko jasne.

Ale skoro taki blok jest podłączony na wszystkich pinach A0-A12 do pamięci carta. I teraz pojawia się nCCTL, który również aktywuje CE pamięci (identycznie jak nS5), to jakiś blok z tego 8kB musi się pojawić.
Bo to by oznaczło, że wysyłam polecenie do D500, żeby cart się wyłączył. RD5 idzie w niski. Pojawia się RAM, ale nCCTL nadal może dobrać się do carta tylko poprzez stronę $D5. I normalnie kod wykonać.

Natomiast totalną masakrę mózgową robi zagadka, gdy mamy cart maxflash reagujący na odczyt i zapis z MOŻLIWOŚCIĄ czytania z $D500
i robimy JMP $D500.
I chcemy zaraz po tym od $D500 wywołać kod JMP $A000.
To w którym banku powinien być JMP, w którym $A0 a w którym $00?
:)

6 Ostatnio edytowany przez perinoid (2023-07-08 14:06:58)

Ja obstawiam, że w tym, w którym chcesz - Cart po wykryciu zera na nCCTL powinien ustawić starsze bity adresu tak jak chcesz (czyli np. tak, żeby to było ostatnie 256 bajtów kości pamięci) i tyle. A JMP $A000 czytany z $D5xx przestawia nCCTL na 1, na co cart reaguje podstawiając ostatnio ustawiony blok 8KB. Po prostu w carcie musi być odpowiednio szybka i skomplikowana logika, żeby nadążyć. W szczególności ustawienie tych wysokich bitów musi się wyrobić w trakcie ustawiania niskich bitów. Tak to widzę.
No, chyba że psuje to jakiś pipeline'ing ;-)

Ale, jak wspomniałem, nie znam się :-D

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

7 Ostatnio edytowany przez Gienek (2023-07-08 15:45:03)

Tak, logika musi być dość złożona, gdy chcę, żeby $D5xx było jakimś ostatnim bankiem pamięci flash. Wtedy trzeba błyskiem przestawić adresy. Podobny trik robi S-XEGS, gdy pojawia się nS5 to ma włączyć ostatni bank.

Natomiast jak przestrzeń może się pokrywać, to już jest banał.

Teraz carty zgodne z maxflashem mają:
nCE = nS5
Robię trik:
nCE = ( nS5 AND nCCTL )

i wtedy "chyba" A000-BFFF widzi cały bank a $D5XX widzi tylko $B500-$B5FF? Tego drugiego nie jestem pewien :/

Generalnie to próbuję wybrnąć z problemu konwersji ATR do CAR, gdzie muszę gdzieś dać kod obsługi carta. Niestety ale programy nie stosując żadnych zasad i latają po całej pamięci włącznie ze stosem. Jak to jest krótki kod na kilka bajtów to gdzieś wciśnie. Ale jakby był dłuższy (np. zapisy itp) to kłopot. A zakres $D500-$D5FF nie są w stanie zepsuć bo to jest już sprawa sprzętowa.
Natomiast bez sensu byłoby lutować ekstra pamięć na obsługę $D500-$D5FF. Więc kombinuje jakby tu jedną kostką pokryć dwa zakresy gdzie tylko jeden z nich jest wyłączany.

8

Hej,

Gienek napisał/a:

Jeżeli nCCTL=0 to podpinana jest strona $D5xx. Ale to jest adres 8-bit.

Jaki stan na złączu carta w tym czasie mają: A12, A11, A10, A9, A8 ?
Same ZERO
Same JEDEN
Czy kopia magistrali ATARI czyli 10101?

To jest adres 16bit.

Pozdrawiam
tOri

Różne różności dla Atari i nie tylko - przydatne, bądź nie ale i tak warto zajrzeć...
http://atari.myftp.org  Atari - Power without price and necessary elements with some sh*t onboard
https://reversing.pl SSL enabled site