PDA

Просмотр полной версии : Махинации с регистром I и IM2



Epsilon
25.10.2014, 03:45
Собственно в коде одной программы нашёл следующую конструкцию:

MOV A, #FE
MOV I, A
IM 2

Всё отлично, но
1. Я не понимаю, что тут происходит и зачем эта конструкция нужна.
2. Pentagon 128 в этом месте ничего не делает, но я подозреваю, что этот набор инструкций всё же зачем-то нужен

:confused:

BYTEMAN
25.10.2014, 03:58
ну как это ничего не делает... устанавливает вектор прерывания и включает IM2....

null_device
25.10.2014, 04:54
Что-то не припоминаю наличие мнемоники MOV? :v2_conf2:
---
Если принять, что за ней скрывается команда LD, листинг приобретает более "привычный" вид (скорее всего данный код "обрамлен" командами DI\EI):

DI
...
LD A, #FE
LD I, A
IM 2
...
EI

ZXMAK
25.10.2014, 05:41
устанавливает пользовательский режим прерываний и задает адрес по которому читается вектор прерывания, в данном случае FEFF. на клонах с нестабильной шиной, младший байт адреса может отличаться и иметь значение от 0 до ff. для таких случаев можно всю область от #FE00 до #FF00 прописать одним и тем же байтом, например 80, тогда вектор, тогда вектор прерывания с любым значением на шине данных получится #8080.

drbars
25.10.2014, 09:12
Разве это махинации? То ли дело, когда мне удалось ULA на +2 завесить... вот это махинация так махинация :)

goodboy
25.10.2014, 10:51
Разве это махинации? То ли дело, когда мне удалось ULA на +2 завесить... вот это махинация так махинация :)
ты ещё из порта #7ffd прочитай значение ( именно на сером +2)

SoftLight
25.10.2014, 12:58
А что будет?

goodboy
25.10.2014, 13:27
комп зависнет из-за ошибки в ULA.
наверно разработчики не предусмотрели такое развитие событий

jemmini
25.10.2014, 14:25
"Я делаю свой эмулятор и задумал реализовать такую классную штуку как gigascreen "

я в шоке...

rasmer
25.10.2014, 14:48
"Я делаю свой эмулятор и задумал реализовать такую классную штуку как gigascreen "

я в шоке...между прочим да.. Человек делает эмулятор спектрума, и не вкурсе про прерывания...

Советую почитать топиксртеру - http://speccy.info/Прерывания

goodboy
25.10.2014, 15:09
между прочим да.. Человек делает эмулятор спектрума, и не вкурсе про прерывания...
всякое бывает. вон Лисицын сделал AVRспек на 8ми микросхемах даже не зная про im2 и искренне удивлялся почему большинство игр не работает.

jerri
25.10.2014, 15:24
нет но мы же вроде разобрались тогда.

goodboy
25.10.2014, 15:38
нет но мы же вроде разобрались тогда.
ну,да.
изначально у него по EI всегда шарашил IM1 и портились данные в системной переменной (где часы)

Alex Rider
25.10.2014, 18:45
комп зависнет из-за ошибки в ULA.
Насколько я помню, из-за ошибки ULA произойдет запись в #7ffd.

goodboy
25.10.2014, 19:53
Насколько я помню, из-за ошибки ULA произойдет запись в #7ffd. а почему тогда комп зависает/сбрасывается ?
стек < 49152

Alex Rider
26.10.2014, 03:20
а почему тогда комп зависает/сбрасывается ?
стек < 49152
IM2, I >= #0c0?

jemmini
26.10.2014, 09:27
Alex Rider, http://www.zxpress.ru/article.php?id=4588

"Стоит заметить, что вышеизложенное "свойство" не зависит от режима прерываний!"

было писано сто лет назад :)

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

Alex Rider
26.10.2014, 12:47
Alex Rider, http://www.zxpress.ru/article.php?id=4588
"Стоит заметить, что вышеизложенное "свойство" не зависит от режима прерываний!"
Я не про это. Если таблица векторов прерываний живет в страничной памяти, чтение из #7ffd приведет к переключению страниц, и "давай, до свидания".

goodboy
26.10.2014, 12:52
Я не про это. Если таблица векторов прерываний живет в страничной памяти, чтение из #7ffd приведет к переключению страниц, и "давай, до свидания".
какие таблицы в простом бейсике при IM1 ???

Alex Rider
26.10.2014, 13:31
какие таблицы в простом бейсике при IM1 ???
А где шла речь про простой бейсик и IM1? :D

Spectramine
26.10.2014, 15:35
а почему тогда комп зависает/сбрасывается ?
стек < 49152

может, пзу не то включается ?

ZXMAK
26.10.2014, 16:03
какие таблицы в простом бейсике при IM1 ???

Через #7ffd кроме страницы еще и пзу переключается, а бейсик в пзу ;)

Epsilon
27.10.2014, 11:11
Всем спасибо. Я вспомнил)

На самом деле я 12 лет провёл за спектрумом (причём в активной разработке), но последующий интервал в 10 лет дал о себе знать. Мне стыдно.