Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Калькуляторы, арифмометры, PDA, HPC »   Самодельный калькулятор в корпусе Б3-23
RSS

Самодельный калькулятор в корпусе Б3-23

На Н1806ВМ2

<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 * 7 8 9 10
Печать
 
xoiss
Гость

Ссылка

Ну, собсна, всё — софт в "консольном" варианте готов!

Желающих протестировать, приглашаю сюда:
https://onlinegdb.com/rkoD9v2sm — версия с логикой вычисления процентов, как у Б3-23
https://onlinegdb.com/ry3kCP2sQ — версия с улучшенной логикой вычисления процентов (сам придумал :) )
[upd 22.10.18 16:05] сделал фикс в вычислениях процентов
[upd 23.10.18 00:35] переделал обработку = в вычислениях процентов
[upd 23.10.18 12:46] переделал логику вычисления процентов в режимах * и /

Инструкция:
- открываете ссылку (см. выше)
- увидите страничку с моим проектом — Вы не сможете его редактировать, но сможете его запустить на исполнение
- нажимаете кнопку Run — нужно подождать 5-10 сек., пока проект скомпилируется
- далее в нижней половине экрана откроется текстовая консоль (белые буквы на чёрном фоне) — в неё моя программа напечает приветствие и приглашение к диалогу
- если нижняя часть слишком узкая по высоте, то наведите мышкой на границу-разделитель и потяните её вверх, чтобы увеличить высоту окна консоли, уменьшая высоту окна с кодом
- переведите курсор (мышкой) в консоль и попробуйте ввести какие-нибудь примеры для расчёта
- ... например, введите 1+2=
- каждый раз в конце нажимайте ENTER, чтобы завершить ввод строки — ну, дальше, думаю, сами разберётесь
- программа обрабатывает клавишу-за-клавишей и после каждой "клавиши" печатает состояние дисплея калькулятора и внутреннее состояние аппарата
- когда Вам надоест, в пустой строке нажмите Ctrl+D (эта комбинация в POSIX операционных системах при дефолтных настройках вводит с консоли символ "конец файла")
- программа подосвиданькается с Вами и завершит работу
- ... далее нажмите ENTER (ну или просто закройте окно браузера)

Пример, как это выглядит в окне браузера:


Теперь о безопасности Вашего компьютера (если Вы вдруг боитесь, что я хочу Вам вирус подпустить):
- как Вы могли догадаться, моя программа компилируется и запускается не у Вас на компьютере, а где-то далеко за-морями-за-лесами на каком-то буржуйском сервере (как сейчас модно говорить, "в облаке")
- браузер, запущенный на Вашем компьютере, просто передаёт тому серверу, какие кнопульки Вы нажимаете у себя на клавиатуре, и получает от сервера картиночку, которую надо отрисовать в окне — для Вас же это в совокупности выглядит как работа с консольным приложением
- короче, на Вашем компьютере ничего по сути не запускается, и никакое экзешники-с-вирусами на него не приползают

Для тех же, кто хочет скомпилировать прямо у себя в бинарь и сей бинарь запустить, можете скачать проект отсюда:
https://github.com/xoiss/b3-23.git

Проект написан под Linux. Проверял на Ubuntu 14 (Trusty):


Если у Вас Windows, то Вам потребуется установить наборы MinGW + MSys. Я проверил - собирается, взлетает, летает, садится.
Если у Вас macOS, BSD, Solaris, то... думаю, тоже заведётся, но Вам наверняка потребуется допилить Makefile (если у Вас на машине нет gcc, то это точно придётся сделать).

Вот. Как-то так.

Немного передохну и попробую перекинуть на ДВК под RT-11, для начала.
Может, ещё доделаю остальные функции процессора к145ип11 — которые в Б3-23 были спрятаны "под капотом", но зато видны в клавиатуре Б3-26 и МК-57

Всем привет!
Сейчас на форуме
xoiss
Гость

Ссылка

1Ж24Б написал:
[q]
Есть живой Б3-23 и МК-57. Что требуется выполнить?
[/q]
Ну, вообще я хотел поспрашивать в отношении операции взятия процентов... но я её так или иначе уже успел реализовать, что называется "по своему разумению".

