Kurz darüber geflogen scheint die Hardware intern den 1.1.80 als Nullpunkt zu verwenden (steht so bisschen im Widerspruch zu 1984 aus dem Zitat?). Der Code verwendet einen BIAS Offset von 12 Jahren, der wird beim Auslesen dazuaddiert, beim Schreiben wieder davon abgezogen. Beispiel INPUT und OUTPUT:
INPUT:
mov ah,-2 ; Use INT 1A.FE
int 1ah ; to read from hardware clock
add bx,cs:BIAS
mov [di],bx ; bx: # days since 80.01.01
Du kannst versuchen das selber anzupassen, siehe Zeile 143:
BIAS dw (366+3*365)*3 ; # days between 1980.01.01
; and 1992.01.01
= 3 * 366 + 9 * 365 = 3 Schaltjahre und 9 normale Jahre. Für 2016 als Nullpunkt musst du also 9 Schaltjahre und 27 normale Jahre nehmen, also lustigerweise genau 3x länger.
Da ist jetzt eine 9 anstatt eine 3, weil 3*3 = 9. Ansonsten 9*366+27*365. Das liegt immer noch im 16-Bit Range und sollte daher keine Probleme machen, wobei ich mir den Rest vom Source-Code noch nicht angeschaut habe..
Wie du den Source-Code kompilierst kann ich dir aber spontan nicht gerade sagen, da der Offset aber fix ist könnte man evtl. auch das Binary patchen..
Nachtrag: Der ursprüngliche BIAS war offenbar 4 Jahre, darum die Multiplikation mit 3..