@@ -115,9 +115,8 @@ pub fn dump_system_state(cpu: *Cpu) void {
115
115
std .debug .print ("\n SRAM DUMP (0x{X:0>4}-0x{X:0>4}, {d} bytes):\n " , .{ sram_base , sram_end , cpu .sram .size });
116
116
117
117
const row_width = 16 ;
118
- var prev_row : [row_width ]u8 = undefined ;
118
+ var prev_row : ? [row_width ]u8 = null ;
119
119
var prev_len : usize = 0 ;
120
- var have_prev = false ;
121
120
var elided = false ;
122
121
123
122
var i : usize = 0 ;
@@ -130,9 +129,18 @@ pub fn dump_system_state(cpu: *Cpu) void {
130
129
cur_row [j ] = cpu .sram .read (sram_base + @as (u24 , @intCast (i + j )));
131
130
}
132
131
133
- // 'Don't show repeated lines to minimize the size of the dump
134
- const same_as_prev = have_prev and prev_len == row_len and std .mem .eql (u8 , prev_row [0.. prev_len ], cur_row [0.. row_len ]);
135
- if (same_as_prev ) {
132
+ // Only elide repeated lines of all zeroes
133
+ const is_all_zeros = blk : {
134
+ for (cur_row [0.. row_len ]) | byte | {
135
+ if (byte != 0 ) break :blk false ;
136
+ }
137
+ break :blk true ;
138
+ };
139
+ const same_as_prev = if (prev_row ) | prev |
140
+ prev_len == row_len and std .mem .eql (u8 , prev [0.. prev_len ], cur_row [0.. row_len ])
141
+ else
142
+ false ;
143
+ if (same_as_prev and is_all_zeros ) {
136
144
elided = true ;
137
145
} else {
138
146
if (elided ) {
@@ -169,9 +177,11 @@ pub fn dump_system_state(cpu: *Cpu) void {
169
177
std .debug .print ("|\n " , .{});
170
178
171
179
// store as previous row
172
- @memcpy (prev_row [0.. row_len ], cur_row [0.. row_len ]);
180
+ if (prev_row == null ) {
181
+ prev_row = [_ ]u8 {0 } ** row_width ;
182
+ }
183
+ @memcpy (prev_row .? [0.. row_len ], cur_row [0.. row_len ]);
173
184
prev_len = row_len ;
174
- have_prev = true ;
175
185
}
176
186
}
177
187
if (elided )
0 commit comments