?

Log in

No account? Create an account

Предыдущий пост | Следующий пост

ВК-6, версия 0.30

Поздравляю всех с днём космонавтики! У нас в Москве только что закончился весьма плодотворный 2-х дневный хэкинг ран. Выкладываю праздничный ВК-6 версии 0.30, с новыми шрифтами от МК-161:
http://the-hacker.ru/2010/vk6-0.30.zip

Отныне мы не просто имеем полные шрифты, завершив графическую подсистему ВК-6. Теперь графический экран ВК-6 должен лучше напоминать «Электронику МК-161» (look'n'feel), совпадая попиксельно с экраном ЭКВМ. Это весьма полезно для отладки. Давайте сравним снимки экрана МК-161 и ВК-6:

 ▄▄▄   ▄▄▄    ▄    ▄▄▄                                        ▄▄▄▄▄         ▄    ▄▄▄          ▄▄▄          ▄    ▄▄▄
▀   █ █   █  ▀█   █   █    █  █     ▀▀▀▄                         ▄▀    ▄▀  ▀█   █   █        ▀  ▄▀    ▄▀  ▀█   ▀   █
▄▀▀▀  █   █   █   █   █    █▀▀█ ▄▄   ▀▀█ ▄▄                    ▄▀    ▄▀     █   █   █ ▄▄     ▄   █  ▄▀     █   ▄▀▀▀
▀▀▀▀▀  ▀▀▀   ▀▀▀   ▀▀▀     ▀  ▀ ▀▀  ▀▀▀  ▀▀                    ▀    ▀      ▀▀▀   ▀▀▀  ▄▀      ▀▀▀  ▀      ▀▀▀  ▀▀▀▀▀
▄▄▄▄▄       ▄▄     ▄   ▄ ▄▄▄  ▄▄▄  ▄▄▄▄▄        ▄▄▄▄▄  ▄▄▄
█     ▄▀▀▄  ▄▄█    █▀▄ █ █▄█ ▀   █    ▄▀           ▄▀ ▀▄▄▄▀       ▀▀▀▄ ▄▀▀▄    █  █  █  █ █ ▄▀  ▄▀█  ▀▀▄
█     █  █ █  █    █  ▀█ ▄▄▄ ▄▀▀▀   ▄▀   ▄▄      ▄▀   █   █ ▀▀▀▀▀ ▄▀▀  █  █    █  █  █▄▀█ █▀▄   █ █ ▄▀▀█
▀      ▀▀   ▀▀     ▀   ▀     ▀▀▀▀▀  ▀    ▄▀      ▀     ▀▀▀         ▀▀▀  ▀▀     ▀▀▀▀█ ▀  ▀ ▀  ▀ ▀  ▀  ▀▀▀
                                                                            ▄▄                             ▄▄
                                                                   ▄▄▄▄▄▄▄▄▄██▄▄▄▄▄▄▄▄            ▄▄▄▄▄▄▄▄▄██▄▄▄▄▄▄▄▄▄
                                                                   ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀            ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██
                                                                   ██       ██                    ▀▀ ██████████████ ▀▀
▄▄▄▄▄                                                              ██  █████████████                ▄▄▄▄▄▄▄██▄▄▄▄▄▄▄
█     ▀▀▀▄ █  █       █  █ █  █ █                                  ██▄▄▄▄▄▄▄██▄▄▄▄██▄▄              ██▀▀▀▀▀██▀▀▀▀▀██
█      ▀▀█ █▀▀█ ▀▀▀▀▀ █▄▀█ █▀▀█ █▀▀▄                               ██▀▀▀▀▀▀▀██▀▀▀▀██▀▀              ██▄▄▄▄▄██▄▄▄▄▄██
▀     ▀▀▀  ▀  ▀       ▀  ▀ ▀  ▀ ▀▀▀                                ██  █████████████                ██▀▀▀▀▀██▀▀▀▀▀██
                                                                   ██       ██                      ██▄▄▄▄▄██▄▄▄▄▄██
                                                                   ██     ▄██▀█▄                    ▀▀▀▀███▀▀▀███▀▀▀
                                                                  ▄█▀  ▄▄█▀▀   ▀██▄▄▄                ▄▄███▀     ▀██▄
                                                                 ▀▀  ▀▀▀          ▀▀▀             ▀▀▀▀▀          ▀▀▀
