Jump to content

    
Alikberov

Койяанискаци - ТТЛ-процессор с душой акына

Recommended Posts

20.07.2020 в 19:14, destroit сказал:

Я читал Ваши ссыль и раньше, но сегодня Ваше эссе сделало мой день ...снимаю шляпу .

Пост зачетный, вот только когда я автора спросил почему у него сайт который полжизни строился открывает ссылку 20 секунд и с тремя редиректами - он мне ответил, что ему и не нужно чтобы он работал))

 

Диссонанс некоторый с образом целеустремленного чемпиона) 

Share this post


Link to post
Share on other sites
19.07.2020 в 14:47, Alikberov сказал:

но адаптеров USB<->1-Wire - нету…

Да-а, трагедия...  :(

Вместо них отлично работают USBtoUART , причем к такому я подключаю 1-Wire термодатчика(2) без каких-либо доп. деталей. причем и на смартфоне с Андроид.

Прочитать можно тут и тут.

Share this post


Link to post
Share on other sites

B общем, из-за жёстких, почти аномальных проблем с ПК, я до сих пор не мог полноценно пользоваться своей техникой…
Только гуглом в режиме read-only на смартфоне (ни один пароль свой не помню)…
 

От скуки купил Raspberry Pi 4 и обнаружил, что и HDMI-вход пятого монитора вылетел, так как на телевизоре сестры RetroPie запустился и отобразился, а мой монитор лишь VGA принимает и пишет, что на HDMI нет сигнала. Причём при старте самого ПК заставка BIOS по HDMI передаётся в сильных шумах красными оттенками и с сильным мерцанием. Шнуры менял - не помогало.
(Раньше, когда показывал ещё, при любой помехе от холодильников или ЛДС монитор часто гас на пару секунд, пока вообще через год не потерял сигнал…)
 

По теме…
Пока сутками на карантине пролёживал диван, мысленно продумывал свой процессор…
Как я уже говорил, архитектура задумывалась как наращиваемая по разрядности.
На данный момент комбинация кода «40 A5» или «80 AB» бессмысленна, так как выбор регистра «A5» под префиксом «40» просто вызывает задержку в цикле, где просто регистр 4 раза выбирается. Но, есть мысль несколько усложнить дешифратор команд на предмет проверки наличия префикса. Тогда «A5» и «40 A5» станут разными командами.
Появится перспектива работать с упакованными данными, где «40 A5» сменит режим регистра A₅ на 32-битный…

  • «AB 10 A5 3A» - эквивалент «PADDB A5,B3»
  • «AB 20 A5 3A» - эквивалент «PADDW A5,B3»
  • «AB 40 A5 3A» - эквивалент «PADDD A5,B3»
  • «AB 80 A5 3A» - эквивалент «PADDQ A5,B3»

Тем самым, если взять вариант данного процессора с 64 битами, то операции АЛУ будут всегда подобны SIMD-вычислениям и можно производить операции над упакованными байтами, словами и двойными словами…
Если «40 A5» изменяет «режим упаковки» отдельного регистра A₅, то «40 AB» должен как-то менять режим взаимодействия операндов «A,B». Но за все эти месяцы я так и не придумал, как именно…
Хотя, есть идея использовать их как отдельные служебные режимы, где «40 AD» означает 32-битный режим AD'ресации…
 

Адресация
В архитектуре любой разрядности ячейки памяти адресуются формулой «(Bi << 8) + Ci».
Тем самым, как и в x86-процессоре, регистры B выступают за сегмент, а C - смещение.
Так, в 8-битном классическом исполнении адресация получается 0…FFFF, а в 16-битном - 0…100FEFF. Это позволит запускать 8-битный код, скажем, на 32-битном варианте процессора. Так как префиксами «10 B9» можно указать, что сегмент - 8-битный и адресует до 65536 ячеек.

Share this post


Link to post
Share on other sites

Написал Вторую статью с пошаговой иллюстрацией проектирования Койяанискаци, так как начал проектирование с нуля…

Сейчас я полностью игнорирую моменты, связанные с производительностью.
Регистровый Файл вынес в память, аналогично как в MOS 6502…
Операция АЛУ занимает целых 5 тактов:

  • Цикл M₀ читает регистр A₀ с PSW-словом
  • Цикл M₁ читает регистр правого операнда
  • Цикл M₂ читает регистр-приёмника левого операнда
  • Цикл M₆ сохраняет результат в ячейку регистра-приёмник
  • Цикл M₉ сохраняет PSW-слово

Иными словами, операция «A₁ += B₂» разворачивается в:

  • M₀: Load PSW:[0x00A₀]
  • M₁: Load SRC:[0x00B₂]
  • M₂: Load DST:[0x00A₁]
  • M₆: Save [0x00A₁]:DST+SRC
  • M₉: Save [0x00A₀]:PSW

И требует 1+5=6 тактов, где 1 такт - на считывание кода самой операции, а ещё 5 - на все те циклы…

P.S.: Тем самым, за производительностью не гонюсь, но хочу попробовать получить эскиз Койяанискаци с наименьшим количеством элементов, если браться всё-таки его делать рассыпухой на ТТЛ…

Share this post


Link to post
Share on other sites

Ну, в 6502 регистры были как раз внутри проца: аккумулятор, X и Y; два последних -- чисто для адресации. Другое дело, что из-за наличия лишь одного "арифметического" регистра (аккумулятора) в проце второй операнд всегда находился в памяти -- но никакого регистрового файла там не было, т.к. адресовалось всё это именно как ячейки памяти.

Share this post


Link to post
Share on other sites

Говoрят, что Wang 2200 некогда был попыткой полностью сокрыть машинный код от пользователя.

(Бейсик без PEEK/POKE - это же кошмарный ужас!)

Получается, у меня - диаметрально противоположная попытка: Сделать чуть ли ни Бейсик в железе…

11.01.2021 в 22:50, SII сказал:

Ну, в 6502 регистры были как раз внутри проца: аккумулятор, X и Y; два последних -- чисто для адресации.

Из 6502 позаимствовалось лишь активное обращение к ОЗУ страницы #0, где A, X и Y - походят на промежуточные регистры с программным доступом, а остальные 256 регистров - в странице #0…

Сейчас упростил Дешифратор Команд до семи:

  • HLT - та же операция INT #0, но отдельно
  • BCD - не «Binary Coded Decimal» режим, а «Byte-Code-Data» - аналог x86-imm8 констант, но работающих как 99 префиксов
  • ALU - группа стандартных операций АЛУ
  • REG - активация регистров-аккумуляторов в каждой из четырёх групп
  • ARG - связывание регистровых групп в связку операндов АЛУ
  • CND - группа условных операций
  • INT - группа программных прерываний (от 32 до 3200 векторов)

В основном, упразднил операции EXT/FIX для чтения/записи ОЗУ: Теперь доступа к ячейкам ОЗУ прямого нет - только через префиксы.

   00|HLT                 ; Останов / INT #0
   0C|AND  Ri,T₀          ; Conjunction
   3D|OR   Ri,T₃          ; Disjunction
   A1|REG  A₁             ; Активация аккумуляции в A₁
   BC|ARG  B,C            ; Операнды B и C как аргументы АЛУ-операций
   CE|RET  NC             ; Возврат, если NOT CF
   CF|RET  CF             ; Возврат, если CF
   E1|INT  0xE100         ; Прерывание на вектор E100₁₆
21 00|INT  0x0021         ; Прерывание на вектор 0020₁₆ с опцией #1
21 0C|AND  Ri,[B₂C₂+1]    ; Конъюнкция с ячейкой памяти
21 3D|OR   Ri,[B₂C₂+1+T₃] ; Дизъюнкция с ячейкой памяти
21 A1|MOV  [B₂C₂+1],A₁    ; Запись в память значения регистра
21 BC|<<<reserved>>>      ; 1584 комбинации пока не определены
21 CE|JNC  $__21          ; Переход на позицию 21₁₆ текущего параграфа, если NOT CF
21 CF|JCF  $__21          ; Переход на позицию 21₁₆ текущего параграфа, если CF
21 E1|INT  0xE120         ; Прерывание на вектор E120₁₆ с опцией #1
43 21|<<<reserved>>>      ; 9801 комбинация пока не определена

Выглядит более-менее исчерпывающе и гибко, чтобы реализовывать любые алгоритмы.

B9 C9 03 BC|DEC  B₉C₉,3      ; Экспериментальный вариант - декремент пары
      90 A1|MOV  [B₉C₉+0],A₁ ; Так как PUSH отсутствует, программно реализуем
      91 A2|MOV  [B₉C₉+1],A₂ ; Каждый регистр записываем в буфер стека
      92 C7|MOV  [B₉C₉+2],C₇ ; на свою позицию

CC C7 92 0F|MOV  C₇,[B₉C₉+2] ; Так как POP отсутствует, программно реализуем
AA A2 91 0F|MOV  A₂,[B₉C₉+1] ; Каждый регистр читаем из буфера стека
   A1 90 0F|MOV  A₁,[B₉C₉+0] ; со своей позиции
B9 C9 03 CB|INC  B₉C₉,3      ; Экспериментальный вариант - инкремент пары

 

P.S.: Когда пытался программировать на NES под 6502, сложилось мнение, что 6502 - RISC-архитектура, что являлось заблуждением.
Тем самым, признаю собственную некомпетентность в различных архитектурах и понимаю, что Койяанискаци, хоть и задумывался 2 года назад как шуточный шаг в сторону RISC, но теперь он неплохо отдаёт привкусом CISC…

Edited by Alikberov

Share this post


Link to post
Share on other sites

Написaл Кой-Машины-Эмулятор
Не шедевр, конечно. Всё сырое. Работает не очень-то стабильно.
(После полной загрузки жмите ПРОБЕЛ для пошаговой эмуляции…)
На дамп справа можно не обращать внимания - он для моего личного наблюдения за архитектурным состоянием РОН и всей эмуляции в целом…

P.S.: На данный момент разработка/проработка концепции приостановлена…

Share this post


Link to post
Share on other sites

Более-менее написал Эмулятор Процессора Койяанискаци. Работает и на смартфонах.

В качестве демонстрационной среды выбрал карманную игру Автослалом (Электроника ИМ-23) с имитацией ЖК-сегментов, управляемых битами РОН D₀…₇.

Эмулятор имеет ассемблер (при изменении листинга в поле необходимо затем перезагрузить страницу, чтобы те вступили в силу после ретрансляции), дамп памяти и дизассемблер.

Порты Ввода-Вывода
Как и сам процессор с идеологией Акына, карта портов ввода-вывода планируется акынско-сквозной, где в D₉ указывается серийный индекс периферийной микросхемы, а через D₀…₈ производится работа с выбранной микросхемой:

╔════╤════════╤════════════════════════════════════════════════════════════════╗
║ D9 │  ИМС   │ Описание доступа к ресурсам микросхемы через РОН процессора    ║
╠════╪════════╪════════════════════════════════════════════════════════════════╣
║0x53│ i8253  │ D0/D1/D2 - Каналы Счётчиков 0/1/2                              ║
║    │К580ВИ53│ D3 - Регистр Статуса Таймера                                   ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x55│ i8255  │ D0/D1/D2 - Порты A/B/C ППА                                     ║
║    │К580ВИ55│ D3 - Регистр Статуса ППА                                       ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x57│ i8257  │ D0/D2/D4/D6 - Каналы 0/1/2/3: ПДП Адрес                        ║
║    │        │ D1/D3/D5/D7 - Каналы 0/1/2/3: ПДП Счёт                         ║
║    │К580ВТ57│ D8 - Регистр Статуса ПДП                                       ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x79│ i8279  │ D0 - Регистр Данных                                            ║
║    │К580ВВ79│ D1 - Регистр Статуса                                           ║
╚════╧════════╧════════════════════════════════════════════════════════════════╝

Это значит, что разработчику нет необходимости изучать какую-то карту, так как достаточно просто выбрать номенклатурный индекс конкретной микросхемы и работать уже с ней. Если в системе предусматривается, например, 250 микросхем типа i8253/К580ВИ53, то предварительно в регистр D₉ записывается код 00₁₆, а в регистр D₈ - порядковый индекс микросхемы в системе, после чего в D₉ уже записывается код 53₁₆ и выбранный таймер доступен к программированию портами D₀…₃.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.