ZXNet эхоконференция «code.zx»
тема: cursor
от: 812/03.00
кому: All
дата: 09 Jan 1998
Hi All !
Вот подпросранки работы с курсором:
MAIN_CURSOR
CALL RESTORE_CURSOR
ART_CURSOR
EXX
LD DE,BUFFER
EXX
LD BC,(COOR_1)
LD (COOR_0),BC
CALL COORDS
ADD A,A
ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD L,A
LD H,0
ADD HL,HL
LD DE,CURSOR
ADD HL,DE
LD LX,16
LOOP_1 EX DE,HL
CALL COORDS
LD A,H
EXX
LD H,A
EXX
LD A,L
EXX
LD L,A
LDI
LD A,(HL)
LD (DE),A
INC DE
EXX
EX DE,HL
LD A,(DE)
AND (HL)
INC HL
OR (HL)
LD (DE),A
INC HL
INC DE
LD A,(DE)
AND (HL)
INC HL
OR (HL)
LD (DE),A
INC HL
INC B
DEC LX
JR NZ,LOOP_1
RET
RESTORE_CURSOR
LD DE,BUFFER
LD BC,(COOR_0)
LD LX,16
LOOP_0 CALL COORDS
LD A,(DE)
LD (HL),A
INC HL
INC E
LD A,(DE)
LD (HL),A
INC E
INC B
DEC LX
JR NZ,LOOP_0
RET
COORDS LD A,B
CP 192
JR NC,NULL_HL
RRCA
RRCA
RRCA
LD L,A
AND #18
OR #40
LD H,A
LD A,B
AND 7
OR H
LD H,A
LD A,L
LD L,C
RRA
RR L
RRA
RR L
RRA
RR L
LD A,C
AND 7
RET
NULL_HL LD H,0
RET
COOR_0 DEFW 0
COOR_1 DEFW 0
BUFFER DEFS 48
CURSOR LCODE "CURSOR"
И так, подпрограмма main_cursor ,
основная, она вызывается на прерывании,
или при изменении координат. art_cursor
вызывается один раз когда мы начинаем
рисовать курсор. restore_cursor что бы
убрать курсор с экрана.
Курсор содержиться в следущем формате
2x2 знакоместа, то есть 16 на 16 пикселей
причем второе знакоместо по горизонтали
збито #ff. для удобства, маска курсора
и сам курсор перемешаны, то есть кодовый
блок "CURSOR" байт_маски+байт_курсора+
байт_маски+байт_курсора... и так
процедуры я думаю понятны. единственное
это процедура COORD , она помогает легко
вычислять нужный адрес по координатам.
▌▌║▌█▐│▌▌▐▐ WiTh The BeST wIsheS fROM CREATOR product
▌812/03.00▐ Powered by Cyrix 6x86L 200+/16DIMM/S3TrV2 2MB/1.6GB
-+- SMM version 1.05
|