經過了一個月的嘗試,我們大致上已經掌握了能夠自己實現非常基礎的 Ruby VM 的能力。雖然在鐵人賽之前也花了一個月左右的時間去驗證整個想法是否可行,然後在鐵人...
雖然我們實作了好幾個方法,但忘記了要處理方法回傳值,在 mruby 中處理回傳值也是相當簡單的,因為編譯器在生成指令的時候都已經幫我們處理好對應的機制,只需要將...
延續昨天的進度,當我們成功呼叫了 Block 之後會發現缺少了 OP_ENTER (51) 這個 OPCode 的實作,這個實作是用來將我們進入 Block 的...
之前我們有提到過 loop 方法因為我們並沒有實作 Block 機制而無法使用,而 Block 和 Method 實際上是在 Ruby 的 IREP 中製作出一...
在前面的實作中,我們已經可以將文字印出在 TFT 螢幕上,接下來我們要結合迴圈跟繪製文字的機制來製作簡易的跑馬燈效果。 繪製方法 之前我們用來印出訊息的 put...
因為我們已經將 mrb_value 套用到我們的 Ruby VM 中,也因此能夠更加彈性的處理各種類型的資料,現在就讓我們將字串的支援加入到裡面吧! 跟之前的方...
透過前幾天加入的比較、迴圈的支援後,假設我們希望在 TFT 螢幕上繪製文字跑馬燈就必須處理字串,也就是能將字串讀取進來。不過在這之前我們需要將 mrb_valu...
當我們有基本的大小比較之後,就能夠製作一個無限迴圈或者一個有次數的迴圈。 先修改 app.rb 讓我們實作一個執行特定次數的迴圈來驗證實作 # app.rb...
經過將近一個月的努力,現在我們現在要擴充 OPCode 的處理也容易很多,階段性的目標是要能在 TFT 螢幕上顯示一些訊息跟動畫,因此除了前面能讓 Ruby 運...
第一次看到 HAL(Hardware Abstraction Layer)是在 mruby/c 的原始碼裡面,我們可以透過編譯時提供 -DMRBC_USE_HA...
因為我們的目標是要能讓自製的 Ruby VM 運行在微控制器上並且在螢幕上顯示訊息,這次使用的是 TFT 螢幕型號是 ST7735 因為不同的硬體會有差異,在設...
雖然我們已經可以使用 pio test 對我們撰寫的 Ruby VM 進行測試,但是使用 pio run 編譯的時候還是會出現無法正常運作的錯誤,我們需要對原始...
大多數時候我們使用 Arduino 這類開發板的時候都會使用 Arduino 提供的 IDE或者像是 ESP32/ESP8266 官方提供的開發工具,不過當有一...
我們在上一篇已經可以製作 MRB_TT_FIXNUM 這類整數型的變數,但是必須透過下面這種方式手動去製作 mrb_value mrb_value v = {...
不知道大家有沒有思考過「強型別」語言跟「弱型別」語言的差異在哪邊,在強型別語言中每一種變數的「型別」都是固定的,也就是說當我們「編譯」的時候就會知道「類型」不對...
在 mruby 中,我們想知道目前的方法傳入了哪些資訊,會像這樣子使用 mrb_value mrb_puts(mrb_state* mrb, mrb_value...
現在大多數的人在入門程式語言的時候大多是從物件導向語言開始入門,而工作也是以使用物件導向語言為主。但是在 C 語言或者函數式語言中,並沒有「物件」的概念,又是如...
在上一篇我們已經能夠利用 mrb_state 去儲存整個 Ruby VM 運行時共有的狀態,接下來我們要利用 mrb_state 將 Ruby 中呼叫的方法和...
在前面的實作中,我們是直接對 OP_SEND 放入 printf 的處理將結果印出來,但這樣就表示我們在 Ruby 不論呼叫任何方法都只會將他印出來,這並不是我...
在這幾天的實作過程中,我們逐漸發現一個情況的出現,每當增加一個 OPCode 的處理就會有不少重複的程式碼需要輸入,而在 C 語言要對應這樣的狀況使用巨集就可以...
在上一篇我們已經實作到要呼叫方法,但是卻無法從 IREP 中獲取要呼叫的方法名稱。因此我們要實作對應的方法來幫助我們讀取到 IREP 中的 POOL 和 SYM...
經過幾天的努力,我們已經可以在我們自己實作的 Ruby VM 中進行加法的運算,不過到目前爲止都還是停留在透過除錯訊息看到結果的狀況,因此我們要來實作 Ruby...
我們已經在 mrb_exec 中將 IREP 的資訊讀取完畢,現在我們就可以開始針對 OPCode 的方式來讀取。 基本上在處理的時候會是一個無限迴圈,我們會不...
延續上一篇的進度,我們將會開始撰寫 mrb_exec 的內容,我們先參考 mruby-L1VM 的方式直接讀取用於參考的 nlocals、nregs 和 nir...
經過前面幾天的分析,我們目前已經有一個可以撰寫 Ruby VM 的環境,也了解該如何從 mruby 的機器碼中讀取到實際上要執行的 ISEQ 區段,這篇文章會先...
這次的實作分為兩個階段,第一階段我們直接用 C 語言在電腦上實作來驗證我們自己實作的 Ruby VM 是可以運作的,第二階段則是將程式碼放到 D1 Mini 上...
從前面兩篇文章我們已經透過 mruby-L1VM 大致上了解了 mruby 生成的機器碼檔案包含了哪些資訊,不過還有幾個相對重要而且會經常被使用的方法需要提出來...
上一篇我們已經了解了 mruby 編譯出來的檔案大致上有怎樣的結構,要能夠執行 Ruby 只需要實際上存取機器碼的區段讀取出來之後依照行為執行就可以了,不過在...
對一個非本科的工程師來說,對於這類知識大多是第一次接觸的,雖然跟讀資工的同事聊過他們在學校也只有實作簡單的功能,不過至少在要開始嘗試的時候會相對容易許多。在這樣...
2020 年中的時候意外看到了旗標的「雷切外殼復古街機」這個產品,以前在學 PHP 的時候很常的時間都是看旗標的書,沒想到這幾年旗標還有針對自造者領域推出產品。...