Skip to content

Instantly share code, notes, and snippets.

@jac18281828
Last active January 2, 2026 02:21
Show Gist options
  • Select an option

  • Save jac18281828/f5cd0e873a938895c377eb27d69f8158 to your computer and use it in GitHub Desktop.

Select an option

Save jac18281828/f5cd0e873a938895c377eb27d69f8158 to your computer and use it in GitHub Desktop.
75 Hard Time Tracker in MMIX
LOC #1000
START_TIME IS 1767310000
DAY IS 86400
Main
TRAP 0, Time, 0
SETI $1, START_TIME
SETI $3, DAY
MULI $3, $3, 3 % buffer for 3 days
ADDU $1, $1, $3
SUBU $0, $255, $1
BN $0, Error
BZ $0, Done
SETI $1, DAY
DIVU $0, $0, $1
JMP Done
Done
LDA $255, Message
TRAP 0, Fputs, StdOut
% $0 has number of days
PUSHJ $0, PrintDays
LDA $255, Unit
TRAP 0, Fputs, StdOut
SETI $255, '\n' % newline
TRAP 0, Fputc, StdOut
SETI $255, 0
TRAP 0, Halt, 0
Error
SETI $255, -1
TRAP 0, Halt, 0
Tmp IS $254
Reversed IS $253
% Print $0 as a number
% Algorithm: reverse the number into $253, then print digits in order
PrintDays
BZ $0, PrintZero
% Reverse the number: reversed = 0
SETI Reversed, 0
SET Tmp, $0
ReverseLoop
BZ Tmp, PrintLoop
% Extract one digit
DIVI $1, Tmp, 10 % $1 = quotient, rR = remainder
GET $2, rR % $2 = digit
% Build reversed number: reversed = reversed * 10 + digit
MULI Reversed, Reversed, 10
ADDU Reversed, Reversed, $2
SET Tmp, $1
JMP ReverseLoop
PrintLoop
BZ Reversed, PrintDone
% Extract rightmost digit from reversed number
DIVI $1, Reversed, 10
GET $2, rR
% Print digit
ADDUI $255, $2, '0'
TRAP 0, Fputc, StdOut
SET Reversed, $1
JMP PrintLoop
PrintZero
SETI $255, '0'
TRAP 0, Fputc, StdOut
PrintDone
POP 0, 0
LOC Data_Segment
Message
BYTE "You have completed ", 0
Unit
BYTE " days", 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment