-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.๐
490 lines (381 loc) ยท 14.5 KB
/
main.๐
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
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
๐ฆ files ๐
๐ฆ time ๐
๐ฆ keyboard ๐
๐ญ delay timer
๐ โ ๐
๐๐ val ๐ข โฌ
๏ธ 0
๐๐ prevTime ๐ข โฌ
๏ธ ๐คโ๐โณโ๏ธโ3โ50๐ค
๐ญ set time
โ๐คฌ newtime ๐ข ๐
newtime โก๏ธ ๐ val
๐
๐ญ โ ๐ฅ โก๏ธ ๐ข ๐
๐ญ โฉ๏ธval
๐ญ ๐
๐ญ method to actually time
โ ๐ด โก๏ธ ๐ข ๐
๐ญ get the curTime from c++
โ๐โณโ๏ธโ3โ50 โก๏ธ curTime
curTimeโprevTime โก๏ธ delta
valโdelta โก๏ธ ๐ val
โช๏ธ 0 โถ val๐
0 โก๏ธ ๐ val
๐
curTime โก๏ธ ๐ prevTime
โฉ๏ธ val
๐
๐ ๐ ๐
๐
๐ ๐ฑ ๐
๐ญ stack!!!!!
๐ญ ๐๐ stackBase ๐ข โฌ
๏ธ 0xEA0
๐๐ stackPtr ๐ข โฌ
๏ธ 0xEA0
๐ญ registers
๐๐ V ๐จ๐๐ข๐ โฌ
๏ธ ๐ ๐จ ๐๐ข๐ 0 0x10โ๏ธ
๐๐ PC ๐ข โฌ
๏ธ 0
๐๐ I ๐ข โฌ
๏ธ 0
๐๐ opcode ๐ข โฌ
๏ธ 0
๐๐ timer โ โฌ
๏ธ ๐โโ
๐๐ display ๐จ๐๐จ๐๐ก๐๐ โฌ
๏ธ ๐ ๐จ ๐๐จ๐๐ก๐๐ ๐ ๐จ ๐๐ก๐ ๐ค ๐ค 64 โ๏ธ 32 โ๏ธ
๐ญ memory
๐ญ 4096 (0x1000) bytes of memory
๐ญ program begins at 512 (0x200)
๐ญ the 96 bytes (0xEA0-0xEFF) for the call stack, internal use, and other variables
๐ญ uppermost 256 bytes (0xF00-0xFFF) for display refresh
๐๐ memory ๐จ๐๐ข๐ โฌ
๏ธ ๐ ๐จ ๐๐ข๐ 0 0x1000โ๏ธ
๐ญ writing file to memory
โ ๐ filename ๐ก ๐
๐บ๐๐โถ๏ธ๐ filenameโ โก๏ธ rom
0 โก๏ธ ๐๐ i
๐ โก๏ธ ๐๐ loop
๐ loop ๐
๐ญ ๐๐ค๐งฒi๐งฒ๐คโ
๐rom iโ๏ธ
๐ bindata ๐rom 1โ ๐
๐ข๐ฝbindata 0โโ โก๏ธ byte
โช๏ธ byte โถ๐ 0 ๐
byte โก๏ธ ๐ฝmemory ๐ค0x200โi๐คโ
๐
๐
๐
byteโ0x100 โก๏ธ ๐ฝmemory ๐ค0x200โi๐คโ
๐
i โฌ
๏ธโ 1
๐
๐
error ๐
๐ โก๏ธ ๐ loop
๐ชromโ
๐
๐
๐ญ ๐ฝmemory 0x205โ โก๏ธ hello
๐ญ ๐ญ ๐ฝ memory 0x200โ
๐ญ ๐ ๐ค๐งฒhello๐งฒ๐คโ
๐
๐ญ run
โ๐โโ๏ธ๐
0x200 โก๏ธ ๐ PC
๐ โก๏ธ ๐๐ loop
๐ loop ๐
๐ฝmemory PCโ โก๏ธ opcodeHigh
๐ฝmemory ๐คPCโ1๐คโ โก๏ธ opcodeLow
๐คopcodeHigh๐8๐คโopcodeLow โก๏ธ ๐ opcode
๐ญ for debug
๐ญ ๐ ๐คmain: ๐งฒopcode๐งฒ๐คโ๏ธ
โโ
๐งน๐โจ๏ธโ
๐ line display ๐
๐ char line ๐
โ๐โจ๏ธcharโ๏ธ
๐ญ ๐ charโ๏ธ
๐
๐ฝ๐โจ๏ธโ๏ธ
๐ญ ๐ ๐ค๐คโ๏ธ
๐
๐๐โจ๏ธโ
โ๐โณ10000โ
PCโ2 โก๏ธ ๐PC
๐
๐
๐ญ decode opcodes
โ โ ๐
๐ญ most significant nibble ๐ณ
opcode๐12 โก๏ธ MSN
๐คopcode ๐8๐ค ๐ฎ 0x10 โก๏ธ X
๐คopcode ๐4๐ค ๐ฎ 0x10 โก๏ธ Y
opcode๐ฎ 0x1000 โก๏ธ NNN
opcode๐ฎ 0x100 โก๏ธ NN
opcode๐ฎ 0x10 โก๏ธ N
โช๏ธ MSN ๐ 0x0 ๐
๐ญ least significant byte (boon)
opcode๐ฎ0x100 โก๏ธ LSB
โช๏ธ LSB ๐ 0xE0 ๐
๐ญ clear the display
๐ line ๐โฉ 0 32โ ๐
๐ char ๐โฉ 0 64โ ๐
๐ค ๐ค โก๏ธ ๐ฝ๐ฝdisplay lineโ charโ
๐
๐
๐
๐
โช๏ธ LSB ๐ 0xEE ๐
๐ญ return from a subroutine
๐ค๐ฝmemory ๐คstackPtrโ1๐คโ๐8๐ค โ ๐ฝmemory stackPtrโ โก๏ธ ๐PC
stackPtrโ2 โก๏ธ ๐stackPtr
๐
๐
๐
๐๐คreal bad has happen ๐ฑ 0x0XYZ๐คโ
๐
๐
๐
โช๏ธ MSN ๐ 0x1 ๐
๐ญ jump to location NNN
NNNโ2 โก๏ธ ๐ PC
๐
๐
โช๏ธ MSN ๐ 0x2 ๐
๐ญ call subroutine at location NNN
stackPtrโ1 โก๏ธ ๐stackPtr
PC๐ฎ0x100 โก๏ธ ๐ฝmemory stackPtrโ
PC๐8 โก๏ธ ๐ฝmemory ๐คstackPtrโ1๐คโ
NNN โก๏ธ ๐PC
๐
๐
โช๏ธ MSN ๐ 0x3 ๐
๐ญ skip next instruction if Vx == NN
โช๏ธ ๐ฝV Xโ ๐ NN ๐
PCโ2 โก๏ธ ๐ PC
๐
๐
๐
โช๏ธ MSN ๐ 0x4 ๐
๐ญ skip next instruction if Vx != NN
โช๏ธ โ๐ฝV Xโ ๐ NNโ ๐
PCโ2 โก๏ธ ๐ PC
๐
๐
๐
โช๏ธ MSN ๐ 0x5 ๐
๐ญ skip next instruction if Vx == Vy
โช๏ธ ๐ฝV Xโ ๐ ๐ฝV Yโ ๐
PCโ2 โก๏ธ ๐ PC
๐
๐
๐
โช๏ธ MSN ๐ 0x6 ๐
๐ญ write Vx = NN
NN โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ MSN ๐ 0x7 ๐
๐ญ write Vx += NN
๐ฝV XโโNN โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ MSN ๐ 0x8 ๐
๐ญ least significant nibble (boon)
opcode๐ฎ0x10 โก๏ธ LSN
โช๏ธ LSN ๐ 0x0 ๐
๐ญ set Vx to Vy
๐ฝV Yโ โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x1 ๐
๐ญ set Vx to Vx OR Vy (bitwise OR)
๐ฝV Xโ ๐ข ๐ฝV Yโ โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x2 ๐
๐ญ set Vx to Vx AND Vy (bitwise AND)
๐ฝV Xโ โญ ๐ฝV Yโ โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x3 ๐
๐ญ set Vx to Vx XOR Vy (bitwise XOR)
๐ฝV Xโ โ ๐ฝV Yโ โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x4 ๐
๐ญ add Vy to Vx: Vx += Vy
๐ฝV Xโโ ๐ฝV Yโ โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x5 ๐
๐ญ sub Vy from Vx: Vx -= Vy
๐ฝV Xโโ ๐ฝV Yโโก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x6 ๐
๐ญ store LSB of Vx in Vf then shift Vx to right by 1
๐ฝV Xโ ๐ฎ 0x100
๐ฝV Xโ๐1 โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0x7 ๐
๐ญ Vx = Vy - Vx, Vf is set t o0 when there's a borrow and 1 when there isn't
๐ฝV Yโ โ ๐ฝV Xโ โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ LSN ๐ 0xE ๐
๐ญ store MSB of Vx in Vf then shift Vx to left by 1
๐ฝV Xโ๐15 โก๏ธ ๐ฝV 0xFโ
๐ฝV Xโ๐1 โก๏ธ ๐ฝV Xโ
๐
๐
๐
๐ญ bad
๐๐คreal bad has happen 0x8XYZ๐คโ
๐
๐
๐
โช๏ธ MSN ๐ 0x9 ๐
๐ญ skip next instruction if Vx != Vy
โช๏ธ โ๐ฝV Xโ ๐ ๐ฝV Yโโ ๐
PC โ 1 โก๏ธ ๐ PC
๐
๐
๐
โช๏ธ MSN ๐ 0xA ๐
๐ญ set I = NNN
NNN โก๏ธ ๐ I
๐
๐
โช๏ธ MSN ๐ 0xB ๐
๐ญ jump to location NNN + V0
NNN โ ๐ฝV 0x0โ โก๏ธ ๐ PC
๐
๐
โช๏ธ MSN ๐ 0xC ๐
๐ญ set Vx = random byte AND NN
๐๐ฐโ โก๏ธ RNG
๐ขRNG -128 127โ๏ธ โก๏ธ rb
rb โญ NN โก๏ธ ๐ฝV Xโ
๐
๐
โช๏ธ MSN ๐ 0xD ๐
๐ญ has to do with drawing / display
N โก๏ธ height
๐ฝV Xโ๐ฎ64 โก๏ธ rX
๐ฝV Yโ๐ฎ32 โก๏ธ rY
0 โก๏ธ ๐ฝV 0xFโ
0 โก๏ธ ๐๐yy
rYโyy โก๏ธ ๐๐y
๐ yy โ height ๐ค y โ 32 ๐
0 โก๏ธ ๐๐xx
rXโxx โก๏ธ ๐๐x
๐ฝmemory ๐คIโyy๐คโ โก๏ธ ๐๐pixel
๐ xx โ 8 ๐ค x โ 64 ๐
โช๏ธ โ๐คpixel โญ 0x80๐ค ๐ 0โ๐
๐ญ โถ๐
๐ญ โ๐
๐ญ ๐ ๐คx: ๐งฒx๐งฒ, y: ๐งฒy๐งฒ๐คโ๏ธ
โช๏ธ ๐ฝ๐ฝdisplay yโ xโ ๐ ๐ค88๐ค ๐
1 โก๏ธ ๐ฝV 0xFโ
๐ค ๐ค โก๏ธ ๐ฝ๐ฝdisplay yโ xโ
๐
๐
๐
๐ค88๐ค โก๏ธ ๐ฝ๐ฝdisplay yโ xโ
๐
๐
pixel๐1 โก๏ธ ๐pixel
1โxx โก๏ธ ๐xx
rXโxx โก๏ธ ๐x
๐
1โyy โก๏ธ ๐yy
rYโyy โก๏ธ ๐y
๐
๐
๐
โช๏ธ MSN ๐ 0xE ๐
๐ญ least significant byte (boon)
opcode๐ฎ0x100 โก๏ธ LSB
๐ญ skip next instruction if key with the value of Vx is pressed
โช๏ธ LSB ๐ 0x99 ๐
โช๏ธ ๐๐โจ๏ธ ๐ฝV Xโโ๏ธ ๐
PCโ2 โก๏ธ ๐ PC
๐
๐
๐ญ skip next instruction if key with value of Vx is not pressed
๐
โช๏ธ LSB ๐ 0xA1 ๐
โช๏ธ โ๐๐โจ๏ธ ๐ฝV Xโโ๏ธโ๏ธ ๐
PCโ2 โก๏ธ ๐ PC
๐
๐
๐
๐
๐๐คreal bad has happen 0xEXYZ๐คโ
๐
๐
๐
โช๏ธ MSN ๐ 0xF ๐
๐ญ least significant byte (moob boon)
opcode๐ฎ0x100 โก๏ธ LSB
๐ญ set Vx = delay timer
โช๏ธ LSB ๐ 0x07 ๐
๐ญ ๐โ delay_timer
๐ญ โณdelay_timer
๐ดtimerโ โก๏ธ ๐ฝV Xโ
๐
๐ญ wait for keypress and store the value in Vx
๐
โช๏ธ LSB ๐ 0x0A ๐
โธ๐โจ๏ธโ๏ธ โก๏ธ ๐ฝV Xโ
๐
๐ญ set delay timer = Vx
๐
โช๏ธ LSB ๐ 0x15 ๐
๐คฌtimer ๐ฝV Xโโ
๐
๐ญ set sound timer = Vx
๐
โช๏ธ LSB ๐ 0x18 ๐
๐ญ just NOP
๐
๐ญ set I = I + Vx
๐
โช๏ธ LSB ๐ 0x1E ๐
Iโ๐ฝV Xโ โก๏ธ ๐ I
๐
๐ญ set I = location of sprite for digit Vx
๐
โช๏ธ LSB ๐ 0x29 ๐
๐ฝV Xโโ๏ธ5 โก๏ธ ๐I
๐
๐ญ store BCD representation of Vx in memory locations I, I+1, and I+2
๐
โช๏ธ LSB ๐ 0x33 ๐
๐ฝV Xโ๐ฎ10 โก๏ธ ๐ฝmemory Iโ
๐ค๐ฝV Xโโ10๐ค๐ฎ10 โก๏ธ ๐ฝmemory ๐คIโ1๐คโ
๐ค๐ฝV Xโโ100๐ค๐ฎ10 โก๏ธ ๐ฝmemory ๐คIโ2๐คโ
๐
๐ญ store registers V0 through Vx in memory starting at location I
๐
โช๏ธ LSB ๐ 0x55 ๐
๐ i ๐โฉ 0 Xโ ๐
๐ค๐ฝmemory ๐คIโiโ2โ1๐คโ๐8๐ค โ ๐ฝmemory ๐คIโiโ2๐คโ โก๏ธ ๐ฝV iโ
๐
๐
๐ญ read registers V0 through Vx from memory starting at location I
๐
โช๏ธ LSB ๐ 0x65 ๐
๐ i ๐โฉ 0 Xโ ๐
๐ฝV iโ๐ฎ0x100 โก๏ธ ๐ฝmemory ๐คIโiโ2๐คโ
๐ฝV iโ๐8 โก๏ธ ๐ฝmemory ๐คIโiโ2โ1๐คโ
๐
๐
๐
๐
๐๐คreal bad has happen 0xFXYZ๐คโ
๐
๐
๐
๐
๐๐คreal bad has happen 0xWXYZ๐คโ
๐
๐
๐ญ moob boon (translation: constructor)
๐ ๐
๐ฟ 0xF0 0x90 0x90 0x90 0xF0 0x20 0x60 0x20 0x20 0x70 0xF0 0x10 0xF0 0x80 0xF0 0xF0 0x10 0xF0 0x10 0xF0 0x90 0x90 0xF0 0x10 0x10 0xF0 0x80 0xF0 0x10 0xF0 0xF0 0x80 0xF0 0x90 0xF0 0xF0 0x10 0x20 0x40 0x40 0xF0 0x90 0xF0 0x90 0xF0 0xF0 0x90 0xF0 0x10 0xF0 0xF0 0x90 0xF0 0x90 0x90 0xE0 0x90 0xE0 0x90 0xE0 0xF0 0x80 0x80 0x80 0xF0 0xE0 0x90 0x90 0x90 0xE0 0xF0 0x80 0xF0 0x80 0xF0 0xF0 0x80 0xF0 0x80 0x80 ๐ โก๏ธ font
๐fontโ โก๏ธ len
๐ i ๐โฉ 0 lenโ ๐
๐ฝfont iโ โก๏ธ ๐ฝmemory iโ
๐
๐
๐
๐ ๐
๐ญ keyboard
๐ค๐โจ๏ธโ๏ธ
๐๐ฑโ โก๏ธ chip8
๐๏ธ๐๐ปโ โก๏ธ args
๐ญ ๐chip8 ๐ค./roms/IBM.ch8๐คโ
๐ญ ๐chip8 ๐ค./roms/Pong (alt).ch8๐คโ
๐chip8 ๐ฝargs 1โโ
๐โโ๏ธchip8โ
๐๐โจ๏ธโ๏ธ
๐ญ Timer
๐ญ ๐๐๐โ โก๏ธ hello
๐ญ ๐ ๐ค๐งฒhello๐งฒ๐คโ๏ธ
๐ญ testing timer shenanigans
๐ญ ๐๐๐ฑโ๏ธ
๐ญ โ๐โณโ๏ธโ3โ50 โก๏ธ boblov
๐ญ ๐ ๐ค๐งฒboblov๐งฒ๐คโ๏ธ
๐ญ still the timer
๐ญ ๐โโ โก๏ธ moobboon
๐ญ ๐คฌmoobboon 500โ
๐ญ ๐ i ๐โฉ 0 10000000โ ๐๐
๐ญ ๐ดmoobboonโ โก๏ธ ticks
๐ญ ๐ ๐ค๐งฒticks๐งฒ๐คโ๏ธ
๐ญ ๐ญ display in terminal
๐ญ ๐ ๐จ ๐๐ก๐ ๐คโโ๐ค 64 โ๏ธ โก๏ธ line
๐ญ ๐ ๐จ ๐๐จ๐๐ก๐๐ line 32 โ๏ธ โก๏ธ ๐๐box
๐ญ ๐ญ ๐ค ๐ค โก๏ธ ๐ฝ๐ฝbox 2โ 2โ modify pixels
๐ญ ๐ line box ๐
๐ญ ๐ char line ๐
๐ญ ๐ charโ๏ธ
๐ญ ๐
๐ญ ๐ ๐ค๐คโ๏ธ
๐ญ ๐
๐ญ ๐ด๐๐ป ๐คclear๐คโ
๐