I don't know what Mark uses to create those re-assemblable disassemblies. I was hoping he would post a reply here answering that, but so far he hasn't.
Standard disassembly can be done with the Extended Monitor, which is actually quite fast. While it pauses after each page of output, the listing can be continued by pressing the <linefeed> key.
There is also the disassembler that I wrote in BASIC, and include as Program 1 on my "Enhanced Pico-Dos" disks. I am including a listing of it here for those who can't use those disk images. It will run on all versions of OSI BASIC: ROM (with or without a garbage-collection fix, including under Hexdos and Pico-Dos), 65D, and 65U (and on a UK101 if an ESCape key is added to the keyboard matrix). It is useful for examining 65D BASIC, which normally gets replaced when the Extended Monitor is loaded, and 65U as well.
Code: Select all
10 REM DISAS2 PORTIONS COPYRIGHT (C) 1980 ORION SOFTWARE ASSOCIATES
20 DATABRK1,ORA-XI,X,X,X,ORA-Z,ASL-Z,X,PHP1,ORA-IM,ASL-A,X,X,ORA3,ASL3
30 DATAX,BPL2,ORA-IY,X,X,X,ORA-ZX,ASL-ZX,X,CLC1,ORA-Y,X,X,X,ORA-X
40 DATAASL-X,X,JSR3,AND-XI,X,X,BIT-Z,AND-Z,ROL-Z,X,PLP1,AND-IM,ROL-A,X
50 DATABIT3,AND3,ROL3,X,BMI2,AND-IY,X,X,X,AND-ZX,ROL-ZX,X,SEC1,AND-Y,X
60 DATAX,X,AND-X,ROL-X,X,RTI1,EOR-XI,X,X,X,EOR-Z,LSR-Z,X,PHA1,EOR-IM
70 DATALSR-A,X,JMP3,EOR3,LSR3,X,BVC2,EOR-IY,X,X,X,EOR-ZX,LSR-ZX,X,CLI1
80 DATAEOR-Y,X,X,X,EOR-X,LSR-X,X,RTS1,ADC-XI,X,X,X,ADC-Z,ROR-Z,X,PLA1
90 DATAADC-IM,ROR-A,X,JMP-I,ADC3,ROR3,X,BVS2,ADC-IY,X,X,X,ADC-ZX
100 DATAROR-ZX,X,SEI1,ADC-Y,X,X,X,ADC-X,ROR-X,X,X,STA-XI,X,X,STY-Z
110 DATASTA-Z,STX-Z,X,DEY1,X,TXA1,X,STY3,STA3,STX3,X,BCC2,STA-IY,X,X
120 DATASTY-ZX,STA-ZX,STX-ZY,X,TYA1,STA-Y,TXS1,X,X,STA-X,X,X,LDY-IM
130 DATALDA-XI,LDX-IM,X,LDY-Z,LDA-Z,LDX-Z,X,TAY1,LDA-IM,TAX1,X,LDY3
140 DATALDA3,LDX3,X,BCS2,LDA-IY,X,X,LDY-ZX,LDA-ZX,LDX-ZY,X,CLV1,LDA-Y
150 DATATSX1,X,LDY-X,LDA-X,LDX-Y,X,CPY-IM,CMP-XI,X,X,CPY-Z,CMP-Z,DEC-Z
160 DATAX,INY1,CMP-IM,DEX1,X,CPY3,CMP3,DEC3,X,BNE2,CMP-IY,X,X,X,CMP-ZX
170 DATADEC-ZX,X,CLD1,CMP-Y,X,X,X,CMP-X,DEC-X,X,CPX-IM,SBC-XI,X,X
180 DATACPX-Z,SBC-Z,INC-Z,X,INX1,SBC-IM,NOP1,X,CPX3,SBC3,INC3,X,BEQ2
190 DATASBC-IY,X,X,X,SBC-ZX,INC-ZX,X,SED1,SBC-Y,X,X,X,SBC-X,INC-X,X
200 ES=27:IFPEEK(65025)=0THENK=64513:GOTO230
210 K=57089:IFPEEK(65261)=76THENK=K-1:ES=33:IFPEEK(64774)=32THENES=94
230 DIMMN$(255),L(2),H(4),OP(2):PRINT:PRINT:PRINT
240 PRINT" 6502 DISASSEMBLER":PRINT
260 PRINT:PRINT"PRESS 'ESC' TO STOP THE LISTING":PRINT:PRINT:PRINT
270 FORX=0TO255:READMNEM$(X):NEXT
280 LP=129:HP=130:IF1E8+1>1E8THENLP=128:HP=129
290 PL=PEEK(LP):PH=PEEK(HP)
295 IFLP=128ANDPEEK(2039)=34ANDPEEK(14948)=76THENGOSUB1950:REM 65U TS
300 INPUT"START HEX ADDRESS";A$
305 IF LEFT$(A$,1)=CHR$(27) THEN A$=MID$(A$,2)
306 IF LEN(A$)=0 THEN END:GOTO 300
307 IF K=57088 THEN POKE K,1-253*(ES=94)
310 IFLEN(A$)>4ORA$>"FFFE"THENPRINT:GOTO300
320 IFLEN(A$)<4THENA$="0"+A$:GOTO320
330 FORP=1TO4
340 C=ASC(MID$(A$,P))
350 IFC<48ORC>70ORC>57ANDC<65THENPRINT:GOTO300
360 H(P)=C-48+7*(C>60)
370 NEXTP
380 PRINT:PRINT
390 A=4096*H(1)+256*H(2)+16*H(3)+H(4)
400 IFA>65535THENPRINT:GOTO300
410 PRINTA$;" ";
420 OP=PEEK(A)
440 MNEM$=MNEM$(OP)
450 IF MN$="X" THEN MN$="???":B=1:M=0:GOTO 500
460 I=VAL(RIGHT$(MNEM$,1)):IFITHENMNEM$=LEFT$(MNEM$,3):M=I:GOTO491
470 M$=RIGHT$(MN$,2):FOR I=0 TO 9
480 IF M$=MID$("-X-Y-I-ZZXZYIM-AXIIY",2*I+1,2) THEN M=I+4:I=9
490 NEXT:MN$=LEFT$(MN$,3)
491 IF M=1 OR M=11 THEN B=1
492 IF M>2 AND M<7 THEN B=3
493 IF M>6 AND M<>11 OR M=2 THEN B=2
500 FOR I=0 TO B-1
510 D=PEEK(A+I):H=INT(D/16):L=D-16*H
520 PRINTCHR$(H+48-7*(H>9));CHR$(L+48-7*(L>9));:NEXT
525 PRINTTAB(12);MN$;" ";
530 ON M GOSUB 800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350
540 IF M=13 THEN GOSUB 1400
545 IF M=0 THEN PRINT
670 POKELP,PL:POKEHP,PH
680 A=A+B:GOSUB 710
690 IF(PEEK(K)AND127)=ESTHENPRINT:GOTO300
700 GOTO400
710 OP(1)=INT(A/256):OP(2)=A-256*OP(1)
720 FORI=1TO2
730 O=OP(I)
740 OH=INT(O/16):OL=O-16*OH
750 H=OH+48-7*(OH>9):L=OL+48-7*(OL>9)
760 H(I)=H:L(I)=L
770 NEXTI
780 A$=CHR$(H(1))+CHR$(L(1))+CHR$(H(2))+CHR$(L(2))
790 RETURN
800 PRINT:RETURN
850 AR=A:A=AR+2+PEEK(AR+1):IF A>=AR+130 THEN A=A-256
860 PR$="":SF$="":GOTO 1800
900 AR=A:A=PEEK(AR+1)+256*PEEK(AR+2)
910 PR$="":SF$="":GOTO 1800
950 AR=A:A=PEEK(AR+1)+256*PEEK(AR+2)
960 PR$="":SF$=",X":GOTO 1800
1000 AR=A:A=PEEK(AR+1)+256*PEEK(AR+2)
1010 PR$="":SF$=",Y":GOTO 1800
1050 AR=A:A=PEEK(AR+1)+256*PEEK(AR+2):PR$="(":SF$=")":GOTO 1800
1100 Z=PEEK(A+1):PR$="":SF$="":GOTO 1900
1150 Z=PEEK(A+1):PR$="":SF$=",X":GOTO 1900
1200 Z=PEEK(A+1):PR$="":SF$=",Y":GOTO 1900
1250 Z=PEEK(A+1):PR$="#":SF$="":GOTO 1900
1300 PRINT"A":RETURN
1350 Z=PEEK(A+1):PR$="(":SF$=",X)":GOTO 1900
1400 Z=PEEK(A+1):PR$="(":SF$="),Y":GOTO 1900
1800 GOSUB 710:PRINTPR$;"$";A$;SF$:A=AR:RETURN
1900 H=INT(Z/16):L=Z-16*H
1910 PRINTPR$;"$";CHR$(H+48-7*(H>9));CHR$(L+48-7*(L>9));SF$:RETURN
1950 U=PEEK(55381):NH=PEEK(56556)
1960 IF U=0 AND NH>0 THEN RETURN
1970 K=52737+2*(U-SGN(NH)):RETURN