nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Mar 2024 23:07



Reply to topic  [ 53 posts ]  Go to page Previous  1, 2, 3, 4  Next
RANDOMIZE USR 
Author Message
Banned
User avatar

Joined: 04 Jan 2013 10:09
Posts: 397
Location: 95.24.178.158
Reply with quote
jdigreze wrote:
Просматривая help QB45 наткнулся на пример подобного вызова, с тем лишь отличием, что используется не текстовая строка, а числовой массив, загружаемый из строк DATA через POKE. Вызывается код через CALL ABSOLUTE, по адресу и смещению на начало массива.

Вот я и хотел попробовать работу этого метода для текстовой строки без загрузки из строк DATA через POKE.
Собственно, и в этом случае должен сработать RANDOMIZE USR на адрес текстовой переменой.


28 Mar 2015 10:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Пришлось тоже вспомнить про эти все трюки с подпрограммами в машинных кодах в связи с RND в Бейсик «МИКРОША».

Подпрограммы в машинных кодах можно спрятать в теле BASIC-программамы в символьных переменных,
а потом обращаться к ним по адресу переменной (есть такой оператор).

И встретил я по пути, что в Спектрумах можно упрятать подпрограммы в машинных кодах после оператора REM.
Вот только как обратиться потом к этой "сабрутине"... разве что подсмотреть абсолютный адрес посадки... 8)

_________________
iLavr


14 Apr 2016 15:00
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22382
Location: Silicon Valley
Reply with quote
Ну на свежеребутнутом спектруме басиковская программа начинается всегда по одному и тому же адресу - соответственно можно предугадать смещение до подпрограммы после REM (я это всё делал сам в первой половине 90х)

_________________
:dj: https://mastodon.social/@Shaos


14 Apr 2016 20:43
Profile WWW
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Можно и относительно, если подсмотреть адрес начала бейсик-программы в системных переменных, но вот смещение от начала таки придётся искать вручную ...хотя, зная номер строки, вроде бы можно найти адрес совсем динамически, но это чего-то писать надо, а вот функции определения адреса я не припоминаю.


15 Apr 2016 05:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
jdigreze wrote:
а вот функции определения адреса я не припоминаю.

Quote:
ADDR(X) - АДРЕС ПЕРВОГО БАЙТА ЗНАЧЕНИЯ ПЕРЕМЕННОЙ X.
это в 8-битных ВАСЮКАХ...

VARPTR(X) и VARSEG(X) - это в КуВАСЮКЕ

VarPtr(MyVar) - это в Visual ВАСЮКЕ...

В VB.NET ВАСЮКЕ тебе тоже надо?... там всё чуть сложнее... :mrgreen:
Code:
    Public Function VarPtr(ByVal o As Object) As Integer
        Dim gc As System.Runtime.InteropServices.GCHandle = GCHandle.Alloc(o, GCHandleType.Pinned)
        Dim pointer As Integer = gc.AddrOfPinnedObject.ToInt32
        gc.Free()
        Return pointer
    End Function

_________________
iLavr


15 Apr 2016 11:28
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22382
Location: Silicon Valley
Reply with quote
в ZX небыло такого вроде бы

_________________
:dj: https://mastodon.social/@Shaos


15 Apr 2016 12:28
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
в ZX небыло такого вроде бы

Должен быть. Я честно говоря, сам про ADDR(X) узнал, читая ваши здесь ранние "тёрки" на старте топика.
А куда делать USR(....)? А на ADDR(X)! Вот трюк с VARPTR(X) и VARSEG(X) в КуВАСЮКЕ я сам активно юзал.
Но в Спектрумах я не спец. Не пользовался ими.... Посмотрите, если не лень...

_________________
iLavr


15 Apr 2016 15:01
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22382
Location: Silicon Valley
Reply with quote
Ну на спектруме код не в переменной прятали, а в комментарии - соответственно адрес надо было вычислять самому...

_________________
:dj: https://mastodon.social/@Shaos


15 Apr 2016 16:14
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Ну на спектруме код не в переменной прятали, а в комментарии...

Ну тогда понятно, почему jdigreze тут так долго "удивлялся" этому трюку...

_________________
iLavr


15 Apr 2016 17:44
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Lavr wrote:
jdigreze wrote:
а вот функции определения адреса я не припоминаю.

Quote:
ADDR(X) - АДРЕС ПЕРВОГО БАЙТА ЗНАЧЕНИЯ ПЕРЕМЕННОЙ X.
это в 8-битных ВАСЮКАХ...

VARPTR(X) и VARSEG(X) - это в КуВАСЮКЕ

VarPtr(MyVar) - это в Visual ВАСЮКЕ...

В VB.NET ВАСЮКЕ тебе тоже надо?... там всё чуть сложнее... :mrgreen:
Code:
    Public Function VarPtr(ByVal o As Object) As Integer
        Dim gc As System.Runtime.InteropServices.GCHandle = GCHandle.Alloc(o, GCHandleType.Pinned)
        Dim pointer As Integer = gc.AddrOfPinnedObject.ToInt32
        gc.Free()
        Return pointer
    End Function
Про типовые васюки я уже в курсе, что есть функция, а вот в спектрумовском васюке такой функции я не припоминаю, хотя например работа с портами и памятью там имеется.


15 Apr 2016 18:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
jdigreze wrote:
в спектрумовском васюке такой функции я не припоминаю...

Ну должно быть что-то похожее. Может быть, через системные переменные можно добыть адрес,
тогда эта функция и не нужна... Вот, к примеру:
Quote:
5C4Dh (23629) 2 DEST Адрес переменной во время присваивания.

Это, случаем, не оно? (http://www.wikiznanie.ru/wikipedia/index.php/Sinclair_BASIC)

Я посто помню из опыта ломания игр у Sinclair BASIC было больше мест спрятать код, нежели один
этот REM. Там и "закрасить" можно было машинный код, чтоб он был невидим при листинге...

_________________
iLavr


15 Apr 2016 19:50
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Lavr wrote:
jdigreze wrote:
в спектрумовском васюке такой функции я не припоминаю...

Ну должно быть что-то похожее. Может быть, через системные переменные можно добыть адрес,
тогда эта функция и не нужна... Вот, к примеру:
Quote:
5C4Dh (23629) 2 DEST Адрес переменной во время присваивания.

Это, случаем, не оно? (http://www.wikiznanie.ru/wikipedia/index.php/Sinclair_BASIC)

Сейчас сложно сказать, столько лет этим не занимался...

Lavr wrote:
Я посто помню из опыта ломания игр у Sinclair BASIC было больше мест спрятать код, нежели один
этот REM. Там и "закрасить" можно было машинный код, чтоб он был невидим при листинге...
А это как раз совместно использовалось из-за возможности расцвечивать любой символ прямо при вводе с клавиатуры - спецсимволы 0x10-0x17.


16 Apr 2016 07:46
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22382
Location: Silicon Valley
Reply with quote
так тож во время присваивания, т.е. в процессе выполнения программы

а средств взять адрес произвольной переменной ПО ИМЕНИ - небыло...

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2016 15:44
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
так тож во время присваивания, т.е. в процессе выполнения программы...

Ну так если тебе нужен этот адрес - вот и ухватывай его во время присваивания, т.е. в процессе выполнения программы,
наверное это удобней, нежели искать адрес ручками?

Всё же Sinclair BASIC - это в некотором роде ОС, и под него писали больше программ, нежели под другие ВАСЮКИ.
И всякие хитрости под него были получше изучены, раз уж и ошибки его были вознесены в ранг фич для совместимости.

Мне просто копаться сейчас в этом древнем гамне неохота, есть поинтереснее вещи... :wink:


P.S. Не, ну если ты настаиваешь, могу выразить свое формальное согласие:"Да, вот такой он херовый
этот Sinclair BASIC, - нет в нём ф-ции ADDR(X), как в других 8-битных ВАСЮКАХ...
"
Но, как я и сказал, не из-за него я влез в этот топик, а ф-цию ADDR(X) неожиданно обнаружил, когда
здесь только началось обсуждение от топикстартера, он то как раз на Sinclair BASIC внимание не акцентировал.

_________________
iLavr


17 Apr 2016 05:05
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22382
Location: Silicon Valley
Reply with quote
И зачем мне его ухватывать в момент присвоения (т.е. в момент выполнения LET для этой конкретной перменной), если можно вычислить заранее от системной перемнной начала переменных бейсика VARS?...

_________________
:dj: https://mastodon.social/@Shaos


17 Apr 2016 06:55
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 53 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.