読者です 読者をやめる 読者になる 読者になる

スプーキーズの中の人。

スプーキーズの中の人が徒然なるままに、垂れ流します。

spookiesまでのアクセスガイドin京都本社

f:id:spoo-imamoto:20160825125717j:plain

京都市営地下鉄 烏丸線 四条駅を降りて北改札から出ます。

f:id:spoo-imamoto:20160825125755j:plain

目の前に見える階段を登りましょう!

f:id:spoo-imamoto:20160825125815j:plain

すると阪急の四条烏丸駅の改札が見えてくるので、そこを右に曲がります。

f:id:spoo-imamoto:20160825125817j:plain

真っ直ぐ進むと19番出口という文字が。

f:id:spoo-imamoto:20160825130009j:plain

f:id:spoo-imamoto:20160825121600j:plain

四条烏丸FTスクエアには入らずに、左に曲がり階段を登ります。

f:id:spoo-imamoto:20160825130027j:plain

四条通に出てきましたね。出て少し歩くと吉野家が見えます。

f:id:spoo-imamoto:20160825130021j:plain

吉野家を目印に、右に曲がります。

f:id:spoo-imamoto:20160825130025j:plain

f:id:spoo-imamoto:20160825121635j:plain

ビル稲葉が見えてきました。

f:id:spoo-imamoto:20160825121637j:plain

f:id:spoo-imamoto:20160825121648j:plain

f:id:spoo-imamoto:20160825121649j:plain

エレベーターに乗って2Fへ!

f:id:spoo-imamoto:20160825121705j:plain

健康をハックしよう

人生マニュアルを買ってみた

こんにちは!東京オフィスのTKです.
最近はすっかり暑いですね.暑すぎて外に出るのも嫌になりますね.

ところで,近頃プログラマの中で話題になっている本があります. そう!ソフトスキルズですね!ソフトウェア開発者のための人生マニュアル!

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

英語が得意な方はこちら

Soft Skills: The Software Developer's Life Manual

Soft Skills: The Software Developer's Life Manual

僕もひよっこソフトウェア開発者として,買って読みましたが,
とてもためになることが書かれています.

やっぱり,体が大事!!

本書の中でも,やはりいちばん共感できたのは

第6部:やっぱり,体が大事

ですね!
中でも,

第60章:筋肉のつけ方:オタクでも膨らむ上腕二頭筋

の箇所ですね!

コードは僕を裏切っても,筋肉は僕を裏切りません.
筋肉はサーバーエラーシンタックスエラーなんて起こさないんですよ!!
鍛えれば鍛えるほど膨らむんですよ!!最高!!

炎天下,ジムの中が一番涼しい

DNS(ドメインネームシステムじゃないですよ!)さんの筋肉格言ですね.

www.dnszone.jp

ジムというのは,朝も夜も,腫れも曇りも,夏も冬も関係なく
運動できる全天候型の施設で,しかも筋トレは一人で黙々とできるので,
僕のようなひきこもり型ぼっちにはもってこいの趣味になっています!

お盆休みは,色々とゴールドジムを回ってきたので,
いつかその話ができたらなと思います!

みなさんも Let's train hard ! f:id:TKei:20160820215001p:plain

最後に

今度,サーフィンにいこうとしていたのですが,残念ながら台風で行けなさそうです…悲しい…

Spookiesの『ちょっと若手で合宿でも行ってきたら?』

6月某日。



社長西塚は告げる。

「ちょっと若手で合宿でも行ってきたら?」



合宿?

それなら、しっかり綿密に計画しないといけないな。




・・・1週間後。

f:id:spookies-takano:20160727211007j:plain

f:id:spookies-takano:20160727211235j:plain

Spookies若手勢は、炎天下の中『熱海』へ降り立ちました。

「合宿、何やるの・・・?」

合宿何やるの

f:id:spookies-takano:20160727214522j:plain

急遽決まった、Spookies若手合宿。

現地に着いて「何やるの?」という状態はさすがにありませんでしたが、合宿までのわずかな時間を使って行程を決めていきました。

