|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я и раньше интересовался этим вопросом и помню эту рекомендацию,
что стек обязательно надо установить: LXI SP,XXXX.
Но вот что конкретно происходит с SP по RESET - не встречал.
И сегодня потратил много времени в поиске, но безуспешно пока...
Ну вот, к примеру, типичная цитата про RESET:
_________________ iLavr
|
07 Apr 2012 08:39 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Есть.
Стало быть, все протестированные VituZz'м ВМ80 работали правильно.
|
07 Apr 2012 08:59 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Что ж - закрываем этот вопрос. Люблю ясность.
|
07 Apr 2012 09:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Много раз я эту схему видел, но никак не было времени внимательно на итальянском
почитать... Но тут всё ж недавно сподобился...
Мне кажется, с Хардычем и b2m мы где-то здесь и программу-загрузчик обсуждали...
но я поиском не нашел.
А загрузчик довольно интересный, причем характерный для z80:
То есть эти 11 байт: 21 00 00 11 00 00 01 E8 03 ED B0
мы подсовываем процессору как бы вне зависимости от выставляемых им адресов,
загружаются рег.пары HL, DE, BC и инструкция LDIR по сути начинает прием и загрузку
байтов из буфера принтера в ОЗУ этой простенькой системы в собственном цикле...
Завершать там всё же советуют через HLT, потом при нажатом RESET перебросить тумблер,
чтобы проц. мог читать из своего ОЗУ, и отпустив сброс, пускаем проц в работу по загруженной
программе с 0000Н.
Сразу указывают там ограничения, что извне через ЛПТ можно подкидывать
процу опкоды только линейно исполняемой программы.
Так что в принципе тут с кодами именно загрузчика и не пофантазируешь сильно.
LDIR - он сам себе цикл получается, с автоматическими инкрементами указателей
и декрементом счетчика...
А вот если представить на месте z80 - К580ВМ80, схема не станет аппаратно сложнее,
но вот код загрузчика вопросы вызывает...
Впрочем и для z80 разнообразие загрузчиков представимо с трудом...
Мы вроде как PUSH предполагали заюзать... но тогда автоматический цикл трудно себе
представить. LDIR всё же на этом месте работает очень эффективно!
И само программно-аппаратное решение очень симпатичное...
_________________ iLavr
Last edited by Lavr on 16 Feb 2013 06:02, edited 1 time in total.
|
15 Feb 2013 17:44 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Зачем тебе цикл? Гони в порт 31 AL AH 21 XX XX E5 21 XX XX E5 ... 76 и будет тебе щастье (только не забывай, что загрузка задом наперёд). Байты E5 21 можно считать частью протокола
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
16 Feb 2013 01:55 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да я помню наше обсуждение, хотя и не нашел его.
Просто когда сначала загрузчик, а потом байты программы непрерывно -
это как бы более элегантно выглядит, нет?
И практически проще - к своим кодам приделал 11 байт заголовка с правильной
длиной в ВС и можно просто перенаправить бинарник в LPT.
В этом же случае бинарник надо предварительно чем-либо обработать,
или свою утилиту печати написать.
Я только из таких соображений поразмыслил...
Но есть другой вариант, как мне кажется: посредством этого метода
31 AL AH 21 XX XX E5 21 XX XX E5 ... 76
сформировать всего один бинарник - собственно локальный начальный загрузчик.
И первоначально " печатать" в плату именно его, а потом отдавать ему управление
и непрерывным массивом уже " печатать" свой бинарник по любым заданным адресам...
PS. В этом случае можно "печатать" загрузчику бинарники в формате типа rks, где указаны адреса посадки и КС.
_________________ iLavr
|
16 Feb 2013 05:02 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
Тогда вышеприведённую схему усложнять надо. Дешифрация портов (читать не только из ВВ55 надо, но и из LPT порта) как минимум. Ну и если загрузчик самостоятельно запускаться должен (чтобы сразу файл грузить), а не "нажать на сброс, переключить run", то тоже.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
16 Feb 2013 05:49 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Знаешь, мне представляется, что вышеприведённую схему усложнять сильно не придется.
Но мне понравилась мысль Хардыча, что переключатель надо бы сделать программным...
По типу - запустил вручную, а отключил он себя сам.
По аналогии НП в " Специалистах" и др.
Хотя, конечно же, в варианте с z80 тут всё очень минималистски самодостаточно...
PS. Может быть буфер принтера и размещать временно по адресам порта? Чтобы не множить сущностей?
_________________ iLavr
|
16 Feb 2013 05:56 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Есть ещё один удобный момент в схемотехнике этой платы: /CS ( /E) ОЗУ
намертво завешан на землю, а не на А15.
Поэтому автор чутка лукавит, что у него ОЗУ спроецировано на адреса 0...7FFFh.
ОЗУ у него и в верхних адресах "зеркалится".
Возможно, с буфером принтера удобно схемотехнически прицепиться к верхним адресам.
_________________ iLavr
|
16 Feb 2013 06:19 |
|
|
kernelpanic
Junior
Joined: 15 Mar 2019 04:04 Posts: 1
|
| | | | Lavr wrote: | | | | HardWareMan wrote: ...А загрузчик довольно интересный, причем характерный для z80: То есть эти 11 байт: 21 00 00 11 00 00 01 E8 03 ED B0мы подсовываем процессору как бы вне зависимости от выставляемых им адресов, загружаются рег.пары HL, DE, BC и инструкция LDIR по сути начинает прием и загрузку байтов из буфера принтера в ОЗУ этой простенькой системы в собственном цикле... Завершать там всё же советуют через HLT, потом при нажатом RESET перебросить тумблер, чтобы проц. мог читать из своего ОЗУ, и отпустив сброс, пускаем проц в работу по загруженной программе с 0000Н. | | | | |
| | | | |
Я извиняюсь за некропостинг, но - не взлетит. Во всяком случае, у меня не взлетело. Глянул в симуляции пошагово - вроде как проц после каждого переданного байта лезет в память заново перечитывать команду LDIR. Если слать " ED B0 [байт1] ED B0 [байт2] .... ED B0 [байт n]" - работает. Решение - что-то вроде: или более длинный, но более понятный вариант: LDIR пишем в озу и исполняем оттуда. Ну и схема у меня немного другая выходит, WAIT автоматом отрубается, поэтому сразу за LDIR-ом - джамп на первый адрес загруженной программы. И ещё там надо в коде или пару ORG-ов добавить, или отдельно с нужным смещением откомпилить, конечно же.
|
15 Mar 2019 05:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22589 Location: Silicon Valley
|
С марта прошлого года сообщение ожидало одобрения
|
13 Dec 2020 10:26 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
_________________ iLavr
|
14 Dec 2020 04:41 |
|
|
Who is online |
Users browsing this forum: No registered users and 24 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
|
|