--- BasiliskII/src/AmigaOS/timer_amiga.cpp 1999/10/03 14:16:25 1.1 +++ BasiliskII/src/AmigaOS/timer_amiga.cpp 2001/07/06 17:36:07 1.6 @@ -1,7 +1,7 @@ /* * timer_amiga.cpp - Time Manager emulation, AmigaOS specific stuff * - * Basilisk II (C) 1997-1999 Christian Bauer + * Basilisk II (C) 1997-2001 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,11 +30,6 @@ #include "debug.h" -// Assembly functions -extern "C" ULONG TimevalTo64(struct timeval *, ULONG *); -extern "C" LONG TimevalToMacTime(struct timeval *); - - /* * Return microseconds since boot (64 bit) */ @@ -44,7 +39,9 @@ void Microseconds(uint32 &hi, uint32 &lo D(bug("Microseconds\n")); struct timeval tv; GetSysTime(&tv); - lo = TimevalTo64(&tv, &hi); + uint64 tl = (uint64)tv.tv_secs * 1000000 + tv.tv_micro; + hi = tl >> 32; + lo = tl; } @@ -52,14 +49,11 @@ void Microseconds(uint32 &hi, uint32 &lo * Return local date/time in Mac format (seconds since 1.1.1904) */ -const uint32 TIME_OFFSET = 0x8b31ef80; // Offset Mac->Amiga time in seconds - uint32 TimerDateTime(void) { - ULONG secs; - ULONG mics; + ULONG secs, mics; CurrentTime(&secs, &mics); - return secs + TIME_OFFSET; + return secs + 0x8b31ef80; } @@ -131,6 +125,11 @@ int32 timer_host2mac_time(tm_time_t host { if (hosttime.tv_secs < 0) return 0; - else - return TimevalToMacTime(&hosttime); + else { + uint64 t = (uint64)hosttime.tv_secs * 1000000 + hosttime.tv_micro; + if (t > 0x7fffffff) + return t / 1000; // Time in milliseconds + else + return -t; // Time in negative microseconds + } }