Написание прошивки близится к завершению. Добавлены:
- обработка префиксов F0, E0, E1
- добавление кода нажатой кнопки в буфер клавиатуры
- удаление кода отпущенной кнопки из буфера клавиатуры
Вид для печати
Написание прошивки близится к завершению. Добавлены:
- обработка префиксов F0, E0, E1
- добавление кода нажатой кнопки в буфер клавиатуры
- удаление кода отпущенной кнопки из буфера клавиатуры
Пришли разъемы для подключения PS/2 клавиатуры:
http://s016.radikal.ru/i335/1503/be/bd718f464521t.jpg http://i003.radikal.ru/1503/90/ff3457b36d53t.jpg http://s019.radikal.ru/i603/1503/3d/9e15fcf86a24t.jpg
есть возможность привязать на разъёме 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.
Как продвигается работа? Когда можно будет заказывать данный контроллер?
Да, надо дописать прошивку.
Подключил PS/2 клавиатуру. Тестирую. Как приедет рабочий образец USB to PS/2 конвертера - подключу через него USB-клавиатуру.
По PrintScr - RESET, по F12 макрос: RESET LOAD " " ENTER для прошивки OpenSE BASIC.
Какие еще клавиатурные последовательности часто приходится вводить ?
Я полагаю, что имеет смысл оформить макросами ввод символов []{}|~ и т.п., т.е. те, что требуется вводить через режим ExtMode с зажатым SymShift.
И повесить эти макросы на одноимённые кнопки PS/2 клавиатуры.
Кстати, какие размеры платы вообще и расстояния между центрами винтов разъёмов в частности?
как на данном контроллере реализован ввод знаков с цифровых клавиш !@#$%^&*()-=? Т.е. тех, что вводятся при нажатии 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":
Для каждой клавиши PS/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
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 при этом введет и покажет комбинацию КУРСОР ВЛЕВО)
А какой будет код для ввода к примеру знака "%"? Я правильно понимаю, что будет обрабатываться код при нажатии "SHIFT", и код при нажатии "5", при этом в спектрум передаётся как бы одновременное нажатие SS+5?
И для ввода токенов в EXT.MODE будет корректно отрабатываться нажатие CS+SS, SS+кнопка?
Я просто пытаюсь для себя до конца понять, насколько свободно можно задать раскладку (ту, какая мне нужна и удобна) и есть ли какие-то ограничения по ней.
Давайте рассмотрим наклейки от клавиатуры GOLDEN KEYBOARD:
http://s012.radikal.ru/i320/1312/5f/bc99829de40ct.jpg
На ней увидим, что символ "%" нарисован на кнопке с 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
Нет, идея не в нажатии одной кнопки на 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...
Готовы на такую радикальную перестановку ?
Не-не-не, я хочу не такого. Я хочу программно настроить раскладку, чтобы все символы с PS/2 правильно вводились в спектрум. и чтобы вышеприведённые соотношения можно было настроить. Без перестановки ФИЗИЧЕСКОЙ кнопок. Исключительно программная настройка.
И без наклеек - потому что красиво вырезать у меня их не получилось. Максимум, что возможно - лазерная гравировка на PS/2 дополнительных символов и некоторых токенов.
Данный контроллер позволит мне настроить под себя такую раскладку? Нет каких-то аппаратных ограничений при открытой программно части?
Я и не предлагал физической перестановки кнопок, только сменить надписи и перенастроить раскладку. Сейчас можно настраивать серые кнопки программно на любые места. Символы отдельно - нет, только кнопки вместе с символами можно переставлять.
Я сейчас планирую сделать на клавиатуре выбор типа джойстика SINCLAIR1, SINCLAIR2, KEMPSTON, QAOPM на курсорные кнопки. В играх серые кнопки и символы не используются.
Не желательно использовать правый Ctrl и NumLOCK. На них попадают кнопки Pause и PrnScr. Очень уж там наворотили со скан-кодами. Пришлось немного упростить раскладку.
В принципе, символы тоже можно переставить. Надо подумать как ...
Кто-нибудь в курсе, где и почем купить нормальный сеговский джойстик? Потому что те джойстики, которые продают на ибее, и у нас на каждом шагу за 100 рублей, ужасного качества. Они черного цвета, с серыми кнопками xyz, с синей кнопкой старт и надписью 16BIT. Пластик хрупкий; кнопки болтаются; крестовина не четкая, болтается и глючит ужасно, например жмем вправо, а одновременно еще и вверх нажимается.
На просторах интернета я нашел два джойстика, которые немного отличаются и формой и цветом. Первый , второй . Есть шанс, что они получше. Но это только предположение. Может быть есть еще какие-то варианты? Можно конечно на ибее купить фирменный джой, но он обойдется в космическую сумму.
zst, кстати, каково качество джойстиков Магистр, фото которых приведено в первом посте темы? Если оно приемлимое, то где их можно купить отдельно от приставки?
Я себе хочу такой купить - Геймпад Genius MaxFighter PS для PlayStation. И может быть переделать под SEGA стандарт.
http://s018.radikal.ru/i505/1504/06/5ebc1af3d2dbt.jpg
Совместим с PS/PS one/PS2
«Аркадное» исполнение
Эргономичный и удобный дизайн
Turbo - кнопка для обеспечения наилучшего контроля в игах жанра action
Один джойстик (8 положений), 12 кнопок управления
ZX_NOVOSIB, Купи на GBX.ru - там огромная барахолка.
Такой P-star торгует оригинальным железом, в том числе и джоями.
Но обойдутся они около 1тыр, или чуть меньше.
Так-что смотри сам...
Файл с описанием новой раскладки "GUTTEN". Символы будут вводиться те, что нарисованы на PC клавиатуре. Планируется добавить еще одну таблицу на 256 байтов. Одна будет для клавиш без шифта, вторая - для клавиш с шифтом. Обе можно будет редактировать для смены прошивки путем перекомпиляции исходников.
Как вы думаете, может не надо менять местами CS и SS, как на нашей пленочной клавиатуре (Shift = Caps Shift и Ctrl = Symbol Shift), а сделать как написано на PC клавиатуре (Shift = Symbol Shift, Ctrl = Caps Shift) ? Тем более, что за 25 лет мы уже привыкли символы на PC клавиатуре вводить с Shift - ом.
Не-не-не. Привычно как раз вводить символы на цифровых клавишах и буквы в верхнем регистре через 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.
Shift при нажатии цифр и знаков должен работать как SS, а при нажатии букв - как CS ?
Можно графом сделать Insert, а Delete использовать как на PC - стереть символ справа от курсора. Для этого можно запрограммировать CS+KEY_8, CS+KEY_0.Цитата:
В раскладке GUTTEN неточность одна есть, надо так:
Delete [E0 71] => GRAPH (CS+KEY_9)
Сейчас у меня много недоделанной работы. Но параллельно буду дорабатывать прошивку.Цитата:
В остальном мне раскладка нравится. Потому ещё вопрос - после прошивки она именно так и работает как задумана? Дело в том, что на ZXMC хоть и было в раскладке задано выводить в спектрум символы "[]\|~" при обычном нажатии клавиш, по факту выводились токены с этих кнопок, т.к. не срабатывал переход в ExtMode.
Да. Мне кажется, что так будет привычнее для всех, кто какое-то время поработал на ПК клавиатуре. Как минимум - если не использовать наклейки и работать с обычной ПК клавиатурой. В таком варианте, кстати, CTRL не особо и нужна, все функции выполнит SHIFT.
А вот CTRL и ALT можно попробовать привязать как раз на CS и SS именно в спектрумовском смысле. Реально такое провернуть?
Идея хорошая, мне нравится.
Понятно, главное - не забросить идею.
Для ввода некоторых команд токенами требуется SS+буква, поэтому обычный SS нужен.
1 вариант. Левый ALT = CS, правый ALT = SS, а левый и правый Ctrl использовать как FIRE совместно с курсором или клавиашами WASD для имитации одного из джойстиков на выбор.
2 вариант. Левый CTRL = CS, правый CTRL = SS, правый ALT = FIRE.
Набралась у меня коллекция из таких джойстиков:
http://s56.radikal.ru/i151/1505/2d/616f9a169459t.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://s020.radikal.ru/i709/1505/0d/fcc6b6df41bat.jpg http://s019.radikal.ru/i644/1505/cc/5c76c2dd426ft.jpg http://s020.radikal.ru/i723/1505/7c/7315a0244c6ct.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.
Не хватает джойстика для Dandy.
Был где-то, но его надо разбирать для подключения. Отрезать все лишнее. 6 контактов выбранных кнопок соединить одним концом к общему проводу. Другие концы контактов припаять через кабель к разъему DB-9F.
Также, наверно, можно подключить и другие геймпады и джойстики от других приставок с механическими или мембранными контактами.
Может сразу для PS2 делать (digital mode) ? Но при этом не будут работать механические и SEGA джойстики. Для PS2 разъем все-равно надо будет менять на DB-9F, но внутри уже копаться не надо будет. Так как драйверы для работы с PS2, механическим, SEGA и DANDY - разные. Прошивка должна быть для конкретного джойстика. Как добиться универсальности - не знаю пока.
Кто-то уже приобрёл такую платку? Есть впечатления-отзывы?
Gutten, подумываю выпустить ZX-BUS версию платы Super Joystick Port 3. Есть предложения по новой плате ?
Какие предполагаются изменения?
Предполагается заменить кучу регистров на ПЛИС. Добавить разъем PS/2 мышки. Пока не освоил, но сначала плату сделаю, потом напишу программу. Мышка и клавиатура будет подключаться к атмеге. Возможно будет АТМЕГА32. Разъемы надо разместить на плате так, чтобы они были на уровне задней стенки корпуса.
Разъемы DB-09M для подключения двух джойстиков разместить на задней стенке корпуса. С платой соединить проводами.
Можно подумать о замене SEGA на PS2 геймпады, но у них придется перепаивать разъемы для подключения.
Перепаивать разъёмы не страшно. Кто сможет подключить плату к компу, тому перепаять не составит труда.
Главное - не потерять безвайтовость.
Мне больше вариант "DB9 на плате, PS/2 на проводе" как сейчас больше нравится.
если в слот, то она будет подменять порт 254, так. Значит, ввод с магнитофона будет блокирован? Мне это не важно, но мало ли кому ещё требуется.
Но вот в скорпионах, к примеру, на 7 бит этого порта заведён сигнал принтера BUSY. Вряд ли кто сейчас использует принтер по прямому назначению, но этот сигнал могут использовать на что-то ещё.
Мне кажется, вариант существующий более удобен - порты не блокирует, слот не занимает. Может сделать и 3 версию аналогично?
Да, порт FE с меньшим приоритетом надо блокировать. Можно добавить компаратор для загрузки с MP3 плеера или другого источника аналогового сигнала. Или подключить цифровой сигнал с цифрового плеера. Можно добавить режим, когда при отпущенных кнопках на PS/2 клавиатуре порт FE компьютера не блокируется.
Можно подтянуть к +5V через 10K и вывести площадку для подключения разъема WF-02MR, Может еще какие сигналы с АТМЕГИ надо вывести на разъем ? Типа MAGIC, сигналы переключения режимов компьютера ?Цитата:
Но вот в скорпионах, к примеру, на 7 бит этого порта заведён сигнал принтера BUSY. Вряд ли кто сейчас использует принтер по прямому назначению, но этот сигнал могут использовать на что-то ещё.
Второй вариант так и останется для подключения к существующим портам Ленинграда. Вариант для ZX-BUS будет для простого расширения возможностей Ленинграда и оригинальных ZX-SPECTRUM 48К и 128K.Цитата:
Мне кажется, вариант существующий более удобен - порты не блокирует, слот не занимает. Может сделать и 3 версию аналогично?