Бытовой ретро-компьютер своими руками http://forum.pk-fpga.ru/ |
|
ПОДРОБНОЕ техническое описание контроллеров "АльтПро" http://forum.pk-fpga.ru/viewtopic.php?f=39&t=5410 |
Страница 1 из 1 |
Автор: | Voland [ 07 июн 2013, 13:25 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Заголовок сообщения: | ПОДРОБНОЕ техническое описание контроллеров "АльтПро" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ТЕХНИЧЕСКОЕ ОПИСАНИЕ КОНТРОЛЛЕРОВ "АЛЬТПРО" с доп. памятью 64-512 Кб и версией ПЗУ не ниже 2.00 ═══════════════════════════════════════════════════ Фирмой "АльтПро" (экс-"Альтек") выпускаются контроллеры с дополнительной памятью 64, 128, 256, 512 Кб с одинаковой организацией. Все перечисленные контроллеры имеют 8 режимов работы доп. ОЗУ, различающихся, главным образом, адресами подключения дополнительной памяти с выработкой соотв. сигналов отключения основных ПЗУ/ОЗУ, а также наличием или отсутствием доступа к HALT-режиму процессора БК. Поскольку распределение основной памяти в разных моделях БК существенно различается, часть режимов предназначена для использования с БК0010(-01), часть - с БК11М. Причем тип машины автоматически распознается при включении питания, и сразу подключается необходимый для работы режим. Работа с дополнительной памятью осуществляется через программные запросы к специальному диспетчеру, получившему название "BIOS" по аналогии с IBM. Все точки входа BIOS расположены в области ПЗУ выше 167000 (эта часть получила название ROM-BIOS, она меняться не будет), обработка же запросов производится в загружаемой в ОЗУ части, называемой RAM-BIOS. Прямые обращения к этой части (кроме проверки наличия и считывания номера версии) не практикуются. Если RAM-BIOS в ОЗУ отсутствует, то большинство запросов будет вызывать сигнал ошибки - характерное затухающее подергивание экрана с прерывистым звуковым сигналом. BIOS обеспечивает бесконфликтное выделение памяти по запросу, освобождение памяти (обратная операция), пересылку либо обмен массивов, чтение/запись 1 слова, вызов подпрограммы из доп. памяти или безусловную передачу управления (JMP), изменение режима и др. Корректное использование запросов BIOS обеспечивает взаимную совместимость программного обеспечения, переносимость программ на разные модели БК и контроллеров. Кроме того, использование запросов значительно упрощает и сокращает программы. (Короче, кто не использует запросы - тот сам виноват, такие программы распространять не будем и другим не советуем). УРОВНИ ЗАПРОСОВ BIOS ═════════════════════ В распоряжении программистов имеется 3 уровня запросов BIOS: высокий, средний и низкий. Выделение памяти может быть произведено только на высоком уровне (выделенный фрагмент называется модулем), информация о модулях и свободной памяти содержится во внутреннем каталоге BIOS'а. На высоком уровне используется обращение по имени модуля, обработка запроса включает в себя поиск имени в каталоге и подстановку физического адреса, поэтому такие запросы выполняются наиболее медленно. На среднем уровне используется обращение к памяти по логическому номеру сегмента (вся память разбита на сегменты длиной 20000 со сквозной нумерацией, несколько особых сегментов имеют меньшую длину). Такие запросы выполняются намного быстрее, так как отсутствует поиск в каталоге. При образовании модуля, используемого на среднем уровне, (при выделении памяти) необходимо установить признак неперемещаемости и затем с помощью спец. запроса получить фактическое значение логического номера сегмента. На низком уровне используется обращение по коду режима и физическому адресу, что максимально быстро в рамках BIOS'а, но все равно выполняется 40. чисто подготовительных операций (сохранение и восстановление регистров, вектора 4, блокировка СТОП, распознавание запроса и переключение режимов) + до 20. операций извлечения и контроля аргументов. Поэтому в тех случаях, когда действительно нужна высокая скорость обращения к доп. памяти и при этом нельзя разместить используемые процедуры и данные просто внутри одного модуля, нужно вначале по запросу подключать требуемый модуль, затем работать с ним напрямую (по возможности без переключений), в конце возвращаться в исходный режим. Для максимально быстрого переключения режимов и страниц памяти служит особый запрос "сверхнизкого" уровня CH$WRK, который практически ничего не сохраняет и не проверяет, только переключает режим и передает управление, да еще вписывает код нового рабочего режима в специальную ячейку @WRK$, что совершенно необходимо (для корректных возвратов) в том случае, если в процессе работы в новом режиме используются какие-либо запросы или могут происходить внешние прерывания, переключающие режимы. (При возвратах из других страниц и режимов код текущего рабочего режима извлекается из специального стека, расположенного внутри RAM-BIOS, ячейка WRK$ - указатель этого стека; в запросе CH$WRK - 19. операций, включая "BEQ", "JMP".) При всех запросах, кроме оговоренных отдельно, стек не должен находиться выше 100000. Для выполнения этого условия рекомендуется использование запроса низкого уровня NEW$SP, обеспечивающего корректное образование нового стека. Запросы высокого и среднего уровней ═══════════════════════════════════ Запросы высокого и среднего уровней имеют одинаковые точки входа, тип запроса определяется значением старшего байта аргумента, именуемого ниже "NASEG".
Описанные ниже запросы сохраняют R3-R5, остальные регистры, если это не оговорено отдельно, не сохраняются. При вызове подпрограмм BIOS можно использовать только абсолютную адресацию! 1. Копирование или обмен массивов ( MOV$G ) MOV #ADRSME1,R0 Под номером 1 - массив-источник, под номером 2 - приемник. Отриц. (NEG) значение LEN (длина в словах) обозначает обмен. Т.о., запрос обеспечивает обмен массивов длиной до 200000 байт. 2. Чтение или обмен одного слова ( CHW$G ) JSR R5,CHW$G ;@#167517 Обмен происходит с регистром R0; R1 - флаг (0 - обмен, иначе - чтение). Если R1=0 при выходе - ошибка. 3. Вызов подпрограммы из доп. памяти ( CAL$G ) JSR R5,CAL$G ;@#167516 Подпрограмме передаются R3-R5, из подпрограммы возвращаются все регистры. Можно использовать стандартную передачу параметров через стек, нельзя только в подпрограмме использовать адрес возврата (@SP) - он изменен! На время работы вызываемой п/п блокируются прерывания по вектору 4 (программно - в @#4 заносится #STP$, в @#6 - #200, при возврате восстанавливаются прежние значения), и устанавливается высокий приоритет процессора (при возврате восстанавливается прежний). Максимальная вложенность подпрограмм в RAM-BIOS v3.01 - 20 (decimal). Если R1=0 при выходе, то произошла ошибка. 4. Безусловный переход ( JMP$G ) JSR R5,JMP$G ;@#167515 Аналогично блокируются прерывания по вектору 4 и устанавливается высокий приоритет процессора. Если произошел выход, то была ошибка, при этом R1=0. 5. Работа с каталогом, создание, удаление модулей и др. ( CAT$ ) MOV #NUMBER,R0 ;номер функции
Общеупотребительные запросы низкого уровня ══════════════════════════════════════════ 6. Сохранение области основной памяти ( SAVE$ ) JSR R5,@#SAVE$ ;@#167530 Вход: R0 - адрес вершины (т.е. адрес над областью); R1 - длина (вниз), байт; стек может быть в доп. памяти ( SP>100000 ). Нормальный выход: R0, R1 не портятся. Нет места для сохранения: R0=0. Сохранение производится во внутреннем стеке сохранения RAM-BIOS, общий его объем в версии 3.01 - 1000 с небольшим байт. Сохранение и восстановление (в резидентных программах) должно быть в одном вызове (прерывании), иначе может нарушиться порядок (LIFO: Last In - First Out). 7. Восстановление области памяти, сохраненной по SAVE$ (RESTO$) JSR R5,@#RESTO$ ;@#167531 Регистры не портит, стек может быть в дополнительной памяти. 8. Создание нового стека в основном ОЗУ с его (ОЗУ) сохранением ( NEW$SP ) Вызов: │ либо: │ либо: NEW$SP=167630; TOP - адрес вершины нового стека (адрес над стеком); LEN - длина, байт (вниз) (для сохранения ОЗУ) Старый стек может располагаться в доп. памяти (выше 100000). НОРМ.ВЫХОД: разряд Z=0 (т.е. "не 0"), R0 не равно 0; SP = #TOP-2, @SP = <прежний SP>; портит R0,R1. НЕТ МЕСТА ДЛЯ СОХРАНЕНИЯ: Z=1, R0=0, SP и R1 не изменяются. Сохранение области ОЗУ происходит по SAVE$ (см. выше) во внутреннем буфере BIOS'а стекового типа, его размер - 1000 с небольшим. При создании нового стека необходимо дополнительно резервировать min 44 байта в связи с дребезгом СТОП (наблюдался случай, когда прерывание по вектору 4 успевало произойти 8 раз, после чего подряд 8 RTI и т.д.). Возврат в старый стек с восстановлением ОЗУ: MOV @SP,SP 9. Быстрая установка/чтение кода текущего режима с передачей управления ( CH$WRK ) Вызов: │ либо: │ либо: 3-й вариант - без передачи управления (т.е. с возвратом на следующий за "JSR" адрес). CH$WRK=167734; ВХОД: при mode < = 0 производится только считывание кода текущего режима (в R4) без установки нового, на передачу управления это не влияет; ВЫХОД: R4 = код текущего режима до выполнения CH$WRK; R5, R0 портятся (R0=177130). Ничего не проверяет, не блокирует прерывания, не пользуется стеком (кроме первых 2-3 команд еще до переключений режимов - т.е. нормально работает, даже если в новом режиме SP будет указывать на ПЗУ). В подключаемом режиме в сегменте 160000... должен присутствовать ROM-BIOS. 10. Завершение работы программы и выход в ДОС ( EXIT$ ) JSR R5,@#EXIT$ ;@#167527 Инициализирует RAM-BIOS (в частности, очищает стек возвратов из подпрограмм, вызванных по запросам CAL$G и CAL$N) и выходит в режим "DOS", обычно на 100000 (см. прил.6). Таким образом, обеспечивается корректный выход в ДОС из любого режима. Также очищает стек сохранений (используемый запросами SAVE$ и NEW$SP). Кроме того, удаляются модули, у которых установлен признак удаления по EXIT$, а также все модули, у которых отсутствует родительский модуль и при этом их удалять не запрещено ("удаление мусора"). Прочие запросы низкого уровня ═════════════════════════════ 11. Пересылка или обмен массивов ( MOV$N ) MOV sadr,R0 ;адрес источника Длина массива меньше 0 (NEG) означает обмен массивов, иначе - пересылка. Коды режимов - это коды подключения режимов и страниц (см. прил.1) + флаги: #100000 - "любой режим" (устанавливать, если массив в основном ОЗУ или ПЗУ); #40000 - устанавливать, если в этом режиме в сегменте 160000... отсутствует ROM-BIOS (ПЗУ или его копия); в этом случае пересылка производится без обращения к ROM-BIOS (п/п пересылки - в стеке); Код режима = 0 означает текущий рабочий режим (берется из ячейки @WRK$ - при штатном использовании запросов BIOS, включая CAL$.., JMP$.., эта ячейка всегда содержит код текущего режима). Правильность установки флагов режимов не контролируется. Все регистры сохраняются. Стек должен быть ниже 100000. Перекрытие массивов приведет к ошибке, если приемник выше источника. Если заданы несовпадающие режимы и отсутствует флаг #100000, пересылка ведется через основное ОЗУ (с адреса = SP) с его сохранением, перекрытия и пересылка из ПЗУ в этом случае недопустимы. 12, 13. Чтение и обмен слов ( RDW$N и CHW$N ) JSR R5,@#RDW$N или @#CHW$N ;@#167524 или @#167525 Читает слово в R0 или обменивает с R0. Флаги и 0 означают то же, что и в MOV$N. В случае установки флага #40000 чтение и обмен производятся в несколько раз медленнее, чем без него. 14, 15. Вызов подпрограммы и безусловный переход (CAL$N и JMP$N) JSR R5,@#CAL$N или @#JMP$N ;@#167522 или @#167523 В отличие от предыдущих запросов учитывается только реальный код режима и страницы (флаги и 0 не интерпретируются); CAL$N и JMP$N применимы только для тех режимов и страниц, в которых в сегменте 160000... есть ROM-BIOS. Подпрограмме передаются и из подпрограммы возвращаются все регистры. Можно использовать стандартную передачу параметров через стек, нельзя только в подпрограмме использовать адрес возврата (@SP) - он изменен! На время работы вызываемой по CAL$N п/п блокируются прерывания по вектору 4 (программно - в @#4 заносится #STP$, в @#6 - #200, при возврате восстанавливаются прежние значения), и устанавливается высокий приоритет процессора (при возврате восстанавливается прежний). Максимальная вложенность подпрограмм в RAM-BIOS v3.01 - 20. 16-18. Точки входа переключения режимов ( MOD$, MOD$S, MOD$J ) Подключение │ Подключение систем-│ Подключение режима R4 После физического переключения режима обращения к стеку отсутствуют, регистры (кроме R4) не портятся. Приведенные запросы не меняют @WRK$ (код текущего режима на вершине стека возвратов), программисты должны сами заботиться о том, чтобы при переключенном режиме не было прерываний (так как возврат из прерываний, переключающих режимы, будет происходить в режим @WRK$ - а он другой). Приведенные запросы выполняют только переключение и не содержат "лишних" операций, см. поставляемые в комплекте с документацией исходники. Использование стека запросами BIOS ══════════════════════════════════ В процессе обработки запросов BIOS (только вызываемых по "JSR R5,...", кроме CH$WRK) стек опускается на следующую глубину:
─ при обработке простых запросов высокого уровня в стек добавляется еще несколько слов; ─ пересылка массивов между разными страницами доп. ОЗУ опускает стек на 40 (всего - вместе с общей обработкой); ─ если при этом при подключении одной из страниц отсутствует ROM-BIOS, то подпрограмма пересылки записывается в стек, что опускает его дополнительно еще на 44; ─ при этом нужно еще иметь резерв в 44 байта на случай нажатия в этот момент кнопки СТОП - в наихудшем случае нам доводилось наблюдать 8 прерываний подряд от одного нажатия СТОП. ═══════════════════════════════════════════════════════════ ПРИЛОЖЕНИЕ 1. Режимы работы и распределение памяти. Память в контроллерах "АльтПро" разбита на страницы по 32 Кб, части (сегменты) одной такой страницы подключаются в области адресов 100000-177777, сегменты разных страниц одновременно подключить нельзя. Сегментами ниже называются фрагменты памяти по 10000 байт. Сегмент с номером X=0...7 может быть подключен либо с адреса 1X0000, либо с адреса 1X0000+-40000 в зависимости от номера режима. Распределение памяти в различных режимах приведено в табл.1, затем следуют пояснения общего характера, которые рекомендуется прочитать, и примечания специального характера, которые понадобятся тем, кто пишет некорректные программы; тем, кто пишет корректные программы, рекомендуем пользоваться запросами BIOS, значительно упрощающими работу с доп. памятью и предотвращающими конфликты. Таблица 1. Режимы работы и распределение памяти. ╔════════════════╤═════╤═════╤═════╤═════╤═════╤═════╤═════╤═════╗ ПОЯСНЕНИЯ Буква 'W' после номера сегмента означает, что ОЗУ доступно только по записи, 'R' - только по чтению, через дробную черту - старая версия контроллеров / новая (по номеру версии ПЗУ не определяется), '-' - не подключается ничего. ПЗУ в контроллерах имеет объем 10000 байт, в режиме SYS одно и то же ПЗУ подключается и со 160000, и со 170000 (благодаря этому изменяется адрес запуска компьютера). В контроллерах "SMK" ("винтовых") во всех режимах, кроме SYS, в адресах 170000-177000 подключено ОЗУ, в дисководных - нет, выше 177000 - во всех одинаково. Внутри таблицы в рамки выделены группы режимов и адресов, используемые при пересылке данных для доступа ко всем 8 сегментам страницы памяти (одна рамка для БК10, другая - БК11М: это области, неперекрывающиеся с ПЗУ и охватывающие всю страницу). Однако при размещении и вызовах подпрограмм на БК11М RAM-BIOS использует два первых режима (SYS и Std10) в окне 120000-140000, т.к. для работы с подпрограммами необходимо наличие ROM-BIOS в адресном пространстве. РАСШИФРОВКА РЕЖИМОВ: SYS ─ используется для запуска, пересылки данных на БК10 и RAM-BIOS'ом (он - всегда в 0-й странице); Std10, Std11 ─ стандартные, традиционные режимы работы для БК10 и 11М соответственно, Std10 используется также для пересылки данных на БК10; ОЗУ10 ─ вместо монитора БК10 и ПЗУ-160000 подключается ОЗУ (на многих БК10 требуется простая доработка, иначе доп. ОЗУ подключается параллельно ПЗУ монитора и приходится записывать в это ОЗУ копию монитора); используется также для доступа к доп. памяти на БК11М; All ─ позволяет на БК10 подключить ОЗУ ко всему адресному пространству, что используется для загрузки копии Вильнюсского Бейсика; применяется также для доступа к доп. памяти на БК11М; ОЗУ11 ─ подключение ОЗУ вместо ПЗУ на БК11М, для отключения ПЗУ монитора БК11М простая доработка требуется всегда; Hlt10, Hlt11 ─ открывают доступ к HALT-режиму процессора на БК10 и БК11М соответственно. Максимально "продвинутые" режимы: везде, где можно, подключается ОЗУ вместо ПЗУ и на БК10 нижняя часть ОЗУ монитора защищена от записи (квази-ПЗУ) для повышения глюкоустойчивости. Доработки для отключения ПЗУ монитора описаны в файле "СХЕМЫ.EDP". На контроллерах с доп. ОЗУ менее 256 Кб на БК10 может быть подключено ПЗУ Бейсика традиционно записью #10 в 177130, правда на режимы ОЗУ это никак не влияет. При подключении ОЗУ параллельно чему-либо (ПЗУ, регистры) в случае конфликта данных (в одном - 0, в другом - 1) в подавляющем большинстве случаев читается 1 (для микросхем такой конфликт не страшен, все они имеют внутреннюю защиту - хотя, конечно, конфликты снижают помехоустойчивость и потому нежелательны). Поэтому при параллельном подключении ОЗУ и ПЗУ в ОЗУ надо предварительно записывать копию ПЗУ, а при параллельном подключении ОЗУ и регистров в ОЗУ должны быть нули. При включении режима "All" из режимов Hlt10, Hlt11 (а на "старых" контроллерах еще и из режима ОЗУ10) в ОЗУ режима "All" по адресу 177130 вписывается <20 + код страницы>; при использовании запросов BIOS таких переключений не бывает. КОДЫ ПОДКЛЮЧЕНИЯ СТРАНИЦ ОЗУ: 64 Кб ─ 0, 2000; 128 Кб ─ 0, 2000, 4, 2004; 256 Кб ─ 0, 2000, 4, 2004, 10, 2010, 14, 2014; 512 Кб ─ 0, 2000, 4, 2004, 10, 2010, 14, 2014, 1, 2001, 5, 2005, 11, 2011, 15, 2015. Объем памяти можно определить по байту 167777 ПЗУ контроллера (см. приложение 4). При переключениях коды режима и страницы необходимо складывать по BIS. ПРИЛОЖЕНИЕ 2.1. Формат таблицы сегментов BIOS. Вся память разделена на сегменты длиной 20000 (несколько особых сегментов имеют меньшую длину). Соответствие логических номеров физическим кодам сегментов задано в таблице, где каждый сегмент описывается одним словом. Адрес таблицы можно получить следующим образом после запроса CAT$ (вызов #12, результат в R1) при условии подключения страницы с RAM-BIOS'ом: SUB -(R1),R1 Кроме кода режима и кода страницы, которые мы упоминали ранее (см. также прил. 2.2), используются следующие биты:
ПРИЛОЖЕНИЕ 2.2. Коды сегментов, используемые в BIOS. ┌───────────────┬───────────────────────┬───────────────────┐ ПРИЛОЖЕНИЕ 3. Формат записи каталога модулей. Запись каталога имеет следующую структуру: 00 слово <имя> - 1-й байт - идентификатор автора модуля (старший байт), байт=#0 используется для служебных целей; 2-й байт - идентификатор модуля; 02 слово <длина в словах> - меньше 100000 (в словах); 04 слово <признаки>:
10 слово <смещение до расширенного имени> - смещение от начала модуля до текста .ASCIZ; 12 слово <смещение> - смещение от начала сегмента до нач.модуля; 14 байт <сегмент> - логический номер сегмента начала модуля; 15 байт <резерв>. ПРИЛОЖЕНИЕ 4. Кодировка версии контроллера. Номер версии доступен программно - он содержится в последнем слове ПЗУ (по адресу 167776). В старшем байте содержится ключ и информация об объеме дополнительной памяти, в младшем байте - информация о типе контроллера и номере версии ПЗУ.
В старой версии ПЗУ ( мл. байт > 0 ) ROM-BIOS отсутствует. Проверка на наличие не менее 64 Кб и современной версии ПЗУ осуществляется одной командой: CMP @#167776,#176200 \ BHIS - Ok Внимание! Программисты, загружающие в ОЗУ с адреса 160000 свою версию драйверов, должны область 167460-170000 (точки входа BIOS и номер версии контроллера) копировать 1:1 из ПЗУ ! ПРИЛОЖЕНИЕ 5. Зарезервированные знаки в именах модулей. Для старшего байта имени модуля (идентификатор изготовителя) по состоянию на 1.06.98 г. зарезервированы следующие знаки: $ % `(обратный апостроф) R L Программисты, желающие закрепить за собой какой-либо другой символ, должны сообщить об этом в фирму-изготовитель (АльтПро) для предотвращения совпадений и программных конфликтов. ПРИЛОЖЕНИЕ 6. Стек возвратов и режим DOS. Стек возвратов из подпрограмм, вызываемых по запросам CAL$G и CAL$N растет вниз (каждый CAL$ добавляет в стек 4 слова), в исходном состоянии (после загрузки или EXIT$) представляет собой следующее:
Указатель стека возвратов WRK$, адрес = 120016 в системной странице (код ее включения - #2160), после запуска или EXIT$ содержит #TOP-10, при каждом CAL$ он опускается на 10; ячейка DOS$ (адрес 120020 в системной странице), введенная для доступа к коду DOS-режима, всегда содержит #TOP. После первого CAL$ (стек возвратов опускается на 10):
При включении питания компьютера и при перезапуске без логической обработки включается стандартный режим (Std10 или Std11), в нем обычно загружается ДОС, и он же объявляется режимом "DOS" при инсталляции RAM-BIOS. Однако в дальнейшем в ряде случаев (например, при подключении HALT-режима), DOS-режим меняется программами типа WINDOWS, OS/A, HALT-DRIVER. Короче, программисты могут изменять содержимое ячеек TOP - TOP-6, используя доступ через ячейку DOS$. ПРИЛОЖЕНИЕ 7. Обработка ошибок. В случае возникновения ошибки BIOS вписывает код ошибки в байт ERR$ = 120004 в системной странице (код ее включения - #2160) при условии, что RAM-BIOS в этой странице имеется, после чего выдает сигнал ошибки - характерное затухающее подергивание экрана с прерывистым звуковым сигналом. Признак наличия RAM-BIOS: в ячейке 120010 системной страницы содержится #120012. Коды ошибок (на 1.06.98 г.):
Признак целостности байта ERR$: байт 120005 = 111 (octal). ПРИЛОЖЕНИЕ 8. Стандартные адреса и константы BIOS. 1) В области ROM-BIOS: BEGIN$=167342 ;начало ROM-BIOS; здесь располагаются подпрогра- 2) В области RAM-BIOS (в системной странице доп. ОЗУ): R$VERS=120002 ;содержит номер версии RAM-BIOS; ПРИЛОЖЕНИЕ 9. Краткие сведения о HALT-режиме. Необходимым условием работы HALT-режима является наличие ОЗУ по записи по адресу 177674, где в 2 последовательных ячейках сохраняется PC и PS при HALT-прерывании. Кнопка СТОП всегда вызывает именно это прерывание, но из-за отсутствия указанного ОЗУ вслед за HALT-прерыванием происходит прерывание по вектору 4 (причем, в результате этого PC в стеке оказывается на 2 больше, чем надо). HALT-прерывание происходит по вектору 160002, совместить это с драйвером дисковода возможно, подключив со 160000 ОЗУ вместо ПЗУ (см. реализации WIN-DEMO и OS/A WASP). В ячейке 160004 (new PS) должен быть установлен бит #2000 - "высокий приоритет процессора для HALT-режима" - чтобы заблокировать прерывания от дребезга кнопки СТОП, и обработчик HALT-прерывания должен некоторое время не делать никаких операций, изменяющих PS, поскольку при "обычных" операциях бит #2000 в PS всегда сбрасывается. Итак, алгоритм обработки HALT-прерывания в программах типа WIN-DEMO, OS/A WASP (работающих по СТОП+клавиша) в первом приближении (ориентировочно!) следующий:
================ (с) В.Е.Новак, А.И.Глускер 1997-98 гг. ===== Исходные тексты с оригинальным форматированием: |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |