Вход для пользователей

You are here

Программный калькулятор ВК-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, иначе опять придётся жаловаться на "проблемы"! ;-)

Изображение пользователя Vitasam.

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

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

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

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

Изображение пользователя Vitasam.

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

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

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

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

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

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

Изображение пользователя Vitasam.

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 скомпилировать.

Изображение пользователя Vitasam.

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

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

Изображение пользователя Vitasam.

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

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

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

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

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

Изображение пользователя Vitasam.

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

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

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

Изображение пользователя Vitasam.

Переключение консоли 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²:
:

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

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

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