perm filename FORCE.COO[3,VDS] blob
sn#299720 filedate 1977-04-22 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00040 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00005 00002 ∂19-Apr-77 0943 BES FORCE WRIST INTRODUCTION
C00008 00003 VALID 00009 PAGES WRIST.SAI
C00009 00004 BEGIN "WRIST"
C00012 00005 STRING PROCEDURE GETTIM
C00014 00006 ⊃ MATRIX SOLVERS: DECOMPOSE, SOLVE
C00021 00007 ⊃ MISC ROUTINES: SOLVER, TYPEFORCE
C00023 00008 ⊃ MATRIX INVERSION ROUTINES: INVERT, PINVERSE
C00026 00009 ⊃ START OF MAIN PROGRAM, INITIALIZE KEY VARIABLES
C00030 00010 ⊃ ASK WHAT WE ARE TO DO WITH THE DATA
C00034 00011 ⊃ SAVE DATA ON DISK FILE
C00038 00012 VALID 00004 PAGES TLKEF6.FAI
C00039 00013 TITLE TLKEF6
C00041 00014 START OF EXECUTABLE CODE
C00045 00015 [LOCAL STORAGE AREA]
C00047 00016 VALID 00017 PAGES IO.PAL
C00049 00017 IO - TELETYPE IO AND STRING MANIPULATION ROUTINES
C00051 00018 "INSTR" - VT05 INPUT ROUTINE
C00054 00019 "HOLD" - VT05 ROUTINE TO TEMPORARILY SUSPEND PRINTING
C00055 00020 "RELSCN"- STRING TO FLOATING POINT NUMBER ROUTINE
C00058 00021 [CONTINUATION OF "RELSCN"]
C00061 00022 [CONTINUATION OF "RELSCN"]
C00064 00023 "INTSCN"- STRING TO INTEGER NUMBER ROUTINE
C00066 00024 "CLRCMA"- ROUTINE TO CLEAR COMMA BREAK CHARACTER FROM STRING
C00067 00025 "FORMAT"&"RSTFOR" - ROUTINES TO SET AND RESTORE OUTPUT FORMAT
C00069 00026 "CVF" - FLOATING POINT NUMBER TO "F" FORMAT STRING ROUTINE
C00072 00027 "CVE" - FLOATING POINT NUMBER TO "E" FORMAT STRING ROUTINE
C00075 00028 [CONTINUATION OF "CVE"]
C0007↔ 00029 "CVG" - FLOATING POINT NUMBER TO "E" OR "F" FORMAT STRING
C00079 00030 "PRTF" - PRINTING ROUTINE USED BY "CVF", "CVE", & "CVG"
C00082 00031 "CVI"&"CVO" - INTEGER NUMBER TO ASC STRING
C00085 00032 LOCAL STORAGE AREA
C00089 00033 VALID 00008 PAGES INTFAC.PAL
C00090 00034 .TITLE INTFAC
C00092 00035 DAC TEST SECTION
C00094 00036 ADC TEST SECTION
C00096 00037 CONT. OF ADC ROUTINE
C00097 00038 SUBRS AND CLOCK INTERRUPT ROUTINE
C00100 00039 SECTION TO READ FORCE WRIST AND RETURN INFORMATION TO PDP10
C00102 00040 LOCAL STORAGE
C00104 ENDMK
C⊗;
∂19-Apr-77 0943 BES FORCE WRIST INTRODUCTION
THE PROGRAMS N@πM'β%2↓)≡Aπ¬→∪¬%¬)
A)!
A
∨Iπ
A/I∪'(A¬%αA/I∪'(]Mβ∪7+@Y¬'tX~∃)1↔l9
β∪6DbY¬M:XA∪<]!β→lfY¬M:XAβ9λA∪≥Q
βε]Aβ→6f1¬':8@A∩A⊃∨≤O(↓↔≥∨.4∃/⊃βPA↔∪≥⊂A∨AM⊃β!
↓)⊃
AA%∨∂%¬≠&AβI
A∪≤↓'∪≥π∀A∩A⊃¬-≤OPA→∂∨-λAβPA)⊃4A
∨$4∃#+∪Q
AαA]⊃∪→
↓¬+(A$A'+'Aπ(AQ⊃2A⊃∨≥(AI!%M≥(AM∨≠
A=A≠2↓¬))∃$A/∨I⊗~∃'%≥π
A$A)⊃%∃.A)⊃∃~A)∨≥)⊃HA)∞AQ'(A=+(A≠dAπβ→%¬%β)%∨≤A!I∨π U%
\@↓)⊃%∀~∃∪&↓!%∨¬¬¬→2A∧A→∨(↓)⊃β(↓π∨+→⊂Aβ≥λ↓'⊃∨+1λA¬
↓π⊃β≥≥λA∪8Aβπ A∨AQ⊃'
4∃!%∨≥%β≠&↓'≡A)!
Aπ∨9-%'%∨≤A)¬'⊗A'!∨+→λ↓¬
Aα↓∂∨∨λ↓!%∨∃∃π(A
=$A'∨5∨≥
↓)≡~∃]∨%⊗A=≤\@A!∨/-∃$XA∩↓)⊃∪≥,A)⊃βPA3∨*↓'⊃∨+1λA≠β%_AαA1∪')∪9∞A∨↓βπ⊂↓∨A)!'
~)!%∨∂Iβ≠&AQ∨∂)!$A/%)⊂Aα↓π∨!2↓∨A)!
A'
)∪∨≤↓∪≤A∨U$A→βM(A!%=∂%'LA%!=%(~∃]⊃%
↓)⊃
A
β→∪¬Iβ)∪∨8A!%∨
+%∀A/β&↓ 'πI∪¬λ↓∪≤Aβ⊃ ∪)∪=≤A)≡↓'≥ %≥∞A)!
~∃π=
A∨Y$A)!
A≥P\@A)!∪&A∪LA¬π¬+'
AM∨≠
A=A)⊃∀Aπ⊃βIβπ)I&A∪≤↓)⊃
AA%∨∂%¬≠&~∃5β2A≥=(A¬
↓ ∪%
)→2AQ%β≥'1β)β¬1
Q' }RA∪9)≡A/!β)-∃$Aπ⊃¬%βπ)∃$A'PAπ∨∨,A∪&~)+'∪≥≤\@Aβ1'≡XA
∨%∀A ∨∪9∞Aβ≥dA)%β9'
%%≥∞A∨Y$A)!
A≥PXA!→∃β'
A
∨!2A¬→_~∃=A)⊃∃'
A!I∨∂%β5&A∪≥Q≡A∨≥∀A∨Ae∨+$A¬%ββ&8~∃¬%Uπ
~∀4∀∪)Q∀ACE←YJASf↓iQJA5KggC≥JA¬eUGJAg∃]hAi<A[JAIKGK]QYr\@↓→←←V↓iQS]≥f~∃←YKdAC9HAYKPA[JA-]←nA!←nAs=jAMK∃XACE=khAi!KZ\@A%K[ K[EKHAiQCPAiQJbb↑hT~∃QCLAISM→KeK]PAMY←¬iS]N↓a←S]PAS]gQekGi%←]fAQQC\AQQJ@bD↑h`A¬]HA→M∩Zbb8@@A∩4∃CYg<AQCm∀ABAG=arA←_A∪≥)→βε]!¬_@Ao!SGPAIk]fA=\AiQ∀A→'∩4bb\@↓∪hASLA]C[∃H@~∃%≥)
β]→'∩↓S\@f1mIf\@A)Q∃eJACIJA←]1rAYS5SiKH↓G←[[∃]ifA]SiPA%hXAEUhASiL@~∃C1[←gh↓SIK]QSGCX↓i↑A∪9)
βε9!β_A]eSii∃\AM←HAiQJbb↑hT\@@~(∪-SF8~∀→π∨≠5≥(@X@@A-¬→∪λ@@```r↓!β∂L@@A/I∪'(]Mβ∩~∃A%εA!β∂∀@@A ∃'π%∪A)∪∨≤4∃ε``@`b@`@``b~)ε```@d@``@`d∪¬∃∂∪≤@ /%∪'PD~∃ε@```j````L∪')%%≥∞A!I∨π U%
A∂∃))∪~4∃ε``@`n@`@``h∩DA≠β)I∪0A'=→-%Lt@A ∃π∨≠!='
XAM∨→-
4∃ε``@bh@`@``j∩DA≠∪'A%∨+Q∪≥&h@A'∨1-$X↓)3!→∨%π
4∃ε``@bl@`@``l∩DA≠β)I∪0A∪9-%'%∨≤A%=+)∪≥∃&tA∪9-%(0A!∪≥Y%'
4∃ε``@br@`@``n∩DA')βI(A∨↓≠β∪≤↓!%∨∂Iβ~XA%≥∪)∪¬→∪5
↓↔2AYβ%∪β →&~)ε```Hf@``@`p∩"↓β'⊗A]⊃β(A]
Aβ%∀A)≡A⊃≡A/∪Q⊂A)⊃∀A β)∧~∃ε`@`dn@@```r$"A'βY
A βQαA∨≤↓ ∪'⊗↓
∪→
4∃ε``@fbA9 ≠⊗~)ε,v~(→¬∂%≤@E/I∪'(D4∀~∃π=≠≠≥P@ZA)!∪&A!I∨∂%β4A∪&AU'λAQ≡Aπβ1∪¬%βQ
A)⊃∀A'π⊃∃∪≥≠β8A
∨%
A'9'∪≥∞4∀∩@A]%∪'(8v~∀~)
∪9
@"z π∨≠≠∃≥(DY
$zDNDjDY→_zDNbHDYπ%1zDP≤bjLNDdRDY→zDNDhDv~)
∪9
A≥'¬≠!&zD`v~∀4∃∪≥)∃∂$A$Y∀Y⊗1 '(l~∃∪≥Q∂$↓ +~Y
⊃β≤Y
π⊃β≤1
→β∞1%$v4∃¬∨∨1β≤AQ%'
1β'↔β≥β∪≤v4∃¬∨∨1β≤A%'πβ_1 ∨≥)M)∨ v4∃')%%≥∞Aπ=~bv~)')%∪9∞Aβ≥LY≠&1→∪≥⊂v~∃'Q%∪≥∞↓')∨!%(Y∨+Q¬+Y=+)¬+_dY∨+Q¬+fl~∃%¬_A 01 2Y hv~∀~)'β
↓∪≥)≥$AβI%β2AA'6btTa:v~)∪≥)≥$AβI%β2AIβ ∪9∂'6bi≥'β≠A&Pbta:v~∃%≥)∂∃$Aβ%Iβ2A∪ β'6Dtq:v4∃%β0Aβ%%¬2Aβ-∃%6bta:YπβY%6bhq:Y¬¬'6bhq:Y'⊃6btqtv~∀~)!%→=βλ1/%)⊂@∩D\`X@@\`X@@\`X@@\`X@@\`X@@\`X~(@@@@@@@@@@@@@`\`0@b\`0@`\`0@`\`0@`\`0@`\`0~∀@@@@@@@@@@@@@`8`X@`8`X@b8`X@`8`X@`8`X@`8`X~∀@@@@@@@@@@@@`\`X`\`X`\`Xb\`X`\`X`\`X4∀@@@@@@@@@@@@@`\@X@`\@X@`\@X@`\@X@b\@X@`\@X~∀@@@@@@@@@@@@@@\`X@@\`X@@\`X@@\`X@@\`X@D\`v~)%β_↓β%%βdA≠!%%≠6bhlXbtY:v~∀$~∃!%∃→∨βλa/∪)⊂4∀@@@@@@b@\`X@@\`X@@\`X@`\`XZn\j0@@`\@X~∀∩@\`Xb@\`X@@\`X@n\jX@`\`0@@`\@X~∀@@@@@b`\`0@`\`0@`\`0@@`\@XZnb8jX@@@\`X~(∩`\`0@j\`0@`\`0fj\nTX@@`8`X@@@\`X~(∩`\`0@`\`0@h\h0@@`\@X@@`8`X@@@\`X~(∩`\`0b`\`0@`\`0@@n\TX@@`8`XZh@\`v~)∨/≤AIβ_A¬%%β2↓
6btXXbtmtv~∀~)!%→=βλ1/%)⊂~∀4bdh\@X@Zn8`X@@Zb\p0@@@jL\`X@@bbj8lX@@4bd\j0@@Zp0, -65.20,
20.0, 82.0, 134.7, -9.0, 14.0, -83.0, -111.0, 1.00,
-115.0, 8.00, 8.00, 791.0, 119.0, -21.0, -43.0, -789.20,
25.0, 409.0, 58.0, -19.1, 23.0, -398.5, -64.0, 15.1,
3.00, 39.10, 0.00, 35.00, -3.20, 45.00, 2.30, 47.00,
-265.0, 83.0, -138.90, 13.0, -255.20, -73.00, -396.00, -12.00;
OWN REAL ARRAY EPS[1:6,1:8];
REAL ARRAY M[1:6,1:8],MI[1:8,1:6];
EXTERNAL INTEGER PROCEDURE TLKEF6(INTEGER ARRAY READINGS);
REQUIRE "TLKEF6.REL" LOAD_MODULE;
STRING PROCEDUR@
A∂∃))β~l~∀~∀DA )∃%≠∪≥∃&A)⊃∀Aπ+%I≥(A⊃β2Aβ9λA)∪5
XAπ=≥-%Q&A)⊃∃~A)≡↓β'εAM)%∪≥≤~∃π∨9')β≥Q&Aβ≥⊂A%)U%≥&AQ⊃
Aπ=≠!∨'%)
A'Q%∪≥∞8v~∀~(∪¬∂%≤@E∂∃))∪~λ~∀∪∪9)∂HA β21⊃∨+$1(Y/∪⊂Y ∪∞13β$1≠∨≤v4∀∪!%∃→∨βλa/∪)⊂E∃β≤λXE
λDXE≠¬$DXE¬!$DX ≠β2D0E∃+≥∀DXE∃U→2DX4∀∩∩@@@@E¬+∞DX '!(λXE∨πPDXE≥=,DXE⊃εDv4∀∪∨/8A')%%≥∞AβI%β2A5∨≥)⊃M6btbI:v~∀%')%∪9∞A)∪5
v~∀4∀∩"A≥(A)!
Aπ+I%≥(↓)∪≠
l~∀~∀%∂)
=%≠β(!/∪λY⊃∪∞Rv4∀∪'Q
∨%≠¬(PZd0`Rv~(∪)∪≠∃>Eπ+I%≥(↓)∪≠
↓β≥λA⊃β)
tDv~∀%#+∪π,1π∨ ∀~∀∩∩≤hnjh@h``b@bv~∀$∪⊃→%h∩Nbh0Nbfv4∀∩∪⊃I%4∩NDfXNbLv~∀∩%≠∨-4∩Nbf1⊃∨+$l~∀∩∪5∨-~$NbhY⊃β2v~(∪≥λl~∀~∀$"Aπ∨5!+)
↓β≥λA
∨≥-I(A)⊃∀A)β≠∀A∨A⊃β2v~(~∀∪)⎇⊃∨+$<l`v~(∪⊃∨+I?(↑l@v~∀∪Q?([⊃=+$Tl@v~∀∪Q∪≠?Q∪≠
M
-&Q⊃=+$RLλtDMπY&Q(R_D@@Dl~∀~∀$"Aπ∨5!+)
↓β≥λA
∨≥-I(A)⊃∀A β2↓∨A)!
A3¬$v~∀4∀∪≠∨9? β2<fbv~(∪ β3|Q β2↓≠∨λ@LbRVbl~∀∪3∃β%>Q5∨≤↑bHRVlhl~∀∪≠=≥>Q≠=≤A≠∨⊂@bdR,bv~∀%)∪≠⎇)∪≠
→π-&Q⊃β2RM5∨≥)⊃M7≠∨≥tMπ-&!3β$$Mπ%→_v~∀~(∪')→∨%≠βPQ/∪λ1 ∪∞Rl~∀∪%∃)+%≤!)∪≠
$v~∀∪∃≥λ@E≥))∪4Dv~∀_"A≠¬)%∪0↓'∨→-∃%&t@↓ π∨5!∨'
0A'∨→Y
v~∀4∃!%∨
+%∀A π=≠!∨'∀Q∪≥)∃∂$A8w'β
∀A%β0Aβ%%¬2AαY1*Rv~(~∀"A ←iPA∧AC]H↓→*ACIJA6bi≤X@bi≥:\@↓+gKf↓OY←E¬XACeICrA!L\@Aπ=[aki∃f~∃iISC]OUYCdA5CieS
KfA_↓C]HATAC]H↓aKe[UiCiS=\A[CQeSpAA&Ag↑↓iQCh↓→*{!∧\~∃'Q←eKfQ_[∩$AC]H↓*AE←QPAS\↓→*\@↓)QJA
CYXA⊃π∨≠A∨'
Q8YαYα$AoSY0~∃←m∃eoeSQJAαA]SiPA1*\@v4∀@~∀%¬∂∪8@EIK
←[a←MJD~∀%∪≥)≥$A∩0A∀XA,XA!∪Y∨)∪≥⊃0v~(∪%β0A≥∨%5%∨.X↓!∪-∨PXA'∪i
XA¬%∂∂'PXA≠+1(v~∀%'β
↓∨/≤AIβ_A¬%%β2↓%6btTa:v~(~∀@@@@@@↓'∪≠!1
A!%=π +I
A∪→=∨ Q∪9)∂HA+_wI
%∃≥π
AIβ_AHbY$d$v~∀∩@@@"A≠CG!S]J[
←IKH↓M←dA∃MMSG%K]Grl~∀@@@@@@@@@AM)β%(aπ∨
4∀∩@@A→β¬∃_A→ 1*v~(@@@@@@@@@@@@@@@@↓≠∨-
bXZb NbnRl~∀@@@@@@@@@@@@@@@A≠∨Y
@dX4dPNb\Rv~∀@@@@@@@@@@@@@@@A5∨-
@LXZfP≤bnRv4∀@@@@@@@@@@@@@@@A'+∧fY⊗v4∀@@@@@@@@@@@`@@@A∃+≠A→
@f1*v~(@@@@@@@@@A→ h@@@@↓β∨∀@DXv~∀@@@@@@@@@@@@@@@A¬∨∀@d0v~∀@@@@@@@@@@@@@@@A≠=-≤@h1≠+→(l~∀@@@@@@@@@@@@@@@A
≠A$@hX bRv~(@@@@@@@@@@@@@@@@↓
β %4@hXPHRv~∀@@@@@@@@@@@@@@@AM∨∃∞@LY→ v4∀@@@@@@@@@ATt@@@A≥λl~∀~∀%∪A≤|@j`4∀∪)⊃∃≤A+'∃%%$ `XbX π∨5!∨'
↓GC\OPAQC]⊃YJAB↓[Cie%pACf↓YCeO∀ACfDLAπ-LQ≤RRl~∀~∀$"@A∪9SiSC1SuJAA&Y→*↓C]HAHv~∀@@@@@A
∨$↓∪>bAM) @DA+≥)%_A≤A⊃≡~∀@@@@@@@@@↓¬∂∪8~∀@@@@@@@@@AA'7∪;⎇∩v~∀@@@@@@@@A≥∨%5%∨/>@v~∀@@@@@@@@@↓
∨$A)>bA'Q @b↓+≥)∪0A≤A <~∀@@@@@@@@@@@@A¬∃∂∪≤~(@@@@@@@@@@@@A→+7$Y∃;?¬7∩Y∃tv~∀@@@@@@@@@@@@A%@Q≥=%≠%∨\yβ¬&!→+7∩1∃:RR↓)⊃≤↓≥∨%≠I∨/?β &Q→+m∩Y∃:$v~∀@@@@@@@@@@@@A∃≥λv~(∩@@@↓∪@Q9∨%≠%=.6`R4∀∩@@A)⊃8A%7∪u>b←≥=%≠%∨\~∀∩@@A→M
A¬≥∪≤~∀$∪%7∪u>`v@4∀∩∪+M%%HP`Xb0E5Ke<Ae←n↓S\A ∃π∨≠!='
DRl~∀∩∪∃≥λv~(∩@@@↓≥λv4∀~∀∩DA∂CkMgSC\↓KYS[%]CiS=\AoSQPAaCIiSCX↓aSm←QS]Nv4∀∪
∨HA↔>b↓') bA+≥Q∪_A≤4bA ≡4∀∩@@A¬∂%≤@EW1←←`Dl~∀@@@@@@@@@A ∪∂∂M(A>@@v~∀@@@@@@@@@↓
∨$A$A>A⊗↓') bA+≥Q∪_A≤↓ ≡~∀@@@@@@@@@@@@↓¬∂∪8~∀@@@@@@@@@@@@A'%5?β &Q→+m!'7∪tY↔:R)%7!'m∪;:v4∀@@@@@@@@@@@@A∪Q¬∪∂≥'(yM∪5
R4∀∩∪)!≤A¬∃∂∪≤~(∩∩@@A¬∪∂≥')?M∪5
v4∀∩∩@@A!∪Y∨)∪≥⊃1?∩l~∀∩∩@@A9λv~∀@@@@@@@@@@@@↓≥λv4∀@@@@@@@@@A∪_A¬∪∂≥'(@t@`~∀$@@@AQ⊃≤A ∂∪≤~∀@@@@@@@@@@@@A+M%%HP`Xb0E'S]≥kYCd↓[Cie%pAS\↓ π∨5!∨'
λRv~∀@@@@@@@@@@@@↓ ∨≥
EWY←=`Dv~(∩∪≥⊂v~∀∩@@A∪_A!∪-=)∪≥ ∃0@6A,~∀∩@@A)⊃∃≤A¬≥∪≤~∀@@@@@@@@@@@@↓∃?!'m↔:v~(∩∪!'m↔;?!M7!∪-=)∪≥ ∃1:v~(∩∪!'m!∪-∨Q∪≥ a;?∀v4∀@@@@@@@@@@@@A≥⊂v~∀@@@@@@@@@↓!∪-∨Q?→+7A'7↔:1↔:v~(@@@@@@@@@A
∨HA∪?⊗,bA')∃ @bAU≥)∪_↓≤A ≡4∀∩∪¬∃∂∪≤~(@@@@@@@@@@@@A→+7A'7∪:1↔;?≠U→)>Q1+7!'m∪:Y↔t←!∪-=(Rv~(@@@@@@@@@@@@A∪A5+→(@l@`~∀$∪)⊃8A∪→∨= Q≤Y1+7!'m∪:Y↔tY→+7A'7↔:1↔:Rv4∀@@@@@@@@@@@@@@@@"A)!JAM←1Y←oS9NASf↓iQJAIKgkYPA←LAQQJA[¬GQS]∀AG←I∀t~∀@@@@@@@@@@@@@@@@@@A
∨HA∀A>↓⊗VbAM) @DA+≥)%_A≤A⊃≡~∀@@@@@@@@@@@@@@@@@@@@@A→+7A'7∪:1∃;?→U7!'7%:Y∃:5≠+→()→+7!M7↔:Y):v~∀@@@@@@@@@@@@↓≥λv4∀∩@@A≥λEWY←=`Dv~(@@@@@@A∪_@Q→+m!'7≥tY≥:z@R~∀∪Q⊃≤AU'%I$P`XDXE'S9OkYCHA[CiISpAS8A π=≠!∨'∀DRv~(@@@@@@A9λ@EI∃G←[a=gJDv4∀~∀~(~∃'∪5!→
AA%∨π⊃+%
AM∨→-
!∪≥)≥$A≤m'β
↓%β_↓β%%βdA→*YλY0Rv4∀~∀"↓βeeCefA→+lbu≤XDu≥:X↓¬6bu9:XA1lbu≥:8@A+g∃fAOY=ECXAMCMJA%]iKO∃dACeICr~∃A&\@AM←YmKLAβ0{λAkgS9NA→*↓Me←Z↓ π∨5!∨'
8@@v~(~∀@@@@@@↓¬∂∪8@Eg←1mJD~(@@@@@@A∪9)∂HA∩Y∀l~∀@@@@@@↓%β_↓ ∨(v4∀~∀@@@@@A'∪≠A→
A!I∨π U%
A∪1∨∨ Q%≥)∂∃$A→_1+_w%∃
%9π
A%∃β_A$DY$dRl~∀∩@@@"A5CGQS9J[G←⊃KHAM=dAKM→SGSK9Grv~(@@@@@@@@@A')¬%(1π=
~∀$@@@A1β¬_↓→ YTv~∀@@@@@@@@@@@@@@@A≠=-
@b0ZbPNDnRv~(@@@@@@@@@@@@@@@@↓≠∨-
dXZd NbnRl~∀@@@@@@@@@@@@@@@A≠∨Y
@fX4fPNb\Rv~∀@@@@@@@@@@@@@@@AM+∧@f0ZhPNDnRv~(@@@@@@@@@@@@@@@@↓')4hXv~(@@@@@@@@@@@@@@@@↓∃+≠!0@fYTv~∀@@@@@@@@@↓→ t@@@A≠=-
@j0PbRv4∀@@@@@@@@@@@@@@@A
≠!H@jXPHRv~∀@@@@@@@@@@@@@@@A→β $@PXjv~(@@@@@@@@@@@@@@@@↓β∨∀@DXv~∀@@@@@@@@@@@@@@@A¬∨∀@d0v~∀@@@@@@@@@@@@@@@A'=∃∂
@LY→ v4∀@@@@@@@@@ATt@@@A≠∨-∃~@hY⊃∨(v~(@@@@@@@@@A≥⊂v~∀~(@@@@@@A
=$A∩A|@bA'Q @b↓+≥)∪0A≤A <~∀@@@@@@@@@A ∂∪≤4∀∩@@A∪→∨= PbY$ZbY→U7!'7%:Xc:116c:$v~∀∩@@@"↓⊃CfAQQSfA∃MMKGPt~∀∩% ∨)>@@~∀∩@@@@@A
∨HA∃>b↓') bA+≥Q∪_A∩4bA ≡4∀@@@@@@@@@@@@@@@A ∨)⎇ ∨(W1+7!'m∪:Y∃tU17∃tv~∀@@@@@@@@@↓17∪;⎇¬7!'m∪;:[⊃∨(v~(@@@@@@@@@A≥⊂v~∀~(@@@@@@A1m≥:A>↓17≥:↑A→+m!'7≥tY≥:v4∀@@@@@@A→∨$A∩↓>A≤ZDA')@@ZbAU≥)∪_bA ≡4∀@@@@@@@@@A¬∃∂∪≤@"A%hA∩AG!C]OK⊂AY←←@Akaa∃dAS]⊃KpAMI←ZA≤0Ai↑A¬m←SH~∀∩∪MkEgGISahA∃ee←eLv~∀@@@@@@@@@↓∪→∨∨@Q∩Vb1≤Y→+m!'7∪tY∩VctY17∩,c:Rv4∀∩@@@"@A!CfAi!SfAK→MKGhh~∀∩∪⊃∨)>`4∀∩∪
=$A∃?$VbA'Q @b↓+≥)∪0A≤A <~∀∩∩@@A =)? ∨PW→+7A'7∪:1∃:U1m∃:v~(@@@@@@@@@A17%;>Q1m∪:[ =(R←→U7!'7%:Y∪:l~∀@@@@@@@@@A∃≥λv~(∪≥λEg←YYJDv~(⊃ MISC ROUTINES: SOLVER, TYPEFORCE;
PROCEDURE SOLVER(REAL ARRAY MI,EPS,F);
BEGIN "SOLVER"
INTEGER I,J,K;
REAL ARRAY LU[1:6,1:6],E[1:6],M[1:6];
⊃ TRIANGULARIZE THE FORCE MATRIX;
DECOMPOSE(6,F,LU);
⊃ COPY THE SIX READINGS FOR EACH GAGE AND SOLVE FOR A
ROW OF THE INVERSE CALIBRATION MATRIX. REPEAT FOR
ALL EIGHT STRAIN GAGE PAIRS.;
FOR I ← 1 STEP 1 UNTIL 8 DO
BEGIN "SOLOOP"
FOR J ← 1 STEP 1 UNTIL 6 DO E[J]←EPS[J,I];
SOLVE(6,LU,E,M);
FOR J ← 1 STEP 1 UNTIL 6 DO MI[I,J]←M[J];
END "SOLOOP";
END "SOLVER";
PROCEDURE TYPEFORCE(REAL ARRAY F);
BEGIN "TYPEFORCE"
REAL MAG;
OUTSTR(CRLF&"THE RESULTING FORCE VECTOR IS ("&CVF(F[1])&
","&CVF(F[2])&","&CVF(F[3])&")"&CRLF&
"THE RESULTING MOMENT VECTOR IS("&CVF(F[4])&
","&CVF(F[5])&","&CVF(F[6])&")"&CRLF);
MAG← ( F[1]↑2 + F[2]↑2 + F[3]↑2 )↑0.5;
OUTSTR("THE MAGNITUDE OF THE FORCE IS "&CVF(MAG)&CRLF);
END "TYPEFORCE";
⊃ MATRIX INVERSION ROUTINES: INVERT, PINVERSE;
PROCEDURE INVERT (INTEGER N; REAL ARRAY A );
⊃ COMPUTES THE INVERSE OF THE NxN MATRIX "A" AND RETURNS THE INVERTED
MATRIX IN "A". THE PROCEDURES "SOLVE" AND "DECOMPOSE" ARE USED TO
COMPUTE THE INDIVIDUAL ROWS OF THE INVERSE MATRIX.;
BEGIN "INVERT"
INTEGER I,J;
REAL ARRAY LU[1:N,1:N],IDENT[1:N],X[1:N];
⊃ COPY THE ARRAY AND TRIANGULARIZE IT;
ARRTRAN(LU,A);
DECOMPOSE(N,LU,LU);
⊃ COMPUTE THE ROWS OF THE INVERSE ONA BY ONE;
FOR I ← 2 STEP 1 UNTIL N DO IDENT[I]←0.0;
FOR I ← 1 STEP 1 UNTIL N DO
BEGIN "INVLOOP"
IDENT[I]←1.0;
SOLVE(N,LU,IDENT,X);
FOR J ← 1 STEP 1 UNTIL N DO A[J,I]←X[J];
IDENT[I]←0.0;
END "INVLOOP";
END "INVERT";
PROCEDURE PINVERSE(REAL ARRAY M,MI);
⊃ COMPUTES THE PSQEDO INVERSE OF A NON-SQUARE 6x8 MATRIX, MI, AND
RETURNS THE INVERTED 8x6 MATRIX IN M. THE EQUATION IMPLEMENTED BY
THIS ROUTINE IS AS FOLLOWS:
T -1 T
M ← ( MI * MI ) * MI
WHERE THE "*" DENOTES MATRIX MULTIPLICATION;
BEGIN "PINVERSE"
REAL ARRAY A[1:6,1:6];
REAL STOTAL;
INTEGER I,J,K;
⊃ COMPUTE THE PRODUCT OF MI AND ITS TRANSPOSE;
FOR I ← 1 STEP 1 UNTIL 6 DO
FOR J ← 1 STEP 1 UNTIL 6 DO
BEGIN "PMULT"
STOTAL←0.0;
FOR K ← 1 STEP 1 UNTIL 8 DO
STOTAL←STOTAL+MI[K,I]*MI[K,J];
A[I,J]←STOTAL;
END "PMULT";
⊃ INVERT THE PRODUCT AND MULTIPLY BY THE TRANSPOSE AGAIN;
INVERT(6,A);
FOR I ← 1 STEP 1 UNTIL 6 DO
FOR J ← 1 STEP 1 UNTIL 8 DO
BEGIN "FMULT"
STOTAL←0.0;
FOR K ←1 STEP 1 UNTIL 6 DO
STOTAL←STOTAL+A[I,K]*MI[J,K];
M[I,J]←STOTAL;
END "FMULT";
END "PINVERSE";
⊃ START OF MAIN PROGRAM, INITIALIZE KEY VARIABLES;
OUTSTR(CRLF&CRLF&"*** FORCE BALANCE RESOLUTION PROGRAM ***"&CRLF);
DX← DY← DZ ← 0.0;
TERSE←TRUE;
LINED←""; COM1←"";
⊃ READ IN THE CALIBRATION TABLE IF IT EXISTS, AND TYPE AN APPROPRIATE
MESSAGE.;
CCHAN←1;
OPEN(CCHAN,"DSK",0,2,0,DUM,DUM,DUM);
LOOKUP(CCHAN,"FORCAL.CAL",FLAG);
IF FLAG=0 THEN BEGIN
FOR I ← 1 STEP 1 UNTIL 6 DO
FOR J ←1 STEP 1 UNTIL 8 DO M[I,J]←REALIN(CCHAN);
OUTSTR("CALIBRATION TABLE READ FROM DISK"&CRLF);
ISCAL←TRUE;
END ELSE BEGIN
OUTSTR("NO CALIBRATION DATA FOUND ON DISK"&CRLF);
ISCAL←FALSE;
END;
RELEASE(CCHAN);
⊃ MAIN LOOP, CHECK FOR TERMINATION OR WAIT TO TAKE READING;
DONTSTOP←TRUE;
WHILE DONTSTOP DO
BEGIN "MAIN"
ERR←1;
WHILE ERR≠0 DO
BEGIN
OUTSTR(CRLF&"Type CR to read strain gages: ");
INCHWL;
ERR←TLKEF6(READINGS);
END;
⊃ COMPUTE STATISTICS FOR READINGS.;
FOR I←1 STEP 1 UNTIL 8 DO
BEGIN
AVER[I]←0.0;
SD[I]←0.0;
END;
FOR I←1 STEP 1 UNTIL NSAMPS DO
FOR J←1 STEP 1 UNTIL 8 DO
BEGIN
AVER[J]←AVER[J]+READINGS[I,J];
SD[J]←SD[J]+READINGS[I,J]↑2;
END;
FOR I←1 STEP 1 UNTIL 8 DO
BEGIN
AVER[I]←AVER[I]/NSAMPS;
CAVER[I]WAVER[I]-BASE[I];
SD[I]←((SD[I]-NSAMPS*AVER[I]↑2)/(NSAMPS-1))↑0.5;
END;
⊃ PRINT THE DATA. SAVE OUTPUT STRING FOR LATER.;
SETFORMAT(9,2);
OUTBUF←GETTIM&
"Strain Gage Readings: Mean, Corrected Mean, Standard Dev."&
CRLF;
OUTBUF2←OUTBUF3←"";
FOR I ← 1 STEP 1 UNTIL 8 DO
BEGIN
OUTBUF←OUTBUF&CVF(AVER[I]);
OUTBUF2←OUTBUF2&CVF(CAVER[I]);
OUTBUF3←OUTBUF3&CVF(SD[I]);
END;
↓OUTBUF←OUTBUF"CRLF&OUTBUF2&CRLF&OUTBUF3&CRLF&CRLF;
OUTSTR(OUTBUF);
IF ¬TERSE THEN
BEGIN
OUTBUF2←"Raw Data:"&CRLF;
FOR I ←1 STEP 1 UNTIL NSAMPS DO
BEGIN~∀$∩@@@%
∨$A(A>@b↓') bA+≥Q∪_@p↓ ≡@~(∩∩∩∪=+)¬+_e?∨+Q¬+d→π-&QIβ ∪9∂'7∩1∃:RLλ@@Dv4∀∩∩∪=+)¬+_e?∨+Q¬+d→π%→l~∀∩∩%≥λv4∀∩∪∨U)')$!∨+)¬UdMπI→Rv4∀∩∪9λv~∀_"AβM⊗A/⊃¬(A/
↓β%
AQ≡A ≡↓/∪)⊂↓)⊃
A⊃β)αv4∀~∀∪¬'↔β∂¬∪≥?)I+
v~(∪/⊃∪1
Aβ'-β∂β∪8A ≡~(∩∪¬≥∪≤@E⊃β)β→=∨ D~(∩∪∨+Q')$P /QCh↓I↑As=jAoC9hAi↑↓I↑}@!αY∧YYλY∞1$Y&YPY0YπHX}RzDRv~(∩∪→∨⊃λQ→%≥λM
$Rv~(∩∪→∪9λA>↓∪≥π⊃]_v~∀$∪∪A∃#*Q→%≥λXλ}DRAQ⊃≤@4∀∩∩∪=+)')HP@D@↓α@ZAAeS]h↓CYXA⊃CiBA
←YYK
iKHD→π%→_~∀∩∩$∩D@Aλ@ZA'∃hA]K\AICi∧AECg∀A←MMMKhDM
%→L4∀∩∩∩@@@@@@D@↓ε@ZAUgJAI¬iBAM=dAGC1SEeCQS←\D→π%→_~∀∩∩$∩D@A⊂@ZA⊃¬YhAKaKGki%←\A←_A/%∪M(DMπI→L~(∩∩∩∩λ@A∞@4A∂↑AIKCHAMieCS8AOCO∃fACO¬S\DM
%→L4∀∩∩∩$D@A$ZA%KM←YmJ↓M←eG∃fAC]⊂A[←[∃]ifD→π%→_~∀∩∩$∩D@AL@ZA've data set on disk"&CRLF&
" T - Terse output"&CRLF&
" X - Resolve at external location"&CRLF&
" ? - Print this message"&CRLF)
ELSE IF EQU(LINED,"G") THEN ASKAGAIN←FALSE
ELSE IF EQU(LINED,"D") THEN ASKAGAIN←DONTSTOP←FALSE
⊃ SET OUTPUT TERSE/FULL MODE;
ELSE IF EQU(LINED,"A") THEN TERSE←FALSE
ELSE IF EQU(LINED,"T") THEN TERSE←TRUE
⊃ USER WANTS TO SET NEW DATA OFFSET;
ELSE IF EQU(LINED,"B") THEN
BEGIN
FOR I←1 STEP 1 UNTIL 8 DO
BEGIN
BASE[I]←AVER[I];
IBASE[I]←READINGS[1,I];
END;
OUTSTR("New data base offset set"&CRLF);
ASKAGAIN←FALSE;
END
⊃ RESOLVE FORCES AND MOMENTS AT AN EXTERNAL LOCATION;
ELSE IF EQU(LINED,"X") THEN
BEGIN
OUTSTR("Type Dx,Dy,Dz = ");
ANS ← INCHWL;
DX ← REALSCAN(ANS,DUM);
DY ← REALSCAN(ANS,DUM);
DZ ← REALSCAN(ANS,DUM);
MPRIME[4,2]←-DZ;
MPRIME[4,3]←DY;
MPRIME[5,1]←DZ;
MPRIME[5,3]←-DX;
MPRIME[6,1]←-DY;
MPRIME[6,2]←DX;
END
⊃ FORCE AND MOMENT COMPUTATION;
ELSE IF EQU(LINED,"R") THEN
IF ¬ISCAL THEN
OUTSTR("NO CALIBRATION DATA"&CRLF)
ELSE BEGIN "RESOLVE"
REAL ARRAY F[1:6],FPRIME[1:6];
SETFORMAT(8,2);
FOR I←1 STEP 1 UNTIL 6 DO
BEGIN
F[I]←0.0;
FOR J←1 STEP 1 UNTIL 8 DO
F[I]←F[I]+M[I,J]*(READINGS[1,J]-IBASE[J]);
END;
TYPEFORCE(F);
FOR I←1 STEP 1 UNTIL 6 DO
BEGIN
FPRIME[I]←0.0;
FOR J←1 STEP 1 UNTIL 6 DO
FPRIME[I]←FPRIME[I]+MPRIME[I,J]*F[J];
END;
OUTSTR(CRLF&"FORCE/MOMENTS RECOMPUTED AT ("&CVF(DX)&
","&CVF(DY)&","&CVF(DZ)&")"&CRLF);
TYPEFORCE(FPRIME);
ASKAGAIN←FALSE;
END "RESOLVE"
⊃ SAVE DATA ON DISK FILE;
ELSE IF EQU(LINED,"S") THEN
BEGIN "SAVEIT"
INTEGER CHAN;
OUTSTR("OUTPUT COMMENT =");
LODED(COM1&CR);
COM1←INCHWL;
CHAN←3;
OPEN(CHAN,"DSK",0,2,2,DUM,DUM,DUM);
LOOKUP(CHAN,"FORCAL.DAT",DUM);
ENTER(CHAN,"FORCAL.DAT",DUM);
QUICK_CODE¬
UGETF 3,DUM;
END;
OUT(CHAN,COM1&CRLF&OUTBUF&CRLF&FF);
RELEASE(CHAN);
END "SAVEIT"
¬
⊃ USE DATA FOR FORCE CALIBRATION, PRINT CURRENT DATA;
ELSE IF EQU(LINED,"C") THEN
BAGIN "CALIB"
OUTSTR("CURRENT CALIBRATAON DATA:"&CRLF&
" TEST # FORCES AND MOMENTS"&CRLF);
SETFORMAT(8,3);
FOR @∩A|@bA'Q @b↓+≥)∪0@lA <@~∀∩$∩∪¬≥∪≤4PH$$&rN}∞5→"%%2⊃↓↓ Xh($$HJ~>I∧Qα⎇↓
αNR⊗α↓EαVu"&1↓2α∩<4PH$$$L
2N}rM~∞41"~nJb*u%Xh($$HJ>VR≥"I"εu→~∞Jd1%l4PH$$&,r⊃l4Ph(Eα∀*B2ε≤)α>2"α∩εR
α↑&RBα:⊗]Xh(4(HH&>V%~RI!∃∩⊗B2~∃α∩
"¬αN-!↓!Alr>:∃J↓u↓ KX4($HJε:M¬yα&:≤B↑1lhP$$&%~⊗R}LrRN∞q"ε:~b∩V5KX4($HJ&→α%~⊗PmααR"⊗ph($$HJ
ε≡Lp4($HH&ε:≥y lhP$$$L2>IαJα⎇↓E¬~R⊗Aβ αV:$J1↓Y∧"<4(HH$$&rN}εu→~∞Z2B~n∩≤*Q2&jIl4(HH$&>-"NBIB∩:⊗]∧2>J∞-→>6>l*:RMβi %lhP$$$Lb>∩⊗"Bε:M4~I%LhP$$$L
:Mα|J:∞"<al4(HH$&~⎇⊃α%αz↓EαN$*A↓E¬*:R&b↓Yα∩z4($HH$&~β8E≤-EI∃m⎇(X∀e≤8→bDj5D%,U↔0hP⊃⊃⊂L4z$∧J¬tε∩¬≥HZαβ
Ye$LDπα∧$t↓PPH⊃⊃⊂L-
;4%≤ZADMmβpp*h4Vr+Wc"B!⊃"13HGc"B!⊃#"D$λ4rh _H∃∩λT⊂p3 _TP5 →sH∪(~∀R6∧ 4h∃ t⊂Q(λ9s4∃*H1∞c!!""#!!""3jZ∀u∀E∧Pss*
5⊃( h5h⊂h→∩0TH~⊂3sD 05∀I≠λ
⊗%IJ/h∧%.c"A⊃"03J;r3Pi
s∞c!!""2(d⊃45%λ3Tk∧+(J(
I⊃3C!!"""((1r3AQB""!~ss∃HZJ∪2%H4∀kλe.c"A⊃""4 →UQ4J8*∪+ Y*.c!!""")~pp3z∀U1'1"B"!⊃13Qπ1"C"B∀∀p5HT∪Q5dλp3∩(*P5∩)yH∪sD
∩⊃(λI4rog1"C"A⊃"3u*Ju∀J∧*p5Q$ Q5h X5∀R+∧∪sH
I⊃(⊃ ~rh
∃∪J/d∧J.c!!""0)jwr3H9∃s∞aQB"")_H⊃4*U⊂3TeDV(B$
∩⊃3AQB""!_Q1r)a"B"!⊃0r⊂)klnc!!""")z⊃3Jλ9⊂3K∧(∀rhEFε%,L¬H∃3+λJ3*.aQB""!_3U⊃*%⊂r⊂)eλQSj(p3H83λKλJ3*.aQB""!~q5⊃IzS05¬ε-+
e↔c"B!⊃"1Sj$∩7l$
u⊃4∧ε(∃3JI3λ
Dλ∪hβ!!"""$∧λ⊃Sj$∩H↔dε(∀uλZλ
λ
YU∩3∧ε(⊃∪aQB""!⊃0Q1i→HλT I3Q(AQB""!⊃314ktHNc!!"""!_St@ 4↔h∩D
u⊃4∧ε(∃3JI3λ∩E6h⊃∪d↓#"H↓⊃"""!→14wiX4iPjh*∪6i∃∩w*$dHλλG1"B"!⊃"3u*E⊂r⊂)e∪14dhtS⊃E↔c"B!⊃""1)hλλT I3Q(G1"B"!⊃3u5¬λr⊂3EHtS⊃DhtS⊃DdPp3 _TP5 →sH∪(~∀R6π$λIQhZ∃∩3%↔c"B!⊃"4Q)H04q%λr⊂3E↔c"B!⊃"13HGc"B!⊃13Q∧∧Pp3 _HNc!!"13HDλQ⊂*H3∪sj∧Nc"A_3Qλ∧)023D'c"C!"(⊃6 ~λ⊂sλX3S⊗'1"C"Iz5∀u
%λR(
:4Q( t⊃(
I⊃(λh∧(hh ~h⊂p)I0TP*H1λ($∀(IPj)⊃J.aQC"Q)hλλUj)4uλAQ@↓Hss3(YUλ¬D∧λ∃P)I1λεε
λ
λ1q4d∧λλ∃ Iq1MEhP2#!(h∀Q(4λ∀⊂(x(λλλH4ptI~∃∩3ia"Plεε ⊂____CE!X__→⊂___→∧U$j&"H* KEF6
C00004 00003 START OF EXECUTABLE CODE
∃ε@```p````P∩∪7→=πβ_AM)∨%β≥
Aβ%∃β:4T→AAAλε∩∧,hITXh(2cXh e$~ID*¬II4,3aQ$LuHZ$tD
Dd\Xf`hPQ'2∃$I8T32$ ∃~∧∀
4LDλ4dH_$d*
$|≤XJU∀
λiu∩¬(X∀$Lht¬$DTλd⎇∀8T¬≤,j9∀t:
z$M≥AQ#]≥J(∀Lrλx∀<-4λe∀|Tλ∩¬¬)xu∀T
DD
D
%,u4 tr¬IλR¬∧Jε∪
{FUbα∧∀
4m HPhS:8∀Lbλ8∀db ~2∧
4λd|dIzu≠PQ'0hS1_U∃∀z+u$d8Xc2D→jD,<Z$∧
∃(≠∩¬∀X_DLtz5∪Zα↓Q#]<λZ$(h'1∀-∃)z"βjε∧∧L2∧*Dd\Xfb∩¬x~2¬≥X84-≥8jTbbβ6α∧⎇IλU∃<~8PhS1~$,I→d=~πTβππ∧∧
∃(≠∩∧Ld
tDL9∧¬$DT
5%∀→→b∧<_xU~¬(X∀$Lhz2∧
(T¬∀-JZ$t,AQ#Xh':DDM4
$⎇-I→d*¬K~∧-~ ~B=~ ztr∧Z*$⎇∩ XU≥≤_xU~∧yd¬$DT
E%JaQ hS8HT4Li~DL|j1PPh*s8⊃↔5¬-9∧¬≥$_92¬∀Xy∃≥$Z!PTl~9D|≥vFβββ↓↔4l
:HU∩∧jYT∀-$ ∀r∧YH`hTH~D$KvCββε⊃∪]≥H~%"∧_HE∀-:4¬$z
(T"λH∃$
λj$|JλYD0h)X∃≥$Z+sβVfpK\9λT≤Z jTl∀Z$∧5∀yT∧,dd ∀2∧Iyd*¬(X∀$LhqPT$*Xdb¬wWβK9jTl∀Z$∧|2
yu∀%4
Dz¬J(∀u≤hZ"∧5)yRπ$λT∧,daQ ;START OF EXECUTABLE CODE
TLKEF6: SETZ 1, ;CLEAR ERROR FLAG
MOVEM 16,HOLD+16 ;SAVE THE REGISTERS
HRRZI 16,HOLD
BLT 16,HOLD+15
;INTIALIZE THE ELF AND CLEAR THE MASTER NUMBER. THIS INSURES THAT
;WE READ CURRENT DATA
IOPUSH 1, ;CALLER MIGHT WANT THIS CHANNEL
JRST [ OUTSTR CM0 ;IOPDLOV MESSAGE
JRST ERR ]
INIT 1,17 ;INITIALIZE THE ELF
SIXBIT /ELF/
0
JRST [ OUTSTR CM1 ;ERROR RETURN
ERR: AOS HOLD+1 ;RETURN ERROR VALUE
JRST TLKDNE ]
GETSTS 1,1 ;GET THE ELF STATUS WORD
TRNE 1,777700 ;CHECK FOR ERROR CONDITAON
JRST [ OUTSPR CM2 ;INDICATE STATUS ERROR
JRST ERR ]
MTAPE 1,MASADR ;ZERO MASTER NUMBER
JRST [ OUTSTR↓π~f@@∩wI%∨$AI)+¬8~∀∩∩@@A∃I'(@@↓%$@↓:~∀~(w'β∪PA)&daα⊗22α∞>2d*∞@%4
DD*λH∃$λQ!⊂hP→Yu4,⊃⊗2ck⊗↓⊂K]J+∩¬∀X_DLttλTd2λH∃$
ε∩α¬$α31*1"TQ(_∪∀∞A~q1⊗A⊗+α"':s⊃1*∧⊂Q1IzQ(∃
+23Qdλ1p2)a"B4iH14α&∃β"B)Z⊂4⊃!⊗+⊃∪HX1⊃α'8q5λ
I⊃(⊃ yQ(∃izQλ⊃J)s(∃ λ(⊃3λa"B2J*uα6d∧λ∪u*Ju∀@⊂⊂f[∧DNbi)'T⊂)"j∃i'εEαDP⊂⊂λ%))jλ⊂⊂"i∀⊂⊂.FB∧fgk⊃DY⊗"∪"ki"α]f'`Q⊂+ f∃bP$g∃'P)"Qdij"TεE∧e∃fh#@αY⊗"f⊃"'"DNa) g⊂d⊂$cλ*$"P⊃f#⊂)Rcg f∀P"'g⊃FE∧iSe#DYK)"`b∪(∧]i⊃h"`jλ$c⊂&Si"P*∩dbP&⊃c*εEαgjj)U)∧afM⊂∧D]Qd)bP∃"f&⊂∪h"a U'i⊂"S#⊂*'SeP*'SP&jaR⊂*$fQFE∧e∀)j∧bT)εEεB≥j) S)c"iλ*$"P⊃ j P⊂ ae@∃'P"$⊃P&`dS⊂()'Qi fP∩c⊂ f∪⊂+bg∃⊂+bf∪εE∧FB"f#"∪"]∧aPdbDY&`ij⊃i∧]fPebP)Ui"P+QP#gjλ*$"P∀$cd*λ&`ij⊃i⊂'*Sa"iεB∧e))U∧mP⊂λ'jj)U)⊂!fMD]idQe f⊂⊃i)'iβE∧P⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂∩))jλ⊂"i)αnBE∧Sgk"DL⊗⊗XT∀∀DD]Qbj⊂ Q")"iTP*'P∃) g)Q"i⊂"⊂j FEαice∧L⊗⊂⊂⊂λ⊂∧D]Q"ai"Sbg*⊂⊂i) lH('dg∃"iεEαd)&$BY⊗⊗b⊂*c&⊂α]ibjλ('dg∃"i⊂*∪P*) S)c"iλ" j CE∧fgU"fDY$g&)UεE⊂⊂λ⊂⊂∧jTbj$DLV#`cQP⊂∧]Tbj⊂*T⊂$g(∃j⊂)j∀ dg⊂⊃`cbP⊃ j FB⊂⊂⊂⊂λ∧dg∧LV g&∀j∧D]T"`b⊂∩g⊂ P⊂&'aeH'c⊂"⊂j FEαe))jαW∃Y∧B]g'i∪`f⊂)⊃j*i'βE∧e)∀j∧mPλ⊂'jj∀j)⊂!S\∧D]Qi)'iλ)"j*T'εE∧BP⊂⊂⊂∩))j ERR ]
;BETURN TO CALLANG PROGRAM
TLKDNE: IOPOP 1, ;RELEASE THE ELF & RESTORE CHANNEL 1
JFCL ;JUST CANNOT HAPPEN
HRLZI 16,HOLD ;RESTORE THE REGISTERS
BLT 16,16
SUB P,[2(2)] ;POP ARGUMENTS OFF STACK
JRST @2(P) ;RETURN
; [LOCAL STORAGE AREA]
HOLD: BLOCK 17
;I/O DATA AREAS
GAGE: 400004,,400000+DATADD ;MODE AND ADDRESS FOR "IN" OF STRAIN GAGE DATA
INLST: 0 ;PT. TO DATA ARRAY
0
MASADR: 003000,,MASLOC ;CLEAR MASTER WORD
0
DNEADD: 002004,,MASLOC ;MODE AND ADDRESS FOR MASTER DONE WORD
DNEWRD: 0 ;VALUE OF DONE WORK
;OUTPUT STRINGS
CM0: ASCIZ/IOPDLOV WHEN TRY TO SAVE CHANNEL 1 FOR "ELF"
/
CM1: ASCIZ/CANNOT INIT "ELF"
/
CM2: ASCIZ/"ELF" STATUS WORD INDICATES ERROR CONDITION
/
CM3: ASCIZ/UNABLE TO ZERO MASTER NUMBER IN "ELF"
/
CM4: ASCIZ/"ELF" NOT TRANSFERING STRAIN GAGE READINGS
/
CM5: ASCIZ/BAD READ FROI "ELF" DURING POSITION DATA TRANSFER
/
CM6: ASCIZ/ELF READ ERROR WHILE WAITING FOR ADC READING TO COMPLETE
/
CM7: ASCIZ/ELF MASTER NUMBER INCORRECT, CAN'T READ THE DATA
/
CM8: ASCIZ/ERROR IN TRANSFERING STRAIN GAGE DATA
/
END
COMMENT ⊗ VALID 00017 PAGES IO.PAL
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 IO - TELETYPE IO AND STRING MANIPULATION ROUTINES
C00006 00003 "INSTR" - VT05 INPUT ROUTINE
C00009 00004 "HOLD" - VT05 ROUTINE TO TEMPORARILY SUSPEND PRINTING
C00010 00005 "RELSCN"- STRING TO FLOATING POINT NUMBER ROUTINE
C00013 00006 [CONTINUATION OF "RELSCN"]
C00016 00007 [CONTINUATION OF "RELSCN"]
C00019 00008 "INTSCN"- STRING TO INTEGER NUMBER ROUTINE
C00021 00009 "CLRCMA"- ROUTINE TO CLEAR COMMA BREAK CHARACTER FROM STRING
C00022 00010 "FORMAT"&"RSTFOR" - ROUTINES TO SET AND RESTORE OUTPUT FORMAT
C00024 00011 "CVF" - FLOATING POINT NUMBER TO "F" FORMAT STRING ROUTINE
C00027 00012 "CVE" - FLOATING POINT NUMBER TO "E" FORMAT STRING ROUTINE
C00030 00013 [CONTINUATION OF "CVE"]
C00032 00014 "CVG" - FLOATING POINT NUMBER TO "E" OR "F" FORMAT STRING
C00034 00015 "PRTF" - PRINTING ROUTINE USED BY "CVF", "CVE", & "CVG"
C00037 00016 "CVI"&"CVO" - INTEGER NUMBER TO ASC STRING
C00040 00017 LOCAL STORAGE AREA
C00044 ENDMK
C⊗;
;IO - TELETYPE IO AND STRING MANIPULATION ROUTINES
.TITLE IO
;***NOTE: ALL OF THE REGISTER DEFINITIONS REQUIRED BY THESE ROUTINES****
;*** CAN BE FETCHED BY DOING A ".INSRT HALHED[HAL,HE]" ********
;"CRLF" IS A SUBROUTINE FOR TYPING OUT ONE CARRIAGE RETURN AND LINE FEED
;ON THE TELETYPE.
CRLF: MOV #CRLFX,SG
JSR PC,TYPSTR
RTS PC
CRLFX: .BYTE 15,12,0,0
;"TYPSTR" OUTPUTS A STRING, ENDING WITH A ZERO CHARACTER. A POINTER TO
;THE START OF THE STRING MUST BE LOADED INTO R5. CALLED USING THE PC.
TYPSTR: MOV R0,-(SP)
BR 2$
1$: JSR PC,TYPCHR ;TYPE THIS CHARACTER
2$: MOVB (SG)+,R0 ;GET A CHARACTER
BNE 1$ ;END OF LINE?
MOV (SP)+,R0
RTS PC ;Done
TYPCHR: TST OUTSW ;VT05 or console?
BEQ TYPCH1
TSTB KBOS ;VT05: Is it available?
BPL TYPCHR ;No
MOVB R0,KBOR ;Output a byte to it.
CMP #12,R0 ;Was it a line feed?
BNE TYPRET ;If not that code, then done.
CLR R0 ;Otherwise, output 3 nulls.
JSR PC,TYPCHR ;
JSR PC,TYPCHR ;
BR TYPCHR ;Direct jump; it will return to caller.
TYPCH1: TSTB OREG ;Console: Ready?
BNE TYPCHR ;No.
MOVB R0,OREG ;Yes. t a byte to it.
MOV #1,172566 ;Wake up pdp10 by generating interrupt
TYPRET: RTS PC ;Return.
;"INSTR" - VT05 INPUT ROUTINE
;STRING BYTE POINTER MUST BE IN SG. A CARRIAGE RETURN IS ASSUMED TO
;BE THE ACTIVATIOJ CHARACTER. A RUB OUT IS A DELETING BACKSPACE
;CHARACTER. AT THE COMPLETION OF THIS ROUTINE A NULL CHARACTER IS
;PLACED IN THE INPUT STRING. SG IS LEFT UNCHANGED.
;REGISTERS USED:
;
; SG PASSES ARGUMENT AND IS NOT MODIFIED
INSTR: MOV R0,-(SP)
MOV SG,-(SP)
IN2: TST OUTSW ;VT05 OR CONSOLE?
BEQ CONSIN
TSTB KBIS ;TEST IF KEYBOARD READY
BEQ IN2 ;WAIT TILL IT IS
MOVB KBIR,R0 ;GET A CHARACTER
BR GOTCAR
CONSIN: MOV IREG,R0 ;BYTE FROM PDP10?
BEQ IN2 ;NO
CLR IRAG
GOTCAR: BIC #177600,R0 ;MASK OFF - MAKE IT 7 BITS
CMP R0,#177 ;COMPARE TO BS CHARACTER
BNE IN3 ;SKIP IF ITS NOT
CMP SG,(SP) ;CHECK IF ANY CHARACTERS IN BUFFER
BEQ IN2 ;FORGET BACK SPACE IF NO CHAR.
DEC SG ;REMOVE LAST CHARACTER IN BUFFER
MOV SG,-(SP)
MOV #DBS,SG ;PERFORM A DELETING BACKSPACE
JSR PC,TYPSTR
MOV (SP)+,SG
BR IN2
IN3: CMP R0,#15 ;COMPARE TO CR CHARACTER
BEQ IN4 ;CONTINUE READING IF ITS NOT A CR
CMP R0,#40 ;CHECK IF CHARACTER LEGAL
BLT IN2 ;IGNOR IF IT IS
MOVB R0,(SG)+ ;SAVE THE CHARACTER
JSR PC,TYPCHR ;ECHO CHARACTER
BR IN2 ;CONTINUE READING
IN4: MOVB R0,(SG)+ ;END OF STRING,PUT IN A CR
CLRB (SG) ;PUT IN A NULL CHARACTER
JSR PC,CRLF ;TYPE CR/LF
MOV (SP)+,SG
MOV (SP)+,R0
RTS PC ;RETURN
DBS: .BYTE 10,40,10,0
;"HOLD" - VT05 ROUTINE TO TEMPORARILY SUSPEND PRINTING
;IF A CHARACTER HAS BEEN TYPED ON THE VT05 KEYBOARD, THIS ROUTINE GOES
;INTO A BUSY WAIT LOOP UNTIL ANOTHER CHARACTER IS TYPED. BOTH CHARACTERS
;ARE LOST. IF NO CHARACTER HAS BEEN TYPED, THIS ROUTINE RETURNS
;IMMEDIATELY.
;REGISTERS USED:
;
; NONE
HOLD: TSTB KBIS ;TEST IF CHARACTER TYPED
BEQ HLDDNE ;RETURN IF NO CHARACTER
CLRB KBIR
TSTB KBIS ;ELSE WAIT TILL ANOTHER CHARACTER TYPED
BEQ .-4
CLRB KBIR
HLDDNE: RTS PC
;END OF "HOLD"
;"RELSCN"- STRING TO FLOATING POINT NUMBER ROUTINE
;THE FLOATING POINT NUMBER MUST BE OF THE FORM SIII.DDDESXX WHERE S IS
;THE SIGN OF THE NUMBER, III IS THE INTEGER FIELD, DDD IS THE DECIMAL
;FIELD, AND SXX IS THE EXPONENT AND ITS SIGN. THE LENGTH OF EACH
;FIELD IS VARIABLE BUT ONLY THE FIRST 8 DIGITS ARE USED IN COMPUTING
;THE F.P. NUMBER. EMPTY FIELDS ARE PERMITTED AND ALL LEADING SPACES
;AND ZEROS ARE IGNORED. THE LOCATION OF THE FIRST BYTE OF THE STRING
;MUST BE LOADED INTO SG BEFORE CALLING "RELSCN". AFTER EXECUTION,
;THIS ROUTINE LEAVES THE F.P. NUMBER IN REGISTER AC0 AND SG POINTS TO
;THE BYTE FOLLOWING THE LAST DIGIT. THE C BIT IS USED TO INDICATE AN
;ERROR CONDITION. IF NO NUMBER WAS FOUND BEFORE ENCOUNTERING A COMMA
;OR NULL CHARACTER, THE C BIT IS SET OTHERWISE THE C BIT IS CLEARED ON
;EXITING THIS ROUTINE. "RELSCN" IS CALLED USING THE PC.
;REGISTERS USED:
;
; AC0,SG PASS ARGUMENTS, NO OTHER REGISTERS AFFECTED
;"DIGIT" CHECKS FOR ASC DIGIT AND CONVERTS TO INTEGER IF IT IS
.MACRO DIGIT NOTDIG
CMP R0,#60 ;COMPARE TO ASC ZERO
BLT NOTDIG ;SKIP IF OUT OF RANGE
CMP R0,#71 ;COMPARE TO ASC 9
BGT NOTDIG ;SKIP IF OUT OF RANGE
BIC #60,R0 ;MASK OUT ASC BASE
.ENDM
;"CKSIGN" CHECKS FOR A - OR + CHARACTER AND SETS SIGN APPROPRIATELY
.MACRO CKSIGHA∪M'∪∂≤1≥)'∪≥≤Y'∪≥≤~∀∪
≠ ∩FTfY$`$∩w∪∂9∨$@D,DAπ⊃¬%βπ)∃$~∀∪ "∪∪M'∪∂≤4∀∪π≠@∩Fjj1$`∩∩mπ⊃π,A∪A%)&AαDZDA
⊃β$\4∀∪¬≥∀∪≥)'%∂≤∩∩m1∪(↓∪A∪Q&A≥∨P~∀∪∪9ε∪'∪≥≤∩∩w∃→'
AM(A'%∂∀A≥=≤[5I≡~∀∪ $@∪∪M'∪∂≤4∀]≥⊃~~∀~(w')βI(A∨E%→Mπ≤D~(~∃%1'π≤t%≠∨,∪H`XZQM R∩wMβ-
AI∂∪'Q%&~(∪≠∨,%$bXZ!' R~(∪≠∨,%$dXZ!' R~(@@@@@∪≠∨X∪$fX4Q' R$~∀@@@@@∪
→$∪$H@∩∩wI'(↓ ∪∂∪PAπ∨+9(~∀∪5∨,∩FDY$f∩$w'(↓ βπ∪5β_A!=∪≥(A→→β∞~(_∩@@↓7π∨≥Q∪≥+βQ∪∨≤A=@E%∃→'π≤ :~∀~(∪≠∨,$FZbYHb∩∩w%≥ ∪π¬)αA≥<A ∪∂%)&A9π∨+≥Q%λ4∀@∪π1%∪β`∩∩w
→β$↓)⊃
A9+≠¬HAβππU~~∀∪
→$∪≠M∪∂≤∩$wβ''U≠
A≠¬≥)∪'MαA!∨M∪)∪-∀~∀~∀m!∪π⊗↓+ Aα↓π⊃β%¬π)$↓β≥λA
⊃π⊗↓
∨$AM∪∂~(~∃!∪
⊗t∪≠=-∧∩QM∞RVYH`∩w!%π⊗A+@AαAπ!β%βπQ$~∀%)'(∪Hb∩∩w
⊃π⊗↓∪A %∂∪(A∃≥π∨+9)%⊂~∀∪¬∃"∪π⊃- ∞∩∩m'↔∪ ↓∪A)I+
~∀%π↔'∪≥≤∪!∪
⊗Yπ⊃- ∞Y≠M∪∂8KZ∞"⊗≤Yα~>⊂↓-α>∩↓5αNL:84(hQn∞",~-α&2α∞"ε∀
J∞R-⊃α&M∧ α∩&<JP4(hR∞".$9h&∩L:&P&≤B.∩@HInN.M↓αRtλ4D\J∧∧L2 iu"∧∀λDL<~APPLZYD0MHYbd6↓⊂K\XYE"∧I_tM"
:Tj∧+∀βQ!∀
≤↓∀3∩e&↓⊂K\ZYE$M K∩∧LhHUB∧+∀β h!_∀$$a_D<E:E¬∪α∃H∀≠↔8∀$"
I∧*∧ejαr¬It∧≤:YPhP_9E∩α∧∧α¬∪∀∧αα⊃↔4LtI_4
$TλDL<~D∧,t9zTu$Z(T h!~5,∩∧∧ααα6EE∪⊂⊃↔4$,:(Tl,jD∧$Ly~B∧≤zYe h!→$m~ ∀≤X⊃↔4<zλxU"∧→iu$DZ$∧≤D~(∀≥$Z!PPh'84D,94∧L2
I∧*∧9λ∃∀:HU∩∧~4∧
∧HX4Ll→D¬∧|→j@hPQ(4D\Jπ L≤X↓∩≠+eJ#H↔84|mλ~$*∧9λ∃∀:HU∩¬It∧$,9→Tb
@hP_)d(M)iu∀h⊃↔5≤\~∧∧L2 iu"∧Ejαph$∧ααα∧↓∃%≥A~#_H↔84D,94∧L2λHT≤LX→B¬∧y→e"∧→J$,K∀¬≤-AQ L∀Z⊃∃∀tz)PHK9_b¬∀Z8U"¬I ∃~∧ZZ5"∧(T∧
¬IλR∧,hD∧|2
I∧*∧X→e"pQ!∀≤E!~#⊂H↔:5$
*D∧≤⎇YjDLttλe∀:I∀|t→D∧$Ly~E_h!_4e⊂~&0HK9→d$L8~D*∧Ejαr¬8Z@hP_9E⊂M&⊃⊂K\→hDL≤~HR∧$_y∃"∧Yh4⎇,jHU∀AQ LTZ↓∃∧L91⊂K\yt∧<-Dλ∀t⎇IλU∩∧9λ∃∀:HU⊂h!Q#\≤z*$,≥D e,l(Z"∧4z$¬∧⎇xZ"∧|d
D,r _b∧$_y∃%~λiu,tAQ hU)iu∀k!~E≥ ~&⊂HK89∧,≤4 ∀2∧I_tM%4λd⎇,hAPPL)hPL≤ 8U@H↔:4\M∧ ∀2∧iyd(h!~E≥ ~&0HK89∧,≤4 ∀2∧HX4Ll→D¬∧|→jB¬≤ZAPPL)hPL≤ 8U@H↔8D|uD d⎇∀X→DMTT ∀2∧it∧"u¬aPRα∧∧LmYH`M$YiE≥"
&"Jd_6K\9z%∀,:D∧$,9→Tb
tLuAQ hS89∧,≤4 ∀2∧T
4L<dλTt≤zYe$-(X@hPQ(4D\[π L≤X↓∩≠εUE∪⊃↔4≤|Zλ∃∀*
Ir∧*λ9∧
∀_:D-⊂Q!∀∀tQ_4D\Ia⊂K]99∃α∧_d∧t⎇DλPhP~J5 M&⊂λ∧∧α".h9⊃0rd 1H∪It⊃∩1i~∀h⊂HXStQ$λ#"B((4"1+λsC"A→⊃⊃B*H3S∀jE⊂0l↓↔tq5∧λ0l∂&∀∩1Hλ[∀∪sHYUλ⊂JZλ∪Sdλ∩1r*Jc"@ [CONTINUATION OF "RELSCN"]
CLR R1 ;INDICATE DIGITS ENCOUNTERED
EXCN: CLR ESIGN ;ASSUME EXPONENT POSITIVE
CLR R3 ;CLEAR EXPONENT ACCUMULATOR
MOVB (SG)+,R0 ;GET NEXT CHARACTER
CKSIGN PIC2,DIG2,ESIGN ;CHECK FOR SIGN CHARACTER
PIC2: MOVB (SG)+,R0 ;SIGN INCOUNTERED, GET NEXT CHAR.
DIG2: DIGIT NORM ;EXTRACT DIGIT
MUL #10.,R3 ;MULT EXPON REG BY 10.
ADD R0,R3 ;ADD DIGIT TO EXPONENT REG
JMP PIC2 ;GO GET ANOTHER CHARACTER
NORM: TST ESIGN ;CHECK SIGN OF EXPONENT
BEQ .+4
NEG R3 ;COMPLEMENT EXPONENT IF - SIGN
ASH #2,R3 ;MULT. INDEX BY 4 FOR F.P. NUMBERS
MULF TENLST(R3),AC0 ;ADJUST EXPONENT OF NUMBER
JMP CDONE ;EXIT ROQTINE
;CHECK IF END OF STRING OR COMMA ENCOUNTERED
CHKDN: TST R0 ;COMPARE CHARACTER T@≡A∧A≥+→0Aπ⊃βIβπ)H~∀∪¬∃"∪π =≥
∩∩m1∪(↓∪A∪PA∪&X↓)⊃∪&↓∪&A)!
A≥⊂A∨AQ⊃
A'Q$~∀∪
≠ ∩FThY$`$∩wπ∨5!β%
↓)≡@D0D~∀∪ "∪π⊃∨≥
∩$w1∪PA∪A%(A∪&4∀∪)'P∪$b∩$w)'PA∪A¬≥2A %∂∪)&↓3(~(∪¬→(%!∪π⊗$∩w∪↓≥∨≥
0A↔@A'πβ9≥∪≥∞4∀~∀w9≡A≠∨I
A ∪≥∪)&@4Aβ!!12Aπ∨I%π(↓'∪∂≤↓)≡A≥U≠¬$4∀~∃π⊃∨≥
t% ε∪M∞∩∩wA∨∪≥(↓)≡A¬Iβ⊗A
⊃β%β
)$~(@@@@%)'(∪5'∪∂≤$∩w)M(A'∪≥≤A∨↓≠β≥)%''α~(∪¬"$\Vh~(∪≥∂_∪βε`$∩wπ∨5!→≠∃≥(A≥U≠¬$↓∪A'%∂≤A≥∃∂β)∪Y
~∀@@@@@∪)'(%$b∩∩m)'(↓∪A≥<A≥+≠ $A9π∨+≥Q%λ4∀∪¬D∩\Vh4∀∪'∩∩∩wM(Aε↓%∂∪M)$A%A≥≡↓≥+≠¬∃$A
∨U≥λ~∀@@@@@∪≠∨X∩Q' $VY$f$w%'Q∨%
AI∂∪'Q%&~(∪≠∨,$Q' R,Y$d~(@@@@∪≠∨,$Q' R,Y$b~(@@@@∪≠∨,$Q' R,Y$`~(∪%)&%!ε∩∩m%)+I≤~∀~(~∀w9λA∨E%→Mπ≤D~(_vE∪9)'π≤λZA')I∪≥∞AQ≡A∪≥Q∂$↓≥+≠¬∃$A%∨U)∪≥
4∀~∀wQ⊃
A∪9)∂HA≥+≠ $A≠U'(A¬∀A∨AQ⊃
A
=%~A'%∪∩A/!%
ALA∪&AQ⊃
A'%∂∀A∨_A)⊃
4∀w≥+5¬$X↓β≥λA%∪∩A∪LA)⊃
↓∪≥)≥$A
%→λ\Aβ→_↓→β %≥∞A'Aβπ&↓β≥λ@↓5%∨L~∀wβI
A∪∂9∨%λ8@A)⊃∀A→>≤
R&>rα>→α$B∃α~M∩NQα∃JR∃α|1αR"*αNRJLr≥α6-~Qα
*4)ndzε∩⊗"α&:RzαJ⊗≡M~R⊗I¬~≥α
,2>J∃∧~ε22Lr≥↓
LrRN∞r⊃9↓α2R⊗I∧*b⊗∞-"&>9`h)nRDJMαJ⎇*R&:*α2⊗ε4*MαRD)α&:$*≡⊗I∧rV6
-⊃α&9¬⊃Aαεt!αN≥¬α>&:%→αR<hQnR"*α
fR*α~>2dz↑&::αR"∃∧bεNQ∧"&≡&"q↓αRD)α
α∀JQα&~αVN⊗"αR=αLr∩&∞
"∃αεr4)n-∩J>I∧~>:∩M"&>9r↓α&→∧r=α:,j
⊗I¬:εMα4zV:⊃∧∩⊗~>∀)α⊗:≤zV:R-∩&:≥∧ α∞>lj∧4)\zIα:,b1α∞D
Jε∞$*I1α$B∃α
∧∩&QαM→αN⊗"q↓αεe~=1αL1αR"*α&:R,:⊗Iαu*6
⊗∩α&L4SZR>=∧bεJ≡*aαR"*α
α
M!α&M¬~⊗QD u$DZ*tM≤T
DD*λ4∧∀MD ∃~∧9HT
∀XD∧|rλ[∧M$→hphS8I∧M~
)u-$→hRrα∧)∀u%89b∩∧~4∧≤IHT"¬Z9∀t:
I∧*¬λ5`hPQ'5∀,y~5$-*4¬-≤XG hS1Q#XM&¬E≤:
λ∃≥~λ~$=,XYe%~λ→d"∧~(R∧JHU∀AQ#XL_6α∧M4λt
∀(_t, Q!PTLjJ4≤s!→%≥⊂~λ2e∀YJ4≤p↔84|uhZ%"¬:J$Ltt e,l(Z"¬$tλdd|~I∀t:
tLuAQ L∀81∩r[AQ M∃J1∃∧_⊃↔4-D~D∧L2 ir∧uYX$-∩λiu,tAQ M≥H8dHL_6αe∪↓⊃∪\,J8R∧≤yjd-∃D e,l(Z"¬$t ∀u$XxU⊂h!_44≤1⊃⊂K]J(∀u≤hZ"∧≤xI∃$Lyh∀b∧9xD-_Q!∃∃%1~∧_H↔:$-%Z)`hPQ!PS\YhB∧|d∧$LuJ84r⊂Q cZ(9E∀≤X∀"j¬)zU$LhT¬$zλ9D,
$λ4|lX∀∧∃∀X→2∧≤λ~$≥HZ"∧5)yR¬≥J)∀t:↓Q hS4(4e∀9X∩∩∧8→b∧∀Tλ4dHXB∧4yID⎇<→hrα∃(YE≤≤d ¬$zλ_DU-:D¬$DT
5%∀→hphS: tLuHZ"∧Ld
4:¬It¬≤\~∧∧⎇4Z$¬$DTλ4|lX∀∧≤D~(∀≥$Z$¬<D_9α∧M4
U≤,AQ#]$t
4-∧~(∃$* jTl∀Z*2∧Ld
DD*
8∀l* →e¬-D
5%∀→hrrα
8r∧mZ:B∧∀T↓PS] y∀u$→hr∧
D
DD* →e¬-D
5%∀→hrrα ir∧⎇IλU∩¬(XtM≥HZ%~∧~(R∧,hhT≥$XE`hPQ(4e∀9X∪PMJ:D⊂J
8rHH↔84D,94∧L2λ~B∧,hD∧|2
:E∀LhqPPL)hPJr6A⊂hP~*E_Mλ1⊂K](ZE-∀d ∀2∧YhB∧|d
5%∀→hphP_9U∧⊂∀6S"b
8rJX↔84|mλ~$*¬It∧≤|YX∩∧≤λ~$≥HZ hP_)d(L9J$≤L⊃⊃∪\∃(→d≤B _b∧MD ∃≤@Iuβ!!4U∀a~⊂b"!QC"C!'q3Q∧ qHλH9∀Ps(∀C"@↓GhQSj)05λDdTTuλitHH¬T∀Su*I3Q4d
⊃h∀hZλ⊂3HD∀Q4jItQ( z5∀∃*D⊃StIX5λβ!!"Nu λ(∃∪jH3λ∪JY0Q4D qH⊂iλ4P0jH4Th
Ih⊂Q$
tR5
H3H
y1∃∩¬∀∀r∪jY⊃λ⊂HQ"Ns x1⊃1∧ 3U∪d
Lλ⊂)hλ∃∩λT∪U3((4H∪hd⊃⊃0i→03λλI1r5
4
⊃∩(y5∀j$
r∪u)Hβ"Nh((∪∪h_⊃1λ →U∪h
&(⊂Q(itQ(λ83∪∩)hh∃∩ ~h∀SjZ∩3Q%dλ∩3Dλ3∪λλ84q4eA"Nui_∃∩λ
9∪u3λD⊂Q(λzQ05λZH∃∩λ→H∪tDλ450)D∃∪hλI1r5¬6KHλ∧(StS(~λH∩*1"Nph→∪⊃1∧λV(∃*93Qh
I⊃(∀λ5C"C!'tQ1i~u⊃4J4∃4q(GC"NaQNb4F¬∀L(
λ4thλ~Qu3(YU∀c!'b3Sd u∩⊃*$∀Q1i~u⊃4J4⊂1QHXu⊃1↓QC"QIzS05π!33uA~r1∃ ¬⊃s⊃
q.tp*h(∃∩λT∪s⊃∧
r1∃ ↓"B3)zB1∩(u∪s⊃λA.hλ∧λ3QλλI1c"A~u0B$6K∀L↓⊃.tu(*∀P0jD∀t⊂(84h⊃IzH∀r(yH⊂3HDH⊃J)s(∃i_∃∩β!!33uA~L∃i_∃∩α':p5Q$
r1∃ ∧∪qH ∃sh∀jJR3Qd¬(C!!33uA~L+⊃ _b".j85Q(
I⊃(∪JY0Q4D qH⊃λXr+HλI1r5
1"B0iZα4L¬JL""'8r⊃0i4∃∪h
81(∃ λ5λ∃i_∃∩Hx+Q∩(y5
lAQB0QhQ3QQ*!".ti94λ∩(d∀t⊂(8(⊂3 Iuq1¬D⊃3∀hT⊂stJ(0uβ!!33uA~qk%
t
"':⊗4⊃$ u5λλZTStD 14th_q#"A→3uB$8Q4S%Jqc"A→TtB*λk∃⊗*
u∀C!!33uA∃∀t
%5∀qc!!33uA~L+∃i_∃∩α':q5λ
y1∃∩πX∩1jf!"SQHZNB4JJb4⊂a⊃.tQ*J4SC!!"QQ*).B+H~pr6D¬c"QIzS05
I3QhλZTStAQKc"A∃Q5Q)a"C"AQNhTJ:⊃StD$(∀Iz5∩3HT∃∪h
(4u∪j((∪⊂*:λ⊃Sj)05β!!"Nu λ(∀∀HZR3u*4⊃StIX5λ⊂HXss1*4∃∩⊃$λu4THYUλ⊃IzS05¬dλ∃∩λT⊂u4J(3Uβ!'qStIX5λ∩*4∪∪tjD⊃StHZQ4KD∧λTTjHStHD 4h⊂h→∪⊃1∧ 3H∃*93Qh
I⊃(∀λ5C"C!'tQ1i~u⊃4J4∃4q(GHλ∪IyQ#"AQTTuλitNB)YuB3iH∃k∃i_∃∩α':Q4u zQ(∃i_∃∩β!!33uA→s⊃⊃¬H∩1b':Q4u zQ(⊃ _c"B**∀b4λ1".tHZ∃4SAQC"C!'q3Q∧ qHλHitS0*DH HJ*u⊃Sj$C"@↓GhPuHdHλλ¬T⊃S∪h~∩3Qd
∪r3JD∪U3((4H∃ tλQHDλStS(~λ∀u
)3Qh
)u5∩)h(β"AQNhPjhHH$
∩⊃(
:∀R3Ht⊃q3HZP5⊃(D⊂V(
I∩4h
)u5∩)h(∩4d
r32)H4H∃ tλQHDλStS(~β"Ni→Hλ⊃IzU∀P)eHλ∩*Dλ∩4dλ4tu)X1λλ
I⊂5λ
I⊃(∪JY0Q4D∧∃∪hλ((⊂sijQ4UλXλλ∩*4∩3C!'tQ1i~u⊃4Dλ0lλ∧λ3Qλ
8hλ⊂iyU⊂2)jh⊂(∧
∪r3JH4H∃ tλ∃∩λT⊃R4J:λλ⊂K~⊃(∪hdλ∃∩λQ"NsjZ∀∃5∧
u∀R)hkHλ
I⊃(∪JY0Q4D qHλλ9⊂4P(:⊃4Td
tR5
H3H∀i u3⊃∧λR4TjD⊂Q(
85β"G93Hλλ∀⊂p3 Dλ∃∪d∧QStIX5λK∧λ3∀q$∧∃∩⊃$λ⊃1P*Y∃λ∃H→∃14d∧⊂4Q$
4q1¬dλλ∩(d∃∩⊃!QNr3JH1q4D
⊂4U∧∧∪qH∧
∩⊃(∧ U30HZH⊃6λ811∀d∧∃∩⊃$∧⊃StIX5λ∪ →25∀d∧∃∩⊃$∧⊃R4J:β"Nh9⊂4P(:⊃4H
zR5∃λYHλ∩*4⊂(λGdKHλ∧λ1U⊃*$⊂ss* ⊃5∩)yKλλH:QHH∧ ⊃05HZh⊂( j3∪β!'pr⊂*(0u⊃*$⊃Ss Iur3Ht∃∩⊃$ U30HZH∀u
)3QkD∧∀Q1i~u⊃4D
qh∩*4∪⊃1JDλ∀∪i→U∩3Hq"Np*D∃∩⊃$ U3∪∧λr⊂4H_u⊃4Ea"C"G:Q1r*:⊃4Td
4q1π!"Nc!'b4qeH0lλ
λ4thλ~Qu3(YU∀hλ→Qλ⊂*((⊂3
H4Q1↓QNb0(6(∩4dλp4PH_q1β!!"PuHgB33ja4L+¬U∀t
!↔tp5HT∀Q1i~u⊃4AQHλλ∧↓33uA~r1∃ ¬∀L"'8q5λ
I⊃(∃ z⊂3λ j30Q*$∪qHλ9⊂4@
Ih⊂Q$
tR5
H3C"A~u0B(I1k∀F⊃".qλZ⊃4S)→Q(∃ λ(∪0(uH∪qD
∩⊃( UTkHλI1r5↓QB33ja4L+
α".iiuh∩λ~Q(λd qH⊃ _r5∀dλQ1Sj((⊃⊃(9303∧
∪r3JA"B0*9α(lEJL""';λ
∧
4q(λ~h∩3HH6λ∩)j∪h⊃EjH∃λ_S⊃#!!1∩5Ha5⊃3IJu
∀F∃+⊂0f↓.sSj)03∩+((∪U)XQ4H
Ih⊂Q*Jq13Dελ⊂3HDN.'↔...'⊃"B3)zB5r(J∩∀F⊃.u∪jH3λλd qH⊃ _r5∀d
∪h∀F⊃"B3)zB4LEE) ;SAVE THE REGISTERS
MOV R3,-(SP)
JSR PC,PRTF ;TYPE OUT THE DIGITS
MOVB #0,(SG) ;PUT A NULL CHARACTER AFTER THE STRING
MOV (SP)+,R3 ;RESTORE THE REGISTERS
MOV (SP)+,R2
MOV (SP)+,R1
RTS PC ;RETURN
;END OF "CVF"
;"CVE" - FLOATING POINT NUMBER TO "E" FORMAT STRING ROUTINE
;"CVE" - SAME OPERATAON AS "CVF" EXCEPT THAT OUTPUT IN FORTRAN "E" FORMAT
CVE: MOV R1,-(SP)
MOV R2,-(SP) ;SAVE THE REGISTERS
MOV R3,-(SP)
CLR EXPON ;@%∃'(A∃1!∨≥∃≥(Aπ=+≥(~(∪≠∨,$FbY!P∩∩w'∃(Aπ∨U≥(A)<A!%∪9(@bA9+≠¬HA¬
=%∃α$*∞&6aαBPhP&6>0J↑&∩$A2IDKZN⊗Q∧~>V:"α~>I¬">Rεbα:V6∀*Iα>2α∩&≡M"MαRzα
¬α≤*:P4PJN@,!∀3"e&⊃⊂K\_I%-≥Dλd⎇∩λ[¬∧|hYe h!~E≥$a_∀≠⊃↔4≤DX92∧Ld e,l(Z"∧M4$-∀qQ L≤h80HH↔:E∀j8d-∩λ9tt∧~I∀|t→D∧≤|HZ2¬$βh⊂j
εE∧P"hDbT)*∧DNij i∃⊂()$S*$g#H$c⊂'∃fa"iλ$iP__εE⊂λ⊂⊂⊂∧Tj#∧`PX⊗'*SDD]cQj⊂"$⊃P'*fP"i⊂*∪P!"P⊂gg+"T*"bεB∧b"aBbl('S∧D]`Q%*ijλ"l('S"g*⊂⊃'i⊂(∀$g*$S#P_P∩g*↔⊂⊃$cdjβE∧fgU∧g*fK)→∧DNf'`bλ*$"P⊃l('g⊃g*⊂ S"⊂&iP⊂#c⊂∃$"P'∃da"iβEa$PDQXX___⊗∀→∧]aSg+"i∃⊂*'P⊂a)gf∃j"P+⊂d∧UE
SUB #150,R2 8πβ ∃U'(Aa!∨≥9(A ∨]≤∩∀∪ ∂
∩\,h~∀∪
→$∪$H∩∩w→∃β ~∃∧JQαB⎇~&R&4(4(&m*0%
⊂ε3~@∀LB!↔u4q$λ6∀∪ih3Uλλ→Qλ∪*8H⊂4d 3Q⊃+∧⊂3U T∃⊃3D
⊂0SλQ"B0iZα4DEDmmKA⊃.psiZ⊂4Q$
⊂πP_K_ →\βEa&⊃DW∃[βE∧fgU∧Q[K⊗)→∧B]dc⊂∪ i#bT⊗⊂!"T& abH!(P_K_ →\βE⊂⊂⊂λ⊂⊂∧iUa∧QYN↔⊗)2 ;@'!∪
(A%≥ 0↓∪≥)≡↓%β≥∂∀A∨@4fpA)<@Vfp4∀∪β ⊂∪$dY∃1!∨≤$wβ ∃U'(Aa!∨≥9(Aπ∨U≥(~∀%β'∩dY$d$∩w≠+1(A∪≥⊃0A¬d@hA
=$A
→=β)β≥≤A!∨∪9(A≥+5¬%&4∀∪ ∪Y∪)9→'(QHdRYβ`∩w≥=%≠β→%5∃αu*6
⊗⊂α&:RzαJε:<)↓A9ααR=↓αqeeeHh(&N$0&ε
αbε
DHIn≡⊗"αε
N|bVR∃¬2ε"V*α>→αu*6
⊗⊂h(&ε∃~_&ε≠λ4(&≤jB_&$*:2N bε
DKZ∞"⊗≤Yα&→∧rV6
-⊃α2⊗≥→αR"q↓E9h(&∞4~$$KZRJεu~~⊗I∧~>:∩M"&>:aα∞>$*MαRzα∞BThP&
≡ J⊗BJ H%n&2α&RM∧∩⊗R↑,*9↓As↓αε:"↓9eeKIe1α<yαR≥¬α:R_hP&∩&40&R⊗rbε
@HIn⊗2≤)α6Ve!9α
J↓A9E∧
:⊃α"*VN"α⊗bB|r⊗:PhQ↓↓↓α↓↓↓αLr&⊗Eα>84P1%α↓αn∞|rR&:,
R&>rα>→↓∀~Z∃
hh(4*-αJQhLRNH&∧→2BJ$0$%n<yαBJLrQα6rR&N≤λ4(&lzZλ%≠ AU1E~≥%,KZBVQ∧ ↓
∃∩α∞"ε∩α&:RzαR"∃¬~RJ&t84(&lzZλ%≠)M1"≤9%,%\
NNVl)α⊗b∧z:⊗:"αB>NM"&Z∃∧ α>V%αVQα
↓ -λhP&6>0J⊗bB|q2ILKZR⊗N"αN&≡rα>→α-BB>:,rP4(L∩≡∀&EαJP$KZN.&αα&→α∧zN&RM2∀4(Lj>ZλJ→UU1k "N≥HInJ⊗∧bε∞∃α⊃- α<JR!↓∩iλ4(Lr⊗≤&∪→↓↓↓H%n6Z∃α⊗Eα>:⊗u!αB>≤JR&Z(h*bB∃!h&∞e⊂&IHHIn∞2,
Iα~⎇⊃α∩&4JN&>ph)↓↓α↓&∩M0%
Eαq2IHHInN⊗∧
JεR-→αR⊗u→αε:"αV:&%→α∩&<JP4(L∩&L%≠1A2I⊂H%n∞|rZ⊗J"αR=α
~
αεt!αBV"α&9αJz=α
,2~⊗HhP&6>4⊂&IIbBN≥%Xh(&
M_%
YαbIL4PJ6>Z⊂JIM1E~≥%,hP&6>4⊂%
AbBN≥$HInBV"α&9α
α:V2bα∞"ε∀
∞R⊗⊂h(&6⎇0%"NαI-2I_InJ⊗≥">J∃¬""∃α∀*≡&N$*JL4PJ6>XJBNA%ZbIH4PJ6>XJBNA%ZbID4PJJRLMα$%]∩⊗RV∀p4(4Ph(4)\*:⊃α|1↓
∞4)λ4(1m
≥2≥ ↓α↓5α~dzεR&t9αB>LrQα:,j
⊗I¬"=↓
*⊃α>Iα∩→ α4zJ6ε"αNRJLr≥↓hP4)m∀~Z≥ αiα∩⊗$*J6&t*Mα&2αR"∃∧rV6
-⊃α&9∧
Aα≤
9α
*α↑J&%"⊗9α∃I↓
∞41 1αL04)nM!α∞εraαR",qα∞Z2α&Mα≤
22⊗"aα⊗2≤)αR"*α:V6∀*Iα&~αBJ&u"⊗⊃α-~&:≥α∩∞Z∃∩p4(4T~Z≥hLj>X&∪ 15"≥↓$4)α↓↓&d"_&ε≠↓2ε
λH%n∞⎇αeαRD)↓α:,j
⊗HhP&∞~≤_$$%]"Jε:≤2⊗Iα$B∃α∞|r∩&RLz:ε1∧~>∩⊗~αR=α≥αT4(L
N_L
D$KZ∞>:4*JQαu*6
⊗∩αR=α∩N>2-"∃αZbV⊗LhP&
⊗λJJV:0H%n&2α:V6∀*I↓uβ↓9A1∧*b⊗∞-"∃α∞404(&lzX&∩L92IDHIn≡⊗"αR"∃∧rV6
-⊃α>→∧"⊗∞&l
1α∩L:&RM¬"=α
*αRfB, 4(&
~ %
∩bID$KZ6V2"α
e↓"αR=α-~∃α¬∧22>ε$J:≥α∧z&:Q∧J:∩⊗@h(&6,b_&R,r2NQE⊃E%2→D%n≤B⊗∞-∧J→α:,j
⊗I¬~6ε2d*IαRD
9↓Esα↓6∩L84(&≤jB_&$*:2N"bε
DKZ∞>6∧
J∃α$y↓E9h(&∞4~$$KZRJεu~~⊗I∧~>:∩M"&>:aα∞>$*MαRzα∞BThP&
≡ JJV:(H%n&2α2⊗N~αR"εr↓E9Bαj∩&≥bαBJ&u!αVNLr≥α∞4(4(&lzX&↑L"R!2∪λ%n≡-!αR"*αR>Raα:Vl∩⊗Iα|1α∩&<JRMα$yα
∃¬αJ&:$*⊂4(L
N %≠⊃2IDHInVN*αR"&~αεMα
α→:Arα&:∩-@4(&t*≤&Iλh(&6,b_&R,r2NQE⊃E%2→D%n≤B⊗∞-∧J→α≡∀*εR⊗∩αR"εrα↑&∩$A6∩&:α2>:8h(&∞mα_&R,r2NQd
D%\~>6B
∩∃αRz↓E9@hP&∞~≤_$$%]"Jε:≤2⊗Iα≤z:∩&$J>:εbα∞>∩-_4(&∀:∀&J,r_$%\J→αR|yα2ε∀:∃1α-~∃α∞4(4*J,r∃h&U~H&B~b∞Z∀hP&6>0I"NAJY2IDhP&JR_JB4U∩V:→PJ*NHMα
2∞404(&lzX%"≥↓%-2∪λ4(&∃"L&B_h(4(hQn⊗:"α>→↓∀~Z≥λhP1m
¬∩R→ α↓5αB∀J:R&t9αJ>-"&:∃¬*N⊗⊃∧∩e↓
≥2→ 1α∩∞Z∃∩a↓→↓∀~Z≥λhP4*B∃"→h&%~R_&→@$%]"⊗NQ¬""∃α≤J≡9α|1αR"*α:V6∀*H4(Lj>ZλJ→QA2m~&≡8KZεNN,j∃αNL:9αB⎇~&R&4(4(&≤2∞$HInRJrN~⊗∩αR"∃∧~>:∩M"&>:aα∞>$*MαRzα∞BThP&ε
≤0&ε
H%n∞d*εIα$B∃αNL:9α>2αR"∃∧rV6
-⊂4(&∀:∀%9[ @$$hQ↓&lzZλ%≠)U26≤J≡8%\J→α:,:εR&4)αBV"α&9↓∩i αNL:84(Lj>∩_M"⊗92→@$%\~>6B-"∃α5u→9α&u"⊗≡⊗∩α∩&≡M 4(&≤bH&I_H%n&t"&∞ε$)αN&<qα:>"αf⊗Q¬:J&R$*84*$J≡2APJRNPMαP$%\~"⊗∞Zα&→α$J6∃α$yαBJLrQα∩,~&6εbαB>&u 4(&∀r∀&≡-"∩≤$KZN.&αα&→αtzP4(M"NP&∪_$%nD
Z∃α<)αBJLrR⊗⊃¬~&≡9¬J⊗Q|hP&
:(J↑R∩H%nN\JAα&2α↑∃αD
Z∀4PJ6>Z⊂J6N&<q1"N:I,%n,bN∃α¬∩&:Q¬~&≡9∧∩⊗~>∀)α∩⊗≤J6ε1¬α>&: h(&&t_&ILHIn&:$J∞εR*αN&≡rαBJ&u"⊗⊂4U:R∩APJ6>Z⊂I
UYbBN≥%XInBJLrQα∩,~&6εbαB>&u 4*≡-"∩≥hM~R∞~HJε
Ee⊃I$KZNεZ*α5:Mrα&:R,:⊗Iα$J≡&PhP&∞~≤_$$%\~"⊗∞Zα~>I∧rV6
-⊃αR>zα2εJ<)αR=∧J:R⊗<*J&j(h(&
≤_&∞"]~h4*$z2≡∃PJε∩∩0Jε
Ed
@$KZ&→α%:=α2
∩≡∃1¬αVQαM!α
ε≤YαR><*R"⊗⊂h(&6|"_&R,rR!2→@%n≤~ε2∃∧">↑9∧
:⊃α%∩eα&u"⊗≡⊗∀Jj&::αε≡εLp4(&Lr&IλH%nB∀J:Qα⎇*Qα>t)α6>∀)α∩&<JP4(LJ:&¬ $%n≤B&~Q∧"⊗∞&l
1αB|J:Qα$yαBV"α&9α-BRJ¬∧"&≡& h(&R≥ &ILHIn∞",~-α&2αN&≡rαε:⊃∧!:A9∧
2J⊗"eα↑∀JRR⊗ph(&
-λ&≡⊗$"≤$%\:=α∞D*∞-αL1α&9¬∩ε:≡*α&→αtzQα↑∀JRR⊗ph(&∞e⊂&ILHIn∞2,
IαNL:9αεt!α⊃:SG ;ADJUST BYTE POINTER
JMP GETDG ;GO CHECK IF IN RANGE AGAIN
CHKSZ: TST R2 ;TEST INTEGER
BLT TOLGE ;IF TOO LARGE, GO SCALE AGAIN
CMP R2,#9. ;CHECK IF LESS THAN 9
BGT TOLGE ;SCALE IF GREATER THAN 9
MODF TEN,AC0 ;START COMPUTING NEXT INTEGER DIGIT
TST R3 ;HAVE WE PRINTED SIGN YET?
BNE SETBS ;SKIP IF WE HAVE
TST R2 ;CHECK IF LEADING ZERO
BEQ WTSP ;IF IT IS GO WRITE A SPACE CHARACTER
MOVB MSIGN,(SG)+ ;FIRST CHARACTER, NOW PRINT SIGN
INC R3 ;INDICATE SIGN PRINTED
SETBS: BIS #60,R2 ;SET ASC ZERO BASE
JMP WTCH
WTSP: MOVB #40,R2 ;WRITE A SPACE CHARACTER
WTCH: MOVB R2,(SG)+ ;PUT CHARACTER IN I/O BUFFER
DEC PT ;DECREMENT DECIMAL POINT COUNT
SOB R1,DIGLP ;DONE WITH CHARACTERS?
RTS PC ;RETURN
;END OF "PRTF"
;"CVI"&"CVO" - INTEGER NUMBER TO ASC STRING
;"CVI"&"CVO" CONVERT THE INTEGER LOADED INTO R0 INTO A ASCII STRING
;AND APPEND THE NUMBER STRING TO THE STRING POINTED TO BY SG. SG IS
;LEFT POINTING AT A NULL CHARACTER. A SAMPLE CALLING SEQUENCE
;FOLLOWS:
;
; MOV #NUM,R0 ;LOAD NUMBER TO BE CONVERTED
; MOV #STRG,SG ;POINT TO OUTPUT STRING
; JSR PC,CVI
;
;"CVI" DOES A DECIMAL CONVERSION, WHILE "CVO" WORKS IN BASE 8.
;REGISTERS USED:
;
; R0, SG PASS ARGUMENTS AND ARE ALTERED
CVI: MOV R2,-(SP) ;SAVE REGISTER
MOV #10.,R2 ;DO A DECIMAL CONVERSION
BR CVV
CVO: MOV R2,-(SP) ;SAVE REGISTER
MOV #8.,R2 ;DO A OCTAL CONVERSION
CVV: MOV R1,-(SP) ;SAVE REGISTER
TST R0 ;CHECK SIGN OF NUMBER
BGE ITISPL ;BRANCH IF POSITIVE
NEG R0 ;ELSE COMPLEMENT
MOVB #55,(SG)+ ;PUSH A "-" INTO STRING
ITISPL: JSR PC,DIVLP ;GO FORM STRING RECURSIVELY
CLRB (SG) ;POINT TO A NULL CHARACTER AT END OF STG
MOV (SP)+,R1 ;RESTORE REGISTERS
MOV (SP)+,R2
RTS PC ;ALL DONE
DIVLP: MOV R0,R1 ;POSITION NUMBER FOR DIVISIOF
CLR R0 ;CLEAR FOR DIVISION
DIV R2,R0 ;GET LSD
ADD #60,R1 ;OR ASC BASE
MOVB R1-(SP) ;SAVE DIGIT
TST R0
BEQ .+6 ;SKIP IF ALL DONE
JSR PC,DIVLP ;REPEAT RECURSIVELY
MOVB (SP)+,(SG)+ ;PUT DIGITS IN STRING
RTS PC
;END OF "CVI"
;LOCAL STORAGE AREA
MSIGN: 0 ;SIGN OF CURRENT NUMBER
ESIGN: 0 ;SIGN OF EXPONENT
EXPON: 0
NUM: .WORD 0,0
WIDTH: 8. ;DEFAULT NUMBER OF CHARACTERS IN OUTPUT STRING
DIG: 3 ;DEFAULT NUMBER OF DECIMAL DIGITS
OLDW: 8. ;OLD VALUES OF WIDTH AND DIG
OLDD: 3
PT: 0 ;NUMBER OF DIGITS BEFORE DECIMAL POINT
;SYSTEM LIJE BUFFERS
INBUF: .BLKW 42.
OUTBUF: .BLKW 42.
;TABLE OF F.P. DIGITS FROM 0.0 TO 9.0
DGLST: .WORD 0, 0, 40200, 0, 40400, 0, 40500, 0
.WORD 40600, 0, 40640, 0, 40700, 0, 40740, 0
.WORD 41000, 0, 41020, 0
;TABLE OF POWERS OF TEN
.WORD 531,143735, 1410, 16352, 2252, 22045, 3124,126456
.WORD 4004,166075, 4646, 23514, 5517,130437, 6401,147263
.WORD 7242, 41140, 10112,151370, 10775,103666, 11636, 72322
.WORD 12506, 11006, 13367,113210, 14232,137025, 15101, 66632
.WORD 15761,144400, 16627, 16640, 17474,162410, 20354, 17113
.WORD 21223,111357, 22070, 73652, 22746,112625, 23620, 16575
.WORD 24464, 22334, 25341, 27023, 26214,136314, 27057,165777
.WORD 27733,163377, 30611, 70137, 31453,146167, 32326,137625
.WORD 33206, 33675, 34047,142654, 34721,133427, 35603, 11157
.WORD 364∀3(153412
TENTH: .WORD 37314,146315
TENLST: .WORD 40200, 0
TEN: .WORD 41040, 0
.WORD 41710, 0, 42572, 0, 43434, 40000, 44303, 50000
.WORD 45164, 22000, 46030,113200, 46676,136040, 47556, 65450
.WORD 50425, 1371, 5127∩, 41667, 52150,152245, 53021,102347
.WORD 53665,163041, 54543, 57651, 55416, 1571∩, 56261,121274
.WORD 57136, 5553, 60012,143443, 60655, 74354 61530,153447
.WORD 62407,103170, 63251, 64026, 64123,141034, 65004, 54521
.WORD 65645, 67646, 66516,145617, 67401, 37∀72, 702411074⊃0
.WORD 71111,171312, 7177PX@lnTnhX@\dlfj0bhdlTlX@nLj`jXffhfD~∀∩]]∨%λ∩n`flXXb`dLfnX@\jdfd0@bbhβ Q1↓;1EAAc EM]λεrbβvfs3αF⊗33;ε!PPJhyu∀ ∀εs;∪&eBβ;6&3λh!Q hS8Yd"∧xdα∀Lt$¬¬∀xz$hQ d≤yYT,uDαbαα
h∀dLDεβββπ¬∧xZ2αα∧∧αα∧→jD45j∧`Q(2¬∀X4α¬∧_xRααλHU≤≥)~¬$LyaPT≠εεββ
εεβββ⊃Q$≠βεεβ∩βεεββ⊂∃jDM$HT∧LuHh∀_h(6βββε@λεεa_⊂0h
H4uλ
80u∩)yC"Pfε
dεεA01⊂d
⊃4u∧
q0u →pπεE⊂X___∞P___~@agS*↔⊂'Q⊂ b!H)'jj∩g"FE⊂X___L⊂___≠∧ijP))P S"⊂!f∪aeP$S*"i)∃h*⊂)∪jj$g⊃FA!X__YP___≠Bibaj∩gg⊂*∪P)"`Q⊂#'i⊂bP+i∩ij⊂ S"⊂)"U*i'⊂∩g#'i∪`j$gS⊂*'P∀"(_XβE!X__ZP___≤∧S'a`fλ)j'i⊂cbFE⊂X___MP"g"∪eFE!E≥FEβ↔*$j∪"P$g∃# aFB↔$g)T*⊂$ S$"b↔∀ f-d⊂f⊗$"WFEεE≡XX_⊂⊂εEβE↔$g∀i*⊂$SW( f⊗YV!"TnFEεB") j∀(∧↑↑MYX⊂⊂αD]b)XP P∃"aj'T⊂∧FE⊃)!*)∀∧↑↑ZLZ⊂⊂∧B]b)_LP!⊂+⊃aj'iαDFE"∀_XiDOX[≠[MX⊂∧]Q)_XP∀j j*TP+gi⊃⊂εE"∀_XgDOX[≠[MY∧D]Q)_XP∪jj(*U⊂)"cRij"iλεE")XdD↑L[≠[[M⊂∧]b∀_XP$S(*j⊂∀"cdiU"i⊂⊂λεE( S$aa∧OY__εB2g a∪"D↑Z_∧D]Rg*"i⊃ abP⊃g a&⊃FEεE∞agffUg$a`U$gg)H&$g%H* ∂ PDP10
MASTER==10567
MASLOC=100000
αFDATA=100002
; program initialization
.EVEN
START: RESET
MOV #1000,SP ;initialtack
CLR PS ;initialize processor status
CLR CLKCNT ;clear clock registers- trap restart
CLR CLKSET
CLR CLKS
LDFPS #0
MOV #9,R0 ;SET TTY OUTPUT FORMAT
MOV #2,R1
JSR PC,FORMAT
MOV #CLKSER,CLKTRP ;SET CLOCK INTERRUPT ROUTINE
MOV #340,CLKTRP+2
;ASK IF DAC OR ADC CHECK
MOV #COM1,SG ;ASK IF ADC OR DAC
JSR PC,GETNUM
TST R0
BNE ISADC
;DAC TEST SECTION
DACSEC: CLR DR11S ;SET DR11 DAC MODE
MOV #COM2,SG ;GET DAC CHANNEL
JSR PC,GETNUM
MOVB BRK(R0),R1 ;GET BRAKE MASK BIT
BIS #ENABLE,R1 ;ADD ON INTERFACE ENABLE BIT
MOV R1,BRKMSK
MOVB DNE(R0),R1 ;GET DONE BIT MASK
SWAB R1
MOV R1,DNEMSK
ASH #13.,R0
MOV R0,R3
MOV #COM3,SG ;CHECK IF POSITION OR TORQUE MODE
JSR PC,GETNUM
TST R0
BEQ ISCUR ;BRANCH IF CURRENT MODE
MOV #1,STPDNE ;ASSUME DONE MASK TO BE CHECKED
MOV #COM11,SG ;ASK IF DONE BIT TO BE CHECKED
JSR PC,GETNUM
TST R0
BNE WILCHK ;SKIP IF DONE BIT TEST REQUESTED
BR .+6
ISCUR: BIS #10000,R3 ;SET CURRENT MODE BIT
CLR STPDNE ;DON'T EVER STOP ON DONE CONDITION
WILCHK: MOV R3,DACCHN ;SAVE DAC CHANNEL
MOV #COM4,SG ;GET DC DAC VALUE
JSR PC,GETNUM
MOV R0,DACDC
MOV #COM5,SG
JSR PC,GETNUM ;GET DAC RAMP VALUE
MOV R0,DACCHG
CLR COUNT
CLR DR11S ;RESET DR11
CLR PDAC ;START AT BOTTOM OF RAMP
CLR PTIME ;INDICATE FIRST PASS THROUGH
MOV #10.,CLKSET ;SET CLOCK TO INTERRUPT EVERY 100USEC
MOV #111,CLKS
CLKWT: TST DNEMSK ;CHECK IF DONE BIT ON
BNE .+6
JMP RUG ;EXIT IF ALL DONE
TSTB KBIS ;ELSE CHECK IF SOMEONE HIT THE TTY
BEQ CLKWT ;LOOP TILL SOMETHING HAPPENS
CLR CLKS ;STOP THE DAC ROUTINE
JMP RUG
;ADC TEST SECTION
ISADC: MOV #2,DR11S ;SET DR11 ADC MODE
MOV #COM6,SG ;ASK IF TYPE OUT REQUESTED
JSR PC,GETNUM
MOV R0,TYPADC
MOV #COM7,SG ;SINGLE CHANNEL OR INDEX?
JSR PC,GETNUM
BIC #177776,R0
MOV R0,IJDX
BEQ SNGCHN
MOV #TOPCLR,SG
JSR PC,TYPSTR
CLR ODDEVN
BR ADCSTR
SNGCHN: MOV #COM8,SG ;GET STARTING CHANNEL
JSR PC,GETFUM
BIA #1↔7340,R0
MOV R0,ADCCHF ;SAVE START CHANNEL
;ADC LOOP
ADCSP $t%≠∨,∩dY $Dc&∩wI#+M(Aβ Aπ∨≥Y%'∪=≤~∃β⊃π→ t%≠∨,∪¬ ππ⊃8Y↓$bE~∩w%∃#+'PAβ ε↓π∨≥-∃%'∪∨8~∀β≠=,∩Fb@`\Y$D∩w/β%(A ∨= Aπ∨U≥(~∃]β∪)→@t∪¬∪P∩Fd`@Y↓$bE&~∀∪ ≥
∪β⊃π ≥
$∩w¬%¬≥π⊂A%A ∨9
~∀∪⊃ε∪$D~∀∪¬≥
∪/β%)→ ∩$w%!∃β(A∪_A')∪1_A≠∨I
A)∪5
A→→(~∀∪5∨,∩G
∨~rYM∞~∀∪)'$∪!Y)3!M)$~∀%∃≠ ∪I+∞~∃¬ π ≥∀t∪≠∨X∪ $bE∩Y$`$w∂(↓β εAIβ ∪9∞~∀∪Q'(∪)e!β ε$∩wπ⊃∃π⊗A∪_A)3!∀A∨+(↓%#+%%λ~(∪¬"%∂)≥a(∩∩wM↔∪ A%A≥≡4∀∪≠∨X∩G∪∨ +Y'≤~∀f∪¬ λ∩FH`hp\1$`~∀%∃'$∪AεYπ-$∩∩wπ=≥-%PA)=∧
N∞&Hh(&6⎇2λ%
#↓1"N:I,4(Lj>ZλJ→QA1E~≥%,hP&6>4⊂%
Qαa"N≥JX4(&lzZλ%≠!A1"≤9%,4PJ∞2J⊂I"N≥Hh(&6⎇0%∞&|∩V→2≤8%nRMα∃α>-!αJ⊗"&:≤hP&*N⊂JB
2%JBNR⊂h(&*≥⊂&B
d~J2_hP1n∞|rQ9α|1αε∩~αJ>V$J:∀4Ph*≡⊗$rbQhM"NP&Lr∩`$KZ∞"⊗≤Yα&→∧J:∩⊗DJ:≥α⎇⊃αN&t:2¬α≤Bε::,`4(&∀*D&R≥"∩:∀hP&∞>hJ>∩∩-28$%\~"⊗∞Zα&→α$JNB2
Iα&9¬∩&≡""α>Iαd*~Qα∧
JQα|1αN∞∀*⊗84PJ
⊗DL
∩∩ε%@$%n≤Z&AαL1α6>4J:≥α$yα2⊗5 4(&lzX%∞∀J≡"Qe~≤4(LRNH&∧→2Rf¬~RH4T
∩∩ε%Ah&ε$ &&:%A2ε∩≤~"8%]α>&:"αR=αt*bQα≤Bε::,`4(&≤j@&6
B∞"9d
∩∞∞Dp%n∞D*∞-αL1α↑J
↓αεJ⎇*:⊃α$J6∀∀PJ
≡∀M"NR∩t($%nα94Mα _b¬≥I→Db∧y1PPL9J LH84Dp⊃↔4,E8T¬≥$~*B¬<~Iα∧≤λ→dt,Dεα∧x→∀ph!_4e⊂→xD$-iaPPMJ:@M%~λ∀$_⊃↔4≤DX92∧Ld
EM∧T u-"
(U
,~(T h!_$-λ~J5$$hQPPLYz`J≥Izαe≤qQ LU:!∃∧~JK∃¬≥J!PU%:HDt+!~E≥$!→4∀M1⊃∪\≤λX4Z∧_d¬5#εT∧DMAQ L∀Z⊃∀$9JhP→)UM*XphPc]:X%∃~λ→d"∧9It≤Z →e$-**U¬"
)u-$→hPhR↓Q$<-IjTkP→*5⊂Mλ5E%M
:E⊂h!→T⎇0∀9∀|∃XeE≤8Q!∀U≥!~∧~d→j5%⊂Q!∀l⎇a∀4L|*Xbe≤qQ LU:!∃∧~I→e%≤9aPPM*J0M∧1Q"h!Q$≤D:8U∪P→Yu0LH_4$~J&K\xZB∧$_4∧⎇-J
U"¬h→E,(β"B(_⊃α4λH0k∀F↓"B3)zB4L¬JL#"A_Qq"%emα"'8r⊃0i4∩1H →H∀P)hq#"A→Q1b*"B(94α(fF
"B((q"5H→∪rb!↔pTP)hrλ∩(d∪rc!!33uA_⊂0qλ5∀Lα'83∀q$
u⊂4JD∪uQ*$⊂5λλHh∃P)J1#"A→3uB(H0prλuα(" PFE∧g⊃cDh"⊂aFE≥CE≥DfSk∧QXK")_XTD]jiQP*$$TP*'P∀lg!P∪g⊂+d⊃g⊂*"Tj$g#CE≥DfSk∧a)∩fieV⊃)_XgBFE≥FB+ f'R]∧a$PDQX[L___⊗∀_εE∧P$iDb⊂aad')_∧]Pb"⊂"⊂aP!d⊂g'"fβE∧af∀∧b)_LiFE∧Sgk∧i⊗")_LgFE∧Pb"∧b⊂aad#K(" aCE∧j)U∧h*$SbDD]Pd"aeH$c⊂'∪j⊂#$T)j⊂(⊂iiP*∩)'jcRεA∧a∪"Dad∩b'"DB]a) S!d⊂$Q⊂''jλ( iiH'g"FB∧fgkαQXV"∀_XiDNbf)bH)bj⊂⊂) ebH&gb"CE∧fgU∧a)%SieV"∀_XgDNh*i'λ'c#⊂⊂) ebH g"⊂⊃g a&⊃P$g*⊃i# aQFE∧fSk∧QXK(*$fQD]dg⊃$a`j⊃P"g"λ'c⊂#∩i)j⊂∀ iiFB∧i*$CE!d%Q'"]∧Sgk∧QLV")_LiD]cQj⊂ i∪P)j U*iP!∩j)P⊂λ⊂⊂εEαfgk∧Q)_XdK)_∧FB⊂∧a$U∧Qh S$aa⊗∀_∧]aR"aeP∩c⊂( S$aP!∃j*'gλ$$jεB⊂∧a"TDij(∩j∧D]Tj'h⊂∀bi+$Pdg#P∩c⊂!*U*'g⊂∩$jεEαj)j∧Th("'⊃DD]aR"aeP∩c⊂$gλ) g#QP!d"Pedg#H*#P!⊃P"'g⊃FE∧a∪"DW∃M∧DFEαi*$DBD]a"U*i'⊂∩c⊂''U⊂!d"Pedg#H)"hjRi"bεB∧a$jαb'"fTeV)_α]ad"PeP$cλ$g⊂)⊂g#bFB∧a'"Bdg!'⊃bFE∧Pd)∧aSjg*⊂αD]af⊃`i⊂$S⊂) g⊃bP!gUg*εEαi*$DBD]bl∩j⊂$cλ)j$f∪⊂''jλ"'g"CE$g)∪#b]∧Rg!DaSjg*⊂αD]dg⊂i"fbS*⊂'*Sa"i⊂∪c⊂)bTjbg!QP*$fQiPεEαaf`∧HYV!gUg*⊂∧Nad"aRP$c⊂⊂j⊂&"Pij⊂→H*$fbTFE∧a∪"DW∃MεE∧i∃$FE)U($j≥λ∧af)αaf%iBD]bf∀bP)j∪h⊂*$⊃P!f'PeFE∧Pd)∧b∪"fieCE∧fgU∧QXV⊃)_XiB]ibjλ*$"P⊂) ebTFE∧aS)∧b)XgFEαi*$FBβ≥ibaU$gg⊂∃'P)"Pb⊂#'T!bP+T$ij⊂⊂g"⊂)⊃j*i'λ$g#'T&`j$Sg⊂*'H("(_LεEεE⊃'i!bNεE#≥αfgk∧Hf`ij⊃i⊗&`Tf'aDNdg"$P`j"P∀"`b,H*'P)⊃`b⊂#∪i!bP∃i$ijβEεE≥U`dj⊂∪'gh⊂∪'gedS#P jλ!gffPg"⊂!∪'aeP⊃)'fP∀"(_XβEεE+U&(≥⊂λ⊂*)jαea$iBD]ad⊃aeP$Q⊂ g,Sg"P$∩j⊂+*~P%bVa'`i⊃εE∧a⊃hDad∩fijεB∧af)⊂∧ea$TεE∧e∪h∧i*QDD]bV$j⊂*∪P""*βE!d%Sij≥∧Pfh∧QS`ij"T⊗&`iS'aD]Pd"aeH$c⊂'∪P'g"H f*"T"b⊂*∩"P&W∪*fa"T⊂,bjβE∧a"TDkj&∀εE∧fSk∧Qc⊃ j V∀_FE∧Sgk∧QLX↔⊗)∧D]i⊃`b⊂_L⊂)bj∀P'c⊂⊃ j FBεE)bU&(≥∧Sgk∧QN↔⊗)→BD]bdQd*⊂)U GAGES IN ALL
CLR R4 ;START WITH CHANNEL 0
REDLP: MOV #2,DR11S ;REQUEST ADC CONVERSION
MOV R4,DR11O
MOV #100.,R0 ;WAIT LOOP COUNT
WLP: BIT #200,DR11S
BNE CNVDNE ;BRANCH IF DONE
DEC R0
BGE WLP ;REPEAT IF STILL MORE TIME LEFT
MOV #COM9,SG
JSR PC,TYPSTR
JMP RUG
CNVDNE: MOV DR11I,R0 ;GET ADC READING
ADD #2048.,R0
MOV R0,(R1)+ ;SAVE READING
INC R4 ;POINT TO NEXT CHANNEL
SOB R3,REDLP ;REPEAT UNTIL DONE
SOB R2,SETLP
BR F ;REPEAT
;LOCAL STORAGE
ODDEVN: 0
DACCHN: 0
DACDC: 0
DACCHG: 0
PDAC: 0
TYPADC: 0
ADCCHN: 0
INDX: 0
MAXCHN: 31.
BRK: .BYTE 1,2,4,10,20,40,100,0
DNE: .BYTE 1,2,4,10,20,40,100,0
BRKMSK: 0
DNEMSK: 0
STPDNE: 0
COUNT: 0
PTIME: 0
;OUTPUT STRINGS
COM1: .ASCIZ /DAC OR ADC(0:1) = /
COM2: .ASCIZ /DAC NUMBER (0:7) = /
COM3: .ASCIZ /CURRENT OR POSITION MODE (0:1) = /
COM11: .ASCIZ /CHECK DONE BIT (0=NO,1=YES) = /
COM4: .ASCIZ /DAC DC VALUE (-2048 : 2047) = /
COM5: .ASCIZ /DAC CHANGE EVERY 100 USEC = /
COM6: .ASCIZ /TYPE ADC READINGS (0:1)? = /
COM7: .ASCIZ /SINGLE CHANNEL OR INDEX (0:1) = /
COM8: .ASCIZ /ADC CHANNEL (0:31) = /
COM9: .ASCIZ /**ERROR** NO ADC DONE SIGNALED
/
TOP: .BYTE 35,10,10,10,0
TOPCLR: .BYTE 35,35,37,37,37,10,10,10,0
RIGHT: .BYTE 32,10,10,10,30,30,30,30,30,30,30
.BYTE 30,30,30,30,0
IOBUF: .BLKW 100.
PBUF: .BLKW 300.
.END START