aboutsummaryrefslogtreecommitdiffstats
path: root/asm/bootstrap.atk16
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