tnt23, мне трудно выкатить готовый пример, потому что у меня тут все уже давно в виде фарша. Если охота самому испытать удовольствие без купюр,
https://britzl.github.io/roguearchive/
Кажется, я корпел над lrogue-5.3.zip
Вид для печати
tnt23, мне трудно выкатить готовый пример, потому что у меня тут все уже давно в виде фарша. Если охота самому испытать удовольствие без купюр,
https://britzl.github.io/roguearchive/
Кажется, я корпел над lrogue-5.3.zip
Ацтек проглотил жертвенный сорец без единого ругательства, за что ему зачет. Но выкатил 5152 байта наигустейшего DAD SP. Код немножко напоминает результат работы movfuscator-а. Могила.
- - - Добавлено - - -
Пример:
исходный код
Скрытый текст
Код:is_pack_letter(c, mask)
short *c;
unsigned short *mask;
{
if (((*c == '?') || (*c == '!') || (*c == ':') || (*c == '=') ||
(*c == ')') || (*c == ']') || (*c == '/') || (*c == ','))) {
switch(*c) {
case '?':
*mask = SCROLL;
break;
case '!':
*mask = POTION;
break;
case ':':
*mask = FOOD;
break;
case ')':
*mask = WEAPON;
break;
case ']':
*mask = ARMOR;
break;
case '/':
*mask = WAND;
break;
case '=':
*mask = RING;
break;
case ',':
*mask = AMULET;
break;
}
*c = LIST;
return(1);
}
return(((*c >= 'a') && (*c <= 'z')) || (*c == CANCEL) || (*c == LIST));
}
[свернуть]
результат
Скрытый текст
Код:2512 10d3 .112 EQU 0
2513 10d3 PUBLIC is_pack__
2514 10d3 11 xx xx is_pack__: lxi d,.116
2515 10d6 cd xx xx call csave
2516 10d9 21 xx xx LXI H,8-.116
2517 10dc 39 DAD SP
2518 10dd 5e MOV E,M
2519 10de 23 INX H
2520 10df 56 MOV D,M
2521 10e0 eb XCHG
2522 10e1 5e MOV E,M
2523 10e2 23 INX H
2524 10e3 56 MOV D,M
2525 10e4 21 3f 00 LXI H,63
2526 10e7 cd xx xx CALL .eq
2527 10ea c2 xx xx JNZ .118
2528 10ed 21 xx xx LXI H,8-.116
2529 10f0 39 DAD SP
2530 10f1 5e MOV E,M
2531 10f2 23 INX H
2532 10f3 56 MOV D,M
2533 10f4 eb XCHG
2534 10f5 5e MOV E,M
2535 10f6 23 INX H
2536 10f7 56 MOV D,M
2537 10f8 21 21 00 LXI H,33
2538 10fb cd xx xx CALL .eq
2539 10fe c2 xx xx JNZ .118
2540 1101 21 xx xx LXI H,8-.116
2541 1104 39 DAD SP
2542 1105 5e MOV E,M
2543 1106 23 INX H
2544 1107 56 MOV D,M
2545 1108 eb XCHG
2546 1109 5e MOV E,M
2547 110a 23 INX H
2548 110b 56 MOV D,M
2549 110c 21 3a 00 LXI H,58
2550 110f cd xx xx CALL .eq
2551 1112 c2 xx xx JNZ .118
2552 1115 21 xx xx LXI H,8-.116
2553 1118 39 DAD SP
2554 1119 5e MOV E,M
2555 111a 23 INX H
2556 111b 56 MOV D,M
2557 111c eb XCHG
2558 111d 5e MOV E,M
2559 111e 23 INX H
2560 111f 56 MOV D,M
2561 1120 21 3d 00 LXI H,61
2562 1123 cd xx xx CALL .eq
2563 1126 c2 xx xx JNZ .118
2564 1129 21 xx xx LXI H,8-.116
2565 112c 39 DAD SP
2566 112d 5e MOV E,M
2567 112e 23 INX H
2568 112f 56 MOV D,M
2569 1130 eb XCHG
2570 1131 5e MOV E,M
2571 1132 23 INX H
2572 1133 56 MOV D,M
2573 1134 21 29 00 LXI H,41
2574 1137 cd xx xx CALL .eq
2575 113a c2 xx xx JNZ .118
2576 113d 21 xx xx LXI H,8-.116
2577 1140 39 DAD SP
2578 1141 5e MOV E,M
2579 1142 23 INX H
2580 1143 56 MOV D,M
2581 1144 eb XCHG
2582 1145 5e MOV E,M
2583 1146 23 INX H
2584 1147 56 MOV D,M
2585 1148 21 5d 00 LXI H,93
2586 114b cd xx xx CALL .eq
2587 114e c2 xx xx JNZ .118
2588 1151 21 xx xx LXI H,8-.116
2589 1154 39 DAD SP
2590 1155 5e MOV E,M
2591 1156 23 INX H
2592 1157 56 MOV D,M
2593 1158 eb XCHG
2594 1159 5e MOV E,M
2595 115a 23 INX H
2596 115b 56 MOV D,M
2597 115c 21 2f 00 LXI H,47
2598 115f cd xx xx CALL .eq
2599 1162 c2 xx xx JNZ .118
2600 1165 21 xx xx LXI H,8-.116
2601 1168 39 DAD SP
2602 1169 5e MOV E,M
2603 116a 23 INX H
2604 116b 56 MOV D,M
2605 116c eb XCHG
2606 116d 5e MOV E,M
2607 116e 23 INX H
2608 116f 56 MOV D,M
2609 1170 21 2c 00 LXI H,44
2610 1173 cd xx xx CALL .eq
2611 1176 ca xx xx JZ .117
2612 1179 .118:
2613 1179 21 xx xx LXI H,8-.116
2614 117c 39 DAD SP
2615 117d 5e MOV E,M
2616 117e 23 INX H
2617 117f 56 MOV D,M
2618 1180 eb XCHG
2619 1181 5e MOV E,M
2620 1182 23 INX H
2621 1183 56 MOV D,M
2622 1184 eb XCHG
2623 1185 c3 xx xx JMP .119
2624 1188 .121:
2625 1188 21 04 00 LXI H,4
2626 118b e5 PUSH H
2627 118c 21 xx xx LXI H,12-.116
2628 118f 39 DAD SP
2629 1190 5e MOV E,M
2630 1191 23 INX H
2631 1192 56 MOV D,M
2632 1193 eb XCHG
2633 1194 d1 POP D
2634 1195 73 MOV M,E
2635 1196 23 INX H
2636 1197 72 MOV M,D
2637 1198 c3 xx xx JMP .120
2638 119b .122:
2639 119b 21 08 00 LXI H,8
2640 119e e5 PUSH H
2641 119f 21 xx xx LXI H,12-.116
2642 11a2 39 DAD SP
2643 11a3 5e MOV E,M
2644 11a4 23 INX H
2645 11a5 56 MOV D,M
2646 11a6 eb XCHG
2647 11a7 d1 POP D
2648 11a8 73 MOV M,E
2649 11a9 23 INX H
2650 11aa 72 MOV M,D
2651 11ab c3 xx xx JMP .120
2652 11ae .123:
2653 11ae 21 20 00 LXI H,32
2654 11b1 e5 PUSH H
2655 11b2 21 xx xx LXI H,12-.116
2656 11b5 39 DAD SP
2657 11b6 5e MOV E,M
2658 11b7 23 INX H
2659 11b8 56 MOV D,M
2660 11b9 eb XCHG
2661 11ba d1 POP D
2662 11bb 73 MOV M,E
2663 11bc 23 INX H
2664 11bd 72 MOV M,D
2665 11be c3 xx xx JMP .120
2666 11c1 .124:
2667 11c1 21 02 00 LXI H,2
2668 11c4 e5 PUSH H
2669 11c5 21 xx xx LXI H,12-.116
2670 11c8 39 DAD SP
2671 11c9 5e MOV E,M
2672 11ca 23 INX H
2673 11cb 56 MOV D,M
2674 11cc eb XCHG
2675 11cd d1 POP D
2676 11ce 73 MOV M,E
2677 11cf 23 INX H
2678 11d0 72 MOV M,D
2679 11d1 c3 xx xx JMP .120
2680 11d4 .125:
2681 11d4 21 01 00 LXI H,1
2682 11d7 e5 PUSH H
2683 11d8 21 xx xx LXI H,12-.116
2684 11db 39 DAD SP
2685 11dc 5e MOV E,M
2686 11dd 23 INX H
2687 11de 56 MOV D,M
2688 11df eb XCHG
2689 11e0 d1 POP D
2690 11e1 73 MOV M,E
2691 11e2 23 INX H
2692 11e3 72 MOV M,D
2693 11e4 c3 xx xx JMP .120
2694 11e7 .126:
2695 11e7 21 40 00 LXI H,64
2696 11ea e5 PUSH H
2697 11eb 21 xx xx LXI H,12-.116
2698 11ee 39 DAD SP
2699 11ef 5e MOV E,M
2700 11f0 23 INX H
2701 11f1 56 MOV D,M
2702 11f2 eb XCHG
2703 11f3 d1 POP D
2704 11f4 73 MOV M,E
2705 11f5 23 INX H
2706 11f6 72 MOV M,D
2707 11f7 c3 xx xx JMP .120
2708 11fa .127:
2709 11fa 21 80 00 LXI H,128
2710 11fd e5 PUSH H
2711 11fe 21 xx xx LXI H,12-.116
2712 1201 39 DAD SP
2713 1202 5e MOV E,M
2714 1203 23 INX H
2715 1204 56 MOV D,M
2716 1205 eb XCHG
2717 1206 d1 POP D
2718 1207 73 MOV M,E
2719 1208 23 INX H
2720 1209 72 MOV M,D
2721 120a c3 xx xx JMP .120
2722 120d .128:
2723 120d 21 00 01 LXI H,256
2724 1210 e5 PUSH H
2725 1211 21 xx xx LXI H,12-.116
2726 1214 39 DAD SP
2727 1215 5e MOV E,M
2728 1216 23 INX H
2729 1217 56 MOV D,M
2730 1218 eb XCHG
2731 1219 d1 POP D
2732 121a 73 MOV M,E
2733 121b 23 INX H
2734 121c 72 MOV M,D
2735 121d c3 xx xx JMP .120
2736 1220 .119:
2737 1220 cd xx xx CALL .swt
2738 1223 08 00 DW 8
2739 1225 21 00 xx xx DW 33,.122
2740 1229 29 00 xx xx DW 41,.124
2741 122d 2c 00 xx xx DW 44,.128
2742 1231 2f 00 xx xx DW 47,.126
2743 1235 3a 00 xx xx DW 58,.123
2744 1239 3d 00 xx xx DW 61,.127
2745 123d 3f 00 xx xx DW 63,.121
2746 1241 5d 00 xx xx DW 93,.125
2747 1245 xx xx DW .120
2748 1247 .120:
2749 1247 21 2a 00 LXI H,42
2750 124a e5 PUSH H
2751 124b 21 xx xx LXI H,10-.116
2752 124e 39 DAD SP
2753 124f 5e MOV E,M
2754 1250 23 INX H
2755 1251 56 MOV D,M
2756 1252 eb XCHG
2757 1253 d1 POP D
2758 1254 73 MOV M,E
2759 1255 23 INX H
2760 1256 72 MOV M,D
2761 1257 21 01 00 LXI H,1
2762 125a c9 RET
2763 125b .117:
2764 125b 21 xx xx LXI H,8-.116
2765 125e 39 DAD SP
2766 125f 5e MOV E,M
2767 1260 23 INX H
2768 1261 56 MOV D,M
2769 1262 eb XCHG
2770 1263 5e MOV E,M
2771 1264 23 INX H
2772 1265 56 MOV D,M
2773 1266 21 61 00 LXI H,97
2774 1269 cd xx xx CALL .ge
2775 126c ca xx xx JZ .130
2776 126f 21 xx xx LXI H,8-.116
2777 1272 39 DAD SP
2778 1273 5e MOV E,M
2779 1274 23 INX H
2780 1275 56 MOV D,M
2781 1276 eb XCHG
2782 1277 5e MOV E,M
2783 1278 23 INX H
2784 1279 56 MOV D,M
2785 127a 21 7a 00 LXI H,122
2786 127d cd xx xx CALL .le
2787 1280 c2 xx xx JNZ .129
2788 1283 .130:
2789 1283 21 xx xx LXI H,8-.116
2790 1286 39 DAD SP
2791 1287 5e MOV E,M
2792 1288 23 INX H
2793 1289 56 MOV D,M
2794 128a eb XCHG
2795 128b 5e MOV E,M
2796 128c 23 INX H
2797 128d 56 MOV D,M
2798 128e 21 1b 00 LXI H,27
2799 1291 cd xx xx CALL .eq
2800 1294 c2 xx xx JNZ .129
2801 1297 21 xx xx LXI H,8-.116
2802 129a 39 DAD SP
2803 129b 5e MOV E,M
2804 129c 23 INX H
2805 129d 56 MOV D,M
2806 129e eb XCHG
2807 129f 5e MOV E,M
2808 12a0 23 INX H
2809 12a1 56 MOV D,M
2810 12a2 21 2a 00 LXI H,42
2811 12a5 cd xx xx CALL .eq
2812 12a8 c2 xx xx JNZ .129
2813 12ab 21 00 00 LXI H,0
2814 12ae c3 xx xx JMP .131
2815 12b1 .129:
2816 12b1 21 01 00 LXI H,1
2817 12b4 .131:
2818 12b4 c9 RET
[свернуть]
Тут конечно нельзя не поехидничать и над оригинальным стилем исходника.
- - - Добавлено - - -
... то есть одна функция is_pack_letter() =481 байт.
BDS C эту же процедуру переварил в 316 байт. Переписанную с использованием index() - 177. Кстати, структуры в нем в каком-то виде все-таки есть. Это не повод для оптимизма, конечно же. Ничего сложнее этой функции скомпилировать им решительно невозможно.
В чистом, по ассемблерному листингу.
- - - Добавлено - - -
И все операции приводятся к 16-битным, даже сравнение char константы и переменной типа char. Против такого даже ручками код не повертишь.
В частном случае именно rogue, не грех было бы и саму программу переписать. Игровое поле у них массив short 80x25, все барахло хранится в связных списках, хорошо, что не двунаправленных. При том, что там 3-10 элементов, dadfuscator-ного кода на их обслуживание получаются десятки килобайт. Ну и перлы вроде вот этого свича с двойной перепроверкой, хотя их не так много наверное. Я изначально наугад взял функцию, которая не ссылается на внешние типы.
А кстати, известно хоть что-нибудь про этот C-80? Откуда он родом?
rogue родом с pdp-11, о терминалах с меньшим числом столбцов никто там не слышал. Я больше переживаю, что памяти и так нет, а массив в котором заведомо буковки огроменный и объявлен как short. Впрочем, это не оригинальный rogue. Это наиболее древний из доступных в сорцах, при этом может быть ни на чем меньше линукса 0.93 его никогда не собирали.
А что, Okeah не умеет 80х25?