Benvenuti nel MAME-Blog di Robiza

cb2001: piccolo progresso

Scritto il 3 luglio 2010 da Robiza

un ringraziamento a haze che ha migliorato la parte grafica

adp driver

Scritto il 7 febbraio 2010 da Robiza

supponendo che la memory map del hd63484 (grazie a dox e alle sue note nel driver sigmab52) sia: 00000-3ffff = RAM

40000-7ffff = ROM

80000-bffff = unused

c0000-fffff = unused

tramite accesso alla videoram si vedono queste schermate:

cb2001: qualche progresso

Scritto il 3 gennaio 2010 da Robiza

una volta decrittati la maggior parte degli opcode ecco il primo risultato (un grazie a kale per la routine di tracciamento e per il consiglio sugli interrupt)

0000

Cherry Bonus 2001 (cb2001) e Cherry Master (ver 4, set 1) (cmv4)

Scritto il 22 dicembre 2009 da Robiza

Dopo mesi di real life finalmente un po’ di tempo per provare a decrittare cb2001;  verifcando i giochi Dyna da cui il nuovo set poteva derivare ho trovato una forte somiglianza con cmv4; si puo’ dire che il codice di cb2001 è quasi la perfetta traduzione di cmv4, unico particolare: l’utilizzo di una cpu differente, z80 per cmv4 e nec v25/35 criptata per cb2001. Questa forte relazione ovviamente da un grande aiuto nella decrittazione del codice di cb2001.

 prendendo alcune routine di esempio, si puo’ vedere la somiglianza e quindi la traduzione dell’opcode criptato nel corrispondente opcode decrittato (la traduzione dell’opcode è la parentesi in fondo):

2b2d ld a,$01                                                        e32a6 mov al,1h

2b2f or a                                                                  e32a8 and al,al

2b30 add a,(hl)                                                    e32aa add al,b ptr [ix]

2b31 daa                                                                 e32ac daa (13 -> 27)

2b32 ld (hl),a                                                        e32ad mov b ptr [ix],al

2b33 push bc                                                        e32af push cw (ac -> 51)

2b34 ld b,$03                                                      e32b0 mov cw,3h (9c -> b9)

2b36 dec hl                                                           e32b3 inc ix or dec ix?

2b37 ld a,(hl)                                                       e32b4 mov al,b ptr [ix] (e0 -> 8a)

2b38 adc a,$00                                                  e32b6 adc al,0h (1d -> 14)

2b3a daa                                                                e32b8 daa

2b3b ld (hl),a                                                       e32b9 mov b ptr [ix],al

2b3c djnz $2b36                                                e32bb dbnz e32b3h (c5 -> e2)

2b3e pop bc                                                         e32bd pop cw (8a -> 59)

2b3f ret                                                                  e32be ret

 

Looping e mcu

Scritto il 9 agosto 2009 da Robiza

Attualmente looping funziona tramite un hack e in particolare un workaorund per superare la protezione

Nella sostanza il codice si aspetta di trovare alcuni valori determinati ad ogni operazione di read fra 7000 e 7007

La PCB ha al suo interno un cop420 (una sorta di MCU)  e la relativa rom è dumpata; il problema che il punto di partenza sembra spostato e quando parte l’emulazione tale cpu entra in un ciclo infinito

Dando un’occhiata al dasm di tale cpu, dopo qualche ricerca, ho capito che è shiftata di 0xc2 bytes

Spostando il caricamento della rom il codice viene correttamente eseguito

E guarda caso il codice genera una lista di valori che sono esattamente quelli che si aspetta il gioco alle locazioni fra 7000 e 7007

Sfortunatamente uno dei valori generati non rientra in quelli previsti; questo significa che per ora serve comunque un hack