プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

せっかくだから俺はこの銀のEARLY ACCESS KITを選ぶぜ!

タイトルの通りです。"X68000 Z LIMITED EDITION EARLY ACCESS KIT"で支援させていただきました。

初めてクラウドファンディングというものに参加したよ :)

最初は提供されている情報が少なかったので

しばらく様子見しようと思ってたんだけど、開始して1時間もたたずに目標額に達し、あれよあれよという間に1億という様を見ながら、あっけにとられていました。いや正直50,000円という決して安くない支援金に、これほど支援者が集まるとは思わなかったよ。もしかして、当時500,000円だったX68000が50,000円は安いぜ!ってことなのか。みんな冷静になれー(笑)

というのは冗談ですが、まあX68000が憧れだった世代ももうみんないい歳だものね。これぐらいの額なら楽勝なのかな。小遣い生活者な私は少ない小遣い預金からどうにか捻出しましたがˆˆ;

というわけで、X68000初代機を予約して買った私としては支援することは確定だったのですが、あまりの勢いに届くのがだいぶ遅れてしまうのではないかとの焦りから、先日ポチってしまったのであります。early birdさんたちの楽しそうな様子をウェブで見ながら、届く日を楽しみに待つことになるのかなー。

前に書いたかもしれないけど

実はX68000はだいぶ前に起動しなくなってしまい、ある日実家に行ったら廃棄されていたのです(泣)ソフトはしばらく持っていたのですが「もうX68000を使うこともあるまい」と思い、売ってしまいました。まさかX68000が復活するとは。

そんなわけで後日発表予定とある「バンドルされる名作ゲーム」は気になるところです。今は楽しみに待つことにします。

で、当時X68000で何をしていたかというと

まあほぼゲームマシンでしたな。システムFDの福袋に入っていたアセンブラとリンカを使って、BIOS叩いたり、XC買ってプログラム書いたりはしていたな。SX-WindowやOS-9/68Kも持ってたはず。

当時はBBSやネットには全く使っていなかったので、開発環境はSHARP純正以外は全然知らないんだよな。gccとか使うっぽいな。エミュレータでの開発がメインになるのかな。

届くまでに、勉強しておきます :)

最後に

クラファンには、こう書いてあります。

1980年代の国産ホビーPC市場は、パソコン少年たちの心を踊らせました。そうして現在、たくさんの優秀なエンジニアが誕生しています。
そんな日本特有のホビーPC文化を継承させるべく、日本のIT産業を支えたエンジニアの叡智を集結させるのです。

Project Z 第一弾は、X68000の初代モデルを、35年の時を経て、令和のこの世に甦らせること。

その過程を皆様と共有しながら、さらなる文化の継承と発展を目指します。これまで瑞起が携わったミニレトロゲーム筐体とは異なるアプローチにぜひご賛同ください。

素晴らしいです。ぜひこのX68000 Zが成功して、当時のマイコンが復活する日を夢見ております。いろいろと大変かと思いますが、がんばって下さい! >株式会社瑞起 様

FOCS v1.0.1 リリース

PC-8001用Tiny Fortran FOCSをアップデートしました。ダウンロードはこちら。

GitHub - yasuho68k/focs_pc-8001: FOCS (FOrtran Compiler System) for PC-8001

何を直したかというと

こんな文がsyntax errorになってしまいます。

    a=(b+4)-10

ソースコードのリライトミスです。さすがに恥ずかしいので直しました。

テストしてないのがバレバレだな(汗)

しかしアレだな

普通に

    call    a
    call    b
    ret

って書けばいいものを

    call    a
    jp      b

とか書いてるから、間違えるんだな。何箇所か間違えた。

そういうとこだぞ!>40年前の私 (八つ当り)

FOCS for PC-8001: リリースしました

FOCSとは、私が高校時代に作ったTiny FORTRANコンパイラです。以下からダウンロードできます。

GitHub - yasuho68k/focs_pc-8001: FOCS (FOrtran Compiler System) for PC-8001

こんなことを

つぶやいてから、既に3年(!)弱…

少し慣れてきたら、高校時代に作ったFORTRANコンパイラを復活させてみたい。

ついに夢が叶う日が来た! - プログラマyasuhoの隠れ家

「リスト打ち込みするだけに、どんだけかかってんだよ、おまえ」って感じです。いや、実際3年間ずっとやってたわけじゃなくて、キッカケは、こんなblogに出会ったからなのです。

PC-8001開発環境整備/ソフトウェア編 : プログラミング指南 - Code Knowledge

私が説明するまでもない、ハイドライドなどで有名な内藤時浩さんのblogです。PC-8001やZ80などの話を読んで懐かしんでいるうちに「ちょっと昔を思い出してみようかな」と思ったのが、FOCS復活のキッカケでございました。

当時作ったコンパイラは、プログラムリストに残されていたので、これをmacで入力し直すことから始めました。

最初は

「当時はハンドアセンブルしてたから、機械語部分の打ち込みでいいかな」なんて気楽に考えていたのですが、進めるうちに、そんなに簡単な話ではないことが発覚。というのも:

プログラムリストに記載されていない部分がある

単純に抜けているわけじゃなくて「こんなのロジック見れば自明でしょ」みたいな感じで書いてない(特に処理関数テーブルアドレスとか)部分があり、ソースコードを解析する必要がある所が多かった。そんな40年以上前のコードなんて覚えてないよ(笑)

明らかに動かない部分がある

どう見ても動かない部分があった。たぶんバグは直したんだろうけど、リストに反映されてないんだな。ちゃんと書いとけよ!>40年前の自分

意味不明なROM内ルーチン

多くのROM内ルーチンを使っているんだけど、何をするのか分からないもの多数。まあ何となくは分かるんだけど。最終的にはPasocomMiniで実際にアドレスに飛ばして確認したりした。

---

とまあこんな感じで、機械語打ち込みは早々にあきらめ、ソースコード入力にスイッチ。アセンブラは内藤さんのblogで紹介されていたAILightさんのGitHub - AILight/AILZ80ASM: Z80アセンブラを選びました。windows前提のツールが多いなか、mac用バイナリも提供されていて、ローカルラベルも使えるなど使い勝手がいいことが選んだ理由です。AILightさん、ありがとうございます :)

順序が逆になりますが

FOCSを再現するにあたり目指したことは当時のプログラムをなるべくそのまま再現するということでした。

なにせ40年以上前のプログラム。書き写していくだけで、ここはこうしたらいいのにとか、まあいろいろ目についてしまうわけです。特にメモリや速度に制限があったわけでもないのに、やたらと技巧的なプログラムの多いこと。たぶん当時はこういうのがカッコイイって思ってたんだろうなあ。SP書き換えしてpopとかしてて、割り込まれたらアウトだな、これ。

正直書き直すことも考えたのですが、いいも悪いも当時のままを再現することに意味があるのではないかと思い、バグ以外はそのまま打ち込んでいます。SP書き換えもそのまま。

一番大変だったのは

デバッグでした。操作自体は難しくないのですが、アセンブルしてできたcmtファイルをmicroSDにコピーしてPasocomMini起動してデバッグして、システムをシャットダウンしてmicroSDカード抜いて、というサイクルは想像以上に面倒で、何度心が折れそうになったことか(笑) というか、Raspberry Pi側のmicroSDスロットが壊れないか心配になりました。

できればエミュレータが使えればよかったのですが、

PasocomMini PC-8001のソフトウェアは、出荷時のRaspberry Pi上でのみ動作するよう設計されています。
搭載されているソフトウェアやROMバイナリ(N-BASIC)等は、PasocomMini PC-8001上でのみ使用が許可されているとご理解下さい。
(吸い出して他のエミュレータ上での使用は不可)

必ずご確認ください │ パソコンミニ公式ウェブサイト

と、しっかり書いてあります。というわけで、時々ヤフオク見たりするのですが、なかなか難しそうですね。

まあ最初はN-BASIC ROMも搭載しない、という話だったかと思うので、最大限努力していただいた結果なのかな、と。せめてPCとRasPiがUSB接続できて、cmtファイルの送受信ができればいいのにな :)

ともあれ

長年の夢であったFORTRANコンパイラが実現できたのは、素直に嬉しかったです。株式会社ハル研究所様をはじめ、PC-8001の有用な情報やツールを提供していただいた方々に、この場を借りてお礼を申し上げたいと思います。

関連記事:

FOCS (前編) - プログラマyasuhoの隠れ家
FOCS (中編) - プログラマyasuhoの隠れ家
FOCS (後編) - プログラマyasuhoの隠れ家

ついに夢が叶う日が来た!

ついにパソコンミニ PC-8001が発売されましたね。

これは買わねばなるまい。

とうとう夢が叶う日が来る! - プログラマyasuhoの隠れ家

とつぶやいてから早二年ちょっと。

HAL研さん、素晴らしいです。予想を超えて、BASIC搭載までしていただきました!ありがとうございます。おまけにPCG8100も搭載とは。ここに至るまでは、権利関係などで大変苦労されたのではないでしょうか。おかげで40年前にタイムスリップできそうです。

で、

購入ですが、実はちょっと出遅れてしまったので、まだ届いておりません。Twitterに続々アップされる入手報告を見ていると「いいなあ」と思ったりしますが、まあ楽しみに待つことにします(笑)

