Ну ежли барину угодна настоящая труЪшность, то могу добавить в ДМА бит сырых данных с дисковода (как в FDDripper-е). Будет настоящая Амига, где все именно так: декодированием флоподанных занимается центральнейший процессор, после приема оных по ДМА. :)
Порядок событий, связанных с приходом сигнала прерывания выглядит так:
0. включение триггера соответствующим источником, при этом на процессор выставляется !INT (при наличие хотя бы одного активного триггера)
1. процессор выполняет последний машцикл инструкции, цепляет инт
2. процессор генерирует цикл подтверждения им2
3. логика контроллера определяет, какой вектор выставить на шину данных (в зависимости от включенных триггеров и их приоритетов)
4. проц цепляет вектор, читает из памяти адрес, летит на ISR
5. контроллер выключает тот триггер, вектор которого обработан; если остались другие триггеры либо успели прийти новые события, инт не убирается
6. процессор заканчивает обработку ISR командами EI:RET, при этом новый инт (если сигнал активен) обработается на последнем машцикле RET, с п.1.
Нюанс первый.
Имеем следующие события:
— установился триггер источника с приоритетом 2,
— прошло 3 такта,
— установился триггер источника с приоритетом 0,
— прошло 2 такта,
— процессор распознал инт и запросил вектор.
Вопрос: какой вектор обработается?
Ответ: источника с приоритетом 0. Несмотря на то, что по тактам событие источника 2 пришло раньше.
Глубокая мораль: приоритеты обрабатываются не по факту прихода, а по факту наличия на момент подтверждения цикла им2.
Нюанс второй.
Если во время активного триггера погасить соответствующий бит в регистре масок, то данный источник не только не будет обработан, но и сбросится триггер. Это нужно для двух вещей: чтоб не оставались «висящие» необработанные инты после выключения битов маски и чтоб можно было рулить разрешениями низших приоритетов из иср-ов высших.
Я бы добавил спасибо рекламодателю, потому что 2 тумбдауна на пуэте, это НИЧТО по сравнению с нашей популярностью, которую он таким образом создает!
Еще, пользуясь трибуной, хочу выразить крик души: ааааааааааа не делайте из сабжа недоамигу! Идея была такая, чтоб Диззи бегал поверх 6912 ускорить эффекты обычного спектрума, сэкономить на лдпушах при помощи ДМА, ускорить проц кешом, добавить в 6912 необычных цветов и палитровых фефектов, упростить растровые эффекты при помощи двигаемого инта, упростить наконец страничную адресацию. Я хочу странного?.. =)
И так оно работает во всех режимах, кроме текстмода (хайрез, hi-res), в котором пиксели «тоньше» в 2 раза и их следовательно 720, а не 360. Что делать? Запоминать в ВГА даблере вместо одного пикселя по 8 бит — два по 4. И тут уже схема другая:
Отсюда имеем процесс: если вывести графику TSU поверх текстмода, то получим, что в тех местах, где отображается пиксель тайла/спрайта он накроет 2 пикселя текста, попадет в буфер 2 раза, но при этом не будет содержать инфы, к какой палитре принадлежит. Палитра возьмется из того же селектора, что и текстмод.
Почему все так сложно? Потому что ЕР1К50 имеет 10 блоков памяти по 512 байт. Использованы они следующим образом:
2 — буфера ВГА даблера,
1 — палитровое ОЗУ,
1 — спрайтовое ОЗУ,
2 — оверлейные буфера TSU,
2 — буфера предвыборки тайлов,
1 — теги кеша,
1 — данные кеша,
Как можно видеть, если бы я сделал буфер даблера на 3 блока (как это, кстати, в бейзе), то было бы все труколор, но не было бы чего-то другого.
Такие дела.
Да, и если такую статью я напишу, то пора бы поспешить, а то половина всего уже забылась.
Однако в ней надо упомянуть тех двоих, одно упоминание которых вызывает срачи, драмы, крушение форумов и уход юзеров. И как это сделать политкоррэктно, я не хз. =)
Слоупоки пропустили всю драму, поэтому некропощу.
Гоблин всех перетроллил.
На тсфоруме он дважды просил забанить оба его акка. Первый раз самоудалился (и тоже потёр псты, скотина). Но бана не получил, до постинга расчлененки не дошло. Чудо? Совпадение? Для сравнения, на длкорпе, администрация которого страшно гнобит гяф, он получил бан примерно за месяц, предварительно снискав тонну респекта и уважухи за то, что пошатал зх.пукан.рву днями ранее.
Однако, я понимаю Интроспека и других оргов Хайпа и уважаю их терпение. Бан не плюсую и не минусую. Хотелось бы, чтоб его не было, но видимо по-другому не вышло.
Зато появился некий жизненный опыт.
Это совершенно точно не журнал в классическом понимании.
Про интернет говорят, сравнивая его к классической прессой или литературой, что его отличие в режиме R/W, тогда как классика — R/O. Т.е. чукча не только читатель, но и писатель.
Порядок событий, связанных с приходом сигнала прерывания выглядит так:
0. включение триггера соответствующим источником, при этом на процессор выставляется !INT (при наличие хотя бы одного активного триггера)
1. процессор выполняет последний машцикл инструкции, цепляет инт
2. процессор генерирует цикл подтверждения им2
3. логика контроллера определяет, какой вектор выставить на шину данных (в зависимости от включенных триггеров и их приоритетов)
4. проц цепляет вектор, читает из памяти адрес, летит на ISR
5. контроллер выключает тот триггер, вектор которого обработан; если остались другие триггеры либо успели прийти новые события, инт не убирается
6. процессор заканчивает обработку ISR командами EI:RET, при этом новый инт (если сигнал активен) обработается на последнем машцикле RET, с п.1.
Нюанс первый.
Имеем следующие события:
— установился триггер источника с приоритетом 2,
— прошло 3 такта,
— установился триггер источника с приоритетом 0,
— прошло 2 такта,
— процессор распознал инт и запросил вектор.
Вопрос: какой вектор обработается?
Ответ: источника с приоритетом 0. Несмотря на то, что по тактам событие источника 2 пришло раньше.
Глубокая мораль: приоритеты обрабатываются не по факту прихода, а по факту наличия на момент подтверждения цикла им2.
Нюанс второй.
Если во время активного триггера погасить соответствующий бит в регистре масок, то данный источник не только не будет обработан, но и сбросится триггер. Это нужно для двух вещей: чтоб не оставались «висящие» необработанные инты после выключения битов маски и чтоб можно было рулить разрешениями низших приоритетов из иср-ов высших.
Еще, пользуясь трибуной, хочу выразить крик души:
ааааааааааане делайте из сабжа недоамигу! Идея была такая, чтобДиззи бегал поверх 6912ускорить эффекты обычного спектрума, сэкономить на лдпушах при помощи ДМА, ускорить проц кешом, добавить в 6912 необычных цветов и палитровых фефектов, упростить растровые эффекты при помощи двигаемого инта, упростить наконец страничную адресацию. Я хочу странного?.. =)TSU овер текстмод работает, как задумано. Это не бага, а фича ©. Просто из-за обильной документации (на всех языках мира, в 25 томах) многие моменты остаются мутными.
Весь видеосигнал в системе формируется в таймингах ТВ. Это не позволяет вывести данный видеосигнал на ВГА монитор. Потому есть ВГА-даблер. Он сохраняет пиксели во внутреннем буфере, а затем выводит их на ВГА с двойной частотой по два раза. Таких буферов 2, один пишется, другой показывается. размер буфера 360 пикселей спектрумского (обычного, лоурез, low-res) разрешения. Поскольку выход палитры содержит 16 бит, а вход — 8 бит (256 ячеек по 16 бит — 32к цветов 5:5:5 и бит выбора таблицы), то для экономии выгоднее хранить вход, т.е. индексы цветов, а не готовый «труколор».
Схема такая:
И так оно работает во всех режимах, кроме текстмода (хайрез, hi-res), в котором пиксели «тоньше» в 2 раза и их следовательно 720, а не 360. Что делать? Запоминать в ВГА даблере вместо одного пикселя по 8 бит — два по 4. И тут уже схема другая:
Отсюда имеем процесс: если вывести графику TSU поверх текстмода, то получим, что в тех местах, где отображается пиксель тайла/спрайта он накроет 2 пикселя текста, попадет в буфер 2 раза, но при этом не будет содержать инфы, к какой палитре принадлежит. Палитра возьмется из того же селектора, что и текстмод.
Почему все так сложно? Потому что ЕР1К50 имеет 10 блоков памяти по 512 байт. Использованы они следующим образом:
2 — буфера ВГА даблера,
1 — палитровое ОЗУ,
1 — спрайтовое ОЗУ,
2 — оверлейные буфера TSU,
2 — буфера предвыборки тайлов,
1 — теги кеша,
1 — данные кеша,
Как можно видеть, если бы я сделал буфер даблера на 3 блока (как это, кстати, в бейзе), то было бы все труколор, но не было бы чего-то другого.
Такие дела.
www.youtube.com/watch?v=sco6mBTK9MI
www.youtube.com/watch?v=VpY2dAFMFPU
www.youtube.com/watch?v=AKQ2Xks5fWE
www.youtube.com/results?search_query=8+Bit+Cinema
Однако в ней надо упомянуть тех двоих, одно упоминание которых вызывает срачи, драмы, крушение форумов и уход юзеров. И как это сделать политкоррэктно, я не хз. =)
Гоблин всех перетроллил.
На тсфоруме он дважды просил забанить оба его акка. Первый раз самоудалился (и тоже потёр псты, скотина). Но бана не получил, до постинга расчлененки не дошло. Чудо? Совпадение? Для сравнения, на длкорпе, администрация которого страшно гнобит гяф, он получил бан примерно за месяц, предварительно снискав тонну респекта и уважухи за то, что пошатал зх.пукан.рву днями ранее.
Однако, я понимаю Интроспека и других оргов Хайпа и уважаю их терпение. Бан не плюсую и не минусую. Хотелось бы, чтоб его не было, но видимо по-другому не вышло.
Зато появился некий жизненный опыт.
(Оставлю ссылку на оригинал.)
Про интернет говорят, сравнивая его к классической прессой или литературой, что его отличие в режиме R/W, тогда как классика — R/O. Т.е. чукча не только читатель, но и писатель.