Думаю ни для кого не секрет, что программы от уважаемого CTV получаются на редкость кривыми (несмотря на критику), и этот раз не стал исключением.
Сегодня он представил очередное детище - "Эмулятор CP/M86". По его заявлениям, программа эмулирует "полноценную среду запуска, как в оригинальном CP/M86, с виртуальными floppy дисками и командами".
На первый взгляд все выглядит именно так, у нас якобы есть два диска, которые привязаны к папкам, некий шелл (сразу ясно, что не родной), и даже выводятся копирайты биоса и самой CP/M-86.
Но на самом деле это жуткая система костылей, которая заставит любого программиста свалиться в обморок.
Рассматривая программу, я случайно нажал на CTRL-C и обнаружил интересную вещь. Программа выводит на экран предложение завершить пакетный (то есть BAT) файл.
Мне стало интересно, я залез в программу дизассемблером (IDA) и с удивлением обнаружил там куски BAT файлов, среди которых была строка "@echo off".
Ее я решил, интереса ради, затереть пробелами и запустить подправленную софтину. Тут то и полезли костыли.
В папке "afolder" ничего не оказалось, а вот в "ytmp" меня ждала целая свалка батников и екзешников.
Свалка увеличивалась с выполнением каждой команды в горе-эмуляторе, да еще и не стиралась после закрытия программки (так что побочно сия приблуда еще и засоряет вам накопитель).
Все екзешники одинаковы и содержат строку "RCHELICOPTERFTW" (52 43 48 45 4C 49 43 4F 50 54 45 52 46 54 57). На программу это не похоже, поэтому назначения этих файлов мне непонятны.
Зато с батниками все оказалось куда интереснее. Вот пример одного из них:
Как оказалось, это и есть "шелл" недоэмулятора. А копирайты - бутафория, выводимая командами echo.
При этом зачем-то тут используется странная рекурсия. После исполнения команды батник запускает екзешник эмулятора снова, тот в свою очередь опять создает батник и екзешник. Вот поэтому и получается файловая свалка.
Видимо CTV плох даже в создании батников и не осилил сделать нормальное зацикливание скрипта (а ведь достаточно поставить лейбл в начало и делать на него goto в конце). Позор!
Мне все еще не ясно зачем нужны екзешники (их имя указывается в переменной bfcec), а также для чего задается папка в переменной MYFILES.
Но можно понять, что по команде "dir" запускается программа ACPD.EXE или BCPD.EXE. Это дос программки, криво выводящие (даже в самом досе) содержимое текущего каталога в стиле CP/M. Единственное их отличие - выводимая буква диска (A: и B: соответственно).
Но если мы вводим имя существующего файла, происходит вызов программы API.EXE с аргументом в виде пути до этого файла.
Если запустить ее саму по себе, программа выведет несколько пустых строк и завершится. Мне тут же пришла в голову идея, что это, вероятно, тот самый эмулятор от Jim Lopushinsky, но с потертыми стоками.
Я открыл оригинальную программу и API.EXE в HEX-редакторе, и мои ожидания подтвердились. Это один и тот же файл с разницей в том, что в API.EXE копирайты затерты пробелами. Попахивает нарушением авторских прав.
Итог: созданная CTV программа никак не может считаться эмулятором, а скорее жалким имитатором CP/M-86 с кучей костылей, забивающих жесткий диск и использующих сторонние программы. Да и фактически, это даже не программа, а, скорее всего, просто упакованный конвертером батник, изложенный выше. Предлагаю админам кинуть "эмулятор" в мусорку (--НА УДАЛЕНИЕ), а CTV пусть подумает и, надеюсь, сделает соответствующие выводы.