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

User Tag List

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

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Master
    Регистрация
    20.01.2005
    Адрес
    Россия, Вологда
    Сообщений
    957
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    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
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

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

Похожие темы

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

Ваши права

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