Программный калькулятор ВК-6 на разных платформах

С интересом слежу за успехами AtH в процессе создания программного калькулятора ВК-6.

С учетом того, что ВК-6 написан на чистом и переносимом Си, вкралось желание обобщить, под какие платформы удастся собрать калькулятор.

Windows, под MSVC++ 2008:
Собрался. Вот комментарий Ajaja:
Версия v0.22 собралась и с помощью MSVC++ 2008. Пришлось только чуть-чуть os.c подправить. Китайский календарь отработал отлично.
Проблема с кодировкой в винде решается стандартно: chcp 65001 и уникодный шрифт для командного окна (Lucida Console обычно).
Или вставить: SetConsoleCP(CP_UTF8) и SetConsoleOutputCP(CP_UTF8) в main() и перекомпилировать, тогда не надо будет каждый раз перед запуском руками переключать кодировку консоли с помощью chcp.

Linux, под GCC:
Собрался.

Windows, под MinGW:
Собрался, с необходимостью поработать над кодировкой.

Windows, под DevC++:
Собрался, требуется осезависимый os.c для корректной работы gettimeofday().

Windows, эмулятор PC-AT DosBox (MS-DOS), под DJGPP:
После переименования файла mkchargen.c в mkchgen.c (8.3) собрался. Скриншот нескольких команд:

VK-6 in MS-DOS

Здесь: собранный в DosBox под DJGPP: компилятор файлов MKL в MKP.

Nokia N810, эмулятор PC-AT DosBox (MS-DOS), под DJGPP:

DosBox on Nokia N810

DJGPP крайне медленный в Досбоксе под N810. Все-таки эмуляция архитектуры Х86 на ARMе.
Так что только в академических целях... Практически же нужен GCC на самой планшетке.

Nokia N810, GCC-3.4.4
После установки GCC оснащения жизнь на интернет-планшетке N810 стала значительно веселей!

~/MyDocs/C $ cd vk6
~/MyDocs/C/vk6 $ ls
vk6-0.22      vk6-0.22.zip
~/MyDocs/C/vk6 $ cd vk6-0.22/
~/MyDocs/C/vk6/vk6-0.22 $ ls
README.TXT   chargen.h    decomp.c     gpl.txt      reg.h
buffer.c     chargen.txt  decomp.h     makefile     supp.c
buffer.h     clock.c      draw.c       mkchargen.c  supp.h
calc.c       clock.h      draw.h       os           vk6.c
calc.h       comment.c    exec.c       os.h
chargen.c    comment.h    exec.h       reg.c
~/MyDocs/C/vk6/vk6-0.22 $ make
gcc -c vk6.c -o vk6.o
gcc -c reg.c -o reg.o
gcc -c calc.c -o calc.o
gcc -c exec.c -o exec.o
gcc -c draw.c -o draw.o
gcc -c decomp.c -o decomp.o
gcc -c comment.c -o comment.o
gcc -c buffer.c -o buffer.o
gcc -c clock.c -o clock.o
gcc -c supp.c -o supp.o
gcc -c os/gnu/os.c -o os.o
gcc mkchargen.c -o mkchargen
./mkchargen
Начинаю записывать chargen.c
Создан файл chargen.c
gcc -c chargen.c -o chargen.o
gcc vk6.o calc.o exec.o reg.o draw.o decomp.o comment.o buffer.o supp.o clock.o os.o chargen.o -o vk6 -lm
~/MyDocs/C/vk6/vk6-0.22 $ ./vk6 -i
ВК-6 v0.22
 Г                0000
-----------------------
T  0
Z  0
Y  0
X  0

:123
 Г                0000
-----------------------
T  0
Z  0
Y  0
X  123
 3
:П1
 Г                0000
-----------------------
T  0
Z  0
Y  0
X  123
 П 1
:45
 Г                0000
-----------------------
T  0
Z  0
Y  123
X  45
 5
:/
 Г                0000
-----------------------
T  0
Z  0
Y  0
X  2.7333333333333
 ÷
:ИП1
 Г                0000
-----------------------
T  0
Z  0
Y  2.7333333333333
X  123
 ИП 1
:

Проверка скомпилированного тут же на планшетке mkl2mkp.с посредством Китайского года:

~/MyDocs/C/vk6 $ ./mkl2mkp kitgod.mkl
? �� MKP  kitgod.mkl
? � ��� � ��� ��� :  0
?���  (��� ���):  27
?��������� � ���襭

Запуск:

~/MyDocs/C/vk6/vk6-0.22 $ ./vk6 kitgod.mkp
ВК-6 v0.22
Загружаю файл программы 'kitgod.mkp' длиной 5401 байт.
Загружено 2700 шагов.
Исполняю...
█▄▄███▄█████████████████████████████████████████████████████████
▀▄▄ ▄▀██████████████████████████████████████████████████████████
 ██ ██ █████████████████████████████████████████████████████████
█▄▄███▄█████████████████████████████████████████████████████████
▀▄▄ ▄▀██████████████████████████████████████████████████████████
 ██ ██ █████████████████████████████████████████████████████████
█▄▄███▄█████████████████████████████████████████████████████████
▀▄▄ ▄▀██████████████████████████████████████████████████████████
 ██ ██ █████████████████████████████████████████████████████████
█▄▄███▄█████████████████████████████████████████████████████████
▀▄▄ ▄▀██████████████████████████████████████████████████████████
 ██ ██ █████████████████████████████████████████████████████████
█▄▄███▄████▀▀▀ █████████████████████████████████████████████████
████▀▀▀███ █▄▀ ███████████████████████████████████▀▀▀███████████
████▄▄█▄██▀▀▀▀▀█████████████████████████████████▀▄███▄▀█████████
▀▄▄▀██ ███▄▀█████████████████████████████████████████▀██████████
 ██▄▀█ █████▄▄▄█████████████████████████████████████ █ █████████
█▄███▄▄███▄▀█▀▄███████████████████████████████████▄▄▄▄▄█████████
██████████▀▀ ▀▀███████████████████████████████████▄▄ ▄▄█████████
██████████▀▀▀▀▀███████████████████████████████████▀▀ ▀▀█████████
████  ▄▀████▄▀████████████████████████████████████▀▀▀▀▀█████████
█▀▀▀▀▀████▄▄▄▄▄████  ██████  ████████▀▀█████████████▄▀██████████
 █▄▀██ ███▀▀▀▀ ▄███  ███        █████  ███████████▄▄▄▄▄█████████
▄▀▀▀ ▀▄███████ ████  ███  █  █  ████  ████████████▀▄▀▄▀█████████
██████▀███▄▄▄▄▄████  ███  █  █  ██▀ ▄█████████████ █▄█ █████████
▀▀▀▀▀▀ ██████████    █             ▀██████████████████▀▀████████
█▄▀███ ███▀▀▀▀▀████  ███  █  █  ██▄  █████████████▄▄▄▄ █████████
█▀████████ ███ ████  ███  █  █  ████▄ ████████████▀▀▀▀ █████████
██▄▀██████▄▄▄▄▄████  ███▄▄█  █▄▄█████▄ █████████▀█████▀█████████
████▄▀████ ████████  ▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀█▄██████████▄▀▀▀▄██████████
▀▀████████ ▀▀▀▀████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀█████████████████████████
 █▄▀███████▀██████████████████████████▄█████████████████████████
 ███▄▄▄████ ████████████████████████████████████▀█▄▄ ▄▄█████████
███████████ ████████████████████████████████████▄█▀▀▀ ▀█████████
█████████▀▀█▀▀████████████████████████████████████▀▀▀▀▀█████████
████████ ██ ██ █████████████████████████████████████▄▀██████████
████████▄▀▀▄▀▀▄███████████████████████████████████▄▄▄▄▄█████████
████████▀▀████████████████████████████████▀▀▀█████▄▀█▀▄█████████
████████ █▄▀████████████████████████████▀▄███▄▀███▀▀ ▀▀█████████
████████ ███▄▄▄███████████████████████████▀▀▀▀▀███▀███▀█████████
████████████████████████████████████████ ███▄▀████ ███ █████████
██████████████████████████████████████████▄▄▄▄▄███▄▄▄▄▄█████████
█████▀▀█████▀▀▀████████████████████████████▀▀▀ ███▀▄ █ █████████
█████▄▄█████▄▄█▄██████████████████████████ █▄▀ ███▄▀ ▀▄█████████
██▀▄ ▄▀█ ▄▀█████████████████████████████▀███▀▀████▀▀▀▀▀██▀▄▄▄▀██
██ █ █ █ ██▄▀▀▀██████████████████████████ █ ██ █████ ███▄█████▄█
████████▄███████████████████▀▄▀███████████▄▄▄▄████▄▄▄█████▄▄▄▀██
█████  █▀▄▄▀██ ███████████▀▀ ▀ █████████▄▀███▀▄███▄▄ ▄▄███▀▀▀▄▄▀
██▀▀▀▀▀█ ██▄▀█ ███████████▀▀▀▀▀███████████▄▄▄█████▀▀▀ ▀███▀███▀█
████ ████▄███▄▄█████████████ █████████████████████▀▀▀▀▀████▄▀▄██
██▄▄▄▄▄██ ▄ █ ████████████▄▄▄▄▄███████████▀▀▀▀▀███▄▀██████▀▄█▄▀█
█████████▄▄▄█▄████████████▄▄ ▄▄█████████ ███▄▀██████▄▄▄█▀█████▀█
█▀▀▀▀▀██▄▄▄▄ ▄▄███████████▀▀▀ ▀███████████▄▄▄▄▄███ ▄▄▄▄██▄▀▀▀▄██
 █▄▀██ ███▀▄███████████████▀██████████████▄▄▄▄▄████▄▀▀▀█████████
▄▀▀▀ ▀▄█▄▄▄▄▄▄▄████████████ ████████████████▀▄ ███████▀█████████
██████▀████████████████████ ██████████████▀▀ ▀ ███▀▄ ▄ ███ ▄▄▀██
▀▀▀▀▀▀ ███▀▀▀▀████████████▀▀▀▀▀███████████▀▀▀▀▀███▄██▄▄███ ▀▀ ▀▀
█▄▀███ ██ █ ██ █████████████ █████████████▄▀██████ ▀▀▀▀███▀█████
█▀▀▀▀▀███▄██▄▄████████████▄▄▄▄▄█████████████▄▄▄███▄███████ █████
 █▄▀██ ███ ▄▄▄ ███████████▀▄ ▄▀███████████▀▄ █ ███▀▄ █ ███▄▄▄▄▄█
▄▀▀▀ ▀▄███ ▀▀▀ ███████████ █ █ ███████████▄▀ ▀▄███▄▀ ▀▄███▄▄ ▄▄█
█▀▀███▀█▀▀██████████████▀▀██████████████▀███▀▀████▀▀▀▀▀███▀▀▀ ▀█
 ██ ██ █ ███████████████ ███████████████ ██ ██ ████▄▀█████▀█████
▄▀██▄▀ █ ▀▀▀▀▀▀█████████ ▀▀▀▀▀▀█████████ ▀▀ ▀▀ ███▀ ▀▀▀███ ▄▄▄▄█
Исполнение завершено!
 Г                0065
-----------------------
T  7
Z  -239
Y  184
X  0

~/MyDocs/C/vk6/vk6-0.22 $

Комментарии

Переименовать или удалить. Возможно, mkchargen.c не уложился в DOS'овский стандарт 8+3. Поэтому MAKE.EXE его не обнаружил и попытался создать. Файл же mkchargen.c исходный, создавать его не требуется и правил создания быть не может.

На самом деле mkchargen нужен лишь для создания файла chargen.c из chargen.txt, а поскольку chargen.c уже включён в дистрибутив, комплировать mkchargen требуется лишь тому, кто захочет самостоятельно редактировать знакогенератор.

Короче, убираем из makefile правила для chargen.c, mkchargen и оставшееся должно заработать. И не забудьте перевести исходные тексты из кодировки UTF-8 в DOS'овский стандарт 866, иначе опять придётся жаловаться на "проблемы"! ;-)

Да, переименование mkchargen.c в mkchgen.с помогло. Собралось.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Ура! Поздравляю. Меня тут два вопроса интересуют:

1. Были ли сконвертированы исходные файлы в CP866 (кодировку DOS) перед компиляцией?
2. Если да, работают ли русские команды ИПА, П9, К СЧ и т.д.?

А то здесь паранойю наводят. :-) У меня под Дебианом всё нормально работает. Интересно, как дело под другими операционками.

1). Нет, не были сконвертированы

Соответствеено, 2) не проверял. Но собираюсь попробовать

Хотя после успешной компиляции в непосредственно родное приложение N810 мне гораздо интереснее сидеть на планшетке. Глядишь, и до полноценной МК-161 дорастет :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Дорастёт, куда денется. Вот только обращение ко внешним устройствам, боюсь, придётся энтузиастам N810 разрабатывать. И то, что получится, будут мало похоже на устройства МК-161. :-)

Также жаль, что MK.EXE вряд ли на N810 запустится. Хотя на сайте "СЕМИКО" была MKL2MKP, она может под N810 пойти.

(на правах спойлера) В следующей версии 0.23 уже должен быть работающий F ПРГ. Правда, программы при выходе из ВК-6 пропадают. Совсем как на советском МК-61. :-)

mkl2mkp скомпилировался на N810 на ура:

~/MyDocs/C/vk6 $ ./mkl2mkp -h
mkl2mkp - EKVM Elektronika MK, compiler MKL to MKP file
mkl2mkp [key] MKLfile [MKPfile]
-h,-H,-? this help;
-v,-V version;
-w,-W warranty and copyright
Russian charset is CP866
~/MyDocs/C/vk6 $

~/MyDocs/C/vk6 $ ./mkl2mkp -v
Version 0.20 (GNU/Linux)

Надо попробовать Лунолет-1 скомпилировать.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Переконвертировал в CP866. Собралось нормально (с учетом переименования mkchargen.c).
П1 ИП1 ПА ИПА работают

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Здорово! Это радует. А то тут некоторые (не будем показывать пальцем) на замечательную FindLetter() наезжали. ;-)

Ну, по сути, в том же GCC все и собиралось, только под дос :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Про 2,99999…. Вот же сволочная чужая арифметика! :-)

Кстати, я на эти штучки ещё в МК-152 натыкался. Потом Михаил Борисович сделал какую-то футбольную магию, и хвосты из девяток в ЭКВМ исчезли навсегда. Но вот в math.h, видимо, появились заново.

Поздравляю. Замечательно, если где-нибудь будут выложены исполняемые файлы. Не у всех руки под компилятор заточены.

Версия v0.22 собралась и с помощью MSVC++ 2008. Пришлось только чуть-чуть os.c подправить. Китайский календарь отработал отлично.
Проблема с кодировкой в винде решается стандартно: chcp 65001 и уникодный шрифт для командного окна (Lucida Console обычно).
Или вставить: SetConsoleCP(CP_UTF8) и SetConsoleOutputCP(CP_UTF8) в main() и перекомпилировать, тогда не надо будет каждый раз перед запуском руками переключать кодировку консоли с помощью chcp.

Спасибо, я обновил блог.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Похоже я немного поторопился, не все там так просто. Ввод русских комманд работает только с SetConsoleCP(866);
Пришлось пересобрать с:
SetConsoleOutputCP(CP_UTF8);
SetConsoleCP(866);

Сейча Лунолет 1 "прохожу" ;)

Переключение консоли Windows в utf-8 (и не только). Вконец озверев от недоразвитости виндовой консоли, сделал глубокое гугление. В результате нашел такой способ переключить консоль в utf-8 для запуска ВК-6:

  1. Свойства окна консоли -> Font -> Lucida Console
  2. ...>chcp 65001
    Active code page: 65001
C:\...\GITworks\PMK\misc\space_speed>vk6.exe -i space_speed.mkp
Калькулятор ВК-6 v0.32
Загружаю файл программы 'space_speed.mkp' длиной 601 байт.
Начальный адрес: 0000
Загружено 300 шагов.
 Г                0000
-----------------------
T  0
Z  0
Y  0
X  0

:R/S
 Г                0018
-----------------------
T  0
Z  0
Y  6,674e-011
X  92
 Радиус планеты, м?
:6378000
 Г                0018
-----------------------
T  0
Z  6,674e-011
Y  92
X  6378000
 0
:R/S
 Г                0027
-----------------------
T  6,674e-011
Z  92
Y  6378000
X  183
 Масса планеты, кг?
:0
 Г                0027
-----------------------
T  92
Z  6378000
Y  183
X  0
 0
:R/S
 Г                0041
-----------------------
T  6378000
Z  183
Y  0
X  111
 Средняя плотн., кг/m^3?
:5510
 Г                0041
-----------------------
T  183
Z  0
Y  111
X  5510
 0
:R/S
 Г                0070
-----------------------
T  3
Z  9,824510595924
Y  135
X  9,824510595924
 Ускор.св.падения, м/c²:
:

Даже квадрат пишется...

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Квадрат-3. Квадрат пишется, а вот символа для останова (режима F АВТ) в Виндовой UTF-8 так и не нашёл. Винда отображает странным квадратиком, который сразу бросается в глаза. Принимаю любые предложения.

Кстати, ВК-6 выявил, что в размерности "кг/m^3" буква "м" латинская. Тоже можно поправить.