来たらまずは昔の感覚を取り戻すべくリハビリかなー。だいぶ忘れてるだろうなあ。ハンドアセンブルはちょっとなら出来そうかな。21 00 E0 11 00 F3 01 00 01 ED B0 C9ぐらいなら、なんとか。けっこう覚えてるものだw

少し慣れてきたら、高校時代に作ったFORTRANコンパイラを復活させてみたい。BASIC ROM v1.1だから、ROM内ルーチンもそのまま使えるはずだ。問題はそれをどうやってネットでシェアするかだな。WでセーブしたCMTファイルそのままでいいのかな。それとも昔のI/Oよろしくチェックサム付き16進ダンプだろうか(笑)というか、地味なプログラムだから、誰も使ってくれなそうだ…

などと

今はいろいろ妄想しております。まずはMini HDMIケーブルを買ってこなくちゃ。

MacBook Air - 2010 vs 2018

長年愛用してきたMacBook Air(Late 2010)ですが、さすがに最近は動画を見るだけでファンが全開になるなど、限界を感じてきたので、MacBook Air(2018 model)に買い替えました。

www.apple.com

というわけで、しばらく使ってみた感じのインプレッションを。と思ったのですが、普通の感想はネットに沢山あると思うので、私は主にMBA Late 2010との比較という観点でいってみたいと思います。

なお、新MBAはAppleのサイトからメモリ16MB,512GB SSD,RETINA displayを選択して購入。キーボードはもちろんUS仕様で :)

その前に

「なぜMacBook Airなのか。より軽く、より性能の高いモデルのあるMacBook Proではないのか」という声があろうかと思いますが、それはひとえに私がMacBook Airを愛しているに他なりません。以上(笑)

この美しいデザインこそがMBAを使い続けている理由なのであります :)

ということで

インプレッション開始。

サイズと重量

正直Late 2010と同じ画面サイズで本体が小さくなるとは思いませんでした。ACアダプターも小さいし、普段MBAを持ち歩く私はこれに関しては二重丸。

パフォーマンス

まあ元が2010年のCore 2 DUOなので、まあここは比べるまでもなく。当然ですが動画を見るぐらいでファンが全開になることもあるわけがなく。というか、まだファンの音を聞いたことないな。

バッテリーの持ち

まあ9年ぐらい使ってたので、さすがにバッテリーはヘタってたとは思うんだけど、けっこう持ちが良かったLate 2010. 最新機種はさすがに持ちますな。ミーティングで時々メモを取る程度ならバッテリーは100%のままで1hrは軽く持つ感じ。ここも二重丸。

キーボード

完全に個人の好みの問題だけど、キーボードはLate 2010の方が好みだったな。ストロークが浅いのはまあいいとして、打った時のパタパタ音がけっこう気になる。そのうち慣れるとは思うけどね。これから買う人は店頭で感触を確かめてみることをオススメします。

USB type-C only

買う前は心配だったけど、杞憂だった。考えてみれば、iPodにpodcastを同期させる時ぐらいしかUSBを使ってない。100円ショップにtype A->Cの変換アダプターが売ってたので、解決。電源ケーブルがちょっと固めだけど、まあゆっくり探します。

Touch ID

これは超便利!もう手放せない感じ。

その他

英数/ひらがな切り替え

今回始めて知ったんだけど、最近のMAC OSはCommand+Spaceが入力文字の切り替えじゃないのね。なんかMojaveからそうだったらしいんだけど、 OSのアップグレードしてると設定は引き継がれるみたいで気が付かなかった。さっそくキーバインドを変更して解決。

充電開始音

電源ケーブルを本体に差し込む時、iPadの充電音(しかもけっこう大きな音がする)が気になる。スピーカー音量を0にしても関係なし。ネットで調べてみると、音声ファイルを入れ替えるとか、ちょっと強引な方法しか見当たらない。まあ気にしないことにします(笑)

全体としては

とても満足。やっぱり新しいパソコンはいいね。長く付き合っていこうと思います :)

プログラマが転職する理由

エンジニア、妖精さんみたいな存在なので、面白そうなプロジェクトとか良いPCとかディスプレイとか椅子とかを置いておくと自然と会社に集まってきてせっせと働いてくれます。

逆に硬い椅子とかしょぼいPCやディスプレイとか自由を奪う規則とかが増えるとエンジニアさんは会社から去っていきます

退職エントリーを書かれる前に実践したい、エンジニアが辞めないチームの作り方 (1/3):エンジニアは妖精さん - @IT

妖精さん(笑) あー、たしかに妖精みたいなものかもねー、プログラマって。

ただ、この記事で気になったことが一つ。

それは

「不満になったから退職した」が前提になっていること。

まあ多くの場合は不満があるから退職/転職するんだと思う。でも、プログラマが転職する理由はそれだけじゃなくて、向上心や、新しいチャレンジをしたいという気持ちから転職する場合だってある。それは一部の人だけではなく、わりと多いんじゃないかと思ってる。

