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

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 52

Тема: Extended Instructions Set (EIS): MUL, DIV, ASH, ASHC

  1. #1
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Extended Instructions Set (EIS): MUL, DIV, ASH, ASHC

    Как вы знаете, в процессоре ВМ1 зарезервированы коды команд для умножения, деления и произвольного сдвига, но сами эти команды не реализованы. Попытка выполнить такую команду приводит к особому прерыванию. Пользуясь этим, можно написать программу-эмулятор недостающих команд и назначить её на прерывание. Эту программу я буду называть "драйвером EIS".

    Такой драйвер встроен в прошивку контроллера дисковода. Но многие пользуются контроллером жёсткого диска, а в его прошивке нет драйвера EIS.
    Есть программа SETMBR, одна из функций которой - прописать в нулевую дорожку жёсткого диска установщик драйвера EIS. Но такой подход тоже не всегда удобен.

    Я написал полностью новый драйвер - он понадобился для взлома игры “Overkill”. Хотелось превзойти по скорости драйвер из SETMBR. Драйвер устанавливается небольшой программой и всё время находится в памяти контроллера жёсткого диска SMK. Пропадает после холодной перезагрузки компьютера.

    Нажмите на изображение для увеличения. 

Название:	EIS-installer-Manwe.jpg 
Просмотров:	231 
Размер:	18.9 Кб 
ID:	66943

    Во время работы я также написал тест, проверяющий всевозможные случаи использования MUL, DIV, ASH и ASHC. Оказалось, что не всё так просто, и у меня появилась вторая цель - добиться полной совместимости с более продвинутым процессором ВМ2, где эти команды реализованы аппаратно.
    Тест заканчивается замером скорости выполнения команд. Каждая команда выполняется 10 раз с разными аргументами и типами адресации, после чего время выполнения (в тактах процессора) усредняется. Затем выводится итоговый рейтинг. Результат работы своего драйвера я взял за эталон, он выдаёт 100%. Драйвер из SETMBR выдаёт только 88% от этой скорости. Это на реальной БК-0011М. В эмуляторах БК на других платформах результат будет ниже (60%-67%), потому что эмуляторы не учитывают скорость отклика памяти контроллера SMK.

    Нажмите на изображение для увеличения. 

Название:	EIS-test-Manwe-real-hardware.jpg 
Просмотров:	236 
Размер:	25.0 Кб 
ID:	66944

    В итоге мой драйвер получился точней и в среднем быстрей, но он занимает больше места (в памяти SMK много места). На всё ушло 10 вечеров (считая взлом игры). Возможно, самое важное - в процессе был улучшен компилятор PDPy11: в нём появилась возможность записи 32-разрядных чисел командой .DWORD (за это спасибо Ivanq).

    EIS-driver-for-BK0010.zip
    В архиве установщик драйвера, исходники и тест с бенчмарком. В исходниках много комментариев, всё должно быть понятно. Если найдёте ошибки, предложите хитрые тесты или придумаете как увеличить скорость и уменьшить размер без потери скорости - предлагайте, вносите исправления в исходники - буду рад!

    Рекомендую прописать драйвер в автозагрузку MKDOS (в текстовый файл STARTS.COM).

    Отдельное спасибо:
    Alex_K, который на заключительном этапе выдал подробнейшее описание процессора ВМ2, что помогло исправить пару тонкостей,
    S_V_B за тесты на реальной УКНЦ,
    Niol’у за предоставленную БК-0011М, которую он вот уже два месяца всё никак у меня не заберёт
    Svinka за процессор 1801ВМ1Г с аппаратным умножением.
    gid и ivagor за найденные баги и советы по оптимизации.

    Пример ошибок, обнаруженных тестом в драйвере SETMBR:

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


    Нажмите на изображение для увеличения. 

Название:	Standard-EIS-driver-1.jpg 
Просмотров:	310 
Размер:	27.1 Кб 
ID:	66945
    Нажмите на изображение для увеличения. 

