При приходе первого /M1 сигнал /INT перейдет из 1 в 0 (паттерн 1001 выдвинется из сдвигового регистра D53, в регистре будет 0011 ) (т.е. на при обработке этого M1 инта не произойдет), /INT будет проанализирован только на следующей команде (когда возникнет очередной /M1). Еще надо смотреть датошит на Z80 на каком такте там сигнал /INT реально анализируется, но как я помню на границах команд.Отредактировано deathsoft (2016-12-12 18:27:25)krt17 писал(а):
Про плавающий инт немного не ясно, конец да плавающий но начало то в любом случае по m1 его запускай или так подавай, проц же все равно закончит текущую команду? Или при таком раскладе пропустит и только на следующей будет прерывание?
Времянки UnrealSpeccy для KAY
Вот цитата из датошита:
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)
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)
Привязка сигнала INT к M1 похоже делает аппаратное выравнивание на 4 такта, т.е. делаем ei / halt, halt постоянно сам себя в цикле читает, а сигнал прерывания выставляется только по M1 (на границе инструкции) и такого как на пентагоне, что INT пришел на произвольном такте 0..3 быть не может, на кае инт всегда придет на 4м такте (когда halt по 4 такта намотает полный кадр из 69888 тактов), сначала придет VSYNC на произвольном такте, а потом уже синхронизованный с M1 INT.
- Лас
- Сообщения: 636
- Зарегистрирован: 31 июл 2016, 00:00
- Откуда: пос. Полярный, ЯНАО
- Контактная информация:
Да, точно! Помню, еще удивлялся, что ничего выравнивать не надо, удобно!deathsoft писал(а):
Привязка сигнала INT к M1 похоже делает аппаратное выравнивание на 4 такта, т.е. делаем ei / halt, halt постоянно сам себя в цикле читает, а сигнал прерывания выставляется только по M1 (на границе инструкции) и такого как на пентагоне, что INT пришел на произвольном такте 0..3 быть не может, на кае инт всегда придет на 4м такте (когда halt по 4 такта намотает полный кадр из 69888 тактов), сначала придет VSYNC на произвольном такте, а потом уже синхронизованный с M1 INT.
Ностальгирующий рукожоп
В унриале надо переделывать обработку подсчета тактов и вывода на экран. Сейчас нулевым тактом считается такт прихода прерывания, вместо того чтобы отсчет делался от VSYNC и отдельным параметром задавался бы INT_POS - позиция прерывания в тактах относительно VSYNC (там же можно было бы и галку для M1 сделать для случая типа KAY).
В обычных схемах типа ленинграда1, скорпиона, пентагона и подобных VSYNC и INT с точностью до фазы сигнала совпадают, в кае же INT существенно отличается от VSYNC, т.к. сделан через сдвиговый регистр паттерн в котором сдвигается по M1.
Вот как то так.
В обычных схемах типа ленинграда1, скорпиона, пентагона и подобных VSYNC и INT с точностью до фазы сигнала совпадают, в кае же INT существенно отличается от VSYNC, т.к. сделан через сдвиговый регистр паттерн в котором сдвигается по M1.
Вот как то так.
- Лас
- Сообщения: 636
- Зарегистрирован: 31 июл 2016, 00:00
- Откуда: пос. Полярный, ЯНАО
- Контактная информация:
Да? Ну, наверное... В подобной бордюрной демке в Скорпионе тоже особо не запаривался с выравниванием Думал, так и надо )krt17 писал(а):
Выравнивать не надо потому что 4т бордер, а не эта хрень с интом.
Наверное, все дело в бордюре 4 тактовом,и в скорпионе, кажется, все команды "четнотактовые".Отредактировано Лас (2016-12-12 19:00:02)
Ностальгирующий рукожоп
Попробовал демку для кая в Z80Stealth http://z80.emu-russia.net/ с бордером тоже каша, еще хуже чем в унриале.
- Лас
- Сообщения: 636
- Зарегистрирован: 31 июл 2016, 00:00
- Откуда: пос. Полярный, ЯНАО
- Контактная информация:
Правильно ли я понял, что до PAPER получается не 16132 T (krt17), а 56*224+32 = 12576 T?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)
Ностальгирующий рукожоп
- Лас
- Сообщения: 636
- Зарегистрирован: 31 июл 2016, 00:00
- Откуда: пос. Полярный, ЯНАО
- Контактная информация:
Спасибо! А я думаю, чего-то не хватает, а это, оказывается 16 строк не хватает .krt17 писал(а):
Ну во первых не 56 а 56+16, а во вторых для меня тоже было странным что не нужно прибавлять левый бордер. Это возможно если кадровый не сразу после строчного, а после левого бордера, тут только датасофт подскажет по схеме.
Отредактировано krt17 (Сегодня 22:37:57)
Так. А еще в UnrealSpeccy, насколько смог понять, турбо не переключается (в Кае 2-й бит 1ffd)?
Ностальгирующий рукожоп
- Лас
- Сообщения: 636
- Зарегистрирован: 31 июл 2016, 00:00
- Откуда: пос. Полярный, ЯНАО
- Контактная информация:
Нахера тогда галка VSINC в меню анрила?deathsoft писал(а):
start of paper должен быть сумма всего того что идет от начала синхроимпульса до первого пикселя на paper (это строки внутри синхроимпульса 16 штук, верхний бордер 56 штук)*224 + левый бордер. Но поскольку в унриале кадр завязан не на vsync на на int то в случае кая и скорпиона получится хуета.
Ностальгирующий рукожоп
Подожди вроде же КС по схеме, как ты говорил, да с непонятным выравниванием но не на столько же. Наверное нужен таки живой кай и спецпрограмма, так проще будет чем всю схему лопатить.deathsoft писал(а):
Но поскольку в унриале кадр завязан не на vsync на на int то в случае кая и скорпиона получится хуета.
Развертка в эмуляторе вообще не должна никак зависеть от инта, развертка управляется сигналами кадровой и строчной синхронизации, а уж какая там позиция инта относительно синхроимпульса - дело десятое, растр не интом формируется, по инту обработчик прерывания пишет в экран и на бордер, но вывод растра то на реальном спектруме связан только с сигналами синхронизации строк и кадров, а не с интом.krt17 писал(а):
Подожди вроде же КС по схеме, как ты говорил, да с непонятным выравниванием но не на столько же. Наверное нужен таки живой кай и спецпрограмма, так проще будет чем всю схему лопатить.