commit 7811366b4562dca787af47d026ad16855a5e7469 from: Sven M. Hallberg date: Thu Jun 11 19:14:25 2026 UTC BASASM.33 - .OUT directive commit - a860a9ea0702d461450dbce0cacf2f4367a56b12 commit + 7811366b4562dca787af47d026ad16855a5e7469 blob - 10f12b3706e76fdbb820d7d730ae13d4541dd4c7 blob + 09d149b6d536522bb4cb35597a1250889b3fa77c Binary files BASASM,PRG and BASASM,PRG differ blob - 4875b60ecbf6862e2fefbbd4bd0212d065a01f21 blob + f1409368bdea5331e997f172d6d472870471623b --- BASASM.lst +++ BASASM.lst @@ -1,5 +1,5 @@ 0 REM BASASM - A SIMPLE ASSEMBLER MADE -1 REM V.32 IN BASIC. PESCO 2026 +1 REM V.33 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 @@ -32,10 +32,13 @@ 40 EX% = 0 :REM EXPORT COUNT 41 EM% = 19 :REM EXPORT MAX 42 DIM EX(EM%) :REM EXPORT SYMBOLS +90 REM +91 REM HANDLE INITITIAL .OUT EARLY +92 READ M$: IF M$ = ".OUT" THEN 640 98 REM 99 REM - READ OPCODE TABLE FROM FILE - 100 IF XX = 0 THEN 10 :REM AFTER CLR -101 IF MN$(MN%) <> "" THEN 201 +101 IF MN$(0) <> "" THEN 201 102 PRINT "LOAD OPCODES..."; 103 D = PEEK(186): REM CURRENT DEVICE 104 OPEN 1,D,5, "OPCODES,SEQ,R" @@ -259,8 +262,8 @@ 450 IF M$ = ".=" THEN 520 455 IF M$ = ".LIM" THEN 590 490 IF M$ = ".END" THEN 510 -495 PRINT " UNRECOGNIZED" -496 END +491 IF M$ = ".OUT" THEN 620 +495 PRINT " UNRECOGNIZED": GOTO 999 499 GOTO 210 :REM HDLRS RET HERE 500 REM 509 REM .END - TERMINATE INPUT @@ -330,6 +333,36 @@ 608 IF N AND 7 THEN 610 609 GOSUB 190: A=0: REM WRITE BYTE 610 NEXT: PRINT: GOTO 499 +618 REM +619 REM .OUT - INITIAL OUTPUT POSITION +620 READ A$: GOSUB 130 +621 IF (PP = PQ) AND (P = PP) THEN 625 +622 PRINT "NOT ALLOWED HERE": GOTO 999 +623 PRINT MID$(STR$(A), 2) +624 O=A: P=A: PP=A: PQ=A +625 TT = PEEK(43) + PEEK(44) * 256 +626 SE = PEEK(49) + PEEK(50) * 256 +627 IF A < 2048 THEN 633 :REM INV +628 IF A < TT - 1 THEN 635 :REM OK +629 IF A < MS THEN 633 +630 IF A < 40 * 1024 THEN 635 +631 IF A < 48 * 1024 THEN 633 +632 IF A < 52 * 1024 THEN 635 +633 PRINT "INVALID ADDRESS": GOTO 999 +634 REM +635 PRINT MID$(STR$(A), 2) +636 O=A: P=A: PP=A: QQ=A +637 GOTO 499 +638 REM +639 REM HANDLE EARLY .OUT, MEMSIZ +640 READ A$: GOSUB 130 +641 SE = PEEK(49) + PEEK(50) * 256 +642 MS = PEEK(55) + PEEK(56) * 256 +643 IF (A < SE) OR (A >= MS) THEN 647 +644 PRINT "MEMSIZ ←"; A +645 H = INT(A / 256): L = A - H * 256 +646 POKE 55,L: POKE 56,H: CLR +647 O=A: GOTO 100 697 REM 698 REM *RUN 700* WRITE MEM TO PRG FILE 699 REM blob - 7869b35a29e6c16503d53ff1d768bf965e19dbc8 blob + b49f9708c5f4b893824a4c8371755a540f64ddc1 Binary files MANUAL,PRG and MANUAL,PRG differ blob - 468e68b3e65f600cb490f97580d6f25ef697bd32 blob + c2a3fcbc06a16336ee8b3c3ae8e1f27ac7d0119e --- MANUAL.lst +++ MANUAL.lst @@ -21,7 +21,7 @@ 82 PRINT " "; 83 PRINT " {91}{91}{91}" 89 END -1000 DATA " {12} BASASM {92} V.32 +1000 DATA " {12} BASASM {92} V.33 1010 DATA " {12} MANUAL {92} 1020 DATA 1030 DATA @@ -88,8 +88,9 @@ 1340 DATA" {12}.DS, STR{92}  INSERT STRING 1350 DATA" {12}.DSZ, STR{92} INSERT ZERO-TERM. STRING 1355 DATA" {12}.BIT, .X...{92} INSERT BIT PATTERN -1360 DATA" {12}.LIM, POS{92} ASSERT OUTPUT LIMIT -1361 DATA" {12}.=, POS{92} MODIFY OUTPUT POSITION +1359 DATA" {12}.OUT, ADDR{92} INITIAL OUTPUT ADDRESS +1360 DATA" {12}.LIM, POS{92} ASSERT LIMIT ON OUTPUT +1361 DATA" {12}.=, POS{92} CHANGE CURRENT POSITION 1365 DATA" {12}.END{92} SIGNAL END OF INPUT 1370 DATA 1371 DATA"THE {12}.DB{92} AND {12}.DW{92} DIRECTIVES ACCEPT MUL- @@ -102,12 +103,26 @@ 1378 DATA"BYTES ARE FORMED FROM THE PATTERN MSB- 1379 DATA"FIRST, THE LAST ZERO-PADDED IF NEEDED. 1380 DATA -1390 DATA "WHEN {12}RUN{92}, {12}BASASM{92} ASSEMBLES THE USER'S -1391 DATA "PROGRAM, PRINTING IT TO THE SCREEN FOR -1395 DATA "INFORMATION WHILE ALSO {12}POKE{92}ING IT INTO -1400 DATA MEMORY AT THE ORIGIN ADDRESS DEFINED -1410 DATA "AT THE TOP OF THE PROGRAM (LINE 10) -- -1420 DATA "{12}O=49152{92} BY DEFAULT ($C000). +1390 DATA"WHEN {12}RUN{92}, {12}BASASM{92} ASSEMBLES THE USER'S +1391 DATA"PROGRAM, PRINTING IT TO THE SCREEN FOR +1395 DATA"INFORMATION WHILE ALSO {12}POKE{92}ING IT INTO +1400 DATA"MEMORY AT THE OUTPUT ADDRESS, 49152 BY +1401 DATA"DEFAULT ($C000). +1402 DATA +1410 DATA"THE {12}.OUT{92} DIRECTIVE MAY BE USED AT THE +1411 DATA"START OF THE PROGRAM TO CHOOSE A DIFF- +1412 DATA"ERENT OUTPUT ADDRESS. IF ITS ARGUMENT +1413 DATA"LIES WITHIN THE {12}BASIC{92} STRING HEAP, THE +1414 DATA"{12}MEMSIZ{92} POINTER IS AUTOMATICALLY ADJUS- +1415 DATA"TED ACCORDINGLY BEFORE ASSEMBLY. +1416 DATA +1417 DATA" NOTA BENE: IF OUTPUT IS TO BE MADE +1418 DATA" TO THE {12}BASIC{92} TEXT AREA STARTING AT +1419 DATA" ADDRESS 2048, THE {12}TXTTAB{92} VARIABLE +1420 DATA" MUST BE CHANGED BEFORE LOADING ANY +1421 DATA" {12}BASIC{92} CODE. FOR EXAMPLE: +1424 DATA +1425 DATA" {12}POKE 16*256,0: POKE 44,16: NEW 1429 DATA 1430 DATA "THE {12}.LIM{92} DIRECTIVE ACTS AS A TRIPWIRE. 1431 DATA IT EXITS WITH AN ERROR IF THE ACTIVE blob - 13ab867561ddb22e5967fcf0c3a368c80ae58a39 blob + cff91f4820e2960e82bf6ed71dd6213497604606 Binary files TEST.B,PRG and TEST.B,PRG differ blob - 22a72be17e7daf9397e1c6ac5a74e6702cd27b0e blob + 42161129e1e6e39522c57a455e385a3c2a982f26 --- TEST.B.lst +++ TEST.B.lst @@ -1,12 +1,13 @@ -1000 DATA *START -1001 DATA JMP, STXRT -1002 DATA .DSZ, HALLO -1003 DATA .DB, HALLO% -1004 DATA .DB, 1 2 3 -1005 DATA PHA -1006 DATA STA, 2048: REM OK, FULL RNG -1007 REM STAZ, 2048: REM ERR, >255 -1008 DATA .BIT, ...XX.. ... . 01 +1000 DATA .OUT, $C001 +1001 DATA *START +1002 DATA JMP, STXRT +1003 DATA .DSZ, HALLO +1004 DATA .DB, HALLO% +1005 DATA .DB, 1 2 3 +1006 DATA PHA +1007 DATA STA, 2048: REM OK, FULL RNG +1008 REM STAZ, 2048: REM ERR, >255 +1009 DATA .BIT, ...XX.. ... . 01 1010 DATA BMIR, 'L1, RTI 1014 DATA ''L1 1015 DATA BITZ, 123