Тем не менее, интересно было бы проверить несколько примеров. Если можете помочь — было бы здорово.

1. Введите C C 10000 - 0.1234 =
- мой симулятор даёт ответ: 9999.8766
- интересно, даст ли настоящий аппарат такой же ответ, или выдаст 9999.876 или 9999.877, потеряв четвёртый знак после запятой

2. Введите C C 10 / 6 =
- мой симулятор даёт ответ: 1.6666667
- интересно, какой будет крайний справа знак на настоящем аппарате — 6 или 7
[upd] похоже, Б3-23 всё-таки округляет "отсечением", например на нём получается 11111111 * 55555555 = 6172839.3, а должно быть 6172839.4

3. Введите C C / 2 =
- некоторые калькуляторы в таком случае выполняют вычисление выражения 1 / 2 = 0.5 — т.е. суть, если делимое не было задано, то принимают его равным 1, но не 0
- мой симулятор это не делает (мне было лень, честно), поэтому он выдаст ответ 0. — так, как если бы было введено 0 / 2
- интересно, как это воспринимает настоящий аппарат — что он выдаст, 0 или 0.5

4. Введите C C 1 - 2 =
- где будет знак "минус" ?
- на МК-57 знак "минус" отображается на экране, вроде бы, справа от числа — видел картинку в интернете
- на экране Б3-23 (и, вроде бы Б3-26) знак "минус" отображается слева от числа...
- ... однако, в случае если число имеет менее восьми знаков, то я не нашёл свидетельств, на каком знакоместе отображается знак "минус" — (а) всегда в крайнем левом разряде или же (б) он как бы мигрирует в пределах индикатора так, чтобы быть прилепленным вплотную к числу слева от старшей цифры
- мой симулятор отображает знак минус всегда в крайнем левом разряде (впрочем, этот аспект запрограммирован не в самом "симуляторе", а уже в "адаптере")

Спасибо!
Сейчас на форуме
xoiss
Гость

Ссылка

1Ж24Б написал:
[q]
Есть живой Б3-23 и МК-57. Что требуется выполнить?
[/q]
... если можно, то вот ещё несколько примеров на проценты — я здесь привожу так, как у меня в симуляторе реализовано

5. Введите C C 200 + 5 % =
- после нажатия клавиши % на экране должно быть 10.
- а после нажатия клавиши = на экране должно быть 210. — что и есть результат вычисления (200+5%)

6. ... продолжая пункт 5, сразу введите 6 % =
- после нажатия клавиши % симулятор выдаёт 12.
- после нажатия клавиши = симулятор выдаёт 212. — что есть результат вычисления (200+6%)
- другими словами, при повторных вычислениях с процентами симулятор в качестве константы использует "базу исчисления процентов" — в данном случае это число 200
- интересно, что на пункт 6 скажет настоящий Б3-23

7. Введите C C 10 / 3 %
- после нажатия клавиши % на экране должно быть 333.33333 — т.е. 10 составляет 3% от 333,33333

8. ... продолжая пункт 7, сразу нажмите клавишу =
- после нажатия = симулятор выдаёт 0,03 — т.е. он как бы делает обратную операцию — возвращает, сколько процентов (в долях единицы, в данном случае) составляет 10 от 333,33333
- опять таки в качестве константы здесь было использовано первый введённый аргумент — число 10
- интересно, что на пункт 8 скажет настоящий Б3-23

Спасибо!
Сейчас на форуме
1Ж24Б
Advanced Member


Откуда: Kaluga
Всего сообщений: 349
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 нояб. 2014
Б3-23:

1. 9999,877

2. 1,6666666

3. 0

4. -_______1

5. 10 и 210

6. 12 и 212

7. 333,33333

8. 111,11111 :(

До МК57 не добрался сегодня.
xoiss
Гость

Ссылка

о, спасибо!!!

так, я понял — посмотрю внимательно п. 8
похоже, для этой части надо логику поменять
Сейчас на форуме
1Ж24Б
Advanced Member


Откуда: Kaluga
Всего сообщений: 349
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 нояб. 2014
Второй калькулятор МК-57А, и он даёт такие же результаты.
xoiss
Гость

Ссылка

В общем, пока ехал домой, разобрался, что к чему.
Симулятор я переделал... но не в сторону к Б3-23, а, наоборот :)

Получается, что в к145ип11 всего четыре регистра (в общем то, я так и думал изначально):
1. Регистр первого операнда, он же - регистр клавиатуры/индикатора
2. Регистр второго операнда, он же - регистр константы (в операциях с константой)
3. Вспомогательный регистр для операций умножения и деления. Точно не могу знать, но он либо формирует (накапливает) в себе произведение/частное, либо удерживает множимое/делимое
4. Регистр памяти (доступен только в Б3-26, МК-57)

В процессе выполнения операции деления, например 200 / 40 =, делимое (200) уничтожается, т.к. из него в цикле вычитается делитель (40), пока в регистре делимого в остатке не окажется 0 (ну или пока счётчик сформированных разрядов частного не досчитает до 8). Делитель же (40) в процессе деления сохраняется, и далее служит константой.

Когда мы вычисляем обратный процент, например 10 / 5 %, в сущности необходимо выполнить деление 10 / 5 (в ответе 2) и потом подвинуть запятую на два разряда вправо (чтобы получить искомое 200). Сотвесна, делимое (10 - база) уничтожается, а делитель (5 - ставка процента) становится константой... Нажимать после этого клавишу = лишено всякого смысла, конечно же.

Сейчас у меня реализована другая логика. Константой становится не ставка процента, а база для вычисления процентов. Это необходимо в операциях вычисления наценки/скидки (например, 200 + 5 % =). Но правильно ли делать константой базу при вычислениях процентов (но не наценки) — это вопрос.

Хммм... наверное, всё-таки логика, реализованная в Б3-23, более правильная, т.е. при вычислении просто процентов (но не скидок) константой должна становиться именно ставка процента. Если в калькуляторе при этом есть M-регистр, то это позволяет вести расчёт суммы налога по ведомости. То есть типа такого: 200 * 13 % M+ 207 % M+ 204 % M+ ... — в итоге даст 200 * 13/100 + 207 * 13/100 + 204 * 13/100 ... Хотя, не понятно, какой смысл вести расчёт именно так, если можно так: (200+207+204) * 13/100 :)

Логика, реализованная у меня, позволяет, наоборот, вычислять разные проценты от одной и той же базы. Например, 200 * 5 % (даёт 10), далее 6 % (даёт 12) и т.д.

Логика, которую я реализовал в симуляторе, в к145ип11 в любом случае не влезла бы, т.к. для её реализации требуется пятый регистр — в нём необходимо запомнить базу (10) на время выполнения операции деления, чтобы потом восстановить это значение как константу (делимое в процессе деления разрушается). Так что, в случае с настоящими калькуляторами ответ на вопрос, какую логику выбрать, был предопределён чисто соображениями минимализма "железа".

В общем, надо ещё поразмышлять, какой вариант лучше/правильнее.




... в общем, подумал, и сделал два варианта:
1. в точности, как у Б3-23
2. как у Б3-23, но улучшенный

да, пожалуй, при вычислении процентов и обратных процентов константой должна быть ставка процента — это всё-таки имеет какой-то практическо-бухгалтерский смысл
// хотя при вычислении наценки/скидки константой будет база процентов, но не ставка

итак, первый вариант в "примере 8", как и положено, возвращает 111.11111 — хотя это и совершенно бессмысленная операция, но пусть будет "в точности как Б3-23" — просто в дань уважения

во втором варианте я попытался наделить "нажатие клавиши =" в операциях вычисления прямых и обратных процентов каким-то вразумительным смыслом, а именно:
- если ввести 200 * 5 %, то, как и положено, получаем 10 — но далее, если нажать =, то теперь получаем обратно 200
- по аналогии, если ввести 10 / 5 %, получаем, как и положено, 200 — и далее, если нажать =, то теперь получаем обратно 10
- в общем, в обоих случаях клавиша = выполняет действие обратное клавише %
- действия можно чередовать % = % = и т.д.
- в остальном логика не изменилась
- в операциях вычисления наценки/скидки функция клавиши = не менялась, но осталась как у Б3-23

