31

krt17 сказал:

Про плавающий инт немного не ясно, конец да плавающий но начало то в любом случае по m1 его запускай или так подавай, проц же все равно закончит текущую команду? Или при таком раскладе пропустит и только на следующей будет прерывание?

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

32

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

33

deathsoft сказал:

Еще надо смотреть датошит на Z80 на каком такте там сигнал /INT реально анализируется, но как я помню на границах команд.

А в анриле на вскидку не помнишь как сделано? Насколько я понимаю в 0 такте уже сработает?

все, понял.Отредактировано krt17 (2016-12-12 17:16:06)

34

krt17 сказал:

А в анриле на вскидку не помнишь как сделано? Насколько я понимаю в 0 такте уже сработает?

В унрале естественно INT сработает на границе команды, как начнется новая команда так INT и захватится.

35

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

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)

36

Во может попробовать быстрофикс, на 0 такте кадра не генерировать? Ну ет конечно хозяин барин.

37

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

38

deathsoft сказал:

Привязка сигнала INT к M1 похоже делает аппаратное выравнивание на 4 такта,

Без вейта абсолютно бесполезно же, кадровая то один фиг 69888, а то что инт только в начале команды оно нафиг не нужно. В этом смысле ULA с зажимом клока круче. Подумал игнор 0 наверное тоже не спасет.

39

deathsoft сказал:

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

Да, точно! Помню, еще удивлялся, что ничего выравнивать не надо, удобно!

Ждун с 20 ноября 2016 года: ZX Spectrum 128HQ Laptop - 2 шт..
Один получил через 2 года после заказа, жду второй экземпляр.

40

Выравнивать не надо потому что 4т бордер, а не эта хрень с интом.

41

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

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

Вот как то так.

42

Интересно в других эмулях то кай правильно эмулируется? Смотрел zxmak2 там кая вообще нету.

43

krt17 сказал:

Выравнивать не надо потому что 4т бордер, а не эта хрень с интом.

Да? Ну, наверное... В подобной бордюрной демке в Скорпионе тоже особо не запаривался с выравниванием http://zxdemos.ru/img/posts/posts_20/22438.gif Думал, так и надо )
Наверное, все дело в бордюре 4 тактовом,и в скорпионе, кажется, все команды "четнотактовые".Отредактировано Лас (2016-12-12 19:00:02)

Ждун с 20 ноября 2016 года: ZX Spectrum 128HQ Laptop - 2 шт..
Один получил через 2 года после заказа, жду второй экземпляр.

44

Лас сказал:

Наверное, все дело в бордюре 4 тактовом,и в скорпионе, кажется, все команды "четнотактовые".

да, в скорпионе и 4T бордер и команды все вырваниваются на четное число тактов.

45

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

46

Попробовал демку для кая в Z80Stealth http://z80.emu-russia.net/ с бордером тоже каша, еще хуже чем в унриале.

47

deathsoft сказал:

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

http://zxdemos.ru/img/posts/posts_20/22438_2.gif
Для наглядности - картинка с времянками пентагона (для 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?

Ждун с 20 ноября 2016 года: ZX Spectrum 128HQ Laptop - 2 шт..
Один получил через 2 года после заказа, жду второй экземпляр.

48

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

49

Левый бордер прибавлять нужно.

50

krt17 сказал:

датасофт

датасофт - это говнофорумный олень-модератор, а у меня несколько другой ник.

51

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

52

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

53

deathsoft сказал:

датасофт - это говнофорумный олень-модератор, а у меня несколько другой ник.

Да каюсь, без попутал. Поэтому у меня ник из 3 букв, я его смог запомнить.

54

krt17 сказал:

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

Отредактировано krt17 (Сегодня 22:37:57)

Спасибо! А я думаю, чего-то не хватает, а это, оказывается 16 строк не хватает http://zxdemos.ru/img/posts/posts_20/22438.gif.
Так. А еще в UnrealSpeccy, насколько смог понять, турбо не переключается (в Кае 2-й бит 1ffd)?

Ждун с 20 ноября 2016 года: ZX Spectrum 128HQ Laptop - 2 шт..
Один получил через 2 года после заказа, жду второй экземпляр.

55

http://zxdemos.ru/img/posts/posts_20/22438.png
Ну и таки ннемо всех наебывал на счет безвэйтовости:
(это фрагмент схемы kay256, тут нет турбы), в kay1024 все ровно то же самое, только сделано на других элементах.
В ПЗУ - да кай безвэйтовый, а в ОЗУ - вэйтовый, по крайней мере когда H1 и /M1 оба нули.

56

deathsoft сказал:

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

Нахера тогда галка VSINC в меню анрила?

Ждун с 20 ноября 2016 года: ZX Spectrum 128HQ Laptop - 2 шт..
Один получил через 2 года после заказа, жду второй экземпляр.

57

Лас сказал:

Так. А еще в UnrealSpeccy, насколько смог понять, турбо не переключается (в Кае 2-й бит 1ffd)?

Турба в унриале не эмулируется вообще (ни для каких компов). Если надо чтобы работало быстрее, можно число тактов в кадре увеличить в нужное число раз.

58

deathsoft сказал:

Но поскольку в унриале кадр завязан не на vsync на на int то в случае кая и скорпиона получится хуета.

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

59

Лас сказал:

Нахера тогда галка VSINC в меню анрила?

Это не то, это вертикальная синхронизация с монитором на PC (если монитор 50гц поддерживает, чтобы все было фреймово).Отредактировано deathsoft (2016-12-12 19:54:17)

60

krt17 сказал:

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

Развертка в эмуляторе вообще не должна никак зависеть от инта, развертка управляется сигналами кадровой и строчной синхронизации, а уж какая там позиция инта относительно синхроимпульса - дело десятое, растр не интом формируется, по инту обработчик прерывания пишет в экран и на бордер, но вывод растра то на реальном спектруме связан только с сигналами синхронизации строк и кадров, а не с интом.