JavaScriptによるZ80エミュレーションは「未定義命令」をどこまで実装すべきなのか

[昨日の記事](https://qiita.com/KoichiYasuoka/items/9d083583567237effd97)で何とかDAAが実装できたので、JavaScript版PC-8001エミュレータで実装したZ80命令群を、ざっと見直してみることにした。『μCOM-82ユーザーズマニュアル』(日本電気、1979年11月)に載ってない「未定義命令」をたくさん実装してしまっていて、しかも、IXレジスタをJXレジスタに、IYレジスタをKYレジスタにそれぞれ名称変更してしまったので、すこぶる読みにくい。とりあえず、内部で使用しているmnemonics対応表を示しておく。

```
00   NOP            40    LD B,B        80   ADD A,B        C0   RET NZ
01  LD16 BC,nn      41    LD B,C        81   ADD A,C        C1   POP BC
02    LD (BC),A     42    LD B,D        82   ADD A,D        C2    JP NZ,nn
03 INC16 BC         43    LD B,E        83   ADD A,E        C3    JP ,nn
04   INC B          44    LD B,H        84   ADD A,H        C4  CALL NZ,nn
05   DEC B          45    LD B,L        85   ADD A,L        C5  PUSH BC
06    LD B,n        46    LD B,(HL)     86   ADD A,(HL)     C6   ADD A,n
07  RLCA            47    LD B,A        87   ADD A,A        C7  CALL ,0000
08    EX AF,af      48    LD C,B        88   ADC A,B        C8   RET Z
09 ADD16 HL,BC      49    LD C,C        89   ADC A,C        C9   RET
0A    LD A,(BC)     4A    LD C,D        8A   ADC A,D        CA    JP Z,nn
0B DEC16 BC         4B    LD C,E        8B   ADC A,E        CB extension
0C   INC C          4C    LD C,H        8C   ADC A,H        CC  CALL Z,nn
0D   DEC C          4D    LD C,L        8D   ADC A,L        CD  CALL ,nn
0E    LD C,n        4E    LD C,(HL)     8E   ADC A,(HL)     CE   ADC A,n
0F  RRCA            4F    LD C,A        8F   ADC A,A        CF  CALL ,0008
10    JR DJNZ,e     50    LD D,B        90   SUB A,B        D0   RET NC
11  LD16 DE,nn      51    LD D,C        91   SUB A,C        D1   POP DE
12    LD (DE),A     52    LD D,D        92   SUB A,D        D2    JP NC,nn
13 INC16 DE         53    LD D,E        93   SUB A,E        D3   OUT (n),A
14   INC D          54    LD D,H        94   SUB A,H        D4  CALL NC,nn
15   DEC D          55    LD D,L        95   SUB A,L        D5  PUSH DE
16    LD D,n        56    LD D,(HL)     96   SUB A,(HL)     D6   SUB A,n
17   RLA            57    LD D,A        97   SUB A,A        D7  CALL ,0010
18    JR ,e         58    LD E,B        98   SBC A,B        D8   RET C
19 ADD16 HL,DE      59    LD E,C        99   SBC A,C        D9   EXX
1A    LD A,(DE)     5A    LD E,D        9A   SBC A,D        DA    JP C,nn
1B DEC16 DE         5B    LD E,E        9B   SBC A,E        DB    IN A,(n)
1C   INC E          5C    LD E,H        9C   SBC A,H        DC  CALL C,nn
1D   DEC E          5D    LD E,L        9D   SBC A,L        DD extension
1E    LD E,n        5E    LD E,(HL)     9E   SBC A,(HL)     DE   SBC A,n
1F   RRA            5F    LD E,A        9F   SBC A,A        DF  CALL ,0018
20    JR NZ,e       60    LD H,B        A0   AND A,B        E0   RET NV
21  LD16 HL,nn      61    LD H,C        A1   AND A,C        E1   POP HL
22  LD16 (nn),HL    62    LD H,D        A2   AND A,D        E2    JP NV,nn
23 INC16 HL         63    LD H,E        A3   AND A,E        E3    EX (SP),HL
24   INC H          64    LD H,H        A4   AND A,H        E4  CALL NV,nn
25   DEC H          65    LD H,L        A5   AND A,L        E5  PUSH HL
26    LD H,n        66    LD H,(HL)     A6   AND A,(HL)     E6   AND A,n
27   DAA            67    LD H,A        A7   AND A,A        E7  CALL ,0020
28    JR Z,e        68    LD L,B        A8   XOR A,B        E8   RET V
29 ADD16 HL,HL      69    LD L,C        A9   XOR A,C        E9    JP ,(HL)
2A  LD16 HL,(nn)    6A    LD L,D        AA   XOR A,D        EA    JP V,nn
2B DEC16 HL         6B    LD L,E        AB   XOR A,E        EB    EX DE,HL
2C   INC L          6C    LD L,H        AC   XOR A,H        EC  CALL V,nn
2D   DEC L          6D    LD L,L        AD   XOR A,L        ED extension
2E    LD L,n        6E    LD L,(HL)     AE   XOR A,(HL)     EE   XOR A,n
2F   CPL A          6F    LD L,A        AF   XOR A,A        EF  CALL ,0028
30    JR NC,e       70    LD (HL),B     B0    OR A,B        F0   RET NM
31  LD16 SP,nn      71    LD (HL),C     B1    OR A,C        F1   POP AF
32    LD (nn),A     72    LD (HL),D     B2    OR A,D        F2    JP NM,nn
33 INC16 SP         73    LD (HL),E     B3    OR A,E
34   INC (HL)       74    LD (HL),H     B4    OR A,H        F4  CALL NM,nn
35   DEC (HL)       75    LD (HL),L     B5    OR A,L        F5  PUSH AF
36    LD (HL),n     76  HALT            B6    OR A,(HL)     F6    OR A,n
37   SCF            77    LD (HL),A     B7    OR A,A        F7  CALL ,0030
38    JR C,e        78    LD A,B        B8    CP A,B        F8   RET M
39 ADD16 HL,SP      79    LD A,C        B9    CP A,C        F9  LD16 SP,HL
3A    LD A,(nn)     7A    LD A,D        BA    CP A,D        FA    JP M,nn
3B DEC16 SP         7B    LD A,E        BB    CP A,E
3C   INC A          7C    LD A,H        BC    CP A,H        FC  CALL M,nn
3D   DEC A          7D    LD A,L        BD    CP A,L        FD extension
3E    LD A,n        7E    LD A,(HL)     BE    CP A,(HL)     FE    CP A,n
3F   CCF            7F    LD A,A        BF    CP A,A        FF  CALL ,0038
```

* CB xx 拡張

```
00   RLC B          40   BIT 0,B        80   RES 0,B        C0   SET 0,B
01   RLC C          41   BIT 0,C        81   RES 0,C        C1   SET 0,C
02   RLC D          42   BIT 0,D        82   RES 0,D        C2   SET 0,D
03   RLC E          43   BIT 0,E        83   RES 0,E        C3   SET 0,E
04   RLC H          44   BIT 0,H        84   RES 0,H        C4   SET 0,H
05   RLC L          45   BIT 0,L        85   RES 0,L        C5   SET 0,L
06   RLC (HL)       46   BIT 0,(HL)     86   RES 0,(HL)     C6   SET 0,(HL)
07   RLC A          47   BIT 0,A        87   RES 0,A        C7   SET 0,A
08   RRC B          48   BIT 1,B        88   RES 1,B        C8   SET 1,B
09   RRC C          49   BIT 1,C        89   RES 1,C        C9   SET 1,C
0A   RRC D          4A   BIT 1,D        8A   RES 1,D        CA   SET 1,D
0B   RRC E          4B   BIT 1,E        8B   RES 1,E        CB   SET 1,E
0C   RRC H          4C   BIT 1,H        8C   RES 1,H        CC   SET 1,H
0D   RRC L          4D   BIT 1,L        8D   RES 1,L        CD   SET 1,L
0E   RRC (HL)       4E   BIT 1,(HL)     8E   RES 1,(HL)     CE   SET 1,(HL)
0F   RRC A          4F   BIT 1,A        8F   RES 1,A        CF   SET 1,A
10    RL B          50   BIT 2,B        90   RES 2,B        D0   SET 2,B
11    RL C          51   BIT 2,C        91   RES 2,C        D1   SET 2,C
12    RL D          52   BIT 2,D        92   RES 2,D        D2   SET 2,D
13    RL E          53   BIT 2,E        93   RES 2,E        D3   SET 2,E
14    RL H          54   BIT 2,H        94   RES 2,H        D4   SET 2,H
15    RL L          55   BIT 2,L        95   RES 2,L        D5   SET 2,L
16    RL (HL)       56   BIT 2,(HL)     96   RES 2,(HL)     D6   SET 2,(HL)
17    RL A          57   BIT 2,A        97   RES 2,A        D7   SET 2,A
18    RR B          58   BIT 3,B        98   RES 3,B        D8   SET 3,B
19    RR C          59   BIT 3,C        99   RES 3,C        D9   SET 3,C
1A    RR D          5A   BIT 3,D        9A   RES 3,D        DA   SET 3,D
1B    RR E          5B   BIT 3,E        9B   RES 3,E        DB   SET 3,E
1C    RR H          5C   BIT 3,H        9C   RES 3,H        DC   SET 3,H
1D    RR L          5D   BIT 3,L        9D   RES 3,L        DD   SET 3,L
1E    RR (HL)       5E   BIT 3,(HL)     9E   RES 3,(HL)     DE   SET 3,(HL)
1F    RR A          5F   BIT 3,A        9F   RES 3,A        DF   SET 3,A
20   SLA B          60   BIT 4,B        A0   RES 4,B        E0   SET 4,B
21   SLA C          61   BIT 4,C        A1   RES 4,C        E1   SET 4,C
22   SLA D          62   BIT 4,D        A2   RES 4,D        E2   SET 4,D
23   SLA E          63   BIT 4,E        A3   RES 4,E        E3   SET 4,E
24   SLA H          64   BIT 4,H        A4   RES 4,H        E4   SET 4,H
25   SLA L          65   BIT 4,L        A5   RES 4,L        E5   SET 4,L
26   SLA (HL)       66   BIT 4,(HL)     A6   RES 4,(HL)     E6   SET 4,(HL)
27   SLA A          67   BIT 4,A        A7   RES 4,A        E7   SET 4,A
28   SRA B          68   BIT 5,B        A8   RES 5,B        E8   SET 5,B
29   SRA C          69   BIT 5,C        A9   RES 5,C        E9   SET 5,C
2A   SRA D          6A   BIT 5,D        AA   RES 5,D        EA   SET 5,D
2B   SRA E          6B   BIT 5,E        AB   RES 5,E        EB   SET 5,E
2C   SRA H          6C   BIT 5,H        AC   RES 5,H        EC   SET 5,H
2D   SRA L          6D   BIT 5,L        AD   RES 5,L        ED   SET 5,L
2E   SRA (HL)       6E   BIT 5,(HL)     AE   RES 5,(HL)     EE   SET 5,(HL)
2F   SRA A          6F   BIT 5,A        AF   RES 5,A        EF   SET 5,A
30   SLL B          70   BIT 6,B        B0   RES 6,B        F0   SET 6,B
31   SLL C          71   BIT 6,C        B1   RES 6,C        F1   SET 6,C
32   SLL D          72   BIT 6,D        B2   RES 6,D        F2   SET 6,D
33   SLL E          73   BIT 6,E        B3   RES 6,E        F3   SET 6,E
34   SLL H          74   BIT 6,H        B4   RES 6,H        F4   SET 6,H
35   SLL L          75   BIT 6,L        B5   RES 6,L        F5   SET 6,L
36   SLL (HL)       76   BIT 6,(HL)     B6   RES 6,(HL)     F6   SET 6,(HL)
37   SLL A          77   BIT 6,A        B7   RES 6,A        F7   SET 6,A
38   SRL B          78   BIT 7,B        B8   RES 7,B        F8   SET 7,B
39   SRL C          79   BIT 7,C        B9   RES 7,C        F9   SET 7,C
3A   SRL D          7A   BIT 7,D        BA   RES 7,D        FA   SET 7,D
3B   SRL E          7B   BIT 7,E        BB   RES 7,E        FB   SET 7,E
3C   SRL H          7C   BIT 7,H        BC   RES 7,H        FC   SET 7,H
3D   SRL L          7D   BIT 7,L        BD   RES 7,L        FD   SET 7,L
3E   SRL (HL)       7E   BIT 7,(HL)     BE   RES 7,(HL)     FE   SET 7,(HL)
3F   SRL A          7F   BIT 7,A        BF   RES 7,A        FF   SET 7,A
```

* DD xx 拡張

```




                    44    LD B,J        84   ADD A,J
                    45    LD B,X        85   ADD A,X
                    46    LD B,(JX+d)   86   ADD A,(JX+d)


09 ADD16 JX,BC

                                                            CB extension
                    4C    LD C,J        8C   ADC A,J
                    4D    LD C,X        8D   ADC A,X
                    4E    LD C,(JX+d)   8E   ADC A,(JX+d)





                    54    LD D,J        94   SUB A,J
                    55    LD D,X        95   SUB A,X
                    56    LD D,(JX+d)   96   SUB A,(JX+d)


19 ADD16 JX,DE


                    5C    LD E,J        9C   SBC A,J
                    5D    LD E,X        9D   SBC A,X
                    5E    LD E,(JX+d)   9E   SBC A,(JX+d)

                    60    LD J,B
21  LD16 JX,nn      61    LD J,C                            E1   POP JX
22  LD16 (nn),JX    62    LD J,D
23 INC16 JX         63    LD J,E
                    64    LD J,J        A4   AND A,J
                    65    LD J,X        A5   AND A,X        E5  PUSH JX
26    LD J,n        66    LD H,(JX+d)   A6   AND A,(JX+d)
                    67    LD J,A
                    68    LD X,B
29 ADD16 JX,JX      69    LD X,C                            E9    JP ,(JX)
2A  LD16 JX,(nn)    6A    LD X,D
2B DEC16 JX         6B    LD X,E
                    6C    LD X,J        AC   XOR A,J
                    6D    LD X,X        AD   XOR A,X
2E    LD X,n        6E    LD L,(JX+d)   AE   XOR A,(JX+d)
                    6F    LD X,A
                    70    LD (JX+d),B
                    71    LD (JX+d),C
                    72    LD (JX+d),D
                    73    LD (JX+d),E
34   INC (JX+d)     74    LD (JX+d),H   B4    OR A,J
35   DEC (JX+d)     75    LD (JX+d),L   B5    OR A,X
36    LD (JX+d),n                       B6    OR A,(JX+d)
                    77    LD (JX+d),A

39 ADD16 JX,SP                                              F9  LD16 SP,JX


                    7C    LD A,J        BC    CP A,J
                    7D    LD A,X        BD    CP A,X
                    7E    LD A,(JX+d)   BE    CP A,(JX+d)

```

* DD CB dd xx 拡張

```






06   RLC (JX+d)     46   BIT 0,(JX+d)   86   RES 0,(JX+d)   C6   SET 0,(JX+d)







0E   RRC (JX+d)     4E   BIT 1,(JX+d)   8E   RES 1,(JX+d)   CE   SET 1,(JX+d)







16    RL (JX+d)     56   BIT 2,(JX+d)   96   RES 2,(JX+d)   D6   SET 2,(JX+d)







1E    RR (JX+d)     5E   BIT 3,(JX+d)   9E   RES 3,(JX+d)   DE   SET 3,(JX+d)







26   SLA (JX+d)     66   BIT 4,(JX+d)   A6   RES 4,(JX+d)   E6   SET 4,(JX+d)







2E   SRA (JX+d)     6E   BIT 5,(JX+d)   AE   RES 5,(JX+d)   EE   SET 5,(JX+d)







36   SLL (JX+d)     76   BIT 6,(JX+d)   B6   RES 6,(JX+d)   F6   SET 6,(JX+d)







3E   SRL (JX+d)     7E   BIT 7,(JX+d)   BE   RES 7,(JX+d)   FE   SET 7,(JX+d)

```

* ED xx 拡張

```
                    40    IN B,(BC)
                    41   OUT (BC),B
                    42 SBC16 HL,BC
                    43  LD16 (nn),BC
                    44   NEG A



                    48    IN C,(BC)
                    49   OUT (BC),C
                    4A ADC16 HL,BC
                    4B  LD16 BC,(nn)




                    50    IN D,(BC)
                    51   OUT (BC),D
                    52 SBC16 HL,DE
                    53  LD16 (nn),DE




                    58    IN E,(BC)
                    59   OUT (BC),E
                    5A ADC16 HL,DE
                    5B  LD16 DE,(nn)




                    60    IN H,(BC)     A0   LDI
                    61   OUT (BC),H     A1   CPI
                    62 SBC16 HL,HL      A2   INI
                    63  LD16 (nn),HL    A3  OUTI



                    67   RRD
                    68    IN L,(BC)     A8   LDD
                    69   OUT (BC),L     A9   CPD
                    6A ADC16 HL,HL      AA   IND
                    6B  LD16 HL,(nn)    AB  OUTD



                    6F   RLD
                                        B0  LDIR
                                        B1  CPIR
                    72 SBC16 HL,SP      B2  INIR
                    73  LD16 (nn),SP    B3  OTIR




                    78    IN A,(BC)     B8  LDDR
                    79   OUT (BC),A     B9  CPDR
                    7A ADC16 HL,SP      BA  INDR
                    7B  LD16 SP,(nn)    BB  OTDR




```

* FD xx 拡張

```




                    44    LD B,K        84   ADD A,K
                    45    LD B,Y        85   ADD A,Y
                    46    LD B,(KY+d)   86   ADD A,(KY+d)


09 ADD16 KY,BC

                                                            CB extension
                    4C    LD C,K        8C   ADC A,K
                    4D    LD C,Y        8D   ADC A,Y
                    4E    LD C,(KY+d)   8E   ADC A,(KY+d)





                    54    LD D,K        94   SUB A,K
                    55    LD D,Y        95   SUB A,Y
                    56    LD D,(KY+d)   96   SUB A,(KY+d)


19 ADD16 KY,DE


                    5C    LD E,K        9C   SBC A,K
                    5D    LD E,Y        9D   SBC A,Y
                    5E    LD E,(KY+d)   9E   SBC A,(KY+d)

                    60    LD K,B
21  LD16 KY,nn      61    LD K,C                            E1   POP KY
22  LD16 (nn),KY    62    LD K,D
23 INC16 KY         63    LD K,E
                    64    LD K,K        A4   AND A,K
                    65    LD K,Y        A5   AND A,Y        E5  PUSH KY
26    LD K,n        66    LD H,(KY+d)   A6   AND A,(KY+d)
                    67    LD K,A
                    68    LD Y,B
29 ADD16 KY,KY      69    LD Y,C                            E9    JP ,(KY)
2A  LD16 KY,(nn)    6A    LD Y,D
2B DEC16 KY         6B    LD Y,E
                    6C    LD Y,K        AC   XOR A,K
                    6D    LD Y,Y        AD   XOR A,Y
2E    LD Y,n        6E    LD L,(KY+d)   AE   XOR A,(KY+d)
                    6F    LD Y,A
                    70    LD (KY+d),B
                    71    LD (KY+d),C
                    72    LD (KY+d),D
                    73    LD (KY+d),E
34   INC (KY+d)     74    LD (KY+d),H   B4    OR A,K
35   DEC (KY+d)     75    LD (KY+d),L   B5    OR A,Y
36    LD (KY+d),n                       B6    OR A,(KY+d)
                    77    LD (KY+d),A

39 ADD16 KY,SP                                              F9  LD16 SP,KY


                    7C    LD A,K        BC    CP A,K
                    7D    LD A,Y        BD    CP A,Y
                    7E    LD A,(KY+d)   BE    CP A,(KY+d)

```

* FD CB dd xx 拡張

```






06   RLC (KY+d)     46   BIT 0,(KY+d)   86   RES 0,(KY+d)   C6   SET 0,(KY+d)







0E   RRC (KY+d)     4E   BIT 1,(KY+d)   8E   RES 1,(KY+d)   CE   SET 1,(KY+d)







16    RL (KY+d)     56   BIT 2,(KY+d)   96   RES 2,(KY+d)   D6   SET 2,(KY+d)







1E    RR (KY+d)     5E   BIT 3,(KY+d)   9E   RES 3,(KY+d)   DE   SET 3,(KY+d)







26   SLA (KY+d)     66   BIT 4,(KY+d)   A6   RES 4,(KY+d)   E6   SET 4,(KY+d)







2E   SRA (KY+d)     6E   BIT 5,(KY+d)   AE   RES 5,(KY+d)   EE   SET 5,(KY+d)







36   SLL (KY+d)     76   BIT 6,(KY+d)   B6   RES 6,(KY+d)   F6   SET 6,(KY+d)







3E   SRL (KY+d)     7E   BIT 7,(KY+d)   BE   RES 7,(KY+d)   FE   SET 7,(KY+d)

```

つまり、[5月13日の記事](https://qiita.com/KoichiYasuoka/items/c270a580bc736849dfe5)に出てくる「DD CB dd 07」や「DD CB dd 03」は、現時点では未実装である。このあたりの「未定義命令」をどこまで実装すべきなのか。まあ、"SLL"と呼ばれる「未定義命令」(左シフトでLSBに1が入る)も実装してしまっているので、あと一息という気もしなくもないのだが。