diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt index e9e0872..7c53e05 100644 --- a/LICENSE +++ b/LICENSE.txt @@ -1,7 +1,7 @@ -MIT License - Copyright (c) 2016 Paul Kimpel +MIT License + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights diff --git a/index.html b/index.html index 5156ce2..01ef268 100644 --- a/index.html +++ b/index.html @@ -66,10 +66,10 @@

 

-Copyright (c) 2016, Paul Kimpel • Licensed under the MIT License +Copyright (c) 2016, Paul Kimpel • Licensed under the MIT License
Revised - 2016-12-03 + 2016-12-17

diff --git a/software/BALGOL/BALGOL-Main.baca b/software/BALGOL/BALGOL-Main.baca index 2065663..d86b698 100644 --- a/software/BALGOL/BALGOL-Main.baca +++ b/software/BALGOL/BALGOL-Main.baca @@ -3386,6 +3386,711 @@ 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 93 0 3126 *T CAD DOT MULTIPLY V2.V2 033 94 0 3127 STA OPRTN 033 95 0 3128 BUN GENAG +033 96 0 3129 NUTBL CNST $FX*FX$ +033 97 0 3130 CNST $FX*FL$ +033 98 0 3131 CNST $FL*FX$ +033 99 0 3132 CNST $FL*FL$ + + +034 02 0 3133 GABSF STP TSTOX ABSOLUTE VALUE. +034 03 0 3134 BUN TSTOP LOOK SEE IF ITS -ABS +034 04 0 3135 LDB *+3 +034 05 0 3136 LDR V1 +034 06 0 3137 BFR *+2,11,0 V1 IN MEMORY, ABS CAA V1 +034 07 0 3138 DBB LSA0,LSA0-CAAV1 V1 IN MEMORY,-ABS CSA V1 +034 08 0 3139 BCU *+2 V1 IN ACCUM, ABS LSA 0 +034 09 0 3140 DBB 0,9999 V1 IN ACCUM, -ABS LSA 1 +034 10 0 3141 STP ASMBX +034 11 0 3142 BUN ASMBZ +034 12 0 3143 BUN GENXK + + + + +034 17 0 3144 GHYPH LDB OPRND MINUS OPERATOR +034 18 0 3145 EX43 CNST 10013110000 SIMPLY REVERSE SIGN DIGIT OF +034 19 0 3146 STA - 0 NEXT ITEM IN OPERAND STACK +034 20 0 3147 BUN GENRX + + +034 23 0 3148 GBNOT LDR V1 BOOLEAN NOT. +034 24 0 3149 CAD G7 +034 25 0 3150 BFR GEN4,22,01 +034 26 0 3151 STP ACCX IF V1 NOT IN A-REGISTER. +034 27 0 3152 BUN ACC4 STORE A-REGISTER IF NECESSARY +034 28 0 3153 CAD V1 +034 29 0 3154 BSA E+,1 CHECK THAT V1 IS BOOLEAN +034 30 0 3155 BFA E+,21,0 +034 31 0 3156 *F CAD G11 CAD =1=, SUB V1. +034 32 0 3157 GEN4 STP INTRX +034 33 0 3158 BUN INTRP +034 34 0 3159 BUN GENXK IF V1 IS IN THE ACCUMULATOR, +034 35 0 3160 *E STP WEMX SUB=1=, LSA 0 +034 36 0 3161 BUN WEM,F- +034 37 0 3162 CNST 30159610000 IMPROPER BOOLEAN OPERAND + + +034 40 0 3163 GIF LDR BZAFR IF AND UNTIL +034 41 0 3164 GIF1 STR T+ +034 42 0 3165 CAD V1 +034 43 0 3166 BFA E+,21,0 CHECK V1 BOOLEAN +034 44 0 3167 BSA E+,1 +034 45 0 3168 *A STP CADX BRING IT INTO A REGISTER +034 46 0 3169 BUN CAD1 +034 47 0 3170 STP ASMBX ASSEMBLE BFA FORWARD,01,0 (IF) +034 48 0 3171 BUN ASMBL,T+ OR BFA FORWARD,01,1 (UNTIL) +034 49 0 3172 BUN GREL1 MAKE COMPOUND STATEMENT +034 50 0 3173 *E STP WEMX +034 51 0 3174 BUN WEM,A- +034 52 0 3175 CNST 30159610000 IMPROPER BOOLEAN OPERAND +034 53 0 3176 *T HLT 0 + + +034 56 0 3177 GPCS STP ACCX PCS GENERATOR +034 57 0 3178 BUN ACC4 FREE A REGISTER +034 58 0 3179 STP FIXEX BRING V1 FIXED POINT INTO A +034 59 0 3180 BUN FIXER UNLESS ITS A CONSTANT +034 60 0 3181 BFA A+,11,2 THEN GENERATE SLA 0009 +034 61 0 3182 CAD +6034037172 STA *+2,11 +034 62 0 3183 BUN GEN4 CAD +1 +034 63 0 3184 *A DLB V1,64,00 BCS *+2,0 +034 64 0 3185 CAD - 1 CLA +034 65 0 3186 SLA 9 OR IF IT WAS A CONSTANT GENERATE +034 66 0 3187 STA BCSL2,11 MERELY THE LAST THREE OF THESE +034 67 0 3188 CAD +0371720000 +034 68 0 3189 *B BUN GEN4 + + +034 71 0 3190 GSIGN STP TSTOX SIGN(V1) +034 72 0 3191 BUN TSTOP +034 73 0 3192 STP CADX BRING V1 INTO A-REGISTER +034 74 0 3193 BUN CAD1 +034 75 0 3194 SRT 10 GENERATE BZA *+4 +034 76 0 3195 CAD +4959045600 SRT 0 +034 77 0 3196 BFR B+,21,0 CAD =1.0= OR =1= +034 78 0 3197 CAD +4959035600 SLT 0 +034 79 0 3198 GEN5 DEFN * +034 80 0 3198 *B STP INTRX +034 81 0 3199 BUN INTRP +034 82 0 3200 BUN GENXV + + +034 85 0 3201 GFRWF STP FXUPX FIX UP FORWARD REFERENCE +034 86 0 3202 BUN FXUP +034 87 0 3203 BUN GENRX + + +034 90 0 3204 GBWRF DLB OPRTN,64,00 BUN TO BACKWARD REFERENCE +034 91 0 3205 STB BUNI,04 +034 92 0 3206 CAD BUNI +034 93 0 3207 BUN GENXY + +034 95 0 3208 GCRA STP REMX,OPRND OBTAIN V1. +034 96 0 3209 BUN REM,*+2 +034 97 0 3210 BUN GENRX +034 98 0 3211 STA V1 +034 99 0 3212 CLL SER BRANCH TO GCRJ(INPUT) OR GCRK(OUTPUT) +035 00 0 3213 DLB STSV,64,0 +035 01 0 3214 BUN - 0 + +035 03 0 3215 GCRB DLB DELTA,22,0 = OPERATOR +035 04 0 3216 DBB GREL2,1 OR DID HE MEAN EQL +035 05 0 3217 DLB V2,64,0 +035 06 0 3218 LDR - 0 +035 07 0 3219 STR TS001,34 +035 08 0 3220 CAD V2 +035 09 0 3221 BSA Z+,1 +035 10 0 3222 STR V2 +035 11 0 3223 STA V2,00 +035 12 0 3224 LDB OP +035 13 0 3225 CAD - 0 +035 14 0 3226 CFA CRB,64 CHECK FOR MULTIPLE ASSIGNMENT +035 15 0 3227 BCE A+ OR A FOR STATEMENT, WHERE WE +035 16 0 3228 LDB MODE CANT DO STR INSTEAD OF STA +035 17 0 3229 CAD - 0 +035 18 0 3230 CFA FORMD,64 +035 19 0 3231 BCU *+3 +035 20 0 3232 IFL OMEGA,00,1 +035 21 0 3233 *A CLL XI +035 22 0 3234 CAD V2 LEFTHAND OPERAND CANNOT BE +035 23 0 3235 BFA Z+,11,9 A LABEL, ACCUMULATOR SYMBOL +035 24 0 3236 BFA *+3,11,1 CONSTANT, TEMP STORAGE +035 25 0 3237 CFA *+1,11 OR A LIBRARY PROCEDURE +035 26 0 3238 F424 5001,34,Z+ +035 27 0 3239 CAD V1 +035 28 0 3240 BFA S+,21,3 (CLL IN MULTIPLE ASSIGNMENT) +035 29 0 3241 BFA A+,11,2 IS RHS A CONSTANT. +035 30 0 3242 *V STP CADX IF NOT, GET RHS INTO ACCUMULATOR +035 31 0 3243 BUN CAD1 +035 32 0 3244 LDR V2 +035 33 0 3245 CFR V1,21 +035 34 0 3246 STR V1,21 DO THE TYPES AGREE +035 35 0 3247 BCE C+ IF NOT, LINK EITHER TO +035 36 0 3248 BFR Y+,21,0 FIX OR FLOAT ROUTINE +035 37 0 3249 DLB FIXGN,64,0 +035 38 0 3250 BUN X+ +035 39 0 3251 *Y DLB TABSC+82,64,0 +035 40 0 3252 *X STP LINKX +035 41 0 3253 BUN LINK1 +035 42 0 3254 *C CAA V2 +035 43 0 3255 BFA Y+,11,8 +035 44 0 3256 CAA G13 +035 45 0 3257 *K STP INTRX ASSEMBLE STA V2 UNLESS FUNCTION OR +035 46 0 3258 BUN INTRP OR PROCEDURE NAME +035 47 0 3259 CAA TS001 +035 48 0 3260 *Y LDR MU +035 49 0 3261 BFR W+,62,01 IF WE ARE IN SCOPE OF A LABEL REQUESTED +035 50 0 3262 *M DLB V2,64,0 FOR MONITORING, OR THE VARIABLE +035 51 0 3263 STP CONVX ASSIGNED IS SO REQUESTED, +035 52 0 3264 BUN CONV+1 ASSEMBLE LINK TO MONITOR SUBROUTINE +035 53 0 3265 BUN E+ +035 54 0 3266 *W BSA M-,2 +035 55 0 3267 BSA M-,6 +035 56 0 3268 *E CLL OMEGA +035 57 0 3269 BUN GENXV +035 58 0 3270 *A CFA V7,64 IF WE ARE SETTING SOMETHING TO A +035 59 0 3271 BCE S+ NONZERO CONSTANT, +035 60 0 3272 CFA V6,64 +035 61 0 3273 BCE S+ +035 62 0 3274 *D CFA V2,21 MATCH THE TYPES +035 63 0 3275 BCE V- +035 64 0 3276 BFA U+,21,0 +035 65 0 3277 STP FLTCX +035 66 0 3278 BUN FLTCN +035 67 0 3279 BUN T+ +035 68 0 3280 *U STP FIXCX +035 69 0 3281 BUN FIXCN +035 70 0 3282 *T STA V1,00 +035 71 0 3283 BUN A- +035 72 0 3284 *S CAD COMP+7 SOMETHING = 0 +035 73 0 3285 LDB OMEGA +035 74 0 3286 LDR V2 SEVERAL CASES TO CONSIDER +035 75 0 3287 STB V1,23 +035 76 0 3288 IFL V1,21,3 +035 77 0 3289 DBB K=,1 CLA,CLL V2 IN FOR STATEMENT +035 78 0 3290 SLA 6 +035 79 0 3291 BFR K-,11,8 CLA IN PROCEDURE OR FUNCTION CASE +035 80 0 3292 SLA 6 +035 81 0 3293 BUN K- CLL V2 OTHERWISE +035 82 0 3294 *Z STB V1,21 +035 83 0 3295 STP WEMX +035 84 0 3296 BUN WEM,E- +035 85 0 3297 CNST 30167320000 IMPROPER ASSIGNMENT STATEMENT + + + + +035 90 0 3298 GCRC STP PRTRX +035 91 0 3299 BUN PMTR ASSEMBLE THE PARAMETER-OBTAINING INSTRUC- +035 92 0 3300 LDB OPRND TION +035 93 0 3301 CAD - 0 +035 94 0 3302 CFA DEX,67 DOES REGISTER B CONTAIN THE FIRST +035 95 0 3303 BCE A+ PARAMETER LOCATION +035 96 0 3304 STA DEX +035 97 0 3305 STA V2 IF NOT, ASSEMBLE A DLB V2,44,0 +035 98 0 3306 STP ASMBX +035 99 0 3307 BUN ASMBL,DLBV2 +036 00 0 3308 *A LDB FUNS +036 01 0 3309 CAD - 0 +036 02 0 3310 BSA *+2,3 TURN TAG ON IF WE HAVE PASSED THE +036 03 0 3311 BUN *+2 2ND SEMICOLON +036 04 0 3312 IFL TAG,00,1 +036 05 0 3313 SRA 8 +036 06 0 3314 LSA 0 +036 07 0 3315 SUA GTAB0 WHAT PARAMETER NUMBER IS THIS +036 08 0 3316 STA STAAB,04 (FIRST 0000,THEN 9999, THEN 9998,ETC.) +036 09 0 3317 IFL - 0,22,1 +036 10 0 3318 CAD STAAB +036 11 0 3319 BUN GENXY + + +036 14 0 3320 GCRD STP TSTOX MOD OPERATION MOD(V2,V1) +036 15 0 3321 BUN TSTOP +036 16 0 3322 CSU V2 IF -MOD CHANGE SIGN OF V2. +036 17 0 3323 BCU *+2 +036 18 0 3324 STA V2 +036 19 0 3325 EXT V1 +036 20 0 3326 BFA E+,21,0 CHECK THAT V1,V2 BOTH INTEGER +036 21 0 3327 *F LDR V1 +036 22 0 3328 CFR V10,66 IF V1 IS THE CONSTANT 2 OR -2 WE HAVE +036 23 0 3329 BCE Z+ A SPECIAL CASE +036 24 0 3330 *F STP ACCX +036 25 0 3331 BFR ACC1,11,0 PUT V1 IN MEMORY +036 26 0 3332 *C STP CADX +036 27 0 3333 BUN CAD2 BRING V2 INTO ACCUMULATOR +036 28 0 3334 CAD V1 +036 29 0 3335 CFA *+1,11 +036 30 0 3336 F424 2001,35,Y+ +036 31 0 3337 DLB V1,64,0 +036 32 0 3338 CSA - 1 CHECK IF V1 IS A CONSTANT,POWER OF TEN +036 33 0 3339 CLL SYMBL +036 34 0 3340 BZA E+ +036 35 0 3341 SRT 1 +036 36 0 3342 ADL SYMBL +036 37 0 3343 BFR *-2,11,0 +036 38 0 3344 SLT 1 +036 39 0 3345 CFA XONE+1,00 +036 40 0 3346 *Y CAD +5822570000 +036 41 0 3347 BCU GEN4 IF NOT,GENERATE SRT10,DIV V1, SLT 30 +036 42 0 3348 CLL RR0 +036 43 0 3349 STP FLTCX OTHERWISE GENERATE EXTRACT +036 44 0 3350 BUN FLTC1 WITH THE CONSTANT -1 OR -11 OR -111,ETC. +036 45 0 3351 STA V1,64 +036 46 0 3352 CAD *+1 +036 47 0 3353 BUN GEN4,2800 +036 48 0 3354 *E STP WEMX +036 49 0 3355 BUN WEM,GENXX +036 50 0 3356 CNST 30113376911 IMPROPER ARGUMENT OF MOD FUNCTION +036 51 0 3357 *Z STP ACCX +036 52 0 3358 BUN ACC3 IF IT IS MOD 2, GENERATE +036 53 0 3359 CAD G99 CSU =1= EXT V2 +036 54 0 3360 BUN GEN4 + + +036 57 0 3361 GCRE LDB LAMDA EITHER IF FINISHING. +036 58 0 3362 CLL LAMDA IF OTHERWISE APPEARED, DO NOTHING +036 59 0 3363 DBB GENRX,1 IF NO OTHERWISE APPEARED, +036 60 0 3364 CAD NOPZ PUT OUT A NOP INSTRUCTION +036 61 0 3365 BUN GENXY + + +036 64 0 3366 GCRF CLL IOTA FINISH DECLARAING SOME ARRAY +036 65 0 3367 DLB V1,64,0 V1 IS FIRST DIMENSION,V2 IS ARRAY NAME +036 66 0 3368 CSU - 1 +036 67 0 3369 MUL ARRI +036 68 0 3370 SLT 10 +036 69 0 3371 *B LDR MULS +036 70 0 3372 ADL VARB RESERVE SPACE FOR THIS ARRAY +036 71 0 3373 STA TEMP +036 72 0 3374 *A CAD VARB +036 73 0 3375 ADD XONE+1 +036 74 0 3376 STA ABASE,04 PUT BEGINNING LOCATION IN ABASE +036 75 0 3377 SUB ARRL +036 76 0 3378 ADA GTAB0 COMPUTE BASE ADDRESS (MOD 10000) +036 77 0 3379 SLA 4 +036 78 0 3380 DLB V2,64,0 +036 79 0 3381 STA - 0,64 MOVE LIST OF MULTIPLIERS +036 80 0 3382 STR - 0,04 TO THIS ARRAY NAME +036 81 0 3383 CAA TEMP +036 82 0 3384 SLA 4 PUT TOTAL LENGTH OF ARRAY ON TOP +036 83 0 3385 CLL MULS OF MULTIPLIER LIST +036 84 0 3386 BUN LNGTH + + +036 87 0 3387 GCRG DLB V1,64,0 MIDDLE OF ARRAY DECLARATION +036 88 0 3388 CAD - 1 +036 89 0 3389 MUL ARRL IF GIVEN ARRAY A(I,J,K,L) +036 90 0 3390 STR ARRL +036 91 0 3391 IFL ARRL,00,1 ARRL IS SET TO ((J+1)K+1)L+1 +036 92 0 3392 CAD - 1 +036 93 0 3393 MUL ARRI +036 94 0 3394 STR ARRI +036 95 0 3395 CAD V1 ARRI IS SET TO JKL +036 96 0 3396 LDB B- +036 97 0 3397 LNGTH LDR V1 ALL DIMENSIONS MUST BE +036 98 0 3398 BFR A+,22,21 FIXED POINT CONSTANTS +036 99 0 3399 STP WEMX +037 00 0 3400 BUN WEM,GENRX +037 01 0 3401 CNST 30163640000 IMPROPER ARRAY DECLARATION +037 02 0 3402 *A STP INSX +037 03 0 3403 BUN INS1 J,K,L GO TO MULTIPLIER STACK +037 04 0 3404 BUN GENRX + + +037 07 0 3405 GCRH STP XSTX MAKE V1 INTEGRAL,IN MEMORY +037 08 0 3406 BUN XST +037 09 0 3407 CAD LBCV1 GENERATE LBC V1 +037 10 0 3408 BUN GENX + + +037 13 0 3409 GCRI CAA G3 GENERATE LSA 9,BUN IOPUS +037 14 0 3410 DFL UPSLN,62,29 +037 15 0 3411 BUN A+ + + +037 18 0 3412 GCRJ CAD V1 +037 19 0 3413 BFA E+,11,0 +037 20 0 3414 BFA E+,11,2 CHECK FOR VALID INPUT EXPRESSION +037 21 0 3415 BSA E+,1 +037 22 0 3416 CAA COMMX +037 23 0 3417 BUN A+ + + +037 26 0 3418 GCRK STP CADX BRING EXPRESSION INTO A-REGISTER +037 27 0 3419 BUN CAD1 +037 28 0 3420 *B CAD G10 +037 29 0 3421 *A LDR IOPUS GENERATE LDB * IBB IOPUS,2 +037 30 0 3422 CLL DEX +037 31 0 3423 STR BUNI,04 +037 32 0 3424 STR IBBI,04 +037 33 0 3425 LDR V1 +037 34 0 3426 STR LDBL0,21 +037 35 0 3427 STP INTRX +037 36 0 3428 BUN INTRP +037 37 0 3429 BUN GENRX +037 38 0 3430 *E STP WEMX +037 39 0 3431 BUN WEM,B- IMPROPER INPUT DECLARATION +037 40 0 3432 CNST 30170640000 + + +037 43 0 3433 GCRM DFL MU,62,29 END OF SCOPE OF MONITORED LABEL +037 44 0 3434 BUN GENRX + + +037 47 0 3435 GCRN STP FIXEX MAKE SURE V1 IS INTEGER +037 48 0 3436 BUN FIXER EITHER A CONSTANT OR IN A REGISTER +037 49 0 3437 BFA A+,11,2 +037 50 0 3438 CAA G8 IF NOT A CONSTANT, ADD *+1 NOP V2 +037 51 0 3439 BUN GEN5 +037 52 0 3440 *A STB V1,11 IF A CONSTANT, ADD OR SUBTRACT ITS +037 53 0 3441 DLB V1,64,0 VALUE FROM THE ASSIGNMENT OF V2,MOD 10000 +037 54 0 3442 LDR - 1 +037 55 0 3443 STR 0 +037 56 0 3444 SLT 14 +037 57 0 3445 EXT EX42 (-11110000) +037 58 0 3446 DLB V2,64,00 +037 59 0 3447 ADA - 0 +037 60 0 3448 STA - 0,64 +037 61 0 3449 STP ACCX +037 62 0 3450 BUN ACC4 +037 63 0 3451 CAA G9 CAD *+1, NOP V2 +037 64 0 3452 *B BUN GEN5 + + +037 67 0 3453 GCRO STP PMTRX LAST PARAMETER TO FUNCTION IS V1 +037 68 0 3454 BUN PMTR +037 69 0 3455 CLL DEX +037 70 0 3456 STP REMX,FUNS +037 71 0 3457 BUN REM,*+2 +037 72 0 3458 G9 F424 0553,0,* +037 73 0 3459 STA BUNV2,22 +037 74 0 3460 DLB V2,64,0 CHECK THAT PROPER +037 75 0 3461 LDR - 1 NUMBER OF ARGUMENTS +037 76 0 3462 STR EXPLN HAS APPEARED +037 77 0 3463 LDR - 0 +037 78 0 3464 BFR B+,12,88 +037 79 0 3465 SLT 6 +037 80 0 3466 BFA A+,51,4 +037 81 0 3467 CFR BUNV2,22 +037 82 0 3468 BCE B+ +037 83 0 3469 BFR B+,22,0 +037 84 0 3470 STP WEMX +037 85 0 3471 BUN WEM,*+2 +037 86 0 3472 CNST 30113370800 IMPROPER ARGUMENT OF PROCEDURE +037 87 0 3473 *B CAD G4 GENERATE STP V2, BUN V2 +037 88 0 3474 STP INTRX +037 89 0 3475 BUN INTRP +037 90 0 3476 STB V2,11 +037 91 0 3477 CLL TAG +037 92 0 3478 BUN GENX2 +037 93 0 3479 *A SLT 2 +037 94 0 3480 BFR B-,21,3 +037 95 0 3481 CFR V1,21 IF ARGUMENT TO LIBRARY FUNCTION +037 96 0 3482 BCE B- IS WRONG TYPE, CONVERT IT. +037 97 0 3483 DLB TABSC+82,64,0 +037 98 0 3484 BFR *+2,21,0 +037 99 0 3485 DLB FIXGN,64,0 +038 00 0 3486 STP LINKX +038 01 0 3487 BUN LINK1 +038 02 0 3488 BUN B- + + +038 05 0 3489 *E BFA GCRP,11,0 +038 06 0 3490 STP WEMX +038 07 0 3491 BUN WEM,GCRP +038 08 0 3492 CNST 34661000000 +038 09 0 3493 GCRP STP REMX,OPRND END OF PROCEDURE OR FUNCTION DECLARATION +038 10 0 3494 BUN REM,E- CHECK FOR EXTRA OPERANDS +038 11 0 3495 *A STP REMX,FUNS +038 12 0 3496 BUN REM2,*+2 PULL NAME OF THIS OFF FUN-STACK +038 13 0 3497 G10 F424 6273,0,* +038 14 0 3498 LDR FNSW +038 15 0 3499 BZR A+ +038 16 0 3500 SRA 4 +038 17 0 3501 STA LDBI,4 RETURN FROM FUNCTION +038 18 0 3502 STP VSUBX +038 19 0 3503 BUN VSUB1 +038 20 0 3504 *D CLL FNSW BRING BACK OLD TEMP STORAGE CELLS +038 21 0 3505 BUN OLDT AND EXIT +038 22 0 3506 *A STP REMX,PR3 FORGET ALL PREFIXES DEFINED IN THIS +038 23 0 3507 BUN REM,A- PROCEDURE +038 24 0 3508 LDR RR1 +038 25 0 3509 STR RR3 BRING IN OTHERWISE TYPE OF MAIN PROGRAM +038 26 0 3510 LDR PR1 +038 27 0 3511 STR PR3 BRING IN PREFIXES OF MAIN PROGRAM +038 28 0 3512 LDR CHI3 +038 29 0 3513 STR CHI BRING IN MONITOR STATUS OF MAIN PROGRAM +038 30 0 3514 LDR PAREF +038 31 0 3515 BFR H+,04,00 +038 32 0 3516 *C CAD PLOC IF PARAMETERS OF OUTPUT TYPE HAVE +038 33 0 3517 STP FXUPX OCCURRED, FIX UP THE INSTRUCTION +038 34 0 3518 BUN FXUP TO BUN TO THIS PART OF THE PROCEDURE +038 35 0 3519 CAD FRSTP +038 36 0 3520 SLA 4 +038 37 0 3521 STA IRSTP +038 38 0 3522 *E LDB PAREF +038 39 0 3523 IBB F+,9999 +038 40 0 3524 CAD - 1 +038 41 0 3525 IBB *+1,1 REMOVE LIST OF REFERENCES TO THIS +038 42 0 3526 STA SETUP,04 PARAMETER, MAKE IT THE SETUP STACK +038 43 0 3527 SRA 4 +038 44 0 3528 LDR AVAIL +038 45 0 3529 STB AVAIL +038 46 0 3530 STR - 0 +038 47 0 3531 STA PAREF,04 +038 48 0 3532 BSA G+,1 (THE FIRST PARAMETER MAY ALREADY BE +038 49 0 3533 EXT CUL2 IN REGISTER A) +038 50 0 3534 SUB IRSTP CAD PARAMETER +038 51 0 3535 STA VEE,64 +038 52 0 3536 STP ASMBX +038 53 0 3537 BUN ASMBL,X+ +038 54 0 3538 *G STP REMX,SETUP GENERATE ALL STA ----,04 +038 55 0 3539 BUN REM,*+2 FROM THIS PARAMETER +038 56 0 3540 BUN E- +038 57 0 3541 SRA 4 +038 58 0 3542 STA STAI,04 +038 59 0 3543 STP ASMBX +038 60 0 3544 BUN ASMBL,STAI +038 61 0 3545 BUN G- +038 62 0 3546 *F CAD PLOC ASSEMBLE TO BUN TO THE +038 63 0 3547 SRA 4 BEGINNING OF THE PROCEDURE +038 64 0 3548 STA BUNI,04 +038 65 0 3549 IFL BUNI,04,01 +038 66 0 3550 STP ASMBX +038 67 0 3551 BUN ASMBL,BUNI +038 68 0 3552 *H CLL LEVEL EXIT,WE ARE THROUGH WITH THE PROCEDURE +038 69 0 3553 BUN D- +038 70 0 3554 VEE F2448 11,0,0 +038 71 0 3555 *W F244 11,VEE,0 +038 72 0 3556 *X F424 0,10,W--V + + +038 75 0 3557 GCRQ IFL PRFSW,62,25 PROCESS LAST PARAMETER. MARK IT +038 76 0 3558 STP YSUBX AS IN ACCUMULATOR IF ITS A CALL BY NAME +038 77 0 3559 BUN YSUB1 +038 78 0 3560 DFL PRFSW,62,25 WE HAVE JUST FINISHED COLLECTING +038 79 0 3561 CLL TAG FUNCTION OR PROCEDURE PARAMETERS +038 80 0 3562 STA V3 +038 81 0 3563 IFL V3,11,3 +038 82 0 3564 STP ASMBX STORE LAST PARAMETER +038 83 0 3565 BUN ASMBL,STAT3 +038 84 0 3566 *C CLL PARSW +038 85 0 3567 LDB FNSW +038 86 0 3568 DBB GENRX,1 EXIT IF A FUNCTION DECLARATION +038 87 0 3569 LDR PAREF +038 88 0 3570 BFR D+,04,00 IF CALL BY NAME PARAMETERS HAVE +038 89 0 3571 CAD LOCN APPEARED, ASEMBLE BUN INSTRUCTION +038 90 0 3572 STA PLOC WHICH WILL GO TO THE INITIALIZATION PART +038 91 0 3573 STP AXMBX +038 92 0 3574 BUN ASMBL,BUNZ +038 93 0 3575 *D IFL DELTA,04,4 +038 94 0 3576 BUN GENRX + + +038 97 0 3577 GCRR STP XSTX V1 IS LAST ARRAY SUBSCRIPT +038 98 0 3578 BUN XST MAKE SURE IT IS FIXED POINT AND +038 99 0 3579 DLB V1,64,0 NOT IN REGISTER A +039 00 0 3580 LDR - 1 NOW COMES VERY TRICKY CODING. +039 01 0 3581 DLB V2,64,00 IF THE SUBSCRIPT IS A CONSTANT, +039 02 0 3582 CAD V1 SIMPLY CALCULATE THE ADDRESS +039 03 0 3583 BFA GENDX,22,21 +039 04 0 3584 IFL - 0,11,1 OTHERWISE SET INCREMENT WORD TO A 6 +039 05 0 3585 STP INSX AND SET UP A LINK TO V1 +039 06 0 3586 BUN INS1 NOW INC WD/64=BASE ADDR. /04=AAAA +039 07 0 3587 BUN GENX2 AAAA/67=V1 /04=ARRAY INFORMATION + + +039 10 0 3588 GCRS STP REMX,FUNS FINISH SUBROUTINE DECLARATION. REMOVE +039 11 0 3589 BUN REM,OLDT LOCATION FROM FUNS, REMOVE TEMP STORAGES. +039 12 0 3590 G11 F424 0313,0,* + + +039 15 0 3591 GCRT CAD BUNV1 GENERATE BUN V1 +039 16 0 3592 BUN GENXY + + +039 19 0 3593 GCRU LDR BNZAF +039 20 0 3594 BUN GIF1 UNTIL SIMILAR TO IF + + +039 23 0 3595 GCRV LDR LOCN END OF SEGMENT +039 24 0 3596 CFR LCMAX,64 +039 25 0 3597 BCL *+2 +039 26 0 3598 STR LCMAX,64 SET LCMAX TO GREATEST LOCN +039 27 0 3599 STP REMX,FUNS USED IN SEGMENTS +039 28 0 3600 BUN REM,*+2 +039 29 0 3601 G12 F424 8990,0,* +039 30 0 3602 STA LOCN,64 RESET LOCN TO BEGINNING OF SEGMENT +039 31 0 3603 LSA 8 +039 32 0 3604 SRA 4 OUTPUT CONTROL WORD FOR LOADER +039 33 0 3605 BUN GFWRF + + + +039 37 0 3606 GCRW IFL LAMDA,00,1 RECORD THAT OTHERWISE HAS OCCURRED +039 38 0 3607 BUN GENRX + + +039 41 0 3608 GCRX DEFN GENXY-1 + + +039 44 0 3608 GCRY CAD V1 MAKE SURE A SUBSCRIPT IS FIXED POINT +039 45 0 3609 STP FIXES +039 46 0 3610 BFA FIXER,21,0 +039 47 0 3611 ` BUN GENXV + + +039 50 0 3612 GCRZ STP CADX STOP +039 51 0 3613 BUN CAD1 THERE WILL BE AN ACCUMULATOR +039 52 0 3614 *A CAD HLTZ SYMBOL PRESENT, IF THE STATEMENT +039 53 0 3615 BUN GENXY WAS SIMPLY STOP$ + + + +039 57 0 3616 GCROY DLB *+2,44,0 TRACE +039 58 0 3617 STP LIBRX +039 59 0 3618 BUN LIBRF,DMPER +039 60 0 3619 IFL TAG,00,1 +039 61 0 3620 STP REMX,OPRND +039 62 0 3621 BUN REM,*+2 +039 63 0 3622 BUN GENRX IF LABEL ONLY,EXIT +039 64 0 3623 STA TEMP IF LABEL(N), PUT N ON STACK +039 65 0 3624 DLB TEMP,64,0 +039 66 0 3625 CAD - 1 +039 67 0 3626 SLA 6 +039 68 0 3627 JCROY LDB * +039 69 0 3628 STA - 0,44 +039 70 0 3629 BUN GENRX +039 71 0 +039 72 0 +039 73 0 3630 OBTN1 STP REMX,OPRND +039 74 0 3631 BUN REM,*+2 GET TOP OF OPERAND STACK +039 75 0 3632 BUN E+ AND PLACE IT IN V1 +039 76 0 3633 STA V1 +039 77 0 3634 BUN A+ +039 78 0 +039 79 0 +039 80 0 3635 OBTN2 STP REMX,OPRND GET TOP OF OPERAND STACK AND PLACE IT IN +039 81 0 3636 BUN REM,C+ V2 +039 82 0 3637 *E STP WEMX +039 83 0 3638 BUN WEM,GENRX +039 84 0 3639 CNST 37161000000 MISSING OPERAND +039 85 0 3640 *C STA V2 +039 86 0 3641 *A BFA B+,11,0 IF AN ACCUMULATOR SYMBOL WAS +039 87 0 3642 BUN OBTNX REMOVED, SET SER TO ZERO +039 88 0 3643 *B CLL SER +039 89 0 3644 OBTNX BUN * +039 90 0 +039 91 0 +039 92 0 3645 PMTR LDR KAPPA SELECTIVELY BRING PARAMETER INTO A REG. +039 93 0 3646 BZR A+ HAVE EMPTY SUBSCRIPTS APPEARED +039 94 0 3647 CLL KAPPA +039 95 0 3648 *B STP CADX +039 96 0 3649 BUN CAD1 IF SO, ASSEMBLE CAD V1 AND EXIT +039 97 0 3650 BUN PMTRX +039 98 0 3651 *A LDB FUNS +039 99 0 3652 CAD - 0 IF BEFORE THE FIRST SEMICOLON, +040 00 0 3653 BSA B-,1 ASSEMBLE CAD V1 AND EXIT +040 01 0 3654 STP ACCX +040 02 0 3655 BUN ACC4 +040 03 0 3656 CAD V1 OTHERWISE WE HAVE A CALL BY NAME +040 04 0 3657 BFA PMTRX,11,0 FREE THE A-REGISTER +040 05 0 3658 BSA C+,0 +040 06 0 3659 *E STP WEMX +040 07 0 3660 BUN WEM,*+2 +040 08 0 3661 CNST 30111130000 IMPROPER FUNCTION ARGUMENT +040 09 0 3662 STA V1 +040 10 0 3663 *C CAA G5 +040 11 0 3664 STP INTRX ASSEMBLE CAD *+1, NOP V1 +040 12 0 3665 BUN INTRP +040 13 0 3666 PMTRX BUN * + + +040 16 0 3667 ACC DEFN *-1 +040 17 0 3667 ACC1 BUN C+ ACC1.. PLACE V1 IN TEMP STORAGE +040 18 0 3668 ACC2 STP GETMX ACC2.. PLACE V2 IN TEMP STORAGE +040 19 0 3669 BUN GETMP +040 20 0 3670 STA V2,64 +040 21 0 3671 IFL V2,11,3 +040 22 0 3672 CAD STAT2 +040 23 0 3673 BUN ASMBY +040 24 0 3674 *C STP GETMX +040 25 0 3675 BUN GETMP +040 26 0 3676 STA V1,64 +040 27 0 3677 IFL V1,11,3 +040 28 0 3678 CAD STAT1 +040 29 0 3679 BUN ASYBY +040 30 0 3680 ACCX DEFN ASMBX +040 31 0 3680 ACC3 LDR V1 ACC3.. FREE THE A REGISTER +040 32 0 3681 BFR C-,11,0 IF V1 IS IN A, DO ACC1 +040 33 0 3682 LDR V2 +040 34 0 3683 BFR ACC2,11,0 IF V2 IS IN A, DO ACC2 +040 35 0 3684 ACC4 LDB SER ELSE DO ACC4 +040 36 0 3685 IBB ACCX,9999 ACC4.. IF THE A-REGISTER IS IN USE +040 37 0 3686 STP GETMX WITH OTHER OPERANDS BESIDES THE CURRENT +040 38 0 3687 BUN GETMP ONE(S), STORE IT INTO TEMP +040 39 0 3688 LDB SER +040 40 0 3689 STA - 0,64 AND MODIFY THE STACK ACCORDINGLY +040 41 0 3690 IFL - 0,11,3 +040 42 0 3691 LDR - 0 +040 43 0 3692 STR V3 +040 44 0 3693 CAD STAT3 +040 45 0 3694 CLL SER +040 46 0 3695 BUN ASMBY + + +040 49 0 3696 CAD2 LDB XTWO+1 CAD V2 +040 50 0 3697 BUN CAD +040 51 0 3698 CAD1 LDB XONE+1 CAD V1 +040 52 0 3699 CAD CAD - V +040 53 0 3700 STB ZHE,04 BRING V(RB) INTO A REGISTER +040 54 0 3701 BFA CADX,11,0 +040 55 0 3702 STP ACCX IF ITS NOT THERE ALREADY, FREE +040 56 0 3703 BUN ACC4 THE ACCUMULATOR +040 57 0 3704 LDB ZHE +040 58 0 3705 CAD - V COMPILE CAD OR CSU V1 OR V2 +040 59 0 3706 BSA B+,1 +040 60 0 3707 CAD - CADV1-1 +040 61 0 3708 *D STP ASMBX +040 62 0 3709 BUN ASMBY +040 63 0 3710 *C LDB ZHE +040 64 0 3711 STB - V,12 +040 65 0 3712 CAD - V +040 66 0 3713 CADX BSA *,0 +040 67 0 3714 STP ACCX TO REVERSE SIGN OF A-REGISTER, STORE +040 68 0 3715 BUN - ACC IT THEN COMPILE CSU INSTRUCTION +040 69 0 3716 LDB ZHE +040 70 0 3717 *B CAD - CSUV1-1 +040 71 0 3718 BUN D- + + +040 74 0 3719 XST CAD V1 +040 75 0 3720 STP FIXEX FIX V1 IF IT IS AN INTEGER +040 76 0 3721 BFA FIXER,21,0 +040 77 0 3722 STP ACCX +040 78 0 3723 BFA ACC1,11,0 STORE V1 IF IT IS IN REGISTER A +040 79 0 3724 XSTX BUN * + + +040 82 0 3725 FIXER CAD V1 +040 83 0 3726 BFA A+,11,2 +040 84 0 3727 STP CADX +040 85 0 3728 BUN CAD1 CHANGE V1 TO INTEGER FORM +040 86 0 3729 BFA FIXES,21,1 +040 87 0 3730 DLB FIXGN,64,00 +040 88 0 3731 STP LINKX LINK TO FIX ROUTINE +040 89 0 3732 BUN LINK1 +040 90 0 3733 IFL V1,21,1 +040 91 0 3734 CAD V1 +040 92 0 3735 FIXEX BUN * +040 93 0 3736 *A BFA FIXES,21,1 IF V1 IS A CONSTANT, +040 94 0 3737 STP FIXCX CHANGE IT WITH FIXCN +040 95 0 3738 BUN FIXCN +040 96 0 3739 STA V1,00 +040 97 0 3740 BUN FIXEX-1 + + +041 00 0 3741