Венец творенья

Микропроцессоры и микроконтроллеры от фирмы Zilog, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Я и раньше интересовался этим вопросом и помню эту рекомендацию,
что стек обязательно надо установить: LXI SP,XXXX.

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

Ну вот, к примеру, типичная цитата про RESET:
RESET – асинхронный выход сброса всех регистров, входящих в состав всех внутренних устройств БИС. Обычно он вырабатывается аппаратно и производится вначале при подаче питания на микропроцессорную систему, имеется также возможность подачи сигнала сброса оператором вручную.
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Lavr wrote:
HardWareMan wrote:А М68К грузит PC и SP из первых двух двойных слов таблицы векторов. ;)
Хардыч, а в твоём Интелловском мануале по i8080 нет какой-либо конкретики о состоянии SP по RESET?
Есть.
Image
Стало быть, все протестированные VituZz'м ВМ80 работали правильно. ;)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Что ж - закрываем этот вопрос. Люблю ясность.

Image
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

HardWareMan wrote:Зачем ПЗУ? Вплоне бесПЗУшная работоспособная схема есть:
http://stor.altervista.org/z80/schema_2.htm
Запускаем проц и через ЛПТ сливаем ему прогу приема, а потом сливаем данные,
после подачи последнего байта клац тумблером и вперед (можно не тумблром а
портом, но тумблером нагляднее.

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

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

А загрузчик довольно интересный, причем характерный для z80:

Code: Select all

    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:
Last edited by Lavr on 16 Feb 2013 06:02, edited 1 time in total.
iLavr
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Lavr wrote:Мы вроде как PUSH предполагали заюзать... но тогда автоматический цикл трудно себе
представить.
Зачем тебе цикл? Гони в порт 31 AL AH 21 XX XX E5 21 XX XX E5 ... 76 и будет тебе щастье (только не забывай, что загрузка задом наперёд). Байты E5 21 можно считать частью протокола :kruto:
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

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
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Post by b2m »

Тогда вышеприведённую схему усложнять надо. Дешифрация портов (читать не только из ВВ55 надо, но и из LPT порта) как минимум. Ну и если загрузчик самостоятельно запускаться должен (чтобы сразу файл грузить), а не "нажать на сброс, переключить run", то тоже.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

b2m wrote:Тогда вышеприведённую схему усложнять надо. Дешифрация портов (читать не только из ВВ55 надо, но и из LPT порта) как минимум.
Знаешь, мне представляется, что вышеприведённую схему усложнять сильно не придется.
Но мне понравилась мысль Хардыча, что переключатель надо бы сделать программным...
По типу - запустил вручную, а отключил он себя сам.

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

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


PS. Может быть буфер принтера и размещать временно по адресам порта?
Чтобы не множить сущностей?
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

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

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

Возможно, с буфером принтера удобно схемотехнически прицепиться к верхним адресам.
iLavr
kernelpanic
Junior
Posts: 1
Joined: 15 Mar 2019 04:04

Re:

Post by kernelpanic »

Lavr wrote:
HardWareMan wrote: ...А загрузчик довольно интересный, причем характерный для z80:

Code: Select all

    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: Select all

	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: Select all

	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-ов добавить, или отдельно с нужным смещением откомпилить, конечно же.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Венец творенья

Post by Shaos »

С марта прошлого года сообщение ожидало одобрения :oops:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Венец творенья

Post by Lavr »

Shaos wrote:С марта прошлого года сообщение ожидало одобрения :oops:
Во как!!! :roll:
Я за это время уже всё даже сделал! :rotate:
viewtopic.php?f=90&t=11197#p137107
viewtopic.php?p=136945#p136945
iLavr