User Tag List

Показано с 1 по 10 из 81

Тема: Эмуляция вычтехники на МПК К1801 в MAME/MESS

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    22.11.2009
    Адрес
    Москва
    Сообщений
    1,699
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    195
    Поблагодарили
    127 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Более аккуратно отслеживаю CPC, CPSW и тест FIS (VKAC) почти работает:



    Аналогичному тесту 791403 это помогло меньше. Листинга от него нет, но скорее всего, это вариант того же VKAC.

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

  3. #2

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shattered Посмотреть сообщение
    Более аккуратно отслеживаю CPC, CPSW и тест FIS (VKAC) почти работает:
    Аналогичному тесту 791403 это помогло меньше. Листинга от него нет, но скорее всего, это вариант того же VKAC.
    С CPC и CPSW есть тонкие моменты. Они изменяются только когда в PSW сброшен бит 7 или 8. Это можно посмотреть в исходниках UKNCBTL.
    Код:
    void SetPSW(WORD word){
      m_psw = word & 0777;
      if ((m_psw & 0600) != 0600) m_savepsw = m_psw;
    }
    
    void SetLPSW(BYTE byte)
    {
      m_psw = (m_psw & 0xFF00) | (WORD)byte;
      if ((m_psw & 0600) != 0600) m_savepsw = m_psw;
    }
    
    void SetReg(int regno, WORD word)
    {
      m_R[regno] = word;
      if ((regno == 7) && ((m_psw & 0600)!=0600))    m_savepc = word;
    }
    
    void SetLReg(int regno, BYTE byte)
    {
     m_R[regno] = (m_R[regno] & 0xFF00) | (WORD)byte;
     if ((regno == 7) && ((m_psw & 0600)!=0600))    m_savepc = m_R[7];
    }
    
    void        SetPC(WORD word)
    { 
     m_R[7] = word;
     if ((m_psw & 0600) != 0600) m_savepc = word;
    }
    При этом CPSW меняется только при изменении младшего байта PSW. Целиком PSW меняется только в таких случаях -прерывания режима HALT (двойное зависание, сигнал/команда HALT, прерывание ошибки шины в HALT-режиме, включение питания, команда FIS, ошибка получения адреса вектора прерывания), команды STEP и RUN, команды RTI и RTT при возврате в адрес больший 0160000. В остальных случаях изменяется только младший байт.
    Есть еще один тонкий момент. В эмуляторе UKNCBTL также не шел эмулятор FIS, пока в команде не была вставлена небольшая затычка (отмечена красным):
    Код:
    void CProcessor::ExecuteMTPS ()  // MTPS - move to PS{
        WORD ea;
        BYTE dst;
    
    
        if(m_methdest)
        {
            ea = GetByteAddr(m_methdest,m_regdest);
            if (m_RPLYrq) return;
            dst = GetByte(ea);
            if (m_RPLYrq) return;
        }
        else
            dst = GetLReg(m_regdest);
        
        SetLPSW((GetLPSW() & 0x10) | (dst & 0xEF));
        SetPC(GetPC());
        m_internalTick=MTPS_TIMING[m_methdest];
    }
    А иначе в эмуляторе FIS происходило прерывание, но т.к. в стек в 1801ВМ2 кладутся CPC и CPSW, то соответственно без этого клался в стек адрес за командой FIS, а надо адрес за MTPS.

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

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

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

Похожие темы

  1. Пожелания и планы по эмулятору MESS
    от shattered в разделе Эмуляторы отечественных компьютеров
    Ответов: 57
    Последнее: 02.08.2017, 22:14
  2. Free ROM distribution with MAME
    от micko в разделе Эмуляторы отечественных компьютеров
    Ответов: 1
    Последнее: 10.03.2016, 12:07
  3. Эмуляция AY/YM
    от mungo в разделе Эмуляторы
    Ответов: 18
    Последнее: 22.03.2013, 06:14
  4. Dumping project & MESS bug tracker
    от shattered в разделе Разное
    Ответов: 17
    Последнее: 16.09.2012, 16:44

Ваши права

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