|
Born Dead
#05
06 января 1999 |
|
Coding - Ultra fast procedure chank'и to planar screen.

════════════════════════════════════════════════════════════════
╠╬╣║╞╪╡███╡╪╞║╣╬╠ CODING. FAST C2P PROCEDURE ╠╬╣║╞╪╡███╡╪╞║╣╬╠
════════════════════════════════════════════════════════════════
(c) Monster/Sage Group
И снова о chank'ах. Вы уже наверное заметили в интре к газете
довольно шустрый ( >25 frm/sec ) bump mapping во весь экран.
Так вот такой скорости работы эффекта удалось достичь с помощью
хитрой c2p процедурки про которую я сейчас расскажу.
Сразу предупрежу, эта процедурка занимает как минимум страницу
памяти, скорость требует жертв :-)
Ultra fassst procedure chanky to planar screen (c2p):
Байт из c2p буфера для каждого chank'а имеет вид - 11xxxx00,
где xxxx - яркость chank'а, 11 - 2 бита адреса таблицы jump'ов.
Таблица jump'ов выглядит так:
#C0C0: JP ADR_#00 #C4C0: JP ADR_#10 ... #FCC0: JP ADR_#F0
#C0C4: JP ADR_#01 #C4C4: JP ADR_#11 ... #FCC4: JP ADR_#F1
... ... ... ...
#C0FC: JP ADR_#0F #C4FC: JP ADR_#1F ... #FCFC: JP ADR_#FF
ADR_#XX: LD H,D ;#xx - 6 линий спрайта пары chank'ов
LD (HL),#xx ;рисуем 0 линию
INC H
LD (HL),#xx ;1
INC H
LD (HL),#xx ;2
INC H
LD (HL),#xx ;3
INC H
LD (HL),#xx ;4
INC H
LD (HL),#xx ;5
INC L
RET NZ ;99+10 (jmp adr)=109 тактов на пару
LD A,D ;для межсегментого экранного перехода
ADD A,E
LD D,A
RET
;83712 тактов - весь экран !
SP_ указывает на начало c2p буфера экрана
HL_ #4000 начало экрана или #C000 (если таблица jump'ов в #8080)
DE_ смотри ниже
Процедура прорисовки буфера chank'ов на экран:
C2P_DRW LD (C2P_RET+1),SP
LD SP,C2P_BUF
LD HL,#4000
LD D,H
LD E,8
RET
C2P_RET LD SP,0
RET
И незабудьте в конце буфера поставить адрес C2P_RET для удач-
возврата в процедуру.
Другие статьи номера:
Похожие статьи:
В этот день... 2 ноября