Клавиатура для zx spectrum своими руками

Добавил пользователь Евгений Кузнецов
Обновлено: 18.09.2024

В процессе модернизации своего ZX-Spectrum каждый постепенно приходит к тому, что у него перестают работать некоторые кнопки на стандартной клавиатуре, это может быть вызвано различными факторами. Например, перетерлись дорожки пленочной клавиатуры в местах стыковки её с платой или появились микротрещины на пленке самой клавиатуры.

Да и сама по себе ZX клавиатура весьма неудобна, и лучше бы её заменить на более современную, благо теперь вы можете совершенно без труда это сделать.

В поисках по интернету я находил много вариантов данного решения, но везде была куча обвязки у микроконтроллеров, да и сами микроконтроллеры были такими, которые либо трудно достать, либо они достаточно дорогие.

Вы уже наверное заметили моё пристрастие к МК Atmega 8 ? 🙂 Собственно на нем бы и хотелось всё это реализовать с минимальной обвязкой, а еще лучше совсем без неё.

В интернете я наткнулся на очень интересную реализацию данного решения, собственно вот здесь

покопавшись в архивах с прошивками я нашел прошивку под Atmega8, но, она почему-то не заработала… 🙁

Долго, очень долго я пытался её запустить, но ничего не получалось, при этом под Atmega48 и 168 всё было хорошо (по словам тех кто их подключал).

В итоге, я решил дизассемблировать прошивку от Atmega8 и Atmega168, порывшись в даташитах, я обнаружил, что в Atmega8 перепутаны некоторые порты (видимо прошивка делалась до кучи и не проверялась), так же для регистра TIFR пришлось переписать часть кода, т.к. его номер 0x58 и он недоступен для команд sbis и cbis. Ковыряясь дальше, я обнаружил, что на одном из входов шины адреса не был включен PullUp из-за чего в приведенной схеме автору пришлось поставить подтягивающие резисторы на все адресные пины. Проанализировав схему, я убрал подтягивающие резисторы с CLK и DATA выходов, т.к. они есть в самой клавиатуре (по заверению производителей). Так же убрал светодиод, т.к. он всё-равно внутри и некому им любоваться 🙂 Подправил работу дополнительных кнопок.

В итоге, прошивка заработала с кварцем 24МГц, причем очень даже отлично! Лучше чем родная клавиатура!

PS: так же я удалил из прошивки работу с клавиатурными скриптами, они мне не нужны, да и вообще мало кому нужны, это позволило еще больше ускорить реакцию на нажатия клавиш. В версии 2.0 удалось избавиться от самопроизвольных нажатий на кнопки BTN1, BTN2 при инициализации контроллера.

Во общем, теперь собственно о реализации.

61 thoughts to “ZX-Spectrum PS/2 Keyboard”

Здравствуйте. RDFE это куда подключается?

К порту клавиатуры, если он разведен, если нет, то сделать самостоятельно, по схеме из практически любого клона ZX

У меня схема пентагон 128 от.2014 года, брал плату у Tetroid. Там на общей гребёнке есть контакт KEY SELECT, прокурив схему, пришел к выводу, что это оно. Подключил. Не работает. Делал на arduino nano с 328 мегой на борту, кварц 16 Мгц. Не работает. Клавиатура моргает всеми светодиодами и тишина.

К сожалению, я не являюсь автором данной прошивки, но беглый просмотр кода говорит, что обработка шины ведется в INT0_Handler, т.е. с порта D читаются биты адреса + 1 бит адреса берется с порта C, получив адрес, из таблицы берется значение и шлется в шину данных (порт B).
Так как у вас клавиши не работают совсем (даже нет мусора), то здесь возможны 2 проблемы
1) атмега не успевает считать/записать данные на шину и требуется задействовать WAIT (можно повесить на B.5 и поместить дерганье этого сигнала в INT0_Handler)
2) сама атмега тормозит с кристаллом 24МГц, попробуйте заменить на другую, возможно проблема именно в чипе.

Подумав еще немножко, могу сказать следующее

1. Раз кнопки F11, F12… работают, значит опрос самой клавиатуры ps/2 происходит нормально и аппаратные прерывания от ZX не забивают таймер.
2. Раз другие кнопки не работают совсем, значит аппаратные прерывания, хоть и работают, но не успевают выставить нужный бит на порту вывода или вообще переключиться в режим вывода, а, возможно, и не срабатывает считывание по /RDFE.

INT0_Handler:
in YL,PinD ; PinD -> YL получаем данные с шины адреса
sbic PinC,0x03 ; if (PinC.3=0) skip next line (IF KA10=0)
ori YL,0x04 ; YL or 4 (1->YL.2) добавляем недостающий бит с порта C

; [Y] -> r20 // берем данные из таблицы и шлем в порт B
ldd r20,Y+0x00
out PortB,r20 ; r20 -> PortB

LOOP0: // держим шину данных пока /RDFE=0
sbis PinD,0x02 ;if PinD.2=1 skip rjmp
rjmp LOOP0

// выставляем единицы на порту B (на шине данных все единицы)
out PortB,CONSTFF ; 0xFF -> PortB
reti

Если по коду, то в YL мы получили состояние шины адреса для опроса клавиатуры, затем, из таблицы, подготовленной в таймере, получили значение для отправки в шину данных в регистр r20, который отправляем в порт B и ждем пока /RDFE не станет 0.
Вот, где-то в этом промежутке отправки данных и выставления единиц на шине данных может быть проблема, но, чтобы понять более конкретно, нужно проверить на конкретном примере.
К сожалению, у меня турбированного варианта нет, поэтому я оставляю это для тех у кого есть такая возможность.

Еще, можно попробовать
// set INT0
ldi r18,0x0A ;falling edge
поменять на rising edge, но, не знаю, поможет это или нет
поменять нужно на
ldi r18,0x0F ;int0/1 rising edge

PS: если будут успехи, сообщите, пожалуйста.

Увы, не помогло. Видно Атмега8 не успевает обрабатывать сигнал на такой скорости. Сейчас жду Атмегу48, попробую по этой же упрощённой схеме залить для неё прошивку и проверить, успеет ли она.


ZX Spectrum (Ленинград) — вперед в прошлое! (часть 2). Узел чтения с магнитофона, клавиатура PS/2

Как я говорил в предыдущей статье, я узел чтения с магнитофона буду делать на 561ЛН2, а не на УД6 и СА3. Во-первых у меня нет таких микросхем, да и на мой взгляд проще и говорят надежнее использовать ЛН2.

Собственно вот схема:


Собрал эту схему используя на плате макетное поле. Резисторы и конденсатор использовал SMD 0805 для уменьшения габаритов. В итоге вот что получилось:


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


Практически ничего в схеме не менял. /BTN1 и /BTN2 не использовал. Сигнал /RDFE получал следующим образом:


Всю информацию можно скачать по ссылке: Схема, прошивка, описание

Устройство собирал на макетной плате. Вот что получилось:

Распиновка разъемов (делаю для себя что-б не забыть, может кому и пригодится, буквы с макетной платы):

В следующей статье опишу расширение ОЗУ до 128 кБ и установку музыкального сопроцессора.




Работал себе монитор исправно (см. запись о покупке Монитор Электроника 32 ВТЦ 202), но со временем стал включаться всё дольше и дольше, от полминуты до четырёх, даже светодиод питания не сразу загорался. Потом умер.






Установка эмулятора микрокомпьютера ZX SPECTRUM. Грузить Шindows или юзать wine больше не нужно! Самый лучший эмулятор Спекка есть и под Linux!



Прикупил по случаю кончины своей расширенной клавиатуры и избавления от другой, которую подключить не осилил, вот такое чудо без корпуса.


Думаю завтра мне предстоит проверить несколько десятков аудиокассет с играми. А это опять крутить подстроечный винт головки моего кассетного магнитофона Легенда М-404. Много крутить, вдумчиво, туда и обратно, как хоббит!



Третьего дня читаю один форум, и нахожу упоминание вашего покорного слуги и репост отрывка из написанной мною накануне записи. Не успел написать, а уже цитируют, так сказать. Удивился правда, что выбрали именно эту запись про монитор, а не про голубенький 48й, где больше автобиографической и исторической информации, видимо из-за старого фото в первой.


Случилась у меня переписка с саппортом авито, и от их позиции неслабо пригорело. Решил поделиться её с общественностью. Не будьте наивными и соблюдайте осторожность в этом дивном заповеднике! :


При ремонте джойстика помимо всего прочего выяснилось, что рассыпались почти все пеньки, в которые закручивались стягивающие корпус саморезы. Решил заняться восстановлением.


Чтобы полюбоваться на палитру и пиксели Спектрума можно приведённой ниже командой вызвать продолжительный цветной глюк, мусор на дисплее, обратившись по адресу внутри экранной области:



Обстоятельства вынудили меня купить ЭЛТ RGB монитор для подключения Спектрумов вроде Ленинграда. Потому, что PalCoder не понимает их нестандартный сигнал синхронизации и(или) уровень черного. Хотел купить телевизор Рубин за 1000р, но увидел объявление сабжевого монитора за 300 рублей и решил рискнуть.



ПРЕДЫСТОРИЯ


Оказалось 48й звук не пропал, а был случайно выключен нажатием на Numlock. Все эти долбанные горячие клавиши для редкоиспользуемых функций крайне сложно не забыть, что и случилось. Спасибо Жене7 за напоминание!


Вот уже некоторео время, как у меня возникла проблема со звуком у ZX Evolution revision C. Звук и музыка в играх либо воспроизводится не по всем каналам (AY) либо часто не воспроизводится вовсе (Beeper). И идёт только из одной колонки.

X17 и X18 левый канал едва слышен, правый слышно гораздо громче. Это я на Dizzy2 проверял где 48я музыка.. Но в Nosferatu где тоже биппер - вообще ничего не слышно..


BREAKING NEWS: АТАКА КЛОНОВ!


Настало время удивительной истории. Аудио кассеты на фото содержат игры для ZX-Spectrum. Я купил их на Авито по почте у продавца из Сургута. 1200 за всё с доставкой. Дошли за 15 дней. А он их (внимание) купил у нас же в Санкт-Петербурге. Такой-вот круговорот кассет в природе. Кассеты возвращаются.
Стартанул выборочные три кассеты - звук несущей громкий и чётко слышимый. Думаю игры будут грузиться без ошибок. Нужно ещё спаять переходник, и можно будет грузить игры как во время оно. Как спаяю, дополню запись фото.



Пишу эту запись себе как памятку. В который уже раз перестали работать клавиши, на этот раз 12345. Как я и думал, окислились контакты на пленке. те, что входят в синие разъёмы. 3-4 дорожки были просто коричневые от окисла.


Как оказалось, ответ на вопрос "А почему у него два гнезда под ПЗУ, а ПЗУ одно?" прост.

Кажется пора бы уже спать ложиться. А то мне ещё винды переставлять за пирог™, а я ещё не ложился) Всю ночь бы занят интересными делами)

Три игры-симулятора для Спектрума про подводные лодки:

Для хранения файлов помимо fdd 5.25" я пользуюсь SDcard адаптером. Но в iS-DOS он не поддерживается, и для хранения данных помимо дискет, там нужно использовать жесткий диск. Я решил вместо железного винчестера использовать SDcard`у через SD-IDE адаптер, который позволяет подключать SDcard`у через IDE разъём как обычный винчестер.

В этой записи я буду собирать информацию и записывать свою настройку "диска" под iS-DOS и TR-DOS.

Довольно долгое время мозговой штурм не приносил плодов, и я сидел без невиртуального диска на спекке. Не мог подключить к ZXEvo FDD 5.25 MITSUMI model D509V3 NEWTRONICS.

Безуспешно перепробовал все мыслимые варианты и поменял несколько заведомо исправных дисководов и шлейфов. Осталось только что-то сделать с джамперами. Эврика!



За три года профессиональной деятельности в этой сфере через мои руки прошло огромное количество клонов Спектрума. Приносили в ремонт и другие компьютеры, но всё же Спектрумов было подавляющее большинство. И даже однажды мне довелось подключать отечественный контроллер дисковода к фирменному Спектруму 128k (тогда это была большая редкость).

С тех пор у меня сохранилось огромное количество документации к различным клонам Спектрума, сопутствующим устройствам, и к другой компьютерной технике распространенной в то время. Ну и кое-какое железо экзотическое сохранилось )

Начиная с этой публикации, постепенно буду делиться накопленной информацией. Думаю, многое будет полезно поклонникам Спектрума, да и не только )

Схема на просвет адаптированная для печати:

Схема увеличения памяти и коррекции дешифрации портов ввода-вывода
для импортной памяти 41256 DRAM, регенерация в 256 циклов:

Схема увеличения памяти и коррекции дешифрации портов ввода-вывода
для отечественной памяти 565РУ7, регенерация в 512 циклов:

Схема увеличения памяти и коррекции дешифрации портов ввода-вывода
при использовании двух линеек памяти 565РУ5:

Для всех доработок используем 7 дополнительных микросхем:

eD1 - К555(1533)ТМ9 (устанавливается поверх D31)
eD2 - К555(1533)КП11 (устанавливается поверх D30)
eD3 - К555(1533)ЛЕ1 (устанавливается поверх D2)
eD4 - К555(1533)ЛА3 (устанавливается поверх D40)
eD5 - К555(1533)ЛЛ1 (устанавливается поверх D34)
eD6 - К555(1533)ЛИ1 (устанавливается поверх D8)
eD7 - К555(1533)ЛЛ1 (устанавливается поверх D13)

