用 ESP32-S3 跑 BASIC 解释器,这比当年比尔盖茨用的电脑配置高多了

esp32-s3-arduinobasic-1

之前我做了个 AI 生成外形的复古小电脑,并且同样使用 AI 生成了 3D 模型,塞了 ESP32-S3 开发板 + 0.96 英寸 OLED 进去,顺手做了个能播放《Bad Apple》的固件(见《3 步从 nana banana AI 生成的复古小电脑到真实桌面小玩具》)。

esp32-s3-arduinobasic-2

最近在 GitHub 上看到一个 ArduinoBASIC 项目,一个还算完整的 BASIC 语言解释器,支持 BASIC 语言中常用的特性,这不刚好用来把这个复古小电脑变成真的可以写代码的小电脑吗 😃。

PS. 当年比尔·盖茨和保罗·艾伦为 Altair 8800 写 BASIC 时,机器 CPU 是 2 MHz 的 Intel 8080,只有 4 KB RAM。对比之下,ESP32-S3 的性能强太多了。

来跑个 1 加到 100

ArduinoBASIC 在 ESP32-S3 上,实际计算过程还是比较快的,如果不输出中间过程,几乎相当于瞬间出结果,但是估计原来项目中写屏相关的代码没有特别优化性能,导致有屏幕输出的时候,性能下降得厉害。

PS. 手机拍摄的时候由于刷新率和快门时间的关系,显示屏有种老 CRT 显示器的感觉了 🙈。

测试代码

10 sum=0
20 FOR i = 1 TO 100
30 sum=sum+i
40 PRINT "1+..";i;"=";sum
50 NEXT i

视频

ArduinoBASIC 项目

项目地址:https://github.com/robinhedwards/ArduinoBASIC

项目介绍:

A complete BASIC interpreter for the Arduino, using a PS/2 keyboard, and SPI OLED screen. The BASIC supports almost all the usual features, with float and string variables, multi-dimensional arrays, FOR-NEXT, GOSUB-RETURN, etc.

esp32-s3-arduinobasic-3

原作者是用了 PS/2 键盘、SPI 接口的 0.96 寸 OLED 屏幕,并且是用 EEPROM 来保存用户程序,可能是因为作者写这个非常久远了,10 年前的项目,另外就是基于 Arduino UNO 之类的开发板,本身资源相当有限。

我 clone 下来之后,直接一句话让 AI 把它转换成了基于 ESP32-S3 + Arduino 的项目,这样就可以使用 I2C 的 OLED 和 USB 键盘了,毕竟 ESP32-S3 直接支持 USB Host。

不得不说在写这种代码的能力上,AI 还是相当好用的,做个移植什么的工作,借助于 AI,可以极大地提升效率。

另外因为 ESP32-S3-Zero 开发板的 USB Type-C 接口用于连接键盘,所以需要额外一个转接板,添加一个 USB Type-C 接口来供电,不过这个在之前做复古小电脑的时候已经考虑过了,这里就直接用了。

硬件操作 PIN、PINMODE

这个 ArduinoBASIC 项目中,还有增加以下几个对 GPIO 操作的函数:

  • PIN pinNum, value (0 = low, non-zero = high)
  • PINMODE pinNum, mode ( 0 = input, 1 = output)
  • PINREAD(pin) - see Arduino digitalRead()
  • ANALOGRD(pin) - see Arduino analogRead()

理论上通过这几个函数,也可以实现一些简单的硬件操作能力,读取个传感器什么的?或者至少可以控制 LED 来实现个流水灯吧~

不过我之前画的转接板并没有预留这些接口,就懒得写代码玩了,不过之前是测试了 GPIO 来控制 LED 是没有问题的。

就这样吧,桌上继续多一个吃灰的小玩具了~

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>