6503がようやく動いた報告

イメージ
  回路図まで載っけて作りましたと宣言した前回。 いざ色々動かそうとしたものの、 プログラムがまともに動かないので試行錯誤してたら何年たってたんですかねこれ 。月日が経つのは怖いですね。 今回ようやく6503と6532が無事に動きました。 何につまづいたのかというと、多分アセンブラの文法です。 6502系のアセンブラって結構豊富で、 いろんなところから出てるんですがそれぞれアドレスの表記とか微 妙に違うんですね。 で、 今回久しぶりにca65というアセンブラを使用してみたのがつま づいた原因でした。 一度設定すれば大体の6502系には対応できるのが魅力ですが、 本当よくわからないmakeファイルの設定とかで地獄を見ました 。 以下何やってたのか簡単にまとめていきます。 新しい道具も作ったよ! ■:まず動かない いや、電気は通ってるしクロックは走ってるんですよ。 なのに6532の挙動がおかしくてIRQはでっぱなしだしcpu は止まるし訳がわかりません。 そこで今一度6532のデータシートを読むと、 「 NMIとIRQはオープンコレクタなので 必ずプルアップすること 」 ってあるんですね。何その罠。 というわけでプルアップ抵抗を追加しました。 これでcpuがすぐに止まる事故は解決… と思いきやまだ止まります。というか出力がよくわからない。 そこで大昔に作りかけてやめた出力確認用LEDパネルを作成する ことにしました。 ■:めちゃくちゃ便利なLEDパネル 5年くらい前にこんなの作ったら便利やろってLEDだけ並べて、 回路に不備があることに気がついてなげたもの。 今ならなんとかできそうってことで抵抗とトランジスタ をばーっと取り付けて、 カードエッジからも表のポートからも入力できるようにしました。 これまでは毎回ブレッドボードでled回路組んでたんでクソめん どくさいし抜けるしで散々だったのですが、 これで見やすい簡単出力もicに負担がなく万々歳になりました。 やったぜ。 まあ回路図書かずにえいやっと作ったので裏はすごいことになって ます。ちゃんと整えて、 入力スイッチもつけて体裁整えたら普通に便利道具になりそう。 クロックパルスも出せるようにしたいですね。 ledドライブのために2sc1815を贅沢に使用してます。 意外と高いですがいつ買ったのか結構あったので奮発...

[ソフトがないなら]Macintosh Plusでプログラミング 1日目[自分で作る]

ごつくてかたくて少し小さいこのキーボードが癖になる。ただしすごくうるさい。

あれから本を片手にMSBASICにてプログラミングをいじってみたのでその感想とそこそこのためになるかならないかの知識をまとめてみました。
頑張ってこの本を一冊(300P)終わらせればきっと最後にはソフト一本作れるようになれると信じて頑張る。

一日目・キー入力について

最初にテキストに出てきたのは画面の操作方法でもなくプログラム側からどうやってキーボード入力を取得するかのお話。ちなみにプログラム実行の際には

Command(⌘)+Rで実行
Command(⌘)+「.」で停止

というもの。実行すると自動で描画ウインドウが立ち上がり、実行結果が表示されます。ほとんど今の開発環境と変わらないと思い来や、まず矢印キーが使えないのとCommand(⌘)+Aで全体選択ができない、実行画面は新しくコードを描きなおして実行してもリセットされないので

CLS : 描画画面をリセットする

という命令を一番上に挟まないといけません。面白いですね。実行内容と実行される画面が別々で管理されてるって感じがします。

そして今回のメイン関数は

INKEY$   : その時のタイミングで入力された内容を取得し、変数の中に入れる。押されていなければ0を返す。
INPUT$() :かっこの中に指定された文字の分だけ文字を取得し、変数の中に入れる。キーが押されかっこの中の分まで文字が入力され終わるまで次の命令は実行されない。

といった感じ。この両方が変数に対して文字列型の数値を返すため必ず

X$ = INKEY$

といった感じに書かないとMacintoshから怒られます(笑)自分はしょっちゅう間違えたんでえらい時間がかかりました。ちなみに、変数Xの後ろにある$マークは「この変数は文字列型だから文字を入れられるよ」という意味になるそうです。だからINKEYの後ろにも$が付いているんです。

そのほかにも(というかそのほかのほうが多いのにすごいあっさり終わる)

LEN() : かっこの中に入れた変数の長さを取得し数値で返す。例えば、12345という数字が入っていたら5桁なので「5」という数値を、「おはよう」なら4文字なので「4」という数値を返す

IF ~ THEN ~ ELSE ~:おなじみIF文。使い方は{}がないぐらいで今とほとんど変わらないが一つ注意したいのがELSEを改行して書いてはいけないということ。思わず行番号もないので見やすくするために改行してしまうが、同じ一文として認識されなくなってしまう。すべて1行の中に書かなきゃいけない。(すごく面倒)

;」 : 必殺同じ行に何個も書けちゃうコマンド。乱用すると意味不明になる。また、重要なのはPRINT文でのこの用い方。下で解説。

PRINT : おなじみいろいろ出力コマンド。””で挟めばメッセージが、変数をつなげれば変数の内容を返してくれる。メッセージと変数をつなげて表示したい場合は

PRINT "Hello,World";X

といったかんじになる。

FOR I=0 TO X NEXT I NEXTの前にSTEP 1 というように増減値を指定することもできる):おなじみFOR文。処理はくそ重い。

といった感じでした。また、ラベル指定もあり、名前の後ろに「:」をつけるとその行までgoto文で飛べるようです。すごい便利。
初日からえらい量だけど、まあ単純なものばかりだからたぶん大丈夫。それよりもテキストがすべて英語なのがつらいですね。がんばって続けてオリジナルのゲームを早く作りたい・・・!

コメント

このブログの人気の投稿

ファミコンの完全自作ROM&カセットを作ろう!!その1~立ちはだかるコンパイラの壁~

ファミリーベーシックでゲームプログラミング

ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