/*************************************************************************** SAPI-1 driver by Miodrag Milanovic 09/09/2008 Preliminary driver. ****************************************************************************/ #include "includes/sapi1.h" static const UINT8 MHB2501[] = { 0x0c,0x11,0x13,0x15,0x17,0x10,0x0e,0x00, // @ 0x04,0x0a,0x11,0x11,0x1f,0x11,0x11,0x00, // A 0x1e,0x11,0x11,0x1e,0x11,0x11,0x1e,0x00, // B 0x0e,0x11,0x10,0x10,0x10,0x11,0x0e,0x00, // C 0x1e,0x09,0x09,0x09,0x09,0x09,0x1e,0x00, // D 0x1f,0x10,0x10,0x1e,0x10,0x10,0x1f,0x00, // E 0x1f,0x10,0x10,0x1e,0x10,0x10,0x10,0x00, // F 0x0e,0x11,0x10,0x10,0x13,0x11,0x0f,0x00, // G 0x11,0x11,0x11,0x1f,0x11,0x11,0x11,0x00, // H 0x0e,0x04,0x04,0x04,0x04,0x04,0x0e,0x00, // I 0x01,0x01,0x01,0x01,0x11,0x11,0x0e,0x00, // J 0x11,0x12,0x14,0x18,0x14,0x12,0x11,0x00, // K 0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x00, // L 0x11,0x1b,0x15,0x15,0x11,0x11,0x11,0x00, // M 0x11,0x11,0x19,0x15,0x13,0x11,0x11,0x00, // N 0x0e,0x11,0x11,0x11,0x11,0x11,0x0e,0x00, // O 0x1e,0x11,0x11,0x1e,0x10,0x10,0x10,0x00, // P 0x0e,0x11,0x11,0x11,0x15,0x12,0x0d,0x00, // Q 0x1e,0x11,0x11,0x1e,0x14,0x12,0x11,0x00, // R 0x0e,0x11,0x10,0x0e,0x01,0x11,0x0e,0x00, // S 0x1f,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // T 0x11,0x11,0x11,0x11,0x11,0x11,0x0e,0x00, // U 0x11,0x11,0x11,0x0a,0x0a,0x04,0x04,0x00, // V 0x11,0x11,0x11,0x15,0x15,0x15,0x0a,0x00, // W 0x11,0x11,0x0a,0x04,0x0a,0x11,0x11,0x00, // X 0x11,0x11,0x0a,0x04,0x04,0x04,0x04,0x00, // Y 0x1f,0x01,0x02,0x04,0x08,0x10,0x1f,0x00, // Z 0x1c,0x10,0x10,0x10,0x10,0x10,0x1c,0x00, // [ 0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00, // backslash 0x07,0x01,0x01,0x01,0x01,0x01,0x07,0x00, // ] 0x0e,0x11,0x00,0x00,0x00,0x00,0x00,0x00, // ^ 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00, // _ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x00, // ! 0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00, // " 0x0a,0x0a,0x1f,0x0a,0x1f,0x0a,0x0a,0x00, // # 0x00,0x11,0x0e,0x0a,0x0e,0x11,0x00,0x00, // 0x18,0x19,0x02,0x04,0x08,0x13,0x03,0x00, // % 0x04,0x0a,0x0a,0x0c,0x15,0x12,0x0d,0x00, // & 0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00, // ' 0x02,0x04,0x08,0x08,0x08,0x04,0x02,0x00, // ( 0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00, // ) 0x00,0x04,0x15,0x0e,0x15,0x04,0x00,0x00, // * 0x00,0x04,0x04,0x1f,0x04,0x04,0x00,0x00, // + 0x00,0x00,0x00,0x00,0x08,0x08,0x10,0x00, // , 0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00, // - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00, // . 0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00, // / 0x0e,0x11,0x13,0x15,0x19,0x11,0x0e,0x00, // 0 0x04,0x0c,0x04,0x04,0x04,0x04,0x0e,0x00, // 1 0x0e,0x11,0x01,0x06,0x08,0x10,0x1f,0x00, // 2 0x1f,0x01,0x02,0x06,0x01,0x11,0x0e,0x00, // 3 0x02,0x06,0x0a,0x12,0x1f,0x02,0x02,0x00, // 4 0x1f,0x10,0x1e,0x01,0x01,0x11,0x0e,0x00, // 5 0x07,0x08,0x10,0x1e,0x11,0x11,0x0e,0x00, // 6 0x1f,0x01,0x02,0x04,0x08,0x08,0x08,0x00, // 7 0x0e,0x11,0x11,0x0e,0x11,0x11,0x0e,0x00, // 8 0x0e,0x11,0x11,0x0f,0x01,0x02,0x1c,0x00, // 9 0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00, // : 0x00,0x00,0x04,0x00,0x04,0x04,0x08,0x00, // ; 0x02,0x04,0x08,0x10,0x08,0x04,0x02,0x00, // < 0x00,0x00,0x1f,0x00,0x1f,0x00,0x00,0x00, // = 0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00, // > 0x0e,0x11,0x01,0x02,0x04,0x00,0x04,0x00 // ? }; VIDEO_START_MEMBER(sapi1_state,sapi1) { m_refresh_counter = 0; } UINT32 sapi1_state::screen_update_sapi1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int x,y,j,b; UINT16 addr; int xpos; for(y = 0; y < 24; y++ ) { addr = y*64; xpos = 0; for(x = 0; x < 40; x++ ) { UINT8 code = m_sapi_video_ram[addr + x]; UINT8 attr = (code >> 6) & 3; code &= 0x3f; for(j = 0; j < 9; j++ ) { for(b = 0; b < 6; b++ ) { UINT8 val; if (j==8) { if (attr==2) { val = (m_refresh_counter & 0x20) ? 1 : 0; } else { val = 0; } } else { val = (MHB2501[code*8 + j] >> (5-b)) & 1; if (attr==1) { val = (m_refresh_counter & 0x20) ? val : 0; } } if(attr==3) { bitmap.pix16(y*9+j, xpos+2*b ) = val; bitmap.pix16(y*9+j, xpos+2*b+1 ) = val; } else { bitmap.pix16(y*9+j, xpos+b ) = val; } } } xpos+= (attr==3) ? 12 : 6; if (xpos>=6*40) break; } } m_refresh_counter++; return 0; } VIDEO_START_MEMBER(sapi1_state,sapizps3) { } UINT32 sapi1_state::screen_update_sapizps3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { return 0; }