trunk/src/mess/drivers/hp16500.c
| r242446 | r242447 | |
| 16 | 16 | IRQ 5 = 814a |
| 17 | 17 | IRQ 6 = 35c8 (jump 840120) |
| 18 | 18 | IRQ 7 = 35d4 (jump 840120) |
| 19 | | |
| 19 | |
| 20 | 20 | ****************************************************************************/ |
| 21 | 21 | |
| 22 | 22 | #include "emu.h" |
| r242446 | r242447 | |
| 44 | 44 | DECLARE_READ8_MEMBER (vram_r); |
| 45 | 45 | DECLARE_WRITE8_MEMBER (mask_w); |
| 46 | 46 | DECLARE_WRITE8_MEMBER (val_w); |
| 47 | DECLARE_READ32_MEMBER(vbl_state_r); |
| 48 | DECLARE_WRITE32_MEMBER(vbl_ack_w); |
| 47 | 49 | |
| 48 | 50 | INTERRUPT_GEN_MEMBER(vblank); |
| 49 | 51 | |
| r242446 | r242447 | |
| 51 | 53 | UINT32 m_palette[256], m_colors[3], m_count, m_clutoffs; |
| 52 | 54 | }; |
| 53 | 55 | |
| 56 | READ32_MEMBER(hp16500_state::vbl_state_r) |
| 57 | { |
| 58 | return 0x03000000; // bit 0 set means the interrupt handler advances the pSOS tick counter. |
| 59 | } |
| 60 | |
| 61 | WRITE32_MEMBER(hp16500_state::vbl_ack_w) |
| 62 | { |
| 63 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); |
| 64 | } |
| 65 | |
| 54 | 66 | static ADDRESS_MAP_START(hp16500_map, AS_PROGRAM, 32, hp16500_state) |
| 55 | 67 | AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("bios", 0) |
| 56 | 68 | AM_RANGE(0x0020f000, 0x0020f003) AM_WRITE(palette_w) |
| 57 | 69 | |
| 58 | | AM_RANGE(0x00200000, 0x0020efff) AM_RAM |
| 70 | AM_RANGE(0x00202800, 0x00202803) AM_WRITE(vbl_ack_w) |
| 71 | AM_RANGE(0x00203000, 0x00203003) AM_WRITE(vbl_ack_w) |
| 72 | AM_RANGE(0x00209800, 0x00209803) AM_READ(vbl_state_r) |
| 59 | 73 | |
| 74 | AM_RANGE(0x0020b800, 0x0020b8ff) AM_RAM // system ram test is really strange. |
| 75 | |
| 60 | 76 | AM_RANGE(0x00600000, 0x0061ffff) AM_WRITE16(vram_w, 0xffffffff) |
| 61 | 77 | AM_RANGE(0x00600000, 0x0067ffff) AM_READ8 (vram_r, 0x00ff00ff) |
| 62 | 78 | AM_RANGE(0x00700000, 0x00700003) AM_WRITE8 (mask_w, 0xff000000) |
| r242446 | r242447 | |
| 66 | 82 | |
| 67 | 83 | INTERRUPT_GEN_MEMBER(hp16500_state::vblank) |
| 68 | 84 | { |
| 69 | | m_maincpu->set_input_line(M68K_IRQ_1, HOLD_LINE); |
| 85 | m_maincpu->set_input_line(M68K_IRQ_1, ASSERT_LINE); |
| 70 | 86 | } |
| 71 | 87 | |
| 72 | 88 | void hp16500_state::video_start() |
| r242446 | r242447 | |
| 121 | 137 | } |
| 122 | 138 | else if (mem_mask == 0x00ff0000) |
| 123 | 139 | { |
| 124 | | UINT8 tmpcolor = (data>>16) & 0xff; |
| 140 | m_colors[m_count++] = (data>>14) & 0xfc; |
| 125 | 141 | |
| 126 | | if ((tmpcolor & 0xf0) == 0x00) |
| 127 | | { |
| 128 | | tmpcolor |= (tmpcolor << 4); |
| 129 | | } |
| 130 | | |
| 131 | | m_colors[m_count++] = tmpcolor; |
| 132 | | |
| 133 | 142 | if (m_count == 3) |
| 134 | 143 | { |
| 135 | 144 | m_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]); |