|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
danchandoo
Fanat
Joined: 24 Sep 2007 12:15 Posts: 63 Location: Украина
|
По делу: собрал некое устройство для взаимодействия с LPT портом, 3 защелки, буфер, дешифратор (можно до 8-ми защелок). В общем позволяет передать данные с порта в любую из защелок. Хочу спросить, выводы GND LPT порта соеденять с землей самого устройства, или нет? Само устройство питается от блока питания компа, через molex, как и все мои поделки.
Не по делу: из философии программирования.
Это не плохо. Нет. Это просто необходимо. Представьте себе инженера, который прежде чем строить мост, проверяет все используемые при этом законы физики и их следствия, проверяет достоверность опытов, которыми они подтверждаются, проверяет использованые физиками математические теоремы, проделывает заново весь научный путь за 400 и более лет... Сколько на это уцдет времени? Когда он наконец сможет начать проектировать мост? Или ему еще прейдется разобраться с принципами работы компьютера на котором выполняются расчеты. Вдруг там кроется ошибка...
Для пущего пафоса приведу себе в поддержку еще и Дейкстру, который говорил, что чем далее программист отдален от особенностей работы конкретной платформы тем лучше. Тем эфективнее становится отношение затраченная работа/результат.
Полагаться на компилятор можно и нужно, и чем дальше тем чаще.
П. С. Сам я при этом люблю как раз ковыряться в недрах системы, знать как все устроенно в деталях, без этого я испытываю дискомфорт.
|
27 Dec 2009 14:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
|
27 Dec 2009 17:24 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А подробнее можно? Как мы "сливаем ему прогу приема"?
У него ПЗУ нет... или лэтч стоИт по адресу 0000Н и фактически мы должны
через ЛПТ имитировать работу ПЗУ, подтормаживая z80, ибо по ЛПТ
иначе не успеем...
Так чтоль?
PS. Открыл картинку, чтобы было понятно - о чём мы...
Last edited by Lavr on 06 Apr 2012 12:42, edited 1 time in total.
|
05 Apr 2012 13:05 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Ну там же на схеме все видно. Естественно тормозим сигналом WAIT. Здесь имитация ПЗУ, но очень хитрая. Так как текущий адрес мы не знаем, то предполагается, что к порту мы подключаем его сразу после ресета. Потом, мы просто подаем заготовленную последовательность команд, поведение которых предсказуемо. Например, если ПЗУ с 0 по $7FFF, а ОЗУ сверху, то вполне мы можем подать последовательность команд MVI/STA. Это получается 1 полезный байт на 5 байт ПЗУ. Если применить LXI H/SHLD, то получим 2 байта на 6 байт ПЗУ, что эффективнее. Т.е., в линейном пространстве "ПЗУ" объемом 32Кбайта мы можем подать 32768/6=5461,33 последовательности и еще остается 32768-(5461*6)=32768-32766=2 байта. Этого не хватает для джампа, но он и не нужен, если ОЗУ начинается с 8000. Если ОЗУ с другого адреса, то мы можем пожертвовать 1 блоком и запихать нормальный джамп. При этом, 5460 последовательностей перенесут 5460*2=10920 байт. Не кисло, да? Ну а если сделать виртуальный цикл: MVI/STA/JMP, то используя всего 8 виртуальных байт можем переслать сколь угодно большое количество полезных байт данных в ОЗУ. После посылки последнего байта просто меняем адрес в джампе с 0000 (на цикл) на начало загруженной программы. Так достаточно подробно?
|
05 Apr 2012 19:55 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вполне.. захотелось попробовать...
Довольно оригинальное решение!
_________________ iLavr
|
06 Apr 2012 09:47 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 870
|
А если применить LXI H/PUSH H, то 2 байта на 4 байта ПЗУ. Только запись будет задом наперёд, но это не проблема.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
06 Apr 2012 10:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
И я вот ещё подумал, что текущий адрес нам и вовсе не нужен. Здесь же Z80,
и подпрограмма-загрузчик небольшая - значит вполне хватит и диапазона
относительной адресации на цикл всей загрузки в ОЗУ.
А потом действительно подставляем абсолютный переход по нужному
адресу в ОЗУ. Его-то мы точно знаем.
_________________ iLavr
|
06 Apr 2012 11:11 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Но при этом нужно будет сделать LXI SP,XXXX, а это еще 3 байта, но эффективность цикла все равно выше, согласен.
Это вариант, но все никак не могу отвыкнуть от мышления аля ВМ80. :3
|
06 Apr 2012 21:57 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А вот это вопрос интересный... и обычно замыливается.
Давайте выясним.
Всегда пишут, что стек надо установить: LXI SP,XXXX.
Но куда-то же он по RESET всё-таки сам устанавливается?
Мы знаем, что и таймер 580ВИ53 по скромному умолчанию в известный
режим устанавливается, хотя справочники этого не обещают.
Я не имел возможности проверить, как устанавливается SP, хотя это весьма
легко проверить при старте процессора:
но мы обычно получаем управление, когда стек уже установлен ОС.
На " Специалисте" это, в принципе, легко проверить, введя с 0000H эту программу,
и отключив перед RESET-ом цепи переброса ПЗУ в адрес 0000H.
" Специалист" не портит содержимое ОЗУ при RESET-е.
Но у меня есть предположение, что по RESET-у SP всё же сбрасывается в 0000H.
И значит верхняя ячейка стека по сбросу -> 0FFFFH.
Если у нас в верхних адресах - системное ПЗУ, стек работать не будет.
А если там ОЗУ, как в обсуждаемом варианте, то стек от 0FFFFH будет расти вниз,
и ничего необычного не произойдёт.
Или всё-таки в SP по RESET-у какие-то случайные значения?
Кто-нибуть знает точно или есть какие-либо ссылки на достоверные источники?
_________________ iLavr
|
07 Apr 2012 04:51 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я не встречал этого явно для i8080, но делаю предположение по аналогии. Так, в частности, в MCS-48, который делали явно по мотивам i8080 и i8085, урезая последние, и расширяя периферию на кристалле, так вот для MCS-48 указывается явно:
Да и во многих других МП по сбросу SP устанавливается в определённое значение.
_________________ iLavr
|
07 Apr 2012 06:12 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
А М68К грузит PC и SP из первых двух двойных слов таблицы векторов.
|
07 Apr 2012 06:47 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Хардыч, а в твоём Интелловском мануале по i8080 нет какой-либо конкретики о состоянии SP по RESET?
_________________ iLavr
|
07 Apr 2012 07:16 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Попробовал на "железном" ВМ80 с пошаговым устройством. Похоже, что SP не сбрасывается. У меня, по крайней мере, пошаговое устройство показывает после включения так:
0000 C9; команда RET должна в следующем цикле загрузить PC содержимым SP
800A FF; здесь ничего не подключено, ШД притянута к +.
После нажатия сброса:
0000 C9
800B FF
После следующего нажатия сброса:
0000 C9
800C FF
Если выключить-включить питание, то после RET адрес будет уже другой, но последующие нажатия сброса всё также увеличивают его значения.
Вот так вот, вуаля. Может, я что-то неправильно делаю?
|
07 Apr 2012 08:08 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
На правду похоже... то есть первоначально стек сам установился на адрес 800AН,
в остальные попытки после RESET, SP просто не менялся - поэтому сдвиг вверх по RET.
Странно, что на один адрес...
А по включению питания - у тебя ПЗУ в начальном адресе = RET?
_________________ iLavr
|
07 Apr 2012 08:18 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Я подставил эмулятор ПЗУ с одной только этой командой.
Перепробовал несколько разных процессоров, работают аналогично.
Last edited by VituZz on 07 Apr 2012 08:44, edited 1 time in total.
|
07 Apr 2012 08:27 |
|
|
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
|
|