flagxor / ueforth

Apache License 2.0
90 stars 26 forks source link

use VGA Terminal and PS2Keyboard from FabGL #30

Open ghost opened 1 year ago

ghost commented 1 year ago

Hello with FabGL and ueforth, we can easily get a standalone forth computer!

Any plan to integrate FabGL into ueforth? In a basic form a 2 color text Terminal running on VGA2Controller can be used, and advanced support for drawing add audio could be added for gaming programming.

Thanks!

I figured out that change the default I/O to a VGA Terminal is simple:

*** ESP32forth.ino.orig 2022-10-30 17:12:44.579464479 +0800
--- ESP32forth.ino  2022-10-30 17:08:28.536010233 +0800
***************
*** 21 ****
--- 22,23 ----
+ #include <fabgl.h>
+ 
***************
*** 90 ****
!   V(rtos) V(SPIFFS) V(serial) V(SD) V(SD_MMC) V(ESP) \
--- 92 ----
!   V(rtos) V(SPIFFS) V(serial) V(terminal) V(SD) V(SD_MMC) V(ESP)    \
*************** static cell_t ResizeFile(cell_t fd, cell
*** 470 ****
--- 473 ----
+   REQUIRED_TERMINAL_SUPPORT \
*************** static cell_t ResizeFile(cell_t fd, cell
*** 520 ****
--- 524,532 ----
+ fabgl::PS2Controller PS2Controller;
+ fabgl::VGA2Controller DisplayController;
+ fabgl::Terminal Terminal;
+ #define REQUIRED_TERMINAL_SUPPORT \
+   XV(terminal, "Terminal.available", TERMINAL_AVAILABLE, PUSH Terminal.available()) \
+   XV(terminal, "Terminal.write", TERMINAL_WRITE, n0 = Terminal.write(b1, n0); NIP) \
+   XV(terminal, "Terminal.read", TERMINAL_READ, PUSH Terminal.read()) \
+   XV(terminal, "Terminal.flush", TERMINAL_FLUSH, Terminal.flush())
+ 
*************** forth definitions
*** 1776 ****
--- 1789,1792 ----
+ vocabulary Terminal  Terminal definitions
+ transfer Terminal-builtins
+ forth definitions
+ 
*************** ARGS_MARK flags'or! LEAVE
*** 1956 ****
! forth definitions 
--- 1972 ----
! forth definitions
*************** also forth definitions
*** 2163 ****
!    dup 0= if 2drop exit then 
--- 2179 ----
!    dup 0= if 2drop exit then
*************** internals definitions also serial
*** 2678 ****
--- 2695,2702 ----
+ 
+ internals definitions also terminal
+ : terminal-type ( a n -- ) Terminal.write drop ;
+ : terminal-key ( -- n )
+    begin pause Terminal.available until Terminal.read ;
+ : terminal-key? ( -- n ) Terminal.available ;
+ 
+ 
*************** also forth definitions
*** 2680,2682 ****
! : default-type serial-type ;
! : default-key serial-key ;
! : default-key? serial-key? ;
--- 2704,2706 ----
! : default-type terminal-type ;
! : default-key terminal-key ;
! : default-key? terminal-key? ;
*************** static cell_t TimerIsrRegister(cell_t gr
*** 3858 ****
--- 3883,3884 ----
+ 
+ 
*************** void setup() {
*** 3859 ****
--- 3886,3892 ----
+   PS2Controller.begin(PS2Preset::KeyboardPort0);
+   DisplayController.begin();
+   DisplayController.setResolution(VGA_640x480_60Hz);
+   Terminal.begin(&DisplayController);
+   Terminal.connectLocally();
+   Terminal.enableCursor(true);
+ 

It looks like this :) x

farvardin commented 2 months ago

thank you @iyzsong it helped to patch espforthstation: https://github.com/uho/ESP32forthStation/issues/1