mirror of
https://github.com/cc65/cc65.git
synced 2024-08-16 12:29:03 +00:00
The situation on the Apple II is rather special: There are several types of RTCs. It's not desirable to have specific code for all of them. As the OS supports file timestamps RTC owners usually use OS drivers for their RTC. Those drivers read the RTC and write the result in a "date/time location" in RAM. The OS reads the date/time from the RAM location. If there's no RTC the RAM location keeps containing zeros. The OS uses those zeros as timestamps and the files show up in a directory as "<NO DATE>". There's no common interface to set RTCs so if an RTC _IS_ present there's just nothing to do. However, if there's _NO_ RTC present the user might very well be interest to "manually" set the RAM location in order to have timestamps. But he surely doesn't want to manually set the RAM location over an over again. Rather he wants to set it just once after booting the OS. From that perspective it makes most sense to not set both the date and the time but rather only set the date and have the time just stay zero. Then files show up in a directory as "DD-MON-YY 0:00". So clock_settime() checks if the current time equals 0:00. If it does _NOT_ then an RTC is supposed to be active and clock_settime() fails with ERANGE. Otherwise clock_settime() ignores sets the date - and completely ignores the time provided as parameter. clock_getres() too checks if the current time equals 0:00. If it does _NOT_ then an RTC is supposed to be active and clock_getres() returns a time resolution of one minute. Otherwise clock_getres() presumes that the only one who sets the RAM location is clock_settime() and therefore returns a time resolution of one day.
69 lines
3.4 KiB
PHP
69 lines
3.4 KiB
PHP
;/*****************************************************************************/
|
|
;/* */
|
|
;/* time.inc */
|
|
;/* */
|
|
;/* Date and time */
|
|
;/* */
|
|
;/* */
|
|
;/* */
|
|
;/* (C) 2009 Ullrich von Bassewitz */
|
|
;/* Roemerstrasse 52 */
|
|
;/* D-70794 Filderstadt */
|
|
;/* EMail: uz@cc65.org */
|
|
;/* */
|
|
;/* */
|
|
;/* This software is provided 'as-is', without any expressed or implied */
|
|
;/* warranty. In no event will the authors be held liable for any damages */
|
|
;/* arising from the use of this software. */
|
|
;/* */
|
|
;/* Permission is granted to anyone to use this software for any purpose, */
|
|
;/* including commercial applications, and to alter it and redistribute it */
|
|
;/* freely, subject to the following restrictions: */
|
|
;/* */
|
|
;/* 1. The origin of this software must not be misrepresented; you must not */
|
|
;/* claim that you wrote the original software. If you use this software */
|
|
;/* in a product, an acknowledgment in the product documentation would be */
|
|
;/* appreciated but is not required. */
|
|
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
|
;/* be misrepresented as being the original software. */
|
|
;/* 3. This notice may not be removed or altered from any source */
|
|
;/* distribution. */
|
|
;/* */
|
|
;/*****************************************************************************/
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Struct tm - must match the struct defined in time.h
|
|
|
|
.struct tm
|
|
tm_sec .word
|
|
tm_min .word
|
|
tm_hour .word
|
|
tm_mday .word
|
|
tm_mon .word
|
|
tm_year .word
|
|
tm_wday .word
|
|
tm_yday .word
|
|
tm_isdst .word
|
|
.endstruct
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Struct timespec - must match the struct defined in time.h
|
|
|
|
.struct timespec
|
|
tv_sec .dword
|
|
tv_nsec .dword
|
|
.endstruct
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Exported functions
|
|
|
|
.global _clock_getres
|
|
.global _clock_gettime
|
|
.global _clock_settime
|
|
.global _localtime
|
|
.global _mktime
|