-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvbl.asm
More file actions
459 lines (458 loc) · 8.79 KB
/
vbl.asm
File metadata and controls
459 lines (458 loc) · 8.79 KB
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
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
processor 6502
org $400
; Starting new memory block at $400
StartBlock400
.byte $0, $0E, $08, $0A, $00, $9E, $20
.byte $31,$30,$34,$30
.byte $00
; Ending memory block
EndBlock400
org $410
; Starting new memory block at $410
StartBlock410
MyProgram
; LineNumber: 19
jmp block1
; LineNumber: 3
a dc.b 0
; LineNumber: 4
oldti dc.w 0
; LineNumber: 4
ti dc.w 0
; NodeProcedureDecl -1
; *********** Defining procedure : init16x8mul
; Procedure type : Built-in function
; Requires initialization : no
mul16x8_num1Hi = $4c
mul16x8_num1 = $4e
mul16x8_num2 = $50
mul16x8_procedure
lda #$00
ldy #$00
beq mul16x8_enterLoop
mul16x8_doAdd
clc
adc mul16x8_num1
tax
tya
adc mul16x8_num1Hi
tay
txa
mul16x8_loop
asl mul16x8_num1
rol mul16x8_num1Hi
mul16x8_enterLoop ; accumulating multiply entry point (enter with .A=lo, .Y=hi)
lsr mul16x8_num2
bcs mul16x8_doAdd
bne mul16x8_loop
rts
; NodeProcedureDecl -1
; *********** Defining procedure : initeightbitmul
; Procedure type : Built-in function
; Requires initialization : no
multiplier = $4c
multiplier_a = $4e
multiply_eightbit
cpx #$00
beq mul_end
dex
stx $4e
lsr
sta multiplier
lda #$00
ldx #$08
mul_loop
bcc mul_skip
mul_mod
adc multiplier_a
mul_skip
ror
ror multiplier
dex
bne mul_loop
ldx multiplier
rts
mul_end
txa
rts
initeightbitmul_multiply_eightbit2
rts
; NodeProcedureDecl -1
; *********** Defining procedure : initmoveto
; Procedure type : Built-in function
; Requires initialization : no
jmp initmoveto_moveto3
screenmemory = $fe
colormemory = $fc
screen_x = $4c
screen_y = $4e
SetScreenPosition
sta screenmemory+1
lda #0
sta screenmemory
ldy screen_y
beq sydone
syloop
clc
adc #80
bcc sskip
inc screenmemory+1
sskip
dey
bne syloop
sydone
ldx screen_x
beq sxdone
clc
adc screen_x
bcc sxdone
inc screenmemory+1
sxdone
sta screenmemory
rts
initmoveto_moveto3
rts
; NodeProcedureDecl -1
; *********** Defining procedure : initprintdecimal
; Procedure type : Built-in function
; Requires initialization : no
ipd_div_hi dc.b 0
ipd_div_lo dc.b 0
init_printdecimal_div10
ldx #$11
lda #$00
clc
init_printdecimal_loop
rol
cmp #$0A
bcc init_printdecimal_skip
sbc #$0A
init_printdecimal_skip
rol ipd_div_lo
rol ipd_div_hi
dex
bne init_printdecimal_loop
rts
; NodeProcedureDecl -1
; *********** Defining procedure : initprintstring
; Procedure type : User-defined procedure
print_text = $4c
print_number_text .dc " ",0
printstring
ldy #0
printstringloop
lda (print_text),y
cmp #0 ;keep
beq printstring_done
cmp #64
bcc printstring_skip
sec
sbc #64
printstring_skip
sta (screenmemory),y
iny
dex
cpx #0
beq printstring_done
jmp printstringloop
printstring_done
rts
; NodeProcedureDecl -1
; *********** Defining procedure : _ti
; Procedure type : User-defined procedure
; LineNumber: 11
; LineNumber: 10
ti_temp dc.w 0
_ti_block4
_ti
; LineNumber: 13
; Assigning single variable : ti_temp
; Generic 16 bit op
; integer assignment NodeVar
ldy ti_temp+1 ; Next one
lda ti_temp
_ti_rightvarInteger_var7 = $54
sta _ti_rightvarInteger_var7
sty _ti_rightvarInteger_var7+1
; Right is PURE NUMERIC : Is word =1
; 16 bit mul or div
; Mul 16x8 setup
; Right is PURE NUMERIC : Is word =1
; 16 bit mul or div
; Mul 16x8 setup
; Peek
lda $8D + $0
sta mul16x8_num1
lda #0
sta mul16x8_num1Hi
; Integer constant assigning
ldy #$01
lda #$00
sta mul16x8_num2
jsr mul16x8_procedure
sta mul16x8_num1
sty mul16x8_num1Hi
; Integer constant assigning
ldy #$01
lda #$00
sta mul16x8_num2
jsr mul16x8_procedure
; Low bit binop:
clc
adc _ti_rightvarInteger_var7
_ti_wordAdd5
sta _ti_rightvarInteger_var7
; High-bit binop
tya
adc _ti_rightvarInteger_var7+1
tay
lda _ti_rightvarInteger_var7
; Calling storevariable
sta ti_temp
sty ti_temp+1
; LineNumber: 14
; Assigning single variable : ti_temp
; Generic 16 bit op
; integer assignment NodeVar
ldy ti_temp+1 ; Next one
_ti_rightvarInteger_var10 = $54
sta _ti_rightvarInteger_var10
sty _ti_rightvarInteger_var10+1
; Right is PURE NUMERIC : Is word =1
; 16 bit mul or div
; Mul 16x8 setup
; Peek
lda $8D + $1
sta mul16x8_num1
lda #0
sta mul16x8_num1Hi
; Integer constant assigning
ldy #$01
lda #$00
sta mul16x8_num2
jsr mul16x8_procedure
; Low bit binop:
clc
adc _ti_rightvarInteger_var10
_ti_wordAdd8
sta _ti_rightvarInteger_var10
; High-bit binop
tya
adc _ti_rightvarInteger_var10+1
tay
lda _ti_rightvarInteger_var10
; Calling storevariable
sta ti_temp
sty ti_temp+1
; LineNumber: 15
; Assigning single variable : ti_temp
; Generic 16 bit op
; integer assignment NodeVar
ldy ti_temp+1 ; Next one
_ti_rightvarInteger_var13 = $54
sta _ti_rightvarInteger_var13
sty _ti_rightvarInteger_var13+1
; Peek
lda $8D + $2
; Low bit binop:
clc
adc _ti_rightvarInteger_var13
_ti_wordAdd11
sta _ti_rightvarInteger_var13
; High-bit binop
tya
adc _ti_rightvarInteger_var13+1
tay
lda _ti_rightvarInteger_var13
; Calling storevariable
sta ti_temp
sty ti_temp+1
; LineNumber: 17
; LineNumber: 17
; integer assignment NodeVar
ldy ti_temp+1 ; Next one
rts
block1
; LineNumber: 19
; LineNumber: 21
; Assigning memory location
; Assigning single variable : $8000
; Integer constant assigning
ldy #$80
lda #$00
; Calling storevariable
sta $8000
; LineNumber: 22
; Assigning single variable : screenmemory
ldx #$80
sta screenmemory
stx screenmemory+1
; LineNumber: 24
MainProgram_while14
MainProgram_loopstart18
; Binary clause Simplified: NOTEQUALS
lda #$1
; Compare with pure num / var optimization
cmp #$0;keep
beq MainProgram_localfailed43
jmp MainProgram_ConditionalTrueBlock15
MainProgram_localfailed43
jmp MainProgram_elsedoneblock17
MainProgram_ConditionalTrueBlock15: ;Main true block ;keep
; LineNumber: 25
; LineNumber: 26
; Assigning single variable : oldti
ldy #0
jsr _ti
; Calling storevariable
sta oldti
sty oldti+1
; LineNumber: 28
; Assigning single variable : a
; Peek
lda $E840 + $0
; Calling storevariable
sta a
; LineNumber: 29
MainProgram_while45
MainProgram_loopstart49
; Binary clause Simplified: EQUALS
lda a
; Compare with pure num / var optimization
cmp #$df;keep
bne MainProgram_elsedoneblock48
MainProgram_ConditionalTrueBlock46: ;Main true block ;keep
; LineNumber: 30
; LineNumber: 31
; Assigning single variable : a
; Peek
lda $E840 + $0
; Calling storevariable
sta a
; LineNumber: 32
; MoveTo optimization
lda #$00
sta screenmemory
lda #>$8000
clc
adc #$00
sta screenmemory+1
; LineNumber: 34
; //if(a<>255) then
ldy #0
lda a
sta ipd_div_lo
sty ipd_div_hi
ldy #$3 ; optimized, look out for bugs
MainProgram_printdecimal54
jsr init_printdecimal_div10
ora #$30
sta (screenmemory),y
dey
bpl MainProgram_printdecimal54
; LineNumber: 35
jmp MainProgram_while45
MainProgram_elsedoneblock48
MainProgram_loopend50
; LineNumber: 37
; MoveTo optimization
lda #$50
sta screenmemory
lda #>$8000
clc
adc #$00
sta screenmemory+1
; LineNumber: 38
MainProgram_printstring_call55
clc
lda #<MainProgram_printstring_text56
adc #$0
ldy #>MainProgram_printstring_text56
sta print_text+0
sty print_text+1
ldx #$4 ; optimized, look out for bugs
jsr printstring
; LineNumber: 39
; MoveTo optimization
lda #$a0
sta screenmemory
lda #>$8000
clc
adc #$00
sta screenmemory+1
; LineNumber: 40
; integer assignment NodeVar
ldy oldti+1 ; Next one
lda oldti
sta ipd_div_lo
sty ipd_div_hi
ldy #$2 ; optimized, look out for bugs
MainProgram_printdecimal57
jsr init_printdecimal_div10
ora #$30
sta (screenmemory),y
dey
bpl MainProgram_printdecimal57
; LineNumber: 41
; MoveTo optimization
lda #$f0
sta screenmemory
lda #>$8000
clc
adc #$00
sta screenmemory+1
; LineNumber: 43
; Assigning single variable : ti
ldy #0
jsr _ti
; Calling storevariable
sta ti
sty ti+1
; LineNumber: 44
MainProgram_while58
MainProgram_loopstart62
; Binary clause INTEGER: EQUALS
; Compare INTEGER with pure num / var optimization. GREATER.
lda ti+1 ; compare high bytes
cmp oldti+1 ;keep
bne MainProgram_elsedoneblock61
lda ti
cmp oldti ;keep
bne MainProgram_elsedoneblock61
jmp MainProgram_ConditionalTrueBlock59
MainProgram_ConditionalTrueBlock59: ;Main true block ;keep
; LineNumber: 45
; LineNumber: 46
; Assigning single variable : ti
ldy #0
jsr _ti
; Calling storevariable
sta ti
sty ti+1
; LineNumber: 47
jmp MainProgram_while58
MainProgram_elsedoneblock61
MainProgram_loopend63
; LineNumber: 48
; integer assignment NodeVar
ldy ti+1 ; Next one
lda ti
sta ipd_div_lo
sty ipd_div_hi
ldy #$2 ; optimized, look out for bugs
MainProgram_printdecimal66
jsr init_printdecimal_div10
ora #$30
sta (screenmemory),y
dey
bpl MainProgram_printdecimal66
; LineNumber: 49
jmp MainProgram_while14
MainProgram_elsedoneblock17
MainProgram_loopend19
; LineNumber: 51
; End of program
; Ending memory block
EndBlock410
MainProgram_printstring_text56 dc.b "DONE"
dc.b 0