ultimecia

A ps1 emulator in c
Log | Files | Refs

irq.c (858B)


      1 /* IRQ Controller */
      2 #include "irq.h"
      3 #include "types.h"
      4 
      5 irq
      6 irq_new(void)
      7 {
      8 	irq i;
      9 	i.status = 0;
     10 	i.mask = 0;
     11 	return i;
     12 }
     13 
     14 void 
     15 irq_write(irq* i, u32 a,  u32 v)
     16 {
     17 	v <<= (a & 3) * 8;
     18 
     19 	if(a & 4) 
     20 		i->mask = v; 
     21 	else 
     22 		i->status &= v;
     23 }
     24 
     25 u32 
     26 irq_load(irq* i, u32 a)
     27 {
     28 	u32 ret = 0;
     29 
     30 	if (a & 4)
     31 		ret = i->mask;
     32 	else
     33 		ret = i->status;
     34 
     35 	ret |= 0x1F800000;
     36 	ret >>= (a & 3) * 8;
     37 
     38 	printf("[IRQ] Read: 0x%08x 0x%08x --- PAD TEMP\n", a, ret);
     39 
     40 	return ret;
     41 
     42 }
     43 
     44 void 
     45 irq_set_register(irq* i, u32 which, u32 v)
     46 {
     47     switch(which)
     48     {
     49     case IRQ_STATUS_REG:
     50         i->status = v;
     51         break;
     52     case IRQ_MASK_REG:
     53         i->mask = v;
     54         break;
     55     }
     56 }
     57 
     58 u32 
     59 irq_get_reg(irq* i, u32 which)
     60 {
     61     switch(which)
     62     {
     63     case IRQ_STATUS_REG:
     64         return i->status;
     65     case IRQ_MASK_REG:
     66         return i->mask;
     67     }
     68 
     69     return 0;
     70 }