Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Калькуляторы, арифмометры, PDA, HPC » Самодельный калькулятор в корпусе Б3-23 |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 * 7 8 9 10 | Печать |
xoiss |
Сообщение отправлено: 22 октября 2018 0:36 Сообщение отредактировано: 23 октября 2018 12:46
Ну, собсна, всё — софт в "консольном" варианте готов! Желающих протестировать, приглашаю сюда: 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 |
Сообщение отправлено: 22 октября 2018 0:55 Сообщение отредактировано: 22 октября 2018 16:22
1Ж24Б написал: Ну, вообще я хотел поспрашивать в отношении операции взятия процентов... но я её так или иначе уже успел реализовать, что называется "по своему разумению". Есть живой Б3-23 и МК-57. Что требуется выполнить? Тем не менее, интересно было бы проверить несколько примеров. Если можете помочь — было бы здорово. 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 |
Сообщение отправлено: 22 октября 2018 16:31
1Ж24Б написал: ... если можно, то вот ещё несколько примеров на проценты — я здесь привожу так, как у меня в симуляторе реализовано Есть живой Б3-23 и МК-57. Что требуется выполнить? 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 |
NEW! Сообщение отправлено: 22 октября 2018 22:11
о, спасибо!!! так, я понял — посмотрю внимательно п. 8 похоже, для этой части надо логику поменять |
Сейчас на форуме |
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. Нужен опытный тополог ДПП. Господин Пантера г. Москва не нашел возможности заняться проектом. |
<<Назад Вперед>> | Страницы: 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 тем | |