1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-25 17:29:50 +00:00
Commit Graph

7782 Commits

Author SHA1 Message Date
Oliver Schmidt
f40dcb5883 Added clock_getres() / clock_settime() for the Apple II.
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.
2018-08-15 21:34:35 +02:00
Oliver Schmidt
326ca263c9 Minor style fix. 2018-08-15 19:40:56 +02:00
Oliver Schmidt
59a8149556 Added clock_getres() for CBMs.
All CBMs have a clock (CIA TOD) resolution of 1/10 second.
2018-08-15 19:40:27 +02:00
Oliver Schmidt
842c151edd Replaced _systime with clock_gettime.
We want to add the capability to not only get the time but also set the time, but there's no "setter" for the "getter" time().

The first ones that come into mind are gettimeofday() and settimeofday(). However, they take a struct timezone argument that doesn't make sense - even the man pages says "The use of the timezone structure is obsolete; the tz argument should normally be specified as NULL." And POSIX says "Applications should use the clock_gettime() function instead of the obsolescent gettimeofday() function."

The ...timeofday() functions work with microseconds while the clock_...time() functions work with nanoseconds. Given that we expect our targets to support only 1/10 of seconds the microseconds look preferable at first sight. However, already microseconds require the cc65 data type 'long' so it's not such a relevant difference to nanoseconds. Additionally clock_getres() seems useful.

In order to avoid code duplication clock_gettime() takes over the role of the actual time getter from _systime(). So time() now calls clock_gettime() instead of _systime().

For some reason beyond my understanding _systime() was mentioned in time.h. _systime() worked exactly like e.g. _sysremove() and those _sys...() functions are all considered internal. The only reason I could see would be a performance gain of bypassing the time() wrapper. However, all known _systime() implementations internally called mktime(). And mktime() is implemented in C using an iterative algorithm so I really can't see what would be left to gain here. From that perspective I decided to just remove _systime().
2018-08-15 16:06:44 +02:00
Oliver Schmidt
55a07c1dcd Removed stray /t char. 2018-08-15 16:06:44 +02:00
Oliver Schmidt
bbed9fdb63 Fixed typo. 2018-08-15 16:06:44 +02:00
Olli Savia
e6e9c72f66 Added CHKOUT and CLRCHN 2018-08-15 11:53:17 +02:00
greg-king5
188e3a74ed
Merge pull request #712 from ppelleti/fix-bit
sim65: Fix "$2C: BIT abs" to access the correct address.
2018-08-11 01:48:11 -04:00
Patrick Pelletier
5cdaa96e4c sim65: Fix "$2C: BIT abs" to access the correct address.
Bug is documented here:
http://forum.6502.org/viewtopic.php?f=2&t=5242
2018-08-10 12:58:48 -07:00
Oliver Schmidt
a9ce4dc76c "Inverted" time_t value handling.
So far time_t values were interpreted as local time values. However, usually time_t values are to be interpreted as "seconds since 1 Jan 1970 in UTC". Therefore all logic handling time_t values has to be changed.

