I've still been working on this occasionally, I just haven't really added any features individually significant enough to warrant a post since then.
I've fixed several of the issues with srldrvce that made the terminal not particularly useful, and it now should properly support Windows and a few device types without crashing.
Back in January of last year, I switched everything to redraw every frame. This made things like partial scrolling significantly easier to implement but made the terminal significantly less responsive. A few days ago I ditched that and switched to a system where I move the LCD base around VRAM to scroll the display. This means that scrolling is almost instant, except when I run out of VRAM and have to move everything on screen back to the top. I tried using hardware scrolling to avoid this copy, but because the LCD is sideways, the vertical scrolling is actually horizontal.
Moving the LCD base around is extremely fast compared to the old methods - it was able to display /usr/share/dict/words
, which contains 102401 lines and 972398 bytes, in 344 seconds, for about 298 lines or 2826 characters per second.
I was able to use the hardware cursor
to invert the character the cursor is over, which is pretty neat but unfortunately doesn't show up properly in the CEmu version I'm using. This makes it easy for me to efficiently blink the cursor without having to worry about drawing and undrawing it.
I added a keyboard shortcut (F1 + F2) to send a stty command with the correct number of rows and columns.
I also did the usual refactoring, and it now builds with convimg instead of convpng. At least, it would, if there weren't a bug in the current version of convimg that prevents the palette from being read.
Since I guess I missed this when it was originally posted, I might as well necro-reply:
Whoa!! so your telling me that you connected you calc to your pc. and you can use linux based terminal on it!!
does it actual get the computer username and type of computer? hopeful it can run gui application later on.
This project is a terminal emulator, which basically means that it reads data from serial and displays it to a user, and reads user input to send to serial. The "linux based terminal" you're referring to is actually the bash shell, which is running on the computer, not the calculator. Normally, when you open a terminal on a Linux computer, you're starting a terminal emulator, which is connected via a virtual serial device to a bash process. In this case, though, it's using an actual serial device instead, which is connected to Terminal CE.
So, it really doesn't do anything but display data a computer sends to it. If you connect it to a Windows computer, you'll get a cmd shell; if you connect it to Linux computer, you get a bash shell. If you connect it to an Arduino, you'll get whatever the Arduino sends to the serial port; if you connect it to the serial monitor in the Arduino IDE, it will display whatever you send. It doesn't get the username and type of computer - it's just displaying the text that bash sent to it, which (as I have it configured) happens to include the username and hostname.
While it would be neat to run GUI applications, that's not really what a terminal emulator is. I'm sure you could set up an X server or a client for some sort of remote desktop protocol using usbdrvce, but that would be an entirely separate project.