Пассивный процессор? Нет, активный!

Тема в разделе "WASM.ELECTRONICS", создана пользователем Paguo_86PK, 25 июл 2009.

  1. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Итак, как я уже говорил, мне удалось разработать ещё один вариант, который можно обсудить...
    Код (Text):
    1. Глава 1. Введение в описание процессорного устройства.
    2. ------------------------------------------------------------------------------
    3. Представляемое центральное процессорное устройство (ЦПУ) является 32-разрядным
    4. средством обработки цифровой информации и включающим в себя 32 регистра общего
    5. назначения (РОН) и 32 регистра системного управления (РСУ). Вся система команд
    6. оформлялась с максимальным логическим обоснованием и включает в себя несколько
    7. основных операций и три категории префиксов, обеспечивающих доступ ко всем РОН
    8. в одном из возможных доступов и образующие расширенные операции. Дешифратор не
    9. позволяет определять более одного префикса, обрабатывая их пару как одну целую
    10. составную операцию.
    11.  
    12. Дешифратор команд является 5-битным, в общей сложности обеспечивая всего до 32
    13. операций. Младшие 3 бита дешифратора берутся из самого кода команды программы.
    14. Старшие 2 бита определяются префиксом, если тот предшествовал ранее, иначе они
    15. считаюся сброшенными в ноль. Код команды представляется в одном байте, старшие
    16. 3 бита которого поступают на вход дешифратора, а младшие 5 бит - опциональные,
    17. обрабатываемые непосредственно узлом конкретной команды.
    Код (Text):
    1. Таблица 1.1: Двоичное представление команд.
    2. Бит-поле, категория, описание
    3. 000xxxxx  -- -- --   Обрабатывается узлом обработки исключений
    4. 001xxxxx PREFIX EXT  Префикс регистра-расширителя. Индекс РОН указан x-битами
    5. 010xxxxx PREFIX DST  Префикс регистра-приёмника. Индекс РОН указан x-битами
    6. 011xxxxx PREFIX SRC  Префикс регистра-источника. Индекс РОН указан x-битами
    7. 100xxxxx <reserved>  Зарезервировано
    8. 101xxxxx STACK UNIT  Обрабатывается узлом стека. Индекс РОН указан x-битами
    9. 11nxxxxx BRANCH UNIT Обрабатывается узлом управления порядком и логикой кода
    Код (Text):
    1. Таблица 1.2: Сочитание кодов префиксов для образования составных команд. Bin-5
    2.              отображает 5-битный код дешифратора команд.
    3. Префикс1,префикс2,bin-5,asm-мнемоника, описание команды
    4. 001xxxxx 001yyyyy 01001 MODE  Ry, x    Управляет режимом РОН
    5. 001xxxxx 010yyyyy 01010 MOV   Ry,[Rx]  Считывает данные из памяти в РОН
    6. 001xxxxx 011yyyyy 01011 MOV   [Rx],Ry  Записывает данные из РОН в память
    7. 010xxxxx 001yyyyy 10001 PEEK  Rx,[Rx]  Считывает поток из памяти в РОН
    8. 010xxxxx 010yyyyy 10010 SWAP  Ry, Rx   Обмен значениями двух РОН
    9. 010xxxxx 011yyyyy 10011 MOV   Rx, Ry   Присвоение значения
    10. 011xxxxx 001yyyyy 11001 POKE  [Ry],Rx  Записывает поток из РОН в память
    11. 011xxxxx 010yyyyy 11010 TEST  Ry, Rx   Анализирует РОН
    12. 011xxxxx 011yyyyy 11011 CMP   Ry, Rx   Сравнивает один РОН с другим
    Код (Text):
    1. Таблица 1.3: Краткое описание основных команд и их модификаций, если перед ней
    2.              указан префикс.
    3. Префикс, команда, bin-5,asm-мнемоника, краткое описание команды
    4.          101xxxxx 00101 PUSH Rx        Занесение РОН в фрейм стека
    5.          110xxxxx 00110 DASH $+x+D24   Переход на 29-битное смещение со знаком
    6.          111xxxxx 00111 DASH $+x+D8    Переход на 13-битное смещение со знаком
    7. 001xxxxx 101yyyyy 01101 PUSH x*32+y    Запись целого 10-битного числа в стек
    8. 001xxxxx 110yyyyy 01110 CASE $+y+D16,x Переход на 21-битное смещение условно
    9. 001xxxxx 111yyyyy 01111 CLEAR Ry,x     Отчищение РОН, если условие x истинно
    10. 010xxxxx 101yyyyy 10101 POP  Ry,Rx     Извлечение из стека двух РОН
    11. 010xxxxx 110yyyyy 10110 <ALUy> Rx,D16  АЛУ-операция над РОН и данными
    12. 010xxxxx 111yyyyy 10111 <ALUy> Rx      Унарная АЛУ-операция над РОН
    13. 011xxxxx 101yyyyy 11101 не определено  Зарезервировано
    14. 011xxxxx 110yyyyy 11110 <ALUy> Ry,Rx.. Комплексное формулирование АЛУ-операций
    15. 011xxxxx 111yyyyy 11111 не определено  Зарезервировано
    Код (Text):
    1. Команды организованы так, чтобы умещаться в один, два или четыре байта. Данные
    2. непосредственно за командой всегда выравниваются по длине команды. При наличии
    3. префикса перед командой поле непосредственных данных укорачивается на 1 байт и
    4. команда сохраняет свою длину, вне зависимости от наличия и отсутствия префикса
    5. перед ней. Если поле непосредственных данных и так содержало 1 байт, префикс в
    6. этом случае вообще ликвидирует это поле. Как правило, из-за этих обстоятельств
    7. логика команды может существенно изменяться.
    8.  
    9. Поле непосредственных данных подчиняется ещё одному правилу и если позволяется
    10. командой, то младшие пять опциональных бит кода команды дополняют 8 или 24 бит
    11. непосредственных данных до 13 или 29 бит соответственно. Поле - целочисленное,
    12. по-этому все данные расширяются до 32 бит как числа со знаком в дополнительном
    13. коде. К тому же, в этом поле нельзя указывать числа близкие к предельным до 16
    14. единиц в положительном и отрицительном диапазоне, так-как эти значения служат,
    15. чтобы непосредственно указать индекс РОН и повысить гибкость команд.
    Код (Text):
    1. Операции условного и безусловного переходов работают несколько иначе аналогов,
    2. в виду чего они были названы CASE и DASH. Особое внимание следует уделить DASH
    3. и обратить внимание на несколько её исключительных особенностей. Например, эта
    4. команда имеет две модификации: Короткую и длинную. Существует правило, которое
    5. не позволяет в длинной модификации использовать те же смещения, достижимые и в
    6. короткой. Это позволяет получить доступ к дополнительным возвожностям. Также в
    7. этих командах нельзя указать бессмысленные значения в роде ссылки на саму себя
    8. или поле непосредственных данных. Такие значения вырабатывают особые действия,
    9. которые используются отладчиком или операционной системой. Это описано ниже.
    Код (Text):
    1. Организация системы команд на привелегированном уровне операционной системы:
    2. OS-level ╔═════════════╤═════════════╤═════════════╤═════════════╗
    3.  OpCodes:║░░░░░░░░░░░░░│ EXT-prefix  │ DST-prefix  │ SRC-prefix  ║
    4. ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣
    5. ║000nnnnn║BREAK   0..31│░░░░░░░░░░░░░│MOV  DST,SRV │MOV  SRV,SRC ║
    6. ║001nnnnn║EXT    32..63│MODE  REG,EXT│PEEK REG,DST │POKE REG,SRC ║
    7. ║010nnnnn║DST    32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║
    8. ║011nnnnn║SRC    32..63│MOV [EXT],REG│MOV  DST,REG │CMP  REG,SRC ║
    9. ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║
    10. ║101nnnnn║PUSH  REG    │PUSH  D10    │POP  REG,DST │PUSH ALU(SRC)║
    11. ║110nnnnn║DASH  D29    │CASE  D21,CND│DST,D16 │REG,SRC ║
    12. ║111nnnnn║DASH  D13    │CLEAR REG,CND│DST     │    SRC ║
    13. ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝
    14.  
    15. Организация системы команд на пользовательском уровне прикладных программ:
    16. Common   ╔═════════════╤═════════════╤═════════════╤═════════════╗
    17.  OpCodes:║░░░░░░░░░░░░░│ EXT-prefix  │ DST-prefix  │ SRC-prefix  ║
    18. ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣
    19. ║000nnnnn║BREAK   0..31│BIOS 1024..  │BIOS ..2560..│BIOS ..4095  ║
    20. ║001nnnnn║EXT    32..63│MODE  REG,EXT│PEEK REG,DST │POKE REG,SRC ║
    21. ║010nnnnn║DST    32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║
    22. ║011nnnnn║SRC    32..63│MOV [EXT],REG│MOV  DST,REG │CMP  REG,SRC ║
    23. ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║
    24. ║101nnnnn║PUSH  REG    │PUSH  D10    │POP  REG,DST │PUSH ALU(SRC)║
    25. ║110nnnnn║DASH  D29    │CASE  D21,CND│DST,D16 │REG,SRC ║
    26. ║111nnnnn║DASH  D13    │CLEAR REG,CND│DST     │    SRC ║
    27. ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝
    Код (Text):
    1. .0 .1 .2 .3 .4|Assembler                        |
    2.    C0 00 00 00|TAG                              |        ; DASH    $+0                                        |Пустая операция отладчика
    3.    C0 00 00 01|PORT    R32,0x0,R33              |        ; DASH    $+1                                        |Обращение к портовому устройству. Режим 0, регистры R32 и R33
    4.    C0 00 00 12|PORT    R32,0x1,R34              |        ; DASH    $+18                                       |Обращение к портовому устройству. Режим 1, регистры R32 и R34
    5.    C0 00 01 23|PORT    R33,0x2,R35              |        ; DASH    $+291                                      |Обращение к портовому устройству. Режим 2, регистры R33 и R35
    6.    C0 00 0F ED|PORT    R46,0xE,R45              |        ; DASH    $+4077                                     |Обращение к портовому устройству. Режим 14, регистры R46 и R45
    7.    C0 00 0F FE|PORT    R47,0xF,R46              |        ; DASH    $+4094                                     |Обращение к портовому устройству. Режим 15, регистры R47 и R46
    8.    C0 00 0F FF|PORT    R47,0xF,R47              |        ; DASH    $+4095                                     |Обращение к портовому устройству. Режим 15, регистры R47 и R47
    9.    C0 00 10 00|DASH    $+4096                   |        ; DASH    $+4096                                     |Безусловный переход на относительный адрес
    10.    CF FF FF EF|DASH    $+268435439              |        ; DASH    $+268435439                                |Безусловный переход на относительный адрес
    11.    CF FF FF F0|DASH    R48                      |        ; DASH    $+268435440                                |Безусловный переход на абсолютный адрес из регистра R48
    12.    CF FF FF FE|DASH    R62                      |        ; DASH    $+268435454                                |Безусловный переход на абсолютный адрес из регистра R62
    13.    CF FF FF FF|DASH    R63                      |        ; DASH    $+268435455                                |Безусловный переход на абсолютный адрес из регистра R63
    14.    D0 00 00 00|DASH    R32                      |        ; DASH    $-268435456                                |Безусловный переход на абсолютный адрес из регистра R32
    15.    D0 00 00 01|DASH    R33                      |        ; DASH    $-268435455                                |Безусловный переход на абсолютный адрес из регистра R33
    16.    D0 00 00 0F|DASH    R47                      |        ; DASH    $-268435441                                |Безусловный переход на абсолютный адрес из регистра R47
    17.    D0 00 00 10|DASH    $-268435440              |        ; DASH    $-268435440                                |Безусловный переход на относительный адрес
    18.    DF FF EF FF|DASH    $-4097                   |        ; DASH    $-4097                                     |Безусловный переход на относительный адрес
    19.    DF FF F0 00|PORT    R48,0x0,R32              |        ; DASH    $-4096                                     |Обращение к портовому устройству. Режим 0, регистры R48 и R32
    20.    DF FF F0 01|PORT    R48,0x0,R33              |        ; DASH    $-4095                                     |Обращение к портовому устройству. Режим 0, регистры R48 и R33
    21.    DF FF F0 12|PORT    R48,0x1,R34              |        ; DASH    $-4078                                     |Обращение к портовому устройству. Режим 1, регистры R48 и R34
    22.    DF FF FE DC|PORT    R62,0xD,R44              |        ; DASH    $-292                                      |Обращение к портовому устройству. Режим 13, регистры R62 и R44
    23.    DF FF FF ED|PORT    R63,0xE,R45              |        ; DASH    $-19                                       |Обращение к портовому устройству. Режим 14, регистры R63 и R45
    24.    DF FF FF FB|PORT    R63,0xF,R43              |        ; DASH    $-5                                        |Обращение к портовому устройству. Режим 15, регистры R63 и R43
    25.    DF FF FF FC|WAIT                             |        ; DASH    $-4                                        |Переход на исходный адрес. Генерация исключения
    26.    DF FF FF FD|HALT    -3                       |        ; DASH    $-3                                        |Останов текущего потока с результатом -3
    27.    DF FF FF FE|HALT    -2                       |        ; DASH    $-2                                        |Останов текущего потока с результатом -2
    28.    DF FF FF FF|HALT    -1                       |        ; DASH    $-1                                        |Останов текущего потока с результатом -1
    29. 22 C0 00 00   |CASE    PF                       |EXT 0x02; DASH    $+0,EXT                                    |Выполнить следующую инструкцию, если условие действительно
    30. 22 C0 00 01   |CASE    $+1,PF                   |EXT 0x02; DASH    $+1,EXT                                    |Переход на относительный адрес, если условие действительно
    31. 22 CF FF ED   |CASE    $+1048557,PF             |EXT 0x02; DASH    $+1048557,EXT                              |Переход на относительный адрес, если условие действительно
    32. 22 CF FF FE   |CASE    R62,PF                   |EXT 0x02; DASH    $+1048574,EXT                              |Переход на абсолютный адрес из регистра R62, если условие действительно
    33. 22 D0 00 0E   |CASE    R46,PF                   |EXT 0x02; DASH    $-1048562,EXT                              |Переход на абсолютный адрес из регистра R46, если условие действительно
    34. 22 D0 00 10   |CASE    $-1048560,PF             |EXT 0x02; DASH    $-1048560,EXT                              |Переход на относительный адрес, если условие действительно
    35. 23 DF FF FB   |CASE    $-5,SF                   |EXT 0x03; DASH    $-5,EXT                                    |Переход на относительный адрес, если условие действительно
    36. 23 DF FF FC   |WAIT    SF                       |EXT 0x03; DASH    $-4,EXT                                    |Выполнять следующую инструкцию, пока условие не действительно
    37. 33 DF FF FD   |MARK    19                       |EXT 0x13; DASH    $-3,EXT                                    |Пометить точку программы в таблице
    38. 3C DF FF FE   |DASH    26                       |EXT 0x1C; DASH    $-2,EXT                                    |Переход на точку из таблицы программы
    39. 3D DF FF FF   |BREAK   0x1D                     |EXT 0x1D; DASH    $-1,EXT                                    |
    40. 43 C1 23 45   |AND     R35,9029                 |DST R35 ; DASH    ALU(DST, DST, 0x01, 0x2345)                |Обращение к модулю ALU
    41. 44 C2 7F EF   |XOR     R36.32751                |DST R36 ; DASH    ALU(DST, DST, 0x02, 0x7FEF)                |Обращение к модулю ALU
    42. 45 C3 7F F7   |OR      R37,R55                  |DST R37 ; DASH    ALU(DST, DST, 0x03, 0x7FF7)                |Обращение к модулю ALU
    43. 54 D1 80 08   |CMA     R52,R40                  |DST R52 ; DASH    ALU(DST, DST, 0x11, 0x8008)                |Обращение к модулю ALU
    44. 55 D2 80 10   |CMX     R53,-32752               |DST R53 ; DASH    ALU(DST, DST, 0x12, 0x8010)                |Обращение к модулю ALU
    45. 56 D4 FF FE   |MUL     R54,-2                   |DST R54 ; DASH    ALU(DST, DST, 0x14, 0xFFFE)                |Обращение к модулю ALU
    46. 66 C1 23 E8   |CALC    R33,(R38 XOR R35) SAL R40|SRC R38 ; DASH    ALU(R33, ALU(R33, SRC, 0x2, R35), 0xE, R40)|Вызывает комплексную обработку модулем АЛУ
    47. 67 C2 45 F6   |CALC    R34,(R39 ADD R37) - 10   |SRC R39 ; DASH    ALU(R34, ALU(R34, SRC, 0x4, R37), 0xF, -10)|Вызывает комплексную обработку модулем АЛУ
    48. 76 D3 04 67   |CALC    R51,(R54 + 4) IMP R39    |SRC R54 ; DASH    ALU(R51, ALU(R51, SRC, 0x0,  +4), 0x6, R39)|Вызывает комплексную обработку модулем АЛУ
    49. 77 D4 89 12   |CALC    R52,(R55 ROL R41) AND R34|SRC R55 ; DASH    ALU(R52, ALU(R52, SRC, 0x8, R41), 0x1, R34)|Вызывает комплексную обработку модулем АЛУ
    50.    E0 00      |NOP                              |        ; DASH    $+0                                        |Пустая операция
    51.    E0 01      |DASH    $+1                      |        ; DASH    $+1                                        |Безусловный переход на относительный адрес
    52.    E0 12      |DASH    $+18                     |        ; DASH    $+18                                       |Безусловный переход на относительный адрес
    53.    E1 23      |DASH    $+291                    |        ; DASH    $+291                                      |Безусловный переход на относительный адрес
    54.    EF FF      |DASH    $+4095                   |        ; DASH    $+4095                                     |Безусловный переход на относительный адрес
    55.    F0 00      |DASH    $-4096                   |        ; DASH    $-4096                                     |Безусловный переход на относительный адрес
    56.    FF FC      |DASH    $-4                      |        ; DASH    $-4                                        |Безусловный переход на относительный адрес
    57.    FF FD      |DASH    $-3                      |        ; DASH    $-3                                        |Безусловный переход на относительный адрес
    58.    FF FE      |STOP                             |        ; DASH    $-2                                        |Переход на исходный адрес. Генерация исключения
    59.    FF FF      |DEBUG                            |        ; DASH    $-1                                        |Передача управления отладчику
    60. 22 E0         |CLEAR   R32,PF                   |EXT 0x22; DASH    $+0                                        |Обнулить регистр R00, если условие действительно
    61. 23 EF         |CLEAR   R47,SF                   |EXT 0x23; DASH    $+15                                       |Обнулить регистр R15, если условие действительно
    62. 33 F0         |CLEAR   R48,NSF                  |EXT 0x33; DASH    $-16                                       |Обнулить регистр R16, если условие действительно
    63. 43 E0         |CLEAR   R35                      |DST R35 ; DASH    ALU(DST, 0, 0xA0, DST)                     |Обращение к дополнению модуля ALU
    64. 45 E7         |NOT     R37                      |DST R37 ; DASH    ALU(DST, 0, 0xA7, DST)                     |Обращение к дополнению модуля ALU
    65. 55 F7         |NEG     R53                      |DST R53 ; DASH    ALU(DST, 0, 0xB7, DST)                     |Обращение к дополнению модуля ALU
    66. 56 FE         |LONG    R54,24                   |DST R54 ; DASH    ALU(DST, 0, 0xBE, DST)                     |Обращение к дополнению модуля ALU
    67. 67 FE         |                                 |SRC R39 ; DASH    ALU(0, SRC, 0x5E, 0)                       |Обращение к дополнению модуля ALU
    68. 78 ED         |                                 |SRC R56 ; DASH    ALU(0, SRC, 0x4D, 0)                       |Обращение к дополнению модуля ALU
    69.    B8         |PUSH   R56                       |        ; PUSH    R56                                        |Занесение в стек регистра R24
    70. 23 B8         |PUSH   120                       |EXT 3   ; PUSH    (24 + EXT * 32)                            |Занесение в стек непосредственных данных
    71. 34 A8         |PUSH   -408                      |EXT 20  ; PUSH    (8 + EXT * 32)                             |Занесение в стек непосредственных данных
    72. 45 B8         |POP    R56,R37                   |DST R37 ; POP     R56,DST                                    |Извлечение из стека в регистры R24 и R05
    73. 67 B8         |PUSH   R56,R39                   |SRC R39 ; PUSH    R56,SRC                                    |
    74. 23 34         |MODE   R52,0x03                  |EXT 3   ; MODE    R52,EXT                                    |Установка режима регистра
    75. 23 45         |MOV    R37,[R35]                 |EXT R35 ; MOV     R37,[EXT]                                  |Чтение из ячейки памяти
    76. 45 56         |SWAP   R37,R54                   |DST R37 ; SWAP    R54,DST                                    |Обмен значениями
    77. 56 67         |MOV    R54,R39                   |DST R54 ; MOV     DST,R39                                    |Дублирование данных регистра в регистр
    78. 67 78         |CMP    R56,R39                   |SRC R39 ; CMP     R56,SRC                                    |Сравнение регистров
    79. 78 23         |POKE   R35,R54                   |SRC R56 ; POKE    [R35],SRC                                  |Занесение значение регистра в стек с основанием
    80. 75 54         |TEST   R52,R53                   |SRC R53 ; TEST    R52,SRC                                    |Сравнение регистров
    81. 42 20         |PEEK   R34,R32                   |DST R34 ; PEEK    DST,[R32]                                  |Извлечение данных из стека с основанием в регистр
    82. 20 7E         |MOV    [R32],R62                 |EXT R32 ; MOV     [EXT],R62                                  |Запись в память
    83. ==============
    84. 60 D9 01 23   |MOV    [R57 + 291],R32
    85. 64 D8 7F FF   |MOV    [R56 + 32767],R36
    86. 78 C7 80 0E   |MOV    R39,[R56 + R46]
    87. 79 C6 FF FF   |MOV    R38,[R57 - 1]
    Имеется JS-дизассемблер...
    Жду ваших замечаний.
     
  2. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    о.. опять вы и идеи.. слу, я вот думаю, а откуда вы? у вас халву там правильно готовят или тоже из семочек?

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

    хотите изобретать процессора - разберите разные типы виртуальных машин, ведь это как раз и есть эмуляторы. разберите их достоинстваи недостатки. точно такие же у реальных процев. и изобретайте для начала именно виртуалку. выйдет чтото удачное - воплотить С код в харде не сложно (С++ на пару порядков сложнее). и готовые компилеры с С и асма уже будут.

    а так, вы чето пишете, доказываете.. мы ж не производители железа. а им для перестройки линий и продвижения несовместимого железа нужны супердоводы. где эти доводы? мгновенной перепрошивки всей фпга не получится. ни счас, ни через 20 лет. а когда получится, 20 лишних операций все равно будут мгновенней.

    сложные, неопределенной, зависимой от декодера длины и состава команды. а) усложняют сам декодер, б) требуют декодирования перед выборкой следующей, что усложняет распараллеливание независимых команд одного потока. кроме того, тоже ветвление невозможно определить до полного декодирования команды. кроме того, команды получаются невыровнеными, что требует ухищрений при работе с памятью. не, в х86 все эти танцы уже сделаны, но за какой срок и какой ценой! кто будет так напрягаться ради вашего?

    кроме того, зачем влаживаться в еще один тип, отличающийся только составом команд, если есть уже несколько отработанных и успешных линий? в чем его преимущество кроме невероятных заявлений автора, что если то и это и вообще все если, то он будет наилучшим? да если изобретут способ мгновенно копировать по 4 мегабайта за раз, то и без спецпроца все будет шоколад.
     
  3. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Относительно задуманного Вы заблуждаетесь!
    Представленный здесь вариант процессора - не доработка "пассивного" и не использует ПЛИС. Он - активный.
    Потом, я не доказываю, что этот вариант - революция! Это просто игрушка. Я им занимаюсь на досуге и не преследую шизофреничной цели довести его до массового производства. ;)

    С другой стороны. Подавляющее большинство эмуляторов симулируют реально существующие процессорные системы, персоналки и видеоприставки.

    Этой темой я сделал первый шаг разработать процессор с самого нуля, довести его до эмуляции и построить на его базе виртуальную модель компьютера с самого нуля.
    Т.е. я затеял как бы игру: Сам себе Motorola/Intel, сам себе Apple/IBM...

    Кто желает включиться в проект, милости просим.
    А пока, ещё немного информации.
    Корректная таблица команд:
    Код (Text):
    1. Организация системы команд на привелегированном уровне операционной системы:
    2. OS-level ╔═════════════╤═════════════╤═════════════╤═════════════╗
    3.  OpCodes:║░░░░░░░░░░░░░│ EXT-prefix  │ DST-prefix  │ SRC-prefix  ║
    4. ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣
    5. ║000nnnnn║BREAK   0..31│░░░░░░░░░░░░░│MOV  DST,SRV │MOV  SRV,SRC ║
    6. ║001nnnnn║EXT    32..63│MODE  REG,EXT│PEEK REG,DST │POKE REG,SRC ║
    7. ║010nnnnn║DST    32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║
    8. ║011nnnnn║SRC    32..63│MOV [EXT],REG│MOV  DST,REG │CMP  REG,SRC ║
    9. ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║
    10. ║101nnnnn║PUSH  REG    │PUSH  D10    │POP  REG,DST │PUSH ALU(SRC)║
    11. ║110nnnnn║DASH  D29    │CASE  D21,CND│<ALU>DST,D16 │<ALU>REG,SRC ║
    12. ║111nnnnn║DASH  D13    │CLEAR REG,CND│<ALS>DST     │<XPT>    SRC ║
    13. ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝
    14.  
    15. Организация системы команд на пользовательском уровне прикладных программ:
    16. Common   ╔═════════════╤═════════════╤═════════════╤═════════════╗
    17.  OpCodes:║░░░░░░░░░░░░░│ EXT-prefix  │ DST-prefix  │ SRC-prefix  ║
    18. ╔════════╬═════════════╪═════════════╪═════════════╪═════════════╣
    19. ║000nnnnn║BREAK   0..31│BIOS 1024..  │BIOS ..2560..│BIOS ..4095  ║
    20. ║001nnnnn║EXT    32..63│MODE  REG,EXT│PEEK REG,DST │POKE REG,SRC ║
    21. ║010nnnnn║DST    32..63│MOV REG,[EXT]│SWAP REG,DST │TEST REG,SRC ║
    22. ║011nnnnn║SRC    32..63│MOV [EXT],REG│MOV  DST,REG │CMP  REG,SRC ║
    23. ║100nnnnn║░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░│░░░░░░░░░░░░░║
    24. ║101nnnnn║PUSH  REG    │PUSH  D10    │POP  REG,DST │PUSH ALU(SRC)║
    25. ║110nnnnn║DASH  D29    │CASE  D21,CND│<ALU>DST,D16 │<ALU>REG,SRC ║
    26. ║111nnnnn║DASH  D13    │CLEAR REG,CND│<ALS>DST     │<XPT>    SRC ║
    27. ╚════════╩═════════════╧═════════════╧═════════════╧═════════════╝
    Краткое описание всех регистров:
    Код (Text):
    1.      ╔════════════════════════════════════════════════════╗    ╔════════════════════════════════════════════════════╗
    2.  REG:║Управляющие регистры                                ║    ║Регистры общего назначения (РОН)                    ║
    3. ╔════╬════════════════════════════════════════════════════╬════╬════════════════════════════════════════════════════╣
    4. ║R00 ║Active IP. Действующий указатель инструкций         ║R32 ║Holded IP. Замороженный указатель инструкций        ║
    5. ║R01 ║System SP. Системный указатель стека                ║R33 ║Active SP. Действующий указатель стека              ║
    6. ║R02 ║System IP. Системный указатель инструкций           ║R34 ║Framed SP. Действующий указатель фрейма стека       ║
    7. ║R03 ║System FX. Системный флаговый регистр               ║R35 ║Active FX. Действующий флаговый регистр             ║
    8. ║R04 ║ ---                                                ║R36 ║Calculator. Регистр, хранящий выражение вычисления  ║
    9. ║R05 ║ ---                                                ║R37 ║Calculator. Регистр, хранящий выражение вычисления  ║
    10. ║R06 ║ ---                                                ║R38 ║Calculator. Регистр, хранящий выражение вычисления  ║
    11. ║R07 ║ ---                                                ║R39 ║Calculator. Регистр, хранящий выражение вычисления  ║
    12. ║R08 ║Debug register. Флаги и режимы отладчика            ║R40 ║                                                    ║
    13. ║R09 ║Debug register #1. Адресный отладочный регистр 1    ║R41 ║                                                    ║
    14. ║R10 ║Debug register #2. Адресный отладочный регистр 2    ║R42 ║                                                    ║
    15. ║R11 ║Debug register #3. Адресный отладочный регистр 3    ║R43 ║                                                    ║
    16. ║R12 ║ ---                                                ║R44 ║                                                    ║
    17. ║R13 ║ ---                                                ║R45 ║                                                    ║
    18. ║R14 ║ ---                                                ║R46 ║                                                    ║
    19. ║R15 ║ ---                                                ║R47 ║                                                    ║
    20. ║R16 ║Mode R40..R43. Регистр режимов РОН                  ║R48 ║                                                    ║
    21. ║R17 ║Mode R44..R47. Регистр режимов РОН                  ║R49 ║                                                    ║
    22. ║R18 ║Mode R48..R51. Регистр режимов РОН                  ║R50 ║                                                    ║
    23. ║R19 ║Mode R52..R55. Регистр режимов РОН                  ║R51 ║                                                    ║
    24. ║R20 ║Mode R56..R59. Регистр режимов РОН                  ║R52 ║                                                    ║
    25. ║R21 ║Mode R60..R63. Регистр режимов РОН                  ║R53 ║                                                    ║
    26. ║R22 ║ - reserved -                                       ║R54 ║                                                    ║
    27. ║R23 ║ - reserved -                                       ║R55 ║                                                    ║
    28. ║R24 ║Tag register.                                       ║R56 ║                                                    ║
    29. ║R25 ║Tag register #1. Адрес отладочной пустой операции 1 ║R57 ║                                                    ║
    30. ║R26 ║Tag register #2. Адрес отладочной пустой операции 2 ║R58 ║                                                    ║
    31. ║R27 ║Tag register #3. Адрес отладочной пустой операции 3 ║R59 ║                                                    ║
    32. ║R28 ║ - reserved -                                       ║R60 ║                                                    ║
    33. ║R29 ║Pointer of Tag. Адрес отладочной пустой операции    ║R61 ║                                                    ║
    34. ║R30 ║Counter of Clock. Счётчик тактов процессора         ║R62 ║                                                    ║
    35. ║R31 ║Counter of Instructions. Счётчик инструкций         ║R63 ║                                                    ║
    36. ╚════╩════════════════════════════════════════════════════╩════╩════════════════════════════════════════════════════╝
    37.  
    38. Команда DASH помещает адрес следующей операции из регистра R00 в регистр R32 и
    39. дополняет поле относительного адреса за командой к регистру R00. Тем самым R32
    40. сохраняет адрес возврата для подпрограммы, которая сама обязана его сохранить.
    41. Перед возврщением из подпрограммы, нужно сначала восстановить адрес возврата в
    42. R32, а затем выполнить операцию DASH с указанием R32. С первого взгляда, такой
    43. подход и организация действий могут показаться чрезмерно громоздкими. С другой
    44. стороны, система команд разрабатывалась так, чтобы инструкции, используемые во
    45. всех алгоритмах значительно реже других, не имели собственных машинных кодов и
    46. не расходовали кодовое пространство системы команд.
    47. Если во время выполнения приложения происходит исключение, блок их обработки в
    48. таком случае меняет местами регистры R00 с R02, R01 с R33 и регистры R03 с R35
    49. для передачи управления ядру операционной системы. При этом функционирование и
    50. счёт регистров R30 и R31 прерывается, чтобы зафиксировать их точные показания.
    51. Для восстановления работы этих регистров их нужно просто прочесть оба, так-как
    52. они имеют специально отведённые триггеры, сбрасываемые во время исключений.
     
  4. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Я же писал, что подобные проблемы я называю "механическими". Т.е. разработать теорию ракетного двигателя - это проблема теоритическая, а разработать сам двигатель - проблема механическая! Всё равно, что додуматься до концепции велосипеда в 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 байтов...

    Пример кода:
    Код (Text):
    1. Address: .0 .1 .2 .3 .4 Label Assembler
    2. 00000000 40 E0                CLEAR R32               ; DST   R32 ; DASH  $ALS:0x00(DST)
    3. 00000002 40 C2 00 40          XOR   R32,0x0040        ; DST   R32 ; DASH  $ALU:0x02(DST,0x0040)           ; Устанавливаем R32 на начало данных
    4. 00000006 41 20                PEEK  R33,R32           ; DST   R33 ; POP   R32,DST                         ; Считываем значение первого регистра
    5. 00000008 40 7F                SWAP  RSP,R32           ; DST   R32 ; SWAP  R63,DST                         ; Через указатель стека будет компактнее
    6. 0000000A 43 A2                POP   R34,R35           ; DST   R35 ; POP   R34 DST                         ; Загрузка в регистры R34 и R35
    7. 0000000C 5F A4                POP   R36               ; DST   R63 ; POP   R36 DST                         ; А также и регистры R36
    8. 0000000E 5F 60                SWAP  R32,RSP           ; DST   R63 ; SWAP  R32,DST                         ; Восстанавливаем стек
    9. 00000010 22 63          L01:  MOV   [R34],R35         ; EXT   R34 ; MOV   [EXT],R35                       ; Начало цикла: Запись в память
    10. 00000012 42 E3                INC   R34,4             ; DST   R34 ; DASH  $ALS:0x03(DST)                  ; Инкремент - 4 единицы
    11. 00000014 64 C3 00 04          ADD   R35,R36           ; SRC   R36 ; DASH  $ALU:0x0004(R35,SRC)            ; Сложение
    12. 00000018 41 F1                DEC   R33               ; DST   R33 ; DASH  $ALU:0x11(DST)                  ; Счётчик итерраций - декремент
    13. 0000001A 30 DF FF F2          JNZ   L01               ; EXT  0x10 ; CASE  $-15,ZERO                       ; Не ноль? Продолжаем цикл
    14. 0000001E 00                   HALT                    ;           ; HALT                                  ; Остонов
     
  5. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    есть такой момент, когда человек отвлекается от своих фантазий и начинает проверять свои утверждения, предположения. то, на чем он основываается/от чего отталкивается. помойму вы дозрели уже до этого.

    например микрософт не писали мсдос. точнее дописывали, но потом. а в начале предприимчивый бг ее просто купил у какихто студентов (другое название было), чтоб перепродать ибм.
     
  6. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Не совсем понимаю. Что Вы имеете в виду?
    На дороге к эмуляции этого процессора стоит огромный валун и мешает пройти дальше.
    Не зря я назвал одну из осовных команд DASH.
    Сразу вспоминаю игру Boulder Dash!
    Валунов и ухабов здесь тьма. Если с системой команд более-менее разобрался, то отдельные проблемы, в особенности с DASH, очень сильно давят и буквально руки от их груза опускаются. Нужна или помощь, или коллективный интузиазм...
    Халва просто растёт на деревьях! И от неё, как видите, буквально крышу сносит! :)

    А если серъёзно...
    Представьте себе, что у вас, практически всю жизнь, основное занятие - безделье! Вы обходитесь без работы, деньги вас не привлекают. Работа очень низкооплачиваемая, но заработок стабильный и очень лёгкий!
    Представьте себе, что игры вас не привлекают, так-как плясать под дутку других программистов не очень-то охото. Собственных Тетрисов и Ксониксов написано на целый погреб!
    Представьте себе, что у вас имеется тюнер, захватывать фильмы и клипы в XviD уже наскучило, а мысль тупо посмотреть телевизор вообще - чуть ли не выворачивает желудок наружу!

    Короче, сыт я по горло такой "халвой" из семечек и без. Цивилизация даёт всё чуть ли ни с десятикратным избытком. Бери, смотри, пей, ешь, гуляй - НЕ ХОЧУ!!!
    Во тогда и начинаешь подумывать... Нет, не о суециде... Что ВЫ!!! А о том, где бы в этом "избытке прелестей цивилизации" поискать тараканом, плесень?

    Вон, Pentium, разросся из неуклюжего и тупого CISC'а в огромную раковую опухоль цифрового мира! И вся цивилизация, как организм, сама продолжает растить эту опухоль. И вырезать боится тоже...

    Вот многие увлекаются роботостроением, в Японии, кажется, у студентов устраиваются конкурсы. Другие - авиаконструированием... И т.п., и т.д...

    А я... Воздух меня не привлекает, путешествия - тем более. Роботы? Искусственный интелект - попытка доказать, что плоть - первична... Глупая и бесперспективная попытка, скажу я. Особенно когда пользуешься ABBYY или переводчиком. Смешно до досады! Уже первая декада XXI века вот-вот завершится, а распознать текст печатного издания машина без тупых, до хохота, ошибок не может!
    И Вы всё продолжаете верить в ИИ, а не в Бога? :)))

    Процессор... Процессор... Уж 15 лет я упорно не оставляю попыток придумать свой собственный "костыль левому полушарию". Перебрал пару десятков вариантов. Некоторые ещё где-то завалались аж в 5" дискетах! Все не припомню... Может по числу битов я переплюнул и "Войну и мир". Как только клавиатура терпит!?

    А Вы говорите о халве! :derisive:
     
  7. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    помойму вам надо тормознуть слегка, остыть чтоб чуть трезвее решить, что делать дальше. если ваша фантазия тяжела и для вас, то другие на нее даж не глянут.
    ну и чтоб прочистилось чуть в голове, по полочкам разложилось, ато у вас все в одной тарелке. и ии, и вера, и компы с гвоздями, и левое полушарие, и раковые опухоли, и вера. это разные вещи

    может вам и правда настоящей халвы пожрать? которая из сативы? пиво/водка не замена ей. оч хорошо в голове прочищает. или "мож по бабам, поручик?"
     
  8. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Бесцельно и бесполезно, но блин - интересно ведь!
    Набор команд страдает теме же ужасами что и другие архитектуры.
    Загляни в mips, так кривизны достаточно, особенно ввиде nop после каждого перехода по условию!
    Загляни в армы с ихними сдвигами и тихо перетянутой к себе системой виртуальной памяти из интелов и shared памятью. А система обработки прерываний по 0 адресу чего стоит! Причем туда надо вхачивать не адрес обработчика а команду безусловного перехода, которая дальше чем на 32 мегабайта не отпрыгнет ввиду того что у ребят была паранойя с размером команды в 4 байта! Ну да, потом поправили, добавили возможность прохачить и поднять таблицу к 0xFFFF0000, какие молодцы! А потом добили новый режим, уменьшили паранойю с размером команды до 2 байт и получили "типа шуструю рассово верную" архитектуру в архитектуре.
    avr - помолчим...
    Загляни в intel86 - изначально не додуманной до конца, без возможности безболезненного расширения функциональности. Хак через хак все, жуть в общем!
    Заглянь в intel64 - проц переделывать впадлу, давай те же компоненты захачим для 64 бит. Сказано - сделано!

    Самый дерзкий аргумент - это работает. Но на вопрос "как?" все в основном умалчивают. Ни mips, ни arm процессоры не делают, они продают архитектуру. Но не забывай про основные причины, по которым другие фирмы готовы покупать архитектуру: готовый софт, который можно с пол пинка запустить, готовые компиляторы (асм + С как минимум), готовые отладчики, готовые профайлеры, готовая литература по описанию архитектуры "что и как и почему".
     
  9. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Paguo_86PK
    Могу посоветовать начать фотографировать бабочек. Это достаточно сложно, зато очень весело. По крайней мере, веселее, чем созерцать систему команд 8-разрядного процессора, путём генетических модификаций превращённого в 64-разрядный. Там, в недрах, такие могучие залежи копролитов, что вовек не разгрести...
     
  10. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Тут до практики один шаг. Напиши свой гипервизор, который бы на реальном Core2Duo эмулировал бы твой процессор. А вдруг найдутся желающие портировать под твой гипервизор hal Debian Embedded
     
  11. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Та что там уж, как ломать - так ломать! Надо уже и логику работы железа менять, грабли убирать. Мало ли что простое и гениальное придумаешь. Хотя... Ты будешь создавать аналогию того что уже есть. От если бы ты не знал как все устроенно - было бы интересно понаблюдать за ходом мыслей.
     
  12. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    У нас в институте мы прогали под _не_помню_какой_ процессор, но реально у нас был эмуль этого проца, написанный на Turbo Pascal. Там еще была защита: прога проверяла номер семестра, и если студент хвостатый, то рандомно удаляла файл с работой. А если поставить атрибут read-only, то она крашилась.
     
  13. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    хм. в каком смысле? Старался делать всё логично как для программиста, так и дешифратора. Например, сочитания префиксов:
    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". Расточительство!
    А если приспичило не на шутку, отводишь таблицу, иницируешь указатель и грузишь потоком.

    Код (Text):
    1. ; Пример вывода Hex.
    2. ; Вход: R61
    3. ; Выход: R60
    4. ; Формат: 00_00_Hi_Lo
    5. 10000000 7D A0         |PUSH  R32,R61                |PUSH  _XP,_L
    6. 10000002 5D E9         |SHR   R61,2                  |SHR   _L,2
    7. 10000004 5D E9         |SHR   R61,2                  |SHR   _L,2
    8. 10000006 E0 02         |DASH  0x1000000A             |DASH  L
    9. 10000008 48 BD         |POP   R61,R32                |POP   _L,_XP
    10. 1000000A 5D C1 00 0F   |AND   R61,15                 |L:AND _L,15
    11. 1000000E 5D D6 00 0A   |CMP   R61,10                 |CMP   _L,10
    12. 10000012 31 E0         |CASE  NC                     |_IF  !_CFX
    13. 10000014 5D C4 00 07   |ADD   R61,7                  | ADD  _L,7
    14. 10000018 5C C1 00 FF   |AND   R60,255                |AND   _K,255
    15. 1000001C 7C DC 0E 0E   |CALC  R60,(R60 SHL 3) SHL 3  |CALC  _K = (_K << 3) << 3
    16. 10000020 7C DC CC 4D   |CALC  R60,(R60 SHL 2) ADD R61|CALC  _K = (_K << 2) + _L
    17. 10000024    D0 00 00 00|DASH  R32                    |RET
    И который раз я убеждаюсь, что подобные темы - поругаемы на всех форумах. О попытке найти интузиастов - ваще молчу! :-X
     
  14. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Paguo_86PK
    энтузиастов чего? обзывать с потолка взятые безсистемные цифры случаймыми словами, а потом выдумывания зачем такое надо?
    могу сразу сказать, что ваша фантазия не устраняете, а гипертрофирует х86 недостатки.

    перед тем, как начать фантазировать, надо поставить задачу, конечную цель, те чего вы хотите добиться (пусть даже и фантастическую). цель четкую и конкретную (как можно четче и конкретнее. цель входит в разработку. иногда при продумывании постановки задачи, решают саму задачу).
    после этого вы разбиваете ее на части (подзадачи) их еще разбиваете итд. а потом начинаете думать как решить каждую из под..задач в отдельности.
    потом думаете как связать ваши решения подзадач и если надо - перерешаете часть из них. итд.
    медленно, постепенно и к цели. без оставляний хвостов на потом.
    и делается это одним человеком. я вообще не понимаю, как некоторые люди всерьез предлагают думать коллективно. я б решил, что они телепаты, если б их не было так много (наврядли телепатия так распространена и еще не слышал, чтоб телепаты спрашивали разрешения на доступ к чужой мысли) и если б часть из них, мне лично и даво известная, не была такими закончеными болванами (не примите на свой счет. я вас не знаю и вас не оцениваю и не могу)
     
  15. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Цель... Эм-ммм, допустим, сама затея с собственным процессором - это...
    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-битном исполнении для начала...
     
  16. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Хыйть.
    В цифровой электроннике есть прекрасный элемент - мультиплексор: n-бит селектора, 2n-входов и один или более выходов.
    В системах команд такое встретить очень сложно, так-как мультиплексацию заменяют условные переходы...
    Но, есть музыкальный трекерный формат с паттернами. Давно вот хотел сформулировать основы программируемых паттерн-процессов. Но опыта вообще мало...
    Для начала:

    1) Алгоритм представлен как очередь индексов паттернов;
    2) Индекс паттерна имеет биты условного выполнения или условного зацикливания;
    3) Паттерн может представляться в своё время очередью других паттернов;
    4) В паттерне нету готовых вычислительных команд, они программируются ПЛИС-паттернами;
    5) Паттерн может содержать команду условного возврата. Никакого ветвления.

    Упрощённая схема программирования алгоритмов такая:
    Код (Text):
    1. long x1, y1, x2, y2, dx, dy, ax, ay, le, xy;
    2. float fe, se;
    3. void abs(void) {
    4.     while(le >= 0)
    5.         return;
    6.     le = -le;
    7. }
    8. void add_x(void) {
    9.     while(xy)
    10.         return;
    11.     ++ x1;
    12.     while(dx > 0)
    13.         return;
    14.     -- x1; -- x1;
    15. }
    16. void add_y(void) {
    17.     while(!xy)
    18.         return;
    19.     ++ y1;
    20.     while(dy > 0)
    21.         return;
    22.     -- y1; -- y1;
    23. }
    24. void max(void) {
    25.     le = ax;
    26.     xy = ax > ay;
    27.     while(xy)
    28.         return;
    29.     le = ay;
    30. }
    31. void min(void) {
    32.     fe = (float)dx;
    33.     while(ax < ay)
    34.         return;
    35.     fe = (float)ay;
    36. }
    37. void step_xy(void) {
    38.     while(se < 1.0)
    39.         return;
    40.     xy = !xy;
    41.     add_x();
    42.     add_y();
    43.     xy = !xy;
    44. }
    45. BOOL line_step(void) {
    46.     pixel();
    47.     add_x();
    48.     add_y();
    49.     se += fe;
    50.     step_xy();
    51.     -- le;
    52.     return le > 0;
    53. }
    54. BOOL line(void) {
    55.     dx = x2;  dy = y2;
    56.     dx -= x1; dy -= y1;
    57.     le = dx; abs(); ax = le;
    58.     le = dy; abs(); ay = le;
    59.     max(); min();
    60.     fe /= (float)le; se = 0.0;
    61.     while(line_step());
    62. }
    т.е. алгоритм построения линии не содержит разветвлений, а разбит на несколько шаблонов...

    Зачем это надо? Ну, это, на мой взгляд, более ближе к аппаратным схемам.
     
  17. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Тему уже никто не читает или устали здесь пост держать? ;)

    Меня давно интересовал вопрос, как выглядит современное процессоро-строение.
    Вот возмём к примеру семейство x86. Как они его тестируют? Программная модель есть или сразу в реале?
    Вот мой сюжет:
    Скажем, имеется суперкомпьютер в недрах Intel, под который разработана полная программная модель x86-ых. Короче, эмулятор. Но не такой, каким мы привыкли представлять эмуляторы, а самый настоящий симулятор!
    То есть от этого суперкомпьютера идёт здоровый шлейф жгутом к панельке-симулятору процессора. Её втыкают прямо в сокет реального PC-компьютера вместо реального x86-го. А программа-симулятор имитирует Pentium весь, до последнего pin'а! Все пол тысячи pin'ов программа читает/выставляет сама, вплоть до входа тактовых импульсов.
    Ну, конечно некоторые сигналы, как запросы на прерывание и т.д. прерывают супер-компьютер реально, но шина адреса/данных и управления полностью выставляется тем симулятором.
    Т.е. для реального PC симулятор становится практически реальным процессором. Правда с заниженной на порядок частотой...

    Я хоть в чём-то прав или все тут такие сердитые? :derisive:
     
  18. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Paguo_86PK
    а вы не догадываетесь? намекаю, разговор с вами иногда сает похож на разговор со стеной. только со стеной печатать надо меньше.

    по вопросу процессоростроения и симуляторов, в миллионный раз вам говорю - есть специальные языки. наиболее проработаны и распространены - вхдл и верилог. вот пара учебников (я предпочитаю верилог. он более лаконичен)
    http://www.dsol.ru/book7/
    http://www.asic-world.com/verilog/verilog_one_day.html
    к ним есть симуляторы, визуализаторы и проч.

    для проверок на железе и мелких/опытных партий есть специальные микросхемы. для средних партий есть совместимые с фпга, но однократно программируемые камни. крупные партии по дизайну на хдл можно заказать на заводе. как сделали и пропеллеры, например (они сами пишут об этом).

    вам стоит начать с борьбы со своей ленью и или позвонить в ..(забыл как оно называется). или пробить доставку изза бугра. заодно и подзаработаете. вы ж не единственный радиоэлектроник в узбекистане или ташкенте?

    ЗЫ все хотел спросить - как у вас там температура/погода счас? и выложите пару фоток на посмотреть. интересно. ближе самары к узбекистану не был.
     
  19. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Досадно...
    А интернет информеры отменили? :derisive:
    Сразу говорю, не моё, а знакомого.
     
  20. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Paguo_86PK
    у вас градусника нету?