Inspiration
Members of TAB have experienced the difficulties of learning Assembly, not only because of a lack of independent learning resources of the language, but also because of the abstraction and difference of the Assembly language compared to other languages. By creating TAB, users can easily learn Assembly using a visual and intuitive way. We hope this makes Assembly a more accessible and less daunting language.
What it does
TAB will use the concept of block-based coding to illustrate the key words and workflow of Assembly, and helps the user to work through projects using TAB while learning Assembly in a visual and intuitive way easily, compared to the traditional impression of an extremely abstract language.
Currently, it allows users to become more comfortable with the idea of Assembly through its small instruction set, which allows for easier learning, unlike modern CPU’s. Additionally, its portability any user with a computer capable of running Python will be able to familiarize themselves with the basics of Assembly, without going through the pain of installation.
How I built it
Our original frontend GUI used the Arcade library in Python, however, we are all backend programmers, and learning the Arcade Library was surprisingly difficult. Given this, we decided to run a console based program, forgoing the graphics. We intend to finish the graphics in our free time. Our frontend is currently pretty simple. It allows us to interface our backend with the console through file transfer. The backend uses Python to create 26 basic Assembly commands that the user can cycle through to create programs that are essentially written in Assembly. The backend allows users to create a text file using our version of Assembly. It then compiles down to Python and gives the output in the console. One of our members made programs to calculate the Fibonacci sequence to the nth degree, pass in an input and return it (hello world with an input), and a prime number calculator
Challenges I ran into
Arcade is partially incompatible with MacOS, so we spent a lot of time trying to find solutions to run the Arcade library(which we eventually gave up on, leaving us with two computers out of the four of us). The team is primarily backend programmers, we don't have much experience in working with the frontend. One large problem we had with the backend was the use of signed vs unsigned integers. The assembly language deals with both types, although they are stored in the same place in memory, meaning that casting them incorrectly led to errors that were difficult to identify. Another large issue was translating between binary and user commands. This was challenging to debug, as there is a long pipeline to accomplish the translation, involving string operations, bitwise numeric functions, and dictionary lookups. We solved the problem by reproducing the error in a simpler program and implementing a debug mode, which dumped the contents of the intermediate stages.
Accomplishments that I'm proud of
Creating anything Assembly related Learning Python on the go The GUI is about ¾ done Able to pull off a console program that is capable of running our backend Creating 26 Assembly commands in Python Translating between user input and binary
What I learned
The Arcade library Python (only one of our members uses Python as his primary language) Frontend GUI elements Manipulation of GUI elements Assembly commands Implementations of Lexers File conversion Using Python to simulate Assembly Binary conversions
What's next for TAB
Using GUI instead of a console based program Adding features to GUI, like searching commands, etc. Rendering the GUI and its manipulations, like background, sounds, etc. Working on the compatibility of the Arcade library's implementation with Mac OSX Creating further documentation for others to use our software
Log in or sign up for Devpost to join the conversation.