;z80 ;assembler ;zx-spectrum SELECT EI HALT HALT HALT HALT HALT LD A,#F7 IN A,(#FE) RRA JP NC,CONTROL RRA JR NC,MUS_ON RRA JR NC,INSTR RRA RET NC SLCT LD A,100 DEC A JP Z,HISCOR LD (SLCT+1),A JR SELECT INSTR LD A,100 LD (SLCT+1),A CALL STIR CALL INT_OFF CALL CLS_SCR LD A,17 CALL PAGE CALL 53825 LD A,16 CALL PAGE POP HL JP START2 PAGE LD BC,32765 OUT (C),A LD (INT3+1),A RET MUS_ON LD A,(MUS+1) XOR 1 LD (MUS+1),A LD HL,NP JR NZ,MUS_ON1 LD HL,YP MUS_ON1 LD DE,TXT2+13 LD BC,3 LDIR CALL POSSY JR CNT_1 CONT LD HL,TEXT CALL IN_SP LD HL,TXT1 CALL IN_SP LD HL,TXT2 CALL IN_SP LD HL,TXT3 CALL IN_SP LD HL,TXT4 CALL IN_SP CNT_1 LD A,100 LD (SLCT+1),A JP SELECT KLAVS LD HL,TAB_S2 CALL KLAV+3 LD D,C CALL KLAV LD A,C AND D LD C,A RET KLAV LD HL,TAB_S1 LD BC,#0500 KLAV3 LD A,(HL) INC HL IN A,(#FE) AND (HL) INC HL JR Z,KLAV1 KLAV2 SET 0,C KLAV1 LD A,(KLAV2+1) ADD A,8 LD (KLAV2+1),A DJNZ KLAV3 LD A,#C1 LD (KLAV2+1),A RET KEMPST XOR A ;KEMPSTON IN A,(#1F) CPL RRA RL B RRA RL C RRA RL B RRA RL C RR B RLA RR C RLA RR B RLA RR C RLA AND 31 LD C,A RET CLS1 LD HL,#5900 LD (STT+1),HL LD HL,512 LD (STT1+1),HL CALL STIR LD HL,768 LD (STT1+1),HL LD HL,#5800 LD (STT+1),HL LD HL,18432 LD DE,18433 LD BC,4095 LD (HL),L LDIR LD HL,#5900 LD DE,#5901 LD BC,511 LD (HL),4 LDIR RET CONTROL CALL CLS1 CALL WIW_C CONTR1 EI HALT HALT HALT HALT HALT LD A,#F7 IN A,(#FE) RRA JR NC,N_KEY RRA JR NC,N_SIN1 RRA JR NC,N_KEM RRA JR NC,MOUSE RRA JR NC,N_CUR LD A,#EF IN A,(#FE) BIT 4,A JP Z,RED_K JR CONTR1 N_KEY LD HL,TABLE_K EX_MEN1 LD (KLAV+1),HL LD HL,KLAV JR KLAVA N_SIN1 LD HL,TAB_S1 LD (KLAV+1),HL LD HL,KLAVS JR KLAVA N_CUR LD HL,TAB_CUR JR EX_MEN1 N_KEM LD B,0 XOR A IN A,(#1F) AND 224 JR NZ,NO_KEM DJNZ N_KEM+2 LD HL,KEMPST KLAVA LD (KEYS+1),HL JR EX_MEN MOUSE JR N_SIN1 NO_KEM LD B,16 NO_KEM2 EI HALT LD HL,#5620 PUSH BC CALL SCR_UP POP BC DJNZ NO_KEM2 LD HL,TEXT2 CALL PR_RED LD A,%11000010 CALL CLC LD B,100 NO_KEM1 EI HALT DJNZ NO_KEM1 LD A,4 CALL CLC LD HL,TEXT1+64 LD DE,#5000 CALL PR_RED2 JP CONTR1 EX_MEN CALL CLS1 JP CONT CLC LD HL,#5A04 PUSH HL CALL CLC2 POP HL LD DE,32 ADD HL,DE CLC2 LD B,22 CLC1 LD (HL),A INC L DJNZ CLC1 RET RED_K LD HL,#4894 LD (K_TXT),HL CALL CLS1 LD HL,TABLE_K LD DE,TABLE_K+1 LD BC,9 LD (HL),B LDIR LD HL,TEXT4 CALL PR_RED LD IX,TABLE_K LD HL,L_TXT CALL R_KEY LD HL,R_TXT CALL R_KEY LD HL,U_TXT CALL R_KEY LD HL,D_TXT CALL R_KEY LD HL,F_TXT CALL R_KEY JP N_KEY R_KEY CALL PR_RED R_KEY1 HALT HALT HALT HALT HALT CALL REDKEYS JR Z,R_KEY1 LD A,128 CHECK3 RLCA RR C JR NC,CHECK3 LD C,A LD IX,TABLE_K CHECK5 LD A,(IX+0) CP B JR NZ,CHECK LD A,(IX+1) CP C JR NZ,CHECK JR R_KEY1 CHECK LD A,(IX+0) OR A JR Z,CHECK2 LD A,(IX+1) JR Z,CHECK2 INC IX INC IX JR CHECK5 CHECK2 LD (IX+0),B LD (IX+1),C CHECK4 RRC C INC HL INC HL JR NC,CHECK4 LD DE,K_TXT+2 LDI LDI LD HL,K_TXT CALL PR_KEY LD HL,(K_TXT) LD B,#10 FUJI CALL DPIX_HL DJNZ FUJI LD (K_TXT),HL LD A,128 LD (CHECK3-1),A RET REDKEYS LD HL,TAB1-2 LD DE,10 LD BC,#7FFE KEYCK1 IN A,(C) CPL AND 31 JR NZ,KEYPRD ADD HL,DE RRC B JR C,KEYCK1 OR A RET KEYPRD LD C,A RET ;---------------------------------- HISCOR CALL STIR LD HL,16384 LD DE,16385 LD BC,6144 LD (HL),L LDIR LD BC,767 LD (HL),7 LDIR XOR A LD (HIS+1),A LD (SCROL+1),A CALL HIS LD HL,500 HIS1 EI HALT DEC HL XOR A ;NZ-esli klawia navata IN A,(254) CPL AND 31 JR NZ,HIS2 LD A,H OR L JR NZ,HIS1 CALL STIR LD HL,16384 LD DE,16385 LD BC,6911 LD (HL),L LDIR LD A,20 CALL PAGE LD HL,ZAST CALL DECOM LD A,16 CALL PAGE CALL LIEW LD HL,500 HIS3 EI HALT DEC HL XOR A ;NZ-esli klawia navata IN A,(254) CPL AND 31 JR NZ,HIS2 LD A,H OR L JR NZ,HIS3 HIS2 CALL STIR LD HL,SCREEN CALL DECOM CALL LIEW JP CONT HIS LD A,0 EI HALT OR A RET NZ JR HIS SCROLL JP SCROL1 SCROL1 LD A,17 DEC A JR Z,SCROL2 LD (SCROL1+1),A SLOP1 LD HL,(SCROL4+1) DEC HL DEC HL LD (SCROL4+1),HL LD HL,(SCROL3+1) CALL SCR_DN SLOP LD HL,H_S LD B,16 SCROL5 LD A,(HL) SUB 32 ADD A,A EXX LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SCROL4 LD DE,FONT1+32 ADD HL,DE SCROL3 LD DE,#4000 LD A,(HL) LD (DE),A INC HL INC E LD A,(HL) LD (DE),A INC E LD (SCROL3+1),DE EXX INC HL DJNZ SCROL5 STP_0 LD HL,#4000 LD (SCROL3+1),HL RET SCROL2 LD HL,FONT1+32 LD (SCROL4+1),HL LD A,17 LD (SCROL1+1),A LD HL,SCROL6 LD (SCROLL+1),HL RET SCROL6 LD A,17 DEC A JR Z,SCROL7 LD (SCROL6+1),A SLP LD HL,(SCROL9+1) INC HL INC HL LD (SCROL9+1),HL LD HL,(SCROL10+1) CALL SCR_UP SCROL13 LD HL,HI_TAB LD B,16 SCROL8 LD A,(HL) SUB 32 ADD A,A EXX LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL SCROL9 LD DE,FONT1-2 ADD HL,DE SCROL10 LD DE,#47A0 LD A,(HL) LD (DE),A INC HL INC E LD A,(HL) LD (DE),A INC E LD (SCROL10+1),DE EXX INC HL DJNZ SCROL8 SCROL15 LD HL,#47A0 LD (SCROL10+1),HL RET SCROL7 LD A,10 DEC A JR Z,SCROL11 LD (SCROL7+1),A LD HL,(SCROL13+1) LD DE,16 ADD HL,DE LD (SCROL13+1),HL SCROL14 LD A,17 LD (SCROL6+1),A LD HL,FONT1-2 LD (SCROL9+1),HL LD HL,(SCROL10+1) LD B,16 SCROL12 CALL DPIX_HL DJNZ SCROL12 LD (SCROL10+1),HL LD (SCROL15+1),HL RET SCROL11 CALL SCROL14 LD HL,HI_TAB LD (SCROL13+1),HL LD A,10 LD (SCROL7+1),A LD (HIS+1),A LD (SCROL+1),A LD HL,SCROL1 LD (SCROLL+1),HL LD HL,#47A0 LD (SCROL10+1),HL LD (SCROL15+1),HL RET SCR_DN LD B,14 SCR_DN1 CALL DPIX_HL DJNZ SCR_DN1 PUSH HL CALL DPIX_HL POP DE EX DE,HL LD B,16 SCR_DN3 PUSH HL LD C,32 SCR_DN2 LD A,(HL) LD (DE),A INC L INC E DEC C JR NZ,SCR_DN2 POP HL LD D,H LD E,L CALL UPIX_HL DJNZ SCR_DN3 RET SCR_UP LD B,14 SCR_UP1 CALL UPIX_HL DJNZ SCR_UP1 PUSH HL CALL UPIX_HL POP DE EX DE,HL LD B,16 SCR_UP3 PUSH HL LD C,32 SCR_UP2 LD A,(HL) LD (DE),A INC L INC E DEC C JR NZ,SCR_UP2 POP HL LD D,H LD E,L CALL DPIX_HL DJNZ SCR_UP3 RET STIR LD B,8 STIR2 PUSH BC STT LD HL,22528 STT1 LD BC,768 STIR1 LD A,(HL) AND 7 JR Z,STIR_E DEC A LD (HL),A STIR_E INC HL DEC BC LD A,B OR C JR NZ,STIR1 EI HALT HALT HALT HALT HALT POP BC DJNZ STIR2 RET LIEW LD B,8 LIEW2 PUSH BC LD DE,#6000 LD HL,22528 LD BC,768 CALL LIEW4 EX DE,HL LIEW1 LD A,(DE) CP (HL) JR Z,LIEW_E INC A LD (DE),A LIEW_E INC HL INC DE DEC BC LD A,B OR C JR NZ,LIEW1 EI HALT HALT HALT HALT HALT POP BC DJNZ LIEW2 LD A,#E5 LD (LIEW4),A RET LIEW4 PUSH HL PUSH DE PUSH BC LIEW5 LD A,(DE) AND 248 LD (HL),A INC DE INC HL DEC BC LD A,B OR C JR NZ,LIEW5 POP BC POP DE POP HL LD A,#C9 LD (LIEW4),A RET WWOD_HI LD HL,(S_YA2+1) CALL CONVER LD HL,HI_TAB+13 LD (WWOD3+1),HL LD B,10 WWOD4 PUSH BC LD DE,SCORE LD A,(DE) CP (HL) JR C,WWOD1 JR Z,WWOD2 JR WWOD3 WWOD1 LD BC,16 WWOD7 ADD HL,BC LD (WWOD3+1),HL POP BC DJNZ WWOD4 CALL STIR RET WWOD2 INC DE INC HL LD A,(DE) CP (HL) JR C,WWOD5 JR Z,WWOD6 JR WWOD3 WWOD5 LD BC,15 JR WWOD7 WWOD6 INC DE INC HL LD A,(DE) CP (HL) JR C,WWOD8 JR Z,WWOD8 JR WWOD3 WWOD8 LD BC,14 JR WWOD7 WWOD3 LD HL,0 POP DE PUSH HL LD DE,14 OR A SBC HL,DE PUSH HL EX DE,HL LD HL,HI_TAB+143 OR A SBC HL,DE LD A,H OR L JR Z,WWOD11 PUSH HL POP BC LD DE,HI_TAB+159 LD HL,HI_TAB+143 LDDR WWOD11 POP HL POP DE PUSH HL LD HL,SCORE LD BC,3 LDIR POP HL INC HL PUSH HL LD B,12 WWOD9 LD (HL),#20 INC HL DJNZ WWOD9 XOR A LD (FLAG+1),A CALL STIR LD HL,16384 LD DE,16385 LD BC,6144 LD (HL),L LDIR LD BC,767 LD (HL),7 LDIR LD A,6 CALL INIT_M XOR A LD (HIS+1),A LD (SCROL+1),A CALL HIS POP HL PUSH HL LD IX,HI_TAB LD DE,16 LD B,0 CHK_C LD A,H CP HX JR NZ,CHK_A LD A,L CP LX JR Z,CHK_B CHK_A SBC HL,DE INC B JR CHK_C CHK_B LD HL,#4080 LD A,B OR A JR Z,CHK_D ADD A,A ADD A,A ADD A,A ADD A,A LD B,A CHK_E CALL DPIX_HL DJNZ CHK_E CHK_D LD (A_PRN+1),HL LD (A_PRN3+1),HL POP HL LD (A_PRN1+1),HL ;----------------------------------- ;wwod HI-SCORE ;----------------------------------- LD B,12 CALL KEY_W LD B,16 SRUP EI HALT LD HL,#4720 PUSH BC CALL SCR_UP POP BC DJNZ SRUP LD HL,SAV_TXT LD (SLOP+1),HL LD B,16 SLOP2 EI HALT LD DE,1000 SLOP4 DEC DE LD A,D OR E JR NZ,SLOP4 PUSH BC CALL SLOP1 POP BC DJNZ SLOP2 LD HL,FONT1+32 LD (SCROL4+1),HL LD HL,H_S LD (SLOP+1),HL SLOP3 EI HALT LD A,#DF IN A,(#FE) BIT 4,A JR Z,Y_SAV LD A,#7F IN A,(#FE) BIT 3,A JR NZ,SLOP3 N_SAV CALL STIR XOR A LD (FLAG+1),A LD A,100 LD (SLCT+1),A RET Y_SAV CALL INT_OFF CALL XORKA DI LD HL,HI_TAB LD D,159 LD E,0 LD BC,#0106 XOR A LD (23824),A CALL 15635 CALL ANTI_X1 JR N_SAV KEY_W INC B LD C,B KEY2 CALL KEY1 CP 12 JR NZ,KEY4 LD A,B CP C JR Z,KEY8 DEC HL INC B KEY8 LD (HL),#20 CALL KEY_P JR KEY2 KEY4 CP 13 JR Z,KEY5 DEC B JR NZ,KEY6 INC B JR KEY2 KEY6 INC B LD (HL),A CALL KEY_P INC HL DJNZ KEY2 KEY5 LD A,C SUB B DEC C CP C JR Z,KEY_P DEC B KEY7 LD (HL),#20 INC HL DJNZ KEY7 KEY_P PUSH HL PUSH BC A_PRN1 LD HL,0 LD B,13 A_PRN4 PUSH BC LD A,(HL) SUB 32 ADD A,A EXX LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD DE,FONT1 ADD HL,DE A_PRN LD DE,0 LD B,16 A_PRN2 PUSH DE LD A,(HL) LD (DE),A INC HL INC E LD A,(HL) LD (DE),A INC HL POP DE CALL DPIX_DE DJNZ A_PRN2 LD HL,(A_PRN+1) INC L INC L LD (A_PRN+1),HL EXX INC HL POP BC DJNZ A_PRN4 A_PRN3 LD HL,0 LD (A_PRN+1),HL POP BC POP HL RET ;--------------------------------------------- ; opros klawy ;---------------------------------------------- KEY1 EI HALT HALT HALT HALT PUSH HL,BC CALL CURSOL CALL INP_NAM OR A JR NZ,KEY0 POP BC,HL JR KEY1 KEY0 BIT 7,A JR Z,KEY3 LD A,12 POP BC,HL RET KEY3 LD B,5 INC HL RRCA JR C,KEY9 DJNZ KEY3+2 KEY9 LD A,(HL) POP BC,HL RET ;----------------------------------- ;skanirowanie klawy ;----------------------------------- INP_NAM LD BC,#FEFE IN A,(C) RRCA JR C,INP4 LD B,#F7 IN A,(C) RRCA RRCA JR C,INP1 LD A,(INP3+1) CPL LD (INP3+1),A XOR A RET INP1 LD B,#EF IN A,(C) RRCA JR C,INP9 XOR A SET 7,A RET INP9 XOR A RET INP4 LD HL,TAB_SE-1 LD B,#7F IN A,(C) RRCA RRCA JR NC,INP2 INP3 LD A,0 LD HL,TAB_ENG-1 OR A JR Z,INP2 LD HL,TAB_RUS-1 INP2 LD DE,5 LD B,#7F INP5 IN A,(C) CPL AND 31 JR NZ,INP6 INP8 ADD HL,DE RRC B JR C,INP5 XOR A RET INP6 PUSH AF LD A,B CP #7F JR Z,INP7 POP AF RET INP7 POP AF BIT 1,A RET Z RES 1,A AND 31 RET NZ JR INP8 ;----------------------------------- ;wwod HI-SCORE ;----------------------------------- ;------------------------------------ ; wywod kursora ;------------------------------------ CURSOL LD A,B CPL ADD A,14 LD HL,(A_PRN3+1) OR A JR Z,CURSOR1 LD B,A CURSOR2 INC L INC L DJNZ CURSOR2 CURSOR1 EX DE,HL NUMB_SP LD A,0 INC A CP 16 JR C,CURSOR3 XOR A CURSOR3 LD (NUMB_SP+1),A ADD A,A LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD BC,CURS_SP ADD HL,BC LD B,16 CURSOR4 PUSH DE LD A,(HL) LD (DE),A INC HL INC E LD A,(HL) LD (DE),A INC HL POP DE CALL DPIX_DE DJNZ CURSOR4 RET XORKA CALL CHECK_K LD A,C LD (HI_TAB+160),A LD HL,HI_TAB DI XOR A LD R,A LD B,#A1 XORKA1 LD A,R XOR B XOR (HL) LD (HL),A INC HL DJNZ XORKA1 EI RET ANTI_X1 LD HL,HI_TAB DI XOR A LD R,A LD B,#A1 ANTI_X2 LD A,R XOR B XOR (HL) LD (HL),A INC HL DJNZ ANTI_X2 EI CALL CHECK_K LD A,(HI_TAB+160) CP C RET Z LD HL,SCORE_N LD DE,HI_TAB LD BC,161 LDIR JR ANTI_X1 CHECK_K LD HL,HI_TAB XOR A LD B,160 CHK_K1 ADD A,(HL) INC HL DJNZ CHK_K1 LD C,A RET POSSY LD HL,TXT2+1 POSSY4 LD B,16 POSSY3 LD A,(HL) SUB 32 EXX ADD A,A LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD DE,FONT1 ADD HL,DE POSSY2 LD DE,#48C0 LD B,16 POSSY1 PUSH DE LD A,(HL) LD (DE),A INC HL INC E LD A,(HL) LD (DE),A INC HL POP DE CALL DPIX_DE DJNZ POSSY1 LD HL,POSSY2+1 INC (HL) INC (HL) EXX INC HL DJNZ POSSY3 LD HL,#48C0 LD (POSSY2+1),HL RET PR_KEY LD E,(HL) INC HL LD D,(HL) INC HL LD (POSSY+1),HL LD (POSSY2+1),DE LD A,2 LD (POSSY4+1),A CALL POSSY LD HL,#48C0 LD (POSSY2+1),HL LD HL,TXT2+1 LD (POSSY+1),HL LD A,16 LD (POSSY4+1),A RET WIW_C LD HL,TEXT1 LD (SLOP+1),HL LD HL,#4800 LD (SCROL3+1),HL LD (STP_0+1),HL LD B,16 LLOP2 EI HALT PUSH BC CALL SLOP1 POP BC DJNZ LLOP2 LD HL,FONT1+32 LD (SCROL4+1),HL LD HL,H_S LD (SLOP+1),HL LD HL,#4000 LD (SCROL3+1),HL LD (STP_0+1),HL LD HL,TEXT1+16 LD (SCROL13+1),HL LD HL,#4F60 LD (SCROL10+1),HL LD (SCROL15+1),HL LD A,6 FLOP3 PUSH AF LD B,16 FLOP2 EI HALT PUSH BC CALL SLP POP BC DJNZ FLOP2 LD HL,(SCROL13+1) LD DE,16 ADD HL,DE LD (SCROL13+1),HL LD HL,FONT1-2 LD (SCROL9+1),HL LD HL,(SCROL10+1) LD B,16 FCROL12 CALL DPIX_HL DJNZ FCROL12 LD (SCROL10+1),HL LD (SCROL15+1),HL POP AF DEC A JR NZ,FLOP3 LD HL,HI_TAB LD (SCROL13+1),HL LD HL,#47A0 LD (SCROL10+1),HL LD (SCROL15+1),HL RET PR_RED LD E,(HL) INC HL LD D,(HL) INC HL PR_RED2 LD (SLOP+1),HL LD (SCROL3+1),DE LD (STP_0+1),DE LD B,16 PR_RED1 EI HALT PUSH BC CALL SLOP1 POP BC DJNZ PR_RED1 LD HL,FONT1+32 LD (SCROL4+1),HL LD HL,H_S LD (SLOP+1),HL LD HL,#4000 LD (SCROL3+1),HL LD (STP_0+1),HL RET CONVER LD DE,SCORE LD BC,100 CALL CONVER1 LD BC,10 CALL CONVER1 LD A,L ADD A,48 LD (DE),A RET CONVER1 XOR A CONVER3 OR A SBC HL,BC JR C,CONVER2 INC A JR CONVER3 CONVER2 ADD HL,BC ADD A,48 LD (DE),A INC DE RET MSU LD HL,(COORDX) LD A,H CALL SCHET CP 21 RET C CP 23 RET NC LD A,L CALL SCHET CP 30 RET NC CP 10 JR C,MUSAX CP 20 JR C,POS CP 30 JR C,PCCC POP HL RET MUSAX LD A,(MUS+1) XOR 1 LD (MUS+1),A LD HL,NP JR NZ,LUS_ON1 LD HL,YP LUS_ON1 LD DE,TXT2+13 LD BC,3 LDIR MUSAX1 LD A,10 LD (KEY+1),A POP HL RET POS LD A,(TYME+1) CPL LD (TYME+1),A LD (FURE1+1),A LD A,3 LD (STR+1),A JR MUSAX1 PCCC XOR A LD (FLAG+1),A LD A,4 LD (STR+1),A JR MUSAX1