Inspiration
SOMEBODY LAST YEAR WAS DOING SOME RETRO HACKING AND I REMEMBERED MY PROJECT I'VE BEEN WANTING TO DO: HAVING A "FAST(ER)" LANGUAGE FOR MY COMPAQ LUGGABLE RETRO COMPUTER, AND BUILDING IT ALL MYSELF.
SEE, IT HAS QBASIC, BUT QBASIC IS SLOW AND A LITTLE RESTRICTIVE (IT REALLY LIKES TO SHOUT AT YOU). IT REALLY ONLY HAS QBASIC (WE DON'T TALK ABOUT BATCH FILES), SO THAT'S PRETTY MUCH THE ONLY THING YOU CAN WORK IN, UNLESS YOU GET FANCY AND START USING THE SERIAL PORT.
PLUS, I REALLY LIKE LANGUAGE DESIGN AND FORTH IS A COOL LANGUAGE WITH A LOT OF POTENTIALS FOR OPTIMIZATION.
What it does
IT'S A COMPILER FOR FORTH, SO IT TAKES FORTH CODE AND CONVERTS IT TO MACHINE CODE-- HAND WRITTEN MACHINE CODE. IT SUPPORTS A VERY MINIMAL AMOUNT OF FORTH RIGHT NOW (SOME MIGHT EVEN SAY TOO MINIMAL, BUT THEY WOULD BE IGNORING HOW MUCH STUFF IS ACTUALLY UNDER THE HOOD).
FORTH IS A STACK BASED LANGUAGE, KIND OF LIKE OLD HP CALCULATORS WHERE YOU WOULD TYPE "3 4 * 5 +" AND GET 17 AS AN OUTPUT (INSTEAD OF A SYNTAX ERROR LIKE EVERY OTHER LANGUAGE).
FORTH AT ITS CORE CAN BE THOUGHT OF AS A SMALL ABSTRACTION ABOVE ASSEMBLY. I THINK FORTH PROGRAMMERS DON'T LIKE IT WHEN YOU SAY THAT THOUGH, AND THEY BRING UP HOW FORTH CAN BE VERY EXPRESSIVE AND CAN SWITCH PARSER MODES ON THE FLY AND SUCH, AND THEY'D BE RIGHT, BUT MY FORTH ISN'T THERE YET.
WHAT IS THERE IS THE ABILITY TO COMPILE FORTH PROGRAMS TO COM EXECUTABLE FILES, CREATE LOOPING PROGRAMS, DO BASIC ARITHMETIC LIKE ADDITION AND SUBTRACTION, AND EVEN GOTO.
INCLUDED ARE SEVERAL HOME MADE DEBUGGING TOOLS, LIKE A HEX VIEWER OR AN ASCII TABLE.
How I built it
I HAD A LIST OF ROUGHLY 20 WEBSITES THAT I SWITCHED BETWEEN FOR HOURS ON END. IN BETWEEN, I WOULD CRASH THE LUGGABLE AND HAVE TO RESTART IT.
MOSTLY I STARTED FROM SMALL STEPS: FIRST WRITE A LEXER AND MAKE SURE IT WORKS; THEN WRITE OUT MY FIRST COM FILE; THEN MY SECOND COM FILE; THEN A COM FILE THAT WRITES TO STDOUT; THEN ONE TO READ FROM STDIN; THEN ONE TO DO A LOOP; THEN ONE TO ACTUALLY USE THE LEXER FROM THE FIRST STEP AND ACTUALLY DO SOME COMPILING.
A LOT OF TIME WAS SPENT READING HOW X86 INSTRUCTIONS ARE ENCODED. SOME TIME WAS ALSO SPENT READING QBASIC DOCUMENTATION. SURPRISINGLY LITTLE TIME WAS SPENT ON STACKOVERFLOW, MOSTLY BECAUSE THEY DON'T LIVE IN THE MID 80'S, WHICH IS BOTH A BLESSING AND A CURSE.
Challenges I ran into
ALL OF THEM.
X86 ADDRESSING IS HARD. SOMETIMES YOU WANT TO USE THE DATA SEGMENT REGISTER AND OFFSET FROM THAT. SOMETIMES YOU WANT AN EXACT ADDRESS. SOMETIMES YOU HAVE TO CONVERT AN ABSOLUTE ADDRESS INTO A RELATIVE ONE AT RUNTIME.
DOS DOCUMENTATION IS ALL BUT NON-EXISTENT. I NEEDED 3 SEPARATE GUIDES TO DOS INTERRUPTS AND HOW THEY WORK, AND THEY WERE ALL SUBTLY WRONG.
QBASIC ISN'T A VERY GOOD LANGUAGE. IT'S OKAY, BUT IT HAS ITS FLAWS. TYPING VARIABLES IS WEIRD. SIGIL SUFFIXES ARE FOREIGN. WHAT IT GETS RIGHT IS SUBROUTINES AND FUNCTIONS, SHOCKINGLY.
KEYBOARDS DON'T SEEM FRAGILE UNTIL THEY DO. I LOST 2 KEYS IN THE PROCESS OF WORKING ON THIS. MY "L" KEY STOPPED AROUND 6PM. MY "=" BIT THE DUST AROUND 10PM. TURNS OUT DECADES OUT HARDWARE DOESN'T HOLD UP FOREVER.
Accomplishments that I'm proud of
THE WHOLE THING.
THE FACT THAT MACHINE CODE RAN AT ALL IS ASTONISHING.
THAT QBASIC CAN BE USED FOR SOMETHING REAL IS HEARTWARMING.
MY HEX EDITOR IS FUN TO USE.
I CAN DISASSEMBLE SOME X86 MACHINE CODE IN HEX IN MY HEAD (ONLY SOME).
What I learned
A LOT ABOUT X86. A LOT ABOUT QBASIC. A LOT ABOUT HOW FICKLE HARDWARE IS.
RESPECT FOR ALL THE DEMO SCENE PEOPLE THAT STILL WORK ON THESE SYSTEMS REGULARLY.
What's next for FORTH COMPILER IN QBASIC
SUPPORT MORE OF FORTH, MOSTLY. THEN I HOPE TO WRITE ANOTHER FORTH COMPILER, BUT IN FORTH.
GIVEN MY KEYS THAT AREN'T WORKING, I HOPE TO WRITE A PROGRAM TO FIX THAT BASED ON THE GERMAN/ITALIAN/ETC LAYOUTS THAT ARE ALREADY ON THE SYSTEM. MAYBE I'LL GET INTO SOME MORE HARDWARE HACKING SO I CAN CONTINUE TO TYPE ON THIS.
Built With
- 8088
- dos3.0
- ibm-pc
- qbasic
- x86
Log in or sign up for Devpost to join the conversation.