Итак, как я уже говорил, мне удалось разработать ещё один вариант, который можно обсудить... Code (Text): Глава 1. Введение в описание процессорного устройства. ------------------------------------------------------------------------------ Представляемое центральное процессорное устройство (ЦПУ) является 32-разрядным средством обработки цифровой информации и включающим в себя 32 регистра общего назначения (РОН) и 32 регистра системного управления (РСУ). Вся система команд оформлялась с максимальным логическим обоснованием и включает в себя несколько основных операций и три категории префиксов, обеспечивающих доступ ко всем РОН в одном из возможных доступов и образующие расширенные операции. Дешифратор не позволяет определять более одного префикса, обрабатывая их пару как одну целую составную операцию. Дешифратор команд является 5-битным, в общей сложности обеспечивая всего до 32 операций. Младшие 3 бита дешифратора берутся из самого кода команды программы. Старшие 2 бита определяются префиксом, если тот предшествовал ранее, иначе они считаюся сброшенными в ноль. Код команды представляется в одном байте, старшие 3 бита которого поступают на вход дешифратора, а младшие 5 бит - опциональные, обрабатываемые непосредственно узлом конкретной команды. Code (Text): Таблица 1.1: Двоичное представление команд. Бит-поле, категория, описание 000xxxxx -- -- -- Обрабатывается узлом обработки исключений 001xxxxx PREFIX EXT Префикс регистра-расширителя. Индекс РОН указан x-битами 010xxxxx PREFIX DST Префикс регистра-приёмника. Индекс РОН указан x-битами 011xxxxx PREFIX SRC Префикс регистра-источника. Индекс РОН указан x-битами 100xxxxx <reserved> Зарезервировано 101xxxxx STACK UNIT Обрабатывается узлом стека. Индекс РОН указан x-битами 11nxxxxx BRANCH UNIT Обрабатывается узлом управления порядком и логикой кода Code (Text): Таблица 1.2: Сочитание кодов префиксов для образования составных команд. Bin-5 отображает 5-битный код дешифратора команд. Префикс1,префикс2,bin-5,asm-мнемоника, описание команды 001xxxxx 001yyyyy 01001 MODE Ry, x Управляет режимом РОН 001xxxxx 010yyyyy 01010 MOV Ry,[Rx] Считывает данные из памяти в РОН 001xxxxx 011yyyyy 01011 MOV [Rx],Ry Записывает данные из РОН в память 010xxxxx 001yyyyy 10001 PEEK Rx,[Rx] Считывает поток из памяти в РОН 010xxxxx 010yyyyy 10010 SWAP Ry, Rx Обмен значениями двух РОН 010xxxxx 011yyyyy 10011 MOV Rx, Ry Присвоение значения 011xxxxx 001yyyyy 11001 POKE [Ry],Rx Записывает поток из РОН в память 011xxxxx 010yyyyy 11010 TEST Ry, Rx Анализирует РОН 011xxxxx 011yyyyy 11011 CMP Ry, Rx Сравнивает один РОН с другим Code (Text): Таблица 1.3: Краткое описание основных команд и их модификаций, если перед ней указан префикс. Префикс, команда, bin-5,asm-мнемоника, краткое описание команды 101xxxxx 00101 PUSH Rx Занесение РОН в фрейм стека 110xxxxx 00110 DASH $+x+D24 Переход на 29-битное смещение со знаком 111xxxxx 00111 DASH $+x+D8 Переход на 13-битное смещение со знаком 001xxxxx 101yyyyy 01101 PUSH x*32+y Запись целого 10-битного числа в стек 001xxxxx 110yyyyy 01110 CASE $+y+D16,x Переход на 21-битное смещение условно 001xxxxx 111yyyyy 01111 CLEAR Ry,x Отчищение РОН, если условие x истинно 010xxxxx 101yyyyy 10101 POP Ry,Rx Извлечение из стека двух РОН 010xxxxx 110yyyyy 10110 <ALUy> Rx,D16 АЛУ-операция над РОН и данными 010xxxxx 111yyyyy 10111 <ALUy> Rx Унарная АЛУ-операция над РОН 011xxxxx 101yyyyy 11101 не определено Зарезервировано 011xxxxx 110yyyyy 11110 <ALUy> Ry,Rx.. Комплексное формулирование АЛУ-операций 011xxxxx 111yyyyy 11111 не определено Зарезервировано Code (Text): Команды организованы так, чтобы умещаться в один, два или четыре байта. Данные непосредственно за командой всегда выравниваются по длине команды. При наличии префикса перед командой поле непосредственных данных укорачивается на 1 байт и команда сохраняет свою длину, вне зависимости от наличия и отсутствия префикса перед ней. Если поле непосредственных данных и так содержало 1 байт, префикс в этом случае вообще ликвидирует это поле. Как правило, из-за этих обстоятельств логика команды может существенно изменяться. Поле непосредственных данных подчиняется ещё одному правилу и если позволяется командой, то младшие пять опциональных бит кода команды дополняют 8 или 24 бит непосредственных данных до 13 или 29 бит соответственно. Поле - целочисленное, по-этому все данные расширяются до 32 бит как числа со знаком в дополнительном коде. К тому же, в этом поле нельзя указывать числа близкие к предельным до 16 единиц в положительном и отрицительном диапазоне, так-как эти значения служат, чтобы непосредственно указать индекс РОН и повысить гибкость команд. Code (Text): Операции условного и безусловного переходов работают несколько иначе аналогов, в виду чего они были названы CASE и DASH. Особое внимание следует уделить DASH и обратить внимание на несколько её исключительных особенностей. Например, эта команда имеет две модификации: Короткую и длинную. Существует правило, которое не позволяет в длинной модификации использовать те же смещения, достижимые и в короткой. Это позволяет получить доступ к дополнительным возвожностям. Также в этих командах нельзя указать бессмысленные значения в роде ссылки на саму себя или поле непосредственных данных. Такие значения вырабатывают особые действия, которые используются отладчиком или операционной системой. Это описано ниже. Code (Text): Организация системы команд на привелегированном уровне операционной системы: OS-level ╔═════════════╤═════════════╤═════════════╤═════════════╗ OpCodes:║░░░░░░░░░░░░░│ EXT-prefix │ DST-prefix │ SRC-prefix ║ ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣ ║000nnnnn║BREAK 0..31│░░░░░░░░░░░░░│MOV DST,SRV │MOV SRV,SRC ║ ║001nnnnn║EXT 32..63│MODE REG,EXT│PEEK REG,DST │POKE REG,SRC ║ ║010nnnnn║DST 32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║ ║011nnnnn║SRC 32..63│MOV [EXT],REG│MOV DST,REG │CMP REG,SRC ║ ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║ ║101nnnnn║PUSH REG │PUSH D10 │POP REG,DST │PUSH ALU(SRC)║ ║110nnnnn║DASH D29 │CASE D21,CND│DST,D16 │REG,SRC ║ ║111nnnnn║DASH D13 │CLEAR REG,CND│DST │ SRC ║ ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝ Организация системы команд на пользовательском уровне прикладных программ: Common ╔═════════════╤═════════════╤═════════════╤═════════════╗ OpCodes:║░░░░░░░░░░░░░│ EXT-prefix │ DST-prefix │ SRC-prefix ║ ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣ ║000nnnnn║BREAK 0..31│BIOS 1024.. │BIOS ..2560..│BIOS ..4095 ║ ║001nnnnn║EXT 32..63│MODE REG,EXT│PEEK REG,DST │POKE REG,SRC ║ ║010nnnnn║DST 32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║ ║011nnnnn║SRC 32..63│MOV [EXT],REG│MOV DST,REG │CMP REG,SRC ║ ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║ ║101nnnnn║PUSH REG │PUSH D10 │POP REG,DST │PUSH ALU(SRC)║ ║110nnnnn║DASH D29 │CASE D21,CND│DST,D16 │REG,SRC ║ ║111nnnnn║DASH D13 │CLEAR REG,CND│DST │ SRC ║ ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝ Code (Text): .0 .1 .2 .3 .4|Assembler | C0 00 00 00|TAG | ; DASH $+0 |Пустая операция отладчика C0 00 00 01|PORT R32,0x0,R33 | ; DASH $+1 |Обращение к портовому устройству. Режим 0, регистры R32 и R33 C0 00 00 12|PORT R32,0x1,R34 | ; DASH $+18 |Обращение к портовому устройству. Режим 1, регистры R32 и R34 C0 00 01 23|PORT R33,0x2,R35 | ; DASH $+291 |Обращение к портовому устройству. Режим 2, регистры R33 и R35 C0 00 0F ED|PORT R46,0xE,R45 | ; DASH $+4077 |Обращение к портовому устройству. Режим 14, регистры R46 и R45 C0 00 0F FE|PORT R47,0xF,R46 | ; DASH $+4094 |Обращение к портовому устройству. Режим 15, регистры R47 и R46 C0 00 0F FF|PORT R47,0xF,R47 | ; DASH $+4095 |Обращение к портовому устройству. Режим 15, регистры R47 и R47 C0 00 10 00|DASH $+4096 | ; DASH $+4096 |Безусловный переход на относительный адрес CF FF FF EF|DASH $+268435439 | ; DASH $+268435439 |Безусловный переход на относительный адрес CF FF FF F0|DASH R48 | ; DASH $+268435440 |Безусловный переход на абсолютный адрес из регистра R48 CF FF FF FE|DASH R62 | ; DASH $+268435454 |Безусловный переход на абсолютный адрес из регистра R62 CF FF FF FF|DASH R63 | ; DASH $+268435455 |Безусловный переход на абсолютный адрес из регистра R63 D0 00 00 00|DASH R32 | ; DASH $-268435456 |Безусловный переход на абсолютный адрес из регистра R32 D0 00 00 01|DASH R33 | ; DASH $-268435455 |Безусловный переход на абсолютный адрес из регистра R33 D0 00 00 0F|DASH R47 | ; DASH $-268435441 |Безусловный переход на абсолютный адрес из регистра R47 D0 00 00 10|DASH $-268435440 | ; DASH $-268435440 |Безусловный переход на относительный адрес DF FF EF FF|DASH $-4097 | ; DASH $-4097 |Безусловный переход на относительный адрес DF FF F0 00|PORT R48,0x0,R32 | ; DASH $-4096 |Обращение к портовому устройству. Режим 0, регистры R48 и R32 DF FF F0 01|PORT R48,0x0,R33 | ; DASH $-4095 |Обращение к портовому устройству. Режим 0, регистры R48 и R33 DF FF F0 12|PORT R48,0x1,R34 | ; DASH $-4078 |Обращение к портовому устройству. Режим 1, регистры R48 и R34 DF FF FE DC|PORT R62,0xD,R44 | ; DASH $-292 |Обращение к портовому устройству. Режим 13, регистры R62 и R44 DF FF FF ED|PORT R63,0xE,R45 | ; DASH $-19 |Обращение к портовому устройству. Режим 14, регистры R63 и R45 DF FF FF FB|PORT R63,0xF,R43 | ; DASH $-5 |Обращение к портовому устройству. Режим 15, регистры R63 и R43 DF FF FF FC|WAIT | ; DASH $-4 |Переход на исходный адрес. Генерация исключения DF FF FF FD|HALT -3 | ; DASH $-3 |Останов текущего потока с результатом -3 DF FF FF FE|HALT -2 | ; DASH $-2 |Останов текущего потока с результатом -2 DF FF FF FF|HALT -1 | ; DASH $-1 |Останов текущего потока с результатом -1 22 C0 00 00 |CASE PF |EXT 0x02; DASH $+0,EXT |Выполнить следующую инструкцию, если условие действительно 22 C0 00 01 |CASE $+1,PF |EXT 0x02; DASH $+1,EXT |Переход на относительный адрес, если условие действительно 22 CF FF ED |CASE $+1048557,PF |EXT 0x02; DASH $+1048557,EXT |Переход на относительный адрес, если условие действительно 22 CF FF FE |CASE R62,PF |EXT 0x02; DASH $+1048574,EXT |Переход на абсолютный адрес из регистра R62, если условие действительно 22 D0 00 0E |CASE R46,PF |EXT 0x02; DASH $-1048562,EXT |Переход на абсолютный адрес из регистра R46, если условие действительно 22 D0 00 10 |CASE $-1048560,PF |EXT 0x02; DASH $-1048560,EXT |Переход на относительный адрес, если условие действительно 23 DF FF FB |CASE $-5,SF |EXT 0x03; DASH $-5,EXT |Переход на относительный адрес, если условие действительно 23 DF FF FC |WAIT SF |EXT 0x03; DASH $-4,EXT |Выполнять следующую инструкцию, пока условие не действительно 33 DF FF FD |MARK 19 |EXT 0x13; DASH $-3,EXT |Пометить точку программы в таблице 3C DF FF FE |DASH 26 |EXT 0x1C; DASH $-2,EXT |Переход на точку из таблицы программы 3D DF FF FF |BREAK 0x1D |EXT 0x1D; DASH $-1,EXT | 43 C1 23 45 |AND R35,9029 |DST R35 ; DASH ALU(DST, DST, 0x01, 0x2345) |Обращение к модулю ALU 44 C2 7F EF |XOR R36.32751 |DST R36 ; DASH ALU(DST, DST, 0x02, 0x7FEF) |Обращение к модулю ALU 45 C3 7F F7 |OR R37,R55 |DST R37 ; DASH ALU(DST, DST, 0x03, 0x7FF7) |Обращение к модулю ALU 54 D1 80 08 |CMA R52,R40 |DST R52 ; DASH ALU(DST, DST, 0x11, 0x8008) |Обращение к модулю ALU 55 D2 80 10 |CMX R53,-32752 |DST R53 ; DASH ALU(DST, DST, 0x12, 0x8010) |Обращение к модулю ALU 56 D4 FF FE |MUL R54,-2 |DST R54 ; DASH ALU(DST, DST, 0x14, 0xFFFE) |Обращение к модулю ALU 66 C1 23 E8 |CALC R33,(R38 XOR R35) SAL R40|SRC R38 ; DASH ALU(R33, ALU(R33, SRC, 0x2, R35), 0xE, R40)|Вызывает комплексную обработку модулем АЛУ 67 C2 45 F6 |CALC R34,(R39 ADD R37) - 10 |SRC R39 ; DASH ALU(R34, ALU(R34, SRC, 0x4, R37), 0xF, -10)|Вызывает комплексную обработку модулем АЛУ 76 D3 04 67 |CALC R51,(R54 + 4) IMP R39 |SRC R54 ; DASH ALU(R51, ALU(R51, SRC, 0x0, +4), 0x6, R39)|Вызывает комплексную обработку модулем АЛУ 77 D4 89 12 |CALC R52,(R55 ROL R41) AND R34|SRC R55 ; DASH ALU(R52, ALU(R52, SRC, 0x8, R41), 0x1, R34)|Вызывает комплексную обработку модулем АЛУ E0 00 |NOP | ; DASH $+0 |Пустая операция E0 01 |DASH $+1 | ; DASH $+1 |Безусловный переход на относительный адрес E0 12 |DASH $+18 | ; DASH $+18 |Безусловный переход на относительный адрес E1 23 |DASH $+291 | ; DASH $+291 |Безусловный переход на относительный адрес EF FF |DASH $+4095 | ; DASH $+4095 |Безусловный переход на относительный адрес F0 00 |DASH $-4096 | ; DASH $-4096 |Безусловный переход на относительный адрес FF FC |DASH $-4 | ; DASH $-4 |Безусловный переход на относительный адрес FF FD |DASH $-3 | ; DASH $-3 |Безусловный переход на относительный адрес FF FE |STOP | ; DASH $-2 |Переход на исходный адрес. Генерация исключения FF FF |DEBUG | ; DASH $-1 |Передача управления отладчику 22 E0 |CLEAR R32,PF |EXT 0x22; DASH $+0 |Обнулить регистр R00, если условие действительно 23 EF |CLEAR R47,SF |EXT 0x23; DASH $+15 |Обнулить регистр R15, если условие действительно 33 F0 |CLEAR R48,NSF |EXT 0x33; DASH $-16 |Обнулить регистр R16, если условие действительно 43 E0 |CLEAR R35 |DST R35 ; DASH ALU(DST, 0, 0xA0, DST) |Обращение к дополнению модуля ALU 45 E7 |NOT R37 |DST R37 ; DASH ALU(DST, 0, 0xA7, DST) |Обращение к дополнению модуля ALU 55 F7 |NEG R53 |DST R53 ; DASH ALU(DST, 0, 0xB7, DST) |Обращение к дополнению модуля ALU 56 FE |LONG R54,24 |DST R54 ; DASH ALU(DST, 0, 0xBE, DST) |Обращение к дополнению модуля ALU 67 FE | |SRC R39 ; DASH ALU(0, SRC, 0x5E, 0) |Обращение к дополнению модуля ALU 78 ED | |SRC R56 ; DASH ALU(0, SRC, 0x4D, 0) |Обращение к дополнению модуля ALU B8 |PUSH R56 | ; PUSH R56 |Занесение в стек регистра R24 23 B8 |PUSH 120 |EXT 3 ; PUSH (24 + EXT * 32) |Занесение в стек непосредственных данных 34 A8 |PUSH -408 |EXT 20 ; PUSH (8 + EXT * 32) |Занесение в стек непосредственных данных 45 B8 |POP R56,R37 |DST R37 ; POP R56,DST |Извлечение из стека в регистры R24 и R05 67 B8 |PUSH R56,R39 |SRC R39 ; PUSH R56,SRC | 23 34 |MODE R52,0x03 |EXT 3 ; MODE R52,EXT |Установка режима регистра 23 45 |MOV R37,[R35] |EXT R35 ; MOV R37,[EXT] |Чтение из ячейки памяти 45 56 |SWAP R37,R54 |DST R37 ; SWAP R54,DST |Обмен значениями 56 67 |MOV R54,R39 |DST R54 ; MOV DST,R39 |Дублирование данных регистра в регистр 67 78 |CMP R56,R39 |SRC R39 ; CMP R56,SRC |Сравнение регистров 78 23 |POKE R35,R54 |SRC R56 ; POKE [R35],SRC |Занесение значение регистра в стек с основанием 75 54 |TEST R52,R53 |SRC R53 ; TEST R52,SRC |Сравнение регистров 42 20 |PEEK R34,R32 |DST R34 ; PEEK DST,[R32] |Извлечение данных из стека с основанием в регистр 20 7E |MOV [R32],R62 |EXT R32 ; MOV [EXT],R62 |Запись в память ============== 60 D9 01 23 |MOV [R57 + 291],R32 64 D8 7F FF |MOV [R56 + 32767],R36 78 C7 80 0E |MOV R39,[R56 + R46] 79 C6 FF FF |MOV R38,[R57 - 1] Имеется JS-дизассемблер... Жду ваших замечаний.
о.. опять вы и идеи.. слу, я вот думаю, а откуда вы? у вас халву там правильно готовят или тоже из семочек? вы когда начинаете изобретать начали б с того, зачем такое нужно. от просто еще одного формата команд ничего не изменится. хотите изобретать процессора - разберите разные типы виртуальных машин, ведь это как раз и есть эмуляторы. разберите их достоинстваи недостатки. точно такие же у реальных процев. и изобретайте для начала именно виртуалку. выйдет чтото удачное - воплотить С код в харде не сложно (С++ на пару порядков сложнее). и готовые компилеры с С и асма уже будут. а так, вы чето пишете, доказываете.. мы ж не производители железа. а им для перестройки линий и продвижения несовместимого железа нужны супердоводы. где эти доводы? мгновенной перепрошивки всей фпга не получится. ни счас, ни через 20 лет. а когда получится, 20 лишних операций все равно будут мгновенней. сложные, неопределенной, зависимой от декодера длины и состава команды. а) усложняют сам декодер, б) требуют декодирования перед выборкой следующей, что усложняет распараллеливание независимых команд одного потока. кроме того, тоже ветвление невозможно определить до полного декодирования команды. кроме того, команды получаются невыровнеными, что требует ухищрений при работе с памятью. не, в х86 все эти танцы уже сделаны, но за какой срок и какой ценой! кто будет так напрягаться ради вашего? кроме того, зачем влаживаться в еще один тип, отличающийся только составом команд, если есть уже несколько отработанных и успешных линий? в чем его преимущество кроме невероятных заявлений автора, что если то и это и вообще все если, то он будет наилучшим? да если изобретут способ мгновенно копировать по 4 мегабайта за раз, то и без спецпроца все будет шоколад.
Относительно задуманного Вы заблуждаетесь! Представленный здесь вариант процессора - не доработка "пассивного" и не использует ПЛИС. Он - активный. Потом, я не доказываю, что этот вариант - революция! Это просто игрушка. Я им занимаюсь на досуге и не преследую шизофреничной цели довести его до массового производства. С другой стороны. Подавляющее большинство эмуляторов симулируют реально существующие процессорные системы, персоналки и видеоприставки. Этой темой я сделал первый шаг разработать процессор с самого нуля, довести его до эмуляции и построить на его базе виртуальную модель компьютера с самого нуля. Т.е. я затеял как бы игру: Сам себе Motorola/Intel, сам себе Apple/IBM... Кто желает включиться в проект, милости просим. А пока, ещё немного информации. Корректная таблица команд: Code (Text): Организация системы команд на привелегированном уровне операционной системы: OS-level ╔═════════════╤═════════════╤═════════════╤═════════════╗ OpCodes:║░░░░░░░░░░░░░│ EXT-prefix │ DST-prefix │ SRC-prefix ║ ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣ ║000nnnnn║BREAK 0..31│░░░░░░░░░░░░░│MOV DST,SRV │MOV SRV,SRC ║ ║001nnnnn║EXT 32..63│MODE REG,EXT│PEEK REG,DST │POKE REG,SRC ║ ║010nnnnn║DST 32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║ ║011nnnnn║SRC 32..63│MOV [EXT],REG│MOV DST,REG │CMP REG,SRC ║ ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║ ║101nnnnn║PUSH REG │PUSH D10 │POP REG,DST │PUSH ALU(SRC)║ ║110nnnnn║DASH D29 │CASE D21,CND│<ALU>DST,D16 │<ALU>REG,SRC ║ ║111nnnnn║DASH D13 │CLEAR REG,CND│<ALS>DST │<XPT> SRC ║ ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝ Организация системы команд на пользовательском уровне прикладных программ: Common ╔═════════════╤═════════════╤═════════════╤═════════════╗ OpCodes:║░░░░░░░░░░░░░│ EXT-prefix │ DST-prefix │ SRC-prefix ║ ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣ ║000nnnnn║BREAK 0..31│BIOS 1024.. │BIOS ..2560..│BIOS ..4095 ║ ║001nnnnn║EXT 32..63│MODE REG,EXT│PEEK REG,DST │POKE REG,SRC ║ ║010nnnnn║DST 32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║ ║011nnnnn║SRC 32..63│MOV [EXT],REG│MOV DST,REG │CMP REG,SRC ║ ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║ ║101nnnnn║PUSH REG │PUSH D10 │POP REG,DST │PUSH ALU(SRC)║ ║110nnnnn║DASH D29 │CASE D21,CND│<ALU>DST,D16 │<ALU>REG,SRC ║ ║111nnnnn║DASH D13 │CLEAR REG,CND│<ALS>DST │<XPT> SRC ║ ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝ Краткое описание всех регистров: Code (Text): ╔════════════════════════════════════════════════════╗ ╔════════════════════════════════════════════════════╗ REG:║Управляющие регистры ║ ║Регистры общего назначения (РОН) ║ ╔════╬════════════════════════════════════════════════════╬════╬════════════════════════════════════════════════════╣ ║R00 ║Active IP. Действующий указатель инструкций ║R32 ║Holded IP. Замороженный указатель инструкций ║ ║R01 ║System SP. Системный указатель стека ║R33 ║Active SP. Действующий указатель стека ║ ║R02 ║System IP. Системный указатель инструкций ║R34 ║Framed SP. Действующий указатель фрейма стека ║ ║R03 ║System FX. Системный флаговый регистр ║R35 ║Active FX. Действующий флаговый регистр ║ ║R04 ║ --- ║R36 ║Calculator. Регистр, хранящий выражение вычисления ║ ║R05 ║ --- ║R37 ║Calculator. Регистр, хранящий выражение вычисления ║ ║R06 ║ --- ║R38 ║Calculator. Регистр, хранящий выражение вычисления ║ ║R07 ║ --- ║R39 ║Calculator. Регистр, хранящий выражение вычисления ║ ║R08 ║Debug register. Флаги и режимы отладчика ║R40 ║ ║ ║R09 ║Debug register #1. Адресный отладочный регистр 1 ║R41 ║ ║ ║R10 ║Debug register #2. Адресный отладочный регистр 2 ║R42 ║ ║ ║R11 ║Debug register #3. Адресный отладочный регистр 3 ║R43 ║ ║ ║R12 ║ --- ║R44 ║ ║ ║R13 ║ --- ║R45 ║ ║ ║R14 ║ --- ║R46 ║ ║ ║R15 ║ --- ║R47 ║ ║ ║R16 ║Mode R40..R43. Регистр режимов РОН ║R48 ║ ║ ║R17 ║Mode R44..R47. Регистр режимов РОН ║R49 ║ ║ ║R18 ║Mode R48..R51. Регистр режимов РОН ║R50 ║ ║ ║R19 ║Mode R52..R55. Регистр режимов РОН ║R51 ║ ║ ║R20 ║Mode R56..R59. Регистр режимов РОН ║R52 ║ ║ ║R21 ║Mode R60..R63. Регистр режимов РОН ║R53 ║ ║ ║R22 ║ - reserved - ║R54 ║ ║ ║R23 ║ - reserved - ║R55 ║ ║ ║R24 ║Tag register. ║R56 ║ ║ ║R25 ║Tag register #1. Адрес отладочной пустой операции 1 ║R57 ║ ║ ║R26 ║Tag register #2. Адрес отладочной пустой операции 2 ║R58 ║ ║ ║R27 ║Tag register #3. Адрес отладочной пустой операции 3 ║R59 ║ ║ ║R28 ║ - reserved - ║R60 ║ ║ ║R29 ║Pointer of Tag. Адрес отладочной пустой операции ║R61 ║ ║ ║R30 ║Counter of Clock. Счётчик тактов процессора ║R62 ║ ║ ║R31 ║Counter of Instructions. Счётчик инструкций ║R63 ║ ║ ╚════╩════════════════════════════════════════════════════╩════╩════════════════════════════════════════════════════╝ Команда DASH помещает адрес следующей операции из регистра R00 в регистр R32 и дополняет поле относительного адреса за командой к регистру R00. Тем самым R32 сохраняет адрес возврата для подпрограммы, которая сама обязана его сохранить. Перед возврщением из подпрограммы, нужно сначала восстановить адрес возврата в R32, а затем выполнить операцию DASH с указанием R32. С первого взгляда, такой подход и организация действий могут показаться чрезмерно громоздкими. С другой стороны, система команд разрабатывалась так, чтобы инструкции, используемые во всех алгоритмах значительно реже других, не имели собственных машинных кодов и не расходовали кодовое пространство системы команд. Если во время выполнения приложения происходит исключение, блок их обработки в таком случае меняет местами регистры R00 с R02, R01 с R33 и регистры R03 с R35 для передачи управления ядру операционной системы. При этом функционирование и счёт регистров R30 и R31 прерывается, чтобы зафиксировать их точные показания. Для восстановления работы этих регистров их нужно просто прочесть оба, так-как они имеют специально отведённые триггеры, сбрасываемые во время исключений.
Я же писал, что подобные проблемы я называю "механическими". Т.е. разработать теорию ракетного двигателя - это проблема теоритическая, а разработать сам двигатель - проблема механическая! Всё равно, что додуматься до концепции велосипеда в XIX века или изобрести сам велосипед. Я к тому, что "выковать" велосипед мог бы любой кузнец. А додуматься до велосипеда смог лишь один человек. Извините, но вы тычите вне в нос какрас-таки проблемы механики, а не концепции. Прежде чем копировать 4 мб за раз, следует хотя бы 1 байт перемещать научиться за 1 такт! Ну, раз уже заговорили о "механике", рассмотрим самый примитивный механизм обращения процессора к памяти. Чтение: Такт #1: Устанавливаем индекс ячейки на шине адреса процессора; Такт #2: Активизируем сигнал "чтение памяти" управляющей шины; Такт #3: Фиксируем информацию со шины данных во внутреннем регистре процессора; Такт #4: Снимаем сигнал "чтение памяти". Запись: Такт #1: Устанавливаем индекс ячейки на шине адреса и устанавливаем шину данных; Такт #2: Активизируем сигнал "запись в память" управляющей шины процессора; Такт #3: Снимаем сигнал "запись в память". Как видно, чтение происходит медленнее записи на 25%. В чём проблема? В первую очередь, это чисто физическая проблема, так-как имеется привязка к тактам. Она, в свою очередь, вытекает из концептуальной проблемы, которая требует жёсткой привязке к тактам, прежде всего, из-за недостаточно проработанной теории математического квантирования циклов процессов обращения к памяти. Подчеркну: механизм обращения к памяти я описал в рамке технологий 70-80-ых! Как уже писали, операция умножения практически не требует тактирования, но такты требуются для "уровновешивания" результата из-за внутренних задержек множителя и возможности паразитных результатов. А эта, как уже поняли, физическая проблема и её легко решить по мере развития технологий. Если множащее устройство Pentium'а тупо вживить в i8086, подключив его рядом с дубовым "ядром", то тогда действительно, операции умножения будут выполняться за один такт! Хотя это и гибрид-маразм... А вот почему в i80x86 первыми идут операции АЛУ? Так, код 00 - не NOP, как было у многих "нормальных" процессоров, а ADD!!! Вот тут-то и виден некий "просчёт" инженеров. Будто систему команд составляли как попало или в "попыхах", как в своё время делали свою DOS сотрудники Microsoft... Тут именно уже наблюдаются не технические сложности, а проблемы концепции. А сейчас они дают о себе знать. И различные фреймы в Windows для отлавливания переходов на первый мегабайт памяти, и различные сложные механизмы... --- Как я уже писал, в этой теме я затеял просто игру в инженеров процессоростроения. Не важно, как может быть устроен процессор. Основной акциент направлен на упрощение системы команд. И я тут составил несколько правил: 1) Действия, используемые часто, должны выполняться одной операцией, желательно компактной; 2) Действия, используемые реже, выполняются любой одной, возможно двумя, операциями без учёта компактности; 3) Действия, используемые крайне редко, занимают несколько операций без учёта компактности. Из этого следует следующее: • Операции RET возврата из подпрограмм - крайне редкие и используются лишь в конце функциональных процессов; • Для избежания "каши" в машинном коде, все нужные значения для регистров следует вынести в отдельные таблицы; • Операции записи в регистр непосредственных данных - относительно редкие, так-как требуются в основном для инициации оснований таблиц; • Операции трансляции регистр-регистр - популярные и требуют мало байтов; • Вычислительные операции - достаточно частые и следует производить более одного действия в рамках одной операции. По-этому, в системе команд отсутствуют аналоги CALL/JMP/RET, а вместо них используется одна DASH. DASH всегда сохряняет указатель инструкции в отдельный регистр. И если DASH обратилась к подпрограмме, то она сама должна сохранить тот регистр в стек. В конце подпрограммы необходимо восстановить адрес возврата из стека в тот регистр, а затем передать DASH содержимое этого регистра. Такая концепция требует 7 байтов кода в подпрограммах: 1 байт в начале и 6 байтов в конце. Вычислительные операции всегда требуют 4 байта и происходят опять-таки через DASH. Так-как обращение к АЛУ по идеалогическим соображениям было приравненно к обращению к вычислительной подпрограммы. Фактически операция AND X,Y оформляется как DASH ALU(X, "AND", Y). Для повышения эффективности был введён способ выполнения сразу двух операций. По-этому, две операции AND X,Y и ADD X,Z записываются как DASH ALU(X, "AND", Y, "ADD", Z). И по прежнему занимают 4 байта. Инициация регистра - операция не такая частая. По-этому она разбита на две: CLEAR X - отчищение регистра и ADD X,# - вычисление с непосредственными данными. Что занимает 6 байт. Чтобы иницировать десяток регистров, нужно указать таблицу с данными для них. Для этого иницируем регистр, как в примере выше - 6 байт, а затем считываем данные во все 10 регистров как из стека. И на это уйдёт всего 10 байтов: CLEAR X ; 2 bytes ADD X,offset Table_1 ; 4 bytes SWAP SP,X ; 2 bytes POP A,B ; 2 bytes ... POP I,J ; 2 bytes SWAP SP,X ; 2 bytes итого - 20 байтов... Пример кода: Code (Text): Address: .0 .1 .2 .3 .4 Label Assembler 00000000 40 E0 CLEAR R32 ; DST R32 ; DASH $ALS:0x00(DST) 00000002 40 C2 00 40 XOR R32,0x0040 ; DST R32 ; DASH $ALU:0x02(DST,0x0040) ; Устанавливаем R32 на начало данных 00000006 41 20 PEEK R33,R32 ; DST R33 ; POP R32,DST ; Считываем значение первого регистра 00000008 40 7F SWAP RSP,R32 ; DST R32 ; SWAP R63,DST ; Через указатель стека будет компактнее 0000000A 43 A2 POP R34,R35 ; DST R35 ; POP R34 DST ; Загрузка в регистры R34 и R35 0000000C 5F A4 POP R36 ; DST R63 ; POP R36 DST ; А также и регистры R36 0000000E 5F 60 SWAP R32,RSP ; DST R63 ; SWAP R32,DST ; Восстанавливаем стек 00000010 22 63 L01: MOV [R34],R35 ; EXT R34 ; MOV [EXT],R35 ; Начало цикла: Запись в память 00000012 42 E3 INC R34,4 ; DST R34 ; DASH $ALS:0x03(DST) ; Инкремент - 4 единицы 00000014 64 C3 00 04 ADD R35,R36 ; SRC R36 ; DASH $ALU:0x0004(R35,SRC) ; Сложение 00000018 41 F1 DEC R33 ; DST R33 ; DASH $ALU:0x11(DST) ; Счётчик итерраций - декремент 0000001A 30 DF FF F2 JNZ L01 ; EXT 0x10 ; CASE $-15,ZERO ; Не ноль? Продолжаем цикл 0000001E 00 HALT ; ; HALT ; Остонов
есть такой момент, когда человек отвлекается от своих фантазий и начинает проверять свои утверждения, предположения. то, на чем он основываается/от чего отталкивается. помойму вы дозрели уже до этого. например микрософт не писали мсдос. точнее дописывали, но потом. а в начале предприимчивый бг ее просто купил у какихто студентов (другое название было), чтоб перепродать ибм.
Не совсем понимаю. Что Вы имеете в виду? На дороге к эмуляции этого процессора стоит огромный валун и мешает пройти дальше. Не зря я назвал одну из осовных команд DASH. Сразу вспоминаю игру Boulder Dash! Валунов и ухабов здесь тьма. Если с системой команд более-менее разобрался, то отдельные проблемы, в особенности с DASH, очень сильно давят и буквально руки от их груза опускаются. Нужна или помощь, или коллективный интузиазм... Халва просто растёт на деревьях! И от неё, как видите, буквально крышу сносит! А если серъёзно... Представьте себе, что у вас, практически всю жизнь, основное занятие - безделье! Вы обходитесь без работы, деньги вас не привлекают. Работа очень низкооплачиваемая, но заработок стабильный и очень лёгкий! Представьте себе, что игры вас не привлекают, так-как плясать под дутку других программистов не очень-то охото. Собственных Тетрисов и Ксониксов написано на целый погреб! Представьте себе, что у вас имеется тюнер, захватывать фильмы и клипы в XviD уже наскучило, а мысль тупо посмотреть телевизор вообще - чуть ли не выворачивает желудок наружу! Короче, сыт я по горло такой "халвой" из семечек и без. Цивилизация даёт всё чуть ли ни с десятикратным избытком. Бери, смотри, пей, ешь, гуляй - НЕ ХОЧУ!!! Во тогда и начинаешь подумывать... Нет, не о суециде... Что ВЫ!!! А о том, где бы в этом "избытке прелестей цивилизации" поискать тараканом, плесень? Вон, Pentium, разросся из неуклюжего и тупого CISC'а в огромную раковую опухоль цифрового мира! И вся цивилизация, как организм, сама продолжает растить эту опухоль. И вырезать боится тоже... Вот многие увлекаются роботостроением, в Японии, кажется, у студентов устраиваются конкурсы. Другие - авиаконструированием... И т.п., и т.д... А я... Воздух меня не привлекает, путешествия - тем более. Роботы? Искусственный интелект - попытка доказать, что плоть - первична... Глупая и бесперспективная попытка, скажу я. Особенно когда пользуешься ABBYY или переводчиком. Смешно до досады! Уже первая декада XXI века вот-вот завершится, а распознать текст печатного издания машина без тупых, до хохота, ошибок не может! И Вы всё продолжаете верить в ИИ, а не в Бога? )) Процессор... Процессор... Уж 15 лет я упорно не оставляю попыток придумать свой собственный "костыль левому полушарию". Перебрал пару десятков вариантов. Некоторые ещё где-то завалались аж в 5" дискетах! Все не припомню... Может по числу битов я переплюнул и "Войну и мир". Как только клавиатура терпит!? А Вы говорите о халве!
помойму вам надо тормознуть слегка, остыть чтоб чуть трезвее решить, что делать дальше. если ваша фантазия тяжела и для вас, то другие на нее даж не глянут. ну и чтоб прочистилось чуть в голове, по полочкам разложилось, ато у вас все в одной тарелке. и ии, и вера, и компы с гвоздями, и левое полушарие, и раковые опухоли, и вера. это разные вещи может вам и правда настоящей халвы пожрать? которая из сативы? пиво/водка не замена ей. оч хорошо в голове прочищает. или "мож по бабам, поручик?"
Бесцельно и бесполезно, но блин - интересно ведь! Набор команд страдает теме же ужасами что и другие архитектуры. Загляни в mips, так кривизны достаточно, особенно ввиде nop после каждого перехода по условию! Загляни в армы с ихними сдвигами и тихо перетянутой к себе системой виртуальной памяти из интелов и shared памятью. А система обработки прерываний по 0 адресу чего стоит! Причем туда надо вхачивать не адрес обработчика а команду безусловного перехода, которая дальше чем на 32 мегабайта не отпрыгнет ввиду того что у ребят была паранойя с размером команды в 4 байта! Ну да, потом поправили, добавили возможность прохачить и поднять таблицу к 0xFFFF0000, какие молодцы! А потом добили новый режим, уменьшили паранойю с размером команды до 2 байт и получили "типа шуструю рассово верную" архитектуру в архитектуре. avr - помолчим... Загляни в intel86 - изначально не додуманной до конца, без возможности безболезненного расширения функциональности. Хак через хак все, жуть в общем! Заглянь в intel64 - проц переделывать впадлу, давай те же компоненты захачим для 64 бит. Сказано - сделано! Самый дерзкий аргумент - это работает. Но на вопрос "как?" все в основном умалчивают. Ни mips, ни arm процессоры не делают, они продают архитектуру. Но не забывай про основные причины, по которым другие фирмы готовы покупать архитектуру: готовый софт, который можно с пол пинка запустить, готовые компиляторы (асм + С как минимум), готовые отладчики, готовые профайлеры, готовая литература по описанию архитектуры "что и как и почему".
Paguo_86PK Могу посоветовать начать фотографировать бабочек. Это достаточно сложно, зато очень весело. По крайней мере, веселее, чем созерцать систему команд 8-разрядного процессора, путём генетических модификаций превращённого в 64-разрядный. Там, в недрах, такие могучие залежи копролитов, что вовек не разгрести...
Тут до практики один шаг. Напиши свой гипервизор, который бы на реальном Core2Duo эмулировал бы твой процессор. А вдруг найдутся желающие портировать под твой гипервизор hal Debian Embedded
Та что там уж, как ломать - так ломать! Надо уже и логику работы железа менять, грабли убирать. Мало ли что простое и гениальное придумаешь. Хотя... Ты будешь создавать аналогию того что уже есть. От если бы ты не знал как все устроенно - было бы интересно понаблюдать за ходом мыслей.
У нас в институте мы прогали под _не_помню_какой_ процессор, но реально у нас был эмуль этого проца, написанный на Turbo Pascal. Там еще была защита: прога проверяла номер семестра, и если студент хвостатый, то рандомно удаляла файл с работой. А если поставить атрибут read-only, то она крашилась.
хм. в каком смысле? Старался делать всё логично как для программиста, так и дешифратора. Например, сочитания префиксов: dst+dst -> swap dst1,dst2 ; оба префикса - приёмники: загружаем их оба, т.е. обмениваем; dst+src -> mov dst,src ; загружаем источник в приёмник. очень логично; src+src -> cmp src1,src2 ; оба префикса - источники: загружать некуда, значит сравним... и т.д. максимально следуя логике. А если Вы о том, что DASH использует всего 13-битное смещение или 29-битное, то для компактного кода 13 бит - -4096..+4095, что с лихвой хватит процедурам отчистки памяти и прочей муры. А 29-бит - -½Гб..+½Гб. Что для построения сложнейщих алгоритмов вполне достаточно. А в среде OS функции API не проецируются в адресном пространстве. Потому и переходить дальше ½Гб за один скачок смысла нету. Ограничения АЛУ-операций непосредственными 16-битами? Подавляющее число алгоритмов с 32- и 64-битными словами содержат кучу нулей или "F". Расточительство! А если приспичило не на шутку, отводишь таблицу, иницируешь указатель и грузишь потоком. Code (Text): ; Пример вывода Hex. ; Вход: R61 ; Выход: R60 ; Формат: 00_00_Hi_Lo 10000000 7D A0 |PUSH R32,R61 |PUSH _XP,_L 10000002 5D E9 |SHR R61,2 |SHR _L,2 10000004 5D E9 |SHR R61,2 |SHR _L,2 10000006 E0 02 |DASH 0x1000000A |DASH L 10000008 48 BD |POP R61,R32 |POP _L,_XP 1000000A 5D C1 00 0F |AND R61,15 |L:AND _L,15 1000000E 5D D6 00 0A |CMP R61,10 |CMP _L,10 10000012 31 E0 |CASE NC |_IF !_CFX 10000014 5D C4 00 07 |ADD R61,7 | ADD _L,7 10000018 5C C1 00 FF |AND R60,255 |AND _K,255 1000001C 7C DC 0E 0E |CALC R60,(R60 SHL 3) SHL 3 |CALC _K = (_K << 3) << 3 10000020 7C DC CC 4D |CALC R60,(R60 SHL 2) ADD R61|CALC _K = (_K << 2) + _L 10000024 D0 00 00 00|DASH R32 |RET И который раз я убеждаюсь, что подобные темы - поругаемы на всех форумах. О попытке найти интузиастов - ваще молчу! :-X
Paguo_86PK энтузиастов чего? обзывать с потолка взятые безсистемные цифры случаймыми словами, а потом выдумывания зачем такое надо? могу сразу сказать, что ваша фантазия не устраняете, а гипертрофирует х86 недостатки. перед тем, как начать фантазировать, надо поставить задачу, конечную цель, те чего вы хотите добиться (пусть даже и фантастическую). цель четкую и конкретную (как можно четче и конкретнее. цель входит в разработку. иногда при продумывании постановки задачи, решают саму задачу). после этого вы разбиваете ее на части (подзадачи) их еще разбиваете итд. а потом начинаете думать как решить каждую из под..задач в отдельности. потом думаете как связать ваши решения подзадач и если надо - перерешаете часть из них. итд. медленно, постепенно и к цели. без оставляний хвостов на потом. и делается это одним человеком. я вообще не понимаю, как некоторые люди всерьез предлагают думать коллективно. я б решил, что они телепаты, если б их не было так много (наврядли телепатия так распространена и еще не слышал, чтоб телепаты спрашивали разрешения на доступ к чужой мысли) и если б часть из них, мне лично и даво известная, не была такими закончеными болванами (не примите на свой счет. я вас не знаю и вас не оцениваю и не могу)
Цель... Эм-ммм, допустим, сама затея с собственным процессором - это... 1) Puzzle, которым занимаешься на досуге, чтобы расслабиться. Переставляешь коды, ищешь красоту в логике, и т.д.; 2) Внутреннее противостояние всему миру. Некоторые ищут идеалы в искусственных мирах, типо SimCity или Sims... А я люблю творить источник самих искусственных миров; И потом, Вы так довольны доминирующими технологиями? Или просто сдались и принимаете всё как должное, с акциентом это должное пропагандировать? Зачем писать А причём тут x86? Всё равно, что "ровняйтесь под лысого дедушку Ленина"! Свой процессор впервые стал пытаться выдумать ещё когда сидел на Радио-86РК с КР580ВМ80А и 16Кб вместилища бинарных душ. И начал тупо: Не используемые, но существующие коды, типо MOV B,B или MOV L,L, задействовал под префикс и получилось это: 40 86 -> ADD B,M ; вместо MOV B,B и ADD A,M 49 E6 7F -> AND C,7Fh ; вместо MOV C,C и AND A,7Fh и т.д... Так что здесь и i8086 не пахнет! )) В основе лежит i8080A, изуродованный до неузнаваемости и в 32-битном исполнении для начала...
Хыйть. В цифровой электроннике есть прекрасный элемент - мультиплексор: n-бит селектора, 2n-входов и один или более выходов. В системах команд такое встретить очень сложно, так-как мультиплексацию заменяют условные переходы... Но, есть музыкальный трекерный формат с паттернами. Давно вот хотел сформулировать основы программируемых паттерн-процессов. Но опыта вообще мало... Для начала: 1) Алгоритм представлен как очередь индексов паттернов; 2) Индекс паттерна имеет биты условного выполнения или условного зацикливания; 3) Паттерн может представляться в своё время очередью других паттернов; 4) В паттерне нету готовых вычислительных команд, они программируются ПЛИС-паттернами; 5) Паттерн может содержать команду условного возврата. Никакого ветвления. Упрощённая схема программирования алгоритмов такая: Code (Text): long x1, y1, x2, y2, dx, dy, ax, ay, le, xy; float fe, se; void abs(void) { while(le >= 0) return; le = -le; } void add_x(void) { while(xy) return; ++ x1; while(dx > 0) return; -- x1; -- x1; } void add_y(void) { while(!xy) return; ++ y1; while(dy > 0) return; -- y1; -- y1; } void max(void) { le = ax; xy = ax > ay; while(xy) return; le = ay; } void min(void) { fe = (float)dx; while(ax < ay) return; fe = (float)ay; } void step_xy(void) { while(se < 1.0) return; xy = !xy; add_x(); add_y(); xy = !xy; } BOOL line_step(void) { pixel(); add_x(); add_y(); se += fe; step_xy(); -- le; return le > 0; } BOOL line(void) { dx = x2; dy = y2; dx -= x1; dy -= y1; le = dx; abs(); ax = le; le = dy; abs(); ay = le; max(); min(); fe /= (float)le; se = 0.0; while(line_step()); } т.е. алгоритм построения линии не содержит разветвлений, а разбит на несколько шаблонов... Зачем это надо? Ну, это, на мой взгляд, более ближе к аппаратным схемам.
Тему уже никто не читает или устали здесь пост держать? Меня давно интересовал вопрос, как выглядит современное процессоро-строение. Вот возмём к примеру семейство x86. Как они его тестируют? Программная модель есть или сразу в реале? Вот мой сюжет: Скажем, имеется суперкомпьютер в недрах Intel, под который разработана полная программная модель x86-ых. Короче, эмулятор. Но не такой, каким мы привыкли представлять эмуляторы, а самый настоящий симулятор! То есть от этого суперкомпьютера идёт здоровый шлейф жгутом к панельке-симулятору процессора. Её втыкают прямо в сокет реального PC-компьютера вместо реального x86-го. А программа-симулятор имитирует Pentium весь, до последнего pin'а! Все пол тысячи pin'ов программа читает/выставляет сама, вплоть до входа тактовых импульсов. Ну, конечно некоторые сигналы, как запросы на прерывание и т.д. прерывают супер-компьютер реально, но шина адреса/данных и управления полностью выставляется тем симулятором. Т.е. для реального PC симулятор становится практически реальным процессором. Правда с заниженной на порядок частотой... Я хоть в чём-то прав или все тут такие сердитые?
Paguo_86PK а вы не догадываетесь? намекаю, разговор с вами иногда сает похож на разговор со стеной. только со стеной печатать надо меньше. по вопросу процессоростроения и симуляторов, в миллионный раз вам говорю - есть специальные языки. наиболее проработаны и распространены - вхдл и верилог. вот пара учебников (я предпочитаю верилог. он более лаконичен) http://www.dsol.ru/book7/ http://www.asic-world.com/verilog/verilog_one_day.html к ним есть симуляторы, визуализаторы и проч. для проверок на железе и мелких/опытных партий есть специальные микросхемы. для средних партий есть совместимые с фпга, но однократно программируемые камни. крупные партии по дизайну на хдл можно заказать на заводе. как сделали и пропеллеры, например (они сами пишут об этом). вам стоит начать с борьбы со своей ленью и или позвонить в ..(забыл как оно называется). или пробить доставку изза бугра. заодно и подзаработаете. вы ж не единственный радиоэлектроник в узбекистане или ташкенте? ЗЫ все хотел спросить - как у вас там температура/погода счас? и выложите пару фоток на посмотреть. интересно. ближе самары к узбекистану не был.