pub struct CodeGen { /* private fields */ }Expand description
Core code generator
Implementations§
Source§impl CodeGen
impl CodeGen
Sourcepub fn with_config(config: RomConfig) -> Self
pub fn with_config(config: RomConfig) -> Self
Create a new code generator with custom config
Sourcepub fn unique_label(&mut self, prefix: &str) -> String
pub fn unique_label(&mut self, prefix: &str) -> String
Generate a unique label name
Sourcepub fn emit_string(&mut self, s: &str)
pub fn emit_string(&mut self, s: &str)
Emit a null-terminated string
Sourcepub fn emit_string_raw(&mut self, s: &str)
pub fn emit_string_raw(&mut self, s: &str)
Emit a string without null terminator
Sourcepub fn fixup(&mut self, name: &str)
pub fn fixup(&mut self, name: &str)
Record a fixup for later resolution (emits placeholder word)
Sourcepub fn resolve_fixups(&mut self)
pub fn resolve_fixups(&mut self)
Resolve all fixups - call after all code is emitted
Sourcepub fn emit_relative(&mut self, target_label: &str)
pub fn emit_relative(&mut self, target_label: &str)
Emit a relative jump offset (for JR, DJNZ) target_label must already be defined
Source§impl CodeGen
impl CodeGen
Sourcepub fn ld_a_hl_ind(&mut self)
pub fn ld_a_hl_ind(&mut self)
LD A, (HL)
Sourcepub fn ld_hl_ind_a(&mut self)
pub fn ld_hl_ind_a(&mut self)
LD (HL), A
Sourcepub fn ld_hl_addr(&mut self, addr: u16)
pub fn ld_hl_addr(&mut self, addr: u16)
LD HL, (nn)
Sourcepub fn ld_addr_hl(&mut self, addr: u16)
pub fn ld_addr_hl(&mut self, addr: u16)
LD (nn), HL
Sourcepub fn ld_de_addr(&mut self, addr: u16)
pub fn ld_de_addr(&mut self, addr: u16)
LD DE, (nn) - ED instruction
Sourcepub fn ld_addr_de(&mut self, addr: u16)
pub fn ld_addr_de(&mut self, addr: u16)
LD (nn), DE - ED instruction
Sourcepub fn add_a_hl_ind(&mut self)
pub fn add_a_hl_ind(&mut self)
ADD A, (HL)
Source§impl CodeGen
impl CodeGen
Sourcepub fn emit_getchar(&mut self)
pub fn emit_getchar(&mut self)
Emit getchar routine (blocking read, char returned in A)
Labels created: getchar
Sourcepub fn emit_getchar_config(&mut self, config: &MC6850Config)
pub fn emit_getchar_config(&mut self, config: &MC6850Config)
Emit getchar with custom port configuration
Sourcepub fn emit_putchar(&mut self)
pub fn emit_putchar(&mut self)
Emit putchar routine (blocking write, char in A)
Labels created: putchar, putchar_wait
Sourcepub fn emit_putchar_config(&mut self, config: &MC6850Config)
pub fn emit_putchar_config(&mut self, config: &MC6850Config)
Emit putchar with custom port configuration
Sourcepub fn emit_newline(&mut self)
pub fn emit_newline(&mut self)
Emit newline routine (prints CR LF)
Labels created: newline
Requires: putchar
Sourcepub fn emit_print_string(&mut self)
pub fn emit_print_string(&mut self)
Emit print_string routine (prints null-terminated string at HL)
Labels created: print_string, print_string_loop
Requires: putchar
Sourcepub fn emit_io_routines(&mut self)
pub fn emit_io_routines(&mut self)
Emit all standard I/O routines
Includes: getchar, putchar, newline, print_string
Source§impl CodeGen
impl CodeGen
Sourcepub fn emit_clear_screen(&mut self)
pub fn emit_clear_screen(&mut self)
Emit clear_screen routine (ESC[2J ESC[H)
Labels created: clear_screen
Requires: putchar
Sourcepub fn emit_cursor_home(&mut self)
pub fn emit_cursor_home(&mut self)
Emit cursor_home routine (ESC[H)
Labels created: cursor_home
Requires: putchar
Sourcepub fn emit_clear_screen_and_home(&mut self)
pub fn emit_clear_screen_and_home(&mut self)
Emit combined clear_screen + cursor_home
Labels created: clear_screen, cursor_home
Requires: putchar
Sourcepub fn emit_cursor_pos(&mut self)
pub fn emit_cursor_pos(&mut self)
Emit cursor_pos routine (ESC[row;colH) Input: B = row (1-based), C = col (1-based)
Labels created: cursor_pos
Requires: putchar, print_byte_dec
Sourcepub fn emit_clear_to_eol(&mut self)
pub fn emit_clear_to_eol(&mut self)
Emit clear_to_eol routine (ESC[K)
Labels created: clear_to_eol
Requires: putchar
Sourcepub fn emit_clear_to_eos(&mut self)
pub fn emit_clear_to_eos(&mut self)
Emit clear_to_eos routine (ESC[J) - clear from cursor to end of screen
Labels created: clear_to_eos
Requires: putchar
Sourcepub fn emit_cursor_hide(&mut self)
pub fn emit_cursor_hide(&mut self)
Emit cursor_hide routine (ESC[?25l)
Labels created: cursor_hide
Requires: putchar
Sourcepub fn emit_cursor_show(&mut self)
pub fn emit_cursor_show(&mut self)
Emit cursor_show routine (ESC[?25h)
Labels created: cursor_show
Requires: putchar
Sourcepub fn emit_cursor_up(&mut self)
pub fn emit_cursor_up(&mut self)
Emit cursor_up routine (ESC[A) - move cursor up 1 line
Labels created: cursor_up
Requires: putchar
Sourcepub fn emit_cursor_down(&mut self)
pub fn emit_cursor_down(&mut self)
Emit cursor_down routine (ESC[B) - move cursor down 1 line
Labels created: cursor_down
Requires: putchar
Sourcepub fn emit_cursor_right(&mut self)
pub fn emit_cursor_right(&mut self)
Emit cursor_right routine (ESC[C) - move cursor right 1 column
Labels created: cursor_right
Requires: putchar
Sourcepub fn emit_cursor_left(&mut self)
pub fn emit_cursor_left(&mut self)
Emit cursor_left routine (ESC[D) - move cursor left 1 column
Labels created: cursor_left
Requires: putchar
Sourcepub fn emit_reset_attrs(&mut self)
pub fn emit_reset_attrs(&mut self)
Emit reset_attrs routine (ESC[0m) - reset all text attributes
Labels created: reset_attrs
Requires: putchar
Sourcepub fn emit_reverse_video(&mut self)
pub fn emit_reverse_video(&mut self)
Emit reverse_video routine (ESC[7m)
Labels created: reverse_video
Requires: putchar
Sourcepub fn emit_terminal_routines(&mut self)
pub fn emit_terminal_routines(&mut self)
Emit all terminal routines
Includes: clear_screen, cursor_home, cursor_pos, clear_to_eol,
cursor_hide, cursor_show
Requires: putchar, print_byte_dec
Source§impl CodeGen
impl CodeGen
Sourcepub fn emit_print_byte_dec(&mut self)
pub fn emit_print_byte_dec(&mut self)
Emit print_byte_dec routine - prints A as decimal Always prints exactly what’s needed, no leading zeros except for zero itself
Labels created: print_byte_dec
Requires: putchar
Sourcepub fn emit_div16(&mut self)
pub fn emit_div16(&mut self)
Emit div16 routine - 16-bit division HL / DE -> HL quotient, DE remainder
Labels created: div16, div16_loop, div16_done
Sourcepub fn emit_mul8(&mut self)
pub fn emit_mul8(&mut self)
Emit mul8 routine - 8-bit multiply A * B -> HL
Labels created: mul8, mul8_loop
Sourcepub fn emit_negate_hl(&mut self)
pub fn emit_negate_hl(&mut self)
Emit negate_hl routine - negate HL (two’s complement)
Labels created: negate_hl
Sourcepub fn emit_math_routines(&mut self)
pub fn emit_math_routines(&mut self)
Emit all math routines
Source§impl CodeGen
Convenience extension methods for CodeGen
impl CodeGen
Convenience extension methods for CodeGen
Sourcepub fn emit_startup(&mut self, stack_top: u16)
pub fn emit_startup(&mut self, stack_top: u16)
Standard RetroShield startup sequence Sets up stack pointer and disables interrupts
Sourcepub fn ld_hl_label(&mut self, label: &str)
pub fn ld_hl_label(&mut self, label: &str)
Load HL with address of a label (for string pointers, etc.)
Sourcepub fn ld_de_label(&mut self, label: &str)
pub fn ld_de_label(&mut self, label: &str)
Load DE with address of a label
Sourcepub fn ld_bc_label(&mut self, label: &str)
pub fn ld_bc_label(&mut self, label: &str)
Load BC with address of a label
Sourcepub fn string_const(&mut self, label: &str, s: &str)
pub fn string_const(&mut self, label: &str, s: &str)
Emit a labeled string constant
Sourcepub fn include_stdlib(&mut self)
pub fn include_stdlib(&mut self)
Include all standard library routines This is a convenience method that includes:
- I/O routines (getchar, putchar, newline, print_string)
- Terminal routines (clear_screen, cursor_pos, etc.)
- Math routines (print_byte_dec, div16, etc.)