38 lines
1.4 KiB
Text
38 lines
1.4 KiB
Text
// Address 00: Entry point
|
|
|
|
GTO 3 7 // Jump to the main program
|
|
|
|
// Address 03: Subroutine
|
|
// Takes a pending division such as ((12/5 and evaluates whether it
|
|
// is evenly divisible.
|
|
// Result 1: evenly divisible, 0: not divisible
|
|
|
|
) // Complete the pending division
|
|
INV *Int // Take the fractional part
|
|
*CP // RegT := 0
|
|
INV *x=t 1 3 // If fractional part is zero, don't increment
|
|
1 + // Start a pending increment of the return value
|
|
0 ) rtn // Return the return value
|
|
|
|
// Address 16: Subroutine
|
|
// Takes a number and evaluates whether it is divisible by 3 and 5.
|
|
// Result: 0=indivisible, 1=fizz, 2=buzz, 3=fizzbuzz
|
|
|
|
STO 1 // Save subroutine argument
|
|
/ 3 subr 0 3 // 1 if fizz else 0
|
|
+ 2 x // Buzz is worth 2x as much as Fizz
|
|
( ( RCL 1 / 5 subr 0 3 // 1 if buzz else 0
|
|
= // Finish the pending + and x
|
|
rtn // Return result
|
|
|
|
// Address 37: Main program
|
|
|
|
*CMs // Zero out registers
|
|
1 SUM 2 // Number += 1
|
|
RCL 2 // Retrieve Number
|
|
subr 1 6 // Evaluate whether it is divisible by 3 and 5
|
|
+/- // Negate (0=indiv., -1=fizz, -2=buzz, -3=fizzbuzz)
|
|
INV *x>=t 5 3 // If negative, skip the next line.
|
|
RCL 1 // Retrieve number instead of zero.
|
|
*pause // Flash the number on the display
|
|
GTO 3 8 // Loop
|