static WRITE_HANDLER( MC6840_control_port_0_w ) { /* MC6840 Emulation by Takahiro Nogi. 1999/09/27 (This routine hasn't been completed yet.) */ #ifdef MAME_DEBUG char mess[80]; #endif MC6840_index0 = data; if (MC6840_index0 & 0x80) /* enable timer output */ { if ((MC6840_register0 != S_TEMPO) && (MC6840_register0 != 0)) { S_TEMPO = MC6840_register0; #ifdef MAME_DEBUG sprintf(mess, "I0:0x%02X R0:0x%02X I1:0x%02X R1:0x%02X", MC6840_index0, MC6840_register0, MC6840_index1, MC6840_register1); usrintf_showmessage(mess); #endif } MC6809_FLAG = 1; } else { MC6809_FLAG = 0; } #ifdef MAME_DEBUG logerror("MC6840 Write:(0x%02X)0x%02X\n", MC6840_register0, data); #endif }
void EEPROM_init(struct EEPROM_interface *interface) { intf = interface; if ((1 << intf->address_bits) * intf->data_bits / 8 > MEMORY_SIZE) { usrintf_showmessage("EEPROM larger than eeprom.c allows"); return; } memset(eeprom_data,0xff,(1 << intf->address_bits) * intf->data_bits / 8); serial_count = 0; latch = 0; reset_line = ASSERT_LINE; clock_line = ASSERT_LINE; eeprom_read_address = 0; sending = 0; if (intf->cmd_unlock) locked = 1; else locked = 0; state_save_register_UINT8("eeprom", 0, "data", eeprom_data, MEMORY_SIZE); state_save_register_UINT8("eeprom", 0, "serial buffer", serial_buffer, SERIAL_BUFFER_LENGTH); state_save_register_int ("eeprom", 0, "clock line", &clock_line); state_save_register_int ("eeprom", 0, "reset line", &reset_line); state_save_register_int ("eeprom", 0, "locked", &locked); state_save_register_int ("eeprom", 0, "serial count", &serial_count); state_save_register_int ("eeprom", 0, "latch", &latch); state_save_register_int ("eeprom", 0, "reset delay", &reset_delay); state_save_register_int ("eeprom", 0, "clock count", &eeprom_clock_count); state_save_register_int ("eeprom", 0, "data bits", &eeprom_data_bits); state_save_register_int ("eeprom", 0, "address", &eeprom_read_address); }
static INTERRUPT_GEN( fromanc2_interrupt ) { static int fromanc2_playerside_old = -1; static int key_F1_old = 0; if (keyboard_pressed(KEYCODE_F1)) { if (key_F1_old != 1) { key_F1_old = 1; fromanc2_playerside ^= 1; } } else key_F1_old = 0; if (fromanc2_playerside_old != fromanc2_playerside) { fromanc2_playerside_old = fromanc2_playerside; usrintf_showmessage("PLAYER-%01X SIDE", fromanc2_playerside + 1); if (!fromanc2_playerside) { mixer_set_stereo_volume(3, 75, 75); // 1P (LEFT) mixer_set_stereo_volume(4, 0, 0); // 2P (RIGHT) } else { mixer_set_stereo_volume(3, 0, 0); // 1P (LEFT) mixer_set_stereo_volume(4, 75, 75); // 2P (RIGHT) } fromanc2_set_dispvram_w(fromanc2_playerside); } cpu_set_irq_line(0, 1, HOLD_LINE); }
static void set_m90_bank(void) { data8_t *rom = memory_region(REGION_USER1); if (!rom) usrintf_showmessage("bankswitch with no banked ROM!"); else cpu_setbank(1,rom + bankaddress); }
INPUT_PORTS_END static void irqhandler(int irq) { usrintf_showmessage("irq"); // cpu_set_irq_line(2,0,irq ? ASSERT_LINE : CLEAR_LINE); }
static INTERRUPT_GEN( m107_raster_interrupt ) { static int last_line=0; int line = 256 - cpu_getiloops(); if (keyboard_pressed_memory(KEYCODE_F1)) { raster_enable ^= 1; if (raster_enable) usrintf_showmessage("Raster IRQ enabled"); else usrintf_showmessage("Raster IRQ disabled"); } /* Raster interrupt */ if (raster_enable && line==m107_raster_irq_position) { if (osd_skip_this_frame()==0) m107_vh_raster_partial_refresh(Machine->scrbitmap,last_line,line); last_line=line+1; cpu_set_irq_line_and_vector(0, 0, HOLD_LINE, m107_IRQ_2); } /* Kludge to get Fire Barrel running */ else if (line==118) { cpu_set_irq_line_and_vector(0, 0, HOLD_LINE, m107_IRQ_3); } /* Redraw screen, then set vblank and trigger the VBL interrupt */ else if (line==248) { if (osd_skip_this_frame()==0) m107_vh_raster_partial_refresh(Machine->scrbitmap,last_line,248); last_line=0; m107_vblank=1; cpu_set_irq_line_and_vector(0, 0, HOLD_LINE, m107_IRQ_0); } /* End of vblank */ else if (line==255) m107_vblank=0; }
int osd_update_audio_stream(INT16 *buffer) { // if nothing to do, don't do it if (Machine->sample_rate != 0 && stream_buffer) { int original_bytes = bytes_in_stream_buffer(); int input_bytes = samples_this_frame * stream_format.nBlockAlign; int final_bytes; // update the sample adjustment update_sample_adjustment(original_bytes); // copy data into the sound buffer copy_sample_data(buffer, input_bytes); // check for overflows final_bytes = bytes_in_stream_buffer(); if (final_bytes < original_bytes) buffer_overflows++; } // reset underflow/overflow tracking if (++total_frames == INGORE_UNDERFLOW_FRAMES) buffer_overflows = buffer_underflows = 0; // update underflow/overflow logging #if (DISPLAY_UNDEROVERFLOW || LOG_SOUND) { static int prev_overflows, prev_underflows; if (total_frames > INGORE_UNDERFLOW_FRAMES && (buffer_overflows != prev_overflows || buffer_underflows != prev_underflows)) { prev_overflows = buffer_overflows; prev_underflows = buffer_underflows; #if DISPLAY_UNDEROVERFLOW usrintf_showmessage("overflows=%d underflows=%d", buffer_overflows, buffer_underflows); #endif #if LOG_SOUND fprintf(sound_log, "************************ overflows=%d underflows=%d\n", buffer_overflows, buffer_underflows); #endif } } #endif // compute how many samples to generate next frame samples_left_over += samples_per_frame; samples_this_frame = (UINT32)samples_left_over; samples_left_over -= (double)samples_this_frame; samples_this_frame += current_adjustment; // return the samples to play this next frame return samples_this_frame; }
static WRITE16_HANDLER( ninjaw_sound_w ) { if (offset == 0) taitosound_port_w (0, data & 0xff); else if (offset == 1) taitosound_comm_w (0, data & 0xff); #ifdef MAME_DEBUG if (data & 0xff00) usrintf_showmessage("ninjaw_sound_w to high byte: %04x",data); #endif }
void gionbana_romsel_w(int data) { gionbana_gfxrom = (data & 0x0f); if ((0x20000 * gionbana_gfxrom) > (memory_region_length(REGION_GFX1) - 1)) { #ifdef MAME_DEBUG usrintf_showmessage("GFXROM BANK OVER!!"); #endif gionbana_gfxrom = 0; } }
static WRITE8_HANDLER( k88games_5f84_w ) { /* bits 0/1 coin counters */ coin_counter_w(0,data & 0x01); coin_counter_w(1,data & 0x02); /* bit 2 enables ROM reading from the 051316 */ /* also 5fce == 2 read roms, == 3 read ram */ zoomreadroms = data & 0x04; if (data & 0xf8) usrintf_showmessage("5f84 = %02x",data); }
/* 0-3 unknown 4-5 sprite offset x 6 flip screen 7 sprite offset y 8-15 unknown */ static WRITE_HANDLER( namcos1_displaycontrol_w ) { unsigned char *disp_reg = &namcos1_controlram[0xff0]; int newflip; switch(offset) { case 0x02: /* ?? */ break; case 0x04: /* sprite offset X */ case 0x05: sprite_fixed_sx = disp_reg[4]*256+disp_reg[5] - 151; if( sprite_fixed_sx > 480 ) sprite_fixed_sx -= 512; if( sprite_fixed_sx < -32 ) sprite_fixed_sx += 512; break; case 0x06: /* flip screen */ newflip = (disp_reg[6]&1)^0x01; if(flipscreen != newflip) { namcos1_set_flipscreen(newflip); } break; case 0x07: /* sprite offset Y */ sprite_fixed_sy = 239 - disp_reg[7]; break; case 0x0a: /* ?? */ /* 00 : blazer,dspirit,quester */ /* 40 : others */ break; case 0x0e: /* ?? */ /* 00 : blazer,dangseed,dspirit,pacmania,quester */ /* 06 : others */ case 0x0f: /* ?? */ /* 00 : dangseed,dspirit,pacmania */ /* f1 : blazer */ /* f8 : galaga88,quester */ /* e7 : others */ break; } #if 0 { char buf[80]; sprintf(buf,"%02x:%02x:%02x:%02x:%02x%02x,%02x,%02x,%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", disp_reg[0],disp_reg[1],disp_reg[2],disp_reg[3], disp_reg[4],disp_reg[5],disp_reg[6],disp_reg[7], disp_reg[8],disp_reg[9],disp_reg[10],disp_reg[11], disp_reg[12],disp_reg[13],disp_reg[14],disp_reg[15]); usrintf_showmessage(buf); } #endif }
static void taitob_video_control (unsigned char data) { #if 0 if (data != video_control) usrintf_showmessage("video control = %02x",data); #endif video_control = data; if (video_control & 0x80) framebuffer_page = (~video_control & 0x40) >> 6; tilemap_set_flip(ALL_TILEMAPS, (video_control & 0x10) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0 ); }
static WRITE_HANDLER( labyrunr_bankswitch_w ) { int bankaddress; unsigned char *RAM = memory_region(REGION_CPU1); if (data & 0xe0) usrintf_showmessage("bankswitch %02x",data); /* bits 0-2 = bank number */ bankaddress = 0x10000 + (data & 0x07) * 0x4000; cpu_setbank(1,&RAM[bankaddress]); /* bits 3 and 4 are coin counters */ coin_counter_w(0,data & 0x08); coin_counter_w(1,data & 0x10); }
static WRITE_HANDLER( gbusters_snd_bankswitch_w ) { unsigned char *RAM = memory_region(REGION_SOUND1); int bank_B = 0x20000*((data >> 2) & 0x01); /* ?? */ int bank_A = 0x20000*((data) & 0x01); /* ?? */ K007232_bankswitch(0,RAM + bank_A,RAM + bank_B); #if 0 { char baf[40]; sprintf(baf,"snd_bankswitch = %02x", data); usrintf_showmessage(baf); } #endif }
static WRITE16_HANDLER( gotcha_lamps_w ) { #if 0 usrintf_showmessage("%c%c%c%c %c%c%c%c %c%c%c%c", (data & 0x001) ? 'R' : '-', (data & 0x002) ? 'G' : '-', (data & 0x004) ? 'B' : '-', (data & 0x008) ? 'S' : '-', (data & 0x010) ? 'R' : '-', (data & 0x020) ? 'G' : '-', (data & 0x040) ? 'B' : '-', (data & 0x080) ? 'S' : '-', (data & 0x100) ? 'R' : '-', (data & 0x200) ? 'G' : '-', (data & 0x400) ? 'B' : '-', (data & 0x800) ? 'S' : '-' ); #endif }
/* remap callback */ static int remap_colors( int num, int addr, int data ) { /* this is the protection. color codes are shuffled around */ /* the ones with value 0xff are unknown */ if ( addr >= 0x3f00 ) { int newdata = remapped_colortable[ data & 0x3f ]; if ( newdata != 0xff ) data = newdata; #ifdef MAME_DEBUG else usrintf_showmessage( "Unmatched color %02x, at address %04x", data & 0x3f, addr ); #endif } return data; }
static WRITE_HANDLER( aliens_coin_counter_w ) { /* bits 0-1 = coin counters */ coin_counter_w(0,data & 0x01); coin_counter_w(1,data & 0x02); /* bit 5 = select work RAM or palette */ palette_selected = data & 0x20; /* bit 6 = enable char ROM reading through the video RAM */ K052109_set_RMRD_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); /* other bits unknown */ #if 0 { char baf[40]; sprintf(baf,"%02x",data); usrintf_showmessage(baf); } #endif }
static WRITE16_HANDLER( unknown_w ) { usrintf_showmessage("write %04x to %04x", data, offset*2 + 0x6a); }
static WRITE_HANDLER( namcos1_spriteram_w ) { static const int sprite_sizemap[4] = {16,8,32,4}; int num = offset / 0x10; struct gfx_object *object = &objectlist->objects[num+MAX_PLAYFIELDS]; unsigned char *base = &namcos1_controlram[0x0800 + num*0x10]; int sx, sy; int resize_x=0,resize_y=0; switch(offset&0x0f) { case 0x04: /* bit.6-7 : x size (16/8/32/4) */ /* bit.5 : flipx */ /* bit.3-4 : x offset */ /* bit.0-2 : code.8-10 */ object->width = sprite_sizemap[(data>>6)&3]; object->flipx = ((data>>5)&1) ^ flipscreen; object->left = (data&0x18) & (~(object->width-1)); object->code = (base[4]&7)*256 + base[5]; resize_x=1; break; case 0x05: /* bit.0-7 : code.0-7 */ object->code = (base[4]&7)*256 + base[5]; break; case 0x06: /* bit.1-7 : color */ /* bit.0 : x draw position.8 */ object->color = data>>1; object->transparency = object->color==0x7f ? TRANSPARENCY_PEN_TABLE : TRANSPARENCY_PEN; #if 0 if(object->color==0x7f && !(Machine->gamedrv->flags & GAME_REQUIRES_16BIT)) usrintf_showmessage("This driver requires GAME_REQUIRES_16BIT flag"); #endif case 0x07: /* bit.0-7 : x draw position.0-7 */ resize_x=1; break; case 0x08: /* bit.5-7 : priority */ /* bit.3-4 : y offset */ /* bit.1-2 : y size (16/8/32/4) */ /* bit.0 : flipy */ object->priority = (data>>5)&7; object->height = sprite_sizemap[(data>>1)&3]; object->flipy = (data&1) ^ flipscreen; object->top = (data&0x18) & (~(object->height-1)); case 0x09: /* bit.0-7 : y draw position */ resize_y=1; break; default: return; } if(resize_x) { /* sx */ sx = (base[6]&1)*256 + base[7]; sx += sprite_fixed_sx; if(flipscreen) sx = 210 - sx - object->width; if( sx > 480 ) sx -= 512; if( sx < -32 ) sx += 512; if( sx < -224 ) sx += 512; object->sx = sx; } if(resize_y) { /* sy */ sy = sprite_fixed_sy - base[9]; if(flipscreen) sy = 222 - sy; else sy = sy - object->height; if( sy > 224 ) sy -= 256; if( sy < -32 ) sy += 256; object->sy = sy; } object->dirty_flag = GFXOBJ_DIRTY_ALL; }
static void gionbana_gfxdraw(void) { unsigned char *GFX = memory_region(REGION_GFX1); int x, y; int dx1, dx2, dy1, dy2; int startx, starty; int sizex, sizey; int skipx, skipy; int ctrx, ctry; int tflag1, tflag2; unsigned char color, color1, color2; unsigned char drawcolor1, drawcolor2; int gfxaddr; if (gionbana_flipx) { gionbana_drawx -= (gionbana_sizex << 1); startx = gionbana_sizex; sizex = ((gionbana_sizex ^ 0xff) + 1); skipx = -1; } else { gionbana_drawx = (gionbana_drawx - gionbana_sizex); startx = 0; sizex = (gionbana_sizex + 1); skipx = 1; } if (gionbana_flipy) { gionbana_drawy -= ((gionbana_sizey << 1) + 1); starty = gionbana_sizey; sizey = ((gionbana_sizey ^ 0xff) + 1); skipy = -1; } else { gionbana_drawy = (gionbana_drawy - gionbana_sizey - 1); starty = 0; sizey = (gionbana_sizey + 1); skipy = 1; } gfxaddr = ((gionbana_gfxrom << 17) + (gionbana_radry << 9) + (gionbana_radrx << 1)); for (y = starty, ctry = sizey; ctry > 0; y += skipy, ctry--) { for (x = startx, ctrx = sizex; ctrx > 0; x += skipx, ctrx--) { if ((gfxaddr > (memory_region_length(REGION_GFX1) - 1))) { #ifdef MAME_DEBUG usrintf_showmessage("GFXROM ADDRESS OVER!!"); #endif gfxaddr = 0; } color = GFX[gfxaddr++]; if (gionbana_flipscreen) { dx1 = (((((gionbana_drawx + x) * 2) + 0) ^ 0x1ff) & 0x1ff); dx2 = (((((gionbana_drawx + x) * 2) + 1) ^ 0x1ff) & 0x1ff); dy1 = (((gionbana_drawy + y) ^ 0xff) & 0xff); dy2 = (((gionbana_drawy + y + (gionbana_scrolly2 & 0xff) + 2) ^ 0xff) & 0xff); } else { dx1 = ((((gionbana_drawx + x) * 2) + 0) & 0x1ff); dx2 = ((((gionbana_drawx + x) * 2) + 1) & 0x1ff); dy1 = ((gionbana_drawy + y) & 0xff); dy2 = ((gionbana_drawy + y + (-gionbana_scrolly2 & 0xff)) & 0xff); } if (gionbana_flipx) { /* flip */ color1 = (color & 0xf0) >> 4; color2 = (color & 0x0f) >> 0; } else { /* normal */ color1 = (color & 0x0f) >> 0; color2 = (color & 0xf0) >> 4; } drawcolor1 = gionbana_paltbl[((gionbana_paltblnum & 0x7f) << 4) + color1]; drawcolor2 = gionbana_paltbl[((gionbana_paltblnum & 0x7f) << 4) + color2]; if (gfxdraw_mode) { if (gionbana_vram & 0x01) { tflag1 = (drawcolor1 != 0xff) ? 1 : 0; tflag2 = (drawcolor2 != 0xff) ? 1 : 0; } else { if (gionbana_vram & 0x08) { tflag1 = (drawcolor1 != 0xff) ? 1 : 0; tflag2 = (drawcolor2 != 0xff) ? 1 : 0; } else { tflag1 = tflag2 = 1; } if (drawcolor1 == 0x7f) drawcolor1 = 0xff; if (drawcolor2 == 0x7f) drawcolor2 = 0xff; } } else { tflag1 = (drawcolor1 != 0xff) ? 1 : 0; tflag2 = (drawcolor2 != 0xff) ? 1 : 0; gionbana_vram = 0x02; } nb1413m3_busyctr++; if (gfxdraw_mode) { if (gionbana_vram & 0x01) { if (tflag1) { gionbana_videoram0[(dy1 * Machine->drv->screen_width) + dx1] = drawcolor1; plot_pixel(gionbana_tmpbitmap0, dx1, dy1, Machine->pens[drawcolor1]); } if (tflag2) { gionbana_videoram0[(dy1 * Machine->drv->screen_width) + dx2] = drawcolor2; plot_pixel(gionbana_tmpbitmap0, dx2, dy1, Machine->pens[drawcolor2]); } } if (gionbana_vram & 0x02) { if (tflag1) { gionbana_videoram1[(dy2 * Machine->drv->screen_width) + dx1] = drawcolor1; plot_pixel(gionbana_tmpbitmap1, dx1, dy2, Machine->pens[drawcolor1]); } if (tflag2) { gionbana_videoram1[(dy2 * Machine->drv->screen_width) + dx2] = drawcolor2; plot_pixel(gionbana_tmpbitmap1, dx2, dy2, Machine->pens[drawcolor2]); } } } else { if (tflag1) { gionbana_videoram0[(dy2 * Machine->drv->screen_width) + dx1] = drawcolor1; plot_pixel(gionbana_tmpbitmap0, dx1, dy2, Machine->pens[drawcolor1]); } if (tflag2) { gionbana_videoram0[(dy2 * Machine->drv->screen_width) + dx2] = drawcolor2; plot_pixel(gionbana_tmpbitmap0, dx2, dy2, Machine->pens[drawcolor2]); } } } }
static WRITE_HANDLER( display_value ) { usrintf_showmessage("d800=%x",data); }