Название:	Standard-EIS-driver-2.jpg 
Просмотров:	196 
Размер:	24.4 Кб 
ID:	66946
    [свернуть]
    Последний раз редактировалось Manwe; 02.10.2020 в 10:23. Причина: новая версия драйвера
    manwe.pdp-11.ru

  2. Эти 5 пользователя(ей) поблагодарили Manwe за это полезное сообщение:

    Adam Bazaroff (25.01.2020), litwr (30.09.2020), nzeemin (24.01.2020), TheGWBV (28.09.2019)

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

  4. #2
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Исходники вещественной арифметики от DEC:
    https://www.retro11.de/ouxr/211bsd/u...h_fpsim.s.html
    manwe.pdp-11.ru

  5. #3
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    546
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    106 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не проходит сдаточный тест 791402.
    Зацикливается при выполнении
    Код:
    mov #77777,R5
    mul #100000,R5

  6. #4
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,999
    Спасибо Благодарностей отдано 
    1,067
    Спасибо Благодарностей получено 
    1,244
    Поблагодарили
    479 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может вам вот это ещё пригодится - реализация некоторых математических функций на вещественной арифметике PDP-11:
    https://github.com/schors/sfun

  7. #5
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Не проходит сдаточный тест 791402.
    Зацикливается при выполнении
    Код:
    mov #77777,R5
    mul #100000,R5
    Интересно, а как это должно обрабатываться? 100000 – некорректное знаковое число: если старший бит = 1, то число отрицательное, инвертируем и прибавляем 1, чтобы получить положительное, и вновь имеем отрицательное 100000.
    manwe.pdp-11.ru

  8. #6
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,576
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    276
    Спасибо Благодарностей получено 
    234
    Поблагодарили
    183 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Интересно, а как это должно обрабатываться? 100000 – некорректное знаковое число:
    с чего вдруг бы? вполне корректное

    Цитата Сообщение от Manwe Посмотреть сообщение
    если старший бит = 1, то число отрицательное, инвертируем и прибавляем 1, чтобы получить положительное, и вновь имеем отрицательное 100000.
    нет, имеем положительное беззнаковое
    Прихожу без разрешения, сею смерть и разрушение...

  9. #7
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    нет, имеем положительное беззнаковое
    Согласно Wikipedia (на примере 8-битных чисел), это -128: https://ru.wikipedia.org/wiki/Дополнительный_код
    Последний раз редактировалось Manwe; 07.02.2020 в 09:17.
    manwe.pdp-11.ru

  10. #8
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    546
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    106 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Интересно, а как это должно обрабатываться?
    Так, чтобы не происходило зацикливания, вот ваш код:
    Код:
    305 		CLR R1
    306 		CLR R0				; R0_R1 = R4_R5 * R2
    307 3:		ASR R2				; main loop
    308 		BEQ 6
    309 		BCC 5
    310 4:			ADD R5,R1
    311 			ADC R0
    312 			ADD R4,R0
    313 5:		ASL R5
    314 		ROL R4
    315 		BR 3				; end of main loop
    316 6:		BCC 7
    317 			ADD R5,R1
    318 			ADC R0
    319 			ADD R4,R0
    320 
    321 7:		TST R0				; high 16 bit
    причина зацикливания в строке 307, команда ASR R2, потому что если на входе в R2 попадётся отрицательное число, то R2 никогда не станет 0 и условие выхода из цикла не выполнится.
    Её надо заменить на CLC ROR R2. А в целях оптимизации CLC можно пропустить, т.к. при входе в цикл бит С обнуляется командой CLR R0 в строке 306, а внутри цикла команда ROL R4 в строке 314 всегда вытесняет в бит C число 0.

  11. #9
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,857
    Спасибо Благодарностей отдано 
    655
    Спасибо Благодарностей получено 
    1,846
    Поблагодарили
    1,054 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это не все, фрагмент
    Код:
    			COM R0
    			NEG R1
    надо дополнить чем-то вроде
    Код:
    			bne 73
    			inc r0
    73:
    Специалисты по PDP11 скорее всего предложат более изящный вариант. Стоит более тщательно проверить библиотеку, если при поверхностном просмотре сразу видны 2 ошибки, то вполне возможно их там больше.

  12. #10
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,576
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    276
    Спасибо Благодарностей получено 
    234
    Поблагодарили
    183 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Согласно Wikipedia (на примере 8-битных чисел), это -128: https://ru.wikipedia.org/wiki/Дополнительный_код
    иии что? и оно же беззнаковое +128 (или на быкашках дополнительный код обязателен в любых обстоятельствах под угрозой четвертования?)
    Прихожу без разрешения, сею смерть и разрушение...

Страница 1 из 6 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 0
    Последнее: 29.08.2017, 14:06
  2. Sector II - Extended
    от Splinter в разделе Музыка
    Ответов: 7
    Последнее: 07.02.2014, 06:45
  3. EXTENDED MEMORY DETECTION
    от VELESOFT в разделе Память
    Ответов: 1
    Последнее: 04.04.2010, 22:50
  4. gfx extended :)
    от riskej в разделе Графика
    Ответов: 12
    Последнее: 06.08.2008, 17:58
  5. Fast 48x48 MUL | DIV
    от Sinus в разделе Программирование
    Ответов: 6
    Последнее: 05.07.2005, 17:00

Ваши права

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