Jump to content

    

Alikberov

Участник
  • Content Count

    48
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Alikberov

  • Rank
    Участник
  • Birthday 08/17/1979

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Более-менее написал Эмулятор Процессора Койяанискаци. Работает и на смартфонах. В качестве демонстрационной среды выбрал карманную игру Автослалом (Электроника ИМ-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₀…₃.
  2. Написaл Кой-Машины-Эмулятор… Не шедевр, конечно. Всё сырое. Работает не очень-то стабильно. (После полной загрузки жмите ПРОБЕЛ для пошаговой эмуляции…) На дамп справа можно не обращать внимания - он для моего личного наблюдения за архитектурным состоянием РОН и всей эмуляции в целом… P.S.: На данный момент разработка/проработка концепции приостановлена…
  3. Говoрят, что Wang 2200 некогда был попыткой полностью сокрыть машинный код от пользователя. (Бейсик без PEEK/POKE - это же кошмарный ужас!) Получается, у меня - диаметрально противоположная попытка: Сделать чуть ли ни Бейсик в железе… Из 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…
  4. Написал Вторую статью с пошаговой иллюстрацией проектирования Койяанискаци, так как начал проектирование с нуля… Сейчас я полностью игнорирую моменты, связанные с производительностью. Регистровый Файл вынес в память, аналогично как в 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.: Тем самым, за производительностью не гонюсь, но хочу попробовать получить эскиз Койяанискаци с наименьшим количеством элементов, если браться всё-таки его делать рассыпухой на ТТЛ…
  5. 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 ячеек.
  6. Нe по теме… Пo теме… Вроде бы нашёл способ организации Регистрового Файла без выкрутасов, но только ментально. Код ещё никакой не писал… Важно/!\ Так как в состав большинства FPGA входят несколько множителей не требующих тактовой частоты, а Хабр ещё и подтверждает это, то появились некоторые соображения… Сейчас имеются такие команды: A1 AC 3A|ADD A1,C3 ; A1 += C3 A1 AC 50 3A|ADD A1,5*C3 ; A1 += 5 * C3 // префикс 50 устанавливает коэффициент умножения A1 AC 3B|SUB A1,C3 ; A1 -= C3 A1 AC 50 3B|SUB A1,5*C3 ; A1 -= 5 * C3 // префикс 50 устанавливает коэффициент умножения Но есть мысли немного доработать: A1 AC 3A|ADD A1,C3 ; A1 += C3 A1 AC 50 3A|MULU B5:C5,A1,C3 ; B5C5 = uint(A1 * C3) // префикс 50 выбирает индекс приёмников произведения A1 AC 3B|SUB A1,C3 ; A1 -= C3 A1 AC 50 3B|MULI B5:C5,A1,C3 ; B5C5 = int(A1 * C3) // префикс 50 выбирает индекс приёмников произведения Тем самым, появится операция умножения порядковых и целочисленных… Если придерживаться ТТЛ-исполнения, К555ИП9 выполняет функцию перемножения, а сам Fetch-узел в его нынешнем исполнении на цикле M3, предназначенном для обмена данными с ОЗУ, можно растягивать на необходимое число тактов. Тем самым, на чистом ТТЛ операция умножения потребует до 24 тактов, что не слишком плохо… Естественно, в Verilog под FPGA задержка нужна для сохранения результата в две секции регистров: Младший байт результата в регистр C и старший байт результата в регистр B… Тем самым, на FPGA код будет множить уже за 4 такта… P.S.: Напомню, что Койяанискаци, как RISC-ядро для выполнения CISC-инструкций, не задумывался для подобных мощных вычислительных операций. Тогда как ПЛИС вполне позволяет вводить подобную арифметику. Вопрос лишь в одном: А стоит ли? Концептуальная дилемма…
  7. Обнoвил эмулятор… Сейчас он переводит машинный код прямо в JavaScript-записи. И это - уже что-то, так как кое-что уже проявляется и нет абсолютного вакуума дампа для не набитого глаза… Просто жмёте «Step» и шагаете по кодам. В момент «прыжка» листинг обновляется сам. В таблице регистров красным помечаются приёмники, а зелёным - источники…
  8. Пoка с эмулятором проблема. Он вроде бы и работает, но дизассемблер не получается как надо… Так, код «AB A1 2B 3D 4E» отображает как «A1 = ((((A1) - B2) | B3) ^ B4» и выполняется через eval… Но, скобки «(A1)» напрягают эстетически и нужно парсер переписывать. То есть, хочу сразу добиться того, чтобы «EC» отображался как «if(CF)» с последующим блоком «{…}». Как Вы уже поняли, опять заморочился с эстетикой, а не точностью эмуляции. Первый вариант эмулятора был через «reg(into, alu(opcode, reg(into), reg(from)))». Но теперь решил кодировать всё насквозь JavaScript-выражениями. Тем самым, если написать игру Койяанискаци-кодом, то она на выходе будет чисто на JavaScript и эмулятор не потребуется вообще. Кажется, уже писал: Без проблем доставляют кеды, футболки, штаны, ушки, очки, экшн-камеры и т.п… А вот PS/2-Y штаны - не доехали. На рынке купил ATtiny-85A, но он такой маленький - меньше спичечной головки, что непонятно, каким поялом к нему подходить: Убрал глубоко в шкаф в коробок, чтобы не посеять… Очень туго - с ЭСЛ-серией К500 и К1500: Всё на драгмет скупили представители соседней республики… А так, Dallas 1-Wire термодатчики и регистры - может и есть, но адаптеров USB<->1-Wire - нету… Вернее, достать можно и серию К134, но через заказ, барыг и переплату…
  9. Вoт именно! Койяанискаци - не цель, а побочный продукт моих любительских изысканий… Типа «Везде полным полном всяческих уроков, как правильно делать процессор. Возьму-ка я Atanua и состряпаю процессор так, как я понимаю… Нет, Atanua не так удобен, а Logisim более дружелюбен…». То есть, скука + тестирование интерфейсов различных программ (KiCAD все советовали). Вот KiCAD немного суровее против Atanua и Logisim - я на нём запарился сложную схему строить. OrCAD - много детских болезней GUI и рисование схемы приводит к зависанию и закрытию всего. Хуже того: Не всегда восстановление работает! Но KiCAD я этой зимой заменил на Proteus, так как отличаются по освоению незначительно, а функционально - существенно! (В OrCAD/KiCAD при запуске симуляции/топологии открываются отдельные программы, в Proteus - всё интегрировано, как в TurboPascal 7!) Тем самым, более менее освоился в нескольких пакетах и попутно получился процессор… P.S.: Тем более с моей профессиональной деятельностью по специализации эти всякие ТТЛ и FPGA никак не пересекаются…
  10. Oдин момент был… По натуре - я консерватор: Использую технику до отказа, пока хоть как-то дышит. До 2008 у меня стоял Pentium-90MHz 48Mb-RAM, который я отправил в запас под стол, так как попался Pentium-IV 512Mb, который сгорел южником в 2012 и пол года я сидел вообще без ничего - отдыхал и копил… Копил на Core-i7, но не докопил и в 2013 купил GA-F2A85X и две линейки DDR3 по 8Gb. До сих пор напрягает, так как 16 Гб в наши дни - слишком мало и система достаёт сообщениями о нехватке ресурсов (файл подкачки отключил)… И вот на эту GA-F2A я не смог установить Windows'7, так как та отказывалась работать с любыми USB на материнке. Работал только через PS/2, попеременно переключаясь то на мышь, то на клавиатуру, пока устанавливал Windows'7, так как Y-переходника в комплекте не было. А когда систему установил и попытался обновить USB-драйвера через интернет, то ничего не получилось и пришлось идти на рынок покупать пиратский Windows'8 x86 просроченный с перезагрузкой каждые 2 часа и BSOD'ами на не прогретом железе. Пока не скачал Windows'8.1 x64… До сих пор иногда USB отваливаются на холодном железе и требуется ребут. И если бы ни клавиатура PS/2, пришлось бы тупо жать RESET! Не доверяю я USB 3.0 поэтому и ищу штаны, чтобы клавиатуру и мышь сразу иметь в PS/2. Но у нас на рынках - всё USB. Никаких Y-разветвителей PS/2 нету… А самому кустарить - не хочу. Накустарился ещё на РАДИО-86РК с его ППА DD14… Хочу, чтобы компьютер выглядел навороченным, но без кустарей… Есть такая игра местного разработчика - Voxario… И там я как раз своей утилитой и воспользовался тремя мышками, доделанными до подобия педалей, чтобы на диване сидеть и летать по территориям. К тому-же, «Alt+Tab» тоже подтягивал и переключался на трансляции новостей.
  11. Грaфики описал как-то так… Может и коряво, но хоть что-то, надеюсь, теперь понятнее… O, таки да! Спасибо! Облачно и диск локально не мусорится - можно просто ссылку давать… Кстати, чтобы в форумы вставлять embed-ссылки на короткие аккорды как-то написал вот это: Прямо в ссылке кодируются ноты простым языком. (Надоели новомодные xml-форматы MusicXML, где одна нота описывается сотней строк…) Но, тоже не довёл до ума: Тяжело данный синтаксис точно распарсить… (Под Койяанискаци подобный плеер пригодилось бы написать, но до сих пор не разобрался со всякими триолями: Те партитуры играют с грубейшими ошибками в JavaScript…) Например, вот файл плеера… Который год до ума не доведу из-за музыкальной безграмотности… А ведь, как технология 70-х первых музыкальных компьютеров очень любопытна и компактна (не то, что тот XML)… Интересно, имеются ли программисты с музыкальным образованием где-то на форумах, чтобы отладить это… sol20mus.zip P.S.: Проблема в том, что я на досуге занимаюсь не одной идеей, а десятком идей. Если где-то застреваю намертво - переключаюсь на следующие. Как я уже говорил, Койяанискаци набросал и отладил прошлой весной, а этой весной, спустя год, довёл до ума, составил описание и опубликовал… Эмулятор теперь нужно дорабатывать, чтобы код отлаживать легче было… Потому и двигается у меня всё медленно, если где-то застрял и не гуглится решение…
  12. Недостaток в том, что OEM-псевдографикой диаграммы хранятся в Блокноте и легко вставляются кодом в форумы любые. Тогда как утилиты те генерируют картинку, которую нужно сохранять у себя и заливать в форумы, а также и не подредактируешь на-лету… Скажем, для генерации формул из текста есть редакторы, а для электрических схем - нету. Пытался написать свой и запустить как сервис, но застрял… Сейчас в модепопулярны облачные услуги и закачивать/устанавливать что-то - не айс… P.S.: Но, всё равно… Спасибо! Опробую, когда отдохну…
  13. «Светодиоды на клавиатуре использовали для кражи данных» Вообще-то я пытался моргать индикаторами клавиатуры, чтобы включённый в параллель пьезоизлучатель воспроизводил тональность. Программно с помощью ШИМ удавалось до ≈300 Гц получать звук. Но, собственные процессоры - куда интереснее разрабатывать, чем оригинальное и никому ненужное ПО…
  14. Кaк-то увидел видео «светомузыка из клавиатуры» и написал собственную утилиту на 9 клавиатур (видео): Поддерживает до 9 клавиатур со сценарием моргания или трекерные паттерны для моргания по нотам. Потом увидел видео «две мышки на экране» и написал собственную утилиту на 9 мышек (видео): Поддерживает до 9 мышек с назначением произвольных действий на каждую. То есть, можно правой кнопкой пятой мышки прибавлять громкость, а средней кнопкой седьмой мышки посылать «Ctrl+V» в Блокнот, даже если тот не активен… А так как все клавиатуры и мышки - б/у или списанные с предприятий в утиль, то набрал USB-PS/2 переходники, чтобы проводить опыты. Например, как на органе: Одна клавиатура печатает нижним регистром, вторая - верхним, третья - другой языковой раскладкой. P.S.: Разве ещё не поняли, что Койяанискаци не на пустом месте появился, а от скуки и тесноты в программировании: Хочется железо оригинальное делать, а не просто моргать списанными клавиатурами в такт музыке…
  15. Eсли взяли К155ЛА3, подали питание и заземлили ножку №1 - уже хаос, так как вывели кристалл из равновесия питанием и сигналом: Начался энтропийный процесс с прогревом… А врезка вентиля в цепь - грешок куда меньше, чем вместо «if(x[0] & x[1] & x[2])» кошмарное «if(x[2:0] == 7)»: Это как вместо одной ЛА2 влепить две 555СП1… Вот тут статья повествует о ModelSim, а анимационные вырезки вставляются с Logisim… Это нормально? Таки, да! Потому что в ModelSim анимацию сложнее сделать и управлять схемой сложнее… (Хоть автор не афиширует, но, скорее всего, он - наш человек: Рисует и отлаживает мысли в Logisim, а потом концепцию прорабатывает в ModelSim…) Я же перенёс уже! Не уж то пропустили ссылочку? Всего 386 эффективных строк… Сейчас лишь допиливаю и вношу энтропийный хаос: В схеме был строго счётчик инструкций с инкрементом, а в Verilog - регистр с сумматором на произвольный шаг при условном пропуске до 9 инструкций за 1 такт. А это - уже бардак! Так как в Logisim подобные трюки - роскошь, а в ТТЛ - расход сумматоров. А в VeriLog - один значок «+». И это мне не нравится тем, что раздолье мне: Мозг начинает расслабляться, буянить вседозволенностью и всё стремительного двигается в раскардаш P.S.: Обновил структурную… P.P.S.: Набросок эмулятора стиля «очень дёшево и очень сердито»…