-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcoder.asm
464 lines (337 loc) · 10.3 KB
/
coder.asm
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
460
461
462
463
464
NEWBANK CODER
DEFINE_SUBROUTINE xdigitBlock
ldy #26 ; #lines in characters-1
ldx #0 ; used as a generic "0" during the kernel
sta WSYNC
SLEEP 72
.LOOPCC SET 0
blockLine
REPEAT 2
stx PF0 ; 3
lda (bigdigit0),y ; 5
sta PF1 ; 3 = 8 @11
lda (bigdigit1),y ; 5
sta PF2 ; 3 = 8 @19
; RHS
lda (bigdigit2),y ; 5
sta PF0 ; 3 = 8 @27 D7D6D5D4 <--- mirrored
asl ; 2
asl ; 2
asl ; 2
asl ; 2 = 8 @35
sta codeTemp ; 3
lda (bigdigit3),y ; 5
and #$f ; 2
ora codeTemp ; 3
sta PF1 ; 3 = 16 @ 51 NOT MIRRORED, D7D6D5D4 -->
lda (bigdigit3),y ; 5
lsr ; 2
lsr ; 2
lsr ; 2
lsr ; 2
sta PF2 ; 3 = 16 @67
SLEEP 2
SLEEP 2 ; @71
IF .LOOPCC = 0
SLEEP 5
ENDIF
.LOOPCC SET .LOOPCC + 1
REPEND
dey ; 2
bpl blockLine ; 3/2
CHECKPAGEX blockLine, "blockLine crosses page"
lda #0
sta PF0
sta PF1
sta PF2
sta WSYNC
sta WSYNC
sta WSYNC
sta WSYNC
sta WSYNC
rts
DEFINE_SUBROUTINE setCodeDigits
lda codeDigit,y
lsr
bcc correct0
lda codeDelay
lsr
lsr
lsr
jmp correct0a
correct0 lda codeDigit,y
correct0a and #%11111110
tax
lda CODE_DIGIT0,x
sta bigdigit0
lda CODE_DIGIT0+1,x
sta bigdigit0+1
lda codeDigit+1,y
lsr
bcc correct1
lda codeDelay
lsr
lsr
lsr
jmp correct1a
correct1 lda codeDigit+1,y
correct1a and #%11111110
tax
lda CODE_DIGIT1,x
sta bigdigit1
lda CODE_DIGIT1+1,x
sta bigdigit1+1
lda codeDigit+2,y
lsr
bcc correct2
lda codeDelay
lsr
lsr
lsr
jmp correct2a
correct2 lda codeDigit+2,y
correct2a and #%11111110
tax
lda CODE_DIGIT2,x
sta bigdigit2
lda CODE_DIGIT2+1,x
sta bigdigit2+1
lda codeDigit+3,y
lsr
bcc correct3
lda codeDelay
lsr
lsr
lsr
jmp correct3a
correct3 lda codeDigit+3,y
correct3a and #%11111110
tax
lda CODE_DIGIT3,x
sta bigdigit3
lda CODE_DIGIT3+1,x
sta bigdigit3+1
rts
DEFINE_SUBROUTINE xSelectionScreenInit
lda #%0
; sta NUSIZ1
sta VDELP0
sta VDELP1
sta REFP0
sta REFP1
; sta COLUBK
sta AUDV0
sta AUDV1 ; turn off music while levels init
lda #%11110000
sta HMP0
lda #%11010000
sta HMP1
lda #%111
sta NUSIZ0
sta NUSIZ1
lda #%0
sta CTRLPF
sta codeDelay
lda #5 ;1
sta codeDelay+1
ldx #11
xferdigits lda codeDigit,x ; == __decimal,x
asl
ora #1 ; NOT locked
sta codeDigit,x
dex
bpl xferdigits
; ldx #11
;randomdig jsr Random
; and #15
; cmp #10
; bcs randomdig
; asl
; ora #1 ; NOT locked!
; sta codeDigit,x
; dex
; bpl randomdig
rts
;xPlatformxwallColour
; .byte $F0, $F0, $22, $22
;xPlatformxadjustColour
; .byte 0,0, $c0, $c0
DEFINE_SUBROUTINE xLevelScreen
lda NextLevelTrigger
and #32
beq allGood
rts
allGood
jsr xSelectionScreenInit
jsr Random
and #%11110000
sta codeTemp
ora #2
sta COLUBK
sta COLUP0
sta COLUP1
sameFix jsr Random
and #%11110000
cmp codeTemp
beq sameFix
ora #8
sta COLUPF
RESYNC ; uses overlay
xRestartFrameX
lda #%1110 ; VSYNC ON
.xloopVSync3 sta WSYNC
sta VSYNC
lsr
bne .xloopVSync3 ; branch until VYSNC has been reset
ldx Platform
lda xVBlankTime2x,x
sta TIM64T
lda #2
sta VBLANK
ldx #37
xtoplines sta WSYNC
dex
bne xtoplines
stx VBLANK
ldy #0
jsr setCodeDigits
;------------------------------------------------------------------
VerticalBlankX;
lda INTIM
bne VerticalBlankX
lda #0
sta PF0
sta PF1
sta PF2
; position the sprites for the box walls
sta WSYNC
SLEEP 10;21
sta RESP0
SLEEP 54
sta RESP1
sta WSYNC
SLEEP 66
sta HMOVE
lda #0
sta PF0
sta PF1
sta PF2
sta GRP1
lda #%11110000
sta GRP0
; sta WSYNC
;------------------------------------------------------------------
; Do X scanlines of color-changing (our picture)
ldx #0 ; used as a generic "0" during the kernel
sta WSYNC
jsr xdigitBlock
ldy #4
jsr setCodeDigits
jsr xdigitBlock
ldy #8
jsr setCodeDigits
jsr xdigitBlock
ldy Platform
lda xOverscanTime2X,y
sta TIM64T
sta WSYNC
lda codeDelay
clc
adc #16
cmp #$A0
bcc cDOK
lda codeDelay+1
beq cDOK
dec codeDelay+1
lda #0
cDOK sta codeDelay
lsr
lsr
lsr
lsr
sta codeTemp ; digit currently shown
lda codeDelay+1
bne onepass
ldx #0
lockDigits lda codeDigit,x
lsr
bcc nochange2
cmp codeTemp
bne onepass
asl
sta codeDigit,x
lda #3
sta codeDelay+1
jmp onepass
nochange2 inx
cpx #12
bcc lockDigits
; none found so it's staic
onepass
;--------------------------------------------------------------------------
xoscanX lda INTIM
bne xoscanX
;sta COLUBK
lda #%01000010 ; bit6 is not required
sta VBLANK ; end of screen - enter blanking
lda #0
sta VSYNC
xwaitbutton lda INPT4
bpl xretX
jmp xRestartFrameX
xretX rts
xVBlankTime2x
.byte 56,56
.byte 78,78
xOverscanTime2X
.byte 42, 42
.byte 64, 64
xCOLOUR_LINES = 32
xcolvecX
.byte 0, 0, xCOLOUR_LINES, xCOLOUR_LINES
CODE_DIGIT0
.word CODE_DIGIT0_0
.word CODE_DIGIT0_1
.word CODE_DIGIT0_2
.word CODE_DIGIT0_3
.word CODE_DIGIT0_4
.word CODE_DIGIT0_5
.word CODE_DIGIT0_6
.word CODE_DIGIT0_7
.word CODE_DIGIT0_8
.word CODE_DIGIT0_9
CODE_DIGIT1
.word CODE_DIGIT1_0
.word CODE_DIGIT1_1
.word CODE_DIGIT1_2
.word CODE_DIGIT1_3
.word CODE_DIGIT1_4
.word CODE_DIGIT1_5
.word CODE_DIGIT1_6
.word CODE_DIGIT1_7
.word CODE_DIGIT1_8
.word CODE_DIGIT1_9
CODE_DIGIT2
.word CODE_DIGIT2_0
.word CODE_DIGIT2_1
.word CODE_DIGIT2_2
.word CODE_DIGIT2_3
.word CODE_DIGIT2_4
.word CODE_DIGIT2_5
.word CODE_DIGIT2_6
.word CODE_DIGIT2_7
.word CODE_DIGIT2_8
.word CODE_DIGIT2_9
CODE_DIGIT3
.word CODE_DIGIT3_0
.word CODE_DIGIT3_1
.word CODE_DIGIT3_2
.word CODE_DIGIT3_3
.word CODE_DIGIT3_4
.word CODE_DIGIT3_5
.word CODE_DIGIT3_6
.word CODE_DIGIT3_7
.word CODE_DIGIT3_8
.word CODE_DIGIT3_9
include "bigDigits3.asm"
CHECK_BANK_SIZE "CODER"