diff --git a/dsa/assembler/src/assembler/mod.rs b/dsa/assembler/src/assembler/mod.rs index d2f3262..9f3d8a7 100644 --- a/dsa/assembler/src/assembler/mod.rs +++ b/dsa/assembler/src/assembler/mod.rs @@ -144,6 +144,11 @@ fn assemble(src: &Path) -> Result, AssembleError> { let mut nodes = program.nodes.clone(); + println!("PRE LINK"); + for node in &nodes { + println!("{:?}", node); + } + create_sections(&mut nodes)?; resolve_symbols(&mut nodes)?; diff --git a/dsa/emulator/src/backend/processor/processor.rs b/dsa/emulator/src/backend/processor/processor.rs index 77e20bc..f9a0b37 100644 --- a/dsa/emulator/src/backend/processor/processor.rs +++ b/dsa/emulator/src/backend/processor/processor.rs @@ -272,14 +272,14 @@ impl Emulator { #[inline] fn interrupt(&mut self, int: Interrupt) { - println!("Interrupt while at address {}", self.reg(Register::Pcx)); + println!("Interrupt while at address {:04X}", self.reg(Register::Pcx)); self.push(Register::Pcx); *self.mut_reg(Register::Pcx) = self.mem_read_word(self.reg(Register::Idr) + int.code() as u32 * 4); println!( - "Jumping to interrupt at address {}", + "Jumping to interrupt at address {:04X}", self.reg(Register::Pcx) ); } @@ -498,7 +498,7 @@ impl Emulator { *self.mut_reg(Register::Pcx) = self.reg(Register::Ret); println!( - "Returning from interrupt to address {}", + "Returning from interrupt to address {:04X}", self.reg(Register::Pcx) ); } diff --git a/dsa/emulator/src/backend/processor/state.rs b/dsa/emulator/src/backend/processor/state.rs index 1ea5ad5..c34f1a0 100644 --- a/dsa/emulator/src/backend/processor/state.rs +++ b/dsa/emulator/src/backend/processor/state.rs @@ -12,7 +12,6 @@ pub struct SharedState { pub reseting: AtomicBool, pub paused: AtomicBool, pub update_req: AtomicBool, - pub interrupt_queue: mpsc::Sender, } diff --git a/dsa/emulator/src/frontend/components/controller.rs b/dsa/emulator/src/frontend/components/controller.rs index 4205483..254a775 100644 --- a/dsa/emulator/src/frontend/components/controller.rs +++ b/dsa/emulator/src/frontend/components/controller.rs @@ -95,7 +95,12 @@ impl Component for Controller { let pcx = state.registers[Register::Pcx as usize]; let clock = state.clock; let time = state.time.as_micros(); - let mips = state.clock as u128 / time; + + let mips = if time != 0 { + state.clock as u128 / time + } else { + 0 + }; ui.label(format!("Clock: {clock}")); ui.label(format!("Pcx: 0x{pcx:08X}")); diff --git a/dsa/emulator/src/frontend/components/memory.rs b/dsa/emulator/src/frontend/components/memory.rs index 97e1014..f290062 100644 --- a/dsa/emulator/src/frontend/components/memory.rs +++ b/dsa/emulator/src/frontend/components/memory.rs @@ -101,11 +101,11 @@ impl Component for MemoryInspector { ui.end_row(); // Memory data (8 bytes per row) - for (row, word) in (0..self.view_size / 4) + for (offset, word) in (0..self.view_size / 4) .map(|i| i * 4) .map(|i| (i, self.memory.read_word(self.view_addr + i))) { - let row_address = self.view_addr + (row * 4); + let row_address = self.view_addr + offset; ui.monospace(format!("0x{row_address:08X} ({row_address})")); for byte in word.to_le_bytes() { ui.monospace(format!("{byte:02X}")); diff --git a/dsa/emulator/src/frontend/components/serial.rs b/dsa/emulator/src/frontend/components/serial.rs index 7edd9d6..2f5f024 100644 --- a/dsa/emulator/src/frontend/components/serial.rs +++ b/dsa/emulator/src/frontend/components/serial.rs @@ -1,7 +1,10 @@ -use std::sync::{ - Arc, - atomic::Ordering, - mpsc::{Receiver, Sender}, +use std::{ + collections::VecDeque, + sync::{ + Arc, + atomic::Ordering, + mpsc::{Receiver, Sender}, + }, }; use super::Component; @@ -32,7 +35,13 @@ impl Serial { tx: Sender, rx: Receiver, ) { + let mut write_buffer: VecDeque = VecDeque::new(); + loop { + while let Ok(byte) = rx.try_recv() { + write_buffer.push_back(byte); + } + let ser_out_valid = mem.read_byte(uart_base + 0); // Kernel => emulator: valid flag in byte 0, data in byte 1 if ser_out_valid == 0x01 { @@ -41,14 +50,19 @@ impl Serial { mem.write_byte(uart_base, 0x00); // clear the whole word } - // Emulator => kernel: valid flag in byte 2, data in byte 3 - let ser_in_valid = mem.read_byte(uart_base + 2); - if ser_in_valid == 0x00 { - if let Ok(byte) = rx.try_recv() { - state.interrupt_queue.send(Interrupt::SerialIn).unwrap(); - mem.write_byte(uart_base + 3, byte); - mem.write_byte(uart_base + 2, 0x01); + if !write_buffer.is_empty() { + // Emulator => kernel: valid flag in byte 2, data in byte 3 + let ser_in_valid = mem.read_byte(uart_base + 2); + if ser_in_valid == 0x00 { + if let Some(byte) = write_buffer.pop_front() { + mem.write_byte(uart_base + 3, byte); + mem.write_byte(uart_base + 2, 0x01); + } } + + std::thread::sleep(std::time::Duration::from_millis(2)); + + state.interrupt_queue.send(Interrupt::SerialIn).unwrap(); } std::thread::sleep(std::time::Duration::from_millis(1)); diff --git a/dsa_resources/idt.dsa b/dsa_resources/idt.dsa index 2e7641a..0992129 100644 --- a/dsa_resources/idt.dsa +++ b/dsa_resources/idt.dsa @@ -32,7 +32,7 @@ _loop_start: setup_io: func push rg0 - lwi serial::serial_isr, rg0 + lwi serial::isr, rg0 stw rg0, idr, 128 // 32*4, interrupt idx 32 pop rg0 diff --git a/dsa_resources/out2.dsb b/dsa_resources/out2.dsb new file mode 100644 index 0000000..5f2f3b2 Binary files /dev/null and b/dsa_resources/out2.dsb differ diff --git a/dsa_resources/serial.dsa b/dsa_resources/serial.dsa index 1d34364..7525b33 100644 --- a/dsa_resources/serial.dsa +++ b/dsa_resources/serial.dsa @@ -2,17 +2,21 @@ dw UART: 0x40000 // Reserve space for our read buffer -resb SERIAL_BUFFER: 1024 +resb SERIAL_BUFFER: 1025 // final byte is a null terminator dw SER_READ_PTR: 0 dw SER_WRITE_PTR: 0 -serial_init: func +reset: func + push rg0 + lwi SERIAL_BUFFER, rg0 - stw rg0, SER_READ_PTR, 0 + stw rg0, SER_READ_PTR, 0 stw rg0, SER_WRITE_PTR, 0 + + pop rg0 return -serial_isr: +isr: push rg0 push rg1 push rg2 @@ -21,10 +25,11 @@ serial_isr: ldb rg0, rg1, 2 // load ser_in_valid flag // no serial input - jez rg1, _serial_isr_end + jez rg1, _isr_end // we should have a valid byte to read at offset 3 ldb rg0, rg1, 3 // data byte + stb zero, rg0, 2 // unset ser_in_valid // write data to ptr and increment ldw SER_WRITE_PTR, rg2 @@ -37,133 +42,94 @@ serial_isr: // if ptr != buff+1024, nowrap. ine rg1, rg2, rg1 - jnz rg1, _serial_isr_nowrap + jnz rg1, _isr_nowrap lwi SERIAL_BUFFER, rg2 // set the pointer -_serial_isr_nowrap: +_isr_nowrap: stw rg2, SER_WRITE_PTR -_serial_isr_end: - pop rg0 - pop rg1 +_isr_end: pop rg2 + pop rg1 + pop rg0 iret - - -// read_byte: emulator → kernel -// reads data from base+0x00, valid flag at base+0x01 -read_byte: func +// serial_readline: waits until a null byte is received +// returns nothing, data is in SERIAL_BUFFER starting at SER_READ_PTR +readline: func push rg0 push rg1 - push rg2 - ldw UART, rg1 -_serial_read_wait: - ldb rg1, rg0, 2 // base+0x02 = read valid flag - lli 0x01, rg2 - ieq rg0, rg2, rg2 - jnz rg2, _serial_read_ready +_readline_wait: + // check if write ptr == read ptr (buffer empty) + ldw SER_WRITE_PTR, rg0 + ldw SER_READ_PTR, rg1 + ieq rg0, rg1, rg0 + jnz rg0, _readline_halt // nothing written yet, halt + + // check if the byte just before write ptr is null + ldw SER_WRITE_PTR, rg0 + // handle wrap: if write ptr == SERIAL_BUFFER, check last byte of buffer + lwi SERIAL_BUFFER, rg1 + ieq rg0, rg1, rg1 + jnz rg1, _readline_check_wrap + + // normal case: read byte at write_ptr - 1 + subi rg0, 1, rg0 + ldb rg0, rg1, 0 + jez rg1, _readline_done + jmp _readline_halt + +_readline_check_wrap: + // write ptr is at start of buffer, last byte is at SERIAL_BUFFER + 1023 + lwi SERIAL_BUFFER, rg0 + addi rg0, 1023, rg0 + ldb rg0, rg1, 0 + jez rg1, _readline_done + +_readline_halt: hlt - jmp _serial_read_wait -_serial_read_ready: - ldb rg1, rg0, 3 // base+0x03 = data byte - stb zero, rg1, 2 // clear read valid flag - stb rg0, bpr, 8 // return byte - pop rg2 + jmp _readline_wait + +_readline_done: pop rg1 pop rg0 return -// _serial_send: kernel → emulator -// writes data to base+0x01, valid flag to base+0x00 +// _serial_send: trashes rg2, rg3, rg4, rg5 +// byte to send in rg0 _serial_send: - push rg0 - push rg2 - push rg3 - push rg4 - push rg5 ldw UART, rg5 _serial_wait: - ldb rg5, rg2, 0 // base+0x00 = ser_out_valid + ldb rg5, rg2, 0 lli 0x01, rg3 ieq rg2, rg3, rg4 - jnz rg4, _serial_wait // wait while emulator hasn't consumed yet - stb rg0, rg5, 1 // base+0x01 = ser_out_data - lli 0x01, rg2 - stb rg2, rg5, 0 // base+0x00 = ser_out_valid = 1 - pop rg5 - pop rg4 - pop rg3 - pop rg2 - pop rg0 + jnz rg4, _serial_wait + stb rg0, rg5, 1 + stb rg3, rg5, 0 // rg3 is still 0x01 from above ret -// ------------------------------------------ -// prints the null-terminated string at addr(arg[0]) + print: func push rg0 push rg1 - push rg2 - ldw bpr, rg0, 8 // load string address from arg + ldw bpr, rg0, 8 _serial_print_loop: - ldb rg0, rg1 // load byte - ieq rg1, zero, rg2 // null terminator? - jnz rg2, _serial_print_end - push rg0 // save string pointer + ldb rg0, rg1 + jez rg1, _serial_print_end + push rg0 mov rg1, rg0 call _serial_send pop rg0 addi rg0, 1, rg0 jmp _serial_print_loop _serial_print_end: - pop rg2 pop rg1 pop rg0 - jmp _serial_end -// ------------------------------------------ -// prints the last byte of arg[0] + return + print_byte: func push rg0 ldw bpr, rg0, 8 call _serial_send pop rg0 - jmp _serial_end -// ------------------------------------------ -_serial_end: - return - -// ------------------------------------------ -// reads up to rg1 bytes into buffer at rg2 -// args: buf_size @ bpr+8, buf_addr @ bpr+12 -// returns: 0 in bpr+8 on success, 1 on nullptr error -buf_read: func - push rg0 - push rg1 - push rg2 - push rg3 - ldw bpr, rg1, 8 // buf size - ldw bpr, rg2, 12 // buf addr - jez rg2, _buf_read_err // return err if nullptr -_buf_read_loop: - jez rg1, _buf_read_end - call read_byte - ldw bpr, rg3, 8 // read return value from frame - stb rg3, rg2 // store into buffer - addi rg2, 1, rg2 - subi rg1, 1, rg1 - jmp _buf_read_loop -_buf_read_end: - stw zero, bpr, 8 // return 0 (success) - pop rg3 - pop rg2 - pop rg1 - pop rg0 - return -_buf_read_err: - lli 1, rg0 - stw rg0, bpr, 8 // return 1 (error) - pop rg3 - pop rg2 - pop rg1 - pop rg0 return diff --git a/dsa_resources/serialtest.dsa b/dsa_resources/serialtest.dsa index 496bde7..a0c9c67 100644 --- a/dsa_resources/serialtest.dsa +++ b/dsa_resources/serialtest.dsa @@ -2,40 +2,39 @@ include serial: "./serial.dsa" include idt: "./idt.dsa" include print: "./print.dsa" -dw stack: 0x1000 +dw stack: 0x10000 _init: ldw stack, bpr mov bpr, spr call idt::setup_base call idt::setup_io -db hello2: "hello2" + call serial::reset + db hello: "Test message, hello world etc etc." main: - lwi hello, rg0 - push rg0 - call serial::print - pop zero - - lwi hello, rg0 - push rg0 - call print::print - pop zero + //lwi hello, rg0 + //push rg0 + //call serial::print + //pop zero + + // lwi hello, rg0 + // push rg0 + // call print::print + // pop zero //lwi buff, rg0 //lwi 32, rg1 //push rg0 //push rg1 - + + call serial::readline + lwi serial::SERIAL_BUFFER, rg0 push rg0 - call print::print - pop zero - - lwi hello2, rg0 - push rg0 - call print::print + call serial::print pop zero + call serial::reset hlt jmp main diff --git a/e.txt b/e.txt new file mode 100644 index 0000000..6f3a5d1 --- /dev/null +++ b/e.txt @@ -0,0 +1,1072 @@ +Building serialtest.dsa [/home/zxq5/Projects/HardwareDev/dsa2/dsa_resources/serialtest.dsa] +Tokenising serialtest.dsa +Parsing serialtest.dsa +Resolving Deps serialtest.dsa +Expanding Pseudo-ops serialtest.dsa +Including serial.dsa +Building serial.dsa [/home/zxq5/Projects/HardwareDev/dsa2/dsa_resources/serial.dsa] +Tokenising serial.dsa +Parsing serial.dsa +Resolving Deps serial.dsa +Expanding Pseudo-ops serial.dsa +Including idt.dsa +Building idt.dsa [/home/zxq5/Projects/HardwareDev/dsa2/dsa_resources/idt.dsa] +Tokenising idt.dsa +Parsing idt.dsa +Resolving Deps idt.dsa +Expanding Pseudo-ops idt.dsa +Including print.dsa +Building print.dsa [/home/zxq5/Projects/HardwareDev/dsa2/dsa_resources/print.dsa] +Tokenising print.dsa +Parsing print.dsa +Resolving Deps print.dsa +Expanding Pseudo-ops print.dsa +Including serial.dsa +Including print.dsa +PRE LINK +Node { symbol: None, opcode: Segment, tokens: [Immediate(3193829041)] } +Node { symbol: None, opcode: Include, tokens: [Symbol(Symbol { name: "serial", module: Resolved(10077013596335634097) }), StringLit("./serial.dsa")] } +Node { symbol: None, opcode: Include, tokens: [Symbol(Symbol { name: "idt", module: Resolved(10077013596335634097) }), StringLit("./idt.dsa")] } +Node { symbol: None, opcode: Include, tokens: [Symbol(Symbol { name: "print", module: Resolved(10077013596335634097) }), StringLit("./print.dsa")] } +Node { symbol: Some(Symbol { name: "stack", module: Resolved(10077013596335634097) }), opcode: Data, tokens: [Immediate(65536)] } +Node { symbol: Some(Symbol { name: "_init", module: Resolved(10077013596335634097) }), opcode: Lli, tokens: [Symbol(Symbol { name: "stack", module: Resolved(10077013596335634097) }), Register(Bpr)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "stack", module: Resolved(10077013596335634097) }), Register(Bpr)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Bpr), Immediate(0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "setup_base", module: Resolved(2519286859380657757) })] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "setup_io", module: Resolved(2519286859380657757) })] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "serial_init", module: Resolved(12290222962602515901) })] } +Node { symbol: Some(Symbol { name: "hello", module: Resolved(10077013596335634097) }), opcode: Data, tokens: [Immediate(1953719636)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1936026912)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1701273971)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1701322796)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(544173164)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1819438967)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1952784484)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1952784483)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(11875)] } +Node { symbol: Some(Symbol { name: "main", module: Resolved(10077013596335634097) }), opcode: Lli, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "print", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Pop, tokens: [Register(Zero)] } +Node { symbol: None, opcode: Hlt, tokens: [] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "main", module: Resolved(10077013596335634097) }), Register(Zero)] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(138780093)] } +Node { symbol: Some(Symbol { name: "UART", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(262144)] } +Node { symbol: Some(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "SER_READ_PTR", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "serial_init", module: Resolved(12290222962602515901) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "SER_READ_PTR", module: Resolved(12290222962602515901) }), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SER_READ_PTR", module: Resolved(12290222962602515901) }), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "serial_isr", module: Resolved(12290222962602515901) }), opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "UART", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "UART", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg0), Register(Rg0), Immediate(0)] } +Node { symbol: None, opcode: Ldb, tokens: [Register(Rg0), Register(Rg1), Immediate(2)] } +Node { symbol: None, opcode: Jez, tokens: [Register(Rg1), Symbol(Symbol { name: "_serial_isr_end", module: Resolved(12290222962602515901) }), Register(Zero)] } +Node { symbol: None, opcode: Ldb, tokens: [Register(Rg0), Register(Rg1), Immediate(3)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Zero), Register(Rg0), Immediate(2)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), Register(Rg2)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), Register(Rg2)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg2), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg1), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg2), Immediate(1), Register(Rg2)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg0), Immediate(1024), Register(Rg1)] } +Node { symbol: None, opcode: Ine, tokens: [Register(Rg1), Register(Rg2), Register(Rg1)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg1), Symbol(Symbol { name: "_serial_isr_nowrap", module: Resolved(12290222962602515901) }), Register(Zero)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg2)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), Register(Rg2)] } +Node { symbol: Some(Symbol { name: "_serial_isr_nowrap", module: Resolved(12290222962602515901) }), opcode: Lli, tokens: [Symbol(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg2), Register(Acc), Immediate(0)] } +Node { symbol: Some(Symbol { name: "_serial_isr_end", module: Resolved(12290222962602515901) }), opcode: Pop, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: IRet, tokens: [] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(78745181)] } +Node { symbol: None, opcode: Include, tokens: [Symbol(Symbol { name: "print", module: Resolved(2519286859380657757) }), StringLit("./print.dsa")] } +Node { symbol: None, opcode: Include, tokens: [Symbol(Symbol { name: "serial", module: Resolved(2519286859380657757) }), StringLit("./serial.dsa")] } +Node { symbol: Some(Symbol { name: "idt", module: Resolved(2519286859380657757) }), opcode: Data, tokens: [Immediate(4294901760)] } +Node { symbol: Some(Symbol { name: "setup_base", module: Resolved(2519286859380657757) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "idt", module: Resolved(2519286859380657757) }), Register(Idr)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "idt", module: Resolved(2519286859380657757) }), Register(Idr)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Idr), Register(Idr), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "_guard", module: Resolved(2519286859380657757) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "_guard", module: Resolved(2519286859380657757) }), Register(Rg1)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Idr), Immediate(1024), Register(Rg2)] } +Node { symbol: Some(Symbol { name: "_loop_start", module: Resolved(2519286859380657757) }), opcode: Stw, tokens: [Register(Rg1), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: SubI, tokens: [Register(Rg2), Immediate(4), Register(Rg2)] } +Node { symbol: None, opcode: Ieq, tokens: [Register(Rg2), Register(Idr), Register(Rg3)] } +Node { symbol: None, opcode: Jez, tokens: [Register(Rg3), Symbol(Symbol { name: "_loop_start", module: Resolved(2519286859380657757) }), Register(Zero)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "_handle_invalid_interrupt", module: Resolved(2519286859380657757) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "_handle_invalid_interrupt", module: Resolved(2519286859380657757) }), Register(Rg0)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Idr), Immediate(0)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "setup_io", module: Resolved(2519286859380657757) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "serial_isr", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "serial_isr", module: Resolved(12290222962602515901) }), Register(Rg0)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Idr), Immediate(128)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "_invalid_int", module: Resolved(2519286859380657757) }), opcode: Data, tokens: [Immediate(1096040774)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1226848844)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1818326638)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1226859625)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1919251566)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1953527154)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(33)] } +Node { symbol: Some(Symbol { name: "_handle_invalid_interrupt", module: Resolved(2519286859380657757) }), opcode: Call, tokens: [Symbol(Symbol { name: "reset", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "_invalid_int", module: Resolved(2519286859380657757) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "_invalid_int", module: Resolved(2519286859380657757) }), Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "print", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Pop, tokens: [Register(Zero)] } +Node { symbol: None, opcode: Hlt, tokens: [] } +Node { symbol: Some(Symbol { name: "_err", module: Resolved(2519286859380657757) }), opcode: Data, tokens: [Immediate(1096040774)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1226848844)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1919251566)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1953527154)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1851877408)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1919249508)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1935767328)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1953459744)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1952805664)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(33)] } +Node { symbol: Some(Symbol { name: "_guard", module: Resolved(2519286859380657757) }), opcode: Call, tokens: [Symbol(Symbol { name: "reset", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "_err", module: Resolved(2519286859380657757) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "_err", module: Resolved(2519286859380657757) }), Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "print", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Pop, tokens: [Register(Zero)] } +Node { symbol: None, opcode: Hlt, tokens: [] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(1648034676)] } +Node { symbol: Some(Symbol { name: "display", module: Resolved(11993558320162734964) }), opcode: Data, tokens: [Immediate(131072)] } +Node { symbol: Some(Symbol { name: "current", module: Resolved(11993558320162734964) }), opcode: Data, tokens: [Immediate(131072)] } +Node { symbol: Some(Symbol { name: "print", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Rg0), Immediate(8)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: Some(Symbol { name: "_print_loop", module: Resolved(11993558320162734964) }), opcode: Ldb, tokens: [Register(Rg0), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: Ieq, tokens: [Register(Rg2), Register(Zero), Register(Rg3)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg3), Symbol(Symbol { name: "_print_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg2), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg0), Immediate(1), Register(Rg0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_print_loop", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_print_end", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg1), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "print_byte", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Rg0), Immediate(8)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "print_hex_byte", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Rg0), Immediate(8)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "_print_hex_byte", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_print_hex_byte", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Immediate(15), Register(Rg2)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Shr, tokens: [Register(Rg0), Register(Zero), Immediate(4), Register(Rg0)] } +Node { symbol: None, opcode: And, tokens: [Register(Rg0), Register(Rg2), Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "_print_hex_nibble", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: And, tokens: [Register(Rg0), Register(Rg2), Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Symbol(Symbol { name: "_print_hex_nibble", module: Resolved(11993558320162734964) })] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "_print_hex_nibble", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Immediate(10), Register(Rg3)] } +Node { symbol: None, opcode: Ilt, tokens: [Register(Rg0), Register(Rg3), Register(Rg4)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg4), Symbol(Symbol { name: "_print_hex_nibble_number", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg0), Immediate(55), Register(Rg0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "_print_hex_nibble_number", module: Resolved(11993558320162734964) }), opcode: AddI, tokens: [Register(Rg0), Immediate(48), Register(Rg0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "print_whitespace", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(32), Register(Rg0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "newline", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "display", module: Resolved(11993558320162734964) }), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "display", module: Resolved(11993558320162734964) }), Register(Rg0)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg0), Register(Rg0), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Sub, tokens: [Register(Rg1), Register(Rg0), Register(Rg2)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(80), Register(Rg3)] } +Node { symbol: Some(Symbol { name: "_newline_mod", module: Resolved(11993558320162734964) }), opcode: Ilt, tokens: [Register(Rg2), Register(Rg3), Register(Rg4)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg4), Symbol(Symbol { name: "_newline_done", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: None, opcode: Sub, tokens: [Register(Rg2), Register(Rg3), Register(Rg2)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_newline_mod", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_newline_done", module: Resolved(11993558320162734964) }), opcode: Sub, tokens: [Register(Rg1), Register(Rg2), Register(Rg1)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(80), Register(Rg1)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "reset", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "display", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "display", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "clear", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(500), Register(Rg0)] } +Node { symbol: None, opcode: Lli, tokens: [Symbol(Symbol { name: "display", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "display", module: Resolved(11993558320162734964) }), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: Some(Symbol { name: "_clear_loop", module: Resolved(11993558320162734964) }), opcode: SubI, tokens: [Register(Rg0), Immediate(1), Register(Rg0)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Zero), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(4), Register(Rg1)] } +Node { symbol: None, opcode: Igt, tokens: [Register(Rg0), Register(Zero), Register(Rg4)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg4), Symbol(Symbol { name: "_clear_loop", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: None, opcode: Jmp, tokens: [Symbol(Symbol { name: "_end", module: Resolved(11993558320162734964) }), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_end", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Symbol(Symbol { name: "current", module: Resolved(11993558320162734964) }), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg1), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Generating assembly output... +Node { symbol: None, opcode: Jmp, tokens: [Immediate(1172), Register(Zero)] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "stack", module: Resolved(10077013596335634097) }), opcode: Data, tokens: [Immediate(65536)] } +Node { symbol: Some(Symbol { name: "hello", module: Resolved(10077013596335634097) }), opcode: Data, tokens: [Immediate(1953719636)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1936026912)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1701273971)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1701322796)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(544173164)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1819438967)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1952784484)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1952784483)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(11875)] } +Node { symbol: Some(Symbol { name: "UART", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(262144)] } +Node { symbol: Some(Symbol { name: "SERIAL_BUFFER", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "SER_READ_PTR", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "SER_WRITE_PTR", module: Resolved(12290222962602515901) }), opcode: Data, tokens: [Immediate(0)] } +Node { symbol: Some(Symbol { name: "idt", module: Resolved(2519286859380657757) }), opcode: Data, tokens: [Immediate(4294901760)] } +Node { symbol: Some(Symbol { name: "_invalid_int", module: Resolved(2519286859380657757) }), opcode: Data, tokens: [Immediate(1096040774)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1226848844)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1818326638)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1226859625)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1919251566)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1953527154)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(33)] } +Node { symbol: Some(Symbol { name: "_err", module: Resolved(2519286859380657757) }), opcode: Data, tokens: [Immediate(1096040774)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1226848844)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1919251566)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1953527154)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1851877408)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1919249508)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1935767328)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1953459744)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(1952805664)] } +Node { symbol: None, opcode: Data, tokens: [Immediate(33)] } +Node { symbol: Some(Symbol { name: "display", module: Resolved(11993558320162734964) }), opcode: Data, tokens: [Immediate(131072)] } +Node { symbol: Some(Symbol { name: "current", module: Resolved(11993558320162734964) }), opcode: Data, tokens: [Immediate(131072)] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(3193829041)] } +Node { symbol: Some(Symbol { name: "_init", module: Resolved(10077013596335634097) }), opcode: Lli, tokens: [Immediate(8), Register(Bpr)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(8), Register(Bpr)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Bpr), Immediate(0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1404)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1508)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1232)] } +Node { symbol: Some(Symbol { name: "main", module: Resolved(10077013596335634097) }), opcode: Lli, tokens: [Immediate(52), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(52), Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1608)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Zero)] } +Node { symbol: None, opcode: Hlt, tokens: [] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(1200), Register(Zero)] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(138780093)] } +Node { symbol: Some(Symbol { name: "serial_init", module: Resolved(12290222962602515901) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(52), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(52), Register(Rg0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1080), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1080), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1084), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1084), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "serial_isr", module: Resolved(12290222962602515901) }), opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(48), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(48), Register(Rg0)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg0), Register(Rg0), Immediate(0)] } +Node { symbol: None, opcode: Ldb, tokens: [Register(Rg0), Register(Rg1), Immediate(2)] } +Node { symbol: None, opcode: Jez, tokens: [Register(Rg1), Immediate(1384), Register(Zero)] } +Node { symbol: None, opcode: Ldb, tokens: [Register(Rg0), Register(Rg1), Immediate(3)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Zero), Register(Rg0), Immediate(2)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1084), Register(Rg2)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1084), Register(Rg2)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg2), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg1), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg2), Immediate(1), Register(Rg2)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(52), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(52), Register(Rg0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg0), Immediate(1024), Register(Rg1)] } +Node { symbol: None, opcode: Ine, tokens: [Register(Rg1), Register(Rg2), Register(Rg1)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg1), Immediate(1372), Register(Zero)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(52), Register(Rg2)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(52), Register(Rg2)] } +Node { symbol: Some(Symbol { name: "_serial_isr_nowrap", module: Resolved(12290222962602515901) }), opcode: Lli, tokens: [Immediate(1084), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1084), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg2), Register(Acc), Immediate(0)] } +Node { symbol: Some(Symbol { name: "_serial_isr_end", module: Resolved(12290222962602515901) }), opcode: Pop, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: IRet, tokens: [] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(78745181)] } +Node { symbol: Some(Symbol { name: "setup_base", module: Resolved(2519286859380657757) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1088), Register(Idr)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1088), Register(Idr)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Idr), Register(Idr), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1576), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1576), Register(Rg1)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Idr), Immediate(1024), Register(Rg2)] } +Node { symbol: Some(Symbol { name: "_loop_start", module: Resolved(2519286859380657757) }), opcode: Stw, tokens: [Register(Rg1), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: SubI, tokens: [Register(Rg2), Immediate(4), Register(Rg2)] } +Node { symbol: None, opcode: Ieq, tokens: [Register(Rg2), Register(Idr), Register(Rg3)] } +Node { symbol: None, opcode: Jez, tokens: [Register(Rg3), Immediate(1452), Register(Zero)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1548), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1548), Register(Rg0)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Idr), Immediate(0)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "setup_io", module: Resolved(2519286859380657757) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1284), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1284), Register(Rg0)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg0), Register(Idr), Immediate(128)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "_handle_invalid_interrupt", module: Resolved(2519286859380657757) }), opcode: Call, tokens: [Immediate(1984)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1092), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1092), Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1608)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Zero)] } +Node { symbol: None, opcode: Hlt, tokens: [] } +Node { symbol: Some(Symbol { name: "_guard", module: Resolved(2519286859380657757) }), opcode: Call, tokens: [Immediate(1984)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1120), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1120), Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1608)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Zero)] } +Node { symbol: None, opcode: Hlt, tokens: [] } +Node { symbol: None, opcode: Segment, tokens: [Immediate(1648034676)] } +Node { symbol: Some(Symbol { name: "print", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Rg0), Immediate(8)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: Some(Symbol { name: "_print_loop", module: Resolved(11993558320162734964) }), opcode: Ldb, tokens: [Register(Rg0), Register(Rg2), Immediate(0)] } +Node { symbol: None, opcode: Ieq, tokens: [Register(Rg2), Register(Zero), Register(Rg3)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg3), Immediate(1676), Register(Zero)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg2), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg0), Immediate(1), Register(Rg0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(1648), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_print_end", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Immediate(1164), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg1), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg3)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg2)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "print_byte", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Rg0), Immediate(8)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg1)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(2056), Register(Zero)] } +Node { symbol: Some(Symbol { name: "print_hex_byte", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Bpr), Register(Rg0), Immediate(8)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1800)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(2056), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_print_hex_byte", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Immediate(15), Register(Rg2)] } +Node { symbol: None, opcode: Push, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: Shr, tokens: [Register(Rg0), Register(Zero), Immediate(4), Register(Rg0)] } +Node { symbol: None, opcode: And, tokens: [Register(Rg0), Register(Rg2), Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1836)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Rg0)] } +Node { symbol: None, opcode: And, tokens: [Register(Rg0), Register(Rg2), Register(Rg0)] } +Node { symbol: None, opcode: Call, tokens: [Immediate(1836)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "_print_hex_nibble", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Immediate(10), Register(Rg3)] } +Node { symbol: None, opcode: Ilt, tokens: [Register(Rg0), Register(Rg3), Register(Rg4)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg4), Immediate(1864), Register(Zero)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg0), Immediate(55), Register(Rg0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "_print_hex_nibble_number", module: Resolved(11993558320162734964) }), opcode: AddI, tokens: [Register(Rg0), Immediate(48), Register(Rg0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Ret, tokens: [] } +Node { symbol: Some(Symbol { name: "print_whitespace", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(32), Register(Rg0)] } +Node { symbol: None, opcode: Stb, tokens: [Register(Rg0), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(1), Register(Rg1)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(2056), Register(Zero)] } +Node { symbol: Some(Symbol { name: "newline", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1160), Register(Rg0)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1160), Register(Rg0)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg0), Register(Rg0), Immediate(0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Sub, tokens: [Register(Rg1), Register(Rg0), Register(Rg2)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(80), Register(Rg3)] } +Node { symbol: Some(Symbol { name: "_newline_mod", module: Resolved(11993558320162734964) }), opcode: Ilt, tokens: [Register(Rg2), Register(Rg3), Register(Rg4)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg4), Immediate(1972), Register(Zero)] } +Node { symbol: None, opcode: Sub, tokens: [Register(Rg2), Register(Rg3), Register(Rg2)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(1956), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_newline_done", module: Resolved(11993558320162734964) }), opcode: Sub, tokens: [Register(Rg1), Register(Rg2), Register(Rg1)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(80), Register(Rg1)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(2056), Register(Zero)] } +Node { symbol: Some(Symbol { name: "reset", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1160), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1160), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(2056), Register(Zero)] } +Node { symbol: Some(Symbol { name: "clear", module: Resolved(11993558320162734964) }), opcode: Push, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Spr), Register(Bpr)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(500), Register(Rg0)] } +Node { symbol: None, opcode: Lli, tokens: [Immediate(1160), Register(Rg1)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1160), Register(Rg1)] } +Node { symbol: None, opcode: Ldw, tokens: [Register(Rg1), Register(Rg1), Immediate(0)] } +Node { symbol: Some(Symbol { name: "_clear_loop", module: Resolved(11993558320162734964) }), opcode: SubI, tokens: [Register(Rg0), Immediate(1), Register(Rg0)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Zero), Register(Rg1), Immediate(0)] } +Node { symbol: None, opcode: AddI, tokens: [Register(Rg1), Immediate(4), Register(Rg1)] } +Node { symbol: None, opcode: Igt, tokens: [Register(Rg0), Register(Zero), Register(Rg4)] } +Node { symbol: None, opcode: Jnz, tokens: [Register(Rg4), Immediate(2032), Register(Zero)] } +Node { symbol: None, opcode: Jmp, tokens: [Immediate(2056), Register(Zero)] } +Node { symbol: Some(Symbol { name: "_end", module: Resolved(11993558320162734964) }), opcode: Lli, tokens: [Immediate(1164), Register(Acc)] } +Node { symbol: None, opcode: Lui, tokens: [Immediate(1164), Register(Acc)] } +Node { symbol: None, opcode: Stw, tokens: [Register(Rg1), Register(Acc), Immediate(0)] } +Node { symbol: None, opcode: Mov, tokens: [Register(Bpr), Register(Spr)] } +Node { symbol: None, opcode: Pop, tokens: [Register(Bpr)] } +Node { symbol: None, opcode: Ret, tokens: [] } +INFO: Assembly Successful ✅ +Compilation Successful