1
0
mirror of https://github.com/pkimpel/retro-220.git synced 2026-01-30 21:32:13 +00:00

Commit BALGOL compiler transcription WIP as of 2016-12-11.

Commit initial Javascript studies for BAC-Assembler.
This commit is contained in:
Paul Kimpel
2016-12-11 12:07:47 -08:00
parent b086e21d19
commit 0a66daa33a
2 changed files with 1373 additions and 24 deletions

View File

@@ -29,7 +29,7 @@
34 0 0010 SPO E+,4 SUM CHECK NONZERO
35 0 0011 MPB 4 T,10 CAUSES TYPEOUT AND HALT
36 0 0012 F424 9669,0,9669
37 0 0013 KDB B- PRESS START TO TRY AGAIN
37 0 0013 LDB B- PRESS START TO TRY AGAIN
38 0 0014 BUN A-
39 0 0015 *C DFL *+1,11,1 FIVE TIMES
40 0 0016 *G F424 4000,42,B- TEN BLOCKS
@@ -178,7 +178,7 @@
01 83 0 0179 CHAR HLT 0 LAST CHARACTER READ FROM CARD
01 84 0 0180 CNTRI HLT 0 COUNTER FOR INSTRUCTIONS IN TARGET BUFFER
01 85 0 0181 CNTRF HLT 96 COUNTER FOR FIX-UPS IN BUFFER
01 86 0 0182 D LT 0 EXPONENT OF NUMBER
01 86 0 0182 D HLT 0 EXPONENT OF NUMBER
01 87 0 0183 WRTF RTF 4 *,0 RECORD TRANSFER CONSTANT FOR WRITE SUBROUTINE
01 88 0 0184 DESCR HLT 0 OUTPUT INSTRUCTION
01 89 0 0185 EXPLN HLT 0 SYMBOL ADDRESSES OF INSTRUCTION
@@ -247,7 +247,7 @@
02 52 0 0252 VIMAG HLT 0 CURRENT V-OPERAND
02 53 0 0253 V DEFN V1-1
SWITCHES SET BY TRANSLATOR
SWITCHES SET BY TRANSLATOR
02 56 0 0253 SW2 HLT 0 PROCESSING SCALE FACTOR
02 57 0 0254 SW3 HLT 0 DECIMAL POINT SENSED IN CONSTANT
02 58 0 0255 SW6 HLT 0 WE MIGHT WANT IMPLIED MULTIPLICATION
@@ -312,7 +312,7 @@
03 17 0 0309 TEMP1 CNST 0 NOT USED
03 18 0 0310 CRM F2443 00,GCRM,1 17 MONITOR
03 19 0 0311 CRN F2441 00,GCRN,1 18 PARAMETRIC ARRAY
03 20 0 0312 CRO F2441 41, GCRO,1 19 FUNCTION CALL
03 20 0 0312 CRO F2441 41,GCRO,1 19 FUNCTION CALL
03 21 0 0313 HYPH F2443 14,GHYPH,1 20 - NEGATION
03 22 0 0314 SOLD F2440 11,0024,1 21 / DIVISION
03 23 0 0315 CRP F2443 00,GCRP,1 22 PROCEDURE
@@ -327,7 +327,7 @@
03 32 0 0324 CRW F2443 00,GCRW,1 31 OTHERWISE
03 33 0 0325 CRX F2443 00,GCRX,1 32 FOR
03 34 0 0326 SBST F2446 00,EQUL,5 33 = ASSIGNMENT
03 35 0 0327 CRY F2242 00,GCRY,1 34 FIX
03 35 0 0327 CRY F2442 00,GCRY,1 34 FIX
03 36 0 0328 CRZ F2442 00,GCRZ,1 35 STOP
03 37 0 0329 TEMP3 CNST 0 NOT USED
03 38 0 0330 BREF F2445 00,0000,1 37 BACKWARD REFERENCE
@@ -371,29 +371,29 @@
03 76 0 0365 MEMMD F2447 1,ARACM,MEMST TRACE MODE
RESERVED WORDS
03 79 0 0366 SUBGN F2426 7001,0,SUBR
03 79 0 0366 SUBGN F4246 7001,0,SUBR
03 80 0 0367 CNST $SUBROUTINE$
03 81 0 0369 UNTGN F2426 7001,0,UNTIL (DO A SLA 4 ON THESE CODES)
03 81 0 0369 UNTGN F4246 7001,0,UNTIL (DO A SLA 4 ON THESE CODES)
03 82 0 0370 CNST $UNTIL$ TO GET THEIR TRUE SIGNIFICANCE)
03 83 0 0371 INPGN F2426 7004,0,INNMD
03 83 0 0371 INPGN F4246 7004,0,INNMD
03 84 0 0372 CNST $INPUT$
03 85 0 0373 RETGN F2426 7001,0,RETN
03 85 0 0373 RETGN F4246 7001,0,RETN
03 86 0 0374 CNST $RETURN$
03 87 0 0376 IFGN F2426 7691,0,IF
03 87 0 0376 IFGN F4246 7691,0,IF
03 88 0 0377 CNST $IF$
03 89 0 0378 IMPGN F2420 7001,20,1209
03 89 0 0378 IMPGN F4240 7001,20,1209
03 90 0 0379 CNST $IMPL$
03 91 0 0380 ORGN F2426 7001,0,OR
03 91 0 0380 ORGN F4246 7001,0,OR
03 92 0 0381 CNST $OR$
03 93 0 0382 GOGN F2426 7001,0,GO
03 93 0 0382 GOGN F4246 7001,0,GO
03 94 0 0383 CNST $GO$
03 95 0 0384 OUTGN F2426 7004,0,OUTMD
03 95 0 0384 OUTGN F4246 7004,0,OUTMD
03 96 0 0385 CNST $OUTPUT$
03 97 0 0387 EITGN F2426 7001,0,ETHR
03 97 0 0387 EITGN F4246 7001,0,ETHR
03 98 0 0388 CNST $EITHER$
03 99 0 0390 BOOGN F2426 7004,0,INTMD
03 99 0 0390 BOOGN F4246 7004,0,INTMD
04 00 0 0391 CNST $BOOLEAN$
04 01 0 0393 COMGN F2426 7001,0,COMNT
04 01 0 0393 COMGN F4246 7001,0,COMNT
04 02 0 3094 CNST $COMMENT$
04 03 0 0396 LEQGN F4248 7001,01,12
04 04 0 0397 CNST $LEQ$
@@ -407,7 +407,7 @@
04 12 0 0406 CNST $FLOATING$
04 13 0 0408 INTGN F4246 7004,0,INTMD
04 14 0 0409 CNST $INTEGER$
04 15 0 0411 FORGN C4246 7004,0,FORMD
04 15 0 0411 FORGN F4246 7004,0,FORMD
04 16 0 0412 CNST $FOR$
04 17 0 0413 PROGN F4246 7004,0,PRCMD
04 18 0 0414 CNST $PROCEDURE$
@@ -532,7 +532,7 @@
05 37 0 0541 F4248 8888,30,R23 *N
05 38 0 0542 F2441 10,FONE,TABSC+82 *) ILLEGAL
05 39 0 0543 F4248 8888,30,R8 *(
05 40 0 0544 TOGN F2426 7001,0,T0 *. ILLEGAL
05 40 0 0544 TOGN F4246 7001,0,T0 *. ILLEGAL
05 41 0 0545 CNST $TO$ *$ ILLEGAL
05 42 0 0546 BEGGN F4240 7002,0,0 *, ILLEGAL
05 43 0 0547 CNST $BEGIN$ ** ILLEGAL
@@ -859,7 +859,7 @@
08 64 0 0850 SCNI LDR S2
08 65 0 0851 STR S1 MOVE SCANNING WINDOWS TO RIGHT
08 66 0 0852 LDR K2 ACROSS SOURCE STRING
08 67 0 0853 TR K1
08 67 0 0853 STR K1
08 68 0 0854 SCN2 STP INPTX
08 69 0 0855 BUN INPT GET NEXT CHARACTER FROM CARD
08 70 0 0856 SCN3 DEFN *
@@ -1358,7 +1358,7 @@
013 63 0 1291 DLB V8,64,0
013 64 0 1292 STP LIBRX BRING IN THE LABEL PROCESSOR ROUTINE
013 65 0 1293 BUN LIBRF
013 66 0 1294 LDB L,64,0
013 66 0 1294 DLB L,64,0
013 67 0 1295 STB MNTR,04
013 68 0 1296 CAD L IF THIS IS A NUMERIC LABEL
013 69 0 1297 BSA *+2,0 ATTACH A MINUS SIGN TO IT
@@ -1818,7 +1818,7 @@
018 24 0 1721 NEWT CAD TEMPS RECORD CURRENT SET OF TEMPORARY
018 25 0 1722 SAL 4 STORAGE CELLS IN SAVET STACK
018 25 0 1722 SLA 4 STORAGE CELLS IN SAVET STACK
018 26 0 1723 CLL TEMPS AND MARK THE TEMPS STACK EMPTY
018 27 0 1724 BUN INS
@@ -2190,7 +2190,7 @@
021 94 0 2042 STP ASMBX
021 95 0 2043 BUN ASMBL,BUNFR
021 96 0 2044 STP CMPLX COMPILE INPUT OR OUTPUT, IF THIS
021 97 0 2045 UPSLN F424 CRA.01,WMG FOR APPEARED THERE.
021 97 0 2045 UPSLN F424 CRA,01,WMG FOR APPEARED THERE.
021 98 0 2046 *E STP REMX,EXEC FIX UP ALL THE BUNS TO THIS FOR LOOP
021 99 0 2047 BUN REM,C+
022 00 0 2048 *A STP DECNX DROP THE FOR MODE
@@ -2596,4 +2596,796 @@
026 00 0 2407 MONT DFL THI,62,71 MONITOR STATEMENT.
026 01 0 2408 IFL TAG,00,1
026 02 0 2409 IFL CHI,00,1 PREPARE FOR NUMERIC LABELS
025 03 0 2410 STP EXCTR
026 03 0 2410 STP EXCTR
026 04 0 2411 BUN SCAN GET NEXT ITEM FROM SCANNER.
026 05 0 2412 CFA SMCLN
026 06 0 2413 BCU *+5 IF IT IS A SEMICOLON WE EXIT
026 07 0 2414 DFL THI,62,29
026 08 0 2415 STB S+,61
026 09 0 2416 CLL TAG
026 10 0 2417 BUN ANALZ
026 11 0 2418 BFA *+2,01,0 IF IT IS NOT AN OPERAND WE RECYCLE
026 12 0 2419 BUN MONT+1
026 13 0 2420 DLB L,64,0
026 14 0 2421 LDR - 0
026 15 0 2422 BFR *+2,21,3
026 16 0 2423 DFL - 0,22,87 MARK OPERAND AS MONITORED,UNCLASSIFIED
026 17 0 2424 *S BUN A+,0299
026 18 0 2425 DFL - 0,12,60 OR IF PROCESSING DUMP,
026 19 0 2426 LDB DUMBS AS A VARIABLE TO BE DUMPED
026 20 0 2427 IFL - 0,45,1
026 21 0 2428 BUN MONT+1
026 22 0 2429 *A DFL - 0,12,80
026 23 0 2430 LDB ARTHG
026 24 0 2431 STP LIBRX PUT MONITOR SUBROUTINE INTO PROGRAM
026 25 0 2432 BUN LIBRF
026 26 0 2433 BUN MONT+1
026 27 0
026 28 0
026 29 0 2434 SUBR IFL TAG,00,1 SUBROUTINE
026 30 0 2435 DFL NU,62,29
026 31 0 2436 IFL DELTA,00,4
026 32 0 2437 STP ASMBX
026 33 0 2438 BUN ASMBL,BUNFR COMPILE BUN FORWARD
026 34 0 2439 STP INSX,FUNS PUT LOCN INTO FUNS
026 35 0 2440 BUN INS2 (RETURN WILL LOOK AT THIS)
026 36 0 2441 STP EXCTR
026 37 0 2442 BUN SCAN GET NAME OF SUBROUTINE FROM SCANNER
026 38 0 2443 STP TRTGX
026 39 0 2444 BUN TRTG DEFINE IT
026 40 0 2445 STP NEWTX,SAVET
026 41 0 2446 BUN NEWT SAVE TEMP STORAGES
026 42 0 2447 CAD CRS
026 43 0 2448 BUN EXIT COMPILE CIRCLE S.
026 46 0 2449 EXTRN STP EXCTR EXTERNAL.
026 47 0 2450 BUN SCAN
026 48 0 2451 IFL EPSLN,00,1
026 49 0 2452 STA V2
026 50 0 2453 IFL TAG,00,1
026 51 0 2454 DFL PEH,62,6 DONT LOOK ON LEVEL ZERO WHEN DOING
026 52 0 2455 STP EXCTR A DECLARATION
026 53 0 2456 BUN SCAN GET NAME FROM SCANNER
026 54 0 2457 IFL PEH,62,6
026 55 0 2458 DLB V2,64,0 IS IT AN EXT STATEMENT OR EXT PROCEDURE
026 56 0 2459 DBB A+,PRCMD
026 57 0 2460 STP TRTGX EXTERNAL STATEMENT
026 58 0 2461 BUN TRTGZ DEFINE IT
026 59 0 2462 CAD BUF RECORD ITS SEGMENT NUMBER
026 60 0 2463 DLB L,64,0 (THE OVERLAY WILL FIX UP ANY
026 61 0 2464 DFL - 0,12,20
026 62 0 2465 STP INSX
026 63 0 2466 BUN INS1
026 64 0 2467 IFL ALEPH,62,6 SEGMENT NUMBER)
026 65 0 2468 STP ASMBX
026 66 0 2469 BUN SMBL,BUNZ COMPILE BUN FORWARD
026 67 0 2470 BUN NORM
026 68 0 2471 *A DLB L,64,0 EXTERNAL PROCEDURE
026 69 0 2472 STB - 0,66 MARK AS 83 CODE.
026 70 0 2473 IFL - 0,22,83
026 71 0 2474 LDR NRM SCAN OFF THE PARAMETERS.
026 74 0 2475 PRCNT STR C+,04 (R/04 IS EXIT LINE)
026 75 0 2476 CLL V2
026 76 0 2477 STP INPTX BYPASS PARTS OF CARD
026 77 0 2478 BUN INPT UNTIL WE HAVE AN EXTRA RIGHT PARENTHESIS
026 78 0 2479 BFA B+,02,04
026 79 0 2480 BFA A+,02,24
026 80 0 2481 BUN INPT
026 81 0 2482 *A IFL V2,00,2
026 82 0 2483 *B DFL V2,00,1
026 83 0 2484 BRP INPUT
026 84 0 2485 *C BUN *
026 87 0 2486 PROCD CLL RR3 WORD PROCEDURE SENSED.
026 88 0 2487 LDR VARB
026 89 0 2488 STR FRSTP,04 SET FRSTP TO LOCATION OF 1ST PARAMETER
026 90 0 2489 LDR PR3
026 91 0 2490 STR PR1 SAVE PREFIX LIST
026 92 0 2491 CLL PR3
026 93 0 2492 LDR CHI
026 94 0 2493 CLL CHI SHUT OFF LABEL PROCESSING
026 95 0 2494 STR CHI3
026 96 0 2495 STP XSUBX INITIALIZE THE DECLARATION
026 97 0 2496 BUN XSUB (THIS PART COMMON TO PROC AND FUNCTION)
026 98 0 2497 STA LEVEL SET LEVEL = KC
026 99 0 2498 STB - 0,21
027 00 0 2499 IFL - 0,21,3 MARK TYPE OF THIS PROCEDURE UNSPECIFIED
027 01 0 2500 NRM BUN NORM
027 04 0 2501 FUNC STP XSUBX WORD FUNCTION SENSED.
027 05 0 2502 BUN XSUB DO INITIAL STEPS
027 06 0 2503 DFL - 0,11,2 SET TAU DIGIT = 6
027 07 0 2504 IFL FNSW,00,1
027 08 0 2505 CAD TOP COMPILE NAME OF THIS FUNCTION
027 09 0 2506 BUN EXIT
027 12 0 2507 PRCCM STP YSUBX RECORD PARAMETER
027 13 0 2508 BUN YSUB1
027 14 0 2509 BUN NORM
027 17 0 2510 ARAPM LDB OPRND ARRAY NAME APPEARS AS PARAMETER
027 18 0 2511 CAD - 0
027 19 0 2512 SLT 2
027 20 0 2513 STA ARMS,44 PUT NAME INTO ARMS
027 21 0 2514 STP YSUBX
027 22 0 2515 BUN YSUB2 MARK IT AS PARAMETER
027 23 0 2516 BUN NORM
027 26 0 2517 INTG CLL RR2 INTEGER DECLARATION
027 27 0 2518 IFL RR2,21,1 SET TYPE = FIXED
027 28 0 2519 BUN ARRAY
027 31 0 2520 BOOL DEFN INTG BOOLEAN DECLARATION (SAME)
027 34 0 2520 FLTG CLL RR2 FLOATING,REAL. SET TYPE = FLOATING
027 35 0 2521 ARRAY IFL DELTA,00,5
027 36 0 2522 STP CMPLX ARRAY DECLARATION
027 37 0 2523 BUN LEFT
027 40 0 2524 DCLCM BUN NORM DECLARATIONS ARE HANDLED BY SCANNER
027 43 0 2525 ARDEC IFL IOTA,00,1 START TO DECLARE AN ARRAY, JUST AFTER A(
027 44 0 2526 CAD XONE+1 OF A(I,J,K,L) IS SENSED
027 45 0 2527 STA ARRI INITIALIZE ARRI,ARRL TO 1
027 46 0 2528 STA ARRL
027 47 0 2529 CAD CRF
027 48 0 2530 BUN EXIT
027 51 0 2531 ARACM STP NULSX ARRAY DECLARATION COMMA SENSED
027 52 0 2532 BUN NULSB TREAT AS )( BUT PRESERVE ARRAY MODE
027 53 0 2533 LDB IOTA
027 54 0 2534 IBB NORM,9999 IF THIS IS A COMMA BETWEEN DIMENSINOS,
027 55 0 2535 CAD CRG IT IS A CIRCLE-G OPERATOR
027 56 0 2536 BUN EXIT
027 59 0 2537 ARFCM IFL RHO,62,29 ARRAY FILL IS ALL HANDLED BY SCANNER
027 60 0 2538 BUN NORM (IN USUAL WAY) SEE NUMBER SUBROUTINE
027 65 0 2539 SEMIC STP COMPLX SEMICOLON IS THOUGHT OF A )(
027 66 0 2540 BUN RIGHT
027 67 0 2541 STP CMPLX THIS INNOCENT-LOOKING THING MAY CAUSE
027 68 0 2542 BUN LEFT ALL SORTS OF THINGS TO HAPPEN.
027 69 0 2543 SEMIX BUN *
027 72 0 2544 QSUB STP CMPLX FINISH SETTING V=E
027 73 0 2545 BUN RIGHT
027 74 0 2546 STP ASMBX ASSEMBLE STP FORWARD
027 75 0 2547 BUN ASMBL,STPFR
027 76 0 2548 CLL DEX
027 77 0 2549 IFL PI,00,1
027 78 0 2550 STP ASMBX BUN FORWARD
027 79 0 2551 BUN ASMBL,BUNFR
027 80 0 2552 CLL PI
027 81 0 2553 QSUBX BUN *
027 84 0 2554 RUN LDR K2 INTERRUPT NORMAL SCANNING.
027 85 0 2555 STR K3,04
027 86 0 2556 LDR S2 RUN BACK THE VARIABLE PART
027 87 0 2557 STR S3,04 OF THE FOR STATEMENT AGAIN
027 88 0 2558 LDR SCAN
027 89 0 2559 STR SCNXX,04
027 90 0 2560 LDR FV
027 91 0 2561 STR STFOL,04
027 92 0 2562 IFL THETA,62,29
027 93 0 2563 BUN SCN7
027 94 0 2564 RUNXX DFL THETA,62,29 AFTER THE = SIGN COMES,
027 95 0 2565 LDR K3 RESTORE NORMAL SCANNING PROCEDURE.
027 96 0 2566 STR K2,04
027 97 0 2567 LDR S3
027 98 0 2568 STR S2,04
027 99 0 2569 LDR SCNXX
028 00 0 2570 STR SCAN,04
028 01 0 2571 RUNX BUN *
028 04 0 2572 FSUB1 STP REMX,OPRND
028 05 0 2573 BUN REM2,*+2 PULL LEFT PARENTHESIS
028 06 0 2574 G6 F424 7039,0,*
028 07 0 2575 STP CMPLX
028 08 0 2576 BUN LEFT PUT ANOTHER ONE ON
028 09 0 2577 FSUB2 CLL DEX
028 10 0 2578 STP RUNX RUN BACK V =
028 11 0 2579 BUN RUN
028 12 0 2580 STP CMPLX
028 13 0 2581 BUN WMG,CRB
028 14 0 2582 FSUBX BUN *
THROW AWAY TOP OF STACK,SUBSTITUTE CRN
028 17 0 2583 USUB STP REMX,OP
028 18 0 2584 BUN REM,PRSB
028 19 0 2585 G8 F424 1053,0,*
028 22 0 2586 PRSB LDB PRSBX
028 23 0 2587 DLB - 9998,44,0 PRSB SENDS SPECIFIED OPERATOR TO COMPILER
028 24 0 2588 CAD - 0
028 25 0 2589 STP CMPLX AND THEN DOES NULSB
028 26 0 2590 BUN WMG1
028 27 0 2591 NULSB LDB MODE NULSB IS A SEMICOLON WHICH PROTECTS
028 28 0 2592 IFL - 0,22,1 THE MODE STACK
028 29 0 2593 STP SEMIX
028 30 0 2594 BUN SEMIC
028 31 0 2595 LDB MODE
028 32 0 2596 DFL - 0,22,1
028 33 0 2597 PRSBX BUN *
028 34 0 2598 USUBX DEFN PRSBX
028 35 0 2598 NULSX DEFN PRSBX
028 38 0 2598 OLDT STP REMX,TEMPS THROW OUT ALL TEMP STORAGES
028 39 0 2599 BUN REM,OLDT CURRENTLY BEING USED, THEY CANT
028 40 0 2600 *A STP REMX,SAVET BE USED ANY MORE
028 41 0 2601 BUN REM,*+2
028 42 0 2602 G7 F424 1565,0,* REINSTATE OLD SET
028 43 0 2603 SRA 4
028 44 0 2604 STA TEMPS,04
028 45 0 2605 BUN GENRX
028 48 0 2606 GETMP STP REMX,TEMPS SET AN AVAILABLE TEMP STORAGE CELL
028 49 0 2607 BUN REM,GETMX
028 50 0 2608 CAD VARB EITHER FROM TEMPS STACK
028 51 0 2609 SLA 4 OR A NEW ONE,IF THAT STACK HAS BEEN
028 52 0 2610 DFL VARB,04,1 CLEANED OUT.
028 53 0 2611 GETMX BUN GETMX
028 56 0 2612 XSUB STP ASMBX COMMON PART OF BEGINNING OF PROCEDURE
028 57 0 2613 BUN ASMBL,BUNFR AND FUNCTION DECLARATIONS
028 58 0 2614 STP INSX,FUNS FIRST COMPILE FORWARD REFERENCE AROUND
028 59 0 2615 BUN INS2
028 60 0 2616 STP NEWTX,SAVET PUT LOCN ONTO FUN-STACK
028 61 0 2617 BUN NEWT STASH AWAY CURRENT SET OF TEMP STORAGE
028 62 0 2618 STP EXCTR
028 63 0 2619 BUN SCAN GET NAME OF PROCEDURE FROM SCANNER
028 64 0 2620 STA TOP
028 65 0 2621 STP CMPLX COMPILE CIRCLE-P OPERATOR
028 66 0 2622 BUN WMG,CRP
028 67 0 2623 IFL PARSW,00,1
028 68 0 2624 IFL KC,00,1
028 69 0 2625 STP CMPLX AND A LEFT PARENTHESIS
028 70 0 2626 BUN LEFT
028 71 0 2627 STP CMPLX AND A CIRCLE Q
028 72 0 2628 BUN WMG,CRQ
028 73 0 2629 CAD VARB
028 74 0 2630 SRT 4
028 75 0 2631 STR NOPAV,44 ASSEMBLE
028 76 0 2632 STP ASMBX (LOC OF PARAMETER 1) NOP 0000
028 77 0 2633 BUN ASMBL,NOPAV
028 78 0 2634 IFL PHI,00,1
028 79 0 2635 DLB L,64,0
028 80 0 2636 CAD KC RECORD NUMBER OF THIS PROCEDURE
028 81 0 2637 STA - 0,04
028 82 0 2638 DFL - 0,82,1
028 83 0 2639 XSUBX BUN *
028 86 0 2640 YSUB1 LDB KAPPA COLLECTING PARAMETERS
028 87 0 2641 CLL KAPPA
028 88 0 2642 DBB A+,1 HAVE EMPTY SUBSCRIPTS APPEARED
028 89 0 2643 LDB FUNS OR DO WE HAVE A CALL BY VALUE
028 90 0 2644 CAD - 0
028 91 0 2645 BSA A+,1
028 92 0 2646 YSUB2 DLB L,64,00 IF NOT,
028 93 0 2647 IFL - 0,12,10 MARK PARAMETER AS CALL BY NAME
028 94 0 2648 LDB FUNS
028 95 0 2649 CAD - 0
028 96 0 2650 BSA *+2,3
028 97 0 2651 BUN *+2
028 98 0 2652 IFL TAG,00,1 PUT TAG ON AFTER 2ND SEMICOLON
028 99 0 2653 SRA 4
029 00 0 2654 LSA 0
029 01 0 2655 STP INSX,PAREF PUT CALL BY NAME PARAMETERS ONTO
029 02 0 2656 BUN INS PAREF STACK.WE WILL USE THIS
029 03 0 2657 CAD - 0
029 04 0 2658 SLA 4 LATER TO FIX UP REFERENCES TO THEM
029 05 0 2659 STA - 0 SHIFT LINK FIELD AROUND(SHREWD MOVE)
029 06 0 2660 PRFSW F4241 1210,01,1 IN PAREF LINK FIELD IS 64-FIELD
029 07 0 2661 *A STP REMX,OPRND
029 08 0 2662 BUN REM,*+2
029 09 0 2663 FUR HLT 4
029 10 0 2664 SRA 4 ASSIGN PARAMETER LOCATION
029 11 0 2665 STA *+3,04
029 12 0 2666 CAD VARB
029 13 0 2667 SLA 4
029 14 0 2668 STA *,64
029 15 0 2669 DLB TOP,64,0 KEEP COUNT OF NUMBER OF
029 16 0 2670 DFL - 0,82,99 PARAMETERS FOR FUTURE CHECKING
029 17 0 2671 DFL VARB,04,1
029 18 0 2672 LDB FUNS KEEP COUNT OF NUMBER OF
029 19 0 2673 IFL - 0,22,1 PARAMETERS IN FUNS.
029 20 0 2674 YSUBX BUN *
029 25 0 2675 CMPL BFA VRBL,01,0 THIS HERE IS THE COMPILER
029 26 0 2676 BFA WMG1,01,1
029 27 0 2677 BFA LEFT,01,2 CHECK KIND OF QUANTITY..
029 28 0 2678 RIGHT STP REMX,OP OPERAND,OPERATOR,LEFT PAREN, OR RIGHT PAR
029 29 0 2679 BUN REM,E+ PROCESS RIGHT PARENTHESIS..
029 30 0 2680 STP WEMX
029 31 0 2681 BUN WEM,LEFT
029 32 0 2682 CNST 34652540000 (EXTRA RIGHT PARENTHESIS)
029 33 0 2683 *E CFA LPAR,67
029 34 0 2684 BCE B+ DO ALL OPERATIONS OUTSTANDING SINCE
029 35 0 2685 STP BENRX LAST LEFT PARENTHESIS
029 36 0 2686 BUN GENR
029 37 0 2687 BUN RIGHT
029 38 0 2688 *B STP DECNX CHANGE PARENTHESIS COUNT
029 39 0 2689 BUN DECN ON THIS MODE
029 40 0 2690 LCCT BUN *+4
029 41 0 2691 LDR LOCN
029 42 0 2692 STR IMAGE-1,64
029 43 0 2693 IFL LCCT,62,29
029 44 0 2694 CMPLX BUN *
029 45 0 2695 VRBL1 STA PAR
029 46 0 2696 VRBL STP INSX,OPRND PROCESS OPERAND..
029 47 0 2697 BUN INS SIMPLY PUT IT ON OPERAND STACK
029 48 0 2698 BUN CMPLX
029 49 0 2699 LEFT LDB PHI PROCESS LEFT PARENTHESIS..
029 50 0 2700 CLL PHI
029 51 0 2701 DBB CMPLX,1 EXIT, IF EXPECTING A LEFT PARENTHESIS
029 52 0 2702 LDB MODE
029 53 0 2703 IFL - 0,22,1 INCREASE PARENTHESIS COUNT ON THIS MODE
029 54 0 2704 FORTY CLA 40
029 55 0 2705 BUN A+ AND INSERT LEFT PARENTHESIS IN OP STACK
029 56 0 2706 WMG LDB CMPLX
029 57 0 2707 DLB - 9999,44,0 PROCESS OPERATOR..
029 58 0 2708 CAD - 0
029 59 0 2709 WMG1 LDB OP
029 60 0 2710 LDR - 0
029 61 0 2711 BFR A+,66,0 IF TOP OF OPERATOR STACK IS A LEFT
029 62 0 2712 STA SAVOP PARENTHESIS,
029 63 0 2713 CFA - 0,22 OR HIERARCHY OF NEW OP IS HIGHER THAN
029 64 0 2714 BCH A+ THAT OF THE TOP OF THE OP STACK,
029 65 0 2715 BCL B+ MERELY PLACE NEW OP ONTO THE STACK.
029 66 0 2716 BSA *+2,0
029 67 0 2717 BUN A+ ON EQUAL HIERRARCHY DO THE SAME
029 68 0 2718 BFA *+2,31,0 EXCEPT ON ORDINARY BINARY OPERATIONS
029 69 0 2719 BUN A+
029 70 0 2720 LDB OPRND FOR THESE, CHECK IF EITHER THE
029 71 0 2721 LDR - 0 LAST OR THE SECOND-LAST OPERAND IS IN
029 72 0 2722 BFR B+,11,0 THE ACCUMULATOR, AND IF SO
029 73 0 2723 LDB - 0 PERFORM THE OPERATION IMMEDIATELY
029 74 0 2724 LDR - 0
029 75 0 2725 BFR B+,11,0
029 76 0 2726 *A STP INSX,OP
029 77 0 2727 BUN INS
029 78 0 2728 *C BUN CMPLX
029 79 0 2729 *B STP REMX,OP IN THE CASE OF LOWER HIERARCHY,
029 80 0 2730 BUN REM,*+2 EXECUTE THE LAST OPERATOR
029 81 0 2731 NPCN NOP 0
029 82 0 2732 STP GENRX GO TO ITS GENERATOR
029 83 0 2733 BUN GENR
029 84 0 2734 CAD SAVOP
029 85 0 2735 BUN WMG1 AND RECYCLE
029 88 0 2736 ASMBL LDB ASMBX THE ASSEMBLER.
029 89 0 2737 DLB - 9999,44,0
029 90 0 2738 ASMBZ CAD - 0
029 91 0 2739 ASMBY CLL INSTR
029 92 0 2740 CLL INSTP
029 93 0 2741 STA INSTR,00
029 94 0 2742 STA INSTP,00
029 95 0 2743 STA G
029 96 0 2744 LDR XI
029 97 0 2745 BZR A+
029 98 0 2746 CLL AI OMIT SLT10 INSTRUCTION, IF STA OR SRT10
029 99 0 2747 BFA B+,62,40 FOLLOWS
030 00 0 2748 CFA SRT10,07
030 01 0 2749 BCU A+
030 02 0 2750 DFL LOCN,64,1
030 03 0 2751 BUN ASMBX
030 04 0 2752 *B DFL LOCN,64,1
030 05 0 2753 IFL INSTR,41,1 (CHANGE STA TO STR)
030 06 0 2754 IFL INSTP,41,1
030 07 0 2755 *A CFA +9999999999
030 08 0 2756 BCH C+
030 09 0 2757 LDB INSTR ASSEMBLE WITH V(I) IF THE
030 10 0 2758 LDR - V SIGN IS 0,1,2, OR 3
030 11 0 2759 BFR D+,11,5
030 12 0 2760 *E STP LASMX IN ORDINARY CASES, GO TO THE
030 13 0 2761 BUN LASMB LITTLE ASSEMBLER.
030 14 0 2762 BUN ASMBX
030 15 0 2763 *D DLB - V,64,0 WHOOPS, ITS AN ARRAY NAME.
030 16 0 2764 LDR - 0 WE PROBABLY HAVE TO GET ITS INDEX
030 17 0 2765 STA GP IN REGISTER B
030 18 0 2766 BFR F+,11,7 IF THE ARRAY HAS ALREADY BEEN INDEXED,
030 19 0 2767 BFR E-,11,5 SKIP THIS PHASE, IF THE SUBSCRIPT IS
030 20 0 2768 IFL - 0,11,1 CONSTANT,GO TO LITTLE ASSEMBLER
030 21 0 2769 STB TEMP
030 22 0 2770 LDB - 0 GET THE SUBSCRIPT VALUE
030 23 0 2771 CAD - 0 IT CANT BE AN ACCUMULATOR SYMBOL
030 24 0 2772 DLB - 0,64,0
030 25 0 2773 LDR - 0
030 26 0 2774 BFA Q+,11,3 IS IT A TEMP STORAGE
030 27 0 2775 BFR Q+,11,6 IS IT ANOTHER ARRAY
030 28 0 2776 STP ASSNX OTHERWISE PREPARE A PLACE FOR IT IN
030 29 0 2777 BUN ASSN MEMORY
030 30 0 2778 CFA DEX,67 IF IT HASNT YET BEEN ASSIGNED
030 31 0 2779 STA DEX,67
030 32 0 2780 BCU G+ IS THE INDEX IN THE B REGISTER
030 33 0 2781 LDB TEMP
030 34 0 2782 STP REMX IF SO,REMOVE REFERENCE TO IT
030 35 0 2783 BUN REM1,F+
030 36 0 2784 G99 F424 9629,0,0
030 37 0 2785 *Q CLL DEX SET CONTENTS OF REGISTER B TO UNKNOWN
030 38 0 2786 *G LDB TEMP HERE A TRICKY PART.
030 39 0 2787 STP REMX PUT THE SUBSCRIPT ONTO THE XVP STACK
030 40 0 2788 BUN REM1,*+2 IF IT IS ANOTHER ARRAY WHICH MUST BE
030 41 0 2789 BUN H+ CALLED,KEEP THIS UP UNTIL WE GET
030 42 0 2790 STP INSX,XVP TO A NON-ARRAY.
030 43 0 2791 BUN INS
030 44 0 2792 DLB - 0,64,0
030 45 0 2793 BFA H+,11,3
030 46 0 2794 CAD - 0
030 47 0 2795 BFA REM1,11,6
030 48 0 2796 *H CAD LDBV9
030 49 0 2797 *H STA INSTR COMPILE A SERIES OF LDB S
030 50 0 2798 CLL G UNTIL THE INDEX IS FINALLY IN REGISTER B
030 51 0 2799 STP REMX,XVP
030 52 0 2800 BUN REM,I+
030 53 0 2801 *F CAD INSTP THE INSTRUCTION IS TO BE B-MODIFIED
030 54 0 2802 LSA 1
030 55 0 2803 STA INSTR
030 56 0 2804 LDR GP
030 57 0 2805 STR G
030 58 0 2806 BUN E- GO TO THE LITTLE ASSEMBLER
030 59 0 2807 *I STA V9
030 60 0 2808 STP LASMX
030 61 0 2809 BUN LASMB
030 62 0 2810 CSU LDBV9
030 63 0 2811 BUN H-
030 64 0 2812 *C BSA G4P,4 ABSOLUTE MACHINE ADDRESS
030 65 0 2813 BSA G6P,6 ADDRESS RELATIVE TO THIS LOCATION
030 66 0 2814 BSA G7P,7 ADDRESS TO BE BLANKED OUT
030 67 0 2815 BSA G8P,8 FORWARD REFERENCE ADDRESS
030 68 0 2816 IFL INSTR,12,10 (B-MODIFICATION ON SIGNS OF 5 OR 9)
030 69 0 2817 BSA G8P,9 B-MODIFIED FORWARD REFERENCE
030 70 0 2818 GEXIT STP WRITX
030 71 0 2819 BUN WRIT2
030 72 0 2820 ASMBX BUN *
030 73 0 2821 G4P LDR INSTR SET FLAG IF THIS IS SLT10 INSTRUCTION
030 74 0 2822 CFR SLT10,07
030 75 0 2823 BCU GEXIT
030 76 0 2824 IFL XI,00,1
030 77 0 2825 BUN GEXIT
030 78 0 2826 G6P CAD LOCN
030 79 0 2827 SRA 4
030 80 0 2828 ADA INSTR
030 81 0 2829 STA INSTR,04
030 82 0 2830 BUN GEXIT
030 83 0 2831 G8P CAD LOCN
030 84 0 2832 LSA 4
030 85 0 2833 LDR PSI
030 86 0 2834 BZR *+2
030 87 0 2835 LSA 7 INCREMENTED FORWARD REFERENCE
030 88 0 2836 DLB OP,44,0
030 89 0 2837 LDR PI PUT FORWARD REFERENCE OPERATOR
030 90 0 2838 BZR *+2 ONTO EITHER OPERATOR STACK, OR
030 91 0 2839 DLB EXEC,44,0 (THE STP,BUN S OF FOR) ONTO EXEC-STACK
030 92 0 2840 STP INSX
030 93 0 2841 BUN INS1
030 94 0 2842 G7P IFL WRTSW,41,4
030 95 0 2843 BUN GEXIT
030 98 0 2844 LASMB LDB INSTR LITTLE ASSEMBLER.
030 99 0 2845 LDR - V
031 00 0 2846 DLB - B,64,0 ASSEMBLE AN OPERAND FOR ME
031 01 0 2847 CAD - 0
031 02 0 2848 STA VIMAG WHAT KIND OF AN OPERAND
031 03 0 2849 BFR T3,11,3 A TEMP STORAGE
031 04 0 2850 BFR T1,11,1 A SIMPLE VARIABLE
031 05 0 2851 BFR T2,11,2 A CONSTANT
031 06 0 2852 BFR T4,11,4 A LIBRARY,EXTERNAL PROCEDURE
031 07 0 2853 BFR T5,11,5 AN ARRAY
031 08 0 2854 BFR T4,11,8 A PROCEDURE OR FUNCTION
031 09 0 2855 T9 LDR - 1
031 10 0 2856 BFR *+2,11,0
031 11 0 2857 STR EXPLN
031 12 0 2858 STP INSX A LABEL
031 13 0 2859 BFA H+,64,0 IF IT HASNT BEEN DEFINED YET,
031 14 0 2860 BUN T4 RECORD PLACE FOR FORWARD REFERENCE
031 15 0 2861 T1 BSA T4+1,8 IS IT A DIMENSION PARAMETER
031 16 0 2862 LDR - 1
031 17 0 2863 BUN *+2
031 18 0 2864 T2 LDR DICT+33
031 19 0 2865 STR EXPLN
031 20 0 2866 STP ASSNX ASSIGN PLACE FOR VARIABLE OR CONSTANT
031 21 0 2867 BFA ASSN1,64,0 IF NOT THERE ALREADY
031 22 0 2868 BUN T4+1
031 23 0 2869 T3 CLL VIMAG
031 24 0 2870 STR VIMAG,00 FREE UP TEMP STORAGE CELL FOR
031 25 0 2871 CAD G FUTURE USE UNLESS G = 1 OR 3
031 26 0 2872 BSA LASMX,3
031 27 0 2873 BSA T4-2,1
031 28 0 2874 SLT 10
031 29 0 2875 STP INSX,TEMPS
031 30 0 2876 BUN INS
031 31 0 2877 CAD TCONS
031 32 0 2878 STA EXPLN
031 33 0 2879 T4 CAD VIMAG INSERT NEW ADDRESS INTO INSTRUCTION
031 34 0 2880 SRA 4
031 35 0 2881 STA INSTR,04
031 36 0 2882 STP INSX
031 37 0 2883 BSA H+,9
031 38 0 2884 BSA *+2,8
031 39 0 2885 BUN *+2
031 40 0 2886 BFA H+,51,8
031 41 0 2887 *F ADD XZERO+1
031 42 0 2888 BSA B+,1
031 43 0 2889 CAD G
031 44 0 2890 BSA LASMX-1,3 G=3 MEANS THIS IS ONLY AN INDEX PSEUDO-OP
031 45 0 2891 *G STP WRITX
031 46 0 2892 BUN WRIT2
031 47 0 2893 CLL EXPLN
031 48 0 2894 LASMX BUN *
031 49 0 2895 *B EXT EX0 CHECK IF THIS ADDRESS IS A
031 50 0 2896 SUB FRSTP NAME PARAMETER WHICH MUST BE FIXED
031 51 0 2897 SLA 8 UP AT RUNNING TIME
031 52 0 2898 LDB PAREF
031 53 0 2899 *E CFA - 0,22
031 54 0 2900 BCE H+
031 55 0 2901 DLB - 0,64,0
031 56 0 2902 BUN E-
031 57 0 2903 T5 LDR G ARRAY - IF G NEQ 1 OR 3
031 58 0 2904 BFR T4,12,10 RETURN THE INCREMENT WORD TO
031 59 0 2905 BFR T4,12,30 AVAILABLE STORAGE, WE ARE DONE WITH IT
031 60 0 2906 CAD AVAIL
031 61 0 2907 STB AVAIL
031 62 0 2908 STA - 0,04
031 63 0 2909 LDB VIMAG
031 64 0 2910 CAD - 1
031 65 0 2911 BUN T4-1
031 66 0 2912 *H CAA BUF
031 67 0 2913 SLA 4
031 68 0 2914 EXT GTAB0+5
031 69 0 2915 ADD LOCN
031 70 0 2916 BUN INS1
031 71 0 2917 TCONS CNST $TEMP$
031 75 0 2918 WRIT2 CAD LOCN WRITE SUBROUTINE - PUTS INSTRUCTION
031 76 0 2919 SRA 4 INTO OUTPUT BUFFER.
031 77 0 2920 IFL LOCN,64,1 WRIT2 ENTRY - PUT INSTRUCTION OUT FOR
031 78 0 2921 LDR INSTR LOCATION LOCN AND INCREMENT LOCN
031 79 0 2922 WRIT3 STA WRTF,04 WRIT3 ENTRY - LOCATION IS IN RA(04)
031 80 0 2923 SUB PREV AND INSTRUCTION IS IN REGISTER R
031 81 0 2924 LDB CNTR1
031 82 0 2925 BFA E+,04,0
031 83 0 2926 SUB XONE+1 DOES THIS LOCATION EQUAL THE PREVIOUS ONE
031 84 0 2927 BFA F+,04,0 (IF SO WE WILL ERASE THE PREVIOUS ONE)
031 85 0 2928 STB LRTF,04 OR IS IT ONE HIGHER
031 86 0 2929 CAD WRTF IF NOT,WE WILL PUT OUT A NEW RECORD TRANS
031 87 0 2930 STA - BUF+1
031 88 0 2931 IFL CNTRI,00,1
031 89 0 2932 *F LDB LRTF
031 90 0 2933 IFL - BUF+1,32,1 THE 32-FIELD CONTAINS THE NUMBER OF
031 91 0 2934 WRIT7 IFL CNTRI,00,1 SEQUENTIAL WORDS TO LOAD
031 92 0 2935 LDB CNTRI
031 93 0 2936 *E STR - BUF
031 94 0 2937 STR DESCR
031 95 0 2938 BCS *+2,2
031 96 0 2939 BUN *+3
031 97 0 2940 WRTSW STP 4 9898,0300
031 98 0 2941 BUN 4 9898,WRTF
031 99 0 2942 STB WRTSW,41
032 00 0 2943 LDR WRTF
032 01 0 2944 STR PREV,04
032 02 0 2945 WRIT6 LDR CNTRI IS THE BUFFER FULL NOW
032 03 0 2946 CFR CNTRF
032 04 0 2947 BCL WRITX IF NOT,EXIT
032 05 0 2948 WRIT5 LBC NN IF SO, CALCULATE CHECK SUM
032 06 0 2949 *C CLA BUF+2
032 07 0 2950 SUB - BUF+99
032 08 0 2951 IBB *-1,1
032 09 0 2952 BOF *+1
032 10 0 2953 STA BUF+99
032 11 0 2954 MOW 4 BUF,OT,1 WRITE ONE BLOCK
032 12 0 2955 IFL BUF,00,1
032 13 0 2956 CLL CNTRI
032 14 0 2957 CLL CNTRF INITIALIZE FOR NEXT BLOCK
032 15 0 2958 IFL CNTRF,00,96
032 16 0 2959 WRIT4 CLL BUF+1
032 17 0 2960 LDB C-
032 18 0 2961 RTF BUF+1,98
032 19 0 2962 WRITX BUN *
032200
032210
032220
032 23 0 2963 GENXK STB V1,12 MARK V1 AS IN A-REGISTER
032 24 0 2964 GENXB CAD V1 V1 = RESULT
032 25 0 2965 GENXX STP INSX,OPRND PUT RESULT OF SOME GENERATED QUANTITY
032 26 0 2966 BUN INS IN OPERAND STACK AND RECORD IN
032 27 0 2967 LDB OPRND SER THE POSITION WHERE STORED
032 28 0 2968 LDR - 0 IF IT IS AN ACCUMULATOR SYMBOL.
032 29 0 2969 BFR A+,11,0
032 30 0 2970 BUN GENRX (HINT..SER IS USED TO CONTROL PLACEMENT
032 31 0 2971 *A STB SER INTO TEMP STORAGE)
032 32 0 2972 GENRX BUN *
032 33 0 2973 CAD BUNZ
032 34 0 2974 GENXY STP ASMBX ASSEMBLE FINAL INSTRUCTION AND EXIT.
032 35 0 2975 BUN ASMBY
032 36 0 2976 BUN GENRX
032 39 0 2977 GENR STA OPRTN GENERATORS.BRANCH ACCORDING TO KIND OF OP
032 40 0 2978 BSA GEN2,2 UNARY OP
032 41 0 2979 BSA GEN3,3 NULLARY OP
032 42 0 2980 BSA GFWRF,4 FORWARD REFERENCE
032 43 0 2981 BSA GBWRF,5 BACKWARD REFERENCE
032 44 0 2982 BSA GFWRF,7 INCREMENTED FORWARD REFERENCE
032 45 0 2983 STP OBTNX BINARY OP
032 46 0 2984 BUN OBTN1 GET V1 OPERAND
032 47 0 2985 STP OBTNX
032 48 0 2986 BUN OBTN2 GET V2 OPERAND
032 49 0 2987 CAD OPRTN
032 50 0 2988 BSA GEN3,1 SPECIAL BINARY OP
032 51 0 2989 BSA GRELN,8 RELATIONAL OP
032 52 0 2990 BFA A+,64,0
032 53 0 2991 GENAG STP ARTHX PLUS TIME OR DIVIDE, ETC.
032 54 0 2992 BUN ARTHG
032 55 0 2993 CAD ACCUM
032 56 0 2994 BUN GENXX
032 57 0 2995 *A LDB MODE GIVEN A PLUS OPERATION WHICH TAKES
032 58 0 2996 CAD - 0 PLACE ON PARENTHESIS LEVEL ONE OF AN
032 59 0 2997 CFA TEST,67 ARRAY SUBSCRIPT AND WHERE ONE OF THE
032 60 0 2998 BCU GENAG TWO OPERANDS IS A FIXED POINT CONSTANT
032 61 0 2999 CAD V1
032 62 0 3000 BFA B+,22,21 IF ALL THIS IS TRUE WE DONT COMPILE
032 63 0 3001 LDR V2 EXTRA INSTRUCTIONS, WE ADD IT TO THE
032 64 0 3002 BFR *+2,22,21 BASE ADDRESS OF THE ARRAY.
032 65 0 3003 BUN GENAG
032 66 0 3004 STR V1
032 67 0 3005 STA V2
032 68 0 3006 SLT 10
032 69 0 3007 *B DLB V1,64,0
032 70 0 3008 LDR - 1 UNLESS THE CONSTANT IS BIGGER THAN +1
032 71 0 3009 SRT 0 IN WHICH CASE WE COULD GET INTO TROUBLE
032 72 0 3010 CFR XONE+1 LOADING B WITH A NEGATIVE QUANTITY.
032 73 0 3011 BCH GENAG
032 74 0 3012 LDB ARAS IF THE ARRAY IS A CALL-BY-NAME
032 75 0 3013 DLB - 0,64,0 WITHIN A PROCEDURE WE CANT DO THIS
032 76 0 3014 GENDX SRT 0 INCREMENTATION EITHER
032 77 0 3015 TS001 CLA
032 78 0 3016 ADD - 0
032 79 0 3017 BSA GENAG,1
032 80 0 3018 SLT 10 ADD THIS TO THE INCREMENT WORD (MOD10000)
032 81 0 3019 SLA 4
032 82 0 3020 ADA - 0
032 83 0 3021 STA - 0,64
032 84 0 3022 GENX2 CAD V2
032 85 0 3023 BUN GENXX PUT OPERAND FOR UNARY OP INTO V1
032 86 0 3024 GEN2 STP OBTNX
032 87 0 3025 BUN OBTN1 OPRTN/64 IS THE NAME OF THE GENERATOR
032 88 0 3026 GEN3 DLB OPRTN,64,0 FOR THIS OPERATOR
032 89 0 3027 BUN - 0
032 90 0 3028 TEST F244 1,NDXCM,0
032 94 0 3029 GREL2 STP WEMX
032 95 0 3030 BUN WEM,*+2
032 96 0 3031 CNST 30167200000 IMPROPER ASSIGNMENT OPERATION
032 97 0 3032 CLL OPRTN CHANGE OPERATION TO EQL
032 98 0 3033 GRELN CSU V1 RELATIONS EQL,GTR, ETC.
032 99 0 3034 STA V1
033 00 0 3035 CAD OPRTN
033 01 0 3036 STA OPRTM
033 02 0 3037 DFL YETH,62,10 CHANGE TO FIXED POINT SUBTRACT OPERATION
033 03 0 3038 CLL OPRTN
033 04 0 3039 STB BOF,61
033 05 0 3040 STP ARTHX
033 06 0 3041 BUN ARTHG
033 07 0 3042 IFL YETH,62,10
033 08 0 3043 BSA *+2,0
033 09 0 3044 IFL OPRTM,64,1
033 10 0 3045 BFA D+,11,0 IF RESULT IS NOT IN REGISTER A,GET IT
033 11 0 3046 LSA 0
033 12 0 3047 STA V1
033 13 0 3048 STP CADX
033 14 0 3049 BUN CAD1 ASSEMBLE BOF *+2 IF NECESSARY
033 15 0 3050 *D STP ASMBX
033 16 0 3051 BOF BUN ASMBL,BOF2
033 17 0 3052 *D LDB OP CHECK HOW WE ARE USING THIS RELATION
033 18 0 3053 LDR - 0
033 19 0 3054 BFR A+,67,00 IS IT IN A BOOLEAN EXPRESSION
033 20 0 3055 IFL OPRTM,64,2
033 21 0 3056 CFR OPIF,67 IS IT IN AN IF CLAUSE
033 22 0 3057 BCE C+
033 23 0 3058 IFL OPRTM,64,2 IS IT IN AN UNTIL CLAUSE
033 24 0 3059 CFR CRU,67
033 25 0 3060 BCE C+
033 26 0 3061 STP WEMX IF NOT IT IS AN IMPROPER
033 27 0 3062 BUN WEM,CMPLX RELATIONAL OPERATION
033 28 0 3063 CNST 30157200000
033 29 0 3064 *A STP INTRX
033 30 0 3065 BUN B+
033 31 0 3066 BUN GENXX
033 32 0 3067 *C CAD AVAIL REMOVE IF OR UNTIL FROM OP STACK
033 33 0 3068 STB AVAIL,04
033 34 0 3069 STA - 0
033 35 0 3070 STR OP,04
033 36 0 3071 STP INTRX
033 37 0 3072 BUN B+
033 38 0 3073 GREL1 CLL PSI IF, UNTIL FINISHED.. MAKE A COMPOUND
033 39 0 3074 IFL PHI,00,01 STATEMENT.
033 40 0 3075 BUN CMPLX
033 41 0 3076 *B DLB OPRTM,64,0
033 42 0 3077 CAD - GTAB3
033 43 0 3078 BUN INTRP
033 46 0 3079 GEXPN CAD V1 POWER GENERATOR. V2*V1
033 47 0 3080 CLL XI
033 48 0 3081 CFA V10,67 IF V1 IS 2
033 49 0 3082 BCE Q+
033 50 0 3083 LDR V2 OR 2.0 WITH V2 FLOATING,
033 51 0 3084 CFA V11,67
033 52 0 3085 BCU *+2 WE WILL MAKE THIS INTO A MULTIPLY
033 53 0 3086 BFR Q+,21,0 OTHERWISE IF V1 IS NEGATED
033 54 0 3087 BSA A+,0
033 55 0 3088 STP ACCX EMPTY THE A-REGISTER
033 56 0 3089 BUN ACC3
033 57 0 3090 STP CADX AND CAD V1, SRT 10.
033 58 0 3091 BUN CAD1
033 59 0 3092 *B CAD SRT10
033 60 0 3093 BUN C+ ELSE, IF IT IS IN THE A REGISTER, SRT 10.
033 61 0 3094 *A BFA B-,11,0
033 62 0 3095 CAD LDRV1 IN OTHER CASES, LDR V1
033 63 0 3096 *C STP ASMBX
033 64 0 3097 BUN ASMBY THEN CAD V2
033 65 0 3098 STP CADX
033 66 0 3099 BUN CAD2 SEPARATE FOUR CASES
033 67 0 3100 *D CLB FIX TO FIX = 0
033 68 0 3101 CAD V1 FIX TO FLT = 1
033 69 0 3102 BFA *+2,21,1 FLT TO FIX = 2
033 70 0 3103 IBB *+1,1 FLT TO FLT = 3
033 71 0 3104 CAD V2
033 72 0 3105 BFA *+2,21,1
033 73 0 3106 IBB *+1,2
033 74 0 3107 STB D-,04 GENERATE STP BUN TO APPROPRIATE SUBRUTINE
033 75 0 3108 LDR - NUTBL SET UP TO PRINT THE NAME
033 76 0 3109 STP LINKX
033 77 0 3110 IBB LINK-1,EXPF
033 78 0 3111 LDB D- COMPUTE TYPE OF RESULT
033 79 0 3112 CAD - EXPA
033 80 0 3113 EXPA BUN GENX,0100
033 81 0 3114 *Q CAA V2
033 82 0 3115 STA V2 THE SQUARE CASE
033 83 0 3116 STA V1
033 84 0 3117 BFA T+,11,2
033 85 0 3118 STP ACCX FREE A REGISTER
033 86 0 3119 BUN ACC3
033 87 0 3120 CAD V2 IF V2 WAS IN THE A REGISTER, IT WILL
033 88 0 3121 BFA T+,11,0 HAVE BEEN STORED OUT
033 89 0 3122 CSA CADV1 OTHERWISE WE WANT TO CADV1 AND PREVENT
033 90 0 3123 STP ASMBX DOUBLE-INDEXING IF V1 IS AN ARRAY
033 91 0 3124 BUN ASMBY
033 92 0 3125 STB V1,11
033 93 0 3126 *T CAD DOT MLTIPLY V2.V2
033 94 0 3127 STA OPRTN
033 95 0 3128 BUN GENAG

View File

@@ -0,0 +1,557 @@
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>BAC-220 Assembler</title>
<!--
/***********************************************************************
* 220/software/tools BAC-Assembler.html
************************************************************************
* Copyright (c) 2016, Paul Kimpel.
* Licensed under the MIT License, see
* http://www.opensource.org/licenses/mit-license.php
************************************************************************
* Assembler for the Burroughs 220 Algebraic Compiler (BALGOL)
*
* ...
*
************************************************************************
* 2016-12-09 P.Kimpel
* Original version, cloned from retro-b5500 B5500CardReaderPrototype.html.
***********************************************************************/
-->
<meta name="Author" content="Paul Kimpel">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<style>
BODY {
position: relative;
margin: 1ex}
BUTTON.greenButton {
background-color: #060;
color: white;
font-family: Arial Rounded, Arial, Helvetica, sans-serif;
font-size: 9pt;
font-weight: bold;
width: 60px;
height: 40px;
border: 1px solid #DDD;
border-radius: 4px}
BUTTON.whiteButton {
background-color: #999;
color: black;
font-family: Arial Rounded, Arial, Helvetica, sans-serif;
font-size: 9pt;
font-weight: bold;
width: 60px;
height: 40px;
border: 1px solid #DDD;
border-radius: 4px}
BUTTON.redButton {
background-color: #900;
color: white;
font-family: Arial Rounded, Arial, Helvetica, sans-serif;
font-size: 9pt;
font-weight: bold;
width: 60px;
height: 40px;
border: 1px solid #DDD;
border-radius: 4px}
BUTTON.greenLit {
background-color: green}
BUTTON.whiteLit {
background-color: white}
BUTTON.redLit {
background-color: #F00}
DIV.heading {
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold}
#CardReaderPanel {
position: relative;
color: white;
background-color: #666;
width: 600px;
height: 150px;
border: 1px solid black;
border-radius: 8px;
padding: 0;
vertical-align: top}
#CRNotReadyLight {
position: absolute;
top: 8px;
left: 8px}
#CREOFBtn {
position: absolute;
top: 8px;
left: 76px}
#CRStopBtn {
position: absolute;
top: 8px;
left: 144px}
#CRStartBtn {
position: absolute;
top: 8px;
left: 212px;}
#CRFileSelector {
position: absolute;
top: 56px;
left: 8px;
width: 580px;
border: 1px solid white}
#CRProgressBar {
position: absolute;
top: 84px;
left: 8px;
width: 580px;
border: 1px solid white}
#CROutHopperFrame {
position: absolute;
top: 106px;
left: 8px;
width: 580px;
height: 3em;
margin-top: 1px;
border: 1px solid white;
color: black;
background-color: white;
font-family: DejaVu Sans Mono, Consolas, Courier, monospace;
font-size: 9pt;
font-weight: normal}
#TextPanel {
position: relative;
height: 250px;
width: 820px;
overflow: scroll;
padding: 4px;
border: 1px solid black;
color: black;
background-color: white;
font-family: DejaVu Sans Mono, Consolas, Courier, monospace;
font-size: 8pt;
font-weight: normal}
</style>
</head>
<body>
<div class=heading>
Burroughs 220 BALGOL Assembler
</div>
<div id=CardReaderPanel>
<button id=CRNotReadyLight class="whiteButton whiteLit">NOT READY</button>
<button id=CRStartBtn class="greenButton">START</button>
<button id=CREOFBtn class="redButton">EOF</button>
<button id=CRStopBtn class="redButton">STOP</button>
<input id=CRFileSelector type=file size=90>
<meter id=CRProgressBar min=0 max=100 value=0 title="Click to clear input hopper"></meter>
<iframe id=CROutHopperFrame scrolling=auto></iframe>
</div>
<div class=heading>
Pass 1 Output
</div>
<pre id=TextPanel>
</pre>
<script>
"use strict";
window.addEventListener("load", function() {
// Card reader properties
var buffer = "";
var bufferLength = 0;
var bufferOffset = 0;
var cardsPerMinute = 2000;
var eofArmed = 0;
var eolRex = /([^\n\r\f]*)((:?\r[\n\f]?)|\n|\f)?/g;
var lastReaderStamp = 0;
var millisPerCard = 60000/cardsPerMinute;
var outHopper;
var outHopperFrame = $$("CROutHopperFrame");
var panel = $$("TextPanel");
var readerState = 0;
// Card reader ready state
var readerNotReady = 0;
var readerReady = 1;
// Opcode table
var opTab = {};
var operandRex = /^(\S+)/;
/**************************************/
function $$(id) {
return document.getElementById(id);
}
/**************************************/
function padLeft(s, len, fill) {
/* Pads the string "s" on the left to length "len" with the filler character
"fill". If fill is empty or missing, space is used. If the initial string is
longer than "len", it is truncated on the left to that length */
var pad = (fill || " ").charAt(0);
var result = s;
var rLen = s.length;
if (rLen > len) {
result = result.substring(rLen-len);
} else while (rLen < len) {
result = pad + result;
++rLen;
}
return result;
}
/**************************************/
function padRight(s, len, fill) {
/* Pads the string "s" on the right to length "len" with the filler character
"fill". If fill is empty or missing, space is used. If the initial string is
longer than "len", it is truncated on the right to that length */
var pad = (fill || " ").charAt(0);
var result = s;
var rLen = s.length;
if (rLen > len) {
result = result.substring(0, len);
} else while (rLen < len) {
result = result + pad;
++rLen;
}
return result;
}
/**************************************/
function appendLine(text) {
/* Appends "text"+NL as a new text node to the panel DOM element */
var e = document.createTextNode(text + "\n");
panel.appendChild(e);
panel.scrollTop += 30
}
/**************************************/
function clearPanel() {
/* Clears the text panel */
var kid;
while (kid = panel.firstChild) {
panel.removeChild(kid);
}
}
/**************************************/
function setReaderReady(ready) {
/* Controls the ready-state of the card reader */
$$("CRFileSelector").disabled = ready;
if (ready) {
readerState = readerReady;
$$("CRStartBtn").classList.add("greenLit");
$$("CRNotReadyLight").classList.remove("whiteLit");
} else {
readerState = readerNotReady;
$$("CRStartBtn").classList.remove("greenLit");
$$("CRNotReadyLight").classList.add("whiteLit");
}
}
/**************************************/
function armEOF(armed) {
/* Controls the arming/disarming of the EOF signal when starting with
an empty input hopper */
if (armed) {
eofArmed = 1;
$$("CREOFBtn").classList.add("redLit");
} else {
eofArmed = 0;
$$("CREOFBtn").classList.remove("redLit");
}
}
/**************************************/
function readACard(successor) {
/* Reads one card image from the buffer, pads or trims the image as
necessary to 80 columns, and calls the "successor" function with it.
If the reader is not ready, nothing happens */
var bx = bufferOffset;
var card;
var cardLength;
var line;
var match;
var stamp = performance.now();
var delta = millisPerCard - stamp + lastReaderStamp;
lastReaderStamp = stamp;
if (readerState != readerReady) {
; // just exit
} else if (bx >= bufferLength) {
setReaderReady(false);
$$("CRProgressBar").value = 0;
} else {
eolRex.lastIndex = bx;
match = eolRex.exec(buffer);
if (!match) {
card = "";
} else {
bx += match[0].length;
card = match[1];
}
cardLength = card.length;
if (cardLength > 80) {
line = card = card.substring(0, 80);
} else {
line = card;
while (card.length <= 70) {
card += " ";
}
while (card.length < 80) {
card += " ";
}
}
bufferOffset = bx;
$$("CRProgressBar").value = bufferLength-bx;
while (outHopper.childNodes.length > 1) {
outHopper.removeChild(outHopper.firstChild);
}
outHopper.appendChild(document.createTextNode("\n"));
outHopper.appendChild(document.createTextNode(line));
if (delta < 2) {
successor(card);
} else {
setTimeout(successor, delta, card);
}
}
}
/**************************************/
function CRStartBtn_onclick(ev) {
/* Handle the click event for the START button */
if (readerState != readerReady) {
if (bufferOffset >= bufferLength) {
//alert("Empty hopper.");
if (eofArmed) {
appendLine("\\\\\\\\\\ [EOF] /////");
armEOF(false);
}
} else {
setReaderReady(true);
setTimeout(startReader, 500); // delay until the reader can come up to speed...
}
}
}
/**************************************/
function CRStopBtn_onclick(ev) {
/* Handle the click event for the STOP button */
$$("CRFileSelector").value = null; // reset the control so the same file can be reloaded
if (readerState == readerNotReady) {
armEOF(false);
} else if (readerState == readerReady) {
setReaderReady(false);
}
}
/**************************************/
function CREOFBtn_onclick(ev) {
/* Handle the click event for the EOF button */
armEOF(!eofArmed);
}
/**************************************/
function CRProgressBar_onclick(ev) {
/* Handle the click event for the "input hopper" progress bar */
if (bufferOffset < bufferLength && readerState == readerNotReady) {
if (confirm("Do you want to clear the reader input hopper?")) {
buffer = "";
bufferLength = 0;
bufferOffset = 0;
$$("CRProgressBar").value = 0;
}
}
}
/**************************************/
function fileLoader_onLoad(ev) {
/* Handle the onload event for a Text FileReader */
if (bufferOffset < bufferLength) {
buffer = buffer.substring(bufferOffset);
} else {
clearPanel();
buffer = "";
}
buffer += ev.target.result;
bufferOffset = 0;
bufferLength = buffer.length;
$$("CRProgressBar").value = buffer.length;
$$("CRProgressBar").max = buffer.length;
}
/**************************************/
function fileSelector_onChange(ev) {
/* Handle the <input type=file> onchange event when a file is selected */
var f = ev.target.files[0];
var reader = new FileReader();
/********************
alert("File selected: " + f.name +
"\nModified " + f.lastModifiedDate +
"\nType=" + f.type + ", Size=" + f.size + " octets");
********************/
reader.onload = fileLoader_onLoad;
reader.readAsText(f);
}
/**************************************/
function checkBrowser() {
/* Checks whether this browser can support the necessary stuff */
var missing = "";
if (!window.File) {missing += ", File"}
if (!window.FileReader) {missing += ", FileReader"}
if (!window.FileList) {missing += ", FileList"}
if (!window.DOMTokenList) {missing += ", DOMTokenList"}
if (!window.ArrayBuffer) {missing += ", ArrayBuffer"}
if (!window.DataView) {missing += ", DataView"}
if (!(window.performance && "now" in performance)) {missing += ", performance.now"}
if (missing.length == 0) {
return false;
} else {
alert("No can do... your browser does not support the following features:\n" + missing.substring(2));
return true;
}
}
/**************************************/
function startReader() {
/* Reads a deck of cards and displays them until the reader goes empty */
readACard(processCard);
}
/**************************************/
function processCard(card) {
/* Callback function for the card reader. Processes the card image */
var count = 0;
var entry;
var match;
var opCode;
var operand;
var x;
// Accumulate statistics
// appendLine(card);
opCode = card.substring(26, 30).trim();
if (opCode.length > 0) {
operandRex.lastIndex = 0;
match = operandRex.exec(card.substring(32));
if (match) {
operand = match[1];
count = 1;
if (operand.charAt(0) != "$") {
x = -1;
do {
x = operand.indexOf(",", x+1);
if (x >= 0) {
++count;
}
} while (x >= 0);
}
}
if (opCode in opTab) {
entry = opTab[opCode];
} else {
opTab[opCode] = entry = [0];
}
while (entry.length <= count) {
entry.push(0);
}
++entry[count];
}
if (bufferOffset < bufferLength && opCode != "FINI") {
readACard(processCard);
} else {
// Report statistics
setReaderReady(false);
appendLine("");
appendLine("___________________________");
appendLine("");
for (opCode in opTab) {
entry = opTab[opCode];
operand = padRight(opCode, 5);
for (x=0; x<entry.length; ++x) {
operand += padLeft(entry[x].toString(), 5);
}
appendLine(operand);
}
}
}
/* Start of window.onload() */
if (checkBrowser()) {
return;
}
armEOF(false);
setReaderReady(false);
$$("CRFileSelector").addEventListener("change", fileSelector_onChange, false);
$$("CRStartBtn").addEventListener("click", CRStartBtn_onclick, false);
$$("CRStopBtn").addEventListener("click", CRStopBtn_onclick, false);
$$("CREOFBtn").addEventListener("click", CREOFBtn_onclick, false);
$$("CRProgressBar").addEventListener("click", CRProgressBar_onclick, false);
outHopperFrame.contentDocument.head.innerHTML += "<style>" +
"BODY {background-color: #F0DCB0; margin: 0; padding: 0} " +
"PRE {margin: 0; font-size: 9pt; font-family: DejaVu Sans Mono, Consolas, Courier, monospace}" +
"</style>";
outHopper = document.createElement("pre");
outHopperFrame.contentDocument.body.appendChild(outHopper);
}, false);
</script>
</body>
</html>