-
Notifications
You must be signed in to change notification settings - Fork 0
/
ModNES Cpu6502 status.txt
44 lines (34 loc) · 3.21 KB
/
ModNES Cpu6502 status.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
>> 2015-05-10 Miércoles
Bueno finalmente arreglé unos addressings erróneos, y le agregué addressing mode a los NOP ilegales, para poder skipearlos y seguir ejecutando.
Ahora Cpu6502 pasa exitosamente Nestest! FUCK YEAH!
Con la excepción de los opcodes ilegales más allá del NOP.
Para los NOP ilegales hay una excepción, al no ejecutar el addressing, los NOP Absolute,X si el direccionamiento cruza un límite de página,
obviamente no estoy agregando el ciclo extra, por lo tanto si se trata de ejecutar un NOP ilegal y se da esta puta casualidad, el conteo de
ciclos de CPU va a estar uno abajo de lo correcto, me cago, no creo que sea demasiado serio.
Esto se podría arreglar ejecutando el addresing para estos NOPs pero creo que no vale la pena ni agacharse por tan poco.
Mejoras a futuro:
Llamar primero al addressing y después a la instrucción, ambos según las correspondientes tablas, en vez de hacer el switch
largo y verbose de CpuStep.
El PC se puede incrementar simplemente basado en el addressing y no hacerlo a mano en cada caso.
>> 2015-05-10 Domingo
Hace unos días finalmente empecé a correr nestest. La primera serie de corridas y posteriormente comparando el log de nestest con el de ModNES me permitió
confirmar que el Cpu6502 estaba corriendo casi perfectamente.
Descubrí algunos bugs seteando el flag de carry, pero salvo eso, todo lo demás parecía estar correctamente implementado.
Luego emulando a la perfección el formato de log de nestest con conteo de ciclos de PPU y con direcciones de addressing, encontré un bug que todavía tengo
que esclarecer.
Después de correr 3300 instrucciones a la perfección, falla `STA ($33),Y` y no escribe en memoria el valor que debería, seguramente el indirect indexed Y tiene
un bug que ya arreglaré.
También debería agregar los addressing modes de los NOP ilegales, más que nada para saber cuántos bytes ocupan esas instrucciones y poder incrementar el pc
en consecuencia, ignorando los efectos colaterales que el estéril addressing de los NOP pudiera causar.
Implementar los NOP ilegales me permite llegar un poco más allá dentro del log de nestest para verificar un poco más la correctitud del Cpu6502
>> 2015-04-23
Hoy corriendo ModNES con Mario Bros. me di cuenta que no había implementado ASL,LSR,ROR,ROL con addressing "Accumulator".
Habría que agregarlos a los tests que corresponda.
Hace varios meses que tenía a ModNES abandonado pensando que Mario Bros. había querido ejecutar una opcode ilegal, lo que suponía uno de dos posibles problemas;
1) Que efectivamente Mario Bros. usara opcodes ilegales, con lo cual probablemente otros juegos Mapper 0 también lo hicieran, y tendría que implementar
opcodes ilegales antes de poder correr las primeras pruebas.
2) Que la ejecución se hubiera desfasado de alguna manera y se estuvieran interpretando operandos como opcodes y viceversa, lo cual implicaba volver a testear
minuciosamente Cpu6502 para encontrar el error.
Por suerte $0A no era una opcode ilegal sino que era ASL A que no estaba implementada.
Diantres! Seguí la ejecución y ahora sí, quiso ejecutar la instrucción $04 que es ilegal. :(
Sin embargo llega a esa instrucción después de un JMP ($0014), así que puede ser que la indirección sea incorrecta.