trunk/src/mess/drivers/smc777.c
| r20266 | r20267 | |
| 27 | 27 | #include "formats/basicdsk.h" |
| 28 | 28 | #include "imagedev/flopdrv.h" |
| 29 | 29 | |
| 30 | | #define SMC777_NUMPENS (0x10+8) //16 palette entries + 8 special colors |
| 31 | | |
| 32 | 30 | class smc777_state : public driver_device |
| 33 | 31 | { |
| 34 | 32 | public: |
| r20266 | r20267 | |
| 193 | 191 | |
| 194 | 192 | if(blink && machine().primary_screen->frame_number() & 0x10) //blinking, used by Dragon's Alphabet |
| 195 | 193 | color = bk_pen; |
| 196 | | else |
| 197 | | color+=m_pal_mode; |
| 198 | 194 | |
| 199 | 195 | for(yi=0;yi<8;yi++) |
| 200 | 196 | { |
| r20266 | r20267 | |
| 202 | 198 | { |
| 203 | 199 | int pen; |
| 204 | 200 | |
| 205 | | pen = ((m_pcg[tile*8+yi]>>(7-xi)) & 1) ? (color) : bk_pen; |
| 201 | pen = ((m_pcg[tile*8+yi]>>(7-xi)) & 1) ? (color+m_pal_mode) : bk_pen; |
| 206 | 202 | |
| 207 | 203 | if (pen != -1) |
| 208 | 204 | bitmap.pix16(y*8+CRTC_MIN_Y+yi, x*8+CRTC_MIN_X+xi) = machine().pens[pen]; |
| r20266 | r20267 | |
| 965 | 961 | m_gvram = auto_alloc_array(machine(), UINT8, 0x8000); |
| 966 | 962 | m_pcg = auto_alloc_array(machine(), UINT8, 0x800); |
| 967 | 963 | |
| 968 | | beep_set_frequency(machine().device(BEEPER_TAG),300); //guesswork |
| 969 | | beep_set_state(machine().device(BEEPER_TAG),0); |
| 970 | | |
| 971 | 964 | state_save_register_global_pointer(machine(), m_work_ram, 0x10000); |
| 972 | 965 | state_save_register_global_pointer(machine(), m_vram, 0x800); |
| 973 | 966 | state_save_register_global_pointer(machine(), m_attr, 0x800); |
| r20266 | r20267 | |
| 982 | 975 | m_raminh = 1; |
| 983 | 976 | m_raminh_pending_change = 1; |
| 984 | 977 | m_raminh_prefetch = 0xff; |
| 978 | m_pal_mode = 0x10; |
| 979 | |
| 980 | beep_set_frequency(machine().device(BEEPER_TAG),300); //TODO: correct frequency |
| 981 | beep_set_state(machine().device(BEEPER_TAG),0); |
| 985 | 982 | } |
| 986 | 983 | |
| 987 | 984 | |
| r20266 | r20267 | |
| 999 | 996 | NULL /* update address callback */ |
| 1000 | 997 | }; |
| 1001 | 998 | |
| 999 | /* set-up SMC-70 mode colors */ |
| 1002 | 1000 | void smc777_state::palette_init() |
| 1003 | 1001 | { |
| 1004 | 1002 | int i; |
| r20266 | r20267 | |
| 1012 | 1010 | b = (i & 1) >> 0; |
| 1013 | 1011 | |
| 1014 | 1012 | palette_set_color_rgb(machine(), i, pal1bit(r),pal1bit(g),pal1bit(b)); |
| 1013 | palette_set_color_rgb(machine(), i+8, pal1bit(0),pal1bit(0),pal1bit(0)); |
| 1015 | 1014 | } |
| 1016 | 1015 | } |
| 1017 | 1016 | |
| r20266 | r20267 | |
| 1087 | 1086 | MCFG_SCREEN_VISIBLE_AREA(0, 660-1, 0, 220-1) //normal 640 x 200 + 20 pixels for border color |
| 1088 | 1087 | MCFG_SCREEN_UPDATE_DRIVER(smc777_state, screen_update_smc777) |
| 1089 | 1088 | |
| 1090 | | MCFG_PALETTE_LENGTH(SMC777_NUMPENS) |
| 1089 | MCFG_PALETTE_LENGTH(0x20) // 16 + 8 colors (SMC-777 + SMC-70) + 8 empty entries (SMC-70) |
| 1091 | 1090 | |
| 1092 | 1091 | MCFG_MC6845_ADD("crtc", H46505, MASTER_CLOCK/2, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */ |
| 1093 | 1092 | |