# ABCDE FGHIJ KLMNO PQRST big-endian bits
# ST no longer used for this
# S master loop S times
# T break from master loop
# UVWXYZ for other stuff
# U carry bit
# V if else
# Convert to binary
REPEAT X TIMES (
INCREASE V
REPEAT A TIMES (
CLEAR A
INCREASE U
CLEAR V
)
REPEAT V TIMES (
INCREASE A
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT B TIMES (
CLEAR B
CLEAR V
)
REPEAT V TIMES (
INCREASE B
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT C TIMES (
CLEAR C
CLEAR V
)
REPEAT V TIMES (
INCREASE C
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT D TIMES (
CLEAR D
CLEAR V
)
REPEAT V TIMES (
INCREASE D
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT E TIMES (
CLEAR E
CLEAR V
)
REPEAT V TIMES (
INCREASE E
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT F TIMES (
CLEAR F
CLEAR V
)
REPEAT V TIMES (
INCREASE F
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT G TIMES (
CLEAR G
CLEAR V
)
REPEAT V TIMES (
INCREASE G
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT H TIMES (
CLEAR H
CLEAR V
)
REPEAT V TIMES (
INCREASE H
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT I TIMES (
CLEAR I
CLEAR V
)
REPEAT V TIMES (
INCREASE I
CLEAR U
CLEAR V
)
REPEAT U TIMES (
INCREASE V
REPEAT J TIMES (
CLEAR J
CLEAR V
)
REPEAT V TIMES (
INCREASE J
CLEAR U
CLEAR V
)
)
)
)
)
)
)
)
)
)
CLEAR U
)
PRINT X
INCREASE T
# If all but A are 0, break
INCREASE U
REPEAT B TIMES ( CLEAR U )
REPEAT C TIMES ( CLEAR U )
REPEAT D TIMES ( CLEAR U )
REPEAT E TIMES ( CLEAR U )
REPEAT F TIMES ( CLEAR U )
REPEAT G TIMES ( CLEAR U )
REPEAT H TIMES ( CLEAR U )
REPEAT I TIMES ( CLEAR U )
REPEAT J TIMES ( CLEAR U )
REPEAT K TIMES ( CLEAR U )
REPEAT L TIMES ( CLEAR U )
REPEAT M TIMES ( CLEAR U )
REPEAT N TIMES ( CLEAR U )
REPEAT O TIMES ( CLEAR U )
REPEAT P TIMES ( CLEAR U )
REPEAT Q TIMES ( CLEAR U )
REPEAT R TIMES ( CLEAR U )
REPEAT U TIMES ( CLEAR T )
CLEAR U
REPEAT T TIMES (
INCREASE S INCREASE S INCREASE S INCREASE S INCREASE S
REPEAT S TIMES ( INCREASE S INCREASE S INCREASE S INCREASE S )
REPEAT S TIMES ( INCREASE S INCREASE S INCREASE S )
INCREASE S INCREASE S INCREASE S
INCREASE S INCREASE S INCREASE S
INCREASE S INCREASE S INCREASE S
INCREASE S INCREASE S INCREASE S
INCREASE S
REPEAT S TIMES ( # loop
REPEAT T TIMES ( # break
# If A, 3n+1 and shl
# Y previous bit
# Else shl
INCREASE V
REPEAT A TIMES (
CLEAR V
CLEAR A
INCREASE U
INCREASE U
REPEAT B TIMES ( INCREASE U INCREASE Y )
CLEAR B
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT B TIMES (
CLEAR B
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE B
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT C TIMES ( INCREASE Y INCREASE U CLEAR C ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT C TIMES (
CLEAR C
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE C
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT D TIMES ( INCREASE Y INCREASE U CLEAR D ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT D TIMES (
CLEAR D
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE D
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT E TIMES ( INCREASE Y INCREASE U CLEAR E ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT E TIMES (
CLEAR E
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE E
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT F TIMES ( INCREASE Y INCREASE U CLEAR F ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT F TIMES (
CLEAR F
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE F
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT G TIMES ( INCREASE Y INCREASE U CLEAR G ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT G TIMES (
CLEAR G
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE G
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT H TIMES ( INCREASE Y INCREASE U CLEAR H ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT H TIMES (
CLEAR H
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE H
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT I TIMES ( INCREASE Y INCREASE U CLEAR I ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT I TIMES (
CLEAR I
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE I
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT J TIMES ( INCREASE Y INCREASE U CLEAR J ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT J TIMES (
CLEAR J
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE J
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT K TIMES ( INCREASE Y INCREASE U CLEAR K ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT K TIMES (
CLEAR K
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE K
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT L TIMES ( INCREASE Y INCREASE U CLEAR L ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT L TIMES (
CLEAR L
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE L
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT M TIMES ( INCREASE Y INCREASE U CLEAR M ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT M TIMES (
CLEAR M
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE M
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT N TIMES ( INCREASE Y INCREASE U CLEAR N ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT N TIMES (
CLEAR N
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE N
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT O TIMES ( INCREASE Y INCREASE U CLEAR O ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT O TIMES (
CLEAR O
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE O
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT P TIMES ( INCREASE Y INCREASE U CLEAR P ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT P TIMES (
CLEAR P
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE P
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
REPEAT Y TIMES ( INCREASE U CLEAR Y )
# Save current for future use
REPEAT Q TIMES ( INCREASE Y INCREASE U CLEAR Q ) # |
REPEAT U TIMES ( # Count carry + previous + current
INCREASE V
REPEAT Q TIMES (
CLEAR Q
INCREASE Z # Carry
CLEAR V
)
REPEAT V TIMES (
INCREASE Q
CLEAR V
)
)
CLEAR U
REPEAT Z TIMES ( INCREASE U CLEAR Z )
# Last bit is simpler as it doesn't carry
REPEAT Y TIMES ( INCREASE U )
REPEAT R TIMES ( INCREASE U )
REPEAT U TIMES ( # Count carry + previous + current
CLEAR R
INCREASE R
)
CLEAR Y
CLEAR U
REPEAT X TIMES (
INCREASE X
INCREASE X
)
INCREASE X
PRINT X
CLEAR A
REPEAT B TIMES ( INCREASE A CLEAR B )
REPEAT C TIMES ( INCREASE B CLEAR C )
REPEAT D TIMES ( INCREASE C CLEAR D )
REPEAT E TIMES ( INCREASE D CLEAR E )
REPEAT F TIMES ( INCREASE E CLEAR F )
REPEAT G TIMES ( INCREASE F CLEAR G )
REPEAT H TIMES ( INCREASE G CLEAR H )
REPEAT I TIMES ( INCREASE H CLEAR I )
REPEAT J TIMES ( INCREASE I CLEAR J )
REPEAT K TIMES ( INCREASE J CLEAR K )
REPEAT L TIMES ( INCREASE K CLEAR L )
REPEAT M TIMES ( INCREASE L CLEAR M )
REPEAT N TIMES ( INCREASE M CLEAR N )
REPEAT O TIMES ( INCREASE N CLEAR O )
REPEAT P TIMES ( INCREASE O CLEAR P )
REPEAT Q TIMES ( INCREASE P CLEAR Q )
REPEAT R TIMES ( INCREASE Q CLEAR R )
# Convert back to decimal
CLEAR X
REPEAT R TIMES (
INCREASE X
REPEAT X TIMES ( INCREASE X )
)
REPEAT Q TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT P TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT O TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT N TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT M TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT L TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT K TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT J TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT I TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT H TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT G TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT F TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT E TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT D TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT C TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT B TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT A TIMES ( INCREASE X )
PRINT X
)
REPEAT V TIMES (
CLEAR V
CLEAR A
REPEAT B TIMES ( INCREASE A CLEAR B )
REPEAT C TIMES ( INCREASE B CLEAR C )
REPEAT D TIMES ( INCREASE C CLEAR D )
REPEAT E TIMES ( INCREASE D CLEAR E )
REPEAT F TIMES ( INCREASE E CLEAR F )
REPEAT G TIMES ( INCREASE F CLEAR G )
REPEAT H TIMES ( INCREASE G CLEAR H )
REPEAT I TIMES ( INCREASE H CLEAR I )
REPEAT J TIMES ( INCREASE I CLEAR J )
REPEAT K TIMES ( INCREASE J CLEAR K )
REPEAT L TIMES ( INCREASE K CLEAR L )
REPEAT M TIMES ( INCREASE L CLEAR M )
REPEAT N TIMES ( INCREASE M CLEAR N )
REPEAT O TIMES ( INCREASE N CLEAR O )
REPEAT P TIMES ( INCREASE O CLEAR P )
REPEAT Q TIMES ( INCREASE P CLEAR Q )
# Convert back to decimal
CLEAR X
REPEAT R TIMES (
INCREASE X
REPEAT X TIMES ( INCREASE X )
)
REPEAT Q TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT P TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT O TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT N TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT M TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT L TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT K TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT J TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT I TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT H TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT G TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT F TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT E TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT D TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT C TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT B TIMES ( INCREASE X )
REPEAT X TIMES ( INCREASE X )
REPEAT A TIMES ( INCREASE X )
PRINT X
)
# If all but A are 0, break
INCREASE U
REPEAT B TIMES ( CLEAR U )
REPEAT C TIMES ( CLEAR U )
REPEAT D TIMES ( CLEAR U )
REPEAT E TIMES ( CLEAR U )
REPEAT F TIMES ( CLEAR U )
REPEAT G TIMES ( CLEAR U )
REPEAT H TIMES ( CLEAR U )
REPEAT I TIMES ( CLEAR U )
REPEAT J TIMES ( CLEAR U )
REPEAT K TIMES ( CLEAR U )
REPEAT L TIMES ( CLEAR U )
REPEAT M TIMES ( CLEAR U )
REPEAT N TIMES ( CLEAR U )
REPEAT O TIMES ( CLEAR U )
REPEAT P TIMES ( CLEAR U )
REPEAT Q TIMES ( CLEAR U )
REPEAT R TIMES ( CLEAR U )
REPEAT U TIMES ( CLEAR T )
CLEAR U
)
)
)