FIBn - PS8 Computing

Go to content

FIBn

PDP8 > PAL8 Examples
Produce an arbitary length series of Fibonacci numbers
using three variable length buffers


1        0020  *20
   2        0100  BSIZE=100
   3              /
   4 00020  0525  FBUF,   FBUFF
   5 00021  0514  CLB,    CCLB
   6 00022  0417  PRT,    PRNT
   7 00023  0314  MCPY,   MCOPY
   8 00024  0500  PRP,    RP
   9 00025  0300  PMBP,   MBP
  10                      /
  11 00026  7777  KM1,    0-1  / -1d
  12 00027  7766  KM10,   0-12 / -10d
  13 00030  7700  KMB,    0-BSIZE
  14 00031  0077  KPB,    BSIZE-1
  15                      /
  16 00032  0000  CARRY,  0
  17 00033  7600  ILC,    0-200
  18 00034  0000  LC,     0
  19 00035  0000  CNT1,   0
  20                      /
  21 00036  2000  PT1,    T1
  22 00037  0000  PT1A,   0
  23 00040  2100  PT2,    T2
  24 00041  0000  PT2A,   0
  25 00042  2200  PT3,    T3
  26 00043  0000  PT3A,   0
  27                      /
  28        0200  *200
  29                      /// ENTRY POINT ///
  30 00200  4421  ST,     JMS I CLB       / SET UP PTRS TO BUFFERS
  31 00201  4420          JMS I FBUF      / FILL BUFFERS WITH -1
  32 00202  4425          JMS I PMBP      / RESET POINTERS
  33                      /
  34                      / SET STARTING CONDITIONS       
  35                      /
  36 00203  7300          CLA CLL
  37 00204  3437          DCA I PT1A      / 0 IN LSD OF T1
  38 00205  7001          IAC
  39 00206  3441          DCA I PT2A      / 1 IN LSD OF T2
  40                      /
  41                      / SET LINES COUNT
  42 00207  1033          TAD ILC
  43 00210  3034          DCA LC
  44                      /
  45                      / CLEAR PENDING CARRY
  46 00211  7300          CLA CLL
  47 00212  3032          DCA CARRY
  48                      /
  49                      / ADD THE TWO VALUES POINTED TO IN FIRST TWO BUFFERS
  50 00213  4421  CL2,    JMS I CLB
 51 00214  4424          JMS I PRP
  52 00215  7300          CLA CLL
  53 00216  1030          TAD KMB / -BSIZE
  54 00217  3035          DCA CNT1
  55                      /
  56 00220  7300  CL3,    CLA CLL
  57 00221  1032          TAD CARRY
  58 00222  1437          TAD I PT1A      / EG 8          / 5             / 2
  59 00223  1441          TAD I PT2A      / EG 4          / 5             / 3
  60 00224  1027          TAD KM10        / 8+4-10=2      / 5+5-10=0      / 2+3-10=-5
  61 00225  7500          SMA             / SKIP IF A < 0 - IE NO CARRY OCCURRED
  62 00226  5240          JMP C
  63 00227  5230          JMP NC
  64                      /
  65 00230  7300  NC,     CLA CLL         / 0
  66 00231  1032          TAD CARRY
  67 00232  1437          TAD I PT1A      / 2
  68 00233  1441          TAD I PT2A      / 3
  69 00234  3443          DCA I PT3A      / 5
  70 00235  7300          CLA CLL
  71 00236  3032          DCA CARRY       / CLR CARRY
  72 00237  5250          JMP D
  73                      /
  74 00240  7300  C,      CLA CLL
  75 00241  1032          TAD CARRY
  76 00242  1437          TAD I PT1A      / 8
  77 00243  1441          TAD I PT2A      / 4
  78 00244  1027          TAD KM10        / 10
  79 00245  3443          DCA I PT3A      / 2
  80 00246  7301          CLA CLL IAC
  81 00247  3032          DCA CARRY       / AND SET CARRY
  82                      /
  83 00250  2035  D,      ISZ CNT1        /NXT COL
  84 00251  7410          SKP
  85 00252  5255          JMP P
  86                      /
  87 00253  4425          JMS I PMBP // MOVE BUFFER POINTERS
  88 00254  5220          JMP CL3
  89                      /
  90                      / PRINT T3
  91 00255  4422  P,      JMS I PRT
  92 00256  2200          T3
  93                      /
  94                      / COPY T2 TO T1, AND T3 TO T2
  95 00257  4423          JMS I MCPY
  96 00260  2100          T2
  97 00261  2000          T1
  98 00262  7700          0-BSIZE
  99 00263  4423          JMS I MCPY
 100 00264  2200          T3
101 00265  2100          T2
 102 00266  7700          0-BSIZE
 103                      /
 104                      / CHECK COUNT AND POTENTIALLY ROUND AGAIN
 105 00267  2034          ISZ LC
 106 00270  7410          SKP
 107 00271  5777@         JMP 7600        // ALL DONE
 108                      /
 109 00272  5213          JMP CL2
 110                      /
 111        0300  *300
 112 00300  7000  MBP,    NOP     / MOVE BUFFER PTRS BACK ONE
 113 00301  7300          CLA CLL
 114 00302  1037          TAD PT1A
 115 00303  1026          TAD KM1
 116 00304  3037          DCA PT1A
 117 00305  1041          TAD PT2A
 118 00306  1026          TAD KM1
 119 00307  3041          DCA PT2A
 120 00310  1043          TAD PT3A
 121 00311  1026          TAD KM1
 122 00312  3043          DCA PT3A
 123 00313  5700          JMP I MBP
 124 00314  7000  MCOPY,  NOP     / COPY P3 WORDS FROM P1 TO P2
 125 00315  7300          CLA CLL
 126 00316  1714          TAD I MCOPY
 127 00317  3340          DCA MT1
 128 00320  2314          ISZ MCOPY
 129 00321  1714          TAD I MCOPY
 130 00322  3341          DCA MT2
 131 00323  2314          ISZ MCOPY
 132 00324  1714          TAD I MCOPY
 133 00325  3342          DCA MT3
 134 00326  2314          ISZ MCOPY
 135 00327  1342          TAD MT3
 136 00330  3343          DCA MTCNT
 137 00331  1740  MCPY1,  TAD I MT1
 138 00332  3741          DCA I MT2
 139 00333  2340          ISZ MT1
 140 00334  2341          ISZ MT2
 141 00335  2343          ISZ MTCNT
 142 00336  5331          JMP MCPY1
 143 00337  5714          JMP I MCOPY
 144 00340  7000  MT1,    NOP
 145 00341  7000  MT2,    NOP
 146 00342  7000  MT3,    NOP
 147 00343  7000  MTCNT,  NOP
 148                      /
     00377  7600
 149        0400  *400
150 00400  0000  CRLF,   0       / PRINT NEWLINE
 151 00401  7300          CLA CLL
 152 00402  1207          TAD K215
 153 00403  4211          JMS TYPE
 154 00404  1210          TAD K212
 155 00405  4211          JMS TYPE
 156 00406  5600          JMP I CRLF
 157 00407  0215  K215,   215
 158 00410  0212  K212,   212
 159                      /
 160 00411  0000  TYPE,   0       / PRINT THE ASCII CHARACTER IN ACC
 161 00412  6041          TSF
 162 00413  5212          JMP .-1
 163 00414  6046          TLS
 164 00415  7300          CLA CLL
 165 00416  5611          JMP I TYPE
 166                      /
 167 00417  7000  PRNT,   NOP             / PRINT BUFFER
 168 00420  7300          CLA CLL
 169 00421  1617          TAD I PRNT      / GET ADDR OF START OF BUFFER
 170 00422  3253          DCA PPTR
 171 00423  2217          ISZ PRNT        / FIX RETURN ADDR
 172 00424  1030          TAD KMB         / SETUP COUNT OF CHARS
 173 00425  3252          DCA PCNT
 174 00426  3254          DCA LZ
 175                      /
 176 00427  7300  PRNT1,  CLA CLL
 177 00430  1653          TAD I PPTR      / GET CHAR
 178 00431  7440          SZA             / IS IT ZERO?
 179 00432  5237          JMP NZ          / NO
 180 00433  7300          CLA CLL         / YES
 181 00434  1254          TAD LZ          / IS LZ SET
 182 00435  7450          SNA
 183 00436  5245          JMP NOK
 184 00437  7300  NZ,     CLA CLL
 185 00440  1653          TAD I PPTR
 186 00441  1255          TAD K260        / ASCII'FY
 187 00442  4211          JMS TYPE        / PRINT IT
 188 00443  7201          CLA IAC
 189 00444  3254          DCA LZ
 190                      /
 191 00445  2253  NOK,    ISZ PPTR        / NEXT CHAR
 192 00446  2252          ISZ PCNT        / DONE YET?
 193 00447  5227          JMP PRNT1       / NO, ROUND AGAIN
 194 00450  4200          JMS CRLF        / YES, NEW LINE
 195 00451  5617          JMP I PRNT      / DONE
 196 00452  0000  PCNT,   0
 197 00453  0000  PPTR,   0
 198 00454  0000  LZ,     0
 199 00455  0260  K260,   260
