zalozenia/cechy sa takie:
- emulacja 6502,
- co zdefiniowany czas wolane jest przerwanie nmi (emulacja vblanka) - chodzi o to, by rozwiazac problem synchronizowania sie z ramka,
- cala pamiec - 64 kilo (wiecej mnie nie interesuje (narazie)),
- natchmiastowy koniec sledzenia przy probie wykonania/czytania nieinicjowanej pamieci.
do zrobienia zostalo:
- 'wygladzic' interface,
- pulapki,
- nmi,
czyli jak widac jest tego jeszcze troche.
przyklad sesji z amelia wyglada tak:
amelia 1.0 welcomes you.
amelia> help
Available commands:
begin <address> - set begin address and initialize trace,
dis <address> - disassemble memory,
end <address> - set end address,
exec <command> - execute external command,
exit - quit from program,
help - this message,
labels <file> - load labels file,
load <file> - load binary file to analyze,
mem <address> - display memory,
quit - quit from program,
settings - display profiler settings and status,
stepping [yes|no] - set stepping mode,
trace - trace from 'begin' address to 'end' address,
version - display program name and version.
NOTE: all values are hexadecimal values in proper range 8/16 bits (depends of context).
amelia> load main.obj
Loading block: 7800-97c7
Loading block: 02e2-02e3
Loading block: 2000-2e85
Loading block: 3000-3f24
Loading block: 4000-54d8
Loading block: 5800-619f
Loading block: 6800-71e0
Loading block: a000-a730
Loading block: 02e0-02e1
amelia> labels labels.out
Loaded 510 label(s).
amelia> m 2e0
02e0: bc 2b ca 78 -- -- -- -- -- -- -- -- -- -- -- -- | .+.x............
02f0: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0300: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0310: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0320: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0330: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0340: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0350: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0360: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0370: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0380: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
0390: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
03a0: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
03b0: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
03c0: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
03d0: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ................
amelia> begin 2bbc
amelia> trace
A:00 X:00 Y:00 F:-------- SP:ff PC:2bbc; 0000000 - 2bbc 20 00 68 jsr SYSTEM.INIT MAIN
amelia>
A:00 X:00 Y:00 F:-------- SP:fd PC:6800; 0000006 - 6800 a9 01 lda #$01 SYSTEM.INIT
amelia>
A:01 X:00 Y:00 F:-------- SP:fd PC:6802; 0000008 - 6802 85 f0 sta SYSTEM.TEMP
amelia>
A:01 X:00 Y:00 F:-------- SP:fd PC:6804; 0000011 - 6804 a9 00 lda #$00
amelia>
A:00 X:00 Y:00 F:------Z- SP:fd PC:6806; 0000013 - 6806 85 f1 sta SYSTEM.SONG_POSITION
amelia>
A:00 X:00 Y:00 F:------Z- SP:fd PC:6808; 0000016 - 6808 85 f9 sta SYSTEM.SCENARIO_INDEX
amelia>
A:00 X:00 Y:00 F:------Z- SP:fd PC:680a; 0000019 - 680a 85 fa sta SYSTEM.FRAME_COUNTER
amelia>
A:00 X:00 Y:00 F:------Z- SP:fd PC:680c; 0000022 - 680c 85 fb sta SYSTEM.DL
amelia>
A:00 X:00 Y:00 F:------Z- SP:fd PC:680e; 0000025 - 680e 85 fc sta $fc
amelia>
A:00 X:00 Y:00 F:------Z- SP:fd PC:6810; 0000028 - 6810 85 f7 sta SYSTEM.CLIENT_HANDLER
amelia>
po komendzie 'm 2e0' widac wlasnie, jak wyglada pamiec nieinicjowana przez program (te '--'). odczyt badz wykonanie takiej pamieci przerywa trace'owanie niezaleznie od innych warunkow.
jeszcze tego nie publikuje, poniewaz projekt nie jest zbyt wygodny w uzyciu (przynajmniej ja tej wygody nie zauwazam jeszcze). jak bedzie to jakos hulac, to pewnie wypuszcze...