Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
6502:decoder [2013/09/27 16:48] org [Декодер] |
6502:decoder [2020/02/10 13:10] (текущий) org |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ==== Декодер ==== | + | # Декодер |
Декодер 6502 (англ. PLA) - это обыкновенный демультиплексор, но очень большой. Формула демультиплексора получается 21-to-130, но с некоторыми исключениями (об этом ниже) | Декодер 6502 (англ. PLA) - это обыкновенный демультиплексор, но очень большой. Формула демультиплексора получается 21-to-130, но с некоторыми исключениями (об этом ниже) | ||
Строка 14: | Строка 14: | ||
{{6502:decoder_nice.jpg?1000}} | {{6502:decoder_nice.jpg?1000}} | ||
- | ==== Особенные линии ==== | + | |
+ | ## Особенные линии | ||
Кроме перечисленных выше значений в качестве дополнительных входов могут выступать специальные контрольные линии. | Кроме перечисленных выше значений в качестве дополнительных входов могут выступать специальные контрольные линии. | ||
Строка 22: | Строка 23: | ||
* IR0 : обычно для проверки двух младших разрядов кода операции используется общий сигнал IR01, но исключительно для 128й линейки (IMPL) используется значение IR0. | * IR0 : обычно для проверки двух младших разрядов кода операции используется общий сигнал IR01, но исключительно для 128й линейки (IMPL) используется значение IR0. | ||
- | ==== Содержимое PLA ==== | + | Есть мнение что эти специальные управляющие линии хотя и территориально входят в декодер - на самом деле просто части рандомной логики, а в декодер попали просто потому что так удобней было развести соединения. |
+ | |||
+ | ## Содержимое PLA | ||
Онлайн-декодер : http://breaknes.com/files/6502/decoder.htm | Онлайн-декодер : http://breaknes.com/files/6502/decoder.htm | ||
Строка 168: | Строка 171: | ||
|K09 |128 |000000011000000000000 |XXXX10X0 |TX |IMPL| | |K09 |128 |000000011000000000000 |XXXX10X0 |TX |IMPL| | ||
- | ==== Что значит Raw bits ==== | + | ## Что значит Raw bits |
Если представить себе декодер как ROM 21x130, где каждый бит представляет собой транзистор, образуемый пересечением полисиликона и диффузии, то raw bits будут представлять одну линейку декодера. | Если представить себе декодер как ROM 21x130, где каждый бит представляет собой транзистор, образуемый пересечением полисиликона и диффузии, то raw bits будут представлять одну линейку декодера. | ||
- | Для примера на картинке представлена 5я линейка декодера. Счёт бит начинается снизу-вверх. 0 означает отсутствие транзистора, 1 - наличие. | + | Для примера на картинке представлена 5-я линейка декодера. Счёт бит начинается снизу-вверх. 0 означает отсутствие транзистора, 1 - наличие. |
{{6502:decoder_line.jpg}} | {{6502:decoder_line.jpg}} | ||
- | ==== Branch T0 skipping ==== | + | ## Branch T0 skipping |
- | С контакта RDY через линию задержки приходит специальная линия **/PRDY**. Если процессор был не готов на момент завершения предыдущей инструкции, то если следующая инструкция является инструкцией условного перехода (branch), то её 0й цикл (T0) пропускается. | + | С контакта [[6502:pads#rdy_sync|RDY]] через линию задержки приходит специальная линия **/PRDY**. Если процессор был не готов на момент завершения //предыдущей// инструкции, то если следующая инструкция является инструкцией условного перехода (branch), то её 0-й цикл (T0) пропускается. |
Зачем они это сделали - не известно. | Зачем они это сделали - не известно. | ||
- | ==== Симуляция ==== | + | ## Симуляция |
Существует два подхода в симуляции декодеров : | Существует два подхода в симуляции декодеров : | ||
* Обычный перебор всех линий в цикле. При этом каждая итерация будет представлять собой операцию NOR над всеми входами. В нашем случае это будет очень медленно, потому что у декодера 6502 очень много линий (130). | * Обычный перебор всех линий в цикле. При этом каждая итерация будет представлять собой операцию NOR над всеми входами. В нашем случае это будет очень медленно, потому что у декодера 6502 очень много линий (130). | ||
* Табличный метод. Смысл в том, что мы заранее генерируем массив массивов для всех 130 линий, перебирая все возможные комбинации входов (IR, T0-T5, /PRDY). Индекс массива получается 8+6+1=15 бит, итого получается 32768 130-байтовых массивов (4.2 MB памяти). | * Табличный метод. Смысл в том, что мы заранее генерируем массив массивов для всех 130 линий, перебирая все возможные комбинации входов (IR, T0-T5, /PRDY). Индекс массива получается 8+6+1=15 бит, итого получается 32768 130-байтовых массивов (4.2 MB памяти). | ||
+ | |||
+ | {{template>6502_blocks}} |