Digital PDFs
Documents
Guest
Register
Log In
DEC-12-FLSB-D
December 1971
30 pages
Original
2.5MB
view
download
Document:
dec-12-flsb-d
Order Number:
DEC-12-FLSB-D
Revision:
Pages:
30
Original Filename:
https://svn.so-much-stuff.com/svn/trunk/pdp8/src/dec/dec-12-fls/dec-12-flsb-d.pdf
OCR Text
DISPLAY A, PHP PMP Qxoa X-i..' .... ; DEC~12-FLSB-D FEBRUARY, 1971 Copyright ( C ) 1971 by Digital Equipment Corporation The material in this handbook, including but not limited to instruction times and operating speeds, is for information purposes and is subject to change without notice. The following are trademarks of Digital Equipment Corporation, Maynard, Massachusetts: ( DEC FLIP CHIP DIGITAL PDP FOCAL COMPUTER LAB The equipment described herein is covered by patents and patents pending. For additional copies order DEC-12-FLSB^D from Program Library, Digital Equipment Corporation, 146 Main Street, Price $5.00 Maynard, Massachusetts 01754 { CONTENTS Page 1. INTRODUCTION 2. ENVIRONMENT 2.1 Hardware 1 2.2 Core Allocation 1 3. CALLING PROCEDURE 2 4. FACTOR INTERACTION 4 5. INTERNAL DESCRIPTION 8 5.1 IDORA 5.2 RDORA 5.3 Flow Diagram 5.4 Listing 1 1 8 8 9 12 DISPLAY 1. INTRODUCTION DISPLAY enables a data display facility for those routines which do not require complex display processing or cannot sacrifice the core for such a display. The routine dis- plays any contiguous section of core via a moving window, with a cursor and octal read out of cursor positions to facilitate operator interaction. 2. ENVIRONMENT 2.1 Hardware A PDP~12A computer. 2.2 Core Allocation Any two PDP-8 pages in field 0 except page 0 that are seg- ment contained, beta registers 0, 1, and 2 of the segment, and any six page 0 locations are the core requirements. actual binary output resides in one tape block. 1 The 3. CALLING PROCEDURE There are two calls to DISPLAY: an initial call and a refresh call, both of which must be in the same PDF- 8 field as DISPLAY (field jl) . The function of the initial call is to set up arguments for the refresh subroutines: JMS I KIDORA FIELD CORE LOCATION FIELD CORE LOCATION Y OFFSET Y SCALE FACTOR KIDORA, IDORA The first four words are two 15-bit addresses that specify the beginning and end of the data buffer to be displayed, respectively. Any contiguous section of core is legal in- put to IDORA as long as the buffer is at least 1000^ points long. The first address must be less than the second. DIS- PLAY treats the data buffer as a core ring so that the initial and terminal points are contiguously displayed. The purpose of words 5 and 6 is flexibility in displaying data.^ to allow the calling programs The fifth word is a Y off- set and specifies a 12 bit number to be added {2»s compliment) to the data before it is displayed; the sixth word is a SCR K instruction and indicates the amount of scaling to be done prior to display. IDORA exits to the SCR K location in PDP-8 mode with the data field set to 0 and the AC = 0. The refresh call is simply JMS I KRDORA KRDORA, RDORA The refresh call displays 1000^ points, sets arguments for the next refresh and returns to the location following the call, in PDP-8 mode with the accumulator cleared and the data field DF and IF unchanged. Note that the initial call to DISPLAY must be to IDORA; RDORA always refreshes the buffer specified by the last call to IDORA ^It should be noted that DISPLAY assumes the data to be in single word format. 3 4. FACTOR INTERACTION The operator controls the position of the window with knob clockwise motion moves the window to the "right" or towards the end of the buffer; counter-clockwise, J2f: to the left. The midpo+nt reading on knob 0 causes the motion to stop. Knobs 1 and 5 and Sense Switch (SSW) 5 control the cursor (an intensified dot). Depending on the setting of SSW 5, the cursor may either move along the curve or be displayed independently. When SSW 5 = 0, the cursor moves along the curve and its position is controlled with Knob ^^hen 1: Knob 1 is turned to its furthermost clockwise position, the cursor sits upon the rightmost scope point; when Knob 1 is ppsitioned to its furthermost counter-clockwise position, the cursor sits on the leftmost scope point; intervening knob positions yield intervening cursor positions. When SSW5 =1, the cursor is displayed independently of the curve. For this case. Knob 1 controls the horizontal coordinate and Knob 5 the vertical coordinate. Horizontal displacement of the cursor via Knob 1 is identical to that described above. When Knob 5 is at its furthermost clockwise position, the cursor is displayed at the top of the scope. When Knob 5 is at its furthermost counter-clockwise position, the cursor is displayed at the bottom of the scope. 4 Associated with the cursor are four octal words displayed in the top left corner of the scope, one beneath the other^ The first two words are the absolute 15-bit core address of the cursor point. The third word is the contents of the displayed core address, i.e., the actual 12-bit value in the data buffer of the data word that corresponds to the cursor point. The fourth word is the scope Y coordinate of the cursor point. The fourth word is a relative value and depends upon the Y scale factor and Y offset. If the data had been scaled to nine bits prior to display, the fourth word or Y coordinate would range from 0001 to 1000^, where 0001 corresponds to the bottom of the scope and 1000 corresponds to the top. TO facilitate interaction with the calling program the four displayed words described above are maintained in page 0 and may be accessed after the refresh return. TAG CONTENTS XCURHI Fifteen bit address of the point XCURLO in memory reference by the cursor CORVAL Contents of memory YCUR Relative Y display coordinate IS refreshed. agister at the time the display 5 standard Parameters The six locations on page 0 can be anywhere and they do not have to be contiguous. The standard version of DISPLAY as- sumes locations 20 - 25; the locations are defined via direct assignment statements at the end of the DISPLAY source, YSHFT 20 XCURHI YSHFT + XCURLO XCURHI + 1 CORVAL = XCURLO + 1 CONTAINS Y OFFSET YCUR - CORVAL + COUNT YCUR + 1 SEE ABOVE 1 1 The following symbols (also defined at the end of the DIS- PLAY source) may be redefined if the user wishes to use Knobs other than 0, I, and 5: WINS.AM ^ SAM 0 CURSAM = SAM 1 FRESAM = SAM 5 As coded, DISPLAY occupies locations 5400 through 5777, with IDORA = 5400 and RDORA = 5544. The origin statement at line 10 and/or the PAGE pseudo-op at line 223 may be altered to relocate part or all of DISPLAY. (N.B, if using the page of the segment containing the beta registers, place the origin at the fourth location of the page since DISPLAY uses beta registers 0,1, and 2; i.e. 6 * 2003; or * 4003; or * 6003). Example If Segments and 4 5 contain 12 bit, unsigned data, the fol- lowing would display 512 points (as controlled by knob 0) until a keyboard input is detected: JMS I KIDORA /N.B. PDP-8 MODE 1 /LOCATION 10 000. 0 /START OF BUFFER 1 /LOCATION 13,777 IS f /END OF BUFFER /VERTICAL COORDINATOR 4000 /377 SCALE 3 / 0 1000 TO A00 JMS I KRDORA /400 KSF /FROM 12 BITS TO JMP LOOP /REFRESH SCOPE /KEY STRUCK 1 9 ? /NO, CONTINUE DISPLAY The program might now do some- thing with the datum indicated by the cursot* exit, or KIDORA, IDORA /INITIALISE POINTER KRDORA, RDORA /REFRESH POINTER 7 5. INTERNAL DESCRIPTION 5.1 IDOm The function of IDORA is to retrieve the arguments from the initial, call and set them qp for RDORA* is stored at MINFLD. MINADR, at MAXFLD, MAXADR. 0) The lower bound the upper jDound + 1, is stored The Y offset is stored at YSHFT (page and the scale factpap is stored at YSCAL. 5 . 2 RDORA The function of RDORA is to display 1000^ points relative to the window knob and a scope starting address and return. RDORA first reads the horizontal cursor knob and sets it to a value between -1 and --1000^; this is the cwrsor count. RDORA then reads the window knob and updates the initial scope address (BUFHI, BUFLO) maintaining t:hat address modulo the upper and lower bounds. point at a time. (IS«[) RDORA then displays the buffer one After each point is displayed, RDORA checks the cursor count; when it goes to 0, the cursor is dis- played. RDORA also checks for the end of the display buffer and the end of a field, resetting to the start of the display buffer or to the next field respectively, as the case may be. ter all points have been displayed, the routine DSCLOC is called to display the four words in the upper left corner of the scope. RDORA then restores the user's data field and returns. 8 Af- 5.3 FLOW DIAGRAM ^ IDORA ^ SETUP MIN ADDR MAX ADDR+l Y OFFSET Y SCALE INITIALIZE SCOPE STARTtNG ADDR ^ (RTN TO ^ SCR N Locy TdsC LOC J DSC CURSOR FIELD ' ADDR CORE LOC Y COORD RESTORE USER DATA FLD 9 SAVE USER DATA FIELD READ HORIZ CURSOR KHOB WINDOW KNOB ADD WINDOW KNOB TO SCOPE ADDR RESET SCOPE ADDR. SETUP DISPLAY ARCS 1^ 11 5,4 LISTING 12 0000 0001 0082 §003 0004 0005 0006 0007 0010 0011 0012 0013 0014 0015 0016 0017 0020 0021 0022 0023 0024 0025 0026 0027 0030 0031 0032 0033 0034 0035 0036 0037 0040 0041 0042 0043 0044 0045 0046 0047 0050 0051 0052 0053 0054 0055 0056 0057 0060 0061 0062 0063 ^20 /OISPLA¥ (MINI MAGSPY 5 /COPYRIGHT 1970 /DISITAL tmiPWHl CORPORATIONiMAYNARD /MOVING WINOOH DISPLAY SUBROUTINE /CURSOR OUT /CORE OR TAPE FILE PNODE • 5400 mm /if^lTIAL CALL GET PARAH LIST /SET ARGS FOR RDORA 5401 5402 5403 5404 5405 5406 5407 5410 5411 5412 5413 5414 5415 5416 5417 5420 5421 5422 5423 5424 5425 5426 5427 5430 5431 5432 6433 5434 5435 5436 5437 5440 5441 5442 5443 5444 0000 7300 6201 1600 3635 2200 1600 3636 2200 1600 3637 2200 7001 1600 3640 7iB4 1637 3637 2200 1600 3020 2200 1600 3643 1635 3641 1636 3642 5600 5615 5616 5674 5675 5774 5779 5644 0401 XDORAi 0 CLA CLL CDF i ACOF0I TAO 1 lOORA DCA I KMNFLD ISI IDORA TAD 1 lOORA OCA I KHNADR ISZ IDORA TAO I IDORA OCA I K^%no ISZ IDORA lAC TAD 1 IDORA DCA I KHXADR nki TAD I KHKFUD DCA I KHKFLD ISZ IDORA T4D I IDORA DCA YSHFT IS2 IDORA TAD I IDORA DCA I KYSCAL TAD I KHNFLD DCA I K6UFHI TAD I KHNADR DCA I KBUFLO JMP I IDORA KMNFLD, MINFLD KMNAOR, MINADR KM^FLDi NAXFLD MAMADR KBUFHI, BUFMI SUFLO KYSCAL, Y8CAL P401, 401 /GET BOUNDS /DATA BUFFER /f 5 BIT /LOWER BOUND /AT F«^lp P'¥2 /MINFLOiMINAOR /UPPER BOUND /AT P4*3» P^4 /RDORA USES /HAX^'l /Y SHIFT /Y SCALE /INITIALIZE /WINDOM /STARTING ADDR /RTN TO SCR N a ffi £J 1244 TftU A AM OCA P401 U ^nAB /DSC XfT COuNp /FIEUO 4g©g WW/ W 3«3 i p ^ 3 <| H uML0 i<4 f-ft 1,1 Sr~ a s5 ifS «a T AO COiV ^g J Pi 15 0iCN0 w ¥ A fa I wis / u T fty 1 4 TAP F4i 1 D^D9 ^J^f BBBi KTWCOr j; 0 ^I fS <3 i J3 4o 1, /CONTENT® OF /CURSR CORE toe /y COORD Of 97 44 1 ROPRA » 1 vSi ^m soffit H 5 414it 41 LINC 04 / ^ ITC TEMP iTC lti3 M 1^ e 0 /CURiOR PuXNt /RESTORE USER /DATA flD /RTN /DSC C(AC) B Hp «l fit 4 31^ ^ 1 W1 0f B t1 ^ B1 10 mQu 1487 Bill i (SI if Bi 1s ©1 Ia ^114 01 1D B1 16 BX I' B 1 ft 9 B I, C 1 B 1 4Ce I A V m 1 1 4 4 ^ 4/ g 1 0265 10^0 noL 77 d7 ^20 111 ft ii 1^7 4 0241 1160 ift"?"? DBB 3B i wBc I 4 <^/8 4 * ^ ^ Bi2«*S f«t i jfe B 1 «3i s ^ I D I ^ « J 4/ 1 BS4 1 1120 s 1 «: low R J 1014 1515 1 f J »!S 4 1^ #s a 1 n4o < A Ai K 9 1517 1 52B 1521 9507 7 470 0002 0D22 f «a *a K4 A 4 ste 2 ADD veopRD DSC 2 DSC I 2 KSK I 1 XSK I 1 SRO 1 3567 JHP DSCIQP FDP ^ B 1 iAa ^B B I 41 1 1 ^ « 4 022 4 RQfl 0150 DIGIT A TIME 4 A V /UPDATE /Low 3 BITS /ONLV /*8 AND RtL /TO GRID TAB /I /AT 1 1 IS 55^4 5539 5526 Mr /MAKE GAP /BETWEEN CHARS /DSC 4 CHARS ? /NO CO?^T PHODE iffls DDga 0 1 46 1 TAiSIF77 /3 B1 a 09 B 41 HA a 4 17 BIO/ 4 /FULL CHARS /NO VC®4® /UPDATE VC ! 1 ^ loll ^ i ROU STA TEHP iCL 1 7770 B4B ? 7 ^ £» a /SAVE VALUE /SNAW 1 /V€ PCS FULL /illE IS =^40 /®20 FOR HALF 0 ili vfO 10 1 *Sfia B 1 «7 9 IDA ^ fft 4 ©Bo B 1 42 B1 4^ #• im ^ id 1* I HI 4 I ^Q VCuUwD 4 9 1 I J 4 ! 1 '5^ 0 19 4 »I^p B A «w 400 B024 453S 3651 2101 TAB CLA CLL JHP I DSCND 453i /60,0 sesi 2101 /6l,l /RTN 0151 0152 0153 iiS4 il55 i|56 0157 0160 0161 0162 0163 0164 0165 0166 0167 0170 0171 0172 0173 0174 0175 0176 0177 §200 0201 0202 0203 0204 0205 0206 0207 0210 0211 0212 0213 0214 0215 0216 0217 0220 0221 0222 0223 0224 0225 0226 0227 0230 0231 0232 0233 0234 0235 5527 5530 5531 5S32 5533 5534 5535 5536 5537 5540 5541 5542 5543 5544 5545 5546 5547 5550 5551 0177 4523 2iSi 4122 26S| 2414 0477 5172 0651 1506 4225 4443 6050 0000 7300 6214 1202 3260 6141 1552 1553 1554 0002 5555 5556 5557 1244 /14i 6141 1560 1561 1562 1563 1564 1565 1566 1567 1570 5773 0100 0344 0061 6777 7600 0105 0341 0002 5571 5572 5573 5574 3024 1024 6141 6000 S600 9601 5602 9603 5604 5605 5606 5607 5610 5611 0002 6201 3347 1347 7710 7040 3341 4304 0177 4523 giSi i§Si i4l4 0477 5172 0651 1006 4229 4443 6050 RDORA, 1347 /64^4 ^69i5 /66|6 /67,7 0 CLA CLL RDF TAO ACDF0 DCA RTNCOF LINC 0101 0341 3375 /6i,i HSAM, LHOOE CURSAM SCR 1 ROP PNOOE TAO P401 CIA CLL LINC LMOOE STC CURCNT&1777 WINSAM SCR 4 SET I XCORD /SAVE USER OF /CURSOR /9 BITS COVERS /SCOPE /MAKE RANGE /•I TO «i000 /WINDOW /75 CENTS W0RTH /912 PNTS JHP C0NT&i777 FREE, PRESAM SCR i POP PMODE OCA YCUR TAD YCUR LINC 5000 PAGE CONT, CDF0, /JHP 0 2 COP DCA TAO SPA CNA DCA JMS TAD DCA 0 D8LL0 D8LL0 CLA DBLHI OADD DBLLO iUPLO /PUT KNOB VAL /IN DAC /PROPAGATE SIGN /BIT HI ORD /UPDATE WIN ADDR ia36 saii S6I3 1341 TAD DBLNI BUPHX 3374 0240 024i /NUiT CHK /WINOQN SA /WITH BOUNDS /TO MAINTAIN /BUFFER RIN5 M42 i243 0244 0243 0246 0247 0250 02SI 0252 0253 025S 0250 025? 0260 @26i 0262 0263 0264 0265 0266 0267 0270 027i 0272 0273 0274 0273 0276 0277 0300 0301 0302 0303 0304 0305 0306 0307 0310 0311 0312 0313 0314 0315 0316 0317 0320 0331 0922 9 5614 5615 5616 S6|7 S6|§ 5621 5622 5623 5624 S625 5626 BBlf 5630 5631 5632 5633 5634 5635 5636 5637 5640 5641 5642 5643 4316 0001 0000 770i 5273 1274 3374 1279 3375 4104 1347 337S 1341 3374 1375 3304 mk tHHHl TAO DCA T^O OCA JHi TAD OCA TAP DCA SiTFLD, TAD DCA 1327 3025 1374 3316 4341 1704 1020 6141 1644 1645 1646 0341 ilil 0002 5647 2373 5650 5651 5652 5853 5654 5655 56S6 5857 5560 5661 5662 5663 7610 5351 2376 5263 2377 5263 1216 3304 1215 3316 5266 2304 5664 SOUND 5267 /UOttlfR BQMNO NINFLD, 1 HINADR, i f AO DCA TAD OCA jn$ iUFHI BUFLQ DADO D8LL0 iyPLO DBLNI BUFHI BUFUO 8UPPTR HI000 COUNT BUFHI BOUND SiTDF 1 iUFPTR ¥SHFT /OFF SET 1 /SCALE FACTOR TAD lint LMODE VSCAL, %m D!S PDF 1 /CORRECT NRAP /CORRECTED /MINDON SA /SET DISPLAY /ARCS XCORD PMODE XS2 CURCNT SKP CIA ISX JHP xsz JHP TAO DCA TAD DCA JHP ISl /LON END MRAP /NO /RESET TO /UPPER BOUND ENOIO OKE^^D ENOHI OKENO HINADR /READY TO DI8 /CURSOR t /NO /CHK FOR HI /END KIRAP /RESET TO /LOWER BOUND ntmio BOUND NXTOP BUFPTR JMP OKFLO /CHK FOR FIEL /BOUNDARY /ITS OK mm 0324 0325 032/ 0330 0331 0332 0333 0334 8335 0336 033F 0340 0341 0342 0343 0344 0345 0346 0347 0350 0351 0352 0353 0364 0355 0356 0357 0360 0361 0362 0363 0364 0365 0366 0367 0370 037i 0372 0373 0374 0375 0376 0377 0400 0401 0402 0403 0404 0405 0406 0407 5665 5666 5667 5670 5671 5672 5673 5674 5675 5676 5677 5700 5701 5702 5703 Saii 4341 2025 5241 5672 5445 4316 0002 0000 7710 5232 1215 3374 1216 5224 5704 5705 5706 5707 5710 5711 6712 5713 5714 5715 0000 7300 CHKHI, III SOUND JH8 3ETDF XSZ COUNT JMP NXTPNT JMP I DSCLOC JMS BOUND HAXFLDi^ 2 HAKADR, M70, i NXTDF, OKFID, SPA JHP TAO OCA TAD /SET NKT FLD /512 PNT8 f /NO /DSC READ OUT /CHK UPR BOUND CUA /HI WRAP ? SETFID MINFLD /YES SUFNI /RESET TO HINAOR /LOWER BOUND 4W WRAP /DOUBLE PWeCISION ADO /(DBLHI,DBLL05*(SUFHI,BgFLa) /RESULT IN C08LH1,DBLL0) /CBUFHI,BUFLOJ«INITIAL SCQ'^e ADDRESS DADD, 0 CLA TAD TAD DCA RAL TAD TAD DCA JHP 1347 1375 3347 7004 1341 1374 3341 5704 CLL DBILO SUFLO DBLLO DSLH! BV^Hl DB^Ml I DADD /ADD •UPPER OR -LONER BOUND /TO CBUFHI,8UFL0) /BOUND 18 AT P*1,P*2 OF CALL 5716 5717 5720 5721 5722 5723 5724 5725 5726 5727 5730 5731 5732 5733 5734 5735 1341 3377 1347 3376 TAD I BOUND CMA cll DCA DBLHI ISZ lOUND TAD I BOUND CIA 8ZL ISZ DBLNI NOP DCA DBLLO JHS DADD TAD D8LHI DCA ENDNI TAD 08LL0 OCA ENOLO 5736 1341 TAO DBLHI 0000 1716 7140 3341 2316 1716 7041 7430 2341 7000 3347 4304 BOUND, H1000, 0 /2S COM OF ARG /TO DAC /DAC MOLDS »NUH /TO END OF 6UF /NO MATTER FOR /LOW END WRAP /TO CHK FOR 0410 0411 0412 0413 0414 0415 @4ia 0417 0420 0421 0422 0423 0424 0425 0426 §427 0430 0431 0438 0433 0434 043S B4^6 0437 0440 0441 0442 0443 0444 0445 044S 0447 0450 0451 0452 045S 0454 0499 0499 0497 0460 0461 0482 0463 0464 046e 0466 0467 047.0 0471 0472 0473 0474 5737 S740 574i 5748 5743 5744 574S 5746 5747 9750 9791 9792 5793 5754 5755 S7Si 575? S7ii 9761 9761 3783 6141 1764 1789 1766 1787 0469 7966 0141 0002 5770 5771 5772 9773 2347 S363 5290 0000 5774 5773 8776 5777 0001 0000 0000 0000 2316 5716 iiii 1316 7|ii 7ii4 ISl iOUNO JHP SETDF, IK4 /UPON RTN iOUND /SET 3 FliLO /RiL TO SOUND 0 TAD SOUND cut RTL iAL T^D CDF0 OCA I2ii 3347 00i0 9741 3024 1316 3021 i3i4 lit! I7®4 ^igS I27i 3347 I DgltO, 0 JMP I 8ET0F eURDISi DCA veuR /0I8P CURSOR tjid ieuNo /SAVE K,y OCA MCURHI /COORDINATES TAD iUFPTi OCA MeUiLO fHO I iUf^TR OCA CORVAL T^O H7® OCA OBULQ TAD fCUR CURIOPb linc LHOOE dN8 I 9 JMR FREE /PREE CURSOR DX8 XCORD PDR PHOOi ISI DilLO mP CUiLOF JHP OUiRTN CURCNTi i /THESE 9 SU¥S HAV BE PAGE 0 iUFNI, 1 iUFio, i ENDLOf i ENOHIj § D8LH|«8ETDP ^ • BUPPTR«OADO XC0R0«1 U«OOE CURSAHaSAH I WINSAHiSAH a FRiiAMfSAM a iCAlE^iCR SCl28UeaCR 3 /CURSOR KNOB /WINDOW KNOB /FREE CURSOR /SCAUE FACTOR /It BIT UNSIGNED OFi2BU^4000 /Y OFFSET FOR /I? BIT UNSIGNED /THESE i GUYS MUST BE PAGE 0 /THEV ARE ALU CONTIGUOUS AND DEFINED /RELATIVE TO VSHPT BUT THIS IS NOT /A REQUIREMENT YSHPTulB 0475 0476 0477 0500 0S0I 0502 0503 0504 0505 0506 0507 0510 0Sii 0512 0513 0514 0515 0516 0517 0520 0521 0522 0523 NO ERRORS /THE 4 SCOPE READ OUT VALUES KCURHI^YiHFT^I MCURLOi^CURHUI CORVAL^^CURLO^i ¥CUR^CORVAL#'l COUNT^-VCURi^l /AN inmPLE TO OISPLAy AIL Of FIEIO i /12 BIT UNSISNiO DATA /PMODE /*S0HEWHERE /JMS I KZDORA n /0Pi28U /SC12BU /JHS I KROORA /JMP ,«l /KIDORA, lOORA /KROORA, RDORA /DISPLAY 3 AUG 70 /INITIAL CALL /FLO /ADDR /FLO /ADDR /y OFF SET n SCALE FAC /REFRESH CALL iA u^ i/. ^ u^ in es* ^ ^ :a tn S (s. ^ lA S ?; S; !^ ^S2 5 5 g5 S5S3SS SS3SSSSSSSS£ £ If 1 |i | il\ ^ <a ro in »-i ea ca CM int^in<4»iAQfeQa'«-i«' ^ 3 >0 -O hO 1^ r*. tsi ^ir^rv rv in tf> tn in in sj q o QC <i- ar»-»oj~*t ^ «4> rN.fs.^ o ooo r>. jft o f^to ca ^^"^'^^^ ^t^ri ^^^x^q-JO^-** X -JUL eax^>:z:x:oo^cc wox_»-u:Kx^i*#i/>Qcu|ia^-«u.«<ci«.t> a ooo u. u. u. 3 r> CO TO CO 3> ( iC
Home
Privacy and Data
Site structure and layout ©2025 Majenko Technologies