Важная информация

User Tag List

Страница 61 из 81 ПерваяПервая ... 575859606162636465 ... ПоследняяПоследняя
Показано с 601 по 610 из 803

Тема: Реверс-инжиниринг Z80

  1. #601

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Особенности работы 'специального' ресета.

    В общих чертах все более-менее правильно описано было в этой статье.

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

    1. Вовсе не обязательно выдерживать длительность сигнала специального ресета такой, как описано в патенте. Импульс может быть длинной даже менее полутакта. Главное, чтобы во время фиксации ресета (в M1.T2.2) он был активен, а в M1.T2.4 уже не активен.
    2. Импульс специального ресета устанавливается по М1.Т2, далее по M1.T1 следующего цикла происходит сброс регистра PC, а по M1.T2 импульс специального ресета снимается.
    3. Импульс специального ресета задействует механизм запрета декодирования кода команды, который также используется в IM1,2, NMI, HALT. В этом режиме любая команда воспринимается декодером команд, как 00 (NOP).
    4. Если специальный ресет поступил во время выполнения любой команды с префиксом, то выполнение специального ресета откладывается до окончания выполнения этой команды.
    5. Также специальный ресет снимает режим HALT.
    6. Если обычный ресет пришел во время M1.T2, то он задерживается на 1 такт.
    Последний раз редактировалось Titus; 24.10.2024 в 12:10.

    Этот пользователь поблагодарил Titus за это полезное сообщение:

    Reobne(02.11.2024)

  2. #601
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #602

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    974
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    КО. там упомянут один из двух патентов
    https://patentimages.storage.googlea.../US4486827.pdf
    про что второй - склероз...

  4. #603

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    https://patentimages.storage.googlea.../US4486827.pdf
    Я все читать не стал, но по картинке там только схема ресета в этом документе.

  5. #604

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Интересную вещь рассказал nukeykt с эмураши.
    Он сохраняет в верилоге оригинальный дизайн, а асинхронные латчи эмулирует так:

    Код:
    always @(posedge MCLK)
    begin
      if (CLK)
        x <= a;
    end
    Т.е. MCLK (мастерклок) превышает CLK в разы.

  6. #605
    HardWareMan
    Гость

    По умолчанию

    Titus, я про это изначально всегда говорил. Ньюк эту идею подхватил когда я там был пару лет назад, когда он сначала дербанил декап YM2612 а затем Сегу-Денди.

  7. #606

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Потихонечку пишу модули на верилоге.

    Пример модуля (пока набросок):

    Скрытый текст

    Код:
    //----------------------------------------------------------------------
    //
    //                  Модуль управления внешней шиной                      
    //
    //----------------------------------------------------------------------
    
    module Bus_control(
        input             clk,                                      // Тактовый сигнал
        input             res,                                      // Сигнал сброса
        input [98:0]      pla,                                      // Шина ПЛМ
        input             m1,                                       // Машинный цикл M1
        input             t1,                                       // Такт T1
        input             t3,                                       // Такт T3
        input             t3_del,                                   // Такт T3 с задержкой
        input             t4,                                       // Такт T4
        input             grp_io,                                   // Сигнал GRP_IO
        input             int_ack,                                  // Сигнал INT_ACK
        input             dis_bus,                                  // Сигнал DIS_BUS
        input             bus_z,                                    // Сигнал BUS_Z
        input             req_write,                                // Сигнал запроса записи
        input [15:0]      pcr,                                      // Регистр PCR
        output            mreq,                                     // Сигнал запроса памяти MREQ
        output            rd,                                       // Сигнал чтение памяти или портов ввода-вывода RD
        output reg        p_m1,                                     // Сигнал машинного цикла M1
        output reg        rfsh,                                     // Сигнал рефреша памяти RFSH
        output reg [15:0] adr                                       // Шина адреса (16 бит)
        );
    
    
        wire    start_mem_cycle;                                    // Сигнал запуска цикла чтения/записи MREQ, RD
    
        reg     mreq_rs;                                            // Триггер сигнала MREQ
        reg     rd_rs;                                              // Триггер сигнала RD
        reg     disable_rd_port;                                    // Триггер запрета вывода в порт RD (для циклов записи, холостых циклов и прерываний)
        
    //----------------------------------------------------------------------
    
        assign stop_rd_cycle = ((!m1) & t3) | t4 | res;                     // Сигнал окончания циклов MREQ, IORQ, RD для чтения/записи данных
                                                                            // По сигналу RES
                                                                            // По T4 любого цикла
                                                                            // По Т3 любого цикла кроме M1
    
                                                                            // Сигнал нначала цикла памяти
        assign start_mem_cycle = ((!m1) & t1 & (!grp_io) |                  // По сигналу GRP_IO и T1 любого цикла, кроме M1 
                                   (m1 & t1 & (!int_ack))) &                // По M1.T1, кроме INT_ACK (цикл чтения кода команды)
                                   (!dis_bus);                              // При этом сигнал DIS_BUS не должен быть активен
    
                                                                            // Вспомогательные сигналы
        assign m1_t3_mask = t3_del & m1 & t3;                               // Сигнал маски по M1.T3.2
    
    
        always @ (negedge clk)                                              // Управление триггером mreq_rs (/CLK)
        begin
            if (stop_rd_cycle)                                              // Если сигнал окончания записи,
                mreq_rs <= 0;                                               // то mreq_rs = 0 (высший приоритет),
            else if (start_mem_cycle)                                       // Иначе, если сигнал начала цикла памяти,
                mreq_rs <= 1;                                               // то mreq_rs = 1
        end
    
        assign mreq = mreq_rs & (!m1_t3_mask);                              // Внешний сигнал запроса памяти формируется с учетом врезки окончания цикла чтения кода операции
    
    
        always @ (posedge clk)                                              // Управление разрешением RD (CLK)
        begin
            disable_rd_port <= (int_ack & m1) |                             // В m1.int_ack,
                                req_write |                                 // В цикле записи
                                dis_bus;                                    // В цикле без доступа к памяти
        end
    
    
        always @ (negedge clk)                                              // Управление триггером rd_rs (/CLK)
        begin
            if (stop_rd_cycle |                                             // Если сигнал окончания чтения,
                (m1 & t3))                                                  // или начало цикла регенерации памяти M1.T3,
                rd_rs <= 0;                                                 // то mreq_rs = 0 (высший приоритет),
            else if (start_mem_cycle & (!disable_rd_port))                  // Иначе, если сигнал начала цикла памяти и сигнал RD не запрещен,
                rd_rs <= 1;                                                 // то mreq_rs = 1
        end
    
        assign rd = rd_rs & (!(t3_del & m1));                               // Внешний сигнал чтения памяти формируется с учетом удлиненной врезки окончания цикла чтения кода операции
    
    
    
        always @ (posedge clk)                                              // Управление портом M1 (CLK)
        begin
            if (t3 | bus_z)                                                 // В такте T3 любого цикла (а на самом деле в M1.T3) или же по сигналу BUS_Z
                p_m1 <= 0;                                                  // порт M1 переводится в 0
            else if (m1 & t1)                                               // В такте M1.T1 порт M1 переводится в 1, что означает начало цикла M1
                p_m1 <= 1;                                                  //
        end
      
      
        always @ (posedge clk)                                              // Управление портом RFSH (CLK)
        begin
            rfsh <= m1 & (t3 | t4);                                         // Цикл рефреша памяти в тактах M1.T3 и M1.T4
        end
     
     
        always @ (posedge clk)                                              // Управление шиной адреса (CLK)
        begin
            if (((m1 & t3) | t1) & (!dis_bus))                              // Если нет сигнала запрета чтения/записи (dis_bus), то
                adr <= pcr;                                                 // в такте T1 любого цила активен общий цикл чтения/записи,  
                                                                            // либо в такте M1.T3 активен цикл записи IR на шину адреса                                                                  
        end
     
    
    endmodule
    [свернуть]

  8. #607

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,292
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я правильно понимаю ситуацию после запуска процессора (PC=0, прерывания IM1 разрешены ?, во всех регистрах нули)

  9. #608

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    я правильно понимаю ситуацию после запуска процессора (PC=0, прерывания IM1 разрешены ?, во всех регистрах нули)
    Ты имеешь в виду посл ресета, а не запуска?
    В регистрах конечно не нули. Ни после запуска, ни после ресета.
    А после ресета PC равен нулю.

    Этот пользователь поблагодарил Titus за это полезное сообщение:

    goodboy(26.10.2024)

  10. #609

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,384
    Спасибо Благодарностей отдано 
    1,699
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Кстати, EXX и EX AF,AF' меняет индексы группы регистров в M1.T2, а EX AF,AF' меняет в M1.T1. Интересно, зачем так по-разному сделано

    И при постепенном переводе схемы на синхронный дизайн, схема становится намного нагляднее и компактнее. Большое количество латчей просто выкидывается.

  11. #610
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Кстати, EXX и EX AF,AF' меняет индексы группы регистров в M1.T2, а EX AF,AF' меняет в M1.T1. Интересно, зачем так по-разному сделано
    Осмелюсь предположить, как и в случае с ВМ80, регистр А и тем более флаги - особые. Они не находятся в общем регистровом файле (у ВМ80 регистр А физически в АЛУ, а флаги вообще просто набор отдельных триггеров, раскиданных вокруг АЛУ), а значит задействуют несколько другие сигналы управления.

Страница 61 из 81 ПерваяПервая ... 575859606162636465 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 1739
    Последнее: 09.01.2025, 10:55
  2. Ответов: 32
    Последнее: 18.12.2024, 18:19
  3. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  4. Реверс МК-92
    от Случайность в разделе Программируемые калькуляторы
    Ответов: 55
    Последнее: 24.04.2021, 23:47
  5. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •