Бит 1 порта 1FFD будет совместимо с Pentagon 1024sl v1.4, там оно зовется защищенный режим. Прикол в том что глюку и тырдосу будет доступна вся память даже в режиме 128к, будет работать рамдиск и его не смогут повредить
Вид для печати
Так может быть организован доступ к EEPROM:Цитата:
Сообщение от Дмитрий
PS. EEPROM может быть больше чем 256 байт.Код:; Чтение байта из ячейки EEPROM
; Вход: HL -> ADR_eeprom
; Выход: C = (ADR_eeprom)
; CY = 0 - OK
rd_eeprom:
call set_adr ; Задать адрес EEPROM
ret c ;Выход с ошибкой
; Задан адрес ячейки EEPROM в контроллере
ld a,055h ; код доступа
in a,(0FEh)
ld a,"R" ;Команда чтения EEPROM
in a,(0FEh)
; Контроллер ждет чтения двух половинок байта
in a,(0FEh)
rlca
rlca
rlca
rlca
and 0F0h ;ст. нибл данных
ld c,a ;сохранить
in a,(0FEh)
and 0Fh ;мл. нибл данных
or c
ld c,a ; байт данных из EEPROM
ret ; CY=0
;-------------------------------------------
; Запись байта в EEPROM
; Вход: HL -> ADR_eeprom
; C -> (ADR_eeprom)
; CY = 0 - OK
wr_eeprom:
call set_adr ; Задать адрес EEPROM
ret c ; Выход с ошибкой
; Задан адрес ячейки EEPROM в контроллере
ld a,055h ; код доступа
in a,(0FEh)
ld a,"W" ; Команда записи в EEPROM
in a,(0FEh)
ld a,c ; Байт данных
in a,(0FEh); Записать
ret ; CY=0
;-------------------------------------------
; Задать текущий адрес ячейки EEPROM.
; После операций чтения/записи
; происходит авто-инкремент текущего адреса.
set_adr:
ld a,055H ;Код доступа
in a,(0FEh) ; байт ответа
and 1Fh ; маска
cp 0Ah ; должен прочитаться 0Ah
scf ; CY=1
ret nz ; Иначе выход с ошибкой
; Контроллер откликнулся
ld a,"A" ;Команда задания адреса
in a,(0FEh)
ld a,L ;Мл.Байт адреса
in a,(0FEh)
ld a,H ;Ст.Байт адреса
in a,(0FEh)
xor a ; CY=0
ret ; Выход без ошибки
;==============================================
имхо, лучше и проще всего изменить драйвер часов именно в ПрофПЗУ и часы в СМУКе на глюковские. Объясню почему:
1) аппаратное управление в глюкочасах сделано всё-таки более грамотно чем в СМУКе
2) в ПрофПЗУ насколько понимаю, никаких завязок на часы кроме времени нету, т.е. остальная память часов не юзается, а значит заменить драйвер просто.
Mick дизасмил ПрофПЗУ и вроде наковырял там все дрова, и на мой непрофессиональный взгляд заменить драйвер часов там просто. И останутся на Спеке токо одни часы.
БК-0010, ты будешь патчить провпэ под новые часики? я нет :) я на глюк подписался и то в ущерб другим заботам...
БК-0010, унифицировать-то оно хорошо... но! сомнительное это мероприятие, корячить профпэ...
Лас, он имеет в виду, чтоб D4 1FFD был равен 0.
Только смысл какой в этом?размер диска 512кб?
---------- Post added at 19:55 ---------- Previous post was at 19:54 ----------
даже нет... 384кб...
Обновил 1 и 2-й посты. Добавил последнюю(пока) версию "KAY Service ROM" от Дмитрия. Указал ссылки на правленные: прошивку ЛАСа 2002 года и актуальные прошивки для контроллера PS/2 клавы caro.
По поводу "KAY Service ROM" от Дмитрия.
Несколько замечаний и предложений.
Дмитрий наверное в курсе, что сервис-ром можно включать программно (бит D3 порта #1ffd).
Но вот эта конструкция в прошивке Дмитрия:
Код с адреса 0bh:
убивает всякую надежду вызвать сервис-ром программно.Код:xor a
out (#fe),a
ld bc,#1ffd
out (c),a
1. Зачем обнулять 1ffd? По ресету он уже обнулен, если не ошибаюсь.
Из за этого обнуления невозможен программный запуск прошивки сервис-рома с помощью
так как там вы обнуляете #1ffd и мы в процессе выполнения программы в СЕРВИС-ПЗУ вместо сервис-рома вылетаем в 128 sos.Код:ld bc,#7ffd
xor a
out (c),a
ld b,#1f
ld a,8
out (c),a
jp 0
2. Если необходимо при входе в сервис-ром жестко задать состояние порта #1ffd, то сделать это можно вот так:
Таким образом будет возможен переход в сервис ром при СБРОСЕ с нажатым Caps Shift, например, из моей прошивки 2002.Код:ld bc,#1ffd
ld a,#fe
in a,(#fe)
bit 0,a ;проверяем нажатие Caps Shift
ld a,8
jr z,$+3 ;если C.S нажат - то оставляем включенной пзу Сервис-ром
xor a ;если не нажат - то обнуляем #1ffd
out (c),a
P.S. может быть я что-то напутал с назначением битов порта 1ffd, за давностию лет многое забылось, но общая претензия именно такая.
Лас, пожалуй вместо 0 лучше будет просто заслать туда 8 и все?
Три варианта:
1. Не трогать при инициализации порт #1ffd (нужно уточнить состояние порта по ресету, я не помню)
2. Заслать туда 8
3. Заслать 8, если нажат капс шифт.
Тогда просто не трогать порт:
Берем и патчим прошивку Дмитрия:
Обнуляем байт со смещением 12h.
Да, конечно, проверять надо будет только 5 младших бит, тоесть 0Ah, после маски 1Fh.Цитата:
Сообщение от ZEK
Поправил в исходнике.
Я тут поковырял более пристально прошивку Дмитрия и пришел к выводу, что, действительно, при инициализации сервис-рома оптимальным вариантом будет вариант, когда состояние порта 1ffd не меняется вообще (только при инициализации!). Без всяких проверок на нажатие капс шифт.
После инициализации прошивка переносится в ОЗУ и состояние 1ffd там далее устанавливается в необходимое. Поэтому - да, просто пропатчить прошивку, как указано тут или ждать авторской редакции. :)
Лас, сейчас поправлю, хотя думаю уж лучше бы ld a,8: out (c),a... Кроме того... в глюке есть хоткеи по сбросу CS - выход в SOS128 .... :) На что менять будем или уберем нафиг??? А то получим вечный цикл, пока на угад куда-нить вывалимся при отпускании CS.
Нет, не лучше бы out (1ffd),8.
Попробую аргументировать детально и занудно:
Я же писал, что программы, которые могут вызывать программно сервис-ром, сами устанавливают бит D3 порта 1ffd, поэтому просто в процедуре ИНИЦИАЛИЗАЦИИ программы в пзу не нужно менять состояние этого порта.
А по поводу опроса Caps Shift при старте сервис-прошивки и в зависимости от состояния "нажато/не нажато" устанавливать порт 1ffd, как я предлагал выше - это тоже неверный ход, так как, действительно, в неглюке задействована эта клавиша.
Поэтому повторюсь: просто не меняй состояние порта 1ffd ПРИ СТАРТЕ прошивки.
Не посылай туда ни ноль, ни 8, ни что либо еще.
Когда программа неглюка распакуется в ОЗУ и начнет работать там, тогда нам не важно состояние порта 1ffd, и можно засылать туда необходимые значения, что, кстати, и делается.
Вот, смотри:
1. Если мы приходим в сервис-пзу по ресету (PC=0): состояние порта 1ffd уже определено (ресетом), =0, и тем не менее мы в сервис-пзу (перемычка на плате) => не обязательно задавать состояние #1ffd
2. Если мы приходим в сервис-пзу из какой-либо программы, вызвавшей его, то состояние бита D3 порта 1ffd тоже определено - он УЖЕ установлен в 1 вызвавшей программой => не обязательно задавать состояние #1ffd
3. По привязке к капсу. Если мы приходим в сервис-ром из подпространства и не знаем состояние бита D3 1ffd, и думаем, что лучше нам в программе сервис-пзу задать определенное состояние порта, привязавшись к Caps Shift, например. Не имеет смысл этого делать, так как мы уже в сервис-пзу и уже там работаем, а установив состояние порта #1ffd=0 по клавише, после этого можем внезапно оказаться не в сервис-пзу, если перемычка на плате в обычном положении. К тому же, насколько я понял, Caps уже используется в неглюке при ресете, для быстрого выхода в 128 sos.
Неужели этих доводов мало,чтобы убедиться, что при старте прошивки не нужно вообще писать что-либо в порт 1ffd?
Код:000b xor a
000c out (#fe),a
000e ld bc,#1ffd
0011 out (c),a ;<--- just kill this
дык уже давно начали корячить, и контрольную сумму отключили
это если считать A16'=D4 1FFD, но лучше считать для KAY&Scorpion A16'=D7 7FFD, а A17'=D4 1FFD, такая перестановка исключит проблемы с 8й страницей на новых компьютерах имеющих 1Мб и юзающих Проф ПЗУ.
Ребята, машина отличейшая. Но, обратите внимание на ZX Pentevo. Это не реклама, это реалльное то, под что делалось и, думаю, будет делаться основной софт. Под что делались последние программы? Под Пентагон. Сам грешен. А Пентево- полнейший его аналог.
Это почти скрытая реклама :v2_dizzy_punk: :) Программы для Эвы пишут в основном сами NedoPC team Вот надоест савелию что то писать(например творческий кризис как у AAA) и все поддержка закончилась. А в основном демки затачиваются только под Пентагон, коих еще много. Так что в этом мире все относительно. Компьютер прежде всего отмечается оригинальным софтом в большом количестве, как например ATM.
Да и если что то хочется людям творить, пусть ковыряются с тем что им интересно. :)
Скоро я присоеденюсь к "мегатестерам кая" :) осталось допаять "вырви глаз" вга-конвертер :)
Версия прошивки 0.4 для встроенного в KAY1024
контроллера клавиатуры.
Работа IBM-клавиатуры в режиме Scan Code 2.
Должны нормально заработать через переходник USB-клавиатуры,
в которых предусмотрено автоматическое переключение на PS/2,
но не реализована работа в режиме Scan Code 3.
KBD4_M48.HEX - для ATMega48/88/168/328
KBD4_M8.HEX - для ATMega8
Жду результатов тестирования.
caro, а eeprom уже поддерживается?
Нет, только в режиме Scan Code 2, который используется во всех IBM-ских клавиатурах по умолчанию.
Была у меня в начале идея проверять при инициализации, может ли клавиатура работать в режиме Scan Code 3,
и в зависимости от этого работать либо в старом режиме 3, либо оставаться в режиме 2.
Но какой в этом смысл, кроме сохранения старой таблицы раскладки клавиатуры, которую я за пол-часа переделал под Scan Code 2.
Тем более, что это потребует дополнительно 256 байт для таблицы перекодировки из режима 2 в режим 3.
---------- Post added at 11:00 ---------- Previous post was at 10:59 ----------
Как только выяснится, что новая прошивка работает, добавлю работу с EEPROM.
Камиль, большое спасибо!!!
Вечерком обязательно проверю со своей slim-клавой. Ваша заработала?
Вопрос-просьба - можно ли на какую-нить F-клавишу(или комбинацию с любым из Shift'ов) повесить генерацию длинного сигнала WAIT - для "заморозки" программы?
А как быть, когда нужен просто NMI, например, для работы нек. "сервисных" программ, например, мониторов-отладчиков? Или "нажатие" MAGIC'а будет нормально отрабатывать?
Да, моя заработала.Цитата:
Сообщение от Alex_NEMO
Для этого я обычно задействую клавишу PAUSE/BREAK.Цитата:
Сообщение от Alex_NEMO
Её нажатие и сейчас в программе обрабатывается, но /WAIT пока не выдается.
В следующей версии обязательно вставлю. Нажатие клавиши PAUSE/BREAK по первому же обращению к порту клавиатуры будет останавливать Z80 сигналом /WAIT.
Для продолжения работы надо будет нажать любую клавишу.
Сейчас на выходе MAGIC при нажатии клавиши F12 вырабатывается импульс низкого уровня длительностью 10 мсек.Цитата:
Сообщение от Alex_NEMO
Попробуй подать его на соответствующий вход FDD-контроллера.
caro, НЕГлюк имеет привычку при изменении режима (кнопочку нажали) сразу писать в RTC(уже и в EEPROM), а EEPROM имеет конечное количество циклов перезаписи, наверное стоит его отучить от этого?
Не меньше 100 тысяч циклов перезаписи.Цитата:
Сообщение от Дмитрий
А как часто может изменяться режим?
caro, я уже пофиксил эту привычку глюка :) теперь сохранение в EEPROM происходит через кнопку "E" или при запуске какой-либо программы. Это касается только EEPROM, в RTC, при их наличии, глюк пишет прямиком.
В общем новая версия. Изменения:
Так же учтено предложение Лас-а, не трогать порт h1FFD из ПЗУ.Цитата:
services_kay v.0.1d
+ добавил драйвер eeprom, теперь при наличии контроллера PS/2
клавиатуры Caro, можно использовать внутреннюю память МК как
энергонезависимую, т.е. хранить в ней настройки HEGLUK.
При инициализации глюка, производится детект GlukRTC, и eeprom
на порту hFE, приоритет у GlukRTC больший.
* Переделал работу драйвера rtc/eeprom, в виду определенного числа
циклов перезаписи eeprom, при работе с eeprom в памяти
организовывается буфер в 256 байт, в котором производятся текущие
манипуляции (чтение/запись), по команде пользователя (кн.E), либо
при запуске какой-нить программы (если включен Autosave SetUP) -
изменения буфера записываются в eeprom. Работа с RTC ведется в
прежнем режиме, т.е. изменения записываются сразу.
+ Добавлен пункт Autosave SetUP, который отвечает за автосохранение
настроек глюка в eeprom при запуске какой-нить программы. Настройка
хранится в eeprom/rtc в 18м байте, бит 0.
* Пересмотрел горячие кнопки, теперь E - сохранение настроек в eeprom,
S (с капсом) - режим автосохранения настроек вкл/выкл, Y - выбор
буквы вирт. диска.
Версия обкатана на эмуле ZXMAK, который ZEK пропатчил на предмет поддержки обмена данными с EEPROM-памятью через порт hFE, по методу Caro.
Разряд D1 порта 1FFD управляет блокировкой 128режима (можно одним проводком проброс сделать). Еще из бонусов, прошивка должна работать без переделок на Pentagon 1024SL v1.4