投稿

5月, 2017の投稿を表示しています

Apple2のローレゾグラフィックにPOKE命令で書き込むには

イメージ
どうも。Apple2のプログラミングにドはまりしているものです。さて、ドットを矢印キーで動かすことに成功し、大きなマリオの絵も配列とFOR文により移動させることに成功しましたが、いかんせんBASICで書き換えると正直アニメーションにならないのです。遅すぎて。CPUがMhzの時代がいかに遅かったのか痛感するいいきっかけになりました。(仲間に見せて大笑いしました)しかし、せっかく頑張って書いた絵もこうなっては… そこで、Apple2に備わっている機能の一つである「ページ切り替え」とPOKE命令でどうにかできないかと試行錯誤した結果どうなったのかを今回は紹介しようと思います。 ■そもそもPOKE命令とはなにか?  POKE命令とは、「パソコンのメモリの番地を指定してデータを直接書き込む」という動作を行います。「どこどこのこのメモリにこのデータを書き込め」という風に書き込むので、Apple2の場合は POKE 番地,データ と書き込むことにより指定のメモリ番地にデータを書き込むことができます。 そして、こちらがapple2のメモリマップというどこに何のデータが書かれているかが 一覧になっているサイト です。この中に、pageとpage2というものがあるのですが、ここのメモリ範囲を1ページ2ページと扱うことにより高速に画面を書き換えることができるという機能があります。 そこでこれを利用して2ページ目のメモリに絵のデータを書き込んでしまおう!というわけなのですが、実はこの「2ページ目」の扱いが絵だけに割り当てられていなかったのです。というのがこちらの画像をご覧ください。 POKE 49237,0と打ち込むと表示できる「2ページ目」 このようにプログラムデータが書き込まれてしまっているのです。つまり、重要なデータが書き込まれているこのエリアのメモリを画像書き換えしてしまうと次に何をするかというデータが消えてしまい、フリーズして復帰不可能!それまで頑張って書いたプログラムはすべて消えてしまいます(何回か消しました!)  また、それまで色のデータを書き込む際には PLOT Xの位置,Yの位置  と打ち込んでいましたが、メモリーに直接書き込むとなる場合は全く異なります。まず、メモリーとドットの位置は39バイトごとに縦に16ドット分(

Macintoshフロッピーエミュレーター作ろうとして詰んだ話

イメージ
レトロマックでいろいろと実験していて一番問題になってくるのは、フロッピードライブの問題です。どうしたものかと思案しているとこんなサイトを発見。 http://www.bigmessowires.com/floppy-emu/ なんとあの特殊なフロッピードライブをエミュレートしてくれるそうで、やったぜ買おう!と思ったらいつみてもSOLD OUT(´・ω・`) どうしたものかと思案するうちに、いいやつくってしまえと思い立ちやってみたのがこちら。 無数の配線を何とか終えて、USBASPとAVRDUDEでHEXファイルを書き込みLCDに文字を表示するところまでは何とか出来たものの、 「FATAL ERROR SD card error 1:255」 の文字が表示されてSDカードを読み込んでくれません。とほほ・・・心当たりといえば、SDカードが推奨されている4GBではなく16GBで、かつmicroSDであること。でも水晶ってだけで認識しないとは書かれていないんですよね。あと、8MBのSDでも試してみましたが、こちらはFAT32でフォーマットができなかったのが原因なのかも? もし誰か原因がわかる方いらっしゃいましたらお助けくださいまし…

AppleWin でApple2のゲームプログラミングに挑む

イメージ
Windows10でも動きます。 ひょんなことからAppleWinというApple2のエミュレーターをダウンロードしたので、標準でついているBASIC言語でなにかゲームを作れないかと思案したものの当時のプログラミング方法について書かれた資料が非常に少なかったうえApple2でプログラミングする方法について書かれた日本語サイトも少なかったので記憶の整理がてら書いていこうと思います。 CATALOG:フロッピーディスクに描かれている内容を見る SAVE セーブデータ名:フロッピーにプログラムデータを名前を付けて保存     書き方:SAVE PINBALL LOAD データ名:指定のデータを読み込む     書き方:LOAD PINBALL  IF文条件式の書き方 「~かつ~のとき」と書きたいとき IF (  条件  ) AND (  条件  ) THEN 飛ぶ先なり結果 DATA文 :DATA 1,2,3… このように書けば、複数のデータを一度に描ける。キャラのドット情報やマッピングに必須。 READ文: READ 変数 先ほどのDATA文からデータを読み出す命令。複数のデータも、配列とFOR文を書けば管理は簡単だが、指定の場所のDATAを読み出すことはできないようで。 FOR文: FOR I=0 TO 15 STEP 2 ほとんど通常のFOR文と変わらないが、通常なら1++などと書くところをSTEP 数字 と書くところに注意。 一応、Apple2 program reference と検索すればそれなりに情報は出てきます。ぜひ往年のプログラムに浸るもよし、昔のプログラムに浸ってみるのもいかがでしょうか? ちなみに私は 画面上の緑と白のブロックを取ればクリア。青いブロックが操作するキャラ。 プログラムを実行すると、マリオの画像が左から右へ流れる。 といったものを作ってみました。うえのものはパックマンのようなものを作ろうと思い、まずはマップの表示とキャラクターのあたり判定を確認し、二枚目は複雑な画像の表示と座標の移動を実験しました。どちらもとりあえず目的は成功しましたので満足満足(・ε・) しかし1MhzのCPUの世界なので、非常に遅くこれではゲームにならない…やはりアセンブラに手