⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.c

📁 话带数据中传真解调程序
💻 C
字号:
#include "irq.h"// Fake functions!void expect_irqs(void){#if TRY_INTERRUPTS  PRINTF("expect_irqs: DIsabled!\n");#else  int i;  for (i=1; i<500; i++) {    // call ISR directly.    dp_dsp_isr();    if (Read_mdm_byte(0x3c))      PRINTF("z");    usleep(1000); // Wait 1 milliseconds.  }  PRINTF(".\n");#endif}int dp_dsp_isr(void){  int i, todo;  // edi = 0xd7  i = dp_int_regread(0xd7);  todo = i & 0xff;  // printf( "[ISR:%x]", todo);  if ((!todo) || (todo == 0xff))    goto failexit;  // ----------------------------------  // Not in asm code!  //if (todo == 8)    //printf( "+" ); // What is the significance of todo = 8?  //else    //printf( "[ISR:%x]", todo);  // ----------------------------------  if (x_dsp_mars == 1)    Write_mdm_word(0x3c, 0x101);  dp_int_regwrite(0xd7, 0xff);  // esi = 0xd8  if (todo & 2)    process_ring();  if (todo & 8) {    dp_int_regwrite(0xD8,  8);    dp_byte_c = dp_int_regread(0x32);    dp_byte_d = dp_int_regread(0x33);    dp_byte_e = dp_int_regread(0x34);    dp_byte_f = dp_int_regread(0x35);  }  //printf("dp_byte_f = %x.\n", dp_byte_f);  if (todo & 4)    process_v34();    if (todo & 0x40) {    int i;    i = dp_int_regread(0xbc);    // esi = 0xbd    dp_int_regwrite(0xbd, i);    dp_int_regwrite(0xbd, ~i); // they used not on lower byte only     if (i & 0x18) {      printf( "What do you want to do with cellphone?\n" );#if 0      cell_isr();      x_wakeup();#endif    }  }  // E52  dp_int_regwrite(0xd7, dp_bamil_rd7);  outb_p(BaseValue, BaseAddressIndex);  return 1; failexit:  //printf( "ISR failed :(\n" );  outb_p(BaseValue, BaseAddressIndex);  return 0;}void process_ring(void){#if LT_DEBUG  printf( "Ring came!\n" );#endif  dp_int_regwrite(0xd8, 0xff);  if (dp_ring_int_count > 1) {    dp_bamil_rd7 = 2;    dp_ring_int = 1;    dp_init_local_phone_timer();    return;  }  dp_ring_int_count++;  if ((dp_sleep == 1) && (dp_ring_int_count == 1))    dp_regwrite(0xCB,  8);  x_wakeup();}/*// Jamies invention.inline voiddp_restore_regs_after_interrupt (void){  int reg = dp_current_reg;  unsigned short index_port = BaseAddress;  if (!(reg <= 0x17f || (reg >= 0x1a0 && reg <= 0x1cf)))    index_port += 2;  outb_p ((unsigned char) reg, index_port);}// Jamies version.int dp_dsp_isr (void){  unsigned char isr = dp_int_regread (0xd7);  if (isr == 0 || isr == 0xff)    {      dp_restore_regs_after_interrupt ();      return 0;    }  if (isr==8) {    //    PRINTF( "+" );  } else    PRINTF( "Unexpected interrupt: %x\n", isr );  if (x_dsp_mars)    Write_mdm_word (0x3c, 0x101);  dp_int_regwrite (0xd7, 0xff);  if (isr & 0x02)    {      dp_int_regwrite (0xd8, 0xff);      if (dp_ring_int_count > 1)	{	  dp_bamil_rd7 |= 2;	  dp_ring_int = 1;	  dp_init_local_phone_timer ();	}      else	{	  if (dp_sleep && dp_ring_int_count == 1)	    dp_regwrite (0xcb, 0x08);	  x_wakeup ();	}    }  if (isr & 0x08)    {      dp_int_regwrite (0xd8, 0x08);      dp_byte_c = dp_int_regread (0x32);      dp_byte_d = dp_int_regread (0x33);      dp_byte_e = dp_int_regread (0x34);      dp_byte_f = dp_int_regread (0x35);    }  if (isr & 0x04)    {      if (dp_int_regread (0xb6) & 0x10)	{	  if (S (0x6b) == 1 && V34Mode == 0)	    io_dual_port_rx ();	  else	    dual_port_rx ();	}      if (dp_int_regread (0xb6) & 0x01)	dual_port_tx ();    }  if (isr & 0x40)    {      dp_int_regwrite (0xbd, dp_int_regread (0xbc));      if (isr & 0x18)	{	  //cell_isr ();	  x_wakeup ();	}    }  dp_int_regwrite (0xd7, dp_bamil_rd7);  dp_restore_regs_after_interrupt ();  return 1;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -