blob: cab9562559ac8b6f40dd28e3f6f466bad791c8c2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
@use ext_string_io:*
@include %bootstrap
@include %std_mem
@label 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
|