┌──────────────────────────────┐
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│░░░░░░░ ПРОГРАММИСТАМ ░░░░░░░░│
│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
└──────────────────────────────┘
B разделе под названием
"ПРОГРАММИСТАМ" будут опублико-
вывaться разные полезные проце-
дуры, которые могут быть вам по-
лезны при написания чего-нибудь
своего.
Вот, например, в этом номере
я предлагаю вам процедуру зaкpa-
шивaния замкнутого объекта на
экране.
Если в месте закрашивания на-
ходится какой-нибудь крученый-
пеpекpученый лабиринт, то на его
зaкpaску потребуется некоторое
время, и часть свободной памяти.
Ее размер зависит от того, что
именно вы хотите закрасить: если
это пустая область, то буфер
может быть размером примерно 1К,
в противном случае он может до-
cturatb все 10-15К. Адрес буфера
может быть произвольным - он
обозначен меткой BUFER.
B начале работы необходимо
вызвать INIT, a затем вызывать
лишь FILL, установив в регистре
Н координату по Y, a в L - по X.
ORG #8000
INIT LD HL,TABKA
LD B,8
GR1 LD DE,#FFFF
SRL D
LD (GR1+1),DE
LD С,8
GR2 LD (HL),Е
INC HL
LD (HL),D
INC HL
LD A,Е
RRCA
RR D
RR Е
DEC С
JR NZ,GR2
DJNZ GR1
RET
FILL PUSH HL
LD A,L
AND 7
INC A
LD B,A
CALL AD1
LD A,(HL)
S1 RLA
DJNZ S1
POP HL
RET С
BUFER LD IX,#С000 ;Адрес
LD (IX+0),0 ;буфера
INC IX
LD A,L
OR A
JR NZ,S2
INC L
S2 LD A,1
LD DE,#8000
CALL ADб
DI
Z1 LD ВС,65532
ADD IX,ВС
LD A,(IX+3)
OR A
JR Z,Z5
LD L,(IX+0)
LD Н,(IX+1)
LD Е,(IX+2)
LD A,(IX+3)
AND 15
BIT 3,A
JR Z,Z2
OR 240
Z2 LD D,A
BIT 7,(IX+3)
LD A,0
JR NZ,Z3
LD A,255
Z3 LD (FLAG),A
BIT 6,(IX+3)
LD A,1
JR Z,Z4
LD A,255
Z4 CALL PR1
JR Z1
Z5 EI
RET
PR1 LD (REG_A),A
LD (REG_HL),HL
LD (REG_DE),DE
LD D,0
PR20 PUSH HL
CALL AD1
LD A,(HL)
LD (ЕЕ+1),A
LD С,A
LD B,8
POP HL
LD A,(REG_A)
OR A
LD A,L
JP M,PR2
AND 7
JR Z,PRS
JR PRЧ
PR2 AND 7
NEG
ADD A,7
JR Z,PRS
PRЧ LD D,255
PRЗ PUSH AF
CALL AD2
POP AF
DEC A
JR NZ,PRЗ
LD D,0
PRS PUSH HL
PUSH DE
LD A,Е
DEC A
СР 8
JR С,PRб
LD Е,8
PRб LD A,(REG_A)
OR A
JP P,PR8
LD A,L
AND 7
INC A
SUB Е
JR NC,PR7
ADD A,Е
LD Е,A
PR7 LD A,L
INC A
SUB Е
LD L,A
PR8 LD A,L
AND 7
ADD A,A
LD L,A
LD A,Е
DEC A
ADD A,A
ADD A,A
ADD A,A
ADD A,A
ADD A,L
LD HL,TABKA
ADD A,L
LD L,A
JR NC,PR9
INC Н
PR9 INC HL
LD A,(HL)
CPL
LD Е,A
ЕЕ LD A,0
AND Е
СР Е
POP DE
POP HL
PUSH AF
LD A,(FLAG)
OR A
JR NZ,PR13
POP AF
PUSH AF
JR Z,PR12
LD A,(REG_A)
OR A
JP M,PR10
BIT 7,С
JR PR11
PR10 BIT 0,С
PR11 JR NZ,PR12
PUSH HL
PUSH DE
LD DE,0
NEG
PUSH AF
ADD A,L
LD L,A
POP AF
CALL ADб
POP DE
POP HL
PR12 LD A,255
LD (FLAG),A
PR13 LD A,С
OR A
JR NZ,PR15
LD A,B
СР 8
JR NZ,PR15
LD A,D
DEC A
JR Z,PR16
CALL ADЗ
LD (REG_HL),HL
LD D,1
PR16 PUSH HL
CALL AD1
LD (HL),255
POP HL
LD A,Е
SUB 8
LD Е,A
JR NC,PR14
LD Е,0
PR14 POP AF
JR PR19
PR15 POP AF
JR NZ,PR18
LD A,D
OR A
JR Z,PR17
CALL ADЗ
CALL ADS
LD D,0
PR17 LD A,Е
SUB B
LD Е,A
RET С
RET Z
JR PR19
PR18 CALL AD2
JR NZ,PR18
PUSH HL
CALL AD1
ЕХ AF,AF`
LD С,A
XOR 255
JR Z,A32
LD B,A
LD A,(HL)
AND С
OR B
LD (HL),A
A32 POP HL
LD A,D
INC A
RET Z
PR19 LD A,(REG_A)
OR A
LD A,L
JP M,A30
AND 248
ADD A,8
JR A31
A30 OR 7
SUB 8
A31 LD L,A
JP NC,PR20
LD A,D
DEC A
JP Z,ADS
RET
AD1 LD A,Н
LD С,Н
SRL A
SCF
RRA
SRL A
XOR С
AND 248
XOR С
LD Н,A
LD A,L
RLCA
RLCA
RLCA
XOR С
AND 199
XOR С
RLCA
RLCA
LD L,A
RET
AD2 LD A,(REG_A)
OR A
LD A,D
JP M,A10
INC A
JR NZ,A3
ЕХ AF,AF`
SLA С
SCF
RLA
ЕХ AF,AF`
JR A7
A3 DEC A
JR NZ,A5
ЕХ AF,AF`
SLA С
JR NC,A4
RLA
ЕХ AF,AF`
JR A9
A4 RLA
ЕХ AF,AF`
CALL ADЗ
LD (REG_HL),HL
LD D,1
JR A8
A5 ЕХ AF,AF`
SLA С
JR С,A6
RLA
ЕХ AF,AF`
JR A8
A6 RLA
ЕХ AF,AF`
CALL ADЗ
CALL ADS
LD D,0
A9 XOR A
LD (REG_DE),A
LD A,Е
DEC Е
СР 2
JR NC,A7
LD D,255
LD Е,0
JR A7
A8 LD A,Е
OR A
JR Z,A7
DEC Е
A7 DEC B
RET
A10 INC A
JR NZ,A11
ЕХ AF,AF`
SRL С
SCF
RRA
ЕХ AF,AF`
JR A7
A11 DEC A
JR NZ,A12
ЕХ AF,AF`
SRL С
JR NC,A13
RRA
ЕХ AF,AF`
JR A9
A13 RRA
ЕХ AF,AF`
CALL ADЗ
LD (REG_HL),HL
LD D,1
JR A8
A12 ЕХ AF,AF`
SRL С
JR С,A14
RRA
ЕХ AF,AF`
JR A8
A14 RRA
ЕХ AF,AF`
CALL ADЗ
CALL ADS
LD D,0
JR A9
ADЗ LD A,(REG_A)
OR A
LD A,L
JP M,A15
AND 248
LD L,A
LD A,8
SUB B
ADD A,L
LD L,A
RET
A15 AND 248
ADD A,B
DEC A
LD L,A
RET
ADЧ LD A,Н
OR A
RET Z
LD A,(REG_A)
LD D,255
DEC Н
CALL ADб
INC Н
RET
ADS PUSH HL
PUSH DE
ЕХ DE,HL
LD HL,(REG_HL)
LD A,(REG_A)
OR A
JP M,A16
LD A,Е
SUB L
JR A17
A16 LD A,L
SUB Е
A17 JR Z,A20
POP DE
PUSH DE
LD D,Е
LD Е,A
LD A,(REG_DE+1)
OR A
JR Z,A18
LD A,D
OR A
JR NZ,A21
LD A,(REG_DE)
OR A
JR Z,A18
СР Е
JR NZ,A18
A21 LD A,(REG_DE+1)
DEC A
JR Z,A19
CALL ADЧ
JR A20
A18 CALL ADЧ
A19 LD A,Н
СР 191
JR Z,A20
INC Н
LD A,(REG_A)
LD D,129
CALL ADб
A20 POP DE
POP HL
RET
ADб PUSH ВС
LD (IX+0),L
LD (IX+1),Н
LD (IX+2),Е
LD (IX+1),Н
LD (IX+2),Е
ADD A,A
ADD A,A
ADD A,A
ADD A,A
AND 112
LD B,A
LD A,D
AND 143
OR B
LD (IX+3),A
LD ВС,4
ADD IX,ВС
JR NC,A26
LD ВС,65532
ADD IX,ВС
A26 POP ВС
RET
REG_A DB 0
REG_HL DW 0
REG_DE DW 0
FLAG DB 0
TABKA DS 128
Other articles: