if (atarigen_cpu_to_sound_ready) temp ^= 0x0040; if (atarigen_get_hblank()) temp ^= 0x0010; return temp; } /************************************* * * Main CPU memory handlers * *************************************/ /* full map verified from schematics */ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) ) AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0x7c0000) AM_ROM AM_RANGE(0xff8000, 0xff8001) AM_MIRROR(0x7f81fe) AM_WRITE(watchdog_reset16_w) AM_RANGE(0xff8200, 0xff8201) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_scanline_int_ack_w) AM_RANGE(0xff8400, 0xff8401) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_video_int_ack_w) AM_RANGE(0xff8600, 0xff8601) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_eeprom_enable_w) AM_RANGE(0xff8800, 0xff89ff) AM_MIRROR(0x7f8000) AM_WRITE(MWA16_RAM) AM_BASE(&blstroid_priorityram) AM_RANGE(0xff8a00, 0xff8a01) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_sound_w) AM_RANGE(0xff8c00, 0xff8c01) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_sound_reset_w) AM_RANGE(0xff8e00, 0xff8e01) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_halt_until_hblank_0_w) AM_RANGE(0xff9400, 0xff9401) AM_MIRROR(0x7f83fe) AM_READ(atarigen_sound_r) AM_RANGE(0xff9800, 0xff9801) AM_MIRROR(0x7f83f8) AM_READ(input_port_0_word_r) AM_RANGE(0xff9804, 0xff9805) AM_MIRROR(0x7f83f8) AM_READ(input_port_1_word_r) AM_RANGE(0xff9c00, 0xff9c03) AM_MIRROR(0x7f83fc) AM_READ(inputs_r) AM_RANGE(0xffa000, 0xffa3ff) AM_MIRROR(0x7f8c00) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) AM_RANGE(0xffb000, 0xffb3ff) AM_MIRROR(0x7f8c00) AM_READWRITE(atarigen_eeprom_r, atarigen_eeprom_w) AM_BASE(&atarigen_eeprom) AM_SIZE(&atarigen_eeprom_size)
#include "sound/dac.h" #include "sound/ay8910.h" static ADDRESS_MAP_START( svi318_readmem, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE( 0x0000, 0x7fff) AM_READ( MRA8_BANK1 ) AM_RANGE( 0x8000, 0xbfff) AM_READ( MRA8_BANK2 ) AM_RANGE( 0xc000, 0xffff) AM_READ( MRA8_BANK3 ) ADDRESS_MAP_END static ADDRESS_MAP_START( svi318_writemem, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE( 0x0000, 0x7fff) AM_WRITE( svi318_writemem0 ) AM_RANGE( 0x8000, 0xffff) AM_WRITE( svi318_writemem1 ) ADDRESS_MAP_END static ADDRESS_MAP_START( svi318_readport, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_FLAGS( AMEF_UNMAP(0xff) ) ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) AM_RANGE( 0x12, 0x12) AM_READ( svi318_printer_r ) AM_RANGE( 0x30, 0x30) AM_READ( wd179x_status_r ) AM_RANGE( 0x31, 0x31) AM_READ( wd179x_track_r ) AM_RANGE( 0x32, 0x32) AM_READ( wd179x_sector_r ) AM_RANGE( 0x33, 0x33) AM_READ( wd179x_data_r ) AM_RANGE( 0x34, 0x34) AM_READ( svi318_fdc_irqdrq_r ) AM_RANGE( 0x84, 0x84) AM_READ( TMS9928A_vram_r ) AM_RANGE( 0x85, 0x85) AM_READ( TMS9928A_register_r ) AM_RANGE( 0x90, 0x90) AM_READ( AY8910_read_port_0_r ) AM_RANGE( 0x98, 0x9a) AM_READ( svi318_ppi_r ) ADDRESS_MAP_END static ADDRESS_MAP_START( svi318_writeport, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
// Common memory map static ADDRESS_MAP_START( coinmstr_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xdfff) AM_RAM // supnudg2 writes here... AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_WRITE(quizmstr_bg_w) AM_BASE(&videoram) AM_RANGE(0xe800, 0xefff) AM_RAM AM_WRITE(quizmstr_attr1_w) AM_BASE(&attr_ram1) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_WRITE(quizmstr_attr2_w) AM_BASE(&attr_ram2) AM_RANGE(0xf800, 0xffff) AM_RAM // supnudg2 writes here... ADDRESS_MAP_END // Different I/O mappping for every game static ADDRESS_MAP_START( quizmstr_io_map, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_FLAGS( AMEF_ABITS(8) | AMEF_UNMAP(1) ) AM_RANGE(0x00, 0x00) AM_READ(question_r) AM_RANGE(0x00, 0x03) AM_WRITE(question_w) AM_RANGE(0x40, 0x40) AM_WRITE(AY8910_control_port_0_w) AM_RANGE(0x41, 0x41) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w) AM_RANGE(0x48, 0x4b) AM_READWRITE(pia_0_r, pia_0_w) AM_RANGE(0x50, 0x53) AM_READNOP AM_RANGE(0x50, 0x53) AM_WRITENOP AM_RANGE(0x58, 0x5b) AM_READWRITE(pia_2_r, pia_2_w) AM_RANGE(0x70, 0x70) AM_WRITE(crtc6845_address_w) AM_RANGE(0x71, 0x71) AM_WRITE(crtc6845_register_w) AM_RANGE(0xc0, 0xc3) AM_READNOP AM_RANGE(0xc0, 0xc3) AM_WRITENOP ADDRESS_MAP_END static ADDRESS_MAP_START( trailblz_io_map, ADDRESS_SPACE_IO, 8 )
static ADDRESS_MAP_START( intvkbd_mem , ADDRESS_SPACE_PROGRAM, 16) AM_RANGE(0x0000, 0x003f) AM_READWRITE( stic_r, stic_w ) AM_RANGE(0x0100, 0x01ef) AM_READWRITE( intv_ram8_r, intv_ram8_w ) AM_RANGE(0x01f0, 0x01ff) AM_READWRITE( AY8914_directread_port_0_lsb_r, AY8914_directwrite_port_0_lsb_w ) AM_RANGE(0x0200, 0x035f) AM_READWRITE( intv_ram16_r, intv_ram16_w ) AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION(REGION_CPU1, 0x1000<<1) /* Exec ROM, 10-bits wide */ AM_RANGE(0x3000, 0x37ff) AM_ROM AM_REGION(REGION_CPU1, 0x3000<<1) /* GROM, 8-bits wide */ AM_RANGE(0x3800, 0x39ff) AM_READWRITE( intv_gram_r, intv_gram_w ) /* GRAM, 8-bits wide */ AM_RANGE(0x4800, 0x6fff) AM_ROM /* Cartridges? */ AM_RANGE(0x7000, 0x7fff) AM_ROM AM_REGION(REGION_CPU1, 0x7000<<1) /* Keyboard ROM */ AM_RANGE(0x8000, 0xbfff) AM_READWRITE( MRA16_RAM, intvkbd_dualport16_w ) AM_BASE(&intvkbd_dualport_ram) /* Dual-port RAM */ ADDRESS_MAP_END static ADDRESS_MAP_START( intv2_mem , ADDRESS_SPACE_PROGRAM, 8) ADDRESS_MAP_FLAGS( AMEF_UNMAP(0xff) ) /* Required because of probing */ AM_RANGE( 0x0000, 0x3fff) AM_READWRITE( intvkbd_dualport8_lsb_r, intvkbd_dualport8_lsb_w ) /* Dual-port RAM */ AM_RANGE( 0x4000, 0x7fff) AM_READWRITE( intvkbd_dualport8_msb_r, intvkbd_dualport8_msb_w ) /* Dual-port RAM */ AM_RANGE( 0xb7f8, 0xb7ff) AM_RAM /* ??? */ AM_RANGE( 0xb800, 0xbfff) AM_READWRITE( videoram_r, videoram_w ) /* Text Display */ AM_RANGE( 0xc000, 0xffff) AM_ROM ADDRESS_MAP_END static INTERRUPT_GEN( intv_interrupt2 ) { cpunum_set_input_line(1, 0, PULSE_LINE); } static MACHINE_DRIVER_START( intv ) /* basic machine hardware */ MDRV_CPU_ADD_TAG("main", CP1610, 3579545/4) /* Colorburst/4 */
if (atarigen_sound_to_cpu_ready) result ^= 0x0004; if (atarigen_cpu_to_sound_ready) result ^= 0x0008; result ^= 0x0010; return result; } /************************************* * * Main CPU memory handlers * *************************************/ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) | AMEF_ABITS(22) ) AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_RANGE(0x0e0000, 0x0e0fff) AM_READWRITE(atarigen_eeprom_r, atarigen_eeprom_w) AM_BASE(&atarigen_eeprom) AM_SIZE(&atarigen_eeprom_size) AM_RANGE(0x1f0000, 0x1fffff) AM_WRITE(atarigen_eeprom_enable_w) AM_RANGE(0x260000, 0x26000f) AM_READ(input_port_0_word_r) AM_RANGE(0x260010, 0x26001f) AM_READ(port1_r) AM_RANGE(0x260020, 0x26002f) AM_READ(input_port_2_word_r) AM_RANGE(0x260030, 0x260031) AM_READ(atarigen_sound_r) AM_RANGE(0x2e0000, 0x2e0001) AM_WRITE(watchdog_reset16_w) AM_RANGE(0x360000, 0x360001) AM_WRITE(atarigen_scanline_int_ack_w) AM_RANGE(0x360010, 0x360011) AM_WRITE(MWA16_NOP) AM_RANGE(0x360020, 0x360021) AM_WRITE(atarigen_sound_reset_w) AM_RANGE(0x360030, 0x360031) AM_WRITE(atarigen_sound_w) AM_RANGE(0x3e0000, 0x3e0fff) AM_READWRITE(MRA16_RAM, vindictr_paletteram_w) AM_BASE(&paletteram16) AM_RANGE(0x3f0000, 0x3f1fff) AM_MIRROR(0x8000) AM_READWRITE(MRA16_RAM, atarigen_playfield_w) AM_BASE(&atarigen_playfield) AM_RANGE(0x3f2000, 0x3f3fff) AM_MIRROR(0x8000) AM_READWRITE(MRA16_RAM, atarimo_0_spriteram_w) AM_BASE(&atarimo_0_spriteram)
&20-&2F Video ULA Video system chip 16 ( 2 bytes x 8 ) 2Mhz &30-&3F 74LS161 Paged ROM selector 16 ( 1 byte x 16 ) 2Mhz read: &20-&2F INTON ECONET Interrupt On 16 ( 1 bytes x 16 ) 2Mhz &30-&3F Not Connected Not Connected 2Mhz &40-&5F 6522 VIA SYSTEM VIA 32 (16 bytes x 2 ) 1Mhz &60-&7F 6522 VIA USER VIA 32 (16 bytes x 2 ) 1Mhz &80-&9F 8271 FDC FDC Floppy disc controller 32 ( 8 bytes x 4 ) 2Mhz &A0-&BF 68B54 ADLC ECONET controller 32 ( 4 bytes x 8 ) 2Mhz &C0-&DF uPD7002 Analogue to digital converter 32 ( 4 bytes x 8 ) 1Mhz &E0-&FF Tube ULA Tube system interface 32 (32 bytes x 1 ) 2Mhz ******************************************************************************/ static ADDRESS_MAP_START(bbca_mem, ADDRESS_SPACE_PROGRAM, 8) ADDRESS_MAP_FLAGS( AMEF_UNMAP(0) ) /* Hardware marked with a 1 is not present in a Model A */ AM_RANGE(0x0000, 0x3fff) AM_READWRITE(MRA8_BANK1 , memorya1_w ) /* 0000-3fff Regular Ram */ AM_RANGE(0x4000, 0x7fff) AM_READWRITE(MRA8_BANK3 , memorya1_w ) /* 4000-7fff Repeat of the Regular Ram */ AM_RANGE(0x8000, 0xbfff) AM_READWRITE(MRA8_BANK4 , MWA8_ROM ) /* 8000-bfff Paged ROM */ AM_RANGE(0xc000, 0xfbff) AM_READWRITE(MRA8_BANK7 , MWA8_ROM ) /* c000-fbff OS ROM */ AM_RANGE(0xfc00, 0xfdff) AM_READ (return8_FF ) /* fc00-fdff FRED & JIM Pages */ /* fe00-feff Shiela Address Page */ AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(BBC_6845_r , BBC_6845_w ) /* fe00-fe07 6845 CRTA Video controller */ AM_RANGE(0xfe08, 0xfe0f) AM_READWRITE(BBC_6850_r , BBC_6850_w ) /* fe08-fe0f 6850 ACIA Serial Controller */ AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(return8_FE , BBC_SerialULA_w ) /* fe10-fe17 Serial ULA Serial system chip */ AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID 1 ECONET Interrupt Off / ID No. */