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 }