Hi, I managed to get AmForth RISC-V running on a SparkFun RED-V Thing Plus [1] which is based on the same/similar SiFive RISC-V FE310 SoC as on the now discontinued HiFive1 board [2]
amforth 7.0 RV32IM RED-V Thing Plus Wed Oct 11 21:25:54 BST 2023 > words forth-wordlist environment riscv-wordlist @cycle dump .8hex .4hex .2hex ?ascii type0 hifive-turnkey rev-info build-info mtimecmp mtime black magenta cyan yellow white blue green red led-init cacheflush inflash? c!i !i serial-emit? serial-emit serial-key? serial-key serial-lastchar +usart ram-wordlist wordlist Udefer! Udefer@ dp >in 0> get-current >body wlscope variable to ; : ] reveal recurse ?abort postpone +loop newest loop latest header endloop do (create) defer! defer@ create constant :noname char ['] [compile] [char] \ abort" abort ' turnkey immediate leave >l l> lp lp0 repeat again else if while until then begin ahead words sliteral s, ." s" itype type count ver init-ram ?do map-stack interpret recognize cfg-recognizer forth-recognizer split rectype-split rec-split rec-num rectype-dnum rectype-num rectype-xt rec-find rectype-null set-base bases number >number digit? toupper within ud* m+ name>flags name>string search-wordlist current show-wordlist traverse-wordlist nfa2cfa nfa>lfa find-xt cfg-order c, , compile literal 2literal /string parse parse-name cskip cscan ?stack source-tib source throw catch handler .ready .ok .input .error ?crlf bs accept refill-tib refill .s ud.r ud. u. d. d.r . sign #> #s # <# hold hld allot here pad hex decimal ( [ spaces space bl cr ms warm false true -1 4 2 1 0 nr> n>r compare 1ms up! up@ aligned j i unloop bounds nop pause emit? emit key? key execute quit cold #tib tib state cells cell+ 2/ 2* 2- 2+ 1- 1+ - + base d0= d0< ud/mod um/mod s>d 2dup d- d+ dnegate dabs d2/ d2* 2r> 2>r 2r@ 2over 2drop 2nip 2swap umax umin max min = <> u> u< u<= u>= > < <= >= 0< 0<> 0= c! c@ +! fill move lshift rshift invert not xor or and rdrop rdepth depth /mod u/mod mod / m* um* * abs negate ! @ sp0 sp sp! sp@ rp rp! rp@ r@ r> >r pick -rot tuck ?dup rot over nip dup swap drop exit ok > I needed to make a few changes to the existing code to get it to run. Flashing AmForth to the SparkFun RED-V Thing Plus is simple, as when plugged in it presents itself as a drive. Copy the hex file to the drive and it flashes itself. On reset a bootloader runs the copied and flashed AmForth hex file, but it sends some AT commands over the usart prior to running the flashed program. It may do other things too. A search suggests this might be related to a WiFi/BT chip on the HiFive1 Rev B. [3] Remaking AmForth for a 115200 uart shows this nicely. ATE0--> Send Flag error: #0 #0 #0 #0 AT+BLEINIT=0--> Send Flag error: #255 #255 #255 #255 AT+CWMODE=0--> Send Flag error: #255 #248 #0 #0 amforth 7.0 RV32IM RED-V Thing Plus Thu Oct 12 21:48:35 BST 2023 > I know next to nothing about risc-v assembly, but Matthias' code/macros look super elegant to me. COLON "hifive-turnkey", APPLTURNKEY .word XT_LED_INIT .word XT_DECIMAL .word XT_INIT_USART .word XT_DOT_VER, XT_SPACE .word XT_ENV_BOARD,XT_TYPE, XT_CR .word XT_BUILD_INFO,XT_TYPE .word XT_SPACE, XT_REV_INFO, XT_TYPE .word XT_EXIT The SparkFun RED-V Thing Plus has a different LED arrangement and location but it was easy enough to cobble together some assembler words to make a proof of blinky. CODEWORD "led-init", LED_INIT li x20, 1 << 5 li x21, GPIO_OUTPUT_EN sw x20, 0(x21) li x20, 1 << 5 li x21, GPIO_PORT sw x20, 0(x21) NEXT CODEWORD "+led", PLUSLED li x20, 1 << 5 li x21, GPIO_PORT sw x20, 0(x21) NEXT CODEWORD "-led", MINUSLED li x20, 1 << 5 li x21, GPIO_PORT sw zero, 0(x21) NEXT I'm glad I started with the SparkFun RED-V Thing Plus board. Whilst it's more expensive than some other offerings, having something close to the board AmForth RISC-V was originally written for, definitely helps a lot. RISC-V is not an "open-source processor" [4] and I'm not able to cope with the variety yet, if ever. Despite the product page "backorder" status, there are quite a few of the SparkFun RED-V Thing Plus still available from the usual sources. Well a lot of fun, plenty to study for the winter, and with a blinky up-and-running there is always the hope of progress. Best wishes, Tristan [1] https://www.sparkfun.com/products/15799 [2] https://www.sifive.com/boards/hifive1 [3] https://www.sifive.com/boards/hifive1-rev-b [4] https://riscv.org/blog/2020/02/risc-v-is-not-an-open-source-processor-krste-asanovic-chairman-of-the-board-risc-v/ _______________________________________________ Amforth-devel mailing list for http://amforth.sf.net/ Amforth-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amforth-devel