Ну, вроде, на этом всё.
Сейчас на форуме
xoiss
Гость

Ссылка

1Ж24Б написал:
[q]
Второй калькулятор МК-57А, и он даёт такие же результаты.
[/q]
Спасибо!

Могу ли я попросить Вас сделать ещё несколько примеров?

9. Набрать: С С СП далее 200 * 13 % П+ 207 % П+ 204 % П+ и в конце ИП
- здесь "П+" — это клавиша суммирования в память
- что будет выдано в результате?
- я предполагаю, что 79.43

10. Набрать: C C 5 * 4 C - 2 =
- т.е. после набора "4" вот именно один раз нажать клавишу сброса "С"
- симулятор выдаёт результат как для 5 - 2 = 3
- но я предполагаю, что калькулятор выдаст -2 (минус два) как результат для 5 * 0 - 2 = -2

11. Набрать: C C 5 / 4 C - 2 =
- что выдаст калькулятор? те же -2 (минус два)
- ... или выдаст ошибку деления на ноль?

Спасибо!
Сейчас на форуме
xoiss
Гость

Ссылка

Поправил логику процентов — updated-комментарий выше. Код перезалил, ссылки на проект обновил.

Статистика:
1. Код симулятора занимает 560 строк
... если убрать декларации, пустые строки, и строки-со-скобочками, то чистого кода будет где-то около 300 строк
2. На написание и отладку собсна симулятора я потратил период времени с 09 октября по 23 октября — это ровно 2 недели
... чистого времени - где-то в среднем по 3-4 часа в день, в расчёте 2 дня из трёх — т.е. итого около 30-40 человеко-часов

Даже если положить, ну, пусть хотя бы по 3 байта машинных команд в среднем на одну строку Си-шного кода (а это очень скромная норма), то выйдет, оценочно, около килобайта кода!
... и это ещё при том, что я НЕ реализовывал извлечение квадратного корня, работу с регистром памяти, ну и пр. мелочёвку, которые есть в к145ип11.

Ума не приложу, КАК это было впихнуто в к145ип11...

Но что для меня непонятно, каким образом инженеры это всё сделали в 70-х годах прошлого века.
У меня для этой работы был современный компутер, на котором работать - удовольствие.
И это я сделал ещё всего лишь симулятор, т.е. я не запихивал этот код в мягко-говоря-своеобразную архитектуру микро-ЭВМ 145ип11.
Либо у них тогда на это ушло реально на пару порядков больше сил и времени, либо у них был какой-то технологический секрет (суперкомпутер??), либо... эти люди были на самом деле оооочень талантливыми.
// я не знаю, кто разработал прошивку для конкретно 145ип11, — может наши сделали это сами, а может скопировали у американцев (вроде был такой чип Rockwell A5901 — http://www.arithmomuseum.com/a...ang=en)... но ведь кто-то же это изначально сделал




MM, надо делать железку!
Сейчас на форуме
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
xoiss написал:
[q]
3 байта машинных команд в среднем на одну строку Си-шного кода
[/q]
ИМХО, по аналогии с Паскалем, порядка 20 байт ( 10-14 ( 8 ) слов ) на 1 оператор Паскаля, с точностью переменных 2 байта.
Надо проверить, может ли исполняемый коТ работать в ПЗУ, или придется переписать на "натуральный ассемблер" - там не будет проблем с ПЗУ . При написани такого текста следует сделать базовую переменную - адрес начала таблиц переменных в ОЗУ и фиксировать указатель стека в начале программы, т.к. он будет в районе адресов 170400 ( 8 ).
Текст на ассемблере следует заранее писать в перемещаемом по адресам варианте.

Сделал 2-ю редакцию Э3 - чуть малость по-универсальней, с 8-битным Ковоксом, см. пост выше.
Этот вариант заточен именно под замену 145ИП11 - клава до 9 х 4 сканов, и возможное расширение под RT-11.

Нужен опытный тополог ДПП.
Господин Пантера г. Москва не нашел возможности заняться проектом.
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 * 7 8 9 10
Печать
Полигон-2 »   Калькуляторы, арифмометры, PDA, HPC »   Самодельный калькулятор в корпусе Б3-23
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS