comparison decoder.c @ 153:175d5fef21e4 src

Minor changes.
author jcdutton
date Sat, 05 Apr 2003 13:11:13 +0000
parents 3a1659f4a6c3
children 3492d41dc247
comparison
equal deleted inserted replaced
152:3a1659f4a6c3 153:175d5fef21e4
31 #include <inttypes.h> 31 #include <inttypes.h>
32 #include <string.h> /* For memset */ 32 #include <string.h> /* For memset */
33 #include <dvdread/ifo_types.h> /* vm_cmd_t */ 33 #include <dvdread/ifo_types.h> /* vm_cmd_t */
34 #include <assert.h> 34 #include <assert.h>
35 #include "dvdnav_internal.h" 35 #include "dvdnav_internal.h"
36
37 uint32_t vm_getbits(command_t *command, int start, int count) {
38 uint64_t result = 0;
39 uint64_t bit_mask=0xffffffffffffffff; /* I could put -1 instead */
40 uint64_t examining = 0;
41 int32_t bits;
42
43 if (count == 0) return 0;
44
45 if ( ((start - count) < -1) ||
46 (count > 32) ||
47 (start > 63) ||
48 (count < 0) ||
49 (start < 0) ) {
50 fprintf(MSG_OUT, "libdvdnav: Bad call to vm_getbits. Parameter out of range\n");
51 assert(0);
52 }
53 bit_mask >>= 63 - start;
54 bits = start + 1 - count;
55 examining = ((bit_mask >> bits) << bits );
56 command->examined |= examining;
57 result = (command->instruction & bit_mask) >> bits;
58 return (uint32_t) result;
59 }
60 36
61 static uint16_t get_GPRM(registers_t* registers, uint8_t reg) { 37 static uint16_t get_GPRM(registers_t* registers, uint8_t reg) {
62 if (registers->GPRM_mode[reg] & 0x01) { 38 if (registers->GPRM_mode[reg] & 0x01) {
63 struct timeval current_time, time_offset; 39 struct timeval current_time, time_offset;
64 uint16_t result; 40 uint16_t result;
578 int32_t total = 0; 554 int32_t total = 0;
579 555
580 #ifdef TRACE 556 #ifdef TRACE
581 /* DEBUG */ 557 /* DEBUG */
582 fprintf(MSG_OUT, "libdvdnav: Registers before transaction\n"); 558 fprintf(MSG_OUT, "libdvdnav: Registers before transaction\n");
583 vmPrint_registers( registers ); 559 vm_print_registers( registers );
584 fprintf(MSG_OUT, "libdvdnav: Full list of commands to execute\n"); 560 fprintf(MSG_OUT, "libdvdnav: Full list of commands to execute\n");
585 for(i = 0; i < num_commands; i++) 561 for(i = 0; i < num_commands; i++)
586 vmPrint_CMD(i, &commands[i]); 562 vm_print_cmd(i, &commands[i]);
587 fprintf(MSG_OUT, "libdvdnav: --------------------------------------------\n"); 563 fprintf(MSG_OUT, "libdvdnav: --------------------------------------------\n");
588 fprintf(MSG_OUT, "libdvdnav: Single stepping commands\n"); 564 fprintf(MSG_OUT, "libdvdnav: Single stepping commands\n");
589 #endif 565 #endif
590 566
591 i = 0; 567 i = 0;
592 while(i < num_commands && total < 100000) { 568 while(i < num_commands && total < 100000) {
593 int32_t line; 569 int32_t line;
594 570
595 #ifdef TRACE 571 #ifdef TRACE
596 vmPrint_CMD(i, &commands[i]); 572 vm_print_cmd(i, &commands[i]);
597 #endif 573 #endif
598 574
599 line = eval_command(&commands[i].bytes[0], registers, return_values); 575 line = eval_command(&commands[i].bytes[0], registers, return_values);
600 576
601 if (line < 0) { /* Link command */ 577 if (line < 0) { /* Link command */
602 #ifdef TRACE 578 #ifdef TRACE
603 fprintf(MSG_OUT, "libdvdnav: Registers after transaction\n"); 579 fprintf(MSG_OUT, "libdvdnav: Registers after transaction\n");
604 vmPrint_registers( registers ); 580 vm_print_registers( registers );
605 fprintf(MSG_OUT, "libdvdnav: eval: Doing Link/Jump/Call\n"); 581 fprintf(MSG_OUT, "libdvdnav: eval: Doing Link/Jump/Call\n");
606 #endif 582 #endif
607 return 1; 583 return 1;
608 } 584 }
609 585
616 } 592 }
617 593
618 memset(return_values, 0, sizeof(link_t)); 594 memset(return_values, 0, sizeof(link_t));
619 #ifdef TRACE 595 #ifdef TRACE
620 fprintf(MSG_OUT, "libdvdnav: Registers after transaction\n"); 596 fprintf(MSG_OUT, "libdvdnav: Registers after transaction\n");
621 vmPrint_registers( registers ); 597 vm_print_registers( registers );
622 #endif 598 #endif
623 return 0; 599 return 0;
624 } 600 }
625 601
626 #ifdef TRACE 602 #ifdef TRACE
689 return "PlayThis"; 665 return "PlayThis";
690 } 666 }
691 return "*** (bug)"; 667 return "*** (bug)";
692 } 668 }
693 669
694 void vmPrint_LINK(link_t value) { 670 void vm_print_link(link_t value) {
695 char *cmd = linkcmd2str(value.command); 671 char *cmd = linkcmd2str(value.command);
696 672
697 switch(value.command) { 673 switch(value.command) {
698 case LinkNoLink: 674 case LinkNoLink:
699 case LinkTopC: 675 case LinkTopC:
745 fprintf(MSG_OUT, "libdvdnav: %s %d resume cell %d\n", cmd, value.data1, value.data2); 721 fprintf(MSG_OUT, "libdvdnav: %s %d resume cell %d\n", cmd, value.data1, value.data2);
746 break; 722 break;
747 } 723 }
748 } 724 }
749 725
750 void vmPrint_registers( registers_t *registers ) { 726 void vm_print_registers( registers_t *registers ) {
751 int32_t i; 727 int32_t i;
752 fprintf(MSG_OUT, "libdvdnav: # "); 728 fprintf(MSG_OUT, "libdvdnav: # ");
753 for(i = 0; i < 24; i++) 729 for(i = 0; i < 24; i++)
754 fprintf(MSG_OUT, " %2d |", i); 730 fprintf(MSG_OUT, " %2d |", i);
755 fprintf(MSG_OUT, "\nlibdvdnav: SRPMS: "); 731 fprintf(MSG_OUT, "\nlibdvdnav: SRPMS: ");