a123-flex 0 July 25, 2020 Posted July 25, 2020 · Report post 20.07.2020 в 19:14, destroit сказал: Я читал Ваши ссыль и раньше, но сегодня Ваше эссе сделало мой день ...снимаю шляпу . Пост зачетный, вот только когда я автора спросил почему у него сайт который полжизни строился открывает ссылку 20 секунд и с тремя редиректами - он мне ответил, что ему и не нужно чтобы он работал)) Диссонанс некоторый с образом целеустремленного чемпиона) Quote Share this post Link to post Share on other sites More sharing options...
muravei 0 July 26, 2020 Posted July 26, 2020 · Report post 19.07.2020 в 14:47, Alikberov сказал: но адаптеров USB<->1-Wire - нету… Да-а, трагедия... :( Вместо них отлично работают USBtoUART , причем к такому я подключаю 1-Wire термодатчика(2) без каких-либо доп. деталей. причем и на смартфоне с Андроид. Прочитать можно тут и тут. Quote Share this post Link to post Share on other sites More sharing options...
Alikberov 0 October 14, 2020 Posted October 14, 2020 · Report post 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 ячеек. Quote Share this post Link to post Share on other sites More sharing options...
Alikberov 0 January 11, 2021 Posted January 11, 2021 · Report post Написал Вторую статью с пошаговой иллюстрацией проектирования Койяанискаци, так как начал проектирование с нуля… Сейчас я полностью игнорирую моменты, связанные с производительностью. Регистровый Файл вынес в память, аналогично как в 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.: Тем самым, за производительностью не гонюсь, но хочу попробовать получить эскиз Койяанискаци с наименьшим количеством элементов, если браться всё-таки его делать рассыпухой на ТТЛ… Quote Share this post Link to post Share on other sites More sharing options...
SII 0 January 11, 2021 Posted January 11, 2021 · Report post Ну, в 6502 регистры были как раз внутри проца: аккумулятор, X и Y; два последних -- чисто для адресации. Другое дело, что из-за наличия лишь одного "арифметического" регистра (аккумулятора) в проце второй операнд всегда находился в памяти -- но никакого регистрового файла там не было, т.к. адресовалось всё это именно как ячейки памяти. Quote Share this post Link to post Share on other sites More sharing options...
Alikberov 0 January 15, 2021 Posted January 15, 2021 (edited) · Report post Гов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 January 15, 2021 by Alikberov Quote Share this post Link to post Share on other sites More sharing options...
Alikberov 0 April 11, 2021 Posted April 11, 2021 · Report post Написaл Кой-Машины-Эмулятор… Не шедевр, конечно. Всё сырое. Работает не очень-то стабильно. (После полной загрузки жмите ПРОБЕЛ для пошаговой эмуляции…) На дамп справа можно не обращать внимания - он для моего личного наблюдения за архитектурным состоянием РОН и всей эмуляции в целом… P.S.: На данный момент разработка/проработка концепции приостановлена… Quote Share this post Link to post Share on other sites More sharing options...
Alikberov 0 June 14, 2021 Posted June 14, 2021 · Report post Более-менее написал Эмулятор Процессора Койяанискаци. Работает и на смартфонах. В качестве демонстрационной среды выбрал карманную игру Автослалом (Электроника ИМ-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₀…₃. Quote Share this post Link to post Share on other sites More sharing options...