签到天数: 1714 天 [LV.Master]伴坛终老
|
发表于 2014-1-24 16:59:47
|
显示全部楼层
回3楼:其他条件断点1 i l. u! @7 z9 l
Conditional Breakpoints
5 |7 q3 ^! K% ^* e
: \: l3 j( Q# ]Breakpoints may also have a conditional statement that causes them to execute only if that statement evaluates to true. The conditional breakpoint grammar has this form: e. M1 V( K6 E5 d; f
( i) x: e7 g0 W: Z" jConnect -> Compare { ('||' | '&&') Compare }
# S+ f9 r' x5 r1 GCompare -> Sum { ('==' | '!=' | '<=' | '>=' | '<' | '>') Sum }
8 t+ P. J9 A- j) S+ m, MSum -> Product { ('+' | '-') Product }
/ p4 w$ Q7 @! b' c/ eProduct -> Primitive { ('*' | '/') Primitive }
5 i( t9 ~1 ]8 X5 IPrimitive -> Number | Address | Register | Flag | PC Bank | Data Bank | '(' Connect ')'
. i. w( ^$ q9 X* B3 S7 R1 @, L& j$ {Number -> '#' [0123456789ABCDEF]* - E" e% q2 P2 t* `& s% L7 K( r
Address -> '$' [0123456789ABCDEF]* | '$' '[' Connect ']' ( ]0 K" K( n7 h" w& e& [
Register -> 'A' | 'X' | 'Y' | 'P'
: D4 ^* C3 j/ G, B, o, sFlag -> 'N' | 'C' | 'Z' | 'I' | 'B' | 'V'
% J0 N( ^ c, j$ a( UPC Bank -> 'K'
} W% B6 w6 }6 \; I! nData Bank -> 'T'
* }% ~: w5 N5 F# H8 \% Z' F! g- g" ^2 ]
The parser is very strict. All numbers are hexadecimal. Always prefix a number with # for an immediate value, or $ for a memory address. If a memory address needs to be calculated use $[] with the calculation inside the brackets.
; z1 V4 A; J3 Z1 P* [5 E V
$ B8 \/ _7 d" j; _! R7 y7 nRegisters A/X/Y are 8-bit unsigned values. Register P is the 16-bit program counter.
2 ^2 L) _# n4 @- W& c* Q. z: y; D/ F/ F/ e
Flags evaluate to 1 if set, 0 if clear.4 b# V5 a4 r4 w" S9 K
- ^. ]8 v% [8 K& ^( J4 tConnecting operators || or && combine boolean terms. Parentheses dictate order of operations.& c, S: y- o" z# o9 B! b, P( I
4 D3 z' D6 o @4 S% N
Example conditions:0 e8 R( p/ X( x5 A
' B$ R9 i; r4 N. f7 o. {
Break only if register A is less than value at memory address $0005:
1 u$ W# ^7 {, Z$ S+ u" W( }5 {- @+ k
A < $0005
9 j+ g$ ^& n8 Z( C; k* e" ~5 h! q
Break only if the value at the indirect address is not equal to FF:
`: z5 t' U$ E4 y7 [
% i8 j$ @ I# q' i#FF != $[$10+($11*#100)]4 ^; W7 P/ T& K! k4 }0 z- X
7 R4 u' j( o y6 O6 {
Break only if flag N is clear or A is not equal to 00:9 [8 K2 |1 @+ M' c% Y, ?4 \4 L
6 l* n3 K& y2 n0 G(N==#0 || A!=#0)3 T6 }! F& V, a4 F1 k
* w- ]4 c# R0 H* D1 B9 w6 X& d9 S
Break only when accessing a data from bank 2 (the condiition is relevant when using with Read/Write-type breakpoints):# t' L2 |2 P1 O
6 p4 m$ B% B8 }5 }- b- }
T==#2
9 M+ b ?) j1 w! c' f
9 q* b& {9 f# F0 U6 I: l- g7 w以上内容来自fceux自带的帮助文档说明 |
|