Commit b118d61e556a1f5cebc991e368af7292ffa1d8f3

Authored by bellard
1 parent 2f62b397

added PIC debug


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@302 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 30 additions and 4 deletions
@@ -536,6 +536,8 @@ void cmos_init(void) @@ -536,6 +536,8 @@ void cmos_init(void)
536 /***********************************************************/ 536 /***********************************************************/
537 /* 8259 pic emulation */ 537 /* 8259 pic emulation */
538 538
  539 +//#define DEBUG_PIC
  540 +
539 typedef struct PicState { 541 typedef struct PicState {
540 uint8_t last_irr; /* edge detection */ 542 uint8_t last_irr; /* edge detection */
541 uint8_t irr; /* interrupt request register */ 543 uint8_t irr; /* interrupt request register */
@@ -630,9 +632,18 @@ static void pic_update_irq(void) @@ -630,9 +632,18 @@ static void pic_update_irq(void)
630 int64_t irq_time[16]; 632 int64_t irq_time[16];
631 int64_t cpu_get_ticks(void); 633 int64_t cpu_get_ticks(void);
632 #endif 634 #endif
  635 +#ifdef DEBUG_PIC
  636 +int irq_level[16];
  637 +#endif
633 638
634 void pic_set_irq(int irq, int level) 639 void pic_set_irq(int irq, int level)
635 { 640 {
  641 +#ifdef DEBUG_PIC
  642 + if (level != irq_level[irq]) {
  643 + printf("pic_set_irq: irq=%d level=%d\n", irq, level);
  644 + irq_level[irq] = level;
  645 + }
  646 +#endif
636 #ifdef DEBUG_IRQ_LATENCY 647 #ifdef DEBUG_IRQ_LATENCY
637 if (level) { 648 if (level) {
638 irq_time[irq] = cpu_get_ticks(); 649 irq_time[irq] = cpu_get_ticks();
@@ -651,6 +662,9 @@ int cpu_x86_get_pic_interrupt(CPUX86State *env) @@ -651,6 +662,9 @@ int cpu_x86_get_pic_interrupt(CPUX86State *env)
651 #ifdef DEBUG_IRQ_LATENCY 662 #ifdef DEBUG_IRQ_LATENCY
652 printf("IRQ%d latency=%Ld\n", irq, cpu_get_ticks() - irq_time[irq]); 663 printf("IRQ%d latency=%Ld\n", irq, cpu_get_ticks() - irq_time[irq]);
653 #endif 664 #endif
  665 +#ifdef DEBUG_PIC
  666 + printf("pic_interrupt: irq=%d\n", irq);
  667 +#endif
654 668
655 if (irq >= 8) { 669 if (irq >= 8) {
656 irq2 = irq & 7; 670 irq2 = irq & 7;
@@ -671,6 +685,9 @@ void pic_ioport_write(CPUX86State *env, uint32_t addr, uint32_t val) @@ -671,6 +685,9 @@ void pic_ioport_write(CPUX86State *env, uint32_t addr, uint32_t val)
671 PicState *s; 685 PicState *s;
672 int priority; 686 int priority;
673 687
  688 +#ifdef DEBUG_PIC
  689 + printf("pic_write: addr=0x%02x val=0x%02x\n", addr, val);
  690 +#endif
674 s = &pics[addr >> 7]; 691 s = &pics[addr >> 7];
675 addr &= 1; 692 addr &= 1;
676 if (addr == 0) { 693 if (addr == 0) {
@@ -743,19 +760,27 @@ void pic_ioport_write(CPUX86State *env, uint32_t addr, uint32_t val) @@ -743,19 +760,27 @@ void pic_ioport_write(CPUX86State *env, uint32_t addr, uint32_t val)
743 } 760 }
744 } 761 }
745 762
746 -uint32_t pic_ioport_read(CPUX86State *env, uint32_t addr) 763 +uint32_t pic_ioport_read(CPUX86State *env, uint32_t addr1)
747 { 764 {
748 PicState *s; 765 PicState *s;
  766 + unsigned int addr;
  767 + int ret;
  768 +
  769 + addr = addr1;
749 s = &pics[addr >> 7]; 770 s = &pics[addr >> 7];
750 addr &= 1; 771 addr &= 1;
751 if (addr == 0) { 772 if (addr == 0) {
752 if (s->read_reg_select) 773 if (s->read_reg_select)
753 - return s->isr; 774 + ret = s->isr;
754 else 775 else
755 - return s->irr; 776 + ret = s->irr;
756 } else { 777 } else {
757 - return s->imr; 778 + ret = s->imr;
758 } 779 }
  780 +#ifdef DEBUG_PIC
  781 + printf("pic_read: addr=0x%02x val=0x%02x\n", addr1, ret);
  782 +#endif
  783 + return ret;
759 } 784 }
760 785
761 void pic_init(void) 786 void pic_init(void)
@@ -2634,6 +2659,7 @@ int main(int argc, char **argv) @@ -2634,6 +2659,7 @@ int main(int argc, char **argv)
2634 help(); 2659 help();
2635 2660
2636 /* init debug */ 2661 /* init debug */
  2662 + setvbuf(stdout, NULL, _IOLBF, 0);
2637 if (loglevel) { 2663 if (loglevel) {
2638 logfile = fopen(DEBUG_LOGFILE, "w"); 2664 logfile = fopen(DEBUG_LOGFILE, "w");
2639 if (!logfile) { 2665 if (!logfile) {