10 REM *******************************
20 REM ** -DESASSEMBLEUR- ** 30 REM ** ** 40 REM ** à-DUTERTRE EDDY ** 50 REM ** ** 60 REM ** 25/02/1985 ** 70 REM ** ** 80 REM ******************************* 90 DATA NOP,"2LD BC,","LD (BC),A",INC BC,INC B,DEC B,"1LD B,",RLCA,"EX AF,AF'","ADD HL,BC" 100 DATA"LD A,(BC)",DEC BC,INC C,DEC C,"1LD C,",RRCA,"3DJNZ ","2LD DE,","LD (DE),A",INC DE 110 DATA INC D,DEC D,"1LD D,",RLA,"3JR ","ADD HL,DE","LD A,(DE)",DEC DE,INC E,DEC E 120 DATA"1LD E,",RRA,"3JR NZ,","2LD HL,","4LD ( ),HL",INC HL,INC H,DEC H,"1LD H,",DAA 130 DATA"3JR Z,","ADD HL,HL","7LD HL,( )",DEC HL,INC L,DEC L,"1LD L,",CPL,"3JR NC,","2LD SP," 140 DATA"4LD ( ),A",INC SP,INC (HL),DEC (HL),"1LD (HL),",SCF,"3JR C,","ADD HL,SP","5LD A,( )",DEC SP 150 DATA INC A,DEC A,"1LD A,",CCF 160 DATA RET NZ,POP BC,"2JP NZ,","2JP ","2CALL NZ,",PUSH BC,"1ADD A,",RST 0,RET Z,RET,"2JP Z,",,"2CALL Z,","2CALL ","1ADC A,",RST 8,RET NC,POP DE,"2JP NC,","6OUT ,A" 170 DATA"2CALL NC,",PUSH DE,"1SUB ",RST 16,RET C,EXX,"2JP C,","1IN A,","2CALL C,",INST/IX,"1SBC A,",RST 24,RET PO,POP HL,"2JP PO,","EX (SP),HL","2CALL PO,",PUSH HL,"1AND ",RST 32 180 DATA RET PE,JP (HL),"2JP PE,","EX DE,HL","2CALL PE,",-,"1XOR ",RST 40,RET P,POP AF,"2JP P,",DI,"2CALL P,",PUSH AF,"1OR ",RST 48,RET M,"LD SP,HL","2JP M,",EI 190 DATA "2CALL M,",INST/IY,"1CP ",RST 56 200 DATA LDI,CPI,INI,OUTI,,,,,LDD,CPD,IND,OUTD,,,,,LDIR,CPIR,INIR,OTIR,,,,,LDDR,CPDR,INDR,OTDR 210 DATA"IN B,(C)","OUT (C),B","SBC HL,BC","4LD ( ),BC",NEG,RET N,IM 0,"LD I,A","IN C,(C)","OUT (C),C","ADC HL,BC","7LD BC,( )",,RETI,,"LD R,A","IN D,(C)","OUT (C),D","SBC HL,DE","4LD ( ),DE" 220 REM ne pas effacer cette ligne 230 DATA B,C,D,E,H,L,(HL),A,B,C,D,E,H,L,(HL),A 240 DATA RLC,RRC,RL,RR,SLA,SRA,,SRL,BIT,RES,SET 250 DATA"ADD A,","ADC A,","SUB ","SBC A,","AND ","XOR ","OR ","CP " 260 DATA&DF,&04,&AB,&C9,&07,&AB,&FC,&3A,&00,&00,&32,&0E,&AB,&C9,&00,&00,&CD,&60,&BB,&32,&17,&AB,&C9 270 MEMORY &9FFF: DIM R$(16),S$(11) 280 RESTORE 230:Q=0 290 FOR N=0 TO 15:READ R$(N):NEXT 300 FOR N=0 TO 10:READ S$(N):NEXT 310 FOR N=0 TO 7:READ T$(N):NEXT 320 FOR N=&AB00 TO &AB16:READ A:POKE N,A:NEXT 330 MODE 1:WINDOW 1,40,1,20:WINDOW #1,1,40,21,25:ORIGIN 0,64:DRAW 639,0,1 340 ORIGIN 0,46:DRAW 639,0,1:ORIGIN 144,0:DRAW 0,64,1:LOCATE#1,1,2:PRINT#1,"SELECTION" 350 LOCATE #1,19,2:PRINT#1,"COMMANDES":LOCATE #1,11,4:PRINT#1,"ESPACE=Suite N=Nouv.adresse" 360 LOCATE #1,11,5:PRINT#1,"I=Imprimante ON/";CHR$(24);"OFF";CHR$(24) 370 LOCATE #1,33,5:PRINT#1,"A=Arret" 380 CLS: PRINT"VOUS VOULEZ DESASSEMBLER UNE ZONE DE:" 390 PRINT:PRINT"1-RAM":PRINT"2-ROM":PRINT:PRINT"VOTRE CHOIX ?" 400 G$=INKEY$:G$=UPPER$(G$):IF G$="" OR (G$<>"1" AND G$<>"2" AND G$<>"I") THEN 400 410 IF G$="I" THEN GOSUB 1340:GOTO 400 420 PRINT:PRINT:R=VAL(G$):LOCATE #1,4,4:IF R=1 THEN PRINT#1,"RAM" ELSE PRINT#1,"ROM" 430 A=0:B$="":PRINT "ADRESSE DE DESASSEMBLAGE:...." 440 FOR N=0 TO 3 450 A$=INKEY$:a$=UPPER$(a$):IF A$="" THEN 450 460 IF A$="I" THEN GOSUB 1340:GOTO 450 470 IF A$>"9" AND A$<"A" THEN 450 480 IF A$>"F" OR A$<"0" THEN 450 490 LOCATE 26+N,9:PRINT A$:B$=B$+A$:NEXT 500 A=VAL("&"+B$):IF A<0 THEN A=65536+A 510 CLS:FOR N=1 TO 20 520 PRINT UPPER$(B$);" "; 530 P=A:GOSUB 1290:C$=HEX$(D,2):GOSUB 670:GOSUB 680 540 LOCATE 27,N:FOR M=A TO A+I-1:P=M:GOSUB 1290:PRINT HEX$(D,2);" ";:NEXT:PRINT 550 A=A+I:IF A>65535 THEN A=0 560 B$=HEX$(A,4):IF Q=0 THEN 580 570 FOR M=1 TO 40:LOCATE M,N:CALL &AB10:PRINT#8,CHR$(PEEK(&AB17));:NEXT M:PRINT#8 580 NEXT N 590 T$=INKEY$:T$=UPPER$(T$):IF T$="" THEN 590 600 IF T$=" " THEN B$=HEX$(A,4):GOTO 510 610 IF T$="I" THEN GOSUB 1340:GOTO 590 620 IF T$="N" THEN 380 630 IF T$="A"THEN WINDOW 1,40,1,25:CLS:END 640 GOTO 590 650 DATA IM 1,"LD A,I","IN E,(C)","OUT (C),E","ADC HL,DE","7LD DE,( )",,,IM 2,"LD A,R","IN H,(C)","OUT (C),H","SBC HL,HL","4LD ( ),HL",,,,RRD,"IN L,(C)","OUT (C),L","ADC HL,HL","7LD DE,( )",,,,RLD,,,"SBC HL,SP" 660 DATA "4LD ( ),SP",,,,,"IN A,(C)","OUT (C),A","ADC HL,SP","7LD SP,( )" 670 Y=VAL("&"+MID$(C$,1,1)):Z=VAL("&"+MID$(C$,2,1)):RETURN 680 IF Y>3 AND Y<8 THEN 770 690 IF D=203 THEN P=A+1:GOSUB 1290:GOTO 820 700 IF D=237 THEN P=A+1:GOSUB 1290:GOTO 1060 710 IF D=&DD THEN PRINT"INST/IX :":GOTO 1360 720 IF D=&FD THEN PRINT"INST/IY :":GOTO 1360 730 IF D>127 AND D<192 THEN 880 740 IF D<64 THEN 890 750 IF D>191 THEN 1040 760 PRINT:I=1:RETURN 770 IF Z=6 AND Y=7 THEN PRINT"HALT":I=1:RETURN 780 PRINT"LD ";:K=(Y-4)*2 790 IF Z<8 THEN PRINT R$(K);","; 800 IF Z>7 THEN PRINT R$(K+1);","; 810 PRINT R$(Z):I=1:RETURN 820 IF D>63 THEN 840 830 K=INT(D/8):PRINT S$(K);" ";:GOSUB 670:PRINT R$(Z):I=2:RETURN 840 k=INT(d/64)+7:PRINT s$(k); 850 k=INT(d/8)-8:IF d>191 THEN k=k-16 860 IF d>127 AND d<192 THEN k=k-8 870 PRINT k;",";:C$=HEX$(D,2):GOSUB 670:PRINT r$(z):i=2:RETURN 880 k=d-128:w=INT(k/8):PRINT t$(w);:GOSUB 670:PRINT r$(z):i=1:RETURN 890 p=INT(d/10) 900 GOSUB 1170:FOR g=0 TO (d-p*10):READ e$:NEXT g 910 f$=MID$(e$,1,1):IF f$>"9" THEN PRINT e$:i=1:RETURN 920 PRINT MID$(e$,2); 930 IF f$="1" THEN P=A+1:GOSUB 1290:PRINT HEX$(d,2):i=2:RETURN 940 IF F$="2"THEN P=A+2:GOSUB 1290:PRINTHEX$(D,2);:P=A+1:GOSUB 1290:PRINTHEX$(D,2):I=3:RETURN 950 IF f$<>"3" THEN 990 960 P=A+1:GOSUB 1290:PRINT HEX$(d,2);" ("; 970 IF d>127 THEN d=d-256 980 w=a+2+d:b$=HEX$(w,4):PRINTb$;")":i=2:RETURN 990 IF f$="4" THEN LOCATE 13,n:f$="2":GOTO 940 1000 IF f$="5" THEN LOCATE 15,n:f$="2":GOTO 940 1010 IF f$="6" THEN LOCATE 13,n:f$="1":GOTO 930 1020 IF f$="7" THEN LOCATE 16,n:f$="2":GOTO 940 1030 PRINT:i=1:RETURN 1040 p=INT((d-192)/20)+7 1050 GOSUB 1170:FOR g=0 TO (d-192-(p-7)*20):READ e$:NEXT g:GOTO 910 1060 IF d<159 THEN 1090 1070 RESTORE 200 1080 FOR j=0 TO d-160:READ e$:NEXT:PRINT e$:i=2:RETURN 1090 IF d>85 THEN 1120 1100 RESTORE 210 1110 FOR j=0 TO d-64:READ e$:NEXT:T=A:A=A+1:GOSUB 910:A=T:i=i+1:RETURN 1120 IF d>114 THEN 1150 1130 RESTORE 650 1140 d=d-22:GOTO 1110 1150 RESTORE 660 1160 d=d-51:GOTO 1110 1170 ON p+1 GOTO 1180,1190,1200,1210,1220,1230,1240,1250,1260,1270,1280 1180 RESTORE 90:RETURN 1190 RESTORE 100:RETURN 1200 RESTORE 110:RETURN 1210 RESTORE 120:RETURN 1220 RESTORE 130:RETURN 1230 RESTORE 140:RETURN 1240 RESTORE 150:RETURN 1250 RESTORE 160:RETURN 1260 RESTORE 170:RETURN 1270 RESTORE 180:RETURN 1280 RESTORE 190:RETURN 1290 IF R=1 THEN D=PEEK(P):RETURN 1300 PH=INT(P/256):PL=P-PH*256 1310 POKE &AB08,PL:POKE &AB09,PH 1320 CALL &AB00 1330 D=PEEK(&AB0E):RETURN 1340 IF Q=0 THEN Q=1:LOCATE#1,24,5:PRINT#1,CHR$(24);"ON";CHR$(24);"/OFF":RETURN 1350 Q=0:LOCATE#1,24,5:PRINT#1,"ON/";CHR$(24);"OFF";CHR$(24):RETURN 1360 P=A+1:GOSUB 1290 1370 IF D=9 OR D=&19 OR D=&29 OR D=&39 OR D=&2B OR D=&E3 OR D=&23 OR D=&E9 OR D=&F9 OR D=&E1 OR D=&E5 THEN I=2:RETURN 1380 IF D=&CB OR D=&36 OR D=&22 OR D=&2A OR D=&21 THEN I=4:RETURN 1390 I=3:RETURN |