src/mame/machine/snes7110.c
| r7432 | r7433 | |
| 1004 | 1004 | case 0x4810: |
| 1005 | 1005 | { |
| 1006 | 1006 | UINT8 data; |
| 1007 | | UINT32 addr, adjust, adjustaddr; |
| 1007 | UINT32 address, adjust, adjustaddr; |
| 1008 | 1008 | |
| 1009 | 1009 | if(snes_spc7110.r481x != 0x07) return 0x00; |
| 1010 | 1010 | |
| 1011 | | addr = spc7110_data_pointer(); |
| 1011 | address = spc7110_data_pointer(); |
| 1012 | 1012 | adjust = spc7110_data_adjust(); |
| 1013 | 1013 | if(snes_spc7110.r4818 & 8) |
| 1014 | 1014 | { |
| 1015 | 1015 | adjust = (INT16)adjust; //16-bit sign extend |
| 1016 | 1016 | } |
| 1017 | 1017 | |
| 1018 | | adjustaddr = addr; |
| 1018 | adjustaddr = address; |
| 1019 | 1019 | if(snes_spc7110.r4818 & 2) |
| 1020 | 1020 | { |
| 1021 | 1021 | adjustaddr += adjust; |
| r7432 | r7433 | |
| 1033 | 1033 | |
| 1034 | 1034 | if((snes_spc7110.r4818 & 16) == 0) |
| 1035 | 1035 | { |
| 1036 | | spc7110_set_data_pointer(addr + increment); |
| 1036 | spc7110_set_data_pointer(address + increment); |
| 1037 | 1037 | } |
| 1038 | 1038 | else |
| 1039 | 1039 | { |
| r7432 | r7433 | |
| 1054 | 1054 | case 0x481a: |
| 1055 | 1055 | { |
| 1056 | 1056 | UINT8 data; |
| 1057 | | UINT32 addr, adjust; |
| 1057 | UINT32 address, adjust; |
| 1058 | 1058 | if(snes_spc7110.r481x != 0x07) |
| 1059 | 1059 | { |
| 1060 | 1060 | return 0x00; |
| 1061 | 1061 | } |
| 1062 | 1062 | |
| 1063 | | addr = spc7110_data_pointer(); |
| 1063 | address = spc7110_data_pointer(); |
| 1064 | 1064 | adjust = spc7110_data_adjust(); |
| 1065 | 1065 | if(snes_spc7110.r4818 & 8) |
| 1066 | 1066 | { |
| 1067 | 1067 | adjust = (INT16)adjust; //16-bit sign extend |
| 1068 | 1068 | } |
| 1069 | 1069 | |
| 1070 | | data = ROM[spc7110_datarom_addr(addr + adjust)]; |
| 1070 | data = ROM[spc7110_datarom_addr(address + adjust)]; |
| 1071 | 1071 | if((snes_spc7110.r4818 & 0x60) == 0x60) |
| 1072 | 1072 | { |
| 1073 | 1073 | if((snes_spc7110.r4818 & 16) == 0) |
| 1074 | 1074 | { |
| 1075 | | spc7110_set_data_pointer(addr + adjust); |
| 1075 | spc7110_set_data_pointer(address + adjust); |
| 1076 | 1076 | } |
| 1077 | 1077 | else |
| 1078 | 1078 | { |
| r7432 | r7433 | |
| 1143 | 1143 | case 0x4805: snes_spc7110.r4805 = data; break; |
| 1144 | 1144 | case 0x4806: |
| 1145 | 1145 | { |
| 1146 | | UINT32 table, index, length, addr, mode, offset; |
| 1146 | UINT32 table, index, length, address, mode, offset; |
| 1147 | 1147 | snes_spc7110.r4806 = data; |
| 1148 | 1148 | |
| 1149 | 1149 | table = (snes_spc7110.r4801 + (snes_spc7110.r4802 << 8) + (snes_spc7110.r4803 << 16)); |
| 1150 | 1150 | index = (snes_spc7110.r4804 << 2); |
| 1151 | 1151 | length = (snes_spc7110.r4809 + (snes_spc7110.r480a << 8)); |
| 1152 | | addr = spc7110_datarom_addr(table + index); |
| 1153 | | mode = (ROM[addr + 0]); |
| 1154 | | offset = (ROM[addr + 1] << 16) |
| 1155 | | + (ROM[addr + 2] << 8) |
| 1156 | | + (ROM[addr + 3] << 0); |
| 1152 | address = spc7110_datarom_addr(table + index); |
| 1153 | mode = (ROM[address + 0]); |
| 1154 | offset = (ROM[address + 1] << 16) |
| 1155 | + (ROM[address + 2] << 8) |
| 1156 | + (ROM[address + 3] << 0); |
| 1157 | 1157 | |
| 1158 | 1158 | SPC7110Decomp_init(snes_spc7110.decomp, machine, mode, offset, (snes_spc7110.r4805 + (snes_spc7110.r4806 << 8)) << mode); |
| 1159 | 1159 | snes_spc7110.r480c = 0x80; |
src/mame/machine/snesdsp4.c
| r7432 | r7433 | |
| 589 | 589 | |
| 590 | 590 | static void DSP4_OP08( void ) |
| 591 | 591 | { |
| 592 | | INT16 win_left, win_right; |
| 592 | INT16 wleft, wright; |
| 593 | 593 | INT16 view_x[2], view_y[2]; |
| 594 | 594 | INT16 envelope[2][2]; |
| 595 | 595 | |
| r7432 | r7433 | |
| 695 | 695 | // SR = 0x00 |
| 696 | 696 | |
| 697 | 697 | // re-center coordinates |
| 698 | | win_left = DSP4_vars.poly_cx[0][0] - view_x[0] + envelope[0][0]; |
| 699 | | win_right = DSP4_vars.poly_cx[0][1] - view_x[0] + envelope[0][1]; |
| 698 | wleft = DSP4_vars.poly_cx[0][0] - view_x[0] + envelope[0][0]; |
| 699 | wright = DSP4_vars.poly_cx[0][1] - view_x[0] + envelope[0][1]; |
| 700 | 700 | |
| 701 | 701 | // saturate offscreen data for polygon #1 |
| 702 | | if (win_left < DSP4_vars.poly_clipLf[0][0]) |
| 702 | if (wleft < DSP4_vars.poly_clipLf[0][0]) |
| 703 | 703 | { |
| 704 | | win_left = DSP4_vars.poly_clipLf[0][0]; |
| 704 | wleft = DSP4_vars.poly_clipLf[0][0]; |
| 705 | 705 | } |
| 706 | | if (win_left > DSP4_vars.poly_clipRt[0][0]) |
| 706 | if (wleft > DSP4_vars.poly_clipRt[0][0]) |
| 707 | 707 | { |
| 708 | | win_left = DSP4_vars.poly_clipRt[0][0]; |
| 708 | wleft = DSP4_vars.poly_clipRt[0][0]; |
| 709 | 709 | } |
| 710 | | if (win_right < DSP4_vars.poly_clipLf[0][1]) |
| 710 | if (wright < DSP4_vars.poly_clipLf[0][1]) |
| 711 | 711 | { |
| 712 | | win_right = DSP4_vars.poly_clipLf[0][1]; |
| 712 | wright = DSP4_vars.poly_clipLf[0][1]; |
| 713 | 713 | } |
| 714 | | if (win_right > DSP4_vars.poly_clipRt[0][1]) |
| 714 | if (wright > DSP4_vars.poly_clipRt[0][1]) |
| 715 | 715 | { |
| 716 | | win_right = DSP4_vars.poly_clipRt[0][1]; |
| 716 | wright = DSP4_vars.poly_clipRt[0][1]; |
| 717 | 717 | } |
| 718 | 718 | |
| 719 | 719 | // SR = 0x80 |
| 720 | 720 | |
| 721 | 721 | // initial output for polygon #1 |
| 722 | 722 | DSP4_CLEAR_OUT(); |
| 723 | | DSP4_WRITE_BYTE(win_left & 0xff); |
| 724 | | DSP4_WRITE_BYTE(win_right & 0xff); |
| 723 | DSP4_WRITE_BYTE(wleft & 0xff); |
| 724 | DSP4_WRITE_BYTE(wright & 0xff); |
| 725 | 725 | |
| 726 | 726 | |
| 727 | 727 | do |