1 /****************************************************************************
3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4 www.systec-electronic.com
8 Description: Abstract Memory Interface for x86 compatible
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions
16 1. Redistributions of source code must retain the above copyright
17 notice, this list of conditions and the following disclaimer.
19 2. Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
23 3. Neither the name of SYSTEC electronic GmbH nor the names of its
24 contributors may be used to endorse or promote products derived
25 from this software without prior written permission. For written
26 permission, please contact info@systec-electronic.com.
28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
31 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32 COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
38 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39 POSSIBILITY OF SUCH DAMAGE.
43 If a provision of this License is or becomes illegal, invalid or
44 unenforceable in any jurisdiction, that shall not affect:
45 1. the validity or enforceability in that jurisdiction of any other
46 provision of this License; or
47 2. the validity or enforceability in other jurisdictions of that or
48 any other provision of this License.
50 -------------------------------------------------------------------------
52 $RCSfile: amix86.c,v $
56 $Revision: 1.3 $ $Date: 2008/04/17 21:36:32 $
63 -------------------------------------------------------------------------
67 r.s.: first implemetation
69 2006-06-13 d.k.: duplicate functions for little endian and big endian
71 ****************************************************************************/
77 #if (!defined(EPL_AMI_INLINED)) || defined(INLINE_ENABLED)
79 //---------------------------------------------------------------------------
81 //---------------------------------------------------------------------------
102 //=========================================================================//
104 // P U B L I C F U N C T I O N S //
106 //=========================================================================//
108 //---------------------------------------------------------------------------
110 // Function: AmiSetXXXToBe()
112 // Description: writes the specified value to the absolute address in
115 // Parameters: pAddr_p = absolute address
122 //---------------------------------------------------------------------------
124 //------------< write BYTE in big endian >--------------------------
126 void PUBLIC AmiSetByteToBe (void FAR* pAddr_p, BYTE bByteVal_p)
129 *(BYTE FAR*)pAddr_p = bByteVal_p;
136 //------------< write WORD in big endian >--------------------------
138 INLINE_FUNCTION void PUBLIC AmiSetWordToBe (void FAR* pAddr_p, WORD wWordVal_p)
140 twStruct FAR* pwStruct;
143 wValue.m_wWord = (WORD)((wWordVal_p & 0x00FF) << 8); //LSB to MSB
144 wValue.m_wWord |= (WORD)((wWordVal_p & 0xFF00) >> 8); //MSB to LSB
146 pwStruct = (twStruct FAR*)pAddr_p;
147 pwStruct->m_wWord = wValue.m_wWord;
153 //------------< write DWORD in big endian >-------------------------
155 INLINE_FUNCTION void PUBLIC AmiSetDwordToBe (void FAR* pAddr_p, DWORD dwDwordVal_p)
157 tdwStruct FAR* pdwStruct;
161 dwValue.m_dwDword = ((dwDwordVal_p & 0x000000FF)<<24); //LSB to MSB
162 dwValue.m_dwDword|= ((dwDwordVal_p & 0x0000FF00)<<8);
163 dwValue.m_dwDword|= ((dwDwordVal_p & 0x00FF0000)>>8 );
164 dwValue.m_dwDword|= ((dwDwordVal_p & 0xFF000000)>>24); //MSB to LSB
166 pdwStruct = (tdwStruct FAR*)pAddr_p;
167 pdwStruct->m_dwDword = dwValue.m_dwDword;
174 //---------------------------------------------------------------------------
176 // Function: AmiSetXXXToLe()
178 // Description: writes the specified value to the absolute address in
181 // Parameters: pAddr_p = absolute address
188 //---------------------------------------------------------------------------
190 //------------< write BYTE in little endian >--------------------------
192 void PUBLIC AmiSetByteToLe (void FAR* pAddr_p, BYTE bByteVal_p)
195 *(BYTE FAR*)pAddr_p = bByteVal_p;
202 //------------< write WORD in little endian >--------------------------
204 INLINE_FUNCTION void PUBLIC AmiSetWordToLe (void FAR* pAddr_p, WORD wWordVal_p)
206 twStruct FAR* pwStruct;
208 pwStruct = (twStruct FAR*)pAddr_p;
209 pwStruct->m_wWord = wWordVal_p;
215 //------------< write DWORD in little endian >-------------------------
217 INLINE_FUNCTION void PUBLIC AmiSetDwordToLe (void FAR* pAddr_p, DWORD dwDwordVal_p)
219 tdwStruct FAR* pdwStruct;
221 pdwStruct = (tdwStruct FAR*)pAddr_p;
222 pdwStruct->m_dwDword = dwDwordVal_p;
229 //---------------------------------------------------------------------------
231 // Function: AmiGetXXXFromBe()
233 // Description: reads the specified value from the absolute address in
236 // Parameters: pAddr_p = absolute address
238 // Returns: XXX = value
242 //---------------------------------------------------------------------------
244 //------------< read BYTE in big endian >---------------------------
246 BYTE PUBLIC AmiGetByteFromBe (void FAR* pAddr_p)
249 return ( *(BYTE FAR*)pAddr_p );
256 //------------< read WORD in big endian >---------------------------
258 INLINE_FUNCTION WORD PUBLIC AmiGetWordFromBe (void FAR* pAddr_p)
260 twStruct FAR* pwStruct;
263 pwStruct = (twStruct FAR*)pAddr_p;
265 wValue.m_wWord = (WORD)((pwStruct->m_wWord & 0x00FF) << 8); //LSB to MSB
266 wValue.m_wWord |= (WORD)((pwStruct->m_wWord & 0xFF00) >> 8); //MSB to LSB
268 return ( wValue.m_wWord );
275 //------------< read DWORD in big endian >--------------------------
277 INLINE_FUNCTION DWORD PUBLIC AmiGetDwordFromBe (void FAR* pAddr_p)
279 tdwStruct FAR* pdwStruct;
282 pdwStruct = (tdwStruct FAR*)pAddr_p;
284 dwValue.m_dwDword = ((pdwStruct->m_dwDword & 0x000000FF)<<24); //LSB to MSB
285 dwValue.m_dwDword|= ((pdwStruct->m_dwDword & 0x0000FF00)<<8);
286 dwValue.m_dwDword|= ((pdwStruct->m_dwDword & 0x00FF0000)>>8 );
287 dwValue.m_dwDword|= ((pdwStruct->m_dwDword & 0xFF000000)>>24); //MSB to LSB
289 return ( dwValue.m_dwDword );
294 //---------------------------------------------------------------------------
296 // Function: AmiGetXXXFromLe()
298 // Description: reads the specified value from the absolute address in
301 // Parameters: pAddr_p = absolute address
303 // Returns: XXX = value
307 //---------------------------------------------------------------------------
309 //------------< read BYTE in little endian >---------------------------
311 BYTE PUBLIC AmiGetByteFromLe (void FAR* pAddr_p)
314 return ( *(BYTE FAR*)pAddr_p );
321 //------------< read WORD in little endian >---------------------------
323 INLINE_FUNCTION WORD PUBLIC AmiGetWordFromLe (void FAR* pAddr_p)
325 twStruct FAR* pwStruct;
327 pwStruct = (twStruct FAR*)pAddr_p;
328 return ( pwStruct->m_wWord );
335 //------------< read DWORD in little endian >--------------------------
337 INLINE_FUNCTION DWORD PUBLIC AmiGetDwordFromLe (void FAR* pAddr_p)
339 tdwStruct FAR* pdwStruct;
341 pdwStruct = (tdwStruct FAR*)pAddr_p;
342 return ( pdwStruct->m_dwDword );
347 //---------------------------------------------------------------------------
349 // Function: AmiSetDword24ToBe()
351 // Description: sets a 24 bit value to a buffer in big endian
353 // Parameters: pAddr_p = pointer to destination buffer
354 // dwDwordVal_p = value to set
360 //---------------------------------------------------------------------------
362 INLINE_FUNCTION void PUBLIC AmiSetDword24ToBe (void FAR* pAddr_p, DWORD dwDwordVal_p)
365 ((BYTE FAR*) pAddr_p)[0] = ((BYTE FAR*) &dwDwordVal_p)[2];
366 ((BYTE FAR*) pAddr_p)[1] = ((BYTE FAR*) &dwDwordVal_p)[1];
367 ((BYTE FAR*) pAddr_p)[2] = ((BYTE FAR*) &dwDwordVal_p)[0];
372 //---------------------------------------------------------------------------
374 // Function: AmiSetDword24ToLe()
376 // Description: sets a 24 bit value to a buffer in little endian
378 // Parameters: pAddr_p = pointer to destination buffer
379 // dwDwordVal_p = value to set
385 //---------------------------------------------------------------------------
387 INLINE_FUNCTION void PUBLIC AmiSetDword24ToLe (void FAR* pAddr_p, DWORD dwDwordVal_p)
390 ((BYTE FAR*) pAddr_p)[0] = ((BYTE FAR*) &dwDwordVal_p)[0];
391 ((BYTE FAR*) pAddr_p)[1] = ((BYTE FAR*) &dwDwordVal_p)[1];
392 ((BYTE FAR*) pAddr_p)[2] = ((BYTE FAR*) &dwDwordVal_p)[2];
397 //---------------------------------------------------------------------------
399 // Function: AmiGetDword24FromBe()
401 // Description: reads a 24 bit value from a buffer in big endian
403 // Parameters: pAddr_p = pointer to source buffer
405 // Return: DWORD = read value
409 //---------------------------------------------------------------------------
411 INLINE_FUNCTION DWORD PUBLIC AmiGetDword24FromBe (void FAR* pAddr_p)
416 dwStruct.m_dwDword = AmiGetDwordFromBe (pAddr_p);
417 dwStruct.m_dwDword >>= 8;
419 return ( dwStruct.m_dwDword );
424 //---------------------------------------------------------------------------
426 // Function: AmiGetDword24FromLe()
428 // Description: reads a 24 bit value from a buffer in little endian
430 // Parameters: pAddr_p = pointer to source buffer
432 // Return: DWORD = read value
436 //---------------------------------------------------------------------------
438 INLINE_FUNCTION DWORD PUBLIC AmiGetDword24FromLe (void FAR* pAddr_p)
443 dwStruct.m_dwDword = AmiGetDwordFromLe (pAddr_p);
444 dwStruct.m_dwDword &= 0x00FFFFFF;
446 return ( dwStruct.m_dwDword );
453 //---------------------------------------------------------------------------
455 // Function: AmiSetQword64ToBe()
457 // Description: sets a 64 bit value to a buffer in big endian
459 // Parameters: pAddr_p = pointer to destination buffer
460 // qwQwordVal_p = quadruple word value
466 //---------------------------------------------------------------------------
468 INLINE_FUNCTION void PUBLIC AmiSetQword64ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p)
471 ((BYTE FAR*) pAddr_p)[0] = ((BYTE FAR*) &qwQwordVal_p)[7];
472 ((BYTE FAR*) pAddr_p)[1] = ((BYTE FAR*) &qwQwordVal_p)[6];
473 ((BYTE FAR*) pAddr_p)[2] = ((BYTE FAR*) &qwQwordVal_p)[5];
474 ((BYTE FAR*) pAddr_p)[3] = ((BYTE FAR*) &qwQwordVal_p)[4];
475 ((BYTE FAR*) pAddr_p)[4] = ((BYTE FAR*) &qwQwordVal_p)[3];
476 ((BYTE FAR*) pAddr_p)[5] = ((BYTE FAR*) &qwQwordVal_p)[2];
477 ((BYTE FAR*) pAddr_p)[6] = ((BYTE FAR*) &qwQwordVal_p)[1];
478 ((BYTE FAR*) pAddr_p)[7] = ((BYTE FAR*) &qwQwordVal_p)[0];
483 //---------------------------------------------------------------------------
485 // Function: AmiSetQword64ToLe()
487 // Description: sets a 64 bit value to a buffer in little endian
489 // Parameters: pAddr_p = pointer to destination buffer
490 // qwQwordVal_p = quadruple word value
496 //---------------------------------------------------------------------------
498 INLINE_FUNCTION void PUBLIC AmiSetQword64ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p)
503 pqwDst = (QWORD FAR*) pAddr_p;
504 *pqwDst = qwQwordVal_p;
509 //---------------------------------------------------------------------------
511 // Function: AmiGetQword64FromBe()
513 // Description: reads a 64 bit value from a buffer in big endian
515 // Parameters: pAddr_p = pointer to source buffer
521 //---------------------------------------------------------------------------
523 INLINE_FUNCTION QWORD PUBLIC AmiGetQword64FromBe (void FAR* pAddr_p)
528 ((BYTE FAR*) &qwStruct.m_qwQword)[0] = ((BYTE FAR*) pAddr_p)[7];
529 ((BYTE FAR*) &qwStruct.m_qwQword)[1] = ((BYTE FAR*) pAddr_p)[6];
530 ((BYTE FAR*) &qwStruct.m_qwQword)[2] = ((BYTE FAR*) pAddr_p)[5];
531 ((BYTE FAR*) &qwStruct.m_qwQword)[3] = ((BYTE FAR*) pAddr_p)[4];
532 ((BYTE FAR*) &qwStruct.m_qwQword)[4] = ((BYTE FAR*) pAddr_p)[3];
533 ((BYTE FAR*) &qwStruct.m_qwQword)[5] = ((BYTE FAR*) pAddr_p)[2];
534 ((BYTE FAR*) &qwStruct.m_qwQword)[6] = ((BYTE FAR*) pAddr_p)[1];
535 ((BYTE FAR*) &qwStruct.m_qwQword)[7] = ((BYTE FAR*) pAddr_p)[0];
537 return ( qwStruct.m_qwQword );
542 //---------------------------------------------------------------------------
544 // Function: AmiGetQword64FromLe()
546 // Description: reads a 64 bit value from a buffer in little endian
548 // Parameters: pAddr_p = pointer to source buffer
554 //---------------------------------------------------------------------------
556 INLINE_FUNCTION QWORD PUBLIC AmiGetQword64FromLe (void FAR* pAddr_p)
559 tqwStruct FAR* pqwStruct;
562 pqwStruct = (tqwStruct FAR*) pAddr_p;
563 qwStruct.m_qwQword = pqwStruct->m_qwQword;
565 return ( qwStruct.m_qwQword );
570 //---------------------------------------------------------------------------
572 // Function: AmiSetQword40ToBe()
574 // Description: sets a 40 bit value to a buffer in big endian
576 // Parameters: pAddr_p = pointer to destination buffer
577 // qwQwordVal_p = quadruple word value
583 //---------------------------------------------------------------------------
585 INLINE_FUNCTION void PUBLIC AmiSetQword40ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p)
588 ((BYTE FAR*) pAddr_p)[0] = ((BYTE FAR*) &qwQwordVal_p)[4];
589 ((BYTE FAR*) pAddr_p)[1] = ((BYTE FAR*) &qwQwordVal_p)[3];
590 ((BYTE FAR*) pAddr_p)[2] = ((BYTE FAR*) &qwQwordVal_p)[2];
591 ((BYTE FAR*) pAddr_p)[3] = ((BYTE FAR*) &qwQwordVal_p)[1];
592 ((BYTE FAR*) pAddr_p)[4] = ((BYTE FAR*) &qwQwordVal_p)[0];
597 //---------------------------------------------------------------------------
599 // Function: AmiSetQword40ToLe()
601 // Description: sets a 40 bit value to a buffer in little endian
603 // Parameters: pAddr_p = pointer to destination buffer
604 // qwQwordVal_p = quadruple word value
610 //---------------------------------------------------------------------------
612 INLINE_FUNCTION void PUBLIC AmiSetQword40ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p)
615 ((DWORD FAR*) pAddr_p)[0] = ((DWORD FAR*) &qwQwordVal_p)[0];
616 ((BYTE FAR*) pAddr_p)[4] = ((BYTE FAR*) &qwQwordVal_p)[4];
621 //---------------------------------------------------------------------------
623 // Function: AmiGetQword40FromBe()
625 // Description: reads a 40 bit value from a buffer in big endian
627 // Parameters: pAddr_p = pointer to source buffer
633 //---------------------------------------------------------------------------
635 INLINE_FUNCTION QWORD PUBLIC AmiGetQword40FromBe (void FAR* pAddr_p)
640 qwStruct.m_qwQword = AmiGetQword64FromBe (pAddr_p);
641 qwStruct.m_qwQword >>= 24;
643 return ( qwStruct.m_qwQword );
648 //---------------------------------------------------------------------------
650 // Function: AmiGetQword40FromLe()
652 // Description: reads a 40 bit value from a buffer in little endian
654 // Parameters: pAddr_p = pointer to source buffer
660 //---------------------------------------------------------------------------
662 INLINE_FUNCTION QWORD PUBLIC AmiGetQword40FromLe (void FAR* pAddr_p)
667 qwStruct.m_qwQword = AmiGetQword64FromLe (pAddr_p);
668 qwStruct.m_qwQword &= 0x000000FFFFFFFFFFLL;
670 return ( qwStruct.m_qwQword );
675 //---------------------------------------------------------------------------
677 // Function: AmiSetQword48ToBe()
679 // Description: sets a 48 bit value to a buffer in big endian
681 // Parameters: pAddr_p = pointer to destination buffer
682 // qwQwordVal_p = quadruple word value
688 //---------------------------------------------------------------------------
690 INLINE_FUNCTION void PUBLIC AmiSetQword48ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p)
693 ((BYTE FAR*) pAddr_p)[0] = ((BYTE FAR*) &qwQwordVal_p)[5];
694 ((BYTE FAR*) pAddr_p)[1] = ((BYTE FAR*) &qwQwordVal_p)[4];
695 ((BYTE FAR*) pAddr_p)[2] = ((BYTE FAR*) &qwQwordVal_p)[3];
696 ((BYTE FAR*) pAddr_p)[3] = ((BYTE FAR*) &qwQwordVal_p)[2];
697 ((BYTE FAR*) pAddr_p)[4] = ((BYTE FAR*) &qwQwordVal_p)[1];
698 ((BYTE FAR*) pAddr_p)[5] = ((BYTE FAR*) &qwQwordVal_p)[0];
703 //---------------------------------------------------------------------------
705 // Function: AmiSetQword48ToLe()
707 // Description: sets a 48 bit value to a buffer in little endian
709 // Parameters: pAddr_p = pointer to destination buffer
710 // qwQwordVal_p = quadruple word value
716 //---------------------------------------------------------------------------
718 INLINE_FUNCTION void PUBLIC AmiSetQword48ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p)
721 ((DWORD FAR*) pAddr_p)[0] = ((DWORD FAR*) &qwQwordVal_p)[0];
722 ((WORD FAR*) pAddr_p)[2] = ((WORD FAR*) &qwQwordVal_p)[2];
727 //---------------------------------------------------------------------------
729 // Function: AmiGetQword48FromBe()
731 // Description: reads a 48 bit value from a buffer in big endian
733 // Parameters: pAddr_p = pointer to source buffer
739 //---------------------------------------------------------------------------
741 INLINE_FUNCTION QWORD PUBLIC AmiGetQword48FromBe (void FAR* pAddr_p)
746 qwStruct.m_qwQword = AmiGetQword64FromBe (pAddr_p);
747 qwStruct.m_qwQword >>= 16;
749 return ( qwStruct.m_qwQword );
754 //---------------------------------------------------------------------------
756 // Function: AmiGetQword48FromLe()
758 // Description: reads a 48 bit value from a buffer in little endian
760 // Parameters: pAddr_p = pointer to source buffer
766 //---------------------------------------------------------------------------
768 INLINE_FUNCTION QWORD PUBLIC AmiGetQword48FromLe (void FAR* pAddr_p)
773 qwStruct.m_qwQword = AmiGetQword64FromLe (pAddr_p);
774 qwStruct.m_qwQword &= 0x0000FFFFFFFFFFFFLL;
776 return ( qwStruct.m_qwQword );
781 //---------------------------------------------------------------------------
783 // Function: AmiSetQword56ToBe()
785 // Description: sets a 56 bit value to a buffer in big endian
787 // Parameters: pAddr_p = pointer to destination buffer
788 // qwQwordVal_p = quadruple word value
794 //---------------------------------------------------------------------------
796 INLINE_FUNCTION void PUBLIC AmiSetQword56ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p)
799 ((BYTE FAR*) pAddr_p)[0] = ((BYTE FAR*) &qwQwordVal_p)[6];
800 ((BYTE FAR*) pAddr_p)[1] = ((BYTE FAR*) &qwQwordVal_p)[5];
801 ((BYTE FAR*) pAddr_p)[2] = ((BYTE FAR*) &qwQwordVal_p)[4];
802 ((BYTE FAR*) pAddr_p)[3] = ((BYTE FAR*) &qwQwordVal_p)[3];
803 ((BYTE FAR*) pAddr_p)[4] = ((BYTE FAR*) &qwQwordVal_p)[2];
804 ((BYTE FAR*) pAddr_p)[5] = ((BYTE FAR*) &qwQwordVal_p)[1];
805 ((BYTE FAR*) pAddr_p)[6] = ((BYTE FAR*) &qwQwordVal_p)[0];
810 //---------------------------------------------------------------------------
812 // Function: AmiSetQword56ToLe()
814 // Description: sets a 56 bit value to a buffer in little endian
816 // Parameters: pAddr_p = pointer to destination buffer
817 // qwQwordVal_p = quadruple word value
823 //---------------------------------------------------------------------------
825 INLINE_FUNCTION void PUBLIC AmiSetQword56ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p)
828 ((DWORD FAR*) pAddr_p)[0] = ((DWORD FAR*) &qwQwordVal_p)[0];
829 ((WORD FAR*) pAddr_p)[2] = ((WORD FAR*) &qwQwordVal_p)[2];
830 ((BYTE FAR*) pAddr_p)[6] = ((BYTE FAR*) &qwQwordVal_p)[6];
835 //---------------------------------------------------------------------------
837 // Function: AmiGetQword56FromBe()
839 // Description: reads a 56 bit value from a buffer in big endian
841 // Parameters: pAddr_p = pointer to source buffer
847 //---------------------------------------------------------------------------
849 INLINE_FUNCTION QWORD PUBLIC AmiGetQword56FromBe (void FAR* pAddr_p)
854 qwStruct.m_qwQword = AmiGetQword64FromBe (pAddr_p);
855 qwStruct.m_qwQword >>= 8;
857 return ( qwStruct.m_qwQword );
862 //---------------------------------------------------------------------------
864 // Function: AmiGetQword56FromLe()
866 // Description: reads a 56 bit value from a buffer in little endian
868 // Parameters: pAddr_p = pointer to source buffer
874 //---------------------------------------------------------------------------
876 INLINE_FUNCTION QWORD PUBLIC AmiGetQword56FromLe (void FAR* pAddr_p)
881 qwStruct.m_qwQword = AmiGetQword64FromLe (pAddr_p);
882 qwStruct.m_qwQword &= 0x00FFFFFFFFFFFFFFLL;
884 return ( qwStruct.m_qwQword );
889 //---------------------------------------------------------------------------
891 // Function: AmiSetTimeOfDay()
893 // Description: sets a TIME_OF_DAY (CANopen) value to a buffer
895 // Parameters: pAddr_p = pointer to destination buffer
896 // pTimeOfDay_p = pointer to struct TIME_OF_DAY
902 //---------------------------------------------------------------------------
904 INLINE_FUNCTION void PUBLIC AmiSetTimeOfDay (void FAR* pAddr_p, tTimeOfDay FAR* pTimeOfDay_p)
907 AmiSetDwordToLe (((BYTE FAR*) pAddr_p), pTimeOfDay_p->m_dwMs & 0x0FFFFFFF);
908 AmiSetWordToLe (((BYTE FAR*) pAddr_p) + 4, pTimeOfDay_p->m_wDays);
913 //---------------------------------------------------------------------------
915 // Function: AmiGetTimeOfDay()
917 // Description: reads a TIME_OF_DAY (CANopen) value from a buffer
919 // Parameters: pAddr_p = pointer to source buffer
920 // pTimeOfDay_p = pointer to struct TIME_OF_DAY
926 //---------------------------------------------------------------------------
928 INLINE_FUNCTION void PUBLIC AmiGetTimeOfDay (void FAR* pAddr_p, tTimeOfDay FAR* pTimeOfDay_p)
931 pTimeOfDay_p->m_dwMs = AmiGetDwordFromLe (((BYTE FAR*) pAddr_p)) & 0x0FFFFFFF;
932 pTimeOfDay_p->m_wDays = AmiGetWordFromLe (((BYTE FAR*) pAddr_p) + 4);
943 // Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
944 // damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).