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

User Tag List

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

Тема: IM2, вектор прерывания

  1. #1
    Activist Аватар для Jukov
    Регистрация
    03.12.2005
    Адрес
    Серов
    Сообщений
    471
    Благодарностей: 65
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию IM2, вектор прерывания

    Я тут вот с какой проблемой столкнулся. В литературе говорится, что на фирменном Спектруме48 вектор прерывания I должен находится в районе адресов ПЗУ, иначе произойдёт аппаратный сбой. Но у некоторых отечественных Спектрумов нестабильная шина данных, поэтому в ОЗУ создается таблица длиной 257 байт. Конечно, можно было бы использовать таблицу в свободном месте ПЗУ (где #FF), но на многих компах оно занято всякой фигнёй. Как же обеспечить нормальную работу IM2 на любом компьютере?

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

  3. #2
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,147
    Благодарностей: 5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    сгенерировать таблицу 257 одинаковых байт в районе адресов #8000-#BFFF (до #FFFF если используется 48к и страница 0). причем значения таблицы - векторы могут находиться хоть где.

  4. #3
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Благодарностей: 295
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking

    Цитата Сообщение от Jukov
    Я тут вот с какой проблемой столкнулся. В литературе говорится, что на фирменном Спектруме48 вектор прерывания I должен находится в районе адресов ПЗУ, иначе произойдёт аппаратный сбой. Но у некоторых отечественных Спектрумов нестабильная шина данных, поэтому в ОЗУ создается таблица длиной 257 байт. Конечно, можно было бы использовать таблицу в свободном месте ПЗУ (где #FF), но на многих компах оно занято всякой фигнёй. Как же обеспечить нормальную работу IM2 на любом компьютере?
    У меня фирменный Speccy 128+Beta, в котором нет проблем с плаванием вектора I. Вообще-то за всю жизнь я видел 3+5=7 фирменных моделей. Первые три, один из них мой, были произведены в Польше, остальные пять были в компьютерном клубе и где их собрали мне не известно. Все модели я тестировал на этот глюк и его небыло.
    Однако, речь шла о нахождении регистра I в диапазоне от 0 до 63, но IM при этом не 2 а 1 ! Сколько я не капался в буржуйских работах, я не видел, что бы вектором I при IM2 пользовались ПЗУшкой, за исключением польской демы "Song In Lines". Рекомендуется в 48к модели держать вектор в любом диапазоне, кроме от 64 до 127. Иначе в момент выборки байт для генерации видео любая команда будет исполняться с торможением, и это ощутимо. А если ещё при этом всём и исполнять программу в диапазоне от 16384 до 32767, то торможения могут быть в 5-6 раз. А это строгое правило, затирать 257 байт одним числом, я встречал только у Durrel Software, но так же они при чтении регистра порта клавиатуры они их любили инвертировать, это то же считать стандартом ? Мне кажется, что эти недаработки с глюком вектора пошли от клонов Speccy !
    AAA

  5. #4
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,031
    Благодарностей: 1426
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Robus
    я видел 3+5=7 фирменных моделей
    5! да, это 5! %))))

    ЗЫ. Юзаш табличку в те же 257 байт и забываешь о нестабильной шине.

  6. #5
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Благодарностей: 295
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin
    5! да, это 5! %))))
    Ссори ... Просчитался ...

    Цитата Сообщение от Vitamin
    ЗЫ. Юзаш табличку в те же 257 байт и забываешь о нестабильной шине.
    Терять 254 байта ? Не отдам !!! Я лучше туда депакер положу !
    AAA

  7. #6
    Activist Аватар для Jukov
    Регистрация
    03.12.2005
    Адрес
    Серов
    Сообщений
    471
    Благодарностей: 65
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я разработал новый способ чтения порта DOS #1F через прерывания. Если бы не наши клоны с нестабильной шиной данных, то это была бы самая короткая процедура чтения порта #1F:
    IN1F LD BC,(#5BFF)
    LD HL,INT
    LD (#5BFF),HL
    LD A,#5B
    LD I,A
    IM 2
    LD (COPYSP+1),SP
    LD A,#FF
    AGAIN LD D,1
    LD IY,#2D87
    EI
    CALL DOS
    INT DI
    COPYSP LD SP,0
    BIT 7,A
    JR NZ,AGAIN
    LD (#5BFF),BC
    ***
    DOS PUSH IY
    JP #3D2F
    ***
    #2d87 IN A,(#1F)
    AND #7F
    RET Z
    DEC D
    PUSH HL
    PUSH DE
    JR NZ,#2D7B
    HALT

  8. #7
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,031
    Благодарностей: 1426
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Robus
    Терять 254 байта ? Не отдам !!! Я лучше туда депакер положу !
    Если шина стабильная, то можно выловить значение вектора прерывания и делать перехватчик по вполне определенному адресу. А вот если ее значение скачет как сайгак по степи, то тут без таблички ну никак... разве что юзать пзу128 и подменять свой обработчик im1...

  9. #8
    Guru Аватар для CHRV
    Регистрация
    18.01.2005
    Адрес
    Москва
    Сообщений
    3,690
    Благодарностей: 258
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Jukov
    Я разработал новый способ чтения порта DOS #1F через прерывания. Если бы не наши клоны с нестабильной шиной данных, то это была бы самая короткая процедура чтения порта #1F:
    У наших "клоунов" подтянуть шину через регистерную сборку - фиксит трабл.
    Но лучше не зарекаться и сделать таблицу.

    Пожалуйста пишите в email (chunin{гаф}mail{тчк}ru), личка отключена!!!

    NedoPC group. ZX-Evolution, ATM Turbo 2+, Pentagon1024SL.
    [Предлагаю: ZXEvo, PAL coder, NeoGS, TS-FM, YM2149, Z80 и прочее]
    Все здесь: http://www.nedopc.com.
    Новости/поддержка/Faq: http://forum.nedopc.com.
    Раздача халявы: http://forum.nedopc.com/viewtopic.php?f=32&t=977

  10. #9
    Member
    Регистрация
    26.01.2005
    Адрес
    Тула
    Сообщений
    60
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Умня был пентагон, который работал следующим образом:
    Если 257 байт заполенены - то все ок
    Если им2 есть, но таблица какаянибудь другая - программа обычно работала,
    но в любой момент она могла сброситься - сопственно несколько лет до
    этого не мог понять почему некоторые проги робили стабильно, а некоторые сбрасывались рано или позно ! =)
    Таким образом всегда после этого сам заполнял 257 байт!
    Причом могу отметить, что у многих фирменных игр видел заполененые 257 байт !
    (а не у одной, как ктото сказал!!!)

  11. #10
    Activist Аватар для Raider
    Регистрация
    24.06.2005
    Адрес
    novosibirsk
    Сообщений
    263
    Благодарностей: 71
    Записей в дневнике
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нестабильна шина именно на родном фирменном спектруме. Точно не знаю на каких именно моделях (легко установить по схематике, скорее всего, Sinclair ZX Spectrum 16, 48, 128 и +) - но все (99%) игрушек знают про это. По всей вероятности, на фирменном спеке неиспользование 257-байтной таблицы сразу же ведет к совершенно определенно четкому сбою. Поэтому пропустить данную фичу при написании игры было невозможно.

    Если кому интересно - то на шину выдается байт аттрибутов. Происходит это потому что ULA и процессор развязаны в фирменной схематике просто резисторами, и процессор "подхватывает" байт аттрибутов выдаваемый ULA.

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

    Лечится на совдеповском компе такое подтяжкой шины данных с помощью резисторов к +5V. Резисторы нужны в пределах 10...15 килоом.

    Если есть сомнения насчет связки TRDOS + 2-х байтный вектор прерывания, то советую не сомневаться и делать. Только чтение регистров TRDOS через IM2-прерывания это не "изобретение". Это уже использовалось. И именно таким методом, если ничего не путаю. Насколько я припоминаю, суть была в том, чтобы разрешить IM2 и обеспечить по прерыванию "вылет" из процедуры в которой процессор в обычных случаях зацикливался.

    На не-совковые компы рассчитывать незачем. TRDOS у буржуев крайне непопулярна. А у совковых компов шина стабильна. Если у кого и нестабильна, то это очень редкое исключение (Совковый спек + TRDOS + нестабильная шина). Такие люди встречаются очень редко и ими можно пренебречь.
    Alex Raider, Flash inc. 1992-1997 Новосибирск

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

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

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

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

Похожие темы

  1. Вектор-06Ц: Общие вопросы
    от CityAceE в разделе Вектор
    Ответов: 438
    Последнее: 24.03.2016, 09:50
  2. Ответов: 9
    Последнее: 18.04.2009, 19:21

Ваши права

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