Вход

Просмотр полной версии : Прерывания IM2 в Специалисте на КР580



barsik
09.03.2018, 07:51
При КР580 основной проблемой при введении прерываний в машину, где они изначально не предусмотрены, является отсутствие в КР580 прерывания в MODE 2, т.к без наличия БИС ВН59 нет возможности разместить обработчик прерывания в произвольном месте памяти. Из-за чего приходится использовать резисторы привязки и RST 38.

Этот трюк годится для машин, где ПЗУ стоит с адреса 0, а также годится для CP/M, т.к там область 0038...003A специально зарезервирована для этого. Но увы, во времена Специалиста никто не знал о CP/M, отчего программы работают с адреса 0 и при своей загрузке затирают адрес 0038.

Прерывания в Специалисте полезны для мыши и для вывода одноголосной музыки программно и трёхголосной через ВИ53. При введении прерываний в машину, где они изначально не предусмотрены, выручает режим прерываний 2. Задача в том, чтобы придумать простую схему, как получить IM2 на КР580 аппаратно.

Для обслуживания прерываний в системе КР580 формируется сигнал INTA. ВК28 выдаёт его готовым. Но и без ВК28 цикл INTA для чтения кода прерывания легко фиксируется, т.к при обработке прерывания в слове состояния по стробу SYNC выдаётся бит D0=1. Защёлкнув его в триггере ТМ2, и добавив буфер АП6 можем заставить КР580 считать с шины код CD. Считав код CD процессор, обнаружив, что это код команды CALL, в следующих машинных циклах снова дважды читает память (адрес подпрограммы). Т.о в целом считаются три байта CD,CD,CD, что является кодом команды CALL CDCD.

А адрес CDCD это в Специалисте область базового ПЗУ, куда можно навсегда прошить команду JMP в область ОЗУ чуть ниже RAMTOP, куда прикладные программы точно не лезут. Т.к в коде СD всего 3 нуля, то если часть шины данных привязать на +5В, то для выдачи кода CD, вместо АП6 можно применить более удобные 4-х разрядные буфера ЛН6, ЛП11 или 589 АП16.

Есть и другие варианты введения прерываний не использующие ОЗУ занятое программами.

Во-первых, сделав привязку шины на +5В (чтобы с шины читался код RST 38), по тому же триггеру ТМ2 взведённому в цикле обслуживания прерывания, можно временно включать маленькое ПЗУ с адреса 0 (например кусок в 4 кб из базового ПЗУ C000). Тогда по адресу 0038 окажется содержимое ПЗУ C038, куда и должен быть прошит JMP в системную область ROM-BIOS. Это позволит иметь прерывания в программах, где стек стоит выше адреса 1000H, т.к считав с шины код RST 38, процессор кидает адрес возврата в стек. Но увы, в CP/M стек ставится на адрес 0080, так что теневое ПЗУ с 0 не сработает.

Для борьбы с этим есть более громоздкий вариант также с теневым ПЗУ, но включаемым не сразу, а только после того, как процессор закинет в стек адрес возврата в команде RST. Тогда по выдаче слова состояния в цикле обслуживания прерывания также взводится триггер ТМ2. Процессор читает с шины код RST 38, и перед уходом на адрес 0038 сохраняя адрес возврата, выполняет два цикла записи в память (причём бит D2 слова состояния =1, свидетельствуя о стековой операции).

И только после окончания второй записи в память (по фронту 0->1 сигнала /WR CPU) сигнал начальный пуск (НП) устанавливается в 1, который отключает всё ОЗУ и делает во всём адресном пространстве ПЗУ. Процессор читает из ПЗУ по адресу 0038 код следующей команды JMP в область ПЗУ C000, где программно сбрасывается сигнал включения ПЗУ на всю память и выполняется уход на обработчик прерывания в системном ОЗУ. Т.о отличие этой схемы лишь в том, что сигнал триггера ТМ2 дважды сдвигается фронтом сигнала /WR, отчего теневое ПЗУ включается с задержкой нужной процессору для записи адреса возврата в стек.

Такой вариант требует дополнительного триггера ТМ2 (в качестве счётчика передних фронтов сигнала /WR), но зато позволяет иметь прерывания при любом содержимом указателя стека.

Наличие не использующих ОЗУ 0038...003A прерываний, позволяет встроить прерывания в ROM-BIOS для опроса клавиатуры и счёта времени, аналогично ZX-Spectrum. Особенно это выгодно для Специалиста, потому что у него самая быстрая процедура опроса клавиш среди всех известных в мире 8-ми разрядок с матричной клавиатурой. Т.е опрос клавиатуры 50 раз в секунду не тормознёт прогон программы.

Самый простой аппаратно это вариант с буфером выдающим на шину код CD. Это чисто теоретическая предпосылка, практически я это ещё не проверял. Но как всегда самое главное это наличие оригинальной идеи, а реализацию при желании может сделать каждый.

Препятствием по введению прерываний в Специалист можно считать желание пользователей иметь совместимость со всеми старыми программами. Т.е нельзя ввести в имеющееся ПЗУ опрос клавиш по прерываниям, т.к это нарушит совместимость.

Т.к нет программ использующих прерывания и для прогона имеющихся программ нужен именно ROM-BIOS в ПЗУ совместимый со зверковским загрузчиком и орловским монитором, то пока видится возможным только встроить в ПЗУ загрузчика лишь одну команду JMP на вектор прерывания в системном ОЗУ по адресу CDCD. А опрос клавиш по прерываниям, естественно, откладывается до написания полностью нового несовместимого альтернативного ROM-BIOS для оконного ПЗУ 27256.

К сожалению, я не имею пока собственного эмулятора Специалиста и тем самым лишён возможности модернизировать эмулятор даже под мелкие доработки железа. Это не позволяет разрабатывать ПО использующее эти доработки. А на реальном железе я это отмакетирую не скоро, т.к не люблю возиться с паяльником, хотя без этого не обойтись.

Эмулятор EMU80 поддерживает прерывания 50 ГЦ с обработчиком по RST 38, включаемые битом D7 порта D9. Этого достаточно, чтобы делать программы для вывода музыки с использованием прерываний. А вот драйвер обслуживания мыши с использованием прерываний можно отлаживать только в железе, т.к мышь не эмулируется.

Остаётся вопросом каким образом подключить к Специалисту и РК86 мышь так, чтобы это не создавало проблем тем, у кого мышь отсутствует. Т.е нужен такой интерфейс, чтобы драйвер мыши можно было заменить драйвером для реального джойстика или драйвером джойстика из курсорных клавиш клавиатуры.

zx_
09.03.2018, 15:12
Эмулятор EMU80 поддерживает прерывания 50 ГЦ с обработчиком по RST 38, включаемые битом D7 порта D9. Этого достаточно, чтобы делать программы для вывода музыки с использованием прерываний. А вот драйвер обслуживания мыши с использованием прерываний можно отлаживать только в железе, т.к мышь не эмулируется.

Схемку бы , нарисованную
по отношению к базовой схеме Спеца

barsik
10.03.2018, 13:27
Схемку бы
Нет смысла рисовать неотмакетированную схему-проект. Работоспособной пока можно считать только схему введения прерываний для Z80, т.к это уже проверено в реале. А для КР580 эта схема точно не подойдёт, хотя бы потому, что там INT неинверсный. Грамотно было бы использовать триггер, взводимый по импульсу 50 ГЦ, а сбрасываемый по INTA от ВК28. К сожалению, я с прерываниями на КР580 дела не имел, потому ничего не знаю.

Как только я подключу мышь с помощью ВВ51, то займусь прерываниями, т.к мне прерывания нужны только для мыши. А т.к прерывание только одно, то приходится выбирать - или мышь или прерывания от 50-ти Герц, как в Синклере. А чтобы иметь и то, и то, требуется контроллер прерываний. Так что, чем вызывать прерывания остаётся только выбирать с помощью тумблера или придётся вводить какое-то программное переключение сигнала на входе INT.

Чтобы сохранить прерывания 50 ГЦ и мышь, можно сделать отдельный контроллер на КМОП Z80, который будет (без ВВ51) принимать посылки от мыши, запоминать их и выставлять для процессора флаг готовности в каком-то порту. Тогда благодаря тому, что процессор 50 раз в секунду будет проверять этот флаг, посылки от мыши не будут утрачены и скорость реакции останется высокой. Но это немного сложнее, чем ВВ51 принимающая на скорости 1200 бод посылки от мыши и вызывающая прерывания.

zx_
10.03.2018, 14:36
зачем z80 ?

в Вектор -06ц есть прерывания , по 50 гц

jerri
10.03.2018, 19:44
barsik, а что мешает при старте машины ставить твердое DI и никогда его средствами БИОС не трогать.
биос совершенен его не нужно менять.
отдайте RST#38 тому кому оно нужно.
он сам по адресу #38 поставить свою процедуру.
от вас нужно только DI по ресету и никаких EI

barsik
10.03.2018, 21:15
Отдайте RST#38 тому кому оно нужно.
Он сам по адресу #38 поставит свою процедуру.
От вас нужно только DI по ресету и никаких EI
Во-первых, кому нужно и для чего? Мне без разницы, чего кому-то нужно. Что нужно я решу сам.

Во-вторых, Вы хоть читаете о чём здесь пишут? Речь как раз о том, чтобы не использовать адрес 0038.

В-третьих, если нечего сказать по теме, то лучше молчать, чем невежливо советовать кому-то вообще ничего не делать. Я же не советую Вам ничего не делать.

И если уж у Вас избыток ума, то решите задачу, как подключить мышь в Специалист без прерываний.


BIOS совершенен его не нужно менять
У Вас странные понятия о совершенстве. А менять BIOS можно и даже нужно, сохранив совместимость. BIOS настолько несовершенен, что не напрягаясь, причём при улучшении его параметров, выигрывается полкилобайта объёма.


в Векторе-06Ц есть прерывания 50 Гц
Знаю. И схему я смотрел. Вектор у меня был в 1990. С тех пор схема осталась. Там стоит триггер. По импульсу 50 Гц на входе C триггер взводится, выход триггера - на вход INT КР580. Сброс триггера производится выходом INTE процессора подключенным к входу /R этого триггера.

Но это ничего не меняет. Всё-равно надо макетировать. Думаю, что сработает вариант и без триггера, если подобрать константы RC-цепочки так, чтобы импульс на входе INT длился дольше, чем исполняется самая долгая команда КР580. Т.е та же схема подойдёт, только придётся применить ЛЕ1, т.е схема будет такая.

zx_
10.03.2018, 21:28
какойнить софт для проверки нужен, хоть на бейсике в двух строках

а в мониторе ничего менять не нужно с этой схемой?

barsik
10.03.2018, 22:27
какой-нибудь софт для проверки нужен, хоть на бейсике в двух строках
Как раз вчера получил конфиг для EMU80 с поддержкой прерываний. Причём с ПЗУ 32 кб и ОЗУ до 1 мб. Тесты для ОЗУ и ПЗУ написал, а до прерываний ещё просто не успел добраться.

Потому прямо сейчас, причём истратив всего 3 минуты, написал тест и убедился, что прерывания в эмуляторе EMU80 прекрасно работают. И отключаются аппаратно.

В реале проверить не могу, т.к прерывания ещё не паял, т.к пользуюсь Специалистом с Z80 (с КР580 тоже есть).


а в мониторе ничего менять не нужно с этой схемой?
Всё зависит от того для чего использовать прерывания и что и как аппаратно выдаётся на шину по INTA. Т.е каким образом обслуживаются прерывания - системным контроллером ВН59, что выдаёт 8 команд CALL, 8-ю резисторами, что выдают команду RST 38 или, о чём собственно эта тема, - отдельным буфером, который по INTA выдаёт в шину код CD.

Если речь только о том, чтобы повесить на шину резисторы для RST 38 и в конкретной программе, которая имеет по адресу 0038 свой обработчик прерывания, включить и использовать прерывания, то естественно, без разницы, что в ПЗУ.

Как написано ранее, при желании можно модернизировать подпрограмму опроса клавиш в ПЗУ, сделав как в Синклере, что попутно даёт возможность счёта времени и генерации случайного числа. Для чего в цикле обработки прерывания надо выдавать процессору команду CALL. Что можно сделать или на ВН59 или проще, как я и предложил в начале этой темы. В последнем случае ПЗУ чуть-чуть меняется - вставляются 3 байта по адресу CDCD.

Но это не надо, т.к всё равно при старте старых программ придётся прерывания выключать, т.к старые подпрограммы используют стандартные подпрограммы опроса клавиш.

И предложенный трюк по аппаратной имитации IM2 для КР580 предложен как раз не для этого, а для подключения мыши. Тогда вместо резисторов привязки ставится буфер АП16 и несложная схема для формирования сигнала INTA (при ВК28 этот сигнал уже есть).

