Repository navigation
Expand file tree
/
Copy pathcomments.json
More file actions
603 lines (553 loc) · 40.6 KB
/
Copy pathcomments.json
File metadata and controls
603 lines (553 loc) · 40.6 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
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
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
[
{ "page": "0x000", "logical": "0xe000", "text": "$e000"},
{ "page": "0x000", "logical": "0xe003", "text": "$e003"},
{ "page": "0x000", "logical": "0xe006", "text": "$e006"},
{ "page": "0x000", "logical": "0xe009", "text": "$e009"},
{ "page": "0x000", "logical": "0xe00c", "text": "$e00c"},
{ "page": "0x000", "logical": "0xe00f", "text": "$e00f"},
{ "page": "0x000", "logical": "0xe012", "text": "$e012"},
{ "page": "0x000", "logical": "0xe015", "text": "$e015"},
{ "page": "0x000", "logical": "0xe018", "text": "$e018"},
{ "page": "0x000", "logical": "0xe01b", "text": "$e01b"},
{ "page": "0x000", "logical": "0xe01e", "text": "$e01e"},
{ "page": "0x000", "logical": "0xe021", "text": "$e021"},
{ "page": "0x000", "logical": "0xe024", "text": "$e024"},
{ "page": "0x000", "logical": "0xe027", "text": "$e027"},
{ "page": "0x000", "logical": "0xe02a", "text": "$e02a"},
{ "page": "0x000", "logical": "0xe02d", "text": "$e02d"},
{ "page": "0x000", "logical": "0xe030", "text": "$e030"},
{ "page": "0x000", "logical": "0xe033", "text": "$e033"},
{ "page": "0x000", "logical": "0xe036", "text": "$e036"},
{ "page": "0x000", "logical": "0xe039", "text": "$e039"},
{ "page": "0x000", "logical": "0xe03c", "text": "$e03c"},
{ "page": "0x000", "logical": "0xe03f", "text": "$e03f"},
{ "page": "0x000", "logical": "0xe042", "text": "$e042"},
{ "page": "0x000", "logical": "0xe045", "text": "$e045"},
{ "page": "0x000", "logical": "0xe048", "text": "$e048"},
{ "page": "0x000", "logical": "0xe04b", "text": "$e04b"},
{ "page": "0x000", "logical": "0xe04e", "text": "$e04e"},
{ "page": "0x000", "logical": "0xe051", "text": "$e051"},
{ "page": "0x000", "logical": "0xe054", "text": "$e054"},
{ "page": "0x000", "logical": "0xe057", "text": "$e057"},
{ "page": "0x000", "logical": "0xe05a", "text": "$e05a"},
{ "page": "0x000", "logical": "0xe05d", "text": "$e05d"},
{ "page": "0x000", "logical": "0xe060", "text": "$e060"},
{ "page": "0x000", "logical": "0xe063", "text": "$e063"},
{ "page": "0x000", "logical": "0xe066", "text": "$e066"},
{ "page": "0x000", "logical": "0xe069", "text": "$e069"},
{ "page": "0x000", "logical": "0xe06c", "text": "$e06c"},
{ "page": "0x000", "logical": "0xe06f", "text": "$e06f"},
{ "page": "0x000", "logical": "0xe072", "text": "$e072"},
{ "page": "0x000", "logical": "0xe075", "text": "$e075"},
{ "page": "0x000", "logical": "0xe078", "text": "$e078"},
{ "page": "0x000", "logical": "0xe07b", "text": "$e07b"},
{ "page": "0x000", "logical": "0xe07e", "text": "$e07e"},
{ "page": "0x000", "logical": "0xe081", "text": "$e081"},
{ "page": "0x000", "logical": "0xe084", "text": "$e084"},
{ "page": "0x000", "logical": "0xe087", "text": "$e087"},
{ "page": "0x000", "logical": "0xe08a", "text": "$e08a"},
{ "page": "0x000", "logical": "0xe08d", "text": "$e08d"},
{ "page": "0x000", "logical": "0xe090", "text": "$e090"},
{ "page": "0x000", "logical": "0xe093", "text": "$e093"},
{ "page": "0x000", "logical": "0xe096", "text": "$e096"},
{ "page": "0x000", "logical": "0xe099", "text": "$e099"},
{ "page": "0x000", "logical": "0xe09c", "text": "$e09c"},
{ "page": "0x000", "logical": "0xe09f", "text": "$e09f"},
{ "page": "0x000", "logical": "0xe0a2", "text": "$e0a2"},
{ "page": "0x000", "logical": "0xe0a5", "text": "$e0a5"},
{ "page": "0x000", "logical": "0xe0a8", "text": "$e0a8"},
{ "page": "0x000", "logical": "0xe0ab", "text": "$e0ab"},
{ "page": "0x000", "logical": "0xe0ae", "text": "$e0ae"},
{ "page": "0x000", "logical": "0xe0b1", "text": "$e0b1"},
{ "page": "0x000", "logical": "0xe0b4", "text": "$e0b4"},
{ "page": "0x000", "logical": "0xe0b7", "text": "$e0b7"},
{ "page": "0x000", "logical": "0xe0ba", "text": "$e0ba"},
{ "page": "0x000", "logical": "0xe0bd", "text": "$e0bd"},
{ "page": "0x000", "logical": "0xe0c0", "text": "$e0c0"},
{ "page": "0x000", "logical": "0xe0c3", "text": "$e0c3"},
{ "page": "0x000", "logical": "0xe0c6", "text": "$e0c6"},
{ "page": "0x000", "logical": "0xe0c9", "text": "$e0c9"},
{ "page": "0x000", "logical": "0xe0cc", "text": "$e0cc"},
{ "page": "0x000", "logical": "0xe0cf", "text": "$e0cf"},
{ "page": "0x000", "logical": "0xe0d2", "text": "$e0d2"},
{ "page": "0x000", "logical": "0xe0d5", "text": "$e0d5"},
{ "page": "0x000", "logical": "0xe0d8", "text": "$e0d8"},
{ "page": "0x000", "logical": "0xe0db", "text": "$e0db"},
{ "page": "0x000", "logical": "0xe0de", "text": "$e0de"},
{ "page": "0x000", "logical": "0xe0e1", "text": "$e0e1"},
{ "page": "0x000", "logical": "0xe0e4", "text": "$e0e4"},
{ "page": "0x000", "logical": "0xe0e7", "text": "$e0e7"},
{ "page": "0x000", "logical": "0xe0ea", "text": "$e0ea"},
{ "page": "0x000", "logical": "0xe0ed", "text": "$e0ed"},
{ "page": "0x000", "logical": "0xe0f0", "text": "$e0f0"},
{ "page": "0x000", "logical": "0xe0f3", "text": "$e0f3"},
{ "page": "0x000", "logical": "0xe0f6", "text": "$e0f6"},
{ "page": "0x000", "logical": "0xe0f9", "text": "$e0f9"},
{ "page": "0x000", "logical": "0xe0fc", "text": "$e0fc"},
{ "page": "0x000", "logical": "0xe0ff", "text": "$e0ff"},
{ "page": "0x000", "logical": "0xe102", "text": "$e102"},
{ "page": "0x000", "logical": "0xe105", "text": "$e105"},
{ "page": "0x000", "logical": "0xe108", "text": "$e108"},
{ "page": "0x000", "logical": "0xe10b", "text": "$e10b"},
{ "page": "0x000", "logical": "0xe10e", "text": "$e10e"},
{ "page": "0x000", "logical": "0xe111", "text": "$e111"},
{ "page": "0x000", "logical": "0xe181", "text": "output buffer lsb"},
{ "page": "0x000", "logical": "0xe185", "text": "output buffer msb"},
{ "page": "0x000", "logical": "0xe189", "text": "get dir info de 00"},
{ "page": "0x000", "logical": "0xe193", "text": "output buffer lsb"},
{ "page": "0x000", "logical": "0xe197", "text": "output buffer lsb"},
{ "page": "0x000", "logical": "0xe19b", "text": "get dir info de 01"},
{ "page": "0x000", "logical": "0xe22a", "text": "setting bit 2 will reset CDROM hardware"},
{ "page": "0x000", "logical": "0xe237", "text": "reset bit 2"},
{ "page": "0x000", "logical": "0xe23f", "text": "wait a little longer"},
{ "page": "0x000", "logical": "0xe24e", "text": "get SCSI status code"},
{ "page": "0x000", "logical": "0xe255", "text": "process subcode error"},
{ "page": "0x000", "logical": "0xe258", "text": "and try to resend command if possible"},
{ "page": "0x000", "logical": "0xe267", "text": "it will wait for A*(loop cycles)"},
{ "page": "0x000", "logical": "0xe269", "text": "2"},
{ "page": "0x000", "logical": "0xe26b", "text": "2"},
{ "page": "0x000", "logical": "0xe26d", "text": "2"},
{ "page": "0x000", "logical": "0xe26e", "text": "4 (2 if the branch is not taken)"},
{ "page": "0x000", "logical": "0xe270", "text": "2"},
{ "page": "0x000", "logical": "0xe271", "text": "4 (2 if the branch is not taken)"},
{ "page": "0x000", "logical": "0xe273", "text": "= 7962 cycles"},
{ "page": "0x000", "logical": "0xe27b", "text": "initiator (PCE) set /ACK signal to 1"},
{ "page": "0x000", "logical": "0xe27e", "text": "wait for target (CD) to set /REQ signal to 0"},
{ "page": "0x000", "logical": "0xe285", "text": "initiator (PCE) set /ACK signal to 0"},
{ "page": "0x000", "logical": "0xe28e", "text": "try to send command prefix $81, $ff"},
{ "page": "0x000", "logical": "0xe299", "text": "flush command buffer"},
{ "page": "0x000", "logical": "0xe2dc", "text": "get cd status"},
{ "page": "0x000", "logical": "0xe2f8", "text": "send command buffer"},
{ "page": "0x000", "logical": "0xe341", "text": "clears the 9 bytes starting at $2211"},
{ "page": "0x000", "logical": "0xe363", "text": "backup MPR 6"},
{ "page": "0x000", "logical": "0xe36d", "text": "map CDROM RAM"},
{ "page": "0x000", "logical": "0xe371", "text": "dest: $c000"},
{ "page": "0x000", "logical": "0xe379", "text": "len: 8 KBytes"},
{ "page": "0x000", "logical": "0xe384", "text": "check if the CD read is successful"},
{ "page": "0x000", "logical": "0xe388", "text": "next 8KB RAM"},
{ "page": "0x000", "logical": "0xe38a", "text": "we just read 8KB (4 sectors)"},
{ "page": "0x000", "logical": "0xe38f", "text": "repeat until we read all sectors"},
{ "page": "0x000", "logical": "0xe393", "text": "restore MPR 6"},
{ "page": "0x000", "logical": "0xe3b8", "text": "copy data to VRAM"},
{ "page": "0x000", "logical": "0xe40f", "text": "negates the number of bytes to read" },
{ "page": "0x000", "logical": "0xe412", "text": "wait until cdrom is ready" },
{ "page": "0x000", "logical": "0xe41c", "text": "data can be read" },
{ "page": "0x000", "logical": "0xe420", "text": "cd is unavailable" },
{ "page": "0x000", "logical": "0xe427", "text": "is this some write overflow test?" },
{ "page": "0x000", "logical": "0xe42d", "text": "wait ..." },
{ "page": "0x000", "logical": "0xe432", "text": "you can't read more than 8*256 bytes (a whole sector)" },
{ "page": "0x000", "logical": "0xe439", "text": "check if we read all the requested number of bytes" },
{ "page": "0x000", "logical": "0xe444", "text": "we wrote 256 bytes, so we increase the MSB of the output pointer" },
{ "page": "0x000", "logical": "0xe446", "text": "check if we read a whole sector" },
{"page": "0x000", "logical": "0xe532", "text": "unit attention"},
{"page": "0x000", "logical": "0xe536", "text": "not ready"},
{"page": "0x000", "logical": "0xe549", "text": "not ready"},
{"page": "0x000", "logical": "0xe54d", "text": "data field incorrect"},
{"page": "0x000", "logical": "0xe551", "text": "seek eerror"},
{"page": "0x000", "logical": "0xe555", "text": "header read error"},
{"page": "0x000", "logical": "0xe559", "text": "no disc"},
{"page": "0x000", "logical": "0xe55d", "text": "cover open"},
{"page": "0x000", "logical": "0xe561", "text": "not a digital audio track"},
{"page": "0x000", "logical": "0xe565", "text": "not a cdrom data track"},
{"page": "0x000", "logical": "0xe569", "text": "invalid command"},
{"page": "0x000", "logical": "0xe56d", "text": "???"},
{"page": "0x000", "logical": "0xe571", "text": "end of volume"},
{"page": "0x000", "logical": "0xe575", "text": "invalid parameter"},
{"page": "0x000", "logical": "0xe579", "text": "audio not playing"},
{ "page": "0x000", "logical": "0xe679", "text": "pause" },
{ "page": "0x000", "logical": "0xe698", "text": "read subchannel Q" },
{ "page": "0x000", "logical": "0xe738", "text": "ad_read ?" },
{ "page": "0x000", "logical": "0xe756", "text": "read" },
{ "page": "0x000", "logical": "0xe7a1", "text": "clear all bits except bits 4 and 7" },
{"page": "0x000", "logical": "0xe86b", "text": "2019 contains a copy of cd_control" },
{"page": "0x000", "logical": "0xe872", "text": "bit 2 is set : adpcm sample playback in progress / half end" },
{"page": "0x000", "logical": "0xe874", "text": "reset bit 3 of cd_control" },
{"page": "0x000", "logical": "0xe877", "text": "do the same on the shadow register" },
{"page": "0x000", "logical": "0xe87f", "text": "bit 5 is set: data transfer done?" },
{"page": "0x000", "logical": "0xe881", "text": "clear bit 5" },
{"page": "0x000", "logical": "0xe8dc", "text": "subchannel fifo something ?" },
{"page": "0x000", "logical": "0xe8f1", "text": "adpcm end reached" },
{ "page": "0x000", "logical": "0xe903", "text": "backup status register onto the stack" },
{ "page": "0x000", "logical": "0xe904", "text": "disable interrupts" },
{ "page": "0x000", "logical": "0xe905", "text": "reset process list lock" },
{ "page": "0x000", "logical": "0xe908", "text": "set the 5th entry" },
{ "page": "0x000", "logical": "0xe90a", "text": "the routine will be gx_wait_forever" },
{ "page": "0x000", "logical": "0xe916", "text": "set the routine stack offset" },
{ "page": "0x000", "logical": "0xe91b", "text": [
"bit 0 => ??",
" 1 => the proc execution is delayed",
" 2 => the proc will be run",
" 3 => ??",
" ....",
" 7 => \"mute\" proc"
]},
{ "page": "0x000", "logical": "0xe91e", "text": "flag or'ed after the proc is run" },
{ "page": "0x000", "logical": "0xe922", "text": "clear the rest of the proc list" },
{ "page": "0x000", "logical": "0xe93d", "text": "restore status register"},
{ "page": "0x000", "logical": "0xe93f", "text": "Count the number of process to run."},
{ "page": "0x000", "logical": "0xe94f", "text": "backup status register" },
{ "page": "0x000", "logical": "0xe950", "text": "deactivate interrupts" },
{ "page": "0x000", "logical": "0xe951", "text": "clear process delay" },
{ "page": "0x000", "logical": "0xe954", "text": "mark it for execution" },
{ "page": "0x000", "logical": "0xe959", "text": "restore status register" },
{ "page": "0x000", "logical": "0xe95b", "text": "bank: $000 logical: $e95b" },
{ "page": "0x000", "logical": "0xe95b", "text": "locl list" },
{ "page": "0x000", "logical": "0xe967", "text": "load proc address" },
{ "page": "0x000", "logical": "0xe974", "text": "stack pointer" },
{ "page": "0x000", "logical": "0xe97a", "text": "\"return\" flag" },
{ "page": "0x000", "logical": "0xe981", "text": "reset status register" },
{ "page": "0x000", "logical": "0xe986", "text": "mark the process for execution" },
{ "page": "0x000", "logical": "0xe989", "text": "go through the process list and run the first available one" },
{ "page": "0x000", "logical": "0xe98c", "text": "lock process list"},
{ "page": "0x000", "logical": "0xe991", "text": "set data pointer"},
{ "page": "0x000", "logical": "0xe996", "text": "search for the first empty entry in the process list"},
{ "page": "0x000", "logical": "0xe999", "text": "what's inside 228b and onwards?"},
{ "page": "0x000", "logical": "0xe99e", "text": "!! warning !! should be cpx?!"},
{ "page": "0x000", "logical": "0xe9a2", "text": "trigger IRQ2 => run process list ?"},
{ "page": "0x000", "logical": "0xe9aa", "text": "load proc address"},
{ "page": "0x000", "logical": "0xe9b5", "text": "stack offset"},
{ "page": "0x000", "logical": "0xe9bb", "text": "flag?"},
{ "page": "0x000", "logical": "0xe9c7", "text": "unlock process list"},
{ "page": "0x000", "logical": "0xe9d4", "text": "see if lower priority process are waiting to be run" },
{ "page": "0x000", "logical": "0xe9eb", "text": "use the last proc" },
{ "page": "0x000", "logical": "0xe9ee", "text": "backup X register" },
{ "page": "0x000", "logical": "0xe9f2", "text": "backup Y register" },
{ "page": "0x000", "logical": "0xe9f7", "text": "set delay" },
{ "page": "0x000", "logical": "0xe9fb", "text": "backup status flag" },
{ "page": "0x000", "logical": "0xe9fe", "text": "the proc address will be the return" },
{ "page": "0x000", "logical": "0xe9ff", "text": "address on the stack" },
{ "page": "0x000", "logical": "0xea0c", "text": "backup stack pointer offset" },
{ "page": "0x000", "logical": "0xea11", "text": "set flag ?" },
{ "page": "0x000", "logical": "0xea16", "text": "process IRQ2/CD proc and wait until IRQ1 is triggered" },
{ "page": "0x000", "logical": "0xea1a", "text": "save registers" },
{ "page": "0x000", "logical": "0xea1d", "text": "A" },
{ "page": "0x000", "logical": "0xea21", "text": "X" },
{ "page": "0x000", "logical": "0xea25", "text": "Y" },
{ "page": "0x000", "logical": "0xea29", "text": "status" },
{ "page": "0x000", "logical": "0xea2d", "text": "return address (LSB) " },
{ "page": "0x000", "logical": "0xea31", "text": " (MSB)" },
{ "page": "0x000", "logical": "0xea37", "text": "save stack offset" },
{ "page": "0x000", "logical": "0xea3c", "text": "it will be run on the next pass" },
{ "page": "0x000", "logical": "0xea3f", "text": "now process the list" },
{ "page": "0x000", "logical": "0xea48", "text": "update delay" },
{ "page": "0x000", "logical": "0xea4d", "text": "run the proc when it reaches 0" },
{ "page": "0x000", "logical": "0xea5b", "text": "find the next proc to run" },
{ "page": "0x000", "logical": "0xea67", "text": "trigger IRQ2" },
{ "page": "0x000", "logical": "0xea68", "text": "enable interrupts" },
{ "page": "0x000", "logical": "0xea6b", "text": "" },
{ "page": "0x000", "logical": "0xea73", "text": "update flag" },
{ "page": "0x000", "logical": "0xea76", "text": "future Y reg" },
{ "page": "0x000", "logical": "0xea7a", "text": "stack offset" },
{ "page": "0x000", "logical": "0xea80", "text": "proc MSB" },
{ "page": "0x000", "logical": "0xea84", "text": "proc LSB" },
{ "page": "0x000", "logical": "0xea88", "text": "status register" },
{ "page": "0x000", "logical": "0xea8c", "text": "future X reg" },
{ "page": "0x000", "logical": "0xea96", "text": "future A reg" },
{ "page": "0x000", "logical": "0xea9a", "text": "jump to the proc" },
{ "page": "0x000", "logical": "0xeab3", "text": "bank: $000 logical: $eab3" },
{ "page": "0x000", "logical": "0xeab3", "text": "switch CPU to high speed mode" },
{ "page": "0x000", "logical": "0xeab4", "text": "disable interrupts" },
{ "page": "0x000", "logical": "0xeab5", "text": "clear decimal flag" },
{ "page": "0x000", "logical": "0xeab6", "text": "map I/O to the 1st memory page" },
{ "page": "0x000", "logical": "0xeaba", "text": "map RAM to the 2nd memory page" },
{ "page": "0x000", "logical": "0xeabe", "text": "clear zero page" },
{ "page": "0x000", "logical": "0xeac7", "text": "clear bss" },
{ "page": "0x000", "logical": "0xead1", "text": "bank: $000 logical: $ead1" },
{ "page": "0x000", "logical": "0xead1", "text": "disable interrupts" },
{ "page": "0x000", "logical": "0xead2", "text": "disable CPU timer" },
{ "page": "0x000", "logical": "0xead5", "text": "switch CPU to high speed mode" },
{ "page": "0x000", "logical": "0xead6", "text": "reset stack pointer" },
{ "page": "0x000", "logical": "0xead9", "text": "what is 22bf used for? " },
{ "page": "0x000", "logical": "0xeae1", "text": "map 1st ROM bank to the 6th memory page" },
{ "page": "0x000", "logical": "0xeae5", "text": "reset process list" },
{ "page": "0x000", "logical": "0xeae8", "text": "jump to main routine" },
{ "page": "0x000", "logical": "0xeaeb", "text": "reset scroll window MSB [todo]" },
{ "page": "0x000", "logical": "0xeaed", "text": "reset scroll window index" },
{ "page": "0x000", "logical": "0xeb1b", "text": "enable display (background and sprites)" },
{ "page": "0x000", "logical": "0xeb4e", "text": "disable display." },
{ "page": "0x000", "logical": "0xeb7c", "text": "vertical synchro register" },
{ "page": "0x000", "logical": "0xeb8d", "text": "vertical display register" },
{ "page": "0x000", "logical": "0xebb3", "text": "test for VRAM to SATB transfer end" },
{ "page": "0x000", "logical": "0xebbd", "text": "the source address ping/pong betweens $0800 and $0900" },
{ "page": "0x000", "logical": "0xebbf", "text": "set VRAM SATB source address" },
{ "page": "0x000", "logical": "0xebc8", "text": "test for sprites overflow " },
{ "page": "0x000", "logical": "0xebcc", "text": "?!" },
{ "page": "0x000", "logical": "0xebd1", "text": "disable sprite overflow interrupt" },
{ "page": "0x000", "logical": "0xebdc", "text": "test for vsync" },
{ "page": "0x000", "logical": "0xebe5", "text": "[todo] scroll window data pointer MSB" },
{ "page": "0x000", "logical": "0xebe7", "text": "if != 0 => scroll window update else set scroll from \"global\" values" },
{ "page": "0x000", "logical": "0xebe9", "text": "set raster counter to 0 (no hsync?)" },
{ "page": "0x000", "logical": "0xebef", "text": "set X scroll" },
{ "page": "0x000", "logical": "0xebfb", "text": "??" },
{ "page": "0x000", "logical": "0xec05", "text": "set Y scroll" },
{ "page": "0x000", "logical": "0xec26", "text": "set scroll data pointer LSB" },
{ "page": "0x000", "logical": "0xec28", "text": "reset scroll window index" },
{ "page": "0x000", "logical": "0xec31", "text": "enable sprite overflow interrupt" },
{ "page": "0x000", "logical": "0xec6f", "text": "$2038 => current hsync op [todo] where $2036-$2038 are set?" },
{ "page": "0x000", "logical": "0xec71", "text": "$2036 => hsync op" },
{ "page": "0x000", "logical": "0xec73", "text": "$80 => end" },
{ "page": "0x000", "logical": "0xec75", "text": "0 => set X and Y scroll register (values taken from hsync op)" },
{ "page": "0x000", "logical": "0xec78", "text": "1 => set X scroll register only (values taken from hsync op)" },
{ "page": "0x000", "logical": "0xec7b", "text": "2 => set Y scroll register only (values taken from hsync op)" },
{ "page": "0x000", "logical": "0xec7e", "text": "3 => set X and Y scroll register" },
{ "page": "0x000", "logical": "0xec81", "text": "other => set control register" },
{ "page": "0x000", "logical": "0xec8d", "text": "set X and Y scroll register (same as 0)" },
{ "page": "0x000", "logical": "0xecba", "text": "set next rcr" },
{ "page": "0x000", "logical": "0xecbd", "text": "set Y scroll register" },
{ "page": "0x000", "logical": "0xeccc", "text": "set next RCR" },
{ "page": "0x000", "logical": "0xece1", "text": "set X scroll register" },
{ "page": "0x000", "logical": "0xecef", "text": "then set Y scroll register" },
{ "page": "0x000", "logical": "0xecf5", "text": "set next rcr" },
{ "page": "0x000", "logical": "0xed00", "text": "save index" },
{ "page": "0x000" , "logical": "0xed17", "text": "remap source pointer" },
{ "page": "0x000" , "logical": "0xed19", "text": " while ptr.hi >= 0x60" },
{ "page": "0x000" , "logical": "0xed1b", "text": " ptr.hi -= 0x20" },
{ "page": "0x000" , "logical": "0xed1d", "text": " bank++" },
{ "page": "0x000" , "logical": "0xed27", "text": "disable sprite and background display" },
{ "page": "0x000" , "logical": "0xed37", "text": "set VRAM write pointer" },
{ "page": "0x000" , "logical": "0xed4a", "text": "write to VRAM data register" },
{ "page": "0x000" , "logical": "0xed51", "text": "$22c3.w = $22c2.w << 1" },
{ "page": "0x000" , "logical": "0xed54", "text": "Why?" },
{ "page": "0x000" , "logical": "0xed5f", "text": "save mpr #2 to $22c8" },
{ "page": "0x000" , "logical": "0xed64", "text": "save mpr #3 to $22c9" },
{ "page": "0x000" , "logical": "0xed69", "text": "map $22c7 to mpr #2 and the next one to mpr #3" },
{ "page": "0x000" , "logical": "0xed71", "text": "1st byte : bloc count ?" },
{ "page": "0x000" , "logical": "0xed76", "text": "$203a.w += 1" },
{ "page": "0x000", "logical": "0xed85", "text": "VDC Control register" },
{ "page": "0x000", "logical": "0xed8c", "text": "set auto increment to 1" },
{ "page": "0x000", "logical": "0xed95", "text": "set VRAM write pointer" },
{ "page": "0x000", "logical": "0xed9c", "text": "VRAM address LSB" },
{ "page": "0x000", "logical": "0xeda2", "text": "VRAM address MSB" },
{ "page": "0x000", "logical": "0xeda8", "text": "write to VRAM data register" },
{ "page": "0x000", "logical": "0xedaf", "text": "save mpr #2 to $22c8" },
{ "page": "0x000", "logical": "0xedb4", "text": "save mpr #3 to $22c9" },
{ "page": "0x000", "logical": "0xedb9", "text": " map $22c7 to mpr #2 and the next one to mpr #3" },
{ "page": "0x000", "logical": "0xedcb", "text": "remap pointer " },
{ "page": "0x000", "logical": "0xeddc", "text": "this is some kind of control byte?" },
{ "page": "0x000", "logical": "0xedde", "text": "$ff: end of data stream?" },
{ "page": "0x000", "logical": "0xede4", "text": "bit 7 cleared" },
{ "page": "0x000", "logical": "0xede8", "text": "bit 6 cleared" },
{ "page": "0x000", "logical": "0xee66", "text": "looks like some RLE encoding?" },
{ "page": "0x000", "logical": "0xeea5", "text": "RLE encoding but with a word?" },
{ "page": "0x000", "logical": "0xeed7", "text": "raw data copy?" },
{ "page": "0x000", "logical": "0xf03c", "text": "BAT size: 32x64"},
{ "page": "0x000", "logical": "0xf03f", "text": "horizontal resolution: 256px"},
{ "page": "0x000", "logical": "0xf04f", "text": "blur edges + 5MHz dot clock" },
{ "page": "0x000", "logical": "0xf053", "text": "blur edges + 7MHz dot clock" },
{ "page": "0x000", "logical": "0xf058", "text": "clear all palette colors" },
{ "page": "0x000", "logical": "0xf05b", "text": "well... there's only 512 color entries" },
{ "page": "0x000", "logical": "0xf05e", "text": "but this loops set 4*256=1024 colors to 0." },
{ "page": "0x000", "logical": "0xf091", "text": "VDC control register" },
{ "page": "0x000", "logical": "0xf09a", "text": "Clear out r/w address auto increment" },
{ "page": "0x000", "logical": "0xf09c", "text": "and fetch it from a table" },
{ "page": "0x000" , "logical": "0xf104", "text": "Vertical Display Register" },
{ "page": "0x000" , "logical": "0xf117", "text": "Vertical Synchro Register" },
{ "page": "0x000" , "logical": "0xf12a", "text": "Vertical Display End Position Register" },
{ "page": "0x000" , "logical": "0xf13d", "text": "VRAM data register" },
{ "page": "0x000", "logical": "0xf145", "text": "set VRAM auto-increment to 1." },
{ "page": "0x000", "logical": "0xf149", "text": "set VRAM write pointer to $0000" },
{ "page": "0x000", "logical": "0xf154", "text": "switch to VRAM data register" },
{ "page": "0x000", "logical": "0xf15d", "text": "$0800 = 32*64" },
{ "page": "0x000", "logical": "0xf180", "text": "disable IRQ1 and IRQ2" },
{ "page": "0x000", "logical": "0xf185", "text": "VDC control register" },
{ "page": "0x000", "logical": "0xf59f", "text": "Load char?" },
{ "page": "0x000", "logical": "0xf5a1", "text": "stop if A equals 0" },
{ "page": "0x000", "logical": "0xf5a1", "text": "loop until Y >= 128" },
{ "page": "0x000", "logical": "0xf5aa", "text": "backup A" },
{ "page": "0x000", "logical": "0xf5ab", "text": "A = A>>4" },
{ "page": "0x000", "logical": "0xf5fA", "text": "compute BAT address = (A*64) + X" },
{ "page": "0x000", "logical": "0xf602", "text": "$01 = high(A*64)" },
{ "page": "0x000", "logical": "0xf607", "text": "$00 = low(A*64) | X" },
{ "page": "0x000", "logical": "0xf609", "text": "set VRAM MAWR register" },
{ "page": "0x000", "logical": "0xf61a", "text": "switch to VRAM Data Register" },
{ "page": "0x000", "logical": "0xf8a4", "text": "reset cdrom drive" },
{ "page": "0x000", "logical": "0xf8ad", "text": "add the menu to process list" },
{ "page": "0x000", "logical": "0xf8c7", "text": "check if the game is running on a Super CDRom 2" },
{ "page": "0x000", "logical": "0xf8d5", "text": "this is a Super CDRom 2" },
{ "page": "0x000", "logical": "0xf8df", "text": "Super CDROM 2 has 64 KB of extra RAM starging at segment $80" },
{ "page": "0x000", "logical": "0xf8e1", "text": "and 192 KB starting at $64" },
{ "page": "0x000", "logical": "0xf8e4", "text": "so there's a total of 256KB of extram (32x8KB)" },
{ "page": "0x000", "logical": "0xf8eb", "text": "here it assumes it is an IFU-30 (weird things will happen on a stock pcengine) " },
{ "page": "0x000", "logical": "0xf8ed", "text": "extra work RAM starts at segment $80" },
{ "page": "0x000", "logical": "0xf8f2", "text": "and it's 64 KB (8x8KB)" },
{ "page": "0x000", "logical": "0xf942", "text": "search for \"BOOT.BIN\" file" },
{ "page": "0x000", "logical": "0xf94f", "text": "search and try to load \"BOOT.BIN\"" },
{ "page": "0x000", "logical": "0xf954", "text": "\"BOOT.BIN\" was not found" },
{ "page": "0x000", "logical": "0xf96b", "text": "jump to \"BOOT.BIN\"" },
{ "page": "0x000", "logical": "0xf972", "text": "display error message" },
{ "page": "0x000", "logical": "0xf975", "text": "\"reset\" after a while" },
{ "page": "0x000", "logical": "0xf99a", "text": "fill 2791 to 27a1 with ff" },
{ "page": "0x000", "logical": "0xf9ab", "text": "sprite collision + scanline interrupt = ON, vertical blanking interrupt = OFF" },
{ "page": "0x000", "logical": "0xf9b9", "text": "VRAM write pointer" },
{ "page": "0x000", "logical": "0xf9c1", "text": "set VRAM write pointer to SATB" },
{ "page": "0x000", "logical": "0xf9c5", "text": "VRAM data register" },
{ "page": "0x000", "logical": "0xf9cf", "text": "clear whole SATB entries" },
{ "page": "0x000", "logical": "0xf9df", "text": "32 bytes = 1 SATB entry" },
{ "page": "0x000", "logical": "0xf9ef", "text": "while A >= 16" },
{ "page": "0x000", "logical": "0xf9f1", "text": " A >>= 1" },
{ "page": "0x000", "logical": "0xfa69", "text": "set VRAM write pointer" },
{ "page": "0x000", "logical": "0xfa74", "text": "SATB is alternatively set between $0800 and $0900." },
{ "page": "0x000", "logical": "0xfa82", "text": "set VRAM write latch" },
{ "page": "0x000", "logical": "0xfb04", "text": "entry count" },
{ "page": "0x000", "logical": "0xfb0a", "text": "set VRAM write pointer" },
{ "page": "0x000", "logical": "0xfb0a", "text": "set VRAM write pointer" },
{ "page": "0x000", "logical": "0xfb14", "text": "Y LSB" },
{ "page": "0x000", "logical": "0xfb1d", "text": "Y MSB" },
{ "page": "0x000", "logical": "0xfb27", "text": "X LSB" },
{ "page": "0x000", "logical": "0xfb30", "text": "X MSB" },
{ "page": "0x000", "logical": "0xfb39", "text": "Pattern address MSB" },
{ "page": "0x000", "logical": "0xfb42", "text": "Pattern address LSB" },
{ "page": "0x000", "logical": "0xfb4c", "text": "Palette index + priority" },
{ "page": "0x000", "logical": "0xfb52", "text": "Width + horizontal flip + height + vertical flip" },
{ "page": "0x000", "logical": "0xfbf8", "text": "load ?? lsb to $204e" },
{ "page": "0x000", "logical": "0xfbfd", "text": "load ?? msb to $204f" },
{ "page": "0x000", "logical": "0xfc03", "text": "load ?? to $27b7" },
{ "page": "0x000", "logical": "0xfc0a", "text": "load ?? to $27b3" },
{ "page": "0x000", "logical": "0xfc10", "text": "load ?? to $27b4" },
{ "page": "0x000", "logical": "0xfce6", "text": "remap pointer" },
{ "page": "0x000", "logical": "0xfcec", "text": "next page/bank" },
{ "page": "0x000", "logical": "0xfcf3", "text": "save mpr 2" },
{ "page": "0x000", "logical": "0xfcf8", "text": "save mpr 3" },
{ "page": "0x000", "logical": "0xfcfd", "text": "map source page to mpr 2 and 3" },
{ "page": "0x000", "logical": "0xfd05", "text": "$27b8 = [$54]" },
{ "page": "0x000", "logical": "0xfd07", "text": "encoded sequence count" },
{ "page": "0x000", "logical": "0xfd0a", "text": "increment source pointer" },
{ "page": "0x000", "logical": "0xfd11", "text": "remap source pointer if nedeed" },
{ "page": "0x000", "logical": "0xfd26", "text": "$ff: empty sequence" },
{ "page": "0x000", "logical": "0xfd2a", "text": "raw copy or incremental sequence" },
{ "page": "0x000", "logical": "0xfd2e", "text": "the data is rle encoded (either word or byte)" },
{ "page": "0x000", "logical": "0xfd33", "text": "increment source pointer" },
{ "page": "0x000", "logical": "0xfd3c", "text": "loop until there is something to decode" },
{ "page": "0x000", "logical": "0xfd3e", "text": "restore mpr 2" },
{ "page": "0x000", "logical": "0xfd43", "text": "restore mpr 3" },
{ "page": "0x000", "logical": "0xfd4d", "text": "count" },
{ "page": "0x000", "logical": "0xfd50", "text": "incremement source pointer" },
{ "page": "0x000", "logical": "0xfd5f", "text": "update destination pointer (dest += count)" },
{ "page": "0x000", "logical": "0xfd69", "text": "update source pointer (src += count)" },
{ "page": "0x000", "logical": "0xfd78", "text": "count" },
{ "page": "0x000", "logical": "0xfd7b", "text": "value" },
{ "page": "0x000", "logical": "0xfd84", "text": "move source pointer past count+value" },
{ "page": "0x000", "logical": "0xfd91", "text": "update destination pointer (dest += count)" },
{ "page": "0x000", "logical": "0xfd9e", "text": "count" },
{ "page": "0x000", "logical": "0xfda3", "text": "sequence start lsb" },
{ "page": "0x000", "logical": "0xfda8", "text": "sequence start msb" },
{ "page": "0x000", "logical": "0xfdac", "text": "source pointer += 3" },
{ "page": "0x000", "logical": "0xfdba", "text": "[destination] = sequence++" },
{ "page": "0x000", "logical": "0xfdce", "text": "update destination pointer (dest += 2*count)" },
{ "page": "0x000", "logical": "0xfddb", "text": "count" },
{ "page": "0x000", "logical": "0xfdde", "text": "value lsb" },
{ "page": "0x000", "logical": "0xfde5", "text": "value msb" },
{ "page": "0x000", "logical": "0xfdea", "text": "move pointer past count+value" },
{ "page": "0x000", "logical": "0xfdf6", "text": "copy X times the word to destination" },
{ "page": "0x000", "logical": "0xfe04", "text": "update destination pointer (dest += 2*count)" },
{ "page": "0x000", "logical": "0xfe12", "text": "add 2047 to the 32 bit value" },
{ "page": "0x000", "logical": "0xfe26", "text": "multiply by 32" },
{ "page": "0x000", "logical": "0xfe33", "text": "as 2048*32 = 65536, getting the 2 upper bytes will give us the sector count" },
{ "page": "0x000", "logical": "0xfe4c", "text": "sector mid ?" },
{ "page": "0x000", "logical": "0xfe4f", "text": "sector hi ?" },
{ "page": "0x000", "logical": "0xfe54", "text": "sector lo ?" },
{ "page": "0x000", "logical": "0xfe59", "text": "sector count ?" },
{ "page": "0x000", "logical": "0xfe5c", "text": "read sector routine ?" },
{ "page": "0x000", "logical": "0xfe61", "text": "check for primary volume descriptor identifier" },
{ "page": "0x000", "logical": "0xfe6f", "text": "location of the extent (LBA) (little endian)." },
{ "page": "0x000", "logical": "0xfe76", "text": "data length (size of the extent) (little endian)" },
{ "page": "0x000", "logical": "0xfe7d", "text": "byte size to sector count?" },
{ "page": "0x000", "logical": "0xfe88", "text": "read root dir extent (trk: 1, off: 14h, cnt: 1)" },
{ "page": "0x000", "logical": "0xfe9b", "text": "load all entries and keep a copy in RAM" },
{ "page": "0x001", "logical": "0xc003", "text": "reset scrolling coordinates" },
{ "page": "0x001", "logical": "0xc00b", "text": "upload complete palette (all 512 colors)" },
{ "page": "0x001", "logical": "0xc019", "text": "set vram r/w auto increment to 1" },
{ "page": "0x001", "logical": "0xc01c", "text": "VRAM write pointer set to $0000 (BAT)" },
{ "page": "0x001", "logical": "0xc027", "text": "copy the whole BAT" },
{ "page": "0x001", "logical": "0xc037", "text": "bank: $01" },
{ "page": "0x001", "logical": "0xc041", "text": "VRAM destination: $1000" },
{ "page": "0x001", "logical": "0xc04a", "text": "source: $4d5f" },
{ "page": "0x001", "logical": "0xc05c", "text": "make the error message blink for 5 seconds (10 * (10 + 20) frames)" },
{ "page": "0x001", "logical": "0xc064", "text": "wait for 10 frames" },
{ "page": "0x001", "logical": "0xc072", "text": "update SATB" },
{ "page": "0x001", "logical": "0xc077", "text": "wait for 20 frames" },
{ "page": "0x001", "logical": "0xc087", "text": "wait for run button o be pressed." },
{ "page": "0x001", "logical": "0xc08a", "text": "get joypad 0 state" },
{ "page": "0x001", "logical": "0xc08d", "text": "check if RUN bit is set" },
{ "page": "0x001", "logical": "0xc0b1", "text": "c0f2 (set a disk)" },
{ "page": "0x001", "logical": "0xc0b7", "text": "update SATB" },
{ "page": "0x001", "logical": "0xc0ba", "text": "wait 30 frames" },
{ "page": "0x001", "logical": "0xc0c5", "text": "c10b (and)" },
{ "page": "0x001", "logical": "0xc0ce", "text": "wait 30 frames" },
{ "page": "0x001", "logical": "0xc0d9", "text": "c11c (push run button)" },
{ "page": "0x001", "logical": "0xc0e2", "text": "wait 30 frames" },
{ "page": "0x001", "logical": "0xc0ea", "text": "wait 20 frames" },
{ "page": "0x001", "logical": "0xc0f2", "text": "3 SATB entries" },
{ "page": "0x001", "logical": "0xc0f3", "text": "entry #0: Y LSB (208)" },
{ "page": "0x001", "logical": "0xc0f4", "text": " Y MSB" },
{ "page": "0x001", "logical": "0xc0f5", "text": " X LSB (48)" },
{ "page": "0x001", "logical": "0xc0f6", "text": " X MSB" },
{ "page": "0x001", "logical": "0xc0f7", "text": " Pattern address MSB ($280 => $5000)" },
{ "page": "0x001", "logical": "0xc0f8", "text": " Pattern address LSB" },
{ "page": "0x001", "logical": "0xc0f9", "text": " Palette index (0) + prioriry (foreground) " },
{ "page": "0x001", "logical": "0xc0fa", "text": " Width (32) + horizontal flip (normal) + height (64) + vertical flip (normal)" },
{ "page": "0x001", "logical": "0xc0fb", "text": "entry #1 (Y: 208)" },
{ "page": "0x001", "logical": "0xc0fd", "text": " (X: 80)" },
{ "page": "0x001", "logical": "0xc0ff", "text": " (Pattern: $2a0)" },
{ "page": "0x001", "logical": "0xc101", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc102", "text": " (W: 32, HFlip: normal, H:64, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc103", "text": "entry #2 (Y: 208)" },
{ "page": "0x001", "logical": "0xc105", "text": " (X: 112)" },
{ "page": "0x001", "logical": "0xc107", "text": " (Pattern: $2c0)" },
{ "page": "0x001", "logical": "0xc109", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc10a", "text": " (W: 16, HFlip: normal, H:64, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc10b", "text": "2 SATB entries" },
{ "page": "0x001", "logical": "0xc10c", "text": "entry #0 (Y: 240)" },
{ "page": "0x001", "logical": "0xc10e", "text": " (X: 128)" },
{ "page": "0x001", "logical": "0xc110", "text": " (Pattern: $2c2)" },
{ "page": "0x001", "logical": "0xc112", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc113", "text": " (W: 16, HFlip: normal, H:32, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc114", "text": "entry #1 (Y: 240)" },
{ "page": "0x001", "logical": "0xc116", "text": " (X: 144)" },
{ "page": "0x001", "logical": "0xc118", "text": " (Pattern: $2e0)" },
{ "page": "0x001", "logical": "0xc11a", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc11b", "text": " (W: 32, HFlip: normal, H:32, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc11c", "text": "3 SATB entries" },
{ "page": "0x001", "logical": "0xc11d", "text": "entry #0 (Y: 208)" },
{ "page": "0x001", "logical": "0xc11f", "text": " (X: 160)" },
{ "page": "0x001", "logical": "0xc121", "text": " (Pattern: $290)" },
{ "page": "0x001", "logical": "0xc123", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc124", "text": " Width (32) + horizontal flip (normal) + height (64) + vertical flip (normal)" },
{ "page": "0x001", "logical": "0xc125", "text": "entry #1 (Y: 208)" },
{ "page": "0x001", "logical": "0xc127", "text": " (X: 192)" },
{ "page": "0x001", "logical": "0xc129", "text": " (Pattern: $2b0)" },
{ "page": "0x001", "logical": "0xc12b", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc12c", "text": " Width (32) + horizontal flip (normal) + height (64) + vertical flip (normal)" },
{ "page": "0x001", "logical": "0xc12d", "text": "entry #2 (Y: 208)" },
{ "page": "0x001", "logical": "0xc12f", "text": " (X: 224)" },
{ "page": "0x001", "logical": "0xc131", "text": " (Pattern: $2d0)" },
{ "page": "0x001", "logical": "0xc133", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc134", "text": " Width (32) + horizontal flip (normal) + height (64) + vertical flip (normal)" },
{ "page": "0x001", "logical": "0xc135", "text": "??" },
{ "page": "0x001", "logical": "0xc136", "text": "5 SATB entries" },
{ "page": "0x001", "logical": "0xc137", "text": "entry #0 (Y: 160)" },
{ "page": "0x001", "logical": "0xc139", "text": " (X: 80)" },
{ "page": "0x001", "logical": "0xc13b", "text": " (Pattern: $2e8)" },
{ "page": "0x001", "logical": "0xc13d", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc13e", "text": " (W: 32, HFlip: normal, H:32, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc13f", "text": "entry #1 (Y: 160)" },
{ "page": "0x001", "logical": "0xc141", "text": " (X: 112)" },
{ "page": "0x001", "logical": "0xc143", "text": " (Pattern: $2f0)" },
{ "page": "0x001", "logical": "0xc145", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc146", "text": " (W: 32, HFlip: normal, H:32, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc147", "text": "entry #2 (Y: 160)" },
{ "page": "0x001", "logical": "0xc149", "text": " (X: 144)" },
{ "page": "0x001", "logical": "0xc14b", "text": " (Pattern: $2f0)" },
{ "page": "0x001", "logical": "0xc14d", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc14e", "text": " (W: 32, HFlip: normal, H:32, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc14f", "text": "entry #3 (Y: 160)" },
{ "page": "0x001", "logical": "0xc151", "text": " (X: 176)" },
{ "page": "0x001", "logical": "0xc153", "text": " (Pattern: $2f8)" },
{ "page": "0x001", "logical": "0xc155", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc156", "text": " (W: 32, HFlip: normal, H:32, VFlip: Normal)" },
{ "page": "0x001", "logical": "0xc157", "text": "entry #4 (Y: 160)" },
{ "page": "0x001", "logical": "0xc159", "text": " (X: 208)" },
{ "page": "0x001", "logical": "0xc15c", "text": " (Pattern: $2f0)" },
{ "page": "0x001", "logical": "0xc15d", "text": " (Pal: 0, Pri: foreground)" },
{ "page": "0x001", "logical": "0xc15e", "text": " (W: 32, HFlip: normal, H:32, VFlip: Normal)" }
]