nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 15 Oct 2018 05:24



Reply to topic  [ 24 posts ]  Go to page 1, 2  Next
ЗОДАЧА для 580ВМ80:) 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
ЗОДАЧА для 580ВМ80 :wink:

Я озадачился этой зодачей довольно давно, и со временем стал склоняться
к мысли, что совсем строго её не решить, но вдруг у кого-то есть иное мнение...
Собственно, сам вопрос возник, когда я читал статью в одном из номеров
журала "Радиолюбитель" - "Пишем перемещаемые программы".
В двух словах речь там шла о том, что программу для 580ВМ80 можно сделать
перемещаемой, если ввести в её структуру таблицу, по сути, "релокейшинов",
фактически как в ЕХЕ файлах ДОС, и при старте программы корректировать
адреса переходов.
Вот в связи с этим и сформировался вопрос:
если программа загружена, получает управление и при этом
- операционная система неизвестна;
- карта распределения памяти неизвестна;
- наличие стандартных функций или вызовов также неизвестно

существует ли возможность определить текущий адрес точки в памяти,
в которой программой получено управление?


На мой взгляд, для Z80 эту задачу решить можно благодаря относительным переходам, а для 580ВМ80 - я затруднился.


31 Jan 2011 06:10
Profile
Doomed

Joined: 26 May 2003 07:57
Posts: 634
Reply with quote
Post 
Единственная возможность получить содержимое PC - это достать его из стека после команды CALL. К сожалению, эта команда обращается только по фиксированному адресу и если неизвестно абсолютно ничего, то вряд-ли что получится (хотя в таком случае программа должна быть бессмысленной, ведь всё равно она ни вывести ничего не сможет, ни ввести). Однако если известно, что по какому-то адресу есть свободная память (память дисплея, например), то можно записать туда POP H / PCHL, и обратиться туда командой CALL.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


31 Jan 2011 08:19
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
программа должна быть бессмысленной

Программа не была бессмысленной - это был отладчик SID
от любой системы он хотел только ПП вывода на экран и
ввода с клавиатуры. Мог работать с кодами Z80 и i8080
в нужных мнемокодах, системные вызовы группировались в
нем в конце программы и могли корректироваться, в зависимости
от рабочей системы. Была у меня идея сделать его перемещаемым,
он ещё и написан был удачно - блочно, и называть его бессмысленным
было бы как раз бессмысленно и опрометчиво.

b2m wrote:
Однако если известно, что по какому-то адресу есть свободная память (память дисплея, например), то можно записать туда POP H / PCHL, и обратиться туда командой CALL.

А если поискать во всей памяти код С9 или вписать его где-то самому.
Память не обязана быть известной - можно считать и проверить ячейку
на модификацию - и так найти ОЗУ.
Вариантов на самом деле больше, чем кажется с разбегу, но окончательно
у меня решение не сложлось.


31 Jan 2011 08:44
Profile
Doomed

Joined: 26 May 2003 07:57
Posts: 634
Reply with quote
Post 
Lavr wrote:
А если поискать во всей памяти код С9 или вписать его где-то самому.

Поискать можно, только вот нету в ВМ80 относительного перехода, чтобы цикл организовать, да и что ты будешь делать с найденным адресом, как к нему обратишься :) А вписать я выше и советовал, только если использовать RET, то после команды CALL нужно больше команд использовать - dcx sp / dcx sp / pop h.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


31 Jan 2011 12:13
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Ну "есть много разного на свете, брат Горацио..."
В частности, в стеке можно выполнить какую-то программу,
загнав её через PUSH... и обратившись LXI H,0; DAD SP; PCHL
Я над этой темой много думал в разное время - не осилил.
Поэтому в очередной раз вспомнив, решил выложить здесь.
Вдруг тут кто умнее... так что у меня нет смысла спрашивать ответ.


31 Jan 2011 13:15
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16995
Location: Colorado
Reply with quote
Post 
перемщаемая программа - это уже было в Радио
однако загрузчик при этом должен сидеть в известных адресах
если ты и загрузчик хочешь сделать перемещаемым - то это наверное не полетит...

_________________
:eugeek: https://twitter.com/Shaos1973


31 Jan 2011 16:58
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
это наверное не полетит...

