Skip to main content

debug_devices/
debug_devices.rs

1use uxn_tal::{Assembler, AssemblerError};
2
3fn main() -> Result<(), AssemblerError> {
4    // Try to create a ROM that will definitely produce some kind of output
5    // if UXN is working at all
6
7    // Test all possible console-related devices
8    let all_devices_test = r#"
9        |0100
10        
11        ( Try writing 'A' to various device ports )
12        #41 #10 DEO  ( device 0x10 )
13        #42 #11 DEO  ( device 0x11 )
14        #43 #12 DEO  ( device 0x12 )
15        #44 #18 DEO  ( device 0x18 )
16        #45 #19 DEO  ( device 0x19 )
17        
18        ( Force system halt with different pattern )
19        #ff #00 DEO  ( try to write to system device )
20        
21        BRK
22    "#;
23
24    let mut assembler = Assembler::new();
25    let rom = assembler.assemble(all_devices_test, Default::default())?;
26    std::fs::write("all_devices_test.rom", &rom)?;
27
28    println!("Created all_devices_test.rom");
29    println!("This tries multiple device ports: 0x10, 0x11, 0x12, 0x18, 0x19");
30
31    // Also create a version that exits immediately to test basic execution
32    let immediate_exit = r#"
33        |0100
34        BRK
35    "#;
36
37    let mut assembler2 = Assembler::new();
38    let rom2 = assembler2.assemble(immediate_exit, Default::default())?;
39    std::fs::write("immediate_exit.rom", &rom2)?;
40
41    println!("Created immediate_exit.rom - should exit immediately");
42
43    // Create a test that tries to crash/error to see if we get any response
44    let error_test = r#"
45        |0100
46        #ff DEO  ( try invalid instruction - missing device )
47        BRK
48    "#;
49
50    let mut assembler3 = Assembler::new();
51    let rom3 = assembler3.assemble(error_test, Default::default())?;
52    std::fs::write("error_test.rom", &rom3)?;
53
54    println!("Created error_test.rom - should cause an error");
55
56    Ok(())
57}