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

User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 30

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

  1. #11

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

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    barsik, чем вам не нравится rst#38 и DI при старте?
    Почему не нравится? Нравится и поначалу так и сделаю. Просто возникла красивая идея, я и поделился.

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

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

    Во вложении тест прерываний. Замеряет число тактов CPU между прерываниями. Это позволяет проверить точно ли в эмуляторе реализован период 50 Гц. Для нахождения периода надо умножить число тактов на период клока CPU.
    Вложения Вложения
    • Тип файла: rar INT.rar (689 байт, Просмотров: 84)

  2. #12

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

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

  3. #13

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

    По умолчанию

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

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

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

  4. #14

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

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

    что там такое с DI/EI?
    С уважением,
    Jerri / Red Triangle.

  5. #15

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

    По умолчанию

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

    Цитата Сообщение от jerri Посмотреть сообщение
    что там такое с 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.
    Последний раз редактировалось barsik; 12.03.2018 в 23:25.

  6. #16

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    так что там с DI/EI?
    С уважением,
    Jerri / Red Triangle.

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

  8. #17

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

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    нет, та графика на которую указывает SP будет убита
    Каким образом использование стека подпрограммой может принести хоть какой-то вред? Что же программист полный идиот, чтобы ставить стек на область в которой хранятся нужные данные?

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

  9. #18

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Каким образом использование стека подпрограммой может принести хоть какой-то вред? Что же программист полный идиот, чтобы ставить стек на область в которой хранятся нужные данные?
    это вы сейчас по незнанию да неопытности сказали

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

    вот вам кусок кода для вывода графики на экран.
    правда под спектрум и 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

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

  10. #19

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,644
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

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

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

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

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

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

    Цитата Сообщение от Pyk Посмотреть сообщение
    - - -
    zx_, для включения периодических прерываний в "Специалисте" добавьте в конец конфигурационного файла следующие строки:
    Код:
    PeriodicInt8080 periodicInt = &cpu, 7, 50
    periodicInt.active = yes
    Здесь 7 - это номер вектора прерывания (rst 7), а 50 - частота прерываний
    Правда, чтобы не лезть в сам код эмулятора, Виктор сделал эти прерывания независимыми от обновления экрана. То есть прерывания просто приходят 50 раз в секунду, независимо ни от чего. Но и это уже хоть что-то! Я с делом поигрался и уже выкладывал результат:



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

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

  11. #20

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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