351

Odp: SlightSid żyje ;]

Wewnętrzne BASIC-i i gry (XEGS) mimo, że leżą w tym samym obszarze adresowym co cart ($A000..$BFFF) są obsługiwane bitami PORTB ($D301). Natomiast prawdziwy cart po włożeniu do slota sygnalizuje ten fakt w rejestrze TRIG3 ($D013) i ten właśnie rejestr sprawdza OS na przerwaniu VBLKD porównując go z GINTLK ($3FA) - jeśli się różnią następuje JMP * co powoduje zwis komputera.
Sparta obchodzi to blokując drugą fazę VBLK przez SEI, przełącza carta po czym aktualizuje zawartość GINTLK. Ot i cała sztuka. Więc rygor o którym pisze toriman1 da się obejść instalując sekwencję rozkazów LDA TRIG3; STA GINTLK na VBLKI, bo to jest ograniczenie OS-a a nie hardware.
Nie jestem pewny czy carty które mają tylko rejestry na $D5 powodują ustawienie TRIG3. Edit: Jestem już pewny - wystawienie RD5 przez carta powoduje ustawienie TRIG3, a carty urządzeń zazwyczaj tego nie robią - tylko carty z pamięcią w $A000..$BFFF.

@toriman1: Pinokiu chodzi o mapowanie adresów pod którymi rejestry różnych cartów są widoczne na $D5. Wtedy carty mogłyby mieć bardzo prostą konstrukcję dekodera adresów, ale mapper pozwalałby lokować ich rejestry w prawie dowolnie wybranych obszarach I/O, co pozwoliłoby na włączenie naraz SONari, SIDari, YAMari, SlightSID-a, samplera od Mirage, SIDE i co tam jeszcze kto chce, ale z rejestrami każdego z tych cartów dostępnymi w innych obszarach $D5.
Wydaje mi się, że taki mapper można zrealizować jakąś szybką pamięcią na wejściu której podasz adres, R/W, S4/5 i CCTL a dostaniesz informację o nrze slotu do którego przełączyć adres, dane i informacje o bramkowaniu magistrali danych, sterującej i sygnałów zwrotnych od carta.

Edit: Literówki.

Edit 2: Przykład:

Slot 0: SIDari
Slot 1: SONari
Slot 2: coś co gra muzykę SID-em i AY-kiem.

Mapowanie adresów:
$D500..$D53F RW - aktywacja slotu 0, adres wystawiany dla carta to $D500..$D53F, RW, CCTL i dane przepuszczane
$D540..$D543 RW - aktywacja slotu 1, adres wystawiany dla carta to $D500..$D503, RW, CCTL i dane przepuszczane
$8000..$9FFF R - aktywacja slotu 2, adres bez zmian, RW, S4 i dane przepuszczane
$A000..$BFFF R - aktywacja slotu 2, adres bez zmian, RW, S5 i dane przepuszczane

Slot 0 i 1 jest uaktywniany przy odczycie lub zapisie, slot 2 tylko przy odczycie.
Tylko slot 2 powinien mieć przepuszczane na stałe sygnały RD4 i RD5 - w mapperze mógłby być dostępny rejestr do selekcji slotu, żeby można było przełączać aktywne obszary $8000..$9FFF i $A000..$BFFF z różnych cartów.
Poza tymi obszarami żaden slot nie jest uaktywniany.

Ostatnio edytowany przez mono (2018-12-09 19:25:12)

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

352

Odp: SlightSid żyje ;]

mono napisał/a:

Wewnętrzne BASIC-i i gry (XEGS) mimo, że leżą w tym samym obszarze adresowym co cart ($A000..$BFFF) są obsługiwane bitami PORTB ($D301). Natomiast prawdziwy cart po włożeniu do slota sygnalizuje ten fakt w rejestrze TRIG3 ($D013) i ten właśnie rejestr sprawdza OS na przerwaniu VBLKD porównując go z GINTLK ($3FA) - jeśli się różnią następuje JMP * co powoduje zwis komputera.

