|
Subject: Re: [stella] Stella conditional breakpoint support RFC From: Jeremy Penner <jeremy@xxxxxxxxxxxxxx> Date: Mon, 11 Jul 2005 22:36:57 -0400 |
> 1. Re-parse the conditional(s) before each 6502 instruction
> executes, or..
What are you doing, man! Don't ever parse more than once! Put it
into a data structure!
> 2. Write a compiler for the conditionals (a "bytecode" type of
> compiler,
> not a native one, since Stella is meant to be portable), and a
> bytecode
> interpreter (hopefully one that's faster than the lexer/parser is!),
> and interpret the compiled conditional(s) before each 6502
> instruction.
You really don't need bytecode to evaluate simple expressions; all
you need is an executable parse tree, which is pretty trivial to do
and probably much more efficient.
Stella's C++, right? You could pretty trivially write a virtual
"expression" class, with an overridable "evaluate" method, and
subclass your operations: EqualityExpression, PCExpression, etc.
EqualityExpression's constructor takes two expressions as arguments,
PCExpression's evaluate method grabs the PC from the CPU state, etc.
Build up this tree in yacc, and just call evaluate after every
instruction to figure out whether or not to break. (Make your ANDs
and ORs shortcut; it'll save you from having to do anything else on
those PC==myLabel checks.)
In any case, you should absolutely be building a simple data
structure and interpreting that, rather than re-parsing every time.
> Of course, there's no reason I couldn't do both: arbitrary
> conditions that
> come at the cost of slowing down the emulator (maybe a lot), or
> conditions
> tied to an address that let the emulator run at (99% of) full speed.
Arbitrary conditional breakpoints are really useful in certain
annoying situations. ("Just when does that value get overwritten?!
Argh!") They are also slow; it's a fact and has always been one.
Thankfully, in the case of emulation, timing-sensitive things don't
break when things slow down. When you're tracking down that kind of
problem, emulation speed is probably last thing on your mind. If it
helps you find the bug, who cares if the sound cuts out?
Jeremy
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://stella.biglist.com
| Current Thread |
|---|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] Stella conditional bre, Eric Ball | Thread | Re: [stella] Stella conditional bre, B. Watson |
| Re: [stella] Stella conditional bre, B. Watson | Date | Re: [stella] Stella conditional bre, Eric Ball |
| Month |