101

Panowie, to prototyp w sferze schematu na kartce. Chodzi o to, czy to w ogóle zadziała. Nigdzie nie napisałem że drugi procesor to ma być 6502. Teraz takim jest by sprawdzić co trzeba i jakiś tam program/procedury napisać bo łatwiej zrobić to na 6502 niż na jakimś tam procesorze którego Bóg jeden wie kto potrafi oprogramować choćby na poziomie LDA, STA...

102

Wczoraj WERONIKA odpaliła pierwsze DEMO.
Na "oko" animacja chodzi dwa razy szybciej niż na gołym Atari.
Drugi procesor to 6502, taktowany około 1.6MHz dołączony do części zasadniczej jako moduł
Ma do dyspozycji pełne 64kB SRAMu, wyłączając z tego 256 bajtów jako rejestr sprzętowy do komunikowania się z Atari. Przełączany BANK niosący dane tam i tu konfigurować można jako 2x8kB lub 1x16kB umieszczony od strony Atari w $8000-$BFFF bo takie rozwiązanie narzuca gniazdo cartridge'a
Cały moduł jest wielkości około 2.5 standardowego cartridge'a. Wykonany jest na standardowych układach scalonych
Podziękowania dla Konopa który bardzo zaangażował się w projekt i niezmordowanie pisał przez ostatnie trzy tygodnie procedurki testujące pozwalające uruchomić moduł w/g jego życzeń. Dziękuję Marku! (po drodze niektóre pisałem sam)
Jak ktoś ma zamiar pisać poniżej teksty w rodzaju ... po co to i na co... niech weźmie na wstrzymanie.
Odpowiem na rzeczowe pytania. Inne mnie nie interesują. WERONIKA, jak wcześniej pisałem powstała po to by sprawdzić czy takie coś będzie działać. Działa, więc warunek spełniony. WERONIKA w/g moich założeń nie ma być rewolucją, ma być czymś co też da się na Atari zrobić. Jak ktoś zainteresowany może się zaangażować, schematy opublikuję, a Konop ma swoje dalsze pomysły z tym związane więc w miarę moich możliwości pomogę mu je zrealizować
Warto wspomnieć ile to kosztuje. Wykonane jest jako prototyp, stąd użyte są podstawki dla wszystkich układów scalonych. Części kupowane były detalicznie, więc drogo. Po podliczeniu wyszło około 170-180PLN nie licząc mozolnego lutowania tysiąca kabelków Kynarem. Na moduł składa się 25 układów scalonych. Dla porównania. Na standardowej płycie Atari 800XL układów scalonych jest ....25 :)

103

Gratulacje! Więc mamy nową... Hmm, dopałkę? Nie wiem jak to nazwać do końca, w każdym razie WIELKI SZACUN!

Sikor umarł...

104

No to proszę podać ile jest to na "oko" :)
Liczę na testy na innych produkcjach.

105 Ostatnio edytowany przez Marek Konopka (2010-05-30 11:26:23)

Ja również chciałbym w tym miejscu podziękować Zenkowi za ogrom wniesionej pracy, cierpliwość i zaangażowanie. Bez jego wiedzy i doświadczenia projekt nie miałby najmniejszych szans powodzenia.

pajero napisał/a:

No to proszę podać ile jest to na "oko" :)
Liczę na testy na innych produkcjach.

Ciężko powiedzieć dokładnie, gdyż na razie próbkowanie czasu wykonywania procedury nie jest dostępne. Wykonam to niebawem. Procesor Weroniki nie jest obiążony balastem "cyklokradów", więc otrzymujemy obecnie pełną moc wynikającą z taktowania częstotliwością ~1,63 MHz. Po uwzględnieniu podatku od cyklokrada po stronie Atari mamy 1.53 MHz dla wspomnianego programu. Mamy tutaj zatem w przybliżeniu 2x większą moc w stosunku do gołej Atarynki. Efekt wykorzystuje przetwarzanie równoległe, dzieląc ekran na dwie równe półówki. Górną część ekranu otrzymuje Atari, dolną Weronika. Taki schemat postępowania jest najsensowniejszy na obecnym etapie rozwoju modułu. W przyszłości, gdy moc procesora wzrośnie znacznie, takie działanie będzie mniej pożądane. W konsekwencji, lepszym rozwiązaniem będzie dokonywać obliczenia całkowicie po stronie Weroniki, co oczywiście nie oznacza, że nie możemy korzystać z mocy Atari również w takim wariancie.

