Skip to content

Commit 07d6bba

Browse files
committed
Add ED-prefix disassembler coverage
Add 20 new unit tests to debugger_disassemble_unittest() covering the full range of ED-prefix (extended) instructions: ED IN reg,(C) / OUT (C),reg: - test36: ED 40 -> IN B,(C) - test37: ED 70 -> IN F,(C) (special-cased flag register form) - test38: ED 41 -> OUT (C),B - test39: ED 71 -> OUT (C),0 (special-cased zero form) ED SBC HL,rr and ADC HL,rr: - test40: ED 42 -> SBC HL,BC - test41: ED 4A -> ADC HL,BC ED LD (nn),rr and LD rr,(nn): - test42: ED 43 56 34 -> LD (3456),BC - test43: ED 4B 56 34 -> LD BC,(3456) ED NEG / RETN / RETI: - test44: ED 44 -> NEG - test45: ED 45 -> RETN - test46: ED 4D -> RETI ED interrupt mode: - test47: ED 46 -> IM 0 - test48: ED 56 -> IM 1 - test49: ED 5E -> IM 2 ED register-pair accumulator ops: - test50: ED 47 -> LD I,A - test51: ED 57 -> LD A,I ED block instructions: - test52: ED A0 -> LDI - test53: ED B0 -> LDIR - test54: ED A8 -> LDD - test55: ED B8 -> LDDR
1 parent ffa4f49 commit 07d6bba

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

debugger/disassemble.c

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,40 @@ libspectrum_byte test33_data[] = { 0x18, 0xfe }; /* JR -2 offset -> target 0x40
888888
libspectrum_byte test34_data[] = { 0x10, 0xfe }; /* DJNZ -2 offset -> target 0x4000 */
889889
libspectrum_byte test35_data[] = { 0x20, 0x04 }; /* JR NZ,+4 -> target 0x4006 */
890890

891+
/* ED prefix: IN reg,(C) and OUT (C),reg */
892+
libspectrum_byte test36_data[] = { 0xed, 0x40 }; /* IN B,(C) */
893+
libspectrum_byte test37_data[] = { 0xed, 0x70 }; /* IN F,(C) — special case */
894+
libspectrum_byte test38_data[] = { 0xed, 0x41 }; /* OUT (C),B */
895+
libspectrum_byte test39_data[] = { 0xed, 0x71 }; /* OUT (C),0 — special case */
896+
897+
/* ED prefix: SBC HL,rr and ADC HL,rr */
898+
libspectrum_byte test40_data[] = { 0xed, 0x42 }; /* SBC HL,BC */
899+
libspectrum_byte test41_data[] = { 0xed, 0x4a }; /* ADC HL,BC */
900+
901+
/* ED prefix: LD (nn),rr and LD rr,(nn) */
902+
libspectrum_byte test42_data[] = { 0xed, 0x43, 0x56, 0x34 }; /* LD (3456),BC */
903+
libspectrum_byte test43_data[] = { 0xed, 0x4b, 0x56, 0x34 }; /* LD BC,(3456) */
904+
905+
/* ED prefix: NEG, RETN, RETI */
906+
libspectrum_byte test44_data[] = { 0xed, 0x44 }; /* NEG */
907+
libspectrum_byte test45_data[] = { 0xed, 0x45 }; /* RETN */
908+
libspectrum_byte test46_data[] = { 0xed, 0x4d }; /* RETI */
909+
910+
/* ED prefix: IM 0, IM 1, IM 2 */
911+
libspectrum_byte test47_data[] = { 0xed, 0x46 }; /* IM 0 */
912+
libspectrum_byte test48_data[] = { 0xed, 0x56 }; /* IM 1 */
913+
libspectrum_byte test49_data[] = { 0xed, 0x5e }; /* IM 2 */
914+
915+
/* ED prefix: LD I,A and LD A,I */
916+
libspectrum_byte test50_data[] = { 0xed, 0x47 }; /* LD I,A */
917+
libspectrum_byte test51_data[] = { 0xed, 0x57 }; /* LD A,I */
918+
919+
/* ED prefix: block instructions */
920+
libspectrum_byte test52_data[] = { 0xed, 0xa0 }; /* LDI */
921+
libspectrum_byte test53_data[] = { 0xed, 0xb0 }; /* LDIR */
922+
libspectrum_byte test54_data[] = { 0xed, 0xa8 }; /* LDD */
923+
libspectrum_byte test55_data[] = { 0xed, 0xb8 }; /* LDDR */
924+
891925
static int
892926
run_test( libspectrum_byte *data, size_t data_length, const char *expected )
893927
{
@@ -972,5 +1006,39 @@ debugger_disassemble_unittest( void )
9721006
r += run_test( test34_data, sizeof( test34_data ), "DJNZ 4000" );
9731007
r += run_test( test35_data, sizeof( test35_data ), "JR NZ,4006" );
9741008

1009+
/* ED prefix: IN reg,(C) and OUT (C),reg */
1010+
r += run_test( test36_data, sizeof( test36_data ), "IN B,(C)" );
1011+
r += run_test( test37_data, sizeof( test37_data ), "IN F,(C)" );
1012+
r += run_test( test38_data, sizeof( test38_data ), "OUT (C),B" );
1013+
r += run_test( test39_data, sizeof( test39_data ), "OUT (C),0" );
1014+
1015+
/* ED prefix: SBC HL,rr and ADC HL,rr */
1016+
r += run_test( test40_data, sizeof( test40_data ), "SBC HL,BC" );
1017+
r += run_test( test41_data, sizeof( test41_data ), "ADC HL,BC" );
1018+
1019+
/* ED prefix: LD (nn),rr and LD rr,(nn) */
1020+
r += run_test( test42_data, sizeof( test42_data ), "LD (3456),BC" );
1021+
r += run_test( test43_data, sizeof( test43_data ), "LD BC,(3456)" );
1022+
1023+
/* ED prefix: NEG, RETN, RETI */
1024+
r += run_test( test44_data, sizeof( test44_data ), "NEG" );
1025+
r += run_test( test45_data, sizeof( test45_data ), "RETN" );
1026+
r += run_test( test46_data, sizeof( test46_data ), "RETI" );
1027+
1028+
/* ED prefix: IM 0, IM 1, IM 2 */
1029+
r += run_test( test47_data, sizeof( test47_data ), "IM 0" );
1030+
r += run_test( test48_data, sizeof( test48_data ), "IM 1" );
1031+
r += run_test( test49_data, sizeof( test49_data ), "IM 2" );
1032+
1033+
/* ED prefix: LD I,A and LD A,I */
1034+
r += run_test( test50_data, sizeof( test50_data ), "LD I,A" );
1035+
r += run_test( test51_data, sizeof( test51_data ), "LD A,I" );
1036+
1037+
/* ED prefix: block instructions */
1038+
r += run_test( test52_data, sizeof( test52_data ), "LDI" );
1039+
r += run_test( test53_data, sizeof( test53_data ), "LDIR" );
1040+
r += run_test( test54_data, sizeof( test54_data ), "LDD" );
1041+
r += run_test( test55_data, sizeof( test55_data ), "LDDR" );
1042+
9751043
return r;
9761044
}

0 commit comments

Comments
 (0)