Dokładnie to miałem na myśli. Jest to bardzo zdrowe podejście ze strony OS Atari, bo co ma zrobić sprzęt gdy mu wyrwiesz ROM ze slotu?

mono napisał/a:

Sparta obchodzi to blokując drugą fazę VBLK przez SEI, przełącza carta po czym aktualizuje zawartość GINTLK. Ot i cała sztuka. Więc rygor o którym pisze toriman1 da się obejść instalując sekwencję rozkazów LDA TRIG3; STA GINTLK na VBLKI, bo to jest ograniczenie OS-a a nie hardware.

Ale Sparta jest trochę wyjątkowa w tym całym zagadnieniu. Tylko dlatego - jak opisałeś, że Sparta steruje również liniami kardtridża - możliwe jest uruchamianie innych cartów za Spartą. Zresztą - inaczej istnienie takiego DOSa byłoby bez sensu. To zrozumiałe.

mono napisał/a:

Nie jestem pewny czy carty które mają tylko rejestry na $D5 powodują ustawienie TRIG3.

Nie powodują ustawienia TRIG3 - nie ma potrzeby.

mono napisał/a:

@toriman1: Pinokiu chodzi o mapowanie adresów pod którymi rejestry różnych cartów są widoczne na $D5. Wtedy carty mogłyby mieć bardzo prostą konstrukcję dekodera adresów, ale mapper pozwalałby lokować ich rejestry w prawie dowolnie wybranych obszarach I/O, co pozwoliłoby na włączenie naraz SONari, SIDari, YAMari, SlightSID-a, samplera od Mirage, SIDE i co tam jeszcze kto chce, ale z rejestrami każdego z tych cartów dostępnymi w innych obszarach $D5.
Wydaje mi się, że taki mapper można zrealizować jakąś szybką pamięcią na wejściu której podasz adres, R/W, S4/5 i CCTL a dostaniesz informację o nrze slotu do którego przełączyć adres, dane i informacje o bramkowaniu magistrali danych, sterującej i sygnałów zwrotnych od carta.

Rozumiem w takim układzie, że człowiek sam by konfigurował mapowanie, bo jak napisałem wcześniej, coś bardziej automatycznego poważnie skomplikowałoby konstrukcję. W takim układzie urządzenie nie musiałoby mieć w ogóle dekodera adresowego - tylko linia CCTL do wyboru sprzętu. Z S4/5 trzeba by to bardzo poważnie przemyśleć bo całość kręci się w rzeczywistości wokół rozszerzeń a nie kartridży.

mono napisał/a:

Edit: Literówki.

Edit 2: Przykład:

Slot 0: SIDari
Slot 1: SONari
Slot 2: coś co gra muzykę SID-em i AY-kiem.

Mapowanie adresów:
$D500..$D53F RW - aktywacja slotu 0, adres wystawiany dla carta to $D500..$D53F, RW, CCTL i dane przepuszczane
$D540..$D543 RW - aktywacja slotu 1, adres wystawiany dla carta to $D500..$D503, RW, CCTL i dane przepuszczane
$8000..$9FFF R - aktywacja slotu 2, adres bez zmian, RW, S4 i dane przepuszczane
$A000..$BFFF R - aktywacja slotu 2, adres bez zmian, RW, S5 i dane przepuszczane

Slot 0 i 1 jest uaktywniany przy odczycie lub zapisie, slot 2 tylko przy odczycie.
Tylko slot 2 powinien mieć przepuszczane na stałe sygnały RD4 i RD5 - w mapperze mógłby być dostępny rejestr do selekcji slotu, żeby można było przełączać aktywne obszary $8000..$9FFF i $A000..$BFFF z różnych cartów.
Poza tymi obszarami żaden slot nie jest uaktywniany.

Zastosowanie mikrokontrolera wydaje się sensowne w tym miejscu, ponieważ coś musi tworzyć mapowanie. Nawet gdyby użyć FPGA (co też ma sens w zastosowaniu do routingu sygnałów) to i tak programowanie FPGA raczej odbywałoby się z mikrokontrolera a nie z Atari. Sugestia z zastosowaniem RAM w tym miejscu jest niezłym rozwiązaniem zwłaszcza, że powinno wystarczyć 256 bitów do ogarnięcia projektu. Mając pamięć z szyną 8-bit ogarniamy osiem slotów na stronie $D5XX. Ostatecznością jest zaprogramowanie mapowania mikroprzełącznikami ale to hardkor i lepiej wtedy jednak zbudować większy dekoder adresowy w urządzeniu i tam wybierać obszar adresowy.

Pozdrawiam
tOri

Ostatnio edytowany przez tOri (2018-12-09 19:33:11)

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

353

Odp: SlightSid żyje ;]

Mapper oparty o RAM byłby chyba najszybszym rozwiązaniem, bo podejrzewam że wyzwaniem tutaj są reżimy czasowe związane z dostępem do odpowiedniego carta na magistrali.
Czy trzeba by aż FPGA to nie wiem. Wyobrażam sobie to np tak, że taki mapper mógłby być cartridgem diagnostycznym z własną pamięcią EEPROM do zachowania ustawień. Przy włączeniu komputera taki cart startuje, mapuje sobie ROM w $A000..$BFFF i przepisuje ustawienia z EEPROM do własnego RAM używanego właśnie do mapowania (może też na jakąś kombinację klawiszy wchodzić do edytora i umożliwiać modyfikację mapy i jej zapis w EEPROM). Potem cart wraca do OS-a z już skonfigurowanym mapowaniem i pozwala na normalną pracę całego systemu (mógłby co najwyżej jeszcze przed powrotem zorientować się czy nie jest aktywny jakiś inny cart diagnostyczny żeby przekazać mu sterowanie).
Ponieważ mapowane są tylko rejestry na $D5 to wystarczy 256 komórek RAM o szerokości 12-bit - ten RAM używany byłby wyłącznie do przemapowywania adresów na stronie $D5 kiedy sygnał CCTL jest aktywny czyli trzymałby ustawienia A0..A7 kierowanych na magistralę adresową cartów - sygnały A8..A12 nie są przemapowywane. Za to w RAM trzeba jeszcze dodatkowo trzymać informację o numerze carta, który ma być uaktywniany CCTL-em.
Kiedy S4 lub S5 są aktywne ta mapa nie jest używana, ale potrzebny byłby dodatkowo jeden rejestr do wyboru carta mapującego swoje obszary adresowe $8000..$9FFF i $A000..$BFFF. Powiedzmy że dolna połówka odpowiadałaby za nr carta dla obszaru $A000..$BFFF, a górna za $8000..$9FFF - ten selektor też odpowiadałby za to, z których cartów byłyby przyjmowane sygnały RD4 i RD5.
Czyli z grubsza:
- 2 demultipleksery dla R/W i FI2 Edit: a może nawet nie są potrzebne,
- RAM dla A0..A7 i nru carta + dekoder 1 z N dla CCTL,
- rejestr 4-bit + dekoder dla S4 + multiplekser RD4 do obsługi $8000..$9FFF,
- rejestr 4-bit + dekoder dla S5 + multiplekser RD5 do $A000..$BFFF,
- no i pewnie bufory dla magistrali danych + trochę logiki żeby mapowanie odbywało się tylko dla CCTL.
W przestrzeni adresowej Atari musiałyby być dostępne rejestry do:
- adresowania EEPROM mappera (adres, wartość)
- adresowania RAM mappera (adres, wartość)
- rejestr selekcji cartów dla obszarów $8000..$9FFF i $A000..$BFFF,
- i pewnie jakiś rejestr aktywujący/deaktywujący mapper żeby można było modyfikować konfigurację w EEPROM.
To oczywiście zarys fabuły. Diabeł jak zawsze tkwi w szczegółach...
Może zamiast RAM dałoby się tam wsadzić jakiś programowany układ kombinacyjny, który zależnie od stanu wejść wystawiałby wyjścia?

