Author |
Message |
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Вот я и хотел попробовать работу этого метода для текстовой строки без загрузки из строк DATA через POKE. Собственно, и в этом случае должен сработать RANDOMIZE USR на адрес текстовой переменой.
|
28 Mar 2015 10:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Пришлось тоже вспомнить про эти все трюки с подпрограммами в машинных кодах в связи с RND в Бейсик «МИКРОША». Подпрограммы в машинных кодах можно спрятать в теле BASIC-программамы в символьных переменных, а потом обращаться к ним по адресу переменной (есть такой оператор). И встретил я по пути, что в Спектрумах можно упрятать подпрограммы в машинных кодах после оператора REM. Вот только как обратиться потом к этой "сабрутине"... разве что подсмотреть абсолютный адрес посадки...
_________________ iLavr
|
14 Apr 2016 15:00 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Ну на свежеребутнутом спектруме басиковская программа начинается всегда по одному и тому же адресу - соответственно можно предугадать смещение до подпрограммы после REM (я это всё делал сам в первой половине 90х)
|
14 Apr 2016 20:43 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1388 Location: Abakan
|
Можно и относительно, если подсмотреть адрес начала бейсик-программы в системных переменных, но вот смещение от начала таки придётся искать вручную ...хотя, зная номер строки, вроде бы можно найти адрес совсем динамически, но это чего-то писать надо, а вот функции определения адреса я не припоминаю.
|
15 Apr 2016 05:50 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
это в 8-битных ВАСЮКАХ... VARPTR(X) и VARSEG(X) - это в КуВАСЮКЕ VarPtr(MyVar) - это в Visual ВАСЮКЕ... В VB.NET ВАСЮКЕ тебе тоже надо?... там всё чуть сложнее...
_________________ iLavr
|
15 Apr 2016 11:28 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
в ZX небыло такого вроде бы
|
15 Apr 2016 12:28 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Должен быть. Я честно говоря, сам про ADDR(X) узнал, читая ваши здесь ранние "тёрки" на старте топика. А куда делать USR(....)? А на ADDR(X)! Вот трюк с VARPTR(X) и VARSEG(X) в КуВАСЮКЕ я сам активно юзал. Но в Спектрумах я не спец. Не пользовался ими.... Посмотрите, если не лень...
_________________ iLavr
|
15 Apr 2016 15:01 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Ну на спектруме код не в переменной прятали, а в комментарии - соответственно адрес надо было вычислять самому...
|
15 Apr 2016 16:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну тогда понятно, почему jdigreze тут так долго "удивлялся" этому трюку...
_________________ iLavr
|
15 Apr 2016 17:44 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1388 Location: Abakan
|
| | | | Lavr wrote: это в 8-битных ВАСЮКАХ... VARPTR(X) и VARSEG(X) - это в КуВАСЮКЕ VarPtr(MyVar) - это в Visual ВАСЮКЕ... В VB.NET ВАСЮКЕ тебе тоже надо?... там всё чуть сложнее... | | | | |
Про типовые васюки я уже в курсе, что есть функция, а вот в спектрумовском васюке такой функции я не припоминаю, хотя например работа с портами и памятью там имеется.
|
15 Apr 2016 18:57 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну должно быть что-то похожее. Может быть, через системные переменные можно добыть адрес, тогда эта функция и не нужна... Вот, к примеру: Это, случаем, не оно? ( http://www.wikiznanie.ru/wikipedia/index.php/Sinclair_BASIC) Я посто помню из опыта ломания игр у Sinclair BASIC было больше мест спрятать код, нежели один этот REM. Там и "закрасить" можно было машинный код, чтоб он был невидим при листинге...
_________________ iLavr
|
15 Apr 2016 19:50 |
|
|
jdigreze
God
Joined: 02 Jan 2006 02:28 Posts: 1388 Location: Abakan
|
Сейчас сложно сказать, столько лет этим не занимался... А это как раз совместно использовалось из-за возможности расцвечивать любой символ прямо при вводе с клавиатуры - спецсимволы 0x10-0x17.
|
16 Apr 2016 07:46 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
так тож во время присваивания, т.е. в процессе выполнения программы
а средств взять адрес произвольной переменной ПО ИМЕНИ - небыло...
|
16 Apr 2016 15:44 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну так если тебе нужен этот адрес - вот и ухватывай его во время присваивания, т.е. в процессе выполнения программы, наверное это удобней, нежели искать адрес ручками? Всё же Sinclair BASIC - это в некотором роде ОС, и под него писали больше программ, нежели под другие ВАСЮКИ. И всякие хитрости под него были получше изучены, раз уж и ошибки его были вознесены в ранг фич для совместимости. Мне просто копаться сейчас в этом древнем гамне неохота, есть поинтереснее вещи... P.S. Не, ну если ты настаиваешь, могу выразить свое формальное согласие:"Да, вот такой он херовый этот Sinclair BASIC, - нет в нём ф-ции ADDR(X), как в других 8-битных ВАСЮКАХ..." Но, как я и сказал, не из-за него я влез в этот топик, а ф-цию ADDR(X) неожиданно обнаружил, когда здесь только началось обсуждение от топикстартера, он то как раз на Sinclair BASIC внимание не акцентировал.
_________________ iLavr
|
17 Apr 2016 05:05 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
И зачем мне его ухватывать в момент присвоения (т.е. в момент выполнения LET для этой конкретной перменной), если можно вычислить заранее от системной перемнной начала переменных бейсика VARS?...
|
17 Apr 2016 06:55 |
|
|