commit - abe5d49acbdb547530f395310ea6dd021ed60e8b
commit + 604985fff53a8b294b083d0edde3cdcb70a46cfc
blob - f7eecdff018fa0a32f1b85815f43ec1c5ee62446
blob + aba778c9ba7591f06128295935e39c92f3101fec
Binary files BASASM,PRG and BASASM,PRG differ
blob - 19545d6dca94c052bf53f5002a0b9ffa2eeece2a
blob + f9f2e4790523ff1c4cec2e9dd53f9e498df72961
--- BASASM.lst
+++ BASASM.lst
-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
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
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
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
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