<< Back

cesky: , English:

TIME

Date and time

The basis of measurement date and time in the Litos8 system is timestamp in Unix format, representing number of seconds since 1/1/1970 0:00:00, restricted to 2/7/2106 6:28:15 (dword number range).


PackBCDByte - pack 1 byte to BCD format

INPUT:
AL = binary number (0..99)

OUTPUT:
AL = BCD number (00h..99h)


PackBCD2Byte - pack 2 bytes to BCD format

INPUT:
AH,AL = binary numbers (0..99)

OUTPUT:
AH,AL = BCD numbers (00h..99h)


PackBCD4Byte - pack 4 bytes to BCD format

INPUT:
DH,DL,AH,AL = binary numbers (0..99)

OUTPUT:
DH,DL,AH,AL = BCD numbers (00h..99h)


UnpackBCDByte - unpack 1 byte from BCD format

INPUT:
AL = BCD number (00h..99h)

OUTPUT:
AL = binary number (0..99)


UnpackBCD2Byte - unpack 2 bytes from BCD format

INPUT:
AH,AL = BCD numbers (00h..99h)

OUTPUT:
AH,AL = binary numbers (0..99)


UnpackBCD4Byte - unpack 4 bytes from BCD format

INPUT:
DH,DL,AH,AL = BCD numbers (00h..99h)

OUTPUT:
DH,DL,AH,AL = binary numbers (0..99)


ReadDT - read registers from DATETIME structure

INPUT:
DI = pointer to
DATETIME structure

OUTPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


WriteDT - write registers to DATETIME structure

INPUT:
DI = pointer to
DATETIME structure
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


PackDOSDate - pack date do DOS file format

INPUT:
DL = day (1..31, can be 0..31)
DH = month (1..12, can be 0..15)
SI = year (1980..2117)

OUTPUT:
AX = date in DOS file format
- bit 0..4: day (1..31, can be 0..31)
- bit 5..8: month (1..12, can be 0..15)
- bit 9..15: year - 1980 (0..127 = 1980..2117)


UnpackDOSDate - unpack date from DOS file format

INPUT:
AX = date in DOS file format
- bit 0..4: day (1..31, can be 0..31)
- bit 5..8: month (1..12, can be 0..15)
- bit 9..15: year - 1980 (0..127 = 1980..2117)

OUTPUT:
DL = day (1..31, can be 0..31)
DH = month (1..12, can be 0..15)
SI = year (1980..2117)


PackDOSTime - pack time to DOS file format

INPUT:
BH = second (0..58, can be 0..62, converted to even second)
CL = minute (0..59, can be 0..63)
CH = hour (0..23, can be 0..31)

OUTPUT:
AX = time in DOS file format
- bit 0..4: second/2 (value 0..29 = 0..58 seconds, can be 0..31 = 0..62 seconds)
- bit 5..10: minute (0..59, can be 0..63)
- bit 11..15: hour (0..23, can be 0..31)


UnpackDOSTime - unpack time from DOS file format

INPUT:
AX = time in DOS file format
- bit 0..4: second/2 (value 0..29 = 0..58 seconds, can be 0..31 = 0..62 seconds)
- bit 5..10: minute (0..59, can be 0..63)
- bit 11..15: hour (0..23, can be 0..31)

OUTPUT:
BH = second (0..58, can be 0..62, only even second)
CL = minute (0..59, can be 0..63)
CH = hour (0..23, can be 0..31)


DateValidate - limit date to valid values

INPUT:
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)

OUTPUT:
values can be corrected to valid range


TimeValidate - limit time to valid values

INPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)

OUTPUT:
values can be corrected to valid range


DateTimeValidate - limit date and time to valid values

INPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)

OUTPUT:
values can be corrected to valid range


DateTimeValidateDT - limit date and time to valid values with DATETIME

INPUT:
DI = pointer to
DATETIME structure

OUTPUT:
values in
DATETIME can be corrected to valid range


ClockValidate - limit clock timer value

INPUT:
DX:AX = clock timer (0..1800AFh, interval 54.92549322ms)

OUTPUT:
value can be corrected to valid range


PackUnixTime - pack date and time to Unix format

INPUT:
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)

OUTPUT:
DX:AX = number of seconds since 1/1/1970 0:00:00 Thursday

NOTES: Maxim date/time: 2/7/2106 6:28:15 (result 0ffffh:0ffffh)


UnpackUnixTime - unpack date and time from Unix format

INPUT:
DX:AX = number of seconds since 1/1/1970 0:00:00 Thursday

OUTPUT:
AL = day of week (1..7, 1=Monday...7=Sunday)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)

NOTES: Maxim date/time: 2/7/2106 6:28:15 Sunday (result 0ffffh:0ffffh)


DayToUnix - convert days (since 1/1/1970) to Unix format

INPUT:
AX = days since 1/1/1970

OUTPUT:
DX:AX = number of seconds since 1/1/1970 0:00:00 Thursday

NOTES: Maximum date/time: 2/7/2106 6:28:15 (result 0ffffh:0ffffh). Time is set to 0:00:00.


UnixToDay - covert Unix format to days

INPUT:
DX:AX = number of seconds since 1/1/1970 0:00:00 Thursday

OUTPUT:
AX = days since 1/1/1970

NOTES: Maximum date/time: 2/7/2106 6:28:15 (result 0ffffh:0ffffh).


GetTime - get current time

OUTPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)


GetDate - get current date

OUTPUT:
AL = day of week (1..7, 1=Monday...7=Sunday)
DL = day
DH = month
SI = year


GetDateTime - get current date and time

OUTPUT:
AL = day of week (1..7, 1=Monday...7=Sunday)
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


GetDateTimeDT - get current date and time with DATETIME structure

INPUT:
DI = pointer to destination DATETIME structure

OUTPUT:
AL = day of week (1..7, 1=Monday...7=Sunday)


GetTimeUnix - get current time in Unix format

OUTPUT:
DX:AX = number of seconds (0..86399)


GetDateUnix - get current date in Unix format

OUTPUT:
DX:AX = number of seconds since 1/1/1970 0:00:00 Thursday


GetDateTimeUnix - get current date and time in Unix format

OUTPUT:
DX:AX = number of seconds since 1/1/1970 0:00:00 Thursday


Clock2Unix - convert clock timer to Unix time

INPUT:
DX:AX = clock timer (0..1800AFh, interval 54.92549322ms)

OUTPUT:
DX:AX = number of seconds (0..86399)
CL = hundredth (0..99)


Clock2Time - convert clock timer to time

INPUT:
DX:AX = clock timer (0..1800AFh, interval 54.92549322ms)

OUTPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)


Time2Clock - convert time to clock timer

INPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)

OUTPUT:
DX:AX = clock timer (0..1800AFh, interval 54.92549322ms)


GetClockTimer - get clock timer

OUTPUT:
DX:AX = clock timer (0..1800AFh, interval 54.92549322ms)


SetClockTimer - set clock timer (without updating RTC clock)

INPUT:
DX:AX = clock timer (0..1800AFh, interval 54.92549322ms)


GetRTCTime - get time from RTC (CMOS) clock

OUTPUT:
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)


GetRTCDate - get date from RTC (CMOS) clock

OUTPUT:
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


GetRTCDateTime - get date and time from RTC (CMOS) clock

OUTPUT:
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


GetRTCDateTimeDT - get date and time from RTC clock with DATETIME

INPUT:
DI = pointer to
DATETIME structure


SetTime - set new time

INPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)


SetDate - set new date

INPUT:
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


SetDateTime - set new date and time

INPUT:
BL = hundredth (0..99)
BH = second (0..59)
CL = minute (0..59)
CH = hour (0..23)
DL = day (1..31)
DH = month (1..12)
SI = year (1970..2106)


SetDateTimeDT - set new date and time with DATETIME

INPUT:
DI = pointer to
DATETIME structure


ReinitDateTime - reinitialize date and time from RTC (CMOS) clock

NOTES:
Can be used after changing TIMER0 (Int 08h) frequency.


GetSysTimer - get system timer

OUTPUT:
AX = system timer (increasing 0..0ffffh)

NOTES: Timer counts in frequency 1.193182 MHz, resolution 0.838095 us. It takes aprox. 7 us.


SysTimerToUs - recalc system timer interval to microseconds

INPUT:
AX = system timer interval in ticks (0..0ffffh)

OUTPUT:
AX = time interval in microseconds (0..54924)

NOTES: Timer counts in frequency 1.193182 MHz, resolution 0.838095 us.


UsToSysTimer - recalc microseconds to system timer interval

INPUT:
AX = time interval in microseconds (0..54924)

OUTPUT:
AX = system timer interval in ticks (0..0ffffh)

NOTES: Timer counts in frequency 1.193182 MHz, resolution 0.838095 us.


WaitUs - wait short time in microseconds

INPUT:
AX = required period in us (0..50000)

NOTES: Interrupt need not be enabled. It takes minimal aprox. 15 us, granularity is aprox. 7 us.


WaitMs - wait given time in milliseconds

INPUT:
AX = required period in ms (0..65535)

NOTES: Interrupt need not be enabled.


Date-time structure DATETIME:

DATETIME_Time: time entries (hundr,sec,min,hour)
DATETIME_Hundr: (byte) (BL) hundredth (0..99)
DATETIME_Sec: (byte) (BH) second (0 to 59)
DATETIME_Min: (byte) (CL) minute (0 to 59)
DATETIME_Hour: (byte) (CH) hour (0 to 23)

DATETIME_Date: date entries (day, month, year)
DATETIME_Day: (byte) (DL) day in month (1 to 31)
DATETIME_Month: (byte) (DH) month (1 to 12)
DATETIME_Year: (word) (SI) year (Unix 1970..2106, DOS 1980..2117)


Source code TIME.ASM

<< Back