;z80 ;zx-spectrum ;assembler MAIN "STS*",#C6 ;ASSEMBLER+DISASSEMBLER ;BUG IN ASSEMBLER:RES N,r,(Iz+..) W=#80 IFN small WHL="hl WIX="ix WIY="iy WA="a ELSE WHL="HL WIX="IX WIY="IY WA="A ENDIF ASM_BUFFER=#FF80;=ENT_TEXT ASM_ERROR LD A,3 OUT (-2),A LD BC,(ASM_ADR) INPUT_ASM LD (ASM_ADR),BC XOR A LD (PRINT_WLAB+1),A CALL CL_DIS_INS LD DE,ASM_BUFFER LD HL,26 ASM_AT=$-2 LD C,18 CALL INPUT_REWR LD HL,BASE_TABL ;OPER^,COMARE..,NAME+W LD C,1 LD HX,C LD A,#10 LD (ASM_FLAGS),A NAME_FIND LD A,(HL) CP -1 JR NZ,NO_END_TBL LD A,HX ADD A,A CP 8 JR Z,ASM_ERROR LD HX,A OR #10 LD (ASM_FLAGS),A INC HL LD A,(HL) NO_END_TBL AND #40 JR NZ,NAME_CP DEC C JR NZ,NAME_INC LD (ASMCOM_ADR),HL NAME_INC INC HL,HL JR NAME_FIND NAME_CP LD DE,ASM_BUFFER LD C,1 NAMECP_CKL LD A,(DE) XOR (HL) INC HL,DE AND #9F JR Z,NAMECP_CKL AND 31 JR Z,NAME_CP_OK DEC HL NAME_IGN BIT 7,(HL) INC HL JR Z,NAME_IGN JR NAME_FIND NAME_CP_OK LD A,(DE) CP 32 JR NZ,NAME_FIND INC DE PUSH DE FIND_OPER POP DE LD HL,0 ASMCOM_ADR=$-2 BIT 6,(HL);NAME? JR NZ,NAME_IGN PUSH DE LD A,(HL) AND #3F LD B,A INC HL LD A,(HL) LD (ASM_COM),A INC HL LD (ASMCOM_ADR),HL LD HL,OPER_TABL INC B BIT 7,(HL) INC HL JR Z,$-3 DJNZ $-5 OP_INP_CKL PUSH HL CALL OPER_INP POP HL JR C,FIND_OPER;ERROR BIT 7,(HL) INC HL JR Z,OP_INP_CKL POP DE PUSH_ASM CALL RES_PUT LD DE,#8000 ASM_ADR=$-2 LD HL,ASM_BYTES LD BC,#810 ASM_FLAGS=$-2 PUSH_CKL RR C JR NC,$+6 LD A,(HL) CALL RES_IO;LD(DE),A INC DE ;NOT_PUSH INC HL DJNZ PUSH_CKL RET ASM_BYTES DB 0,#CB,#ED ASM_DELT_1 DB 0 ASM_COM DB 0 ASM_DELT_2 DB 0 ASM_NM DB 0,0 OPER_INP ;HL=ADR SYM IN OPER_TABL LD A,(HL) AND #7F CP #10 JR NC,OPER_INP_2 LD HL,OPER_TOK_1 LD B,A XOR A LD C,-1 CPIR DJNZ $-2 ;B=0 =MASK_COUNT LD A,(HL) LD LX,A;MASK_DIAPAZON INC HL LD C,(HL) INC HL ;N_OPER_SYM_2 PUSH DE;=ADR SYM IN BUFF NXT_OP_SYM ;HL=ADR CHECK SYM ;C=DELTA FOR MASK ;B=COUNTER FOR MASK ;LX=MASK DIAPAZON CALL OPER_INP_2;NO_AUTOINC HL LD A,B;=MASK_COUNT JR C,TOK_IGNORE BIT 7,(HL) INC HL JR Z,NXT_OP_SYM ;PUT_OPER_BITS POP HL;NEW DE OK LD HL,ASM_COM OR (HL) LD (HL),A RET TOK_IGNORE BIT 7,(HL) INC HL JR Z,TOK_IGNORE ADD A,C LD B,A AND LX;MASK_DIAPAZON POP DE;RESTORE OLD DE SCF RET Z JR NXT_OP_SYM-1;N_OPER_SYM_2 OPER_INP_2 ;(HL)=CHECK_SYM LD A,(HL);(DE)=SYM ;IN ASM_BUFFER AND #7F ;INC DE CP 32 ;NO INC HL JR C,OPI_TOK_2 LD A,(DE) XOR (HL) AND #5F INC DE RET Z ;OPI2_OK SCF RET OPI_TOK_2 ;A=SYM ;DE=ADR CPSYM IN ASM_BUF PUSH HL,BC ADD A,A ADD A,A LD C,A LD B,0 LD HL,OPER_TOK_2+2-#40 ADD HL,BC LD BC,OPI_RET PUSH BC LD C,(HL) INC HL LD B,(HL) PUSH BC EX DE,HL PUSH HL LD DE,BUFFER LD BC,#600+") LD A,C SYM_COPY_C CP (HL) JR Z,$+6 LDI DJNZ SYM_COPY_C LD (END_N_SYM),HL LD A,32 LD (DE),A INC E ;DE>BUFFER=#FF00 LD (DE),A INC E LD (DE),A INC E LD (DE),A POP DE;BEG_SYM_ADR RET OPI_RET LD DE,0 END_N_SYM=$-2 POP BC JR C,$+7 LD HL,ASM_FLAGS OR (HL) LD (HL),A POP HL RET INPUT_HXLX CALL XY_TEST JR NZ,IHL_OK ;IHL_CB TST LD A,(ASM_FLAGS) AND 2 SCF RET NZ JR IHL_OK XY_TEST LD A,(DE);Zf=1 IF X OR Y AND #DF;SMALL CHAR INC DE LD C,#DD CP "X RET Z LD C,#FD CP "Y RET Z DEC DE LD C,0 RET INPUT_HL LD A,(DE) AND #DF;SMALL CHAR INC DE CP "I JR Z,XY_CP CP "H SCF RET NZ LD A,(DE) AND #DF;SMALL CHAR INC DE SUB "L SCF RET NZ LD C,A;=0 JR IHL_OK XY_CP CALL XY_TEST SCF RET NZ IHL_OK LD A,C LD (END_N_SYM),DE AND A RET Z LD (ASM_BYTES),A;0/DD/FD LD HL,ASM_FLAGS IHL_OK2 BIT 2,(HL) SCF RET NZ XOR A INC A RET INPUT_HL_S CALL INPUT_HL RET C RET Z LD A,(DE) SUB "+ JR Z,$+8 CP 2;"- SCF RET NZ LD A,#44 LD (IHS_SIGN),A INC DE LD A,#10 CALL OPI_TOK_2 RET C LD HL,ASM_FLAGS RES 6,(HL) LD A,(ASM_NM) NEG IHS_SIGN=$-1;NOP/NEG BIT 1,(HL) JR Z,$+9;PUT_D2 LD (ASM_DELT_1),A SET 3,(HL) JR IHL_OK2 LD (ASM_DELT_2),A SET 5,(HL) JR IHL_OK2 INPUT_E CALL CONV_BUF_W RET C XOR A LD H,B,L,C LD BC,(ASM_ADR) INC BC,BC ;Cf=0 SBC HL,BC;8010-7F20=0100-10=#00F0 RLC L RRC L;Cf=b7(L) ADC A,H SCF RET NZ LD C,L AND A JR INPUT_N+4 INPUT_N CALL CONV_BUF_B LD C,A LD L,#40 JR INPUT_M+5 INPUT_M CALL CONV_BUF_W LD L,#C0 RET C LD (ASM_NM),BC LD A,L RET INPUT_RST CALL CONV_BUF_B RET C LD C,A AND #C7 SCF RET NZ ;LD A,(ASM_COM) ;OR C ;LD (ASM_COM),A LD HL,ASM_COM LD A,(HL) OR C LD (HL),A XOR A RET SET_HL_TXT LD A,#C9 LD (PRINT_HXLX),A XOR A LD (PRINT_HL_S+1),A LD (XY1_BIT_JR),A LD HL,WHL LD (HLIXIY_TXT),HL RET DIS_IGN_PR LD A,#C9 LD (PR),A DIS_LINE LD A,(HHH_IGN+1) ;; LD (PRINT_WLAB+1),A ;; PUSH HL LD A,H LD (NAME_PR_AT+2),A PUSH BC LD A,(PR) CP #C5 JR NZ,DIS_NO_PR LD L,9 PUSH HL CALL AT ;DIS_CLEAR LD HL,(POS) IFN windows LD BC,#700 ELSE LD BC,#800 DEC H ENDIF DIS_CLYCKL LD E,L DIS_CLXCKL LD (HL),C INC L LD A,L AND #1F JR NZ,DIS_CLXCKL IFN windows DEC L INC (HL) ENDIF LD L,E INC H DJNZ DIS_CLYCKL POP HL,BC PUSH BC CALL PRINT_WLAB DIS_NO_PR POP BC CALL DIS_INSIDE ;DE=OLD_ADR EX (SP),HL;(SP):NEW_ADR ;HL=PR_AT LD L,#F CALL AT EX (SP),HL PUSH HL;=NEWADR XOR A SBC HL,DE LD A,L LD BC,-5 ADD HL,BC LD B,A JR NC,HHH_PRINT LD A,L INC A LD (OVER_PREF),A POP DE PUSH DE DEC DE,DE,DE,DE LD HL,JRT_POS LD (HL),0 LD A,". CALL PR LD B,4 HHH_PRINT LD (COM_ADR),DE LD A,B LD (COM_LEN),A HHH_CKL CALL RES_IO;A,(DE),EXX? HHH_IGN JR $+2 CALL PRINT_HB;DE-SOHR DJNZ HHH_CKL XOR A LD (PRINT+1),A POP BC ;NEW_ADR POP HL RET CL_DIS_INS LD HL,ASM_BUFFER FILLBUF LD (HL),32 INC L LD A,L CP 18+W JR NZ,FILLBUF LD HL,PUSH_BUF JR IDIS_INS IPRDIS_INS LD HL,#21C9 IDIS_INS LD (PR),HL CALL DIS_INSIDE LD BC,#21C5 LD (PR),BC XOR A LD (PRINT+1),A RET DIS_INSIDE ;BC=DIS_ADR PUSH BC CALL SET_HL_TXT INC A LD (DEST_N),A;=1 LD A,#23 LD (NO_INC_FCB),A LD A,#3A RE_DISASM LD (INIT_HX_LX),A POP DE PUSH DE EXX LD A,OPER_END-PR_XYCB_JR-1 LD (PR_XYCB_JR),A LD HL,ASM_BUFFER DIS_PR_ADR=$-2 LD (PR_BUF_ADR),HL LD DE,REG_HL CODE_FIND LD (JP_HLX_REG),DE CALL RES_DIS0 CP #CB JR NZ,PREFIX_ED PREFIX_CB LD HL,CB_TABL JR DIS_GO PREFIX_ED CP #ED JR NZ,PREFIX_DD CALL SET_HL_TXT LD A,#34;INC(HL) LD (ED_DEB_COM),A LD HL,ED_TABL DIS_GO EXX INC DE EXX CALL RES_DIS0;C=A JR CODE_FIND2 PREFIX_DD LD DE,REG_IX LD HL,WIX CP #DD JR Z,SETXY ;PREFIX_FD CP #FD JR NZ,NO_PREFIX LD DE,REG_IY LD HL,WIY SETXY LD (HLIXIY_TXT),HL LD HL,PREF_CNT INC (HL) LD A,GX_PR-PRINT_HL_S-2 LD (PRINT_HL_S+1),A LD A,2 CALL RES_DIS LD (DELTA),A EXX INC DE EXX CALL RES_DIS0 ;C=A CP #CB LD A,#3A INIT_HX_LX=$-1 LD (PRINT_HXLX),A JR NZ,CODE_FIND ;DE SOHR LD A,#C9 LD (PRINT_HXLX),A XOR A LD (NO_INC_FCB),A LD (PR_XYCB_JR),A;",(IX+3) EXX INC DE EXX INC A;=1 CALL RES_DIS AND #C0 CP #40 LD A,PR_CB_XY-XY1_BIT_JR-1 JR Z,$+3;BIT_ON XOR A LD (XY1_BIT_JR),A JR PREFIX_CB NO_PREFIX LD C,A LD HL,BASE_TABL CODE_FIND2 LD B,0 ;Debug_Counter ; 00..63 -CODES(00..33) ;X=64..127-CHARS(65..90) ; 128+X - Debug Flag BIT 6,(HL) JR Z,NOT_NAME BIT 5,(HL) JR Z,NAMIGN_CKL INC B NAMIGN_CKL BIT 7,(HL) INC HL JR Z,NAMIGN_CKL NOT_NAME LD D,0 LD E,(HL) PUSH HL LD HL,OPER_M_TAB ADD HL,DE LD A,C AND (HL) POP HL INC HL CP (HL) INC HL JR NZ,CODE_FIND2+2 PUSH DE EX DE,HL NAM_FIND LD A,(DE) AND #40 JR NZ,NAME_PR_AT INC DE,DE JR NAM_FIND NAME_PR_AT LD HL,#118;NAME_D CALL AT LD A,(DE) AND 32 JR Z,NAM_CKL;SIMPLE COMMAND INC B LD A,B LD (DEBUG_CNT),A NAM_CKL LD A,(DE);BIG CHAR AND #7F IFN small OR 32 ELSE CP "a JR C,$+4;NO_CHR_CORRECT AND #5F ENDIF CALL PR LD A,(DE) ;AND #80 RLA INC DE JR NC,NAM_CKL LD LX,1 ;+LEN_CODE LD A,3 LD (PRINT+1),A LD A,PRN_CKL-PR_SP_JR-1 LD (PR_SP_JR),A LD A,32 DD_R_SYM=$-1 CALL PR POP BC;C=COUNTER FOR OPER_TABL LD HL,OPER_TABL LD B,C INC B BIT 7,(HL) INC HL JR Z,$-3 DJNZ $-5 OP_PR_CKL LD A,(HL) AND #7F CP 3 JR C,$+2 XY1_BIT_JR=$-1 PUSH HL CALL OPER_PR POP HL BIT 7,(HL) INC HL JR Z,OP_PR_CKL JR OPER_END PR_XYCB_JR=$-1;0/OPER_END-PR_XYCB_JR-1 LD A,", CALL PR PR_CB_XY LD A,"( CALL PR CALL PRINT_XY_P LD A,") CALL PR OPER_END LD A,(HHH_IGN+1) LD (PRINT_WLAB+1),A XOR A LD (PR_SP_JR),A EXX EX DE,HL LD E,LX LD D,A;=0 ADD HL,DE;=NEW_ADR POP DE;=OLDADR RESTORE_IX LD IX,(START_ZONE);!!! RET RES_DIS0 EXX PUSH DE JR RE_DIS RES_DIS EXX ;DE'=ADR_DIS-1 PUSH DE INC DE DEC A JR NZ,$-2 RE_DIS CALL RES_IO POP DE EXX LD C,A RET OPER_TOK_1 DB 0,7,1 IFN small DB "b"+W,"c"+W,"d"+W,"e"+W DB "h",#15+W,"l",#15+W DB "(",#14,")"+W,"a"+W DB 0,#38,8 DB "b"+W,"c"+W,"d"+W,"e"+W DB "h",#15+W,"l",#15+W DB "(",#14,")"+W,"a"+W DB 0,#30,#10,"b","c"+W DB "d","e"+W DB #13+W,"s","p"+W DB 0,#30,#10,"b","c"+W DB "d","e"+W DB #13+W,"a","f"+W DB 0,#38,8 DB "(bc),","a"+W DB "a,(bc",")"+W DB "(de),","a"+W DB "a,(de",")"+W DB "(",#11,"),",#13+W DB #13,",(",#11,")"+W DB "(",#11,"),","a"+W DB "a,(",#11,")"+W DB 0,#18,8 DB "n","z"+W,"z"+W DB "n","c"+W,"c"+W DB 0,#38,8 DB "n","z"+W,"z"+W DB "n","c"+W,"c"+W DB "p","o"+W,"p","e"+W DB "p"+W,"m"+W DB 0,#38,8 DB "0"+W,"1"+W,"2"+W,"3"+W DB "4"+W,"5"+W,"6"+W,"7"+W DB 0,#18,8 DB "i,","a"+W,"r,","a"+W DB "a,","i"+W,"a,","r"+W ELSE DB "B"+W,"C"+W,"D"+W,"E"+W DB "H",#15+W,"L",#15+W DB "(",#14,")"+W,"A"+W DB 0,#38,8 DB "B"+W,"C"+W,"D"+W,"E"+W DB "H",#15+W,"L",#15+W DB "(",#14,")"+W,"A"+W DB 0,#30,#10,"B","C"+W DB "D","E"+W DB #13+W,"S","P"+W DB 0,#30,#10,"B","C"+W DB "D","E"+W DB #13+W,"A","F"+W DB 0,#38,8 DB "(BC),","A"+W DB "A,(BC",")"+W DB "(DE),","A"+W DB "A,(DE",")"+W DB "(",#11,"),",#13+W DB #13,",(",#11,")"+W DB "(",#11,"),","A"+W DB "A,(",#11,")"+W DB 0,#18,8 DB "N","Z"+W,"Z"+W DB "N","C"+W,"C"+W DB 0,#38,8 DB "N","Z"+W,"Z"+W DB "N","C"+W,"C"+W DB "P","O"+W,"P","E"+W DB "P"+W,"M"+W DB 0,#38,8 DB "0"+W,"1"+W,"2"+W,"3"+W DB "4"+W,"5"+W,"6"+W,"7"+W DB 0,#18,8 DB "I,","A"+W,"R,","A"+W DB "A,","I"+W,"A,","R"+W ENDIF DB 0,#18,8 DB "0"+W,"0","*"+W DB "1"+W,"2"+W OPER_TOK_2 ;#10 DB "N" DW PRINT_N,INPUT_N ;#11 DB "M" DW PRINT_M,INPUT_M ;#12 DB "S" DW PRINT_RST,INPUT_RST ;#13 DB "W" DW PRINT_HL,INPUT_HL ;#14 DB "G" DW PRINT_HL_S,INPUT_HL_S ;#15 DB "x" DW PRINT_HXLX,INPUT_HXLX ;#16 DB "E" DW PRINT_E,INPUT_E OPER_M_TAB ;COM_MASK DB #FF;0 N0... DB #F8;1 R1 DB #C7;2 R2 DB #FF;3 N DB #C0;4 R,R DB #F8;5 A,R DB #C7;6 R,N DB #FF;7 A,N DB #CF;8 BC/DE/HL/SP,NN DB #CF;9 HL,BC/DE/HL/SP DB #C7;10A/HL/(),A/HL/(BC)/(DE)/(NN) DB #CF;11BC/DE/HL/AF DB #CF;12BC/DE/HL/SP DB #FF;13A,(N) DB #FF;14(N),A DB #C7;15N[RST] DB #FF;16NN DB #FF;17NN(PC+e) DB #C7;18c DB #C7;19c,NN DB #E7;20j,NN(PC+e) DB #C0;21b,r1 DB #C7;22r,(C) DB #C7;23(C),r/0 DB #CF;24RR,(NN) DB #CF;25(NN),RR DB #E7;26A/I/R,A/I/R DB #C7;27IM 0/*0/1/2;E7 DB #FF;28SP,HL/IX/IY[LD] DB #FF;29(SP),HL[EX] DB #FF;30(HL)/(IX)/(IY)[JP] DB #C7;31NEG DB #CF;32RETN/I DB #FF;33OUT (C),0 DB #00;34NOP* ;DB #C7;35IM 0*/0**/1*/2* OPER_TABL DB #80 ;! DB " "+W ;0 N0... DB 1+W ;1 r DB 2+W ;2 R DB #10+W ;3 N DB 2,",",1+W ;4 R,r DB WA,",",1+W ;5 A,R DB 2,",",#10+W ;6 R,N DB WA,",",#10+W ;7 A,N DB 3,",",#11+W ;8 BC/DE/W/SP,NN DB #13,",",3+W ;9 W,BC/DE/W/SP DB 5+W ;10A/HL/(),A/HL/(BC)/(DE)/(NN) DB 4+W ;11BC/DE/HL/AF DB 3+W ;12BC/DE/HL/SP DB WA,",(",16,")"+W;13A,(N) DB "(",16,"),",WA+W;14(N),A DB #12+W ;15 N RST DB #11+W ;16 NN DB #16+W ;17 NN(PC+e) DB 7+W ;18 c DB 7,",",#11+W ;19 c,NN DB 6,",",#16+W ;20 j,NN(PC+e) DB 8,",",1+W ;21 b,r DB 2,",(C",")"+W ;22 r,(C) DB "(C),",2+W ;23 (C),r/0 DB 3,",(",#11,")"+W;24RR,(NN) DB "(",#11,"),",3+W;25(NN),RR DB 9+W ;26 I/R/A/A,A/A/I/R ;!!! DB 10+W ;27 IM 0/0*/1/2 IFN small DB "sp,",#13+W ;28 SP,HL/IX/IY[LD] DB "(sp),",#13+W ;29 (SP),HL[EX] ELSE DB "SP,",#13+W DB "(SP),",#13+W ENDIF DB "(",#13,")"+W ;30(HL/IX/IY)JP] DB " "+W ;31 [NEG]* DB " "+W ;32 [RET]* DB "(C),","*"+W ;33 [OUTF] DB "*"+W ;34 [NOP]* ;OPERAND NUMBER,CHECK,NAME+DebugBit5 dd=#20 ;DEBUG BIT BASE_TABL DB 0,0,"NO","P"+W DB 0,#76,"HAL","T"+W DB 4,#40 ;LD r,r DB 6,6 ;LD r,n DB 8,1 ;LD BC/DE/HL/SP,NN DB 10,2 ;LD A/HL/(),(BC)/(DE)/() DB 28,#F9,"L","D"+W ;LD SP,HL DB 5,#80 ;ADD A,r DB 7,#C6 ;ADD A,N DB 9,9,"AD","D"+W ;ADD HL,BC/DE/HL/SP DB 5,#88 ;ADC A,r DB 7,#CE,"AD","C"+W ;ADC A,N DB 1,#90 ;SUB r DB 3,#D6,"SU","B"+W ;SUB N DB 5,#98 ;SBC A,r DB 7,#DE,"SB","C"+W ;SBC A,N DB 1,#A0 ;AND r DB 3,#E6,"AN","D"+W ;AND N DB 1,#A8 ;XOR r DB 3,#EE,"XO","R"+W ;XOR N DB 1,#B0 ;OR r DB 3,#F6,"O","R"+W ;OR N DB 1,#B8 ;CP r DB 3,#FE,"C","P"+W ;CP N DB 12,3 ;INC rr DB 2,4,"IN","C"+W ;INC r DB 12,#B ;DEC rr DB 2,5,"DE","C"+W ;DEC r ;DD_R_SYM2=$+4 DB 0,8,"EX","A"+W ;DD_R_SYM3=$+4 DB 0,#EB,"EX","D"+W DB 29,#E3,"E","X"+W ;EX (SP),HL DB 0,#D9,"EX","X"+W DB 11,#C5,"PUS","H"+W ;PUSH AF/BC/DE/HL DB 11,#C1,"PO","P"+W ;POP AF/BC/DE/HL DB 0,#27,"DA","A"+W DB 0,#2F,"CP","L"+W DB 0,#37,"SC","F"+W DB 0,#3F,"CC","F"+W DB 0,#F3,"D","I"+W DB 0,#FB,"E","I"+W DB 0,7,"RLC","A"+W DB 0,#F,"RRC","A"+W DB 0,#17,"RL","A"+W DB 0,#1F,"RR","A"+W DB 0,#C9,dd+"R","E","T"+W DB 18,#C0,dd+"R","E","T"+W ;RET c DB 17,#10,dd+"D","JN","Z"+W ;DJNZ e DB 16,#CD ;CALL NN DB 19,#C4,dd+"C","AL","L"+W ;CALL c,NN DB 15,#C7,dd+"R","S","T"+W ;RST N DB 30,#E9,dd+"J","P"+W ;JP (HL) DB 17,#18 ;JR e DB 20,#20,dd+"J","R"+W ;JR c,e DB 16,#C3 ;JP NN DB 19,#C2,dd+"J","P"+W ;JP c,NN DB 13,#DB,"I","N"+W ;IN A,(N) DB 14,#D3,"OU","T"+W ;OUT (N),A DB -1 CB_TABL DB 1,0,"RL","C"+W ;RLC r DB 1,8,"RR","C"+W ;RRC r DB 1,#10,"R","L"+W ;RL r DB 1,#18,"R","R"+W ;RR r DB 1,#20,"SL","A"+W ;SLA r DB 1,#28,"SR","A"+W ;SRA r DB 1,#30,"SL","I"+W ;SLI r DB 1,#38,"SR","L"+W ;SRL r DB 21,#40,"BI","T"+W ;BIT b,r1 DB 21,#80,"RE","S"+W ;RES b,r1 DB 21,#C0,"SE","T"+W ;SET b,r1 DB -1 ED_TABL DB 0,#70,"IN","F"+W DB 22,#40,"I","N"+W ;IN r,(C) DB 33,#71 ;OUT (C),0 DB 23,#41,"OU","T"+W ;OUT (C),r DB 9 ,#42,"SB","C"+W ;SBC HL,BC/DE/HL/SP DB 9 ,#4A,"AD","C"+W ;ADC HL,BC/DE/HL/SP DB 24,#4B ;LD RR,(NN) DB 25,#43 ;LD (NN),RR DB 26,#47,"L","D"+W ;LD A/I/R,A/I/R DB 31,#44,"NE","G"+W DB 27,#46,"I","M"+W ;IM 0/0*/1/2 DB 0,#67,"RR","D"+W DB 0,#6F,"RL","D"+W DB 0,#A0,"LD","I"+W DB 0,#A1,"CP","I"+W DB 0,#A2,"IN","I"+W DB 0,#A3,"OUT","I"+W DB 0,#A8,"LD","D"+W DB 0,#A9,"CP","D"+W DB 0,#AA,"IN","D"+W DB 0,#AB,"OUT","D"+W DB 0,#B0,"LDI","R"+W DB 0,#B1,"CPI","R"+W DB 0,#B2,"INI","R"+W DB 0,#B3,"OTI","R"+W DB 0,#B8,"LDD","R"+W DB 0,#B9,"CPD","R"+W DB 0,#BA,"IND","R"+W DB 0,#BB,"OTD","R"+W DB 32,#45,dd+"R","ET","N"+W DB 32,#4D,dd+"R","ET","I"+W DB 34,0 ,"NO","P"+W ;NOP * DB -1 OPER_PR ;A=COD_SYM,HL PORTIT CP #10 JR NC,OPER_PR_2 LD HL,OPER_TOK_1 LD B,A LD C,#FE AND C SUB 6 LD A,#C9 JR NZ,$+4 LD A,#78 LD (DEL_FL_OP),A XOR A CPIR DJNZ $-2 CALL RES_DIS0 AND (HL) INC HL JR Z,OPT_PR LD C,(HL) OPT_CKL INC HL BIT 7,(HL) JR Z,OPT_CKL INC B SUB C JR NZ,OPT_CKL OPT_PR INC HL LD A,(HL);PR_7_BIT AND #7F PUSH HL CALL OPER_PR_2 POP HL BIT 7,(HL) JR Z,OPT_PR DEL_FL_OP ;C9/78 LD A,B LD (Debug_IF),A RET OPER_PR_2 CP 32 JR NC,pR_J1 ADD A,A,A,A LD HL,OPER_TOK_2-#40 LD E,A,D,0 ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) PRINT_HXLX LD A,(HLIXIY_TXT+1) JR pR_J1 PRINT_HL_S JR $+2;GX_PR PRINT_HL LD DE,WHL HLIXIY_TXT=$-2 LD A,E CALL PR LD A,D pR_J1 JP PR GX_PR LD HL,PRINT_HXLX LD A,#C9 CP (HL) ;FOR COM.vida LD L,(IX+3) JR Z,PRINT_XY_P POP HL;OPER_PR_2 POP HL;HL1 POP HL;OPER_PR POP HL;HL2 JP RE_DISASM ;JR #C9=>(INIT_HX_LX) PRINT_XY_P LD A,OPER_END-PR_XYCB_JR-1 ;NO ",(IX+2)" LD (PR_XYCB_JR),A CALL PRINT_HL LD A,2 LD (DEST_N),A LD C,0 DELTA=$-1 BIT 7,C LD A,"+" JR Z,$+7;PR_SIGN XOR A SUB C LD C,A LD A,"-" ;PR_SIGN CALL PR LD A,C CALL PRINT_B INC LX NO_INC_FCB=$-1 RET PRINT_N INC LX LD A,1 DEST_N=$-1 CALL RES_DIS PRINT_N2 PRINT_B CALL CONV_B_BUF ;LD (BUFFER+3),A;=0 JR PRINT_BUF PRINT_W;PRINT_BC CALL CONV_W_BUF PRINT_BUF;HL=YX LD DE,BUFFER CALL PRINT LD L,C,H,B LD A,C RET INPUT_B LD B,A INPUTB2 LD A,B PUSH HL,BC CALL CONV_B_BUF LD C,3 CALL INPUTC CALL CONV_BUF_B POP BC,HL JR C,INPUTB2 LD C,A JR PRINT_BUF INPUT_W ;INPUT_BC,PRINT_BC;HL=YX PUSH BC INPUTW2 POP BC PUSH BC,HL CALL CONV_W_BUF LD C,5 CALL INPUTC CALL CONV_BUF_W POP HL JR C,INPUTW2 POP AF JR PRINT_BUF PRINT_RST CALL RES_DIS0 AND #38 LD H,0 ;@@@ LD L,A LD (NEW_PC),HL JR PRINT_N2 PRINT_M INC LX LD A,2 CALL RES_DIS LD B,A LD A,1 CALL RES_DIS ;LD C,A PRINT_NN2 INC LX LD (NEW_PC),BC JR PR_W IFN disdisk PR_W_JR=$-1 CALL PRINT_LW RET NC JR PR_W;Cf=1 PRINT_LW LD HL,(ddbuf2) ENDIF LAB_CKL LD A,(HL) INC HL LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL AND A SCF RET Z ;NO_LAB AND A SBC HL,BC EX DE,HL JR NZ,LAB_CKL PRINT_LW_2 LD A,"L" LD (HEXP+1),A CALL PR PR_W CALL PRINT_WLAB LD A,"#" LD (HEXP+1),A RET ;Cf=;Zf=1 PRINT_E;???!!!VIDA #FD#FD#18#02... EXX ;KUDA ? ^ OR ^ PUSH DE EXX POP HL INC HL,HL LD A,1 CALL RES_DIS ;C=A RLCA LD B,-1 JR C,$+3 ;PRNNE_3 INC B ADD HL,BC LD C,L,B,H JR PRINT_NN2 ;RESIDENT ;LD A,(DE) ;RET ;RESIDENT_1 ;LD (DE),A ;RET ;COMMAND_ADR DW 0 ;COMMAND_LEN NOP ;NEW_PC DW 0 ;ASM_BUFFER