WSTEP
INFORMACJE OGOLNE
DOSTEPNE GRY
RDZEN PROCESORA
MAPA PAMIECI
GRAFIKA
DZWIEK
REJESTRY STERUJACE
M.A.C.S.
WSTEP
Informacje zawarte na stronie NIE pochodza z oficjalnej (lub nieoficjalnej) dokumentacji.
Wszystkie materialy sa efektem prac "badawczych" nad kodem gier. Niestety nie mialem i nie mam dostepu
do hardware (chociaz w niedalekiej przyszlosci moze to ulec zmianie). W tekscie uzywam glownie
angielskojezycznego nazewnictwa ktore ktore imo brzmi duzo lepiej niz 'polskawe' odpowiedniki (sprite=duszek,
tile = kafel).
Zdjecia plyt zostaly w wiekszosci zrobione przez Guru.
Hardware dzwiekowy ST-0016 zostal rozpracowany przez RB i
Haze.
Wszelkie uwagi, wskazowki i informacje sa mile widziane.
INFORMACJE OGOLNE
ST-0016 jest uniwersalnym ukladem sterujacym, zawierajacym w sobie osmiobitowy rdzen procesora
(kompatybilny z Zilog Z80) oraz wysokowydajne uklady: graficzny, dzwiekowy i oraz wejscia/wyjscia.
Zostal stworzony przez japonska firme (lub na jej zamowienie) Seta
(Super Entertainment and Toatal Amusement)
prawdopodobnie okolo roku 1993 (najwczesniejsze uklady datowane sa na 48 tydzien 93 roku (9348YAA), inne na 5 tydzien 1994 roku (9405YAA)).
ST-0016 byl produkowany w 208 pin obudowie typu PQFP (Plastic Quad Flat-Pack) i oznaczany jako
TC6187AF lub TC6210AF (prawdopodobnie inna wersja ukladu).
DOSTEPNE GRY
ST-0016 zostal wykorzystany w kilku automatach do gier. Jak do tej pory znamy nastepujace tytuly wykorzystujace uklad Seta:
- Renju Kizoku (c) 1994 Visco
Go-moku. ST-0016 jest tutaj glownym ukladem kontrolujacym gre.
- Mayjinsen (c) 1994 Seta
Shogi. Powazne problemy z grafika. Oprocz ukladu Seta, na plycie znajduje sie takze RISC
procesor NEC V810. Jest on powszechnie wykorzystywany do symulacji w Shogi (odpowiada za AI
maszyny). Znalezc go mozna takze na plycie systemu SSV, jak rowniez w grze Shogi przeznaczonej
na konsole SNES (V810 jest tam sygnowany marka (sic!) SETA i oznaczony jako ST-018). V810 jest
takze glownym CPU w konsolach takich jak Virtual Boy czy PC-FX.
- Mayjinsen 2 (c) 1994 Seta
Podobnie jak Mayjinsen, tym razem jednak gra emulowana poprawnie.
- Super Eagle Shot (c) 1994 Seta
Golf. Brak emulacji. ST-0016 odpowiada tutaj za dzwiek i czesc grafiki (reszta steruje procesor IDT kompatybilny z MIPS R3000).
- Super Real Mahjong Part V (c) 199? Seta
Mahjong. Brak emulacji. ST-0016 wykorzystwyany jest prawdopodobnie tylko jako uklad dzwiekowy.
Glowny procesor to - podobnie jak w golfie - IDT kompatybilny z MIPS R3000.
- Neratte Chu (c) 1996 Seta
Ciekawa gra logiczno zrecznosciowa. Tak jak w Renju Kizoku, ST-0016 jest podstawowym ukladem.
- M.A.C.S.
- W chwili obecnej znane sa nastepuajce gry dzialajace pod tym systemem:
- Kisekae Mahjong (c) 1995 I'Max
Mahjong - prawdopodobnie grywalne. Wiecej o grze tutaj.
- Kisekae Hanafuda (c) 1995 I'Max
Hanafuda - prawdopodobnie grywalne.
- Seimei-Kantei-Meimei-Ki Cult Name (c) 1996 I'Max
Prawdopodobnie fortune teller/biorytm/htw.
Niegrywalne - problemy ze sterowaniem. Uzywa drukarki. Wykorzystuje oba sloty cartow na plycie.
- Yu-Ka (c) 1999 Yubis / T.System
Hanafuda. Prawdopodobnie grywalne.
- Yu-Jan(c) 1999 Yubis / T.System
Mahjong. Prawdopodobnie grywalny.
RDZEN PROCESORA
Sercem ukladu ST-0016 jest rdzen procesora kompatybilny z popularnym osmiobitowym
Zilogiem Z80. Nie udalo sie jak dotad znalezc zadnych roznic czy ulepszen. Szczegolowa
dokumentacja dostepna jest na stronie producenta.
Procesor dziala w pierwszym trybie przerwan (obsluga pod adresem $38).
Kilka tytulow wykorzystuje rowniez przerwanie niemaskowalne z obsluga pod $66. Zrodla obu
przerwan nie sa znane. INT zsynchronizowane jest prawdopodbnie z wygaszaniem pionowym
(VBLANK = 60 Hz), natomiast NMI jest wyzwalane albo sygnalem zewnetrznym, albo jest efektem
dzialania potencjalnych timerow (doswiadczalnie dobrano czestotliwosc NMI jako 15 Hz).
O ile blokada INT odbywa sie za pomoca standardowych instrukcji Z80 (di/ei), o tyle
sposob sterowania NMI (co najmniej jedna gra wymaga blokady tego przerwania) jest nieznany.
MAPA PAMIECI
Uklad ST-0016 bazuje na procesorze Z80 potrafiacym zaadresowac maksymalnie 64 KB pamieci.
Jednakze uzytkownik ma dostep do znacznie wiekszej jej ilosci. W podstawowej wersji mamy
nastepujace bloki RAM:
- 2 MB pamieci okreslanej jako Character RAM, wykorzystywanej do przechowywania grafiki (characters)
oraz probek dzwieku (sampli),
- 2 KB Palette RAM - przechowuje informacje o kolorach,
- 64 KB Sprite RAM zawiera listy sprajtow,
- 128 B Common RAM + 2 KB RAM + 4 KB WORK RAM,
Wyzej wymienione wartosci sa prawdopodobnie tylko maxymalnymi obslugiwanymi przez sprzet. Czesc pamieci (prawdopodobnie
CHARACTER RAM, WORK RAM i SPRITE RAM) znajduje sie poza ukladem ST-0016 w osobnych "kosciach".
Oprocz RAM, na plycie znajduje sie rowniez pokazna ilosc pamieci ROM. Ile - to juz zalezy od
konkretnej gry. Przykladowo Nerrate Chu korzysta z 1.5 MB ROM a Srmp5 - z 20 MB.
By umozliwic dostep do wszystkich obszarow pamieci, zastosowano jej podzial na bloki (banki)
o stalym rozmiarze oraz "okna" w obszarze adresowym cpu, przez ktore "widoczne" sa
poszczegolne obszary ROM lub RAM. Zilustrowane to jest na ponizszym rysunku:
Wyboru banku(bloku) pamieci widocznego w odpowiednim oknie dokonujemy przez zapis jego
numeru do odpowiedniego rejestru ST-0016 (dokladniej zostalo to opisane w sekcji traktujacej
o rejestrach). Jedynie pierwsze 32KB sa na stale przypisane do zerowego banku ROM.
REJESTRY STERUJACE
W ukladzie seta rejestry sprzetowe zostaly zamapowane w przestrzeni I/O procesora Z80.
Mozna podzielic je na kilka grup (adresy zostaly pogrubione) :
- Rejestry video/timera ($00 - $01)
Zawieraja prawdopodobnie numer aktualnie wyswietlanej linii obrazu i/lub parametry timerow.
Kilka gier czeka na pojawienie sie konkretnych wartosci w powyzszych rejestrach.
- Rejestry tilemap ($08 - $40)
Siedem (lub osiem, mozliwe ze rejestry 00 - 07 sa rowniez wykorzystywane) zestawow po 8
rejestrow, dotyczacych 7 (lub 8) tilemap. Znaczenie poszczególnych rejestrów jest niestety
niejasne, ale wystarczajace do prawidlowej emulacji:
0 - ??? (zwykle $00/$20/$ba)
1 - adres tilemapy w Character Ram /$1000 (przykladowo 3 -> tilemapa pod adresem $3000)
(0 = brak tilemapy)
2 - ??? (zwykle $ff/$1f/$af)
3 - priorytet tilemapy w stosunku do sprajtow (0 - pod, $ff - nad)
4 - ??? (zwykle &7f/&ff)
5 - ??? (mozliwy zwiazek z priorytetem(rejestrem nr 3 - zwykle $20 lub $29 (gdy rejestr 3 = $ff))
6 - ??? (zwykle 0)
7 - ??? (zwykle $20/$10/$12)
- Rejestry przesuniecia (scroll) ($40 - $60)
Kazda lista sprajtow moze byc dodatkowa sprzezona z para rejestrow przesuwajacych
wszystkie jej elementy na ekranie o zadana ilosc pixeli. Dostepnych jest 16 niezaleznych
par (dla wsp. X i Y) rejestrow. Przesuniecie jest liczba 16 bitowa ze znakiem i zajmuje dwa
kolejne rejestry. Przykladowo piewsza para zamapowana jest pod adresami
$40,$41 dla X i$42,$43 dla Y.
- Rejestry DMA ($a0 - $a8 oraz $f0)
ST-0016 posiada zaintegrowany kontroler DMA umozliwiajacy szybkie przesylanie danych
do Character RAM bez wykorzystania procesora.
Po zaladowaniu odpowiednich rejestrow parametrami transferu, ustawienie bitu 5 w $a8
inicjuje przesyl danych. Gdy kopiowanie zostanie zakonczone, bity 0 i 1 w rejestrze
$f0 zostaja wyzerowane.
- Rejestry sterujace pamiecia ($e0 - $e6)
$e1 - bank ROM : 00-$ff
$e2 - bank Sprite RAM : starszy nibble - BANK 1, mlodszy nibble - BANK 2
$e3 - $e4 - bank Character RAM : 0-$ffff
$e5 - bank Palette RAM : 0-$ffff
Przeznaczenie rejestrow $e0 i $e6 nie jest znane. $e0 jest czesto uzywany - przykladowo
Renju zapisuje tam wartosc $40 a Neratte - $0.
- Watchdog ($e7)
Niestety, nie wiadomo jak czesto watchdog musi byc resetowany by zapewnic poprawna
prace ukladu.
- I/O ($c0 - $df)
Linie i/o sa wyprowadzone na zewnatrz ukladu ST-0016 i sluza do komunikacjiz pozostalymi
ukladami. Ich przeznaczenie zalezy od konkretnej implementacji. I tak, w Renju/Nerrate porty
$c0-$c3 wykorzystane zostaly do odczytu ustswien gry (DSW) i sterowania. W grach
korzystajacych z procesora V810 porty $c0-$c3 sa zarezerwowane do komunikacji z tym ukladem,
natomiast $d0-$d3 pelnia podobna funkcje jak $c0-$c3 w Renju.
System M.A.C.S. wykorzystuje zakres $c0-$c7 do odczytu klawiatury i komunikacji z dodatkowymi
peryferiami typu drukarka czy hopper.
GRAFIKA
Podstawowym elementem z ktorego budowana jest grafika w ST-0016 jest tzw. tile (character), czyli kwadratowy
element graficzny o wymiarach 8x8 szestastokolorowych pixeli. Kazdy tile zajmuje dokladnie 32 bajty
pamieci (8*8*4 bity (do okreslenia 16 kolorow)) - stad rozmiar okna CHARACTER RAM rowny 32 bajtom.
Do dyspozycji mamy 1024 kolory (R:5,G:5,B:5) pogrupowane w 64 palety o 16 kolorach kazda.
(indeks zerowy palety wskazuje na pixel przezroczysty). Kazdy tile (zarowno czesc sprite czy cell z character map) moze
uzywac dowolnej (jednej z 64) palety kolorow. Dodatkowo istnieje mozliwosc uzycia w jednym tile 256 kolorow.
Ustawiajac odpowiedni bit umozliwamy sumowanie kolorow aktualnego tile i koloru tla (otrzymujac wartosc 4+4 = 8 bit).
Grafika tworzona przez uklad Seta bazuje na osmiu tilemapach i sporej liczbie sprajtow.
Parametry map ustawiane sa poprzez rejestry $00-$40 ukladu (kazda wykorzystuje 8). Ich znaczenie zostalo dokladniej opisane w sekcji o rejestrach.
Tilemapy zapisane sa w SPRITE RAM - kolumna (o wysokosci 32 cells - prawdopodobnie istnieje mozliowsc ustawienia rozmiaru)
po kolumnie. Kazdy element mapy (tzw cell) zajmuje cztery bajty. Dwa pierwsze zawieraja
numer tile, nastepny numer palety, a czwarty - ostatni okresla dodatkowe parametry ( flipx/flipy odpowiednio w bitach 6 i 7).
Glowny nacisk polozono jednak na sprajty. Poczatkowe adresy SPRITE RAM zajmuje lista sprajtow. Okresla ona polozenie i adresy
grup sprajtow (list sprajtow).
Oprocz glownej listy sprajtow (zakonczonej elementem z ustawionym znacznikiem konca) mamy
podlisty, opisujace szczegolowo kazdego sprajta - relatywne polozenie, jego rozmiar w pionie i poziomie (jest potega liczby 2),
numery uzywanych tiles, palete kolorow oraz kilka dodatkowych parametrow (odbicia , laczenie z poprzednia grafika itp).
Rzeczywista wspolrzedna tile na ekranie jest suma
przesuniecia tile w sprajcie, wspolrzednych lokalnych sprajta, wspolrzednych globalnych (ustawionych w liscie glownej) i przesuniecia
wynikajacego z uzycia konkretnych rejestrow scroll.
DZWIEK
ST-0016 umozliwia odtwarzanie probek dzwiekowych (umieszczonch w CHARACTER RAM) w 8 odrebnych kanalach.
Pod adresami $C900 - $C9FF znajduja sie rejestry dzwiekowe - 32 bajty przeznaczono na kazdy z 8 kanalow.
Ich znaczenie wyjasnia ponizszy rysunek:
Na wyjsciu ukladu otrzymujemy dwukanalowy(stereo) strumien danych, przetwarzany nastpenie na postac analogowa przez
zewnetrzny konwerter D/A (zwykle jest to NEC uPD6376 ).
M.A.C.S.
Multi Amenity Cassette System.
Jak nazwa wskazuje - jest to system bazujacy na cartach z grami. Sklada sie z plyty - matki
zawierajacej bios i uklad ST-0016 (z usunietymi oznaczeniami) oraz cartow z grami, podpinanych
do dwu zlacz plyty. Bardzo nietypowo tworcy sprzetu podeszli do ROM-ow z danymi.
Zarowno na plycie (BIOS) jak i cartach (ROMy) dane zostaly podzielone na dwie czesci:
jedna zawierajaca parzyste bajty i druga - nieparzyste. Jest to czesto spotykane rozwiazanie
w szesnastobitowych systemach bazujacych glownie na procesorach motoroli z rodziny 68k.
W przypadku M.A.C.S. nie ma to wiekszego sensu i przypuszczalnie (podobnie jak i usuniecie
oznaczen z ST-0016) sluzylo "zmyleniu przeciwnika" (konkurencji/piratow).
Jak wspomniano na wstepie, M.A.C.S. jest systemem bazujacym na ST-0016. Prawdopodobnie
zostal stworzony przez Seta (kilka rozwiazan jest charakterystycznych dla hardware tej firmy,
m.in uklad GAL w poblizu zlacza cartow) jednak jest firmowany przez "I'Max" (wczesniejszy
(1995-1996) MACS) lub "Yubis/T.System" (pozniejszy (1999) MACS 2).
W budowie plyty (nie w ukladzie Seta) wprowadzono jednak - w porownaniu do rozwiazan uzytych w Renju czy Nerrate - kilka
znaczacych zmian rozszerzajacych mozliwosci sprzetu.
Niestety, w chwili obecnej wiecej jest niewiadomych niz pewnikow, co uniemozliwia poprawna
emulacje M.A.C.S. Kolejna przeszkoda jest egoztyka gier (mahjong, hanafuda) blokujaca
dokladne przetestowanie ukladu.
Najistotniejsze modyfikacje to:
- wejscia/wyjscia przygotowane pod gry typu mahjong/hanafuda,
- wspolpraca z hopperami, ticket dispenserami i innymi urzadzeniami tego typu,
- BIOS + dwa zlacza cartow (kazdy cart zawiera wlasna pamiec ROM i NVRAM),
- znacznie wiecej pamieci RAM (podwojony (conajmniej) WORK RAM),
W dowolnej chwili mozliwy jest dostep do kazdego z obszarow pamieci (co najmniej jedna gra
korzysta z dwu cartow).
Podsystem graficzny (czyli de facto ST-0016) rozni sie takze minimalnie od wersji podstawowej.
Znaczna czesc elementow graficznych (tilemapy, sprajty) jest odwrocona w pionie (wkorzystano
tutaj prawdopodobnie nieemulowane (jak do tej pory) cechy ukladu seta (tzw screen flip) -
podobnie zachowuje sie gra Mayjinsen.
Mam nadzieje ze uda sie odslonic nieco tajemnic M.A.C.S. po autopsji plyty i carta, ktora mam
nadziej przeprowadzic gdy tylko oba elementy trafia w moje rece.
W chwili obecnej znamy 5 gier dzialajacych pod tym systemem - wiecej informacji mozna znalezc
w odpowiednim dziale wyzej.