OXYGENHUB
◆ main openmsx / doc / internal / v9990_command_timing_test_results.gen
12.3 KiB · last changed chore(): initial commit 1 month ago source blame history raw
1
; This program was used to produce the results of v9990_command_timing_test_results.txt
2
; Written by Wouter Vermaelen, based on the code of Peter Mastijn
3
; Change the parameters at the top to specify what you are going to measure.
4
5
	org #0100
6
7
FREQ	equ	0	; 0 -> NTSC   8 -> PAL
8
ENABLE  equ	#82	; #82 -> display enabled  / sprites(cursor) enabled
9
			; #C2 ->         enabled                    disabled
10
			; #02 ->         disabled                   enabled
11
			; #42 ->         disabled                   disabled
12
13
	di
14
	call   init
15
	;call set_p2
16
	call   set_b0_2bpp	; change this to select mode  (set_xxx)
17
18
	call   tst_LMMM
19
	call   tst_BMLL
20
	call   tst_BMXL
21
	call   tst_BMLX
22
	call   tst_LMMV
23
24
	call   print_results
25
26
	xor    a
27
	ld     ix,#00d1		; set screen mode
28
	ld     iy,(#faf7)
29
	call   #001c
30
31
	ld     ix,#0141		; init palette
32
	ld     iy,(#faf7)
33
	call   #001c
34
35
	ld     ix,#0156		; clear keyb buf
36
	ld     iy,(#fcc0)
37
	call   #001c
38
39
	ld     de,text
40
	ld     c,#09
41
	jp     #0005
42
43
44
45
tst_LMMM
46
	call   cmd_common
47
	ld     hl,#0020
48
49
LMMM_0	call   wait_vblank
50
	call   LMMM_1
51
	call   wait_vblank
52
	call   LMMM_2
53
	call   wait_vblank_cmd
54
	jr     nz,LMMM_3
55
	inc    hl
56
	jr     LMMM_0
57
LMMM_3	call   setres
58
	jp     wait_cmd
59
60
61
62
tst_BMLL
63
	call   cmd_common
64
	ld     hl,#0020
65
66
BMLL_0	call   wait_vblank
67
	call   BMLL_1
68
	call   wait_vblank
69
	call   BMLL_2
70
	call   wait_vblank_cmd
71
	jr     nz,BMLL_3	; end if still busy
72
	inc    hl
73
	jr     BMLL_0
74
BMLL_3	call   setres
75
	jp     wait_cmd
76
77
78
79
tst_BMXL
80
	call   cmd_common
81
	ld     hl,#0020
82
83
BMXL_0	call   wait_vblank
84
	call   BMXL_1
85
	call   wait_vblank
86
	call   BMXL_2
87
	call   wait_vblank_cmd
88
	jr     nz,BMXL_3
89
	inc    hl
90
	jr     BMXL_0
91
BMXL_3	call   setres
92
	jp     wait_cmd
93
94
95
96
tst_BMLX
97
	call   cmd_common
98
	ld     hl,#0020
99
100
BMLX_0	call   wait_vblank
101
	call   BMLX_1
102
	call   wait_vblank
103
	call   BMLX_2
104
	call   wait_vblank_cmd
105
	jr     nz,BMLX_3
106
	inc    hl
107
	jr     BMLX_0
108
BMLX_3	call   setres
109
	jp     wait_cmd
110
111
112
113
tst_LMMV
114
	call   cmd_common
115
	ld     hl,#0020
116
117
LMMV_0	call   wait_vblank
118
	call   LMMV_1
119
	call   wait_vblank
120
	call   LMMV_2
121
	call   wait_vblank_cmd
122
	jr     nz,LMMV_3
123
	inc    hl
124
	jr     LMMV_0
125
LMMV_3	call   setres
126
	jp     wait_cmd
127
128
129
130
wait_vblank
131
	in     a,(#65)
132
	and    #40
133
	jr     nz,wait_vblank
134
wait0	in     a,(#65)
135
	and    #40
136
	jr     z,wait0
137
	ret
138
139
wait_cmd
140
	in     a,(#65)
141
	and    1
142
	jr     nz,wait_cmd
143
	ret
144
145
wait_vblank_cmd
146
	in     a,(#65)
147
	and    #40
148
	jr     nz,wait_vblank_cmd
149
wait1	in     a,(#65)
150
	and    #40
151
	jr     z,wait1
152
	in     a,(#65)
153
	and    1
154
	ret
155
156
setres	dec    hl
157
	ex     de,hl
158
	ld     hl,(resptr)
159
	ld     (hl),e
160
	inc    hl
161
	ld     (hl),d
162
	inc    hl
163
	ld     (resptr),hl
164
	ret
165
166
resptr	dw result
167
        dw hexout
168
169
digits	db "0123456789abcdef"
170
171
text	db "LMMM BMLL BMXL BMLX LMMV", 13, 10
172
hexout	db "0000 0000 0000 0000 0000", "$"
173
174
result	ds 80
175
176
177
init	ld     a,#00
178
	out    (#67),a		; MCLK = 0
179
	xor    a
180
	out    (#6f),a
181
	ld     a,#06
182
	out    (#64),a
183
	ld     bc,#1763
184
	ld     hl,init_regs
185
	otir
186
	ret
187
188
189
set_p1
190
	ld     a,#00
191
	out    (#67),a		; MCLK = 0
192
	ld     a,#06
193
	out    (#64),a
194
	ld     a,#01		; P1 mode
195
	out    (#63),a
196
	ld     a,FREQ
197
	out    (#63),a		; NTSC
198
	ld     a,ENABLE
199
	out    (#63),a		; display enabled / sprites enabled
200
	ret
201
202
set_p2
203
	ld     a,#00
204
	out    (#67),a		; MCLK = 0
205
	ld     a,#06
206
	out    (#64),a
207
	ld     a,#41		; P2 mode
208
	out    (#63),a
209
	ld     a,FREQ
210
	out    (#63),a		; NTSC
211
	ld     a,ENABLE
212
	out    (#63),a		; display enabled / sprites enabled
213
	ret
214
215
set_b0_2bpp
216
	ld     a,#01
217
	out    (#67),a		; MCLK = 1
218
	ld     a,#06
219
	out    (#64),a
220
	ld     a,#80
221
	out    (#63),a		; B0 2bpp
222
	ld     a,FREQ
223
	out    (#63),a		; NTSC
224
	ld     a,ENABLE
225
	out    (#63),a		; display enabled / cursor enabled
226
	ret
227
228
set_b0_4bpp
229
	ld     a,#01
230
	out    (#67),a		; MCLK = 1
231
	ld     a,#06
232
	out    (#64),a
233
	ld     a,#81
234
	out    (#63),a		; B0 4bpp
235
	ld     a,FREQ
236
	out    (#63),a		; NTSC
237
	ld     a,ENABLE
238
	out    (#63),a		; display enabled / cursor enabled
239
	ret
240
241
set_b0_8bpp
242
	ld     a,#01
243
	out    (#67),a		; MCLK = 1
244
	ld     a,#06
245
	out    (#64),a
246
	ld     a,#82
247
	out    (#63),a		; B0 8bpp
248
	ld     a,FREQ
249
	out    (#63),a		; NTSC
250
	ld     a,ENABLE
251
	out    (#63),a		; display enabled / cursor enabled
252
	ret
253
254
set_b0_16bpp
255
	ld     a,#01
256
	out    (#67),a		; MCLK = 1
257
	ld     a,#06
258
	out    (#64),a
259
	ld     a,#83
260
	out    (#63),a		; B0 16bpp
261
	ld     a,FREQ
262
	out    (#63),a		; NTSC
263
	ld     a,ENABLE
264
	out    (#63),a		; display enabled / cursor enabled
265
	ret
266
267
set_b1_2bpp
268
	ld     a,#00
269
	out    (#67),a		; MCLK = 0
270
	ld     a,#06
271
	out    (#64),a
272
	ld     a,#80
273
	out    (#63),a		; B1 4bpp
274
	ld     a,FREQ
275
	out    (#63),a		; NTSC
276
	ld     a,ENABLE
277
	out    (#63),a		; display enabled / cursor enabled
278
	ret
279
280
set_b1_4bpp
281
	ld     a,#00
282
	out    (#67),a		; MCLK = 0
283
	ld     a,#06
284
	out    (#64),a
285
	ld     a,#81
286
	out    (#63),a		; B1 4bpp
287
	ld     a,FREQ
288
	out    (#63),a		; NTSC
289
	ld     a,ENABLE
290
	out    (#63),a		; display enabled / cursor enabled
291
	ret
292
293
set_b1_8bpp
294
	ld     a,#00
295
	out    (#67),a		; MCLK = 0
296
	ld     a,#06
297
	out    (#64),a
298
	ld     a,#82
299
	out    (#63),a		; B1 8bpp
300
	ld     a,FREQ
301
	out    (#63),a		; NTSC
302
	ld     a,ENABLE
303
	out    (#63),a		; display enabled / cursor enabled
304
	ret
305
306
set_b1_16bpp
307
	ld     a,#00
308
	out    (#67),a		; MCLK = 0
309
	ld     a,#06
310
	out    (#64),a
311
	ld     a,#83
312
	out    (#63),a		; B1 8bpp
313
	ld     a,FREQ
314
	out    (#63),a		; NTSC
315
	ld     a,ENABLE
316
	out    (#63),a		; display enabled / cursor enabled
317
	ret
318
319
set_b2_2bpp
320
	ld     a,#01
321
	out    (#67),a		; MCLK = 1
322
	ld     a,#06
323
	out    (#64),a
324
	ld     a,#94		; B2 8bpp
325
	out    (#63),a
326
	ld     a,FREQ
327
	out    (#63),a		; NTSC
328
	ld     a,ENABLE
329
	out    (#63),a		; display enabled / cursor enabled
330
	ret
331
332
set_b2_4bpp
333
	ld     a,#01
334
	out    (#67),a		; MCLK = 1
335
	ld     a,#06
336
	out    (#64),a
337
	ld     a,#95		; B2 8bpp
338
	out    (#63),a
339
	ld     a,FREQ
340
	out    (#63),a		; NTSC
341
	ld     a,ENABLE
342
	out    (#63),a		; display enabled / cursor enabled
343
	ret
344
345
set_b2_8bpp
346
	ld     a,#01
347
	out    (#67),a		; MCLK = 1
348
	ld     a,#06
349
	out    (#64),a
350
	ld     a,#96		; B2 8bpp
351
	out    (#63),a
352
	ld     a,FREQ
353
	out    (#63),a		; NTSC
354
	ld     a,ENABLE
355
	out    (#63),a		; display enabled / cursor enabled
356
	ret
357
358
set_b2_16bpp
359
	ld     a,#01
360
	out    (#67),a		; MCLK = 1
361
	ld     a,#06
362
	out    (#64),a
363
	ld     a,#97		; B2 8bpp
364
	out    (#63),a
365
	ld     a,FREQ
366
	out    (#63),a		; NTSC
367
	ld     a,ENABLE
368
	out    (#63),a		; display enabled / cursor enabled
369
	ret
370
371
set_b3_2bpp
372
	ld     a,#00
373
	out    (#67),a		; MCLK = 0
374
	ld     a,#06
375
	out    (#64),a
376
	ld     a,#94		; B3 8bpp
377
	out    (#63),a
378
	ld     a,FREQ
379
	out    (#63),a		; NTSC
380
	ld     a,ENABLE
381
	out    (#63),a		; display enabled / cursor enabled
382
	ret
383
384
set_b3_4bpp
385
	ld     a,#00
386
	out    (#67),a		; MCLK = 0
387
	ld     a,#06
388
	out    (#64),a
389
	ld     a,#95		; B3 8bpp
390
	out    (#63),a
391
	ld     a,FREQ
392
	out    (#63),a		; NTSC
393
	ld     a,ENABLE
394
	out    (#63),a		; display enabled / cursor enabled
395
	ret
396
397
set_b3_8bpp
398
	ld     a,#00
399
	out    (#67),a		; MCLK = 0
400
	ld     a,#06
401
	out    (#64),a
402
	ld     a,#96		; B3 8bpp
403
	out    (#63),a
404
	ld     a,FREQ
405
	out    (#63),a		; NTSC
406
	ld     a,ENABLE
407
	out    (#63),a		; display enabled / cursor enabled
408
	ret
409
410
set_b3_16bpp
411
	ld     a,#00
412
	out    (#67),a		; MCLK = 0
413
	ld     a,#06
414
	out    (#64),a
415
	ld     a,#97		; B3 8bpp
416
	out    (#63),a
417
	ld     a,FREQ
418
	out    (#63),a		; NTSC
419
	ld     a,ENABLE
420
	out    (#63),a		; display enabled / cursor enabled
421
	ret
422
423
set_b4_2bpp
424
	ld     a,#01
425
	out    (#67),a		; MCLK = 1
426
	ld     a,#06
427
	out    (#64),a
428
	ld     a,#a8		; B2 8bpp
429
	out    (#63),a
430
	ld     a,FREQ
431
	out    (#63),a		; NTSC
432
	ld     a,ENABLE
433
	out    (#63),a		; display enabled / cursor enabled
434
	ret
435
436
set_b4_4bpp
437
	ld     a,#01
438
	out    (#67),a		; MCLK = 1
439
	ld     a,#06
440
	out    (#64),a
441
	ld     a,#a9		; B2 8bpp
442
	out    (#63),a
443
	ld     a,FREQ
444
	out    (#63),a		; NTSC
445
	ld     a,ENABLE
446
	out    (#63),a		; display enabled / cursor enabled
447
	ret
448
449
set_b4_8bpp
450
	ld     a,#01
451
	out    (#67),a		; MCLK = 1
452
	ld     a,#06
453
	out    (#64),a
454
	ld     a,#aa		; B2 8bpp
455
	out    (#63),a
456
	ld     a,FREQ
457
	out    (#63),a		; NTSC
458
	ld     a,ENABLE
459
	out    (#63),a		; display enabled / cursor enabled
460
	ret
461
462
set_b4_16bpp
463
	ld     a,#01
464
	out    (#67),a		; MCLK = 1
465
	ld     a,#06
466
	out    (#64),a
467
	ld     a,#ab		; B2 8bpp
468
	out    (#63),a
469
	ld     a,FREQ
470
	out    (#63),a		; NTSC
471
	ld     a,ENABLE
472
	out    (#63),a		; display enabled / cursor enabled
473
	ret
474
475
set_b7_2bpp
476
	ld     a,#00
477
	out    (#67),a		; MCLK = 0
478
	ld     a,#06
479
	out    (#64),a
480
	ld     a,#a8		; B3 2bpp
481
	out    (#63),a
482
	ld     a,FREQ
483
	out    (#63),a		; NTSC
484
	ld     a,ENABLE
485
	out    (#63),a		; display enabled / cursor enabled
486
	ret
487
488
set_b7_4bpp
489
	ld     a,#00
490
	out    (#67),a		; MCLK = 0
491
	ld     a,#06
492
	out    (#64),a
493
	ld     a,#a9		; B3 2bpp
494
	out    (#63),a
495
	ld     a,FREQ
496
	out    (#63),a		; NTSC
497
	ld     a,ENABLE
498
	out    (#63),a		; display enabled / cursor enabled
499
	ret
500
501
set_b7_8bpp
502
	ld     a,#00
503
	out    (#67),a		; MCLK = 0
504
	ld     a,#06
505
	out    (#64),a
506
	ld     a,#aa		; B3 2bpp
507
	out    (#63),a
508
	ld     a,FREQ
509
	out    (#63),a		; NTSC
510
	ld     a,ENABLE
511
	out    (#63),a		; display enabled / cursor enabled
512
	ret
513
514
set_b7_16bpp
515
	ld     a,#00
516
	out    (#67),a		; MCLK = 0
517
	ld     a,#06
518
	out    (#64),a
519
	ld     a,#ab		; B3 2bpp
520
	out    (#63),a
521
	ld     a,FREQ
522
	out    (#63),a		; NTSC
523
	ld     a,ENABLE
524
	out    (#63),a		; display enabled / cursor enabled
525
	ret
526
527
init_regs
528
	db #00,#00,#82,#00	; r#8 -> display enable
529
	db #00,#00,#00,#00
530
	db #00,#00,#00,#00
531
	db #00,#00,#00,#00
532
	db #00,#00,#00,#00
533
	db #00,#00,#00
534
535
	ret			; not used
536
537
538
LMMM_1	ld     a,#20
539
	out    (#64),a
540
	xor    a
541
	out    (#63),a
542
	out    (#63),a	; SX = 0
543
	out    (#63),a
544
	out    (#63),a	; SY = 0
545
	out    (#63),a
546
	out    (#63),a	; DX = 0
547
	out    (#63),a
548
	inc    a
549
	out    (#63),a	; DY = 256
550
	xor    a
551
	out    (#63),a
552
	inc    a
553
	out    (#63),a	; NX = 256
554
	ld     a,l
555
	out    (#63),a
556
	ld     a,h
557
	out    (#63),a	; NY = hl
558
	ld     a,#34
559
	out    (#64),a
560
	ret
561
562
LMMM_2	ld     a,#40	; LMMM
563
	out    (#63),a
564
	ret
565
566
567
BMLL_1	ld     a,#20
568
	out    (#64),a
569
	xor    a
570
	out    (#63),a
571
	out    (#63),a
572
	out    (#63),a
573
	out    (#63),a	; srcAddr = 0
574
	out    (#63),a
575
	out    (#63),a
576
	out    (#63),a
577
	ld     a,#04
578
	out    (#63),a  ; dstAddr = 0x40000
579
	xor    a
580
	out    (#63),a
581
	out    (#63),a
582
	ld     a,l
583
	out    (#63),a
584
	ld     a,h
585
	out    (#63),a	; numBytes = hl * 256
586
	ld     a,#34
587
	out    (#64),a
588
	ret
589
590
BMLL_2	ld     a,#a0	; BMLL
591
	out    (#63),a
592
	ret
593
594
595
BMXL_1	ld     a,#20
596
	out    (#64),a
597
	xor    a
598
	out    (#63),a
599
	out    (#63),a
600
	out    (#63),a
601
	out    (#63),a	; srcAddr = 0
602
	out    (#63),a
603
	out    (#63),a	; DX = 0
604
	out    (#63),a
605
	ld     a,#02
606
	out    (#63),a	; DY = 512
607
	xor    a
608
	out    (#63),a
609
	inc    a
610
	out    (#63),a	; NX = 256
611
	ld     a,l
612
	out    (#63),a
613
	ld     a,h
614
	out    (#63),a	; NY = hl
615
	ld     a,#34
616
	out    (#64),a
617
	ret
618
619
BMXL_2	ld     a,#80	; BMXL
620
	out    (#63),a
621
	ret
622
623
624
BMLX_1	ld     a,#20
625
	out    (#64),a
626
	xor    a
627
	out    (#63),a
628
	out    (#63),a	; SX = 0
629
	out    (#63),a
630
	out    (#63),a	; SY = 0
631
	out    (#63),a
632
	out    (#63),a
633
	out    (#63),a
634
	ld     a,#04
635
	out    (#63),a	; dstAddr = 0x40000
636
	xor    a
637
	out    (#63),a
638
	inc    a
639
	out    (#63),a	; NX = 256
640
	ld     a,l
641
	out    (#63),a
642
	ld     a,h
643
	out    (#63),a	; NY = hl
644
	ld     a,#34
645
	out    (#64),a
646
	ret
647
648
BMLX_2	ld     a,#90	; BMLX
649
	out    (#63),a
650
	ret
651
652
653
LMMV_1	ld     a,#24
654
	out    (#64),a
655
	xor    a
656
	out    (#63),a
657
	out    (#63),a	; DX = 0
658
	out    (#63),a
659
	ld     a,#04
660
	out    (#63),a	; DY = 1024
661
	xor    a
662
	out    (#63),a
663
	inc    a	; NX = 256
664
	out    (#63),a
665
	ld     a,l
666
	out    (#63),a
667
	ld     a,h	; NY = hl
668
	out    (#63),a
669
	ld     a,#30
670
	out    (#64),a
671
	out    (#63),a
672
	out    (#63),a	; FC = #3030
673
	ld     a,#34
674
	out    (#64),a
675
	ret
676
677
LMMV_2	ld     a,#20	; LMMV
678
	out    (#63),a
679
	ret
680
681
682
cmd_common
683
	ld     a,#2c
684
	out    (#64),a
685
	xor    a
686
	out    (#63),a		; ARG = 0
687
	ld     a,#1c
688
	out    (#63),a		; LOGOP = 0x1C (TPSET)
689
	ld     a,#ff
690
	out    (#63),a
691
	xor    a
692
	out    (#63),a		; WM = 0x00FF
693
	ret
694
695
cmd_common_2
696
	ld     a,#2c		; not used
697
	out    (#64),a
698
	xor    a
699
	out    (#63),a		; ARG = 0
700
	ld     a,#0c
701
	out    (#63),a		; LOGOP = 0x0C (PSET)
702
	ld     a,#ff
703
	out    (#63),a
704
	xor    a
705
	out    (#63),a		; WM = 0x00FF
706
	ret
707
708
print_results
709
	ld     ix,hexout
710
	ld     iy,result
711
	call   prthex
712
	call   prthex
713
	call   prthex
714
	call   prthex
715
	call   prthex
716
	ret
717
718
prthex	ld     hl,digits
719
	ld     d,0
720
	ld     a,(iy+#01)
721
	srl    a
722
	srl    a
723
	srl    a
724
	srl    a
725
	ld     e,a
726
	add    hl,de
727
	ld     a,(hl)
728
	ld     (ix+#00),a
729
	ld     hl,digits
730
	ld     a,(iy+#01)
731
	and    #0f
732
	ld     e,a
733
	add    hl,de
734
	ld     a,(hl)
735
	ld     (ix+#01),a
736
	ld     hl,digits
737
	ld     a,(iy+#00)
738
	srl    a
739
	srl    a
740
	srl    a
741
	srl    a
742
	ld     e,a
743
	add    hl,de
744
	ld     a,(hl)
745
	ld     (ix+#02),a
746
	ld     hl,digits
747
	ld     a,(iy+#00)
748
	and    #0f
749
	ld     e,a
750
	add    hl,de
751
	ld     a,(hl)
752
	ld     (ix+#03),a
753
	ld     de,#0005
754
	add    ix,de
755
	inc    iy
756
	inc    iy
757
	ret