Кто-нибудь может подсказать, почему бейсик-микрон не работает на Z80? Вроде бы когда-то обсуждалось, может быть, даже патч был, но не могу почему-то найти...
Если не ошибаюсь, проблема была с флагом четности...
Вид для печати
Кто-нибудь может подсказать, почему бейсик-микрон не работает на Z80? Вроде бы когда-то обсуждалось, может быть, даже патч был, но не могу почему-то найти...
Если не ошибаюсь, проблема была с флагом четности...
Да, там в двух местах флаг четности мешает.
Если речь про РКшный микрон, то вот
в 2011 году я подсчитал, что RDK очень похож на TRS-80 Level I, который был не от Microsoft (от тех был Level II), а был написан на основе фришного Palo Alto Tiny BASIC от Li-Chen Wang:
http://en.wikipedia.org/wiki/TRS-80Цитата:
Level I Basic was based on Li-Chen Wang's free Tiny BASIC, additional functions added by Radio Shack.[8] It achieved a measure of noteworthiness due in large part to its outstanding manual,[5] written by David Lien, which presented lessons on programming with text and humorous graphics, making the subjects very easy to understand. It had only two string variables (A$ and B$), 26 numeric variables (A - Z) and one array, A(). Code for functions like SIN(), COS() and TAN() was not included in ROM but printed at the end of the book. The only error messages were: "WHAT?" for syntax errors, "HOW?" for arithmetic errors such as division by zero, and "SORRY" for out of memory errors.
http://www.nedopc.org/forum/viewtopi...=9630&start=30
P.S. Буквально вот только что появился ещё один микроскопический бейсик для 8080, который влезает в 1К ПЗУ и требует как минимум 1К ОЗУ (но может использовать и все 64К):
https://hackaday.io/project/194248-o...c-for-the-8080
https://github.com/WillStevens/basic1K
Занялся дизассемблированием Бейсика от КР-04.
Несколько недель ушло на устранение множества гвоздей, которые не давали перемещать подпрограммы ни на байт: PRINT зацикливался при выводе числовых значений, BEEP честно выдавал ошибку деления на ноль и т.п. и т.д.
Причина - банальная: Дизассемблер напутал с константами и объявил их метками, а некоторые ссылки на метки объявил константами, так как в коде множество ухищрений с маскировкой команд, типа:Из-за чего многие метки оказались неопределёнными и команды ветвления использовали магические константы.Код:; Странная инструкция
mvi c,0f1h
; На самом деле
db 0eh
Label1: pop psw
; Странная инструкция
lxi h,0d1c1h
; На самом деле
db 21h
Label2: pop b
pop d
Сейчас, когда я вычистил листинг (более 5000 строк) от всей этой магии, Бейсик вполне пригоден для работы (проверяю на игре Злые пещеры), но есть сомнения в тригонометрии из-за тех магических констант, что потребует очередных трассировок.
Выявил все подпрограммы директив, операторов и функций.
Ещё один шаг - замена всех RST на CALL, чтобы отвязать Бейсик от жёсткой посадки на нулевой адрес: Тоже выявило много магических зависимостей. Но, в конце-концов, удалось и это. Ничего не зацикливается и игра благополучно выполняется достаточное время.
Сейчас проблема одна: При забрасывании Бейсика в верхние адреса (за 8000h) он хоть и продолжает работать, но годен только для простых операций: PRINT, BEEP и т.п.
При попытке создать переменную или на том же FOR - выдаёт "Мало ОЗУ". В отладчике я конкретные точки возникновения ошибки нашёл и вижу. Но пока не понимаю, как это исправить: Всё крутится внутри NEW и холодного старта.
Можно подробнее про баг FLOAT->DE?
Сравниваю кое-как с исходниками Altair-Basic.
P.S.: Исходный листинг слишком велик, чтобы быстро в нём ориентироваться.