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

User Tag List

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

Тема: Расчет длины INT или ЧЯДНТ

  1. #1
    Guru Аватар для SoftLight
    Регистрация
    28.02.2005
    Адрес
    Москва
    Сообщений
    2,082
    Спасибо Благодарностей отдано 
    736
    Спасибо Благодарностей получено 
    451
    Поблагодарили
    250 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Расчет длины INT или ЧЯДНТ

    Как всем известно, каноническая длина INT составляет 71680 тактов для Pentagon и 69888 тактов для Scorpion и оригинального Spectrum. Я написал следующий позорный код, печатающий при вызове из Basic число, пропорциональное кол.-ву тактов:

    PHP код:
                            di
                            ld hl
    , $8000
                            push hl
    pop deinc de
                            ld bc
    257
                            ld a
    $c3
                            ld 
    (hl), a
                            ldir
                            ld hl
    INT
                            ld de
    $c3c3
                            ld bc
    INTLEN
                            ldir
                            ld a
    , $80
                            ld i
    a
                            im 2
                            ei
                            ld bc
    0
                            ld a
    1
                            halt
    .loop                        
                            inc bc              
    6
                            jr 
    .loop            12
    INT    
                        
    or a                4
                        jr z
    , .exit1        7
                        dec a               
    4
    .exit2    
                        ei                  
    4
                        ret                 
    10
    .exit1    
                        pop hl
                        im 1
                        jr 
    .exit2     
    INTLEN            
    = $ - INT 
    Запускаю в Unreal с моделью ULA = Pentagon. Получаю 3980. Где-то еще я слышал, что на уход в прерывание z80 тратит 19 таков.
    Начинаем считать длину INT: 3980 x (6+12) + (4+7+4+4+10) + 19 = 3980x18+29+19 =71688 вместо 71680.

    Вопрос к гуру мультиколоров: Что я делаю не так?
    Последний раз редактировалось SoftLight; 11.02.2018 в 19:24.

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

  3. #2
    Master Аватар для GM BIT
    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

  4. #3
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,671
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    321
    Спасибо Благодарностей получено 
    221
    Поблагодарили
    174 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А я что говорю!(с)
    Остальное - от лукавого) Ну это только при первом вхождении так высчитываеЦЦО, потом то уж все рОвно. Проц жЫ предыдущую команду должОн дОвыполнять, во что бы то ни стало, а уж потом обрабатывать внешнее прерывание. Вот и набегают такты лишние, но не всегда по идее их 8, команды бывают оооочень длинныя.. Не?
    Profi v3.2 -=- Speccy2010,r2

  5. #4
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,560
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Что вы в трех соснах заблудились) Цикл inc bc, jr - это аж 18 тактов дискретности (т.е. ошибки). Какая тут може быть точность?
    Забей 20 килобайт нопов, начинающихся с HALT, затем вычисли на каком адресе прийдет прерывание, да вычти адрес с HALT'ом, вот тебе и точность в 4 такта.

  6. #5
    Master
    Регистрация
    27.03.2005
    Адрес
    CПб
    Сообщений
    711
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SoftLight Посмотреть сообщение
    а разве halt не стоит не ждет пока не придет прерывание? Соотв., сразу после прихода прерывание z80 уходит по вектору
    В halt'е z80 не останавливается. Грубо говоря, halt работает как четырехтактовый jr $. Поэтому в прерывание он уходит не сразу, а как отработает цикл M1.

  7. #6
    R.I.P. Аватар для VNN_KCS
    Регистрация
    11.10.2007
    Адрес
    Донецкая обл. г.Енакиево
    Сообщений
    2,316
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Обратитесь к Alone. Этот парень вам всё обьяснит.
    Стоко раз пользовался его п/программой настройки на 1-й такт INT-a!
    Pentevo - рулез

  8. #7
    Master Аватар для GM BIT
    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SoftLight Посмотреть сообщение
    Расчет длины INT или ЧЯДНТ
    Как всем известно, каноническая длина INT составляет 71680 тактов для Pentagon и 69888 тактов для Scorpion и оригинального Spectrum. Я написал следующий позорный код, печатающий при вызове из Basic число, пропорциональное кол.-ву тактов:
    А в чём вопрос?

    ---------- Post added at 23:37 ---------- Previous post was at 23:36 ----------

    Цитата Сообщение от SoftLight Посмотреть сообщение
    Вопрос к гуру мультиколоров: Что я делаю не так?
    Смотря, что хочешь узнать!

  9. #8
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,560
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от SoftLight Посмотреть сообщение
    Titus справедливо отметил, что нет средств чтобы с точностью до такта подсчитать программно длину INT просто потому, что inc bc - jr дают разброс точности в 18 тактов и предложил оригинальный альтернативный вариант подсчета, хотя и не с точностью до такта.
    Да нет, можно и с точностью посчитать. Учитывая, что в любом спектруме число тактов в кадре уж явно кратно 4, то имея дискретность команды 4 такта (NOP), мы посчитаем точно.
    Но даже если бы тактов в кадре было какое-то неделимое на 4 число, все равно можно было бы подсчитать точно, но не за один INT.

  10. #9
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,773
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,178
    Поблагодарили
    774 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    есть ещё вариант подсчёта через системную бейсик переменную (frames).
    подобным образом определяется тип машины 48/128 в играх Sentinel и BubbleBobble

  11. #10
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот мои скромные изыски по данному вопросу )

    файл загрузить в Unreal вместо ROM 48k и сброситься в 48 режим )
    проверено в эмуле от 2000 до 1 млн тактов показывает правильно )

    в Jemmini Commander'e сделан подсчёт с точностью до 32 тактов, здесь с точностью до 16 ( можно и до 10).
    Вложения Вложения
    • Тип файла: zip TM2.zip (1.6 Кб, Просмотров: 71)

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

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

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

Похожие темы

  1. Расчет модуля разности чисел
    от Andrew771 в разделе Программирование
    Ответов: 15
    Последнее: 15.02.2013, 21:06
  2. Расчет адреса точки на экране
    от Ares в разделе Программирование
    Ответов: 10
    Последнее: 26.07.2012, 17:46

Ваши права

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