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

User Tag List

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

Тема: Вызов функций через RST

  1. #1
    Master
    Регистрация
    20.01.2005
    Адрес
    Россия, Вологда
    Сообщений
    957
    Благодарностей: 165
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вызов функций через RST

    Уважаемые спектрумисты!

    Посмотрите нижепредложенный вариант вызова каких-либо функций через RST без использования регистров.

    Задачи две.
    1. Как можно уменьшить длину?
    2. Как можно сделать быстрее?

    Ваши предложения, комментарии.

    Код:
    ;Вызов функций через RST, без использования регистров.
    
            ORG #6000
    
            LD HL,#FFFF	;Параметр
            LD BC,#FEFE	;Параметр
            LD DE,#0101	;Параметр
            LD A,#11	;Параметр
            CALL EMUL_RST	;Вызов функции
            DB 0	;Номер функции (0-255)
            DB 1	;Номер подфункции (0-127)
            
            ... Здесь далее продолжается
            программа после выполнения функции.
            Разумеется, функция должна
            завершится командой RET.
            
    EMUL_RST                          ;такт, байт
            LD (BACKBC+1),BC            ;20, 4
            EX (SP),HL                  ;19, 1
            LD B,(HL) ;НОМЕР ФУНКЦИИ    ;7,  1
            INC HL                      ;6,  1
            LD C,(HL) ;НОМЕР ПОДФУНКЦИИ ;7,  1
            INC HL                      ;6,  1
            EX (SP),HL                  ;19, 1
            PUSH HL                     ;11, 1
            LD L,B                      ;4,  1
            LD H,RST_TAB/256            ;7,  2
            LD B,(HL)                   ;7,  1
            INC H                       ;4,  1
            LD H,(HL)                   ;7,  1
            LD L,B                      ;4,  1
            LD B,0                      ;7,  2
            SLA C                       ;8,  2
            ADD HL,BC                   ;11, 1
            LD B,(HL)                   ;7,  1
            INC HL                      ;6,  1
            LD H,(HL)                   ;7,  1
            LD L,B                      ;4,  1
            EX (SP),HL                  ;19, 1
    BACKBC  LD BC,0                     ;10, 3
            RET                         ;10, 1
    
    ;----------------------------
    ;Итого: 217 тактов, 32 байта.
    ;----------------------------
    
    ;Таблица переходов на функции.
    ;Лежит только с ровного адреса!
    ;Занимает 512 байт на 256 функций.
    
            ORG #7000
    RST_TAB DB FUNCTION0 ;младший байт адреса функции
            ORG #7100
            DB FUNCTION0 ;старший байт адреса функции
    
    ;Сами функции...
    FUNCTION0
            DW F0_1	;адрес подфункции
            DW F0_2	;адрес подфункции
    
    ;Подфункция 1
    F0_1    RET
    
    ;Подфункция 2
    F0_2    RET
    В приложении тот же пример.
    Вложения Вложения
    axor/Perspective
    http://abzac.retropc.ru/

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

  3. #2
    Activist Аватар для acidrain
    Регистрация
    01.03.2005
    Адрес
    Russia, Krasnodar
    Сообщений
    433
    Благодарностей: 1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хммм, а если не секрет, то для чего это планируешь применить?
    http://amigasc.nm.ru

    Free coder and hardwareman
    Amiga addicted

  4. #3
    Master
    Регистрация
    20.01.2005
    Адрес
    Россия, Вологда
    Сообщений
    957
    Благодарностей: 165
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от acidrain
    Хммм, а если не секрет, то для чего это планируешь применить?
    Для любой прошивки ПЗУ, функциями которой можно будет пользоваться не меняя номеров устоявшихся функций от версии к версии.
    axor/Perspective
    http://abzac.retropc.ru/

  5. #4
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Благодарностей: 11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Написано оптимально, короче сделать не получается.

  6. #5
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,147
    Благодарностей: 5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    не расточительство ли тратить в 16к пзу 512б на какую то таблицу?

  7. #6
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Благодарностей: 2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от axor
    Посмотрите нижепредложенный вариант вызова каких-либо функций через RST без использования регистров.
    Задачи две.
    1. Как можно уменьшить длину?
    2. Как можно сделать быстрее?
    Код:
            ld de, args
            ld bc, args
            call function
            .....
    
    function:
            JP xxxx   ; где xxxx патчится на нужный адрес
                          ; при загрузке программы в память.

  8. #7
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Благодарностей: 2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от axor
    Для любой прошивки ПЗУ, функциями которой можно будет пользоваться не меняя номеров устоявшихся функций от версии к версии.
    Вот в инструкции JP xxxx номер вместо xxxx и записывается. Это когда
    на диске. А когда в памяти номер меняется на адрес. Отдельно имеется
    массив адресов -- индекс в массиве этот самый номер.

  9. #8
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Благодарностей: 2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fk0
    Отдельно имеется
    массив адресов -- индекс в массиве этот самый номер.
    Это уже в ПЗУ.

  10. #9
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Благодарностей: 2
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jtn
    не расточительство ли тратить в 16к пзу 512б на какую то таблицу?
    Нет. Каждая функция из той таблицы по-более займёт.

  11. #10
    CraZZZy CodEr Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    1,553
    Благодарностей: 740
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectre
    Написано оптимально, короче сделать не получается.
    Неужто?
    Код:
    ex (sp),hl
    ld a,(hl)
    inc hl
    ex af,af'
    ld a,(hl)
    inc hl
    ex af,af'
    ex (sp),hl
    push hl
    ld l,a
    ld h,RST_TAB_hi_addr
    ld a,(hl)
    inc h
    ld h,(hl)
    ld l,a
    ex af,af'
    add a,a
    add a,l
    ld l,a
    ld a,h
    adc a,0
    ld h,a
    ld a,(hl)
    inc hl
    ld h,(hl)
    ld l,a
    ex (sp),hl
    ret
    Сейчас уже не помню точно, но что-то около 180-190 тактов.
    Последний раз редактировалось SAM style; 17.11.2005 в 17:31.
    Все любят гипножабу

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

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

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

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

Похожие темы

  1. Подключение клона "Байт" к ТВ через RGB.
    от Surfin_Bird в разделе Изображение
    Ответов: 6
    Последнее: 11.03.2013, 15:59
  2. Ответов: 6
    Последнее: 09.12.2007, 22:02
  3. Ответов: 8
    Последнее: 30.04.2006, 23:38
  4. Принтер через 580ВВ55
    от Sonic в разделе Unsorted
    Ответов: 14
    Последнее: 08.06.2005, 07:26

Ваши права

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