;z80 ;zx-spectrum ;assembler ;todo ANYSCREEN (LDIR #4000,NO INDICATE)+ALASM res ;KILL REDISASM?KILL BUFFER? v1="5 v2="+ v3="7 oldres=1 ;54 splash=0 _3d13=0 ;-117 sp=#4020 тормоз и глюк rus=1 ;657(654) romfont=1 ;-489 disdisk=0 ;829:( small=romfont ;-2 mega=1 ;-2 reswin=1 ;12 beeps=1;1 ;11 downs=1 ;9 xxx=0 ;28 ssk=1;1 ;6 drives=1-_3d13 ;38/27 ss1,fix=10 windows=1 ;86 titl=1 ;63 shad=1 ;23 scrolls=1;1 ;6 sinc=1 ;24 trbank=1;1 ;29 user=1;1 ;37 userarea=1 trfind=1;1 ;64 eof=0 ;10 ? eol=1-disdisk ;8 ? ;P_BUF_END=#FF40 P_BUFFER=#FF80 BUFFER=#FF00 DD_BUF=#4000 ;#9000 !!!!! LOCEND_BUF=#5AFF VECTOR=#FF1C ENT_TXT=#FF80 ENT_BUFFER=#FF98 _8020=8020 _28E=#28E _31E=#31E _334=#334 RES=23698 ORG #DB00 LD (QUIT_SP),SP ;;;выход из резидента rETURN_COM LD (RES+6),SP RES_ADR6=$-2 LD SP,RES+6 ;глюки при прерывании... RES_ADR6A=$-2 PUSH BC,AF LD A,R ;???может прибиться IFF DI LD BC,#7FFD LD A,#1F WBANK3=$-1 ;OUT (C),A DB #ED,0 jP_OUT_COM=$-1;:0/#79 JP jP_RETURN ;<= IN RESIDENT REND_LEN=$-rETURN_COM ;;;вход в резидент JUMP_RES OUT (C),A LD BC,0 JUMP_BC=$-2 LD A,0 JUMP_A=$-1 EI_DI DI RSTART_LEN=$-JUMP_RES ;=8 RES_LEN=RSTART_LEN+4+REND_LEN ;поставить брякпойнт SET_BREAK CALL REST_BREAK ;грохнуть старый брякпойнт CALL ENTER_SET ;BC=DE=адр.курсора BREAK_PSET LD (BREAK_PC),DE LD HL,BREAK_BUF-1 LD B,3 CALL MEM_STS_COPY ;HL=BRET_CODE-1 BREAK_PUT EXX CALL RES_PUT EXX LD DE,0 BREAK_PC=$-2 LD B,3 CALL MEM_STS_COPY JP RES_INP BREAK_BUF DS 3 ;что запорол брякпойнт ;BRET_CODE JP RES+RSTART_LEN+3 ;=+11 RES_ADR11=$-2 TRACE_GO LD A,(TrC_TXT) RRCA LD A,NO_TR_CALL-STC_JR-1 JR C,$+3 XOR A LD (STC_JR),A LD HL,TRACE_SIM ;CALL ENTER_END+3 LD (W_KEY_JP),HL LD A,(Ind_TXT) RRCA LD SP,STACK IFN trfind JP C,CANCEL+6 ELSE JR C,CANCEL+6 ENDIF LD A,(BANKS) ;MEM_BANK AND 8 CALL NZ,SCR_SET ;!!! TRACE_CKL CALL TRACE_SIM CALL STEP_Z80 JR TRACE_CKL TRACE_SIM LD A,#7F IN A,(-2) RRCA JR NC,TRACE_END LD A,(StD_TXT);#9D=ON RRCA JR NC,NO_TestDOS LD A,(DOS_JR) CP #18 JR NZ,TRACE_END;IN DOS NO_TestDOS IFN trfind LD A,(StF_TXT);#9D=ON RRCA CALL C,TRACE_FIND ENDIF LD HL,(REG_PC) LD DE,(TR_STOP_A) AND A SBC HL,DE JR Z,TRACE_END ;NZ! IFN user LD A,(StU_TXT);#9D=ON RRCA CALL C,USER JR Z,TRACE_END ENDIF LD A,(TrC_TXT);#9D=ON RRCA LD E,":" RET C LD E,"`" RET DISPLAY $," DON'T CROSS PARAGRAPH!" MASK_TABL DB #FC,0 DB #3F,0 DB #F,#C0 DB #3,#F0 IFN trfind TRACE_FIND CALL RES_INP LD DE,(REG_PC) LD BC,FIND_BUF+1 ;!!! LD HL,F_MASK_BUF+1;!!! TF_CP_CKL CALL RES_IO ;A<=(DE) INC DE LD HY,A LD A,(BC) XOR HY AND (HL) RET NZ INC BC,HL LD A,L CP FINDE+1 TF_END_TST=$-1 JR NZ,TF_CP_CKL ;JR TRACE_END ENDIF TRACE_END ;LD HL,INKEY ;LD (W_KEY_JP),HL ;RET JR CANCEL jP_RETURN LD SP,STACK JUMP_SP=$-2 ;для выхода из JP/CALL? CALL REG_SAVE JR CANCEL JP_RET_JR=$-1 ;!!! LD HL,(BREAK_PC) LD (REG_PC),HL ;JP REST_BREAK REST_BREAK LD HL,BREAK_BUF-1 CALL BREAK_PUT LD (BREAK_PC),BC;=0 RET RET_STEP ;JR from JP_RET_JR LD A,1 JP ADD_IR ;STEP_END2 dIS_LIST_S LD HL,PANEL_JR LD A,DISASM-PANEL_JR-1 XOR (HL) LD (HL),A LD HL,PANEL_ZONE LD A,(HL) AND A JR NZ,$+3 INC (HL) JR CANCEL JmpFrAlm DISPLAY "JUMP FROM ALASM=",$ DI LD (QUIT_SP),SP CANCEL LD SP,STACK CALL START;RESTORE_VARS всегда START_JP=$-2 LD A,(WBANK) ;RESTORE_MEM_BANK AND 8 MD_SCR_COM CALL Z,SCR_SET LD HL,FILER_END XOR A LD (L_PC_CUR),A CP (HL) JR NZ,NOT_FILER LD (HL),":" LD HL,(FSTART) OR H,L JR Z,NOT_FILER LD (ADR),HL NOT_FILER JR DISASM PANEL_JR=$-1 LIST CALL WINDOW DB 2,0,0,32,24,0 DB 0,0,0 DW LIST_REFR ; SCROLL ZONE DPgUp YDN X,Y,W, H ; B S S S B S DEFB -21*8,22, 1,1,30,21 DB 1,1,4 DW ENTER_ADR,#203 DB 2,6,18 DW ENTER_DUMP,#301 DB 3,25,6 DW ENTER_TEXT,#102 DISASM CALL WINDOW ;FL5=$+4 ;UD12=$+2 DB 2,0,0,32,24,0 ;UD29=$+1 IFN xxx DB 2,10 ELSE DB 2,14 ENDIF IFN small DB "int",0 ELSE DB "INT",0 ENDIF DW DIS_REFR ; SCROLL ZONE DPgUp YDN X,Y,W, H ; B S S S B S DEFB -21, 22, 9,1,25,21 DB 0,0,7 DW ENTER_REG,#103 DB 1,7,4 DW ENTER_ADR,#200 DB 2,11,7 DW ENTER_CODE,#301 DB 3,#12,#E DW ENTER_ASM,2 SCR_SET LD A,(BANKS) ;MEM_BANK XOR 8 JR BANK_PUT BANK_SET LD HL,#1726 LD A,(BANKS) CALL INPUT_B BANK_PUT_M OR 8 MD_8_BANK=$-1 BANK_PUT IF mega AND #DF ENDIF LD (BANKS),A LD (BANK3),A AND #18 OR 0 WBANK_0=$-1 LD (WBANK),A LD (WBANK3),A LD BC,#7FFD OUT (C),A AND 8 LD (MD_8_BANK),A RET BANK_TEXT DB #21,#17 ;UD5=$-1 DB 14,2 BANK3 DB #18 DB 0,0,0 REG_TXT IFN small DB "pc" DB "sp" DB "ix" DB "iy" DB "hl" DB "de" DB "bc" DB "af" DB "ir" IF xxx DB "hl" DB "de" DB "bc" DB "af" ENDIF ELSE DB "PC" DB "SP" DB "IX" DB "IY" DB "HL" DB "DE" DB "BC" DB "AF" DB "IR" IF xxx DB "HL" DB "DE" DB "BC" DB "AF" ENDIF ENDIF FLAG_TXT DB "SZ5H3PNC" ;commented for fixed AL_ASMBANK ;IFN disdisk DD_NAME=$-7 DB "0" ;ENDIF DIS_REFR LD HL,DIS_LINE CALL REFR_START REG_PR LD DE,REG_PC EXX CALL RES_INP ;LD HL,(SUD12-1) LD H,0 LD BC,#C000 ML_ADR=$-2 CALL LIST_LINE ;INC H ;LD L,0 LD HL,#100 LD DE,REG_TXT IFN xxx LD B,9 ELSE LD B,9+4 ENDIF REG_CKL PUSH BC CALL AT PUSH HL,HL CALL PR2INC_DE IFN xxx LD A,B SUB 2 CP 4 JR NC,$+7 SXX=$+1 LD A," " ELSE LD A,B CP 5 JR NC,$+7 LD A,"'" ENDIF CALL PR EXX EX DE,HL LD C,(HL) INC HL LD B,(HL) INC HL EX (SP),HL LD L,3 CALL PRINT_W POP DE EXX POP HL INC H POP BC DJNZ REG_CKL PUSH HL LD L,6 CALL AT LD A,#1C INT_TXT=$-1 CALL PR POP HL INC H CALL AT LD BC,(REG_AF) ;LD C,A LD DE,FLAG_TXT LD B,8 FPR_CKL RLC C LD A,(DE) INC DE JR C,$+4 LD A," " CALL PR DJNZ FPR_CKL PRINT_BANK ;TODO PRINT RESIDENT??? LD HL,BANK_TEXT JP PRINT_T_AT REG_SAVE LD (SSP1),SP LD A,#1D ;TODO ROSHIN FIX? JP PO,INT_OFF JR PUT_INT INT_OFF DEC A PUT_INT LD (INT_TXT),A LD SP,ADR ;REG_END EXX EX AF,AF' PUSH AF,BC,DE,HL LD A,I LD H,A LD A,R LD L,A PUSH HL LD SP,(RES_ADR) POP HL;NOP POP AF;AF POP BC;BC POP HL;SP LD SP,REG_AF+2 PUSH AF,BC EXX PUSH DE,HL,IY,IX EXX PUSH HL ;todo DETECT CACHE (use in GET,ssZ..) IN A,(#7B) LD SP,STACK-2 SSP1=$-2 XOR A LD I,A LD A,#80-#22;+1 ;5.4 ADD_IR LD HL,REG_IR SLA (HL) RLA ADD A,(HL) RRCA LD (HL),A RET IFN xxx SET_XXX LD A,(PANEL_JR) AND A RET Z LD HL,SXX LD A,7 XOR (HL) LD (HL),A LD HL,REG_HL LD DE,REG_HLX LD B,8 SWAP_X0 LD C,(HL) LD A,(DE) LD (HL),A LD A,C LD (DE),A INC HL,DE DJNZ SWAP_X0 JR REFR_REG ENDIF ENTER_REG LD HL,(CUR_Y) LD A,L IFN xxx CP 10 ELSE CP 10+4 ENDIF JR Z,ENTER_INT ADD HL,HL LD DE,REG_PC-2 ADD HL,DE EX DE,HL ; ADD A,0 ;UD32=$-1 LD H,A LD L,3 CALL INPUT_W_D JR REFR_REG STEP_COM_X XOR A JR $+4 STEP_COM LD A,NO_TR_CALL-STC_JR-1 LD (STC_JR),A ;STEP_COM_2 CALL STEP_Z80 LD A,1 LD (WAIT_FAST),A LD A,(PANEL_JR) AND A REFR_OPER ;_/Z, C9/C8 RET Z ;NZ??? REFR_REG CALL REG_PR ;REG_PR+PC_CUR+NO ;_REFR NO_REFR_2 POP AF JP REFR+2 SCREEN_SET=SCR_SET ;CALL SCR_SET ;JR NO_REFR_2 ENTER_INT LD HL,INT_TXT CALL XOR_1HL JR REFR_REG FILER_REFR LD HL,FILER_LINE JR REFR_START LIST_REFR CALL PRINT_BANK CALL RESTORE_IX LD HL,LIST_LINE REFR_START LD (LINE_SUBR),HL CALL RES_INP LD BC,(ADR) LD H,0 ;UD2=$-1 REFR_L_CKL INC H REFR_L_C2 PUSH HL CALL PANEL_LINE LD HL,(TABL_ADR) LD (NEXT_ADR),HL LD (HL),C INC HL LD (HL),B INC HL LD (TABL_ADR),HL POP HL LD A,(IX-5) CP H JR NZ,REFR_L_CKL RET PANEL_LINE JP DIS_LINE LINE_SUBR=$-2 LIST_LINE LD L,1 PUSH HL,BC CALL PRINT_W POP DE,HL PUSH DE LD B,8 LD L,B LBYTE CALL RES_IO PUSH HL CALL PRINT_HB POP HL INC L,L,L DJNZ LBYTE INC L CALL AT POP DE LD B,8 LTX_CKL CALL TAKE_SYM CALL PR DJNZ LTX_CKL LD C,E,B,D RET FILER_LINE ;BC=ADR_COORECT CALL Fadr PUSH DE POP IY LD L,1;3;for "filenam_" CALL AT ;0123456789ABCDEF0123456789ABCDEF0123456789 ; FILENAME C #5D3B #2000 #20 #A0 #02 LD C,H LD B,8 FRP_CKL CALL PR_INC_DE DJNZ FRP_CKL CALL INC_POS CALL PR_INC_DE ;FR START LD H,C PUSH HL LD L,#F LD C,(IY+9) LD B,(IY+10) CALL PRINT_W ;FR LENGTH POP HL PUSH HL LD L,#15 LD C,(IY+11) LD B,(IY+12) CALL PRINT_W ;FR LEN SEC POP HL PUSH HL LD L,#1C LD A,(IY+13) CALL PRINT_B ;FR F.TR POP HL PUSH HL LD L,#21 LD A,(IY+14) CALL PRINT_B ;FR F.SEC POP HL PUSH HL LD L,#25 LD A,(IY+15) CALL PRINT_B POP HL LD BC,16 ADD IY,BC PUSH IY POP BC SRA B RR C RET TAKE_SYM CALL RES_IO ;INC DE IF rus AND #7F CP " " RET NC LD A,#1F ELSE IFN romfont ;AND #FF ELSE CP -16 JR NC,$+5 ENDIF CP " " RET NC LD A,#1F ENDIF RET ENTER_TEXT PUSH BC LD HL,BUFFER PUSH HL PUSH AF ;A=D LD B,8 LE2CKL CALL TAKE_SYM LD (HL),A INC L DJNZ LE2CKL POP HL LD L,33 LD C,8 CALL INPUT_1F POP HL ;=BUFFER POP DE LD B,8 LE2CKL2 EXX CALL RES_INP EXX CALL RES_IO ;A,(DE) INC DE AND #80 LD C,A EXX CALL RES_PUT EXX LD A,(HL) INC HL CP #1F JR Z,$+6 ;IGNNN OR C CALL dIO ;(DE),A DJNZ LE2CKL2 JR ENTER_END ENTER_ASM LD (ASM_AT+1),A CALL INPUT_ASM JR ENTER_END ENTER_CODE PUSH AF INC HL LD E,(HL) INC HL LD D,(HL) EX DE,HL SBC HL,BC LD A,L LD DE,-5 ADD HL,DE POP DE LD E,#F JR NC,ENTER_L_OK ADD HL,BC INC HL LD B,H,C,L LD A,4 ENTER_L_OK LD HL,INPUT_HLIN JR ENT_DL1 ENTER_DUMP LD HL,INPUT_HD LD D,A LD E,8 LD A,E ENT_DL1 LD (HLIN_CALL),HL PUSH BC ;=ADR_IN_MEM PUSH DE ;=YX_COORDS ;ENTER_LOAD_MEM LD E,C LD D,B LD HL,ENT_BUFFER LD B,A ;MAIN_LEN LD (HL),B PUSH HL CALL MEM_STS_COPY POP DE;=ENT_BUFFER POP HL;=YX PUSH DE CALL 0 HLIN_CALL=$-2 CALL RES_PUT POP HL;=ENT_BUFFER POP DE;=ADR_IN_MEM LD B,(HL);<9,>1 CALL MEM_STS_COPY ENTER_END JR RESTORE_VARS CRD_JR=$-1 LD HL,AUTO_ENT LD (W_KEY_JP),HL LD A,RESTORE_VARS-CRD_JR-1 LD (CRD_JR),A JP CRDOWN RESTORE_VARS LD HL,INKEY LD (W_KEY_JP),HL LD A,(NAME_PR_AT+1) LD (ASM_AT),A LD A,#C3 LD (JPC_COM),A NORM_INP XOR A LD (HD_OPER),A LD A," " LD (ULINE),A LD HL,PRINT LD (IPRINT),HL LD A,(DE) ;FOR IHD (BIOS) RET INPUT_HD LD BC,HDUMPPR LD (IPRINT),BC LD A,#85 ;ADD A,L LD C,8 JR $+5 INPUT_HLIN LD C,4 XOR A LD (HD_OPER),A ;INPUT_HDUMP_REWRITE ;DE=ADR_HDUMP_BYTES ;HL=YX ;C=MAIN_LEN LD A,(DE) LD B,A;=BYTE_LEN PUSH DE,BC CALL CONV_HDBUF HD_REINP POP BC PUSH BC SLA C PUSH HL CALL INPUT_1F POP HL ;CONV_BUF_HD POP BC,DE PUSH DE INC DE PUSH BC EXX ;!!!CL LD DE,BUFFER EXX LD B,0 CBHD_CKL EXX CALL INP_2_HEX BIT 0,E EXX JR NC,HD_OK JR Z,HD_REINP CP #1F-"0" JR NZ,HD_REINP JR IHD_END HD_OK LD (DE),A INC DE,B DEC C JR NZ,CBHD_CKL IHD_END LD A,B AND A JR Z,HD_REINP POP BC,DE LD (DE),A JR NORM_INP QUIT CALL WINDOW DB 4,8,8,16,6,#47 DB 19,8 DB #F,#A0 DB 16,10 DB #F,8,"AS",#80+"M" DB 15,11 DB #F,8,21,#A0 ;BASIC DB 17,12 DB "Call ",22,0;TRDOS DB #A,9,14 DW QUIT_ASM,#B0C DB #B,9,14 DW QUIT_BAS,#C0A DB #C,9,14 DW CALL_DOS,#A0B QUIT_ASM IF #DFF9-$ὀ DS #DFF9-$ ENDIF LD A,#51 AL_ASMBANK=$-1 DISPLAY "AL_ASMBANK=",AL_ASMBANK LD DE,#C000 JR QUIT_PUSK QUIT_IM1 LD HL,#5C3A LD (REG_IY),HL INC L LD (HL),#CC LD HL,INT_TXT LD (HL),#1D ;EI QUIT_PUSK LD HL,0 QUIT_SP=$-2 ;Q_PUSK_2 OR #10 ;LD (BANKS),A ;v5+5 ;LD (REG_SP),HL ;LD (JP_SP),HL IM 1 ;1 CALL_START LD BC,CANCEL-JP_RET_JR-1*256+#F7 JR QUIT_INIT QUIT_BAS LD HL,#2758 LD (REG_HLX),HL XOR A LD DE,#58 JR QUIT_IM1 CALL_DOS XOR A LD (REG_IR+1),A LD A,#CD LD (JPC_COM),A LD DE,#3D00 LD A,(BANKS) JR QUIT_IM1 STEP_SUBR CALL REST_BREAK LD BC,(REG_PC) CALL IPRDIS_INS ;STEP_CALL EX DE,HL CALL BREAK_PSET SS_K LD C,-1 JR JUMP_INIT CALL_SUBR LD A,#CD LD (JPC_COM),A CALL WINDOW DB 5,7 DB 15,12 DB "CALL",0 LD HL,#C14 LD DE,REG_PC CALL INPUT_W_D ;LD DE,(REG_PC) LD E,C,D,B LD A,(BANKS) LD HL,(REG_SP) JR CALL_START ;18 JUMP_SUBR CALL WINDOW DB 5,7 DB 16,12 DB "JP",0 LD HL,#C13 LD DE,REG_PC CALL INPUT_W_D SS_J LD C,#F7 JUMP_INIT XOR A LD (PC_CUR_COM),A LD B,A LD A,(BANKS) LD DE,(REG_PC) LD HL,(REG_SP) ;1 QUIT_INIT LD (JP_SP),HL LD HL,JP_RET_JR LD (HL),B LD HL,(RES_ADR6) INC HL,HL ;+8 LD (HL),#C3 JPC_COM=$-1 INC HL LD (HL),E INC HL LD (HL),D INC HL ;1 RET_Q_ASM AND C LD (JP_BANK),A EX DE,HL LD A,(INT_TXT) RRCA SBC A,A AND #FB OR #F3 LD (EI_DI),A LD A,(REG_AF+1) LD (JUMP_A),A LD HL,(REG_AF-2) LD (JUMP_BC),HL LD HL,rETURN_COM LD BC,REND_LEN LDIR LD C,RSTART_LEN LD DE,(RES_ADR) LDIR LD (JUMP_SP),SP ;для выхода (jP_RETURN) ;JUMP_RES_PUT ;REG_LOAD LD A,128-#20 CALL ADD_IR LD R,A LD SP,REG_IX POP IX,IY,HL,DE,BC,AF EXX EXA POP AF LD I,A POP HL,DE,BC,AF EXA EXX ;LD SP,(REG_SP) JP_SP=$+1 LD SP,0 LD A,#18 JP_BANK=$-1 JP RESIDENT ;RES_JUMPER TRACE CALL WINDOW DB 4,7,7,17,12,#46 DB 18,7 DB #10,#A0 DB 19,9,"G","O"+#80 DB 12,10 DB "Indicat","e"+#80 DB 27,10 Ind_TXT DB #9C DB 12,11 DB "Re",18,#A0 DB 27,11 ReD_TXT DB #9C ;STOP IF TR-DOS DB 12,12,13,22,#A0 DB 27,12 StD_TXT DB #9D IFN trfind DB 12,13,13,"Fin","d"+#80 DB 27,13 StF_TXT DB #9C ENDIF IFN user DB 12,14,13,"Use","r"+#80 DB 27,14 StU_TXT DB #9C ENDIF DB 12,15,13,#A0 DB 17,15,"o","n"+#80 DB 24,15,1 TR_STOP_A DW 0 IFN trbank DB 12,16 DB 16,14,#A0 DB 27,16 TrB_TXT DB #9D ENDIF DB 12,17 DB 16,"CAL","L"+W DB 27,17 TrC_TXT DB #1C DB 0 DB 9,#E,3 DW TRACE_GO,#A11 DB 10,20,2 DW SET_IND,#B09 DB 11,20,2 DW SET_REDIS,#C0A DB 12,20,2 DW SET_ST_DOS,#D0B DB 13,20,2 IFN trfind DW SET_ST_FND,#E0C DB 14,20,2 ENDIF IFN user DW SET_ST_USE,#F0D DB 15,18,5 ENDIF DW SET_ST_ADR,#100E DB 16,20,2 IFN trbank DW SET_TR_BAN,#110F DB 17,20,2 ENDIF DW SET_TR_CALL,#910 SET_ST_ADR LD HL,#F18 LD DE,TR_STOP_A JP INPUT_W_D STEP_Z80 CALL RES_INP ;@@?? ;LD A,1 ;CALL ADD_IR CALL RET_STEP XOR A LD (NEW_PC+1),A LD (DEBUG_CNT),A LD (PC_CUR_COM),A LD (OVER_PREF),A LD (PREF_CNT),A LD (ED_DEB_COM),A DEC A LD (Debug_IF),A ;=#FF LD BC,(REG_PC) ;LD (OLD_PC),BC CALL DIS_IGN_PR LD A,#C5 LD (PR),A LD (REG_PC),BC ;NEXT_PC LD A,0 DEBUG_CNT=$-1 AND A JP NZ,Step_RET ;Step_Simple_Command STEP_SIMPL LD A,0 OVER_PREF=$-1 CALL ADD_IR LD DE,0 COM_ADR=$-2 CALL RES_IO ;A,(DE) INC DE IFN trbank JR NO_LD_AHL STEP_B_JR=$-1 ;NO_LD_AHL/ BN_NO_BANK NO_LD_AHL ENDIF CP #ED JR NZ,BN_OUT_A LD HL,(REG_HL+4);=REG_BC BIT 1,L ;7FFD:b15=0,b1=0 JR NZ,BN_NO_BANK BIT 7,H JR NZ,BN_NO_BANK CALL RES_IO ;A,(DE) DEC DE LD C,A AND #C7 CP #41 JR NZ,BN_NO_BANK XOR C RRCA RRCA RRCA LD C,A SUB 6 ;OUT (C),0 JR Z,OUT_0 LD HL,BN_COM_TAB LD B,0 ADD HL,BC LD C,(HL) LD HL,REG_HL ADD HL,BC LD A,(HL) OUT_0 LD HL,PREF_CNT INC (HL) BN_PUT CALL BANK_PUT_M ;MASK JP STEP_END ;B C D E H L 0 A BN_COM_TAB DB 5,4,3,2,1,0,6,7 ;nu BN_OUT_A CP #D3 JR NZ,BN_NO_BANK CALL RES_IO DEC DE BIT 1,A ;7FFD:b15=0,b1=0 JR NZ,BN_NO_BANK LD A,(REG_AF+1) BIT 7,A JR Z,BN_PUT BN_NO_BANK DEC DE LD BC,#FF COM_LEN=$-1 LD HL,(REG_SP) LD (JP_SP),HL LD HL,(RES_ADR6) INC HL CALL MEM_STS_COPY INC HL LD A,RET_STEP-JP_RET_JR-1 ;JP RETURN_LD ;JR rET_Q_ASM ;1 ;RETURN_LD ;HL=COM_ADR IN RES LD (JP_RET_JR),A LD A,(BANKS) JP RET_Q_ASM ;rET_Q_ASM Step_RET LD DE,(REG_SP) SUB 3 JR NC,Step_DJNZ LD HL,PREF_CNT ED_DEB_COM NOP ;/INC (HL) CALL IF_PC JR NZ,STEP_END CALL RES_IO ;INC DE LD L,A CALL RES_IO ;INC DE LD H,A CALL PUT_NEW+3 JR STEP_SP Step_DJNZ JR NZ,Step_CLRST LD HL,REG_B DEC (HL) CALL NZ,PUT_NEW JR STEP_END Step_CLRST ;CALL & RST SUB 3 JR NC,Step_JP_HL ;DE=REG_SP JR NO_TR_CALL STC_JR=$-1 JP STEP_SIMPL NO_TR_CALL CALL IF_PC JR NZ,STEP_END EXX CALL RES_PUT EXX LD A,B CALL dIO ;INC DE DEC DE LD A,C CALL dIO ;INC DE DEC DE STEP_SP LD (REG_SP),DE STP_END JR STEP_END Step_JP_HL JR NZ,Step_JUMP LD HL,(REG_HL) JP_HLX_REG=$-2 CALL PUT_NEW+3 JR STEP_END Step_JUMP ;JP/JR CALL IF_PC STEP_END LD A,0 PREF_CNT=$-1 ;LD E,-1;NO_KEY JP ADD_IR IF_PC LD A,0 Debug_IF=$-1 INC A JR Z,PUT_NEW DEC A SRL A INC A LD HL,FLAG_MASKS-1 FLAG_S INC HL DEC A JR NZ,FLAG_S LD A,(REG_AF) JR NC,$+3 CPL AND (HL) RET NZ PUT_NEW LD HL,0 NEW_PC=$-2 ;SET_NEW_PC LD (REG_PC),HL EXA LD A,H CP #3D JR NZ,NO_SET_DOS ;SET_DOS LD A,#20 JR SET_DOS_JR NO_SET_DOS CP #40 JR C,SET_DOS_JR+3 ;SET_BAS LD A,#18 SET_DOS_JR LD (DOS_JR),A EXA RET ;DOS_JR: JR/JR_NZ:BASIC/DOS FLAG_MASKS DB #40,1,4,#80 IFN drives SET_DRIVE LD HL,#101;#B1C LD DE,DRIVE LD C,1 CALL INPUT_REWR DRIVE=$+1 LD A,"A" SUB "A" CP 4 JR NC,SET_DRIVE IFN _3d13 LD C,1 JP DOS ELSE OR #3C LD (OUT_FF_3C),A LD DE,#1FF3 ;OUT (FF),A CALL DOS LD A,8 JP OUT_1F ENDIF ENDIF IFN disdisk DIS_DISK INCLUDE "71DASM",#C0 ENDIF INCLUDE "71FUN",#44 INCLUDE "disa72",#86 INCLUDE "biosrus",#46 IF romfont FNT DB #A2,#54,#08,#A2,00 DB #02,#02,#44,#A8,#18 DB #28,#50,#28,#A8,#A8 DB #2A,#55,#2A,#AA,#AA INCBIN "STS4FONT" IFN rus INCBIN "RUS128",#70*5 ENDIF ELSE IFN rus FNT INCBIN "rus128-",#80*5 ELSE SETKA DB #54,#AA,#54,#AA,#54,#AA,#54 ENDIF ENDIF ;DB "(C)STALKER STACK PLACED IN THIS MEMORY !" DS 40 STACK IFN oldres OLD_RES DUP RES_LEN/2 DB 0,0 ;#BE,#7A EDUP ENDIF ;MMM=#23 USER DS -$,#C9 ORG #FE62;#FEE4-125+5-10 DISPLAY "FREE=",$-USER DISPLAY "END=",USER AP_BUF DW #6000 DW #8000 DW #C000 DW #5D3B DW #5CF4 PRINT_WLAB JR $+2 ;0/3 PRWW JP PRINT_W PUSH HL PUSH BC ;=WORD LD HL,RES_WL CALL RES_SET POP BC PUSH BC LD HL,#FEF0 AL_LSTART=$-2 DISPLAY "AL_LSTART=",AL_LSTART LD D,0 EXX LD HL,(BANKS) LD A,L AND #18 OR #C3 AL_LBANK=$-1 DISPLAY "AL_LBANK=",AL_LBANK LD (LAB_BANK),A CALL RESIDENT EXX EXA PUSH HL CALL RES_INP POP DE,BC,HL EXA JR NZ,PRWW SUB 3 ;! CP 11 JR C,$+4 LD A,10 LD B,A LD A,(PRINT+1) OR A CALL Z,AT ;DE=LAB_TEXT_ADR in PGSYM LD HL,BANKS LD C,(HL) LD (HL),#18+3 LAB_BANK=$-1 PLW_CKL DEC DE CALL RES_IO ;A<=(DE) DEC DE CP #20 JP M,PLW_END CALL PR DJNZ PLW_CKL PLW_END LD A,C LD (BANKS),A RET RES_WL OUT (C),A EXX RWL_CKL LD A,(HL) AND #3F SUB 2 JR C,RWL_END;!!! LD E,A INC HL LD A,C CP (HL) INC HL JR NZ,RWL_2 LD A,B CP (HL) JR Z,RWL_E1 RWL_2 ADD HL,DE JR RWL_CKL RWL_E1 ADD HL,DE XOR A LD A,E RWL_END EXX OUT (C),H RET ;REG_RE DW 23698 ;REG_PG DW #1010 REG_PC DW #8000 REG_SP DW #5AFF REG_IX DW #0000 REG_IY DW #5C3A ;HL DE BC REG_HL DW #000,#0000,#0000 REG_B=$-1 REG_AF DW #00 REG_IR DW #3F00 ;HL' DE' BC' AF' REG_HLX DW #2758,#000,#0000,#0000 ADR DW #8000 ZONE_DELTA=7 DISPLAY "endregs=",$ ORG #FF00 INCLUDE "70START",#C7 IF userarea USER=user_ ENDIF DS -$,#C9 ORG #5B20 GO LD HL,#DB00 LD DE,#9B00 LD BC,#2500 LDIR LD BC,#7FFD LD A,#1F OUT (C),A LD HL,#9B00 LD DE,#DB00 LD B,#25 LDIR JP JmpFrAlm