Compucolor.org – Virtual Media

Listing of file='SRCBLD.BAS;01' on disk='vmedia/chip_114-sector.ccvf'

10 REM  SRCBLD - DISASSEMBLES MEMORY AND BUILDS TEXT EDITOR
20 REM  SOURCE FILE.  REQUIRES O.RND OPCODE FILE AND L.RND
30 REM  8080 INSTR. LENGTH FILE.  NAME OF FILE INDICATES
40 REM  START AND END LOCATIONS.
50 CLEAR 100
60 A= 1
70 REM  IF TABLES IN MEMORY THEN SKIP TO ADDRESS INPUT ********
80 IF CHR$ (PEEK (40960))+ CHR$ (PEEK (40961))+ CHR$ (PEEK (40962))= "NOP"THEN GOTO 120
90 PLOT 27,4:PRINT "LOA O.RND,A000":PLOT 27,27
100 PLOT 27,4:PRINT "LOA L.RND,A800":PLOT 27,27
110 REM  INPUT START (S) AND END (E) ADDRESSES ****************
120 INPUT "  INPUT HEX START ADDRESS ";S$
130 GOSUB 590
140 IF ER= ATHEN PRINT "  DOES NOT COMPUTE -";:GOTO 120
150 S= INT (VL+ .4)
160 INPUT "  INPUT HEX END ADDRESS ";S$
170 GOSUB 590
180 IF ER= ATHEN PRINT "  DOES NOT COMPUTE -";:GOTO 160
190 E= INT (VL+ .4)
200 REM  MOVE END OF BASIC BACK TO MAKE ROOM FOR TABLES *******
210 A1= PEEK (32940):POKE 32940,255
220 A2= PEEK (32941):POKE 32941,159
230 Z= 43264:REM  A900 HEX
240 REM  START ASM SOURCE WITH ORG STATEMENT ******************
250 POKE Z,9:Z= Z+ 1:REM  START LINE WITH TAB
260 POKE Z,ASC ("O"):POKE Z+ 1,ASC ("R"):POKE Z+ 2,ASC ("G"):POKE Z+ 3,9::Z= Z+ 4
270 PRINT :PRINT "START: ";:X= INT (S/ 256):GOSUB 690:R$= CHR$ (X1)+ CHR$ (X2)
280 X= S- 256* X:GOSUB 690:R$= R$+ CHR$ (X1)+ CHR$ (X2)
290 FOR I= 1TO 4:POKE Z,ASC (MID$ (R$,I,1)):Z= Z+ 1:NEXT I:POKE Z,ASC ("H"):Z= Z+ 1
300 POKE Z,13:POKE Z+ 1,10:Z= Z+ 2:REM  END ORG STATEMENT
310 PRINT "":PRINT
320 PRINT TAB( 33);"ORG";TAB( 41);R$;"H"
330 REM  MAIN LOOP ********************************************
340 FOR P= STO E
350 O= PEEK (P)
360 L= PEEK (40960+ 8* 256+ O)
370 PRINT TAB( 5);:X= INT (P/ 256):GOSUB 690:X= P- INT (P/ 256)* 256:GOSUB 690:REM  LOCATION
380 PRINT TAB( 12);:X= O:GOSUB 690:IF L= ATHEN GOTO 410:REM  HEX CODE
390 X= PEEK (P+ A):GOSUB 690:IF L= 2THEN GOTO 410
400 X= PEEK (P+ 2):GOSUB 690
410 PRINT TAB( 33);:GOSUB 520:IF L= ATHEN GOTO 440:REM  MEMNONIC
420 IF L= 3THEN X= PEEK (P+ 2):GOSUB 690:POKE Z,X1:POKE Z+ 1,X2:Z= Z+ 2
430 X= PEEK (P+ A):GOSUB 690:POKE Z,X1:POKE Z+ 1,X2:POKE Z+ 2,ASC ("H"):Z= Z+ 3:PRINT "H";
440 POKE Z,13:POKE Z+ 1,10:Z= Z+ 2:REM  END OF LINE
450 PRINT " "
460 P= P+ L- A
470 NEXT P
480 REM  END OF MAIN LOOP *************************************
490 REM  SKIP OVER SUBROUTINES TO END PROGRAM *****************
500 GOTO 750
510 REM  SUBROUTINE POKES TAB, MEMNONIC, PRINTS SAME ************
520 POKE Z,9:Z= Z+ 1:REM  START LINE
530 FOR I= 40960+ O* 8TO I+ 7
540 POKE Z,PEEK (I):Z= Z+ 1
550 IF PEEK (I)= 9THEN PRINT TAB( 41);:GOTO 570
560 PRINT CHR$ (PEEK (I));
570 NEXT I:RETURN
580 REM  SUBROUTINE CONVERTS HEX S$ TO DEC. VL ****************
590 ER= 0:VL= 0
600 S$= RIGHT$ ("0000"+ S$,4)
610 FOR I= ATO 4
620 V= ASC (MID$ (S$,I,A))
630 IF V> 47AND V< 58THEN D= V- 48:GOTO 660
640 IF V> 64AND V< 71THEN D= V- 55:GOTO 660
650 ER= A:RETURN
660 VL= VL+ D* 16^ (4- I)
670 NEXT I:RETURN
680 REM  SUBROUTINE PRINTS 2 HEX DIGITS FROM DEC. X ***********
690 X0= INT (X/ 16):IF X0< 10THEN X1= X0+ 48:GOTO 710
700 X1= X0+ 55
710 IF X- X0* 16< 10THEN X2= X- X0* 16+ 48:GOTO 730
720 X2= X- X0* 16+ 55
730 PRINT CHR$ (X1);CHR$ (X2);:RETURN
740 REM  INSERT END STATEMENT, CREATE SRC FILE, END PROGRAM ***
750 POKE Z,9:REM  END STATEMENT
760 POKE Z+ 1,ASC ("E"):POKE Z+ 2,ASC ("N"):POKE Z+ 3,ASC ("D")
770 POKE Z+ 4,13:POKE Z+ 5,10
780 Z= Z+ 6:REM  UPDATE RAM POINTER
790 PRINT TAB( 33);"END"
800 PRINT " CODE FROM ";:X= INT (S/ 256):GOSUB 690:R$= CHR$ (X1)+ CHR$ (X2):X= S- 256* X:GOSUB 690:R$= R$+ CHR$ (X1)+ CHR$ (X2)
810 PRINT " TO ";:X= INT (E/ 256):GOSUB 690:T$= CHR$ (X1)+ CHR$ (X2):X= E- 256* X:GOSUB 690:T$= T$+ CHR$ (X1)+ CHR$ (X2)
820 PRINT ", SOURCE FROM A900 TO ";:X= INT (Z/ 256):GOSUB 690:X= Z- 256* X:GOSUB 690
830 W= Z- 43264:PRINT "  LENGTH ";:X= INT (W/ 256):GOSUB 690:E$= CHR$ (X1)+ CHR$ (X2):X= W- X* 256:GOSUB 690:E$= E$+ CHR$ (X1)+ CHR$ (X2)
840 PRINT ""
850 PRINT :PLOT 27,4:PRINT "SAV A";R$;".SRC A900 ";E$;", ";T$:PLOT 27,27
860 POKE 32940,A1:POKE 32941,A2
870 END