1. Про ADDR. Думаю все же ошибок в ADDR нет, их уже пытались найти в вектор-user 7, но в 11 Филиппов показал частный пример, что все нормально. ADDR по-хорошему дубовый, нет отдельной специальной реализации этой функции, вызывается базовая функция поиска переменной. Если бы это базовая функция подглюкивала, то глючили бы практически все программы, использующие переменные (т.е. на практике все программы).
У меня есть предположение, что могло быть не так. Если GET, ADDR и BSAVE в программе, то все должно быть нормально и однозначно. А вот если GET отдельно, а ADDR и BSAVE потом из командной строки или GET и ADDR в программе, а BSAVE потом, то возможны варианты. Дело в том, что переменные "портятся" от каждого чиха. Например EDIT любой строки даже без ее редактирования (EDIT, потом сразу ВК) испортит переменные. Или удаление строки. Кстати, у EDIT и удаления строки через ввод ее номера (не через DELETE) есть неприятный побочный эффект - на 2 байта увеличивается адрес начала переменных. Если 100 раз сделать EDIT (даже без собственно редактирования строки) то область переменных уползет на 200 байт. Или 100 раз ввести строку, например 1000 REM и удалить ее через ввод номера 1000 - эффект будет аналогичный. Возвращают эту память RUN, NEW или DELETE (DELETE возвращает почти все кроме одного байта).
В GET еще в детстве раздражало требование использования ADDR. Думаю надо убрать это ограничение, не вижу в нем смысла.
2. Речь коснулась графики и я вспомнил, что в исходнике никак не отметил задание адреса таблицы для быстрого вычисления адреса и маски точки.
Адрес таблицы при расчете задается в районе метки DELETEADVERT, там lxi b, unk_4100. А используется таблица строго через mvi b,41h, в исходнике такая команда встречается 5 раз, все их надо заменить на mvi b, unk_4100>>8. Еще лучше заменить unk_4100 на нормальное имя.




Ответить с цитированием