水島雄太のブログ

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

ダイナモローラーテスラ

ダイナモローラーテスラでようやくS+5まできた。

ウデマエXまであと一息。この調子で頑張ろう。

ダイナモ系の武器はステージ毎の立ち回りが超重要。 強ポジではめっぽう強いが、ずっと強ポジにいるだけでは、ボムコロで対策されたり、潜伏でキルを狙われるので、如何に強ポジを維持しつつも、狙われないかがとても重要。

ダイナモが特に気にするべきブキは以下の三つ

  • チャージャー系
  • ブラスター系
  • 傘系

上記以外も特にメタれるブキというのはあまり存在しない。

20180918

今日は画像などアップロード機能まで使った。 毎日帰ってから1時間実装、1時間半スプラトゥーンで、休日は画像予定埋めてしまうことが多いので進捗は出しづらいな。

もうちょっと実装時間取って行きたい。

スプラトゥーンが調子良いので早くウデマエXになって別のこと始めたい。

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を回す上の障壁になるので取り除く必要がある。

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

まとめ

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