
Microsoft、GW-BASICをオープンソース化 65
ストーリー by headless
公開 部門より
公開 部門より
hylom 曰く、
Microsoftが1983年リリースのGW-BASICのソースコードをMIT Licenseで公開した(Windows Command Lineの記事 GitHubリポジトリ)。
公開されたソースコードは8088向けアセンブリー言語で書かれたもの。ソースコードのみの公開で、ビルドのための設定ファイルやバイナリなどは公開されていないため、このコードを動かすには別途ビルド環境や実行環境を用意する必要がある。
ソースコードは歴史的・教育的資料として公開するもので、プルリクエストは受け付けないとのこと。当時使われたアセンブラーは初期のMASMとみられるが、現在もビルド可能かどうかについては確認されていないようだ。
これは自動変換されたソースコード (スコア:5, 参考になる)
ソースコードにはビル・ゲイツの名前が入ってますね
https://github.com/microsoft/GW-BASIC/blob/master/GWMAIN.ASM [github.com]
の17行目です
しかし不思議なことに一行目には
と書いてあります
どうやらこのソースコードは,オリジナルのものではなくて
何らかの変換ツールを使って,自動変換で出力したファイルのようです
不思議に思って調べてみたら
当時は色々なアーキテクチャ,様々な命令セット(ISA)のCPUが流通していたので
プログラマはまず独自のアセンブラ言語で記述した共通のソースコードを用意して
それを独自のISA translatorで 8088向けにアセンブラのソースコードに変換
それをビルドしていたそうです
https://devblogs.microsoft.com/commandline/microsoft-open-sources-gw-basic/ [microsoft.com]
また,変換前のオリジナルのソースコード,及びISA translator はオープンソースとしては公開できない,ということのようです
Re: (スコア:0)
> 当時は色々なアーキテクチャ,様々な命令セット(ISA)のCPUが流通していたので
1983年だと、まだIBM-PCとその完全互換機以外にもDOSレベルの互換機や、CPUも異なるPCが現役だったのでx86ネイティブだけで開発するわけにはいかなかったんでしょうかね。というか、もっと前の8bit PC時代には6502、6809、8080、Z80等のスタンドアロンBASICを出荷していたのでその時代からすでにそういう手法で開発していたということなんだと思いますが。
Re: (スコア:0, オフトピック)
新電子立国には、ビル・ゲイツとポール・アレンはAltair用BASICをPDP-10上で開発したと書かれています。
完成したのが1975年3月だそうですので、「COPYRIGHT 1975 BY BILL GATES AND PAUL ALLEN」というのは
Altair用BASICのCopyrightではないでしょうか?
(今ならCOPYRIGHT1975-1983にするでしょう)
Re: (スコア:0)
GWMAIN.ASMに
331 PUSH BX ;PUT H ON
336 XCHG BX,DX ;MAKE SURE WE RETURN [D,E]
362 ;RETURN WITH [H,L] POINTING THE BOTTOM
とあるから8080から8086へのトランスレーションでしょう
インテルがそういうツールを用意していたので、それを使ったのなら、公開できないのも納得いきます
Re:これは自動変換されたソースコード (スコア:5, 興味深い)
958行から
CRDONE:
MOV BX,OFFSET KBFLEN+2 ;GET OFFSET
MOV AL,BL ;GET COUNT TO SUBTRACT FROM
SUB AL,CL ;SUBTRACT
MOV CL,AL
MOV AL,BH
SBB AL,CH
MOV CH,AL ;BC:=# OF CHARS CRUNCHED
8ビットずつごちゃごちゃ計算している部分は CX=BX-CX です
8086では8ビットずつ計算する必要はないので、コメントとあわせて明らかに8080からのトランスレーションですね
リンクはるだけ (スコア:0)
https://github.com/microsoft/GW-BASIC/blob/master/GWMAIN.ASM#L958-L966 [github.com]
Re: (スコア:0)
LINE 40-70に各社ごとの条件付アセンブル用っぽいフラグ定義がありますね。
TRS,MELCO(Baffaloじゃないほう),NECやOKI、Olivettiなど。BUBLってSFC? FM8?
Re:リンクはるだけ (スコア:1)
Olivettiはよくわからりませんが、それ以外は
TRS: TRS-80: Z80
MELCO: 三菱 MULTI8: Z80
NEC: PC-8001とか: Z80(μPD780C-1)
OKI: if800: Z80
BUBCOM80: Z80(富士通ベンチャーが出したFM8とそっくりスペックなZ80機)
と、全部 Z80機ですね。
FM8のF-BASICもMicrosoftだけど、6809だからさすがにソースが共通ってことはないと思う。
このあたり、MSはソースコード提供だけで移植は各メーカーだと思ってたんですが
MS自身が移植も手がけてたんですかね。
当時の8bitパソコンは大多数が MS BASIC で、起動時にMicrosoftのCopyright表示を見たものです。
MSにあらずんばBASICにあらずってレベルだったよなぁ。日本の大手で独自なのはシャープぐらい?
Re: (スコア:0)
このころからマルチプラットホーム開発してたのか
MSは効率的だな
Re: (スコア:0)
マルチプラットフォーム開発というよりは移植作業。
新しい機種が出るたびに移植作業をしないといけないし
ソフト移植の成否がその機種の人気につながったりもしたとかで
PCメーカーからも相当なプレッシャーをかけられてたようだし、
それを効率よくこなそうとするのは当然の流れだろう。
Re: (スコア:0)
プレッシャーかける側は効率と互換性とは対極ですけどね。
GW (スコア:0)
グレッグウィットゥン説で覚えてるが、他にも説があるらしい
XENIX (スコア:0)
この調子でXENIXも公開して欲しい!と思ったけど、権利をSCOに売ってしまったのでダメかな。。。
Microsoft Basicとの違い? (スコア:0)
DOSなしで直接ハードウェアで動いたMicrosoft Basic(や派生各社BASIC)と、
DOS上で動くGW-Basicの違い?
38 years ago (スコア:0)
コミット日付が"38 years ago"になってるの芸が細かいというかなんというか、そもそもどうやったのか
自PCの日付を変えてもサーバー日付になる気がするし…、管理画面とかで編集できちゃうのか?
# githubを使ったことがないのでわからない
Re:38 years ago (スコア:1)
git commit --date=<date>
Re: (スコア:0)
subversionで管理してたプロジェクトで、githubに移行したのを見たことがあるけど、
もとのcommitの日付が残ってましたね。
githubはgitのcommitの日付をそのまま使ってますし、
gitは好きなcommitをいくらでも作れたはず。
GW-BASIC もいいけど (スコア:0)
それより M-BASIC のソースが見たい。
Re: (スコア:0)
このドMが!
Re: (スコア:0)
では私はS-BASICで。
カラオケの液晶端末 (スコア:0)
昔はDOS5とかで動いてたけど最近はwindowsなんだろうか
Re: (スコア:0)
昔はDOS5とかで動いてたけど最近はwindowsなんだろうか
DOS5の上でWin3.1が動いてるんじゃね?
Re: (スコア:0)
某統合型のはリブートした時にAndroidベースっぽい挙動見せてたような
教育向けには流石に古すぎでは? (スコア:0)
歴史的価値はあるかも知れないけど、教育的価値はあるのか?
そこらのC言語の入門書とかのがよっぽど教育向けだと思うんだが。
ここから何を学べるか教えてエロい人!
# 反面教師にするとか痛いのは要らないのでAC
Re: (スコア:0)
Scratchを卒業した子供を実用プログラミング言語に繋げるための橋渡しには良いんじゃない?
Re: (スコア:0)
c言語の入門書はc言語の仕様を学ぶためのもの。
今回の発表されたものはBASICの仕様を学ぶためのもの、だけではない。
Re: (スコア:0)
「エロい人!」が充分に痛いからセーフ
Re: (スコア:0)
前にもこんな話無かったっけと思ったらSmall Basicだった。
「Microsoft Small Basic」1.0リリース [developers.srad.jp]
Microsoft Small Basic [azurewebsites.net]
Web版もあって手軽だし、ドキュメントも充実している。機能は限定されるが教育用、Basic事始めなら悪くない。
個人的にはQuickBasic/QBasicを弄りたいかな。より懐かしいのはN8
Re: (スコア:0)
> ここから何を学べるか教えてエロい人!
教養が無い人は、何も学べないでしょうね
Re: (スコア:0)
歴史的価値があるなら教育的価値もあるだろ
オープンソース (スコア:0)
オープンソースってアセンブラ公開するのは違和感ある。
一応アセンブリ言語もソースコードと言うらしいが、機械語と大差ないからソースコードって呼ぶの違和感あるのよね。
例えば逆アセンブルしたものってソースコードかと言われるとノーだし。
Re: (スコア:0)
人間がアセンブラで書いたものならソースコードと呼んで全然問題ないだろう。なんで「ソース」コードと呼んでるか分かってる?
Re: (スコア:0)
この手のは(今でも?)コメントやラベルが重要というの分かっていないんだろうね。
Re: (スコア:0)
アセンブリで書いたことがない世代だと、逆アセンブルしたものと、人間が書いたアセンブリコードが同等だと思っちゃうんでしょう。
Re: (スコア:0)
もしかすると直接OPコードを吐ける熟練のマシン語使いかもしれない。
Re: (スコア:0)
熟練じゃなくても、世代によっては当たり前なんだよな。
アセンブラ使うほどにはメモリ余裕にある環境がなくて、オペコード直接モニタで打ち込んでたよ。
逆にニモニックは覚えてない。
Re: (スコア:0)
MASMなんだから、別コメントにあるとおりマクロも使ってますよ。
M80とかMASMとか使ってプログラムを書いてたものからすると、
GNU Assemblerとか貧弱すぎて雑誌のおまけかよと思うくらい。
Re:オープンソース (スコア:1)
プリプロセッサを使えっつーことさね
Re: (スコア:0)
GNU Assemblerとか貧弱すぎて雑誌のおまけかよと思うくらい。
GNU asもずいぶん前から単体でマクロ使えるけど知らんの?
38年前にgitがあったのか (スコア:0)
.gitignoreのタイムスタンプが1983年2月10日とは
Re: (スコア:0)
あんなの好きな日付に設定できるんじゃ無いの?
裁判の証拠にすら採用できないってうw
Re: (スコア:0)
あの頃はメモリも少ないし回線も貧弱だし、大変だったよ
Re: (スコア:0)
正直gitって最近できたツールって感じがしない。
TeXと同じくらい歴史が古くても違和感がない。
まぁバージョン管理システム自体はそこそこ昔からあったみたいだが。
Re:38年前にgitがあったのか (スコア:1)
超普及したバージョン管理システムの先駆け的な RCS が1982年なので、今回のBASICとほぼ同時期ですね。
で、RCSをネットワーク対応にしたCVSが1990年、分散開発での欠点を解消したSubVersionが2000年。この3つは同系統の進化系列(互換性を考えてるというか使い方がほぼ一緒)
で、CVSやSubVersionが中央サーバ管理型なのに対し、2000年代になって分散型バージョン管理システムが雨後の竹の子のようにわらわらと出てきて、その一つがGit。
私の中では、Gitはそんな新参者の one of them から、頭一つ抜き出てきたもの、って印象。
#手持ちのプロジェクトにはCVS管理のもいくつか残ってる。RCSはさすがに残ってないけど…
Re: (スコア:0)
正直、自分の使い方だと1990年台でも十分だなぁ。
CVSやSubVersionは触れた事ないし、使ったら割と不満ありそうでけど。
GitHubで開発してる人の大半って別に分散型でなくても構わない人じゃなかろうか。
Re: (スコア:0)
CVSは、いまからやるとかなり辛い。(当時はそれでもありがたかったが)
ファイルやディレクトリの名前変更や削除も、それだけでテクニックとか、CVSでのディレクトリ削除ハックなんて呼ばれるになるぐらいには、初見では難易度が高い。
覚えてしまえば一緒ではあるが、ファイル消すぐらいの作業でも手順を覚える必要があるぐらいには手間かかる。
あとファイル一個ずつの管理なので、複数のファイルを一括でコミットしてるつもりでも、それは同一のコミットみたいな概念がない。
それらが出来るようになったのが SVN。
まぁ、SVNでも概ね困らないプロジェクトは多いかもしれないが、Gitに慣れてるとSVNのクソ遅さには驚くと思うぞ。
(いまどきのPCではないが、履歴たまるとコミットに1時間かかるとか普通だった)
Re: (スコア:0)
sccs「・・・」
Re: (スコア:0)
RCS (やSCCS)はファイル単位管理かつロック必須だったでしょう。
CVSはネットワーク対応というより、そこが大きいと思った。
subversionはローカルで使う分には、タグやブランチがCVSより
退化しただけな感じだったな。
Re: (スコア:0)
git はすごく現代的だと思っている。object に sha1 で生成した長い名前つけたり、そもそも sha1 の計算をするために CPU パワー使ったり(今時なら微々たるものだけど)、圧縮・展開したり。git の commit 連鎖を追いかける仕組みだって、メモリー空間が広大だからこそ(今時なら(略))。
Wozの書いたIntegerBasic (スコア:0, 興味深い)
の逆アセンブルはこちら。
https://www.callapple.org/docs/ap2/special/integerbasic.pdf [callapple.org]
ウォズの自伝(アップルを創った怪物)によると、BASICインタープリタの実装は、彼がAppleで、最も時間がかかったプロジェクトだったとのこと。