昨日の記事で何とか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
24 INC J 64 LD J,J A4 AND A,J
25 DEC 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
2C INC X 6C LD X,J AC XOR A,J
2D DEC X 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
24 INC K 64 LD K,K A4 AND A,K
25 DEC 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
2C INC Y 6C LD Y,K AC XOR A,K
2D DEC Y 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日の記事に出てくる「DD CB dd 07」や「DD CB dd 03」は、現時点では未実装である。このあたりの「未定義命令」をどこまで実装すべきなのか。まあ、"SLL"と呼ばれる「未定義命令」(左シフトでLSBに1が入る)も実装してしまっているので、あと一息という気もしなくもないのだが。