blob: 4ef8b15452bc8afe49125cf27061cb9130008197 (
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
|
@let stack_segment 0x8000
@let vector_table 0x10
@let mmio_segment 0xE000
@let terminal_addr 0xE000
@let keyboard_addr 0xE001
@let sprite_mem 0xE800
@address vector_table
keyboard_isr ; 0x10 ISR0
hlt_isr ; 0x11 ISR1
hlt_isr ; 0x12 ISR2
hlt_isr ; 0x13 ISR3
stack_segment ; 0x14 Stack address
0x0 ; 0x15 Interrupt PC address (IPCA)
terminal_addr ; 0x16 Terminal peripheral address
keyboard_addr ; 0x17 Keyboard peripheral address
@label hlt_isr
ldi 0x55 RE
hlt
@label keyboard_isr
spu RA ; use RA, RB
spu RB
ldi 0x17 RA ; RA := 0x17 Keyboard peripheral address pointer
ldr RA RA ; RA := 0xE001 Keyboard peripheral address deref
ldr RA RA ; RA := <16-bit keyboard character code> from MMIO register
ldi 0x16 RB ; RB := 0x16 Terminal peripheral address pointer
ldr RB RB ; RB := 0xE000 Terminal peripheral address deref
str RA RB ; terminal <- character code
spo RB ; restore RA, RB
spo RA
rti
@label program_segment
@address 0x0
; set up stack pointer to point to beginning of stack segment
ldi 0x14 RA
ldr RA RF
jpi main
@address program_segment
; set up address for program code
|