Commit Diff


commit - abe5d49acbdb547530f395310ea6dd021ed60e8b
commit + 604985fff53a8b294b083d0edde3cdcb70a46cfc
blob - f7eecdff018fa0a32f1b85815f43ec1c5ee62446
blob + aba778c9ba7591f06128295935e39c92f3101fec
Binary files BASASM,PRG and BASASM,PRG differ
blob - 19545d6dca94c052bf53f5002a0b9ffa2eeece2a
blob + f9f2e4790523ff1c4cec2e9dd53f9e498df72961
--- BASASM.lst
+++ BASASM.lst
@@ -1,13 +1,13 @@
-0 REM BASASM - A SIMPLISTIC ASSEMBLER
-1 REM MADE IN BASIC. PESCO 2026
-2 REM
-3 REM  10 VARIABLES    700 *SAVE TO PRG
-4 REM 100 LOAD OPCODES 720 *PRINT SEQ F
-5 REM 130 SUBROUTINES  740 *MEMSTAT
-6 REM 200 MAIN LOOP    750 *READ IO ERR
-7 REM 300 FORWARD REFS 800 *HEXDUMP MEM
-8 REM 400 .DIRECTIVES  900 OPCODE TABLE
-9 REM                 1000 ASSEMBLY PGM
+0 REM BASASM - A SIMPLE ASSEMBLER MADE
+1 REM V.22     IN BASIC.  PESCO 2026
+2 REM  10 VARIABLES    700 *SAVE TO PRG
+3 REM 100 LOAD OPCODES 720 *PRINT SEQ F
+4 REM 130 SUBROUTINES  740 *MEMSTAT
+5 REM 200 MAIN LOOP    750 *READ IO ERR
+6 REM 300 FORWARD REFS 770 *SCRATCH F..
+7 REM 400 .DIRECTIVES  777 *SCR/SAV/RUN
+8 REM                  800 *HEXDUMP MEM
+9 REM 900 OPCODE TBL  1000 ASSEMBLY PGM
 10 O = 49152    :REM STARTING POSITION
 11 P = O        :REM CURRENT POSITION
 13 UN = 0       :REM UNDEF SYMBOL COUNT
@@ -22,7 +22,7 @@
 27 DIM SY$(SM%) :REM SYMBOL NAMES
 28 DIM SY(SM%)  :REM SYMBOL VALUES
 30 PA% = 0      :REM PATCH COUNT
-31 PM% = 99     :REM PATCH MAX
+31 PM% = 199    :REM PATCH MAX
 32 DIM PA(PM%)  :REM PATCH POSITION
 33 DIM PA%(PM%) :REM PATCH LENGTH
 34 DIM PA$(PM%) :REM PATCH EXPRESSION
@@ -163,11 +163,12 @@
 384 NEXT: RETURN
 388 REM
 389 REM SUB: RECORD SYM REF TO PATCH
-390 IF PA% <= PM% THEN 392
-391 PRINT "TOO MANY FWD REFS": END
-392 PA(PA%) = P: PA%(PA%) = L%
-393 PA$(PA%) = A$: PM$(PA%) = M$
-394 PA% = PA% + 1: RETURN
+390 IF PA% <= PM% THEN 394
+391 PRINT: PRINT "TOO MANY FWD REFS"
+392 END
+394 PA(PA%) = P: PA%(PA%) = L%
+395 PA$(PA%) = A$: PM$(PA%) = M$
+396 PA% = PA% + 1: RETURN
 400 REM
 401 REM - ASSEMBLER DIRECTIVES -
 408 REM
@@ -229,30 +230,25 @@
 582 IF A <= 0 THEN PRINT N: GOTO 499
 584 POKE P,0: P=P+1
 586 A=A-1: GOTO 582
+697 REM
+698 REM *RUN 700* WRITE MEM TO PRG FILE
 699 REM
-700 REM *RUN 700* WRITE MEM TO PRG FILE
-701 REM
-702 FA = PEEK(186)  :REM CURRENT DEVICE
-703 PRINT "DRIVE ["; FA; "]";
-704 D=0: INPUT D: IF D=0 THEN D=FA
-705 INPUT "FILE"; F$
-706 INPUT "START"; A$: GOSUB 130: P=A
-707 INPUT "STOP"; A$: GOSUB 830: Q=A
-708 PRINT "LOAD ["; P; "]";
-709 A$="": INPUT A$: GOSUB 130: L=A
-710 IF L=0 THEN L=P
-713 OPEN 1,D,2, F$ + ",PRG,W"
-714 H = INT(L / 256): L = L - H*256
-715 PRINT# 1, CHR$(L); CHR$(H);
-716 IF P >= Q THEN CLOSE 1: END
-717 PRINT# 1, CHR$(PEEK(P));
-718 P=P+1: GOTO 716
+700 GOSUB 760: REM GET DRIVE/FILE
+701 INPUT "START"; A$: GOSUB 130: P=A
+702 INPUT "STOP"; A$: GOSUB 830: Q=A
+703 PRINT "LOAD ["; P; "]";
+704 A$="": INPUT A$: GOSUB 130: L=A
+705 IF L=0 THEN L=P
+706 OPEN 1,D,2, F$ + ",PRG,W"
+707 H = INT(L / 256): L = L - H*256
+708 PRINT# 1, CHR$(L); CHR$(H);
+709 IF P >= Q THEN CLOSE 1: END
+710 PRINT# 1, CHR$(PEEK(P));
+711 P=P+1: GOTO 709
+717 REM
+718 REM *RUN 720* PRINT SEQ FILE
 719 REM
-720 REM *RUN 720* PRINT SEQ FILE
-721 REM
-722 INPUT "DRIVE"; D
-723 IF D=0 THEN D = PEEK(186)
-724 INPUT "FILE"; F$
+720 GOSUB 760: REM GET D/F
 728 OPEN 1,D,2,F$ + ",SEQ,R"
 729 IF ST THEN CLOSE 1: END
 732 GET# 1, A$: PRINT A$;: GOTO 729
@@ -277,10 +273,30 @@
 755 CLOSE 15
 756 PRINT A; B$; C; D
 757 END
-800 REM *RUN 800* HEXDUMP MEMORY
-801 REM
-802 INPUT "START"; A$: GOSUB 130: P=A
-803 INPUT "STOP "; A$: GOSUB 830: Q=A
+758 REM
+759 REM SUB: PROMPT FOR DRIVE & FILE
+760 FA = PEEK(186)  :REM CURRENT DEVICE
+761 PRINT "DRIVE ["; FA; "]";
+762 D=0: INPUT D: IF D=0 THEN D=FA
+763 INPUT "FILE"; F$
+764 IF F$ = "" THEN PRINT "ABORT": END
+765 RETURN
+766 REM *RUN 770* SCRATCH FILE
+767 REM *RUN 776* SCRATCH & SAVE
+768 REM *RUN 777* SCRATCH/SAVE/RUN
+769 REM
+770 GOSUB 771: END
+771 GOSUB 760: REM GET D/F
+772 OPEN 15,D,15, "S:" + F$: CLOSE 15
+773 RETURN
+775 REM
+776 GOSUB 771: SAVE F$,D: END
+777 GOSUB 771: SAVE F$,D: RUN
+797 REM
+798 REM *RUN 800* HEXDUMP MEMORY
+799 REM
+800 INPUT "START"; A$: GOSUB 130: P=A
+801 INPUT "STOP "; A$: GOSUB 830: Q=A
 804 IF P >= Q THEN PRINT: END
 805 X=P: IF X > 32767 THEN X=X-65536
 806 IF X AND 7 THEN 809