void ramtek_videoram_w (int offset,int data) { data = data & ~mask; if (videoram[offset] != data) { int i,x,y; videoram[offset] = data; y = offset / 32; x = 8 * (offset % 32); for (i = 0; i < 8; i++) { plot_pixel2(Machine->scrbitmap, tmpbitmap, x, y, Machine->pens[(data & 0x80) ? WHITE : BLACK]); x++; data <<= 1; } } }
/*************************************************************************** Draw the game screen in the given osd_bitmap. Do NOT call osd_update_display() from this function, it will be called by the main emulation engine. ***************************************************************************/ void spiders_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh) { int loop,data0,data1,data2,col; size_t crtc6845_mem_size; int video_addr,increment; unsigned char *RAM = memory_region(REGION_CPU1); crtc6845_mem_size=crtc6845_horiz_disp*crtc6845_vert_disp*8; if(spiders_video_flip) { video_addr=crtc6845_start_addr+(crtc6845_mem_size-1); if((video_addr&0xff)==0x80) video_addr-=0x80; /* Fudge factor!!! */ increment=-1; } else { video_addr=crtc6845_start_addr; increment=1; } video_addr&=0xfbff; /* Fudge factor: sometimes this bit gets set and */ /* I've no idea how it maps to the hardware but */ /* everything works OK if we do this */ if(crtc6845_page_flip) video_addr+=0x2000; for(loop=0;loop<crtc6845_mem_size;loop++) { int i,x,y,combo; if(spiders_video_flip) { data0=bitflip[RAM[0x0000+video_addr]]; data1=bitflip[RAM[0x4000+video_addr]]; data2=bitflip[RAM[0x8000+video_addr]]; } else { data0=RAM[0x0000+video_addr]; data1=RAM[0x4000+video_addr]; data2=RAM[0x8000+video_addr]; } combo=data0|(data1<<8)|(data2<<16); if(screenbuffer[video_addr&SCREENBUFFER_MASK]!=combo) { y=loop/0x20; for(i=0;i<8;i++) { x=((loop%0x20)<<3)+i; col=((data2&0x01)<<2)+((data1&0x01)<<1)+(data0&0x01); plot_pixel2(bitmap, tmpbitmap, x, y, Machine->pens[col]); data0 >>= 1; data1 >>= 1; data2 >>= 1; } screenbuffer[video_addr&SCREENBUFFER_MASK]=combo; } video_addr+=increment; video_addr&=0x3fff; }