W najbliższym czasie dokonam porządkowania kodu protokołu komunikacyjnego, a po tym dokończę Demo. Będzie to o wiele łatwiejsze, gdy moduł trafi w moje ręce, ponieważ efekt pisany był "na wyczucie", bez dostępu bezpośredniego do Weroniki.

Co do innych produkcji - muszą one najpierw powstać, ale tym zajmą się - miejmy nadzieję - również inne osoby, gdy moduł się upowszechni.

106

nonono, gratulacje. Jakis schemacik mozna zzobaczyc?

Dwa korce ziemniaków, gęsich jajek kopa, żeby móc to połknąć, tęgiego trza chłopa. GG3456993

107

:)

1. jest szansa ze finalny kart bedzie mniejszy
2. co to znaczy w przyszlosci moc procesora na karecie wzrosnie.

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

108

Postaramy się zaprzęgnąć do pracy odporniejszy na wyższe takowanie procesor (WDC 65816).

109

a zdjęcie tego karta z Atarką jako skalą porównawczą można zobaczyć ?

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

110

jakas rozpiska tej jednej strony pamieci z rejestrami.

- zaraz po wlaczeniu komputera procek na karcie wykonuje jakis program czy jest haltowany do czasu zapisu jakiegos rejestru?
- okno $8000-$bfff dla proca na karcie ma takie same adresy?
- czy mozna programowo zresetowac proca na karcie?
- czy karta jest przelotowa czyli czy mozna wlozyc inny kart np z gra nie wyjmujac weroniki?

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

111 Ostatnio edytowany przez Marek Konopka (2010-05-31 10:13:27)

Rejestr sprzętowy zlokalizowany jest pod adresem $0200. Reszta strony została zarezerwowana dla przyszłych rozwiązań.
Po włączeniu zasilania procesor jest wstrzymany. Po RESET okno zlokalizowane jest pod $C000. Istnieje możliwość przełączenia go pod $4000. Decyduje o tym bit D6 rejestru sprzętowego. Procesor resetujemy od strony Atari przy użyciu bitu D0 rejestru sprzętowego ($D5C0). Obecnie moduł nie jest przelotowy.

Decyzja dot. publikacji zdjęć należy do Zenona.

112

od strony karta rej.sprzetowy jest pod $200 od strony atari $d5c0. a znaczenie poszczegolnych bitow? jesli od strony karta maja inne znaczenie to tez poprosze. adres $c000 wybrany bardzo dobrze - zalatwi sprawe resetu (dla 6502) sprytne

dosc istotna sprawa, przez gniazdo karta chyba nie ma mozliwosci wywolania przerwania w atarce dlatego nalezaloby w jakis sposob moc wywolywac przerwanie w weronice, czy jest jakis bit zatrzask (ustawiany od strony atari) ktory zglosi przerwanie nmi/irq weronice?

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

113

.enum    EAtariRegisterBits
    SEMAPHORE_READ    = 7
    SEMAPHORE_WRITE    = 7
   
    BANK1_ENABLE    = 5    // $A000-$BFFF -> $E000-$FFFF or $6000-$7FFF
    BANK0_ENABLE    = 4    // $8000-$9FFF -> $C000-$DFFF or $4000-$5FFF
   
    RAMBANK_CFG    = 1
   
    VERONICA_CPU_RESET    = 0
.ende

.enum    EVeronicaRegisterBits
    SEMAPHORE_READ    = 7
    SEMAPHORE_WRITE    = 7
   
    WINDOW_LOCATION    = 6
.ende

