Skip to content

Instantly share code, notes, and snippets.

@lwerdna
Created August 8, 2019 19:21
Show Gist options
  • Save lwerdna/c7b144e0df26f98fcf7f48050880916b to your computer and use it in GitHub Desktop.
Save lwerdna/c7b144e0df26f98fcf7f48050880916b to your computer and use it in GitHub Desktop.
Z80 decision tree
// opening classifier from: /tmp/tmp.pickle
// n_nodes: 359
// n_leaves: 180
// max_depth: 25
if(byte1 <= 127)
if(byte1 <= 63)
if(b8 <= 0)
if(b9 <= 0)
if(b10 <= 0)
if(nybble1 <= 7)
if(byte1 <= 20)
if(nybble3 <= 0)
if(nybble2 <= 4)
return NOP();
else
return EX();
else
return DJNZ();
else
return JR();
else
if(byte1 <= 12)
if(b11 <= 0)
return NOP();
else
return EX();
else
if(byte0 <= 253)
return XOR();
else
if(byte1 <= 20)
return DJNZ();
else
return JR();
else
return INC();
else
return LD();
else
if(nybble2 <= 4)
if(b9 <= 0)
return LD();
else
return INC();
else
if(nybble2 <= 14)
if(nybble2 <= 10)
if(b10 <= 0)
return ADD();
else
if(nybble2 <= 6)
return DEC();
else
if(b13 <= 0)
if(nybble3 <= 0)
return RLCA();
else
return RLA();
else
if(byte1 <= 47)
return DAA();
else
return SCF();
else
return DEC();
else
if(b13 <= 0)
if(byte1 <= 23)
return RRCA();
else
return RRA();
else
if(byte1 <= 55)
return CPL();
else
return CCF();
else
if(byte1 <= 117)
return LD();
else
if(nybble2 <= 6)
return HALT();
else
return LD();
else
if(byte1 <= 135)
return ADD();
else
if(byte1 <= 143)
return ADC();
else
if(byte1 <= 151)
return SUB();
else
if(nybble3 <= 9)
return SBC();
else
if(byte1 <= 167)
return AND();
else
if(nybble3 <= 10)
return UNDEF();
else
if(byte1 <= 183)
return OR();
else
if(b14 <= 0)
return CP();
else
if(b10 <= 0)
if(b9 <= 0)
if(b8 <= 0)
return RET();
else
if(nybble2 <= 5)
return POP();
else
if(b12 <= 0)
if(byte1 <= 217)
return RET();
else
return JP();
else
if(byte1 <= 233)
return EXX();
else
return LD();
else
if(b8 <= 0)
return JP();
else
if(byte1 <= 223)
if(byte1 <= 199)
return JP();
else
if(nybble2 <= 7)
return OUT();
else
if(b12 <= 0)
if(byte0 <= 191)
if(byte0 <= 127)
if(nybble1 <= 3)
if(b3 <= 0)
if(b5 <= 0)
if(nybble1 <= 0)
return RLC();
else
return RL();
else
if(nybble1 <= 2)
return SLA();
else
return SLL();
else
if(b4 <= 0)
if(b5 <= 0)
return RRC();
else
return SRA();
else
if(nybble1 <= 2)
return RR();
else
return SRL();
else
return BIT();
else
return RES();
else
return SET();
else
return IN();
else
if(nybble3 <= 14)
return EX();
else
if(byte1 <= 247)
return DI();
else
return EI();
else
if(b9 <= 0)
if(b8 <= 0)
return CALL();
else
if(b11 <= 0)
return PUSH();
else
if(nybble3 <= 12)
return CALL();
else
if(byte0 <= 126)
if(byte0 <= 67)
if(byte0 <= 32)
if(nybble0 <= 8)
return XOR();
else
if(nybble0 <= 9)
if(b12 <= 0)
return XOR();
else
return ADD();
else
return XOR();
else
if(byte0 <= 46)
if(b12 <= 0)
return XOR();
else
if(b0 <= 0)
if(b1 <= 0)
if(b2 <= 0)
return XOR();
else
return INC();
else
return LD();
else
if(byte0 <= 36)
if(nybble0 <= 2)
return LD();
else
return INC();
else
if(byte0 <= 42)
if(b2 <= 0)
return ADD();
else
if(byte0 <= 38)
return DEC();
else
return XOR();
else
return DEC();
else
if(nybble0 <= 9)
if(nybble0 <= 8)
if(b2 <= 0)
if(b12 <= 0)
if(nybble1 <= 3)
return XOR();
else
if(b0 <= 0)
if(byte0 <= 65)
return IN();
else
return SBC();
else
if(byte0 <= 66)
return OUT();
else
return LD();
else
return XOR();
else
if(b12 <= 0)
return XOR();
else
if(b1 <= 0)
if(byte0 <= 52)
return INC();
else
return DEC();
else
if(byte0 <= 54)
return LD();
else
return XOR();
else
if(b12 <= 0)
return XOR();
else
return ADD();
else
return XOR();
else
if(b12 <= 0)
if(b2 <= 0)
if(b0 <= 0)
if(b1 <= 0)
if(byte0 <= 108)
return IN();
else
if(b3 <= 0)
return XOR();
else
return IN();
else
if(b3 <= 0)
return SBC();
else
return ADC();
else
if(b1 <= 0)
if(byte0 <= 109)
return OUT();
else
if(nybble0 <= 5)
return XOR();
else
return OUT();
else
if(b4 <= 0)
if(nybble1 <= 5)
return LD();
else
return XOR();
else
return LD();
else
if(byte0 <= 97)
if(b1 <= 0)
if(byte0 <= 72)
if(b0 <= 0)
return NEG();
else
return RETN();
else
if(nybble0 <= 12)
return XOR();
else
if(b4 <= 0)
return RETI();
else
return XOR();
else
if(b0 <= 0)
if(nybble1 <= 4)
if(nybble0 <= 10)
return IM();
else
return XOR();
else
return IM();
else
return LD();
else
if(nybble0 <= 14)
if(byte0 <= 105)
if(nybble0 <= 6)
return XOR();
else
return RRD();
else
return XOR();
else
return RLD();
else
if(byte0 <= 91)
if(b2 <= 0)
return XOR();
else
if(nybble0 <= 6)
return LD();
else
if(byte0 <= 78)
if(b3 <= 0)
return XOR();
else
return LD();
else
return XOR();
else
if(byte0 <= 117)
if(nybble0 <= 14)
return LD();
else
if(b4 <= 0)
return LD();
else
return XOR();
else
if(b2 <= 0)
return XOR();
else
if(byte0 <= 118)
return XOR();
else
return LD();
else
if(b6 <= 0)
if(b2 <= 0)
if(b12 <= 0)
if(nybble1 <= 9)
return XOR();
else
if(b4 <= 0)
if(b3 <= 0)
if(byte0 <= 160)
return LDI();
else
if(b1 <= 0)
return CPI();
else
if(byte0 <= 162)
return INI();
else
return OUTI();
else
if(byte0 <= 168)
return LDD();
else
if(byte0 <= 169)
return CPD();
else
if(nybble0 <= 10)
return IND();
else
return OUTD();
else
if(b3 <= 0)
if(byte0 <= 176)
return LDIR();
else
if(b0 <= 0)
return INIR();
else
if(nybble0 <= 2)
return CPIR();
else
return OTIR();
else
if(byte0 <= 184)
return LDDR();
else
if(byte0 <= 185)
return CPDR();
else
if(nybble0 <= 10)
return INDR();
else
return OTDR();
else
return XOR();
else
if(b12 <= 0)
return XOR();
else
if(nybble0 <= 6)
if(byte0 <= 157)
if(b4 <= 0)
return ADD();
else
return SUB();
else
if(b4 <= 0)
return AND();
else
return OR();
else
if(b0 <= 0)
if(b4 <= 0)
if(byte0 <= 157)
return ADC();
else
return UNDEF();
else
if(nybble1 <= 10)
return SBC();
else
return CP();
else
if(b1 <= 0)
if(nybble1 <= 8)
return ADC();
else
if(b4 <= 0)
return UNDEF();
else
if(b5 <= 0)
return SBC();
else
return CP();
else
return XOR();
else
if(byte0 <= 224)
return XOR();
else
if(byte0 <= 225)
if(b12 <= 0)
return XOR();
else
return POP();
else
if(byte0 <= 229)
if(b0 <= 0)
return XOR();
else
if(b12 <= 0)
return XOR();
else
if(byte0 <= 228)
return EX();
else
return PUSH();
else
if(byte0 <= 233)
if(nybble0 <= 8)
return XOR();
else
if(b12 <= 0)
return XOR();
else
return JP();
else
if(byte0 <= 248)
return XOR();
else
if(byte0 <= 249)
if(b12 <= 0)
return XOR();
else
return LD();
else
return XOR();
else
if(b8 <= 0)
if(nybble3 <= 12)
if(nybble2 <= 10)
return ADD();
else
return ADC();
else
if(nybble2 <= 10)
if(b13 <= 0)
return SUB();
else
if(byte1 <= 238)
return AND();
else
return OR();
else
if(b12 <= 0)
return UNDEF();
else
if(byte1 <= 238)
return SBC();
else
return CP();
else
return RST();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment