Mercurial > ecos
comparison packages/hal/common/current/src/hal_stub.c @ 34:29bc183297e1 ecos-sw-1999-09-02
Merge from eCos master repository on 1999-09-02-16:26:10-BST
| author | jlarmour |
|---|---|
| date | Thu, 02 Sep 1999 16:11:22 +0000 |
| parents | 641b639be825 |
| children | e7ba79f6d3a8 |
comparison
equal
deleted
inserted
replaced
| 33:7a567ebab069 | 34:29bc183297e1 |
|---|---|
| 388 | 388 |
| 389 *ptr++ = __tohex (PC >> 4); | 389 *ptr++ = __tohex (PC >> 4); |
| 390 *ptr++ = __tohex (PC); | 390 *ptr++ = __tohex (PC); |
| 391 *ptr++ = ':'; | 391 *ptr++ = ':'; |
| 392 addr = get_register (PC); | 392 addr = get_register (PC); |
| 393 ptr = __mem2hex((char *)&addr, ptr, sizeof(addr), 0); | 393 ptr = __mem2hex((char *)&addr, ptr, REGSIZE(PC), 0); |
| 394 *ptr++ = ';'; | 394 *ptr++ = ';'; |
| 395 | 395 |
| 396 *ptr++ = __tohex (SP >> 4); | 396 *ptr++ = __tohex (SP >> 4); |
| 397 *ptr++ = __tohex (SP); | 397 *ptr++ = __tohex (SP); |
| 398 *ptr++ = ':'; | 398 *ptr++ = ':'; |
| 399 ptr = __mem2hex((char *)&sp, ptr, sizeof(sp), 0); | 399 ptr = __mem2hex((char *)&sp, ptr, REGSIZE(SP), 0); |
| 400 *ptr++ = ';'; | 400 *ptr++ = ';'; |
| 401 | 401 |
| 402 *ptr++ = 0; | 402 *ptr++ = 0; |
| 403 } | 403 } |
| 404 | 404 |
| 479 static volatile target_register_t memCount; | 479 static volatile target_register_t memCount; |
| 480 | 480 |
| 481 static void | 481 static void |
| 482 __do_copy_mem (unsigned char* src, unsigned char* dst) | 482 __do_copy_mem (unsigned char* src, unsigned char* dst) |
| 483 { | 483 { |
| 484 __mem_fault = 1; // Defaults to 'fail'. Is cleared | 484 unsigned long *long_dst; |
| 485 // when the copy loop completes. | 485 unsigned long *long_src; |
| 486 __mem_fault_handler = &&err; | 486 unsigned short *short_dst; |
| 487 | 487 unsigned short *short_src; |
| 488 while (memCount) | 488 |
| 489 { | 489 __mem_fault = 1; /* Defaults to 'fail'. Is cleared */ |
| 490 *dst++ = *src++; | 490 /* when the copy loop completes. */ |
| 491 memCount--; | 491 __mem_fault_handler = &&err; |
| 492 } | 492 |
| 493 | 493 // See if it's safe to do multi-byte, aligned operations |
| 494 __mem_fault = 0; | 494 while (memCount) { |
| 495 if ((memCount >= sizeof(long)) && | |
| 496 (((target_register_t)dst & (sizeof(long)-1)) == 0) && | |
| 497 (((target_register_t)src & (sizeof(long)-1)) == 0)) { | |
| 498 | |
| 499 long_dst = (unsigned long *)dst; | |
| 500 long_src = (unsigned long *)src; | |
| 501 | |
| 502 *long_dst++ = *long_src++; | |
| 503 memCount -= sizeof(long); | |
| 504 | |
| 505 dst = (unsigned char *)long_dst; | |
| 506 src = (unsigned char *)long_src; | |
| 507 } else if ((memCount >= sizeof(short)) && | |
| 508 (((target_register_t)dst & (sizeof(short)-1)) == 0) && | |
| 509 (((target_register_t)src & (sizeof(short)-1)) == 0)) { | |
| 510 | |
| 511 short_dst = (unsigned short *)dst; | |
| 512 short_src = (unsigned short *)src; | |
| 513 | |
| 514 *short_dst++ = *short_src++; | |
| 515 memCount -= sizeof(short); | |
| 516 | |
| 517 dst = (unsigned char *)short_dst; | |
| 518 src = (unsigned char *)short_src; | |
| 519 } else { | |
| 520 *dst++ = *src++; | |
| 521 memCount--; | |
| 522 } | |
| 523 } | |
| 524 | |
| 525 __mem_fault = 0; | |
| 495 | 526 |
| 496 err: | 527 err: |
| 497 __mem_fault_handler = (void *)0; | 528 __mem_fault_handler = (void *)0; |
| 498 } | 529 } |
| 499 | 530 |
| 500 /* | 531 /* |
| 501 * __read_mem_safe: | 532 * __read_mem_safe: |
| 502 * Get contents of target memory, abort on error. | 533 * Get contents of target memory, abort on error. |
| 503 */ | 534 */ |
| 504 | 535 |
| 505 int | 536 int |
| 506 __read_mem_safe (unsigned char *dst, target_register_t src, int count) | 537 __read_mem_safe (void *dst, void *src, int count) |
| 507 { | 538 { |
| 508 memCount = count; | 539 memCount = count; |
| 509 __do_copy_mem((unsigned char*) src, (unsigned char*) dst); | 540 __do_copy_mem((unsigned char*) src, (unsigned char*) dst); |
| 510 return count - memCount; // return number of bytes successfully read | 541 return count - memCount; // return number of bytes successfully read |
| 511 } | 542 } |
| 514 * __write_mem_safe: | 545 * __write_mem_safe: |
| 515 * Set contents of target memory, abort on error. | 546 * Set contents of target memory, abort on error. |
| 516 */ | 547 */ |
| 517 | 548 |
| 518 int | 549 int |
| 519 __write_mem_safe (unsigned char *src, target_register_t dst, int count) | 550 __write_mem_safe (void *src, void *dst, int count) |
| 520 { | 551 { |
| 521 memCount = count; | 552 memCount = count; |
| 522 __do_copy_mem((unsigned char*) src, (unsigned char*) dst); | 553 __do_copy_mem((unsigned char*) src, (unsigned char*) dst); |
| 523 return count - memCount; // return number of bytes successfully written | 554 return count - memCount; // return number of bytes successfully written |
| 524 } | 555 } |
