Разбор очередной софтины CTV (Эмулятор CP/M-86)

Беседы ни о чем

Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Vladislav » 16 май 2021, 23:41

Думаю ни для кого не секрет, что программы от уважаемого 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). На программу это не похоже, поэтому назначения этих файлов мне непонятны.
Зато с батниками все оказалось куда интереснее. Вот пример одного из них:
 Развернуть:
Код: Выделить всё
         
set ztmp=C:\Users\<user>\AppData\Local\Temp\ytmp
set MYFILES=C:\Users\<user>\AppData\Local\Temp\afolder
set bfcec=tmp4087.exe
set cmdline=
SHIFT /0
@echo off
title Emulator CP/M86
if not exist %systemroot%\system32\ntvdm.exe goto errnt
if "%dsk%" == "" chcp 1251
if "%dsk%" == "" cls

if "%dsk%" == "" echo  Generic Turbo XT Bios 1987
if "%dsk%" == "" echo     for 8088 or v20 cpu
if "%dsk%" == "" echo        (c)Anonymous
if "%dsk%" == "" echo Columbia Data Products, Inc
if "%dsk%" == "" echo Boot version 1.0
if "%dsk%" == "" echo July 2, 1982
if "%dsk%" == "" echo .
if "%dsk%" == "" echo CP/M-86 v1.1 for the columbia Data Products Multi-Personal Computer
if "%dsk%" == "" echo Copyright (C) 1982, Columbia Data Products, Inc
if "%dsk%" == "" echo CDP version 1.7 November 20, 1983
if "%dsk%" == "" echo .   
if "%dsk%" == "" echo .
if "%dsk%" == "" echo Hardware Configured:
if "%dsk%" == "" echo          memory (kb)    : 640
if "%dsk%" == "" echo           Controller    :Xebec
if "%dsk%" == "" echo  320k floppy disk(s)    :  2

if not exist "sds" cd data\disks\a
if "%dsk%" == "" set dsk=A
if "%1" == "" goto comd
goto body
:comd
SET /P cpm=%dsk%}
%0 %cpm%
pause

:body
if "%1" == "ver" goto vrr
if "%1" == "a:" goto da
if "%1" == "b:" goto db
if "%1" == "A:" goto da
if "%1" == "B:" goto db
if "%1" == "dir" if "%2" ==  "a:" goto drsa
if "%1" == "dir" if "%2" ==   "A:" goto drsa
if "%1" == "dir" if "%2" ==   "b:" goto drsb
if "%1" == "dir" if "%2" ==   "B:" goto drsb
if "%1" == "dir" goto drs
if "%1" == "ren" goto rens
if "%1" == "era" goto eras
if "%1" == "type" goto types
if "%1" == "copy" goto cops
if "%1" == "help" goto helps


if exist %1 goto str
if exist %1.cmd goto str

goto err

:str
"%~dp0\data\API.EXE" %1 %2 %3 %4
%0


:vrr
echo CP/M86 EMULATER
echo Sementsul Maxim 2021
%0

:da
cd %~dp0\data\disks\a
set dsk=A
%0


:db
cd %~dp0\data\disks\b
set dsk=B
%0


:err
echo %1?
%0

:drs
if "%dsk%" == "A" "%~dp0\data\ACPD.EXE"
if "%dsk%" == "B" "%~dp0\data\BCPD.EXE"
%0


:rens
RENAME %2 %3
%0


:eras
if "%2" == "sds" goto ssr
if "%2" == "SDS" goto ssr
if "%2" == "SdS" goto ssr
if "%2" == "Sds" goto ssr
if "%2" == "SDs" goto ssr
if "%2" == "sDS" goto ssr
if "%2" == "sDs" goto ssr

del %2 /q
%0


:types
type %2
%0

:cops
if "%dsk%" == "A" copy %2 %~dp0\data\disks\b\
if "%dsk%" == "B" copy %2 %~dp0\data\disks\a\
%0


:helps
echo =================================
echo ver- Версия эмулятора           =
echo =================================
echo = dir- Файлы на диске           =
echo = dir a:                        =
echo = dir b:                        =
echo = dir                           =
echo =================================
echo = ren- Переименовать файл       =
echo = ren fail.txt new fail.txt     =
echo =================================
echo = era- Удалить файл             =
echo = era file.txt                  =
echo =================================
echo = type- Читать файл             =
echo = type file.txt                 =
echo =================================
echo = copy- Копировать файл         =
echo = copy file.txt                 =
echo =================================
echo = help- Эта комманда            =
echo =================================
%0


:drsa
cd %~dp0\data\disks\a
"%~dp0\data\ACPD.EXE"
if "%dsk%" == "B" goto db
%0

:drsb
cd %~dp0\data\disks\b
"%~dp0\data\BCPD.EXE"
if "%dsk%" == "A" goto da
%0

:ssr
echo System file!
%0

:errnt
chcp 1251
color 44
cls
echo =================================
echo Не удалось найти NTVDM          =
echo =================================
pause >nul




Как оказалось, это и есть "шелл" недоэмулятора. А копирайты - бутафория, выводимая командами 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 пусть подумает и, надеюсь, сделает соответствующие выводы.
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был
Аватара пользователя
Vladislav
Матерый даунгрейдер
 
Сообщения: 88
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение T-999 » 17 май 2021, 09:19

.
Последний раз редактировалось T-999 14 фев 2022, 21:53, всего редактировалось 3 раз(а).
T-999
 

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение ctv » 17 май 2021, 17:36

>>Видимо CTV плох даже в создании батников и не осилил сделать нормальное зацикливание скрипта (а ведь достаточно поставить лейбл в начало и делать на него goto в конце). Позор!<<

В первой версии программы я использовал зацикливание, но при вводе названия cmd файла с пораметром в таком случае выполнялся поиск всей фразы, включая пораметры, а так пораметры идут отдельно.
MS-DOS 6.22 FOR WINDOWS Premium2022 http://d96179xw.beget.tech/
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 186
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение igor_pc » 17 май 2021, 18:45

Хм, а зачем вообще в принципе делать эмулятор на ... БАТНИКАХ ??? :? Батники выполняют определённую роль и делают это хорошо - это инструмент системы для управления ею же. Зачем на них плодить совершенно несвойственное им? Написать целиком на нормальном языке программирования. Да хоть на VB6, с которым я чаще всего работаю, ну или что там лучше всего знает автор...
Аватара пользователя
igor_pc
Мастер Даунгрейда
 
Сообщения: 541
Зарегистрирован: 29 сен 2020, 01:56
Откуда: планета Земля

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Vladislav » 17 май 2021, 20:26

ctv писал(а):В первой версии программы я использовал зацикливание, но при вводе названия cmd файла с пораметром в таком случае выполнялся поиск всей фразы, включая пораметры, а так пораметры идут отдельно.

А вот причина как раз таки в том, что это не полноценный язык программирования, а просто скриптовый автоматизатор. Зато в каком-нибудь C их можно получить через scanf("%s", pars) и циклом побить ее на отдельные значения, а не колотить костыли, как тут.
igor_pc писал(а):что там лучше всего знает автор...

Судя по всему, автор толком не знает ничего, так что прежде, чем что-либо писать, пусть выучит что-то более-менее состоятельное, я уже написал про это в комментарии темы.
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был
Аватара пользователя
Vladislav
Матерый даунгрейдер
 
Сообщения: 88
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Vladislav » 18 май 2021, 20:06

Ну что-ж...
Изображение
https://www.youtube.com/watch?v=MWk1IN2ixSY
https://www.youtube.com/watch?v=sW1j-Jdqew8

CTV на скорую руку сбацал ролик о данной ситуации, где естественно не рад приговору к удалению.
А основную часть коротенькой записи он посвятил зачитыванию моего сообщения с критикой, при этом в начале сказав, что он "читал, и от смеха чуть не сдох" :lol: .

Ну что я могу сказать на такую реакцию. Печально, что человек, которому указывают на недостатки его изобретения, смотрит на эту критику, как на какую-то юмористическую историю.
Во первых, CTRL-C я нажал случайно, поскольку часто работаю в Линуксе и привык что именно эта комбинация принудительно завершает консольную программу, потому рефлекторно нажал ;) .
Во вторых, причиной помещения в корзину стала не сколько проблема с мусором, сколько в принципе ее устройство. Она написана на батниках, "скомпилирована" довольно кривой программой, все равно использует сторонний эмулятор и пару кривых программ. Не тянет это на уровень нормальной программы, увы :( .
В третьих, фраза "Хотя я вот не понимаю, вот зачем... как человеку это мешало. В принципе программа работала, да я не заметил что там мусорит программа, но вот в принципе...". То есть мне не должен мешать тот факт, что программа забивает мне винчестер? Интересно... :shock: . И что значит "в принципе работала"? Программа должна работать хорошо, а не "в принципе". А то можно, например, вручить клиенту видеокарту с отвалом, а когда он придет жаловаться, сказать: "Я вот не понимаю, вот зачем... как человеку это мешало. Ну она же в принципе работает, да я не заметил, что карта сыпет артефактами, но ведь она выводит картинку!" :D .

Кстати, даже учитывая всю убогость BAT-а, шелл можно реализовать куда аккуратнее и без всяких кривых зацикливаний. Скажу сразу, я не спец по батникам, но набросал ознакомительный пример, куда более прямой.

shell.zip
(1.31 Кб) Скачиваний: 109

Сделано нормальное зацикливание, убрана чувствительность к регистру (как в CP/M), нормальное поведение при вводе пустой строки (в оригинале при пустой команде на самом деле выполнялась команда предыдущая). Там есть еще не слишком критичные костыли, но решать их мне не хочется, ибо толку все равно нет, да и дубовость языка ощущается сполна.
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был
Аватара пользователя
Vladislav
Матерый даунгрейдер
 
Сообщения: 88
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение T-999 » 18 май 2021, 21:57

.
Последний раз редактировалось T-999 14 фев 2022, 21:54, всего редактировалось 1 раз.
T-999
 

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение igor_pc » 18 май 2021, 22:13

Vladislav писал(а):Во первых, CTRL-C я нажал случайно, поскольку часто работаю в Линуксе и привык что именно эта комбинация принудительно завершает консольную программу,

Не понял, а почему случайно? Она же и в виндовой cmd делает почти то же самое - завершает текущую команду, разве нет? Или я чего не понял? :?
Хм, человек даже видео про это всё снял (я не смотрел)? Интересно........
Аватара пользователя
igor_pc
Мастер Даунгрейда
 
Сообщения: 541
Зарегистрирован: 29 сен 2020, 01:56
Откуда: планета Земля

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Vladislav » 18 май 2021, 22:47

igor_pc писал(а):Она же и в виндовой cmd делает почти то же самое - завершает текущую команду, разве нет?

Ну в виндовой консоли я ей существенно реже пользуюсь почему-то, вот так вот :) .

igor_pc писал(а):Хм, человек даже видео про это всё снял (я не смотрел)? Интересно........

Да, вторая ссылка на предыдущем сообщении
https://www.youtube.com/watch?v=sW1j-Jdqew8
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был
Аватара пользователя
Vladislav
Матерый даунгрейдер
 
Сообщения: 88
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Nika » 18 май 2021, 22:57

Vladiaslav, если не затруднит, выложите, плз, ваш архив shell.zip с наработками по возможному использованию оригинального эмулятора, на сайте, на странице с оригинальной программой.
Я давал на нее ссылку.
Последний раз редактировалось Nika 18 май 2021, 22:58, всего редактировалось 1 раз.
Nika
Мастер Даунгрейда
 
Сообщения: 815
Зарегистрирован: 16 окт 2013, 23:21

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Vladislav » 18 май 2021, 23:21

Nika писал(а):Vladiaslav, если не затруднит, выложите, плз, ваш архив shell.zip с наработками по возможному использованию оригинального эмулятора, на сайте, на странице с оригинальной программой.

Ну тогда все это нужно еще подполировать и переделать DIR (кривой от ctv точно не пойдет, а использовать стандартный - как-то не эстетично), да залить в архив все файлы.
Завтра может займусь, если время найду :D .
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был
Аватара пользователя
Vladislav
Матерый даунгрейдер
 
Сообщения: 88
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Nika » 19 май 2021, 00:30

Vladislav писал(а):Завтра может займусь, если время найду

В общем, сделайте удобно, одним архивом, вместе с эмулятором.
Чтобы можно было распаковать и тут же работать.

Вот страница программы:
CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky
http://old-dos.ru/index.php?page=files& ... ow&id=4919
Последний раз редактировалось Nika 19 май 2021, 02:02, всего редактировалось 1 раз.
Nika
Мастер Даунгрейда
 
Сообщения: 815
Зарегистрирован: 16 окт 2013, 23:21

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Vladislav » 19 май 2021, 02:17

Nika писал(а):И ещё было бы неплохо, чтобы работало в чистой DOS, без возможностей CMD.

А вот с этим похоже будет сложно. В ДОСе нельзя сделать SET /P, и ввод с клавиатуры нужно городить как-то иначе.
Да и все реализации "tolower", что я видел, используют ENABLEDELAYEDEXPANSION, которого тоже нет.
Так что работу в ДОСе не гарантирую, там совсем уж дубовые батники.
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был
Аватара пользователя
Vladislav
Матерый даунгрейдер
 
Сообщения: 88
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение APTEMK » 19 май 2021, 02:26

Vladislav писал(а):Ну что я могу сказать на такую реакцию. Печально, что человек, которому указывают на недостатки его изобретения, смотрит на эту критику, как на какую-то юмористическую историю.
Во первых, CTRL-C я нажал случайно, поскольку часто работаю в Линуксе и привык что именно эта комбинация принудительно завершает консольную программу, потому рефлекторно нажал .
Во вторых, причиной помещения в корзину стала не сколько проблема с мусором, сколько в принципе ее устройство. Она написана на батниках, "скомпилирована" довольно кривой программой, все равно использует сторонний эмулятор и пару кривых программ. Не тянет это на уровень нормальной программы, увы .


Ну, в общем, что и ожидалось.
http://betaoperating.mybb.ru/ - мой форум

Изображение
Аватара пользователя
APTEMK
Мастер Даунгрейда
 
Сообщения: 877
Зарегистрирован: 28 сен 2019, 10:54
Откуда: 10.12.2004 Приморский Край, Надеждинский р-н
Железо: 10.12.04компьютер Fujitsu (Pentium lll 550, 128 мб Озу, видеокарта ,Ati Rage Xl,Hdd 10 Гб, Windows98

Re: Разбор очередной софтины CTV (Эмулятор CP/M-86)

Сообщение Nika » 19 май 2021, 11:11

Vladislav писал(а):А вот с этим похоже будет сложно.

Да
Последний раз редактировалось Nika 19 май 2021, 11:16, всего редактировалось 1 раз.
Nika
Мастер Даунгрейда
 
Сообщения: 815
Зарегистрирован: 16 окт 2013, 23:21


Вернуться в Флейм

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3