Intel 8080 CPU をのせた TK-80 シュミレータで 8080 CPU のマシン語のプログラムを楽しんだであろうか? その後, Intel 8080 CPU は上位互換の Zilog Z80 CPU に 市場でとってかわられることになる. ベストセラーとなった, NEC PC8801 シリーズは Zilog Z80 CPU を 搭載し, ROM (Read Only Memory) に書き込まれた N88 Basic が 電源投入と共に起動した. N88 Basic は Mirosoft Basic をもとに NEC が機能拡張した Basic 言語であり, 大人気を博した. PC8801 シリーズでは CP/M80 という Digital Research 社により 開発されたディスクオペレーティングシステムも実行することが 可能であった.
現在, たとえば FreeBSD 上の cpmemu なる CP/M 80 エミュレータ を用いることにより, この CP/M 80 上の Microsoft Basic (MBASIC) を楽しむことが可能である. CP/M 80 の多くの商用ソフトは現在 http://deltasoft.fife.wa.us/cpm に保存されており, 自由に取得することが可能である.
GCD を計算するユークリッドのアルゴリズムを FreeBSD 上の cpmemu 上の MBASIC で実装してみよう.
bash$ ls mbasic.com bash$ cpmemu A0>dir A: MBASIC .COM A0>mbasic BASIC-80 Rev. 5.21 [CP/M Version] Copyright 1977-1981 (C) by Microsoft Created: 28-Jul-81 35896 Bytes free Ok 10 input a,b 20 r=a mod b 30 if r = 0 then goto 50 40 a=b: b=r: goto 20 50 print b 60 end list 10 INPUT A,B 20 R=A MOD B 30 IF R = 0 THEN GOTO 50 40 A=B: B=R: GOTO 20 50 PRINT B 60 END Ok run ? 1234,1200 2 Ok system A0>unix Cp/M BIOS COLDBOOT takes you back to FreeBSD bash$
CP/M 80 では, MBASIC 以外にさまざまなプログラム言語が動作した. そのなかでもっとも人気を博したのが ターボパスカル (turbo Pascal) である. 言語パスカルは 1970 年代前半にチューリッヒ工科大学の Niklaus Wirth により設計された美しい言語である. ターボパスカルでは, エディタとコンパイラが統合されており, さらに 100 行ほどのプログラムは 1 秒程度でコンパイル, 実行可能で あった. 現在の高速なパソコンを利用している人にはこの感動はつたわらないかも しれないが, 当時の Z80 CPU のパソコンでこのスピードは驚異的であった. ちなみに他の会社のコンパイラで同じプログラムをコンパイルしても, 1 分以上かかるのが通例であった.
0 : 1 1 : 1 2 : 2 3 : 3 4 : 5 5 : 8 6 : 13 7 : 21 8 : 34 9 : 55 10 : 89 11 : 144 12 : 233 13 : 377 14 : 610 15 : 987 16 : 1597 17 : 2584 18 : 4181 19 : 6765 20 : 10946 21 : 17711 22 : 28657 23 : 46368 24 : 75025 25 : 121393 26 : 196418 27 : 317811 28 : 514229 29 : 832040 30 : 1346269 31 : 2178309 32 : 3524578 33 : 5702887 34 : 9227465 35 : 14930352 36 : 24157817 37 : 39088169 38 : 63245986 39 : 102334155 40 : 165580141 41 : 267914296 42 : 433494437 43 : 701408733 44 : 1134903170 45 : 1836311903 46 : 2971215073 47 : 4807526976 48 : 7778742049 49 : 12586269025 50 : 20365011074 51 : 32951280099 52 : 53316291173 53 : 86267571272 54 : 139583862445 55 : 225851433717 56 : 365435296162 57 : 591286729879 58 : 956722026041 59 : 1548008755920
|
60 : 2504730781961 61 : 4052739537881 62 : 6557470319842 63 : 10610209857723 64 : 17167680177565 65 : 27777890035288 66 : 44945570212853 67 : 72723460248141 68 : 117669030460994 69 : 190392490709135 70 : 308061521170129 71 : 498454011879264 72 : 806515533049393 73 : 1304969544928657 74 : 2111485077978050 75 : 3416454622906707 76 : 5527939700884757 77 : 8944394323791464 78 : 14472334024676221 79 : 23416728348467685 80 : 37889062373143906 81 : 61305790721611591 82 : 99194853094755497 83 : 160500643816367088 84 : 259695496911122585 85 : 420196140727489673 86 : 679891637638612258 87 : 1100087778366101931 88 : 1779979416004714189 89 : 2880067194370816120 90 : 4660046610375530309 91 : 7540113804746346429 92 : 12200160415121876738 93 : 19740274219868223167 94 : 31940434634990099905 95 : 51680708854858323072 96 : 83621143489848422977 97 : 135301852344706746049 98 : 218922995834555169026 99 : 354224848179261915075 100 : 573147844013817084101 101 : 927372692193078999176 102 : 1500520536206896083277 103 : 2427893228399975082453 104 : 3928413764606871165730 105 : 6356306993006846248183 106 : 10284720757613717413913 107 : 16641027750620563662096 108 : 26925748508234281076009 109 : 43566776258854844738105 110 : 70492524767089125814114 111 : 114059301025943970552219 112 : 184551825793033096366333 113 : 298611126818977066918552 114 : 483162952612010163284885 115 : 781774079430987230203437 116 : 1264937032042997393488322 117 : 2046711111473984623691759 118 : 3311648143516982017180081 119 : 5358359254990966640871840
|
[349] pari(nextprime,10^130); 100000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000001113 [350] pari(nextprime,10^131); 100000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000063 [351] pari(nextprime,10^132); 100000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000169 [352] pari(nextprime,10^133); 100000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000021