世界を動かす技術を、日本語で。

Microsoft BASIC for 6502マイクロプロセッサ – バージョン 1.1

概要

  • Microsoft BASIC for 6502 Microprocessor Version 1.1 は、パーソナルコンピュータ黎明期を象徴する重要なソフトウェア
  • 1976〜1978年にMicrosoftが開発・著作権保有 した6502用BASICインタプリタの完全なアセンブリ言語ソースコード
  • 複数プラットフォーム対応 やライセンスモデルが、Microsoft初期の成功と業界標準化に大きく寄与
  • 教育的・文化的インパクト が大きく、後のソフトウェア産業やプログラミング普及の礎
  • 技術的イノベーション やビジネスモデルの革新事例としても歴史的価値を持つ

Microsoft BASIC for 6502 Microprocessor - Version 1.1 歴史的意義

  • 6502マイクロプロセッサ用BASICインタプリタ の完全なアセンブリ言語ソースコード
  • 1976〜1978年にMicrosoftが開発・著作権保有 した初期の代表的ソフトウェア
  • パーソナルコンピュータ革命の基盤 となり、誰でもプログラミングが可能になる環境を提供
  • 非技術者にも分かりやすい英語風構文 によるプログラミング普及
  • このソフトウェアがなければPC革命の進展は大きく異なっていた可能性

Microsoft初期の成功とビジネスモデル

  • Microsoft初期の最も成功した製品群 の一つ
  • 複数メーカーへのライセンス提供 がビジネスモデルの礎
  • MS-DOSやWindows以前における業界支配力の確立

マルチプラットフォーム対応

  • 単一ソースコードで複数ハードウェアに対応 する設計
  • 条件付きコンパイル により異なるシステム向けビルドが可能
  • 現代にも通じるソフトウェア開発手法への多大な影響

対応コンピュータシステム

  • Apple II(REALIO=4) :Steve Jobs & Steve Wozniakによる革命的PC
  • Commodore PET(REALIO=3) :初期の完成度高いパーソナルコンピュータ
  • Ohio Scientific(OSI)(REALIO=2) :教育・ホビーユーザー向け
  • MOS Technology KIM-1(REALIO=1) :影響力大のシングルボードコンピュータ
  • PDP-10 Simulation(REALIO=0) :開発・テスト用エミュレーション

技術仕様

  • 言語 :6502アセンブリ言語
  • 対象プロセッサ :MOS Technology 6502(8ビット)
  • メモリ要件 :8KB ROMバージョン
  • 機能 :浮動小数点演算付き完全BASICインタプリタ
  • 構成 :ROM・RAM両対応設計

主な特徴

  • BASIC言語完全実装、浮動小数点演算対応
  • 文字列操作・配列(整数・文字列)サポート
  • 各種数値演算・入出力処理
  • 8ビット環境向け効率的メモリ管理
  • ガーベジコレクション・動的変数領域管理
  • スタックベースの式評価
  • 各機種向けI/O抽象化・端末幅対応
  • オプションでディスクストレージ対応

開発履歴(抜粋)

  • 1978年7月27日 :FORループ変数処理・文解析バグ修正
  • 1978年7月1日 :メモリ最適化・ガーベジコレクション改善
  • 1978年3月9日 :文字列関数強化
  • 1978年2月25日 :入力フラグ・数値精度改良
  • 1978年2月11日 :予約語解析強化
  • 1978年1月24日 :ユーザー定義関数改良

文化的インパクト

  • 教育的影響 :数百万人が初めて触れたプログラミング言語

  • インタラクティブでシンプルなBASIC が非技術者にも親しみやすい環境を提供

  • 多くの後進プログラマーや業界リーダーの出発点

  • 業界標準化 :Microsoft BASICがパーソナルコンピュータ用プログラミング言語の事実上の標準に

  • 設計思想やコーディング規約 が後の言語・開発ツールに継承

  • マルチプラットフォーム戦略 が現代ソフトウェア開発にも影響

  • ビジネスモデル革新 :複数ハードメーカーへのライセンス供与がMicrosoftの事業基盤

  • ソフトウェア単体ビジネスの成立例 として業界全体のテンプレートに

技術的イノベーション

  • コンパイラ技術 :高度なマクロシステム・条件付きコンパイル
  • シンボルテーブル管理・省メモリ最適化
  • ランタイムシステム :スタックベース式評価・動的メモリ管理・リアルタイムガーベジコレクション・対話型コマンド処理

レガシー(遺産)

  • 現代ソフトウェア産業の礎 となるソースコード
  • MS-DOSや後のMicrosoft OS開発 への直接的影響
  • プログラミング言語実装・ソフトウェアライセンスモデルの標準化
  • プログラミングの大衆化・普及

ファイル情報

  • ファイル名 :m6502.asm
  • 行数 :6,955行
  • 著作権 :Microsoft Corporation, 1976-1978
  • バージョン :1.1
  • アセンブル形式 :当時の6502アセンブラ対応

このドキュメントは、パーソナルコンピュータ革命を牽引し、Microsoftをソフトウェア業界のリーダーへと押し上げた歴史的ソースコードの全貌。 参考リンクMicrosoft Open Source Blog(英語)

Hackerたちの意見

https://en.wikipedia.org/wiki/BASIC-PLUS#Comparison_to_MS_BA...

https://everybasic.info/doku.php/basics/decbasic#influence_f...

https://www.theregister.com/2000/06/29/bill_gates_roots/

ありがとう!

それ、すぐに気づいたよ。こんな風にgitの履歴を強制的にバックデートできるなんて知らなかった。

その日付は実際にはm6502.asmファイルにだけ適用されるべきだと思う。歴史的なアーカイブには正確さが重要だよね。例えば、MITライセンスの下でいつライセンスされたのか、最近だと思うけど、そのファイルの日付はそれを反映すべきだよ。

あのリポジトリの日付スタンプが気に入ったなら、こっちのも絶対楽しめるよ:* https://github.com/dspinellis/unix-history-repo それに、貢献者リストも面白いよ。

作者をちゃんとした人に設定してほしいな。ビル・ゲイツだと思うけど。

だってMSがGitHubを持ってるから、後からコミット日を変えるためにDb/Storageを操作したってこと?

https://americanhistory.si.edu/comphist/gates.htm

https://news.ycombinator.com/item?id=17998940 DonHopkinsが2018年9月16日に投稿 | 親 | 前 | 次 [–] 変なBASICの機能についてだけど、DECSYSTEM 20のBASICに「LISTREVERSE」コマンドがあった理由を知ってる人いる?実際にその通りのことをやってたんだよ!DECとBASICに一票。どの他のプログラミング言語がその機能をサポートしてるのかな? DECSYSTEM 20 BASIC ユーザーガイド:LISTREVERSEコマンド LISTREVERSE LISTNHREVERSE LISTREVERSEとLISTNHREVERSEは、ユーザーのメモリ領域の内容を降順の行番号で印刷する。LISTREVERSEは出力の前に見出しを付け、LISTNHREVERSEは見出しを省略する。 LISTREVERSE EQUIV 10:53 13-NOV-75 40 END 35 PRINT "THE EQUIVALENT CURRENT IS",I, " AMPERES" 25 I=E1/R 10 INPUT R 5 INPUT E1 READY http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/D...

この基盤となる作業に対して Erum、君の引用にはそれを示すものはないよ(近いものすらない)。MSはNTをDECの作業に基づいて作ったし、その結果として裁判も解決したんだ。もしかしてその話を考えてるのかな?BASICという言語はDECの実装よりも前に存在していて(ダートマス大学から来た)、誰もが「機械Aの高水準言語BASICインタープリターの実装のコードを見て、機械Bのアセンブラ実装を書くことが、彼らの作業に基づいている」とは思わないよ。

あのBasic 80のリンク(2番目)には、もう一つのバリエーションが載ってると思ってたんだ。8080プロセッサを使ってたInteract Home Computer用のMicrosoft Basicね。ちなみに、今でも箱に入ったままのInteractと、テープのMS Basic、あといくつかのものを持ってるよ。博物館か、適切な場所に送る先を探してる。

ゴミ箱からオペレーティングシステムのリストを掘り出して、それを勉強してたんだ。あの時代、同じことをやってた人が多いよね。他の人が役に立たないと思ってることから、どれだけの情報が得られるかは驚きだよ。SUNY New PaltzとIBMの潜水艦施設(名前は知らないけど)に感謝だね、ゴミ箱をしっかり管理してなかったから。学校で教わる前にコンピュータを学んだ方法だよ。

DEC BASICが最も重要な貢献をしたのは、REPLのような「即時モード」で、プログラム全体をRUNすることなく個々のステートメントを実行できることだよね。これがMicrosoftやほとんどのBASIC実装にコピーされたんだ。 "PRINT 2+2"をいじれるのはBASIC体験の基本的な部分で、ケメニーとカーツがこれを考えたわけじゃなくてDECがやったと知って驚いたよ。(これはDECの以前の言語FOCALから来ていて、「英語のような」構文を持っていて、他の点ではBASICとは似ていないし、最終的にはLISPから来てるんだろうね。)

Microsoft BASIC言語はDEC BASICに似てるけど、実際の実装は全く違うよ。例えば、DEC BASICは入力されたBASICソースコードをバイトコードにコンパイルして、実行を速くするけど、Microsoft BASICは純粋なインタープリタで、実行時にソースコードのトークンをそのまま解釈するだけなんだ。メモリ制約のある8ビットマイコンがPDP-11とはどれだけ違ったかを忘れないでね。ゲイツがDEC BASICのソースコードを見たとしても、使えるものはあまりなかったんじゃないかな。

いつかVisual Basic 6がGitHubに現れることを願ってる。

同じく!これ、数日前に見てニヤニヤしちゃったよ:C#で再構築されたVisual Basic 6 – フォームデザイナーとブラウザ内IDE付き https://news.ycombinator.com/item?id=42105869

VB6はちょっと無理があるけど、Microsoft Visual Basic 1.0 for MS-DOSがオープンソースになったら嬉しいな。これが唯一のDOS版Visual Basicなんだ。DOS用のVBのすごいところは、完全なテキストモードのRAD IDE [1]で、TUI用なんだよね。こんなTUIビルダーは他に知らないな。かなりマイナーで、レトロコンピューティング好きの間でもほとんど話題にされてないし。90年代初頭の本や雑誌以外のリソースは、2020年のブログ記事 [2]が「Hello, world!」プロジェクトをスクリーンショット付きで紹介してるのが一番かな。 [1] https://en.wikipedia.org/wiki/Graphical_user_interface_build... [2] https://www.cloudwisp.com/exploring-visual-basic-1-0-for-ms-...

コメントが好きだな:「7/27/78 バグ修正:バイトFFでのFOR変数がGOSUBエントリをスタックで検索する際に一致してしまうバグを修正。FORPNTのSTAをFORPNT+1に変更。これは全バージョンでの重大なバグ。」最近の自分が言いそうなコメントだよね。 https://github.com/microsoft/BASIC-M6502/blob/main/m6502.asm...

これらのgitコミットに人工的なタイムスタンプを設定してくれたこと、本当に感謝してる。Git自体が存在する30年前のことだもんね。でも、他のファイルもそうで、.gitignoreには面白いほど時代錯誤な参照がいっぱいあるよ。

.gitignoreについて話すと、これは何? # MightyMoose これだけしか見つけられなかった: https://github.com/MonzUn/MightyMooseCore ファイルへのリンク: https://github.com/microsoft/BASIC-M6502/blob/main/.gitignor... とにかく、ハンセルマンさん、ありがとう!素晴らしいね!

同じく!本当にいい感じだったよ(タッチって言葉を使うのが面白いね、タイムスタンプを作るのに使うから)。

「WAIT 6502,X」のイースターエッグがあるよ!6530行から6539行は「MICROSOFT!」が表示される部分。4914行はWAITに渡されたアドレスをチェックして、正しければ「MICROSOFT!」を表示するコードだよ。ほんとに目立たないね。ソースライセンスを持ってる人は、サッと見ただけじゃ気づかないだろうね。[0] https://www.pagetable.com/?p=43

"".join(map(lambda n: chr((n & 0o77) + 64), reversed([0o241, 0o124, 0o106, 0o217, 0o23, 0o217, 0o122, 0o103, 0o211, 0o315]))) このPythonのワンライナーは、定義されたバイトから隠された文字列をおおよそ復元するよ。

