@@ -8,14 +8,12 @@ use binrw::{BinRead, BinWrite};
88use clap:: Parser ;
99use indicatif:: ProgressIterator ;
1010use itertools:: Itertools ;
11- use mindustry_rs:: logic:: vm:: {
12- Building , LogicVM , MEMORY_BANK , MEMORY_CELL , MESSAGE , MICRO_PROCESSOR , Processor , SWITCH ,
13- WORLD_PROCESSOR , decode_utf16,
14- } ;
15- use mindustry_rs:: types:: { Object , ProcessorConfig } ;
1611use mindustry_rs:: {
17- logic:: vm:: { BuildingData , LogicVMBuilder } ,
18- types:: { Point2 , Schematic } ,
12+ logic:: vm:: {
13+ Building , BuildingData , LValue , LogicVM , LogicVMBuilder , MEMORY_BANK , MEMORY_CELL , MESSAGE ,
14+ MICRO_PROCESSOR , Processor , SWITCH , WORLD_PROCESSOR , decode_utf16,
15+ } ,
16+ types:: { Object , Point2 , ProcessorConfig , Schematic } ,
1917} ;
2018use prompted:: input;
2119use serde:: Deserialize ;
@@ -63,6 +61,8 @@ struct Metadata {
6361 rom_processors : usize ,
6462 ram_processors : usize ,
6563 icache_processors : usize ,
64+
65+ mtime_frequency : usize ,
6666}
6767
6868#[ derive( Debug , Clone , Copy , Deserialize ) ]
@@ -97,9 +97,13 @@ fn get_building<'a>(vm: &'a LogicVM, position: MetaPoint2, name: &str) -> &'a Bu
9797 building
9898}
9999
100- fn print_var ( processor : & Processor , name : & str ) {
100+ fn print_var ( processor : & Processor , name : & str , radix : Option < & & str > ) {
101101 match processor. variable ( name) {
102- Some ( value) => println ! ( "{name} = {value:?}" ) ,
102+ Some ( value) => match radix {
103+ Some ( & "x" ) => println ! ( "{name} = {:#010x}" , value. num( ) as u32 ) ,
104+ Some ( & "b" ) => println ! ( "{name} = {:#034b}" , value. num( ) as u32 ) ,
105+ _ => println ! ( "{name} = {value:?}" ) ,
106+ } ,
103107 None => println ! ( "{name} = <undefined>" ) ,
104108 }
105109}
@@ -229,7 +233,7 @@ fn main() -> Result<(), Box<dyn Error>> {
229233 if let BuildingData :: Switch ( paused) = & mut * pause_switch. data . borrow_mut ( )
230234 && * paused
231235 && let BuildingData :: Switch ( single_step) = & mut * single_step_switch. data . borrow_mut ( )
232- && let BuildingData :: Processor ( ctrl) = & * controller. data . borrow ( )
236+ && let BuildingData :: Processor ( ctrl) = & mut * controller. data . borrow_mut ( )
233237 && let BuildingData :: Processor ( config) = & mut * config. data . borrow_mut ( )
234238 && let BuildingData :: Memory ( mem) = & * registers. data . borrow ( )
235239 {
@@ -256,17 +260,26 @@ fn main() -> Result<(), Box<dyn Error>> {
256260 * single_step = false ;
257261 break ;
258262 }
259- "b" | "break" if cmd. len ( ) >= 2 => {
260- match u64:: from_str_radix ( cmd[ 1 ] . trim_start_matches ( "0x" ) , 16 ) {
263+ "rs" | "restart" => {
264+ ctrl. set_variable ( "pc" , 0 . into ( ) ) ?;
265+ break ;
266+ }
267+ "b" | "break" if cmd. len ( ) >= 2 => match cmd[ 1 ] {
268+ "clear" => {
269+ config. set_variable ( "BREAKPOINT_ADDRESS" , LValue :: Null ) ?;
270+ println ! ( "Breakpoint cleared." ) ;
271+ }
272+ pc => match u64:: from_str_radix ( pc. trim_start_matches ( "0x" ) , 16 ) {
261273 Ok ( pc) => {
262- config. variables [ "BREAKPOINT_ADDRESS" ]
263- . set ( & mut config. state , pc. into ( ) ) ;
274+ config. set_variable ( "BREAKPOINT_ADDRESS" , pc. into ( ) ) ?;
264275 println ! ( "Breakpoint set: {pc:#010x}" )
265276 }
266277 Err ( _) => println ! ( "Invalid address." ) ,
267- }
278+ } ,
279+ } ,
280+ "p" | "print" | "v" | "var" if cmd. len ( ) >= 2 => {
281+ print_var ( ctrl, cmd[ 1 ] , cmd. get ( 2 ) )
268282 }
269- "p" | "print" | "v" | "var" if cmd. len ( ) >= 2 => print_var ( ctrl, cmd[ 1 ] ) ,
270283 "i" | "inspect" if cmd. len ( ) >= 3 => {
271284 let Ok ( x) = cmd[ 1 ] . parse ( ) else {
272285 println ! ( "Invalid x." ) ;
@@ -282,10 +295,10 @@ fn main() -> Result<(), Box<dyn Error>> {
282295 BuildingData :: Processor ( p) => match cmd. get ( 3 ) {
283296 Some ( & "*" ) => {
284297 for name in p. variables . keys ( ) . sorted ( ) {
285- print_var ( p, name) ;
298+ print_var ( p, name, cmd . get ( 4 ) ) ;
286299 }
287300 }
288- Some ( addr) => print_var ( p, addr) ,
301+ Some ( addr) => print_var ( p, addr, cmd . get ( 4 ) ) ,
289302 None => println ! ( "{}" , b. block. name) ,
290303 } ,
291304 BuildingData :: Memory ( mem) => {
0 commit comments