RANDOMIZE USR
Moderator: Shaos
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: RANDOMIZE USR
111
Last edited by angry_troll on 11 Apr 2017 17:44, edited 1 time in total.
привет засранцу лавру :)
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: RANDOMIZE USR
Что-то ты затупил, чувак!angry_troll wrote:так LIST и не отображает переменные. И тем более прогу в машкодах в a$. Тогда уж PRINT a$

Если в программе на BASIC есть строка:
10 A$="123456789 ... 0123456789"
То по листингу LIST она так и отображается на экране:
...
10 A$="123456789 ... 0123456789"
20 ...
Но вместо 123456789 ... 0123456789 мы вставляем машинный код, в котором,
естественно, есть неотображаемые коды.
После этого по LIST и RUN BASIC падает или вешается.
И нафига нам какой-то еще PRINT a$ ?

iLavr
-
- God
- Posts: 1388
- Joined: 02 Jan 2006 02:28
- Location: Abakan
Re: RANDOMIZE USR
Не-не! Он всё правильно сказал.Lavr wrote:Что-то ты затупил, чувак!
В спектруме есть такая фишка, что переменной может не быть в листинге, но быть уже в памяти, и по LIST про эту переменную уже ни как не узнаешь, разве что зная имя сделать PRINT a$.
Я про эту фишку и написал.
А вообще да, переменную надо изначально как пустую: LET a$="".
После чего из DATA считать в цикле: READ n: LET a$=a$+CHR$(n).
При этом LIST тоже ничего, кроме написанного LET a$="", не покажет.
На спектруме после первого RUN, можно вообще удалить все эти строки, а переменная останется инициализированной и заполненной в памяти переменных, никак не отображаемых, причём это состояние можно запросто сохранить на внешний носитель.
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: RANDOMIZE USR
Да нет, он как раз неправильно сказал, по крайней мере для той ситуации, которая описана выше.jdigreze wrote:Не-не! Он всё правильно сказал.Lavr wrote:Что-то ты затупил, чувак!
Если в программе на BASIC есть строка:
10 A$="123456789 ... 0123456789"
Далее по тексту...
ПРИ ЛИСТИНГЕ ЭТА СТРОКА ПРОГРАММЫ НИКУДА ДЕТЬСЯ НЕ МОЖЕТ!
НЕ МОРОЧЬТЕ МНЕ ОБА ГОЛОВУ!
P.S. Вы меня оба неверно поняли.
Вот так как ты рассказываешь:
То a$ действительно в области переменных и её по LIST не видать...А вообще да, переменную надо изначально как пустую: LET a$="".
После чего из DATA считать в цикле: READ n: LET a$=a$+CHR$(n).
При этом LIST тоже ничего, кроме написанного LET a$="", не покажет.
Я же несколько раз рассказал совсем другое:
В программе на BASIC заранее есть строка:
10 A$="123456789 ... 0123456789"
И делается не a$=a$+CHR$(n), а POKE на адреса 123456789 ... 0123456789.
Такую строку как было видно по LIST, так она никуда и не денется.
А вот для 580ВМ80А делать a$=a$+CHR$(n) нельзя и вовсе.
Переменная a$ может быть фиг знает где в памяти в области переменных, а программы
в кодах 580ВМ80А не перемещаемы.
iLavr
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: RANDOMIZE USR
111
Last edited by angry_troll on 11 Apr 2017 17:45, edited 1 time in total.
привет засранцу лавру :)
-
- God
- Posts: 1388
- Joined: 02 Jan 2006 02:28
- Location: Abakan
Re: RANDOMIZE USR
А я и не спорил. Просто предложил другой вариант, который был мне известен.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А не перемещаемы.

P.S. Программы на Z80 тоже при классическом программировании не перемещаемые, но есть методы, когда это можно обойти разными трюками. Но это уже другая тема.
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: RANDOMIZE USR
Да. Трюк простейший -- узнаёшь адрес запуска, вызвав процедуру типа POP HL:JP [HL] или предварительно поместив её по заведомо неиспользуемому (для основной программы) абсолютному адресу. Потом, в цикле фиксинга адресов, очень помогают команды относительного перехода типа JR или DJNZ.jdigreze wrote: P.S. Программы на Z80 тоже при классическом программировании не перемещаемые, но есть методы, когда это можно обойти разными трюками. Но это уже другая тема.
А эта проблема решается на 8080, интересно?
привет засранцу лавру :)
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: RANDOMIZE USR
Решается, как в exe-файлах для ОС под 8086 для вызовов типа FAR.angry_troll wrote:А эта проблема решается на 8080, интересно?
Не знаю, что значит "при классическом программировании", но у Z80 есть относительная адресация,jdigreze wrote:Программы на Z80 тоже при классическом программировании не перемещаемые, но есть методы, когда это можно обойти разными трюками. Но это уже другая тема.
у К580ВМ80 её нет.
Так что никаких "трюков" нет, а есть естественные свойства Z80.
Ну а для К580ВМ80 задачу, как обнаружить текущий адрес и провести коррекцию таблицы переходов,
мы здесь на форуме давно решали, повторяться не буду.
И что-то вы никак не поймете простую вещь: можно спрятать коды подпрограммы позади REM,
a можно и позади a$ = " ... ", при листинге командой LIST коды непечатаемых символов будут
как-то гадить листинг.
ВАСИК ПК "Специалист" при этом вешается, а что делает Монитор-16, я сказать не могу, поскольку
мне это и не нужно, я "трюк" пытаюсь воплотить на эмуляторе ПК "Специалист" .
iLavr