это был ответ как удалить саму утилиту которая сидит в нулевой строке.
это был ответ как удалить саму утилиту которая сидит в нулевой строке.
Ручками, как написано ниже (переименовать и удалить). При удалении самой себя - вполне возможно получение "недокументированных эффектов".
Программа, специально лежит в нулевой строке, чтобы можно было рассчитать ее адрес и не затирать листинг программы (т.к. обычно это, невозможно создать "честными" средствами бейсика).
У меня как правило в нулевой строке "лежат" комментарии, знакогенератор или код. Все что нужно, это после использовании программой подгрузить его также с помощью MERGE.
Когда есть, но не знаешь где - это все равно, что нету.
null_device, Вот у тебя написано "CALL 6629: RET", то есть после стирки проц. должен прочитать RET. А что если заменить это на "JP 6629"? Это и короче, и после стирки программа уже не нужна. Бейсик, конечно, готу непонятно куда, в середину строки наугад. Но рискнуть можно, вероятность очень высокая, что бейсик ругнётся, и будет дальше работать.
Попробовал, работает. Прикладываю архив, в нём новая версия в TRD и в TAP форматах.
Перед сохранением сделал CLEAR, так что теперь, без переменных, прога весит 249 байт и вписывается в один сектор.
Кодовая часть процедуры была мною взята, кажется из "zx-ревю". Используются куски кода из ПЗУ, которые также содержат перекрестные ссылки и переходы к подпрограммам и манипуляции со стеком. Попросту, не рискнул что-то менять.
Экономия 1 байта? Тогда уж стоило "оптимизировать" и бейсик-часть (задать однобуквенные переменные и VAL для чисел).
А, если нам надо удалить строки в нескольких местах программы?
Когда есть, но не знаешь где - это все равно, что нету.
null_device, Извини, что я поленился объяснить подробнее.
Например нам надо удалить строки с 500 по 600 и с 1000 по 1999
Подгружаем MERGE"DELETE"
Запускаем RUN
Вводим 500
Вводим 600
Нулевая строчка остаётся.
Теперь RUN/1000/1999
Стёрли всё что хотели стереть.
И наконец стираем 0-ю строку:
RUN/0/0
Бейсик удивится, обзовёт это нонсенсом, но можно будет работать дальше. (А в первом варианте всё зависало.)
Ничего удивительного. Последний вызов подпрограммы, начинает стирать строку 0, поэтому, после возврата из ПЗУ, команды RET на своем месте, уже не будет. В результате, будет выполнено нечто с адреса 24115.
В целом, использование JP, вместо CALL в данном случае, для возврата из подпрограммы - можно считать допустимым.
Когда есть, но не знаешь где - это все равно, что нету.
Не будет, как и световой пистолет на Денди.На ЖК-экранах видимо работать не будет?
ZXM-Phoenix v.03/2048/FDD/HD/YM-2149F/PS2-kbd; U8EP3C development board БК-0011М by Woland + SMK 512
Граф Дракула наш кумир, патамушта он вомпир!
VKINK 9 : BORDER NOT PI
Разве, при нажатии курка экран на кадр (или несколько кадров) не гасится, а подсвечивается только квадрат спрайта в который нужно "попасть" фотоприемником пистолета?!
Не световое перо, конечно - но принцип "как-то" привязан к частоте кадров (явно, учитывалась некая инерционность и послесвечение ЭЛТ экрана).
Когда есть, но не знаешь где - это все равно, что нету.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)