▄▄▄▄▄                   ▀▀       ▄  ▄▄▄       ▀▀  ▄
█▄▄▄  ▄▀▀▄  ▄▀█ █    █ █  █    ▄▀  █▄▄   ▀▀▄ █  █  ▀▄
█   █ █▀▀▀  █ █ █▀▀▄ █ █▄▀█    ▀▄  █  █ ▄▀▀█ █▄▀█  ▄▀
▀▀▀▀   ▀▀  ▀  ▀ ▀▀▀  ▀ ▀  ▀      ▀  ▀▀   ▀▀▀ ▀  ▀ ▀
                                                             ▀▀       ▄                           ▄
█▄ ▄█ ▄▀▀▄ ▀█▀  ▀▀▄  ▄▀█  ▄▀█ █  █ █  █ ▄▀▀▄ ▄▀▀▄ █ ▄▀ █  █ █  █    ▄▀  █  █  ▄▀▀▄ █  █ █  █ █     ▀▄
█ ▀ █ █▀▀▀  █  ▄▀▀█  █ █  █ █ █▄▀█ ▀▄▄█ █▀▀▀ █  ▄ █▀▄  █▄▀█ █▄▀█    ▀▄  █  █    ▀▄ █▄▀█ █▀▀█ █▀▀▄  ▄▀
▀   ▀  ▀▀   ▀   ▀▀▀ ▀  ▀ ▀  ▀ ▀  ▀    ▀  ▀▀   ▀▀  ▀  ▀ ▀  ▀ ▀  ▀      ▀ ▀▀▀▀█ ▀▄▄▀ ▀  ▀ ▀  ▀ ▀▀▀  ▀
                        ▄            ▄
▀█▀ █  █ ▀▀▀▄ █▀▀▄    ▄▀  ▀▄ ▄▀ █  █  ▀▄
 █  █▄▀█ ▄▀▀  █  █    ▀▄   ▄▀▄  ▀▄▄█  ▄▀
 ▀  ▀  ▀  ▀▀▀ █▀▀       ▀ ▀   ▀  ▄▄▀ ▀

Комментарии

( 21 комментарий — Оставить комментарий )
(Удалённый комментарий)
arvi
12 апр, 2010 18:56 (UTC)
Спасибо! Включил выложенные новые шрифты, ВК-6 обновлён до версии 0.30 .
(Удалённый комментарий)
arvi
16 апр, 2010 13:03 (UTC)
Инструкцию сделаю подробную, на основе книжной. Просто времени хватило лишь на программу. Там, кстати, цифры от 0 до 9. Это даже сложнее.

Про изменения в Д1 спасибо, проверю.

ВК v0.30 буду дорабатывать. Добавил округление в K[x]/K{x} , но уже всерьёз задумываюсь о переходе к bcd-математике. В ЭКВМ она неплохо получилась, вполне на уровне ПМК.
(Удалённый комментарий)
arvi
16 апр, 2010 14:41 (UTC)
Всё. Выложил подробные инструкции, правила, описание игры и собрал дистрибутив в архив.

