PDA

Просмотр полной версии : Super Joystick Port



zx-kit
14.11.2012, 19:47
Это безвайтовый адаптер для подключения PS/2 клавиатуры и двух джойстиков или SEGA геймпадов к компьютерам "SCORPION", "PENTAGON" или "LENINGRAD". Курсор на PS/2 клавиатуре и джойстики можно переназначать как SINCLAIR 1, SINCLAIR 2, KEMPSTON, CURSOR, QAOPM или REDEFINE KEYS.

http://i003.radikal.ru/1503/90/ff3457b36d53t.jpg http://s019.radikal.ru/i603/1503/3d/9e15fcf86a24t.jpg http://s016.radikal.ru/i335/1503/be/bd718f464521t.jpg

Возможна установка адаптера внутри корпуса компьютера или размещение во внешнем корпусе для подключения к разным компьютерам в вашей коллекции. Для этого на стенке всех компьютеров надо распаять одинаковые разъемы, например, DB-25М и подключать адаптер через шлейф с припаянным разъемом типа DB-25F. Тогда у всех ваших компьютеров будет удобная клавиатура и переназначаемые на ходу джойстики. Адаптер "SUPER JOYSTICK PORT 2" поможет вам с комфортом играть в любимые игры для Спектрума.


Преимущества адаптера "SUPER JOYSTICK PORT 2" перед аналогичными:

+ Большая совместимость с играми и демами.
+ Возможность работы с турбированным Z80 без торможения сигналом WAIT.
+ Кроме PS/2 клавиатуры можно подключить два SEGA геймпада с эмуляцией шести типов джойстиков.[/B]

http://s019.radikal.ru/i615/1301/4a/ae9a297d500dt.jpg

Для выбора типа джойстика нажать:

SELECT + A = > SINCLAIR 1
SELECT + B = > SINCLAIR 2
SELECT + C = > KEMPSTON
SELECT + X = > CURSOR
SELECT + Y = > QAOPM
SELECT + Z = > ELITE

Устройство подключается к портам для механической клавиатуры и KEMPSTON джойстика, который есть в большинстве клонов:
SCORPION, KAY, PENTAGON-128, ЛЕНИНГРАД-1, LENINGRAD-2012 и подобные.

Подключение - пайкой проводов или переходника. Самый простой способ - на макетке припаять штыри для шлейфов и припаять к ним провода от имеющегося клона.

Схема на микроконтроллере ATMEGA48PA-AU, регистрах сдвига и диодах. Состояние 40 кнопок клавиатуры ZX Spectrum и 5-ти кнопок KEMPSTON джойстика загружается в регистры. Чтение из одного или нескольких регистров через диоды. Это обеспечивает работу различных способов опроса клавиатуры.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ссылки:

Схема - http://zx-pk.ru/showpost.php?p=776396&postcount=17
Монтажка - https://zx-pk.ru/threads/20322-super-joystick-port.html?p=1023924&viewfull=1#post1023924
Распайка механического джойстика - https://zx-pk.ru/threads/20322-super-joystick-port.html?p=1024007&viewfull=1#post1024007
Раскладки кнопок SEGA джойстика - http://zx-pk.ru/showpost.php?p=771191&postcount=13
Раскладка клавиатуры - http://zx-pk.ru/threads/20322-super-joystick-port.html?p=798613&viewfull=1#post798613
Прошивка для AVR с исходниками на ассемблере - http://zx-pk.ru/threads/20322-super-joystick-port.html?p=798613&viewfull=1#post798613

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Конструктор или спаянное устройство можно приобрести в интернет-магазине "ЭЛЕКТРОННЫЕ КОНСТРУКТОРЫ "ZX-KIT" (http://www.zx-kit.ru)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fishbone
14.11.2012, 23:20
было-бы здорово, а то щас, в зависимости от игры, дергаю джойстик из гнезда в гнездо.

Shadow Maker
14.11.2012, 23:51
Надо переопределяемый набор кнопок каким-то образом реализовать (только без прошивки). Иначе это всё полумеры.

goodboy
15.11.2012, 00:30
Надо переопределяемый набор кнопок каким-то образом реализовать (только без прошивки). Иначе это всё полумеры. можно и без прошивки :v2_wink2:

Shadow Maker
15.11.2012, 00:58
Адъ :) Не, я имел че-то более адекватное, типа "подключи шнуром к усб и поменяй". Или "нажми SELECT + C и поменяй кнопки как хочешь, это сохранится". И еще явно не хватает "RESET в TRDOS с загрузкой бута".

CLR
15.11.2012, 10:31
Думаю, разумно в изделии предусмотреть уж сразу два произвольно переназначаемых джойстика, а до кучи и еще одно не менее игровое устройство - кемпстон мышь (желательно с поддержкой скролл-колеса, для популяризации оного). http://velesoft.speccy.cz/kmruswheel-cz.htm
Интерфейс мыши PS2 (или USB, но оно может оказаться сложнее), чтобы не колхозить ничего пользователю.
Ну и для ценовой вилки - универсальную плату для разных комплектаций типа 1 джойстик, 2 джойстика, 2 джойстика+мышь.

P.S. Я кстати сейчас для интереса неторопливо развожу платку кемпстон маус (по схеме Кондратьева) +колесо+PS2 адаптер на PIC16x84 на базе схемы http://ps2m.sotchenko.ru/index_ru.html Пока что на макетке проверяю - кнопки с PS2 мыши уже работают, на неделе распаяю остальное. Почему не на атмеге какойнибудь? Я с ними никогда не возился - делаю из того, что под руками. Потом, если все разведу красиво, выложу тут печатку под утюг.

zx-kit
16.11.2012, 16:30
... Или "нажми SELECT + C и поменяй кнопки как хочешь, это сохранится".

Такое переназначение, наверно можно сделать, только до выключения питания. И проработать/описать процедуру переназначения.


И еще явно не хватает "RESET в TRDOS с загрузкой бута".
А какая нужна последовательность нажатия кнопок с учетом временных интервалов пауз на каждую?

---------- Post added at 17:30 ---------- Previous post was at 17:26 ----------


Думаю, разумно в изделии предусмотреть уж сразу два произвольно переназначаемых джойстика,


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



а до кучи и еще одно не менее игровое устройство - кемпстон мышь (желательно с поддержкой скролл-колеса, для популяризации оного). http://velesoft.speccy.cz/kmruswheel-cz.htm

Наверно, можно добавить часть контроллера мышки caro (http://www.zx.pk.ru/showpost.php?p=263365&postcount=48), если он позволит. ATTINY, кварц и разъемы для прошивки и мышки. Но тут произойдет пересечение адресов KEMPSTON джойстика и мышки. У них один адрес DF, так как в природе они одновременно не могут подключиться к оригинальному ZX Spectrum. Разъем мышки трудно подключать проводами к плате контроллера - надо будет плату-переходник с припаянным разъемом PS/2 использовать.

Shadow Maker
16.11.2012, 19:44
Такое переназначение, наверно можно сделать, только до выключения питания. И проработать/описать процедуру переназначения.
Вот до выключения питания это не годится я думаю. Просто немало игр, где реально нужно назначить какие-нибудь Z O R B A, так что я считаю, было бы неплохо предусмотреть переназначаемые сеты, хранимые в памяти. Наверное можно какую-нибудь флеш-память или что-то подобное под это предусмотреть? Или это резко увеличит стоимость?

CLR
16.11.2012, 21:21
Наверно, можно добавить часть контроллера мышки caro (http://www.zx.pk.ru/showpost.php?p=263365&postcount=48), если он позволит. ATTINY, кварц и разъемы для прошивки и мышки. Но тут произойдет пересечение адресов KEMPSTON джойстика и мышки. У них один адрес DF, так как в природе они одновременно не могут подключиться к оригинальному ZX Spectrum.

На практике вряд ли понадобится одновременная работа мыши и джойстика. Посему можно реализовать автопереключение по активности, как например сделано у Velesoft в Kempston mouse turbo 2008:

K-MOUSE 2008 can work only as Kempston mouse or Kempston
joystick or Fuller joystick in one time.

Push mouse button for active Kempston mouse mode + disable joy

Push joy fire for active Kempston/Fuller joy mode + disable mouse

http://velesoft.speccy.cz/kmturbo2008-cz.htm


Разъем мышки трудно подключать проводами к плате контроллера - надо будет плату-переходник с припаянным разъемом PS/2 использовать.

Если компьютер заключен в обычный корпус, то для него существуют вот такие коннекторы http://www.startech.com/media/img/products/gallery_large/PLATE6F.Main.jpg
Если его открутить от планки,то в принципе можно закрепить на каком угодно корпусе, главное паять ничего не нужно.

goodboy
16.11.2012, 21:54
Если компьютер заключен в обычный корпус, то для него существуют вот такие коннекторы

я в своё время скрутил много таких планок с различными разъёмами со списанных на работе компов - очень удобно.
для выносной клавиатуры 15dsub самое-то. 4+4+5 и два на reset.

zx-kit
04.01.2013, 21:07
Написал основные функции Супер джойстика. Текущие возможности:

Выбор типа джойстика SINCLAIR1/SINCLAIR2/KEMPSTON/CURSOR/QAOPM
Сброс при одновременном нажатии SELECT+START
Возможность одновременной работы с основной клавиатурой и KEMPSTON джойстиком.


Осталось написать макросы со сбросом и паузу. Надеюсь хватит места в ПЛИС. Уже занято 96 ячеек из 128.

Прошивка отлаживалась на плате divIDERUS (http://www.zx.pk.ru/showpost.php?p=562877&postcount=528).
Возможно, Супер джойстик частично или полностью войдет туда.

zx-kit
06.01.2013, 22:43
Давным давно, во времена Speccy2007 был вопрос, нельзя ли в таком маленьком компьютере обойтись без такой большой клавиатуры?

Спросил newart: (http://zx.pk.ru/showpost.php?p=114173&postcount=52)

"И что проку с миниатюризации, если она убивается гробоподобной пц клавой?"

Ответил syd: (http://zx.pk.ru/showpost.php?p=114178&postcount=55)
"Просто я не совсем понимаю как одним джойстиком можно обойтись на спектруме. А load ""? А выбор управления (там иногда нужно циферки - буковки наборать). То есть клава нужна в любом случае. А товарищ говорит что "все убивается гробоподобной пц клавой". Вот я и хочу понять."

Сейчас, можно сказать, что такое возможно (для простых игр). Например, в игре THREE WEEKS IN PARADISE (http://www.zx.pk.ru/showpost.php?p=513029&postcount=104)
можно выбрать KEMPSTON джойстик и менять предметы кнопками джойстика X и Y, которые имитируют кнопки клавиатуры 1 и 2.

Эту идею можно проработать и реализовать в Speccy2010. Там как раз используются SEGA джойстики. Возьмется кто-нибудь ?
При мощности Speccy2010 можно даже попробовать сделать выбор кнопок с записью и загрузкой различных раскладок из файлов.

zx-kit
11.01.2015, 12:20
Собрался доделать старый проект (http://www.zxkit.ru/katalog-1/zxkit-015). Переделаю раскладку SEGA джойстика.

http://i038.radikal.ru/1501/46/a6d379f5fca8t.jpg (http://i038.radikal.ru/1501/46/a6d379f5fca8.png)

Возможно будут изменения в железе. Наверно, надо делать совместимым с ZX-EVO, как с самым массовым компьютером. У него есть разъем IDC-20M под механическую клавиатуру, джойстик. Там же есть земля и сброс.

Den1982
11.01.2015, 12:52
Наверно, надо делать совместимым с ZX-EVO, как с самым массовым компьютером.
Дело верняк!-)

Fishbone
11.01.2015, 12:54
надо делать совместимым с ZX-EVO, как с самым массовым компьютером.

+1

zx-kit
20.01.2015, 11:06
Дело верняк!-)

Разработана печатная плата устройства. Размер 54 х 54 мм.

Подключается к ZX-EVO или другому клону с интерфейсами для механической клавиатуры и кемпстон джойстика. К ZX-EVO спроектировано подключение шлейфами к разъемам X5 и X12. К другим клонам - пайкой проводов или переходника.

Готовится заказ комплектующих. Программа для микроконтроллера будет писать поэтапно - сначала поддержка одного SEGA джойстика, затем двух. Потом в планах поддержка PS2 клавиатуры и возможно управление от UART для устройства REMOTE KEYPAD или аналогичных.

zx-kit
23.01.2015, 17:43
Схема устройства SUPER JOYSTICK PORT 2

http://s020.radikal.ru/i705/1501/ca/5bae55bcab4et.jpg (http://s020.radikal.ru/i705/1501/ca/5bae55bcab4e.png) http://s008.radikal.ru/i306/1501/32/cf40d0ab9810t.jpg (http://s008.radikal.ru/i306/1501/32/cf40d0ab9810.png)

zx-kit
27.01.2015, 21:53
Платы заказаны. Надо писать программу. Прикинул общую блок-схему программы.

Для начала написать блок инициализации и отправки данных в регистры сдвига.
Вместо опроса и обработки состояния SEGA джойстика пока будем имитировать нажатие любой кнопки, например, 1.

То есть, при включении компьютера в режиме 48 BASIC вся строка должна заполняться единицами.
Так мы сможем убедиться, что запись в регистры идет правильно.

zx-kit
30.01.2015, 20:44
Формат пакетов для устройства SUPER JOYSTICK PORT 2 при приеме данных с REMOTE KEYPAD (http://zx-pk.ru/showthread.php?t=22509) или USB HOST контроллера.

http://s011.radikal.ru/i318/1501/a3/4f317b06ea8ft.jpg (http://s011.radikal.ru/i318/1501/a3/4f317b06ea8f.png)

Параметры передачи через UART: скорость 19200 бод, 8 бит данных, 1 стартовый бит, 1 стоповый бит, без контроля четности.

Пакеты начинаются со стартового байта #55, затем идут 8 байтов состояния клавиатуры, 1 байт состояния KEMPSTON джойстика, 1 байт управляющих сигналов и 1 байт контрольной суммы 10 байтов, полученный сложением 10 байтов по XOR.

Длительность передачи: 12 чисел * 10 битов / 19200 = 6.25 мс

zx-kit
07.02.2015, 10:35
Процесс сборки первой платы SUPER JOYSTICK PORT 2:

http://i072.radikal.ru/1502/86/17109c84043bt.jpg (http://i072.radikal.ru/1502/86/17109c84043b.jpg) http://s005.radikal.ru/i212/1502/4d/b72b3cfbcb02t.jpg (http://s005.radikal.ru/i212/1502/4d/b72b3cfbcb02.jpg)

zx-kit
08.02.2015, 19:13
Собрал, теперь надо писать прошивку.

http://s009.radikal.ru/i310/1502/0f/517bb80fb0fat.jpg (http://s009.radikal.ru/i310/1502/0f/517bb80fb0fa.jpg) http://s013.radikal.ru/i323/1502/0b/e61e74ed0af4t.jpg (http://s013.radikal.ru/i323/1502/0b/e61e74ed0af4.jpg) http://i038.radikal.ru/1502/3a/7453e1c1eef3t.jpg (http://i038.radikal.ru/1502/3a/7453e1c1eef3.jpg)

Gutten
08.02.2015, 22:06
Этот контроллер подерживает ps/2 клавиатуру? Можно поподробнее об этом?

zx-kit
09.02.2015, 06:18
Этот контроллер подерживает ps/2 клавиатуру? Можно поподробнее об этом?
Основное назначение подключение двух джойстиков с возможностью программного переключения их типа. Но для PS2 клавиатуры есть четырех штырьковый разъем на плате, через который можно подключить кабель к разъему PS2 клавиатуры. Осталось написать прошивку под нее. Ищу исходники на ассемблере с опросом клавиатуры по прерываниям.

Клавиатура получится без WAIT. На плате есть выходы сигналов WAIT (только для остановки игры), RESET, NMI.

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

Gutten
09.02.2015, 09:53
Какая раскладка предполагается на клавиатуре? Возможность изменения раскладки?

zx-kit
09.02.2015, 10:45
Какая раскладка предполагается на клавиатуре?
Выслушаю ваши рекомендации.


Возможность изменения раскладки?
Правкой исходников. Исходники будут открыты.

Gutten
09.02.2015, 10:57
Если исходники открыты, то рекомендаций нет, всё на ваше усмотрение.

zx-kit
12.02.2015, 11:16
Важная информация:

При разработке было сделано все, чтобы была совместимость с очень популярным копьютером ZX-EVO. Разъемы сделаны с одинаковой распиновкой из описания к ZX-EVO. Но в ZX-EVO логика работы разъема механической клавиатуры оказалось обратной логике работы оригинального ZX SPECTRUMA - входы и выходы сделаны наоборот.


by Sergey78 » Fri, 12.07.2013 08:19:10
...
Посмотрел исходники АВР. Так оказывается мех.клавиатура наоборот опрашивается. 0 выдается на ZXCOL, нажатие читается с ZXROW.

Информация взята с форума TS-Labs (http://tslabs.info/forum/viewtopic.php?f=6&t=231). Поэтому без доработки прошивки ZX-EVO SUPER JOYSTICK PORT 2 на ZX-EVO работать не будет !

Пока совместимость остается с компьютерами, у которых стандартная логика работы разъема механической клавиатуры: SCORPION, PENTAGON, KAY, LENINGRAD.

Текущая прошивка проверена в работе c LENINGRAD-2012. Одиночные кнопки передаются на клавиатуру. Следующим шагом надо подключить опрос SEGA джойстиков с использованием прерываний.

Gutten
12.02.2015, 17:49
Такой вопрос - на контроллере "KEYB&SINC" для ATMEGA48 нужен был сигнал выбора порта клавиатуры /RDIO. Тут в схеме он не используются. Как это повлияло ни работу атмеги и какие изменения в логике работы пришлось внести?

zx-kit
12.02.2015, 19:18
Такой вопрос - на контроллере "KEYB&SINC" для ATMEGA48 нужен был сигнал выбора порта клавиатуры /RDIO. Тут в схеме он не используются. Как это повлияло ни работу атмеги и какие изменения в логике работы пришлось внести?

В KEYB&SINC опрос Aтмегой PS/2 клавиатуры не по прерываниям. Атмега готовил 256 варианатов ответов о состоянии клавиатуры. По прерываниям от вышеуказанного сигнала выдавался тот ответ, который соответствовал старшему байту адреса при опросе клавиатуры. Обычно там ноль в одном разряде, а в остальных единицы. Но некоторые программы могут и несколько нулей выставить. Насколько я знаю, клавиатура там работает в режиме SCAN CODE 3.

В "SUPER JOYSTICK PORT 2" опрос PS/2 клавиатуры, SEGA джойстиков и порта UART - по прерываниям. Это позволяет Атмеге обрабатывать данные с трех источников. Периодически она записывает новые данные в 9 регистров: состояние 40 кнопок + 5 сигналов KEMPSTON джойстика + три сигнала на Z80. Выходы 8 регистров клавиатуры выдают через диоды данные на 5 линий данных клавиатуры. Ноль в старшем байте адреса выбирает один или несколько регистров, с которых нужно считать состояние кнопок. Теперь работа не привязана к сигналу чтения с клавиатуры. Данные в регистрах можно обновлять около 5 раз за кадр телевизора. Клавиатуру в играх обычно опрашивают 1 раз за кадр. Текущее состояние клавиатуры всегда готово для чтения и не требует торможения Z80, как в некоторых контроллерах PS/2 клавиатуры.

Теперь не важно, с обычной скоростью работает Z80 - стандартной или TURBO. Ну и плюс дополнительные функции типа двух джойстиков с выбором типа.

zx-kit
13.02.2015, 11:03
Для подключения SEGA джойстика используется вилка DB-9M, которая имеет следующую распиновку:

1. UP/Z
2. DOWN/Y
3. LEFT/X
4. RIGHT/SELECT
5. +5V
6. A/B
7. SYN (вход управления)
8. GND
9. START/C

Как вы уже знаете, SEGA джойстик можно подключить без вскрытия, разрезания дорожек и сложных схем управления. Его уже подключали к SPECCY2010, KAY-2010, LENINGRAD-2012, KEYB&SINC. Но простым способом можно опросить только 6 кнопок. В LENINGRAD-2012 шестая кнопка подключена как AUTOFIRE.

В новом устройстве нужно опросить все 12 кнопок SEGA джойстика, а это уже более сложная задача.
Но решаемая. На вход SYN джойстика нужно подать последовательность импульсов:

1. 0 50 мкс
2. 1 50 мкс
3. 0 50 мкс
4. 1 50 мкс
5. 0 50 мкс
6. 1 50 мкс
7. 0 50 мкс
8. 1 2000 мкс
Затем опять с 1 по 8 интервалы.

В игре MORTAL COMBAT 3 на игровой приставке SEGA интервалы времени 1-7 по 13.8 мкс, а 8 интервал около 16.57 мс. Но эти интервалы можно менять в достаточно широком диапазоне. В нашем устройстве, одиночные импульсы, для уменьшения нагрузки на микроконтроллер, по 50 мкс, а опрос джойстика сделаем чаще, через 2.4 мс. Такой управляющий сигнал будем формировать с помощью прерываний от таймера, настроенного на интервал 50 мкс.

Читать данные с SEGA джойстика будем в следующие моменты:

В конце 4 интервала: LEFT, RIGHT, DOWN, UP
В конце 5 интервала: A, START
В конце 6 интервала: X, Y, Z, B, C, SELECT

В текущей версии прошивки настроены прерывания на 50 мкс и сформирован тестовый меандр частотой 10 кГц (1/100 мкс).

HardWareMan
13.02.2015, 12:06
Для любителей периферии от Сега добавлю некоторую инфу, которая позволит оптимизировать процедуру опроса. Типичный код опроса 6ти кнопочного джойстика:

clr.l d0 *Очищаем d0
clr.l d1 *Очищаем d1
move.b #$40,$A10003 *Сигнал SYN джойстика в 1
nop *Задержка
nop *Задержка
move.b $A10003,d1 *Считаем первые 6 кнопок
andi.b #$3F,d1 *Выделим их
move.b #$00,$A10003 *Сигнал SYN джойстика в 0
nop *Задержка
nop *Задержка
move.b $A10003,d0 *Считаем вторые 2 кнопки
and.b #$30,d0 *Выделим их
rol.b #2,d0 *Сдвинем на 2 разряда
or.b d0,d1 *И совместим все 8 основных кнопок и сохраним в d1
move.b #$40,$A10003 *Сигнал SYN джойстика в 1
nop *Задержка
nop *Задержка
move.b #$00,$A10003 *Сигнал SYN джойстика в 1
nop *Задержка
nop *Задержка
move.b #$40,$A10003 *Сигнал SYN джойстика в 1
nop *Задержка
nop *Задержка
move.b #$00,$A10003 *Сигнал SYN джойстика в 1
nop *Задержка
nop *Задержка
move.b #$40,$A10003 *Сигнал SYN джойстика в 1
nop *Задержка
nop *Задержка - этот 'мутор' нужен для активации дополнительных четырех кнопок джойстика (XYZM)
move.b $A10003,d0 *Считаем дополнительные кнопки
andi.b #$0F,d0 *Выделим их
eor.b #$0F,d0 *Проинвертируем их
rol.l #8,d0 *Сдвинем на 8 бит
or.w d1,d0 *И совместим их с основными 8ми
not.b d0 *Инвертируем основные кнопки
move.b #$40,$A10003 *Сигнал SYN джойстика в 1
move.w d0,KeyState *И сохраним состояние джойстика

Т.е., пульс длинной в чтение 5ти слов (2 NOPа и 1 move.b с длинным EA). На 7,6МГц это будет примерно 6мкс. Далее, периферия у Сеги разнообразная. И она имеет некий аналог PnP. Вот известные коды:
http://savepic.su/4981538.gif
Дока была издана до выхода расширенного 6ти кнопочного джойстика, который имеет ID = 0110 или 6. Теперь об опросе. Кнопки D-pad'а (крестовины) мультиплексированы с ID (3х кнопочный джойстик) и с расширенными кнопками XYZM (6ти кнопочный джойстик).

3.2) Специфика геймпада

Геймпад использует 4 пина для направления (влево, вправо, вверх, вниз) и
мультиплексирует 4 кнопки (A, B, C, Start) через пины TL и TR.

Пин TH управляет мультиплексором при выборе кнопок (A и Start или C и
B) через пины TL и TR.

Чтобы прочитат все кнопки программа должна установить TH=1, считать
порт, установить TH=0 и еще раз считать порт. Считанные данные будут
в следующем формате:

TH = 0 : ?0SAIIII
TH = 1 : ?1CBRLDU

? = То, что было ранее записано в бит 7.
I = ID
S = Start
A = Кнопка A
B = Кнопка B
C = Кнопка C
U = Вверх
D = Вниз
L = Влево
R = Вправо

6ти кнопочный пад позволяет получить дополнительные кнопки, которое
основано на том, сколько раз пин TH был переключен с 1 на 0 (но не
наоборот с 0 на 1). Посмотрите на следующую последовательность:

TH = 1 : ?1CBRLDU Кнопки 3х кнопочного пада
TH = 0 : ?0SAIIII Кнопки 3х кнопочного пада
TH = 1 : ?1CBRLDU Кнопки 3х кнопочного пада
TH = 0 : ?0SA0000 D3-D0 сброшены в '0'
TH = 1 : ?1CBMXYZ Дополнительные кнопки могут быть считаны через D3-D0
TH = 0 : ?0SA1111 D3-D0 установлены в '1'

M = Mode
X = Кнопка X
Y = Кнопка Y
Z = Кнопка Z

Далее будут возвращаться данные стандартного 3х кнопочного
джойстика при любых переключениях пина TH.

Если пин TH не изменялся около 8192 (а может и меньше) цикла 68000
происходит таймаут и дополнительные кнопки могут быть считаны еще
раз. Игры обычно опрашивают джойстик один раз за телевизионный кадр,
поэтому времени достаточно чтобы произошл таймаут.

Я думаю, что проверка D3-D0 на сброс в '0' или установку в '1' может
быть еще одним методом проверки типа подключенного пада: 6ти или 3х
кнопочный.

Некоторые игры используют такой опрос пада, что считываются данные
6ти кнопочного пада, хотя ожидаются от 3х кнопочного. Чтобы исправить
это, нужно зажать кнопку MODE при включении и 6ти кнопочный пад
будет работать как 3х кнопочный.

zx-kit
13.02.2015, 18:47
Для любителей периферии от Сега добавлю некоторую инфу, которая позволит оптимизировать процедуру опроса. Типичный код опроса 6ти кнопочного джойстика:
...
Т.е., пульс длинной в чтение 5ти слов (2 NOPа и 1 move.b с длинным EA). На 7,6МГц это будет примерно 6мкс.
...
TH = 1 : ?1CBRLDU
TH = 0 : ?0SAIIII
TH = 1 : ?1CBRLDU Кнопки 3х кнопочного пада
TH = 0 : ?0SAIIII Кнопки 3х кнопочного пада
TH = 1 : ?1CBRLDU Кнопки 3х кнопочного пада
TH = 0 : ?0SA0000 D3-D0 сброшены в '0'
TH = 1 : ?1CBMXYZ Дополнительные кнопки могут быть считаны через D3-D0
TH = 0 : ?0SA1111 D3-D0 установлены в '1'

Спасибо, интересно было узнать, в какие моменты читается джойстик в SEGЕ.
Интервал 6 мкс * 7 интервалов - это около 464 такта AVR на частоте 11.0592 МГц. Жалко это время тратить впустую. Лучше прерывания сделать через 50 мкс.

Моя диаграмма в принципе соответствует этому, но лучше скорректировать, как в оригинале.

Тогда получается следующая картина.

1. 0 50 мкс
2. 1 50 мкс
3. 0 50 мкс
4. 1 50 мкс
5. 0 50 мкс
6. 1 50 мкс
7. 0 50 мкс
8. 1 2000 мкс

1 прерывание: читаем B, C, UP, DOWN, LEFT, RIGHT. Затем делаем SYN=0.
2 прерывание: читаем A, START. Затем делаем SYN=1.
3-6 прерывания: меняем SYN на противоположный без чтения из джойстика.
7 прерывание: читаем X, Y, Z, SELECT. Затем делаем SYN=0.
8 прерывание: делаем SYN=1.
9-47 прерывание: просто увеличиваем счетчик прерываний.
48 прерывание: обнуляем счетчик прерываний.

Как только считаются все 12 кнопок (в 8 прерывании) нужно будет записать во флаг SEGA_state значение READY. В основном цикле программа будет опрашивать состояния трех источников данных. Как только появится данное состояние SEGA джойстика - запустится подпрограмма обработки кнопок джойстика. После этого флаг SEGA_state установить в значение PROCESS и записать 11 во все биты входного буфера данных с джойстика. Затем цикл повторяется.

HardWareMan
13.02.2015, 20:59
Вся соль там во времени таймаута. Из-за того, что 6ти кнопочный джойстик есть расширение 3х кнопочного и они должны быть совместимы. Но как сделать чтение дополнительных кнопок не добавляя сигналов управления? Вот тут то и добавили схему переключения альтернативного состояния. А так как джойстики опрашиваются во время VBlank'а, то время для таймаута вполне предостаточно. При этом, есть норматив только на минимальную длительность сигнала SYN, обусловенную задержкой в проводе, логике самого джойстика и быстродействием порта ввода-вывода. Таким образом, опрашивая по 50мкс за состояние с перерывом в 2мс вполне укладывается в рамки. Просто следует ввести код определения типа подключенного джойстика да и сам факт подключения. 6ти кнопочной джой может притвориться 3х кнопочным, если зажать MODE при поверапе.

zx-kit
14.02.2015, 07:14
Вся соль там во времени таймаута. Из-за того, что 6ти кнопочный джойстик есть расширение 3х кнопочного и они должны быть совместимы. Но как сделать чтение дополнительных кнопок не добавляя сигналов управления? Вот тут то и добавили схему переключения альтернативного состояния. А так как джойстики опрашиваются во время VBlank'а, то время для таймаута вполне предостаточно. При этом, есть норматив только на минимальную длительность сигнала SYN, обусловенную задержкой в проводе, логике самого джойстика и быстродействием порта ввода-вывода. Таким образом, опрашивая по 50мкс за состояние с перерывом в 2мс вполне укладывается в рамки. Просто следует ввести код определения типа подключенного джойстика да и сам факт подключения. 6ти кнопочной джой может притвориться 3х кнопочным, если зажать MODE при поверапе.
С платой SUPER JOYSTICK PORT 2 будут работать только шестикнопочные SEGA джойстики (у которых справа кнопки X,Y,Z в верхнем ряду и A,B,C - в нижнем).

http://s019.radikal.ru/i615/1301/4a/ae9a297d500dt.jpg (http://s019.radikal.ru/i615/1301/4a/ae9a297d500d.jpg)

Используются все 12 кнопок. А если джойстик не подключен, то с разъема будут читаться все единицы, как будто ни одна кнопка на нем не нажата.

Добавил в программу формирование сигнала SYN по прерываниям. Поке без чтения данных из джойстиков.

zx-kit
16.02.2015, 10:47
Периодически добавляю новые функции в прошивку.
Дописаны чтение данных с SEGA джойстика и проверено реагирование на нажатие кнопок. Сразу не заработало. Закомментировал некоторые команды для отладки. Найду время - найду ошибки и доработаю. Может кто увидит ошибку и подскажет ?

zx-kit
16.02.2015, 18:46
Чтение из SEGA джойстика заработало. В макросах чтения вместо надписей типа PINB были PORTB. Сейчас джойстик нажимает кнопки 1,2,3,4,5,6,7,8,9,0,Q,A.

Следующее, что надо закодировать: 10 раскладок по 10 байтов. Каждый байт в раскладках будет кодироваться как KEY_1 или KEY8+CS. Это позволит легко корректировать раскладки.

zx-kit
19.02.2015, 06:15
Реализовано переключение между 10 раскладками SEGA джойстика при нажатии кнопки SELECT.

zx-kit
21.02.2015, 18:23
Начал писать поддержку PS/2 клавиатуры. Добавил раскладку PS/2 клавиатуры в область FLASH_DATA. Клавиатура будет работать по умолчанию в режиме Scan Code Set 2 (http://www.computer-engineering.org/ps2keyboard/scancodes2.html). Первые 128 байтов для кодов без префикса E0, вторые 128 байтов для кодов с префиксами E0 и E1.

Пока в таблице задействованы кнопки букв, цифр, пробела и ENTERa. Также L SHIFT как CS, R SHIFT как SS. Стрелки пока не задействованы. Можно подумать над переключением их раскладок для эмуляции джойстиков. Например, F1 = SINCLAIR1, F2 = SINCLAIR2, F3 = KEMPSTON...

Осталось спроектировать и закодировать прием байта, обработка байта, добавление кнопок клавиатуры в выходной буфер с данными от SEGA джойстика.

zx-kit
23.02.2015, 11:21
Всех с праздником !

В прошивке добавлена обработка кнопок с CS и SS для SEGA джойстика и PS/2 клавиатуры. Они нажимаются за 72 мс до нажатия цифры или буквы. Работа проверена с SEGA джойстиком в режиме CURSOR на Ленинграде-2012 c Open SE BASIC-ом.

Добавлен текстовой файл с описанием раскладки PS/2 клавиатуры.

zx-kit
25.02.2015, 06:08
Добавлено:

прием байта с PS/2 клавиатуры
контроль четности
таймаут приема 1,5 мс

zx-kit
25.02.2015, 21:41
Написание прошивки близится к завершению. Добавлены:

обработка префиксов F0, E0, E1
добавление кода нажатой кнопки в буфер клавиатуры
удаление кода отпущенной кнопки из буфера клавиатуры

zx-kit
19.03.2015, 18:36
Пришли разъемы для подключения PS/2 клавиатуры:

http://s016.radikal.ru/i335/1503/be/bd718f464521t.jpg (http://s016.radikal.ru/i335/1503/be/bd718f464521.jpg) http://i003.radikal.ru/1503/90/ff3457b36d53t.jpg (http://i003.radikal.ru/1503/90/ff3457b36d53.jpg) http://s019.radikal.ru/i603/1503/3d/9e15fcf86a24t.jpg (http://s019.radikal.ru/i603/1503/3d/9e15fcf86a24.jpg)

Gutten
19.03.2015, 19:11
есть возможность привязать на разъёме XP5 вместо многочисленных GND сигналы /MAGIC и /TURBO на кнопки F11, F12?
И в принципе, там 7 ножек на GND, можно ли 6 из них переделать для кнопок F7-F12?

zx-kit
19.03.2015, 20:01
есть возможность привязать на разъёме XP5 вместо многочисленных GND сигналы /MAGIC и /TURBO на кнопки F11, F12?
И в принципе, там 7 ножек на GND, можно ли 6 из них переделать для кнопок F7-F12?
На разъеме XP5 используются только 3 контакта. Остальные на ZX-EVO - сигналы для прошивки ATMEGA128. Если вам надо какие-то сигналы управления, то можно для этого использовать разъем UART, где перепрограммировать сигналы RX и TX как /MAGIC и /TURBO. Больше сигналов не откуда брать.
Раз /MAGIC на разъеме UART, то Z80_NMI на XP5 можно назвать по-другому.
Итого 5 выходов:
/MAGIC
/TURBO
Z80_WAIT (PAUSE)
Z80_RESET
Дополнительный сигнал

Так как у вас не ZX-EVO, то на XP5 можно припаять проводками два сигнала с разъема UART.

Gutten
04.04.2015, 01:46
Как продвигается работа? Когда можно будет заказывать данный контроллер?

zx-kit
04.04.2015, 18:26
Да, надо дописать прошивку.

zx-kit
08.04.2015, 06:12
Подключил PS/2 клавиатуру. Тестирую. Как приедет рабочий образец USB to PS/2 конвертера - подключу через него USB-клавиатуру.
По PrintScr - RESET, по F12 макрос: RESET LOAD " " ENTER для прошивки OpenSE BASIC.
Какие еще клавиатурные последовательности часто приходится вводить ?

Gutten
08.04.2015, 12:49
Я полагаю, что имеет смысл оформить макросами ввод символов []{}|~ и т.п., т.е. те, что требуется вводить через режим ExtMode с зажатым SymShift.
И повесить эти макросы на одноимённые кнопки PS/2 клавиатуры.

Gutten
08.04.2015, 21:49
Кстати, какие размеры платы вообще и расстояния между центрами винтов разъёмов в частности?

zx-kit
09.04.2015, 20:25
Кстати, какие размеры платы вообще и расстояния между центрами винтов разъёмов в частности?
Ширина по разъемам 65 мм. Глубина в корпус 60 мм. Расстояние между отверстиями в разъеме 25 мм, между разъемами 9 мм.

Gutten
09.04.2015, 23:16
как на данном контроллере реализован ввод знаков с цифровых клавиш !@#$%^&*()-=? Т.е. тех, что вводятся при нажатии SHIFT.
Как задано соответствие вводимых символов на PS/2 клавиатуре (не нажатие кнопок! именно вводимых символов!) и выдаваемых на спектрум?

zx-kit
10.04.2015, 05:17
как на данном контроллере реализован ввод знаков с цифровых клавиш !@#$%^&*()-=? Т.е. тех, что вводятся при нажатии SHIFT.
Как задано соответствие вводимых символов на PS/2 клавиатуре (не нажатие кнопок! именно вводимых символов!) и выдаваемых на спектрум?

Контроллер выдает 40 основных кнопок/кодов/символов, как у оригинального ZX SPECTRUM. Это его основная задача.

Если надо вводить символы на кнопках с цифрами и английскими буквами, то надо на эти кнопки наклеить наклейки со стандартными надписями. На них нарисовано соответствие. Этим уже занимается сам ZX SPECTRUM.

Лишние символы на клавиатуре (сверх стандартных 40) имитируют один из нарисованных на них символов. Например точку, запятую, кавычки, курсор.

Кнопки F1-F6 зарезервированы на переключение курсора на разные типы джойстика. Пока это просто курсор.
F7-F12 можно настроить на управление двумя сигналами или последовательности типа "Сбросить, прошагать курсором по начальному меню, войти в TR-DOS и ввести команду RUN ENTER". ScrollLock - подача импульса низкого уровня длительностью 10 мкс (MAGIC для контроллера дисковода).

Если какие-то символы не нажимаются в одно нажатие, но они очень нужны, можно запрограммировать для этого кнопки 0-9 в правой части клавиатуры. И наклеить на них нужные рисунки.

Фрагмент файла "FLASH_DATA.asm" ИЗ ПРОЕКТА "SUPER JOYSTICK PORT 2":


PS2_KEYBOARD_TABLE: ; ОСНОВНОЙ НАБОР, 128 СКАН-КОДОВ БЕЗ ПРЕФИКСА E0
; 00 01 02 03 04 05 06 07
; -- F9 F7 ? F5 F3 F1 F2 F12
.DB NULL, NULL, KEY_7, KEY_5, KEY_3, KEY_1, KEY_2, EXT+12


Для каждой клавиши PS/2 клавиатуры в первой строке указан скан-код, во второй приведена надпись на клавише, в третьей описание, что делать при нажатии этой клавиши:
NULL - ничего не делать.
KEY_2 - нажать на клавиатуре ZX SPECTRUM клавишу 2
EXT+12 - расширение возможностей, выполнить команду с номером 12
SS+KEY_P - нажать Symbol Shift, а затем клавишу P (ZX SPECTRUM при этом введет и покажет кавычки)
CS+KEY_5 - нажать Caps Shift, а затем клавишу 5 (ZX SPECTRUM при этом введет и покажет комбинацию КУРСОР ВЛЕВО)

Gutten
10.04.2015, 12:46
А какой будет код для ввода к примеру знака "%"? Я правильно понимаю, что будет обрабатываться код при нажатии "SHIFT", и код при нажатии "5", при этом в спектрум передаётся как бы одновременное нажатие SS+5?
И для ввода токенов в EXT.MODE будет корректно отрабатываться нажатие CS+SS, SS+кнопка?

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

zx-kit
10.04.2015, 15:28
А какой будет код для ввода к примеру знака "%"? Я правильно понимаю, что будет обрабатываться код при нажатии "SHIFT", и код при нажатии "5", при этом в спектрум передаётся как бы одновременное нажатие SS+5?
И для ввода токенов в EXT.MODE будет корректно отрабатываться нажатие CS+SS, SS+кнопка?

Давайте рассмотрим наклейки от клавиатуры GOLDEN KEYBOARD (http://www.zxkit.ru/katalog-1/zxkit-026):

http://s012.radikal.ru/i320/1312/5f/bc99829de40ct.jpg (http://s012.radikal.ru/i320/1312/5f/bc99829de40c.png)

На ней увидим, что символ "%" нарисован на кнопке с 5. Значит вместе с SS нужно нажать 5. Если мы хотим, чтобы "%" можно было ввести нажатием одной кнопки, для этой кнопки надо написать SS+KEY_5. Чтобы ввести левую скобку надо нажать SS+8. Это стандартная реакция ZX SPECTRUM.

Для перехода в EXT. MODE можно нажать CS+SS или запрограммировать кнопку Tab для имитирования нажатия этих двух кнопок при нажатии одной.

Я просто пытаюсь для себя до конца понять, насколько свободно можно задать раскладку (ту, какая мне нужна и удобна) и есть ли какие-то ограничения по ней..
Надеюсь вы не хотите сделать так, чтобы при нажатии SS+9 нажималась левая скобка, а не правая ? Если вам надо все символы нажимать одним касанием - надо запрограммировать свободные кнопки клавиатуры как было описано выше, а для тяжелых случаев на каждую кнопку написать последовательность нажатия с переходом в EXT. MODE. Чтобы запустилась эта последовательность, надо для этой кнопки написать EXT+номер записанной последовательности. Например, для LOAD - такая:


Command_12: ; команда 12: RESET LOAD " " ENTER (для прошивки OpenSE BASIC в LENINGRAD-2012)
rcall ClearOutBuf

ldi temp,Z80_RESET ; RESET
rcall StepKeyMacro

ldi temp,NULL
rcall StepKeyMacro

rcall Delay1S ; ожидание запуска и показ некоторое время надписи внизу экрана

ldi temp,CS+KEY_L ; L
rcall StepKeyMacro
ldi temp,CS+KEY_L
rcall StepKeyMacro

ldi temp,CS+KEY_O ; O
rcall StepKeyMacro

ldi temp,CS+KEY_A ; A
rcall StepKeyMacro

ldi temp,CS+KEY_D ; D
rcall StepKeyMacro

ldi temp,SS+KEY_P ; "
rcall StepKeyMacro
ldi temp,SS+KEY_P
rcall StepKeyMacro

ldi temp,NULL ; отпускание всех кнопок
rcall StepKeyMacro

ldi temp,SS+KEY_P ; "
rcall StepKeyMacro
ldi temp,SS+KEY_P
rcall StepKeyMacro

ldi temp,KEY_EN ; ENTER
rcall StepKeyMacro

Но это, наверно, самый сложный клавиатурный макрос, который может потребоваться.

Gutten
10.04.2015, 16:16
На ней увидим, что символ "%" нарисован на кнопке с 5. Значит вместе с SS нужно нажать 5. Если мы хотим, чтобы "%" можно было ввести нажатием одной кнопки, для этой кнопки надо написать SS+KEY_5. Чтобы ввести левую скобку надо нажать SS+8. Это стандартная реакция ZX SPECTRUM.

Нет, идея не в нажатии одной кнопки на PS/2, а в нажатии SHIFT+5 на ней для ввода "%" в спектрум.



Для перехода в EXT. MODE можно нажать CS+SS или запрограммировать кнопку Tab для имитирования нажатия этих двух кнопок при нажатии одной.

Да, это одно из моих желаний по раскладке.



Надеюсь вы не хотите сделать так, чтобы при нажатии SS+9 нажималась левая скобка, а не правая ? Если вам надо все символы нажимать одним касанием - надо запрограммировать свободные кнопки клавиатуры как было описано выше

Вообще у меня одно из желаний как раз совместить символы на PS/2 с водимыми в спектрум, чтобы не использовать наклейки. В перпективе - добавить на клавиши гравировку лазерную псевдографики спектрума и некоторых токенов. Плюс хотелось бы, чтобы расположение "серых" клавиш спектрума примерно совпадало с такими на PS/2:

Esc - EDIT
Tab - Ext.MODE (CS+SS)
Caps Lock - Caps Lock
PgUP - Inv. Video
PgDn - True Video
Shift - CS
Ctrl - SS
Del - GRAPH


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

zx-kit
10.04.2015, 16:50
Нет, идея не в нажатии одной кнопки на PS/2, а в нажатии SHIFT+5 на ней для ввода "%" в спектрум.



Да, это одно из моих желаний по раскладке.


Вообще у меня одно из желаний как раз совместить символы на PS/2 с водимыми в спектрум, чтобы не использовать наклейки. В перпективе - добавить на клавиши гравировку лазерную псевдографики спектрума и некоторых токенов. Плюс хотелось бы, чтобы расположение "серых" клавиш спектрума примерно совпадало с такими на PS/2:

Esc - EDIT
Tab - Ext.MODE (CS+SS)
Caps Lock - Caps Lock
PgUP - Inv. Video
PgDn - True Video
Shift - CS
Ctrl - SS
Del - GRAPH


К сожалению, все существующие на данный момент контроллеры не позволяют сделать подобную раскладку под себя и накалыдвают какие-либо ограничения от создателя контроллера.
Если вы хотите клавиатуру, максимально похожую на нашу пленочную с серыми дополнительными кнопками и красным BREAK, то нужны наклейки. Серую наклейку True Video наклеить на кнопку Ё, серую INV VIDEO - на 1, белую 1 - на 2, .. белую наклейку 0 - на минус, + оставляем, красный BREAK на BackSpace.
Второй ряд - серый DELETE на Tab, серый GRAPH - на Q, белый Q - на W...

Готовы на такую радикальную перестановку ?

Gutten
10.04.2015, 16:57
Не-не-не, я хочу не такого. Я хочу программно настроить раскладку, чтобы все символы с PS/2 правильно вводились в спектрум. и чтобы вышеприведённые соотношения можно было настроить. Без перестановки ФИЗИЧЕСКОЙ кнопок. Исключительно программная настройка.
И без наклеек - потому что красиво вырезать у меня их не получилось. Максимум, что возможно - лазерная гравировка на PS/2 дополнительных символов и некоторых токенов.

Данный контроллер позволит мне настроить под себя такую раскладку? Нет каких-то аппаратных ограничений при открытой программно части?

zx-kit
10.04.2015, 17:10
Не-не-не, я хочу не такого. Я хочу программно настроить раскладку, чтобы все символы с PS/2 правильно вводились в спектрум. и чтобы вышеприведённые соотношения можно было настроить. Без перестановки ФИЗИЧЕСКОЙ кнопок. Исключительно программная настройка.
И без наклеек - потому что красиво вырезать у меня их не получилось. Максимум, что возможно - лазерная гравировка на PS/2 дополнительных символов и некоторых токенов.

Данный контроллер позволит мне настроить под себя такую раскладку? Нет каких-то аппаратных ограничений при открытой программно части?

Я и не предлагал физической перестановки кнопок, только сменить надписи и перенастроить раскладку. Сейчас можно настраивать серые кнопки программно на любые места. Символы отдельно - нет, только кнопки вместе с символами можно переставлять.

Я сейчас планирую сделать на клавиатуре выбор типа джойстика SINCLAIR1, SINCLAIR2, KEMPSTON, QAOPM на курсорные кнопки. В играх серые кнопки и символы не используются.

Не желательно использовать правый Ctrl и NumLOCK. На них попадают кнопки Pause и PrnScr. Очень уж там наворотили со скан-кодами. Пришлось немного упростить раскладку.

В принципе, символы тоже можно переставить. Надо подумать как ...

ZX_NOVOSIB
10.04.2015, 17:41
Кто-нибудь в курсе, где и почем купить нормальный сеговский джойстик? Потому что те джойстики, которые продают на ибее, и у нас на каждом шагу за 100 рублей, ужасного качества. Они черного цвета, с серыми кнопками xyz, с синей кнопкой старт и надписью 16BIT. Пластик хрупкий; кнопки болтаются; крестовина не четкая, болтается и глючит ужасно, например жмем вправо, а одновременно еще и вверх нажимается.

На просторах интернета я нашел два джойстика, которые немного отличаются и формой и цветом. Первый (http://dvplay.ru/igrovye-pristavki/dendy/dzhojstiki-dendy-sega/gejmpad-dlya-sega-mega-drive-2-sinij.html) , второй (http://dvplay.ru/igrovye-pristavki/dendy/dzhojstiki-dendy-sega/gejmpad-dlya-sega-mega-drive-2-fioletovyj.html) . Есть шанс, что они получше. Но это только предположение. Может быть есть еще какие-то варианты? Можно конечно на ибее купить фирменный джой, но он обойдется в космическую сумму.

zst, кстати, каково качество джойстиков Магистр, фото которых приведено в первом посте темы? Если оно приемлимое, то где их можно купить отдельно от приставки?

zx-kit
10.04.2015, 17:57
Я себе хочу такой купить - Геймпад Genius MaxFighter PS для PlayStation. И может быть переделать под SEGA стандарт.

http://s018.radikal.ru/i505/1504/06/5ebc1af3d2dbt.jpg (http://s018.radikal.ru/i505/1504/06/5ebc1af3d2db.jpg)

Совместим с PS/PS one/PS2
«Аркадное» исполнение
Эргономичный и удобный дизайн
Turbo - кнопка для обеспечения наилучшего контроля в игах жанра action
Один джойстик (8 положений), 12 кнопок управления

piroxilin
10.04.2015, 19:31
ZX_NOVOSIB, Купи на GBX.ru - там огромная барахолка.
Такой P-star торгует оригинальным железом, в том числе и джоями.
Но обойдутся они около 1тыр, или чуть меньше.
Так-что смотри сам...

zx-kit
14.04.2015, 04:34
Файл с описанием новой раскладки "GUTTEN". Символы будут вводиться те, что нарисованы на PC клавиатуре. Планируется добавить еще одну таблицу на 256 байтов. Одна будет для клавиш без шифта, вторая - для клавиш с шифтом. Обе можно будет редактировать для смены прошивки путем перекомпиляции исходников.

Как вы думаете, может не надо менять местами CS и SS, как на нашей пленочной клавиатуре (Shift = Caps Shift и Ctrl = Symbol Shift), а сделать как написано на PC клавиатуре (Shift = Symbol Shift, Ctrl = Caps Shift) ? Тем более, что за 25 лет мы уже привыкли символы на PC клавиатуре вводить с Shift - ом.

Gutten
14.04.2015, 10:56
Не-не-не. Привычно как раз вводить символы на цифровых клавишах и буквы в верхнем регистре через SHIFT. Т.е. для спектрума она должна быть как SS, так и CS.

На ZXMC как раз было сделано CTRL=CS, SHIFT=SS, мне это очень неудобно было, потому что за 10 с лишним лет привычнее вводить большие буквы именно через SHIFT.

---------- Post added at 10:56 ---------- Previous post was at 10:49 ----------

В раскладке GUTTEN неточность одна есть, надо так:
Delete [E0 71] => GRAPH (CS+KEY_9)

В остальном мне раскладка нравится. Потому ещё вопрос - после прошивки она именно так и работает как задумана? Дело в том, что на ZXMC хоть и было в раскладке задано выводить в спектрум символы "[]\|~" при обычном нажатии клавиш, по факту выводились токены с этих кнопок, т.к. не срабатывал переход в ExtMode.

zx-kit
14.04.2015, 16:43
Не-не-не. Привычно как раз вводить символы на цифровых клавишах и буквы в верхнем регистре через SHIFT. Т.е. для спектрума она должна быть как SS, так и CS.

На ZXMC как раз было сделано CTRL=CS, SHIFT=SS, мне это очень неудобно было, потому что за 10 с лишним лет привычнее вводить большие буквы именно через SHIFT.

Shift при нажатии цифр и знаков должен работать как SS, а при нажатии букв - как CS ?

В раскладке GUTTEN неточность одна есть, надо так:
Delete [E0 71] => GRAPH (CS+KEY_9)

Можно графом сделать Insert, а Delete использовать как на PC - стереть символ справа от курсора. Для этого можно запрограммировать CS+KEY_8, CS+KEY_0.


В остальном мне раскладка нравится. Потому ещё вопрос - после прошивки она именно так и работает как задумана? Дело в том, что на ZXMC хоть и было в раскладке задано выводить в спектрум символы "[]\|~" при обычном нажатии клавиш, по факту выводились токены с этих кнопок, т.к. не срабатывал переход в ExtMode.
Сейчас у меня много недоделанной работы. Но параллельно буду дорабатывать прошивку.

Gutten
14.04.2015, 16:51
Shift при нажатии цифр и знаков должен работать как SS, а при нажатии букв - как CS ?

Да. Мне кажется, что так будет привычнее для всех, кто какое-то время поработал на ПК клавиатуре. Как минимум - если не использовать наклейки и работать с обычной ПК клавиатурой. В таком варианте, кстати, CTRL не особо и нужна, все функции выполнит SHIFT.
А вот CTRL и ALT можно попробовать привязать как раз на CS и SS именно в спектрумовском смысле. Реально такое провернуть?



Можно графом сделать Insert, а Delete использовать как на PC - стереть символ справа от курсора. Для этого можно запрограммировать CS+KEY_8, CS+KEY_0.
Идея хорошая, мне нравится.


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

zx-kit
14.04.2015, 17:05
Да. Мне кажется, что так будет привычнее для всех, кто какое-то время поработал на ПК клавиатуре. Как минимум - если не использовать наклейки и работать с обычной ПК клавиатурой. В таком варианте, кстати, CTRL не особо и нужна, все функции выполнит SHIFT.
А вот CTRL и ALT можно попробовать привязать как раз на CS и SS именно в спектрумовском смысле. Реально такое провернуть?

Для ввода некоторых команд токенами требуется SS+буква, поэтому обычный SS нужен.

1 вариант. Левый ALT = CS, правый ALT = SS, а левый и правый Ctrl использовать как FIRE совместно с курсором или клавиашами WASD для имитации одного из джойстиков на выбор.

2 вариант. Левый CTRL = CS, правый CTRL = SS, правый ALT = FIRE.

zx-kit
20.04.2015, 07:03
Не-не-не. Привычно как раз вводить символы на цифровых клавишах и буквы в верхнем регистре через SHIFT. Т.е. для спектрума она должна быть как SS, так и CS.

На ZXMC как раз было сделано CTRL=CS, SHIFT=SS, мне это очень неудобно было, потому что за 10 с лишним лет привычнее вводить большие буквы именно через SHIFT.

В остальном мне раскладка нравится. Потому ещё вопрос - после прошивки она именно так и работает как задумана? Дело в том, что на ZXMC хоть и было в раскладке задано выводить в спектрум символы "[]\|~" при обычном нажатии клавиш, по факту выводились токены с этих кнопок, т.к. не срабатывал переход в ExtMode.

Работает.

zx-kit
10.05.2015, 13:47
Набралась у меня коллекция из таких джойстиков:

http://s56.radikal.ru/i151/1505/2d/616f9a169459t.jpg (http://s56.radikal.ru/i151/1505/2d/616f9a169459.jpg)

Появилось желание, чтобы к плате SUPER JOYSTICK PORT 2 можно было подключить любой из них.
Какие могут быть способы ? Самый простой - припаять одинаковые разъемы, отрезав внутри джойстиков все лишнее. SEGA джойстик можно оставить без доработок, но можно перепаять сеговский пластмассовый разъем на наш DB-9F. У него будет работать 4 направления и две кнопки.

Древний джойстик с рукояткой и красными кнопками из 90-х тоже легко переделать - припаять тот же разъем DB-9F с распиновкой как в SPECCY2010, LENINGRAD-2012. Думаю, можно сделать эту распиновку стандартной для джойстиков.

Новый джойстик тогда нужно также переделать. Но из него можно сделать как бы два джойстика. В первом будет рукоятка на 4 направления и две кнопки FIRE и NEW. А к оставшимся шести кнопкам можно припаять еще один кабель с разъемом DB-9F.

Разобрал оранжевый джойстик, чтобы посмотреть, что там внутри:
http://s49.radikal.ru/i125/1505/9a/ea71d2e0f00at.jpg (http://s49.radikal.ru/i125/1505/9a/ea71d2e0f00a.jpg) http://s020.radikal.ru/i709/1505/0d/fcc6b6df41bat.jpg (http://s020.radikal.ru/i709/1505/0d/fcc6b6df41ba.jpg) http://s019.radikal.ru/i644/1505/cc/5c76c2dd426ft.jpg (http://s019.radikal.ru/i644/1505/cc/5c76c2dd426f.jpg) http://s020.radikal.ru/i723/1505/7c/7315a0244c6ct.jpg (http://s020.radikal.ru/i723/1505/7c/7315a0244c6c.jpg)

Ширина джойстика 31 см. Толкатели кнопок диаметром 26 мм. На плате размещены 8 механических кнопок. Есть еще одна плата с мелкими кнопками. Ручка нажимает 4 контакта типа концевых выключателей. Разъем как SONY PS.

В новой версии прошивки будет добавлена возможность подключения механических джойстиков с 5-6 контактами. То есть должны заработать практически любые джойстики. Так как у нас есть PS/2 клавиатура (или USB клавиатура через переходник "USB to PS/2") выбирать тип джойстика теперь можно так: F1+1,2,3,4,5,6,7,8,9,0. Для 1 джойстика выбирать с помощью F1, для второго - F2, для курсора на клавиатуре - F3, для кнопок WASD - F4, для курсора на кейпаде справа - F5.

Цифры задают тип джойстика:

1 - SINCLAIR1
2 - SINCLAIR2
3 - KEMPSTON
4 - CURSOR
5 - QAOPM
6 - ELITE
7 - еще не придумал
8 - еще не придумал
9 - REDEFINE KEYS
0 - отключение джойстика (для джойстика на кнопках WASD)

Перепрограммирование кнопок при нажатии Fn+9. После этого нажать на клавиатуре новые кнопки для LEFT, RIGHT, DOWN, UP, FIRE, NEW.

Eagle
10.05.2015, 14:07
Не хватает джойстика для Dandy.

zx-kit
10.05.2015, 14:35
Не хватает джойстика для Dandy.
Был где-то, но его надо разбирать для подключения. Отрезать все лишнее. 6 контактов выбранных кнопок соединить одним концом к общему проводу. Другие концы контактов припаять через кабель к разъему DB-9F.

Также, наверно, можно подключить и другие геймпады и джойстики от других приставок с механическими или мембранными контактами.

Eagle
10.05.2015, 14:55
но его надо разбирать для подключения.
Хотелось бы без препарирования оного, а как есть, там всего-то восемь бит считывать.

zx-kit
10.05.2015, 17:48
Хотелось бы без препарирования оного, а как есть, там всего-то восемь бит считывать.

Может сразу для PS2 делать (digital mode) ? Но при этом не будут работать механические и SEGA джойстики. Для PS2 разъем все-равно надо будет менять на DB-9F, но внутри уже копаться не надо будет. Так как драйверы для работы с PS2, механическим, SEGA и DANDY - разные. Прошивка должна быть для конкретного джойстика. Как добиться универсальности - не знаю пока.

Gutten
29.12.2015, 21:06
Кто-то уже приобрёл такую платку? Есть впечатления-отзывы?

zx-kit
02.02.2017, 15:50
Gutten, подумываю выпустить ZX-BUS версию платы Super Joystick Port 3. Есть предложения по новой плате ?

Gutten
02.02.2017, 16:18
Какие предполагаются изменения?

zx-kit
02.02.2017, 16:26
Какие предполагаются изменения?

Предполагается заменить кучу регистров на ПЛИС. Добавить разъем PS/2 мышки. Пока не освоил, но сначала плату сделаю, потом напишу программу. Мышка и клавиатура будет подключаться к атмеге. Возможно будет АТМЕГА32. Разъемы надо разместить на плате так, чтобы они были на уровне задней стенки корпуса.
Разъемы DB-09M для подключения двух джойстиков разместить на задней стенке корпуса. С платой соединить проводами.

Можно подумать о замене SEGA на PS2 геймпады, но у них придется перепаивать разъемы для подключения.

Gutten
02.02.2017, 16:58
Перепаивать разъёмы не страшно. Кто сможет подключить плату к компу, тому перепаять не составит труда.
Главное - не потерять безвайтовость.

Мне больше вариант "DB9 на плате, PS/2 на проводе" как сейчас больше нравится.

zx-kit
02.02.2017, 17:22
Перепаивать разъёмы не страшно. Кто сможет подключить плату к компу, тому перепаять не составит труда.
Главное - не потерять безвайтовость.

Мне больше вариант "DB9 на плате, PS/2 на проводе" как сейчас больше нравится.

Безвайтовость останется. Раскладка клавиатуры тоже.
В предыдущей версии плата держалась на разъемах. В новой версии плата будет вставляться в слот.
Разъмы PS/2 для платы более доступны.

Gutten
02.02.2017, 20:59
если в слот, то она будет подменять порт 254, так. Значит, ввод с магнитофона будет блокирован? Мне это не важно, но мало ли кому ещё требуется.
Но вот в скорпионах, к примеру, на 7 бит этого порта заведён сигнал принтера BUSY. Вряд ли кто сейчас использует принтер по прямому назначению, но этот сигнал могут использовать на что-то ещё.

Мне кажется, вариант существующий более удобен - порты не блокирует, слот не занимает. Может сделать и 3 версию аналогично?

zx-kit
03.02.2017, 05:25
если в слот, то она будет подменять порт 254, так. Значит, ввод с магнитофона будет блокирован? Мне это не важно, но мало ли кому ещё требуется.

Да, порт FE с меньшим приоритетом надо блокировать. Можно добавить компаратор для загрузки с MP3 плеера или другого источника аналогового сигнала. Или подключить цифровой сигнал с цифрового плеера. Можно добавить режим, когда при отпущенных кнопках на PS/2 клавиатуре порт FE компьютера не блокируется.

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

Можно подтянуть к +5V через 10K и вывести площадку для подключения разъема WF-02MR, Может еще какие сигналы с АТМЕГИ надо вывести на разъем ? Типа MAGIC, сигналы переключения режимов компьютера ?


Мне кажется, вариант существующий более удобен - порты не блокирует, слот не занимает. Может сделать и 3 версию аналогично?
Второй вариант так и останется для подключения к существующим портам Ленинграда. Вариант для ZX-BUS будет для простого расширения возможностей Ленинграда и оригинальных ZX-SPECTRUM 48К и 128K.

Gutten
03.02.2017, 11:41
С атмеги надо вывести как минимум MAGIC, TURBO ON/OFF (тут вариант - или триггером, или импульсом), ещё 1-2 сигнала на усмотрение пользователя. Сейчас эти сигналы есть практически у всех новоделов.

Gutten
02.04.2017, 20:26
Вопрос по SJP v2.
Пока я застопорился на прошивке атмеги, появился вопрос: а кемпстон тут реализован выдачей 0 или 1 при нажатой кнопке с платы на порт компа? На скорпионе для кемпстона общий +5В, потому я не знаю, подключать его к этой плате или надо инвертор добавить?

zx-kit
03.04.2017, 22:04
Вопрос по SJP v2.
Пока я застопорился на прошивке атмеги, появился вопрос: а кемпстон тут реализован выдачей 0 или 1 при нажатой кнопке с платы на порт компа? На скорпионе для кемпстона общий +5В, потому я не знаю, подключать его к этой плате или надо инвертор добавить?
Фьюзы для AVRDUDE прописаны в файле prog_bat_file.bat:


avrdude -p atmega48 -c FT232_AVR_PROG -P ft0 -B 4800 -U lfuse:w:0xef:m -U hfuse:w:0xdc:m -F
avrdude -p atmega48 -c FT232_AVR_PROG -P ft0 -e -U flash:w:SUPER_JOYSTICK_PORT_2.hex -F
PAUSE 0


Кемпстон реализован выдачей 0 при нажатии. Подключать через инверторы.

Gutten
22.07.2017, 17:13
Итак, заменил Atmega48PA на Atmega48, программатор сразу стал её видеть, всё чудесно прошиватеся-стирается-проверяется. Но всё равно не работает: при включении все индикаторы зажигаются-гаснут и более не реагируют ни на что. Должны ли CaspLock/MumLock/ScrolLock зажигать их без контроллера?
Клавиатура прекрасно работает с ZXMC2 по сканкодам Set3, но тут реализован Set2. Другой клавиатуры у меня под руками нет, потому думаю как в прошивке FLASH_DATA.asm поменять Set2 на Set3. Не совсем понятно, что делать с куском раскладок с префиксом E0. Какие будут советы?

Gutten
06.08.2017, 16:30
Запустил платку, разбираюсь с прошивками. Добавил специфичную команду для Scorpion'a - холодный сброс (Курсор Влево и Reset).
Разбираюсь с Magic. Проблема в автоповторе: контроллер иногда успевает дважды отправить нажатие. Думаю над тем, как убрать вообще автоповтор при нажатии только нужной кнопки.

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

Gutten
06.08.2017, 19:10
Добавлено:
- Выдача NMI (Magic). Сидит на ScrollLock. Дребезга не замечено, проверял в нескольких программах.


Не совсем понятны нюансы:


PRESS CS+KEY_L
PRESS CS+KEY_O
PRESS CS+KEY_A
PRESS CS+KEY_D

PRESS SS+KEY_P
PRESS NULL ; отпускание всех кнопок
PRESS SS+KEY_P

PRESS KEY_EN


Почему макрос "PRESS NULL" ставится только между кавычками? Когда его имеет смысл ставить, а когда нет? В другой команде это макрос стоит и после второй кавычки.

zx-kit
19.11.2017, 14:30
Сейчас уже не помню. Этот макрос для ПЗУ Open SE BASIC. Там команда LOAD вводится по буквам. Возможно две ковычки подряд программа в ПЗУ считала как долгое нажатие и вводила больше двух ковычек. Или просто для красоты - чтобы была пауза между двумя кавычками.

Gutten
19.11.2017, 20:03
Не получается выдать команду на клавиатуру для зажигания светодиода. Кусок кода взят из соседней темы "контроллер на атмеге48". Контроллер либо виснет, либо ничего (?) не происходит. Думаю плюнуть на этот момент, хотя было бы удобно.
Не понятно как реализовать Pause, слишком мудрёно получается. Ну и оказалось в городе не найти сеговского джойстика, эта часть тоже отложена на потом. Джойстик мне особо и не актуален, но интересно попробовать. Классический дискретный джойстик, подключенный к контроллеру, не заработал. Хотя надеялся, что тупо ВНЛПО контроллер выдаст.

zx-kit
20.11.2017, 21:49
Как надо чтобы работала пауза ? Можно нажатием кнопки PAUSE останавливать игру и ею же продолжать.

Gutten
21.11.2017, 00:28
но тут сделан wait не на отдельном бите атмеги, а на сдвиговом регистре. Если бы был бит - я бы просто инвертировал его с каждым нажатием так же, как сделал управление турбо. А тут надо по нажатию кнопки зациклить выдачу wait до следующего нажатия. Но опрос клавиш по прерыванию происходит в одном месте, а бесконечный цикл надо делать в другом. Что произойдёт, если атмегу зациклить в блоке макросов команд?

zx-kit
21.11.2017, 23:29
Я подумаю, как это сделать. Если WAIT подключен через регистр, значит я считал, что с помощью него можно останавливать Z80.

zx-kit
19.05.2018, 06:25
"SUPER JOYSTICK PORT 2" можно подпаять к клонам "Ленинград", "Pentagon", "Scorpion" и подобных на логических микросхемах и имеющих порт для подключения механической клавиатуры. Планировалось обеспечить легкость подключения к "ZX-Evolution", поэтому разъем для подключения имеет такую же цоколевку, но затем выяснилось, что сигналы, формируемые ZX-Evo на разъеме не соответствуют логике работы в указанных выше компьютерах. Если логика работы в ZX-Evo будет передалана, то данный адаптер можно будет подключить и к этому компьютеру.


Для выбора типа джойстика используются комбинации кнопок:

SELECT + A = SINCLAIR 1
SELECT + B = SINCLARI 2
SELECT + C = KEMPSTON
SELECT + X = CURSOR
SELECT + Y = QAOPM
SELECT + Z = ELITE

Gutten
11.09.2018, 19:13
У нас в городе геймпады найти оказалось нереально, потому заказал с наебея. Качество конечно не особо в сравнении с былыми, но самый подвох в том, что у них нет кнопки MODE! Я так понимаю, что это она названа в прошивке и описании как SELECT и на которую завязан выбор раскладки.
Подключил к контроллеру и обнаружил, что работают только кнопки АВС, влево, вниз и старт.
Заменил в прошивке переключение раскладок - вместо SELECT должна работать START. Получил странный эффект - раскладки частично переключаются, но макрос по нажатию START всё равно вводится, хоть я закомментил переход на эту метку.
Буду разбираться дальше.

Gutten
11.09.2018, 21:57
Есть подозрение, что проблемы с джойстиком в процедуре опроса. По некоторым причинам я перевёл контроллер на внутренний кварц 8МГц, а задержки в модуле SEGA пока не менял. Надо подумать как лучше поступить.

Отправлено с моего Redmi Note 4 через Tapatalk

zx-kit
22.07.2019, 05:30
Планирую добавить в свой безвайтовый адаптер клавиатуры и джойстиков режим REDEFINE KEYS для курсора клавиатуры и геймпадов. Настраисаться будут курсор и 6 кнопок на геймпаде или 6 кнопок над курсором клавиатуры.
Порядок настройки будет такой. Нажимаем кнопку F4, затем кнопку на геймпаде или курсоре клавиатуры и кнопку на клавиатуре, которую надо закрепить.
Выбор Синклер джойстиков и Кемпстона для геймпадов и курсора клавиатуры будет нажатием кнопок F1-F3 и цифры 1-7.

zx-kit
24.07.2019, 05:40
В новой версии прошивки планируются изменения:

Настройка типа джойстика с клавиатуры нажатием кнопкик F1-F5, а затем цифры.

F1 - первый джойстик
F2 - второй джойстик
F3 - курсор на PC клавиатуре

Цифры задают тип джойстика:

1 - SINCLAIR1
2 - SINCLAIR2
3 - KEMPSTON
4 - CURSOR
5 - QAOPM
6 - ELITE
0 - DEFINE

F9 - режим REDEFINE KEYS
F10 - сохранение настроенной комбинации кнопок
F11 - восстановление сохраненной комбинации

Комбинаций может быть до 10. Номер указывается нажатием цифры после F10 или F11.

zx-kit
29.07.2019, 19:31
Я решил поменять ник на zx-kit и фамилию на "Robinson" как у известного изобретателя из мультфильма "В гости к Робинсонам"!
Я тоже люблю изобретать.

Gutten
30.07.2019, 00:31
Предлагаю подумать над переводом атмеги на внутренний генератор с пересчётом задержек и особенно опроса джойстиков. А то вот у меня с внешним какие-то грабли и она просто не запускается и программатором не определяется. Чтобы программатор её смог оживить придётся долго и упорно повтор прошивания делать и тогда чудо может произойти. С внутренним генератором всё пока работало стабильно даже в турборежиме. Правда почти год уже как не включал скорп - времени совсем нет, так на опросе джоя и застрял.

zx-kit
30.07.2019, 04:39
Предлагаю подумать над переводом атмеги на внутренний генератор с пересчётом задержек и особенно опроса джойстиков.

Хорошо.

zx-kit
15.08.2019, 09:51
Обновленная монтажная схема (https://www.radikal.kz/images/2019/08/15/MONT.png)

Номиналы некоторых резисторных сборок уменьшены до 4.7 К.

zx-kit
16.08.2019, 10:09
Сейчас прошивка дорабатыватся для работы с механическим джойстиком. Выбор типа будет осуществляться с PS/2 клавиатуры. К джойстику нужно припаять гнездо DB-09F со следующей распайкой:

1 - UP
2 - DOWN
3 - LEFT
4 - RIGHT
5 -
6 - FIRE1
7 -
8 - GND
9 - FIRE2

Black Cat / Era CG
16.08.2019, 11:17
Fire вроде надо на 6 для совместимости со стандартом Atari.

zx-kit
16.08.2019, 19:09
Fire вроде надо на 6 для совместимости со стандартом Atari.

Хорошо, переделаю на 6 контакт.

zx-kit
17.08.2019, 22:07
Для облегчения подключения к компьютерам "SCORPION" и "LENINGRAD", у которых общий провод KEMPSTON джойстика подключался к +5V, данные на KEMPSTON будут идти с инверсией. Но инверсию можно будет отключить, ести установить джампер между 1 и 2 контактами разъема, который раньше назывался UART.
Думаю, что как джойстик лучше использовать курсор на цифровой клавиатуре справа - он похож на крестовину.
У всех джойстиков перепрограммируемыми сделать стрелки и FIRE.
Добавил в комплектацию красную кнопку и разъем IDC-10F для возможности RESTART и восстановления настроек по умолчанию.
В комплекте шлейфы 10 и 20 жил по 20 см и разъемы IDC для подключения к компу и 10 жил 10 см для подключения красной кнопки.
Кварц остается в комплектации "для красоты", но генератор будет использоваться внутренний.

Gutten
17.08.2019, 23:32
Надеюсь, в прошивке можно будет переопределить кнопки для джоя? А то на миниклавиатурах нет отдельного цифроблока.

zx-kit
21.08.2019, 18:33
Надеюсь, в прошивке можно будет переопределить кнопки для джоя? А то на миниклавиатурах нет отдельного цифроблока.
Тогда надо два курсора - основной и цифровой. Для джойстиков будет две кнопки.
Основной на 6 контакте - или кнопка B на SEGA геймпаде.
Дополнительный на 9 контакте - или кнопка C на SEGA геймпаде.

Напиши список полезных макросов для Скорпиона.

Gutten
24.08.2019, 22:20
.def temp = r16 ; временный регистр для основной программы и подпрограмм, кроме п/п прерываний
.def delay_cnt = r19 ; счётчик для задержки времени
.def cnt = r20 ; регистр для счетчиков циклов




;
************************************************** ************************************************** *******************
;* 170930-03 ВРЕМЕННАЯ ЗАДЕРЖКА 1 мс (1мсек=8МГЦ / 5 / 1000 = 0x000640)
;************************************************* ************************************************** ********************
Delay1mS:
push temp
push cnt
push delay_cnt

ldi temp,243 ; для 8 МГц
ldi cnt, 107 ; для 8 МГц

mov delay_cnt,temp
Delay1ms_1:
inc cnt
breq Delay1ms_exit
mov temp,delay_cnt
Delay1ms_2:
inc temp
breq Delay1ms_1
rjmp Delay1ms_2

Delay1ms_exit:
pop delay_cnt
pop cnt
pop temp
ret

;************************************************* ************************************************** ********************
;* 170806-03 ВРЕМЕННАЯ ЗАДЕРЖКА 5 мс
;************************************************* ************************************************** ********************
Delay5mS:
rcall Delay1mS
rcall Delay1mS
rcall Delay1mS
rcall Delay1mS
rcall Delay1mS
ret

;************************************************* ************************************************** ********************
;* 170806-03 ВРЕМЕННАЯ ЗАДЕРЖКА 50 мс
;************************************************* ************************************************** ********************
Delay50mS:
push temp
ldi temp,50

Delay50mS_10:
rcall Delay1mS
dec temp
brne Delay50mS_10

pop temp
ret

;************************************************* ************************************************** ********************
;* 150409-02 ВРЕМЕННАЯ ЗАДЕРЖКА 100 мс
;************************************************* ************************************************** ********************
Delay100mS:
push temp
ldi temp,100

Delay100mS_10:
rcall Delay1mS
dec temp
brne Delay100mS_10

pop temp
ret

;************************************************* ************************************************** ********************
;* 150409-02 ВРЕМЕННАЯ ЗАДЕРЖКА 1 СЕК
;************************************************* ************************************************** ********************
Delay1S:
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
ret

;************************************************* ************************************************** ********************
; короткая задержка
;************************************************* ************************************************** ********************
SMALL_WAIT:
nop
ret


- - - Добавлено - - -




;************************************************* ************************************************** ********************
;* 170805-03 Cold Reset (CurLeft+RESET) (COM+00: PrnScr)
;************************************************* ************************************************** ********************
Command_00:
PRESS CS+KEY_5
rcall Delay100mS ; время нажатия одной кнопки 100 милисекунд
PRESS Z80_RESET ; включение сигнала RESET
PRESS NULL ; отпускание всех кнопок
ret


;************************************************* ************************************************** ********************
;* 170723-03 Magic (NMI) (COM+15: ScrollLock)
;************************************************* ************************************************** ********************
Command_15:
PRESS Z80_NMI
PRESS NULL ; отпускание всех кнопок и выключение NMI
rcall Delay1S ; время нажатия одной кнопки 1 секунда
ret


;************************************************* ************************************************** ********************
;* 170925-03 Turbo On/Off (COM+16: NumLock)
;************************************************* ************************************************** ********************
Command_16:
PRESS Z80_TURBO
PRESS NULL ; отпускание всех кнопок
rcall Delay100mS ; время нажатия одной кнопки 1 милисекунда
ret


;************************************************* ************************************************** ********************
;* 180604-03 PAUSE, пауза /WAIT (COM+18))
;************************************************* ************************************************** ********************
Command_18:
sbis PORTD,PD1 ; проверяем состояние бита 1
rjmp BIT_IS_LO ; если бит в 0, то включаем его
cbi PORTD,PD1 ; иначе выключаем его
rjmp WAIT_EXIT

BIT_IS_LOW:
sbi PORTD,PD1 ;включили бит

WAIT_EXIT:
PRESS NULL ; отпускание всех кнопок
rcall Delay100mS ; время нажатия одной кнопки 100 милисекунд
ret



Вроде бы для организации WAIT через разъём UART я ещё аппаратно припаивал диод или резистор на данный контроллер, счас не помню, а скорп убран.
Если быстро нажать-отпустить PrnScr, то получается "тёплый старт" как простой сброс, если нажать-чуть подержать-отпустить, то срабатывает полноценный макрос "холодный старт" с инициализацией скорпиона. Почему так получается, если написан только один макрос - не понимаю.

zx-kit
25.08.2019, 10:06
;************************************************* ************************************************** ********************
;* 170805-03 Cold Reset (CurLeft+RESET) (COM+00: PrnScr)
;************************************************* ************************************************** ********************
Command_00:
PRESS CS+KEY_5
rcall Delay100mS ; время нажатия одной кнопки 100 милисекунд
PRESS Z80_RESET ; включение сигнала RESET
PRESS NULL ; отпускание всех кнопок
ret


Если быстро нажать-отпустить PrnScr, то получается "тёплый старт" как простой сброс, если нажать-чуть подержать-отпустить, то срабатывает полноценный макрос "холодный старт" с инициализацией скорпиона. Почему так получается, если написан только один макрос - не понимаю.
Кнопки надо было нажимать после ресета.


;************************************************* ************************************************** ********************
;* 170805-03 Cold Reset (CurLeft+RESET) (COM+00: PrnScr)
;************************************************* ************************************************** ********************
Command_00:
PRESS Z80_RESET ; включение сигнала RESET
PRESS CS+KEY_5
rcall Delay1S
PRESS NULL ; отпускание всех кнопок
ret

Gutten
25.08.2019, 10:30
Мммм, не знаю, может быть. Как дети подрастут немного и у меня появится свободного времени больше, проверю. Но текущий удобнее - холодный старт дольше идёт и реже нужен.

Gutten
09.03.2020, 19:38
Вновь нашлось время посидеть поразбираться.
1) Холодный рестарт переделал как указано выше. Замапил его на SHIFT + PrnScr. По обычному PrnScr просто выдаём RESET и выполняем тёплый рестарт.
2) Проблема с геймпадом - не работают XYZ, LDU при нажатии одновременно в ZX передают как будто нажаты 2 кнопки. Причём эта кнопка-призрак всегда 1 или 2 или 3. Временно решено отключением опроса кнопок XYZ в файле INTERRUPTS. Сразу прекрасно заработал опрос UDLRABC, START. Работает переключение раскладок для геймпада. Может у меня геймпад не исправен, но проверить его не на чем. Заработало.
3) Механический джойстик тоже работает (чего бы ему не работать, ведь опрос UDLRBC идёт не зависимо от сигнала SEL).
4) Самая главная проблема. Так как кнопки обоих геймпадов кидаются в буфер клавиатуры, который ограничен 4 кнопками, то поиграть вдвоём получится только если один назначен как KEMPSTON. Ведь одновременное нажатие 2 направлений + огонь на обоих геймпадах дадут 6 кнопок! Так что получается второй порт этого контроллера можно захардкодить на KEMPSTON, а переключаемым сделать только первый порт. Либо надо увеличивать буфер клавиатуры.
5) Кстати, ограничение буфера клавиатуры не даёт вводить всякие чит-коды в играх одновременным нажатием. Но тут ещё ограничение от самого контроллера в PS/2-клавиатуре.
6) Интересен функционал назначения раскладок джойстиков на курсорные кнопки клавиатуры. Буду думать как это настроить.
7) Надо подумать как оживить индикаторы на клавиатуре.

Gutten
19.05.2020, 22:44
А что, больше данный контроллер никого не заинтересовал?
Зря, слот не требуется, PS/2 подключается вместо классической клавиатуры, ещё и джойстики можно на лету менять, пусть и с ограничениями.
Хотя да, счас USB актуальнее.