Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Калькуляторы, арифмометры, PDA, HPC » Самодельный калькулятор в корпусе Б3-23 |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 * 8 9 10 | Печать |
1Ж24Б
Advanced Member
Откуда: Kaluga Всего сообщений: 349 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 7 нояб. 2014 |
Второй калькулятор МК-57А, и он даёт такие же результаты. |
xoiss |
NEW! Сообщение отправлено: 23 октября 2018 1:43 Сообщение отредактировано: 23 октября 2018 12:59
В общем, пока ехал домой, разобрался, что к чему. Симулятор я переделал... но не в сторону к Б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 |
NEW! Сообщение отправлено: 23 октября 2018 2:00 Сообщение отредактировано: 23 октября 2018 2:03
1Ж24Б написал: Спасибо! Второй калькулятор МК-57А, и он даёт такие же результаты. Могу ли я попросить Вас сделать ещё несколько примеров? 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 |
NEW! Сообщение отправлено: 23 октября 2018 13:15 Сообщение отредактировано: 23 октября 2018 13:19
Поправил логику процентов — 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 написал: ИМХО, по аналогии с Паскалем, порядка 20 байт ( 10-14 ( 8 ) слов ) на 1 оператор Паскаля, с точностью переменных 2 байта. 3 байта машинных команд в среднем на одну строку Си-шного кода Надо проверить, может ли исполняемый коТ работать в ПЗУ, или придется переписать на "натуральный ассемблер" - там не будет проблем с ПЗУ . При написани такого текста следует сделать базовую переменную - адрес начала таблиц переменных в ОЗУ и фиксировать указатель стека в начале программы, т.к. он будет в районе адресов 170400 ( 8 ). Текст на ассемблере следует заранее писать в перемещаемом по адресам варианте. Сделал 2-ю редакцию Э3 - чуть малость по-универсальней, с 8-битным Ковоксом, см. пост выше. Этот вариант заточен именно под замену 145ИП11 - клава до 9 х 4 сканов, и возможное расширение под RT-11. Нужен опытный тополог ДПП. Господин Пантера г. Москва не нашел возможности заняться проектом. |
xoiss |
NEW! Сообщение отправлено: 23 октября 2018 15:23
MM написал: ... я брал оценку "3 байта на строку" — это не для системы команд PDP-11, а так, чисто абстрактно — в плане "как это вообще могло вместиться изначально в 145ип11" ИМХО, по аналогии с Паскалем, порядка 20 байт ( 10-14 ( 8 ) слов ) на 1 оператор Паскаля, с точностью переменных 2 байта. для PDP-11, боюсь, имеющийся у меня Си компилятор даст ооочень много байт на строку — вряд ли он умеет хорошо оптимизировать выхлоп — много будет "накладных расходов" на прологи/эпилоги функций MM написал: да, я понимаю — это типа когда для работы с переменными (не со страницей В/В) используются инструкции с режимом адресации 6 и 7 — например, 010067 XXXXXX, где XXXXXX - смещение — вместо того, чтобы использовать 010037 AAAAAA, где AAAAAA - адрес... и когда всякие вызовы подпрограмм и дальние переходы тоже идут с режимом адресации 6 и 7 Текст на ассемблере следует заранее писать в перемещаемом по адресам варианте. уверен на 99.999%, что Си компилятор делает именно перемещаемый код но на самом деле если он вдруг будет и не перемещаемым, то попробуем его переместить в нужное место (т.е. с захардкоженными адресами) в процессе линковки |
Сейчас на форуме |
MM
Advanced Member
Откуда: Павловский Посад Мск.обл. Всего сообщений: 3418 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 2 авг. 2013 |
xoiss написал: Сделайте программу .SAV на "С" в эмуле ДВК господина Патрона типа "Хелло ворд !" и пришлите мне - я посмотрю насчет перемещаемости. уверен на 99.999%, что Си компилятор делает именно перемещаемый код |
xoiss |
NEW! Сообщение отправлено: 23 октября 2018 17:05 Сообщение отредактировано: 23 октября 2018 17:07
хммм.... какой из двух взять?: - 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 написал: В ДВК как раз наоборот - лучше вообще на софт после 1991 г. не обращать особого внимания - т.к. самопал и хрен с чем по факту совместим, разве что на словах авторов... какой из двух взять?: Лучше вообще придерживаться именно настоящей среды ДВК - тогда будут работать все доки и фичи из родных руководств от DEC. Кратко книги по ДВК выложена тут : http://emuverse.ru/wiki/%D0%94%D0%92%D0%9A А более подробно ( довольно точные переводы мануалов от DEC ) - есть где-то 1 шт. Полный комплект для RT-11 SJ V5.00 в русской редакции, мне бы его хотелось в тираж пустить, пусть и на оберточной бумаге. |
1Ж24Б
Advanced Member
Откуда: Kaluga Всего сообщений: 349 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 7 нояб. 2014 |
xoiss написал: 9. 79,43 Спасибо! 10. -2 11. 0.0.0.0.0.0.0.0. |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 * 8 9 10 | Печать |
Полигон-2 » Калькуляторы, арифмометры, PDA, HPC » Самодельный калькулятор в корпусе Б3-23 |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |