Курю его, курю... Да там не особо его разбирать, только найти обращения к портам в/в, остальное мелочи. Не без недостатков: нет плавающей запятой, нет функций... Обойтись можно, но вопрос об автозапуске остаётся...
Курю его, курю... Да там не особо его разбирать, только найти обращения к портам в/в, остальное мелочи. Не без недостатков: нет плавающей запятой, нет функций... Обойтись можно, но вопрос об автозапуске остаётся...
Последний раз редактировалось rw6hrm; 16.05.2019 в 14:05.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Здесь (среди прочего) можно скачать исходник NASCOM бейсика, который является версией 4.7 микрософтовского бейсика. Это версия 8k, т.ч. вполне конкурентоспособна с советскими вариантами 3.2. Минус - нашел там несколько команд специфичных для z80 (три команды с IX, две команды djnz и один раз 16битный sbc), все это очень легко переделывается на 8080 (дольше и муторнее переделывать ввод и вывод). Плюс (кроме того, что это 4.7) - вызовы ряда подпрограмм, которые в 3.2 на rst здесь на call, что облегчает релоцирование. Исходник рассчитан на некий специфический асм (указан в заголовке), я его скачал, но не стал пробовать и перепилил на tasm.
Еще очень бегло взглянул на апогеевский BASMSX.RKA. Это точно не 3.2, а 4.x или 5.x. MSXный - это вариант 5.x, но насчет этого апогеевского варианта не уверен, что там есть хоть что-то из msxного.
Последний раз редактировалось ivagor; 26.05.2019 в 08:48.
Нашел еще одно характерное отличие бейсика микрон в дополнение к ранее озвученному (1, 2). В таблице коэффициентов ряда для расчета синуса вместо пяти используемых зачем-то поместили семь коэффициентов (из которых два никогда не используются). И во всех портах микрона на другие компы их бездумно перетаскивали. Использовать для "детекта микрона" все же проще сигнатуру из процедуры INTFROMFLOAT, описанную по вышеприведенной ссылке.
Признаюсь, что насчет рядов в микросфотовских бейсиках разобрался не на 100%. Для экспоненты и арктангенса используются коэффиценты ряда Маклорена. А вот для синуса и логарифма коэффициенты какие-то странноватые.
Практически доразобрался с рядами.
У синуса коэффициенты умножены на 2*pi в соответствующей степени. Меня сбило то, что микрософтовцы немного (на 5%, если за 100% принять зануление) ошиблись с последним коэффициентом. Но эта небольшая погрешность на практике совершенно незаметна, т.к. даже если взять и занулить 5й коэффициент, то ошибка будет только вблизи аргументов +-pi/2 и +-3pi/2 (с периодом 2*pi) и это будет очень-очень маленькая ошибка. Поэтому микрософтовцы не поправили пятый коэффициент для расчета синуса даже в последних (5.x) версиях своих бейсиков для 8080.
Для логарифма ряд считает некий промежуточный результат.
Последний раз редактировалось ivagor; 27.05.2019 в 20:14. Причина: чуть корректнее написал насчет "критичных" значений аргумента sin и убрал насчет ln(x)
При более тщательной проверке оказалось, что именно "неправильный" пятый коэффициент дает максимальную точность расчета синуса (разница очень-очень маленькая, но все же есть). Получается микрософтовцы совершенно оправданно использовали именно его. Осталось понять - почему так.
- - - Добавлено - - -
Единственное объяснение, которое смог придумать - это коррекция коэффициента для учета ограниченной точности представления чисел. Представление нормального коэффициента вылезает в следующий старший бит мантиссы, а микрософтовский вариант почти на границе. Можно даже чуть увеличить этот коэффициент, главное не переходить к задействованию следующего бита мантиссы, и тогда результаты тоже получаются неотличимо точные. Именно пятый коэффициент подвергся коррекции скорее всего из-за того, что он перед минимальным по модулю значением степени аргумента, в других коэффициентах точности хватает (для правильного вычисления произведения коэффициента на степень аргумента).
Последний раз редактировалось ivagor; 27.05.2019 в 22:01.
в копилку свеженький
https://github.com/dimitrit/tastybasic
Tasty Basic
Нашел, откуда взяли коэффициенты для разложения синуса в ряд в микрософтовском бейсике. Книга Computer Apporoximations, J. Hart и другие (1968). Страница 238, набор SIN 3341, только в книге и в бейсике разное масштабирование аргумента и, соответственно, коэффициентов (в книге соответствуют аргументу деленному на pi/2, а в бейсике - на 2pi). Со своей колокольни я бы трактовал использованный подход как умножение на оконную функцию при усечении бесконечного ряда (должен был и сам догадаться). Вместо умножения на прямоугольную оконную функцию (т.е. часть коэффициентов берем с множителем 1, а остальные с множителем 0, т.е. отбрасываем) здесь используется более плавная и больше всего изменяются коэффициенты на границе, в данном случае пятый. В книжке можно увидеть, что в других наборах для синуса с большим или меньшим числом коэффициентов тоже сильнее всего "страдают" именно конечные.
Насчет логарифма. В последних микрософтовских бейсиках для 8080 точно используются коэффициенты из Харта, но там изменили алгоритм. Скорее всего в бейсиках <=5.0 тоже из Харта, только надо найти тот самый набор. Кстати побочный эффект разбирательства с алгоритмом - удостоверился, что корветовский бейсик на базе не последних версий микрософтовского.
Варианты Tiny Basica - это хорошо, но слишком уж он простой.
Последний раз редактировалось ivagor; 28.05.2019 в 06:49.
https://sourceforge.net/projects/msxsyssrc/
не смотрел , чтото msx
microsoft basic-80 5.2 source code
http://lahey.winworldpc.com/Microsof....2%20Source.7z
О, за msxный большое спасибо, а тот что (предположительно, т.к. скачать оттуда не смог) по второй ссылке я уже скачал в декабре прошлого года. Из исходника basic-80 я как раз и вышел на книгу Харта. В этом исходнике отдельно доставляют восьмеричные числа.
ivagor, ждем msx бейсик для вектора
вот тут
https://winworldpc.com/download/c2bf...0-11c3a7c29d25
Microsoft Basic-80 5.2 Source
Последний раз редактировалось zx_; 28.05.2019 в 12:09.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)