00:00:00.480
Thank you for taking the time to see my session. I'm Katsuhiko Kageyama, and today I'd like to talk about creating your own computer.
00:00:15.440
My first question is: What were your childhood dreams? I had a dream to play video games freely. Additionally, I had a dream of creating video games by myself.
00:00:29.359
In order to make video games, we need a tool. For example, this was Family Basic, which can be used with a family computer or Nintendo system. We can make small games using this hardware and software along with cassette software.
00:01:20.159
Today, while we may not be children anymore, I am considering how to create my own video game hardware. In this session, I want to tell you that you can make your own computer with mruby.
00:01:37.600
Let me make my introduction. I’m an embedded software engineer in a manufacturing company and I make some embedded devices as a hobby. I'm also involved in writing technical books. Let me show you some of my devices. I made a small computer using a Raspberry Pi Zero and created a small game using a microprocessor.
00:02:58.400
Now, let me outline the agenda. I’d like to explain how to create your computer, then discuss why I chose mruby. Finally, I will explain the important technical aspects regarding mruby and demonstrate some examples.
00:03:38.560
The goal of my development is to create a small computer that runs Ruby scripts, similar to the Family Basic. I want to call it Family mruby since I will be using mruby. I also made a long mark, which I think is fun. Now I want to show you how to create your computer.
00:04:22.720
There are some steps involved. The first step is to find requirements. The second step is to find components to build the devices. Additionally, you need to create schematics. Based on these schematics, we will manufacture the device. After that, we will implement the software.
00:05:06.880
Let me explain each step in more detail. Requirements come from your idea, and defining what you want is essential. Today, there are many great online tools available for finding components. I'm using one of these tools to help find the necessary components.
00:05:45.199
After that, it’s important to create schematics. This might be difficult for software engineers, but making digital signal schematics is actually manageable. We can use KiCAD, which is a CAD tool for creating schematics.
00:06:57.760
Once the schematics are complete, we can move on to manufacturing the devices. For example, various companies offer affordable manufacturing services for hardware. Quality can be quite good, and prices can start at around five dollars.
00:07:41.680
Finally, we implement software on the hardware. Without software, your hardware won't function. In the last step, I will write applications using Ruby. The reason I use Ruby is that I love it. Moreover, no one likes to wait for compliance when flashing images to their devices.
00:08:45.760
As I mentioned earlier, I use mruby because it can run on small processors with limited memory. Generally, mruby requires more than 400 kilobytes, and simple implementations help integrate it into your hardware.
00:09:56.640
Next, let’s find suitable processors for running mruby. I put together a table showing major processors. For instance, Arduino is famous among makers, but its memory is quite limited. On the other hand, the ESP32 has larger memory options available.
00:10:55.360
I found that the ESP32 Dev Board offers 8 megabytes of RAM, which is suitable for mruby development. This is significant when considering a platform for your projects.
00:11:50.320
Now that I've outlined the hardware, let's shift to implementing basic software. The ESP32 lacks support for high-level environments like Windows, so we often rely on C or C++ for programming.
00:12:08.880
Based on the information from this session, I developed a system diagram. It includes an Arduino board, and I'm implementing libraries that support video output and audio. I created the mruby gem combined machine, which allows users to run their Ruby scripts on this system.
00:13:44.720
In the development phase, I used a development PC to build the firmware with a USB development tool, compiling it and transferring the software via serial communication. Once the software is loaded into the device, there’s no need to connect to the host PC.
00:14:26.480
Let me show you my hardware. It was manufactured by a Chinese company, and I also designed a black case using a 3D printer. Additionally, I created an aqua cover for the top of the case.
00:15:36.880
Now, let’s discuss the challenges we face with software implementation. Small processors have limited memory, so it's crucial to be mindful of memory usage. Ruby allows for the creation of many objects, which may lead to higher memory consumption.
00:16:28.080
Another challenge is performance. Since the hardware runs at a relatively low clock speed, we need to optimize for better performance. Utilizing hardware functions, such as direct memory access, can help significantly.
00:17:38.080
I want to focus on the use of interrupts in hardware. For example, when a button connected to the CPU is pressed, an electric signal is sent to the CPU, which then transitions from the main program to the interrupt handler automatically.
00:18:35.440
However, mruby does not handle hardware interrupts natively, making it a little more complex to implement what you'd need. To mimic this functionality, we utilize a different method involving manual checks.
00:19:36.160
By using this software layer for interrupts, users can manage input via Ruby script. This code is an experimental implementation, and further investigation will be needed to refine the process.
00:20:30.400
Let's check out my Family mruby. You can see the console screen loading Ruby source files. This is akin to playing an RPG game, where characters can be moved using a gamepad.
00:21:50.080
Now I'll demonstrate connecting using an Arduino interface. Moving on to the next demonstration, you can see a database storing source code files.
00:22:29.760
I hope to summarize my session succinctly. I shared insights on creating your own devices. Additionally, I presented Family mruby, which supports Ruby programming without requiring a PC. Furthermore, I proposed a software interrupt method.
00:23:08.560
I aspire to develop more devices and update the firmware based on this family mruby system. I hope you can appreciate and enjoy the possibilities of making your own projects.
00:23:40.800
Thank you for your time, and see you next time!