FIBn - PS8 - Computing & Engineering

Go to content

FIBn

DEC > PDP8 > PAL8 Examples
As part of a TNMOC challenge, we have several machines (in fact one from each decade since 1950) running a similar task.  That is generating the Fibonacci sequence.  Below is my PDP8 / PAL8 assembly language version.   This generates 100 lines, and is output to an ASR33 - to keep with the appropriate vintage!

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  7402          HLT     // 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                      /
 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  0015  K215,   15
 158 00410  0012  K212,   12
 159                      /
 160 00411  0000  TYPE,   0       / PRINT THE ASCII CHARACTER IN ACC
 161 00412  6046          TLS
 162 00413  6041          TSF
 163 00414  5213          JMP .-1
 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
     No links generated

Back to content