RANDOMIZE USR

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

Moderator: Shaos

angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: RANDOMIZE USR

Post by angry_troll »

111
Last edited by angry_troll on 11 Apr 2017 17:44, edited 1 time in total.
привет засранцу лавру :)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

angry_troll wrote:так LIST и не отображает переменные. И тем более прогу в машкодах в a$. Тогда уж PRINT a$ :)
Что-то ты затупил, чувак! :mrgreen:

Если в программе на BASIC есть строка:
10 A$="123456789 ... 0123456789"

То по листингу LIST она так и отображается на экране:

...
10 A$="123456789 ... 0123456789"
20 ...


Но вместо 123456789 ... 0123456789 мы вставляем машинный код, в котором,
естественно, есть неотображаемые коды.

После этого по LIST и RUN BASIC падает или вешается.

И нафига нам какой-то еще PRINT a$ ? :o
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: RANDOMIZE USR

Post by jdigreze »

Lavr wrote:Что-то ты затупил, чувак!
Не-не! Он всё правильно сказал.
В спектруме есть такая фишка, что переменной может не быть в листинге, но быть уже в памяти, и по LIST про эту переменную уже ни как не узнаешь, разве что зная имя сделать PRINT a$.
Я про эту фишку и написал.

А вообще да, переменную надо изначально как пустую: LET a$="".
После чего из DATA считать в цикле: READ n: LET a$=a$+CHR$(n).
При этом LIST тоже ничего, кроме написанного LET a$="", не покажет.

На спектруме после первого RUN, можно вообще удалить все эти строки, а переменная останется инициализированной и заполненной в памяти переменных, никак не отображаемых, причём это состояние можно запросто сохранить на внешний носитель.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

jdigreze wrote:
Lavr wrote:Что-то ты затупил, чувак!
Не-не! Он всё правильно сказал.
Да нет, он как раз неправильно сказал, по крайней мере для той ситуации, которая описана выше.

Если в программе на BASIC есть строка:
10 A$="123456789 ... 0123456789"

Далее по тексту...

ПРИ ЛИСТИНГЕ ЭТА СТРОКА ПРОГРАММЫ НИКУДА ДЕТЬСЯ НЕ МОЖЕТ!
НЕ МОРОЧЬТЕ МНЕ ОБА ГОЛОВУ!



P.S. Вы меня оба неверно поняли.
Вот так как ты рассказываешь:
А вообще да, переменную надо изначально как пустую: LET a$="".
После чего из DATA считать в цикле: READ n: LET a$=a$+CHR$(n).
При этом LIST тоже ничего, кроме написанного LET a$="", не покажет.
То a$ действительно в области переменных и её по LIST не видать...

Я же несколько раз рассказал совсем другое:

В программе на BASIC заранее есть строка:
10 A$="123456789 ... 0123456789"

И делается не a$=a$+CHR$(n), а POKE на адреса 123456789 ... 0123456789.
Такую строку как было видно по LIST, так она никуда и не денется.
А вот для 580ВМ80А делать a$=a$+CHR$(n) нельзя и вовсе.
Переменная a$ может быть фиг знает где в памяти в области переменных, а программы
в кодах 580ВМ80А не перемещаемы.
iLavr
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: RANDOMIZE USR

Post by angry_troll »

111
Last edited by angry_troll on 11 Apr 2017 17:45, edited 1 time in total.
привет засранцу лавру :)
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: RANDOMIZE USR

Post by jdigreze »

Lavr wrote:Если в программе на BASIC есть строка:
10 A$="123456789 ... 0123456789"

Далее по тексту...

ПРИ ЛИСТИНГЕ ЭТА СТРОКА ПРОГРАММЫ НИКУДА ДЕТЬСЯ НЕ МОЖЕТ!
НЕ МОРОЧЬТЕ МНЕ ОБА ГОЛОВУ!
А я и не спорил. Просто предложил другой вариант, который был мне известен.
Lavr wrote:В программе на BASIC заранее есть строка:
10 A$="123456789 ... 0123456789"

И делается не a$=a$+CHR$(n), а POKE на адреса 123456789 ... 0123456789.
Такую строку как было видно по LIST, так она никуда и не денется.
А вот для 580ВМ80А делать a$=a$+CHR$(n) нельзя и вовсе.
Переменная a$ может быть фиг знает где в памяти в области переменных, а программы
в кодах 580ВМ80А не перемещаемы.
Если только такой вариант, то... вряд ли чего путнего присоветую. :roll:

P.S. Программы на Z80 тоже при классическом программировании не перемещаемые, но есть методы, когда это можно обойти разными трюками. Но это уже другая тема.
angry_troll
Doomed
Posts: 449
Joined: 08 Apr 2013 04:04
Location: 213.247.249.139

Re: RANDOMIZE USR

Post by angry_troll »

jdigreze wrote: P.S. Программы на Z80 тоже при классическом программировании не перемещаемые, но есть методы, когда это можно обойти разными трюками. Но это уже другая тема.
Да. Трюк простейший -- узнаёшь адрес запуска, вызвав процедуру типа POP HL:JP [HL] или предварительно поместив её по заведомо неиспользуемому (для основной программы) абсолютному адресу. Потом, в цикле фиксинга адресов, очень помогают команды относительного перехода типа JR или DJNZ.

А эта проблема решается на 8080, интересно?
привет засранцу лавру :)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RANDOMIZE USR

Post by Lavr »

angry_troll wrote:А эта проблема решается на 8080, интересно?
Решается, как в exe-файлах для ОС под 8086 для вызовов типа FAR.
jdigreze wrote:Программы на Z80 тоже при классическом программировании не перемещаемые, но есть методы, когда это можно обойти разными трюками. Но это уже другая тема.
Не знаю, что значит "при классическом программировании", но у Z80 есть относительная адресация,
у К580ВМ80 её нет.
Так что никаких "трюков" нет, а есть естественные свойства Z80.

Ну а для К580ВМ80 задачу, как обнаружить текущий адрес и провести коррекцию таблицы переходов,
мы здесь на форуме давно решали, повторяться не буду.

И что-то вы никак не поймете простую вещь: можно спрятать коды подпрограммы позади REM,
a можно и позади a$ = " ... ", при листинге командой LIST коды непечатаемых символов будут
как-то гадить листинг
.

ВАСИК ПК "Специалист" при этом вешается, а что делает Монитор-16, я сказать не могу, поскольку
мне это и не нужно, я "трюк" пытаюсь воплотить на эмуляторе ПК "Специалист" .
iLavr