これ、すごいね。BASICの時代から見てきたけど、ほとんどの古いパソコンが電源を入れて数秒でプログラミング言語を使えるのが素晴らしいと思ってた!BASICで趣味のプログラミングをたくさんやったけど、商業アプリケーションはどれくらい書かれたんだろう?小さな会社や大きな会社が内部用に自分たちのBASICプログラムを書いてたのかな?

オリジナルのUltima Iは、BASICとアセンブリの混合で書かれてたんだよね。BASICは結構遅いけど、ほとんどのBASIC実装は最適化されたアセンブリルーチンを呼び出せるんだ。ただ、複雑さが増すと、パフォーマンスを除けば、アセンブリの方がBASICよりも読みやすいかもしれない。BASICは行番号に頼ってジャンプするから、アセンブラは名前付きラベルを提供してるしね。

162 kBのソースドキュメントが一つにまとめられてるのには驚いたよ。コードを扱いやすくしたり、ビルド時間を短縮するために小さなモジュールに分けられてないのはなんでだろう?当時のPDP-10のテキストエディタは、そんな大きなドキュメントを簡単に扱えたのかな?それを一度に組み立てるのにどれくらい時間がかかるんだろう?

これいいね!うちの父が1978年頃の古いOSI(オハイオサイエンティフィック)コンピュータを持ってて、これか似たようなBASICを使ってたかも。数年前に起動したら、Micro-Softのウェルカムメッセージが出てきたよ(確かハイフンが入ってた)。

これがきっかけで、他のBASIC実装もオープンソースになったらいいなって思ってる。俺は初恋のPhilips P2000T [1]のために完全に機能するエミュレーターを書いたんだけど、配布する合法的な方法が見つからなくてリリースできなかったんだ。この機械のソフトウェアはほとんどがBASIC ROMを必要とするし、リバースエンジニアリングするのも完全に合法とは言えないかも。もしMicrosoftにリクエストを送る方法を知ってる人がいたら、ぜひ教えてほしいな。 [1] https://en.wikipedia.org/wiki/Philips_P2000

どのBASIC ROMが必要なの?

レイモンド・チェン [0] がいいスタート地点かも。 [0] https://devblogs.microsoft.com/oldnewthing/author/oldnewthin...

Microsoftの社員がヒントをくれるかも?とりあえず、MicrosoftのCEOにアプローチするのがいいかも。ビル・ゲイツにメールしてみてもいいかもね。彼のサポートが得られれば、内部で何か動きがあるかもしれないし。ソフトウェアの古い作者たちがリリースをリクエストすることもできるかも。ROMの作者が誰か分かってる?それとも、オリジナルシステムに関わった他のハードウェアデザイナーやスタッフも、Microsoftに興味を持たせるかもしれないし、リクエストに対するポジティブな動きがあるかも。昔のMicrosoftソフトウェアがどのようにリリースされたかを調べることは可能かな?商業的価値があると思われるものはリリースに消極的だろうし。何年もかけていくつかの製品がリリースされてきたから、公式または非公式のプロセスがあったはず。法律的な観点からも何かしらの確認が必要だろうし、Microsoftに対してネガティブなものがコードに含まれてないかを確認するために、かなりのリソースが必要になると思う。たぶん数日かかるかもね。でも、正直なところ、全然分からない…例えば、再構築できるか確認したりする必要があるかも?古いツールチェーンやハードウェアをセットアップする必要もあるし、これらのソフトウェアの中には失われてしまったものもあるかもしれない。Microsoftにとっては認めるのが恥ずかしいことかも。{余談だけど、俺は大きな会社でソフトウェア構成マネージャーとして働いてたことがあって、プロジェクトコードを集めて、すべてのアーティファクト(ソースや納品物など)を確実にキャッチして、信頼性のある独立した再構築ができるようにするのが仕事だったんだ。これには必要なツールも含まれてた。}

他のBASICバージョンについてだけど、オープンソースというよりは放置されたソフトウェアかもしれないけど、Acornの8ビットBBC BASICのソースコードはここにあるよ: https://github.com/stardot/AcornDmosBasic(コメント付きの逆アセンブルもあるから、そっちの方が分かりやすいかも…)(BBC BASICは現代の基準ではかなりひどいけど、Microsoft BASICよりは好きになれるかも。可変長の変数名、マルチディメンショナル配列、整数変数、PROC、FN、インラインアセンブラがあるよ。)