Bubcom80って

前からちょっと気になってはいたのですが、1981年に発売されたBubcom-80というパソコン、
発売元はシステムズフォーミュレートですが、富士通OEMで作成されたようで、見た目は
同時期に発売された富士通FM-8にそっくりで、兄弟機種とか呼ばれています。

違いは、FM-8が6809なのに、Bubcom-80はz80で、CP/Mを意識していたと言われていますが、、、。

でも、前からちょっと思ってなんですが、これってむしろPC-8001とそっくりのような、、。確か、
PC-8001のN-Basicのテープがそのまま読み込めたような気がします。Basicは同じMicrosoft系ですが、
互換性がどのくらいあるかはわかりません。
(当時は、三菱のMulti-8や、東芝Pasopiaなんかも、PC-8001のテープがそのまま読み込めたので、
ここまでであれば特別めずらしくはないかもしれません)

あと、G-VRAMを搭載しない状態では、160x100のセミグラフィックが使えるということですが、
これもPC-8001と似ているな、、、と思っていたのですが、

http://www.retropc.net/mm/archives/1785

こちらの記事を見ると、DMAがNECのμPD8257C-5で、CRTCもNECのμPD3301D-2!。
PC-8001とまったく同じではありませんかっ! これはちょっと衝撃的でした。
ということは、あの(いまいましい)横の色数の限界も同じってことですよね。

テキストVRAMの開始アドレスが、PC-8001はF300Hからで、BUBCOM-80はF200Hからとちょっと違って
いたりもしますが、その対応をすれば、PC-8001のソフトは簡単な修正でほぼすべて動作する作りになっていた
のではないかな、と思います。特にマシン語のゲームなどは、移行しやすそう。


1981年には、PC-8001の上位機種であるPC-8801が登場しますが、ある意味、このBubcom-80もPC-8001の後継機種みたいな気がします。


BUBCOM-80はそれなりに売れてはいたようですが、当時のFM-8やPC-8801には叶わず、パソコン雑誌にも
ほとんどBUBCOM-80用のプログラムは掲載されなかったと思います。本当に残念、、。

しかも、MZ系と同じくクリーン設計がなされていて、ROM-Basic搭載機でも、ROM情報を一度RAMに展開して
Basicが起動するし、後のシャープのX1 (1982年発売) と同様、VRAMをIO空間に配置してバンク切り替えに頼らずに
高解像度グラフィックスを実現してたり、キャラクターフォントを自由に変更するPCGを搭載していたので、
当時の御三家であるNECSharp富士通のいいところどりをしていたような、先進的なパソコンであったように
思います。



さらに、この当時はパソコンで通信を行うのは一般的ではなかったですが、BUBCOM-80は通信機能も充実していたらしい、、。
1982年には、ハードディスクもシステムズフォーミュレートから発売されているし、、。

http://radioc.web.fc2.com/column/pcad/ad/hdbc800.htm

今年(2018年)になって、エミュレーターをいくも開発しているTakeda氏が、100台目のエミュレータとしてこのBubcom-80のエミュレータを公開されました。

http://takeda-toshiya.my.coocan.jp/

ぜひ試して見たいけど、ROMの入手がほぼ不可能、、。残念です。BOOT ROMだけ適当に作って、機械語でプログラム作れば動作するかな、、、という感じです。

Haskellでいろいろ遊んでみる

初心者向けテーマとして、ブラックジャックが面白い、らしいので、Haskellで作成してみました。

https://qiita.com/KNaito/items/385fb1701f70ffb8ffd4

で、Qiitaの記事には完成したものしか書いてないのですが、そもそも自分が普通のプログラミング(いわゆる手続き指向型プログラミング)思考になっているため、本当に基本的なことでつまづきまくりました。

例えば、整数を2で割った値を返し、1の場合は1を返す次のような関数を定義してみます。


func :: Int -> Int
func 1 = 1
func x = x `div` 2

Haskellに慣れていない人のために、JavaScriptで書くとこれは


function func(x) {
if (x==1) return 1;
return Math.floor(x/2);
}

こんな感じ。

でもって、これを呼び出すときに


main :: IO ()
main = do
let x = 10
let y = func x
print y

と呼び出せば、期待通り10を2で割った5が表示されるのですが、変数の名前を節約したいと思って


main :: IO ()
main = do
let x = 10
let x = func x
print x

としてしまうと、無限ループしてしまいます、、。

理由は多分、print xの段階で遅延評価がはじまり、そこでx = func xの右辺を計算しようと
するのですが、右辺のxは、結局同じ式のx = func xで定義されているので、x = func func x
となっていまい、そのまた右辺のxを計算しようとして、x = func func func x ...と無限ループ
してしまうようです。

数学的には

体調はまあまあ

血圧が正常値の範囲になり、ここのところ体調もまあまあOK。
休日に外出すると、1時間くらいでもう疲れてしまうくらい体力はないけれど、普段の生活に支障なし。

最近、Haskellが面白い。

セキュリティとプライバシーの設定画面で、「許可」ボタンがクリック出来ない

Macで設定から「セキュリティとプライバシー」の画面を選択し、
「いくつかのシステムソフトウェアの読み込みがブロックされました。」と表示された右にある
許可ボタンをクリックしても、何も反応がない。

もちろん、画面下の「変更するにはカギをクリックします。」とクリックしていても。

これもすごくハマってしまいましたが、要はリモートデスクトップ(リモート画面)からは「許可」ボタン
をクリックしても反応しないとのこと。
実機で作業すれば正しく動作しました

Thunderbirdが起動できない (Mac)

Thunderbirdを起動しようとしたら、「すでに別のThunderbirdを開いています。同時に複数のThunderbirdを開くことはできません」というエラーが出て、Thunderbirdが使えない

検索して調べて見るも、.parentlockファイルを削除するように書いてあるが、.parentlockファイルがどこにあるかがわからない、、。何度か試行錯誤するうち、High Sierra (Sierraも?)では

~/Library/Thunderbird/Profiles/ホニャララ.default/.parentlock

にあることが判明し、これを削除することで無事起動出来ようになりました。

ちなみに、Firefoxのlockファイルはこちら

~/Library/Application\ Support/Firefox/Profiles/1vlazryw.default/.parentlock


こちらの記事にもありました。エラー文言が違うので検索でヒットできなかった、、、。
http://www.edu.gsic.titech.ac.jp/node/73

Windowsの場合は、AppData\Mozillaにあるらしいです。
http://kb.mozillazine.org/Profile_folder#Where_is_my_profile_folder.3F

Xcode 9.2でストーリーボードがパッケージされない問題

このため、iTunesConnectにアップロードしても審査でリジェクトされる。
iPadで開こうとするとクラッシュするためだ。

ログを見てみると、次のようなエラーが出ていた。


: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'hogehoge~ipad' in bundle NSBundle


このエラーが出た場合、storyboardファイルをリムーブして再度組み込むとか、Localizationに対応するとか
いろいろ情報があったが、それらを試みてもダメだった。

そして、結局のところ、Xcode 9.2だと

hogehoge.storyboard
hogehoge~ipad.storyboard

の2ファイルがあると、

hogehoge.storyboard

の方しか組み込まれないようだ。(パッケージの中身を確認すると、hogehoge.storyboardcしか入っていない)

なので、ファイル名を変更して

hogehoge.storyboard
hogehoge_ipad.storyboard

としたところ、正しく動作するようになった。(もちろん、ViewController側でも読み込むファイル名を
変更した)