-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathhd6309turbo.c
2780 lines (2727 loc) · 54.1 KB
/
hd6309turbo.c
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
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
Copyright 2015 by Joseph Forgione
This file is part of VCC (Virtual Color Computer).
VCC (Virtual Color Computer) is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
VCC (Virtual Color Computer) is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with VCC (Virtual Color Computer). If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include "hd6309.h"
#include "hd6309defs.h"
#include "tcc1014mmu.h"
#include "hd6309turbo.h"
#include "logger.h"
#if defined(_WIN64)
#define MSABI
#else
#define MSABI __attribute__((ms_abi))
#endif
//Replace md[] with mdbits_s
#define MD_NATIVE6309_BIT 0x01
#define MD_FIRQMODE_BIT 0x02
#define MD_ILLEGALINST_BIT 0x40
#define MD_DIVBYZERO_BIT 0x80
#define MD_NATIVE6309 (mdbits_s & MD_NATIVE6309_BIT)
#define MD_FIRQMODE (mdbits_s & MD_FIRQMODE_BIT)
#define MD_ILLEGALINST (mdbits_s & MD_ILLEGALINST_BIT)
#define MD_DIVBYZERO (mdbits_s & MD_DIVBYZERO_BIT)
//Global variables for CPU Emulation-----------------------
//
typedef union
{
unsigned short Reg;
struct
{
unsigned char lsb,msb;
} B;
} cpuregister;
typedef union
{
unsigned int Reg;
struct
{
unsigned short msw,lsw;
} Word;
struct
{
unsigned char mswlsb,mswmsb,lswlsb,lswmsb; //Might be backwards
} Byte;
} wideregister;
#define D_REG q_s.Word.lsw
#define W_REG q_s.Word.msw
#define PC_REG pc_s.Reg
#define X_REG x_s.Reg
#define Y_REG y_s.Reg
#define U_REG u_s.Reg
#define S_REG s_s.Reg
#define A_REG q_s.Byte.lswmsb
#define B_REG q_s.Byte.lswlsb
#define E_REG q_s.Byte.mswmsb
#define F_REG q_s.Byte.mswlsb
#define Q_REG q_s.Reg
#define V_REG v_s.Reg
#define O_REG z_s.Reg
static char RegName[16][10]={"D","X","Y","U","S","PC","W","V","A","B","CC","DP","ZERO","ZERO","E","F"};
wideregister q_s;
cpuregister pc_s, x_s, y_s, u_s, s_s, dp_s, v_s, z_s;
unsigned char cc_s[8];
unsigned char *ureg8_s[8];
unsigned char ccbits_s,mdbits_s;
unsigned short *xfreg16_s[8];
volatile int CycleCounter=0;
volatile unsigned char SyncWaiting_s=0;
unsigned short temp16;
static signed short stemp16;
static signed char stemp8;
static unsigned int temp32;
static int stemp32;
static unsigned char temp8;
static unsigned char PendingInterupts=0;
static unsigned char IRQWaiter=0;
static unsigned char Source=0,Dest=0;
static unsigned char postbyte=0;
static short unsigned postword=0;
static signed char *spostbyte=(signed char *)&postbyte;
static signed short *spostword=(signed short *)&postword;
volatile char InInterupt_s=0;
volatile int gCycleFor;
static short *instcycl1, *instcycl2, *instcycl3;
static unsigned long instcnt1[256], instcnt2[256], instcnt3[256];
//END Global variables for CPU Emulation-------------------
//Fuction Prototypes---------------------------------------
static unsigned short CalculateEA(unsigned char);
void MSABI InvalidInsHandler_s(void);
void MSABI DivbyZero_s(void);
static void ErrorVector(void);
extern void MSABI setcc_s(unsigned char);
extern unsigned char MSABI getcc_s(void);
void MSABI setmd_s(unsigned char);
static void cpu_firq(void);
static void cpu_irq(void);
static void cpu_nmi(void);
static unsigned char GetSorceReg(unsigned char);
static void Page_2(void);
static void Page_3(void);
// void MemWrite8(unsigned char, unsigned short);
// void MemWrite16(unsigned short, unsigned short);
// unsigned char MemRead8(unsigned short);
// unsigned short MemRead16(unsigned short);
//unsigned char GetDestReg(unsigned char);
//END Fuction Prototypes-----------------------------------
void HD6309Reset_s(void)
{
char index;
for(index=0;index<=6;index++) //Set all register to 0 except V
*xfreg16_s[index] = 0;
for(index=0;index<=7;index++)
*ureg8_s[index]=0;
for(index=0;index<=7;index++)
cc_s[index]=0;
mdbits_s=0;
setmd_s(mdbits_s);
dp_s.Reg=0;
cc_s[I]=1;
cc_s[F]=1;
SyncWaiting_s=0;
PC_REG=MemRead16(VRESET); //PC gets its reset vector
SetMapType(0); //shouldn't be here
for (int i = 0 ; i < 256 ; i++)
{
//printf("%02x 0:%ld 1:%ld 2:%ld\n", i, instcnt1[i], instcnt2[i], instcnt3[i]);
instcnt1[i] = 0;
instcnt2[i] = 0;
instcnt3[i] = 0;
}
return;
}
void HD6309Init_s(void)
{ //Call this first or RESET will core!
// reg pointers for TFR and EXG and LEA ops
xfreg16_s[0] = &D_REG;
xfreg16_s[1] = &X_REG;
xfreg16_s[2] = &Y_REG;
xfreg16_s[3] = &U_REG;
xfreg16_s[4] = &S_REG;
xfreg16_s[5] = &PC_REG;
xfreg16_s[6] = &W_REG;
xfreg16_s[7] = &V_REG;
ureg8_s[0]=(unsigned char*)&A_REG;
ureg8_s[1]=(unsigned char*)&B_REG;
ureg8_s[2]=(unsigned char*)&ccbits_s;
ureg8_s[3]=(unsigned char*)&dp_s.B.msb;
ureg8_s[4]=(unsigned char*)&O_REG;
ureg8_s[5]=(unsigned char*)&O_REG;
ureg8_s[6]=(unsigned char*)&E_REG;
ureg8_s[7]=(unsigned char*)&F_REG;
cc_s[I]=1;
cc_s[F]=1;
return;
}
short instcyclemu1[256] =
{
6, // Neg_D 00
6, // Oim_D 01
6, // Aim_D 02
6, // Com_D 03
6, // Lsr_D 04
6, // Eim_D 05
6, // Ror_D 06
6, // Asr_D 07
6, // Asl_D 08
6, // Rol_D 09
6, // Dec_D 0A
6, // Tim_D 0B
6, // Inc_D 0C
6, // Tst_D 0D
3, // Jmp_D 0E
6, // Clr_D 0F
0, // Page2 10
0, // Page3 11
2, // Nop 12
0, // Sync 13
4, // Sexw 14
20, // Invalid 15
5, // Lbra 16
9, // Lbsr 17
19, // Invalid 18
2, // Daa 19
3, // Orcc 1A
19, // Invalid 1B
3, // Andcc 1C
2, // Sex 1D
8, // Exg 1E
6, // Tfr 1F
3, // Bra 20
3, // Brn 21
3, // Bhi 22
3, // Bls 23
3, // Bhs 24
3, // Blo 25
3, // Bne 26
3, // Beq 27
3, // Bvc 28
3, // Bvs 29
3, // Bpl 2A
3, // Bmi 2B
3, // Bge 2C
3, // Blt 2D
3, // Bgt 2E
3, // Ble 2F
4, // Leax 30
4, // Leay 31
4, // Leas 32
4, // Leau 33
5, // Pshs 34
5, // Puls 35
5, // Pshu 36
5, // Puls 37
19, // Invalid 38
5, // Rts 39
3, // Abx 3A
6, // Rti 3B
22, // Cwai 3C
11, // Mul_I 3D
19, // Invalid 3E
19, // Swi1 3F
2, // Nega_I 40
19, // Invalid 41
19, // Invalid 42
2, // Coma_I 43
2, // Lsra_I 44
19, // Invalid 45
2, // Rora_I 46
2, // Asra_I 47
2, // Asla_I 48
2, // Rola_I 49
2, // Deca_I 4A
19, // Invalid 4B
2, // Inca_I 4C
2, // Tsta_I 4D
19, // Invalid 4E
2, // Clra_I 4F
2, // Negb_I 50
19, // Invalid 51
19, // Invalid 52
2, // Comb_I 53
2, // Lsrb_I 54
19, // Invalid 55
2, // Rorb_I 56
2, // Asrb_I 57
2, // Aslb_I 58
2, // Rolb_I 59
2, // Decb_I 5A
19, // Invalid 5B
2, // Incb_I 5C
2, // Tstb_I 5D
19, // Invalid 5E
2, // Clrb_I 5F
6, // Neg_X 60
7, // Oim_X 61
7, // Aim_X 62
6, // Com_X 63
6, // Lsr_X 64
7, // Eim_X 65
6, // Ror_X 66
6, // Asr_X 67
6, // Asl_X 68
6, // Rol_X 69
6, // Dec_X 6A
7, // Tim_X 6B
6, // Inc_X 6C
6, // Tst_X 6D
3, // Jmp_X 6E
6, // Clr_X 6F
7, // Neg_E 70
7, // Oim_E 71
7, // Aim_E 72
7, // Com_E 73
7, // Lsr_E 74
7, // Eim_E 75
7, // Ror_E 76
7, // Asr_E 77
7, // Asl_E 78
7, // Rol_E 79
7, // Dec_E 7A
7, // Tim_E 7B
7, // Inc_E 7C
7, // Tst_E 7D
4, // Jmp_E 7E
7, // Clr_E 7F
2, // Suba_M 80
2, // Cmpa_M 81
2, // Sbca_M 82
4, // Subd_M 83
2, // Anda_M 84
2, // Bita_M 85
2, // Lda_M 86
19, // Invalid 87
2, // Eora_M 88
2, // Adca_M 89
2, // Ora_M 8A
2, // Adda_M 8B
4, // Cmpx_M 8C
7, // Bsr 8D
3, // Ldx_M 8E
19, // Invalid 8F
4, // Suba_D 90
4, // Cmpa_D 91
4, // Sbca_D 92
6, // Subd_D 93
4, // Anda_D 94
4, // Bita_D 95
4, // Lda_D 96
4, // Sta_D 97
4, // Eora_D 98
4, // Adca_D 99
4, // Ora_D 9A
4, // Adda_D 9B
6, // Cmpx_D 9C
7, // Jsr_D 9D
5, // Ldx_D 9E
5, // Stx_D 9F
4, // Suba_X A0
4, // Cmpa_X A1
4, // Sbca_X A2
6, // Subd_X A3
4, // Anda_X A4
4, // Bita_X A5
4, // Lda_X A6
4, // Sta_X A7
4, // Eora_X A8
4, // Adca_X A9
4, // Ora_X AA
4, // Adda_X AB
6, // Cmpx_X AC
7, // Jsr_X AD
5, // Ldx_X AE
5, // Stx_X AF
5, // Suba_E B0
5, // Cmpa_E B1
5, // Sbca_E B2
6, // Subd_E B3
5, // Anda_E B4
5, // Bita_E B5
5, // Lda_E B6
5, // Sta_E B7
5, // Eora_E B8
5, // Adca_E B9
5, // Ora_E BA
5, // Adda_E BB
7, // Cmpx_E BC
8, // Jsr_E BD
6, // Ldx_E BE
6, // Stx_E BF
2, // Subb_M C0
2, // Cmpb_M C1
2, // Sbcb_M C2
4, // Addd_M C3
2, // Andb_M C4
2, // Bitb_M C5
2, // Ldb_M C6
19, // Invalid C7
2, // Eorb_M C8
2, // Adcb_M C9
2, // Orb_M CA
2, // Addb_M CB
3, // Ldd_M CC
5, // Ldq_M CD
3, // Ldu_M CE
19, // Invalid CF
4, // Subb_D D0
4, // Cmpb_D D1
4, // Sbcb_D D2
6, // Addd_D D3
4, // Andb_D D4
4, // Bitb_D D5
4, // Ldb_D D6
4, // Stb_D D7
4, // Eorb_D D8
4, // Adcb_D D9
4, // Orb_D DA
4, // Addb_D DB
5, // Ldd_D DC
5, // Std_D DD
5, // Ldu_D DE
5, // Stu_D DF
4, // Subb_X E0
4, // Cmpb_X E1
4, // Sbcb_X E2
6, // Addd_X E3
4, // Andb_X E4
4, // Bitb_X E5
4, // Ldb_X E6
4, // Stb_X E7
4, // Eorb_X E8
4, // Adcb_X E9
4, // Orb_X EA
4, // Addb_X EB
5, // Ldd_X EC
5, // Std_X ED
5, // Ldu_X EE
5, // Stu_X EF
5, // Subb_E F0
5, // Cmpb_E F1
5, // Sbcb_E F2
7, // Addd_E F3
5, // Andb_E F4
5, // Bitb_E F5
5, // Ldb_E F6
5, // Stb_E F7
5, // Eorb_E F8
5, // Adcb_E F9
5, // Orb_E FA
5, // Addb_E FB
6, // Ldd_E FC
6, // Std_E FD
6, // Ldu_E FE
6 // Stu_E FF
};
short instcyclnat1[256] =
{
5, // Neg_D 00
6, // Oim_D 01
6, // Aim_D 02
5, // Com_D 03
5, // Lsr_D 04
6, // Eim_D 05
5, // Ror_D 06
5, // Asr_D 07
5, // Asl_D 08
5, // Rol_D 09
5, // Dec_D 0A
6, // Tim_D 0B
5, // Inc_D 0C
4, // Tst_D 0D
2, // Jmp_D 0E
5, // Clr_D 0F
0, // Page2 10
0, // Page3 11
1, // Nop 12
0, // Sync 13
4, // Sexw 14
20, // Invalid 15
4, // Lbra 16
7, // Lbsr 17
20, // Invalid 18
1, // Daa 19
3, // Orcc 1A
20, // Invalid 1B
3, // Andcc 1C
1, // Sex 1D
5, // Exg 1E
4, // Tfr 1F
3, // Bra 20
3, // Brn 21
3, // Bhi 22
3, // Bls 23
3, // Bhs 24
3, // Blo 25
3, // Bne 26
3, // Beq 27
3, // Bvc 28
3, // Bvs 29
3, // Bpl 2A
3, // Bmi 2B
3, // Bge 2C
3, // Blt 2D
3, // Bgt 2E
3, // Ble 2F
4, // Leax 30
4, // Leay 31
4, // Leas 32
4, // Leau 33
4, // Pshs 34
4, // Puls 35
4, // Pshu 36
4, // Puls 37
20, // Invalid 38
4, // Rts 39
1, // Abx 3A
6, // Rti 3B
20, // Cwai 3C
10, // Mul_I 3D
20, // Invalid 3E
20, // Swi1 3F
1, // Nega_I 40
20, // Invalid 41
20, // Invalid 42
1, // Coma_I 43
1, // Lsra_I 44
20, // Invalid 45
1, // Rora_I 46
1, // Asra_I 47
1, // Asla_I 48
1, // Rola_I 49
1, // Deca_I 4A
20, // Invalid 4B
1, // Inca_I 4C
1, // Tsta_I 4D
20, // Invalid 4E
1, // Clra_I 4F
1, // Negb_I 50
20, // Invalid 51
20, // Invalid 52
1, // Comb_I 53
1, // Lsrb_I 54
20, // Invalid 55
1, // Rorb_I 56
1, // Asrb_I 57
1, // Aslb_I 58
1, // Rolb_I 59
1, // Decb_I 5A
20, // Invalid 5B
1, // Incb_I 5C
1, // Tstb_I 5D
20, // Invalid 5E
1, // Clrb_I 5F
6, // Neg_X 60
7, // Oim_X 61
7, // Aim_X 62
6, // Com_X 63
6, // Lsr_X 64
7, // Eim_X 65
6, // Ror_X 66
6, // Asr_X 67
6, // Asl_X 68
6, // Rol_X 69
6, // Dec_X 6A
7, // Tim_X 6B
6, // Inc_X 6C
5, // Tst_X 6D
3, // Jmp_X 6E
6, // Clr_X 6F
6, // Neg_X 70
7, // Oim_E 71
7, // Aim_E 72
6, // Com_E 73
6, // Lsr_E 74
7, // Eim_E 75
6, // Ror_E 76
6, // Asr_E 77
6, // Asl_E 78
6, // Rol_E 79
6, // Dec_E 7A
7, // Tim_E 7B
6, // Inc_E 7C
5, // Tst_E 7D
3, // Jmp_E 7E
6, // Clr_E 7F
2, // Suba_M 80
2, // Cmpa_M 81
2, // Sbca_M 82
3, // Subd_M 83
2, // Anda_M 84
2, // Bita_M 85
2, // Lda_M 86
20, // Invalid 87
2, // Eora_M 88
2, // Adca_M 89
2, // Ora_M 8A
2, // Adda_M 8B
3, // Cmpx_M 8C
6, // Bsr 8D
3, // Ldx_M 8E
20, // Invalid 8F
3, // Suba_D 90
3, // Cmpa_D 91
3, // Sbca_D 92
4, // Subd_D 93
3, // Anda_D 94
3, // Bita_D 95
3, // Lda_D 96
3, // Sta_D 97
3, // Eora_D 98
3, // Adca_D 99
3, // Ora_D 9A
3, // Adda_D 9B
4, // Cmpx_D 9C
6, // Jsr_D 9D
4, // Ldx_D 9E
4, // Stx_D 9F
4, // Suba_X A0
4, // Cmpa_X A1
4, // Sbca_X A2
5, // Subd_X A3
4, // Anda_X A4
4, // Bita_X A5
4, // Lda_X A6
4, // Sta_X A7
4, // Eora_X A8
4, // Adca_X A9
4, // Ora_X AA
4, // Adda_X AB
5, // Cmpx_X AC
6, // Jsr_X AD
5, // Ldx_X AE
5, // Stx_X AF
4, // Suba_E B0
4, // Cmpa_E B1
4, // Sbca_E B2
5, // Subd_E B3
4, // Anda_E B4
4, // Bita_E B5
4, // Lda_E B6
4, // Sta_E B7
4, // Eora_E B8
4, // Adca_E B9
4, // Ora_E BA
4, // Adda_E BB
5, // Cmpx_E BC
7, // Jsr_E BD
5, // Ldx_E BE
5, // Stx_E BF
2, // Subb_M C0
2, // Cmpb_M C1
2, // Sbcb_M C2
3, // Addd_M C3
2, // Andb_M C4
2, // Bitb_M C5
2, // Ldb_M C6
20, // Invalid C7
2, // Eorb_M C8
2, // Adcb_M C9
2, // Orb_M CA
2, // Addb_M CB
3, // Ldd_M CC
5, // Ldq_M CD
3, // Ldu_M CE
20, // Invalid CF
3, // Subb_D D0
3, // Cmpb_D D1
3, // Sbcb_D D2
4, // Addd_D D3
3, // Andb_D D4
3, // Bitb_D D5
3, // Ldb_D D6
3, // Stb_D D7
3, // Eorb_D D8
3, // Adcb_D D9
3, // Orb_D DA
3, // Addb_D DB
4, // Ldd_D DC
4, // Std_D DD
4, // Ldu_D DE
4, // Stu_D DF
4, // Subb_X E0
4, // Cmpb_X E1
4, // Sbcb_X E2
5, // Addd_X E3
4, // Andb_X E4
4, // Bitb_X E5
4, // Ldb_X E6
4, // Stb_X E7
4, // Eorb_X E8
4, // Adcb_X E9
4, // Orb_X EA
4, // Addb_X EB
5, // Ldd_X EC
5, // Std_X ED
5, // Ldu_X EE
5, // Stu_X EF
4, // Subb_E F0
4, // Cmpb_E F1
4, // Sbcb_E F2
5, // Addd_E F3
4, // Andb_E F4
4, // Bitb_E F5
4, // Ldb_E F6
4, // Stb_E F7
4, // Eorb_E F8
4, // Adcb_E F9
4, // Orb_E FA
4, // Addb_E FB
5, // Ldd_E FC
5, // Std_E FD
5, // Ldu_E FE
5, // Stu_E FF
};
short instcyclemu2[256] =
{
19, // Invalid 00
19, // Invalid 01
19, // Invalid 02
19, // Invalid 03
19, // Invalid 04
19, // Invalid 05
19, // Invalid 06
19, // Invalid 07
19, // Invalid 08
19, // Invalid 09
19, // Invalid 0A
19, // Invalid 0B
19, // Invalid 0C
19, // Invalid 0D
19, // Invalid 0E
19, // Invalid 0F
19, // Invalid 10
19, // Invalid 11
19, // Invalid 12
19, // Invalid 13
19, // Invalid 14
19, // Invalid 15
19, // Invalid 16
19, // Invalid 17
19, // Invalid 18
19, // Invalid 19
19, // Invalid 1A
19, // Invalid 1B
19, // Invalid 1C
19, // Invalid 1D
19, // Invalid 1E
19, // Invalid 1F
19, // Invalid 20
5, // Lbrn 21
5, // Lbhi 22
5, // Lbls 23
5, // Lbhs 24
5, // Lbcs 25
5, // Lbne 26
5, // Lbeq 27
5, // Lbvc 28
5, // Lbvs 29
5, // Lbpl 2A
5, // Lbmi 2B
5, // Lbge 2C
5, // Lblt 2D
5, // Lbgt 2E
5, // Lble 2F
4, // Addr 30
4, // Adcr 31
4, // Subr 32
4, // Sbcr 33
4, // Andr 34
4, // Orr 35
4, // Eorr 36
4, // Cmpr 37
6, // pshsw 38
6, // pulsw 39
6, // pshuw 3A
6, // puluw 3B
19, // Invalid 3C
19, // Invalid 3D
19, // Invalid 3E
20, // Swi2 3F
3, // Negd 40
19, // Invalid 41
19, // Invalid 42
3, // Comd 43
3, // Lsrd 44
19, // Invalid 45
3, // Rord 46
3, // Asrd 47
3, // Asld 48
3, // Rold 49
3, // Decd 4A
19, // Invalid 4B
3, // Incd 4C
3, // Tstd 4D
19, // Invalid 4E
3, // Clrd 4F
19, // Invalid 50
19, // Invalid 51
19, // Invalid 52
3, // Comw 53
3, // Lsrw 54
19, // Invalid 55
3, // Rorw 56
19, // Invalid 57
19, // Invalid 58
3, // Rolw 59
3, // Decw 5A
19, // Invalid 5B
3, // Incw 5C
3, // Tstw 5D
19, // Invalid 5E
3, // Clrw 5F
19, // Invalid 60
19, // Invalid 61
19, // Invalid 62
19, // Invalid 63
19, // Invalid 64
19, // Invalid 65
19, // Invalid 66
19, // Invalid 67
19, // Invalid 68
19, // Invalid 69
19, // Invalid 6A
19, // Invalid 6B
19, // Invalid 6C
19, // Invalid 6D
19, // Invalid 6E
19, // Invalid 6F
19, // Invalid 70
19, // Invalid 71
19, // Invalid 72
19, // Invalid 73
19, // Invalid 74
19, // Invalid 75
19, // Invalid 76
19, // Invalid 77
19, // Invalid 78
19, // Invalid 79
19, // Invalid 7A
19, // Invalid 7B
19, // Invalid 7C
19, // Invalid 7D
19, // Invalid 7E
19, // Invalid 7F
5, // Subw_M 80
5, // Cmpw_M 81
5, // Sbcw_M 82
5, // Cmpd_M 83
5, // Andd_M 84
5, // Bitd_M 85
4, // Ldw_M 86
19, // Invalid 87
5, // Eord_M 88
5, // Adcd_M 89
5, // Ord_M 8A
5, // Addw_M 8B
5, // Cmpy_M 8C
19, // Invalid 8D
4, // Ldy_M 8E
19, // Invalid 8F
7, // Subw_D 90
7, // Cmpw_D 91
7, // Sbcd_D 92
7, // Cmpd_D 93
7, // Andd_D 94
7, // Bitd_D 95
6, // Ldw_D 96
6, // Stw_D 97
7, // Eord_D 98
7, // Adcd_D 99
7, // Ord_D 9A
7, // Addw_D 9B
7, // Cmpy_D 9C
19, // Invalid 9D
6, // ldy_D 9E
6, // Sty_D 9F
7, // Subw_X A0
7, // Cmpw_X A1
7, // Sbcd_X A2
7, // Cmpd_X A3
7, // Andd_X A4
7, // Bitd_X A5
6, // Ldw_X A6
6, // Stw_X A7
7, // Eord_X A8
7, // Adcd_X A9
7, // Ord_X AA
7, // Addw_X AB
7, // Cmpy_X AC
19, // Invalid AD
6, // Ldy_X AE
6, // Sty_X AF
8, // Subw_E B0
8, // Cmpw_E B1
8, // Sbcd_E B2
8, // Cmpd_E B3
8, // Andd_E B4
8, // Bitd_E B5
7, // Ldw_E B6
7, // Stw_E B7
8, // Eord_E B8
8, // Adcd_E B9
8, // Ord_E BA
8, // Addw_E BB
8, // Cmpy_E BC
19, // Invalid BD
7, // Ldy_E BE
7, // Sty_E BF
19, // Invalid C0
19, // Invalid C1
19, // Invalid C2
19, // Invalid C3
19, // Invalid C4
19, // Invalid C5
19, // Invalid C6
19, // Invalid C7
19, // Invalid C8
19, // Invalid C9
19, // Invalid CA
19, // Invalid CB
19, // Invalid CC
19, // Invalid CD
4, // Lds_M CE
19, // Invalid CF
19, // Invalid D0
19, // Invalid D1
19, // Invalid D2
19, // Invalid D3
19, // Invalid D4
19, // Invalid D5
19, // Invalid D6
19, // Invalid D7
19, // Invalid D8
19, // Invalid D9
19, // Invalid DA
19, // Invalid DB
8, // Ldq_D DC
8, // Stq_D DD
6, // Lds_D DE
6, // Sts_D DF
19, // Invalid E0
19, // Invalid E1
19, // Invalid E2
19, // Invalid E3
19, // Invalid E4
19, // Invalid E5
19, // Invalid E6
19, // Invalid E7
19, // Invalid E8
19, // Invalid E9
19, // Invalid EA
19, // Invalid EB
8, // Ldq_X EC
8, // Stq_X ED
6, // Lds_X EE
6, // Sts_X EF
19, // Invalid F0
19, // Invalid F1
19, // Invalid F2
19, // Invalid F3
19, // Invalid F4
19, // Invalid F5
19, // Invalid F6
19, // Invalid F7
19, // Invalid F8
19, // Invalid F9
19, // Invalid FA
19, // Invalid FB
9, // Ldq_E FC
9, // Stq_E FD
7, // Lds_E FE
7 // Sts_E FF
};
short instcyclnat2[256] =
{
20, // Invalid 00
20, // Invalid 01
20, // Invalid 02
20, // Invalid 03
20, // Invalid 04
20, // Invalid 05
20, // Invalid 06
20, // Invalid 07
20, // Invalid 08
20, // Invalid 09
20, // Invalid 0A
20, // Invalid 0B
20, // Invalid 0C
20, // Invalid 0D
20, // Invalid 0E
20, // Invalid 0F
20, // Invalid 10
20, // Invalid 11
20, // Invalid 12
20, // Invalid 13
20, // Invalid 14
20, // Invalid 15
20, // Invalid 16
20, // Invalid 17
20, // Invalid 18
20, // Invalid 19
20, // Invalid 1A
20, // Invalid 1B
20, // Invalid 1C
20, // Invalid 1D
20, // Invalid 1E
20, // Invalid 1F
20, // Invalid 20