Спасибо, но уже написал процедуру, так что всё O.K.
Но, конечно, мне было бы интересно посмотреть на другие процедуры вывода спрайтов.
Сейчас меня волнует другой вопрос: как сделать обработчик прерываний, чтобы возможно было использование стека под свои нужды (вывод спрайтов, таблицы и т.д.)...
Code: Select all
;Вывод спрайтов 2хX
;by aprisobal/ab
;Формат спр. - спрайт,маска,спрайт,маска...
;in IX - adr of sprite
;in E - Y (пикс.)
;in D - X (пикс.)
;in B - none
;in C - выс. (пикс.)
PUTPIX PUSH DE,BC,IX
LD A,E
AND #07
LD (PUTPRR+1),A
LD A,E
AND #F8
RRCA
RRCA
RRCA
LD E,A
CALL BCOORD
LD A,L
LD (PUTPI3+1),A
PUTPI1 PUSH BC
PUSH HL
XOR A
LD H,255
LD L,A
PUTPRR OR 0
LD D,(IX+1)
LD E,(IX)
LD B,(IX+3)
LD C,(IX+2)
OR A
JR Z,PUTPS1
PUTPR2 SRL E
RR C
RR L
SCF
RR D
RR B
RR H
DEC A
JR NZ,PUTPR2
PUTPS1 LD (PUTPS4+1),HL
POP HL
LD A,(HL)
AND D
OR E
LD (HL),A
LD A,L
AND 31
CP 31
JR NC,PUTPI6
INC L
PUTPS2 LD A,(HL)
AND B
OR C
POP BC
LD (HL),A
LD A,L
AND 31
CP 31
JR NC,PUTPI7
INC L
PUTPS4 LD DE,0
PUTPS3 LD A,(HL)
AND D
OR E
LD (HL),A
PUTPI2 DUP 4
INC IX
EDUP
PUTPI3 LD L,0
CALL DOWN
DEC C
JR NZ,PUTPI1
PUTRET POP IX,BC,DE
RET
PUTPI6 POP BC
PUTPI7 DUP 4
INC IX
EDUP
JR PUTPI3
DOWN INC H
LD A,H
AND 7
RET NZ
LD A,L
ADD A,32
LD L,A
LD (PUTPI3+1),A
RET C
LD A,H
SUB 8
LD H,A
RET
BCOORD LD A,D ;de(0-191,0-31) -- hl
RRCA
RRCA
RRCA
AND #18 ;%00011000
BCOSCR ADD A,#40 ;%01000000
LD H,A
LD A,D
AND #07 ;%00000111
ADD A,H
LD H,A
LD A,D
RLA
RLA
AND #E0 ;%11100000
OR E
LD L,A
RET