926

(358 odpowiedzi, napisanych Sprzęt - 8bit)

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.

927

(358 odpowiedzi, napisanych Sprzęt - 8bit)

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.

928

(364 odpowiedzi, napisanych Fabryka - 8bit)

Nie umim :/ Podejrzewam, że trzeba by skompilować biblioteki resid i ayemu dla Win$. Ściągnięcie mingw i podanie dodatkowo --target=windx przy ./configure wykłada mi się na bibliotekach DirectX.
Może ktoś bardziej obeznany w tych rzeczach mógłby to skompilować, albo przynajmniej przygotować jakąś instrukcję?

Edit: W moim przypadku w grę wchodzi kroskompilacja - nie mam i nie używam Windowsa.

929

(364 odpowiedzi, napisanych Fabryka - 8bit)

Pod tym samym linkiem znajduje się zaktualizowane moje lokalne repozytorium git projektu Atari800 z dołożoną obsługą SIDari oraz SONari. Obsługiwane są zarówno wersje z jednym chipem, jak i z dwoma.

930

(364 odpowiedzi, napisanych Fabryka - 8bit)

@Cyprian: Wspominałem mu o tym, ale on niechętnie podchodzi do sprawy.
Więc zrobiłem emulację AY i SID-a w atari800. Obecnie mam zaimplementowane Evie (bez COVOX-a i filtrów SID-a) i SlghtSID-a (obydwie wersje), ale w ciągu weekendu dopiszę SIDari i SONari więc poczekajcie cierpliwie.

Edit: Zresztą jeśli ktoś chce to poniżej instrukcja:

W http://mono.atari.pl/atari800/atari800-github.zip znajduje się skompresowane repozytorium git z implementacją SlightSID-a i Evie. Do kompilacji potrzebne są biblioteki:
- libc++
- libayemu 1.0.0: https://github.com/gasman/libayemu
- libresid 0.16: http://www.zimmers.net/anonftp/pub/cbm/ … index.html

Ja kompiluję to tak:
$ ./configure \
    --enable-monitorbreakpoints \
    --enable-monitorprofile \
    --enable-monitortrace \
    --enable-seriosound \
    --enable-volonlysound \
    --enable-synchronized_sound \
    --enable-sid_emulation \
    --enable-psg_emulation
$ make
Ten build przygotowywany jest u mnie dla SDL.
Do testów można próbować:
- http://mono.i-demo.pl/sidplay/sidplayh.zip (SID)
- http://mono.i-demo.pl/psgplay/psgplayh.zip (PSG)

Evie 1.0 taktuje SID-a inną częstotliwością niż SlightSID. Evie 2.0 ma już identycznie jak w SlightSID dzięki czemu można sobie posłuchać kawałków na 3xSID. W obydwóch wersjach Evie znajduje się jeden YM.

Edit: linki zmienione z mono.atari.pl na mono.i-demo.pl

931

(364 odpowiedzi, napisanych Fabryka - 8bit)

Używam właśnie YM2149F i wygląda na to, że działają poprawnie.

932

(364 odpowiedzi, napisanych Fabryka - 8bit)

Różnicy w oprogramowaniu nie ma. Czy jest różnica w brzmieniu tego nie umiem stwierdzić. Ale np Yerz pisze specjalne wersje swoich utworów na YM, co by oznaczało że coś na rzeczy jest... No chyba że perfidnie kłamie :)

933

(364 odpowiedzi, napisanych Fabryka - 8bit)

W obydwu wersjach cartridge'a działają poprawnie obydwa układy - i AY i YM. I to nawet dwa różne naraz :) Jak widać konfiguracja rodzaju układu jest "półautomatyczna" - trzeba sobie to zrobić jumperami bo urządzenie nie rozpoznaje jaki układ jest włożony. Rozpoznawanie braku układu odbywa się programowo przez adresowanie rejestrów chipa - jak nie odpowiada znaczy że układu nie ma.
@Mq: Czy dałoby się te jumperki wyprowadzić tak, żeby można sobie było to konfigurować bez lutowania?

Świetnie.

@Bitman: Jeśli miałbyś jeszcze jakieś Atari w SECAM do sprzedania (np 130XE) to ja chętnie zanabyłbym drogą kupna.

936

(9 odpowiedzi, napisanych Software, Gry - 8bit)

Dziękuję.

937

(364 odpowiedzi, napisanych Fabryka - 8bit)

Sparta only. Nie ma życia poza uniwersum SDX :)

Edit: Ale będzie dostępny kod źródłowy playera gdyby ktoś chciał używać tych modułów we własnym kodzie.

938

(364 odpowiedzi, napisanych Fabryka - 8bit)

Nie wiem, czy ktoś je robi. Dokumentacja jest na stronie Autora: http://raven1.magix.net/sonari/sonari.html a playerek dla utworów .PT3 z ProTrakera3 z ZX (2xAY) jest w trakcie pisania, więc jeśli już ktoś to będzie robił polecam wersję Sonari z dwoma AY/YM. Tym bardziej że urządzenie jest tak zaprojektowane że można wsadzić do niego tylko jeden układ (AY lub YM) jeśli ktoś nie chce/nie ma obydwóch.

Edit: Jest już gotowy player plików .STC (Sound Tracker 1.1 z ZX), ale wymaga jeszcze selekcji utworów demonstracyjnych. Wkrótce będzie dostępny.

939

(9 odpowiedzi, napisanych Software, Gry - 8bit)

@szzczupi26: Nie szkodzi. Voy uświadomił mnie że dzisiaj zrzuty już są. Czy można by w takim razie prosić tylko o skany władek do kaset (zarówno  tej białej, jak i niebieskiej) i samych kasetek z obydwu stron?

940

(9 odpowiedzi, napisanych Software, Gry - 8bit)

Mógłbyś zrzucić zawartość taśmy? Tych pierwszych wersji nie ma w sieci - są tylko albo jakieś cracki, albo wersje z muzyką :/. A oryginału ni-ma...

941

(421 odpowiedzi, napisanych Fabryka - 8bit)

Do mnie również. Miód i orzeszki. Piękny prezent na mikołaja :) Dzięki.

942

(11 odpowiedzi, napisanych Fabryka - 8bit)

Uwaga, bo w $D22x i $D23x drzemią sobie 3ci i 4ty POKEY.

Edit: Aha, o rozmrażarce kanałów POKEY-owych nie słyszałem :) Chociaż są jakieś sprzętowe detektory stereo które generują dźwięk z jednego POKEYa na obu kanałach stereo.

943

(11 odpowiedzi, napisanych Fabryka - 8bit)

Odnośnie dźwięku: Evie ma taki feature, że jak się zapisuje $D604/$D704 to bajt trafia od razu do $D600 i $D601 ($D700+$D701) czyli do obydwu kanałów stereo. Można też generować 8-bit PDM na POKEY-u przez zapis $D201 i $D205 (oczywiście po uprzednim _jednokrotnym_ skonfigurowaniu kanałów).

944

(11 odpowiedzi, napisanych Fabryka - 8bit)

@Yosh: A co myślałbyś o takim fjuczerze?
Z rozmów z Tobą zrozumiałem, że generujesz kod wykonywany przez Atari, który bierze daną z rejestru i zapisuje w pamięci. A gdyby tak na dysku znajdował się gotowy program podzielony na bloki jednostronicowe o początku w obszarze carta $D500. Takie bloki ładowałbyś z dysku, podstawiał jako pamięć w $D500 i wykonywał (przez Atari) tak jak to robisz obecnie (ten kod musiałby oczywiście wiedzieć jak pobrać daną z Twojego sprzętu). Dałoby to użyszkodnikowi możliwość praktycznie bezpośredniego wykonania kodu ładowanego z dysku sektor po sektorze. Owszem - niebezpieczne. Ale wtedy znikają pytania o możliwość odtwarzania dźwięku, multiplikacji sprajtów itd.

Edit: Może te bloki mogłyby być większe, albo wręcz zawijane na stronie $D5 (nie pamiętam jak masz to dokładnie zrealizowane).

Edit 2: Albo może dałoby się zrealizować w jakiś sposób mapowanie gdzie do pamięci mają trafić konkretne bajty z sektora z dysku. Wtedy program generowałbyś sobie tak jak dotąd bazując na takiej mapie. Choć wykonanie kodu bezpośrednio z dysku dałoby znacznie większe możliwości zarówno jeśli chodzi o kompresję danych graficznych (zapis tylko danych które się zmieniły), sprajtów, dźwięku itp.

945

(24 odpowiedzi, napisanych Sprzęt - 8bit)

Rozmawiać na compotach? Profanacja!

Reflektowałbym zatem na 5 szt. Cart i 5 szt. ECI.

@Mq: A czy chciałoby Ci się dorobić jeszcze płytkę dla gniazda ECI?

948

(38 odpowiedzi, napisanych Programowanie - 8 bit)

Jeśli zmieścisz się w 512K można rozważać jeszcze wersję wykorzystującą pamięć VBXE. Choć nie wiem czy istnieją w przyrodzie jednostki mające VBXE a nie mające XRAM.

949

(1 odpowiedzi, napisanych Sprzęt - 8bit)

Dziękuję.

950

(38 odpowiedzi, napisanych Programowanie - 8 bit)

Jest jeszcze AtariMAX 8Mb (1MB). Obawiam się, że nie ma uniwersalnego schematu bankowania. Zerknij na: https://sourceforge.net/p/atari800/sour … C/cart.txt