aboutsummaryrefslogtreecommitdiffstats
path: root/asm/test_py_src.atk16
blob: ca44267a4779d7a7771d45f8e63f00abd6c8b165 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
;; BEGIN BOOTSTRAP

@opt stack_pointer RG
@opt csr_scratch RH

@use ext_std:*

@let vector_table    0x10
@let vt_ISR0         0x10 ; ISR0
@let vt_ISR1         0x11 ; ISR1
@let vt_ISR2         0x12 ; ISR2
@let vt_ISR3         0x13 ; ISR3
@let vt_stack_addr   0x14 ; Stack address
@let vt_term_pp_addr 0x15 ; Terminal peripheral address
@let vt_kb_pp_addr   0x16 ; Keyboard peripheral address
@let vt_gr_mode_addr 0x17 ; Graphics mode setting address
@let vt_sprite_mem   0x18 ; Sprite memory address
@let vt_text_mem     0x19 ; Text memory buffer address

@let stack_segment   0x8000
@let mmio_segment    0xE000
@let terminal_addr   0xE000
@let keyboard_addr   0xE001
@let gr_mode_addr    0xE002
@let sprite_mem      0xE800
@let text_mem        0xF800

@let gr_disabled_mode 0b00
@let gr_text_mode     0b01
@let gr_sprite_mode   0b10

@address 0x0
  ldi vt_stack_addr RA
  ldr RA SP
  jpi program_segment

@address vector_table
  keyboard_isr   ; 0x10
  hlt_isr        ; 0x11
  hlt_isr        ; 0x12
  hlt_isr        ; 0x13
  stack_segment  ; 0x14
  terminal_addr  ; 0x15
  keyboard_addr  ; 0x16
  gr_mode_addr   ; 0x17
  sprite_mem     ; 0x18
  text_mem       ; 0x19

@label hlt_isr
  ldi 0x55 RE
  hlt

@label keyboard_isr
  spu RA
  spu RB
  ldi vt_kb_pp_addr RA
  ldr RA RA
  ldr RA RA
  ldi vt_term_pp_addr RB
  ldr RB RB
  str RA RB
  spo RB
  spo RA
  rti

@label program_segment
  ldi vt_gr_mode_addr RA
  ldr RA RA
  ldi gr_disabled_mode RB
  str RB RA

  jpi main

;; END BOOTSTRAP



; <ast.FunctionDef object at 0x100c7b310>
@label func
; stack frame: ['arg1', 'arg2', 'a']
  addi SP 1 SP
; <ast.Name object at 0x100c7aef0> (arg1)
  ldi ${SP - 3} RA
  ldr RA RA
  spu RA
  spo RA
  ldi ${SP - 1} RB
  str RA RB
; <ast.Return object at 0x100c7b0a0>
; <ast.BinOp object at 0x100c7b370>
; BinOp lhs <ast.BinOp object at 0x100c7b370>
; <ast.Name object at 0x100c7b3a0> (a)
  ldi ${SP - 1} RA
  ldr RA RA
  spu RA
; BinOp rhs <ast.BinOp object at 0x100c7b370>
; <ast.Name object at 0x100c7b3d0> (a)
  ldi ${SP - 1} RA
  ldr RA RA
  spu RA
  spo RB
  spo RA
  add RA RB RA
  spu RA
  subi SP 1 SP
  rsr

@label main
; stack frame: ['b']
  addi SP 1 SP
; <ast.Call object at 0x100c7b520>
; <ast.Constant object at 0x100c7b580>
  ldi 1 RA
  spu RA
; <ast.Constant object at 0x100c7b5b0>
  ldi 3 RA
  spu RA
  csi func
  spo RA
  ldi ${SP - 1} RB
  str RA RB
  subi SP 1 SP