summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/orion.cpp
blob: a6d9148dd3c6dfafd4cbd7700daffc95caee427e (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

                                      











                                                                             
 
                                        


 
                                                                                                                    
 
                                                  
                   

                                                                                   
                                            
                                                                   
                                        
 
                                                    







                                                                    
                                                                



                                                
                                                                                   


                                                                                                            
                                                                             



                                                                                                   

                                                                      
                                                                                                            
                                                                             



                                                                                                   

                                                                      



                                                 
                                                                                                                                     

                                                
                                                                                                        
                                                                 

                                                                                                                                                                            
                                                                 

                                                                                                                                                                            
                                                                                           

                                                                                      










                                                                   

















                                      

  
                                          
 
                                                                                    
 
// license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic
/***************************************************************************

        Orion video driver by Miodrag Milanovic

        22/04/2008 Orion Pro added
        02/04/2008 Preliminary driver.

****************************************************************************/


#include "emu.h"
#include "includes/orion.h"

VIDEO_START_MEMBER(orion_state,orion128)
{
}

uint32_t orion_state::screen_update_orion128(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
	uint8_t code1,code2,code3,code4,color,val;
	int y, x,b;
	int orionproshift = (m_orion128_video_mode & 0x10) ? 1 : 0;
	int part1addr = (3-((m_orion128_video_page & 3) | orionproshift)) * 0x4000;
	int part2addr = part1addr + 0x10000;
	int video_mode = m_orion128_video_mode & m_video_mode_mask;
	uint8_t *ram = m_ram->pointer();

	for (x = 0; x < m_orion128_video_width; x++)
	{
		for (y = 0; y < 256; y++)
		{
			code1 = ram[part1addr + y + x*256];
			code2 = ram[part2addr + y + x*256];
			code3 = ram[part1addr + y + x*256 + 0x4000];
			code4 = ram[part2addr + y + x*256 + 0x4000];
			if ((video_mode==14) || (video_mode==15)) {
				code2 = m_orionpro_pseudo_color;
			}
			color = 0;
			for (b = 7; b >= 0; b--)
			{
				switch(m_orion128_video_mode & m_video_mode_mask) {
					case 0 : color = ((code1 >> b) & 0x01) ? 10 : 0; break;
					case 1 : color = ((code1 >> b) & 0x01) ? 17 : 16; break;
					case 4 : val = (((code1 >> b) & 0x01) << 1) + ((code2 >> b) & 0x01);
								switch(val) {
								case 0 : color = 0; break; // black
								case 1 : color = 4; break; // red
								case 2 : color = 2; break; // green
								case 3 : color = 1; break; // blue
								}
								break;
					case 5 : val = (((code1 >> b) & 0x01) << 1) + ((code2 >> b) & 0x01);
								switch(val) {
								case 0 : color = 7; break; // white
								case 1 : color = 4; break; // red
								case 2 : color = 2; break; // green
								case 3 : color = 1; break; // blue
								}
								break;
					case 6 :
					case 7 :
					case 14 :
					case 15 :
								color = ((code1 >> b) & 0x01) ? (code2 & 0x0f) : (code2 >> 4); break;

					default:
						switch(m_orion128_video_mode & m_video_mode_mask & 20) {
							case 16 :
										color = (((code1 >> b) & 0x01) << 2) + (((code3 >> b) & 0x01) << 1) + ((code2 >> b) & 0x01);
										break;
							case 20 :
										color = (((code1 >> b) & 0x01) << 2) + (((code3 >> b) & 0x01) << 1) + ((code2 >> b) & 0x01);
										if ((((code4 >> b) & 0x01)==1) && (color!=0)) {
										color += 8;
										}
										break;
						}
				}
				bitmap.pix16(y, x*8+(7-b)) = color;
			}
		}
	}

	return 0;
}

static const rgb_t orion128_palette[18] = {
	rgb_t(0x00, 0x00, 0x00), // 0
	rgb_t(0x00, 0x00, 0xc0), // 1
	rgb_t(0x00, 0xc0, 0x00), // 2
	rgb_t(0x00, 0xc0, 0xc0), // 3
	rgb_t(0xc0, 0x00, 0x00), // 4
	rgb_t(0xc0, 0x00, 0xc0), // 5
	rgb_t(0xc0, 0xc0, 0x00), // 6
	rgb_t(0xc0, 0xc0, 0xc0), // 7
	rgb_t(0x80, 0x80, 0x80), // 8
	rgb_t(0x00, 0x00, 0xff), // 9
	rgb_t(0x00, 0xff, 0x00), // A
	rgb_t(0x00, 0xff, 0xff), // B
	rgb_t(0xff, 0x00, 0x00), // C
	rgb_t(0xff, 0x00, 0xff), // D
	rgb_t(0xff, 0xff, 0x00), // E
	rgb_t(0xff, 0xff, 0xff), // F
	rgb_t(0xc8, 0xb4, 0x28), // 10
	rgb_t(0x32, 0xfa, 0xfa)  // 11
};

PALETTE_INIT_MEMBER(orion_state,orion128 )
{
	palette.set_pen_colors(0, orion128_palette, ARRAY_LENGTH(orion128_palette));
}