Тандем Z80+DMA: RAM-диски без "окна", RAM-toRAM DMA и другое

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

Moderator: Shaos

Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Тандем Z80+DMA: RAM-диски без "окна", RAM-toRAM DMA и другое

Post by Mixa64 »

Вот сделал себе маленький комп. Основным толчком стало то, что на митинском радиорынке не смог пройти мимо бело-золотого красавца с маркировкой 80A-CPU MME. Вообще давно мысль была, что нужна подручная маленькая программируемая штуковина для удобной работы со всякими другими программируемыми микросхемами. Универсальная система на 8080/8085/Z80 (ну или даже на 1801ВМчто-то) тут подходит в самый раз, имея множество преимуществ по сравнению с вариантом взять AT*, написать прогу, запрограммировать его, вставить в макет и отлаживать непонятно что, то ли прогу контроллера, то ли алгоритм работы с остальной частью девайса. Кроме того, в процессе сборки маленького компа реализуется масса давних фетишных задумок, что дает кучу положительных эмоций. Посему толчок был получен и началась реализация. Далее расскажу, что туда запихнул, как и почему.
Контроллер ПДП. Потому что лет 20+ уже валяется купленный у барыг в Электроне (не ошибся?) на Сущевском Валу КР580ВТ57. К тому же с 37-м работал, с 57-м не работал. Потом лет 15 у меня валялся 8272A, он отлично вписывается идеологически в общую концепцию, особенно вместе с DMA. Потому что идеологическая концепция предусматривает написание и отладку программ на самой микроштуковине, и НГМД там очень даже кстати. Более того, дисковод очень хорошо диктует габариты и конструктив. Без извращений в деле фетишизма никак не обходится, поэтому задумываю изврат ¹1, пусть ПДП работает для пересылок память-память тоже. Как потом оказалось, что это вовсе и не изврат, но мне повезло, что на эту инфу я наткнулся уже после проектирования и обкатки решения, так что цепочка "извратная идея"->"схемотехническая реализация"->"отладка в железе" прошла без помех, что немаловажно для состояния протащиться от изврата по полной. 8) Вот. А если ПДП работает память-память, то сам собой напрашивается электронный диск. Для него у меня опять же лет 15 валяются XX4256, взять из этой кучки два маленьких DIP20 - и вот они 256K. В конце 80-х у меня был самодельный комп (тогда говорили микро-ЭВМ), на что похожий - сказать затрудняюсь, потому как не повторение было, хотя вариант основы не мой. Скажем так, доработка и развитие на базе мМС1204 (МПСС ¹5 1986 стр 65-69). Кроме контроллера там было 2 платы ОЗУ по 64К и плата интерфейса дисковода на 1818ВГ93, а в самом контроллере один канал на ВВ51 был извращенным образом переделан на интерфейс магнитофона. Как опять же потом оказалось, это не изврат, в МПСС встречал статью с описанием магнитофонного интерфейса на ВВ51 в синхронном режиме, но мой вариант был круче, потому что был полностью цифровой, безо всяких АГ-шек :kruto:
Та микро-ЭВМ была утеряна, о чем я иногда жалею, потму как почти свое детище, поэтому маленький комп в чем-то повторяет характеристики того компа, НГМД+192К электронного диска. На прошлой работе как-то выкидывали циску 4-тонник, от нее у меня скопилась кучка AMD-шных 020-х флешек, что есть тоже 256К, что естественным образом родило мысль флешку заюзать как постоянный электронный диск. От той же циски применил 54-й таймер, хотя есть кучка ВИ53-х, почему-то решил поставить этот 8254, хотя без разницы абсолютно в моем случае. 54 и 51 применил идентично как в вышеупомянутом контроллере мМС1204. А контроллер прерываний поставил 1818ВН19, коих парочку опять же лет N назад взял на тогда еще тушинском рынке за какой-то бесценок, просто из любопытства и от удивления, что ВН оказывается еще бывают и не 59. ВН19, как оказалось, идеально подходит к IM2 Z80.
К тому же я никогда не разрабатывал комп на Z80, повторение спектрумов не в счет, поэтому в этой разработке я задействовал все возможности проца (кроме NMI, которое можно было бы использоваь для контроля четности памяти, но это вышло бы за рамки минималистической концепции). RFSH, правда, самым лучшим образом заюзать не получилось, сделал банальное CAS-before-RAS по RFSH. И, наконец, изврат ¹2 это 176ИЕ12 от 5 вольт и 1 МГц в качестве перезапускаемого таймера выключения двигателя дисковода. Вот этого точно никогда не было. Молодцы новосибирцы, хорошую 176-ю серию делают.
Наружу вывел шину данных, три CS с перекрытием по 4 адреса, A0, A1, один DRQ/DACK и два прерывания. Ну и ресет. Заняты оказались все каналы INT и DMA.
В общем, CPU+DMA+64K RAM+FDC+256 FLASH disk+192 RAM disk+Int Controller+Timer+USART уместилось на плате размером с 3" дисковод.
При такой плотности двусторонняя разводка не получается, поэтому монтаж сделал проводом. Время потратил, зато земля сплошная, сигналы на осциллографе красивые, и снаружи смотрится прикольно, микросхемы и текстолит - а дорожек нет.
КПДП поставил не тот старый пластмассовый, хотя решение отладил на нем, а керамику новосибирской серии 1860, из соображений так красивше, потом 1860 это какая-то спецсерия, устойчивая к какому-то спецвоздействию, и вообще, Новосибирск хороший город и люди там хорошие.
Сейчас CP/M на машинке зашевелилась потихоньку.
Концепция программ - если ЦП нечего делать, он в HLT, а в движение его приводят прерывания. Благо вся аппаратная поддержка тому есть, ни одно внешнее устройство без прерываний не подключено. Даже mem-to-mem DMA генерит прерывание в конце передачи.
У меня Zaurus 760-й есть, думаю вывести нормально его RS232, будет маленький терминал к маленькому компу.
Last edited by Mixa64 on 04 Apr 2023 23:13, edited 2 times in total.
Freshman
Novelist
Posts: 39
Joined: 08 Dec 2008 14:08
Location: Finland

Post by Freshman »

Mixa64 wrote:А я тут себе сделал маленький комп.
А можно фотками этой красоты разжиться?
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Post by Mixa64 »

Freshman wrote:
Mixa64 wrote:А я тут себе сделал маленький комп.
А можно фотками этой красоты разжиться?
Фотки есть, только как их сюда запостить?
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mixa64 wrote:
Freshman wrote:
Mixa64 wrote:А я тут себе сделал маленький комп.
А можно фотками этой красоты разжиться?
Фотки есть, только как их сюда запостить?
Посылай мне - вывешу

P.S. А это другой ведь комп? Может топик отпочковать чтобы народ не путать?
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Post by Mixa64 »

Image

Image

Image
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mixa64 wrote:Image
А выглядит прикольно :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Ух ты, класс! :kruto:
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Post by Vasil Ivanov »

Mixa64 wrote:
Freshman wrote:
Mixa64 wrote:А я тут себе сделал маленький комп.
А можно фотками этой красоты разжиться?
Фотки есть, только как их сюда запостить?
А схему можно глянуть ?. Интересует схема подключения 8272A (с обвязкой). В инете нигде ее (схему) не нашел.
Vasil Ivanov
vasil-i@yandex.ru
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Post by Mixa64 »

Vasil Ivanov wrote:А схему можно глянуть ?. Интересует схема подключения 8272A (с обвязкой). В инете нигде ее (схему) не нашел.
Схема в пикаде :) и 22V10 у меня, поэтому схема простая, 8272-22V10-разъем. Ну не считая инверторов и таймера двигателя.

Вот в этой книжке на стр 128 есть вариант включения на рассыпухе
http://books.google.ru/books?id=DKajtHfqoRkC

А так, если что конкретное, спрашивайте, отвечу, пока только что сделал и в теме еще. Чип со странностями, пока сам не увидишь, как работает, не проникнешься пониманием.
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Post by Mixa64 »

Mixa64 wrote: Вот в этой книжке на стр 128 есть вариант включения на рассыпухе
http://books.google.ru/books?id=DKajtHfqoRkC
Опа, прошу пардону, не совсем то. Тут вариант с интегрированным сепаратором.
Вот здесь смотрите
http://www.hartetechnologies.com/manual ... sk%201.pdf
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Красота. Других слов нет :)
Extreme Entertainment
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

Песня!
User avatar
Error404
Maniac
Posts: 269
Joined: 05 Oct 2006 04:45
Location: Moscow

Post by Error404 »

Проект планируете документировать и выложить на обозрение?
Интересно посмотреть как что решено - как в железе, так и программном коде.
Всем добра!
Tim0xA
Writer
Posts: 11
Joined: 05 Oct 2007 08:09
Location: 91.124.79.227

Post by Tim0xA »

Зачётно!
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Post by Mixa64 »

Error404 wrote:Проект планируете документировать и выложить на обозрение?
Интересно посмотреть как что решено - как в железе, так и программном коде.
Скорее да, чем нет. :) Эта штуковина задумывалась как единичный экземпляр, достойный постамент для достойных микросхем, чтоб не валялись просто так без пользы. Плюс фишки разные, из мира идей в мир железа, опять же, чтоб в голове не валялись без пользы. Поэтому много внимания уделил некоей эстетике, которая весьма субъективна. Полностью документировать смысла нет, потому как вещь в себе, хотя до хорошо расширяемой системы пара простых шагов. Но эти шаги во-первых добавят корпусов, поэтому такого размера платы мало, во-вторых будет ненужный соблазн модернизации.

Да, кнопку сброса поначалу хотел не делать, потом оказалось - ЭТО ГЛАВНАЯ КНОПКА. Во, быстро те времена забываются.

Выложу блок-схему, а для характерных моментов куски принципиальной.

Программные решения, хм... CP/M 2.2 галимый :)
Обычный BIOS с обычным blocking-deblocking'ом. Единственная фишка - отсутствие циклов с опросами флагов готовности ввода-вывода, все по прерываниям. Ну может еще кольцевые буферы на ввод и вывод консоли, их пришлось сделать, чтобы RTS/CTS flow control реализовался, у ВВ51 нет внутренних буферов.

Вывел две лампочки активности, одна с #HALT CPU (у него NMI лишь не задействован, все остальное подключено), другая с AEN DMA. По ним видны вычислительная активность процессора и обмен по ПДП. А можно еще вместо лампочек стрелочный прибор прицепить, будет показывать загрузку CPU. Надо будет где-нибудь это потом реализовать.

Общий подход к программированию такой. Процессор либо знает, что ему делать и делает это, либо для продолжения ему нужно внешнее событие и он ждет этого события. Событие это прерывание. В ожидании события проц уходит в HALT. Перед уходом туда в битовом поле регистраций он взводит требование, по какому событию он выйдет из ожидания.
Обработчик прерывания взводит семафор в отдельном битовом поле.
Если по прерыванию из HALT регистрация и семафор совпадают, то возвращаемся из HALT, иначе - ждем дальше. Для работы с семафорами у Z80 есть прекрасные атомарные команды set-reset bit. При этом не нужно делать DI/EI как у 8080.

Например, фрагмент обмена с контроллером дисковода

Code: Select all

fdcop:
	ld	hl, ISEM		; База битовых полей, HL->ISEM
	res	INTFDCN, (hl)	; Очистить семафор
	inc	hl			; HL-> IREG
	ld	(hl), FDCSEM	; Регистрация события

	ld	c, FDCD		; адрес регистра данных FDC
	call	fdccmd		; программирование контроллера
	call	EVENTS		; ждать события
 .... ну и т.д., здесь команда FDC выполнена

ISEM		.db	0
IREG		.db	0

Обработчик прерывания от FDC:

Code: Select all

INTFDC:
INTFDCN	.equ	6

FDCSEM		.equ	1<<INTFDCN
		exx
		LD	HL,ISEM
		set	INTFDCN, (hl)
		exx
		ei
		ret
То, где обычно находится процессор:

Code: Select all

EVENTS:
		PUSH	HL
		DI
; На случай, если событие уже произошло и ждать не нужно
		LD	HL,(ISEM)	; L событие, H регистрация
		LD 	A, L
		AND	H		; Совпадает?
		JR	NZ, EVDONE
ELOOP:
		EI
		HALT			; Ждем чего-нибудь
		DI
		LD	A,(ISEM)	; Событие
		AND	H		; Совпадает с регистрацией?
		JR	Z,ELOOP	; Нет - ждем еще
EVDONE:
		EI
		POP	HL
		RET