投稿

6503がようやく動いた報告

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

6502の姉妹CPU、R6503を動かしてみる+6532RIOTについて調べてみる

イメージ
 時はコロナ前。秋葉原にて手に入らない部品の一つに、6502というCPUがありました。 幸いにも65C02という互換品?が今でも発売されていたのですが、残念ながらマルツ経由でも手に入れることができないため絶望的だった時代から始まります。 以前秋葉原の部品でApple1を作ると宣言してもう数年経ってるんですけど、一番困ったのがここでした。肝心かなめのCPUが秋葉原で調達できないとか笑えないです。なのでずっと探してたっていう言い訳をさせてくださいオネガイシマス。 ■|6502は手に入らない、けど姉妹CPUなら若松にある。 秋葉原でレアなCPUを探すならラジオデパートかラジオ会館と相場が決まっていると思うのですが、そこでもなしのつぶてでどうにもならない日々を送っていたある日。若松通商さんのホームページを検索していると、"6503"という型番のCPUを見つけたのです。 早速突撃して話を聞いてみるとなんと店頭にあるとのこと。(確か店頭にあった気がします。間違えていたらごめんなさい)そこで早速購入してみると、なんだか足の数が少ないんです。 それがこちら。 下のの40PINの大きいやつが6502。んで、小さいのがその入手した6503というCPU。 なんで秋月の袋があるかって?朗報です。ついに秋月が6502を取り扱うようになりました。みんなも6502で電子工作しましょうぞ!! 話を戻しまして。 当時6502には数多くのカスタム版が出回っており、かの有名なATARI2600のCPUも6507というカスタム版を搭載しております。ではこのカスタム版とは何かというと、6502を基準にしてメモリアドレスを減らしたり、機能を絞ったりしたまあ要は廉価版みたいなものですね。ただでさえ機能を絞っている6502をさらに縮小しているのですが、それでも使いやすい設計になっているあたりいかに6502が優れた設計をしていたのかが偲ばれるというものです。 で、今回入手したこの6503はどのようなものなのかというと、 メモリアドレスは4KByte RDY、SYNKなどはなし ピンは28本 というコンパクトなものです。 一応、データシートの記載の翻訳と、画質が低くて見えなかったので書き起こしたPin assignmentもといピンアサインを貼っておきます。 (Rockwell R650X an

6532RIOTについて学ぶ

イメージ
 6532の資料が少ない。 6502系のCPUを触ったり、AtariVCSとか触ったりすると出てくるこの6532RIOT。 日本語資料なんてもちろんないので、後の自分が楽できるように以下に仕様書を翻訳したものを書いていきます。どっかにあったらそっちを読むか、やっぱり公式資料読むのが一番いいと思います。 ちなみに私の英語力は3なのでクオリティはお察しです() それでも日本語でwikiより詳しい内容は読めるので便利…なのかも? 【インターフェースシグナルの説明(割り込みピンとかの説明)】 Reset(RES) システムをリセットしている際に、このピンにLOW信号を与えると6532の4つのI/O用内部レジスタをZEROにし、出力もZEROにセットします。これにより、すべてのI / Oバスが入力として機能し、システムがソフトウェア制御下で構成されている間、外部コンポーネントを起こりうる損傷や誤ったデータから保護します。 Read/Write(R/W) CPUから6532にデータを読み書きするために使用します。HIGHなら読み込み、LOWなら書き込みを行います。 Interrupt Request(IRQ) 割り込み信号用ピン。基本は3kΩの抵抗でプルアップしておくことをお勧めします。 なお、6532側のIRQピンは、PA7の遷移またはインターバルタイマーのタイムアウトによってアクティブになる場合があります。 I/O Ports(PA0 - PA7,PB0 - PB7) 6532には16pinの周辺機器とやり取りができるI/Oポートがあります。 どのピンも個別にソフトウェアで制御ができ、入力または出力ポートとして制御できます。 これらの16ピンはPA0-PA7,PB0-PB7の各8bitのポートとして分割して制御することもできます。なお、PA7は特殊な用途があるため後程説明します。 データ方向レジスタに「0」を書き込むことにより、それぞれが入力として設定され、対応するビットが出力になります。 入力モードの場合、ペリフェラル出力バッファは「1」状態になり、内部プルアップデバイスはペリフェラルデータラインへのTTL一つ分未満の負荷として機能します。 I/Oポートの読み出し操作をすると、CPUはこれらの周辺ピンを読み出すことになります。 6532を通して周辺デバイスからデータを読み

久々に週刊MyRobot、ID-01を出して中を調べてみた。

イメージ
以前、家にある 変なロボット の記事を書きました。 このロボットなんですが、当時はどの部品がどういう仕事をしているのか正直モーターとセンサーぐらいしか分からずに組み立てていたのですが、今になってそれなりにわかるようになったため、試しにどういう部品が使われているのか、あわよくば今の技術でプログラミングできるのか調べてみることにしました。 ■このロボットのCPUはなんなのか? ID-01が発売されたのは2006年なので、もう10年以上前のふるーいCPUが積んであることは明白なのです。おまけにIntel系のノートパソコンとかに使用されているようなものは使用されているはずがないので(電池駆動ロボットで、そんな電気バカ食い発熱CPUなんて使用できるわけがない)、ちょっと中をひっさしぶりに調べてみることに。で、調べた結果、 モトローラ社のDragonBoll MX-1 (訴えられそうだな)というCPUが搭載されていることが判明。うん?モトローラ社?えーっとすごい聞き覚えがある。このブログにとても関係ある会社だと思ったら、MacintoshPlusに使用されているMC68000を開発した会社でした。さらに、このロボットで使用されているCPUはその68Kシリーズの後継CPUだったのです。 https://ja.wikipedia.org/wiki/DragonBall https://www.atmarkit.co.jp/news/200106/14/arm.html 発表はなんと2001年。とんでもなく古いCPUです。シリーズは今でも続いているようなのですが、速度とか色々不安になります。まあ期待する方がおかしいのですが。期待するならラズパイに置き換えるのが一番早い。 また、いわゆるAVRマイコンやPICマイコンと違い、プログラミング環境に難があります。というかなんのソフトを使用すれば書き込めるのか見当がつきません。当時のid-01のプログラミングツールを解析する必要があるでしょう。 ちなみにこちらがその当時のプログラミングソフトが入っているCD。プログラムは無事に動いたのですが、XPに特化したファイル構成&Javaインストール祭り&互換性で死にかけました。こう見るとやっぱり古いソフトなんですねぇ… ■音声認識モジュールについて このロボットの最大の魅力はなんといっても音声認識部分

MZ80を起動せよ!画面バッファを利用した高速書き換えプログラム

イメージ
古いPCやゲーム機のプログラミングをしていると、その描画速度の遅さに四苦八苦することが度々あります。今回のMZ80もそうで、BASICで素直に描画するととんでもなく遅く、お話になりません。 そこで、アセンブラで描画処理の部分を描いてしまえばあとはどうにでもなるのでは?というかエミュレーターでテストできるならアセンブラでガリガリ書けば速度なんとかなるのでは? (MZ80のすごいところは、描画中にメモリアクセスのウェイトをかけていないことです。映像は乱れますが、強引かつ高速に描画を繰り返すことが可能です。) そう考えた結果、潤沢?なメモリを搭載しているMZ80のシステムを利用し、フレームバッファを用意して、スプライト画面・背景画面を合成、描画メモリへ転送するシステムを設計してみました。 メモリ転送とアドレス管理の考察 ■|そもそもMZ80はどうやってテキストを描画しているのか 上記の漫画にも記載したように、MZ80にはz80のメモリエリア上に画面に表示するテキストバッファが割り当てられている設計となっております。 そのメモリエリアはD000h~D3E7hまでの1000byteとなっております。 というのも、表示できる文字数が横に40文字、縦に25行となっているためですね。 そのため、疑似ドットグラフィックはこの2倍の(1文字に2ドット分配置されているため)縦50ドットx横80ドットの解像度として絵を表示することができるのです。 そして今のPCのようにラスターフォントで表示しているのではなく、VRAMには画面に表示するフォントのコードを書き込んでおります。そのため、任意のフォントグラフィックに書き換えて表示するといったような機能は搭載されておりません。  VRAMに書き込まれた文字コードがそのままグラフィックを記録しているROMにアドレスとして読み込まれ、フォントデータが出力される仕組みになっております。  そのため、搭載されているフォントグラフィックROMを差し替えれば、任意の文字グラフィックスに差し替えることが可能です。 ■|書き換え速度の問題と、VRAM転送問題  ゲームを作るうえでカギになるのはこの描画速度です。例えば、PRINT文で書き換えた場合は必ず1Fで1回しか処理されないため、描画速度がどうしても遅くなります。 ましてや、スクロール画面などの画面全体を書き

MZ80を起動せよ!MZTファイルを実機に読み込ませてみた

イメージ
 乱数引くまで諦めるな 前回はBASICでいろいろやってみてまあ遅いよねチクショウ!というお話でした。あとゲームの表現どうしようってお話でしたね。 このご時世、非常にありがたいことに様々なエミュレータが開発されており、WindowsPC情でMZ80のソフト開発を行うことができます。そのため、アセンブラでゴリゴリコードを書くことができるわけです。 でも、肝心の実機で動かしたいのに実機で動かすにはカセットテープデッキに読み込ませないといけないわけですが(フロッピードライブ経由から読み込ませることもできますがこれが大変)じゃあどうすればいいのですかって悩んでいましたらTwitterで助言をいただきました。それがこちらのカセットテープアダプターっていうものなのです。 車 カセットアダプター カセットテープ アダプター カセット アダプター カーカセット アダプター スマートフォン用Bluetoothテープコンバーター車載バッテリー用カセットアダプター こちらです。何これって思われた方に説明すると、いわゆるカセットデッキに対して音楽データをテープの形を使って送ることができるというもので、カセットテープしか再生できないクラシックカーでこのアダプターを通して最新の音楽を聴くことができる、という代物です。 なので、これに対してPCからMZTファイル(MZ80などのプログラムデータをセーブデータにしたもの)を音データに変換すれば、MZ80のカセットデッキに対してデータを送ることができる、というわけです。 カセットデッキの仕組み上改造が必要でした こちらの商品、Amazonで確認してみますと結構多くの商品が出ておりますが、気をつけなければならないのは「無線」タイプを選ばないといけない、ということです。 さらに、全ての機能がカセットテープのケース内に収まっていることと、さらに一つ改造が必要のようです。(私は見事に失敗して操作部分が飛び出しているものを買ってしまいました。南無。あと貼ったリンクのだと無線部分が飛び出してるので線の取り回しを改造する必要があります。) ではどのような改造が必要かというと、「 ステレオのモノラル化 」です。 どういうことかというと、本来のMZ-80ではプログラムデータは音楽データではないですから、モノラルで音が録音されています。しかしながら最新の音楽は基本ステレ

MZ80を起動せよ!とりあえずBASICでゲームを作ってみようよ

イメージ
以前、無事にMZ80が起動しBASICも立ち上がりました。 ここまできたらあとはプログラミングをしてゲームを作ったり、外部ストレージをつなげたりとかなんですが、このMZのBASICはいままで触ってきたBASICとはちょっと癖が強いのと、速度が遅くて作りづらいというのがります。なので、本格的なアクションゲームを作ろうと思ったら疑似スクリーンバッファを作成しアセンブラで転送するシステムを作る必要があるんですね。 一応z80のアセンブラは触ったことがありますが、それはシングルボードコンピューターでしたのでこういった「一定のエリアでメモリを割り当ててアセンブラと並行する」っていうのが全然わからないんです。なのでとにかくBASICだけでゲームを作ってみようというわけです。 じゃあ問題はゲームの要素を一通り作れてBASICでも十分な速度が楽しめるゲームって何かって話なんです。 ■ゲームの要素を満たしたシンプルな「ゲーム」 まず、ざっくりゲームの流れをば。 1)タイトル 2)プレイ画面 3)ゲームオーバー画面 以上の3つなんですね。「は?クリア画面は?」ってなると思うんですけど、ゲームオーバーってなんか「失敗!」ってイメージあるんですけどあれ「ゲームが終わりました」って意味なんですよね。なので昔のアーケードとかゲームクリアしても最後「ゲームオーバー」って表示されるんですよ。後味わりい!!!!!!某パンツ一枚の騎士さんのゲームとかBGMがゲームオーバーのままなのでもうやるせないです。 話が脱線しました。 ゲームの流れは上の3つですが、まあどんなゲームを作っても上の要素があればまとまって見えるわけです。問題は2番の「プレイ画面」。 ぶっちゃけ個々の中身を分解すべきなんですがたぶんこういう要素なんです。 1)プレイヤーが操作できるもの 2)プレイヤーの操作の影響を受ける動くもの 3)何もしていないとMissになるもの 4)クリアすべき課題 5)得点 以上のものを満たし、簡単に作れるものっていうとたぶん、 ブロック崩し なんですね。何が強いってボールが2と3の要素を兼ねてるんですよ。ここがすごい。 というわけでちょっと作ってみました。 ■どういう構成にすればいいのか考えてみる 基本、自分でBASICを描くときには1-100の間をmainloop関数として使用し、各機能ごとにGOSUBで飛