Last active
March 13, 2019 18:21
-
-
Save curtmack/336a10a3d0ce0efb4f1840bf3dd4e220 to your computer and use it in GitHub Desktop.
FizzBuzz in MIXAL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* FIZZBUZZ IN MIX | |
SENTINEL EQU 715 * SENTINEL VALUE FOR TERMINATING THE OUTPUT BUFFERS | |
FIRST EQU 1 * NUMBER TO START AT | |
LAST EQU 100 * NUMBER TO END AT | |
PUNCH EQU 17 * UNIT NUMBER FOR THE CARD PUNCH | |
BUFSIZE EQU 16 * BLOCK SIZE OF THE CARD PUNCH | |
* THE SENTINEL VALUE 715 CORRESPONDS TO TWO DELTA CHARACTERS | |
* WHICH THIS PROGRAM WILL NEVER PUT INTO THE BUFFER | |
* START OF VARIABLES AND CONSTANTS | |
ORIG 1000 | |
SPACES ALF " " * TEN SPACES FOR FILLING | |
ALF " " * THE LAST CARD | |
FIZZA ALF "FIZZ " * FIZZ PADDED TO TEN BYTES | |
ALF " " | |
BUZZA ALF "BUZZ " * BUZZ PADDED TO TEN BYTES | |
ALF " " | |
FIZZBUZZA ALF "FIZZB" * FIZZBUZZ PADDED TO TEN BYTES | |
ALF "UZZ " | |
* DIVISIBILITY TABLE FOR 0-14 MOD 15 | |
* 0 MEANS NOT DIVISIBLE, OTHERWISE POINTS TO OUTPUT STRING | |
DIVTABLE CON FIZZBUZZA * 0 | |
CON 0 * 1 | |
CON 0 * 2 | |
CON FIZZA * 3 | |
CON 0 * 4 | |
CON BUZZA * 5 | |
CON FIZZA * 6 | |
CON 0 * 7 | |
CON 0 * 8 | |
CON FIZZA * 9 | |
CON BUZZA * 10 | |
CON 0 * 11 | |
CON FIZZA * 12 | |
CON 0 * 13 | |
DIVTABEND CON 0 * 14 | |
* OUTPUT BUFFERS | |
* EACH ENDS WITH A SENTINEL AND A POINTER TO THE OTHER BUFFER | |
BUF1 ORIG *+BUFSIZE | |
CON SENTINEL | |
CON *+1 | |
BUF2 ORIG *+BUFSIZE | |
CON SENTINEL | |
CON BUF1 | |
* START OF PROGRAM | |
ORIG 2000 | |
START ENT1 BUF1 * INITIALIZE BUFFER POINTER | |
ENT3 FIRST * INITIALIZE COUNTER | |
ENT4 DIVTABLE+FIRST * INITIALIZE DIV COUNTER | |
LOOP CMP3 =LAST= * FINALIZE IF WE'RE PAST THE END | |
JG FINALIZE | |
JMP OUTPUT * WRITE THE CURRENT VALUE | |
INC3 1 * INCREMENT COUNTER | |
INC4 1 * INCREMENT DIV COUNTER | |
CMP4 =DIVTABEND= * RESTART LOOP IF WE'RE STILL IN THE DIV TABLE | |
JLE LOOP | |
ENT4 DIVTABLE * OTHERWISE MOVE BACK TO START OF TABLE | |
JMP LOOP | |
* SUBROUTINE OUTPUT | |
* WRITES THE APPROPRIATE OUTPUT FOR THE CURRENT COUNTER TO THE BUFFER | |
* AUTOMATICALLY FLUSHES THE BUFFER IF NECESSARY | |
* CALL WITH I1 = CURRENT BUFFER ADDRESS, | |
* I3 = COUNTER, | |
* I4 = DIV COUNTER | |
* CLOBBERS A, X, I2 | |
OUTPUT STJ 9F | |
LD2 0,4 * LOAD FROM DIV TABLE | |
J2Z 2F * IF ZERO, SKIP TO NUMBER PRINT | |
MOVE 0,2(2) * COPY TEXT POINTER TO OUTPUT | |
JMP 3F * SKIP TO BUFFER CHECK | |
2H ENTA 0,3 * CONVERT THE COUNTER | |
CHAR * TO TEXTUAL REPRESENTATION | |
SLAX 5 * "0000000XXX" TO "00XXX " | |
STA 0,1 * WRITE 00XXX TO BUFFER | |
STX 1,1 * WRITE SPACES AFTER IT | |
INC1 2 * INCREMENT BUFFER POINTER | |
3H LD2 0,1 * CHECK IF WE REACHED THE SENTINEL | |
CMP2 =SENTINEL= | |
JNE 9F * IF NOT, SKIP TO END | |
OUT -16,1(PUNCH) * FLUSH CURRENT BUFFER | |
LD1 1,1 * USE NEXT POINTER TO SWITCH BUFFERS | |
9H JMP * * RETURN FROM SUBROUTINE | |
* SUBROUTINE FINALIZE | |
* FINISHES OUT THE LAST PUNCH CARD WITH SPACES AND WRITES IT | |
* DOES NOT RETURN | |
* CALL WITH I1 = CURRENT BUFFER ADDRESS | |
FINALIZE CMP1 =BUF1= * DID WE JUST SWITCH TO BUF1 | |
JE 8F * IF SO, SKIP LAST CARD | |
CMP1 =BUF2= * SAME CHECK FOR BUF2 | |
JE 8F | |
2H LD2 0,1 * CHECK IF WE REACHED THE SENTINEL | |
CMP2 =SENTINEL= | |
JE 7F * IF WE DID, SKIP TO END | |
MOVE SPACES(2) * OTHERWISE MOVE TEN SPACES INTO BUFFER | |
JMP 2B * AND REPEAT | |
7H OUT -16,1(PUNCH) * OUTPUT LAST CARD | |
8H JBUS *(PUNCH) * WAIT UNTIL LAST CARD PRINTS | |
HLT * HALT THE MACHINE | |
END START * END OF PROGRAM |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
00001 00002 FIZZ 00004 BUZZ FIZZ 00007 00008 | |
FIZZ BUZZ 00011 FIZZ 00013 00014 FIZZBUZZ 00016 | |
00017 FIZZ 00019 BUZZ FIZZ 00022 00023 FIZZ | |
BUZZ 00026 FIZZ 00028 00029 FIZZBUZZ 00031 00032 | |
FIZZ 00034 BUZZ FIZZ 00037 00038 FIZZ BUZZ | |
00041 FIZZ 00043 00044 FIZZBUZZ 00046 00047 FIZZ | |
00049 BUZZ FIZZ 00052 00053 FIZZ BUZZ 00056 | |
FIZZ 00058 00059 FIZZBUZZ 00061 00062 FIZZ 00064 | |
BUZZ FIZZ 00067 00068 FIZZ BUZZ 00071 FIZZ | |
00073 00074 FIZZBUZZ 00076 00077 FIZZ 00079 BUZZ | |
FIZZ 00082 00083 FIZZ BUZZ 00086 FIZZ 00088 | |
00089 FIZZBUZZ 00091 00092 FIZZ 00094 BUZZ FIZZ | |
00097 00098 FIZZ BUZZ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment