Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

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

  1. #1
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

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

    При КР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 мышь так, чтобы это не создавало проблем тем, у кого мышь отсутствует. Т.е нужен такой интерфейс, чтобы драйвер мыши можно было заменить драйвером для реального джойстика или драйвером джойстика из курсорных клавиш клавиатуры.
    Последний раз редактировалось barsik; 10.03.2018 в 12:19.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    zx_
    Гость

    По умолчанию

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

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

  4. #3
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

Название:	Прерывания на Z80.jpg 
Просмотров:	139 
Размер:	23.3 Кб 
ID:	64541  
    Последний раз редактировалось barsik; 10.03.2018 в 13:45.

  5. #4
    zx_
    Гость

    По умолчанию

    зачем z80 ?

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

  6. #5
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  7. #6
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

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

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

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

Название:	INT_50_Hz.jpg 
Просмотров:	122 
Размер:	23.2 Кб 
ID:	64560  
    Последний раз редактировалось barsik; 10.03.2018 в 21:48.

  8. #7
    zx_
    Гость

    По умолчанию

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

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

  9. #8
    Banned
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

    Цитата Сообщение от zx_ Посмотреть сообщение
    а в мониторе ничего менять не нужно с этой схемой?
    Всё зависит от того для чего использовать прерывания и что и как аппаратно выдаётся на шину по 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.
    Вложения Вложения
    Последний раз редактировалось barsik; 10.03.2018 в 23:39.

  10. #9
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, ага понятно.

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

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

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

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

    http://speccy.info/Kempston_Mouse
    С уважением,
    Jerri / Red Triangle.

  11. #10
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, чем вам не нравится rst#38 и DI при старте?
    С уважением,
    Jerri / Red Triangle.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Разработка системы на КР580 серии
    от Viktor2312 в разделе Разное
    Ответов: 45
    Последнее: 21.10.2015, 23:58
  2. КР580 - 2,5 Мгц only?
    от alex-eller в разделе Разное
    Ответов: 88
    Последнее: 09.05.2015, 08:41
  3. IM2 в TR-DOS
    от VELESOFT в разделе Софт
    Ответов: 1
    Последнее: 02.02.2013, 19:17
  4. im2 и call 3d13
    от moroz1999 в разделе Программирование
    Ответов: 36
    Последнее: 20.01.2007, 13:00
  5. IM2, вектор прерывания
    от Jukov в разделе Программирование
    Ответов: 18
    Последнее: 20.09.2006, 09:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •