Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу 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
Гость

Ссылка

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

так, я понял — посмотрю внимательно п. 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.

Нужен опытный тополог ДПП.
Господин Пантера г. Москва не нашел возможности заняться проектом.
xoiss
Гость

Ссылка

MM написал:
[q]
ИМХО, по аналогии с Паскалем, порядка 20 байт ( 10-14 ( 8 ) слов ) на 1 оператор Паскаля, с точностью переменных 2 байта.
[/q]
... я брал оценку "3 байта на строку" — это не для системы команд PDP-11, а так, чисто абстрактно — в плане "как это вообще могло вместиться изначально в 145ип11"
для PDP-11, боюсь, имеющийся у меня Си компилятор даст ооочень много байт на строку :) — вряд ли он умеет хорошо оптимизировать выхлоп — много будет "накладных расходов" на прологи/эпилоги функций


MM написал:
[q]
Текст на ассемблере следует заранее писать в перемещаемом по адресам варианте.
[/q]
да, я понимаю — это типа когда для работы с переменными (не со страницей В/В) используются инструкции с режимом адресации 6 и 7 — например, 010067 XXXXXX, где XXXXXX - смещение — вместо того, чтобы использовать 010037 AAAAAA, где AAAAAA - адрес... и когда всякие вызовы подпрограмм и дальние переходы тоже идут с режимом адресации 6 и 7

уверен на 99.999%, что Си компилятор делает именно перемещаемый код
но на самом деле если он вдруг будет и не перемещаемым, то попробуем его переместить в нужное место (т.е. с захардкоженными адресами) в процессе линковки
Сейчас на форуме
MM
Advanced Member


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


Ссылка


Дата регистрации на форуме:
2 авг. 2013
xoiss написал:
[q]
уверен на 99.999%, что Си компилятор делает именно перемещаемый код
[/q]
Сделайте программу .SAV на "С" в эмуле ДВК господина Патрона типа "Хелло ворд !" и пришлите мне - я посмотрю насчет перемещаемости.
xoiss
Гость

Ссылка

хммм....

какой из двух взять?:
- http://zx-pk.ru/threads/18351-emulyator-dvk.html
- http://zx-pk.ru/threads/24755-emulyator-rt-11.html
// вторая ссылка, вроде, более свежая (по дате) — начну с неё
Сейчас на форуме
MM
Advanced Member


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


Ссылка


Дата регистрации на форуме:
2 авг. 2013
xoiss написал:
[q]
какой из двух взять?:
[/q]
В ДВК как раз наоборот - лучше вообще на софт после 1991 г. не обращать особого внимания - т.к. самопал и хрен с чем по факту совместим, разве что на словах авторов...

Лучше вообще придерживаться именно настоящей среды ДВК - тогда будут работать все доки и фичи из родных руководств от DEC.

Кратко книги по ДВК выложена тут :
http://emuverse.ru/wiki/%D0%94%D0%92%D0%9A

А более подробно ( довольно точные переводы мануалов от DEC ) - есть где-то 1 шт. Полный комплект для RT-11 SJ V5.00 в русской редакции, мне бы его хотелось в тираж пустить, пусть и на оберточной бумаге.
<<Назад  Вперед>> Страницы: 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