水島雄太のブログ

個人的かつ雑多なブログです。

201809112

モチベーションが回復してきた

最近モチベーションが下がりに下がっていたのだが、ふとしたきっかけで自転車を乗り始めたり、懸垂の習慣がついてきたおかげか、モチベーションが上がってきた。

最近このblogも全く更新していなかったが、モチベーションの回復に併せて復帰することにしよう

B2Eサービスの開発

ちょくちょく進めているB2Eサービスの開発。 今日はモデル周りをちょっと実装。 それほど複雑なものでjはないので、今月中に実装終わらせてしまいたい。

20180319

SEGA MASTER SYSTEMのメモリ管理

  • ベースユニットは8kbyte ROM and RAM
  • フロントスロットカードリッジのの現在の容量は 32 kb . 128kbカードも動く
  • Z80A は 64 kb メモリーへのアドレッシングができる。シンプルなメモリ管理システムが組み込まれている
  • モリーマップは 0番地から始まる8kb ROM
  • 8 kb RAMは C000番地からはじまる

システムRAM

RAMは二つの部分に分けられる * $C000 - $DFFF * $E000 - $FFFF

これらはZ80Aのスタックと一時記憶装置として使われる

上から8個目までのRAMはメモリ管理制御レジスタとして使われる。ゲームプログラムとして使ってはいけない。

前方互換性のため、 RAMは $C000 - $DFFF までのアドレッシングに抑える必要がある。

スタックは $DFF8 に配置される必要がある。

MEMORY ENABLES

$3E ポートはメモリー使用フラグを制御する。 個々のbitでシステムROM、システムRAM、カードスロット、拡張スロットのメモリを使用できるようにする。

電源ON 時のメモリー選択

電源ONになったときに、8 kb ROM の$0000から実行がはじまる。 このROMコードは以下のステップで実行される 1. システムが初期化される 2. 小さなプログラムがROMからRAMにコピーされる($C700で) 3. プログラムを実行するために$C700 にジャンプする 4. 全てのROMスペースはdisableされる。そして、RAMにコピーされる ?? 5. ROMスペースはここに設定され、メモリの存在をチェックされる。 それらは以下の順番でチェックされる A. フロントカードスロット B. トップカートリッジスロット C. 後部外部拡張スロット 6. これらの三つのスロットからメモリーは発見され、スロットは使用可能にされる。そしてZ80Aは $0000 にジャンプする 7. メモリーが見つからなければコンソールROMが使用可能にされ、”Insert a cartridge" メッセージがスクリーンに表示される

もし、カードとカートリッジが両方とも接続されていたら、最初にチェックされてカードが優先される

ゲームプログラムはオリジンの$0000 から始まるZ80Aアプリケーションプログラムとして記述される

20180316

SEGA master system の VDP仕様

github.com の続き。

  • VDP はセガが開発したカスタムチップで、 TMS9918Aを強化したようなアーキテクチャ
  • 解像度は 256 pixel * 192pixel
  • 64色パレットから16色利用可能
  • 16 kb のRAMが描画のために割り当てられている(いわゆるビデオRAM)。ビデオRAMは直接VDPチップにつながれており、Z80のメモリースペースには表れない(つまり、Z80はVDPレジスタを介してビデオRAMにアクセスする
  • VDPは二つの独立した描画システムを実装している(背景とスプライト)

ビデオRAM構成

16 kb のビデオRAMは三つの領域に分割できる

  • スクリーンマップ(1792byte)
    • キャラクターセルの位置を決定する(つまり、タイル)
    • 24grid 32スクリーン?
  • スプライトアトリビュートテーブル(256byte) XY座標 64の移動可能なオブジェクトやスプライト?
  • キャラクタジェネレータ(14336)
    • 8x8 の背景パターン *スプライトのための8x8 8x16 のキャラクターパターン
  • 32byteのビデオRAMは一つの8x8ピクセルのキャラクターを定義できる(最大448キャラクターまで)\
  • 三つのビデオRAM領域はVDPレジスターから制御される
  • 16K ビデオメモリマップ

明日からCPU実装に入る。

20180315

SEGA master system の仕様について

SEGA master systemJavaScriptで書かれたエミュレータ 

[https://github.com/ymizushi/Miracle:title]

が大変参考になる。

このリポジトリdocs でほぼ必要な情報を入手することができる。

特に重要なのが、mk3man.pdf だ。

このドキュメントは以下の章から成り立っている。

  • CPU
  • VDP(the Video Displya Processor)
  • メモリ管理 (the Memory Management System)
  • 入出力 (the Input/Output System)
  • PSG音源(Programmable Sound Generator)

CPU

  • Mk3 は 3.58 MHz の ザイログ Z80A 3.58MHz CPUを使っている
  • Z80A は電源ONになったときにリセットサイクルが実行される。ゲーム機のリセットボタンは直接Z80AのRESETを操作することはできず、リセットボタンは入力に対してのソフトウェアポーリングで実現されている。

割り込みシステム

  • マスク化不可能割り込み NMI (Non-Maskable Interrupt)
  • マスク化可能割り込み INT (Maskable interrupt) の二種類がある。

NMIピンはゲーム機のポーズボタンに接続されており、ポーズボタンを押すことで $66番地のリスタート命令が実行される。

この命令は短銃なサブルーチン呼び出しとして実装されており、プログラムカウンターはスタックにプッシュされ、 $006番地に飛ばされる。

割り込みはエッジ・トリガで、ポーズボタンが押下されたら、一つの割り込みのみ取得することができる。

つまり、連続で割り込みが実行されることはない(前提として、チャタリング回避などのコンデンサがあることが前提と思われる。なので、チャタリング防止のためのコンデンサがMk3にはあるはず)。

NMIの最後の命令は必ず RETN である必要がある。

ポーズボタンは特定用途で使用する。$0066に制御の移行セットアップ処理を記述する必要がある。

INT => Interrupt IE => Interrupt Enable Bits

今日はCPU。

次は、VDP。

20180220

中毒になりつつ溺れないことが重要

とある分野で秀でるにはその分野においてある種の中毒状態になるのが重要だと思っているが、一方で単なる中毒状態だと目標達成のために必要な情報収集、基礎練習、応用練習が十分にされないこともある。

中毒状態を維持しつつも、中毒におぼれず目標達成のために必要なことを意識することが継続的な成長に重要。

20170215

ルーチン

  • S99 P50
  • FP in Scalia 1章読み直し
  • Splatoon2 アロワナ立ち回り研究

帰りが遅くなると自由時間が減りがちなので、早い出社、早い退社を心がけたい。

ストレス

人間は生きているとと大なり小なりストレスを感じるが、外的要因でストレスを感じる場合と、内的要因でストレスを感じる場合に大別出来る。

実際に発生している問題とそれで感じるストレスが同じ場所から発生しているなら良いが、実際は外的要因なのに内的要因としてストレスを感じていたり、その逆でストレスを感じていたりすることもある。

これは問題を間違って認識していると言うことであり、PDCAを回す上の障壁になるので取り除く必要がある。

問題解決のためのセパレート思考を読んだ

まとめ

  • セパレート思考とは、問題を分割する、という問題を解くための基本的な方法を言い換えたもの
  • セパレート思考では引き算が大事。例えばやりたいことではなく、やりたくないことから消去法でやることを選択する、優先順位が低いものを切り捨てる、といった考え方が必要

20180206

今日やったこと

  • fpinscala Ex3.1(20分)
  • 今日一日のまとめを声に発する(5分)

sbtで何故か失敗したので、予定を変更してfpinscalaを軽くやる。 今日は予定があったので、習慣が途切れないように最低限の作業だけやる

脳の血流量をいかに上げるか

10年来の鬱とADHD傾向が改善した 良い記事というか、自分の持論が代弁されていた

人生はディシプリンというか一種の訓練期間だという固定観念を持っていて、それと同時に、より効率的に自身を訓練できる人間がより優れた人間なのだという価値観を持っている

つまりそれは脳に対する血流の低下である

血流の低下に対して効果的な方策というのは、まさに自分がいろいろ調べてたどり着いた結論と全く同一だ。

これらの結論に同様に至ったということは、自分の持論に説得力が出てくるということもあり、以前よりも持論に確度を持たせることが出来た。

理論が正しいなら、あとはどのようにして実践するか、という問題にフォーカスできるということが大きい。

あと、持論として自分は持っていたが明確に言語化出来なかった項目として、様々な種類のインプットとアウトプットを行うというのがある。

特にアウトプットが重要で、以下のようなアウトプットをもっと習慣に取り入れることを今後意識してみる。

  • 書く
  • 描く
  • 話す
  • 解く
  • 運動する

20180205

モチベーション低下の諸要因

  • 食生活の乱れ
  • 運動不足
  • 過大なストレス
  • 睡眠不足
  • 学習する習慣の欠如

今日やったこと

  • 昔TypeScriptで作ったLispインタプリタScalaで再実装(途中)
  • Splatoon2 ホットブラスター立ち回り
    • 途中から漫然とやってしまったのはすごくよくなかった

寝る前に思考を声に出してみる習慣

最近思考力や会話能力が極端に衰えているのは、会話が少ないからという仮説が出てきたため、意識的に発話によって思考を整理する時間を最近設けている。

割と効果はある。

20180204

UbuntuでのScalaFXの導入備忘録

JavaFXはOpenJDKに含まれておらず、明示的にOpenJFXをインストールする必要がある。

sudo apt install openjfx で解決。

Ubuntu 16.04 に ソース からvim8 + Python2/3 サポートをconfigureしてインストール

git clone git@github.com:vim/vim.git
cd vim
./configure --with-features=huge \
            --enable-multibyte \
            --enable-rubyinterp=yes \
            --enable-pythoninterp=yes \
            --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
            --enable-python3interp=yes \
            --with-python3-config-dir=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu  \
            --enable-perlinterp=yes \
            --enable-luainterp=yes \
            --enable-gui=gtk2 \
            --enable-cscope \
            --prefix=/usr/local
make VIMRUNTIMEDIR=/usr/local/share/vim/vim80

スプラトゥーン2でスランプに陥った時にやること

はじめに

スプラトゥーン2は競技ですが、競技であることから当然、スランプというものがあります。

スランプに陥った際にいかに素早く脱出出来るか、ということは練習の効率を上げる意味でも重要です。

備忘録も兼ねて、スランプに陥った際にやることをまとめてみます

休む

まずいちばん重要なことは休むことです。

スプラトゥーンは気力と体力を消耗しますが、熱中していると意外とその消耗に気づかないことがあります。

睡眠時間が短い期間が長引くと、眠くなくても集中力が落ちている可能性があります。

十分な睡眠や休息を取りましょう。

PDCAをしっかり回せているかを確認する

スランプに陥る原因として、PDCAを回す習慣が抜けてしまった可能性があります。

PDCAを回さない期間があると、ある程度手癖で勝てる期間が過ぎた後に、勝てなくなる期間が続くことが多いです。

PDCAを回さないとすぐに勝てなくなるというわけではなく、少し時間差があるということを意識する必要があります。

PDCAを回せていることが意識できるように、デスした時に必ず原因を口に出しておく、プレイ録画を撮っておきあとで敗因を分析する、などを習慣づけましょう。

情報収集を行う

スプラトゥーン2は継続的にアップデートされており、ブキ・ステージの追加・調整が頻繁に行われています。

アップデートにより、環境に適したブキ・立ち回りが変わるため、情報収集を怠っていると、時代遅れの立ち回りになりかねません。

最新の情報を攻略wikitwitter,youtubeなどで常に最新の情報をキャッチアップをしているか確認する必要があります。

基礎練習を行う

エイム練習やさんぽなど、基本的な練習を怠っていると、一定期間過ぎた後にスランプに陥る確率が高いです。

慣れてくると基礎練習をサボりがちになる人が多いと思いますが、エイムの感覚は実践以外にも基礎練習を怠っていると、安定しませんし、雑なエイムになりがちです。

正しいエイム・立ち回りで記憶を上書きするために、毎日エイム練習・さんぽをかかさずしているか、ということを意識しましょう。