;z80 ;zx-spectrum ;assembler ;ÏÅ×ÀÒÀËÊÀ ÒÅÊÑÒÀ 4õ8 ;ÑÏÐÀÉÒÎÂÀß ×ÈÒÀËÊÀ ÄËß ÃÀÇÅÒÛ "ÁÅÑÑÈË ÁÓÄÓÙÅÃÎ" N1 ;ÑÊÐÎËË ÏÎÏÈÊÑÅËÜÍÛÌ Ñ ÀÒÐÈÁÓÒÀÌÈ (ÊÀÊ Â BORN DEAD-16) ;ÇÀÍÈÌÀÅÒ ÍÈÍÞÞ ÏÀÌßÒÜ + 7 ÝÊÐÀÍ (ÐÀÁÎÒÀÅÒ ÍÀ 2õ ÝÊÐÀÍÀÕ) ;ÎÁÚÅÌ ÇÀÃÐÓÆÀÅÌÎÃÎ ÒÅÊÑÒÀ 1 ÑÒÐÀÍÈÖÀ, ÔÎÐÌÈÐÓÅÒÑß ÑÏÐÀÉÒ ;ÐÀÇÌÅÐÎÌ 24xÊÎË-ÂÎ ÑÒÐÎÊ, ÏÐÈ×ÅÌ ÊÎË-ÂÎ ÑÒÐÎÊ Ñ ÒÅÊÑÒÎÌ ÍÅ ;ÁÎËÜØÅ 340. ÏÓÑÒÛÕ ÑÒÐÎÊ ÌÎÆÅÒ ÁÛÒÜ ÌÍÎÃÎ. ÎÁÙÅÅ ÊÎË-ÂÎ <=512 ; BORN DEAD ÁÅÇ ÏÎÄÇÀÃÐÓÇÊÈ 192) ;WRTTEN BY WOCEN/TRIUMPH 7-10 ÄÅÊÀÁÐß 2000 ;ÐÀÑÏÐÅÄÅËÅÍÈÅ ÏÀÌßÒÈ ;5-ÑÒÐ ;#4000-#5AFF [#1B00] - ÝÊÐÀÍ 0 ;#5B00-#5FFF [#500] - ÑÂÎÁÎÄÍÎ ;#6000-#1FF [#200] - ÖÂÅÒÀ ÑÒÐÎÊ ;#6200-#65FF [#400] - ÀÄÐÅÑÀ ÑÒÐÎÊ ;#6600-#7FFF [#1A00] - ÊÎÄ ;2-ÑÒÐ ;ÑÞÄÀ ÆÅ ÃÐÓÇÈÒÜÑß ÑÒÐÀÍÈÖÀ ÒÅÊÑÒÀ ;#8000-#955C [#155D] - ÊÎÄ ;#955D-#BDFF [#28A3] - ÁÛÑÒÐÛÉ ÂÛÂÎÄ ÑÏÐÀÉÒÀ, ÍÀ 25 ÑÒÐÎÊ ;#BE00-#BF00 [#101] - ÒÀÁËÈÖÀ ÏÎÄ IM2 ;#BF01-#BFBE [#BE] - ÑÒÅÊ ÂÎ ÂÐÅÌß ÏÐÈÕÎÄÀ IM2 ;#BFBF-#BFC1 [3] - ÏÅÐÅÕÎÄ ÏÎ IM2 ;#BFC2-#BFFF [#3E] - ÑÒÅÊ ÏÐÈ ÐÀÁÎÒÅ ;0-ÑÒÐ ÌÓÇÛÊÀ ;1,3,4,6 ÑÔÎÐÌÈÐÎÂÀÍÍÛÉ ÑÏÐÀÉÒ ;7-ÑÒÐ ;#4000-#DAFF [#1B00] - 2-ÎÉ ÝÊÐÀÍ ;#DB00-#F050 [#1551] - 4x8, 8x8, 8x8 ÏÎÂÅÐÍÓÒÛÉ, MAINMENU, ; MUS_MENU, FQ_PT3.4, HELP ;#FO51-#E5FF [#FAF] - ÑÂÎÁÎÄÍÎ COL_LINE EQU #6000 ;ÁÓÔÅÐ ÍÀ ÖÂÅÒÀ ÑÒÐÎÊ ADR_LINE EQU #6200 ;ÀÄÐÅÑÀ ÍÎÌÅÐΠÑÒÐÎÊ PRN_SCR EQU #955D ;ÏÐÎÖÅÄÓÐÀ ÂÛÂÎÄÀ ÍÀ ÝÊÐÀÍ TIME_SP EQU #BFBF ;ÂÐÅÌÅÍÍÛÉ ÑÒÅÊ ;ÏÎÊÀ ÌÓÇÛÊÈ ÍÅÒ, È ÂÑÅ ÄÀÍÍÛÅ ÑÂßÇÀÍÍÛÅ Ñ 7 ÑÒÐ. ÕÐÀÍßÒÑß Â 0 ORG #7F00 ANIMA + INCBIN "bec_spr " ;[#100] ORG #8000 + INCBIN "yama!!!.p" ORG #5B00 DEHRUST + INCBIN "DEHR21.C" ;[#100] ÄÅÏÀÊÅÐ ORG #DB00 FONT + INCBIN "becfont.p" ;[#35A] 4x8 ORG #DE5A FONT2 + INCBIN "becfont2.p" ;[#195] 8x8 ORG #DFEF FONT3 + INCBIN "becfont3.p" ;[#1A6] 8x8 ÏÎÂÅÐÍÓÒÛÉ ÍÀ 90 ORG #E195 FON + INCBIN "mainmenu.p" ;[#881] ÐÈÑÓÍÎÊ ÂÛÁÎÐÀ ÑÒÀÒÅÉ ORG #EA32 MUS + INCBIN "mus_menu.p" ;[#229] ÐÈÑÓÍÎÊ ÂÛÁÎÐÀ ÌÓÇÎÍΠORG #EC5B FM_TAB + INCBIN "FQ_PT3?4.p" ;[#20F] ×ÀÑÒÎÒÍÛÅ ÒÀÁËÈÖÛ ORG #EE6A HELP + INCBIN "help2 .p" ;[#203] ÈÍÔÎ Î ÑÎÇÄÀÒÅËÈ ÎÁÎËÎ×. ORG #F06D NAME_MUS + INCBIN "name_mus.p" ;[#D6] ÍÀÇÂÀÍÈß ÌÓÇÎÍΠORG #F143 NAME_TXT + INCBIN "name2txt.p" ;[#10D] ÍÀÇÂÀÍÈß ÑÒÀÒÅÉ END1 LEN1=END1-#DB00 STR_7 EQU 6 ;ÍÎÐÌÀËÜÍÎ ÄÎËÆÍÎ ÁÛÒÜ 7 ORG #C000 MUSIC + INCBIN "MAIN_MUS.p" ;ÌÓÇÛÊÀ ORG #6600 LD A,0 ;0 - KEMPSTON JOY ON OR A LD A,#DB ;IN A,(n) JR Z,$+2+2 LD A,#E6 ;AND n LD (JOY_OFF),A LD A,0 ;0 - KEMPSTON MOUSE ON OR A LD A,#69 ;LD L,C JR Z,$+2+2 LD A,#C9 ;RET LD (M_OFF),A XOR A OUT (#FE),A LD HL,#C9F1 ;ÁËÎÊÈÐÎÂÊÀ ÎØÈÁÎÊ TR-DOS LD (#5CC2),HL XOR A CALL PAGE LD HL,#C000 LD DE,#C000 CALL DEHRUST CALL MUSIC CALL _IM2 EI XOR A ;ÏÅÐÂÛÉ ÑÒÀÐÒ LD (CUR_LINE),A ;ÏÐÈ ÇÀÃÐÓÇÊÅ ÍÎÂÎÉ ÑÒÀÒÜÈ LD H,A LD L,A LD (CUR_STR),HL ;ÒÅÊÓÙÀß ÂÅÐÕÍßß ÑÒÐÎÊÀ CALL TEXT_KAK ;×ÈÒÀÅÌ ÒÅÊÑÒ LD A,#FF LD (OLD_TXT),A ;ÒÈÏÀ ÍÈ×ÅÃÎ ÍÅ ×ÈÒÀËÈ START_1 CALL SCR_0 HALT ;ÂÈÄÈÌ 0 ÝÊÐÀÍ CALL COPY ;ÊÎÏÈÐÓÅÌ ÈÇ 0  1 CALL SCR_1 HALT ;ÂÈÄÈÌ 1 ÝÊÐÀÍ CALL CLS ;×ÈÑÒÈÌ 0 ÝÊÐÀÍ CALL MENU_OUT ;ÂÛÂÎÄ ÊÀÐÒÈÍÊÈ CALL INST_ART ;ÈÍÑÒÀËßÖÈß ÍÀÇÂÀÍÈÉ ÑÒÀÒÅÉ CALL PRN_ART ;ÂÛÂÎÄ ÍÀÄÏÈÑÈ ÑÒÀÒÅÉ CALL PRN_ANIM ;ÂÛÂÎÄ ÑÏÐÀÉÒÀ 2x2 CALL SCR_0 HALT ;ÂÈÄÈÌ 0 ÝÊÐÀÍ CALL COPY ;ÊÎÏÈÐÓÅÌ ÈÇ 0  1 CALL MENU_KEY ;ÐÀÁÎÒÀ Ñ ÌÅÍÞ CALL LOAD ;ÃÐÓÇÈÌ ÒÅÊÑÒ, ÌÓÇÛÊÓ LD A,(ERROR) OR A JR NZ,START_1 CALL TEXT_KAK ;×ÈÒÀÅÌ ÒÅÊÑÒ JR START_1 TEXT_KAK ;ÐÀÁÎÒÀÅÌ Ñ ÒÅÊÑÒÎÌ CALL COPY ;ÊÎÏÈÐÓÅÌ ÈÇ 0  1 CALL SCR_1 HALT ;ÂÈÄÈÌ 1 ÝÊÐÀÍ LD A,(CUR_TXT) ;ÇÀÃÐÓÆÅÍÍÀß ÑÒÀÒÜß LD C,A LD A,(OLD_TXT) ;ÑÒÀÐÀß ÑÒÀÒÜß CP C ;ÎÍÈ ÐÀÂÍÛ ? JR Z,TEXT_OK ;ÄÀ XOR A ;ÏÅÐÂÛÉ ÑÒÀÐÒ LD (CUR_LINE),A ;ÏÐÈ ÇÀÃÐÓÇÊÅ ÍÎÂÎÉ ÑÒÀÒÜÈ LD (SPEED),A ;ÑÊÎÐÎÑÒÜ LD H,A LD L,A LD (CUR_STR),HL ;ÒÅÊÓÙÀß ÂÅÐÕÍßß ÑÒÐÎÊÀ LD (ALL_LINE),HL ;ÎÁÙÅÅ ÊÎË-ÂÎ ÑÒÐÎÊ INC A ;ÌÎÆÍÎ È ÂÅÐÕ È ÂÍÈÇ LD (DOWN_0+1),A LD (UP_0+1),A CALL INST_FONT CALL INST_TEXT TEXT_OK CALL INST_PRNT ;ÒÀÁËÈÖÀ ÏÅ×ÀÒÈ LD A,(CUR_TXT) LD (OLD_TXT),A ;ÍÎÌÅÐ ÑÒÀÒÜÈ CALL CLS ;×ÈÑÒÈÌ 0 ÝÊÐÀÍ LD A,5 CALL PAGE LD DE,#C004+24 ;ÑÎÇÄÀÅÌ ÀÄÐÅÑÀ  0 ÝÊÐÀÍÅ LD B,192 FORM_1 LD H,D LD A,E AND %11100000 OR 2 LD L,A INC D LD A,D AND 7 JR NZ,FORM_2 LD A,E ADD A,#20 LD E,A JR C,FORM_2 LD A,D SUB 8 LD D,A FORM_2 LD (HL),E INC L LD (HL),D DEC L DJNZ FORM_1 CALL PRN_ALL ;ÏÅ×ÀÒÜ ÂÑÅÃÎ ÒÅÊÑÒÀ  ÁÓÔÅÐ LD A,5 CALL PAGE CALL PRN_SCR_ ;ÏÅ×ÀÒÜ ÍÀ 0 ÝÊÐÀÍ CALL SCR_0 HALT CALL COPY ;ÈÇ 0  1 HALT L1 CALL SCR_0 HALT LD A,7 ;7 ÑÒÐÀÍÈÖÀ CALL PAGE ;0 ÝÊÐÀÍ CALL PRN_SCR_ CALL UPR_KEY CALL SCR_1 ;1 ÝÊÐÀÍ HALT LD A,5 ;5 ÑÒÐÀÍÈÖÀ CALL PAGE CALL PRN_SCR_ CALL UPR_KEY LD A,(KOD) BIT 5,A ;ÒÊÍÓËÈ ÊÍÎÏÊÓ ESCAPE ? RET NZ ;ÄÀ BIT 6,A JP NZ,TRACK_LIST BIT 7,A JP NZ,HELP_ LD A,#FB ;W IN A,(#FE) BIT 1,A JR Z,_PLUS L2 LD A,#FD ;S IN A,(#FE) BIT 1,A JP Z,_MINUS JR L1 ;-------ÓÂÅËÈ×ÈÂÀÅÌ ÊÎË-ÂÎ ÑÒÐÎÊ ÍÀ ÝÊÐÀÍÅ _PLUS LD A,(KOL_STR) CP 24 JR Z,L2 CALL SCR_0 ;ÂÊËÞ×ÀÅÌ 0 ÝÊÐÀÍ HALT LD HL,(ADR_OUT) LD DE,0-#20 ADD HL,DE LD (ADR_OUT),HL LD (PRN_S4+1),HL LD H,#D8 LD (PRN_ATR+1),HL LD A,(KOL_STR) LD C,A ADD A,2 LD (KOL_STR),A LD (DOWN_11+1),A LD (INST_T8+1),A INC A LD (PRN_N+1),A LD A,24 SUB C LD B,A XOR A ADD A,18 ;ÄËÈÍÀ ÏÐÎÖÅÄÓÐÛ ÂÛÂÎÄÀ ÖÂÅÒÀ 1 ÑÒÐÎÊÈ DJNZ $-2 LD E,A LD D,0 LD HL,OUT_SP SBC HL,DE LD (HL),#DD ;ÑÒÀÂÈÌ ÎÁÐÀÒÍÎ LD C,(IX+) INC HL LD (HL),#4E LD A,(INST_P0+1) ADD A,16 LD (INST_P0+1),A LD A,(PRN_S1+1) ADD A,16 LD (PRN_S1+1),A ADD A,8 LD (LINE_1+1),A LD (LINE_2+1),A LD (LINE_3+1),A LD (LINE_4+1),A LD (LINE_5+1),A LD (LINE_6+1),A LD HL,(ALL_LINE) OR A INC C INC C SBC HL,BC DEC HL LD (DW_STR),HL ;ÂÅÐÕÍßß ÑÒÐÎÊÀ, ÊÎÍÖÀ ÒÅÊÑÒÀ EX DE,HL LD HL,(CUR_STR) LD A,H ;ÂÅÐÕÍßß ÑÒÐÎÊÀ OR L ;ÑÀÌÀß ÏÅÐÂÀß ? JR Z,_PLUS_2 ;ÄÀ DEC HL ;ÈÍÀ×Å ÓÌÅÍÜØÀÅÌ ÅÅ OR A ;ÂÅÐÕÍßß ÑÒÐÎÊÀ SBC HL,DE ;ÌÅÍÜØÅ ×ÅÌ ÄÎÏÓÑÒÈÌÀß ? ADD HL,DE JR C,_PLUS_1 ;ÄÀ XOR A LD (DOWN_0+1),A ;ÂÍÈÇ ÁÎËÜØÅ ÍÅËÜÇß LD (CUR_LINE),A EX DE,HL ;ÑÒÀÂËÞ MAX ÂÅÐÕÍÞÞ ÑÒÐÎÊÓ _PLUS_1 LD (CUR_STR),HL ;ÒÅÊÓÙÀß ÂÅÐÕÍßß ÑÒÐÎÊÀ JP _MINUS1 _PLUS_2 XOR A LD (CUR_LINE),A JR _PLUS_1 ;-------ÓÌÅÍÜØÀÅÌ ÊÎË-ÂÎ ÑÒÐÎÊ ÍÀ ÝÊÐÀÍÅ _MINUS LD A,(KOL_STR) CP 18 JP Z,L1 CALL SCR_0 ;ÂÊËÞ×ÀÅÌ 0 ÝÊÐÀÍ HALT LD HL,(ADR_OUT) LD DE,#20 ADD HL,DE LD (ADR_OUT),HL LD (PRN_S4+1),HL LD H,#D8 LD (PRN_ATR+1),HL LD A,(KOL_STR) SUB 2 LD (KOL_STR),A LD (DOWN_11+1),A LD (INST_T8+1),A LD C,A INC A LD (PRN_N+1),A LD A,24 SUB C LD B,A XOR A ADD A,18 ;ÄËÈÍÀ ÏÐÎÖÅÄÓÐÛ ÂÛÂÎÄÀ ÖÂÅÒÀ 1 ÑÒÐÎÊÈ DJNZ $-2 LD E,A LD D,0 LD HL,OUT_SP SBC HL,DE LD (HL),#18 ;ÑÒÀÂÈÌ JR OUT_SP INC HL DEC A DEC A LD (HL),A LD A,(INST_P0+1) SUB 16 LD (INST_P0+1),A LD A,(PRN_S1+1) SUB 8 LD (LINE_1+1),A LD (LINE_2+1),A LD (LINE_3+1),A LD (LINE_4+1),A LD (LINE_5+1),A LD (LINE_6+1),A SUB 8 LD (PRN_S1+1),A LD HL,(CUR_STR) INC HL LD (CUR_STR),HL LD HL,(ALL_LINE) OR A SBC HL,BC DEC HL LD (DW_STR),HL ;ÂÅÐÕÍßß ÑÒÐÎÊÀ, ÊÎÍÖÀ ÒÅÊÑÒÀ LD A,1 LD (DOWN_0+1),A LD (UP_0+1),A _MINUS1 CALL INST_PRNT ;ÏÅÐÅÈÍÑÒÀËÈË ÏÐÎÖÅÄÓÐÓ ÏÅ×ÀÒÈ CALL PRN_ALL ;ÏÅ×ÀÒÜ ÂÑÅÃÎ ÒÅÊÑÒÀ  ÁÓÔÅÐ LD A,7 ;7 ÑÒÐÀÍÈÖÀ CALL PAGE ;0 ÝÊÐÀÍ LD HL,#D800 LD DE,#D801 LD BC,#02FF LD (HL),L CALL _LDIR ;×ÈÑÒÈÌ ÀÒÐ.  1 ÝÊÐÀÍÅ CALL PRN_SCR_ ;ÏÐÎÏÅ×ÀÒÀËÈ Â 1 ÝÊÐÀÍ CALL SCR_1 HALT LD HL,#C000 LD DE,#4000 LD BC,#1B00 CALL _LDIR ;ÏÅÐÅÊÈÍÓËÈ Â 0 ÝÊÐÀÍ JP L1 UPR_KEY CALL OPROS_K LD A,C RRA RRA AND #03 JR Z,UPR_1 ;ÍÀÆÀËÈ ÎÄÍÎÂÐÅÌÅÍÍÎ ÂÂÅÐÕ/ÂÍÈÇ CP #03 JR Z,UPR_1 ;ÍÈ×ÅÃÎ ÍÅ ÍÀÆÀËÈ LD (UPR_1+1),A ;ÑÒÀÐÎÅ ÍÀÏÐÀÂËÅÍÈÅ ÄÂÈÆÅÍÈß EX AF,AF' LD HL,SPEED LD A,(HL) CP #1F JR NC,$+2+1 INC A LD (HL),A UPR_0 SRL A LD C,A LD B,0 LD HL,T_SPEED ADD HL,BC ;ÀÄÐÅÑ Â ÒÀÁËÈÖÅ LD C,(HL) ;ÑÌÅÙÅÍÈÅ ÏÎ SIN LD HL,CUR_LINE LD A,(HL) RRCA RRCA RRCA AND #1F LD D,A ;ÑÒÀÐÎÅ ÇÍÀ×ÅÍÈÅ LD A,(HL) EX AF,AF' RRA JR NC,UP JR DOWN UPR_1 LD A,0 ;ÑÒÀÐÎÅ ÍÀÏÐÀÂËÅÍÈÅ ÄÂÈÆÅÍÈß EX AF,AF' LD A,(SPEED) OR A RET Z DEC A LD (SPEED),A JR UPR_0 DOWN LD A,1 LD (UP_0+1),A EX AF,AF' ADD A,C RRCA RRCA RRCA AND #1F LD E,A ;ÍÎÂÎÅ ÇÍÀ×ÅÍÈÅ SUB D LD B,A ;ÊÎË-ÂÎ ÑÒÐÎÊ JR NZ,DOWN_1 DOWN_0 LD A,1 ;ÅÑËÈ 0, ÒÎ ÍÅ ÍÀÄÎ OR A ;ÓÂÅËÈ×ÈÂÀÒÜ RET Z LD A,(HL) ; ÏÐÅÄÅËÀÕ 1 ÑÒÐÎÊÈ ADD A,C LINE_1 CP 200 JR C,$+2+2 LINE_2 SUB 200 LD (HL),A RET DOWN_1 LD HL,(CUR_STR) INC HL LD DE,(DW_STR) OR A SBC HL,DE JR NC,DOWN_2 ;ÍÈÆÅ ÍÅËÜÇß ADD HL,DE LD (CUR_STR),HL DOWN_11 LD DE,24 ADD HL,DE PUSH BC CALL PRN_STR ;ÏÐÎÏÅ×ÀÒÀË 1 ÑÒÐÎÊÓ POP BC LD HL,CUR_LINE DEC B JR Z,DOWN_0 ;ÏÎÑË. ÑÒÐÎÊÀ ÇÀ 1 ÐÀÇ LD A,C SUB 8 LD C,A LD A,(HL) ADD A,8 LINE_3 CP 200 JR C,$+2+2 LINE_4 SUB 200 LD (HL),A JR DOWN_1 DOWN_2 EX DE,HL LD (CUR_STR),HL LD HL,CUR_LINE XOR A LD (SPEED),A LD (DOWN_0+1),A LD A,(HL) AND 7 RET Z LD A,(HL) AND %11111000 ADD A,8 JR LINE_1 UP LD A,1 LD (DOWN_0+1),A EX AF,AF' INC D INC D ;+16 ADD A,16 SUB C RRCA RRCA RRCA AND #1F LD E,A ;ÍÎÂÎÅ ÇÍÀ×ÅÍÈÅ LD A,D SUB E LD B,A JR NZ,UP_1 UP_0 LD A,1 ;ÅÑËÈ 0, ÒÎ ÍÅ ÍÀÄÎ OR A ;ÓÂÅËÈ×ÈÂÀÒÜ RET Z LD A,(HL) ; ÏÐÅÄÅËÀÕ 1 ÑÒÐÎÊÈ SUB C JR NC,$+2+2 LINE_5 ADD A,200 LD (HL),A RET UP_1 LD HL,(CUR_STR) LD A,H OR L JR Z,UP_2 ;ÂÛØÅ ÍÅËÜÇß DEC HL LD (CUR_STR),HL PUSH HL LD HL,CUR_LINE DEC B JR NZ,UP_11 ;ÏÎÑË. ÑÒÐÎÊÀ ÇÀ 1 ÐÀÇ CALL UP_0 POP HL JP PRN_STR ;ÏÐÎÏÅ×ÀÒÀË 1 ÑÒÐÎÊÓ UP_11 LD A,C SUB 8 LD C,A LD A,(HL) SUB 8 JR NC,$+2+2 LINE_6 ADD A,200 LD (HL),A POP HL PUSH BC CALL PRN_STR ;ÏÐÎÏÅ×ÀÒÀË 1 ÑÒÐÎÊÓ POP BC JR UP_1 UP_2 LD HL,CUR_LINE LD A,(HL) AND 7 JR Z,UP_3 LD A,(HL) AND %11111000 LD (HL),A RET UP_3 XOR A LD (SPEED),A LD (UP_0+1),A RET EXIT POP AF DI LD A,#3F LD I,A IM 1 EI RET ;-------ÏÐÎÏÅ×ÀÒÊÀ ÈÇÎÁÐÀÆÅÍÈß Â ÁÓÔÅÐ PRN_ALL LD A,(CUR_LINE) ;ÍÀ×ÀËÎ ÒÀÁËÈÖÛ AND 7 LD (CUR_LINE),A PUSH AF PRN_N LD B,25 ;Ñ×ÅÒ×ÈÊ ÄËß ÏÅ×ÀÒÈ+1 LD HL,(CUR_STR) PRN_AL1 PUSH BC PUSH HL CALL PRN_STR ;ÏÅ×ÀÒÀÅÌ ÑÒÐÎÊÓ Â ÁÓÔÅÐ LD HL,CUR_LINE LD A,8 ;ÂÛÑÎÒÀ ÑÒÐÎÊÈ ADD A,(HL) ;+ ÑÒÀÐÎÅ ÏÎËÎÆÅÍÈÅ LD (HL),A POP HL POP BC INC HL ;ÓÂÅËÈ×. ÍÎÌÅÐ ÑÒÐÎÊÈ DJNZ PRN_AL1 POP AF LD (CUR_LINE),A RET ;-------ÏÐÎÏÅ×ÀÒÊÀ ÑÒÐÎÊÈ Â ÁÓÔÅÐ ;ÂÕÎÄ:  (CUR_LINE) ÏÎËÎÆÅÍÈÅ ÑÒÐÎÊÈ Â ÑÏÐÀÉÒÅ ;HL=ÍÎÌÅÐ ÑÒÐÎÊÈ ÄËß ÏÅ×ÀÒÈ PRN_STR ;ÈÙÅÌ Â ÊÀÊÎÉ ÑÒÐÀÍÈÖÅ ÍÀÕÎÄÈÒÑß ÑÒÐÎÊÀ EX DE,HL LD HL,(FIRST_3) ;ÏÅÐÂÀß ÑÒÐÎÊÀ 3 ÑÒÐÀÍÈÖÛ-1 OR A SBC HL,DE ;ÍÓÆÍÀß ÑÒÐÎÊÀ  1 ÑÒÐÀÍÈÖÅ ? LD A,1 JR NC,FIND_OK ;ÄÀ LD HL,(FIRST_4) OR A SBC HL,DE LD A,3 JR NC,FIND_OK ; 3 ÑÒÐÀÍÈÖÅ LD HL,(FIRST_6) INC A ;A=4 OR A SBC HL,DE JR NC,FIND_OK ; 4 LD A,6 ; 6 FIND_OK EX DE,HL ;ÂÎÑÒ. ÍÎÌÅÐ ÑÒÐÎÊÈ CALL PAGE ;ÂÊËÞ×ÀÅÌ ÑÒÐÀÍÈÖÓ ÑÎ ÑÒÐÎÊÎÉ ADD HL,HL LD DE,ADR_LINE ADD HL,DE LD A,(HL) INC L LD H,(HL) ;DE=ÀÄÐÅÑ ÑÒÐÎÊÈ Â ÑÏÐÀÉÒÅ LD L,A LD (PRN_LSP+1),SP DI LD SP,HL LD HL,PRN_SCR+52-3 ;ÏÎÊÀÇÛÂÀÅÌ ÍÀ ÏÅÐÂÛÉ ÁÀÉÒ Â ;ÑÒÅÊÎÂÎÉ ÒÀÁËÈÖÅ LD DE,416 ;ÄËÈÍÀ ÊÎÄÀ ÄËß ÂÛÂÎÄÀ 1 ÑÒÐÎÊÈ LD A,(CUR_LINE) RRA RRA RRA AND #1F ;ÍÎÌÅÐ ÂÅÐÕÍÅÉ ÑÒÐÎÊÈ Â ÑÏÐÀÉÒÅ SUB 31 NEG LD ($+3+1),A JR $ DUP 31 ADD HL,DE EDUP ;HL=ÀÄÐÅÑ ÄËß ÏÅ×ÀÒÈ ÑÒÐÎÊÈ LD BC,0-5 LD A,8 PRN_LINE DUP 11 POP DE LD (HL),E INC HL LD (HL),D ADD HL,BC ;BC=0-5 EDUP POP DE LD (HL),E INC HL LD (HL),D LD DE,52+52-9 ADD HL,DE DEC A JP NZ,PRN_LINE PRN_LSP LD SP,0 EI RET ;-------ÏÐÎÏÅ×ÀÒÊÀ ÒÅÊÑÒÀ ÈÇ ÁÓÔÅÐÀ ;ÏÐÎÏÅ×ÀÒÛÂÀÞ ÇÀ 1 ÐÀÇ,  ÊÎÄ ÑÒÀÂÈÌ ËÎÂÓØÊÓ = JP (IX), ÄËß ;ÂÛÕÎÄÀ ÎÁÐÀÒÍÎ, ÏÐÈ ÑÐÀÁÀÒÛÂÀÍÈÈ ÂÛÕÎÄÈÌ, ÓÁÈÐÀÅÌ ËÎÂÓØÊÓ PRN_SCR_ LD A,(CUR_LINE) ;ÓÑÒÀÍÎÂÊÀ ÖÂÅÒΠLD HL,(CUR_STR) AND 7 JR Z,$+2+1 INC HL LD DE,COL_LINE ADD HL,DE ;ÒÀÁËÈÖÀ ÖÂÅÒΠPUSH HL POP IX PRN_ATR LD HL,#D804+24 LD DE,#20 LD (OUT_SP+1),SP DI MEM=0 DUP 24 LD C,(IX+MEM) LD B,C LD SP,HL DUP 12 PUSH BC EDUP ADD HL,DE MEM=MEM+1 EDUP OUT_SP LD SP,0 EI ;ÎÏÐÅÄÅËßÅÌ ÊÓÄÀ ÑÒÀÂÈÒÜ ËÎÂÓØÊÓ LD A,(CUR_LINE) ;0-199 CP 8 JR C,PRN_S1 ;ÑÒÀÂÈÒÜ ËÎÂÓØÊÓ Â ÊÎÍÖÅ ÊÎÄÀ JR Z,PRN_S2 ;ËÎÂÓØÊÀ ÍÀ ÑÀÌÎÌ ÍÀ×ÀËÅ ÊÎÄÀ SUB 8 ;ËÎÂÓØÊÓ Â ÍÀ×ÀËÅ ÊÎÄÀ JR PRN_S3 PRN_S1 ADD A,192 ;ÏÎÊÀÇÛÂÀÅÌ Â ÊÎÍÅÖ ÊÎÄÀ JR PRN_S3 PRN_S2 XOR A ;ÑÀÌÎÅ ÍÀ×ÀËÎ PRN_S3 LD C,A LD HL,PRN_SCR LD DE,416 ;ÄËÈÍÀ ÊÎÄÀ ÄËß ÏÅ×ÀÒÈ 1 ÑÒÐÎÊÈ RRA RRA RRA AND #1F ;ÂÛÁÈÐÀÞ ÑÒÐÎÊÈ SUB #1F NEG LD ($+3+1),A JR $ DUP 31 ADD HL,DE EDUP LD A,C LD DE,52 ;ÄËÈÍÀ ÊÎÄÀ ÄËß ÏÅ×ÀÒÈ 1 ËÈÍÈÈ AND 7 SUB 7 NEG LD ($+3+1),A JR $ DUP 7 ADD HL,DE EDUP LD (E_CUR+1),HL ;HL=ÀÄÐÅÑ ÄËß ËÎÂÓØÊÈ LD (HL),#C3 INC HL LD (HL),E_CUR ;JP E_CUR INC HL LD (HL),'E_CUR ;ÎÏÐÅÄÅËßÅÌ ÎÒÊÓÄÀ ÑÒÀÐÒÎÂÀÒÜ LD A,(CUR_LINE) ;0-199 LD C,A LD HL,PRN_SCR+3 LD DE,416 ;ÄËÈÍÀ ÊÎÄÀ ÄËß ÏÅ×ÀÒÈ 1 ÑÒÐÎÊÈ RRA RRA RRA AND #1F ;ÂÛÁÈÐÀÞ ÑÒÐÎÊÈ SUB #1F NEG LD ($+3+1),A JR $ DUP 31 ADD HL,DE EDUP LD A,C LD DE,52 ;ÄËÈÍÀ ÊÎÄÀ ÄËß ÏÅ×ÀÒÈ 1 ËÈÍÈÈ AND 7 SUB 7 NEG LD ($+3+1),A JR $ DUP 7 ADD HL,DE EDUP DI ;HL=ÀÄÐÅÑ ÄËß ÇÀÏÓÑÊÀ LD (SP_EXIT+1),SP PUSH HL PRN_S4 LD HL,#C004+24 RET ;ÂÏÅÐÅÄ Â ÑÒÅÊÎÂÓÞ ÒÀÁËÈÖÓ E_CUR LD HL,0 ;ÀÄÐÅÑ ËÎÂÓØÊÈ LD (HL),#3B ;DEC SP INC HL LD (HL),#3B ;DEC SP INC HL LD (HL),#E1 ;POP HL SP_EXIT LD SP,0 ;ÑÒÀÐÛÉ ÑÒÅÊ EI RET ;ÂÛÕÎÄ ;ÏÅÐÅÊËÞ×ÅÍÈÅ ÑÒÐÀÍÈÖ PAGE PUSH BC LD (OLD_PAGE+1),A OLD_SCR OR #10 LD BC,#7FFD OUT (C),A POP BC RET ;ÏÅÐÅÊËÞ×ÅÍÈÅ ÝÊÐÀÍΠCH_SCR LD A,(OLD_SCR+1) XOR 8 CH_SCR1 LD (OLD_SCR+1),A RET SCR_0 LD A,#10 JR CH_SCR1 SCR_1 LD A,#18 JR CH_SCR1 ;ÇÀÌÅÍÀ ÊÎÌÀÍÄÛ LDIR _LDIR LD A,C ;ÄËß ËÞÁÛÕ BC AND #1F JR Z,_32_LDI SUB 32 NEG ADD A,A ;*2 LD (_LDIR0+1),A _LDIR0 JR $ _32_LDI DUP 32 LDI EDUP JP PE,_32_LDI RET COPY LD A,7 CALL PAGE LD HL,#4000 LD DE,#C000 LD BC,#1B00 LD A,(OLD_SCR+1) BIT 3,A ;0 ÝÊÐÀÍ ÂÊËÞ×ÅÍ JR Z,$+2+3 ;ÄÀ LD A,D LD D,H LD H,A CALL _LDIR XOR A JP PAGE CLS LD A,7 CALL PAGE LD HL,#4000 LD DE,#4001 LD BC,#1AFF LD A,(OLD_SCR+1) BIT 3,A ;0 ÝÊÐÀÍ ÂÊËÞ×ÅÍ JR NZ,$+2+3 ;ÍÅÒ LD H,#C0 LD D,H CALL _LDIR XOR A JP PAGE ;-------ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈÉ INTA: DI LD (OLD_SP+1),SP LD SP,TIME_SP PUSH HL,DE,BC,AF,IX,IY EXX EX AF,AF' PUSH HL,DE,BC,AF LD A,(OLD_SCR+1) LD BC,#7FFD OUT (C),A ;ÂÊËÞ×ÀÅÌ ÍÓÆÍÛÉ ÝÊÐÀÍ CALL MUSIC+5 ;0 ÑÒÐÀÍÈÖÀ OLD_PAGE LD A,0 ;ÑÒÀÐÀß ÑÒÐÀÍÈÖÀ CALL PAGE POP AF,BC,DE,HL EX AF,AF' EXX POP IY,IX,AF,BC,DE,HL OLD_SP LD SP,0 EI RET ;-------ÎÏÐÎÑ ÊËÀÂÈØ, ÄÆÎß, ÌÛØÈ------- OPROS_K: XOR A JOY_OFF IN A,(#1F) ;KEMPSTON JOY AND #1F ;#10-FIRE, 8-UP, 4-DOWN LD C,A ;2-ÂËÅÂÎ, 1-ÂÏÐÀÂÎ LD A,#FE IN A,(#FE) ;CAPS ÍÀÆÀËÈ ? RRA JR C,SINCLAR ;ÍÅÒ LD HL,CUR_KEY ;HL=ÒÀÁËÈÖÀ ÄËß CURSOR JOY LD B,7 ;ÊÎËÈ×ÅÑÒÂÎ ÏÎÄÐßÄ ÎÏÐÀØÈÂÀÅÌÛÕ JR OTHER SINCLAR LD HL,SIN_KEY ;HL=ÒÀÁËÈÖÀ ÄËß SINCLAIR JOY 1,2 LD B,11 ;ÊÎËÈ×ÅÑÒÂÎ ÏÎÄÐßÄ ÎÏÐÀØÈÂÀÅÌÛÕ OTHER CALL READKEY ;ÊËÀÂÈØ LD HL,OTH_KEY ;ÒÀÁËÈÖÀ ÄËß ÎÑÒÀËÜÍÛÕ ÊËÀÂÈØ LD B,8 ;ÊÎÒÎÐÛÅ ÌÎÆÍÎ ÍÀÆÈÌÀÒÜ ÂÌÅÑÅ Ñ CALL READKEY ;CAPS SHIFT M_OFF LD L,C LD H,0 LD BC,#FADF ;ÏÎÐÒ ÊÍÎÏÎÊ IN A,(C) ;ÂÇßËÈ ÄÀÍÍÛÅ ÏÎ 'ÎÃÍÞ' RRA JR C,$+2+2 ;ÏÅÐÅÕÎÄ ÅÑËÈ ÍÅ ÍÀÆÀËÈ SET 2,H ;UP RRA JR C,$+2+2 ;ÏÅÐÅÕÎÄ ÅÑËÈ ÍÅ ÍÀÆÀËÈ SET 3,H ;DOWN RRA JR C,$+2+2 SET 4,L ;FIRE LD A,H OR A ;ÍÈ×ÅÃÎ ÍÅ ÍÀÆÀËÈ ? JR Z,M_4 ;ÄÀ XOR #0C ;ÍÀÆÀËÈ 2 ÊËÀÂÈØÈ ? JR Z,M_5 ;ÄÀ ;ÍÀÆÀËÈ ÊËÀÂÈØÓ LD A,(TIME_13) CP 7 ;ÝÒÎ ÁÛË DOUBLE CLICK ? JR NC,M_1 ;ÍÅÒ LD A,(TIME_1) OR A ;ÐÀÁÎÒÀÅÌ Â ÑÄÂÈÃÅ ? JR Z,M_1 ;ÄÀ DERVIM LD A,0 OR A JR NZ,M_1 LD A,(OLD_K) CP H ;ÈÌÅÅÌ ÄÂÎÉÍÎÉ ÊËÈÊ ? JR Z,M_3 ;ÄÀ M_1 LD A,H LD (OLD_K),A ;ÍÀÆÀÒÀß ÊËÀÂÈØÀ XOR A LD (TIME_13),A ;ÈÍÈÒÈÌ DOUBLE CLICK CPL LD (DERVIM+1),A LD A,(TIME_1) ;ÌÎÆÍÎ ÄÂÈÃÀÒÜ ? OR A JR Z,M_2 ;ÄÀ DEC A LD (TIME_1),A JR ONE_KEY M_2 LD A,H ;UP, DOWN OR L LD L,A JR ONE_KEY M_3 BIT 2,H JR Z,$+2+2 SET 4,L ;FIRE BIT 3,H JR Z,$+2+2 SET 5,L ;ESCAPE XOR A ;ÈÈÒÈÌ Ñ×ÅÒ×ÈÊ ÍÅÍÀÆÀÒÈÉ LD (TIME_13),A LD A,6 ;ÈÍÈÒÈÌ ÑÊÐÎË LD (TIME_1),A ONE_KEY LD A,L LD C,A ;ÎÁÚÅÄÈÍÅÍÍÛÉ ÊÎÄ ONE_K1 LD (KOD),A RET M_4 LD A,(TIME_13) ;ÍÈ×ÅÃÎ ÍÅ ÍÀÆÀËÈ CP 255 ;Ñ×ÅÒ×ÈÊ ÍÅÍÀÆÀÒÎÃÎ MAX ? JR Z,$+2+1 ;ÄÀ INC A ;ÓÂÅËÈ×ÈÂÀÅÌ Ñ×ÅÒ×ÈÊ ÍÅÍÀÆÀÒÎÃÎ LD (TIME_13),A LD A,6 LD (TIME_1),A ;ÈÍÈÒÈÌ Ñ×ÅÒ×ÈÊ ÍÀÆÀÒÈß XOR A LD (DERVIM+1),A ;ÊÎÍÏÊÈ ÍÅ ÄÅÐÆÈÌ JR ONE_KEY ;H=0 M_5 LD A,(TIME_13) ;ÍÀÆÀËÈ ÂÒÎÐÓÞ ÊÍÎÏÊÓ ÁÅÇ ÎÒÏÓÑ- OR A ;ÊÀÍÈß ÏÅÐÂÎÉ ? JR Z,ONE_KEY ;ÄÀ SET 6,L ;TRACK-LIST JR ONE_KEY OLD_K DEFB 0 TIME_1 DEFB 6 ;ÇÀÄÅÐÆÊÀ ÏÅÐÅÄ ÍÀ×ÀËÎÌ ÄÅÉÑÒÂÈß TIME_13 DEFB 0 ;Ñ×ÅÒ×ÈÊ ÂÐÅÌÅÍÈ ÌÅÆÄÓ ÍÀÆÀÒÈßÌÈ KOD DEFB 0 ;ÍÛÍÅØÍÈÉ ÊÎÄ READKEY LD A,(HL) INC HL IN A,(#FE) CPL AND (HL) INC HL JR Z,READ_1 LD A,(HL) OR C LD C,A READ_1 INC HL DJNZ READKEY LD A,C JR ONE_K1 CUR_KEY DEFB #EF,#01,#10 ;0 FIRE DEFB #EF,#08,#08 ;7 UP DEFB #EF,#10,#04 ;6 DOWN DEFB #F7,#10,#02 ;5 LEFT DEFB #EF,#04,#01 ;8 RIGHT DEFB #F7,#01,#20 ;EDIT DEFB #7F,#01,#20 ;BREAK SIN_KEY DEFB #EF,#01,#10 ;0 FIRE DEFB #EF,#02,#08 ;9 UP DEFB #EF,#04,#04 ;8 DOWN DEFB #EF,#10,#02 ;6 LEFT DEFB #EF,#08,#01 ;7 RIGHT DEFB #7F,#01,#10 ;SPACE FIRE DEFB #F7,#10,#10 ;5 FIRE DEFB #F7,#08,#08 ;4 UP DEFB #F7,#04,#04 ;3 DOWN DEFB #F7,#01,#02 ;0 LEFT DEFB #F7,#02,#01 ;9 RIGHT OTH_KEY DEFB #BF,#01,#10 ;ENTER FIRE DEFB #FB,#01,#08 ;Q UP DEFB #FD,#01,#04 ;A DOWN DEFB #DF,#02,#02 ;O LEFT DEFB #DF,#01,#01 ;P RIGHT DEFB #FB,#04,#20 ;E EXIT DEFB #7F,#04,#40 ;M-TRACK LIST DEFB #BF,#10,#80 ;H-HELP INCLUDE "6ECCUL31",12 END