nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 05:27



Reply to topic  [ 57 posts ]  Go to page Previous  1, 2, 3, 4
Венец творенья 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Я и раньше интересовался этим вопросом и помню эту рекомендацию,
что стек обязательно надо установить: LXI SP,XXXX.

Но вот что конкретно происходит с SP по RESET - не встречал.
И сегодня потратил много времени в поиске, но безуспешно пока... :(

Ну вот, к примеру, типичная цитата про RESET:
Quote:
RESET – асинхронный выход сброса всех регистров, входящих в состав всех внутренних устройств БИС. Обычно он вырабатывается аппаратно и производится вначале при подаче питания на микропроцессорную систему, имеется также возможность подачи сигнала сброса оператором вручную.

_________________
iLavr


07 Apr 2012 08:39
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
HardWareMan wrote:
А М68К грузит PC и SP из первых двух двойных слов таблицы векторов. ;)

Хардыч, а в твоём Интелловском мануале по i8080 нет какой-либо конкретики о состоянии SP по RESET?

Есть.
Image
Стало быть, все протестированные VituZz'м ВМ80 работали правильно. ;)


07 Apr 2012 08:59
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Что ж - закрываем этот вопрос. Люблю ясность.

Image


07 Apr 2012 09:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Зачем ПЗУ? Вплоне бесПЗУшная работоспособная схема есть:
http://stor.altervista.org/z80/schema_2.htm
Запускаем проц и через ЛПТ сливаем ему прогу приема, а потом сливаем данные,
после подачи последнего байта клац тумблером и вперед (можно не тумблром а
портом, но тумблером нагляднее.

Image


Много раз я эту схему видел, но никак не было времени внимательно на итальянском
почитать... Но тут всё ж недавно сподобился...

Мне кажется, с Хардычем и b2m мы где-то здесь и программу-загрузчик обсуждали...
но я поиском не нашел.

А загрузчик довольно интересный, причем характерный для z80:
Code:
    LD HL,0
    LD DE,0
    LD BC,1000
    LDIR

То есть эти 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 всё же на этом месте работает очень эффективно!
И само программно-аппаратное решение очень симпатичное... :kruto:

_________________
iLavr


Last edited by Lavr on 16 Feb 2013 06:02, edited 1 time in total.



15 Feb 2013 17:44
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Lavr wrote:
Мы вроде как PUSH предполагали заюзать... но тогда автоматический цикл трудно себе
представить.

Зачем тебе цикл? Гони в порт 31 AL AH 21 XX XX E5 21 XX XX E5 ... 76 и будет тебе щастье (только не забывай, что загрузка задом наперёд). Байты E5 21 можно считать частью протокола :kruto:

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


16 Feb 2013 01:55
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Зачем тебе цикл? Гони в порт 31 AL AH 21 XX XX E5 21 XX XX E5 ... 76 и будет тебе щастье

Да я помню наше обсуждение, хотя и не нашел его.
Просто когда сначала загрузчик, а потом байты программы непрерывно -
это как бы более элегантно выглядит, нет?

И практически проще - к своим кодам приделал 11 байт заголовка с правильной
длиной в ВС и можно просто перенаправить бинарник в LPT.

В этом же случае бинарник надо предварительно чем-либо обработать,
или свою утилиту печати написать.
Я только из таких соображений поразмыслил...

Но есть другой вариант, как мне кажется: посредством этого метода
31 AL AH 21 XX XX E5 21 XX XX E5 ... 76
сформировать всего один бинарник - собственно локальный начальный загрузчик.
И первоначально "печатать" в плату именно его, а потом отдавать ему управление
и непрерывным массивом уже "печатать" свой бинарник по любым заданным адресам...


PS. В этом случае можно "печатать" загрузчику бинарники в формате типа rks, где указаны
адреса посадки и КС.

_________________
iLavr


16 Feb 2013 05:02
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Тогда вышеприведённую схему усложнять надо. Дешифрация портов (читать не только из ВВ55 надо, но и из LPT порта) как минимум. Ну и если загрузчик самостоятельно запускаться должен (чтобы сразу файл грузить), а не "нажать на сброс, переключить run", то тоже.

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


16 Feb 2013 05:49
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Тогда вышеприведённую схему усложнять надо. Дешифрация портов (читать не только из ВВ55 надо, но и из LPT порта) как минимум.

Знаешь, мне представляется, что вышеприведённую схему усложнять сильно не придется.
Но мне понравилась мысль Хардыча, что переключатель надо бы сделать программным...
По типу - запустил вручную, а отключил он себя сам.

По аналогии НП в "Специалистах" и др.

Хотя, конечно же, в варианте с z80 тут всё очень минималистски самодостаточно...


PS. Может быть буфер принтера и размещать временно по адресам порта?
Чтобы не множить сущностей?

_________________
iLavr


16 Feb 2013 05:56
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
Может быть буфер принтера и размещать временно по адресам порта?
Чтобы не множить сущностей?

Есть ещё один удобный момент в схемотехнике этой платы: /CS (/E) ОЗУ
намертво завешан на землю, а не на А15.

Поэтому автор чутка лукавит, что у него ОЗУ спроецировано на адреса 0...7FFFh.
ОЗУ у него и в верхних адресах "зеркалится".

Возможно, с буфером принтера удобно схемотехнически прицепиться к верхним адресам.

_________________
iLavr


16 Feb 2013 06:19
Profile
Junior

Joined: 15 Mar 2019 04:04
Posts: 1
Reply with quote
Post Re:
Lavr wrote:
HardWareMan wrote:
...А загрузчик довольно интересный, причем характерный для z80:
Code:
    LD HL,0
    LD DE,0
    LD BC,1000
    LDIR

То есть эти 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]" - работает.

Решение - что-то вроде:

Code:
   LD SP, 0
   LD L, 40h
   PUSH HL
   LD HL, 00C3h
   PUSH HL
   LD HL, 0B0EDh
   PUSH HL
   
   LD HL, 0
   LD DE, 4000h
   LD BC, END-19h

   JP 0FFFAh

START:

[[i]....Тут наш полезный и нужный код....[/i]]

END:


или более длинный, но более понятный вариант:

Code:
   LD HL, 0
   LD DE, 4000h
   LD BC, END-23h

   LD IX, FFF0h
   LD (IX+0), 0EDh
   LD (IX+1), 0B0h
   LD (IX+2), 0C3h
   LD (IX+3), 00h
   LD (IX+4), 40h
   JP (IX)
START:
[i]...[/i]
END:


LDIR пишем в озу и исполняем оттуда. Ну и схема у меня немного другая выходит, WAIT автоматом отрубается, поэтому сразу за LDIR-ом - джамп на первый адрес загруженной программы. И ещё там надо в коде или пару ORG-ов добавить, или отдельно с нужным смещением откомпилить, конечно же.


15 Mar 2019 05:07
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
С марта прошлого года сообщение ожидало одобрения :oops:

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


13 Dec 2020 10:26
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
С марта прошлого года сообщение ожидало одобрения :oops:

Во как!!! :roll:
Я за это время уже всё даже сделал! :rotate:
http://www.nedopc.org/forum/viewtopic.php?f=90&t=11197#p137107
http://www.nedopc.org/forum/viewtopic.php?p=136945#p136945

_________________
iLavr


14 Dec 2020 04:41
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 57 posts ]  Go to page Previous  1, 2, 3, 4

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.