наверное - это не аргумент.
У меня всегда шага не хватает до полёта.
Это как в теории игр - все склоняются к мысли, что у шахмат ничейная матрица, но строго никто не доказал. :wink:


01 Feb 2011 12:58
Profile
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 405
Location: Украина
Reply with quote
Post 
Просканить все 64кб и найти свою сигнатуру - займет пару-тройку секунд ;)


02 Feb 2011 02:48
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
shoorick wrote:
Просканить все 64кб и найти свою сигнатуру - займет пару-тройку секунд ;)

При условии наличия относительного перехода. :3


02 Feb 2011 03:56
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
shoorick писал(а):
Quote:
Просканить все 64кб и найти свою сигнатуру - займет пару-тройку секунд

При условии наличия относительного перехода. :3

А свежая мысль у Шурика!!!
Сканер можно написать в стеке - там адреса известны и можно обойтись абсолютными переходами.
Lavr wrote:
В частности, в стеке можно выполнить какую-то программу,
загнав её через PUSH... и обратившись LXI H,0; DAD SP; PCHL


Last edited by Lavr on 02 Feb 2011 18:33, edited 1 time in total.



02 Feb 2011 04:30
Profile
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 405
Location: Украина
Reply with quote
Post 
HardWareMan wrote:
shoorick wrote:
Просканить все 64кб и найти свою сигнатуру - займет пару-тройку секунд ;)

При условии наличия относительного перехода. :3
а гдеш его взяць-то в ИК80? :roll:


02 Feb 2011 04:36
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Lavr wrote:
Сканер можно написать в стеке - там адреса известны и можно обойтись абсолютными переходами.

Логично, стек то к началу растет. После занесения туда сканера вершина будет как раз на начале кода, а при вызове PCHL - в [HL] этот самый адрес. Далее, сканим память и возвращаемся по известной точке входа в свою прожку (перед самой точкой входа сделать сигнатуру). Вполне осуществимо, если только в стек не пихать тонны кода. :3 И да, пихатель должен быть линейный. :3
shoorick wrote:
а гдеш его взяць-то в ИК80? :roll:

Именно, КЭП, именно...


02 Feb 2011 04:37
Profile
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 405
Location: Украина
Reply with quote
Post 
HardWareMan wrote:
shoorick wrote:
а гдеш его взяць-то в ИК80? :roll:

Именно, КЭП, именно...

дык, адреса ж в стеке известны, понятное дело, возврата по RET оттеда не будет :)


02 Feb 2011 05:05
Profile WWW
Doomed

Joined: 26 May 2003 07:57
Posts: 634
Reply with quote
Post 
Господа, а что это мы к стеку привязались? Где гарантия, что то случайное значение в регистре SP после запуска программы будет указывать на ОЗУ? Ведь в условии задачи сказано, что ничего не известно!

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


02 Feb 2011 05:21
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Господа, а что это мы к стеку привязались? Где гарантия, что то случайное значение в регистре SP после запуска программы будет указывать на ОЗУ? Ведь в условии задачи сказано, что ничего не известно!

Кто-то из классиков, кажется Ньютон, сказал:"Природа сложна, но не злонамеренна."
Смотрим в условие:
Quote:
если программа загружена, получает управление

ОС или тест-мониторная система программу как-то загружали, значит есть надежда, что стек выставлен вменяемо.
Конечно, если стек смотрит в ПЗУ или в отсутствие памяти - то всё бестолку. Но тогда это действительно дикое устройство, хотя... я такое реально как-то лицезрел.
Это был музыкальный автомобильный клаксон - 580ВМ80, ПЗУ два мощных транзистора и динамик. Блин - классика минимализма,
ни стека, а значит - нет CALL... только таблицы тонов, джампы и вывод звука по EI-DI.

PS. Ну что - добьем зодачку? А то у меня ещё одна затейливая есть... :wink:

PPS. Шурик кинул-таки незамутнённый взгляд на зодачу! А ведь я сам сто раз такое делал - в ИБМ чтоб не сажать резидент дважды, сканируешь ОЗУ на его сигнатуру. А вот вернуться от ИБМ к 580ВМ80 - не случилось.


02 Feb 2011 05:46
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 24 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 2 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.