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

User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 39

Тема: Специалист: эмуляция

  1. #21
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,252
    Благодарностей: 1451
    Записей в дневнике
    7
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    В бейсике проблема на z80 с флагом четности/переполнения. У 8080 это только четность, у z80 еще и переполнение в некоторых командах.
    Это я нашёл и везде поправил. Но, видимо, где-то ещё есть ошибки. JR и ещё 11 отличных от Z80 команд тоже поменял, но пока BASIC не стартует.
    С уважением, Станислав.

  2. #22
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    3,347
    Благодарностей: 1764
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

  3. #23
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,061
    Благодарностей: 1323
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, возможно текущая правильность эмуляции команд только кажущаяся, лучше проверить эксисайзером. Например вот вариант адаптированный для специалиста HardWareManом, только этот еще с патченым стеком, чтобы не вылетал при скролле.
    Вложения Вложения

  4. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    CityAceE (22.12.2018)

  5. #24
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,252
    Благодарностей: 1451
    Записей в дневнике
    7
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    8080ex1 - это прямо то, что нужно было! Спасибо HardWareMan'у за адаптацию под Специалист, а ivagor'у за то, что поделился!

    Запустил и тут же получил вот это:



    А после того, как профиксил логику флага полупереноса, которую я подглядел здесь, получил уже другой результат:

    С уважением, Станислав.

  6. #25
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,252
    Благодарностей: 1451
    Записей в дневнике
    7
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Задолбался искать что не так. В итоге никак не получается победить ALUOP. В двух последних тестах ошибка. Вернее ошибка точно есть в тесте ALUOP NN, а результатов последнего теста я так и не смог дождаться. Часа 4 ждал и бросил. Начала теста ALUOP приходится ждать примерно 1,5 часа после запуска.



    Но зато сейчас работает всё то, что не работало до этого:



    Осталось чуть облагородить исходники и выложить всё это безобразие на GitHub.
    Последний раз редактировалось CityAceE; 25.12.2018 в 05:16.
    С уважением, Станислав.

  7. #26
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,420
    Благодарностей: 1030
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    никак не получается победить ALUOP
    Проверь флаги в командах ANI ORI XRI.

  8. #27
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    3,347
    Благодарностей: 1764
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    b2m, если у него падает ALUOP NN и ALUOP (REGLIST), то флаги всех команд ALU надо смотреть. Напомню, что INR/DCR и DAD прогоняются через ALU (для INR загружается константа 0х01 а для DCR - 0xFF). Т.е., действительно следует проверить логику работы логических а не арифметических операций. Скорее всего опять же флаги AC/C в этих командах, т.к. остальные флаги слишком тупые.

  9. #28
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,420
    Благодарностей: 1030
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    HardWareMan, да кэп.

  10. #29
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,252
    Благодарностей: 1451
    Записей в дневнике
    7
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сегодня произвёл серьёзный рефакторинг код, выделив все повторяющиеся части всех логических и арифметических операций в отдельные функции в ущерб и так никакой производительности скрипта. Несколько раз самым внимательным образом сравнил собственную эмуляцию с эталонным эмулятором. Но ALUOP NN, как и прежде, выдаёт ошибку. Даже не знаю в какую сторону копать. Наверное просто глаз замылился и я что-то упускаю.

    Ну вот, например, так сейчас у меня выглядит эмуляция команды ORI на Python:

    Код:
    def or_a(reg):
        global reg_a, flag_p, flag_h, flag_c, flag_z, flag_s
        reg_a |= reg
        flag_s = bool(reg_a & 0b10000000)
        flag_z = not reg_a
        flag_h = False
        flag_p = parity[reg_a]
        flag_c = False
        fflag_n(False)
        fflag_3(bool(reg_a & 0b00001000))
        fflag_5(bool(reg_a & 0b00100000))
        return
    
    def b11110110():  # OR A,d
    global pc, ticks
        or_a(read_mem(inc_pc()))
        pc = inc_pc2()
        ticks += 7
    return
    А вот для сравнения как эмуляция той же команды выглядит в эталонном эмуляторе на С:

    Код:
    #define ORA(val) \
    {                                               \
        A |= (val);                                 \
        S_FLAG = ((A & 0x80) != 0);                 \
        Z_FLAG = (A == 0);                          \
        CLR(H_FLAG);                                \
        P_FLAG = PARITY(A);                         \
        CLR(C_FLAG);                                \
    }
    
    
            case 0xF6:            /* ori data8 */
                cpu_cycles = 7;
                work8 = RD_BYTE(PC++);
                ORA(work8);
            break;
    Как видите, на выходе получилось практически идентично. И всё равно тест проваливается.
    Последний раз редактировалось CityAceE; 24.12.2018 в 15:24.
    С уважением, Станислав.

  11. #30
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,061
    Благодарностей: 1323
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    fflag_n(False) fflag_3(bool(reg_a & 0b00001000)) fflag_5(bool(reg_a & 0b00100000))
    Для 100% эмуляции 8080 это надо менять. Биты 5 и 3 всегда 0, бит 1 - всегда 1.

  12. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    HardWareMan (25.12.2018)

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Специалист: Варианты
    от Mick в разделе Специалист
    Ответов: 399
    Последнее: 20.04.2019, 18:14
  2. Специалист-М
    от zx_ в разделе Специалист
    Ответов: 210
    Последнее: 23.03.2019, 16:26
  3. Специалист: Бейсик
    от Prusak в разделе Специалист
    Ответов: 22
    Последнее: 10.01.2019, 17:17
  4. Специалист: Разное
    от Splinter в разделе Специалист
    Ответов: 171
    Последнее: 09.05.2018, 07:50
  5. Специалист: Рекомпиляция.
    от Tim0xA в разделе Специалист
    Ответов: 31
    Последнее: 26.04.2018, 17:29

Ваши права

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