Advertisement
Guest User

64DD MESS stuff

a guest
Nov 7th, 2011
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.00 KB | None | 0 0
  1. static UINT32 asic_data_reg = 0;
  2.  
  3. static UINT32 asic_status_reg = 0;
  4. static UINT32 asic_command_reg = 0;
  5.  
  6. static UINT32 asic_bm_status_reg = 0;
  7. static UINT32 asic_bm_ctl_reg = 0;
  8.  
  9. static UINT32 dd_interrupt = 0;
  10.  
  11. void signal_dd_interrupt(running_machine &machine, int interrupt)
  12. {
  13.  
  14.     if (interrupt)
  15.     {
  16.         dd_interrupt |= interrupt;
  17.  
  18.         cputag_set_input_line(machine, "maincpu", INPUT_LINE_IRQ1, ASSERT_LINE);
  19.     }
  20. }
  21.  
  22. void clear_dd_interrupt(running_machine &machine, int interrupt)
  23. {
  24.     dd_interrupt &= ~interrupt;
  25.  
  26.     //if (!dd_interrupt)
  27.     {
  28.         cputag_set_input_line(machine, "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
  29.     }
  30. }
  31.  
  32.  
  33. READ32_HANDLER( n64_dd_reg_r )
  34. {
  35.     if (dd_interrupt) clear_dd_interrupt(space->machine(), 1);          // Clear the interrupt on every read (testing - OzOnE).
  36.  
  37.     switch (offset)
  38.     {
  39.         case 0x500/4:       // 64DD "ASIC_DATA" reg
  40.             popmessage("64DD READ from DATA register, value == 0x%x", asic_data_reg);
  41.             return asic_data_reg;
  42.             break;
  43.  
  44.         case 0x508/4:       // 64DD "ASIC_STATUS" reg
  45.             popmessage("64DD READ from STATUS register, value == 0x%x", asic_status_reg);
  46.             return asic_status_reg;
  47.             break;
  48.        
  49.         case 0x510/4:       // 64DD "ASIC_BM_STATUS" reg
  50.             popmessage("64DD READ from BM_STATUS register, value == 0x%x", asic_bm_status_reg);
  51.             return asic_bm_status_reg;
  52.             break;
  53.  
  54.         default:
  55.             popmessage("64DD Read - register 0x%x not defined!", offset*4);
  56.             break;
  57.     }
  58.    
  59.     return 0;
  60. }
  61.  
  62. WRITE32_HANDLER( n64_dd_reg_w )
  63. {
  64.     switch (offset)
  65.     {
  66.         case 0x500/4:       // 64DD "ASIC_DATA" reg
  67.             popmessage("64DD WRITE to DATA register, value == 0x%x", data);
  68.             asic_data_reg = data;
  69.             break;
  70.  
  71.         case 0x508/4:       // 64DD "ASIC_CMD" reg
  72.             asic_command_reg = data;
  73.            
  74.             if (data == ASIC_READ_TIMER_MINUTE)
  75.             {
  76.                 popmessage("64DD Command: 'ASIC_READ_TIMER_MINUTE'");
  77. //              asic_data_reg = 0x04040404;                 // Write a dummy "minutes" value to data reg for now (OzOnE).
  78. //              asic_status_reg = 0x00140007;
  79.                 signal_dd_interrupt(space->machine(), 1);   // Signal a 64DD interrupt on the R4300 INT1 pin (tell the ROM routine that data is ready).
  80.             }
  81.             else
  82.                 popmessage("64DD Command, value 0x%x", data);
  83.             break;
  84.  
  85.         case 0x510/4:       // 64DD "ASIC_BM_CTL" reg
  86.             if (data == BM_RESET)
  87.                 popmessage("64DD BM_CTL: 'BM_RESET'");
  88.             else if (data == 0x00000000)
  89.             {
  90.                 asic_bm_status_reg = 0x00000000;                // Clear the BM status word after reset (testing - OzOnE).
  91.                 asic_bm_ctl_reg = data;
  92.                
  93.                 asic_status_reg = LEO_STAT_DISK;                // Shove in a disk (after BM reset is cleared), then...
  94.                 signal_dd_interrupt(space->machine(), 1);       // Trigger an interrupt to get ROM to read ASIC status.
  95.                 popmessage("64DD WRITE to BM_CTL register, value == 0x%x", data);
  96.             }
  97.             else
  98.                 popmessage("64DD WRITE to BM_CTL register, value == 0x%x", data);
  99.             break;
  100.  
  101.         case 0x520/4:       // 64DD "HARD RESET" reg
  102.             if (data == ASIC_RESET_CODE)
  103.                 popmessage("64DD HARD RESET");
  104.             break;
  105.  
  106.         default:
  107.             popmessage("64DD Write - register 0x%x not defined!", offset*4);
  108.             break;
  109.     }
  110. }
  111.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement