Skip to main content

Real-time clock

The real-time clock is a hardware component that reports the current date and time, using the local timezone of the host computer or web browser.

It also provides a CLOCK_MS field that can measure intervals of time with millisecond accuracy. Unlike the date and time, CLOCK_MS is tied to the CPU cycles of the virtual computer. Thus, it will run slow when your program is paused in the debugger, or if the emulator is unable to simulate the virtual computer at full speed.

Code sample

Here is a program that prints the current time of day:

MODULE MAIN
VAR DAYS: STRING[]

FUNC START()
ENGINE::INIT()
CONSOLE::INIT()

LOOP
IF GAMEPAD::BUTTON_A THEN
0 -> IO::CLOCK_MS # RESET THE TIMER
END IF

CONSOLE::PRINT("{CLS}{0}{D}CLOCK_MS:{TAB}{5}")
CONSOLE::PRINT_INT(IO::CLOCK_MS)

CONSOLE::PRINT("{N}{N}{0}TIME OF DAY:{TAB}{5}")
CONSOLE::PRINT_INT(IO::CLOCK_HOURS)
CONSOLE::PRINT(":")
IF (IO::CLOCK_MINUTES < 10)
DO CONSOLE::PRINT("0")
CONSOLE::PRINT_INT(IO::CLOCK_MINUTES)
CONSOLE::PRINT(":")
IF (IO::CLOCK_SECONDS < 10)
DO CONSOLE::PRINT("0")
CONSOLE::PRINT_INT(IO::CLOCK_SECONDS)

CONSOLE::PRINT(" ")
CONSOLE::PRINT(MAIN::DAYS[IO::CLOCK_DAY_OF_WEEK])
CONSOLE::PRINT(" ")
CONSOLE::PRINT_INT(IO::CLOCK_MONTH)
CONSOLE::PRINT("/")
CONSOLE::PRINT_INT(IO::CLOCK_DAY)
CONSOLE::PRINT("/")
CONSOLE::PRINT_INT(IO::CLOCK_YEAR)


ENGINE::RENDER()
ENGINE::WAIT_FOR_PAINT()
ENGINE::THINK()
CONSOLE::THINK()
END LOOP
END FUNC
END MODULE

DATA MAIN::DAYS
[ "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" ]
END DATA

I/O definitions

MODULE IO
. . .
# REAL TIME CLOCK
VAR CLOCK_YEAR: PAIR LOCATED AT $D0_0030
VAR CLOCK_MONTH: BYTE LOCATED AT $D0_0032
VAR CLOCK_DAY: BYTE LOCATED AT $D0_0033
VAR CLOCK_DAY_OF_WEEK: BYTE LOCATED AT $D0_0034
VAR CLOCK_HOURS: BYTE LOCATED AT $D0_0035
VAR CLOCK_MINUTES: BYTE LOCATED AT $D0_0036
VAR CLOCK_SECONDS: BYTE LOCATED AT $D0_0037

# STARTS FROM 0, INCREMENTING EVERY MILLISECOND. YOUR PROGRAM CAN MODIFY IT.
VAR CLOCK_MS: INT LOCATED AT $D0_0038
. . .
END MODULE