Impulse
#01
31 марта 1997 |
|
Программистам - процедура зaкpaшивaния зaмкнутoгo oбъектa нa экpaне.
┌──────────────────────────────┐ │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ │░░░░░░░ ПРОГРАММИСТАМ ░░░░░░░░│ │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ └──────────────────────────────┘ 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
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября