Open5
BT816(Bridgetek EVE3)の開発環境の調査

前買ったDigital Video ShieldのGPUであるEVE3の開発環境を調査する。
できればsimavrとエミュレータを繋げる方法を検討したい。。

EVE3
SPI接続のマイコン向けGPU。コマンドリストをスキャンライン毎に毎度実行するNintendoDSに近い方式の出力を行う。
去年既に1280x800解像度に対応するEVE4が出ていたりする。
ただしEVE3とEVE4の差はあまり無い。
基本的にはベンダ提供のアセットビルダで画面を作ることを想定しているようだ。
エミュレータはEVE Screen editorに収録されていて、
ヘッダファイルは EVE_Hal_Library/Hdr/Msvc_Emulator/Emulator.h
にある。
しかし、エミュレータは
に収録されているものの方が新しいようだ。

EVE3とEVE4の違い
プログラミングガイド https://brtchip.com/wp-content/uploads/2022/12/BRT_AN_033_BT81X-Series-Programming-Guide.pdf に言及がある。
- HSYNC/VSYNCタイミングが調整可能になった
- 垂直方向のスケーラが追加された (スケールは変更できるもののスケーラ係数は変更できないようだ)
- アダプティブHSYNCモード (?) 外部同期モードのことかな。。
- アニメーションを内蔵RAM内で定義可能になった (従来はFlash)
- コマンドリストを内蔵RAM内に置けるようになった (従来は専用FIFO)
- フォントキャッシュ (従来ASTCフォントはflashに置く必要があったがRAMに置けるようになった)
リストに言及が無いが、
- アンダーラン検出レジスタ
REG_UNDERRUN
の追加。1ラインあたり2048クロックしか使えないが、これを超えたライン数がカウントされる。というか今まで無かったのかよ! - タッチスクリーンを特定領域で使用する
CMD_CALIBRATESUB
コマンドの追加 - テストスクリーンの追加
CMD_TESTCARD
- ディレイコマンドの追加
CMD_WAIT
全体にFlashの負荷を下げる方向の変更が目立つ。まぁ取り廻しわるいし顧客要望があったのかな。。

simavrでサンプルを動かしてみる
Arduinoで普通にコンパイルして出てきたhexを掛ければ動くようだ。ただし、UARTは実物を開くように変更している(& com0comでローカルにループバックしている)
diff --git a/examples/parts/uart_pty.c b/examples/parts/uart_pty.c
index 0f6297e..9215b26 100644
--- a/examples/parts/uart_pty.c
+++ b/examples/parts/uart_pty.c
@@ -38,6 +38,8 @@
#include <pty.h>
#endif
+#include <fcntl.h>
+
#include "uart_pty.h"
#include "avr_uart.h"
#include "sim_time.h"
@@ -249,6 +251,7 @@ uart_pty_init(
(getenv("SIMAVR_UART_XTERM") && atoi(getenv("SIMAVR_UART_XTERM")));
p->hastap = hastap;
+#if 0
for (int ti = 0; ti < 1 + hastap; ti++) {
int m, s;
@@ -266,6 +269,11 @@ uart_pty_init(
printf("uart_pty_init %s on port *** %s ***\n",
ti == 0 ? "bridge" : "tap", p->port[ti].slavename);
}
+#endif
+ p->port[0].s = open("/dev/com4", O_RDWR);
+ p->port[0].tap = 1;
+ p->port[0].crlf = 1;
+
pthread_create(&p->thread, NULL, uart_pty_thread, p);

Digital Video Shield のデモをsimavrで動かす
タイマーが激烈におかしい。。