📄 centiped.c
字号:
/***************************************************************************
Main clock: XTAL = 12.096 MHz
6502 Clock: XTAL/8 = 1.512 MHz (0.756 when accessing playfield RAM)
Horizontal video frequency: HSYNC = XTAL/256/3 = 15.75 kHz
Video frequency: VSYNC = HSYNC/263 ?? = 59.88593 Hz (not sure, could be /262)
VBlank duration: 1/VSYNC * (23/263) = 1460 us
Centipede Memory map and Dip Switches
-------------------------------------
Memory map for Centipede directly from the Atari schematics (1981).
Address R/W D7 D6 D5 D4 D3 D2 D1 D0 Function
--------------------------------------------------------------------------------------
0000-03FF D D D D D D D D RAM
--------------------------------------------------------------------------------------
0400-07BF D D D D D D D D Playfield RAM
07C0-07CF D D D D D D D D Motion Object Picture
07D0-07DF D D D D D D D D Motion Object Vert.
07E0-07EF D D D D D D D D Motion Object Horiz.
07F0-07FF D D D D D D Motion Object Color
--------------------------------------------------------------------------------------
0800 R D D D D D D D D Option Switch 1 (0 = On)
0801 R D D D D D D D D Option Switch 2 (0 = On)
--------------------------------------------------------------------------------------
0C00 R D D D D D Horizontal Mini-Track Ball tm Inputs
R D VBLANK (1 = VBlank)
R D Self-Test (0 = On)
R D Cocktail Cabinet (1 = Cocktail)
0C01 R D D D R,C,L Coin Switches (0 = On)
R D SLAM (0 = On)
R D Player 2 Fire Switch (0 = On)
R D Player 1 Fire Switch (0 = On)
R D Player 2 Start Switch (0 = On)
R D Player 1 Start Switch (0 = On)
0C02 R D D D D D Vertical Mini-Track Ball tm Inputs
0C03 R D D D D Player 1 Joystick (R,L,Down,Up)
R D D D D Player 2 Joystick (0 = On)
--------------------------------------------------------------------------------------
1000-100F R/W D D D D D D D D Custom Audio Chip
1404 W D D D D Playfield Color RAM
140C W D D D D Motion Object Color RAM
--------------------------------------------------------------------------------------
1600 W D D D D D D D D EA ROM Address & Data Latch
1680 W D D D D EA ROM Control Latch
1700 R D D D D D D D D EA ROM Read Data
--------------------------------------------------------------------------------------
1800 W IRQ Acknowledge
--------------------------------------------------------------------------------------
1C00 W D Left Coin Counter (1 = On)
1C01 W D Center Coin Counter (1 = On)
1C02 W D Right Coin Counter (1 = On)
1C03 W D Player 1 Start LED (0 = On)
1C04 W D Player 2 Start LED (0 = On)
1C07 W D Track Ball Flip Control (0 = Player 1)
--------------------------------------------------------------------------------------
2000 W WATCHDOG
2400 W Clear Mini-Track Ball Counters
--------------------------------------------------------------------------------------
2000-3FFF R Program ROM
--------------------------------------------------------------------------------------
-EA ROM is an Erasable Reprogrammable rom to save the top 3 high scores
and other stuff.
Dip switches at N9 on the PCB
8 7 6 5 4 3 2 1 Option
-------------------------------------------------------------------------------------
On On English $
On Off German
Off On French
Off Off Spanish
-------------------------------------------------------------------------------------
On On 2 lives per game
On Off 3 lives per game $
Off On 4 lives per game
Off Off 5 lives per game
-------------------------------------------------------------------------------------
Bonus life granted at every:
On On 10,000 points
On Off 12.000 points $
Off On 15,000 points
Off Off 20,000 points
-------------------------------------------------------------------------------------
On Hard game difficulty
Off Easy game difficulty $
-------------------------------------------------------------------------------------
On 1-credit minimum $
Off 2-credit minimum
-------------------------------------------------------------------------------------
$ = Manufacturer's suggested settings
Dip switches at N8 on the PCB
8 7 6 5 4 3 2 1 Option
-------------------------------------------------------------------------------------
On On Free play
On Off 1 coin for 2 credits
Off On 1 coin for 1 credit $
Off Off 2 coins for 1 credit
-------------------------------------------------------------------------------------
On On Right coin mech X 1 $
On Off Right coin mech X 4
Off On Right coin mech X 5
Off Off Right coin mech X 6
-------------------------------------------------------------------------------------
On Left coin mech X 1 $
Off Left coin mech X 2
-------------------------------------------------------------------------------------
On On On No bonus coins $
On On Off For every 2 coins inserted, game logic
adds 1 more coin
On Off On For every 4 coins inserted, game logic
adds 1 more coin
On Off Off For every 4 coins inserted, game logic
adds 2 more coin
Off On On For every 5 coins inserted, game logic
adds 1 more coin
Off On Off For every 3 coins inserted, game logic
adds 1 more coin
-------------------------------------------------------------------------------------
$ = Manufacturer's suggested settings
Changes:
30 Apr 98 LBO
* Fixed test mode
* Changed high score to use earom routines
* Added support for alternate rom set
Known issues:
* The rev1 set doesn't seem to work with the trackball
* Are coins supposed to take over a second to register?
* Need to confirm CPU and Pokey clocks
***************************************************************************/
#include "driver.h"
#include "vidhrdw/generic.h"
#include "machine/atari_vg.h"
int centiped_IN0_r(int offset);
int centiped_IN2_r(int offset); /* JB 971220 */
void centiped_paletteram_w (int offset, int data);
void centiped_vh_flipscreen_w (int offset,int data);
void centiped_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
void centiped_init_machine(void); /* in vidhrdw */
int centiped_interrupt(void); /* in vidhrdw */
void centiped_led_w(int offset,int data)
{
osd_led_w(offset,~data >> 7);
}
static struct MemoryReadAddress readmem[] =
{
{ 0x0000, 0x03ff, MRA_RAM },
{ 0x0400, 0x07ff, MRA_RAM },
{ 0x0800, 0x0800, input_port_4_r }, /* DSW1 */
{ 0x0801, 0x0801, input_port_5_r }, /* DSW2 */
{ 0x0c00, 0x0c00, centiped_IN0_r }, /* IN0 */
{ 0x0c01, 0x0c01, input_port_1_r }, /* IN1 */
{ 0x0c02, 0x0c02, centiped_IN2_r }, /* IN2 */ /* JB 971220 */
{ 0x0c03, 0x0c03, input_port_3_r }, /* IN3 */
{ 0x1000, 0x100f, pokey1_r },
{ 0x1700, 0x173f, atari_vg_earom_r },
{ 0x2000, 0x3fff, MRA_ROM },
{ 0xf800, 0xffff, MRA_ROM }, /* for the reset / interrupt vectors */
{ -1 } /* end of table */
};
static struct MemoryWriteAddress writemem[] =
{
{ 0x0000, 0x03ff, MWA_RAM },
{ 0x0400, 0x07bf, videoram_w, &videoram, &videoram_size },
{ 0x07c0, 0x07ff, MWA_RAM, &spriteram },
{ 0x1000, 0x100f, pokey1_w },
{ 0x1400, 0x140f, centiped_paletteram_w, &paletteram },
{ 0x1600, 0x163f, atari_vg_earom_w },
{ 0x1680, 0x1680, atari_vg_earom_ctrl },
{ 0x1800, 0x1800, MWA_NOP }, /* IRQ acknowldege */
{ 0x1c00, 0x1c02, coin_counter_w },
{ 0x1c03, 0x1c04, centiped_led_w },
{ 0x1c07, 0x1c07, centiped_vh_flipscreen_w },
{ 0x2000, 0x2000, watchdog_reset_w },
{ 0x2000, 0x3fff, MWA_ROM },
{ -1 } /* end of table */
};
INPUT_PORTS_START( input_ports )
PORT_START /* IN0 */
/* The lower 4 bits and bit 7 are for trackball x input. */
/* They are handled by fake input port 6 and a custom routine. */
PORT_BIT ( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_DIPNAME (0x10, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING ( 0x00, "Upright" )
PORT_DIPSETTING ( 0x10, "Cocktail" )
PORT_BITX( 0x20, 0x20, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x20, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_BIT ( 0x40, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_BIT ( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START /* IN1 */
PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_START /* IN2 */
PORT_ANALOGX ( 0xff, 0x00, IPT_TRACKBALL_Y | IPF_CENTER | IPF_REVERSE, 10, 0, 0, 0, IP_KEY_NONE, IP_KEY_NONE, IP_JOY_NONE, IP_JOY_NONE, 4 )
/* The lower 4 bits are the input, and bit 7 is the direction. */
/* The state of bit 7 does not change if the trackball is not moved.*/
PORT_START /* IN3 */
PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -