Previous 199869 Revisions Next

r32232 Saturday 20th September, 2014 at 11:52:27 UTC by Barry Rodewald
trident: added mono bitmaps generated by writing to VRAM.
[src/emu/bus/isa]trident.c trident.h

trunk/src/emu/bus/isa/trident.c
r32231r32232
1414
1515#define CRTC_PORT_ADDR ((vga.miscellaneous_output&1)?0x3d0:0x3b0)
1616
17#define READPIXEL8(x,y) (vga.memory[(y*offset() + x) % vga.svga_intf.vram_size])
18#define WRITEPIXEL8(x,y,c) if(x<tri.accel_dest_y_clip && y<tri.accel_dest_y_clip) \
19   (vga.memory[(y*offset() + x) % vga.svga_intf.vram_size] = c)
17#define READPIXEL8(x,y) (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)) % vga.svga_intf.vram_size])
18#define WRITEPIXEL8(x,y,c) if((x & 0xfff)<tri.accel_dest_x_clip && (y & 0xfff)<tri.accel_dest_y_clip) \
19   (vga.memory[((y & 0xfff)*offset() + (x & 0xfff)) % vga.svga_intf.vram_size] = c)
2020
2121#define LOG (1)
22#define LOG_ACCEL (0)
2223
2324trident_vga_device::trident_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
2425   : svga_device(mconfig, TRIDENT_VGA, "Trident TGUI9680", tag, owner, clock, "trident_vga", __FILE__)
r32231r32232
6869   tri.sr0c = 0x78;
6970   tri.port_3c3 = true;
7071   tri.accel_busy = false;
72   tri.accel_memwrite_active = false;
7173}
7274
7375UINT16 trident_vga_device::offset()
r32231r32232
470472            break;
471473         case 8:
472474            if(tri.gc0f & 0x04)  // if enabled
475            {
473476               res = svga.bank_w & 0x3f;
477            }
474478            else
475479               res = 0xff;
476480            break;
r32231r32232
506510            if(tri.gc0f & 0x04)  // if enabled
507511            {
508512               svga.bank_w = data & 0x3f;
513               if(LOG) logerror("Trident: Write Bank set to %02x\n",data);
509514               if(!(tri.gc0f & 0x01))  // if bank regs are not separated
515               {
510516                  svga.bank_r = data & 0x3f; // then this is also the read bank register
517                  if(LOG) logerror("Trident: Read Bank set to %02x\n",data);
518               }
511519            }
512520            break;
513521         case 9:
514522            if(tri.gc0f & 0x04)  // if enabled
515523            {
516524               if(tri.gc0f & 0x01)  // and if bank regs are separated
525               {
517526                  svga.bank_r = data & 0x3f;
527                  if(LOG) logerror("Trident: Read Bank set to %02x\n",data);
528               }
518529            }
519530            break;
520531         default:
r32231r32232
579590
580591WRITE8_MEMBER(trident_vga_device::mem_w)
581592{
593   if(tri.accel_memwrite_active)
594   {
595      tri.accel_transfer = (tri.accel_transfer & (~(0x000000ff << (24-(8*(offset % 4)))))) | (data << (24-(8 * (offset % 4))));
596      if(offset % 4 == 3)
597         accel_data_write(tri.accel_transfer);
598      return;
599   }
600
582601   if (svga.rgb8_en || svga.rgb15_en || svga.rgb16_en || svga.rgb32_en)
583602   {
584603      if(tri.new_mode)  // 64k from 0xA0000-0xAFFFF
r32231r32232
703722   {
704723   case 0x02:  // Operation Mode
705724      tri.accel_opermode = (tri.accel_opermode & 0xff00) | data;
706      if(LOG) logerror("Trident: Operation Mode set to %04x\n",tri.accel_opermode);
725      if(LOG_ACCEL) logerror("Trident: Operation Mode set to %04x\n",tri.accel_opermode);
707726      break;
708727   case 0x03:
709728      tri.accel_opermode = (tri.accel_opermode & 0x00ff) | (data << 8);
710      if(LOG) logerror("Trident: Operation Mode set to %04x\n",tri.accel_opermode);
729      if(LOG_ACCEL) logerror("Trident: Operation Mode set to %04x\n",tri.accel_opermode);
711730      break;
712731   case 0x04:  // Command register
713732      tri.accel_command = data;
r32231r32232
715734      break;
716735   case 0x07:  // Foreground Mix?
717736      tri.accel_fmix = data;
718      if(LOG) logerror("Trident: FMIX set to %02x\n",data);
737      if(LOG_ACCEL) logerror("Trident: FMIX set to %02x\n",data);
719738      break;
720739   case 0x08:  // Draw flags
721740      tri.accel_drawflags = (tri.accel_drawflags & 0xffffff00) | data;
722      if(LOG) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
741      if(LOG_ACCEL) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
723742      break;
724743   case 0x09:
725744      tri.accel_drawflags = (tri.accel_drawflags & 0xffff00ff) | (data << 8);
726      if(LOG) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
745      if(LOG_ACCEL) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
727746      break;
728747   case 0x0a:
729748      tri.accel_drawflags = (tri.accel_drawflags & 0xff00ffff) | (data << 16);
730      if(LOG) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
749      if(LOG_ACCEL) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
731750      break;
732751   case 0x0b:
733752      tri.accel_drawflags = (tri.accel_drawflags & 0x00ffffff) | (data << 24);
734      if(LOG) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
753      if(LOG_ACCEL) logerror("Trident: Draw flags set to %08x\n",tri.accel_drawflags);
735754      break;
736755   case 0x0c:  // Foreground Colour
737756      tri.accel_fgcolour = (tri.accel_fgcolour & 0xffffff00) | data;
738      if(LOG) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
757      if(LOG_ACCEL) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
739758      break;
740759   case 0x0d:
741760      tri.accel_fgcolour = (tri.accel_fgcolour & 0xffff00ff) | (data << 8);
742      if(LOG) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
761      if(LOG_ACCEL) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
743762      break;
744763   case 0x0e:
745764      tri.accel_fgcolour = (tri.accel_fgcolour & 0xff00ffff) | (data << 16);
746      if(LOG) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
765      if(LOG_ACCEL) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
747766      break;
748767   case 0x0f:
749768      tri.accel_fgcolour = (tri.accel_fgcolour & 0x00ffffff) | (data << 24);
750      if(LOG) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
769      if(LOG_ACCEL) logerror("Trident: Foreground Colour set to %08x\n",tri.accel_fgcolour);
751770      break;
752771   case 0x10:  // Background Colour
753772      tri.accel_bgcolour = (tri.accel_bgcolour & 0xffffff00) | data;
754      if(LOG) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
773      if(LOG_ACCEL) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
755774      break;
756775   case 0x11:
757776      tri.accel_bgcolour = (tri.accel_bgcolour & 0xffff00ff) | (data << 8);
758      if(LOG) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
777      if(LOG_ACCEL) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
759778      break;
760779   case 0x12:
761780      tri.accel_bgcolour = (tri.accel_bgcolour & 0xff00ffff) | (data << 16);
762      if(LOG) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
781      if(LOG_ACCEL) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
763782      break;
764783   case 0x13:
765784      tri.accel_bgcolour = (tri.accel_bgcolour & 0x00ffffff) | (data << 24);
766      if(LOG) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
785      if(LOG_ACCEL) logerror("Trident: Background Colour set to %08x\n",tri.accel_bgcolour);
767786      break;
768787   case 0x14:  // Pattern Location
769788      tri.accel_pattern_loc = (tri.accel_pattern_loc & 0xff00) | data;
770      if(LOG) logerror("Trident: Pattern Location set to %04x\n",tri.accel_pattern_loc);
771      debugger_break(machine());
789      if(LOG_ACCEL) logerror("Trident: Pattern Location set to %04x\n",tri.accel_pattern_loc);
772790      break;
773791   case 0x15:
774792      tri.accel_pattern_loc = (tri.accel_pattern_loc & 0x00ff) | (data << 8);
775      if(LOG) logerror("Trident: Pattern Location set to %04x\n",tri.accel_pattern_loc);
776      debugger_break(machine());
793      if(LOG_ACCEL) logerror("Trident: Pattern Location set to %04x\n",tri.accel_pattern_loc);
777794      break;
778795   case 0x18:  // Destination X
779796      tri.accel_dest_x = (tri.accel_dest_x & 0xff00) | data;
780      if(LOG) logerror("Trident: Destination X set to %04x\n",tri.accel_dest_x);
797      if(LOG_ACCEL) logerror("Trident: Destination X set to %04x\n",tri.accel_dest_x);
781798      break;
782799   case 0x19:
783800      tri.accel_dest_x = (tri.accel_dest_x & 0x00ff) | (data << 8);
784      if(LOG) logerror("Trident: Destination X set to %04x\n",tri.accel_dest_x);
801      if(LOG_ACCEL) logerror("Trident: Destination X set to %04x\n",tri.accel_dest_x);
785802      break;
786803   case 0x1a:  // Destination Y
787804      tri.accel_dest_y = (tri.accel_dest_y & 0xff00) | data;
788      if(LOG) logerror("Trident: Destination Y set to %04x\n",tri.accel_dest_y);
805      if(LOG_ACCEL) logerror("Trident: Destination Y set to %04x\n",tri.accel_dest_y);
789806      break;
790807   case 0x1b:
791808      tri.accel_dest_y = (tri.accel_dest_y & 0x00ff) | (data << 8);
792      if(LOG) logerror("Trident: Destination Y set to %04x\n",tri.accel_dest_y);
809      if(LOG_ACCEL) logerror("Trident: Destination Y set to %04x\n",tri.accel_dest_y);
793810      break;
794811   case 0x1c:  // Source X
795812      tri.accel_source_x = (tri.accel_source_x & 0xff00) | data;
796      if(LOG) logerror("Trident: Source X set to %04x\n",tri.accel_source_x);
813      if(LOG_ACCEL) logerror("Trident: Source X set to %04x\n",tri.accel_source_x);
797814      break;
798815   case 0x1d:
799816      tri.accel_source_x = (tri.accel_source_x & 0x00ff) | (data << 8);
800      if(LOG) logerror("Trident: Source X set to %04x\n",tri.accel_source_x);
817      if(LOG_ACCEL) logerror("Trident: Source X set to %04x\n",tri.accel_source_x);
801818      break;
802819   case 0x1e:  // Source Y
803820      tri.accel_source_y = (tri.accel_source_y & 0xff00) | data;
804      if(LOG) logerror("Trident: Source Y set to %04x\n",tri.accel_source_y);
821      if(LOG_ACCEL) logerror("Trident: Source Y set to %04x\n",tri.accel_source_y);
805822      break;
806823   case 0x1f:
807824      tri.accel_source_y = (tri.accel_source_y & 0x00ff) | (data << 8);
808      if(LOG) logerror("Trident: Source Y set to %04x\n",tri.accel_source_y);
825      if(LOG_ACCEL) logerror("Trident: Source Y set to %04x\n",tri.accel_source_y);
809826      break;
810827   case 0x20:  // Dimension(?) X
811828      tri.accel_dim_x = (tri.accel_dim_x & 0xff00) | data;
812      if(LOG) logerror("Trident: Dimension X set to %04x\n",tri.accel_dim_x);
829      if(LOG_ACCEL) logerror("Trident: Dimension X set to %04x\n",tri.accel_dim_x);
813830      break;
814831   case 0x21:
815832      tri.accel_dim_x = (tri.accel_dim_x & 0x00ff) | (data << 8);
816      if(LOG) logerror("Trident: Dimension X set to %04x\n",tri.accel_dim_x);
833      if(LOG_ACCEL) logerror("Trident: Dimension X set to %04x\n",tri.accel_dim_x);
817834      break;
818835   case 0x22:  // Dimension(?) Y
819836      tri.accel_dim_y = (tri.accel_dim_y & 0xff00) | data;
820      if(LOG) logerror("Trident: Dimension y set to %04x\n",tri.accel_dim_y);
837      if(LOG_ACCEL) logerror("Trident: Dimension y set to %04x\n",tri.accel_dim_y);
821838      break;
822839   case 0x23:
823840      tri.accel_dim_y = (tri.accel_dim_y & 0x00ff) | (data << 8);
824      if(LOG) logerror("Trident: Dimension y set to %04x\n",tri.accel_dim_y);
841      if(LOG_ACCEL) logerror("Trident: Dimension y set to %04x\n",tri.accel_dim_y);
825842      break;
826843   case 0x24:  // Style
827844      tri.accel_style = (tri.accel_style & 0xffffff00) | data;
828      if(LOG) logerror("Trident: Style set to %08x\n",tri.accel_style);
845      if(LOG_ACCEL) logerror("Trident: Style set to %08x\n",tri.accel_style);
829846      break;
830847   case 0x25:
831848      tri.accel_style = (tri.accel_style & 0xffff00ff) | (data << 8);
832      if(LOG) logerror("Trident: Style set to %08x\n",tri.accel_style);
849      if(LOG_ACCEL) logerror("Trident: Style set to %08x\n",tri.accel_style);
833850      break;
834851   case 0x26:
835852      tri.accel_style = (tri.accel_style & 0xff00ffff) | (data << 16);
836      if(LOG) logerror("Trident: Style set to %08x\n",tri.accel_style);
853      if(LOG_ACCEL) logerror("Trident: Style set to %08x\n",tri.accel_style);
837854      break;
838855   case 0x27:
839856      tri.accel_style = (tri.accel_style & 0x00ffffff) | (data << 24);
840      if(LOG) logerror("Trident: Style set to %08x\n",tri.accel_style);
857      if(LOG_ACCEL) logerror("Trident: Style set to %08x\n",tri.accel_style);
841858      break;
842859   case 0x28:  // Source Clip X
843860      tri.accel_source_x_clip = (tri.accel_source_x_clip & 0xff00) | data;
844      if(LOG) logerror("Trident: Source X Clip set to %04x\n",tri.accel_source_x_clip);
861      if(LOG_ACCEL) logerror("Trident: Source X Clip set to %04x\n",tri.accel_source_x_clip);
845862      break;
846863   case 0x29:
847864      tri.accel_source_x_clip = (tri.accel_source_x_clip & 0x00ff) | (data << 8);
848      if(LOG) logerror("Trident: Source X Clip set to %04x\n",tri.accel_source_x_clip);
865      if(LOG_ACCEL) logerror("Trident: Source X Clip set to %04x\n",tri.accel_source_x_clip);
849866      break;
850867   case 0x2a:  // Source Clip Y
851868      tri.accel_source_y_clip = (tri.accel_source_y_clip & 0xff00) | data;
852      if(LOG) logerror("Trident: Source Y Clip set to %04x\n",tri.accel_source_y_clip);
869      if(LOG_ACCEL) logerror("Trident: Source Y Clip set to %04x\n",tri.accel_source_y_clip);
853870      break;
854871   case 0x2b:
855872      tri.accel_source_y_clip = (tri.accel_source_y_clip & 0x00ff) | (data << 8);
856      if(LOG) logerror("Trident: Source Y Clip set to %04x\n",tri.accel_source_y_clip);
873      if(LOG_ACCEL) logerror("Trident: Source Y Clip set to %04x\n",tri.accel_source_y_clip);
857874      break;
858875   case 0x2c:  // Destination Clip X
859876      tri.accel_dest_x_clip = (tri.accel_dest_x_clip & 0xff00) | data;
860      if(LOG) logerror("Trident: Destination X Clip set to %04x\n",tri.accel_dest_x_clip);
877      if(LOG_ACCEL) logerror("Trident: Destination X Clip set to %04x\n",tri.accel_dest_x_clip);
861878      break;
862879   case 0x2d:
863880      tri.accel_dest_x_clip = (tri.accel_dest_x_clip & 0x00ff) | (data << 8);
864      if(LOG) logerror("Trident: Destination X Clip set to %04x\n",tri.accel_dest_x_clip);
881      if(LOG_ACCEL) logerror("Trident: Destination X Clip set to %04x\n",tri.accel_dest_x_clip);
865882      break;
866883   case 0x2e:  // Destination Clip Y
867884      tri.accel_dest_y_clip = (tri.accel_dest_y_clip & 0xff00) | data;
868      if(LOG) logerror("Trident: Destination Y Clip set to %04x\n",tri.accel_dest_y_clip);
885      if(LOG_ACCEL) logerror("Trident: Destination Y Clip set to %04x\n",tri.accel_dest_y_clip);
869886      break;
870887   case 0x2f:
871888      tri.accel_dest_y_clip = (tri.accel_dest_y_clip & 0x00ff) | (data << 8);
872      if(LOG) logerror("Trident: Destination Y Clip set to %04x\n",tri.accel_dest_y_clip);
889      if(LOG_ACCEL) logerror("Trident: Destination Y Clip set to %04x\n",tri.accel_dest_y_clip);
873890      break;
874891   case 0x48:  // CKEY (Chromakey?)
875892      tri.accel_ckey = (tri.accel_ckey & 0xffffff00) | data;
876      if(LOG) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
893      if(LOG_ACCEL) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
877894      break;
878895   case 0x49:
879896      tri.accel_ckey = (tri.accel_ckey & 0xffff00ff) | (data << 8);
880      if(LOG) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
897      if(LOG_ACCEL) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
881898      break;
882899   case 0x4a:
883900      tri.accel_ckey = (tri.accel_ckey & 0xff00ffff) | (data << 16);
884      if(LOG) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
901      if(LOG_ACCEL) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
885902      break;
886903   case 0x4b:
887904      tri.accel_ckey = (tri.accel_ckey & 0x00ffffff) | (data << 24);
888      if(LOG) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
905      if(LOG_ACCEL) logerror("Trident: CKey set to %08x\n",tri.accel_ckey);
889906      break;
890907   case 0x58:  // Foreground Pattern Colour
891908      tri.accel_fg_pattern_colour = (tri.accel_fg_pattern_colour & 0xffffff00) | data;
892      if(LOG) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
909      if(LOG_ACCEL) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
893910      break;
894911   case 0x59:
895912      tri.accel_fg_pattern_colour = (tri.accel_fg_pattern_colour & 0xffff00ff) | (data << 8);
896      if(LOG) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
913      if(LOG_ACCEL) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
897914      break;
898915   case 0x5a:
899916      tri.accel_fg_pattern_colour = (tri.accel_fg_pattern_colour & 0xff00ffff) | (data << 16);
900      if(LOG) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
917      if(LOG_ACCEL) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
901918      break;
902919   case 0x5b:
903920      tri.accel_fg_pattern_colour = (tri.accel_fg_pattern_colour & 0x00ffffff) | (data << 24);
904      if(LOG) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
921      if(LOG_ACCEL) logerror("Trident: FG Pattern Colour set to %08x\n",tri.accel_fg_pattern_colour);
905922      break;
906923   case 0x5c:  // Background Pattern Colour
907924      tri.accel_bg_pattern_colour = (tri.accel_bg_pattern_colour & 0xffffff00) | data;
908      if(LOG) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
925      if(LOG_ACCEL) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
909926      break;
910927   case 0x5d:
911928      tri.accel_bg_pattern_colour = (tri.accel_bg_pattern_colour & 0xffff00ff) | (data << 8);
912      if(LOG) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
929      if(LOG_ACCEL) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
913930      break;
914931   case 0x5e:
915932      tri.accel_bg_pattern_colour = (tri.accel_bg_pattern_colour & 0xff00ffff) | (data << 16);
916      if(LOG) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
933      if(LOG_ACCEL) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
917934      break;
918935   case 0x5f:
919936      tri.accel_bg_pattern_colour = (tri.accel_bg_pattern_colour & 0x00ffffff) | (data << 24);
920      if(LOG) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
937      if(LOG_ACCEL) logerror("Trident: BG Pattern Colour set to %08x\n",tri.accel_bg_pattern_colour);
921938      break;
922939   default:
923      if(LOG) logerror("Trident: unimplemented acceleration register offset %02x write %02x\n",offset,data);
940      logerror("Trident: unimplemented acceleration register offset %02x write %02x\n",offset,data);
924941   }
925942}
926943
r32231r32232
933950      break;
934951   case 0x01:
935952      if(LOG) logerror("Trident: Command: BitBLT ROP3 (Source %i,%i Dest %i,%i Size %i,%i)\n",tri.accel_source_x,tri.accel_source_y,tri.accel_dest_x,tri.accel_dest_y,tri.accel_dim_x,tri.accel_dim_y);
936      logerror("BitBLT: Drawflags = %08x\n",tri.accel_drawflags);
953      if(LOG) logerror("BitBLT: Drawflags = %08x FMIX = %02x\n",tri.accel_drawflags,tri.accel_fmix);
937954      accel_bitblt();
938955      break;
939956   case 0x02:
r32231r32232
973990   int xdir,ydir;
974991   int xstart,xend,ystart,yend;
975992
993   if(tri.accel_drawflags & 0x0040)  // TODO: handle PATMONO also
994   {
995      tri.accel_mem_x = tri.accel_dest_x;
996      tri.accel_mem_y = tri.accel_dest_y;
997      tri.accel_memwrite_active = true;
998      return;
999   }
1000
9761001   if(tri.accel_drawflags & 0x0200)
9771002   {
9781003      xdir = -1;
r32231r32232
10361061//   if(LOG_8514) logerror("8514/A: Command (%04x) - Line (Bresenham) - %i,%i  Axial %i, Diagonal %i, Error %i, Major Axis %i, Minor Axis %i\n",ibm8514.current_cmd,
10371062//      ibm8514.curr_x,ibm8514.curr_y,ibm8514.line_axial_step,ibm8514.line_diagonal_step,ibm8514.line_errorterm,ibm8514.rect_width,ibm8514.rect_height);
10381063
1039   if(tri.accel_drawflags & 0x400)
1064   if(tri.accel_drawflags & 0x0400)
10401065   {
10411066      temp = dx; dx = dy; dy = temp;
10421067   }
r32231r32232
10571082      }
10581083   }
10591084}
1085
1086// feed data written to VRAM to an active BitBLT command
1087void trident_vga_device::accel_data_write(UINT32 data)
1088{
1089   for(int x=31;x>=0;x--)
1090   {
1091      if(((data >> x) & 0x01) != 0)
1092         WRITEPIXEL8(tri.accel_mem_x,tri.accel_mem_y,tri.accel_fgcolour);
1093      tri.accel_mem_x++;
1094   }
1095   if(tri.accel_mem_x > tri.accel_dest_x+tri.accel_dim_x)
1096   {
1097      tri.accel_mem_x = tri.accel_dest_x;
1098      tri.accel_mem_y++;
1099      if(tri.accel_mem_y > tri.accel_dest_y+tri.accel_dim_y)
1100         tri.accel_memwrite_active = false;  // completed
1101   }
1102}
trunk/src/emu/bus/isa/trident.h
r32231r32232
8787      UINT32 accel_bg_pattern_colour;
8888      UINT8 accel_pattern[0x80];
8989      bool accel_busy;
90      bool accel_memwrite_active;  // true when writing to VRAM will push data to an ongoing command (SRCMONO/PATMONO)
91      INT16 accel_mem_x;
92      INT16 accel_mem_y;
93      UINT32 accel_transfer;
9094   } tri;
9195private:
9296   UINT8 trident_seq_reg_read(UINT8 index);
r32231r32232
100104   void accel_command();
101105   void accel_bitblt();
102106   void accel_line();
107   void accel_data_write(UINT32 data);
103108};
104109
105110

Previous 199869 Revisions Next


© 1997-2024 The MAME Team