Dość enigmatycznie opisany jest układ Maria z konsoli 7800, ktoś ma więcej konkretnych informacji na jego temat? Podobnie z tym chipem dźwiękowym który nie został tam zainstalowany
W skrócie ekran tworzysz ze sprajtów. Co ramkę musisz tworzyć/przebudowywać Display List od nowa gdy przesuniesz coś na ekranie w pionie. Możesz użyć trybu znakowego ale żre cykle DMA Marii a co za tym idzie mocno haltuje 6502. Nie pomieszasz trybu hires z lowres w jednej linii. Zresztą hires jest mocno "upośledzony" w Marii do tego scroll jest co cykl koloru czyli jak na XL/XE Przez Line Ram niestety nie można cyklować kolorów w linii Pomimo wielu niedogodności jest to super układ :)
Pół setki niezależnych sprzętowych wielokolorowych spritów, żwawo ganiających po ekranie w mojej opinii jest super. Szczególnie jak na sprzęt z pierwszej połowy lat 80-tych.
Dla porównania ta sama gra na Atari 400/800/XL/XE. Oczywiście można wycisnąć z kompa więcej, ale te gry pochodzą z porównywalnego okresu, więc nie uwzględniamy super zdolnych koderów i współczesnych narzędzi:
Gdyby było tak łatwo.... to by to było widać po grach. Uproszcze trochę żeby było łatwiej wyjasnić (pominę startupy i shutdowny DMA i wpływ zapisu do rejestrów TIA i RIOT na DMA Marii) Maria w zprzybliżeniu ma 400 cykli DMA na linię, 4 cykle Marii to jeden cykl CPU Możemy mieć dowolną ilość sprajtów w jednej linii pod warunkiem że nie przekroczą tych 400 cykli Marii. Średnio jeden bajt grafiki w trybie direct to 4 cykle Marii. Tło w trybie znakowym 4 kolorowym (indirect) o podwójnej szerokości znaku (2 znaki na bajt) zajmie około 200 cykli Marii. Zostawia nam to około 200 cykli czyli 50 bajtów na sprajty. Gdy użyjem trybu 160B (12kolorów) dla sprajtów to wystarczy to na 5 sprajtów o szerokości 20 pixeli w linii. Ale zużyjemy prawie całe DMA Marii a co za tym idzie haltujemy CPU. Można to sobie wyobrazić jak ekran na XL/XE złożony z samych badlines ;) Zostanie nam tylko 70 lini CPU na program. Teraz musimy sobie sporządzić Display List od nowa za każdym razem gdy przesuwasz coś na ekranie w pionie. Powiedzmy że mamy ekran wysokości 192 lini. To Display List przy Zonie wynoszącym 16 lini w uproszczeniu będzie mieć około 300 bajtów Zaś na przykład użycie tła 12 kolorowego w trybie znakowym powoduje że nie mamy czasu na wyświetlenie sprajtów. Teoretycznie można by użyć 4 kolorowego trybu znakowego do stworzenia Paralaxy ale znowu zostanie nam zero czasu na sprajty.
Do tego brak sprzętowych kolizji, Holy DMA, grafika do góry nogami, organizacja bitów dla 12 kolorowego trybu nie wspominając już o hiresowych trybach, artefakty, szyfrowanie nagłowków carta, 4kb ramu w kawałkach to wszystko nie ułatwia developerki na tym sprzęcie.
Czytając dokumentacje można pomyśleć że zrobienie gry z prawdziwą paralaxą będzie banalnie proste ale jakoś takich nie ma.
ps. Obliczenia są przybliżone i z pamięci. Za szkody wynikłe z tego powodu nie odpowiadam ;)
Tutaj taka ciekawostka ile można "wycisnąć" z Marii. Mruga jak diabli ale wyglada imponująco. Gdyby tak popracowali jeszcze rok na tym układem to Atari ST nie miałoby sensu ;)))))
Maria to kawał dobrego czipu, nie bez powodu Atari zastosowało jej koncepcję w Object Procesorze Panther a potem Object Procesorze Jaguara.
Zastanawiające że w pewnym momencie Atari miało trzy konsole 8bitowe 2600, XEGS no i właśnie 7800, które grafiką zjadało dwa poprzednie.
@Eagle
Gdyby tak popracowali jeszcze rok na tym układem to Atari ST nie miałoby sensu ;)))))
Jakby Atari chciało, to zrobiło by z ST zajebistą konsolkę do gierek. Znali się na tym, w końcu ci sami ludzie zrobili C64. ST to coś więcej niż konsolka do pykania w gierki. To komputer do pracy w której ważne jest efektywne graficzne GUI, rozdzielczości VGA oraz szybki twardy dysk. Gdzie funkcje takie jak odtwarzanie sampli czy sprzętowe duszki są zbędne.
Można tak to próbować wytłumaczyć, ale można też wyjaśnić pośpiechem, bo po co się później "schylano" po blitter i większą paletę? ST i Amiga 500/600 to ten sam segment komputera domowego mimo wszystko. "Rozdzielczości VGA" to jedna rozdzielczość 640x400 w ST, aczkolwiek do zastosowań profesjonalnych okazała się hitem i poza ceną, uratowała ST. 8-bitowo byłem, jestem atarowcem i zawsze będę, 16—bitów to inna para kaloszy ;-) Poza hi-resem, ST leży bardzo daleko od zaawansowania Amigi i jego użytkowanie daje też bardziej toporne odczucia. Trochę właśnie jak Atari XL/XE (lekkość i zwiewność) vs C64 (toporność i ociężałość). Choć z grami wyszło akurat na odwrót, Amiga miała tu asa w rękawie razem z OS-em i stanowiła świetne rozwinięcie koncepcji rozpoczętych w 8-bitowym Atari :-)
Heartlight na Atari 7800 W ramach noworocznego postanowienia przeproszenia sie z Madsem Czas zostawic Atasm/Mac65 za soba.
Brakuje wiele rzeczy: * dzwiek * glowne menu * wrzucilem tylko 4 levele (dopoki nie skoncze) * grafika 4 kolorowa zamiast 12 ale chyba bede trzymal sie oryginalu * animacja serc i wyjscia * brak szyfrowania naglowka * reszty nie pamietam
restart sceny po nacisnieciu klawisza Start (F2) testowane na emulatorze Pro System ->link<-
Czas dokonczenia ??? Nie testowane na real hardware. Na emu dziala bez problemu Milej zabawy. Eagle
Tak 160A, tryb znakowy 4x8 w 4 kolorach Na A800 uzywany jest jeszcze invers ktory tutaj zamienie na animacje. Myslalem o 160B ale bym musial sporo przebudowac program. Chociaz Maria powinna dac rade z DMA przy takiej szerokosci ekranu.
Tak. Tryb 160B zabiera 41 podwojnych znakow x 9 cykli plus naglowki czyli juz prawie nie zostaje czasu nawet na sprajta. Mozna uzyc dwa plany znakowe 3 kolorowe i zajmie to tyle samo cykli a bedzie duzo mniej kolorow. W trybie szerokosci 32 znakow mozna by w trybie 160B zrobic cos ciekawego i grywalnego.
320B can do 2 palettes 3 color plus BG per character. To use it properly you must turn on Kangaroo mode (transparency off). Otherwise 00 and 01 bit pairs cannot be next to each other, they will make both show BG color.
Here it's used in something I'm working on, a more typical game setting, playing samples between attack waves. It sounds pretty good, still using a sampling rate of 7860. I don't have the guns firing yet so there will be a few more missiles on screen when the samples are played but that probably won't affect it too much. Credits are @kiwilove graphics, @RevEng's TIA sound effects and I borrowed @Fragmare's Air Zonk for some background music (playing on the second POKEY as a channel on the first is used for the IRQ timer).
I am reluctant to post a NTSC version because I can't test it and there's a bit of dodgy code needed to get it working. I have two DLIs, one to change the mode to 320 for the text area and another to change it back to 160. NMIs should have priority over IRQs but there is a timing issue where an IRQ can cause the NMI to be missed completely. Normally you'd get around it by positioning the IRQ to occur at a position on the scanline away from the DLI but I can't do that because for some reason the 15kHz timer is slightly longer than a scanline, so the position of the IRQ moves. Instead I reset the position of the IRQ in the first DLI, such that it's still OK when it reaches the second DLI and when it gets back to the first DLI again. This was very much suck it and see, I don't know if this position would work on NTSC where there are less scanlines per frame.
@Cyprian to nie moje tylko playsofta, ja utknalem z braku czasu na konwersji bloodfightera na covoxa. RevEng ma AAge:
Inaccuracies are likely due to a scanline length of 113.5 1.79MHz cycles (not 114 cycles like the A8), and the clock slowdown affecting Pokey whenever you access TIA and RIOT.
Z powodu DMA Marii i wielu innych czynnikow nie bedzie to grac czysto ale lepsze to niz nic. No chyba ze wylaczysz Marie ;) Bo tam nawet nie da sie zrobic "krotkiej" Display Listy bo nie ma tam JVB. Musisz zapelnic caly ekran liniam w swojej DL. Co do samego filmiku to wszystko jest ruchome/animowane w osi X oprocz pociskow. Gdy chcesz dodac ruch w Y to wszystko sie BARDZO komplikuje. Ale wyglada to bardzo ladnie.
@cyprian nie sprawdzalem ale patrzac na program blittera to na oko 32k cykli (ztcp to vblank ma chyba okolo 35k w PAL) Nie tworze textur, tylko mam zrzut 16kb pamieci z A8 Nie wgryzalem sie za bardzo. Byla dyskusja na AAge czy sie da. To szybko przerobilem procedure blittera pod adresy pamieci A7800 Stworzylem emulacje trybu $D Antica przy uzyciu Marii. I dziala.
BTW ta Yamaha 2151 w Dragonfly jest rewelacyjna. Pracuje nad wersja playera YM z dodatkowymi dwoma kanalami na Covox. Niestety emulator nie obsluguje Covoxa.
"Bo moje życie, wypełnione jest MARJĄ!" a, to nie o taką Marję chodzi ;)
Ja się nie znam na układzie Maria, ale widzę, że on ma moc. Podoba się mi, jadnak patrząc na sposób jego programowania, jest on (wydaje mi się) strasznie przekombinowany. W sumie tak pobieżnie rzuciłem okiem na jeden z pierwszych linków (od Tebe-go) i "przeraziłem siem".
@Eagle: Muzyczka jest git - kojarzy mi się z serią gier o DragonBall :) (mam na myśli to ->link<-
1. Za pomocą DLL dzielisz ekran w pionie na sekcje (to jest lista DL). 2. Za pomocą DL dzielisz sekcję w poziomie na bloki (to jest lista bloków). 3. Bloki mogą się na siebie nakładać i mieć różne szerokości. 4. Bloków możesz mieć tyle na ile wystarczy Ci cykli w linii skaningowej. 5. Każdy blok ma jedną z 8-miu palet. 6. Każda paleta ma 3 kolory (kolor tła jest jeden dla całego ekranu).
W ten sposób realizujesz i tło i sprajty.
DLL i DL są w RAM więc możesz je dynamicznie modyfikować. Czyli np. przesuwać bloki w poziomie i modyfikować adresy danych dla bloków (czym realizujesz przesuw w pionie albo np. animacje), czy zmieniać szerokość bloku lub wysokość sekcji.
Każdy blok z osobna może być w trybie graficznym (bezpośredni) lub znakowym (pośredni).
Tak więc można robić całkiem ładny czarymar.
Są przerwania DLI, nie ma przerwania VBLK - tylko flaga.