commit a860a9ea0702d461450dbce0cacf2f4367a56b12 from: Sven M. Hallberg date: Thu Jun 11 19:13:10 2026 UTC BASASM.32 - "exported" symbols commit - f83ac55a16dba9af0da8b587dcef0788671b93b3 commit + a860a9ea0702d461450dbce0cacf2f4367a56b12 blob - b10cf3c98b03eae12a2e0e8b2d69456e0e69280e blob + 10f12b3706e76fdbb820d7d730ae13d4541dd4c7 Binary files BASASM,PRG and BASASM,PRG differ blob - fa0095e20e57e8263d258547fa528098af04967a blob + 4875b60ecbf6862e2fefbbd4bd0212d065a01f21 --- BASASM.lst +++ BASASM.lst @@ -1,5 +1,5 @@ 0 REM BASASM - A SIMPLE ASSEMBLER MADE -1 REM V.31 IN BASIC. PESCO 2026 +1 REM V.32 IN BASIC. PESCO 2026 2 REM 10 VARIABLES 700 *SAVE ML PRG 3 REM 100 LOAD OPCODES 720 *PRINT SEQ F 4 REM 130 SUBROUTINES 740 *MEMSTAT @@ -29,6 +29,9 @@ 33 DIM PA%(PM%) :REM PATCH LENGTH 34 DIM PA$(PM%) :REM PATCH EXPRESSION 35 DIM PM$(PM%) :REM PATCH (ADDR) MODE +40 EX% = 0 :REM EXPORT COUNT +41 EM% = 19 :REM EXPORT MAX +42 DIM EX(EM%) :REM EXPORT SYMBOLS 98 REM 99 REM - READ OPCODE TABLE FROM FILE - 100 IF XX = 0 THEN 10 :REM AFTER CLR @@ -101,6 +104,11 @@ 180 GOSUB 170 181 IF SY(A) = XX THEN UN = UN - 1 182 SY(A) = V: RETURN +183 REM +184 REM SUB: REGISTER SYM FOR "EXPORT" +185 IF EX% > EM% THEN RETURN +186 EX(EX%) = A: EX% = EX% + 1 +187 RETURN 188 REM 189 REM SUB: WRITE OPERAND 190 IF L% < 1 THEN RETURN @@ -113,21 +121,24 @@ 199 REM 200 REM - ASSEMBLE DATA - 201 P=O: PP=P: PQ=P: UN=0: SY%=0: PA%=0 +202 EX%=0 204 RESTORE 205 PRINT "ASSEMBLE..." 210 READ M$ 211 IF ASC(M$) = 46 THEN 410 :REM "." -214 IF RIGHT$(M$,1) = "=" THEN 230 -215 IF ASC(M$) = 39 THEN 223 :REM "'" +213 IF RIGHT$(M$,1) = "=" THEN 230 +214 IF ASC(M$) = 39 THEN 222 :REM "'" +215 IF ASC(M$) = 42 THEN 222 :REM "*" 216 IF ASC(M$) = 36 THEN 219 :REM "$" 217 IF ASC(M$) < 48 THEN 240 :REM "0" 218 IF ASC(M$) > 57 THEN 240 :REM "9" 219 A$ = M$: GOSUB 130 :REM NUM 220 C = A: L% = 0: GOTO 270 -223 A$ = MID$(M$,2): V = P: GOSUB 180 -224 PRINT P; TAB(12); M$ :REM SYMDEF -225 IF ASC(A$) = 39 THEN 229:REM LOCAL -226 REM ON TOP-LEVEL LABEL ('ABC)... +222 A$ = MID$(M$,2): V = P: GOSUB 180 +223 PRINT P; TAB(12); M$ :REM SYMDEF +224 IF ASC(A$) = 39 THEN 229:REM LOCAL +225 REM ON TOP-LEVEL LABEL ('ABC)... +226 IF ASC(M$) = 42 THEN GOSUB 185 227 GOSUB 370 :REM PATCH FWD REFS 228 GOSUB 330 :REM CLEAR LOCAL SYMS 229 GOTO 210 @@ -163,15 +174,21 @@ 298 REM 299 REM - AFTER END OF INPUT - 300 IF P > PQ THEN PQ = P -305 GOSUB 370 :REM PATCH FWD REFS +301 GOSUB 370 :REM PATCH FWD REFS +302 PRINT "ASSEMBLY FINISHED." +305 IF EX% = 0 THEN 310 +306 PRINT "SYMBOLS FOR EXPORT:" +307 FOR I = 0 TO EX% - 1: J = EX(I) +308 PRINT 10000+I; "DATA " SY$(J) "=,", +309 PRINT SY(J): NEXT 310 IF UN = 0 THEN 320 311 PRINT "UNDEFINED SYMBOLS:" 312 FOR I = 0 TO SY% 313 IF SY(I) = XX THEN PRINT SY$(I),; 314 NEXT: PRINT -320 PRINT "ASSEMBLY FINISHED." +320 PRINT 321 PRINT "P =";PP; TAB(12); "Q =";PQ; -322 PRINT TAB(24); "Q-P ="; PQ-PP +322 PRINT TAB(24); "Q-P ="; PQ-PP; 323 GOTO 999 :REM END 328 REM 329 REM SUB: CLEAR LOCAL SYMBOLS blob - 75009c2f6917e925d0e6660632707a70bf71966f blob + 7869b35a29e6c16503d53ff1d768bf965e19dbc8 Binary files MANUAL,PRG and MANUAL,PRG differ blob - dd421fc6587adefdbc865af1e9eef935f9ad8c86 blob + 468e68b3e65f600cb490f97580d6f25ef697bd32 --- MANUAL.lst +++ MANUAL.lst @@ -21,7 +21,7 @@ 82 PRINT " "; 83 PRINT " {91}{91}{91}" 89 END -1000 DATA " {12} BASASM {92} V.31 +1000 DATA " {12} BASASM {92} V.32 1010 DATA " {12} MANUAL {92} 1020 DATA 1030 DATA @@ -57,12 +57,20 @@ 1228 DATA"BOLS ARE VALID ONLY UP TO THE NEXT TOP 1229 DATA"LEVEL (GLOBAL) LABEL. FORWARD REFEREN- 1230 DATA"CES ARE ALLOWED. +1240 DATA +1242 DATA"SYMBOLS OF ARBITRARY VALUE ARE DEFINED +1243 DATA"BY STATING THE SYMBOL NAME WITH AN AP- +1244 DATA"PENDED EQUALS SIGN (=) AND SUPPLYING +1245 DATA"THE DESIRED VALUE AS THE NEXT {12}DATA{92} EL- +1246 DATA EMENT. 1250 DATA -1252 DATA"SYMBOLS OF ARBITRARY VALUE ARE DEFINED -1253 DATA"BY STATING THE SYMBOL NAME WITH AN AP- -1254 DATA"PENDED EQUALS SIGN (=) AND SUPPLYING -1255 DATA"THE DESIRED VALUE AS THE NEXT {12}DATA{92} EL- -1256 DATA EMENT. +1251 DATA"GLOBAL LABELS MAY BE MARKED FOR EXPORT +1252 DATA"BY INTRODUCING THEM WITH AN ASTERISK +1253 DATA"(*) INSTEAD OF AN APOSTROPHE. A MAXI- +1254 DATA"MUM OF 20 SUCH SYMBOLS WILL BE LISTED +1255 DATA"AS {12}DATA{92} STATEMENTS READY TO BE COPIED +1256 DATA"INTO ANOTHER PROGRAM AT THE END OF THE +1257 DATA"RUN. 1260 DATA 1261 DATA"THE HIGH BYTE (MSB) OF A VALUE (SYMBOL 1262 DATA"OR LITERAL) CAN BE OBTAINED BY APPEND- blob - 8818efbbfa7f818a9ca941f4670ae255bd8b750f blob + 13ab867561ddb22e5967fcf0c3a368c80ae58a39 Binary files TEST.B,PRG and TEST.B,PRG differ blob - f9558aa5551d6eccc6588d233d2f6e4cc8c241f7 blob + 22a72be17e7daf9397e1c6ac5a74e6702cd27b0e --- TEST.B.lst +++ TEST.B.lst @@ -1,4 +1,4 @@ -1000 DATA 'START +1000 DATA *START 1001 DATA JMP, STXRT 1002 DATA .DSZ, HALLO 1003 DATA .DB, HALLO% @@ -25,6 +25,7 @@ 1041 DATA ORA, $C80A↑ 1042 DATA ADC#, -1025 1050 DATA JMP, START↑ +1090 DATA *END 1099 DATA .LIM, $C100: REM 49408 2000 DATA .=,49200, BEQR, FAR↑ 2001 DATA .=,49328, 'FAR