Времянки UnrealSpeccy для KAY

Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

krt17 писал(а):
Про плавающий инт немного не ясно, конец да плавающий но начало то в любом случае по m1 его запускай или так подавай, проц же все равно закончит текущую команду? Или при таком раскладе пропустит и только на следующей будет прерывание?
При приходе первого /M1 сигнал /INT перейдет из 1 в 0 (паттерн 1001 выдвинется из сдвигового регистра D53, в регистре будет 0011 ) (т.е. на при обработке этого M1 инта не произойдет), /INT будет проанализирован только на следующей команде (когда возникнет очередной /M1). Еще надо смотреть датошит на Z80 на каком такте там сигнал /INT реально анализируется, но как я помню на границах команд.Отредактировано deathsoft (2016-12-12 18:27:25)
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

В текущем унриале без доработок на INT кая будет не настроится, т.к. надо учитывать M1 при генерации /INT.
Гость

Сообщение Гость »

deathsoft писал(а):
Еще надо смотреть датошит на Z80 на каком такте там сигнал /INT реально анализируется, но как я помню на границах команд.
А в анриле на вскидку не помнишь как сделано? Насколько я понимаю в 0 такте уже сработает?

все, понял.Отредактировано krt17 (2016-12-12 17:16:06)
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

krt17 писал(а):
А в анриле на вскидку не помнишь как сделано? Насколько я понимаю в 0 такте уже сработает?
В унрале естественно INT сработает на границе команды, как начнется новая команда так INT и захватится.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Вот цитата из датошита:

Interrupt Request/Acknowledge Cycle
Figure 9 shows the timing associated with an interrupt cycle. The CPU samples the interrupt
signal (INT) with the rising edge of the final clock at the end of any instruction.

Сигнал INT опрашивается по возрастающему фронту последнего такта каждой инструкции.

http://zilog.com/docs/z80/um0080.pdf (стр. 26)
Гость

Сообщение Гость »

Во может попробовать быстрофикс, на 0 такте кадра не генерировать? Ну ет конечно хозяин барин.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Привязка сигнала INT к M1 похоже делает аппаратное выравнивание на 4 такта, т.е. делаем ei / halt, halt постоянно сам себя в цикле читает, а сигнал прерывания выставляется только по M1 (на границе инструкции) и такого как на пентагоне, что INT пришел на произвольном такте 0..3 быть не может, на кае инт всегда придет на 4м такте (когда halt по 4 такта намотает полный кадр из 69888 тактов), сначала придет VSYNC на произвольном такте, а потом уже синхронизованный с M1 INT.
Гость

Сообщение Гость »

deathsoft писал(а):
Привязка сигнала INT к M1 похоже делает аппаратное выравнивание на 4 такта,
Без вейта абсолютно бесполезно же, кадровая то один фиг 69888, а то что инт только в начале команды оно нафиг не нужно. В этом смысле ULA с зажимом клока круче. Подумал игнор 0 наверное тоже не спасет.
Аватара пользователя
Лас
Сообщения: 636
Зарегистрирован: 31 июл 2016, 00:00
Откуда: пос. Полярный, ЯНАО
Контактная информация:

Сообщение Лас »

deathsoft писал(а):
Привязка сигнала INT к M1 похоже делает аппаратное выравнивание на 4 такта, т.е. делаем ei / halt, halt постоянно сам себя в цикле читает, а сигнал прерывания выставляется только по M1 (на границе инструкции) и такого как на пентагоне, что INT пришел на произвольном такте 0..3 быть не может, на кае инт всегда придет на 4м такте (когда halt по 4 такта намотает полный кадр из 69888 тактов), сначала придет VSYNC на произвольном такте, а потом уже синхронизованный с M1 INT.
Да, точно! Помню, еще удивлялся, что ничего выравнивать не надо, удобно!
Ностальгирующий рукожоп
Гость

Сообщение Гость »

Выравнивать не надо потому что 4т бордер, а не эта хрень с интом.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

В унриале надо переделывать обработку подсчета тактов и вывода на экран. Сейчас нулевым тактом считается такт прихода прерывания, вместо того чтобы отсчет делался от VSYNC и отдельным параметром задавался бы INT_POS - позиция прерывания в тактах относительно VSYNC (там же можно было бы и галку для M1 сделать для случая типа KAY).

В обычных схемах типа ленинграда1, скорпиона, пентагона и подобных VSYNC и INT с точностью до фазы сигнала совпадают, в кае же INT существенно отличается от VSYNC, т.к. сделан через сдвиговый регистр паттерн в котором сдвигается по M1.

Вот как то так.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Интересно в других эмулях то кай правильно эмулируется? Смотрел zxmak2 там кая вообще нету.
Аватара пользователя
Лас
Сообщения: 636
Зарегистрирован: 31 июл 2016, 00:00
Откуда: пос. Полярный, ЯНАО
Контактная информация:

Сообщение Лас »

krt17 писал(а):
Выравнивать не надо потому что 4т бордер, а не эта хрень с интом.
Да? Ну, наверное... В подобной бордюрной демке в Скорпионе тоже особо не запаривался с выравниванием Изображение Думал, так и надо )
Наверное, все дело в бордюре 4 тактовом,и в скорпионе, кажется, все команды "четнотактовые".Отредактировано Лас (2016-12-12 19:00:02)
Ностальгирующий рукожоп
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Лас писал(а):
Наверное, все дело в бордюре 4 тактовом,и в скорпионе, кажется, все команды "четнотактовые".
да, в скорпионе и 4T бордер и команды все вырваниваются на четное число тактов.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Скорпионовская работает без проблем в унриале, бордюр весь четко отрисовывается без смещения.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Попробовал демку для кая в Z80Stealth http://z80.emu-russia.net/ с бордером тоже каша, еще хуже чем в унриале.
Аватара пользователя
Лас
Сообщения: 636
Зарегистрирован: 31 июл 2016, 00:00
Откуда: пос. Полярный, ЯНАО
Контактная информация:

Сообщение Лас »

deathsoft писал(а):
Получил параметры развертки KAY1024 (моделированием схемы, кроме положения /INT)

Изображение
Для наглядности - картинка с времянками пентагона (для KAY1024 числа будут другие, они приведены ниже):

Горизонтальная развертка:
sync line: 16тактов
blank line: 32 такта
левый бордюр: 32такта
экран:128 тактов
правый бордюр: 32такта
(общая длина строки 32+32+128+32=224 такта)

Вертикальная развертка:
frame sync: 16 строк
верхний бордюр: 56 строк
экран: 192 строки
нижний бордюр: 48 строк
(общий размер экрана 16+56+192+48=312 строк)

Общее число тактов в экране 224*312=69888

С интом все сложнее, патерн инта 1001 грузится в сдвиговый регистр по сигналу кадровой синхронизации /KC, но далее этот патерн сдвигается сигналом /M1 от процессора, и /INT получается плавающий (как AAA писал про феникс). Причем от /INT до следующего /INT число тактов будет переменное.

Отредактировано deathsoft (Сегодня 17:54:32)
Правильно ли я понял, что до PAPER получается не 16132 T (krt17), а 56*224+32 = 12576 T?
Ностальгирующий рукожоп
Гость

Сообщение Гость »

Ну во первых не 56 а 56+16, а во вторых для меня тоже было странным что не нужно прибавлять левый бордер. Это возможно если кадровый не сразу после строчного, а после левого бордера, тут только датасофт подскажет по схеме.Отредактировано krt17 (2016-12-12 19:37:57)
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Левый бордер прибавлять нужно.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

krt17 писал(а):
датасофт
датасофт - это говнофорумный олень-модератор, а у меня несколько другой ник.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

start of paper должен быть сумма всего того что идет от начала синхроимпульса до первого пикселя на paper (это строки внутри синхроимпульса 16 штук, верхний бордер 56 штук)*224 + левый бордер. Но поскольку в унриале кадр завязан не на vsync на на int то в случае кая и скорпиона получится хуета.
Гость

Сообщение Гость »

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

Сообщение Гость »

deathsoft писал(а):
датасофт - это говнофорумный олень-модератор, а у меня несколько другой ник.
Да каюсь, без попутал. Поэтому у меня ник из 3 букв, я его смог запомнить.
Аватара пользователя
Лас
Сообщения: 636
Зарегистрирован: 31 июл 2016, 00:00
Откуда: пос. Полярный, ЯНАО
Контактная информация:

Сообщение Лас »

krt17 писал(а):
Ну во первых не 56 а 56+16, а во вторых для меня тоже было странным что не нужно прибавлять левый бордер. Это возможно если кадровый не сразу после строчного, а после левого бордера, тут только датасофт подскажет по схеме.

Отредактировано krt17 (Сегодня 22:37:57)
Спасибо! А я думаю, чего-то не хватает, а это, оказывается 16 строк не хватает Изображение.
Так. А еще в UnrealSpeccy, насколько смог понять, турбо не переключается (в Кае 2-й бит 1ffd)?
Ностальгирующий рукожоп
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Изображение
Ну и таки ннемо всех наебывал на счет безвэйтовости:
(это фрагмент схемы kay256, тут нет турбы), в kay1024 все ровно то же самое, только сделано на других элементах.
В ПЗУ - да кай безвэйтовый, а в ОЗУ - вэйтовый, по крайней мере когда H1 и /M1 оба нули.
Аватара пользователя
Лас
Сообщения: 636
Зарегистрирован: 31 июл 2016, 00:00
Откуда: пос. Полярный, ЯНАО
Контактная информация:

Сообщение Лас »

deathsoft писал(а):
start of paper должен быть сумма всего того что идет от начала синхроимпульса до первого пикселя на paper (это строки внутри синхроимпульса 16 штук, верхний бордер 56 штук)*224 + левый бордер. Но поскольку в унриале кадр завязан не на vsync на на int то в случае кая и скорпиона получится хуета.
Нахера тогда галка VSINC в меню анрила?
Ностальгирующий рукожоп
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Лас писал(а):
Так. А еще в UnrealSpeccy, насколько смог понять, турбо не переключается (в Кае 2-й бит 1ffd)?
Турба в унриале не эмулируется вообще (ни для каких компов). Если надо чтобы работало быстрее, можно число тактов в кадре увеличить в нужное число раз.
Гость

Сообщение Гость »

deathsoft писал(а):
Но поскольку в унриале кадр завязан не на vsync на на int то в случае кая и скорпиона получится хуета.
Подожди вроде же КС по схеме, как ты говорил, да с непонятным выравниванием но не на столько же. Наверное нужен таки живой кай и спецпрограмма, так проще будет чем всю схему лопатить.
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

Лас писал(а):
Нахера тогда галка VSINC в меню анрила?
Это не то, это вертикальная синхронизация с монитором на PC (если монитор 50гц поддерживает, чтобы все было фреймово).Отредактировано deathsoft (2016-12-12 19:54:17)
Аватара пользователя
deathsoft
Сообщения: 167
Зарегистрирован: 22 окт 2016, 00:00

Сообщение deathsoft »

krt17 писал(а):
Подожди вроде же КС по схеме, как ты говорил, да с непонятным выравниванием но не на столько же. Наверное нужен таки живой кай и спецпрограмма, так проще будет чем всю схему лопатить.
Развертка в эмуляторе вообще не должна никак зависеть от инта, развертка управляется сигналами кадровой и строчной синхронизации, а уж какая там позиция инта относительно синхроимпульса - дело десятое, растр не интом формируется, по инту обработчик прерывания пишет в экран и на бордер, но вывод растра то на реальном спектруме связан только с сигналами синхронизации строк и кадров, а не с интом.
Ответить