В mkl-файле добавилось несколько комментариев. Но в отсутствии .NUM3 там менять особо нечего. :(
(Удалённый комментарий)
arvi
18 апр, 2010 09:16 (UTC)
Всё, игра обновлена. Теперь код ложится в 3 страницы, а с учётом сообщений — 4. Заодно исправлена ошибка загадывания цифры 10 в том редком случае, когда КСЧ выдаёт ровно нуль.

.NUMT работает, большое спасибо за этот оператор. Будем ждать обновления MK.EXE
arvi
16 апр, 2010 13:16 (UTC)
Псевдооператоры
Да, ещё такой вопрос. Можно ли, помимо .NUMH и .NUML , сделать .NUM3 для адресов, которые заведомо меньше 1000 ? Желательно, с выводом ошибки, если адрес 1000 или больше.

Уже давно режут глаз всякие 0307, а в случае «Быков и коров» это поможет сократить файл программы на 100 байт.
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
arvi
21 апр, 2010 15:19 (UTC)
Re: Псевдооператоры
Сейчас буду читать новую книжку проф. Вирта, там есть глава про машинную оптимизацию. Пока же предлагаю такую схему оптимизации, относительно легко навешиваемую на имеющийся код:

-o0

оптимизация не производится. Компилятор выбирает максимальную длину, если только человек явно не указал меньшую (.NUML, .NUMT, Fx=0 и т.д.). В-общем, всё как сейчас.

-o1

компилятор пробует сократить всё, что возможно. Потом "расширяет" все места, где не получилось — повторяя этот процесс до тех пор, пока не получится удачная компиляция.

-o2

компилятор отмечает все места, где возможно сокращение программы. Для ускорения процесса можно сразу отмести места, где достичь сокращения «не судьба», как ни старайся (скажем, прыжок на 300 шагов при неопределённости максимум ±5 шагов). Потом методично проверить всевозможные комбинации, вызывая компилятор и выбрав наименьший из корректно скомпилировавшихся вариантов.
(Удалённый комментарий)
(без темы) - arvi - 22 апр, 2010 07:45 (UTC) - Развернуть
arvi
16 апр, 2010 14:54 (UTC)
Re: Псевдооператоры
Увы, годы идут, а он не заботится. Лучшее же — враг хорошего.

P.S. Если разные GOTO/PGOTO я ещё могу как-то руками подлатать, то в случае 3-х шаговых адресов у меня «ручных» вариантов нету. Приходится выпускать такой код, за который потом краснеешь. :(

.NUML немного ситуацию исправила, но самые интересные программы в 100 шагов больше не укладываются, если включать сервис и подсказки. А вот в 1000 шагов — вполне.
(Удалённый комментарий)
arvi
18 апр, 2010 08:44 (UTC)
Re: Псевдооператоры
Чтож, посмотрим. Следующие файлы отсутствуют, хотя ссылки на них есть:

http://mk.semico.ru/prog/mkl2mkp/dos4gw.exe
http://mk.semico.ru/prog/mkl2mkp/mkl2mkp-0.21.c

А что за признак текста? В описании MKP нет его:

http://mk.semico.ru/progmk.htm
arvi
18 апр, 2010 08:51 (UTC)
Re: Псевдооператоры
Признак текста 02 понятен. Хотя ещё неясно, зачем он нужен. Разве что для более адекватной декомпиляции.

Программа mkl2mkp по -h ничего не пишет про -i . Даже более того, информация по -i выводится на русском языке, хотя -h и отсутствие опций выдаёт информацию латиницей.
arvi
18 апр, 2010 09:08 (UTC)
mkl2mkp 0.21
Также при создании html-файлов кодировка подписи не совпадает с кодировкой символов. Такое броузеру отобразить трудно. :-)
(Удалённый комментарий)
(без темы) - arvi - 20 апр, 2010 12:20 (UTC) - Развернуть
arvi
17 апр, 2010 13:38 (UTC)
> неплохо бы сделать примечание, что используются числа от 1 до 9,
> ведь классическая игра только до 6

До шести это вы MasterMind с цветовой кодировкой имеете в виду? Т.к. в первоисточнике для Б3-34 использовалось любое 4-х разрядное число, то есть любая из 10 цифр. Главное, чтобы они не повторялись (не знаю, допустимы ли повторения в MasterMind).

В программе, даже старой, диапазон несущественен. Просто меняете блок 2 (генерация цифры) по вкусу. Главное, чтобы инструкция не вводила игрока в заблуждение. Скажем, чтобы загаданный МК-161 ноль не стал неприятной неожиданностью.
(Удалённый комментарий)
arvi
20 апр, 2010 12:30 (UTC)
Если цифры кода могут повторяться, его генерация значительно упрощается.

Цвета, конечно, можно сымитировать различными штриховками: горизонталь, вертикаль, наклон, точки, пунктир-кружочки и т.д. Но наш вариант игры мне нравится больше, чем их. Смысл подсказки очевидней, рассуждения прозрачней, а задача минимизации числа попыток становится обозримее и интересней.
(Удалённый комментарий)
arvi
21 апр, 2010 14:55 (UTC)
Идея хорошая, подумаю. Но 24, с нулём в R9002 это жестоко. Вот 20-21 попыток получатся красиво. Реальные игры как раз укладываются в 10-30 попыток.

Пока у меня дети играют с листочком бумаги, как встарь. Но МК-161, разумеется, способен перевести игру на новый уровень. Жаль лишь, что горизонтальный скроллинг на ±N точек прошивкой не предусмотрен. Здесь он был бы в тему, а так придётся мудрить с R9004-9006.
arvi
22 апр, 2010 07:41 (UTC)
Журнал попыток по К ГРФ сделан. Новая программа выложена. Но, как и ожидалось, без аппаратной поддержки горизонтальный скроллинг получился меееедленным. :(
zxalexis
12 окт, 2010 17:22 (UTC)
vk6 win32 консольное
программа под MinGW скомпилировалась, по при запуске выдает следующее:
:7
? ? 0000
-----------------------
T 0
Z 0
Y -2.6864577555247e-067
X -1.6588943954333e-099
7
:8
? ? 0000
-----------------------
T 0
Z 0
Y -2.6864577555247e-067
X -1.6588943954333e-099
8
:9
? ? 0000
-----------------------
T 0
Z 0
Y -2.6864577555247e-067
X -1.6588943954333e-099
9
:
это просто при вводе цифр.
Скачать тут: http://tkscomp.ru/dnld/vk6.7z
arvi
12 окт, 2010 20:24 (UTC)
Re: vk6 win32 консольное
Да, чего-то некрасиво. Может быть что-нибудь с плавучкой у Микрософта не так? Где-то в обсуждениях ВК-6 пробегало решение.
zxalexis
14 окт, 2010 09:03 (UTC)
Re: vk6 win32 консольное
Не совсем. Где-то ошибка в логике, мне кажется.
Вот ввод 1234 в линуксе:


[]$ ./vk6 -i
Калькулятор ВК-6 v0.30
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 0

:1
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 1
1
:2
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 12
2
:3
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 123
3
:4
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 1234
4
:

Регистр X накапливает 1234 (как я понимаю), умножая на 10 предыдущее состояние.

Вот под win32:
C:\vk6dos>vk6 -i
Калькулятор ВК-6 v0.30
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 0

:1
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X 0
1
:2
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X -2
2
:3
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X -2.4600631144627e+260
3
:4
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X -3.0123998313786e-182
4
:

Прошу обратить внимание на ввод первой единицы - регистр X не поменялся.
Пойду, покопаюсь в коде vk6, чтоб узнать, что происходит при вводе цыфири. Можт, он просто не распознает их (хотя вряд ли...)
zxalexis
14 окт, 2010 10:07 (UTC)
Re: vk6 win32 консольное
Под дебуггером:
T 0
Z 0
Y 0
X 0
1
:2

Breakpoint 1, Digit (x=2) at cpu.c:549
549 State1(x);
(gdb) p iStateInput
$3 = 2
(gdb) p RX
$4 = 1
(gdb) c
Continuing.
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X -2
2
:3

Breakpoint 1, Digit (x=3) at cpu.c:549
549 State1(x);
(gdb) p RX
$5 = 12
(gdb) p iStateInput
$6 = 2
(gdb) c
Continuing.
Г ? 0000
-----------------------
T 0
Z 0
Y 0
X -2.4600631144627e+260
3
:4

Breakpoint 1, Digit (x=4) at cpu.c:549
549 State1(x);
(gdb) p iStateInput
$7 = 2
(gdb) p RX
$8 = 123
(gdb)

Регистр RX принимает правильное значение, 123. Копаю в сторону отображения...
zxalexis
14 окт, 2010 11:36 (UTC)
Re: vk6 win32 консольное
http://oldwiki.mingw.org/index.php/long%20double

vk6.c
void PrintStack(void)
/* Вывести экран режима F АВТ. */
{ if (optClear) putchar('\f');
switch (flgGrad)
{ case 1: printf("%s", flgLat? " R " : " Р "); break;
case 2: printf("%s", flgLat? " GRD" : " ГРД"); break;
case 0: printf("%s", flgLat? " G " : " Г "); break;
}
printf(" ");
if (iMode==1) PutCharVK('\x10',0); else PutCharVK('\x13',0);
printf(" %04d\n", iPC);
puts("-----------------------");
printf("T %-20.14Lg\n", RT);
printf("Z %-20.14Lg\n", RZ);
printf("Y %-20.14Lg\n", RY);
if (flgError) puts("X ERROR");
else printf("X %-20.14Lg\n", (double)RX);
if (optX1) printf("X1 %-20.14Lg\n",(double)RX1);
putchar(' ');
PutStringVK(strComment, iCommentLen, 23);
putchar('\n');
}

рабочий экземпляр: http://tkscomp.ru/dnld/vk6.rar (отсутствующие в CP866 символы UTF заменены на ?)
( 21 комментарий — Оставить комментарий )