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