;z80 ;zx-spectrum ;assembler MAIN "STS*",#C6 ;STS_BIOS STALKER'1994 ;INPUT/PRINT_WORD/BYTE/(_D) ;INPUT_W ;HL<=YX ;BC<=WORD ;WORD=>BC=HL ;A=C, Cf=0 ;INPUT_W_D ;HL<=YX ;(DE)<=WORD ,DE=WORD_ADR ;WORD=>BC=HL=(WORD_ADR) ;A=C, Cf=0 ;INPUT_HD ;HL<=YX ;DE<=TXT: 1F_LEN,#11,#2A ...,#CD ;LEN=8 ;IN INPUT :"11 2A ... CD" ;BYTE_LEN=>A ,DE=TXT ;PRINT_HD ;ANALOG ^ ;INPUT_HLIN ;...,LEN=4 ;IN INPUT :"112A...CD" ;BYTE_LEN=>A ,DE=TXT ;NEW INKEY+KEY ;KEY_NUM=>E ;PRINT ;TXT:FROM (DE)TO (0) ;HL<=YX ;BC=NO MODIFY ;A=0, Cf=0 ;NEW INPUT ;(CURSOR)=0 ;NEW INPUTC ;(CURSOR)<=.. ;KEY UP/DOWN ;A<=TXT_LEN ;TXT=>(BUFFER) ;AT ;HL<=YX ;PR ;A <=CHAR ;FONT COMPRESSED 6*8=>6*6 FILL_FF IFN windows LD A,-1 ENDIF FILL IFN windows PUSH HL,BC LD D,H,E,L INC E LD B,0 LD (HL),A LDIR POP BC,HL ENDIF NL INC H LD A,H AND 7 RET NZ LD A,L ADD A,32 LD L,A RET C LD A,H SUB 8 LD H,A RET STANDART;TYPE,X,Y,L,H,COLOR DB 5,5,9,#15,6,0 WINDOW LD A,#A LD (STAT_ZONE),A POP IX BIT 0,(IX) JR Z,NO_STAND_W LD A,(IX+1) LD DE,-4 ADD IX,DE PUSH IX LD IX,STANDART LD (IX+5),A LD A,#C9 JR $+5 NO_STAND_W PUSH IX XOR A LD (aUTOSTART),A XOR A LD (WDR_JR),A LD H,A ;ATTRIBUTES LD C,(IX+4) LD L,(IX+2) DB "))))) LD E,(IX+1) LD D,#D8 ;/#58 MD_1=$-1 ADD HL,DE IFN winatr LD A,(IX+5) AND A JR NZ,$+4;W_ATR_2 ENDIF LD A,#07 COLOR=$-1 DISPLAY /T,COLOR ;W_ATR2 LD (COLOR2),A IFN windows LD DE,#20 IFN titl BIT 1,(IX) LD B,(IX+3) JR NZ,WYATR ;PANEL PUSH HL PUSH AF LD B,D ;INV ATR ADD A,A,A,A RL D ADD A,A RL B ADD A,A RL B ADD A,A RL B SRL D RRA RRCA ADD A,B LD B,(IX+3) ;W_INV LD (HL),A INC L DJNZ $-2 POP AF JR W_IATR ENDIF ;IFN winatr WYATR LD B,(IX+3) PUSH HL ;WXATR LD (HL),A INC L DJNZ $-2 W_IATR POP HL ADD HL,DE ;Cf=0 DEC C JR NZ,WYATR ;ENDIF IFN shad BIT 2,(IX) JR Z,W_CLEAR LD A,1 LD B,(IX+3) INC HL LD (HL),A DJNZ $-2 LD B,(IX+4) LD (HL),A SBC HL,DE ;Cf=0 DJNZ $-3 W_CLEAR ENDIF LD A,(IX+2) PUSH AF RRCA RRCA RRCA AND #E0 ADD A,(IX+1);<42! LD L,A POP AF AND #18 ADD A,#40+#80; MD_2=$-1 LD H,A LD C,(IX+3) DEC C IFN titl BIT 1,(IX) JR NZ,W_PANEL LD B,8 ;W_WINDOW ;CLUPCKL XOR A CALL FILL DJNZ $-4 LD A,(IX+4) DEC A ADD A,A,A,A,A,A JR W_VERT W_PANEL ENDIF CALL FILL_FF LD A,(IX+4) ADD A,A,A,A,A,A DEC A W_VERT DEC A LD B,A DEC C,C WCL_CKL LD (HL),#80 INC L XOR A CALL FILL DEC L LD A,1 LD (DE),A DJNZ WCL_CKL INC C,C CALL FILL_FF ENDIF POP HL PUSH HL LD DE,6 ;D=0 ADD HL,DE LD (WINDOW_TXT),HL CALL PRINT_T_AT ;W_DATA_INIT EX DE,HL EX (SP),HL aUTOSTART ;(OPER) RET ;W_NOAUTOSTART BIT 1,(HL) POP HL JR NZ,W_PAN_DATA ;W_STATIC_DATA LD (START_ZONE),HL STAT_CKL LD A,1 STAT_ZONE=$-1 AND #1F LD (CUR_Y),A LD HL,STAT_KEYS LD BC,STAT_ZONE LD DE,STAT_CKL XOR A ;! CALL REST_ZONE LD HL,0 WINDOW_TXT=$-2 CALL PRINT_T_AT JR STAT_CKL INKEY WAIT_FAST=$+1 WAIT=$+2 LD BC,#101 WAIT_F_CKL PUSH BC LD IY,0 ;IY ;CAPS_FLAG=$-1 ;0:NO 1:CAPSLOCK EXTKEY IFN onint LD A,201 LD (-1),A ;что мы запороли? EI HALT ;im1 портит #5C00..8, 23670/1 DI ELSE LD C,#12 ;KBD_SPEED DJNZ $ DEC C JR NZ,$-3 ENDIF CALL _28E JR NZ,EXTKEY ;KEY_END CALL _31E JR NC,KEY_END LD E,A LD D,#CC ;(IY+1) LD C,HY ;0 ;(IY+7) CALL _334 ;A=ASCII SYM CP #80 INC HY ;=1 JR NC,EXTKEY KEY_END POP BC JR NC,NEW_KEY LD E,A CP 0 LAST_KEY=$-1 LD (LAST_KEY),A JR Z,NORM_KEY NEW_KEY LD BC,#20F;A,#18 ;LD (WAIT_FAST),A ;LD B,2 ;? 1 нельзя-самоввод:( NORM_KEY DJNZ WAIT_F_CKL ;WAIT_FAST=$+1 LD A,C;1 LD (WAIT),A ;LD A,1 ;? ;LD (WAIT_FAST),A BEEP IFN beeps ;LD A,(COLOR) ;RRA ;RRA ;RRA SOUND=$+1 LD BC,#0418 ;LD A,24 ;XOR 0 ;LD ($-1),A LD A,C OUT (-2),A DJNZ $ XOR C OUT (-2),A ELSE XOR A OUT (-2),A ENDIF CANCEL_TEST CALL _8020 RET C JR CANC1 W_PAN_DATA LD E,(HL) INC HL LD D,(HL) ;INC HL LD (REFR),DE LD DE,7 ADD HL,DE LD (START_ZONE),HL PUSH HL POP IX LD A,1 PANEL_Y=$-1 LD (CUR_Y),A W_DREFRESH LD HL,(ADR) LD (#FFC0),HL LD HL,#FFC2 LD (TABL_ADR),HL CALL 0 REFR=$-2 LD A,(CUR_Y) LD (PANEL_Y),A ;LD A,0 ;UD8=$-1 ;LD (SUD8_1),A LD A,(PANEL_JR) LD HL,FILER_END AND (HL) CALL NZ,PC_CUR_PUT LD A,-WDR_JR+W_DREFRESH-1 LD (WDR_JR),A LD HL,PANEL_KEYS LD BC,PANEL_ZONE LD DE,REFR+2 LD A,#B ;STAT_END CALL REST_ZONE JR W_DREFRESH WDR_JR=$-1 CANC1 JP CANCEL PC_CUR_PUT LD IY,PC_CUR_DAT LD HL,0 L_PC_CUR=$-2 LD A,(COLOR) CALL PC_CURSOR LD BC,#1601 ;1C01 ;FL6=$-1 LD (PCC_SP),SP LD SP,BUFFER+#C0 LD DE,(REG_PC) PCCPCKL POP HL XOR A SBC HL,DE JR Z,PC_CUR_ON INC C DJNZ PCCPCKL LD SP,STACK-2 PCC_SP=$-2 PC_CUR_COM ;C9/0 RET ;LD SP,STACK POP AF EX DE,HL LD (ADR),HL ;=REG_PC JR W_DREFRESH+3 ; PC_CUR_ON LD SP,STACK-2 LD H,A,L,C LD (L_PC_CUR),HL LD A,#38 JP PC_CURSOR PC_CUR_DAT=$-1 DB 7,25 ; REST_ZONE LD (STAT_END),A LD (NO_REFR_JP),DE LD (KEYTAB_ADR),HL LD (ZONE_VAR),BC RESTORE_Z LD HL,(ZONE_VAR) LD D,(HL) LD A,(HL) AND A JR NZ,ZONE_REFR LD HL,CUR_Y IFN xxx LD A,10 ELSE LD A,10+4 ENDIF CP (HL) JR NC,ZONE_REFR LD (HL),A ZONE_REFR CALL FIND_ZONE LD A,#70 COLOR_CUR=$-1 CALL PANEL_CUR NO_REFR LD IX,(START_ZONE) ;v5+5 W_KEY CALL INKEY W_KEY_JP=$-2 LD A,#C9 LD (PC_CUR_COM),A LD A,E SUB "1" CP 5 JP C,gOTO_AP LD HL,PANEL_KEYS KEYTAB_ADR=$-2 W_KSCAN LD A,(HL) AND A JR Z,W_KEY INC HL LD C,(HL) INC HL LD B,(HL) INC HL CP E JR NZ,W_KSCAN ;ZAPUSK PUSH BC CALL RES_INP SET_ACT_ZONE LD HL,(ZONE_VAR) LD D,(HL) FIND_ZONE LD A,(FILER_END) ;! LD E,A LD BC,ZONE_DELTA ;=7 LD IY,0 START_ZONE=$-2 FIND_Z_CKL LD A,(IY) LD (PANEL_ZONE),A ZONE_VAR=$-2 CP D RET Z ADD IY,BC JR FIND_Z_CKL ADR_TO_ML LD A,ML_RETURN-CWB_JR-1 JR SET_MR MEM_TO_ADR ; LD HL,(ADR) ; LD (MTA_ADR),HL LD A,MTA_RETURN-CWB_JR-1 SET_MR LD (CWB_JR),A KEY_ENTER LD L,(IY+3) LD H,(IY+4) PUSH HL ENTER_SET CALL RES_INP ;FOR SET_BREAK ??? LD A,(PANEL_Y);FOR FIND ENTER_SET2 LD C,A LD HL,BUFFER+#BE ADD A,A ADD A,L LD L,A LD A,C ; ADD A,0 ;UD4=$-1 LD C,(HL) INC HL LD B,(HL);BC=DE=ADR MEMOR LD E,C ;A=Y OF CURSOR LD D,B ;Zf=0 Cf=0 RET PC_TO_CUR CALL ENTER_SET LD (REG_PC),BC AUTO_ENT LD E,#D RET SET_AP LD A,1 OUT (-2),A CALL INKEY LD A,E SUB "1" ;;RET C CP 5 RET NC LD HL,AP_BUF ADD A,A ADD A,L LD L,A LD DE,(ADR) LD (HL),E INC L LD (HL),D RET SET_USER LD A,(WBANK) ;HL(STS_BANK) CALL BANK_PUT ;BANK_PUT_0 LD HL,USER JR PUT_ADR gOTO_AP LD HL,AP_BUF ADD A,A ADD A,L LD L,A LD E,(HL) INC L LD D,(HL) EX DE,HL JR PUT_ADR MEMORYSET LD A,1 CALL ENTER_SET2 JR $+5 ENTER_ADR CALL ENTER_SET LD HL,(ADR) SBC HL,DE PUSH HL LD H,A,L,1 LD A,(PANEL_JR) AND A JR Z,$+4 ;LIST_AD LD L,9 CALL INPUT_W POP BC JR ADD_ADR PAGE_UP ; LD A,(PANEL_JR) ; AND A ; LD A,-22 ;FLP=$-1 ; JR Z,$+5 ; ADD A,A,A,A,A,A ; LD C,A LD C,(IX-6) ADD_AC LD B,-1 LD HL,(ADR) ADD_ADR ADD HL,BC PUT_ADR LD (ADR),HL RET PAGE_DOWN LD HL,(NEXT_ADR) DEC L LD D,(HL) DEC L LD E,(HL) EX DE,HL JR PUT_ADR MEM_TO_PC LD HL,(REG_PC) JR PUT_ADR RETURN_MTA ; LD HL,0 ;TA_ADR=$-2 LD HL,(P_BUF_ADR) BIT 7,L RET NZ LD E,(HL) INC L LD D,(HL) INC L LD (P_BUF_ADR),HL EX DE,HL JR PUT_ADR KEY_LEFT OR E ;A=0 E=FILER_END JR Z,PAGE_UP LD D,(IY+5) JR KEY_LR KEY_RIGHT OR E JR Z,PAGE_DOWN LD D,(IY+6) KEY_LR CALL STIR_CUR CALL FIND_ZONE JR ZONRRR KEY_UP ;E=FILER_END LD A,(CUR_Y) DEC A LD D,A JR NZ,CUR_NORM SCROLL_DOWN LD C,-8 CALL ADD_AC LD A,(PANEL_JR) AND E ;=FILER_END JR Z,UP_ADR INC HL,HL,HL LD B,4 DIS_SCKL PUSH BC INC HL PUSH HL LD B,H,C,L CALL IPRDIS_INS EX DE,HL LD HL,(#FFC0) AND A SBC HL,DE POP HL POP BC ;? JR Z,UP_ADR DJNZ DIS_SCKL JR PUT_ADR UP_ADR LD (ADR),HL LD (#FFBE),HL PUSH HL ; LD DE,#D0C1;/#C841 DOWN ;D_11=$-1 ;UDP2=$-2 LD H,(IX-5) ;SZ YDOWN LD A,#D6 ;SUB N CALL SCROLL ;LD HL,(SUD2-1) LD H,(IX-3) POP BC CALL PANEL_LINE LD DE,-1 LD HL,-3 LD BC,-2-#FFBE;! LDDR JR ZONRRR CRDOWN CALL ENTER_SET INC HL LD (TABL_ADR),HL ;BC=CUR_ADR LD H,A;=Y OF CUR CALL REFR_L_C2 CALL SET_ACT_ZONE KEY_DOWN LD A,(CUR_Y) ; INC A ; CP 23 ;FL4=$-1 CP (IX-5) JR Z,SCROLL_UP INC A IFN xxx CP 11 ELSE CP 11+4 ENDIF LD D,A JR C,CUR_NORM LD A,1 PANEL_ZONE=$-1 AND A JR Z,SCROLL_UP CUR_NORM CALL STIR_CUR LD A,D LD (CUR_Y),A ZONRRR ;LD A,2 ;LD (WAIT_FAST),A POP AF ;ANTI_CALL JP 0 NO_REFR_JP=$-2 ; SCROLL_UP LD HL,(#FFC2) LD (ADR),HL ; LD DE,#C021;UP ;D_12=$-1 ;??? ;UDP1=$-2 LD H,(IX-3) ;SCROLLZONE Y LD A,#C6 ;ADD A,N CALL SCROLL ;LD HL,(SUD3-1) ;DEC H LD H,(IX-5) LD BC,(BUFFER+#EC) NEXT_ADR=$-2 CALL PANEL_LINE LD HL,0 TABL_ADR=$-2 LD (HL),C INC HL LD (HL),B LD HL,#FFC2 LD DE,#FFC0 LD B,1 ;LD BC,46 LDIR JR ZONRRR SCROLL LD (SC_OPR1),A LD (SC_OPR2),A LD L,(IX-4);SCROLLZONE X ;H=SCROLLZONE Y CALL AT LD DE,(POS) ;LD A,(PANEL_JR) ;AND A ;LD A,#1E ;JR NZ,LIST_SC ;LD A,E ;ADD A,6 ;LD E,A ;LD A,25 ;IST_SC LD (SCROLL_LEN),A EXX LD B,(IX-1);SCROLLZONE HEIGHT 21 ;SFL3=$-1 SCR_CKL_2 EXX LD H,D LD A,E SC_OPR1 ADD A,#20 LD L,A JR NC,PRODSCR LD A,H SC_OPR2 ADD A,8 LD H,A PRODSCR LD A,7 ;8??? SCR_CKL_1 PUSH HL,DE ;LD BC,#1E ;SCROLL_LEN=$-2 LD C,(IX-2) ;SCROLLZONE WIDTH LD B,0 LDIR POP DE,HL INC H,D DEC A JR NZ,SCR_CKL_1 LD B,#F9 ;F8??? ADD HL,BC EX DE,HL EXX DJNZ SCR_CKL_2 RET STIR_CUR LD A,0 COLOR2=$-1 PANEL_CUR LD HL,1 CUR_Y=$-2 PC_CURSOR ; LD BC,0 ;UD8_1=$-2 ; ADD HL,BC DB "))))) LD C,(IY+1) LD B,#D8 ;/58 MD_3=$-1 ADD HL,BC LD B,(IY+2) LD (HL),A INC L DJNZ $-2 RET INPUT_W_D EX DE,HL LD (WORD_ADR),HL LD C,(HL) INC HL LD B,(HL) EX DE,HL CALL INPUT_W ;BC=HL=WORD LD (0),HL WORD_ADR=$-2 RET INPUT_B_D LD A,(DE) PUSH DE CALL INPUT_B POP DE LD (DE),A RET ML_TO_SP LD BC,(REG_SP) XOR A ML_RETURN LD (ML_ADR),BC ;JR $+6 JR MLTA_RET MTA_RETURN LD SP,P_BUFFER P_BUF_ADR=$-2 LD HL,(ADR) PUSH HL LD (P_BUF_ADR),SP LD (ADR),BC MLTA_RET LD SP,STACK-2 LD HL,#21C5 LD (PR),HL MTA_R2 LD (CWB_JR),A RET CONV_W_BUF ;SOHR HL XOR A JR $+2 CWB_JR=$-1 LD DE,BUFFER+5 LD (DE),A LD E,A ;DE=BUFFER LD A,1 DEC_HEX=$-1 AND A LD (CURSOR),A JR Z,DECPW CALL HEXP LD A,C JR PUT_2_HEX DECPW LD E,4 ;2byte only PUSH HL LD H,B,L,C LD A,B OR C JR NZ,DCPWCKL LD A,"0" LD (DE),A DEC E DCPWCKL ;DIV_HL_C ;HL=HL/C LD BC,#110A ;DE=DE XOR A ;B=0 DIV_CKL ;A=OSTATOK RLA SUB C JR NC,$+3 ;DIV_1 ADD A,C ;DIV_0 CCF ADC HL,HL DJNZ DIV_CKL LD C,A OR H,L LD A,"0" JR NZ,$+4;DEC_NUM LD A," " ADD A,C PUT_DEC LD (DE),A DEC E LD A,E INC A JR NZ,DCPWCKL POP HL RET CONV_B_BUF ;SOHR HL LD B,A LD DE,BUFFER+3 XOR A LD (DE),A LD E,A ;DE=BUFFER LD A,(DEC_HEX) AND A LD (CURSOR),A JR NZ,HEXP ;DECP LD E,2 LD C,B LD B,A;=0 JR DECPW+2 HEXP LD A,"#" LD (DE),A INC E LD A,B PUT_2_HEX PUSH AF RRCA RRCA RRCA RRCA CALL pUT_HEX POP AF pUT_HEX AND 15 ADD A,#90 DAA ADC A,#40 DAA IFN small OR 32 ENDIF lixl LD (DE),A INC E XOR A LD (DE),A ;EOL RET HDUMPPR ;DE=ADDR OF HEX ;DAMP BYTES CALL AT ;HL=AT YX HDPCKL LD A,(DE) AND A RET Z CALL PR2INC_DE LD A," " CALL PR JR HDPCKL CONV_HDBUF ;DE=HD;HL_SOHR;C=MAIN_LEN ;B=BYTE_LEN EXX LD DE,BUFFER EXX CHD_B_CKL INC DE LD A,(DE) EXX CALL PUT_2_HEX ;LD (DE),A;=0=EOL EXX DEC C DJNZ CHD_B_CKL RET Z CHD_1F LD A,#1F INC DE EXX LD (DE),A INC E CALL lixl ;LD (DE),A ;INC E ;XOR A ;LD (DE),A EXX DEC C JR NZ,CHD_1F RET PRINT_HB ;PRINT_A;HL=COORDS PUSH DE LD DE,BUFFER CALL PUT_2_HEX ;A=0 LD E,A CALL PRINT POP DE RET CONV_BUF_B LD DE,BUFFER+2 JR $+5 CONV_BUF_W ;BUFFER_TXT TO WORD=BC LD DE,BUFFER+4 LD A,(BUFFER) CP "#" JR Z,HEXC_W_B ;DECC_W_B LD BC,0 LD HL,1 DCCWCKL LD A,(DE) ;INP_DEC CP " " JR Z,DCC_IGN CP #3A CCF RET C SUB "0" RET C PUSH HL;STEPEN PUSH BC LD C,L,B,H LD HL,0 JR Z,zERO MUL_CKL ADD HL,BC;UMN DEC A JR NZ,MUL_CKL zERO POP BC ADD HL,BC EX (SP),HL;(SP)=WORD;HL=STEP ADD HL,HL LD C,L,B,H ADD HL,HL ADD HL,HL ADD HL,BC;*10 POP BC ;=WORD DCC_IGN DEC E LD A,E INC A ;=0 IF A=E=FF JR NZ,DCCWCKL LD A,C ;Cf=0 RET HEXC_W_B BIT 1,E LD E,1 JR NZ,INP_2_HEX CALL INP_2_HEX RET C LD B,A ;** (HL) INP_2_HEX LD HL,BYTEBUF CALL INP_HEX RET C INP_HEX LD A,(DE) INC E SUB "0" RET C CP 10 JR C,C_H_T2 AND #DF SUB 7 CP #A RET C CP #10 C_H_T2 CCF RET C RLD LD A,0 BYTEBUF=$-1 LD C,A RET ;INPUT VARS ;LENGTH DB 0 ;IN TEXT ;BUFEND DW 0 ; ... ;CURSOR DB 0 ; ... ;OUTPOS DW 0 ; ... ;C - TXT_LEN ;H - Y COORDINATE ;L - X COORDINATE ;NO INSERT ;NEW DELETE... INPUT_1F LD A,#1F LD (ULINE),A INPUT XOR A LD (CURSOR),A INPUTC LD (OUTPOS),HL LD B,'BUFFER XOR A LD (BC),A;=EOL LD HL,CWB_JR CP (HL) JP NZ,MTA_R2 ACCEPT LD HL,0 OUTPOS=$-2 LD DE,BUFFER CALL PRINT IPRINT=$-2 CALL PUT_ICUR CALL INKEY ;GETKEY CALL PUT_ICUR ;SOHR_DE LD A,E SUB "A" AND #5F CP 26 LD A,E JR NC,NO_SMALL XOR #20 C_L=$-1 NO_SMALL IFN downs CP #A JR NZ,$+7 XOR A LD (CRD_JR),A RET ENDIF CP #D RET Z LD HL,ACCEPT PUSH HL LD HL,BUFFER CURSOR=$-2 CP 6 JR Z,CAPS_LOCK CP 8 JR Z,CRLEFT CP 9 JR Z,CRRIGHT ;CP #C ;JR Z,DELETE CP " " JR C,DELETE LD (HL),A CRRIGHT INC HL LD A,(HL) AND A JR NZ,pUT_POS CRLEFT INC L DEC L RET Z DEC L pUT_POS LD (CURSOR),HL RET DELETE INC L DEC L RET Z DEC L LD (HL)," " ULINE=$-1 JR pUT_POS CAPS_LOCK LD HL,C_L LD A,#20 JR xorHL SET_DOS LD A,#38 LD HL,DOS_JR JR xorHL SET_DECHEX LD HL,DEC_HEX XOR_1HL LD A,1 xorHL XOR (HL) LD (HL),A RET DIS_LABEL LD HL,HHH_IGN+1;PRINT_WLAB+1 LD A,3 JR xorHL ;XOR (HL) ;LD (HL),A ;LD (HHH_IGN+1),A ;RET SET_REDIS LD HL,REFR_OPER CALL XOR_1HL LD HL,ReD_TXT JR XOR_1HL SET_IND LD HL,Ind_TXT JR XOR_1HL SET_ST_DOS LD HL,StD_TXT JR XOR_1HL IFN trfind SET_ST_FND LD HL,StF_TXT JR XOR_1HL ENDIF IFN user SET_ST_USE LD HL,StU_TXT JR XOR_1HL ENDIF IFN trbank SET_TR_BAN LD HL,STEP_B_JR ;STEP_B_JR=$-1;NO_LD_AHL/ BN_NO_BANK LD A,BN_NO_BANK-STEP_B_JR-1 XOR (HL) LD (HL),A LD HL,TrB_TXT JR XOR_1HL ENDIF SET_TR_CALL ;LD A,NO_TR_CALL-STC_JR-1 ;LD HL,STC_JR ;XOR (HL) ;LD (HL),A LD HL,TrC_TXT JR XOR_1HL INPUT_REWR ;DE=TEXT_ADR PUSH HL ;XY PUSH DE PUSH HL EX DE,HL LD DE,BUFFER LD B,E LD A,C ;TXT_LEN LDIR LD C,A POP HL PUSH BC CALL INPUT LD HL,BUFFER POP BC,DE PUSH HL LDIR POP DE;=BUFFER POP HL PRINT JR $+2 ;PRINT_AT_JR CALL AT;DE - INC PRN_CKL LD A,(DE) INC DE CP " " JR Z,$+2 PR_SP_JR=$-1 AND A ;END_OF_LINE:0 RET Z CALL PR JR PRN_CKL PUT_ICUR LD A,(CURSOR) LD L,A ADD A,A HD_OPER NOP ;/ADD A,L SRL A LD HL,(OUTPOS) ADD A,L LD L,A CALL AT LD HL,MASK_TABL LD A,(JRT_POS) ADD A,L LD L,A LD C,(HL) INC HL LD B,(HL) LD HL,(POS) DEC H X_CUR_CKL LD A,(HL) XOR C LD (HL),A INC L LD A,(HL) XOR B LD (HL),A DEC L INC H LD A,H AND 7 JR NZ,X_CUR_CKL RET ;QUICK PR 6*8,Ver 4 ;(C) STALKER'96 ;FNT 6*7(X),LEFT,COMPRESED AT PUSH HL ;PERED PR, H<=Y 0..23 LD A,L ;L<=X 0..41 ADD A,L ;PORTIT AF ADD A,L INC A ;SDVIG NA +2 BITA LD L,A XOR A SRL L RRA SRL L RLA RLA ADD A,A LD (JRT_POS),A LD A,H AND 7 RRCA RRCA RRCA ADD A,L LD L,A LD A,H AND #18 ADD A,#C1 ;#41=SCREEN AT_MD=$-1 LD H,A LD (POS),HL POP HL RET NORM_PR DEC C LD A,(HL) ADD A,A ADD A,A JR WRRD_OK LD HL,BUFFER PR_BUF_ADR=$-2 LD (HL),A INC L JR NZ,pR_B_OK INC H IFN disdisk XOR A LD (DD_NEXTSEC),A ENDIF pR_B_OK LD (PR_BUF_ADR),HL RET IF eol PREOL LD A,13 JR PR ENDIF IFN romfont IFN rus NPRROM_ LD B,H ;15 ADD HL,HL ADD HL,BC LD BC,-15*#300+FNT-#80 ADD HL,BC LD BC,#500 JR INP_CHB ENDIF ENDIF YE_WR LD A,C INC C JR WRRD_OK PR2INC_DE CALL PR_INC_DE PR_INC_DE LD A,(DE) INC DE ;IF romfont CALL TAKE_SYM+3 ;IF rus ; AND #7F ; CP " " ; JR NC,PR ; LD A,#1F ;ELSE ; CP " " ; JR NC,$+4 ; LD A,#1F ;CP -14 ;JR NC,$-4 ;ENDIF ;ENDIF PR PUSH BC ;#C5,#21 LD HL,0 POS=$-2 ;не слишком далеко от PR_BUF_ADR PBA=PR_BUF_ADR-1-POS DISPLAY "PBA=",-PBA,"(<#80)" PUSH_BUF=PBA*256+#18 EXX IF romfont LD H,0 LD B,H LD C,A IF rus ADD A,A;<128 ENDIF LD L,A IFN rus ADD HL,HL ENDIF ADD HL,HL ADD HL,BC LD BC,FNT-140;-5*28 ADD HL,BC LD BC,#500 ELSE LD H,15 IF rus ADD A,A CP #9C*2 JR NZ,$+4 LD A,"-"*2 CP #9D*2 JR NZ,$+4 LD A,"+"*2 LD L,A ADD HL,HL ADD HL,HL INC L CP #A0*2 JR NC,$+5 LD HL,SETKA LD BC,#700 ELSE IF rusend CP #F2 JR NC,rusNET ENDIF IFN rushole CP #B3 JR C,rusHok CP #DB JR C,rusNET SUB #DB-#B3 rusHok ENDIF CP #1C JR NZ,$+4 LD A,"-" CP #1D JR NZ,$+4 LD A,"+" CP #20 JR NC,$+4 rusNET LD A,"-" LD C,A ADD A,A LD L,A JR C,NPRROM_ ADD HL,HL ADD HL,HL INC L LD BC,#700 ENDIF ENDIF INP_CHB LD A,(HL) ADD A,A IFN rus BIT 7,H JR Z,WRRD_OK ;IF romfont JR C,YE_WR NO_WR ADD A,A JR NC,WRRD_OK LD C,A ;ENDIF ELSE IF romfont JR C,YE_WR NO_WR ADD A,A JR NC,WRRD_OK LD C,A ENDIF ENDIF WRRD_OK EXX LAST_PR JR SDV_0 JRT_POS=$-1 JR SDV_0 JR SDV_1 JR SDV_2 ;SDV_3 LD C,0 ADD A,A RL C ADD A,A RL C LD B,A LD A,(HL) AND #FC OR C LD (HL),A INC L LD A,(HL) AND #F JR PR_2_BYTE SDV_2 RRCA RRCA LD B,0 RRA RR B RRA RR B XOR (HL) AND #F XOR (HL) LD (HL),A INC L LD A,(HL) AND #3F PR_2_BYTE OR B LD (HL),A DEC L PR_1_BYTE INC H EXX BIT 0,C JP NZ,NORM_PR INC HL DJNZ INP_CHB INC B EXX XOR A BIT 2,H JR NZ,LAST_PR POP BC LD HL,JRT_POS LD A,(HL) AND A JR NZ,JRT_NE LD (HL),6 RET JRT_NE DEC (HL),(HL) INC_POS LD HL,POS INC (HL) RET SDV_0 XOR (HL) AND #FC JR SDV1Q SDV_1 RRCA RRCA XOR (HL) AND #3F SDV1Q XOR (HL) LD (HL),A JR PR_1_BYTE ;DISPLAY "'PRINT='HDUMPPR" ;DISPLAY /T,PRINT,HDUMPPR