RANDOMIZE USR

Старый спектрумистский форум

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

Shaos wrote:И зачем мне его ухватывать в момент присвоения (т.е. в момент выполнения LET для этой конкретной перменной), если можно вычислить заранее от системной перемнной начала переменных бейсика VARS?...
Да это ты делай как хочешь, просто умные люди придумали функцию ADDR(X), чтобы не выёживаться,
а LET перевели на положение атавизма, чтобы писать просто, вот так: Х = 3.14159. :wink:

Поэтому на старте топика никто про убогий Sinclair BASIC и не говорил:
Stan wrote:Просто хочу проверить на старых Бейсиках под "Специалистом" один древний трюк,
...
Смысл там, что в переменную прячут ассемблерный код и вызывают его, к примеру:
RANDOMIZE USR ADDR(A$)
А мне просто стало интересно, в каких ВАСЮКАХ еще есть этот ADDR(A$) - да практически во всех,
с которыми я лично сам работал на "Специалисте", хотя я им и не пользовался тогда.
А поскольку они "дратые" с "РК-86" и "Микроши" - значит почти на всех подобных ADDR(A$) должен быть.
iLavr
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: RANDOMIZE USR

Post by Shaos »

Ну во-первых они "дратые" у старика Билли :)

Так что ADDR(X) - это изобретение Микрософта...

P.S. Форум вообще-то "ZX Spectrum" называется...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

Shaos wrote:Форум вообще-то "ZX Spectrum" называется...
Ну и? :roll:
Stan wrote:Но я подумал, что уж поклонники ZX Spectrum точно должны знать,
что такое USR. :wink:
Уважаемые джентельмены! Должен Вам с прискорбием сообщить, что у убогого Sinclair BASIC
от "ZX Spectrum" весьма удобного оператора ADDR(X) - НЕТ! :lol:
Видимо потому, что писал его не "старик Билли", а какой-то другой "старик"... :wink:


P.S. Ну что, Shaos, всё ништяк с "ZX Spectrum" ? :mrgreen:
iLavr
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: RANDOMIZE USR

Post by Shaos »

Угу...

P.S. Подкорректировал нашу высокоинтеллектуальную беседу ради эстетики...

P.P.S. Встречный вопрос - а можно ли у старика Билли в A$="..." писать не-буквы? т.е. непечатные символы и коды с >=128? например через бекслеш как в нормальных языках (ну это чтобы полноценно иметь в строковых переменных подпрограммы в любых кодах из всего диапазона значений 0..255)
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: RANDOMIZE USR

Post by jdigreze »

Lavr wrote:Видимо потому, что писал его не "старик Билли", а какой-то другой "старик"... :wink:
Ага, совсем даже не старик Билли, который на тот момент был ещё вовсе даже не старик. :D
Lavr wrote:Да это ты делай как хочешь, просто умные люди придумали функцию ADDR(X), чтобы не выёживаться,
а LET перевели на положение атавизма, чтобы писать просто, вот так: Х = 3.14159.
Функция без сомнения зачОтная и весьма полезная, а вот насчёт атавизма весьма спорно, в спецтруме оно: во1 одной кнопкой набирается ;), а во2, из-за этого от оператора в усмерть токенизированной системе было проблематично избавиться. Я уж умолчу наcчёт того, что в дальнейших реализациях васюков внезапно появляется ещё и оператор SET.
Lavr wrote:Всё же Sinclair BASIC - это в некотором роде ОС
Пожалуй, да, так и есть. Точнее сказать - помесь васюка и ОСи.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

jdigreze wrote:в спецтруме оно: во1 одной кнопкой набирается ;),
Ну, это смотря в каком спецтруме... в спецтруме-128 - вряд ли... :wink:
jdigreze wrote:а во2, из-за этого от оператора в усмерть токенизированной системе было проблематично избавиться.
Да все Васюки - в усмерть токенизированные, тем не менее LET был оставлен чисто для совместимости
с прошлым: можно писать его, а можно и не писать...

Замечу также, что ОС "Sinclair BASIC", известная также как Монитор-16, занимает 16К памяти, а ВАСИК для "Специалиста", также токенизированный, имеющий и автонабор, и альтернативу набора с клавиатуры, занимал всего 8К. Ну ладно - добавим 2К системной ПЗУ = 10К.

И я бы не стал уж так демонизировать это понятие "токенизированный", это всего лишь замена ключевых слов
числами. Вот, к примеру, таблица "токенов" от ВАСЮКА "Микроши":