Spookiesでは、この春に沖縄での開発合宿を行い、次の9月にもまた開発合宿が開催される予定です。

blog.spookies.co.jp

今回は少数の若手メンバーでの実施となり、特にテーマも与えられず、機会だけが与えられた形になります。

(京都・東京の若手で交流の場を設けてもらったとは言えます。)

機会があるなら最大限活用しようということで、事前に合宿の目的設定をしていくことに。

  • 業務改善?
  • ハッカソン?
  • 勉強会?
  • もくもく会?
  • 研修受ける?
  • イベント参加?
  • アウトドアでアクティビティ?
  • 大いに遊ぶ?
  • ・・・最強目指す?(雑)

参加メンバーは、主担当のプロジェクトが異なったり、エンジニアもいればマネージャーもいて役割も経験も様々。

2泊3日と言えど、実質的な時間は1.5日程。事前準備に時間もとれない。

さあ、若手たち、何するの!?




というような若手同士の話し合いを経て、合宿前日にようやくテーマが決定。

やること

  • アイディアソン

大テーマ

  • ゲーム企画とプロトタイプ作成

中テーマ

  • 設定した売上目標金額を達成しうるゲームの立案

小テーマ

  • ゲームモデルの追求
  • ビジネスモデルの追求

目的

  • やりたいことをやる!作りたいものを作る!
  • そのために、あとは形にするだけの状態に。
  • 手を動かすことよりも、考えをまとめることを優先。
  • 前倒しできるようであれば、形にするよう動いていく。

弊社の案件でゲーム開発に関わっているメンバーが多いのと、(ボードゲームなども含めた)ゲーム企画をやりたいという声を元に、やることの方向性が決まる運びとなりました。

あとは、合宿で成果をあげるのみ。

以下、合宿の概要になります。

日程

参加メンバーの都合の合う日で調整。

6/25(土), 26(日), 27(月)

  • 25(土):昼に現地集合、作業
  • 26(日):作業
  • 27(月):各自の担当業務の状況により、それぞれのタイミングでオフィスへ帰社。

場所

熱海 f:id:spookies-takano:20160727215435p:plain

宿

山木旅館(http://www.yamakiryokan.co.jp/f:id:spookies-takano:20160727214756p:plain

  • 〒413-0015 静岡県熱海市中央町14−9
  • TEL: 0557-81-2121

宿の決め手

アクセス

​京都〜

  • 京都駅-(新幹線)- 熱海駅
  • 2時間

東京〜

  • 東京駅-(新幹線)-熱海駅
  • 1時間

合宿の様子

状況を伝えるには、視覚的に、すなわち写真を用いるのが宜しいかと思っております。

しかし、熱海到着の前後からどうもカメラ(iPhone6Plus)の調子が悪く、遠景がぼやけてしまっている次第でした。

ピントの合わない写真は4割増しの鮮明さを想像しながら、雰囲気でお楽しみ下さい。

お世話になった宿、山木旅館は大変よかったです。 f:id:spookies-takano:20160727230925j:plain

部屋はなかなかの広さ。

f:id:spookies-takano:20160727232939j:plain f:id:spookies-takano:20160727232956j:plain

ご飯はボリューム満点。 f:id:spookies-takano:20160727231342j:plain f:id:spookies-takano:20160727232455j:plain

海も近い。 f:id:spookies-takano:20160727234145j:plain f:id:spookies-takano:20160727234303j:plain

遊技場も近い。 f:id:spookies-takano:20160727233700j:plain f:id:spookies-takano:20160727233836j:plain

温泉にはいつでも入り放題で、快適極まりないです。



ただし。

一点ご注意を。



宿にWi-Fiがありませんでした。\(^o^)/

(2016/6/27現在)

確かに参考にした記事は2013年のもの。 しかし、2016年に入ってからも開発合宿が行われた記事はいくつか見受けられていたので、まさか無くなるとは。

結局、手持ちのポケットWi-Fiやデザリングで事無きを得ましたが、ネットの情報を鵜呑みにせずしっかり確認することが大事だという話でした。

ちなみに、有線LANはあるようです。

結果は

肝心のゲーム企画の方はというと、この合宿で一つの企画書に仕上がりました。

合宿後、社内で報告したところ、プロジェクトとして採用され、開発が進められることとなりました。

まだ企画内容を公開できる段階ではありませんが、現在鋭意製作中です。

9月の開発合宿では、チームに分かれてこのプロジェクトを形にしていくことになりそうです。

Unityで開発しているので、興味のある方は気軽にSpookiesに遊びに来てください。

社員・アルバイトともに、新たなメンバーを募集中です!

www.wantedly.com

総括

急展開で、計画から実行まで進んだ若手合宿でしたが、無事終わりほっとしています。

一つの企画として報告できたことで、実りあるものになったと言えるのではないでしょうか。

しかしそれ以上に、若手同士で集まれたこと、語り合えたこと、普段はSkype越しでつながっている京都メンバーと東京メンバーが同じ空間で密な時間を過ごせたこと、それぞれに強い意味があったと感じています。

ぜひとも、メンバーを増やして次回合宿の開催を期待したいところです!

貴重な機会をありがとうございました。

Unity VR EXPO に行ってきました!

 f:id:moritanian:20160722192333p:plain

VR(Virtual Reality)やら、IOTやら話題になる今日この頃、東京秋葉原でUnityの主催するVRコンテンツの展示会が先週開催されたので、行ってきました。 自分もunityを使っているのでかなり興味をもっていました。

 現在発売されているVR機器は主に3つ、OculusVR, HTCVive, GearVR、があります。大きな違いは、OculusVRとHTCViveはPCにつなげて使用するのに対し、GearVRはスマホ(Galaxy)を機器に挿入し、Galaxyを画面として利用します。また、レンズのついた段ボールにスマホをセットしてVR体験ができる箱スコもありますね。今回のVR EXPOではOculusVRとHTCviveがほとんどでした。

なかなか人気のイベントで、どの展示も体験するのに順番待ち状態でした。

浮遊系はオモシロイ

f:id:moritanian:20160722192121j:plain

展示の全てを体験はできなかったのですが、以外と面白かったのが、秋葉原の街を浮遊しながら、浮かぶ風船を割っていくゲームでした。ビジュアルはそれほど作りこんだ感じではなかったのですが、浮遊感がめちゃめちゃ楽しく、ハマりました。

 開発者の方に話を伺ったのですが、入力装置を工夫したようです。というのは、OculusVRは入力デバイスとしてOculusTouchをOculusVRと同時に発売すると発表していたのですが、OculusTouchは発売延期になり、未だ発売されていないこともあり、入力方法をどうするのかということに対して混乱があるようです。

 また、これはHMD全般にいえることなのですが、プレイヤーの視線の方向と実際の進行方向は異なるため、HMDに内蔵されている位置/姿勢センサ以外の入力が必要になります。このゲームでは、リュックを背負って、回転する椅子に座って体験するのですが、何とリュックの中にはプレステのコントローラが入っていました!また、イスにも回転を知るためのエンコーダのようなものがついていました。かなり入力に関して試行錯誤されたことが見てとれました。

 しかしながら、開発者の方曰く、逆に正規の入力デバイスがないことで様々な入力装置の工夫が生まれ、発展できるのではないかということでした。

まとめ

 全体的な感想としては、かなり作りこまれたものから、単なるVRのデモみたいなものまでバラバラで、VRは技術、環境としてはかなり整ってきたが、コンテンツとしては、まだ発展途上、試行錯誤の段階だな、ということを感じました。これがブームとして終わらずに、1つのコンテンツとして成長していってほしいなと強く思います。

Dark Souls III

初めまして。今年の2月からスプーキーズでバイトしている「さんちゃ」と申します。

今までも「ちょっとTech」の方には何度か記事をアップしていましたが、ぼちぼち技術的なネタが切れてきたので、趣味の話でもして、お茶を濁します。

趣味

最近の私の趣味はこれです:

ご存知の方も多いと思います。ダークソウル3です。 テスト期間も近いというのに、学校にもバイトにも行かず、ダクソばっかりやってます。

この記事では、ダークソウルの面白さについて語りたいと思います。

ダークソウル3とは

PS4/PC/Xbox One向けに発売されているアクションRPGです。

どういうゲームなのか簡単に言うと、フィールドの中を敵を倒しながら探索し、ボスを倒して次のエリアに向かう、というのを繰り返すゲームです。

公式サイト曰く:「ダンジョン探索の緊張感、敵と遭遇したときの恐怖、新しい発見による喜びなど、RPGが本来持っている根本的な面白さと、高い達成感につながるゲームデザインを追求した本格ダークファンタジーアクションRPGです。」

まさにこの通りのゲームだと思います。

何が面白いのか

高い難易度設定

ダークソウルシリーズは、死にゲーであるというのが一つの大きな特徴です。 アクションゲームに慣れ親しんでいる人も、油断していると即死にます

道中の敵の配置を覚え、ボスの癖のある動きに対応し、何度も死んでコンティニューして、生きるか死ぬかギリギリのところで敵を倒す、というところにこのゲームの面白さがあります。

独特な世界観

もう一つの特徴として、その独特な世界観が挙げられることも多いです。 ベースとしては、中世ヨーロッパの「剣と魔法のファンタジー」の世界なのですが、ダークファンタジーを謳うだけあり、登場人物のセリフ回しやアイテムの説明など、いちいち厨二病臭い雰囲気があります。

好みが分かれる世界観だとは思いますが、ハマるとだいぶ楽しめます。

オンラインプレイ

ダークソウルシリーズのオンラインプレイには、大きく分けて協力と敵対の二種類があります。

協力プレイ

先ほど述べたように、ダークソウルシリーズは難易度が高いため、一人で攻略するのが大変な場面もあります。 そのような時は、インターネットを介して、他のプレイヤーに協力を要請することができます。

一人では倒せないボスも、大勢でタコ殴りにすれば楽々倒せる、というわけです。

敵対プレイ

強いボスを倒せずに、徒党を組むプレイヤーを見ると邪魔をしたくなる、という人はこちらを好むでしょう。 敵対プレイは、フィールドを探索している他のプレイヤーの世界に侵入し、そのプレイヤーを倒すことが目的です。

人数的不利、回復アイテムの制限、体力の減少など、全体的に侵入した側が不利となるようなルールなのですが、それだけに、侵入して勝利すると、思わずガッツポーズをしてしまうほど脳汁があふれ出ます。

ダークソウル3

シリーズ3作目ということですが、1作目や2作目とはストーリーのつながりはほとんどなく、ダークソウル3からでも全く問題なく始められ、かつ楽しめると思います。

昨今のヌルい難易度のゲームに飽きた、もっと歯ごたえのあるゲームをやりたい、という方、ぜひダークソウル3をプレイしてみてください!

参考

www.darksouls.jp

当記事の画像は、すべて上記公式サイト様から引用させていただきました。

月間スプーキーズ

こんにちは、7月になりましたね。
京都では祇園祭が始まり、「コンチキチン」の祇園囃子の音色が心地よく響いておりますが皆さんいかがお過ごしでしょうか? 今年は梅雨らしく雨がしっかり降っておりますが、夏は夏らしく暑くなるのでしょうか。

さて、弊社のこの1ヶ月のイベントを誰得?情報としてお伝えしたいと思います。

フットサル

プログラマーも外で運動せねばということで、年に数回のペースで実施してたのですが、ここ2年程やってませんでした。 久しぶりに、いつもの フットサルスクエア京都南 さんでコートを借りて実施しました。

初心者ばかりなので

  • 1チーム5人でやるミニサッカーのようなもの
  • スローインはなく、キックインだよ
  • オフサイドはないよ

のような説明をしながら、 「怪我だけはするなよー」と言って開始します。

f:id:spookies-nishimura:20160704022827j:plain

いつもどおり他の企業さんも誘ってみたのですが今回は都合がつかず、 アルバイトメンバーが友達を連れて来てくれて、なんとか10人(=2チーム。誰一人離脱できない・・)。

  • 1試合7分
  • 休憩1〜2分

というハードな2時間を過ごしました。

20代は流石に元気で、休憩時間も元気に走り回ってましたが、 わたくしはもちろん足がつりましたYO。 産まれたての子鹿ちゃんでしたYO。

f:id:spookies-nishimura:20160704022833j:plain

これからは数ヶ月に1回やる予定ですので、京都の企業様、是非一緒に汗を流しませんか!!

若手合宿

ここ数年で若手メンバーが着実に成長してくれております。 そんな若手だけが京都・東京から集まり、日本を代表するリゾート地「熱海」に合宿に行きました。

なぜ熱海なのか、若人は熱海で何をしたのか。そのあたりのレポートは、また後日。 f:id:spookies-nishimura:20160704024201j:plain ※激しくピンぼけ

末金会

月末の金曜に飲みに行く会(前職で使われていたキャッチーなネーミングをパクリ)なんですが、 なんとネーミング無視で月の初めの金曜に行いました。

普段からオフィスで業務以外の事も話してはいるのですが、 こういった場を設けることで改めてメンバーの意外な一面を知ることが出来てとても楽しいです。

今回は都合がつかず参加出来なかったメンバーもいたのですが、基本的には全員+OBも含めてワイワイと。 ボードゲームを持ち込んで遊んだりもしています。

f:id:spookies-nishimura:20160704023447j:plain

まとめ

この1ヶ月で目立った行事としては以上ですが、
それ以外にも毎週開催してる改善ミーティングで、 業務やオフィス環境の問題点、福利厚生案などを各メンバーから出してもらってます。

細かいところで

  • レイアウト変更
  • 備品の充実
  • 形骸化したミーティングの改善

など。

お仕事なので楽しいことばかりではありません。 その他で改善できる箇所はとりあえずはやってみよう精神で実行できればと思っております。

以上、不定期な月間スプーキーズでした。

Hello VMWorld!!

f:id:furuhashi1346:20160701103055p:plain

Hello World.

ブログでははじめまして!

東京オフィスに3週間前に入ったアルバイトの古橋と申します.

大学に入って4年勉強していますが,まだまだ未熟者なプログラマーです.

さてさて,書くこともないので私の最近興味あることについて書いていきます.

It's VM Machine!

ずばり,仮想マシンについてです.

仮想化技術といってもいろいろありますが,私はVMマシンについて興味があります.

まずはかなり低レイヤーのことについて書いていきます.

0,1の羅列が嫌いな方はここで回れ右するのが賢明だと思います(笑)

アーキテクチャはVAXでやっていきます.

ってことでまずはVAXの特徴について説明していきます!

About VAX

VAXはVirtual Address eXtensionのことで、32bitの仮想アドレスを使用しています.

仮想アドレスなので,実際のアドレスを指しておらず,オペレーティングシステムの制御のもとでプロセッサによってメインメモリにアクセスします.

なので,メインメモリをより効率的に制御することができます.

VAXは基本,6種類のデータタイプを扱います.

データタイプ サイズ
バイト 8bit
ワード 16bit
ロングワード 32bit
クォドワード 64bit
オクタワード 128bit
浮動小数点 32~128bit

これに符合ありかなしか,また浮動小数点にも4種類あり,パック10進数か,...など,細かくすると色々あります!

レジスタの使い方にも種類があり,レジスタモードとアドレシングモードに分かれます.

汎用レジスタは32bitが16個用意されています.

そして,アドレシングモード…これが肝です!

肝と言いましたが,なかなか複雑なので後々説明するかもです.

Decryption of the source code

はい,もう細々言っても伝わりづらいと思うんで面白いことしましょうか.

ソースコードをDisAssembleしましょう.

みなさん,アセンブラ好きですか?私は大好きです.(錯乱)

みなさん,バイナリ読むのは好きですか?私は大好きです.(錯乱)×2

では解析してみましょう.

こちらアセンブラ言語で書かれたものです.

  1:  .globl _main
  2:  _main: .word 0
  3:
  4:  pushl $6
  5:  pushl $hello
  6:  pushl $1
  7:  calls $3, _write
  8:
  9:  pushl $0
10:  calls $1, _exit
11:
12:  hello: .byte 'h, 'e, 'l, 'l, 'o, 10

上のところはいいとして,これの解説いきます.

まずは4~7についてです.

これはwrite関数を呼んでいます.

pushlで引数を格納しています.pushlはpush longwordの略です.

つまり,書き換えると,write(6, hello, 1)です.

callsの3はwriteの番号のことです.これはどこかのファイルに定義されています.

9,10はexit()を呼んでいます.つまり終了です.

ほとんどの人はわかってると思いますが,これ,helloって出力してるだけです.

Let's analyze

これをバイナリにしてみましょ〜DON!

0000000 : 08 01 00 00 8C 00 00 00 04 00 00 00 04 00 00 00 
0000010 : 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
0000020 : 00 00 C2 08 5E D0 AE 08 6E 9E AE 0C 50 D0 50 AE 
0000030 : 04 D5 80 12 FC D1 50 BE 04 19 02 D5 70 D0 50 AE 
0000040 : 08 D0 50 EF D8 01 00 00 FB 03 EF 0D 00 00 00 DD 
0000050 : 50 FB 01 EF 28 00 00 00 BC 01 00 00 00 00 DD 06 
0000060 : DD 8F 58 00 00 00 DD 01 FB 03 EF 21 00 00 00 DD 
0000070 : 00 FB 01 EF 08 00 00 00 68 65 6C 6C 6F 0A 00 00 
0000080 : 00 00 FB 00 EF 03 00 00 00 BC 01 00 00 00 04 00 
0000090 : 00 00 BC 04 1E 06 17 EF 04 00 00 00 04 00 00 00 
00000A0 : D0 50 EF 7D 01 00 00 CE 01 50 04 00 00 00 00 00 
00000B0 : 63 72 74 30 2E 6F 00 00 04 00 00 00 00 00 00 00 
00000C0 : 65 78 69 74 00 00 00 00 02 00 00 00 01 00 00 00 
00000D0 : 68 65 6C 6C 6F 32 2E 6F 04 00 00 00 3C 00 00 00 
00000E0 : 68 65 6C 6C 6F 00 00 00 04 00 00 00 58 00 00 00 
00000F0 : 65 78 69 74 2E 6F 00 00 04 00 00 00 60 00 00 00 
0000100 : 63 6C 65 61 6E 75 70 2E 04 00 95 01 6C 00 00 00 
0000110 : 77 72 69 74 65 2E 6F 00 04 00 95 01 70 00 00 00 
0000120 : 63 65 72 72 6F 72 2E 6F 04 00 49 02 80 00 00 00 
0000130 : 5F 65 78 69 74 00 00 00 05 00 28 03 60 00 00 00 
0000140 : 73 74 61 72 74 00 00 00 05 00 AB 01 00 00 00 00 
0000150 : 5F 6D 61 69 6E 00 00 00 05 00 18 02 3C 00 00 00 
0000160 : 5F 65 6E 76 69 72 6F 6E 07 00 25 01 00 02 00 00 
0000170 : 5F 77 72 69 74 65 00 00 05 00 2D 04 70 00 00 00 
0000180 : 5F 5F 63 6C 65 61 6E 75 05 00 95 01 6C 00 00 00 
0000190 : 63 65 72 72 6F 72 00 00 05 00 49 02 80 00 00 00 
00001A0 : 5F 65 72 72 6E 6F 00 00 09 00 35 00 04 02 00 00 

わ〜きれい(棒)

最初の方にheaderと呼ばれるコードの情報が書かれているのでこれを解析します.

 MAGIC : 0x00000108
  TEXT : 0x0000008C
  DATA : 0x00000004
   BSS : 0x00000004
  SYMS : 0x00000100
 ENTRY : 0x00000000
TRSIZE : 0x00000000
DRSIZE : 0x00000000

これにより,TEXTデータは0x8Cの長さってことがわかります.

ってことは,TEXTデータは以下のようになります.

*** memorytext ***
00 00 C2 08 5E D0 AE 08 6E 9E AE 0C 50 D0 50 AE 
04 D5 80 12 FC D1 50 BE 04 19 02 D5 70 D0 50 AE 
08 D0 50 EF D8 01 00 00 FB 03 EF 0D 00 00 00 DD 
50 FB 01 EF 28 00 00 00 BC 01 00 00 00 00 DD 06 
DD 8F 58 00 00 00 DD 01 FB 03 EF 21 00 00 00 DD 
00 FB 01 EF 08 00 00 00 68 65 6C 6C 6F 0A 00 00 
00 00 FB 00 EF 03 00 00 00 BC 01 00 00 00 04 00 
00 00 BC 04 1E 06 17 EF 04 00 00 00 04 00 00 00 
D0 50 EF 7D 01 00 00 CE 01 50 04 00 

ここにたくさんのじょうほうがかきこまれています.

これをさらにかいせきします.

***
pc : 00000000 textBuf[pc] : 00
HALT
***
pc : 00000001 textBuf[pc] : 00
HALT
***
pc : 00000002 textBuf[pc] : C2
SUBL2
レジスタモード
val1 : 8
Register : SP val2 : FFFFB
setValue : FFFF3
***
pc : 00000005 textBuf[pc] : D0
MOVL
バイトディスプレイメント
ope.setVal(memory.readMemory(FFFFB, 4))
Register : SP
readVal : 0
レジスタディファードモード
mov val : 0
writeMemory(FFFF3, 0, 4)
***
pc : 00000009 textBuf[pc] : 9E
MOVAB
バイトディスプレイメント
ope.setVal(memory.readMemory(FFFFF, 1))
Register : SP
readVal : 0
レジスタモード
val1 : FFFFF
R0 val : FFFFF
***
pc : 0000000D textBuf[pc] : D0
MOVL
レジスタモード
バイトディスプレイメント
ope.setVal(memory.readMemory(FFFF7, 4))
Register : SP
readVal : 0
mov val : FFFFF
writeMemory(FFFF7, FFFFF, 4)
***
pc : 00000011 textBuf[pc] : D5
TSTL
Inc val : 4
val : FFFFF
val1 : FFFFF
N : FALSE,Z : FALSE,V : FALSE,C : FALSE
***
pc : 00000013 textBuf[pc] : 12
BNEQ
PC : 13
val : 11
val1 : 11
BName BNEQ
***
pc : 00000015 textBuf[pc] : D1
CMPL
レジスタモード
addr : FFFF7 val : FFFFF
val1 : FFFFF  val2 : 0
***
pc : 00000019 textBuf[pc] : 19
BLSS
PC : 19
val : 1D
val1 : 1D
BName BLSS
***
pc : 0000001B textBuf[pc] : D5
TSTL
オートデクリメント
addr : FFFFB
val : 0
val1 : 0
N : FALSE,Z : TRUE,V : FALSE,C : FALSE
***
pc : 0000001D textBuf[pc] : D0
MOVL
レジスタモード
バイトディスプレイメント
ope.setVal(memory.readMemory(FFFFB, 4))
Register : SP
readVal : 0
mov val : FFFFF
writeMemory(FFFFB, FFFFF, 4)
***
pc : 00000021 textBuf[pc] : D0
MOVL
レジスタモード
ロングリラティブディファード
addr : 200
val : 0
mov val : FFFFF
***
pc : 00000028 textBuf[pc] : FB
CALLS
ロングリラティブディファード
addr : 3C
val : 0
calls
val1 : 3
val2 : 3C
val : FFFEF
last : 3
entryMask : 0
nextPC : 2F
maskInfo : E0000000
PC : 3E
***
pc : 0000003E textBuf[pc] : DD
PUSHL
val1 : 6
***
pc : 00000040 textBuf[pc] : DD
PUSHL
val1 : 58
***
pc : 00000046 textBuf[pc] : DD
PUSHL
val1 : 1
***
pc : 00000048 textBuf[pc] : FB
CALLS
ロングリラティブディファード
addr : 70
val : 0
calls
val1 : 3
val2 : 70
val : FFFC8
last : 0
entryMask : 0
nextPC : 4F
maskInfo : 20000000
PC : 72
***
pc : 00000072 textBuf[pc] : BC
CHMK
val : 4
index : FFFC8
dataNum : 3 index : FFFC8
index : FFFCC
dataNum : 1 index : FFFCC
index : FFFD0
dataNum : 58 index : FFFD0
index : FFFD4
dataNum : 6 index : FFFD4
ap : 000FFFC8 val1 : 3, val2 : 1, val3 : 58 val4 : 6
write(1, 0x58, 6)
sysWrite
hello
len : 6
R0 : 6
***
pc : 00000074 textBuf[pc] : 1E
BCC
PC : 74
val : 7C
val1 : 7C
BName BCC
C = false
***
pc : 0000007C textBuf[pc] : 04
RET
***
pc : 0000004F textBuf[pc] : DD
PUSHL
val1 : 0
***
pc : 00000051 textBuf[pc] : FB
CALLS
ロングリラティブディファード
addr : 60
val : 0
calls
val1 : 1
val2 : 60
val : FFFC0
last : 0
entryMask : 0
nextPC : 58
maskInfo : 20000000
PC : 62
***
pc : 00000062 textBuf[pc] : FB
CALLS
ロングリラティブディファード
addr : 6C
val : 0
calls
val1 : 0
val2 : 6C
val : FFFA8
last : 0
entryMask : 0
nextPC : 69
maskInfo : 20000000
PC : 6E
***
pc : 0000006E textBuf[pc] : 04
RET
***
pc : 00000069 textBuf[pc] : BC
CHMK
val : 1
index : FFFC0
dataNum : 1 index : FFFC0
index : FFFC4
dataNum : 0 index : FFFC4
exit(0)

一つ一つ説明していきます.

その前に…PCとはプログラムカウンタのことでこの値の番地の命令が行われます.

これを操作することでifとかjumpとかやるわけです.

上から見てみましょう.

  • halt : 特に何もしません.実際はやってますが初期化みたいなものです.

  • subl2 : longwordの引数を2つ取ってきて引き算します.

  • movab : byteのアドレスの引数を二つ取ってきて第一引数のアドレスの内容を第二引数のアドレスに格納します.

  • movl : longwordの引数を2つ取ってきて第一引数に第二引数を格納します.

  • tstl : longwordの引数を持ってきて,それによって条件を付与します.0ならZフラグをtrueにマイナスならNフラグをtrueにしたりします.

  • bneq : branch on not equal の略で,Zフラグがtrueなら引数の番地にジャンプします.

  • cmpl : 第一引数と第二引数を引き算して,0ならZフラグをtrueにマイナスならNフラグをtrueにしたりします.

  • blss : Branch on lessの略で,Nフラグがtrueなら引数の番地にジャンプします.

  • calls : カーネルモードに移行して関数を実行します.いろいろやってて読み解くのが難しいです.

  • ret : callsで保存した内容を元に戻します.関数を実行する前の状態に戻すと言ったほうが正しいですかね.

  • pushl : longwordの引数を持ってきて,スタックにプッシュします.

  • chmk : カーネルモードに移行します.これの引数によって実行する関数が違います.4の場合はwrite,1の場合はexitです.

  • bcc : Branch on Carry Clearの略で,Cフラグ(キャリーフラグ)がtrueの時に引数の番地にジャンプします.


あんな短かったコードでもこんなことやってるんです!

複雑でしょ?うん,でもこれ理解できるとかなり面白いんです.

面白いんです!

ってことでこれを解説出来る機会があればいいな…

これが面白そうって思った人は私と同じ人種です!

では,中途半端ですが,See you next time!