clsとpset命令を追加しました。
10 CLS 20 FOR I=0 TO 63 30 PSET I,I 40 NEXT I
表面上は単純なのに、字句解析、構文解析などが行われているかと思うとテンション上がります。
しょぼい線が走っているだけですけどねー。
clsとpset命令を追加しました。
10 CLS 20 FOR I=0 TO 63 30 PSET I,I 40 NEXT I
表面上は単純なのに、字句解析、構文解析などが行われているかと思うとテンション上がります。
しょぼい線が走っているだけですけどねー。
えーー・・・気長に待つレベルじゃないですよ・・・。
Pre-Orders are scheduled to ship next month. We will be emailing out an update this week, stay tuned! Thanks!
あの話。自分は全く知らないのでコメントできなかったりします。
とはいうものの、無反応というのも悪い気がするので素人ながら書かせていただきました。
参考にならない可能性が高いので先に謝らせていただきます・・・(汗。
オプティマイズさんからの転記なので部品は4点。
1. GBA_BUS
2. MBM29LV800TA-90
3. XC9572XL10TQ100
4. PIO_PORT
GBA_BUS。写真みたら基板を起こしてるので、いきなり高難易度です。
PIO_PORTは写真に写っているようにピンの集合体。デバッグ用?
MBM29LV800TA-90は検索するとFujitsuのフラッシュメモリ(8Mbit)にヒットします。
XC9572XL10TQ100はXilinxのCPLDっぽいですね・・・。配線多すぎ・・・。
僕ならどう勉強していくか・・・。とりあえずいきなり突撃するのはやめときます。
CPLD焼いて、配線つないで、簡単ラクチン!ってことはないかなあ・・・。
配線ミスもあるから特定できないといけないし、
どんなデータが流れているか把握もしないといけないです。
この1台を作る以外にも、実機とROMの通信ログを取得する環境はほしいところ。
えーなので、まず、GBAは諦めます(ぉ。
最初はもっと単純なファミコンかGameboyのDumpプログラムから始めると思います。
http://hongkongarduino.web.fc2.com/
https://github.com/drhelius/arduinogameboy
最初は大きさを無視してB5サイズぐらいに広げて、ミスしないように
どうやって配線するか知恵を絞りそうです。
ここでも厳しそうならこちらの1冊を。
部品代こみこみで1万円ぐらいは投資で必要ですけど。
https://www.amazon.co.jp/dp/4062578913/
モニタ、キーボードなしLAN接続のSSH環境がオススメです。
僕はraspberry pi の本しか持っていないので
類似した本をArduinoで探すのもいいと思います。
最後に海外の大御所のリンクです。
http://reinerziegler.de/GBA/gba.htm
fizzbuzzまで行きました・・・。いやー長かったです。
■メモ
arduinoのbufferを64byteから256byteに増やす - Qiita
・HardwareSerial.h Serial.println(SERIAL_RX_BUFFER_SIZE, DEC); // 64 Serial.println(SERIAL_TX_BUFFER_SIZE, DEC); // 64 ・USBAPI.h Serial.println(SERIAL_BUFFER_SIZE, DEC); // 64
HardwareSerialは上記2つ。Serialは3つ目だけを使用。
Serialだけしか使っていないのであんまり稼げないかな・・・。
フレームバッファを一切使わないで描画できるか調べてみました。
結論からいうと条件付きでできるものの、かなり微妙です。
簡単な擬似コードを書くと以下のようになります(SSD1306.pdf p34)。
void OledDrawDot(u8 x, u8 y) { // set page Addressing Mode // 中略 // command mode *pCs |= csMask; *pDc &= ~dcMask; *pCs &= ~csMask; SPI.transfer(0xB0 | (y / 8)); // page start address SPI.transfer(0x00 | (x % 16)); // lower start column address SPI.transfer(0x10 | (x / 16)); // upper start column address // write mode *pCs |= csMask; *pDc |= dcMask; *pCs &= ~csMask; u8 s = これから書き込む縦8ドット分の現在の情報; // ※注 SPI.transfer((1 << (y % 8)) | s); }
1回の書き込みは縦8ドット単位。問題は、変数sを用意できないことです。
SPI通信の場合、SSD1306のGDDRAMへ読み込みができません。
8.1.3 MCU Serial Interface (4-wire SPI) Under serial mode, only write operations are allowed. 8.1.4 MCU Serial Interface (3-wire SPI) Under serial mode, only write operations are allowed.
Arduboyの接続が4か3かわからなかったので両方転記しました。どちらにしてもダメ。
たとえば
OledDrawDot(0, 0); OledDrawDot(0, 3);
という順番で処理をすると、前に描画した0, 0のドットが消えます。
んー、8ドット単位づつの描画を許容するならいいですけど・・・。
あんまり役に立たない情報でした。
wiringPiSPIでいけました。
#include <stdio.h> #include <stdint.h> #include <wiringPi.h> void main(void) { int r = wiringPiSPISetupMode(0, 100000, 3); printf("%d\n", r); uint8_t buf[4]; printf("Looking for GBA\n"); do { buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x62; buf[3] = 0x02; wiringPiSPIDataRW(0, &buf, 4); printf("r:0x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3]); usleep(10000); } while(buf[0] != 0x72 || buf[1] != 0x02 || buf[2] != 0x62 || buf[3] != 0x02); printf("Found GBA!\n"); }
mbedと比べてみると微妙に8bit目が長いです。とりあえず成功。
ハマリポイントとしては待ち時間のところです。
usleep(1000000);
長すぎるとダメでした。