;z80 ;zx-spectrum ;assembler ; "XEVIOUS" - The Arcade Game! ; written & copyrighted by Maz Spork ; in a pathetic moment of inspiration. ; DON'T PANIC! ; .. betcha this program'll award me the ; Galactic Institute's Price for Extreme Cleverness ; (early summer 1986) ; .processor z80 ; PAGE 72 ; WIDTH 80 ; TAB 16 ; DELAY EQU &01 BREDDE EQU &12 TABUL EQU &07 HYPPIG EQU 32 MAXSHT EQU 8 MAXALI EQU 6 ; ORG &A000 ; DI LD HL,AFBRYD LD (&B0FF),HL LD HL,&0000 LD (SCORE),HL LD (SEED+1),HL LD A,&01 LD (SEED),A LD HL,&55FE+TABUL+BREDDE/2 LD (BASXY),HL LD A,4*(BREDDE MOD 2) LD (BAPIX),A LD A,DELAY LD (SPEED),A XOR A LD (SHOOTS),A LD (PLAYER),A LD (ALIENS),A LD HL,GTABLE LD DE,GTABLE+1 LD BC,75*2 LD (HL),A LDIR LD HL,&4000 LD BC,&1800 LD DE,&4001 LD (HL),L LDIR LD BC,&0300 LD (HL),71 LDIR XOR A OUT (&FE),A LD HL,PLTXT CALL TEXT CALL TEXT CALL TEXT CALL TEXT LD HL,&5800+TABUL LD B,&20 ILOOP: LD DE,SCINIT LD C,BREDDE JLOOP: LD A,(DE) CP 121 JR NZ,JNEXT BIT 2,B JR Z,JNEXT LD A,57 JNEXT: LD (HL),A INC DE INC HL DEC C JR NZ,JLOOP LD DE,&20-BREDDE ADD HL,DE DJNZ ILOOP LD IY,FLAGS LD (IY+0),B CALL WAIT ; LD A,&B0 LD I,A IM 2 EI HALT DI LD BC,&0000 CALL WAIT EI ; GAME: HALT LD A,&F7 IN A,(&FE) RRA JR C,GAME LD IY,&5C3A IM 1 RET ; AFBRYD: DI PUSH AF CALL COLISN CALL FOREGR CALL BACKGR CALL KEYBRD CALL ENEMY POP AF EI RET ; COLISN: PUSH IY LD IY,ATABLE-4 LD A,(ALIENS) LD C,A OR A JP Z,GOHOME CLOOP1: LD DE,4 ADD IY,DE LD A,(IY+0) OR A JR Z,CLOOP1 LD IX,GTABLE-3 LD A,(SHOOTS) LD B,A OR A JP Z,GOHOME CLOOP2: LD DE,3 ADD IX,DE LD A,(IX+0) OR A JR Z,CLOOP2 RLCA RLCA RLCA AND 7 LD E,A LD A,(IX+1) AND &18 OR E LD E,A LD A,(IY+0) RLCA RLCA RLCA AND 7 LD D,A LD A,(IY+1) AND &18 OR D LD D,A ADD A,2 CP E JR NC,NOLAP LD A,E ADD A,2 CP D JR NC,NOLAP LD A,(IX+0) AND &1F ADD A,2 LD E,A LD A,(IY+0) AND &1F CP E JR NC,NOLAP LD A,(IY+0) AND &1F ADD A,2 LD E,A LD A,(IX+0) AND &1F CP E JR NC,NOLAP LD HL,SHOOTS DEC (HL) LD HL,ALIENS DEC (HL) PUSH IX PUSH BC LD C,16 LD E,(IX+0) LD D,(IX+1) EX DE,HL LD A,(IX+2) LD (PIXEL),A LD IX,SPACES CALL SPR16 LD IX,SPACES LD C,16 LD E,(IY+0) LD D,(IY+1) EX DE,HL LD A,(IY+2) AND 7 LD (PIXEL),A CALL SPR16 POP BC POP IX LD (IY+0),0 LD (IX+0),0 NOLAP: DEC B JP NZ,CLOOP2 DEC C JP NZ,CLOOP1 GOHOME: POP IY RET ; BACKGR: LD HL,SPEED DEC (HL) RET NZ LD (HL),DELAY LD HL,&5ADF LD DE,&5AFF LD BC,&02E0 LDDR LD HL,BTABLE LD DE,&5800+TABUL LD B,BREDDE LOOP2: LD A,(HL) AND 15 PUSH HL PUSH DE LD HL,PALETT LD D,&00 LD E,A ADD HL,DE LD A,(HL) POP DE POP HL LD (DE),A INC HL INC DE DJNZ LOOP2 LD B,BREDDE LD IX,BTABLE+BREDDE-1 LOOP1: CALL RND AND 7 ADD A,(IX+&01) ADD A,(IX+&1F) ADD A,(IX+&20) ADD A,(IX+&21) SUB &02 SRL A SRL A LD (IX+&00),A DEC IX DJNZ LOOP1 LD HL,BTABLE+&1F LD DE,BTABLE+&3F LD BC,&20 LDDR CALL RND CP HYPPIG RET NC AND 31 LD L,A LD H,&58 LD A,(HL) AND &38 CP &20 RET NZ LD (HL),89 RET ; FOREGR: LD A,(ALIENS) OR A JP Z,FORE0 LD B,A LD HL,ATABLE FORE2: LD A,(HL) OR A JP Z,FORE3 PUSH HL LD E,A INC HL LD D,(HL) EX DE,HL CALL SCI EX DE,HL INC HL INC HL INC (HL) JP M,FOREL LD A,(HL) RLCA RLCA RLCA RLCA AND &07 LD C,A DEC HL LD A,(HL) BIT 3,A JR NZ,FORE7 AND 7 ADD A,C CP 8 JR C,FORE8 AND 7 INC E JR FORE8 FORE7: AND 7 SUB C SET 3,A JR NC,FORE8 AND 7 SET 3,A DEC E JR FORE8 FOREL: DEC HL LD A,(HL) AND 7 LD (PIXEL),A XOR A JR FORET FORE8: LD C,A LD A,(HL) AND &F0 OR C LD (HL),A LD A,E AND &1F CP TABUL+BREDDE-2 JR NC,FORE4 CP TABUL JR C,FORE4 INC HL LD A,(HL) AND &30 DEC HL ADD A,(HL) LD (HL),A AND 7 LD (PIXEL),A LD A,(HL) AND &C0 RRCA FORET: LD IX,ALIEN1 PUSH BC LD C,A LD B,&00 ADD IX,BC DEC HL LD (HL),D DEC HL LD (HL),E EX DE,HL LD C,16 CALL SPR16 POP BC POP HL FORE5: INC HL INC HL INC HL INC HL DEC B JP NZ,FORE2 JP FORE0 FORE3: INC HL INC HL INC HL INC HL JP FORE2 FORE4: LD IX,SPACES LD C,16 EX DE,HL PUSH BC CALL SPR16 POP BC LD HL,ALIENS DEC (HL) POP HL LD (HL),0 JR FORE5 FORE0: LD HL,(BASXY) LD IX,BASE LD C,20 LD A,(BAPIX) LD (PIXEL),A CALL SPR16 LD C,10 LD IX,SIGHT LD HL,(BASXY) LD A,H SUB 8 LD H,A LD A,L SUB &60 LD L,A JR NC,FORE1 LD A,H SUB &08 LD H,A FORE1: LD A,(BAPIX) LD (PIXEL),A CALL SPR16 BIT 0,(IY+0) JR Z,NOBMB2 LD C,9 LD A,(MIPIX) LD (PIXEL),A LD HL,(MISXY) CALL SCD CALL SCD CALL SCD LD A,(MISCNT) DEC A LD (MISCNT),A JR NZ,MISS1 RES 0,(IY+0) LD IX,SPACES LD HL,(MISXY) PUSH HL CALL SPR8 POP HL CALL ATTRAD LD C,&00 LD B,208 CALL CHECK INC L CALL CHECK LD DE,&1F ADD HL,DE CALL CHECK INC L CALL CHECK AND A RL C LD E,C JP SCUPDA CHECK: LD A,(HL) LD (HL),B CP 89 RET NZ INC C RET MISS1: LD (MISXY),HL LD IX,MSLE1 CALL SPR8 NOBMB2: LD A,(SHOOTS) OR A RET Z LD B,A LD HL,GTABLE SHOOT1: LD A,(HL) OR A JR Z,SHOOT2 PUSH HL LD E,A INC HL LD D,(HL) EX DE,HL CALL SCD CALL SCD CALL SCD CALL SCD LD A,H CP &40 JR C,SHOOT3 INC DE LD A,(DE) LD (PIXEL),A EX DE,HL DEC HL LD (HL),D DEC HL LD (HL),E EX DE,HL LD IX,MSLE2 PUSH BC LD C,7 CALL SPR16 POP BC POP HL SHOOT4: INC HL INC HL INC HL DJNZ SHOOT1 RET SHOOT2: INC HL INC HL INC HL JR SHOOT1 SHOOT3: LD IX,SPACES LD C,7 PUSH BC CALL SPR16 POP BC LD HL,SHOOTS DEC (HL) POP HL LD (HL),0 JR SHOOT4 ; ENEMY: CALL RND CP HYPPIG/8 RET NC LD A,(ALIENS) CP MAXALI RET NC INC A LD (ALIENS),A LD HL,ATABLE-4 ENEMY1: INC HL INC HL INC HL INC HL LD A,(HL) OR A JR NZ,ENEMY1 EX DE,HL CALL RND AND &0F LD C,A RES 0,C RES 1,C ADD A,TABUL+(BREDDE-16)/2 LD (DE),A INC DE LD A,&40 LD (DE),A INC DE CALL RND AND &07 RL C OR C LD (DE),A LD A,&E0 INC DE LD (DE),A RET ; SCUPDA: CALL POINTS LD A,(PLAYER) OR A JR Z,SCUPD1 LD A,BREDDE+TABUL SCUPD1: ADD A,&21 LD L,A LD H,&40 PUSH HL POP IX LD A,(SCORE+1) CALL HEX LD A,(SCORE) JP HEX ; POINTS: LD HL,(SCORE) LD A,L ADD A,E DAA LD L,A LD A,H ADC A,D DAA LD H,A LD (SCORE),HL RET ; KEYBRD: LD A,&FD IN A,(&FE) RRA CALL NC,LEFT LD A,&FD IN A,(&FE) AND &02 CALL Z,RIGHT LD A,&BF IN A,(&FE) AND &04 CALL Z,DOWN LD A,&DF IN A,(&FE) AND &02 CALL Z,UP LD A,&7F IN A,(&FE) RRA JR C,NOBOMB BIT 0,(IY+0) JR NZ,NOBOMB CALL BCKLIN LD A,(BAPIX) ADD A,&04 CP &08 JR C,BOMB1 AND &07 INC DE BOMB1: LD (MIPIX),A LD (MISXY),DE SET 0,(IY+0) LD A,DELAY*3+1 LD (MISCNT),A NOBOMB: LD A,&DF IN A,(&FE) RRA JR NC,FIRE RES 1,(IY+0) RET FIRE: BIT 1,(IY+0) RET NZ SET 1,(IY+0) LD A,(SHOOTS) CP MAXSHT RET NC INC A LD (SHOOTS),A LD HL,GTABLE-3 LD DE,3 FIRE1: ADD HL,DE LD A,(HL) OR A JR NZ,FIRE1 CALL BCKLIN LD (HL),E INC HL LD (HL),D INC HL LD A,(BAPIX) LD (HL),A RET ; BCKLIN: LD DE,(BASXY) LD A,E SUB &20 LD E,A RET NC LD A,D SUB &08 LD D,A RET ; RND: PUSH BC LD A,(SEED) LD HL,(SEED+1) LD C,A LD B,1 RND1: LD A,C AND &48 ADD A,&38 SLA A SLA A RL H RL L RL C DJNZ RND1 LD A,C LD (SEED),A LD (SEED+1),HL POP BC RET ; LEFT: LD A,(BAPIX) CP &02 JR NZ,LEFT1 LD A,(BASXY) AND &1F CP TABUL RET Z LD A,(BAPIX) LEFT1: DEC A DEC A LD (BAPIX),A CP &FE RET NZ LD A,&06 LD (BAPIX),A LD HL,BASXY DEC (HL) RET ; RIGHT: LD A,(BAPIX) CP 6 JR NZ,RIGHT1 LD A,(BASXY) AND &1F CP TABUL+BREDDE-3 RET Z LD HL,BASXY INC (HL) XOR A LD (BAPIX),A RET RIGHT1: INC A INC A LD (BAPIX),A RET ; DOWN: LD HL,(BASXY) CALL SCI LD A,H CP &55 JR NZ,DOWN1 LD A,L CP &A0 RET NC DOWN1: LD (BASXY),HL RET ; UP: LD HL,(BASXY) CALL SCD LD A,H CP &48 JR NZ,UP1 LD A,L CP &80 RET C UP1: LD (BASXY),HL RET ; SCI: INC H LD A,H AND &07 RET NZ LD A,L ADD A,&20 LD L,A RET C LD A,H SUB &08 LD H,A RET ; SCD: DEC H LD A,H AND &07 CP &07 RET NZ LD A,L SUB &20 LD L,A RET C LD A,H ADD A,&08 LD H,A RET ; SPR16: LD A,(PIXEL) LD E,(IX+0) LD D,(IX+1) LD B,&00 OR A JR Z,SPR16B SPR16A: RR E RR D RR B DEC A JR NZ,SPR16A SPR16B: DEC L LD (HL),&00 INC L LD (HL),E INC L LD (HL),D INC L LD (HL),B INC L LD (HL),0 DEC L DEC L DEC L INC IX INC IX CALL SCI DEC C JR NZ,SPR16 RET ; SPR8: LD A,(PIXEL) LD E,(IX+0) LD D,0 OR A JR Z,SPR8B SPR8A: RR E RR D DEC A JR NZ,SPR8A SPR8B: LD (HL),E INC L LD (HL),D DEC L CALL SCI INC IX DEC C JR NZ,SPR8 RET ; TEXT: LD E,(HL) INC HL LD D,(HL) PUSH DE POP IX INC HL TEXT1: LD A,(HL) INC HL OR A RET Z PUSH HL CALL VDU POP HL JR TEXT1 ; HEX: PUSH AF RRCA RRCA RRCA RRCA CALL HEX1 POP AF HEX1: AND &0F CP &0A JR C,HEX2 ADD A,&07 HEX2: ADD A,48 ; VDU: LD L,A LD H,&00 LD DE,&3C00 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE LD B,&08 HEX3: LD C,(HL) LD A,C RRA OR C LD (IX+0),A DB &DD INC H INC HL DJNZ HEX3 DB &DD LD A,H SUB &08 DB &DD LD H,A DB &DD INC L RET ; ATTRAD: LD A,H RRCA RRCA RRCA AND &03 OR &58 LD H,A RET ; WAIT: NOP DEC BC LD A,B OR C JR NZ,WAIT RET ; MISCNT: DB &00 MIPIX: DB &00 SPEED: DB &00 FLAGS: DB &00 TIMER: DB &00 BAPIX: DB &00 PIXEL: DB &00 PLAYER: DB &00 ALIENS: DB &00 SHOOTS: DB &00 BASE: DB 0,0,0,0,1,128,2,64,2,64,3,192 DB 3,192,3,192,39,228,39,228,47 DB 244,63,252,127,254,127,254,254 DB 127,254,127,62,124,34,68,0,0,0,0 MSLE1: DB 16,56,16,16,16,56,0,0,0 MSLE2: DB 32,4,80,10,32,4,0,0,0,0,0,0,0,0 ALIEN1: DB 0,0,0,0 DB 3,192,14,112,24,24,54,108,38,100 DB 102,102,70,98,70,98,102,102,38 DB 100,54,108,24,24,14,112,3,192 ALIEN2: DB 0,0,0,0 DB 3,192,6,96,12,48,10,80,26,88,18 DB 72,18,72,18,72,18,72,26,88,10,80 DB 12,48,6,96,3,192 ALIEN3: DB 0,0,0,0 DB 1,128,1,128,1,128,3,192,2,64,2 DB 64,2,64,2,64,2,64,2,64,3,192,1 DB 128,1,128,1,128 ALIEN4: DB 0,0,0,0 DB 3,192,6,96,12,48,10,80,26,88,18 DB 72,18,72,18,72,18,72,26,88,10,80 DB 12,48,6,96,3,192 SPACES: DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 SIGHT: DB 0,0,1,128,1,128,1,128,14,112,14 DB 112,1,128,1,128,1,128,0,0 SCINIT: DB 33,33,33,33,33,57,57,57,121,57,57 DB 57,33,33,33,33,33,33 PALETT: DB 97,97,97,97,33,33,33,105,105 DB 41,41,41,41,41,41,41 PLTXT: DW &4002 DB '1UP',0 DW &4021 DB '00000',0 DW &401C DB '2UP',0 DW &403B DB '00000',0 MISXY: DW &0000 BASXY: DW &0000 SCORE: DW &0000 SEED: DW &0000,&0000 GTABLE: DS 75 ATABLE: DS 255 BTABLE: DS &40 ; (* ; ; " Bypasses are devices which allow some people to " ; " dash from point A to point B very fast whilst " ; " other people dash from point B to point A very " ; " fast. People living at point C, being a point " ; " directly in between, are often given to wonder " ; " what's so great about point A that so many people " ; " from point B are keen to get there, and what's so " ; " great about point B that so many people from " ; " point A are keen to get there. " ; ; *) END