Edit: Właśnie mapper załatwiałby całkowicie kwestię dekodera. Żaden konstruktor cartridgy nie musiałby robić pełnego dekodera (zresztą w istniejących cartach rzadko który ma pełny dekoder) - precyzyjne adresowanie robiłby sam mapper.

Edit 2: Sloty po N bajtów dla każdego carta na stronie $D5 nie są dobrym pomysłem ze względu na to że tam jest tłoczno. Niektóre cartridge z bankowaną pamięcią potrafią zająć pół strony (bo przełączanie banków polega na odczycie konkretnego adresu $D5xx) i na inne urządzenia robi się mało miejsca. Poza tym nie ma reguły gdzie taki cart będzie miał swoje rejestry - czy na początku strony, czy może na końcu? A chodzi o to, żeby tę stronę jednak wykorzystać do maksimum. Gdyby EEPROM miał więcej bajtów, to można by w nim trzymać presety.

Edit 3: Właściwie to gdyby zastosować PLD który programowany byłby na etapie edycji ustawień mappera, to całe urządzenie mogłoby (chyba) być zrealizowane tylko za jego pomocą. Mamy wtedy jeden układ kombinacyjny i może udałoby się spełnić nawet restrykcje czasowe na magistrali gdyby układ był dość szybki. W przestrzeni adresowej Atari trzeba byłoby mieć wtedy tylko rejestry do EEPROM-u, rejestry do programowania PLD (niedostępne kiedy mapper jest aktywny) i rejestr aktywujący mapper. A oprogramowanie konfiguracyjne mogłoby być nawet w postaci pliku .XEX bo raz zaprogramowany PLD działałby już zawsze aż do kolejnej zmiany.

Ostatnio edytowany przez mono (2018-12-09 21:40:59)

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

354

Odp: SlightSid żyje ;]

Nie wiem który to już rok leci .... ale ....
z korespondencji meilowej z października ubiegłego roku ....
Seban.... "zmontowana jest już pierwsza partia PCB oraz są wycięte obudowy do nich....."
"Mam nadzieję że uda się to ogarnąć do końca w ciągu paru najbliższych miesięcy."

"wszystko się kiedyś kończy......."

355

Odp: SlightSid żyje ;]

SlightSid żyje?

356

Odp: SlightSid żyje ;]

SlightSid żyje?

357

Odp: SlightSid żyje ;]

Seban żyje na pewno :D

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

358

Odp: SlightSid żyje ;]

Cześć!

Ja chyba żyję (przynajmniej tak mi się wydaje :P) ... co do SlightSID to jestem na etapie w którym po pewnych przemyśleniach postanowiłem przyjąć  inną strategię... po protu wypuszczę ten projekt w obecnej formie. Pogodziłem się z tym że "dalekosiężne" plany rozwoju i modyfikacji tejże wersji mijają się celem. Zostawię więc mapowanie rejestrów tak jak jest, ponieważ istniejący soft to obsługuje, zmian w CPLD wprowadzać już nie będę, dokładać modułu zapewniającego self-upgrade również nie będę. Skoro tyle czasu przeleżało to bez większych postępów to myślę że dokładanie dodatkowej funkcjonalności której nikt albo prawie nikt nie wykorzysta nie ma najmniejszego sensu. Poza tym jeżeli ktokolwiek będzie zainteresowany jeszcze tym produktem/projektem no wypuszczenie go w obecnej formie pozwoli albo na spokojną śmierć albo dalszy rozwój produktu.

359

Odp: SlightSid żyje ;]

Hej seban

No - nie tylko Ty tak żyjesz, hehe. Jak nie masz czasu na dalekosiężne plany to i tak z tego nic nie będzie.
Puszczaj obecną formę w ludzi! Niech coś się dzieje.

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