私的FC/NES開発環境、プログラミング編

このエントリーはDumBoがFC/NES開発に使っているツール類を
備忘録として書き留めておく為のものである(プログラミング編)。

当方主にWinOS+NESASM+秀丸エディタという組み合わせで開発している。
これから初めてみたいと考える方の参考になれれば幸いだ。

●処理系

スキルセットと好みでチョイスすれば良いと思う。

・NESASM
 camsaul/nesasm: NESasm -- NES 6502 assembler, version 3.1
 thentenaar/nesasm: nesasm 2.51 - modifications by Bob Rost
 MagicKit Homepage - MagicKit v2.51
 FC/NESプログラミングに特化したアセンブラ
 昔から使われておりweb上の文献も其れなりに充実している。

・cc65/ca65
 cc65 - a freeware C compiler for 6502 based systems
 cc65 - a freeware C compiler for 6502 based systems - old site
 C言語で開発出来るのが特徴。ca65を用いればアセンブラでの実装も可能。
 以前より利用者が増えたため、こちらも情報には困らない。

・NESmaker
 HOME | Nesmaker
 プログラミング不要でゲームが作れる。
 GB StudioのFC/NES版的存在。

テキストエディタ

シンタックスハイライト機能が有るエディタを使おう。
詳しく無いので未記載だが、unix系で人気のvi、Emacs
Vimといったエディタも良いらしい。

秀丸エディタ
 秀まるおのホームページ(サイトー企画)-秀丸エディタ

サクラエディタ
 サクラエディタ

Visual Studio Code
 Visual Studio Code - Code Editing. Redefined - 公式サイト
 Visual Studio Code - コード エディター | Microsoft Azure

●テキスト比較

有ると便利なテキスト比較ツール。
小規模プロジェクトなら無くても大丈夫かな。

WinMerge
 WinMerge - You will see the difference…

・DF
 DFの詳細情報 : Vector ソフトを探す!

スクリプト言語

ちょっとした作業の自動化や小物ツールが必要になった時など、
ささっと書いて直ぐ試せる環境は何かと便利だったりする。

Python
 Welcome to Python.org
WSH (JScript/VBScript)
PowerShell
windowsバッチ コマンド
シェルスクリプト (sh/bash/csh/…)

基板シコシコ

ここ最近ずっと基板をシコシコと製造しているのだが、
作ったうちの5%くらい歩留まりが出る事に頭を悩ませていた。

該当パーツはフラッシュやSRAMといったメモリ製品。
ROMライタによる単体テストでは問題無く。

恐らくは部品の個体差や組み合わせが
回路通り動かない原因ではないかと考える。
(イチイチ製造を止める訳にもいかないので、
 調査は後回しで不良品は避けて置いてる状態。)

新品中古関係無く発生しているので、
大量生産あるあるな話なのだとは思う。

次の出し物に向けて

次の出し物に向けて、FCカセットシェルを買い出し。

ウチでは一気に消化出来ないであろう分量を敢えて注文。
今後の頒布物によっては付属していく予定。

因みに…元々黄色で頼んだハズだったのに
何故か同じ暖色系のオレンジで届いたのはご愛敬。
黒系色と違い細かい傷が然程目立たないので
こちらでも問題は無かった。

2023/05/28 追記:
10個だけ全部爪有りの裏側だったので使えないが、
残りは全て表裏揃っていたので問題無しとしよう…。

ハロワもどき

ちょいと急ぎでマッパー0プログラムが必要になったので
昔のプロジェクトからソースコードを持って来て作成。

ぶっちゃけると定義済み任意文字列を何行か出力するだけの、
hello, worldに毛が生えたようなプログラムであり、
1度でも書いた事があればそう難しいものではない。

しかしまあ、個人的には納得いかない代物だったので、
次はせめてイラスト表示するぐらいのものは用意しておこうと思った。

ウォームアップ中

先日買ったPython入門書をボチボチ読んでいるのだが一部文法が端折られている?<1年生の方
見落としかも知らんけど。
繰り返し処理のwhile文が記載無く。別途Qiitaの記事で補完するなど。

【初心者向け】無料でPythonの基本文法を5時間で学ぼう! - Qiita

なお、C言語のswitch文に当たるものが存在しないようで。
代替手段として紹介されている辞書型を使った分岐の書き方が良さげだった。

【Python入門】switch文の代わりに使える書き方 | 侍エンジニアブログ

ちな3.10からmatch文とやらが追加されたが、
caseに続く比較対象が式ではなく文字列なので利用シーンは限られるだろう。

Pythonでswitch/case文がない理由は?代用方法を解説! | プログラミングを学ぶならトレノキャンプ(TRAINOCAMP)

空を飛びたいモンティ・パイソン

追加で買ったパイソンズ。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ | 森 巧尚 | コンピュータ・IT | Kindleストア | Amazon

Amazon.co.jp: Pythonではじめるデスクトップアプリ開発入門 eBook : 久我 涼子: 本

日経ソフトウエア 2022年11月号 [雑誌] | 日経ソフトウエア | コンピュータ・テクノロジー | Kindleストア | Amazon

SQLを修めたいという話の続きだが、
言語習得のため開発の手間を抑えつつ何か作るのであれば
Pythonが妥当だろうと言う事で。

インタプリタ言語なので書いて直ぐコードを実行できる
・デスクトップアプリ、GUIアプリが作れる
・SQLite3が標準サポートされている

個人的にはこの辺りが選択の決め手。
SQL同様、こっちも覚えるのはこれからだけど…。

シークェル

Amazon.co.jp: SQL 第2版 ゼロからはじめるデータベース操作 eBook : ミック: 本

[改訂第4版]SQLポケットリファレンス | 朝井 淳 | 工学 | Kindleストア | Amazon

去年覚える目的で買ったものの、
これと言って作りたい題材も浮かばず
ものにするまで至らなかった言語。

勤め先で今後頻出して来るっぽいので、
今年こそは其れなりに扱えるよう
改めて学び使っていきたい所存。

ラトネット リニューアルオープンSALE中につき

ラトルズさんのネットショップで萌え技術書を2冊程購入。
現在リニューアルオープンSALE中だそうで。

【電子版】最新版 12歳からはじめる ゼロからのC言語ゲームプログラミング教室 - 出版社ラトルズ公式ネットショップ - 出版社ラトルズ公式ネットショップ

【電子版】12歳からはじめる ゼロからの Pythonゲームプログラミング教室 - 出版社ラトルズ公式ネットショップ

4/23(日)まで電子書籍が最大50%OFFとの事。
気になる方はお早めに。

久方ぶりの投稿

前回投稿から随分と経ってしまったが twilogサービス終了に伴い、はてなブログに戻ってきた。

近年作業ログはツイッターのサブ垢で取っていたが、 特に最近はログ残しに不便な仕様となった為。 (モーメント作成機能の廃止、ブックマークの見える化API変更による関連サービスの相次ぐ終了等)

あとまあ、作業中の呟きは細々やっていたいとか、 TLに流れてくるツイートが凄いものばかりで 焦燥感に駆られるのが嫌だった、というのもあるけど。

そんなこんなで、ぼちぼち再開してこうと思うので よしなに~。

GBDKで何か作ってみる。(2)

PSクラシック、色々ハックされていて俄然欲しくなってきた。
ともあれ今はまだ、何をするにしても敷居が高い段階で、静観している状態。
(本体改造、ゲーミングキーボード入手等が必要な為。)


それはそれとして置いといて。


現在のGB開発状況としては、、
書き起こした設計書を元に実装を進めつつ、
GBDKに不足しているライブラリの追加を行っているところ。


printfのエスケープシーケンスによる画面制御が無いのは予想ついてたけど、
memsetが含まれていないのは想定外だった。


Wikipediaのソース移植したけど。


mem.c (memset関数の追加)

#include <types.h>

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
void *memset(void *buf, int c, size_t num) {
//------------------------------------------------------------------------------
	unsigned char *ptr = (unsigned char *)buf;
	const unsigned char ch = c;
	
	while (num-- > 0)
		*ptr++ = ch;
	
	return buf;
}


cons.c (コンソール画面の全消去、行消去)

#include <stdio.h>
#include <gb/console.h>

//------------------------------------------------------------------------------


//---------------------------------------------------------------------------
void consoleClearLine(UINT8 y) {
//---------------------------------------------------------------------------
	gotoxy(0, y);
	printf("                    ");
	gotoxy(0, y);
}
//---------------------------------------------------------------------------
void consoleClear(void) {
//---------------------------------------------------------------------------
	UINT8 i;
	gotoxy(0, 0);
	for (i = 0; i < 18; i++)
		printf("                    ");
	gotoxy(0, 0);
}