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:
@@ -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
|
||||
|
||||
557
software/tools/BAC-Assembler.html
Normal file
557
software/tools/BAC-Assembler.html
Normal 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>
|
||||
Reference in New Issue
Block a user