Skip to main content

device_test/
device_test.rs

1use uxn_tal::{Assembler, AssemblerError};
2
3fn main() -> Result<(), AssemblerError> {
4    // Create a ROM that exactly matches working UXN console programs
5    // Based on the uxnemu.c code, console device is at 0x10-0x1f
6    // Port 0x18 (0x10 + 0x08) is for console output
7
8    let _proper_console = r#"
9        |0100
10        
11        ( Console test - exactly like working UXN programs )
12        
13        ( Try console device 0x10 + offset )
14        #41 .Console/write DEO  ( This might not work due to syntax )
15        BRK
16    "#;
17
18    // Since our assembler doesn't support device name syntax yet,
19    // let's use the raw device numbers from uxnemu.c
20    let _device_test = r#"
21        |0100
22        
23        ( Test console output using device 0x10 base )
24        #48 #08 #10 ADD DEO  ( 'H' to device 0x18 )
25        #69 #08 #10 ADD DEO  ( 'i' to device 0x18 )
26        #0a #08 #10 ADD DEO  ( newline to device 0x18 )
27        BRK
28    "#;
29
30    // Even simpler - direct device addressing
31    let direct_test = r#"
32        |0100
33        #48 #18 DEO  ( 'H' directly to device 0x18 )
34        #0a #18 DEO  ( newline )
35        BRK
36    "#;
37
38    let mut assembler = Assembler::new();
39    let rom = assembler.assemble(direct_test, None)?;
40    std::fs::write("direct_test.rom", &rom)?;
41
42    println!("Created direct_test.rom - simplest possible console output");
43
44    // Let's also try outputting to device 0x19 (console error)
45    let stderr_test = r#"
46        |0100
47        #45 #19 DEO  ( 'E' to stderr )
48        BRK
49    "#;
50
51    let mut assembler2 = Assembler::new();
52    let rom2 = assembler2.assemble(stderr_test, None)?;
53    std::fs::write("stderr_test.rom", &rom2)?;
54
55    println!("Created stderr_test.rom - tries stderr output");
56
57    Ok(())
58}