- So far gmtime() called localtime() with an adjusted time_t, now localtime() calls gmtime() with an adjusted time_t.
- mktime() has to do "the opposite" of localtime(), to keep it that way mktime() does now the inverse adjustment made by localtime().
- All currently present time() implementations internally call mktime() so they don't require individual adjustments.
2018-08-02 17:12:12 +02:00
Oliver Schmidt
753b48647f
Increased consistency.
The test program works as-is only if the timezone isn't set (to something different than UTC). However, using localtime() instead of gmtime() makes it at least consistent in that the original time (given to mktime()) is identical to the time retrieved.
2018-08-02 15:45:57 +02:00
Greg King
ad6c2dbe7b Added code to make the 65816's MVN and MVP instructions handle both immediate (bank) and far-address operands. 2018-07-29 03:50:02 -04:00
Greg King
e6fc904e3c Fixed some code, to adapt to register-use changes caused by pull request #652. 2018-07-27 09:21:31 -04:00
Oliver Schmidt
e86a7db18b Some minor cleanups. 2018-07-26 14:35:26 +02:00
Oliver Schmidt
e949a3e642 Fixed regression introduced by https://github.com/cc65/cc65/pull/652. 2018-07-26 14:31:17 +02:00
Oliver Schmidt
97be359d4a Updated comment. 2018-07-26 13:09:21 +02:00
IrgendwerA8
c9869c1a26 Quick fix for missing _div() adaptation after 95223be. 2018-07-26 10:44:22 +02:00
Oliver Schmidt
b04028b5d8 Added test for mktime() and gmtime().
A recent regression makes gmtime()/localtime() fail. So it's obviously desirable to have a test for that code.
2018-07-24 03:26:40 +02:00
Greg King
eeb1b927ce Fixed the order in which the 65816's block-move instructions' operands are written and assembled.
The source bank number is written first; but, assembled second.
The destination bank is written second; but, assembled first.
2018-07-05 10:58:59 -04:00
Oliver Schmidt
cc5c0931a3
Merge pull request #695 from ops/cbmkernal_imports
CBM: Add imports for standard kernal entries
2018-07-04 23:47:33 +02:00
Olli Savia
fdce8fb34d Added a blank line between .include statements and .import/.export statements 2018-07-04 17:40:28 +03:00
Olli Savia
f7636fe8f2 Removed .import for std kernal entries. Added .include "cbm.inc" 2018-07-03 22:47:42 +03:00
Olli Savia
032a3877e0 Added .import for std kernal entries 2018-07-03 22:44:59 +03:00
Oliver Schmidt
e98bb13271
Merge pull request #693 from ops/cbmkernal_stage3
cbm_kernal enhancements
2018-07-02 10:39:57 +02:00
Olli Savia
3e94f7f55c Moved C128 specific definitions to cbm_kernal.inc 2018-07-01 09:58:39 +03:00
Olli Savia
820c0efcb3 Use common include file cbm_kernal.inc 2018-07-01 09:56:37 +03:00
Olli Savia
4c45de2c45 Updated comment 2018-07-01 09:54:39 +03:00
Oliver Schmidt
9f913ae109
Merge pull request #692 from ops/cbmkernal_stage2
Update library to use cbm_kernal.inc for kernal entry points
2018-06-30 22:26:04 +02:00
Olli Savia
635a99c083 TAB to space conversion 2018-06-30 16:25:43 +03:00
Olli Savia
d5bc751f54 Removed RAMTAS 2018-06-29 22:59:53 +03:00
Olli Savia
96e6a0a114 Common include file is now cbm_kernal.inc 2018-06-29 22:58:16 +03:00
Olli Savia
42e9b971c5 Merge remote-tracking branch 'upstream/master' into cbmkernal_stage2 2018-06-29 22:50:02 +03:00
Oliver Schmidt
18966eab63
Merge pull request #688 from ops/cbmkernalasm
RFC: Common kernal inc file for Commodore targets
2018-06-29 18:59:48 +02:00
Olli Savia
f185e28892 cbmkernal.inc -> cbm_kernal.inc 2018-06-29 16:14:00 +03:00
Olli Savia
f7fbac4c6b Use common include file cbmkernal.inc 2018-06-27 21:39:24 +03:00
Oliver Schmidt
153bb29501
Merge pull request #682 from shinra-jp/da65-synclines
Support for preprocessing info file via cpp or m4.
2018-06-26 10:26:15 +02:00
AIDA Shinra
31fdec2e2e Style fix 2018-06-25 23:50:46 +09:00
AIDA Shinra
d5acfeb426 Merge remote-tracking branch 'origin' into da65-synclines 2018-06-25 23:38:43 +09:00
Olli Savia
8c4a0768cc TAB to space conversion 2018-06-22 11:29:03 +03:00
Olli Savia
accfc14fb1 RESTOR and VECTOR moved under own ifdef/endif block 2018-06-22 11:21:00 +03:00
Oliver Schmidt
86945a1270
Merge pull request #687 from polluks/patch-12
Smaller driver code
2018-06-21 22:37:29 +02:00
Stefan
6a70d1dab1
Removed unused label 2018-06-21 20:30:14 +00:00
Olli Savia
a22e19a902 Added asminc/cbmkernal.inc 2018-06-21 18:32:38 +03:00
greg-king5
4980fade74
Made LINE plot single-point lines correctly. 2018-06-21 08:18:53 -04:00
Stefan
23534beaa6
Smaller driver code 2018-06-21 00:25:33 +00:00
AIDA Shinra
9439b5b645 Merge branch 'da65-synclines' of github:shinra-jp/cc65 into da65-synclines 2018-06-14 02:04:06 +09:00
AIDA Shinra
fd67284b4d Followed the discussions in the Pull request #682.
* Fixed a misspelling
* Fixed styles
* Added sample codes
2018-06-14 02:02:16 +09:00
AIDA Shinra
2b25329423 Support for preprocessing info file via cpp or m4. 2018-06-14 02:02:16 +09:00
Oliver Schmidt
6c320f7d65
Merge pull request #681 from shinra-jp/voperand
Support for "inline parameters" of subroutines
2018-06-13 14:41:24 +02:00
AIDA Shinra
75c4972021 Style and alignment fixes. 2018-06-13 21:24:34 +09:00