200                      /
 201        0500  *500    / RESET POINTERS
 202 00500  7000  RP,     NOP
 203 00501  7300          CLA CLL
 204 00502  1037          TAD PT1A
 205 00503  1031          TAD KPB
 206 00504  3037          DCA PT1A
 207 00505  1041          TAD PT2A
 208 00506  1031          TAD KPB
 209 00507  3041          DCA PT2A
 210 00510  1043          TAD PT3A
 211 00511  1031          TAD KPB
 212 00512  3043          DCA PT3A
 213 00513  5700          JMP I RP
 214              /
 215 00514  7000  CCLB,   NOP     / SET UP PTRS TO THREE BUFFERS
 216 00515  7300          CLA CLL
 217 00516  1036          TAD PT1
 218 00517  3037          DCA PT1A
 219 00520  1040          TAD PT2
 220 00521  3041          DCA PT2A
 221 00522  1042          TAD PT3
 222 00523  3043          DCA PT3A
 223 00524  5714          JMP I CCLB
 224                      /
 225 00525  7000  FBUFF,  NOP             / FILL ALL BUFFERS WITH 0
 226 00526  7300          CLA CLL
 227 00527  1030          TAD KMB
 228 00530  3342          DCA FCNT
 229 00531  3437  CL1,    DCA I PT1A
 230 00532  2037          ISZ PT1A
 231 00533  3441          DCA I PT2A
 232 00534  2041          ISZ PT2A
 233 00535  3443          DCA I PT3A
 234 00536  2043          ISZ PT3A
 235 00537  2342          ISZ FCNT        // ALL DONE?
 236 00540  5331          JMP CL1         // NO
 237 00541  5725          JMP I FBUFF     // YES, RETURN
 238 00542  7000  FCNT,   NOP
 239              /
 240        2000  *2000
 241 02000  0000  T1,     0
 242        2100  *2100
 243 02100  0000  T2,     0
 244        2200  *2200
 245 02200  0000  T3,     0
 246              $
     No detected errors
     1 link generated


.COMPI FIBN.PA
ERRORS DETECTED: 0
LINKS GENERATED: 1

.R ABSLDR
*FIBN.BN$
.ODT

0200G
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264
806515533049393
1304969544928657
2111485077978050
3416454622906707
5527939700884757
8944394323791464
14472334024676221
23416728348467685
37889062373143906
61305790721611591
99194853094755497
160500643816367088
259695496911122585
420196140727489673
679891637638612258
1100087778366101931
1779979416004714189
2880067194370816120
4660046610375530309
7540113804746346429
12200160415121876738
19740274219868223167
31940434634990099905
51680708854858323072
83621143489848422977
135301852344706746049
218922995834555169026
354224848179261915075
573147844013817084101
927372692193078999176
1500520536206896083277
2427893228399975082453
3928413764606871165730
6356306993006846248183
10284720757613717413913
16641027750620563662096
26925748508234281076009
43566776258854844738105
70492524767089125814114
114059301025943970552219
184551825793033096366333
298611126818977066918552
483162952612010163284885
781774079430987230203437
1264937032042997393488322
2046711111473984623691759
3311648143516982017180081
5358359254990966640871840
8670007398507948658051921
14028366653498915298923761
22698374052006863956975682
36726740705505779255899443
59425114757512643212875125
96151855463018422468774568
155576970220531065681649693
251728825683549488150424261
407305795904080553832073954

.

Back to content