Created
June 3, 2023 18:57
-
-
Save molenzwiebel/c24fda1da6f42d7a52f169882228d6e2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <inttypes.h> | |
#include <string.h> | |
void hexdump(void *ptr, int buflen) { | |
unsigned char *buf = (unsigned char*)ptr; | |
int i, j; | |
for (i=0; i<buflen; i+=16) { | |
printf("%06x: ", i); | |
for (j=0; j<16; j++) | |
if (i+j < buflen) | |
printf("%02x ", buf[i+j]); | |
else | |
printf(" "); | |
printf(" "); | |
for (j=0; j<16; j++) | |
if (i+j < buflen) | |
printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.'); | |
printf("\n"); | |
} | |
} | |
void do_exit(uint16_t* mem, uint16_t code) { | |
hexdump(mem, 256); | |
printf("Done with %hx!\n", code); | |
exit(0); | |
} | |
uint16_t reg0 = 0, reg1 = 0, reg2 = 0, reg3 = 0; | |
uint16_t mem[128] = {0}; | |
uint16_t stack[128] = {0}; | |
uint16_t stack_pointer = 0; | |
#define push(x) (stack[stack_pointer++] = x) | |
#define pop() (stack[--stack_pointer]) | |
void f0(); | |
void f7(); | |
void f10(); | |
void f13(); | |
void f187(); | |
void f20(); | |
void f42(); | |
void f73(); | |
void f170(); | |
void f179(); | |
void f57(); | |
void foo() { | |
} | |
void f0() { | |
_0: reg1 = 0; | |
_1: reg2 = 0; | |
_2: reg3 = 0; | |
_3: f7(); | |
_4: f10(); | |
_5: f13(); | |
_6: f187(); | |
} | |
void f7() { | |
_7: reg1 = 0; | |
_8: f20(); | |
_9: return; | |
} | |
void f10() { | |
_10: reg1 = 0; | |
_11: f42(); | |
_12: return; | |
} | |
void f13() { | |
_13: reg1 = 48; | |
_14: f73(); | |
_15: reg1 = 48; | |
_16: f170(); | |
_17: reg1 = 48; | |
_18: f179(); | |
_19: return; | |
} | |
void f20() { | |
_20: reg2 = reg1; | |
_21: reg3 = mem[reg2]; | |
_22: reg2 = reg2 + 1; | |
_23: reg2 = reg2 % 32; | |
_24: reg3 = reg3 + mem[reg2]; | |
_25: reg2 = reg2 + 1; | |
_26: reg2 = reg2 % 32; | |
_27: reg3 = reg3 + mem[reg2]; | |
_28: reg1 = reg1 + 48; | |
_29: reg3 = reg3 + 4919; | |
_30: mem[reg1] = mem[reg1] ^ reg3; | |
_31: reg1 = reg1 - 48; | |
_32: reg1 = reg1 + 1; | |
_33: reg1 = reg1 % 32; | |
_34: if (reg1 != 0) goto _20; | |
_35: return; | |
_36: mem[reg1] = mem[reg1] + reg2; | |
_37: reg1 = reg1 + 1; | |
_38: reg3 = reg1; | |
_39: reg3 = reg3 - 80; | |
_40: if (reg3 != 0) goto _36; | |
_41: return; | |
} | |
void f42() { | |
_42: reg2 = reg1; | |
_43: reg3 = mem[reg2]; | |
_44: reg2 = reg2 + 1; | |
_45: reg2 = reg2 % 32; | |
_46: reg3 = reg3 + mem[reg2]; | |
_47: f57(); | |
_48: reg3 = 48; | |
_49: reg3 = reg1 + reg3; | |
_50: mem[reg3] = mem[reg3] ^ reg2; | |
_51: reg2 = 255; | |
_52: mem[reg3] = mem[reg3] & reg2; | |
_53: reg1 = reg1 + 1; | |
_54: reg1 = reg1 % 32; | |
_55: if (reg1 != 0) goto _42; | |
_56: return; | |
} | |
void f57() { | |
_57: reg2 = 127; | |
_58: mem[reg2] = reg1; | |
_59: reg2 = reg3; | |
_60: reg2 = reg2 - 1; | |
_61: reg1 = reg2; | |
_62: reg1 = reg1 * 3; | |
_63: reg1 = reg3 - reg1; | |
_64: if (reg1 == 0) goto _70; | |
_65: reg1 = reg1 + 1; | |
_66: if (reg1 == 0) goto _70; | |
_67: reg1 = reg1 + 1; | |
_68: if (reg1 == 0) goto _70; | |
_69: if (reg1 != 0) goto _60; | |
_70: reg3 = 127; | |
_71: reg1 = mem[reg3]; | |
_72: return; | |
} | |
void f73() { | |
_73: reg2 = 195; | |
_74: mem[reg1] = mem[reg1] - reg2; | |
_75: reg1 = reg1 + 1; | |
_76: reg2 = 222; | |
_77: mem[reg1] = mem[reg1] - reg2; | |
_78: reg1 = reg1 + 1; | |
_79: reg2 = 44; | |
_80: mem[reg1] = mem[reg1] - reg2; | |
_81: reg1 = reg1 + 1; | |
_82: reg2 = 127; | |
_83: mem[reg1] = mem[reg1] - reg2; | |
_84: reg1 = reg1 + 1; | |
_85: reg2 = 38; | |
_86: mem[reg1] = mem[reg1] - reg2; | |
_87: reg1 = reg1 + 1; | |
_88: reg2 = 127; | |
_89: mem[reg1] = mem[reg1] - reg2; | |
_90: reg1 = reg1 + 1; | |
_91: reg2 = 105; | |
_92: mem[reg1] = mem[reg1] - reg2; | |
_93: reg1 = reg1 + 1; | |
_94: reg2 = 110; | |
_95: mem[reg1] = mem[reg1] - reg2; | |
_96: reg1 = reg1 + 1; | |
_97: reg2 = 12; | |
_98: mem[reg1] = mem[reg1] - reg2; | |
_99: reg1 = reg1 + 1; | |
_100: reg2 = 125; | |
_101: mem[reg1] = mem[reg1] - reg2; | |
_102: reg1 = reg1 + 1; | |
_103: reg2 = 10; | |
_104: mem[reg1] = mem[reg1] - reg2; | |
_105: reg1 = reg1 + 1; | |
_106: reg2 = 12; | |
_107: mem[reg1] = mem[reg1] - reg2; | |
_108: reg1 = reg1 + 1; | |
_109: reg2 = 42; | |
_110: mem[reg1] = mem[reg1] - reg2; | |
_111: reg1 = reg1 + 1; | |
_112: reg2 = 109; | |
_113: mem[reg1] = mem[reg1] - reg2; | |
_114: reg1 = reg1 + 1; | |
_115: reg2 = 8; | |
_116: mem[reg1] = mem[reg1] - reg2; | |
_117: reg1 = reg1 + 1; | |
_118: reg2 = 118; | |
_119: mem[reg1] = mem[reg1] - reg2; | |
_120: reg1 = reg1 + 1; | |
_121: reg2 = 10; | |
_122: mem[reg1] = mem[reg1] - reg2; | |
_123: reg1 = reg1 + 1; | |
_124: reg2 = 15; | |
_125: mem[reg1] = mem[reg1] - reg2; | |
_126: reg1 = reg1 + 1; | |
_127: reg2 = 31; | |
_128: mem[reg1] = mem[reg1] - reg2; | |
_129: reg1 = reg1 + 1; | |
_130: reg2 = 111; | |
_131: mem[reg1] = mem[reg1] - reg2; | |
_132: reg1 = reg1 + 1; | |
_133: reg2 = 24; | |
_134: mem[reg1] = mem[reg1] - reg2; | |
_135: reg1 = reg1 + 1; | |
_136: reg2 = 9; | |
_137: mem[reg1] = mem[reg1] - reg2; | |
_138: reg1 = reg1 + 1; | |
_139: reg2 = 112; | |
_140: mem[reg1] = mem[reg1] - reg2; | |
_141: reg1 = reg1 + 1; | |
_142: reg2 = 49; | |
_143: mem[reg1] = mem[reg1] - reg2; | |
_144: reg1 = reg1 + 1; | |
_145: reg2 = 231; | |
_146: mem[reg1] = mem[reg1] - reg2; | |
_147: reg1 = reg1 + 1; | |
_148: reg2 = 217; | |
_149: mem[reg1] = mem[reg1] - reg2; | |
_150: reg1 = reg1 + 1; | |
_151: reg2 = 24; | |
_152: mem[reg1] = mem[reg1] - reg2; | |
_153: reg1 = reg1 + 1; | |
_154: reg2 = 46; | |
_155: mem[reg1] = mem[reg1] - reg2; | |
_156: reg1 = reg1 + 1; | |
_157: reg2 = 62; | |
_158: mem[reg1] = mem[reg1] - reg2; | |
_159: reg1 = reg1 + 1; | |
_160: reg2 = 220; | |
_161: mem[reg1] = mem[reg1] - reg2; | |
_162: reg1 = reg1 + 1; | |
_163: reg2 = 197; | |
_164: mem[reg1] = mem[reg1] - reg2; | |
_165: reg1 = reg1 + 1; | |
_166: reg2 = 222; | |
_167: mem[reg1] = mem[reg1] - reg2; | |
_168: reg1 = reg1 + 1; | |
_169: return; | |
} | |
void f170() { | |
_170: reg2 = 1; | |
_171: reg3 = mem[reg1]; | |
_172: if (reg3 != 0) goto _174; | |
_173: if (reg3 == 0) goto _175; | |
_174: mem[reg1] = reg2; | |
_175: reg1 = reg1 + 1; | |
_176: reg1 = reg1 % 80; | |
_177: if (reg1 != 0) goto _170; | |
_178: return; | |
} | |
void f179() { | |
_179: reg2 = 0; | |
_180: reg3 = mem[reg1]; | |
_181: reg2 = reg3 + reg2; | |
_182: reg1 = reg1 + 1; | |
_183: reg1 = reg1 % 80; | |
_184: if (reg1 != 0) goto _180; | |
_185: reg1 = reg2; | |
_186: return; | |
} | |
void f187() { | |
_187: do_exit(mem, reg1); | |
} | |
int main() { | |
memcpy(mem, "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345", 32); | |
f0(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment