aboutsummaryrefslogtreecommitdiffstats
path: root/asm/text_mode.atk16
blob: 335f71c5846b0925c2eba8083d40048db4ee579a (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
@opt stack_pointer RF
@opt csr_scratch RH
@use ext_std:*
@use ext_string_io:*

; bootstrap code (must be called to set up mandatory data)
; will jump to label main
@include bootstrap

@label main
  cursor_to_line RC 1
  put_string RC RB " HELLO CORECAMP"
  new_line RC
  put_string RC RB " BY 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
  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

  str RA RC
  addi RC 1 RC

  subi RA 5 RA
  subi RA 5 RA
  bri zero keyboard_isr_clear
  jpi keyboard_isr_end
@label keyboard_isr_clear
  ; cursor_to_line RC 4
  ; put_string RC RB "                                                                "
  new_line RC
  put_string RC RB " > "
@label keyboard_isr_end
  stack_restore RA RB
  rti