r15695 Saturday 28th July, 2012 at 14:35:35 UTC by Miodrag Milanović
-pccga: ec1841 not only mirrors the chargen buffer, but also byte-swaps it [shattered]

-mc1502: preliminary floppy support. Still not functional [shattered]

-pc: fixes the sound in Arkanoid, which doesn't use the 8253 at all. [shattered]
[src/emu/video]pc_cga.c
[src/mess/drivers]pc.c
[src/mess/includes]pc.h
[src/mess/machine]pc.c

src/emu/video/pc_cga.c
r15694r15695
11371137static WRITE8_HANDLER ( char_ram_w )
11381138{
11391139   UINT8 *gfx = space->machine().root_device().memregion("gfx1")->base();
1140   offset ^= BIT(offset, 12);
11401141   logerror("write char ram %04x %02x\n",offset,data);
11411142   gfx[offset + 0x0000] = data;
11421143   gfx[offset + 0x0800] = data;
r15694r15695
11471148static READ8_HANDLER ( char_ram_r )
11481149{
11491150   UINT8 *gfx = space->machine().root_device().memregion("gfx1")->base();
1151   offset ^= BIT(offset, 12);
11501152   return gfx[offset];
11511153}
11521154
r15694r15695
12261228               fatalerror("CGA: Bus width %d not supported", buswidth);
12271229               break;
12281230         }
1229         space_prg->install_legacy_readwrite_handler(0xb8000, 0xb87ff, FUNC(char_ram_r),FUNC(char_ram_w), mask );
1230         space_prg->install_legacy_readwrite_handler(0xb9000, 0xb97ff, FUNC(char_ram_r),FUNC(char_ram_w), mask );
1231         space_prg->install_legacy_readwrite_handler(0xb8000, 0xb9fff, FUNC(char_ram_r),FUNC(char_ram_w), mask );
12311232      } else {
12321233         if (cga.videoram_size== 0x4000) {
12331234            space_prg->install_readwrite_bank(0xb8000, 0xbbfff, 0, 0x04000, "bank11" );
src/mess/machine/pc.c
r15694r15695
12471247
12481248   // SIDE ONE
12491249   wd17xx_set_side(device, BIT(data, 1));
1250
1251   // bits 2, 3 -- motor on (drive 0, 1)
1252
1253   // DRIVE SEL
1254   wd17xx_set_drive(device, BIT(data, 4));
12501255}
12511256
1257/*
1258 * Accesses to this port block (halt the CPU until DRQ, INTRQ or MOTOR ON)
1259 */
12521260READ8_DEVICE_HANDLER( mc1502_wd17xx_drq_r )
12531261{
12541262   UINT8 data;
1263   UINT64 newpc;
12551264
12561265   data = wd17xx_drq_r(device);
1266   if (!data && !wd17xx_intrq_r(device)) {
1267      /* fake cpu halt by resetting PC one insn back */
1268      newpc = cpu_get_reg( device->machine().firstcpu, STATE_GENPC );
1269      cpu_set_reg( device->machine().firstcpu, STATE_GENPC, newpc - 1 );
1270   }
12571271
12581272   return data;
12591273}
12601274
1275READ8_DEVICE_HANDLER( mc1502_wd17xx_motor_r )
1276{
1277   UINT8 data;
1278
1279   /* fake motor being always on */
1280   data = 1;
1281
1282   return data;
1283}
1284
1285
12611286/**********************************************************
12621287 *
12631288 * Initialization code
r15694r15695
14281453   st->m_u73_q2 = 0;
14291454   st->m_out1 = 0;
14301455   st->m_pc_spkrdata = 0;
1431   st->m_pc_input = 0;
1456   st->m_pc_input = 1;
14321457   st->m_dma_channel = 0;
14331458   memset(st->m_dma_offset,0,sizeof(st->m_dma_offset));
14341459   st->m_ppi_portc_switch_high = 0;
r15694r15695
14901515   st->m_u73_q2 = 0;
14911516   st->m_out1 = 0;
14921517   st->m_pc_spkrdata = 0;
1493   st->m_pc_input = 0;
1518   st->m_pc_input = 1;
14941519   st->m_dma_channel = 0;
14951520   memset(st->m_memboard,0xc,sizeof(st->m_memboard));   // check
14961521   memset(st->m_dma_offset,0,sizeof(st->m_dma_offset));
src/mess/includes/pc.h
r15694r15695
9696
9797READ8_DEVICE_HANDLER( mc1502_wd17xx_drq_r );
9898READ8_DEVICE_HANDLER( mc1502_wd17xx_aux_r );
99READ8_DEVICE_HANDLER( mc1502_wd17xx_motor_r );
99100WRITE8_DEVICE_HANDLER( mc1502_wd17xx_aux_w );
100101
101102DRIVER_INIT( ibm5150 );
src/mess/drivers/pc.c
r15694r15695
158158   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
159159   AM_RANGE(0x0068, 0x006B) AM_DEVREADWRITE("ppi8255n2", i8255_device, read, write)   // keyboard poll
160160   AM_RANGE(0x0100, 0x0100) AM_DEVREADWRITE_LEGACY("vg93", mc1502_wd17xx_aux_r, mc1502_wd17xx_aux_w)
161   AM_RANGE(0x0108, 0x0108) AM_DEVREAD_LEGACY("vg93", mc1502_wd17xx_drq_r)
161   AM_RANGE(0x0108, 0x0108) AM_DEVREAD_LEGACY("vg93", mc1502_wd17xx_drq_r)         // blocking read!
162   AM_RANGE(0x010a, 0x010a) AM_DEVREAD_LEGACY("vg93", mc1502_wd17xx_motor_r)
162163   AM_RANGE(0x010c, 0x010c) AM_DEVREADWRITE_LEGACY("vg93", wd17xx_status_r, wd17xx_command_w)
163164   AM_RANGE(0x010d, 0x010d) AM_DEVREADWRITE_LEGACY("vg93", wd17xx_track_r, wd17xx_track_w)
164165   AM_RANGE(0x010e, 0x010e) AM_DEVREADWRITE_LEGACY("vg93", wd17xx_sector_r, wd17xx_sector_w)

Previous 5015994 RevisionsNext 50


© 1998-2012 The MESS Team