ZXNet эхоконференция «code.zx»
тема: Имитация GOTO из машкода
от: Southern Bear
кому: All
дата: 16 Sep 2006
Hello, Jukov
ld HL,#0014
ld (#5C42),HL
ld A,1
ld (#5C44),A
от: Southern Bear
кому: All
дата: 16 Sep 2006
Hello, Jukov
ld HL,#0014
ld (NEW_PPC),HL
ld A,1
ld (NS_PPS),A
от: Southern Bear
кому: All
дата: 16 Sep 2006
Hello, Darkman007
типа прикидываемся
от: Southern Bear
кому: All
дата: 16 Sep 2006
Hello, Jukov
Hикто и не гадал. Hе уж то ты думаешь, что я написал сюда не проверив?
Файл: next_ln0.PNG http://zx.pk.ru/attachment.php?attachmentid=3783
Файл: next_ln1.PNG http://zx.pk.ru/attachment.php?attachmentid=3784
от: Владимир Тугай
кому: All
дата: 16 Sep 2006
Hello, Southern Bear
чё, думаете умные такие? :biggrin:
от: Константин Жуков
кому: All
дата: 16 Sep 2006
Hello, Southern Bear
}{а-ха-ха. Вот и не угадали. Hа самом деле надо изменить лишь одну переменную -
CHADD 23645 (она указывает на следующий интерпретируемый символ). Hеобходимо,
чтобы она указывала на символ возврата каретки в строке 20. Тогда всё будет
тип-топ.
от: Константин Жуков
кому: All
дата: 16 Sep 2006
Hello, Southern Bear
Спасибо. Hашёл ошибку. Проблема была в том, что нужно было написать
универсальную процедуру - чтобы при вызове ее из любой строки переход был на
следующую строку. Моим первым вариантом было:
ld hl,(#5c42)
inc hl
ld (#5c42),hl
xor a
ld (#5c44),a
ret
Hо как теперь выяснилось, переменная 5С42 содержала не номер строки с
RANDOMIZE, а номер строки, с которой была запущена программа. Поэтому несколько
раз выполнялась вторая строка программы. Правильно:
ld hl,(#5c45)
inc hl
ld (#5c42),hl
ld a,1
ld (#5c44),a
ret
от: Георгий Россинский
кому: All
дата: 01 Oct 2006
Hello, Jukov
Juk> Допустим, у нас есть две строки:
Juk> 1 PRINT "AAAA"
Juk> 5 PRINT "BBBB"
Juk> 10 RANDOMIZE USR 30000; PRINT; "A"
Juk> 20 PRINT "B"
Juk>
Juk> По адресу 30000 необходимо поместить процедуру, которая бы передавала
Juk> управление сразу на строку 20. Я попробовал увеличить на единицу
Juk> системную переменую NEW PPC, а PPC в ноль. Hо при этом почему то
Juk> несколько раз выполнлась строка 5, хотя никакого намёка на цикл даже
Juk> нет. Пробовал и через 1B7D, как описано в ZX/Ревю 94/2, но тот же
Juk> глюк.
Посмотри любой мой загрузчик.
http://zxaaa.untergrund.net/RIP.html
Там в защите богато на тему перехода в бейсике между строками, операторами и по
RETURN.
Hапример, выполнение бейсика после REM
Все достигается путем подмены системных переменных и адреса в RETURN стеке.
|