337
319
pix[NUM][3][0] = prom_a[0]; pix[NUM][3][1] = prom_b[0]; pix[NUM][3][2] = prom_c[0]; \
340
INLINE void tx1_draw_road_pixel(running_machine *machine, int screen, UINT8 *bmpaddr,
322
INLINE void tx1_draw_road_pixel(running_machine &machine, int screen, UINT8 *bmpaddr,
341
323
UINT8 apix[3], UINT8 bpix[3], UINT32 pixnuma, UINT32 pixnumb,
342
324
UINT8 stl, UINT8 sld, UINT8 selb,
343
325
UINT8 bnk, UINT8 rorev, UINT8 eb, UINT8 r, UINT8 delr)
327
tx1_state *state = machine.driver_data<tx1_state>();
328
vregs_t &tx1_vregs = state->m_vregs;
345
329
UINT8 a0 = BIT(apix[0], pixnuma);
346
330
UINT8 a1 = BIT(apix[1], pixnuma);
347
331
UINT8 a2 = BIT(apix[2], pixnuma);
868
855
*************************************/
870
static void tx1_draw_objects(running_machine *machine, UINT8 *bitmap)
857
static void tx1_draw_objects(running_machine &machine, UINT8 *bitmap)
859
tx1_state *state = machine.driver_data<tx1_state>();
860
UINT16 *tx1_objram = state->m_objram;
876
865
/* The many lookup table ROMs */
877
const UINT8 *const ic48 = machine->region("user3")->base();
866
const UINT8 *const ic48 = machine.region("user3")->base();
878
867
const UINT8 *const ic281 = ic48 + 0x2000;
880
const UINT8 *const proms = machine->region("proms")->base();
869
const UINT8 *const proms = machine.region("proms")->base();
881
870
const UINT8 *const ic190 = proms + 0xc00;
882
871
const UINT8 *const ic162 = proms + 0xe00;
883
872
const UINT8 *const ic25 = proms + 0x1000;
885
const UINT8 *const ic106 = machine->region("obj_map")->base();
874
const UINT8 *const ic106 = machine.region("obj_map")->base();
886
875
const UINT8 *const ic73 = ic106 + 0x4000;
888
const UINT8 *const pixdata_rgn = machine->region("obj_tiles")->base();
877
const UINT8 *const pixdata_rgn = machine.region("obj_tiles")->base();
890
for (offs = 0x0; offs <= tx1_objram_size; offs += 8)
879
for (offs = 0x0; offs <= 0x300; offs += 8)
1120
1109
VIDEO_START( tx1 )
1111
tx1_state *state = machine.driver_data<tx1_state>();
1122
1112
/* Allocate a large bitmap that covers the three screens */
1123
tx1_bitmap = auto_bitmap_alloc(machine, 768, 256, BITMAP_FORMAT_INDEXED16);
1113
state->m_bitmap = auto_bitmap_alloc(machine, 768, 256, BITMAP_FORMAT_INDEXED16);
1125
1115
/* Allocate some bitmaps */
1126
tx1_chr_bmp = auto_alloc_array(machine, UINT8, 256 * 3 * 240);
1127
tx1_obj_bmp = auto_alloc_array(machine, UINT8, 256 * 3 * 240);
1128
tx1_rod_bmp = auto_alloc_array(machine, UINT8, 256 * 3 * 240);
1116
state->m_chr_bmp = auto_alloc_array(machine, UINT8, 256 * 3 * 240);
1117
state->m_obj_bmp = auto_alloc_array(machine, UINT8, 256 * 3 * 240);
1118
state->m_rod_bmp = auto_alloc_array(machine, UINT8, 256 * 3 * 240);
1130
1120
/* Set a timer to run the interrupts */
1131
interrupt_timer = timer_alloc(machine, interrupt_callback, NULL);
1121
state->m_interrupt_timer = machine.scheduler().timer_alloc(FUNC(interrupt_callback));
1133
1123
/* /CUDISP CRTC interrupt */
1134
timer_adjust_oneshot(interrupt_timer, machine->primary_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS), 0);
1124
state->m_interrupt_timer->adjust(machine.primary_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS));
1129
tx1_state *state = machine.driver_data<tx1_state>();
1139
1130
/* /VSYNC: Update TZ113 */
1140
tx1_vregs.slin_val += tx1_vregs.slin_inc;
1131
state->m_vregs.slin_val += state->m_vregs.slin_inc;
1143
static void tx1_combine_layers(running_machine *machine, bitmap_t *bitmap, int screen)
1134
static void tx1_combine_layers(running_machine &machine, bitmap_t *bitmap, int screen)
1136
tx1_state *state = machine.driver_data<tx1_state>();
1146
UINT8 *chr_pal = machine->region("proms")->base() + 0x900;
1138
UINT8 *chr_pal = machine.region("proms")->base() + 0x900;
1148
1140
int x_offset = screen * 256;
1185
SCREEN_UPDATE( tx1 )
1195
device_t *left_screen = screen->machine->device("lscreen");
1196
device_t *centre_screen = screen->machine->device("cscreen");
1197
device_t *right_screen = screen->machine->device("rscreen");
1187
tx1_state *state = screen->machine().driver_data<tx1_state>();
1188
device_t *left_screen = screen->machine().device("lscreen");
1189
device_t *centre_screen = screen->machine().device("cscreen");
1190
device_t *right_screen = screen->machine().device("rscreen");
1199
1192
if (screen == left_screen)
1201
memset(tx1_obj_bmp, 0, 768*240);
1203
tx1_draw_char(screen->machine, tx1_chr_bmp);
1204
tx1_draw_road(screen->machine, tx1_rod_bmp);
1205
tx1_draw_objects(screen->machine, tx1_obj_bmp);
1207
tx1_combine_layers(screen->machine, bitmap, 0);
1194
memset(state->m_obj_bmp, 0, 768*240);
1196
tx1_draw_char(screen->machine(), state->m_chr_bmp);
1197
tx1_draw_road(screen->machine(), state->m_rod_bmp);
1198
tx1_draw_objects(screen->machine(), state->m_obj_bmp);
1200
tx1_combine_layers(screen->machine(), bitmap, 0);
1209
1202
else if (screen == centre_screen)
1211
tx1_combine_layers(screen->machine, bitmap, 1);
1204
tx1_combine_layers(screen->machine(), bitmap, 1);
1213
1206
else if (screen == right_screen)
1215
tx1_combine_layers(screen->machine, bitmap, 2);
1208
tx1_combine_layers(screen->machine(), bitmap, 2);
3042
2998
VIDEO_START( buggyboy )
3000
tx1_state *state = machine.driver_data<tx1_state>();
3044
3001
/* Allocate some bitmaps */
3045
bb_chr_bmp = auto_alloc_array(machine, UINT8, 3 * 256 * 240);
3046
bb_obj_bmp = auto_alloc_array(machine, UINT8, 3 * 256 * 240);
3047
bb_rod_bmp = auto_alloc_array(machine, UINT8, 3 * 256 * 240);
3002
state->m_chr_bmp = auto_alloc_array(machine, UINT8, 3 * 256 * 240);
3003
state->m_obj_bmp = auto_alloc_array(machine, UINT8, 3 * 256 * 240);
3004
state->m_rod_bmp = auto_alloc_array(machine, UINT8, 3 * 256 * 240);
3049
3006
/* Set a timer to run the interrupts */
3050
interrupt_timer = timer_alloc(machine, interrupt_callback, NULL);
3007
state->m_interrupt_timer = machine.scheduler().timer_alloc(FUNC(interrupt_callback));
3052
3009
/* /CUDISP CRTC interrupt */
3053
timer_adjust_oneshot(interrupt_timer, machine->primary_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS), 0);
3010
state->m_interrupt_timer->adjust(machine.primary_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS));
3056
3013
VIDEO_START( buggybjr )
3015
tx1_state *state = machine.driver_data<tx1_state>();
3058
3016
/* Allocate some bitmaps */
3059
bb_chr_bmp = auto_alloc_array(machine, UINT8, 256 * 240);
3060
bb_obj_bmp = auto_alloc_array(machine, UINT8, 256 * 240);
3061
bb_rod_bmp = auto_alloc_array(machine, UINT8, 256 * 240);
3017
state->m_chr_bmp = auto_alloc_array(machine, UINT8, 256 * 240);
3018
state->m_obj_bmp = auto_alloc_array(machine, UINT8, 256 * 240);
3019
state->m_rod_bmp = auto_alloc_array(machine, UINT8, 256 * 240);
3063
3021
/* Set a timer to run the interrupts */
3064
interrupt_timer = timer_alloc(machine, interrupt_callback, NULL);
3022
state->m_interrupt_timer = machine.scheduler().timer_alloc(FUNC(interrupt_callback));
3066
3024
/* /CUDISP CRTC interrupt */
3067
timer_adjust_oneshot(interrupt_timer, machine->primary_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS), 0);
3025
state->m_interrupt_timer->adjust(machine.primary_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS));
3070
VIDEO_EOF( buggyboy )
3028
SCREEN_EOF( buggyboy )
3030
tx1_state *state = machine.driver_data<tx1_state>();
3072
3032
/* /VSYNC: Update TZ113 @ 219 */
3073
vregs.slin += vregs.slin_inc;
3033
state->m_vregs.slin_val += state->m_vregs.slin_inc;
3075
3035
/* /VSYNC: Clear wave LFSR */
3076
vregs.wave_lfsr = 0;
3036
state->m_vregs.wave_lfsr = 0;
3080
VIDEO_UPDATE( buggyboy )
3040
SCREEN_UPDATE( buggyboy )
3082
device_t *left_screen = screen->machine->device("lscreen");
3083
device_t *center_screen = screen->machine->device("cscreen");
3084
device_t *right_screen = screen->machine->device("rscreen");
3042
tx1_state *state = screen->machine().driver_data<tx1_state>();
3043
device_t *left_screen = screen->machine().device("lscreen");
3044
device_t *center_screen = screen->machine().device("cscreen");
3045
device_t *right_screen = screen->machine().device("rscreen");
3086
3047
if (screen == left_screen)
3088
memset(bb_obj_bmp, 0, 768*240);
3089
memset(bb_rod_bmp, 0, 768*240);
3091
buggyboy_draw_char(screen->machine, bb_chr_bmp, 1);
3092
buggyboy_draw_road(screen->machine, bb_rod_bmp);
3093
buggyboy_draw_objs(screen->machine, bb_obj_bmp, 1);
3095
bb_combine_layers(screen->machine, bitmap, 0);
3049
memset(state->m_obj_bmp, 0, 768*240);
3050
memset(state->m_rod_bmp, 0, 768*240);
3052
buggyboy_draw_char(screen->machine(), state->m_chr_bmp, 1);
3053
buggyboy_draw_road(screen->machine(), state->m_rod_bmp);
3054
buggyboy_draw_objs(screen->machine(), state->m_obj_bmp, 1);
3056
bb_combine_layers(screen->machine(), bitmap, 0);
3097
3058
else if (screen == center_screen)
3099
bb_combine_layers(screen->machine, bitmap, 1);
3060
bb_combine_layers(screen->machine(), bitmap, 1);
3101
3062
else if (screen == right_screen)
3103
bb_combine_layers(screen->machine, bitmap, 2);
3064
bb_combine_layers(screen->machine(), bitmap, 2);
3110
VIDEO_UPDATE( buggybjr )
3071
SCREEN_UPDATE( buggybjr )
3112
memset(bb_obj_bmp, 0, 256*240);
3114
buggyboy_draw_char(screen->machine, bb_chr_bmp, 0);
3115
buggybjr_draw_road(screen->machine, bb_rod_bmp, 0);
3116
buggyboy_draw_objs(screen->machine, bb_obj_bmp, 0);
3118
bb_combine_layers(screen->machine, bitmap, -1);
3073
tx1_state *state = screen->machine().driver_data<tx1_state>();
3074
memset(state->m_obj_bmp, 0, 256*240);
3076
buggyboy_draw_char(screen->machine(), state->m_chr_bmp, 0);
3077
buggybjr_draw_road(screen->machine(), state->m_rod_bmp, 0);
3078
buggyboy_draw_objs(screen->machine(), state->m_obj_bmp, 0);
3080
bb_combine_layers(screen->machine(), bitmap, -1);