[KERNEL]
# =============================================================================
# KERNEL (FRAMEWORK FILE) VERSION 2025-11-29
# =============================================================================
# YOU CANNOT MODIFY THIS FILE. THE KERNEL IMPLEMENTS ESSENTIAL OPERATIONS
# THAT THE COMPILER DEPENDS UPON. THE FUNCS MARKED AS "CHOMBIT" ARE
# IMPLEMENTED IN A SEPARATE FILE CALLED "KERNEL.ASM". THE FUNCS MARKED AS
# "INTRINSIC" ARE GENERATED DIRECTLY BY THE COMPILER.
TYPE STRING IS BYTE[]
# -----------------------------------------------------------------------------
# IF A CLASS EXTENDS FROM CLASS_ID_BASE, THEN YOU CAN USE CLASS_ID() WITH IT.
CLASS CLASS_ID_BASE
END CLASS
# -----------------------------------------------------------------------------
# ARRAY WHOSE ELEMENTS ARE 1 BYTE IN SIZE
CLASS ARRAY_1
FUNC RESIZE(NEW_SIZE: INT)
CHOMBIT
END FUNC
FUNC COPY_FROM(SOURCE: ARRAY_1)
CHOMBIT
END FUNC
END CLASS
# -----------------------------------------------------------------------------
# ARRAY WHOSE ELEMENTS ARE 2 BYTES IN SIZE
CLASS ARRAY_2
FUNC RESIZE(NEW_SIZE: INT)
CHOMBIT
END FUNC
FUNC COPY_FROM(SOURCE: ARRAY_2)
CHOMBIT
END FUNC
END CLASS
# -----------------------------------------------------------------------------
# ARRAY WHOSE ELEMENTS ARE 3 BYTES IN SIZE
CLASS ARRAY_3
FUNC RESIZE(NEW_SIZE: INT)
CHOMBIT
END FUNC
FUNC COPY_FROM(SOURCE: ARRAY_3)
CHOMBIT
END FUNC
END CLASS
# -----------------------------------------------------------------------------
# ARRAY WHOSE ELEMENTS ARE 4 BYTES IN SIZE
CLASS ARRAY_4
FUNC RESIZE(NEW_SIZE: INT)
CHOMBIT
END FUNC
FUNC COPY_FROM(SOURCE: ARRAY_4)
CHOMBIT
END FUNC
END CLASS
# -----------------------------------------------------------------------------
# ARRAY WHOSE ELEMENTS ARE POINTERS
CLASS ARRAY_P
FUNC RESIZE(NEW_SIZE: INT)
CHOMBIT
END FUNC
FUNC COPY_FROM(SOURCE: ARRAY_P)
CHOMBIT
END FUNC
END CLASS
# -----------------------------------------------------------------------------
MODULE MATH
FUNC ABS(X: INT): INT
INTRINSIC
END FUNC
FUNC SIGN(X: INT): INT
INTRINSIC
END FUNC
FUNC BIT_AND(X: INT, Y: INT): INT
INTRINSIC
END FUNC
FUNC BIT_OR(X: INT, Y: INT): INT
INTRINSIC
END FUNC
FUNC BIT_XOR(X: INT, Y: INT): INT
INTRINSIC
END FUNC
FUNC BIT_NOT(X: INT): INT
INTRINSIC
END FUNC
FUNC SHIFT_LEFT(VALUE: INT, SHIFT_AMOUNT: INT): INT
INTRINSIC
END FUNC
FUNC SHIFT_RIGHT_SIGNED(VALUE: INT, SHIFT_AMOUNT: INT): INT
INTRINSIC
END FUNC
FUNC SHIFT_RIGHT_UNSIGNED(VALUE: INT, SHIFT_AMOUNT: INT): INT
INTRINSIC
END FUNC
END MODULE
# -----------------------------------------------------------------------------
MODULE KERNEL
# THE TEXT CONSOLE USES 8 X 8 TILES, WITH ROOM FOR 40 ROWS AND 28 COLS,
# HOWEVER ITS TILEMAP GRID HAS 64 ROWS X 32 COLS = 2048 PAIRS.
# (THERE ARE 24 UNUSED COLUMNS ON THE RIGHT AND 4 UNUSED ROWS ON THE BOTTOM.)
INSET CONSOLE_GRID: ^PAIR[SIZE 2048] LOCATED AT $10_0000 # ..$10_0FFF
FUNC TRACE_NUM(ID: BYTE)
INTRINSIC
END FUNC
FUNC TRACE(MESSAGE: STRING)
INTRINSIC
END FUNC
FUNC FAIL(MESSAGE: STRING)
INTRINSIC
END FUNC
FUNC SLEEP()
INTRINSIC
END FUNC
FUNC MEMCPY(TARGET: INT, SOURCE: INT, NUM_BYTES: INT)
CHOMBIT
END FUNC
FUNC MEMSET_BYTE(TARGET: INT, VALUE: BYTE, NUM_BYTES: INT)
CHOMBIT
END FUNC
FUNC MEMSET_PAIR(TARGET: INT, VALUE: PAIR, NUM_PAIRS: INT)
CHOMBIT
END FUNC
FUNC COLLECT_GARBAGE()
CHOMBIT
END FUNC
END MODULE