commit 604985fff53a8b294b083d0edde3cdcb70a46cfc from: Sven M. Hallberg date: Sun May 31 18:14:04 2026 UTC BASASM.22 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