Code: Select all

CLУFOТNEXФDATБINPUФDIНREAДCUТGOTПRUОIЖRESTORЕGOSUВRETURОREНSTOРOUФOОPLOФLINЕPOKЕPRINФDEЖCONФLISФCLEAТMLOAДMSAVЕNEЧTABЁTПSPCЁFОTHEОNOФSTEР«­ЄЇЮANДOТѕЅјSGОINФABУUSТFRЕINРPOУSQТRNДLOЗEXРCOУSIОTAОATОPEEЛLEОSTR¤VAМASГCHR¤LEFT¤RIGHT¤MID¤
Ей просто соответствует таблица переходов на соответствующие функции, и не более того.
А код токена, если я не забыл, - это его номер в этом связанном списке, который разделяют по последнему символу, большему 7Fh.
Если есть исходник ВАСЮКА, то исправить то, что хочется, довольно нетрудно.
iLavr
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: RANDOMIZE USR

Post by Shaos »

Lavr wrote:
jdigreze wrote:в спецтруме оно: во1 одной кнопкой набирается ;),
Ну, это смотря в каком спецтруме... в спецтруме-128 - вряд ли... :wink:
128-й спектрум - это неудачная шутка испанских разработчиков и потом там есть режим 48К ;)

P.S. Не забудь, что в ПЗУ спектрума ещё и знакогенератор сидел и ещё место было, которое например в том же Урале использовали под русский шрифт...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

Shaos wrote:128-й спектрум - это неудачная шутка испанских разработчиков
Это сугубо твоё личное мнение, которое решил возвести в абсолют один недалекий посетитель ЗетИкс.ПеКа.
А я, к примеру, с этим не согласен, хотя по большому счету мне это пофигу...
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

Shaos wrote:а можно ли у старика Билли в A$="..." писать не-буквы? т.е. непечатные символы и коды с >=128? например через бекслеш как в нормальных языках (ну это чтобы полноценно иметь в строковых переменных подпрограммы в любых кодах из всего диапазона значений 0..255)
Неожиданно пришлось сделать очень похожий опыт, и ответ получился вроде как отрицательным... :-?
Хотя, может я чего и напортачил... но делал вот так:

В теле Васик-программы объявил текстовую переменную заведомо большей длины,
чем подпрограмма на ассемблере.
A$="123456789 ... 0123456789"

Вышел из Васика и шестнадцатиричным редактором занес в строку "123... код ассемблерной
программы.
Снова запустил Васик, на запрос New?> ответил No - т.е. текст программы должен оставаться
неизменным.

По LIST и RUN Васик падает... :-? Ну по LIST - понятно... непечатные символы портят вывод
и Васёк запутывается в листинге.
А вот почему падает по RUN ... пока никак не соображу.... :osad:
iLavr
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: RANDOMIZE USR

Post by Shaos »

Фигово
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

Shaos wrote:Фигово
Да я как-то пока полностью не уверен... :-? Во времена "Специалиста" я что-то похожее точно делал...
Возможно, я подзабыл как это сделать правильно... :osad:
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: RANDOMIZE USR

Post by jdigreze »

Может изначально создавать пустую строку, а потом в цикле загонять туда код через CHR$(n)?
User avatar
Shaos
Admin
Posts: 24055
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: RANDOMIZE USR

Post by Shaos »

ну тогда проще в цикле сразу в нужную память загонять
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: RANDOMIZE USR

Post by jdigreze »

Ну, на том же спектруме можно после добавления в переменную нужного машинного кода удалить строки цикла и всего, что с ним было связано, после чего сохранить программу, и она сохранится с готовой переменной. Но! После этого нельзя делать RUN, только GOTO n, иначе переменная обнулится. Тоже самое касается всяких CLEAR n...

Кстати, при запуске с кассеты, не помню про запуск с диска, но скорее всего так же, делается именно GOTO n, где n - номер строки автозапуска, указанный при SAVE "name" LINE n.

Всем этим порой пользовались при защите программ от просмотра.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

jdigreze wrote:...после чего сохранить программу, и она сохранится с готовой переменной.
Если мы запихали в переменную программу, то могут быть непечатные символы. Как их потом будет
видно (или не видно) по LIST ?

Что-то мне кажется для корректности и чтобы ничего не падало, следует коды программы изначально
держать в DATA.
А вот после RUN первыми инструкциями ВАСЮКА в цикле READ это всё из DATA, и занести в переменую.

Хотя... это как-то неуклюже выглядит... :-?
iLavr