ZXNet эхоконференция «code.zx»


тема: RST #10, command



от: 812/03.00
кому: Denis Parinov
дата: 06 Dec 1997

Смотрю вдруг 05-12-97, в 02:24, Denis Parinov писал к All:

Hi Denis!

DP> Может кто занимался вызовом подпрограмм через RST #10:

DP> RST #10
DP> db <номер подпрограммы>

DP> Интересует програмка которая, делает это как можно быстрее.
DP> 48 BASIC обрабатывать не нужно, по RST будем попадать на
DP> эту прогу сразу.

как мне не стыдно признаваться - занимаюсь... :)
тут быстрого нифига не выйдет. суть такова:

сначала инициализируем перехваты...
где нить пишем :

LD HL,rst16_
LD (#5C51),HL

а на метке rst16_ должно находиться вот
это :

rst16_ DW rst16

то есть в этом адресе содержится реальный
адрес перехватчика.

ну а это сама процедура обработки,
никаких оптимизаций не было! это пример
из сырого исходника.



rst16
LD HL,0
ADD HL,SP
LD BC,4
ADD HL,BC
LD (ADR_ST+1),HL
LD E,(HL)
INC HL
LD D,(HL); нашли адрес
LD A,(DE); который следует
INC DE; сразу за rst 16
; сохранили ix
; в регистре А у нас
; байт следущий сразу
; за rst

Регистр DE жизненно важен, сейчас он
указывает на второй байт после rst16.
после метки ADR_ST он должен указывать
на байт после всех данных ! то есть уже
на следущую команду. это конечно для
данного примера.

здесь по типу переходим на свои
процедурки.

AND A
JR Z,proc1
DEC A
JR Z,proc2

выход

ADR_ST LD HL,0; заменяем адрес
; возврата в стеке
LD (HL),E на нужный нам,
INC HL содержащийся в DE
LD (HL),D
RET


вот собственно и все, в двух словах так
сказать... пробуй , оптимизируй, надеюсь
ты уже видел что творится в пзу по этому
поводу... трассирни любой rst 16...

пс. данная процедура не допускает рекурсий!
то есть ее нельзя вызывать если мы уже
ушли по rst16 .только одно вхождение, но
про желании можно сделать что угодно.

▌▌║▌█▐│▌▌▐▐ WiTh The BeST wIsheS fROM
▌▌║▌█▐│▌▌▐▐ *C*R*E*A*T*O*R*
▌812/03.00▐


-+- SMM version 1.05

от: 812/08.16
кому: Paul Falcon
дата: 07 Dec 1997

Приветствую тебя, Paul!

В эху CODE.ZX, ты написал письмо
для Denis Parinov. Было это 06-12-97, в 00:00.

DP>> Может кто занимался вызовом подпрограмм через RST #10:

DP>> RST #10
DP>> db <номер подпрограммы>

DP>> Интересует програмка которая, делает это как можно быстрее.
DP>> 48 BASIC обрабатывать не нужно, по RST будем попадать на
DP>> эту прогу сразу.

[skip]

Дело в том что обработчик должен находится в ПЗУ и сохранять
регистры. Я впринципе его написал, но у него есть недостаток
он портит флаги.

rst_16 PUSH HL
PUSH DE
LD HL,4
ADD HL,SP
LD E,(HL) ;Берем мл.байт адреса возврата
INC (HL) ;Корректируем мл.байт адр.возв. на стеке
INC HL
LD D,(HL) ;Берем ст.байт адреса возврата
JP NZ,LP
INC (HL) ;Если нужно корр. ст.байт адр.возврата
LP EX DE,HL ;В HL - адрес возврата
LD L,(HL) ;Берем код
LD H,PROG/256
LD E,(HL) ;Вынимаем мл.байт адреса подпрограммы из
;таблицы
INC H ;Переходим к таблице ст.байтов
LD D,(HL) ;Вынимаем ст.байт
EX DE,HL
POP DE
EX (SP),HL ;Помещаем на стек адрес требуемой подпрограммы
RET ;и переходим на нее

PROG DEFS 256 ;256 мл.байтов адресов подпрограмм
DEFS 256 ;256 ст.байтов ---------//--------

Может можно как нибудь быстрее.

PF>
PF> вот собственно и все, в двух словах так
PF> сказать... пробуй , оптимизируй, надеюсь

ну, я то, само-собой, буду пробовать :)

PF> ты уже видел что творится в пзу по этому
PF> поводу... трассирни любой rst 16...

да там выбор каналов ничего интересного, а по rst 8,
вообще похоже решили не заморачиватся :)

PF> ▌▌║▌█▐│▌▌▐▐ WiTh The BeST wIsheS fROM
PF> ▌▌║▌█▐│▌▌▐▐ *C*R*E*A*T*O*R*
PF> ▌812/03.00▐

Всего хорошего, Mr. Paul Falcon
Вот собственно и все что я хотел сказать
на тему "RST #10, command".

С уважением, Denis.

-+- SMM version 1.05

от: 812/03.00
кому: Denis Parinov
дата: 13 Dec 1997

Смотрю вдруг 12-12-97, в 05:08, Denis Parinov писал к Paul Falcon:

Hi Denis!


отдав два с половиной часа своей
великой жизни этой проблеме ,вот что я
получил... ;)

rst_16
PUSH HL ; 11
POP HL ; 10 место X
POP HL ; 10
INC HL ; 6
PUSH HL ; 11
DEC HL ; 6
LD L,(HL) ; 7
LD H,PROG/256; 7
DEC SP ; 6
DEC SP ; 6
PUSH AF ; 11 место Y
LD A,(HL) ; 7
INC H ; 4
LD H,(HL) ; 7
LD L,A ; 4
POP AF ; 10
EX (SP),HL ; 19
RET ; 10


как никак 152 такта...


PROG DEFS 256 ;256 мл.байтов адресов подпрограмм
DEFS 256 ;256 ст.байтов ---------//--------


OOO! вроде получилось что-то, на первый взгляд работает, но
даже если и нет, то мыслю ты надеюсь понял.

152 такта епрст... помоему не предел ;)

но... если придет прерывание между
местом X и Y то потеряется HL.


▌▌║▌█▐│▌▌▐▐ WiTh The BeST wIsheS fROM
▌▌║▌█▐│▌▌▐▐ *C*R*E*A*T*O*R*
▌812/03.00▐


-+- асм ...




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Тема - Тусовка: CSP'99 - интервью с одним из участников Рыбинской группы Cav/Auryn.
Обозрение - Журналы, которые мы выбираем: ADVENTURER-6, AMAZING-2, AMIGA NEWS-1, CHAOS-1, DEJA VU-4, DEPTH-1,FLASH TIME-1,MIRACLE-1, OBERON-4, ODYSSEY-2, SPECCY-7,SPECTROPHOBY-,SPECTROFON-23, SPECTRUM PROGRESS-2 , ZX-FORMAT-7 , ZX-NEWS-3 , ZX-POWER-3, ZX-РЕВЮ.
Приколы - Воспоминания о первой Рыбалке.
Cенсация - AloneCoder декомпилировал Pro Tracker 3.x
История - история Львовской группы Тertius Gаudens (авторы газеты Optron).

В этот день...   20 апреля