Для соединений я использовал провод МГТФ 0.12. Термостойкая оплетка сохраняет провода в целости при плотном монтаже, а небольшое сечение провода позволяет легко перекидывать соединения со стороны пайки на сторону монтажа деталей через любые свободные отверстия на печатной плате, как показано на фото:


1. Стабилизация тактового генератора
2. Нормализация строчной развертки (для кварца частотой 14000 КГц)
3. Стабилизация кадровой развертки
4. Корректировка прорисовки линий (дуги, окружности и т.п.)
5. Установка ПЗУ 27C512
6. Доработка сигнала INT

Схема подключения контроллера XT-клавиатуры Profi:


Этапы сборки, немного фоток

Кстати, недавно копаясь в ворохе старого железа и документации, нашел совсем уж экзотическую вещь: настоящий ценник, видимо где-то середины 90-х:


Да, да, контроллер тогда стоил 75 тысяч рублей )) И обратная сторона ценника порадовала не меньше – выяснилось, что он нарисован на куске перфокарты. ;)


Да. В этом есть определенный философский подтекст: ценник на контроллер носителя информации нового поколения нарисован на обрывке носителя информации старого поколения. )

Полезные файлы:

Имя файла: DIZZY_5r_48k.zip (109K)
MD5: e55b3dd84cba8895ebcce6b4efbe5607

Имя файла: wildseyr.zip (68K)
MD5: 62511c9b12f42794053805e140af3009

Имя файла: test48k.bin (2,0K)
MD5: 4bf68803c17aa614b7fbfa939549eaec
Контрольная сумма прошивки: 85E7

Тестовая прошивка 48k (модифицированная версия -
убрал нудную процедуру заполнения экрана, ненужную проверку ПЗУ).

Имя файла: test128k.bin (2,0K)
MD5: 5247c2d7d5c77d270d98d6c0080493da
Контрольная сумма прошивки: E413

Тестовая прошивка 128k.

Имя файла: sos48k_only.bin (16K)
MD5: 4c42a2f075212361c3117015b107ff68
Контрольная сумма прошивки: 1F64

Имя файла: 27512.bin (64K)
MD5: 77cec243abe304ba3603b63b88709cae
Контрольная сумма прошивки: 9135

Комбинированная прошивка для ПЗУ 27512:

Банк 1 - TR-DOS Version 5.5H Copyright (C) 1993 by Rst7.
MD5: de4131214186667b9fb4022343d34444
Контрольная сумма: 3F81

Всё остальное можно найти в продаже. Если не найдутся отечественные детали, всегда можно найти зарубежные аналоги.

ТТЛ-логика, предпочтительнее 1533 (аналог 74ALS) или 555 (аналог 74LS):
1533ЛН1 (74ALS04) - 2 шт.
1533ТМ2 (74ALS74) - 3 шт.
1533ИЕ7 (74ALS193) - 4 шт.
1533ЛЕ1 (74ALS02) - 1 шт.
1533ЛП5 (74ALS86) - 1 шт.
1533ЛА3 (74ALS00) - 1 шт.
1533ЛИ1 (74ALS08) - 1 шт.
1533ЛЛ1 (74ALS32) - 1 шт.
1533КП11 (74ALS257) - 8 шт.
1533КП13 (74ALS298) - 2 шт.
1533ИР22 (74ALS373) - 1 шт.
1533ИР9 (74ALS165) - 1 шт.
1533ИР16 (74ALS295) - 1 шт.
1533ЛА4 (74ALS10)- 1 шт.

КМОП:
561ИЕ10 (4520) – 1 шт.

Процессор:
Z80 – 1 шт.

Постоянная память:
EPROM 27C64 - 2 шт. или одна EPROM 27C128 (для версии 48k)

Оперативная память:
565РУ5 - 8 шт. или 565РУ7 - 8 шт. (первые выводы РУ7 нужно будет соединить между собой и заземлить /для версии 48k/)

Вместо 565РУ7 можно ставить зарубежные аналоги: 41256/41257 DRAM, MB81256/MB81257 DRAM.

Кроме того, в Спектрум можно ставить динамическую память большего объема и соотв. потребуется меньшее кол-во микросхем. Как это делается, расскажу в следующем материале.

Узел чтения с магнитофона рекомендуется собирать по приведенной выше схеме на К554СА3 (зарубежный аналог IL311ANM).

Читайте также: