Commit Diff


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