Во вложении конфиг для EMU80 в котором есть прерывания, с аппаратным включением. Потому до лампочки есть в программах команды EI или нет. Они не повредят и зависа не будет. Для того и введен аппаратный запрет прохождение импульсов 50 Гц на вход INT.

Также, как указано выше, этот конфиг даёт Вам 1 мегабайт ОЗУ и 32 кб ПЗУ. Кроме того даёт ROM-диск (доп.ППА на FE00), как в ОРИОНЕ и оба типа КНГМД - на ВГ93 (от ОРИОНА) и РК-КНГМД от РК86. Для полноты не хватает только поддержки винчестера, мыши и возможно ВИ53 или AY-8912.

jerri
11.03.2018, 01:01
barsik, ага понятно.

опять экономим на спичках и вот тут же сразу не сходя с места имеем геморой


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

чем вам не нравится адрес 0038?

у меня кстати есть решение вопроса с вашей мышью но вам оно не понравится.
спичек много уйдет.

- - - Добавлено - - -

http://speccy.info/Kempston_Mouse

jerri
12.03.2018, 15:22
barsik, чем вам не нравится rst#38 и DI при старте?

barsik
12.03.2018, 17:47
barsik, чем вам не нравится rst#38 и DI при старте?
Почему не нравится? Нравится и поначалу так и сделаю. Просто возникла красивая идея, я и поделился.

Вариант когда прерывания по RST можно использовать только в конкретной программе, которая грузится на адрес 0000, подставляя свой обработчик прерывания на адрес RST.

А вариант с прерываниями по CALL, т.е с ВН59 (или с его более простой имитацией на буфере) позволяют всегда иметь включённые прерывания при любых прогоняемых программах. Тогда можно на прерываниях подключить и Kempston-Mouse и с клавиатурой избежать потери нажатий. Пригодится, когда выполняется обслуживание линии связи с IBM PC в реальном времени, а с 0 надо загружать другие программы.

Во вложении тест прерываний. Замеряет число тактов CPU между прерываниями. Это позволяет проверить точно ли в эмуляторе реализован период 50 Гц. Для нахождения периода надо умножить число тактов на период клока CPU.

jerri
12.03.2018, 18:41
Почему не нравится? Нравится и поначалу так и сделаю. Просто возникла красивая идея, я и поделился.

Вариант когда прерывания по RST можно использовать только в конкретной программе, которая грузится на адрес 0000, подставляя свой обработчик прерывания на адрес RST.

А вариант с прерываниями по CALL, т.е с ВН59 (или с его более простой имитацией на буфере) позволяют всегда иметь включённые прерывания при любых прогоняемых программах. Тогда можно на прерываниях подключить и Kempston-Mouse и с клавиатурой избежать потери нажатий. Пригодится, когда выполняется обслуживание линии связи с IBM PC в реальном времени, а с 0 надо загружать другие программы.

Во вложении тест прерываний. Замеряет число тактов CPU между прерываниями. Это позволяет проверить точно ли в эмуляторе реализован период 50 Гц. Для нахождения периода надо умножить число тактов на период клока CPU.

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

для использования прерывания должны быть написаны новые программы.
а там уже и адрес #0038 имеет смысл. и прочее

barsik
12.03.2018, 19:20
На данный момент... нет и программ использующих прерывания. Соответственно, чтобы не было проблем, нельзя, использовать старые программы с включенными прерываниями, иначе могут быть неприятности

Нет, не могут. Потому что старые программы Специалиста уже проверены на отсутствие кода DI, так как, если встречается команда DI, то при наличии журнальной схемы 8 цветов, ОЗУ целиком отключается и компьютер улетает.

Так что, если сделать прерывания по CALL (обработчик в области, которую не использует ни одна программа), то при этом не возникнет конфликта ни с одной программой.

Как Вы не поймёте, что именно для того, чтобы не было проблем с старыми программами из-за прерываний и нужен контроллер прерываний, чтобы поиметь прерывания с CALL, а не с RST.

jerri
12.03.2018, 21:14
barsik, что произойдет если в момент забора графики со стека придет прерывание?

- - - Добавлено - - -


Нет, не могут. Потому что старые программы Специалиста уже проверены на отсутствие кода DI, так как, если встречается команда DI, то при наличии журнальной схемы 8 цветов, ОЗУ целиком отключается и компьютер улетает.

Так что, если сделать прерывания по CALL (обработчик в области, которую не использует ни одна программа), то при этом не возникнет конфликта ни с одной программой.

Как Вы не поймёте, что именно для того, чтобы не было проблем с старыми программами из-за прерываний и нужен контроллер прерываний, чтобы поиметь прерывания с CALL, а не с RST.

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

что там такое с DI/EI?

barsik
12.03.2018, 21:36
barsik, что произойдет если в момент забора графики со стека придет прерывание?
Ничего не произойдёт. Данные ведь передаются выше текущей позиции стека, а при CALL или RST по прерыванию будет испорчено 2 байта ниже, где не хранится ничего полезного.


что там такое с DI/EI ?
Да Вы и без того знаете, об этом писалось множество раз. Но повторю.

В Специалисте А.Волкова было всего 4 цвета полученные установкой всего двух 565 РУ3-их на имеющиеся РУ3-тьи вторым этажом. На входы этих двух РУ3-тих подавались два свободных бита с ППА клавиатуры.

Таким образом регистр цвета, из которого цвет автоматически переписывается в ОЗУ, находится внутри ППА. Эти два бита на каждый видеобайт давали 4 цвета для цвета INK, цвет PAPER всегда чёрный.

А в августе 1990 изобретатели Иванов и Медведков решили удвоить часло цветов, напаяв вторым этажом ещё одну РУ3. Но свободных битов в ППА уже не было. Тогда они решили поиметь этот бит в ППА, за счёт того, что бит PC4 освободили от функции формирования сигнала начальный пуск НП. А в качесте сигнала начальный пуск они решили задействовать выход INTE. Для отключения НП, одной из первых команд КР580 выполняет команду EI и ОЗУ включается убирая ПЗУ из всего адресного пространства. Тем самым они освободили PC4 для целей цвета (и цветов стало 8), но истратили прерывания на цели начального сброса машины.

Потому, если при 8-ми цветной схеме цветовой приставки включить прерывания, то из адресного пространства совсем исчезает ОЗУ и компьютер улетает. Хуже того, если на Специалисте не имеющем 8-ми цветов запустить 8-ми цветную программу, то компьютер тоже улетает.

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

Но по-крайней мере для прерываний это легко исправляется, если схему сброса сделать по схеме от РК86. Ставится RS-триггер, который взводится по /RESET, а сбрасывается сигналоv /WR процессора.

Тогда до первой записи CPU во всём адресном пространстве включено ПЗУ и процессор читает с адреса 0 первую команду JMP C000 и уходит на C000. Программа на C000 четвёртой командой записывает байт 82 в ППА+3, а возниший при этом сигнал /WR сбрасывает триггер, включая ОЗУ. RS-триггер легко сделать из двух вентилей из 155 ЛА3 или из половинки 155 ТМ2.

jerri
12.03.2018, 22:27
Ничего не произойдёт. Данные ведь передаются выше текущей позиции стека, а при CALL или RST по прерыванию будет испорчено 2 байта ниже, где не хранится ничего полезного.

нет
та графика на которую указывает SP будет убита

а поскольку прерывание будет приходить абы где
то скоро вся графика игры будет выпилена полностью
и заменена адресом возврата.

так что там с DI/EI?

barsik
12.03.2018, 23:20
нет, та графика на которую указывает SP будет убита
Каким образом использование стека подпрограммой может принести хоть какой-то вред? Что же программист полный идиот, чтобы ставить стек на область в которой хранятся нужные данные?

Может быть Вы имеете в виду случай когда стеком делается ролик экрана. В мониторе Орлова ролик тормозной без стека, а вот в ленинградском мониторе ролик делается стеком. Естественно, когда стек используют не по назначению, то прерывания запрещают.

jerri
13.03.2018, 13:57
Каким образом использование стека подпрограммой может принести хоть какой-то вред? Что же программист полный идиот, чтобы ставить стек на область в которой хранятся нужные данные?


это вы сейчас по незнанию да неопытности сказали

вред будет нанесен если ктото по незнанию внесет изменения в программу
например включит прерывания или воткнет свою собственную процедуру прерывания
во время освежения экрана через стек

вот вам кусок кода для вывода графики на экран.
правда под спектрум и Z80 но нам это без разницы совершенно

данный код работает с включенными прерываниями и специальным обработчиком прерывания
если внезапно там окажется другой обработчик то вся графика будет минут за 10 полностью уничтожена.



rend_line
dup 32
push hl ;11
ld l,(hl) ;6
ld h,a ;bg_font/2048 ;7
add hl,hl ;11
add hl,hl ;11
add hl,hl ;11
ld c,(hl) ;7
inc l ;4
ld b,(hl) ;7
inc l ;4
ld sp,hl ;6
ld l,e ;4
ld h,d ;4

dup 3
ld (hl),c ;7
inc h ;4
ld (hl),b ;7
inc h ;4
pop bc ;10
edup
;96

ld (hl),c ;7
inc h ;4
ld (hl),b ;7

ld sp,ix ;10
pop hl ;10
inc e ;4
inc l ;4
; ;236
edup
rend_size equ ($-rend_line)/32
org $-1

ld bc,-31
add hl,bc
jp rend_line




Может быть Вы имеете в виду случай когда стеком делается ролик экрана. В мониторе Орлова ролик тормозной без стека, а вот в ленинградском мониторе ролик делается стеком. Естественно, когда стек используют не по назначению, то прерывания запрещают.

в том числе и ролик экрана
когда программист что-то пишет он твердо знает обычно где и как будет работать его программа
освежение экрана через стек дает значительное ускорение по сравнению с другими способами.

CityAceE
26.06.2025, 12:17
Идея добавить прерывания в Специалист витает довольно давно. А в некоторых клонах на Z80 типа Эрика она и вовсе уже давно реализована.

Давайте на данном этапе откинем рассуждения о совместимости со всем предыдущим софтом, о том, что сигнал INTE процессора уже задействован в системе цветности, о том, что всё равно никто уже под это дело ничего писать не будет и т.д. Я предлагаю пока просто пофантазировать какими должны быть идеальные прерывания на Специалисте.

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

Такие прерывания уже организовал Pyk в Emu80:


- - -
zx_, для включения периодических прерываний в "Специалисте" добавьте в конец конфигурационного файла следующие строки:

PeriodicInt8080 periodicInt = &cpu, 7, 50
periodicInt.active = yes
Здесь 7 - это номер вектора прерывания (rst 7), а 50 - частота прерываний

Правда, чтобы не лезть в сам код эмулятора, Виктор сделал эти прерывания независимыми от обновления экрана. То есть прерывания просто приходят 50 раз в секунду, независимо ни от чего. Но и это уже хоть что-то! Я с делом поигрался и уже выкладывал результат:


https://plvideo.ru/watch?v=7adiG7WtPmaC

Отчётливо видно, что бегущая строка периодически рвётся, несмотря на то, что всё выводится по прерываниям и успевает по тактам уложиться между кадрами.
RW9UAO, готов внедрить правильные прерывания свой FPGA Специалист, а Pyk готов аналогичным образом доработать свой эмулятор. Таким образом можно будет обкатать их. Если всё будет хорошо, то, возможно, кто-то (Mick?) захочет это воплотить в реальном железе.

Собственно вопрос: Когда должны приходить прерывания и какой длительности сигнал должен быть? Дело в том, что полезность прерывания для, например, отрисовки спрайтов, зависит от того, на каком этапе строения кадра прерывание придёт. При этом не стоит забывать о том, чтобы реализовать в железе это было максимально просто.

Mick
26.06.2025, 12:56
Собственно вопрос: Когда должны приходить прерывания и какой длительности сигнал должен быть? Дело в том, что полезность прерывания для, например, отрисовки спрайтов, зависит от того, на каком этапе строения кадра прерывание придёт. При этом не стоит забывать о том, чтобы реализовать в железе это было максимально просто.

Прерывания по сути как события в ОС. По ним не только выводить спрайты, бегущую строку, а можно вообще кучу всего делать, например опрос клавиатуры и т.д. Вывод картинок, строк и т.д. связанные с визуальной частью, лучше конечно синхронизировать с кадровыми импульсами, чтобы не было дерганий. Естественно можно тогда задаться вопросом, насколько так сказать "мощно" прерывания нужны для компа. Дело в том, что если просто ограничится выводом звука, спрайтов, бегущих строк и небольшими процедурами типа опрос клавы, то хватит одного источника от кадровой развертки и соответственно схема условно будет на двух-трех элементах, а если нужно больше источников, то как минимум ВН59 напрашивается.

Касательно простых прерываний от кадровой развертки, то как я писал уже можно взять кусок от Ленинграда на ВМ80 и как уже говорили, нужно будет еще слово состояния отследить. По длительности сигнала прерывания - насколько я помню по моему в Спектруме было 32 такта. Кстати о кадровой развертки, поскольку в Специалисте ничего на кадровой развертке не синхронизовано, то вполне можно использовать 60Гц и VGA развертку, но тогда возникнут проблемы с AY, если он планируется, ибо основная масса музыки написано под 50Гц развертки.

ivagor
26.06.2025, 13:16
Как вариант. Если использовать ВН59, то можно кадровые на один вход, строчные на другой, от таймера на третий и еще остаются. А таймер можно запрограммировать на сколько хочешь Гц, хоть 50, хоть 60, хоть 300.

CityAceE
26.06.2025, 15:07
Тема, оказывается, уже была на форуме. Объединю, пожалуй, чтобы не распыляться.

Как считаете, схема предложенная Barsik'ом жизнеспособна?

https://pic.maxiol.com/images2/1750939616.780858384.int50hz.jpg

Serg6845
26.06.2025, 15:14
Как вариант. Если использовать ВН59, то можно кадровые на один вход, строчные на другой, от таймера на третий и еще остаются. А таймер можно запрограммировать на сколько хочешь Гц, хоть 50, хоть 60, хоть 300.

ВН59 при типичном использовании даст нам 27 тактов только на вход в процедуру прерываения (CALL в таблицу векторов, оттуда JMP собственно в процедуру). на и так дохлом 8080 многовато выходит...

- - - Добавлено - - -



Как считаете, схема предложенная Barsik'ом жизнеспособна?


должна работать, вопрос зачем внешний триггер запрета прерываний когда есть команда DI?

CityAceE
26.06.2025, 15:16
зачем внешний триггер запрета прерываний когда есть команда DI?
Возможно, для полной совместимости с уже имеющимся софтом?

Serg6845
26.06.2025, 15:23
Возможно, для полной совместимости с уже имеющимся софтом?

а он есть? или как в соседней теме - есть только схема, которую не факт что кто-то собирал?

CityAceE
26.06.2025, 15:59
а он есть?
Речь вообще про весь софт. Никто не может гарантировать, что какой-нибудь из авторов не использовал в своей программе по только ему известной причине команду EI.

Pyk
26.06.2025, 16:40
зачем внешний триггер запрета прерываний когда есть команда DI
Чтобы после разрешения прерывания после короткой процедуры обработки оно не возникло снова. И чтобы обработались в итоге прерывания, возникшие во время запрещенных по той или иной причине прерываний.

А возникать прерывание на мой взгляд должно на первой строке нижнего бордюра, чтобы время от прерывания до первой строки изображения было максимальным.

- - - Добавлено - - -

Хотя на схеме выше как-то странно триггер подключен. Триггер должен защелкивать сигнал прерывания и сбрасываться при его обработке процессором.

ivagor
26.06.2025, 19:05
60Гц и VGA развертку
Получается в этом случае без подключения к телевизору, т.к. при 60 Гц на ТВ максимум 240 строк, на реальных ТВ еще меньше. И нужен или скандаблер или вдвое ускорить выборку из озу.

Mick
26.06.2025, 20:36
Получается в этом случае без подключения к телевизору, т.к. при 60 Гц на ТВ максимум 240 строк, на реальных ТВ еще меньше. И нужен или скандаблер или вдвое ускорить выборку из озу.

Это просто была мысль, если с подключением телеку, то безусловно родные 15625Гц и 50Гц

Serg6845
27.06.2025, 08:23
Речь вообще про весь софт. Никто не может гарантировать, что какой-нибудь из авторов не использовал в своей программе по только ему известной причине команду EI.

да, согласен. например в ПЗУ для работы одного из вариантов НП...

- - - Добавлено - - -



Хотя на схеме выше как-то странно триггер подключен. Триггер должен защелкивать сигнал прерывания и сбрасываться при его обработке процессором.

чтобы прерывание по фронту работало? это надо второй триггер ставить. а этот просто дополнительный внешний DI по сути.