Lines 468-477
Link Here
|
468 |
| (thischan.format << 5) |
468 |
| (thischan.format << 5) |
469 |
| ((thischan.status == CHANSTAT_PLAY)?0x80:0) |
469 |
| ((thischan.status == CHANSTAT_PLAY)?0x80:0) |
470 |
); |
470 |
); |
471 |
case 0x8: return *(u8*)(thischan.timer + 0); |
471 |
case 0x8: return *((u8*)&thischan.timer + 0); |
472 |
case 0x9: return *(u8*)(thischan.timer + 1); |
472 |
case 0x9: return *((u8*)&thischan.timer + 1); |
473 |
case 0xA: return *(u8*)(thischan.loopstart + 0); |
473 |
case 0xA: return *((u8*)&thischan.loopstart + 0); |
474 |
case 0xB: return *(u8*)(thischan.loopstart + 1); |
474 |
case 0xB: return *((u8*)&thischan.loopstart + 1); |
475 |
} |
475 |
} |
476 |
return 0; |
476 |
return 0; |
477 |
} |
477 |
} |
Lines 488-495
Link Here
|
488 |
); |
488 |
); |
489 |
|
489 |
|
490 |
//SOUNDBIAS |
490 |
//SOUNDBIAS |
491 |
case 0x504: return *(u8*)(regs.soundbias + 0); |
491 |
case 0x504: return *((u8*)®s.soundbias + 0); |
492 |
case 0x505: return *(u8*)(regs.soundbias + 1); |
492 |
case 0x505: return *((u8*)®s.soundbias + 1); |
493 |
|
493 |
|
494 |
//SNDCAP0CNT/SNDCAP1CNT |
494 |
//SNDCAP0CNT/SNDCAP1CNT |
495 |
case 0x508: |
495 |
case 0x508: |
Lines 504-527
Link Here
|
504 |
} |
504 |
} |
505 |
|
505 |
|
506 |
//SNDCAP0DAD |
506 |
//SNDCAP0DAD |
507 |
case 0x510: return *(u8*)(regs.cap[0].dad + 0); |
507 |
case 0x510: return *((u8*)®s.cap[0].dad + 0); |
508 |
case 0x511: return *(u8*)(regs.cap[0].dad + 1); |
508 |
case 0x511: return *((u8*)®s.cap[0].dad + 1); |
509 |
case 0x512: return *(u8*)(regs.cap[0].dad + 2); |
509 |
case 0x512: return *((u8*)®s.cap[0].dad + 2); |
510 |
case 0x513: return *(u8*)(regs.cap[0].dad + 3); |
510 |
case 0x513: return *((u8*)®s.cap[0].dad + 3); |
511 |
|
511 |
|
512 |
//SNDCAP0LEN |
512 |
//SNDCAP0LEN |
513 |
case 0x514: return *(u8*)(regs.cap[0].len + 0); |
513 |
case 0x514: return *((u8*)®s.cap[0].len + 0); |
514 |
case 0x515: return *(u8*)(regs.cap[0].len + 1); |
514 |
case 0x515: return *((u8*)®s.cap[0].len + 1); |
515 |
|
515 |
|
516 |
//SNDCAP1DAD |
516 |
//SNDCAP1DAD |
517 |
case 0x518: return *(u8*)(regs.cap[1].dad + 0); |
517 |
case 0x518: return *((u8*)®s.cap[1].dad + 0); |
518 |
case 0x519: return *(u8*)(regs.cap[1].dad + 1); |
518 |
case 0x519: return *((u8*)®s.cap[1].dad + 1); |
519 |
case 0x51A: return *(u8*)(regs.cap[1].dad + 2); |
519 |
case 0x51A: return *((u8*)®s.cap[1].dad + 2); |
520 |
case 0x51B: return *(u8*)(regs.cap[1].dad + 3); |
520 |
case 0x51B: return *((u8*)®s.cap[1].dad + 3); |
521 |
|
521 |
|
522 |
//SNDCAP1LEN |
522 |
//SNDCAP1LEN |
523 |
case 0x51C: return *(u8*)(regs.cap[1].len + 0); |
523 |
case 0x51C: return *((u8*)®s.cap[1].len + 0); |
524 |
case 0x51D: return *(u8*)(regs.cap[1].len + 1); |
524 |
case 0x51D: return *((u8*)®s.cap[1].len + 1); |
525 |
} //switch on address |
525 |
} //switch on address |
526 |
|
526 |
|
527 |
return 0; |
527 |
return 0; |
Lines 584-598
Link Here
|
584 |
} |
584 |
} |
585 |
|
585 |
|
586 |
//SNDCAP0DAD |
586 |
//SNDCAP0DAD |
587 |
case 0x510: return *(u16*)(regs.cap[0].dad + 0); |
587 |
case 0x510: return *((u16*)®s.cap[0].dad + 0); |
588 |
case 0x512: return *(u16*)(regs.cap[0].dad + 1); |
588 |
case 0x512: return *((u16*)®s.cap[0].dad + 1); |
589 |
|
589 |
|
590 |
//SNDCAP0LEN |
590 |
//SNDCAP0LEN |
591 |
case 0x514: return regs.cap[0].len; |
591 |
case 0x514: return regs.cap[0].len; |
592 |
|
592 |
|
593 |
//SNDCAP1DAD |
593 |
//SNDCAP1DAD |
594 |
case 0x518: return *(u16*)(regs.cap[1].dad + 0); |
594 |
case 0x518: return *((u16*)®s.cap[1].dad + 0); |
595 |
case 0x51A: return *(u16*)(regs.cap[1].dad + 1); |
595 |
case 0x51A: return *((u16*)®s.cap[1].dad + 1); |
596 |
|
596 |
|
597 |
//SNDCAP1LEN |
597 |
//SNDCAP1LEN |
598 |
case 0x51C: return regs.cap[1].len; |
598 |
case 0x51C: return regs.cap[1].len; |
Lines 768-786
Link Here
|
768 |
thischan.keyon = (val >> 7) & 0x01; |
768 |
thischan.keyon = (val >> 7) & 0x01; |
769 |
KeyProbe(chan_num); |
769 |
KeyProbe(chan_num); |
770 |
break; |
770 |
break; |
771 |
case 0x4: *(u8*)(thischan.addr + 0) = (val & 0xFC); break; |
771 |
case 0x4: *((u8*)&thischan.addr + 0) = (val & 0xFC); break; |
772 |
case 0x5: *(u8*)(thischan.addr + 1) = val; break; |
772 |
case 0x5: *((u8*)&thischan.addr + 1) = val; break; |
773 |
case 0x6: *(u8*)(thischan.addr + 2) = val; break; |
773 |
case 0x6: *((u8*)&thischan.addr + 2) = val; break; |
774 |
case 0x7: *(u8*)(thischan.addr + 3) = (val & 0x07); break; //only 27 bits of this register are used |
774 |
case 0x7: *((u8*)&thischan.addr + 3) = (val & 0x07); break; //only 27 bits of this register are used |
775 |
case 0x8: *(u8*)(thischan.timer + 0) = val; adjust_channel_timer(&thischan); break; |
775 |
case 0x8: *((u8*)&thischan.timer + 0) = val; adjust_channel_timer(&thischan); break; |
776 |
case 0x9: *(u8*)(thischan.timer + 1) = val; adjust_channel_timer(&thischan); break; |
776 |
case 0x9: *((u8*)&thischan.timer + 1) = val; adjust_channel_timer(&thischan); break; |
777 |
|
777 |
|
778 |
case 0xA: *(u8*)(thischan.loopstart + 0) = val; break; |
778 |
case 0xA: *((u8*)&thischan.loopstart + 0) = val; break; |
779 |
case 0xB: *(u8*)(thischan.loopstart + 1) = val; break; |
779 |
case 0xB: *((u8*)&thischan.loopstart + 1) = val; break; |
780 |
case 0xC: *(u8*)(thischan.length + 0) = val; break; |
780 |
case 0xC: *((u8*)&thischan.length + 0) = val; break; |
781 |
case 0xD: *(u8*)(thischan.length + 1) = val; break; |
781 |
case 0xD: *((u8*)&thischan.length + 1) = val; break; |
782 |
case 0xE: *(u8*)(thischan.length + 2) = (val & 0x3F); break; //only 22 bits of this register are used |
782 |
case 0xE: *((u8*)&thischan.length + 2) = (val & 0x3F); break; //only 22 bits of this register are used |
783 |
case 0xF: *(u8*)(thischan.length + 3) = 0; break; |
783 |
case 0xF: *((u8*)&thischan.length + 3) = 0; break; |
784 |
} //switch on individual channel regs |
784 |
} //switch on individual channel regs |
785 |
return; |
785 |
return; |
786 |
} |
786 |
} |
Lines 800-807
Link Here
|
800 |
break; |
800 |
break; |
801 |
|
801 |
|
802 |
//SOUNDBIAS |
802 |
//SOUNDBIAS |
803 |
case 0x504: *(u8*)(regs.soundbias + 0) = val; break; |
803 |
case 0x504: *((u8*)®s.soundbias + 0) = val; break; |
804 |
case 0x505: *(u8*)(regs.soundbias + 1) = (val & 0x03); break; |
804 |
case 0x505: *((u8*)®s.soundbias + 1) = (val & 0x03); break; |
805 |
|
805 |
|
806 |
//SNDCAP0CNT/SNDCAP1CNT |
806 |
//SNDCAP0CNT/SNDCAP1CNT |
807 |
case 0x508: |
807 |
case 0x508: |
Lines 818-841
Link Here
|
818 |
} |
818 |
} |
819 |
|
819 |
|
820 |
//SNDCAP0DAD |
820 |
//SNDCAP0DAD |
821 |
case 0x510: *(u8*)(regs.cap[0].dad + 0) = (val & 0xFC); break; |
821 |
case 0x510: *((u8*)®s.cap[0].dad + 0) = (val & 0xFC); break; |
822 |
case 0x511: *(u8*)(regs.cap[0].dad + 1) = val; break; |
822 |
case 0x511: *((u8*)®s.cap[0].dad + 1) = val; break; |
823 |
case 0x512: *(u8*)(regs.cap[0].dad + 2) = val; break; |
823 |
case 0x512: *((u8*)®s.cap[0].dad + 2) = val; break; |
824 |
case 0x513: *(u8*)(regs.cap[0].dad + 3) = (val & 0x07); break; |
824 |
case 0x513: *((u8*)®s.cap[0].dad + 3) = (val & 0x07); break; |
825 |
|
825 |
|
826 |
//SNDCAP0LEN |
826 |
//SNDCAP0LEN |
827 |
case 0x514: *(u8*)(regs.cap[0].len + 0) = val; break; |
827 |
case 0x514: *((u8*)®s.cap[0].len + 0) = val; break; |
828 |
case 0x515: *(u8*)(regs.cap[0].len + 1) = val; break; |
828 |
case 0x515: *((u8*)®s.cap[0].len + 1) = val; break; |
829 |
|
829 |
|
830 |
//SNDCAP1DAD |
830 |
//SNDCAP1DAD |
831 |
case 0x518: *(u8*)(regs.cap[1].dad + 0) = (val & 0xFC); break; |
831 |
case 0x518: *((u8*)®s.cap[1].dad + 0) = (val & 0xFC); break; |
832 |
case 0x519: *(u8*)(regs.cap[1].dad + 1) = val; break; |
832 |
case 0x519: *((u8*)®s.cap[1].dad + 1) = val; break; |
833 |
case 0x51A: *(u8*)(regs.cap[1].dad + 2) = val; break; |
833 |
case 0x51A: *((u8*)®s.cap[1].dad + 2) = val; break; |
834 |
case 0x51B: *(u8*)(regs.cap[1].dad + 3) = (val & 0x07); break; |
834 |
case 0x51B: *((u8*)®s.cap[1].dad + 3) = (val & 0x07); break; |
835 |
|
835 |
|
836 |
//SNDCAP1LEN |
836 |
//SNDCAP1LEN |
837 |
case 0x51C: *(u8*)(regs.cap[1].len + 0) = val; break; |
837 |
case 0x51C: *((u8*)®s.cap[1].len + 0) = val; break; |
838 |
case 0x51D: *(u8*)(regs.cap[1].len + 1) = val; break; |
838 |
case 0x51D: *((u8*)®s.cap[1].len + 1) = val; break; |
839 |
} //switch on address |
839 |
} //switch on address |
840 |
} |
840 |
} |
841 |
|
841 |
|
Lines 864-875
Link Here
|
864 |
thischan.keyon = (val >> 15) & 0x1; |
864 |
thischan.keyon = (val >> 15) & 0x1; |
865 |
KeyProbe(chan_num); |
865 |
KeyProbe(chan_num); |
866 |
break; |
866 |
break; |
867 |
case 0x4: *(u16*)(thischan.addr + 0) = (val & 0xFFFC); break; |
867 |
case 0x4: *((u16*)&thischan.addr + 0) = (val & 0xFFFC); break; |
868 |
case 0x6: *(u16*)(thischan.addr + 1) = (val & 0x07FF); break; |
868 |
case 0x6: *((u16*)&thischan.addr + 1) = (val & 0x07FF); break; |
869 |
case 0x8: thischan.timer = val; adjust_channel_timer(&thischan); break; |
869 |
case 0x8: thischan.timer = val; adjust_channel_timer(&thischan); break; |
870 |
case 0xA: thischan.loopstart = val; break; |
870 |
case 0xA: thischan.loopstart = val; break; |
871 |
case 0xC: *(u16*)(thischan.length + 0) = val; break; |
871 |
case 0xC: *((u16*)&thischan.length + 0) = val; break; |
872 |
case 0xE: *(u16*)(thischan.length + 1) = (val & 0x003F); break; //only 22 bits of this register are used |
872 |
case 0xE: *((u16*)&thischan.length + 1) = (val & 0x003F); break; //only 22 bits of this register are used |
873 |
} //switch on individual channel regs |
873 |
} //switch on individual channel regs |
874 |
return; |
874 |
return; |
875 |
} |
875 |
} |
Lines 911-925
Link Here
|
911 |
} |
911 |
} |
912 |
|
912 |
|
913 |
//SNDCAP0DAD |
913 |
//SNDCAP0DAD |
914 |
case 0x510: *(u16*)(regs.cap[0].dad + 0) = (val & 0xFFFC); break; |
914 |
case 0x510: *((u16*)®s.cap[0].dad + 0) = (val & 0xFFFC); break; |
915 |
case 0x512: *(u16*)(regs.cap[0].dad + 1) = (val & 0x7FFF); break; |
915 |
case 0x512: *((u16*)®s.cap[0].dad + 1) = (val & 0x7FFF); break; |
916 |
|
916 |
|
917 |
//SNDCAP0LEN |
917 |
//SNDCAP0LEN |
918 |
case 0x514: regs.cap[0].len = val; break; |
918 |
case 0x514: regs.cap[0].len = val; break; |
919 |
|
919 |
|
920 |
//SNDCAP1DAD |
920 |
//SNDCAP1DAD |
921 |
case 0x518: *(u16*)(regs.cap[1].dad + 0) = (val & 0xFFFC); break; |
921 |
case 0x518: *((u16*)®s.cap[1].dad + 0) = (val & 0xFFFC); break; |
922 |
case 0x51A: *(u16*)(regs.cap[1].dad + 1) = (val & 0x7FFF); break; |
922 |
case 0x51A: *((u16*)®s.cap[1].dad + 1) = (val & 0x7FFF); break; |
923 |
|
923 |
|
924 |
//SNDCAP1LEN |
924 |
//SNDCAP1LEN |
925 |
case 0x51C: regs.cap[1].len = val; break; |
925 |
case 0x51C: regs.cap[1].len = val; break; |