User Tag List

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

Тема: Нужна помощь в расксорке части кода (ПЗУ atm turbo2)

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

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

    Регистрация
    05.04.2015
    Адрес
    г. Владивосток
    Сообщений
    31
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    add hl,hl ролит и h и l поэтому по факту все 16 бит используются, просто не все сразу а в цепочке.
    Переполнение L увеличивает H, разве нет? А куда денется переполнение H?

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

  3. #2

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,896
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    245 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrey_K Посмотреть сообщение
    Переполнение L увеличивает H, разве нет? А куда денется переполнение H?
    Код:
           xor c       
            xor l
            ld c,a
            add hl,hl
            jr nc,decr_1 
            inc hl
    decr_1
    ммм?

    уйдет во флаг С

    Код:
    имеем 
    C    HL
    0    10000000 0000000
    
    add hl hl
    C    HL
    1    00000000 0000000
    
    jr nc....
    inc hl 
    
    C    HL
    1    00000000 0000001

    считаем скорость - заодно отсекаем дебаггеры и прочее

    на самом деле

    │INC HL │23 │- - - - - -│ 6│

    не более 70000/6 = 12000

    Код:
    ;Процедура установки прерываний для расксорки
    l1fe6   di             ;запрещение прерываний
            pop hl         ;берем адрес возврата в HL
            ld a,#03       ;вкл. 3-ю страницу
            rst #18
            push af        ;сохраняем номер предыдущей
            ld bc,(#f9ff)  ;берем старый вектор прерываний (I=#F9)
            push bc        ;сохраняем его
            ld bc,l201c    
            ld (#f9ff),bc  ;устанавливаем его на адрес #201C
            push hl        ;восстанавливаем адрес возврата
            ld hl,#0001    ;HL=1
            im 2           ;второй режим прерываний
            ret            ;возврат                  
    
    
    l1fff   call l1fe6     ;вызов процедуры установки прерываний
            ei             ;вкл. прерывания
            halt           ;ждем прихода прерывания
            ld b,#14       ;пропускаем несколько тактов
    l2006   djnz l2006
            or a           ;очищаем флаг C
            ei             ;вкл. прерывания (пропускаем еще 4 такта)
    l200a   inc hl         ;в цикле увеличиваем HL на 1, пока не придет прерывание
            jr nc,l200a
            ld (#5f74),hl  ;сохраняем HL по адресу #5F74
    ;Процедура восстановления старого режима прерываний
    l2010   di             ;запрещаем прерывания
            im 1           ;устанавливаем 1-й режим
            pop de         ;берем из стека старый вектор прерывания
            ld (#f9ff),de  ;восстанавливаем его
            pop af         ;восстанавливаем страницу памяти
            rst #18
            ei             ;прерывания вкл.
            ret            ;возврат
    l201c   scf            ;обработчик прерываний для расксорки
            ret            ;он просто сигнализирует о приходе прерывания

    ;проверяем состояние портов

    Код:
    ;Хитрая процедура, формирующая в HL неизвестное число
    l201e   call l1fe6     ;вызов процедуры установки прерываний
            ld hl,#0001    ;HL=1
            ei             ;вкл. прерывания
            halt           ;ждем прерывания
            nop            ;пропуск 4 такта
    l2027   dec de         ;уменьшаем DE до тех пор, пока DE не станет равным 0
            ld a,d
            or e
            jr nz,l2027
    l202c   in a,(#fe)     ;читаем порт #FE
            add a,a        ;A=A+A
            adc hl,hl      ;HL=HL+HL+C
            jr nc,l202c    ;выполняем до тех пор, пока HL не переполнится
            jr l2010       ;или не возникнет прерывание и возврат
    
    
    l2035   pop hl         ;в HL адрес возврата
            ld e,(hl)      ;E=#2E
            inc hl
            ld d,(hl)      ;D=#03
            inc hl
            push de        ;#032E в стек
            ld e,(hl)      ;E=#01
            inc hl
            ld d,(hl)      ;D=#01
            inc hl
            ld c,(hl)      ;C=#82
            inc hl
            ld b,(hl)      ;B=#00
            inc hl
            ex (sp),hl     ;адрес возврата в стек, HL=#032E 
            bit 4,(ix+#35) ;проверка бита 4 #5F40+#35=#5F75
            jr z,l201e     ;а это старший бит неизвестного слова в #5F74
            ex de,hl       ;если bit4(#5f74)!=0, то HL<>DE
            push bc
            call l201e     ;вызов еще одной хитрой процедуры
            pop bc         
            add hl,bc      ;HL=HL+BC
            ret            ;возврат
    короче набор программ критичных к железу

    ---------- Post added at 16:59 ---------- Previous post was at 16:58 ----------

    Цитата Сообщение от Andrey_K Посмотреть сообщение
    Я читаю, но все схватить сразу не успеваю...
    вот тут еще скачай и почитай
    растактовка - влияние на флаги и тд
    https://www.dropbox.com/s/bu9lbf0ns1...codes.a80?dl=0
    С уважением,
    Jerri / Red Triangle.

  4. #3

    Регистрация
    05.04.2015
    Адрес
    г. Владивосток
    Сообщений
    31
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    переполнение в флаг С потом по условию в нулевой разряд L путем inc. Надеюсь понятно почему inc даст set 0,l ?

    Я конечно рад помочь новичку, но правда надо немного почитать, такие вещи должны пониматься на автомате.

    http://www.z80.info/ и (мой не знаю почему любимый) http://clrhome.org/table/
    Я читаю, но все схватить сразу не успеваю...

  5. #4

    Регистрация
    05.04.2015
    Адрес
    г. Владивосток
    Сообщений
    31
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо всем за помощь, код подобран, ПЗУ расшифрована, знаний прибавилось :-)

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

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

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

Похожие темы

  1. Нужна помощь
    от sevol в разделе Игры
    Ответов: 1
    Последнее: 29.07.2010, 00:00
  2. Нужна помощь
    от VNN_KCS в разделе Программирование
    Ответов: 78
    Последнее: 26.06.2010, 21:38
  3. Нужна помощь!!!!!
    от Alegator в разделе Несортированное железо
    Ответов: 2
    Последнее: 30.05.2010, 15:44
  4. нужна помощь!!
    от Subre Wulf в разделе Разный софт
    Ответов: 0
    Последнее: 15.11.2009, 23:32
  5. Помощь с оптимизацией кода
    от moroz1999 в разделе Программирование
    Ответов: 7
    Последнее: 02.06.2008, 14:19

Ваши права

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