;z80 ;zx-spectrum ;assembler ORG #6000 LD HL,#5E00 LD BC,#005F STINT1 LD (HL),C:INC L DJNZ STINT1 INC H:LD (HL),C LD L,H LD (HL),#C3 LD A,#5E:LD I,A:IM 2 LD HL,DINT,(#5F60),HL CALL DPC M00 HALT LD A,(#5C00):CP 192 JR NZ,M00 DI LD HL,INT:LD (#5F60),HL XOR A LD (ALFA),A,(PHS),A LD HL,BUF40,(MPOS),HL LD HL,ASCROLL,(ARSCR),HL CALL WRMC,WRMA M0 EI:HALT:JR NZ,M0 LD HL,FINT:LD (#5F60),HL EI:HALT LD HL,#5800,DE,#5801 LD BC,#02FF,(HL),L:LDIR LD HL,PLAY1,DE,#5D00 LD BC,EPLAY-PLAY1:LDIR EI:RET DINT PUSH AF,HL,DE,BC,IX EXA:PUSH AF LD HL,#5C00 INC (HL) LD A,(HL):CP 144 JR NZ,DINT1 LD A,#57:OUT (#FD) LD HL,#D800,DE,#5800 LD BC,#0300:LDIR DINT1 LD A,#56:OUT (#FD) CALL #C006 LD A,(G):OUT (#FD) POP AF:EXA POP IX,BC,DE,HL,AF EI:RET FINT LD (USP),SP LD IX,FINT1 JP PLAY1 FINT1 LD SP,(USP) RET INT LD (EINT+1),SP INC DE .12 NOP LD IX,PLMUS LD A,(BANKWRM):OUT (#FD) LD SP,(WRMUSP) LD HL,(AROT) JP BUF242 INT1 LD B,TBMUL[ LD SP,BUF224 LD A,#57:OUT (#FD),A JP BUF668 EINT LD SP,0 CALL WRMC CALL SCROLL LD BC,#00FE LD DE,#0700 LD A,(PHS):AND D LD HL,(ARSCR) LD SP,BUF64 JP (HL) SCPRE OUT (C),B LD A,(PHS) RRA:JR NC,SCPRC LD A,0 SCPRC WRMA1 LD A,(BANKWRM):OUT (#FD) LD SP,(WRMUSP1) LD IX,WRM2 JP BUF472 WRM2 LD (WRMUSP),SP LD SP,(EINT+1) LD HL,(MPOS) LD DE,BUF40+36 OR A:SBC HL,DE LD A,0 RET WRMA LD (EINT+1),SP JR WRMA1 WRMC LD A,(ALFA):INC A CP #60:JR NC,WRMC0 JR WRMC1 WRMC0 LD A,0 WRMC1 LD (ALFA),A CP 85:JR NC,WRMC2 LD B,A:LD C,#C0 LD A,BANKR0 JR WRMC3 WRMC2 SUB 85:LD B,A:LD C,#D0 LD A,BANKR1 WRMC3 LD (BANKWRM),A LD H,B,L,0,D,B,E,L .2 SRL D:RR E SBC HL,DE LD A,H:ADD A,C:LD H,A LD (WRMUSP1),HL LD HL,(COUNT) LD DE,(DELTA) INC L:LD A,L CP 5:JR NC,WRMC4 JR WRMC5 WRMC4 LD L,0 WRMC5 CCF:RLA AND 1:ADD A,E:LD E,A INC H:LD A,H CP 3:JR NC,WRMC6 JR WRMC7 WRMC6 LD H,0 WRMC7 CCF:RLA AND 1:ADD A,D:LD D,A LD (COUNT),HL LD A,E CP #60:JR NC,WRMC8 JR WRMC9 WRMC8 LD E,0 WRMC9 LD A,D CP #60:JR NC,WRMC10 JR WRMC11 WRMC10 LD D,0 WRMC11 LD (DELTA),DE LD HL,(MPOS) INC L,L:LD A,(HL) LD H,BUFS96[ LD L,E:ADD A,(HL) LD E,A LD L,D:LD A,(HL) ADD A,#98:LD D,A LD (AROT),DE RET SCROLL LD A,BANKS:OUT (#FD),A LD A,(PHS):INC A LD (PHS),A RRA JR C,SC5 LD HL,(USTR) LD A,(HL):INC HL LD (USTR),HL LD HL,(ARSCR):INC L,HL LD (ARSCR),HL LD DE,30:ADD HL,DE LD DE,#EDC9 LD B,4 SC1 LD (HL),D:INC L RRA:JP C,SC3 LD (HL),#41:INC HL LD (HL),E:INC H LD (HL),E:DEC HL RRA:JP C,SC2 LD (HL),#41:DEC L LD (HL),D:INC H DJNZ SC1 RET SC2 LD (HL),#79:DEC L LD (HL),D:INC H DJNZ SC1 RET SC3 LD (HL),#79:INC HL LD (HL),E:INC H LD (HL),E:DEC HL RRA:JP C,SC4 LD (HL),#41:DEC L LD (HL),D:INC H DJNZ SC1 RET SC4 LD (HL),#79:DEC L LD (HL),D:INC H DJNZ SC1 RET SC5 LD B,43:DJNZ $ NOP:NOP:NOP:NOP RET PLMUS LD IX,INT1 PLAY1 LD A,BANKDPM:OUT (#FD) LD SP,(MPOS) POP HL LD DE,#FFBF LD C,#FD LD A,(HL):OR A LD A,#0D JR Z,PLAY6 PLAY3 LD B,D:OUT (C),A; 13 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 12 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 11 LD B,E:OUTD:DEC A PLAY4 LD B,D:OUT (C),A; 10 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 9 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 8 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 7 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 6 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 5 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 4 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 3 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 2 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 1 LD B,E:OUTD:DEC A LD B,D:OUT (C),A; 0 LD B,E:OUTD POP BC DEC B JR Z,PLAY5 PUSH BC,HL NOP:NOP JP (IX) PLAY5 LD (MPOS),SP RET NZ JP (IX) PLAY6 DEC HL,HL,HL SUB 3 LD B,5 DJNZ $ LD B,0:NOP JR PLAY4 EPLAY ;******************************* DPC CALL DPCGR CALL DPCM CALL DPCSCRL CALL DPCPIC CALL DPCTBL RET DPCSCRL LD A,BANKS LD (G),A:OUT (#FD),A LD H,ASCROLL[ LD DE,#ED41 LD C,8 DPS3 LD L,0 LD B,16 DPS4 LD (HL),D:INC L LD (HL),E:INC L DJNZ DPS4 LD (HL),#C9 INC H LD A,C:CP 5:JR NZ,DPS4A LD E,#41 DPS4A DEC C:JR NZ,DPS3 LD HL,STR EXX _LD DE,ASCROLL+2048+FRAMES*2 LD (USTR),DE LD A,#00,B,94 DPS5B LD (DE),A:INC DE DJNZ DPS5B DPS5 EXX LD A,(HL):INC HL EXX SUB #20:JR C,DPS6 ADD A,A,A,A LD HL,FONT ADD A,L:LD L,A JR NC,DPS5A INC H DPS5A LDI:LDI:LDI:LDI JR DPS5 DPS6 RET DPCGR LD A,#57,(G),A:OUT (#FD) LD HL,#5800:CALL FILLA LD HL,#D800:CALL FILLA LD HL,#C000:PUSH HL LD BC,#180F DPK1 LD (HL),C:INC L:DJNZ DPK1 POP HL:LD DE,#C020 LD BC,#1800-32:LDIR LD HL,GRAPH,DE,#C018 LD IX,#C018:LD B,0 DPK2 PUSH DE LD C,8:LDIR POP DE INC D:LD A,D:AND 7 JR NZ,DPK3 LD A,E:ADD A,#20:LD E,A JR C,DPK3 LD A,D:SUB 8:LD D,A DPK3 DEC HX:JR NZ,DPK2 LD DE,#D818 DPK4 LD C,8:LDIR LD A,E:ADD A,#18:LD E,A JR NC,DPK5:INC D DPK5 DEC LX:JR NZ,DPK4 LD HL,#C000,DE,#4000 LD BC,#1800:LDIR RET DPCPIC LD A,#50,(G),A:OUT (#FD) LD DE,BUFDGR PUSH DE LD HL,DPGP1 LD BC,3:LDIR PUSH DE LD BC,8:LDIR EX (SP),HL LD BC,8*15:LDIR POP HL LD BC,10:LDIR LD HL,TBMUL XOR A:LD C,32,D,7 DPG1 LD B,8 DPG2 LD (HL),A:INC L DJNZ DPG2 INC A:AND D DEC C:JR NZ,DPG1 LD DE,EPIC EXX LD C,80,HL,DPG3 POP IX LD (DPG3+1),SP LD SP,#C000 JP (IX) DPG3 LD SP,0 RET DPCTBL LD HL,BUF668 LD IX,BUF12 XOR A LD (HL),A:INC HL LD (HL),A:INC HL LD (HL),#E1:INC HL LD (HL),#D1:INC HL CALL DPCP0 CALL DPCP1 LD (HL),#E1:INC HL LD (HL),#D1:INC HL CALL DPCP0 LD (HL),#3E:INC HL LD (HL),#5F:INC HL LD (HL),#D3:INC HL LD (HL),#FD:INC HL EX DE,HL LD HL,PRWT LD BC,EPRWT-PRWT LDIR EX DE,HL CALL DPCP1 LD (HL),#E1:INC HL LD (HL),#D1:INC HL CALL DPCP0 CALL DPCP1 LD (HL),#3E:INC HL LD (HL),#57:INC HL LD (HL),#D3:INC HL LD (HL),#FD:INC HL LD (HL),#C9 LD HL,TBMUL LD BC,#3808 XOR A DPC2 AND B:LD (HL),A ADD A,C:INC L:JR NZ,DPC2 LD HL,BUF224 LD DE,#5800 LD A,16 LD C,0 DPC3 EXA LD B,3 DPC4 LD (HL),0:INC HL LD (HL),0:INC HL RES 7,D LD A,C:INC A BIT 1,A:JR Z,DPC5 SET 7,D DPC5 LD (HL),E:INC HL LD (HL),D:INC HL RRA:JR C,DPC6 LD A,E:ADD A,#20:LD E,A JR NC,DPC6 INC D DPC6 INC C:DJNZ DPC4 LD (HL),BUF668]:INC HL LD (HL),BUF668[:INC HL EXA DEC A:JR NZ,DPC3 DEC HL,HL LD (HL),EINT]:INC HL LD (HL),EINT[:INC HL LD IY,BUF472 LD IX,BUF12 LD A,24:CALL DPCP2 LD IX,BUF12+2 LD A,23:CALL DPCP2 LD (IY+0),#DD LD (IY+1),#E9 LD HL,BUF242 LD DE,BUF224 LD C,16 DPC7 LD B,3 DPC8 LD (HL),#D1:INC HL LD (HL),#19:INC HL LD (HL),#22:INC HL LD (HL),E:INC HL LD (HL),D:INC HL INC DE,DE,DE,DE DJNZ DPC8 INC DE,DE DEC C:JR NZ,DPC7 LD (HL),#DD:INC HL LD (HL),#E9:INC HL LD C,0 DPC9 LD A,C:OR A LD B,#C0 LD A,BANKR0:JR Z,DPC10 LD A,C:CP 85:JR NZ,DPC11 LD A,BANKR1 LD B,#D0 DPC10 LD (G),A:OUT (#FD),A LD HY,B,LY,0 DPC11 PUSH IY,BC CALL DPF1 POP BC,IY LD DE,192:ADD IY,DE INC C:LD A,C CP 96:JR NZ,DPC9 DPS LD HL,BUF64 LD DE,SCPR0 LD C,8 DPS1 LD B,3 DPS2 LD (HL),E:INC HL LD (HL),D:INC HL DJNZ DPS2 LD (HL),SCPR1]:INC HL LD (HL),SCPR1[:INC HL DEC C:JR NZ,DPS1 DEC HL,HL LD (HL),SCPRE]:INC HL LD (HL),SCPRE[:INC HL LD HL,BUFS96 LD DE,BUFS96+48 EXX LD HL,SIN+1 LD DE,2 LD C,2 DPT1 LD B,24 DPT2 LD A,(HL):ADD HL,DE PUSH HL,DE LD L,A,H,0 ADD HL,HL LD DE,HL ADD HL,HL:ADD HL,DE LD A,H EXX LD (HL),A:INC HL NEG LD (DE),A:INC DE EXX POP DE,HL DJNZ DPT2 LD DE,-2 DEC C:JR NZ,DPT1 RET DPCM LD A,BANKSM LD (G),A:OUT (#FD),A LD HL,#C000 LD DE,#C000-MLEN LD BC,MLEN PUSH HL,DE,BC:LDIR LD A,BANKDM LD (G),A:OUT (#FD),A POP BC,HL,DE:LDIR DPCMD LD A,BANKDM LD (G),A:OUT (#FD),A ; LD HL,LMUS,DE,MUS ; LD BC,ELMUS-LMUS ; LDIR LD HL,MUS+#051B LD (HL),#C3:INC HL LD (HL),WR]:INC HL LD (HL),WR[ LD HL,MUS+#025F LD (HL),#CD:INC HL LD (HL),WR1]:INC HL LD (HL),WR1[ LD HL,MUS+#032F LD (HL),#CD:INC HL LD (HL),WR2]:INC HL LD (HL),WR2[ LD A,#C9 LD (MUS+#033C),A LD (MUS+#0341),A LD HL,#0100,(MPOS),HL HALT:CALL MUS,MUS+6 LD HL,#BFFF,(MPOS),HL PUSH HL LD HL,BUF40,IY,TBPAT LD B,#05 DPM2 LD A,#FF:LD R,A LD DE,(MPOS) PUSH DE,HL LD C,0 DPM2A PUSH BC:CALL MUS+6 POP BC:INC C LD A,R:RLA:JR C,DPM2A LD A,C:CP #BF JR NZ,DPM2C LD C,#C0 DPM2C POP HL,DE:SET 6,D LD A,(IY):INC IY DPM2B LD (HL),E:INC HL LD (HL),D:INC HL EXA LD A,(IY):INC IY LD (HL),A:INC HL EXA LD (HL),C:INC HL DEC A:JR NZ,DPM2B DJNZ DPM2 LD A,BANKDPM LD (G),A:OUT (#FD) POP HL:LD DE,(MPOS) OR A:SBC HL,DE:LD BC,HL ADD HL,DE:LD DE,#FFFF LDDR RET WR LD DE,(MPOS),BC,14 LDDR:LD (MPOS),DE XOR A LD (MUS+#0233),A LD (MUS+#0239),A RET WR1 PUSH HL LD HL,TBRUN LD (MUS+#031C),HL POP HL:RET WR2 ADD HL,BC:EX DE,HL POP HL LD C,(HL):INC HL LD B,(HL) LD A,(DE):INC DE:LD L,A LD A,(DE):INC DE:LD H,A ADD HL,BC PUSH HL LD A,(DE):INC DE:LD L,A LD A,(DE):INC DE:LD H,A ADD HL,BC:CALL MUS+#0339 LD A,(DE):INC DE:LD L,A LD A,(DE):LD H,A ADD HL,BC:CALL MUS+#033E POP DE XOR A:LD R,A:LD B,A RET DPF1 LD A,C LD DE,#2C24 LD BC,#FF01 CP #18:JR C,DPF2 CP #48:JR NC,DPF2 INC D:LD C,#FF DPF2 CP #30:JR C,DPF3 INC E:LD B,#01 DPF3 EXX LD E,0 DPF3A CP #18:JR C,DPF3B SUB #18:INC E:JR DPF3A DPF3B LD D,A BIT 0,E:JR Z,DPF4 NEG:ADD A,24 DPF4 LD HL,SIN ADD A,A:ADD A,L:LD L,A JR NC,$+3:INC H LD C,(HL):INC HL:LD B,(HL) LD A,D BIT 0,E:JR NZ,DPF5 NEG:ADD A,24 DPF5 LD HL,SIN ADD A,A:ADD A,L:LD L,A JR NC,$+3:INC H LD E,(HL):INC HL:LD D,(HL) PUSH DE,BC EX DE,HL:XOR A .3 ADD HL,HL:RLA LD DE,HL,B,A ADD HL,HL:RLA ADD HL,DE:ADC A,B LD B,A:EX DE,HL LD HL,#8000:XOR A SBC HL,DE:SBC A,B EX (SP),HL:PUSH HL LD (IY+95),A XOR A .3 ADD HL,HL:RLA LD DE,HL,B,A ADD HL,HL:RLA ADD HL,DE:ADC A,B LD B,A:EX DE,HL LD HL,#8000:XOR A SBC HL,DE:SBC A,B PUSH HL POP IX,BC,HL,DE EXX DPF7 LD L,A LD H,(IY+95) LD A,H BIT 7,C:JR Z,DPF7A NEG DPF7A LD (IY+95),A LD A,L BIT 0,E:JR Z,DPF7B NEG DPF7B ADD A,(IY+95) LD (IY+95),A LD A,H BIT 0,D:JR Z,DPF7C NEG DPF7C LD H,A LD A,L BIT 7,B:JR Z,DPF7D NEG DPF7D ADD A,H CALL P,DPF8 DEC (IY+95) DPF8 LD (IY+94),A LD A,47 DPF9 EXA XOR A:LD H,A EXX:ADD HL,DE:EXX JR NC,DPF10 LD H,D:LD A,C DPF10 LD (IY+0),H LD HL,0 EXX:ADD IX,BC:EXX JR NC,DPF11 LD H,E:LD L,B BIT 7,B:JR Z,DPF11 DEC A DPF11 LD (IY+1),H LD (IY+96),L LD (IY+97),A INC IY,IY EXA:DEC A:JR NZ,DPF9 RET DPCP0 PUSH HL LD (IX),L:INC IX LD (IX),H:INC IX EX DE,HL LD HL,PRR0 LD BC,EPRR0-PRR0 LDIR POP HL LD BC,(EPRR0-PRR0)*11 LDIR EX DE,HL RET DPCP1 CALL DPCP0 DEC HL,HL,HL,HL LD (HL),#12:INC HL RET DPCP2 LD C,(IX+0),B,(IX+1) LD E,(IX+4),D,(IX+5) LD L,(IX+8),H,(IX+9) DPCP3 INC BC,DE,HL CALL DPCP4:RET Z CALL DPCP4:JR NZ,DPCP3 RET DPCP4 LD (IY+0),#E1 _LD (IY+1),#22,(IY+2),C,(IY+3),B _LD (IY+4),#22,(IY+5),E,(IY+6),D _LD (IY+7),#22,(IY+8),L,(IY+9),H PUSH BC LD BC,10:ADD IY,BC LD C,4:ADD HL,BC EX DE,HL:ADD HL,BC:EX DE,HL POP BC INC BC,BC,BC,BC DEC A RET PRR0 LD C,(HL) NOP:NOP LD A,(BC) OR (HL) NOP:NOP LD (DE),A INC E EPRR0 PRWT LD A,0:OUT (#FE),A LD A,0:OUT (#FE),A LD A,0 LD A,0 EPRWT DPGP1 LD B,8:EXX DEC DE:LD A,(DE) LD L,A:LD B,(HL) AND 7:LD C,A PUSH BC EXX DEC B:JP NZ,BUFDGR+2 DEC C:JP NZ,BUFDGR JP (HL) SCPR0 JP SCPR2 SCPR1 INC DE:INC H SCPR2 INC A:AND D:JP (HL) FILLA LD D,H,E,L,(HL),L:INC DE LD BC,#02FF:LDIR:RET STR _DB " CODE BUSTERS RUSH VAV " _DB "PROGRESS XL-DESIGN " _DB "RPSG STALKER " _DB "VIRTUAL BROTHERS " _DB "DIGITAL REALITY " _DB "COBRA FLASH KSA " _DB "BITMUNCHERS COPPER FEET " _DB "K3L JORDAN BUSY NORO " _DB "ETC..... " _DB #FF TBRUN DB 3,25,23,4,22,22 TBPAT DB 2,#2A,#2A,2,#2A,#2A DB 1,#7E DB 4,#D2,#D2,#D2,#D2 DB 1,#D2 SIN INCB "SIN24"; 48 DW #FFFF FONT INCB "BFONT"; 236 PIC INCB "PICTURES"; 10240 EPIC GRAPH INCB "GRAPHICS"; 1728 LMUS INCB "M.EXE" ELMUS MLEN EQU ELMUS-LMUS ECODE TBMUL EQU #5D00; 256 GOOD BUFS96 EQU #5B00; 96 GOOD BUF64 EQU BUFS96+96 BUF12 EQU BUF64+64 BUF40 EQU BUF12+12 BUF14 EQU BUF40+40 ELOWB EQU BUF14+14 ALFA EQU #5F01 BANKWRM EQU ALFA+1 PHS EQU BANKWRM+1 USP EQU PHS+1 IUSP EQU USP+2 WRMUSP EQU IUSP+2 WRMUSP1 EQU WRMUSP+2 USTR EQU WRMUSP1+2 ARSCR EQU USTR+2 AROT EQU ARSCR+2 DELTA EQU AROT+2 COUNT EQU DELTA+2 EVAR EQU COUNT+2 MPOS EQU #5C01 BUFDGR EQU #5B00 G EQU #5BFF BUF668 EQU FONT BUF472 EQU BUF668+668 BUF224 EQU BUF472+472 BUF242 EQU BUF224+224 EBUFS EQU BUF242+242 MUS EQU #C000 BANKR0 EQU #51 BANKR1 EQU #50 BANKS EQU BANKR1 BANKSM EQU #56; SOURCE BANKDM EQU #50; DEST BANKDPM EQU #53; FOR DEPACK ASCROLL EQU #D900; GOOD FRAMES EQU 1632+100