@use ext_string_io:* @include %bootstrap @include %std_mem @data text_buffer_size 2048 @label main ; use memset to clear the text buffer ldi vt_text_mem RA ; RA := text buffer address pointer ldr RA RA ; RA := text buffer address ldi text_buffer_size RB ; RB := pointer to 1024 ldr RB RB ; RB := 1024 ldi 0 RC ; RC := 0 calli memset cursor_to_line RC 1 put_string RC RB " HELLO #vaincoodijutut" new_line RC put_string RC RB " »»»» BY @kal_jan »»»»" new_line RC new_line RC put_string RC RB " > " set_graphics_mode gr_text_mode @label loop jpi loop @label keyboard_isr stack_stash RA RB RD ldi vt_kb_pp_addr RA ; RA := Keyboard peripheral address pointer ldr RA RA ; RA := Keyboard peripheral address deref ldr RA RA ; RA := <16-bit keyboard character code> from MMIO register ldi vt_term_pp_addr RB ; RB := Terminal peripheral address pointer ldr RB RB ; RB := Terminal peripheral address deref mov RA RD ; RD := character code subi RD 5 RD ; if code == 10 (enter key), then run newline handler subi RD 5 RD bri zero keyboard_isr_newline mov RA RD ; if code == 8 (backspace key), then run backspace handler subi RD 5 RD subi RD 3 RD bri zero keyboard_isr_backspace str RA RC ; else code is not special; write it to text buffer addi RC 1 RC jpi keyboard_isr_end @label keyboard_isr_newline new_line RC put_string RC RB " > " jpi keyboard_isr_end @label keyboard_isr_backspace subi RC 1 RC put_char RC RB " " subi RC 1 RC @label keyboard_isr_end stack_restore RA RB RD rti @address vt_ISR0 @begin_override keyboard_isr @end_override