ご存知の通り

この業界は変化が激しい。5-6年前に主流だった技術が今はlost technologyなんてことは普通だ。その中でプログラマを続けていくには、常に新しい技術をキャッチアップしつつ、自らの技術力を磨いていかないといけない。

そういう環境にいると、より新しいチャレンジをしてみたいと思うのは自然なことだと思う。現状に不満がなかったとしても、一箇所にとどまっていることが不安になってくることだってあるだろうね。

あと

個人的にはネガティブな気持ちで転職したくないんだ。まあ自分が楽天家ってこともあるんだけど、新しいことにワクワクしたいって気持ちでいないと、前に進めない。過去のことで悩んだって、しょうがないって思うようにしてるんだと思う。

新しい企業だって、不満だけの人を採用したいとは思わないんじゃないかな。今の職場が不満で、どこでもいいから逃げたいって気持ちは相手に伝わる。そして、今自分はどれだけ新しいチャレンジにワクワクしてるかって気持ちも伝わるよね。

記事にも書いてあるけど

最終的には、ぶっちゃけ不満の多くはお金でしか解決できないんだと思う。自分はこれだけ頑張ってるんだから、このぐらいはもらいたい。という線がどこにあるかって話だよね。

いわゆるGAFAMと呼ばれる企業が、優秀な人に快適な環境と高給を与えているのは、優秀な技術者を一人でも多くつなぎとめたいってこと。少しずつだけど、日本もだんだんそうなってきてる気がする。

資金力のある大企業でないと

優秀な人を高給でつなぎとめるってことは難しいかもしれない。けど、いろんなチャレンジが出来る会社だってことが認知されると、集まって来る妖精さんも増えてくると思う。企業としては利益も追求しないといけないから、いろいろ難しい面もあるとは思うけど、そんな企業が増えてくれることを願っています。

ねえ、ちょっとやってみて!?

また、私が初心者のころ
優秀なプログラマーになるためにはアルゴリズムが必要
と思ってアルゴリズムを勉強した覚えがあります。

しかし、今思えば
学習コストのわりにあまり役立たない知識
だったなという印象です

アルゴリズムの勉強は必要か?不要である3つの理由

私がプログラミングを学び始めた頃は、今のようにコンピュータは普及しておらず、何をするにも自分で作る必要があったように思います。WindowsやMacといった、統一された環境もなく、リコンパイルすれば動くといったことはほぼ皆無でした。プログラムを他のプラットフォームに移植するには、プログラムが何をしているのかを理解し、アルゴリズム部分だけをリライトする必要がありました。何か問題があっても情報は雑誌や本を調べるぐらいしかなくて、何日も思い悩むということは日常茶飯事。

いきなり年寄りの昔話ですいません(笑)

そんな不便極まりない環境ではありましたが、今思えば幸運な時期にプログラミングを始めることができたな、と思います。プログラムというものがコンピュータの中でどうやって動き、どう書けば自分の思うように動くのか、体験することができたから。コンピュータの作りが単純で、プログラムを書くことが簡単なのも良かった。CPUの速度が遅いから、どうすればプログラムを効率よく書けばいいのかが分かる。こういったことは、プログラマとなるために良い経験になりましたね。

とか書いてたら

ふと「自分のプログラミング能力って、どの程度なんだろう」って思って、競技プログラミング系のサイトをいくつか試してみました。やってみたのは:

TopCoder
HackerRank
LeetCode

とかですね。

そしたら…

これが思ったほど出来なかったんですよ。プログラマなので、毎日コードは書いてるんですよ。慣れもあるみたいで、問題を解くうち段々と書くのは早くなってくるんだけど、でも自分が思うほど書けなかった。

で、思ったのは、自分はできると思っていても、普段からやってない能力は衰えるってこと。毎日プログラムを書いているって言いましたけど、業務のプログラミングって、分野によって書くプログラムって大体決まってるからかな。例えば私の場合は組み込み系が多いんで、システム寄りのプログラムを書くことが多く、一般的なアプリケーションを作ることはあまりしないです。なので、なおさらプログラミングスキルとしては偏ってるんだろうな、って思います。

別に何でも出来るようになる必要はないと思います。私も先の記事を書いたネットサーフィンの壺さんが言われるように、必要になった時に学習すればいい派です。でも新しいことを学ぶことはそれなりにコストがかかります。ディープに学ぶ必要はなくても、それをどれだけ短い時間でものにできるかは、日々の鍛錬が欠かせないのだな、と感じました。

競技プログラミングのサイト

興味があったら、ぜひやってみて下さい。え!?「こんなの簡単だよ」って!?えっと、精進します^^;