.enum    EAtariRegisterStates
    UNLOCK_ATARI    = (1 << EAtariRegisterBits.SEMAPHORE_WRITE)
    VERONICA_UNLOCKED    = (1 << EAtariRegisterBits.SEMAPHORE_READ)
    SEMAPHORE_MASK    = (1 << EAtariRegisterBits.SEMAPHORE_READ)
   
    BANK0_ENABLED    = (1 << EAtariRegisterBits.BANK0_ENABLE)
    BANK0_DISABLED    = (0 << EAtariRegisterBits.BANK0_ENABLE)
    BANK1_ENABLED    = (1 << EAtariRegisterBits.BANK1_ENABLE)
    BANK1_DISABLED    = (0 << EAtariRegisterBits.BANK1_ENABLE)
    BANKS_ENABLED    = (BANK0_ENABLED | BANK1_ENABLED)
    BANKS_DISABLED    = 0

    BANK0_MASK    = (1 << EAtariRegisterBits.BANK0_ENABLE)
    BANK1_MASK    = (1 << EAtariRegisterBits.BANK1_ENABLE)
    BANKS_MASK    = (BANK0_MASK | BANK1_MASK)
   
    RAMBANK_CFG_MASK    = (1 << EAtariRegisterBits.RAMBANK_CFG)

    VER_CPU_RESET_PULSE_LOW        = (0 << EAtariRegisterBits.VERONICA_CPU_RESET)
    VER_CPU_RESET_PULSE_HIGH    = (1 << EAtariRegisterBits.VERONICA_CPU_RESET)
    VER_CPU_RESET_MASK    = (1 << EAtariRegisterBits.VERONICA_CPU_RESET)
.ende

.enum    EVeronicaRegisterStates
    UNLOCK_VERONICA    = (1 << EVeronicaRegisterBits.SEMAPHORE_WRITE)
    ATARI_UNLOCKED    = (1 << EVeronicaRegisterBits.SEMAPHORE_READ)
    SEMAPHORE_MASK    = (1 << EVeronicaRegisterBits.SEMAPHORE_WRITE)

    WINDOW_LOCATION_C000    = (0 << EVeronicaRegisterBits.WINDOW_LOCATION)
    WINDOW_LOCATION_4000    = (1 << EVeronicaRegisterBits.WINDOW_LOCATION)
    WINDOW_LOCATION_MASK    = (1 << EVeronicaRegisterBits.WINDOW_LOCATION)
.ende

Weronika nigdy nie była projektowana jako moduł obsługujący przerwania, a bardziej jako koprocesor. Wszelkie przerwania w procesorze Weroniki są zablokowane na poziomie elektronicznym (/IRQ, /NMI na "1").

114

przerwania byly by milym dodatkiem ale nie sa konieczne skoro to ma byc karta koproca.
swietny pomysl, mozna budowac obraz i co ramke przelaczac anticowi do wyswietlania. gratulacje, udalo sie zsynchronizowac prace dwoch ukladow o roznej czestotliwosci.
przelotowa weronika jest w planach?

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

115

W kwestii przelotowości modułu wypowiedzie się zapewne Zenon.

116 Ostatnio edytowany przez Zenon/Dial (2010-05-31 17:58:09)

Weronika nie jest przelotowa, czy będzie....?
Zbudowałem to bo sprawdzić chciałem czy takie coś działać będzie. Działa, więc spełniło się po latach. THE END
Miało być bez fajerwerków i strzelistych konstrukcji. Proste i działające. I takie jest
Konop bardzo się zaangażował więc uwzględniłem jego zapotrzebowanie bo to on będzie się tym bawił i używał w/g swoich pomysłów

$D5C0 - adres rejestru sprzętowego Atari
D0 - programowy reset dla drugiego procesora
D1 - przełącza banki
D4 - $8000-$9FFF
D5 - $A000-$BFFF
D4, D5 konfigurować można wg upodobań programisty
D7 - tzw flaga, do komunikowania się procesorów

Drugi procesor
Bank zawsze ma 16k
D6 - przemieszcza bank z lokacji $C000-$FFFF do $4000-$7FFF i odwrotnie
Standardowo bank jest w $C000.... Co wynika z umieszczenia tu wektora startu dla 6502
D7 - flaga

Rejestry są do zapisu i do odczytu, nieznaczące bity przy odczycie =1

Flaga, to osobny rejestr pod tymi samymi adresami
D7 każdy procesor może zapisywać i odczytywać w dowolnej chwili.
Takie działanie jest jednak bez sensu, bo nic nie wnosi.
Programista musi wiedzieć jak tego używa i kiedy można zapisać, odczytać
Atari zapisuje D7=0 ale odczyta jako D7=1
Drugi procesor zapisuje D7=1 ale odczyta jako D7=0
Jak to działa
D7=0 po starcie Atari odczyta jako D7=1 i jest gotów przełączyć banki
Drugi procesor odczyta D7=0 i czeka na przełączenie
Atari przełączył banki i D7=1, co automatycznie odczyta jako D7=0 nie może przełączyć banków (to programista nie może przełączyć)
W tym czasie drugi procesor odczyta D7=1 , znaczy ma podstawiony nowy bank.
Pracuje?. Jak skończy ustawia D7=1 co odczyta jako D7=0 (że nie ma nowego banku)
Atari odczytuje D7=1 więc jak ma przygotowane dane to może przełączyć bank i ustawić D7=1

Atari może do rejestru "flagi"wpisać 0 lub 1, drugi procesor tylko 1
Nie jest to jakieś fiku miku, ani żadne cudo, po prostu wynika z optymalizacji elektroniki

Fotki modułu...
Poproszę Konopa, bo nie mam zielonego pojęcia jak je zamieścić na AA
To prototyp, starannie wykonany.

117

Obiecane zdjęcia:

http://img708.imageshack.us/img708/1098/weronika20modub320str1.jpg

http://img697.imageshack.us/img697/702/weronika20modub320str2.jpg

118

a mozna prosic po uprzednim wylaczeniu efektu mouszyn blur?

przechodze na tumiwisizm

119

Kilki rzeczy nie rozumiem...

Z tym przełączaniem banków jest tak jakie były pierwotne założenia? Przełączany obszar ($8000-$BFFF od strony atari) jest zdublowany i jeśli  RAMBANK_CFG == 0 to atari widzi wersję A, a kartridż wersję B, a w przeciwnym razie odwrotnie?
Jak działa te wstrzymanie procesora po włączeniu zasilania? Linia HALT? I po resecie jest zwalniana i już nigdy wstrzymywanie nie występuje aż do wyłączenia zasilania?
A jak działa RESET? Trzeba ustawić VER_CPU_RESET_PULSE_HIGH, po czym VER_CPU_RESET_PULSE_LOW i w tedy procesor startuje?

120

Idea przełączania banków jest nadal obowiązująca i działa tak jak napisałeś.

Wstrzymanie działa w ten sposób, że po starcie podawany jest sygnał "0" na pin /RES, co rzekomo miało zatrzymywać procesor, a okazało się, że generuje on jakieś impulsy na szynach, w związku z czym potrzebne były dodatkowe zabezpieczenia. Linia HALT nie jest wykorzystywana. Ustawiana jest na sztywno na "1".

Reset działa w ten sposób, że ustawiamy VER_CPU_RESET_PULSE_LOW, odczekujemy moment, ustawiamy VER_CPU_RESET_PULSE_HIGH, ponownie czekamy i od tego momentu procesor jest zrestartowany. Proces można powtarzać.

Odnośnie zdjęć, to na chwilę obecną dysponuję jedynie takimi.

121

Ktoś zainteresowany emulacją Weroniki w Atari++ 1.51?
Jestem w stanie zaemulować 65c816 z prędkością 0 - około 32 MHz. Do 16 MB RAM.

122

a mozna prosic po uprzednim wylaczeniu efektu mouszyn blur?

"Foto" robione na skanerze, innych możliwości nie mam.
Co Cię interesuje, odpowiem.

123

laoo/ng napisał/a:

Ktoś zainteresowany emulacją Weroniki w Atari++ 1.51?

Byłoby miło i umożliwiło pisanie programów bez posiadania sprzętu innym osobom. W razie potrzeby konsultacji pisz na priva, jeśli zdecydowałbyś się na stworzenie emulacji.

124

Kolejny sukces. Weronika przyjęła na swoje łono procesor WDC 65C816S z taktowaniem 5 MHz. Skutek - efekt odświeża się co 3 ramki (z synchonizacją do VBL), w stosunku do 10 na "gołej" Atarce. Postaram się niebawem przedstawić naoczne dowody.

125

Super!
Dobrze ze zatrzymalem dwa procki 816 kupione hmmm z 4 lata temu :)
Wiedzialem ze takie rozszerzenie przez port cartridga jest mozliwe i trzymalem kciuki za Zenona.

Teraz tylko trzeba wladowac kilkanascie ukladow (szczegolnie 12 buforow) do jednej kosci logicznej, przejsc na SMD i wlezie do standardowej obudowy cartridga :)

GRATULACJE!