Digital PDFs
Documents
Guest
Register
Log In
XX-00828-0F
August 1964
27 pages
Original
0.9MB
view
download
Document:
F-64PX PDP-6 Programming Examples
Order Number:
XX-00828-0F
Revision:
Pages:
27
Original Filename:
http://bitsavers.org/pdf/dec/pdp6/F-64PX_PDP-6_Programming_Examples_Aug64.pdf
OCR Text
F-64PX 8/ 64 PROGRAMMING EXAMPLES F64-PX 8/64 PDP-6 PROGRAMMING EXAMPLES DIGITAL EQUIPMENT CORPORATION • MAYNARD, MASSACHUSETTS / Copyright 1964 by Digital Equipment Corporation II INTRODUCTION This manual contains examples of programming for the PDP-6 Type 166 Processor. They have been chosen to illustrate both the arithmetic and logical capabilities of the processor. explanation of the instructions shown see the PDP-6 Handbook (F-65). For an The examples use the same instruction mnemonics as the MACRO-6 assembler. The language is described in the MACRO-6 Manual (F-64MAS). Times based on design estimates are shown in some of the examples. have been conservatively calculated. All of the instruction times For example, no attempt has been made to take advan- tage of speed gains due to memory overlapping. Two of the examples show how time ma), be saved by moving to fast memory a short program which executes a large number of iterations. One of these, Character Manipu lation, is programmed in both a straightforward manner and by being moved to fast memory in order to show the break-even point between the time gained and the increased overhead time. The second, Two-bit Testing, was programmed for 500 iterations. In this case there is a considerable gain in time by moving the program to fast memory. The last example, Any Radix Print, demonstrates the use of recursion to shorten programs. Sixteen examples are contained in this booklet: l. Single Precision Integer Arithmetic 2. Double Prec is ion Integer Arithmetic 3. Floating Point Arithmetic 4. Fix a Floating Point Number 5. Float a Fixed Point Integer 6. Repetitive Calculation 7. Subscripts 8. Exponentiation 9. Character Manipulation 10. Character Translation 1l. Character Addition 12. Fifteenth Degree Polynom ia I 13. Evaluation of Complex Polynomial 14. Matrix Inversion 15. Two-Bit Testing and Depositing of Data 16. Any Radix Print 2 SINGLE PRECISION INTEGER ARITHMETIC Assume: 1) A, B, C, D, E, F, G, H, J, K, L, M, N, and P are arbitrary memory locations. 2) Arguments and instructions are in the same memory module. 3) No scaling is required. 4) Y indicates 1 of the 16 accumulators Time in microseconds A=B+C MOVE Y, B ADD Y, C MOVEM Y, A 4 4 4 Total 12 D=E+F+G MOVE Y, E ADD Y, F ADD Y, G MOVEM Y, D 4 4 4 4 Total 16 Total 4 13.6 4 21.6 Total 4 13.6 4 4 25.6 H=JxK MOVE Y, J IMUL Y, K MOVEM Y, H L=MxN+P MOVE Y, M IMUL Y, N ADD Y, P MOVEM Y, L 3 DOUBLE PRECISION INTEGER ARITHMETIC Assume: 1) A, B, C, 0, E, F, G, H, J, K, L, M, N, and P are arbitrary memory locations, each denoting a block of two consecutive memory registers. 2) Each integer is stored in two consecutive memory locations with the high order integer in the first location and the low order integer in the second. 3) Instructions and arguments are in same memory module. Time in dcroseconds A=B+C J FC L 16, . + I, MOVE 0, B CLEAR STRAY FLAGS MOVE 1, B + 1 ADD I, C+l, JFCL2, 01, 02: ADD 0, C, MOVEM 0, A, MOVEM I, A+l ADD LOW ORDER PARTS DID LOW ORDER PARTS OFLO ADD HIGH ORDER PARTS STORE RE SU LTS 01: AOJA 0, 02 2.1 4.0 4.0 4.0 2.1 4.0 4.0 4.0 COMPENSATE FOR OVERFLOW 3.3 Total 28.2-31.5 D=E+F+G 2.1 JFCL16, .+1, MOVE 0, E MOVE I, E + 1 ADD I, F + 1, JFCL 2, DOl, DOl A: ADD I, G + I, JFC L 2, 002, DD2A: ADD 0, F ADD 0, G MOVEM 0, 0, MOVEM I, 0+1 CLEAR STRAY FLAGS 001: AOJA 0, 001 A, 002: AOJA 0, DD2A, COMPENSATE FOR OVERFLOW 3.3 COMPENSATE FOR OVERFLOW 3.3 Total 38.3-44.5 ADD lOW ORDER PARTS DID LOW ORDER PARTS OFLO ADD lOW ORDER PARTS OVERFLOW? ADD HIGH ORDER PARTS STORE ANSWERS 4 4.0 4.0 4.0 2.1 4.0 2.1 4.0 4.0 4.0 4.0 DOUBLE PRECISION INTEGER ARITHMETIC (continued) Time in microseconds K=JxK MOVE 0, J MUL 0, K, MOVE 2, J + 1 MUL 2, K, JFCL16, .+1, ADD 1,2, JFCL 2, M1 M1 A: MOVE 2, J, MUL 2, K + 1 ADD 1, 2, JFCL 2, M2 M2A: MOVEM 1, H + 1, MOVEM, H M1: AOJA 0, M1A M2: AOJA 0, M2A MULTIPLY HIGH ORDER PARTS MULTIPLY LOW {J)i HIGH (K) CLEAR STRAY FLAGS SUM PRODUCTS OVERFLOW? MULTIPLY HIGH (J), LOW (K) SUM PRODUCTS OVERFLOW? STORE RESU LTS COMPENSATE OVERFLOW COMPENSATE OVERFLOW 5 4.0 14.0 4.0 14.0 2.1 4.0 2.1 4.0 14.0 4.0 2.1 4.0 4.0 3.3 3.3 Total 76.3-82.9 FLOATING POINT ARITHMETIC Assume: 1) A, B, C, D, E, F, G, H, J, K, L, M, N, and P are arbitrary memory locations. 2) Arguments and instructions are in the same memory module. 3) Y indicates 1 of the 16 accumulators. A=B+C MOVE Y, B FAD Y, C MOVEM Y, A 4.0 5.8 4.0 Total 13.8 D=E+F+G 4.0 MOVE Y , E FAD Y, F FAD Y, G MOVEM Y, D 5.8 5.8 4.0 Total 19.6 H=JxK MOVE Y, J FMP Y, K MOVEM Y, H 4.0 12.6 4.0 Total 20.6 L=MxN+P MOVE Y , M FMP Y, N FAD Y, P MOVEM Y, L PROBLEM: 4.0 12.6 5.8 4.0 Total 26.4 Consider an eight block table with 100 entries in each block. Let A, B, C, D, E, F, G, and Hdenote the first location of each block. For each entry find: G = {A_B)2 + (C_D)2 H = (G/E) x F Assume: 1) All entries in normalized floating point. 2) Argument and instructions are in the same memory module. 6 FLOATING POINT ARITHMETIC (continued) Time in microseconds Program BEGIN: 2 4 MOVSI1,+D100 MOVE 2, A(l) FSB 2, B(l) FMP 2, 2 MOVE 3, C(l) FSB 3, D(l) FMP 3, 3 FAD 2, 3 MOVEM 2, G(l) FDV 2, E(l) FMP 2, F(l) MOVEM 2, H(l) AOBJN 1, BEGIN+1 6.2 12.3 4 6.2 12.3 5.5 4 18.0 12.8 4.0 3.3 The total time for 100 repetitions: 92.6 x 100 + 2 = 9.26 mill iseconds 7 FIX A FLOATING POINT NUMBER Assume: 1) A floating point number in any accumulator from 1-15 designated by F. The resu It is returned in F+ 1 modu Ie 16. MUll F, 400, TSC F, F, ASH F+ 1, -243(F), EXPONENT IN F, FRACTION IN F+1 COMPLEMENT EXPONENT IF NEGATIVE TRUNCATE TO GREATEST INTEGER FLOAT A FIXED POINT NUMBER Assume: 1) A fixed point integer less than 227 in magnitude in accumulator C. TLC C,233000, FAD C, 0, XOR INTO WORD FLOATING ADD ZERO TO NORMALIZE 2) A fixed point integer I, _235:s. I < 235 , in accumulator F. Note: Accumulator F+1 is used in the calculation. IDIVI SKIPE TLC TLC FAD F,400, F-, F,243000, F+1,233000, F, F+1, DIVIDE WORD INTO TWO PIECES SKIP IF NORMALIZED ZERO XOR EXPONENT INTO F XOR EXPONENT INTO F+l COMBINE AND NORMALIZE 8 REPETITIVE CALCULATION The following are repeated 10000 times: A=B+C, D=E+F+G, H=Jx K Assume: 1) A, B, C, D, E, F, G, H, J, K, L, M, N, and P are arbitrary memory locations. 2) Arguments are in floating point. 3) Arguments and instructions are in the same memory module. Time in microseconds B1 : MOVE I 2," D1 0000, MOVE 0, B FAD 0, C MOVEM 0, A MOVE 0, E FAD 0, F FAD 0, G MOVEM 0, D MOVE 0, J FMP 0, K MOVEM 0, H SOJN 2, B1, IN ITIALIZE COUNTER COUNT The total time for 10000 repetitions: 55.2 x 10000 + 2 = 0.552 sec. 9 2 4 5.2 4 4 5.2 5.2 4 4 12.6 4 3 55.2 SUBSCRIPTS Compute for 1=1, 100 A(I)=B(I)+C(I) D(I)=E (I)+F (I)+G( I) H(I)=A(I)xD(I) Assume: 1) The data is arranged in memory as follows: Bl, B2, ---Bl00, Cl, C2, ---Cl00, El, Fl, Gl, E2, F2, G2 ---El 00, Fl00, Gl00, A1, D1, A2, D2 ---A100, Dl00, Hl, H2, ---H100 Time in microseconds C1: CLEARB 3, 2, HRLZI 1, -+D100, MOVE 4, E(3) FAD 4, F(3) FAD 4, G(3) MOVEM 4, D(2), MOVE 0, B(1) FAD 0, C(1) MOVEM 0, A(2) FMP 0, 4 MOVEM 0, H(1) ADDI 2, 2, ADDI 3, 3, AOBJN 1, C1, IN ITIALIZE INDEX REGISTERS IN ITIAUZE INDEX COUNTER 4.0 2.0 4.0 6.0 6.0 D=E+F+G 4.2 4.0 6.0 4.2 12.3 4.2 INCREMENT 2 STEP INDEX INCREMENT 3 STEP INDEX INCREMENT 1 STEP INDEX AND COUNT 3.0 3.0 3.3 Total Time required is 0.062 seconds 10 EXPONENTIATION ,FLOATING POINT NUMBER TO A FIXED POINT POWER ,COMPUTE X+-I USING ACCUMULATORS Al, A2, AND T. ,STORE THE RESULT IN Y. IF X IS ZERO, RETURN ZERO FEXP: MOVE Al, X MOVSI T, 201400 SKIPGE A2, I FDVM T, Al MOVMS A2 JUMPN A1, FEXP2 CLEARB T, A2 FEXP1: FMP A1, A1 LSH A2, -1 FEXP2: TRZE A2, 1 FMP T, A1 JUMPN A2, FEXP1 MOVEM T, Y iMOVE X TO A1 ill = 1.0 iMOVE I TO A2, SKIP IF NON-NEGATIVE iTAKE RECIPROCAL OF X (NEGATIVE POWER) iTAKE ABSOLUTE VALUE OF I iGO TO MAIN LOOP (IF NON ZERO BASE) iZERO EXPONENT AND RESULT FOR QUICK EXIT iSQUARE BASE TERM iSHIFT RIGHT FOR NEXT BIT OF EXPONENT ilS POWER A FACTOR? TURN OFF BIT i YES iMORE FACTORS? iNO, STORE RESULT 11 CHARACTER MANIPULATION PROBLEM: Assume: There is a string of 7 bit ASC II characters beginning at memory location A and ending with a slash. Transfer the characters, excluding the slash to a block beginning at location B. Count the number of characters and leave the result in an index register. 1) The code for a slash is 74 8 , Program C: Time in microseconds 4 4 MOVE 3, [POINT 7, BJ MOVE 2, [POINT 7, AJ MOVEI 1, 0 LOBI 0, 2 CAIN 0, "/11 JRST EXIT DPBI 0, 3 AOJA 1, C 2.0 5 2.6 2.1 .5 3.4 Total time is 18 + 16 x N where N is the number of charac ters. MOVSI AI, CMOVP BLT Al, Al-I, JRST CMOV CMOVP: PHASE 0 B1 0 PTA: POINT7,A PTB: POINT 7, B CMOV: LOBI A1, PTB CAIN A1, 74 JRST EXIT DPBI A1, PTB CM: AOJA B1, CMOV DEPHASE Al = CM + 1 2.0 MOVE TO FAST MEMORY 17.6 3.0 5.0 2.0 2.0 5.0 2.0 The time for this case is 31 + 14 x N. 12 CHARACTER TRANSLATION Assume: 1) That the number in accumulator A is a 6-bit code read from the card reader. The program must translate the card code into the equivalent 7-bit ASC II code. A translation table begins at location TAB consisting of 7-bit ASCII characters packed five to a word. 2) The characters in th is table are in order of the ir appearance in the card code. Because characters are packed five to a word, the quotient of the card code divided by 5 gives the word in wh ich the ASC II character is found. The remainder gives the character position. An auxilliary table of five byte pointers, one pointing to each character position, allows retrieval of the proper ASCII with a single LOB instruction. TRANSL: A,5 IDIVI LOB JRST A, BT AB (A+ 1) EXIT BTAB: POINT POINT POINT POINT POINT 7, TAB (A), 6 7, TAB (A),13 7, TAB (A), 20 7, TAB (A),27 7, TAB (A), 34 TAB: ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII .+-1234. .56789. .0=@t'. .\ 1ST. .UVWXy. .Z;,(". .#7.-JK. .LMNOP. .QR:$*. .[>&+A. .B CDEF. IGHI?/ .))<1. 13 CHARACTER ADDITION PROBLEM: Add two 5 digit numbers expressed at 7-bit ASCII characters. Calling Sequence: ,ASCIAD: , , , , JSP AC3, ASCIAD A ROUTINE TO ADD OR SUBTRACT FIVE DIGIT ASCII NUMBERS (7 BIT CHARACTERS) . 1. CHARACTERS MUST BE RIGHT JUSTIFIED 2. TO ENTER ROUTINE: A. MOVE ACO, (ADDEND) B. MOVE AC1, (AUGEND)/ MOVN AC1, (SUBTRAHEND) C. JSP AC3, ASCIAD 3. ON RETURN THE SUM OR DIFFERENCE IS IN AC2 AND THE CONTENTS OF ACO AND AC1 ARE UNCHANGED 4. THE ROUTINE IS A RING COUNTER; FOR EXAMPLE 99999+2=00001 and 3-6=99997 5. NOTE THAT TWO NEGATIVE NUMBERS CANNOT BE COMBINED AND THAT IF ONE IS NEGATIVE IT MUST APPEAR IN AC1 ON ENTRY. , ASCIAD: AND lOR TLZN ADD ADD AND MOVE AND ASH SUBM lOR JRST ACO,M2 AC1,M4 AC1,400000 AC1,M1 ACO,AC1 ACO,M3 AC2, M4 AC2,ACO AC2,-3 ACO,AC2 AC2,M4 (AC3) M1 : M2: M3: M4: BYTE (l) (7) 6, 6, 6, 6, 6 BYTE (1) (7) 17, 17, 17, 17, 17 BYTE (1) (7) 77, 77, 77, 77, 77 BYTE (1) (7) 60, 60, 60, 60, 60 ACO=O AC1=1 AC2=2 AC3=3 END 14 FIFTEENTH DEGREE POLYNOMIAL Assume: 1) P denotes a block of memory conta ining the 16 coeffic ients; X is a memory location containing the argument; the answer is stored in location Z. Time in microseconds RADIX 10, MOVE 3, X, MOVE 12, 15 MOVE 0, P + 15, IMUL 0, 3, ADD 0, P-1 (2) SOJ GE 2, . -2, MOVEM 0, Z, SET ASSEMBLER RADIX TO 10 MOVE ARG TO FAST MEMORY INITIALIZE INDEX COUNTER INITIALIZE VALUE MULTIPLY BY ARGUMENT ADD NEXT LOWER COEFFICIENT INCREMENT AND COUNT STORE ANSWER 4.0 2.0 4.0 13.2 4.0 2.8 4.0 Total time required is 314 microseconds 15 EVALUATION OF COMPLEX POLYNOMIAL 1 2 n Y=Po +P 1 X +P2 X + ..... PnX WHERE Y, X, and P are complex numbers. The real parts of the coefficients, P, are stored in an array, the first location labeled P. The imaginary parts are stored in another array, PI. The argument is X (real part) and XI (imaginary part), the answer is placed in Yand YI, and the order is in N. DATA STRUCTURE P: BLOCK 14, PI: BLOCK 14, X: a XI: a Y: a YI:O N: a REAL COEFFICIENT PARTS IMAGINARY COEFFICIENT PART REAL PART OF ARGUMEN T IMAG. PART OF ARGUMENT REAL PART OF ANSWER IMAG. PART OF ANSWER ORDER OF POLYNOMIAL Time in microseconds MOVEI4, N, MOVE a, P (4), MOVE 1, PI(4), MOVE 2, X, MOVE 3, XI, P13: MOVE 5, 1 FMP 5, 3, MOVE 6, a FMP 6, 3, FMP a, 2, FSB a, 5, FMP 1, 2, FAD 1, 6, IN ITIALIZE INDEX COUNTER INITIALIZE ANSWER MOVE ARGUMENT TO FAST MEMORY PI * XI P * XI P*X P * X - PI * X I = REAL PART PI * X P * XI + PI * X = IMAGINARY PART FAD a, P-1 (4), FAD 1, PI-1 (4) SOJGE 4, P13 ADD NEXT LOWER COEFFICIENT MOVEM a, Y, MOVEM 1, YI STORE ANSWER 2.0 4.0 4.0 4.0 4.0 2.4 12.2 2.4 12.2 12.2 5.6 12.2 5.4 6.0 6.2 4.0 TIME = 28 + 80.8N flsec. Example: A 13th Degree Polynomial Requires 1.04 milliseconds. 16 4.0 4.0 MATRIX INVERSION PROBLEI\~: To invert an NxM matrix, stored row-wise in sequential locations beginning with A. ,CALLING SEQUENCE: ,CALL: JSP 17, INVER EXP A , JRST ERROR , THE ORDER OF THE MATRIX IS IN A, WITH THE NUMBER OF ROWS IN THE LEFT HALF, ,AND THE NUMBER OF COLUMNS IN THE RIGHT HALF. THE ELEMENTS ARE STORED ,ROW-WISE BEGINNING IN A+l , ,IF THE INVERSION WAS SUCCESSFUL IT WILL RETURN TO CALL +3, AND IF A ZERO ,PIVOT ELEMENT OR OVERFLOW OCCURRED, IT WILL RETURN TO CALL +2 , ,ACCUMULATOR ASSIGNMENTS T=15 J=14 K=13 P=12 PT=11 LC=10 LCS=7 ,PIVOT ELEMENT ,COLUMN SUBSCRIPT ,ROW SUBSCRI PT ,INDEX POINTING TO PIVOT ELEMENT ,MULTIPLIER ,STOP COUNTER ,ROW COUNTER INVERT: HRRZ @ (17) MOVEM, ROWS# HLRZ @ (17) MOVEM, COLS# MOVE [XWD ROWPRG, ROW) BLT ROWLi HRR ROW, (17) ADDI ROW,1 HRR ROW+2, (17) HRR ROW+3, ROW ADDI ROW+2, 2 HRRM ROW, INZl+1 HRRM ROW, DIV+2 HRRM ROW, DIV+6 HRRM ROW, INZROW+1 HRRM ROW+2, DI V ;GET COLUMN COUNT iGET ROW COUNT iMOVE ROW SUBROUTINE INTO FAST MEMORY iSET UP PROGRAM ADDRESSES MOVE I P, 0 MOVN T, COLS MOVE T, 1 (T) HRRM T, INZ1 17 INZSTP: MOVEI K, 0 MOVE LCS, ROWS MOVE J, P ;INITIALIZE INVERSION STEP INZ1: HRLI J, 0 SKIPN T, A(P) JRST 1 (17) ;GET PIVOT ELEMENT ;IF IT IS ZERO, EXIT AS ERROR DIV: MOVE A+1 (J) FDV T MOVEM A(J) AOBJN J, DIV MOVSI 1.0B53 FDV T MOVEM A(J) ;DIVIDE PIVOT ROW THROUGH BY ;PIVOT ELEMENT MOVE J, P MOVE PT, A(K) CAMN K, P JRST ROWSKP JRST ROW MOVN@ ROW FMP PT MOVEM@ROW+2 ;INITlALlZE TO PROCESS A ROW INZROW: ROWOUT: CTX: i LAST ELEMENT OF PIVOT ROW ;IF THE ROW IS THE PIVOT ROW, iSKIP IT ;GO TO PROGRAM IN FAST MEMORY ;HANDLE FINAL ELEMENT OF THE ROW SOJN LCS, INZROW ADD P, COLS SOJN LC, INZSTP ;IS STEP FINISHED? JRST 2(17) ;RETURN ;IS JOB FINISHED? ROWSKP: ADD K, COLS ;SKIP PIVOT ROW DURING JRST CTX ilNVERSION STEP , THIS PROGRAM FOR PROCESSING THE ELEMENTS IN A ROW IS MOVED INTO FAST MEMORY ROWPRG: PHASE 1 ROW: ROWL: DEPHASE END MOVN A(J) FMP PT FAD A+1 (K) MOVEM A(K) ADDI J, 1 AOBJN K, ROW JRST ROWOUT 18 lWO-BIT TESTING AND DEPOSITING OF DATA PROBLEM: Consider four tables with 500 registers a table. The entries of the first table contain a 2-bit item, ITEM zeros, in bits 13 and 14. The entries of the second table contain ITEM ones in bits 1-6; the third table contains ITEM twos in bits 1-9; and the fourth table contains ITEM threes in bits 1-10. For' n = 1, 500 If ITEM a = a n Set: ITEM 1n = 108 ITEM 2n = 1008 ITEM 3n = 300 8 If ITEM a = 1 n Set: ITEM 1n = 20 8 ITEM 2n = 200 8 ITEM 3n = 400 8 If ITEM a = 2 n Set: ITEM 1n = 308 ITEM 2n = 300 8 ITEM 3n = 5008 If ITEM 0 n =3 Set: ITEM 1n = 40 8 ITEM 2n = 400 8 ITEM 3 n = 600 8 Program: For 500 cases, moving the program to fast memory results in a time saving of approximately 5000 microseconds. HRLZIO, A BLT 0, 17 JRST 2 A: a XWD+D-500, a LDB 0, 14 ROT 0, 3 ADDIO, 10 DPB 0, 15 ROT 0, 3 19 lWO-BIT TESTING AND DEPOSITING OF DATA {continued} DPB 0, 16 ADDIO, 200 DPB 0, 17 AOBJN1,2 JRST EXIT POINT 2, TABO (1), 14 POINT 6, TABI (1), 6 POINT 9, TAB2 (1), 9 POINT 10, TAB3 (1), 10 20 ANY RADIX PR INT PROBLEM: Assume: To Print out a signed number in an arbitrary radix. 1) TOUT is the first location of an I/O Routine which exits by POPJ P,O. The argument to tout is in accumulator B. 2) The output radix is stored in the address part of RADIX. The output radix in this example is R. 3) Place the number to be converted in accumulator A and call RADPTwith PUSHJ P, RADPT. Th is routine suppresses lead ing zeros. RADPT: RADIX: RADPTl: JUMPGE B, RADIX MOVEI B, "_" PUSHJ P, TOUT MOVNSA IDIVI A, R HRLM A+1, (P) SKIPE A PUSHJ P, RADIX HLRZB, (P) ADDI B, 260 JRST TOUT ;IS NUMBER NEGATIVE? ;YES, GET ASCII MINUS SIGN ;OUTPUT THE MINUS SIGN ;TAKE ABSOLUTE VALUE OF ARGUMENT ;QUOTIENT GOES TO A, REMAINDER TO A+1 ;SAVE REMAINDER IN LEFT SIDE OF LAST ; ITEM ON PUSH DOWN LIST ;IS QUOTIENT = a? ;NO, GO BACK FOR ANOTHER DIGIT ;GET THE DIGIT OFF THE PUSHDOWN LIST ;CONVERT THE DIGIT TO ASCII ;GO TO THE I/O ROUTINE. TOUT EXECUTES ;A POPJ P, BACK TO RADPTl OR (FINALLY) ;TO THE PLACE WHERE RADPT WAS CALLED. 21 15106 PRINTED IN U.S.A. 20-8164
Home
Privacy and Data
Site structure and layout ©2025 Majenko Technologies