src/mess/machine/mboard.c
| r9631 | r9632 | |
| 29 | 29 | |
| 30 | 30 | static int m_board[64]; |
| 31 | 31 | static int save_board[64]; |
| 32 | | |
| 33 | 32 | static UINT16 Line18_LED; |
| 34 | 33 | static UINT16 Line18_REED; |
| 35 | 34 | |
| r9631 | r9632 | |
| 68 | 67 | |
| 69 | 68 | /* |
| 70 | 69 | |
| 71 | | Example board scan: |
| 70 | Example board scan: |
| 72 | 71 | Starting postion and pawn on E2 is lifted |
| 73 | 72 | |
| 74 | 73 | |
| r9631 | r9632 | |
| 85 | 84 | mask: fb 1111 1011 Line 3 |
| 86 | 85 | data: ff 1111 1111 all fields empty |
| 87 | 86 | mask: fd 1111 1101 Line 2 |
| 88 | | data: 10 0001 0000 E2 is empty rest is occupied |
| 87 | data: 10 0001 0000 E2 is empty rest is occupied |
| 89 | 88 | mask: fe 1111 1110 Line 1 |
| 90 | 89 | data: 0 0000 0000 all fields occupied |
| 91 | 90 | |
| r9631 | r9632 | |
| 120 | 119 | Line18_LED = 0; |
| 121 | 120 | else |
| 122 | 121 | Line18_LED = data; |
| 123 | | |
| 122 | |
| 124 | 123 | read_board_flag = FALSE; |
| 125 | 124 | |
| 126 | 125 | if (data == 0xff) |
| r9631 | r9632 | |
| 145 | 144 | |
| 146 | 145 | */ |
| 147 | 146 | |
| 148 | | |
| 149 | 147 | for (i=0; i < 64; i++) /* all LED's off */ |
| 150 | 148 | output_set_led_value(i, 0); |
| 151 | 149 | |
| r9631 | r9632 | |
| 157 | 155 | { |
| 158 | 156 | for (i_18 = 0; i_18 < 8; i_18++) |
| 159 | 157 | { |
| 160 | | LED = (i_18*8 + 8-i_AH-1); |
| 161 | | if (!(Line18_LED & (1 << i_18))) /* cleared bit */ |
| 158 | LED = (i_18*8 + 8-i_AH-1); |
| 159 | if (!(Line18_LED & (1 << i_18))) /* cleared bit */ |
| 162 | 160 | output_set_led_value(LED, 1); |
| 163 | | else |
| 164 | | output_set_led_value(LED, 0); |
| 161 | //else |
| 162 | // output_set_led_value(LED, 0); |
| 165 | 163 | } |
| 166 | 164 | } |
| 167 | 165 | } |
| r9631 | r9632 | |
| 176 | 174 | UINT8 data; |
| 177 | 175 | |
| 178 | 176 | data=read_board(); |
| 177 | logerror("Read Board Port Data = %d\n ",data); |
| 179 | 178 | return data; |
| 180 | 179 | } |
| 181 | 180 | |
| r9631 | r9632 | |
| 198 | 197 | WRITE8_HANDLER( mboard_write_board_8 ) |
| 199 | 198 | { |
| 200 | 199 | write_board(space->machine,data); |
| 200 | logerror("Write Board Port Data = %02x\n ",data); |
| 201 | 201 | } |
| 202 | 202 | |
| 203 | 203 | WRITE16_HANDLER( mboard_write_board_16 ) |
| 204 | 204 | { |
| 205 | if (data && 0xff) write_board(space->machine,data); |
| 206 | logerror("write board 16 %08x\n",data); |
| 205 | 207 | write_board(space->machine,data>>8); |
| 206 | 208 | } |
| 207 | 209 | |
| 208 | 210 | WRITE32_HANDLER( mboard_write_board_32 ) |
| 209 | 211 | { |
| 212 | data |= data << 24; |
| 213 | logerror("write board 32 o: %08x d: %08x\n",offset,data); |
| 210 | 214 | write_board(space->machine,data>>24); |
| 211 | 215 | } |
| 212 | 216 | |
| 213 | 217 | WRITE8_HANDLER( mboard_write_LED_8 ) |
| 214 | 218 | { |
| 215 | | write_LED(data); |
| 219 | write_LED(data); |
| 220 | cpu_spinuntil_time(space->cpu, ATTOTIME_IN_USEC(7)); |
| 216 | 221 | } |
| 217 | 222 | |
| 218 | 223 | WRITE16_HANDLER( mboard_write_LED_16 ) |
| 219 | 224 | { |
| 220 | 225 | write_LED(data >> 8); |
| 226 | cpu_spinuntil_time(space->cpu, ATTOTIME_IN_USEC(9)); |
| 221 | 227 | } |
| 222 | 228 | |
| 223 | 229 | WRITE32_HANDLER( mboard_write_LED_32 ) |
| 224 | 230 | { |
| 225 | | write_LED(data >> 24); |
| 231 | data = data | data << 24; |
| 232 | write_LED(data >> 24); |
| 233 | cpu_spinuntil_time(space->cpu, ATTOTIME_IN_USEC(20)); |
| 226 | 234 | } |
| 227 | 235 | |
| 228 | 236 | TIMER_CALLBACK( mboard_update_artwork ) |
| 229 | 237 | { |
| 230 | 238 | check_board_buttons(machine); |
| 231 | 239 | set_artwork(machine); |
| 232 | | mboard_set_boarder_pieces(); |
| 240 | set_boarder_pieces(); |
| 233 | 241 | } |
| 234 | 242 | |
| 235 | 243 | /* save states callback */ |
| r9631 | r9632 | |
| 317 | 325 | |
| 318 | 326 | if (click_on_boarder_piece) |
| 319 | 327 | { |
| 320 | | if (!mouse_down) |
| 328 | if (!mouse_down) |
| 321 | 329 | { |
| 322 | 330 | if (border_pieces[i] > 12 ) /* second click on selected border piece */ |
| 323 | 331 | { |
| r9631 | r9632 | |
| 405 | 413 | mouse_hold.piece = 0; |
| 406 | 414 | mouse_hold.border_piece = FALSE; |
| 407 | 415 | } |
| 408 | | |
| 416 | |
| 409 | 417 | return; |
| 410 | 418 | } |
| 411 | 419 | |