Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Razvoj software-a za arkadne aparate iz osamdesetih?

2 views
Skip to first unread message

Chupo

unread,
Jun 26, 2017, 6:01:01 PM6/26/17
to
Vec dugo vremena razmisljam o tome da napravim igru koja ce raditi na
originalnom hardware-u iz osamdesetih (pa tako i u MAME-u, FB Alpha i
drugim emulatorima arkadnih aparata).

Za sad sam odabrao dva aparata za koja bi mogo napraviti programe,
Donkey Kong i Pac-Man/Ms. Pac-Man, ali ne znam kako rijesiti dvije
grupe problema pa trazim ako tko ima kakve informacije.

#1
Recimo da sam skompajlirao kod za target hardware, prvi problem je kako
zaobici provjeru hash-a i checksum-a ROM-ova koja je ugradjena u sve
emulatore arkadnih aparata za koje znam? Jer u sve te emulatore su
hardkodirani checksum-ovi ROM setova koji na odredjenoj verziji
emulatora rade i vremenski bi bilo nemoguce za svaku promjenu koju
napravim u kodu rekomplajlirati emulator s update-anim checksum-om i
hash-om za ROM kojega hocu pokrenuti.

#2
S obzirom da mi vise lezi programiranje u Z80 nego u 6502 sam trazio
disassemblirane listinge ROM-ova od arkadnih aparata koji kao glavni
processor koriste Z80 i naso sam potpuno komentirane listinge od igri
Donkey Kong, Pac-Man i Ms. Pac-Man (zadnje dvije igre rade na istom
hardware-u). Iz tih se listinga relativno lako moze odgonetnuti kako
komunicirati s ostatkom hardware-a pa to znaci da bi s z88dk ili nekim
drugim crosscompiler-om mogo napraviti kod ali jos nisam pronasao kako
od skompajliranog koda kreirati ROM file-ove. Ti bi se podaci mogli
otkriti analiziranjem source-a od emulatora ali pretpostavljam da
negdje postoji i dokumentacija a mozda cak i alat za konverziju raw
izvrsnog koda iz .hex-a u odgovarajuce ROM file-ove.

Isto me tako zanimaju i disassemblirani source-ovi od bilo kojeg drugog
arkadnog aparata, bez obzira na glavni processor, a najvise me zanima
kod od aparata za Scramble. Mogo bi bilo koje ROM file-ove otvoriti s
disassemblerom ali bi odgonetavanje hardware-skih portova i memorijskih
mapa analiziranjem koda trajalo mjesecima - ako ne cak i godinama.

Ovo je primjer source-a od Donkey Kong-a gdje je skoro sve vazno za
pisanje programa od nule dokumentirano s komentarima:

http://wiki.donkeykonggenius.com/Donkey_Kong_Code

Stvari koje nisu 100% jasne iz disassembliranog koda od igre se mogu
odgonetnuti iz source-a od emuatora. Problem je znaci jedino kako od
izvrsnog Z80 koda kreirati ROM file-ove i kako u emulatorima zaobici
provjeru da li je ROM set kojega treba pokrenuti jedan od ROM-ova koje
taj emulator (MAME ili FB Alpha) dozvoljava pokrenuti.

Ako ne uspijem pronaci nacin kako pokrenuti ROM ciji hash nije u bazi
onda cu morati iz emulatora maknuti dio koda koji to provjerava a to ce
mi vjerojatno oduzeti dosta vremena.
--
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo

Chupo

unread,
Jun 26, 2017, 6:30:02 PM6/26/17
to
Prvi dio je rijesen - ako se u FB Alpha za ROM set koristi ime od
postojeceg klona neke igre onda se samo ispise upozorenje da se
checksum ne podudara ali se emulacija ipak pokrene.

Ostaje jos rijesiti kako nakon kompajliranja kreirati ROM file-ove.

Bruno Babic

unread,
Jun 27, 2017, 3:30:02 AM6/27/17
to
On 27.6.2017. 0:02, Chupo wrote:
> Ostaje jos rijesiti kako nakon kompajliranja kreirati ROM file-ove.

Mozda grijesim, ali ROM fileovi su samo dump memorije. Mozda nije dump
cijele memorije nego ima negdje oznaku pocetka (i kraja), ali skoro pa
da sam 100% siguran da je to klasican dump memorije.

Za vise detalja skini MAME source i pogledaj dio koji ucitava ROMove.

BTW, super ti je ideja... samo je pitanje gdje se moze naci nekakva
dokumentacija za developere.

--
bbabic(a)globalnet.hr
2b||!2b?

Chupo

unread,
Jun 27, 2017, 8:01:02 AM6/27/17
to
In article <oit0io$bda$1...@ls237.t-com.hr>, Bruno Babic <a@b.c> says...
> Mozda grijesim, ali ROM fileovi su samo dump memorije. Mozda nije dump
> cijele memorije nego ima negdje oznaku pocetka (i kraja), ali skoro pa
> da sam 100% siguran da je to klasican dump memorije.
>
> Za vise detalja skini MAME source i pogledaj dio koji ucitava ROMove.
>
> BTW, super ti je ideja... samo je pitanje gdje se moze naci nekakva
> dokumentacija za developere.


Upravo sam zato i stavio ovaj post - jer sam se nadao da netko ima
linkove na takvu dokumentaciju.

U medjuvremenu sam naso dokumentaciju (koju sam do sad vec u velikom
dijelu i procitao) koja ce mi bez sumnje omoguciti da probam nesta
napraviti za Pac-man hardware:

http://umlautllama.com/projects/pacdocs/

Ta je dokumentacija nastala analiziranjem MAME source-va i cini se da
ima dovoljno podataka da se igra napravi od nule. Jos bi bolje bilo
kada bi postojala dokumentacija na osnovu koje je radjen MAME source
ali mislim da to ne postoji.

Idealno bi bilo da takvu dokumentaciju nadjem za Scramble hardware jer
se na Pac-Man hardware-u jako tesko moze realizirati scroll pa su zato
sve igra bazirane na tom hardware-u imale fixne ekrane.

Ovdje sam naso VHDL kod za Scramble hardware koji omogucava kloniranje
maticne ploce s FPGA array-om ali bilo bi prekomplicirano dokumentaciju
raditi na osnovu tovoga koda:

http://www.gadgetfactory.net/papilio-arcade-wiki/

Netko tko je napravio taj kod sigurno ima kompletnu dokumentaciju o
Scramble hardware-u ali to ne mogu pronaci :-/

Cini se i da cu analiziranjem source-ova ovih alata za generiranje ROM
file-ova doci do svih podataka koji mi trebaju za napraviti toolchain
koji ce omoguciti brze compile - try cikluse:

https://code.google.com/archive/p/bleu-romtools/

U medjuvremenu su mi i developeri FB Aplha emulatora (koji se bazira na
MAME-u) javili kako se moze iskljuciti CRC provjera ROM-ova:

http://neosource.1emulation.com/forums/index.php?topic=3093.0

Dok sam trazio dokumentaciju sam naletio na odlican blog o skidanju
zastite na Capcom hardware-u koji koristi modificirani Z80 kojemu su
unutar cipa dodani sklopovi za dekripciju:

http://arcadehacker.blogspot.hr/2014/

Stvarno odlican blog, vrijedi ga procitati od prvog do zadnjeg slova i
pogledati 2 popratna videa. Nazalost, cini se da autor ne odgovara na
komentare ispod postova niti na komenatre ispod YT videa. Tu je i
primjer 'Hello World-a' za taj Capcom hardware. Ispod posta broj 2 sam
mu u komentaru postavio par pitanja ali su komentari moderirani tako da
se jos ne moze vidjeti sta sam napisao.

Inace sam nekad, prije oko 10 godina, analizirao disassemblirani kod od
Pac-Man-a i sjecam se video RAM layout-a koji je sve samo ne logican:

http://umlautllama.com/projects/pacdocs/z80dev/doc/Hardware.txt

Pa ipak, s obzirom da postoje specijalizirani cipovi za iscrtavanje
background tile-ova i sprite-ova, takva ogranizacija video memorije
nije problem (sta se tice brzine) jer za izracunavanje parametara i
upisivanje u memorijski mapiranje registre treba puno manje instrukcija
nego npr. za 'rucno' iscrtavanje 'sprite'-ova na Spectrumu, pogotovo
ako se umjesto XOR-a s background-om koriste prave maske.

Jos cu neko vrijeme traziti dokumentaciju od Scramble hardware-a a ako
ne nadjem cu probati napraviti nesta za Pac-Man HW.

Chupo

unread,
Jun 30, 2017, 1:30:02 PM6/30/17
to
In article <oit0io$bda$1...@ls237.t-com.hr>, Bruno Babic <a@b.c> says...
> BTW, super ti je ideja... samo je pitanje gdje se moze naci nekakva
> dokumentacija za developere.


Slozio sam si toolchain s SjASMPlus koji mi omogucava da trenutno
kreiram pacman.6e ROM file (prva 4 KB ROM-a) i uspio sam napraviti
fuunkciju print - kao proof of concept da mogu kreirati software koji
radi na originalnom (Midway) Pac-Man hardware-u.

Evo source-a, ovaj put su komentari na engleskom :-))

; Short test for Pac-Man hardware
; no interrupt routine yet
; creates pacman.6e ROM file
; Usage:
; sjasmplus.exe pacman_src.zx
; drag'n'drop pacman.6e onto pacman.zip
; by Chupo_cro VI 2017.

OUTPUT pacman.6e

wdg equ #50c0 ; watchdog timer
irqen equ #5000 ; interrupt request enable
ram equ #4c00 ; RAM start
ramtop equ #4fff ; RAM end
vram equ #4000 ; video RAM
colram equ #4400 ; color RAM

org #0000

pocetak di
xor a
ld (irqen),a ; disable external interrupt
ld sp, ramtop ; stack pointer to the end of the RAM

ld hl, irqen ; reset 74ls259
ld b,#08
xor a
loop1 ld (hl),a
inc l
djnz loop1

; end of initialization
call print
jr loop

; comment 'call print' and 'jr loop' lines to
; see all the tiles dumped into the video RAM
ld hl,vram ; fill video RAM
ld b,#04
loop3 ld (wdg),a
xor a
loop2 ld (hl),a
inc a
and #0f
inc l
jr nz,loop2
inc h
djnz loop3

ld b,#04 ; fill color RAM
loop5 ld (wdg),a
ld a,#01 ; pallete #01
loop4 ld (hl),a
;inc a
inc l
jr nz,loop4
inc h
djnz loop5

loop call wdg_res
jr loop ; end

wdg_res xor a ; reset watchdog timer
ld (wdg),a
ret

; ***************
; * subroutines *
; ***************

; print
print ld hl,vram + #03a0 ; upper-left corner
ld de,msg ; pointer to text
msgloop ld a,(de) ; read byte
cp #ff
ret z ; ret if end
ld (hl),a ; write byte to video RAM
ld bc,#0400 ; offset to color RAM
push hl
add hl,bc ; calculate address
ld (hl),#01 ; set the collor
pop hl
;inc l ; vertical move
;ld a,#20 ; horizontal move (hl -= #20)
;ld c,a
;ld b,#00
;sub hl,bc
ld a,l ; better hl -= #20
sub #20
ld l,a
jr nc,skip1
dec h
skip1 inc de
call wdg_res
jr msgloop
; end print

msg byte "CHUPO@WAS@HERE"
defb #ff


; **************************************************

FPOS #0fff ; ROM has 4096 bytes
org #0fff
byte #c9 ; last byte is RET (can be any byte)
kraj

display " "
display "ERRORS : ", /d, _ERRORS
display "WARNINGS : ", /d, _WARNINGS
display "PROGRAM LENGTH: ", /a, kraj - pocetak, " bytes"
display " "
0 new messages