cb2001: piccolo progresso
un ringraziamento a haze che ha migliorato la parte grafica
adp driver
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
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)
Cherry Bonus 2001 (cb2001) e Cherry Master (ver 4, set 1) (cmv4)
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
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