Курю его, курю... Да там не особо его разбирать, только найти обращения к портам в/в, остальное мелочи. Не без недостатков: нет плавающей запятой, нет функций... Обойтись можно, но вопрос об автозапуске остаётся...
Вид для печати
Курю его, курю... Да там не особо его разбирать, только найти обращения к портам в/в, остальное мелочи. Не без недостатков: нет плавающей запятой, нет функций... Обойтись можно, но вопрос об автозапуске остаётся...
Здесь (среди прочего) можно скачать исходник 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ного.
Нашел еще одно характерное отличие бейсика микрон в дополнение к ранее озвученному (1, 2). В таблице коэффициентов ряда для расчета синуса вместо пяти используемых зачем-то поместили семь коэффициентов (из которых два никогда не используются). И во всех портах микрона на другие компы их бездумно перетаскивали. Использовать для "детекта микрона" все же проще сигнатуру из процедуры INTFROMFLOAT, описанную по вышеприведенной ссылке.
Признаюсь, что насчет рядов в микросфотовских бейсиках разобрался не на 100%. Для экспоненты и арктангенса используются коэффиценты ряда Маклорена. А вот для синуса и логарифма коэффициенты какие-то странноватые.
Практически доразобрался с рядами.
У синуса коэффициенты умножены на 2*pi в соответствующей степени. Меня сбило то, что микрософтовцы немного (на 5%, если за 100% принять зануление) ошиблись с последним коэффициентом. Но эта небольшая погрешность на практике совершенно незаметна, т.к. даже если взять и занулить 5й коэффициент, то ошибка будет только вблизи аргументов +-pi/2 и +-3pi/2 (с периодом 2*pi) и это будет очень-очень маленькая ошибка. Поэтому микрософтовцы не поправили пятый коэффициент для расчета синуса даже в последних (5.x) версиях своих бейсиков для 8080.
Для логарифма ряд считает некий промежуточный результат.
При более тщательной проверке оказалось, что именно "неправильный" пятый коэффициент дает максимальную точность расчета синуса (разница очень-очень маленькая, но все же есть). Получается микрософтовцы совершенно оправданно использовали именно его. Осталось понять - почему так.
- - - Добавлено - - -
Единственное объяснение, которое смог придумать - это коррекция коэффициента для учета ограниченной точности представления чисел. Представление нормального коэффициента вылезает в следующий старший бит мантиссы, а микрософтовский вариант почти на границе. Можно даже чуть увеличить этот коэффициент, главное не переходить к задействованию следующего бита мантиссы, и тогда результаты тоже получаются неотличимо точные. Именно пятый коэффициент подвергся коррекции скорее всего из-за того, что он перед минимальным по модулю значением степени аргумента, в других коэффициентах точности хватает (для правильного вычисления произведения коэффициента на степень аргумента).
в копилку свеженький
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 - это хорошо, но слишком уж он простой.
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 бейсик для вектора
:v2_dizzy_tired2:
вот тут
https://winworldpc.com/download/c2bf...0-11c3a7c29d25
Microsoft Basic-80 5.2 Source