aboutsummaryrefslogtreecommitdiffstats
path: root/asm/test_py_src.atk16
blob: 02752ec748f30181b8e9c7a6dfb04a6d813c7d43 (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
;; 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

@label text_mode
  1
@label graphics_mode_addr_p
  23
@label text_mem_addr_p
  25
@label int_1
  104
@label int_2
  105

; <ast.FunctionDef object at 0x1032fef50>
@label func
; stack frame names: ['return_address_0', 'arg1', 'arg2', 'a']
  addi SP 1 SP
; <ast.Assign object at 0x1032fee30>
; assigning a to stack segment + offset 7
; <ast.Name object at 0x1032fedd0> (arg1)
  ldi vt_stack_addr RC
  ldr RC RC
  ldi 5 RD
  add RC RD RC
  ldr RC RC
  spu RC
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 7 RB
  add RA RB RA
  spo RB
  str RB RA
; <ast.Return object at 0x1032feda0>
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 4 RB
  add RA RB RA
; <ast.Add object at 0x10301ab60>
; BinOp lhs <ast.BinOp object at 0x1032fed70>
; <ast.Name object at 0x1032fed40> (a)
  ldi vt_stack_addr RC
  ldr RC RC
  ldi 7 RD
  add RC RD RC
  ldr RC RC
  spu RC
; BinOp rhs <ast.BinOp object at 0x1032fed70>
; <ast.Name object at 0x1032fed10> (a)
  ldi vt_stack_addr RC
  ldr RC RC
  ldi 7 RD
  add RC RD RC
  ldr RC RC
  spu RC
  spo RD
  spo RC
  add RC RD RC
  spu RC
  spo RB
  mov RA SP
  ldr RA RA
  spu RB
; return from function
  jpr RA

@label main
; stack frame names: ['i', 'graphics_mode_addr', 'text_mem_addr', 'b']
  addi SP 4 SP
; <ast.Assign object at 0x103067b80>
; assigning graphics_mode_addr to stack segment + offset 1
; <ast.Call object at 0x1030677f0>
; Builtin call load [<ast.Name object at 0x103067fa0>]
; <ast.Name object at 0x103067fa0> (GRAPHICS_MODE_ADDR_P)
  ldi graphics_mode_addr_p RC
  ldr RC RC
  spu RC
  spo RC
  ldr RC RC
  spu RC
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 1 RB
  add RA RB RA
  spo RB
  str RB RA
; <ast.Assign object at 0x103067790>
; assigning text_mem_addr to stack segment + offset 2
; <ast.Call object at 0x103067220>
; Builtin call load [<ast.Name object at 0x103067f40>]
; <ast.Name object at 0x103067f40> (TEXT_MEM_ADDR_P)
  ldi text_mem_addr_p RC
  ldr RC RC
  spu RC
  spo RC
  ldr RC RC
  spu RC
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 2 RB
  add RA RB RA
  spo RB
  str RB RA
; <ast.Call object at 0x1030673d0>
; Builtin call store [<ast.Name object at 0x1032fefb0>, <ast.Name object at 0x1032fef80>]
; <ast.Name object at 0x1032fefb0> (graphics_mode_addr)
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 1 RB
  add RA RB RA
  ldr RA RA
  spu RA
; <ast.Name object at 0x1032fef80> (TEXT_MODE)
  ldi text_mode RA
  ldr RA RA
  spu RA
  spo RB
  spo RA
  str RB RA
; <ast.Assign object at 0x1032fecb0>
; assigning b to stack segment + offset 3
; <ast.Call object at 0x1032fec50>
; Call function func
  ldi 0 RC
  spu RC
; <ast.Constant object at 0x1032febf0>
  ldi 1 RC
  spu RC
; <ast.Constant object at 0x1032febc0>
  ldi 3 RC
  spu RC
; set up return address and jump to subroutine
  subi SP 3 RC
  lpc RD
  addi RD 3 RD
  str RD RC
  jpi func
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 3 RB
  add RA RB RA
  spo RB
  str RB RA
; <ast.Assign object at 0x1032feb90>
; assigning i to stack segment + offset 0
; <ast.Constant object at 0x1032feb30>
  ldi 0 RC
  spu RC
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 0 RB
  add RA RB RA
  spo RB
  str RB RA
; <ast.Call object at 0x1032fead0>
; Builtin call store [<ast.BinOp object at 0x1032fea40>, <ast.Call object at 0x1032fe9b0>]
; <ast.Add object at 0x10301ab60>
; BinOp lhs <ast.BinOp object at 0x1032fea40>
; <ast.Name object at 0x1032fea10> (text_mem_addr)
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 2 RB
  add RA RB RA
  ldr RA RA
  spu RA
; BinOp rhs <ast.BinOp object at 0x1032fea40>
; <ast.Name object at 0x1032fe9e0> (i)
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 0 RB
  add RA RB RA
  ldr RA RA
  spu RA
  spo RB
  spo RA
  add RA RB RA
  spu RA
; <ast.Call object at 0x1032fe9b0>
; Builtin call ord [<ast.Constant object at 0x1032fe920>]
; <ast.Constant object at 0x1032fe920>
  ldi int_1 RA
  ldr RA RA
  spu RA
  spo RB
  spo RA
  str RB RA
; <ast.Assign object at 0x1032fe8f0>
; assigning i to stack segment + offset 0
; <ast.Add object at 0x10301ab60>
; BinOp lhs <ast.BinOp object at 0x1032fe890>
; <ast.Name object at 0x1032fe860> (i)
  ldi vt_stack_addr RC
  ldr RC RC
  ldi 0 RD
  add RC RD RC
  ldr RC RC
  spu RC
; BinOp rhs <ast.BinOp object at 0x1032fe890>
; <ast.Constant object at 0x1032fe830>
  ldi 1 RC
  spu RC
  spo RD
  spo RC
  add RC RD RC
  spu RC
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 0 RB
  add RA RB RA
  spo RB
  str RB RA
; <ast.Call object at 0x1032fe7d0>
; Builtin call store [<ast.BinOp object at 0x1032fe740>, <ast.Call object at 0x1032fe6b0>]
; <ast.Add object at 0x10301ab60>
; BinOp lhs <ast.BinOp object at 0x1032fe740>
; <ast.Name object at 0x1032fe710> (text_mem_addr)
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 2 RB
  add RA RB RA
  ldr RA RA
  spu RA
; BinOp rhs <ast.BinOp object at 0x1032fe740>
; <ast.Name object at 0x1032fe6e0> (i)
  ldi vt_stack_addr RA
  ldr RA RA
  ldi 0 RB
  add RA RB RA
  ldr RA RA
  spu RA
  spo RB
  spo RA
  add RA RB RA
  spu RA
; <ast.Call object at 0x1032fe6b0>
; Builtin call ord [<ast.Constant object at 0x1032fe620>]
; <ast.Constant object at 0x1032fe620>
  ldi int_2 RA
  ldr RA RA
  spu RA
  spo RB
  spo RA
  str RB RA
; <ast.While object at 0x1032fe5f0>
@label while_test_3
; <ast.Constant object at 0x1032fe5c0>
  ldi 1 RB
  spu RB
  spo RA
  addi RA 0 RA
  bri zero While_else_4
; <ast.Pass object at 0x1032fe590>
  jpi While_test_3
@label while_else_4
@label while_end_5
  subi SP 4 SP