Previous 199869 Revisions Next

r20394 Monday 21st January, 2013 at 20:59:52 UTC by Wilbert Pol
(MESS) g7400: work in progress (nw)
[src/emu/video]ef9340_1.c
[src/mess/drivers]odyssey2.c

trunk/src/emu/video/ef9340_1.c
r20393r20394
139139         switch( m_ef9341.TB & 0xE0 )
140140         {
141141         case 0x00:  /* Begin row */
142logerror("begin row\n");
142143            m_ef9340.X = 0;
143144            m_ef9340.Y = m_ef9341.TA & 0x1F;
144145            break;
145146         case 0x20:  /* Load Y */
147logerror("load y\n");
146148            m_ef9340.Y = m_ef9341.TA & 0x1F;
147149            break;
148150         case 0x40:  /* Load X */
151logerror("load x\n");
149152            m_ef9340.X = m_ef9341.TA & 0x3F;
150153            break;
151154         case 0x60:  /* INC C */
155logerror("inc c\n");
152156            ef9340_inc_c();
153157            break;
154158         case 0x80:  /* Load M */
159logerror("load m\n");
155160            m_ef9340.M = m_ef9341.TA;
156161            break;
157162         case 0xA0:  /* Load R */
163logerror("load r\n");
158164            m_ef9340.R = m_ef9341.TA;
159165            break;
160166         case 0xC0:  /* Load Y0 */
167logerror("load y0\n");
161168            m_ef9340.Y0 = m_ef9341.TA & 0x3F;
162169            break;
163170         }
r20393r20394
205212                  UINT8 b = m_ef934x_ram_b[addr];
206213                  UINT8 slice = ( m_ef9340.M & 0x0f ) % 10;
207214
215logerror("write slice addr=%04x, b=%02x\n", addr, b);
208216                  if ( b >= 0xa0 )
209217                  {
210                     m_ef934x_ext_char_ram[ external_chargen_address( b, slice ) ] = m_ef9341.TA;
218logerror("write slice external ram %04x\n", external_chargen_address(b,slice));
219                     m_ef934x_ext_char_ram[ external_chargen_address( b, slice ) ] = BITSWAP8(m_ef9341.TA,0,1,2,3,4,5,6,7);
211220                  }
212221
213222                  // Increment slice number
r20393r20394
216225               break;
217226
218227            case 0xA0:  /* Read slice */
228            default:
219229               fatalerror/*logerror*/("ef9341 unimplemented data action %02X\n", m_ef9340.M & 0xE0 );
220230               break;
221231         }
r20393r20394
238248   {
239249      if ( b )
240250      {
241         data = 0xFF;
251         data = 0;
242252      }
243253      else
244254      {
r20393r20394
308318         if ( a & 0x80 )
309319         {
310320            // Graphics
321            if ( b & 0x80 )
322            {
323               if ( b & 0x60 )
324               {
325                  // Extension
326                  char_data = m_ef934x_ext_char_ram[ external_chargen_address( b & 0x7f, slice ) ];
327                  fg = bgr2rgb[ a & 0x07 ];
328                  bg = bgr2rgb[ ( a >> 4 ) & 0x07 ];
329               }
330            }
331            else
332            {
333               // Normal
334               char_data = ef9341_char_set[1][b & 0x7f][slice];
335               fg = bgr2rgb[ a & 0x07 ];
336               bg = bgr2rgb[ ( a >> 4 ) & 0x07 ];
337            }
311338         }
312339         else
313340         {
314341            // Alphannumeric
315342            if ( b & 0x80 )
316343            {
317               // Special (DEL or Extension)
344               if ( b & 0x60 )
345               {
346                  // Extension
347                  char_data = m_ef934x_ext_char_ram[ external_chargen_address( b & 0x7f, slice ) ];
348                  fg = bgr2rgb[ a & 0x07 ];
349               }
350               else
351               {
352                  // DEL
353               }
318354            }
319355            else
320356            {
trunk/src/mess/drivers/odyssey2.c
r20393r20394
7575   static const UINT8 P1_KEYBOARD_SCAN_ENABLE = 0x04; /* active low */
7676   static const UINT8 P1_VDC_ENABLE           = 0x08; /* active low */
7777   static const UINT8 P1_EXT_RAM_ENABLE       = 0x10; /* active low */
78   static const UINT8 P1_VPP_ENABLE           = 0x20; /* active low */
7879   static const UINT8 P1_VDC_COPY_MODE_ENABLE = 0x40;
7980   static const UINT8 P2_KEYBOARD_SELECT_MASK = 0x07; /* select row to scan */
8081
r20393r20394
216217   0x50,0xAE,0xFF,   /* Blue */      // I r g B
217218   0x00,0xFF,0x00,   /* Dk Green */   // I r G b
218219   0x82,0xfb,0xdb,   /* Lt Grey */      // I r G B
219   0xEC,0x02,0x60,   /* Red */         // I R g b
220   0xff,0x80,0x80,   /* Red */         // I R g b
220221   0xa9,0x80,0xff,   /* Violet */      // I R g B
221222   0xff,0x9b,0x60,   /* Orange */      // I R G b
222223   0xFF,0xFF,0xFF,                  // I R G B
r20393r20394
348349{
349350   if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0)
350351   {
351      return m_i8244->read(space, offset); /* seems to have higher priority than ram??? */
352      return m_i8244->read(space, offset);
352353   }
353354   if (!(m_p1 & P1_EXT_RAM_ENABLE))
354355   {
r20393r20394
388389{
389390   if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0)
390391   {
391      return m_i8244->read(space, offset); /* seems to have higher priority than ram??? */
392      return m_i8244->read(space, offset);
392393   }
393394   else if (!(m_p1 & P1_EXT_RAM_ENABLE))
394395   {
395396      return m_ram[offset];
396397   }
397   else
398   else if (!(m_p1 & P1_VPP_ENABLE))
398399   {
399400      return m_ef9340_1->ef9341_read( offset & 0x02, offset & 0x01 );
400401   }
r20393r20394
413414   {
414415      m_i8244->write(space, offset, data);
415416   }
416   else
417   else if (!(m_p1 & P1_VPP_ENABLE))
417418   {
418419      m_ef9340_1->ef9341_write( offset & 0x02, offset & 0x01, data );
419420   }
r20393r20394
425426   int vpos = data;
426427   bitmap_ind16 *bitmap = m_i8244->get_bitmap();
427428
429   if ( vpos < i8244_device::START_Y || vpos >= i8244_device::START_Y + i8244_device::SCREEN_HEIGHT )
430   {
431      return;
432   }
433
428434   // apply external LUM setting
429435   for ( int x = i8244_device::START_ACTIVE_SCAN; x < i8244_device::END_ACTIVE_SCAN; x++ )
430436   {
r20393r20394
440446   bitmap_ind16 *bitmap = m_i8244->get_bitmap();
441447   bitmap_ind16 *ef934x_bitmap = m_ef9340_1->get_bitmap();
442448
449   if ( vpos < i8244_device::START_Y || vpos >= i8244_device::START_Y + i8244_device::SCREEN_HEIGHT )
450   {
451      return;
452   }
453
443454   // apply external LUM setting
444455   int x_real_start = i8244_device::START_ACTIVE_SCAN + i8244_device::BORDER_SIZE;
445456   int x_real_end = i8244_device::END_ACTIVE_SCAN - i8244_device::BORDER_SIZE;
r20393r20394
447458   {
448459      UINT16 d = bitmap->pix16( vpos, x );
449460
450      if ( ( ! m_g7400_ic678_decode[ d & 0x07 ] ) && x >= x_real_start && x < x_real_end )
461      if ( ( ! m_g7400_ic678_decode[ d & 0x07 ] ) && x >= x_real_start && x < x_real_end && y < 240 )
451462      {
452463         // Use EF934x input
453464         d = ef934x_bitmap->pix16( y, x - x_real_start ) & 0x07;
r20393r20394
487498{
488499   UINT8 data = m_p1;
489500
490   logerror("%.9f p1 read %.2x\n", machine().time().as_double(), data);
491501   return data;
492502}
493503
r20393r20394
498508   m_lum = ( data & 0x80 ) >> 4;
499509
500510   switch_banks();
501
502   logerror("%.6f p1 written %.2x\n", machine().time().as_double(), data);
503511}
504512
505513
r20393r20394
537545      m_p2 = m_p2 | 0xF0;
538546   }
539547
540   logerror("%.6f p2 read %.2x\n", machine().time().as_double(), m_p2);
541548   return m_p2;
542549}
543550
r20393r20394
550557   {
551558      m_i8243->i8243_p2_w( space, 0, m_p2 & 0x0f );
552559   }
553
554   logerror("%.6f p2 written %.2x\n", machine().time().as_double(), data);
555560}
556561
557562
r20393r20394
569574      data &= ioport("JOY1")->read();       /* read joystick 2 */
570575   }
571576
572   logerror("%.6f bus read %.2x\n", machine().time().as_double(), data);
573577   return data;
574578}
575579
r20393r20394
589593   switch ( offset & 3 )
590594   {
591595      case 0: // "port 4"
596logerror("setting ef-port4 to %02x\n", data);
592597         m_g7400_ic674_decode[4] = BIT(data,0);
593598         m_g7400_ic674_decode[5] = BIT(data,1);
594599         m_g7400_ic674_decode[6] = BIT(data,2);
r20393r20394
596601         break;
597602
598603      case 1: // "port 5"
604logerror("setting ef-port5 to %02x\n", data);
599605         m_g7400_ic674_decode[0] = BIT(data,0);
600606         m_g7400_ic674_decode[1] = BIT(data,1);
601607         m_g7400_ic674_decode[2] = BIT(data,2);
r20393r20394
603609         break;
604610
605611      case 2: // "port 6"
612logerror("setting vdc-port6 to %02x\n", data);
606613         m_g7400_ic678_decode[4] = BIT(data,0);
607614         m_g7400_ic678_decode[5] = BIT(data,1);
608615         m_g7400_ic678_decode[6] = BIT(data,2);
r20393r20394
610617         break;
611618
612619      case 3: // "port 7"
620logerror("setting vdc-port7 to %02x\n", data);
613621         m_g7400_ic678_decode[0] = BIT(data,0);
614622         m_g7400_ic678_decode[1] = BIT(data,1);
615623         m_g7400_ic678_decode[2] = BIT(data,2);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team