+; setup -----------------------------------------------------------------------
+
+setup:
+
+; initialize xss
+mov ah, 0x00 ; get
+int 0x1a ; system time
+mov [XSS], dx ; cx:dx = number of clock ticks since midnight
+
+; functions -------------------------------------------------------------------
+
+; xs() - xorshift pseudorandom number generator -------------------------------
+
+; output:
+; ax = updated state ([XSS])
+
+xs:
+
+mov ax, [XSS]
+mov dx, ax
+
+shl dx, 1 ; dx = xss << 1
+xor ax, dx ; ax = xss ^ (xss << 1)
+mov dx, ax
+
+shr dx, 3 ; dx = xss' >> 3
+xor ax, dx ; ax = xss' ^ (xss' >> 3)
+mov dx, ax
+
+shl dx, 10 ; dx = xss'' << 10
+xor ax, dx ; ax = xss'' ^ (xss'' << 10)
+mov [XSS], ax
+
+ret
+