| Previous | 199869 Revisions | Next |
| r33628 Tuesday 2nd December, 2014 at 17:16:41 UTC by Zoë Blade |
|---|
| Tidy comments Squashed commit of the following: commit 8d8a0d9713d4614b22f06fda4cf948d4d5561de0 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Tue Dec 2 17:15:42 2014 +0000 Revert fixes to libraries I'll fix those at the source, where possible. commit 5dde94e3e60dcc622d5b782acaa62e590c62bafb Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Tue Dec 2 16:57:32 2014 +0000 Add apostrophes commit b27e168b58861f1ad0ca7af1c6ca1629cc6730ce Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Mon Dec 1 16:28:58 2014 +0000 Fix some more word duplication I've left some instances of " in in " in, as they're ambiguous and may actually be correct. commit a3dfd10cd501c3a521010942f950f5ca2c5395a7 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Mon Dec 1 10:35:03 2014 +0000 Fix another typo commit 01a3702209d9e880ac8f60dc4d74f26d426234fb Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Mon Dec 1 10:33:57 2014 +0000 Fix more typos commit 56c6fffd8769cdfab62c59c04d41b98b7f425262 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Mon Dec 1 10:30:19 2014 +0000 Hopefully fix typos I'm not entirely sure about src/mame/drivers/nova2001.c line 933, as it could plausibly be either "which is not the top bit" or "which is now the top bit", with almost opposite meaning. commit 906507b221de0175d236e252dc51f122cb56db23 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Mon Dec 1 08:39:55 2014 +0000 Fix another typo commit 14fcd939ae1c0570c10aacf00c6ea86724086f92 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Mon Dec 1 08:38:16 2014 +0000 Fix some more word doubling in comments commit d21283a447b94b28a38ec742a09fe425d77b55b2 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Sun Nov 30 23:06:07 2014 +0000 Fix some more typos commit 59b14d204af6d5983ea6dea2f5c8ad5bcc80460c Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Sun Nov 30 22:56:53 2014 +0000 Tidy more commit 9b3c9a868596c04c1a61b35aa8c96fb82c885149 Author: Zoë Blade <zoe@bytenoise.co.uk> Date: Sun Nov 30 22:43:30 2014 +0000 Tidy more comments |
| [docs] | floppy.txt |
| [hash] | coco_flop.xml |
| [src/emu/cpu/alto2] | a2disp.h a2ether.c |
| [src/emu/cpu/tms0980] | tms0980.c |
| [src/mame/audio] | dcs.c gottlieb.c |
| [src/mame/drivers] | 40love.c bfm_sc4h.c bottom9.c champbas.c cps1.c crystal.c dietgo.c ecoinfr.c gaelco3d.c galpani2.c igs_m036.c multfish_ref.c nova2001.c re900.c system16.c vsnes.c wc90b.c |
| [src/mame/includes] | galpani2.h toaplan1.h |
| [src/mame/machine] | pgmprot_igs027a_type3.c |
| [src/mame/video] | bosco.c galpani2.c tankbust.c |
| [src/mess/audio] | upd1771.c |
| [src/mess/tools/imgtool/modules] | os9.c |
| r242139 | r242140 | |
|---|---|---|
| 329 | 329 | - FM-encoded sector data followed by two bytes of crc |
| 330 | 330 | - A number of FM-encoded 0xff (usually 48, very variable) |
| 331 | 331 | |
| 332 | The t | |
| 332 | The track is finished with a stream of '1' cells. | |
| 333 | 333 | |
| 334 | 334 | The 125KHz pulse trains are used to lock the PLL to the signal |
| 335 | 335 | correctly. The specific 16-cells streams allow to distinguish between |
| r242139 | r242140 | |
|---|---|---|
| 3 | 3 | |
| 4 | 4 | <softwarelist name="coco_flop" description="Tandy Radio Shack Color Computer disk images"> |
| 5 | 5 | |
| 6 | <!-- coco3 only requires 512Kb, audio is a farty, run best with a | |
| 6 | <!-- coco3 only requires 512Kb, audio is a farty, run best with a 6309? - coco3h driver) --> | |
| 7 | 7 | <!-- RUN"DONKEY" --> |
| 8 | 8 | <software name="dkong" supported ="partial"> |
| 9 | 9 | <description>Donkey Kong (Sock Master's Donkey Kong Emulator for CoCo 3) (512Kb)</description> |
| r242139 | r242140 | |
|---|---|---|
| 76 | 76 | #define ALTO2_DISPLAY_HEIGHT 808 //!< number of visible scanlines per frame; 808 really, but there are some empty lines? |
| 77 | 77 | #define ALTO2_DISPLAY_WIDTH 606 //!< visible width of the display; 38 x 16 bit words - 2 pixels |
| 78 | 78 | #define ALTO2_DISPLAY_VISIBLE_WORDS ((ALTO2_DISPLAY_WIDTH+15)/16) //!< visible words per scanline |
| 79 | #define ALTO2_DISPLAY_BITCLOCK 20160000ll //!< display bit clock in in Hertz (20.16MHz) | |
| 80 | #define ALTO2_DISPLAY_BITTIME(n) (U64(1000000000000)*(n)/ALTO2_DISPLAY_BITCLOCK) //!< display bit time in in pico seconds (~= 49.6031ns) | |
| 79 | #define ALTO2_DISPLAY_BITCLOCK 20160000ll //!< display bit clock in Hertz (20.16MHz) | |
| 80 | #define ALTO2_DISPLAY_BITTIME(n) (U64(1000000000000)*(n)/ALTO2_DISPLAY_BITCLOCK) //!< display bit time in pico seconds (~= 49.6031ns) | |
| 81 | 81 | #define ALTO2_DISPLAY_SCANLINE_TIME ALTO2_DISPLAY_BITTIME(ALTO2_DISPLAY_TOTAL_WIDTH)//!< time for a scanline in pico seconds (768 * 49.6031ns ~= 38095.1808ns) |
| 82 | 82 | #define ALTO2_DISPLAY_VISIBLE_TIME ALTO2_DISPLAY_BITTIME(ALTO2_DISPLAY_WIDTH) //!< time of the visible part of a scanline in pico seconds (606 * 49.6031ns ~= 30059.4786ns) |
| 83 | 83 | #define ALTO2_DISPLAY_WORD_TIME ALTO2_DISPLAY_BITTIME(16) //!< time for a word in pico seconds (16 pixels * 49.6031ns ~= 793.6496ns) |
| r242139 | r242140 | |
|---|---|---|
| 416 | 416 | * polynomials listed in Tabel I by applying the appropriate logic levels |
| 417 | 417 | * to the select pins S0, S1 and S2. |
| 418 | 418 | * |
| 419 | * T | |
| 419 | * The 'F401 consists of a 16-bit register, a Read Only Memory (ROM) and | |
| 420 | 420 | * associated control circuitry as shown in the block diagram. The |
| 421 | 421 | * polynomial control code presented at inputs S0, S1 and S2 is decoded |
| 422 | 422 | * by the ROM, selecting the desired polynomial by establishing shift |
| r242139 | r242140 | |
|---|---|---|
| 48 | 48 | - Execute: |
| 49 | 49 | 1. Execute BRANCH/CALL/RETN part #1 |
| 50 | 50 | |
| 51 | */ | |
| 52 | 51 | |
| 53 | #include "tms0980.h" | |
| 54 | #include "debugger.h" | |
| 55 | ||
| 56 | /* | |
| 57 | ||
| 58 | 52 | The MCU cores contains a set of fixed instructions and a set of |
| 59 | 53 | instructions created using microinstructions. A subset of the |
| 60 | 54 | instruction set could be defined from the microinstructions by |
| r242139 | r242140 | |
| 64 | 58 | cycle #2: C8(?), CKM, NE(?), STO |
| 65 | 59 | cycle #3,#4: AUTA, AUTY |
| 66 | 60 | |
| 67 | unknown cycle: CME, SSE, SSS | |
| 68 | ||
| 69 | 61 | */ |
| 70 | 62 | |
| 71 | /* Microinstructions */ | |
| 72 | #define M_15TN 0x00000001 /* 15 to -ALU */ | |
| 73 | #define M_ATN 0x00000002 /* ACC to -ALU */ | |
| 74 | #define M_AUTA 0x00000004 /* ALU to ACC */ | |
| 75 | #define M_AUTY 0x00000008 /* ALU to Y */ | |
| 76 | #define M_C8 0x00000010 /* CARRY8 to STATUS */ | |
| 77 | #define M_CIN 0x00000020 /* Carry In to ALU */ | |
| 78 | #define M_CKM 0x00000040 /* CKB to MEM */ | |
| 79 | #define M_CKN 0x00000080 /* CKB to -ALU */ | |
| 80 | #define M_CKP 0x00000100 /* CKB to +ALU */ | |
| 81 | #define M_CME 0x00000200 /* Conditional Memory Enable */ | |
| 82 | #define M_DMTP 0x00000400 /* DAM to +ALU */ | |
| 83 | #define M_MTN 0x00000800 /* MEM to -ALU */ | |
| 84 | #define M_MTP 0x00001000 /* MEM to +ALU */ | |
| 85 | #define M_NATN 0x00002000 /* ~ACC to -ALU */ | |
| 86 | #define M_NDMTP 0x00004000 /* ~DAM to +ALU */ | |
| 87 | #define M_NE 0x00008000 /* COMP to STATUS */ | |
| 88 | #define M_SSE 0x00010000 /* Special Status Enable */ | |
| 89 | #define M_SSS 0x00020000 /* Special Status Sample */ | |
| 90 | #define M_STO 0x00040000 /* ACC to MEM */ | |
| 91 | #define M_STSL 0x00080000 /* STATUS to Status Latch */ | |
| 92 | #define M_YTP 0x00100000 /* Y to +ALU */ | |
| 63 | #include "tms0980.h" | |
| 64 | #include "debugger.h" | |
| 93 | 65 | |
| 94 | /* Standard/fixed instructions - these are documented more in their specific handlers below */ | |
| 95 | #define F_BR 0x00000001 | |
| 96 | #define F_CALL 0x00000002 | |
| 97 | #define F_CLO 0x00000004 | |
| 98 | #define F_COMC 0x00000008 | |
| 99 | #define F_COMX 0x00000010 | |
| 100 | #define F_COMX8 0x00000020 | |
| 101 | #define F_LDP 0x00000040 | |
| 102 | #define F_LDX 0x00000080 | |
| 103 | #define F_OFF 0x00000100 | |
| 104 | #define F_RBIT 0x00000200 | |
| 105 | #define F_REAC 0x00000400 | |
| 106 | #define F_RETN 0x00000800 | |
| 107 | #define F_RSTR 0x00001000 | |
| 108 | #define F_SAL 0x00002000 | |
| 109 | #define F_SBIT 0x00004000 | |
| 110 | #define F_SBL 0x00008000 | |
| 111 | #define F_SEAC 0x00010000 | |
| 112 | #define F_SETR 0x00020000 | |
| 113 | #define F_TDO 0x00040000 | |
| 114 | #define F_XDA 0x00080000 | |
| 115 | ||
| 116 | ||
| 117 | 66 | // supported types: |
| 118 | 67 | // note: dice information assumes the orientation is pictured with RAM at the bottom-left |
| 119 | 68 | |
| r242139 | r242140 | |
| 340 | 289 | |
| 341 | 290 | |
| 342 | 291 | |
| 292 | /* Standard/fixed instructions */ | |
| 293 | #define F_BR 0x00000001 | |
| 294 | #define F_CALL 0x00000002 | |
| 295 | #define F_CLO 0x00000004 | |
| 296 | #define F_COMC 0x00000008 | |
| 297 | #define F_COMX 0x00000010 | |
| 298 | #define F_COMX8 0x00000020 | |
| 299 | #define F_LDP 0x00000040 | |
| 300 | #define F_LDX 0x00000080 | |
| 301 | #define F_OFF 0x00000100 | |
| 302 | #define F_RBIT 0x00000200 | |
| 303 | #define F_REAC 0x00000400 | |
| 304 | #define F_RETN 0x00000800 | |
| 305 | #define F_RSTR 0x00001000 | |
| 306 | #define F_SAL 0x00002000 | |
| 307 | #define F_SBIT 0x00004000 | |
| 308 | #define F_SBL 0x00008000 | |
| 309 | #define F_SEAC 0x00010000 | |
| 310 | #define F_SETR 0x00020000 | |
| 311 | #define F_TDO 0x00040000 | |
| 312 | #define F_XDA 0x00080000 | |
| 313 | ||
| 314 | /* Microinstructions */ | |
| 315 | #define M_15TN 0x00000001 | |
| 316 | #define M_ATN 0x00000002 | |
| 317 | #define M_AUTA 0x00000004 | |
| 318 | #define M_AUTY 0x00000008 | |
| 319 | #define M_C8 0x00000010 | |
| 320 | #define M_CIN 0x00000020 | |
| 321 | #define M_CKM 0x00000040 | |
| 322 | #define M_CKN 0x00000080 | |
| 323 | #define M_CKP 0x00000100 | |
| 324 | #define M_CME 0x00000200 | |
| 325 | #define M_DMTP 0x00000400 | |
| 326 | #define M_MTN 0x00000800 | |
| 327 | #define M_MTP 0x00001000 | |
| 328 | #define M_NATN 0x00002000 | |
| 329 | #define M_NDMTP 0x00004000 | |
| 330 | #define M_NE 0x00008000 | |
| 331 | #define M_SSE 0x00010000 | |
| 332 | #define M_SSS 0x00020000 | |
| 333 | #define M_STO 0x00040000 | |
| 334 | #define M_STSL 0x00080000 | |
| 335 | #define M_YTP 0x00100000 | |
| 336 | ||
| 337 | ||
| 338 | ||
| 343 | 339 | //------------------------------------------------- |
| 344 | 340 | // device_start - device-specific startup |
| 345 | 341 | //------------------------------------------------- |
| r242139 | r242140 | |
|---|---|---|
| 184 | 184 | #define SET_INPUT_FULL() (m_latch_control &= ~LCTRL_INPUT_EMPTY) |
| 185 | 185 | |
| 186 | 186 | |
| 187 | /* These are | |
| 187 | /* These are some of the control registers. We don't use them all */ | |
| 188 | 188 | enum |
| 189 | 189 | { |
| 190 | 190 | IDMA_CONTROL_REG = 0, /* 3fe0 */ |
| r242139 | r242140 | |
|---|---|---|
| 1030 | 1030 | m_nmi_state = 1; |
| 1031 | 1031 | nmi_state_update(); |
| 1032 | 1032 | |
| 1033 | // set a timer to turn it off again on | |
| 1033 | // set a timer to turn it off again on the next SOUND_CLOCK/16 | |
| 1034 | 1034 | timer_set(attotime::from_hz(SOUND2_CLOCK/16), TID_NMI_CLEAR); |
| 1035 | 1035 | |
| 1036 | 1036 | // adjust the NMI timer for the next time |
| r242139 | r242140 | |
|---|---|---|
| 28 | 28 | Vintage : 1984 |
| 29 | 29 | Game serial/model number : M4300006B ? |
| 30 | 30 | |
| 31 | I dont have the wiring harness for this board, so dont know if it works. | |
| 31 | I don't have the wiring harness for this board, so don't know if it works. | |
| 32 | 32 | One GFX ROM is bad though. |
| 33 | 33 | See A30-26.u23\A30-26.txt for details about the bad ROM. |
| 34 | 34 | To summarise: |
| r242139 | r242140 | |
|---|---|---|
| 584 | 584 | else |
| 585 | 585 | { |
| 586 | 586 | // generating certain interrupts expects the bit 0x8000 to be set here |
| 587 | // but it's set | |
| 587 | // but it's set to dedicated i/o, not general purpose, source? | |
| 588 | 588 | return 0x8040; |
| 589 | 589 | } |
| 590 | 590 | } |
| r242139 | r242140 | |
|---|---|---|
| 367 | 367 | ROM_LOAD32_BYTE( "891e09d", 0x40002, 0x10000, CRC(4e1335e6) SHA1(b892ab40a41978a89658ea2e7aabe9b073430b5d) ) |
| 368 | 368 | ROM_LOAD32_BYTE( "891e09b", 0x40003, 0x10000, CRC(b6f914fb) SHA1(e95f3e899c2ead15ef8a529dbc67e8f4a0f88bdd) ) |
| 369 | 369 | |
| 370 | ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */ | |
| 370 | ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */ | |
| 371 | 371 | ROM_LOAD32_BYTE( "891e06e", 0x00000, 0x10000, CRC(0b04db1c) SHA1(0beae7bb8da49379915c0253ce03091eb71a58b5) ) /* sprites */ |
| 372 | 372 | ROM_LOAD32_BYTE( "891e06a", 0x00001, 0x10000, CRC(5ee37327) SHA1(f63ddaf63af06ea5421b0361315940582ef57922) ) |
| 373 | 373 | ROM_LOAD32_BYTE( "891e05e", 0x00002, 0x10000, CRC(b356e729) SHA1(2cda591415b0f139fdb1f80c349d432bb0579d8e) ) |
| r242139 | r242140 | |
| 424 | 424 | ROM_LOAD32_BYTE( "891e09d", 0x40002, 0x10000, CRC(4e1335e6) SHA1(b892ab40a41978a89658ea2e7aabe9b073430b5d) ) |
| 425 | 425 | ROM_LOAD32_BYTE( "891e09b", 0x40003, 0x10000, CRC(b6f914fb) SHA1(e95f3e899c2ead15ef8a529dbc67e8f4a0f88bdd) ) |
| 426 | 426 | |
| 427 | ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */ | |
| 427 | ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */ | |
| 428 | 428 | ROM_LOAD32_BYTE( "891e06e", 0x00000, 0x10000, CRC(0b04db1c) SHA1(0beae7bb8da49379915c0253ce03091eb71a58b5) ) /* sprites */ |
| 429 | 429 | ROM_LOAD32_BYTE( "891e06a", 0x00001, 0x10000, CRC(5ee37327) SHA1(f63ddaf63af06ea5421b0361315940582ef57922) ) |
| 430 | 430 | ROM_LOAD32_BYTE( "891e05e", 0x80002, 0x10000, CRC(b356e729) SHA1(2cda591415b0f139fdb1f80c349d432bb0579d8e) ) |
| r242139 | r242140 | |
|---|---|---|
| 320 | 320 | AM_RANGE(0xa002, 0xa002) AM_WRITE(champbas_gfxbank_w) |
| 321 | 321 | AM_RANGE(0xa003, 0xa003) AM_WRITE(champbas_flipscreen_w) |
| 322 | 322 | AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w) |
| 323 | AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but | |
| 323 | AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but I don't need it */ | |
| 324 | 324 | |
| 325 | 325 | AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram") /* Sprite pos */ |
| 326 | 326 | AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_byte_w) |
| r242139 | r242140 | |
|---|---|---|
| 548 | 548 | AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w) |
| 549 | 549 | /* Forgotten Worlds has dial controls on B-board mapped at 800040-80005f. See DRIVER_INIT */ |
| 550 | 550 | AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_SHARE("cps_a_regs") /* CPS-A custom */ |
| 551 | /* CPS-B custom is mapped by the PAL IOB2 on the B-board. SF2 revision "E" World and USA 910228 has it a a different | |
| 551 | /* CPS-B custom is mapped by the PAL IOB2 on the B-board. SF2 revision "E" World and USA 910228 has it at a different | |
| 552 | 552 | address, see DRIVER_INIT */ |
| 553 | 553 | AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_SHARE("cps_b_regs") |
| 554 | 554 | AM_RANGE(0x800180, 0x800187) AM_WRITE(cps1_soundlatch_w) /* Sound command */ |
| r242139 | r242140 | |
|---|---|---|
| 1054 | 1054 | |
| 1055 | 1055 | The PIC uses a software UART bit banged on a single output pin of the main CPU: |
| 1056 | 1056 | the data port is bit 0x20000000 on the PIO register, the same register where the EEPROM control lines are. The serial data is transmitted at 8 data bits, even parity, 1 stop bit. It's probably |
| 1057 | tricky to get it working properly because it doesn't rely on a clock signal, and so, the pic and main cpu must run in | |
| 1057 | tricky to get it working properly because it doesn't rely on a clock signal, and so, the pic and main cpu must run in parallel, and the bit lengths must match. The pic bit delay routine is just a loop. | |
| 1058 | 1058 | also it seems that bit 0x40000000 is the PIC reset. |
| 1059 | 1059 | |
| 1060 | 1060 | */ |
| r242139 | r242140 | |
|---|---|---|
| 142 | 142 | PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) |
| 143 | 143 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 144 | 144 | PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) // Demo_Sounds ) ) |
| 145 | PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) // Players dont move in attract mode if on!? | |
| 145 | PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) // Players don't move in attract mode if on!? | |
| 146 | 146 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 147 | 147 | PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) |
| 148 | 148 | PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) |
| r242139 | r242140 | |
|---|---|---|
| 1694 | 1694 | GAME( 19??, ec_rdht7, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Red Hot 7 (MAB PCB?) (Concept Games Ltd) (?)" , GAME_FLAGS) |
| 1695 | 1695 | GAME( 19??, ec_unkt, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "unknown 'T' (MAB PCB?) (Concept Games Ltd) (?)" , GAME_FLAGS) |
| 1696 | 1696 | |
| 1697 | //These look more like some variant of Astra Gaming hardware than the MAB PCB, but I can't be sure. Certainly they dont seem to be on the base hardware | |
| 1697 | //These look more like some variant of Astra Gaming hardware than the MAB PCB, but I can't be sure. Certainly they don't seem to be on the base hardware | |
| 1698 | 1698 | GAME( 19??, ec_gold7, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Golden 7 (Concept Games Ltd) (?)" , GAME_FLAGS) |
| 1699 | 1699 | GAME( 19??, ec_mgbel, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Megabell (Concept Games Ltd) (?)" , GAME_FLAGS) |
| 1700 | 1700 | GAME( 19??, ec_jackb, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Jackpot Bars (MAB PCB?) (Concept Games Ltd) (?)" , GAME_FLAGS) |
| r242139 | r242140 | |
|---|---|---|
| 523 | 523 | * |
| 524 | 524 | *************************************/ |
| 525 | 525 | |
| 526 | /* These are | |
| 526 | /* These are some of the control registers. We don't use them all */ | |
| 527 | 527 | enum |
| 528 | 528 | { |
| 529 | 529 | S1_AUTOBUF_REG = 15, |
| r242139 | r242140 | |
| 663 | 663 | /* get the base value, since we need to keep it around for wrapping */ |
| 664 | 664 | source -= m_adsp_incs; |
| 665 | 665 | |
| 666 | /* make it go back one so we dont lose the first sample */ | |
| 666 | /* make it go back one so we don't lose the first sample */ | |
| 667 | 667 | m_adsp->set_state_int(ADSP2100_I0 + m_adsp_ireg, source); |
| 668 | 668 | |
| 669 | 669 | /* save it as it is now */ |
| r242139 | r242140 | |
|---|---|---|
| 337 | 337 | AM_RANGE(0x300000, 0x301fff) AM_RAM // ? |
| 338 | 338 | AM_RANGE(0x302000, 0x303fff) AM_RAM AM_SHARE("spriteram") // Sprites |
| 339 | 339 | AM_RANGE(0x304000, 0x30401f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w) |
| 340 | // AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup | |
| 341 | // AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ? | |
| 342 | AM_RANGE(0x310000, 0x3101ff) AM_RAM_DEVWRITE("bg8palette", palette_device, write) AM_SHARE("bg8palette") // ? | |
| 340 | AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup | |
| 341 | AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ? | |
| 342 | AM_RANGE(0x310000, 0x3101ff) AM_RAM_WRITE(galpani2_palette_0_w) AM_SHARE("palette.0") // ? | |
| 343 | 343 | AM_RANGE(0x314000, 0x314001) AM_WRITENOP // ? flip backgrounds ? |
| 344 | 344 | AM_RANGE(0x318000, 0x318001) AM_READWRITE(galpani2_eeprom_r, galpani2_eeprom_w) // EEPROM |
| 345 | 345 | AM_RANGE(0x380000, 0x387fff) AM_RAM // Palette? |
| 346 | 346 | AM_RANGE(0x388000, 0x38ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette |
| 347 | ||
| 347 | AM_RANGE(0x390000, 0x3901ff) AM_WRITENOP // ? at startup of service mode | |
| 348 | 348 | |
| 349 | AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_SHARE("bg8.0") // Background 0 | |
| 349 | AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(galpani2_bg8_0_w) AM_SHARE("bg8.0") // Background 0 | |
| 350 | 350 | AM_RANGE(0x440000, 0x440001) AM_RAM AM_SHARE("bg8_scrollx.0") // Background 0 Scroll X |
| 351 | 351 | AM_RANGE(0x480000, 0x480001) AM_RAM AM_SHARE("bg8_scrolly.0") // Background 0 Scroll Y |
| 352 | // AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP // ? 0 at startup only | |
| 353 | AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_SHARE("bg8.1") // Background 1 | |
| 352 | AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP // ? 0 at startup only | |
| 353 | AM_RANGE(0x500000, 0x53ffff) AM_RAM_WRITE(galpani2_bg8_1_w) AM_SHARE("bg8.1") // Background 1 | |
| 354 | 354 | AM_RANGE(0x540000, 0x540001) AM_RAM AM_SHARE("bg8_scrollx.1") // Background 1 Scroll X |
| 355 | AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1") // Background 1 Scroll Y | |
| 356 | // AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP // ? 0 at startup only | |
| 357 | 355 | |
| 358 | 356 | AM_RANGE(0x540572, 0x540573) AM_READNOP // ? galpani2 at F0A4 |
| 359 | 357 | AM_RANGE(0x54057a, 0x54057b) AM_READNOP // ? galpani2 at F148 |
| r242139 | r242140 | |
| 365 | 363 | AM_RANGE(0x5405c2, 0x5405c3) AM_READNOP // ? galpani2 at F0A4 and F148 |
| 366 | 364 | AM_RANGE(0x5405ca, 0x5405cb) AM_READNOP // ? galpani2 at F148 |
| 367 | 365 | |
| 368 | AM_RANGE(0x600000, 0x600001) AM_NOP // Watchdog | |
| 366 | AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1") // Background 1 Scroll Y | |
| 367 | AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP // ? 0 at startup only | |
| 368 | AM_RANGE(0x600000, 0x600001) AM_WRITENOP // Watchdog | |
| 369 | 369 | AM_RANGE(0x640000, 0x640001) AM_WRITE8(galpani2_mcu_init_w, 0x00ff ) // ? 0 before resetting and at startup, Reset mcu ? |
| 370 | 370 | AM_RANGE(0x680000, 0x680001) AM_WRITE8(galpani2_mcu_nmi1_w, 0x00ff) // ? 0 -> 1 -> 0 (lev 5) / 0 -> $10 -> 0 |
| 371 | 371 | AM_RANGE(0x6c0000, 0x6c0001) AM_WRITE8(galpani2_coin_lockout_w, 0xff00 ) // Coin + Card Lockout |
| r242139 | r242140 | |
| 403 | 403 | static ADDRESS_MAP_START( galpani2_mem2, AS_PROGRAM, 16, galpani2_state ) |
| 404 | 404 | AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM |
| 405 | 405 | AM_RANGE(0x100000, 0x13ffff) AM_RAM AM_SHARE("ram2") // Work RAM |
| 406 | AM_RANGE(0x400000, 0x5fffff) AM_RAM AM_SHARE("bg15") // bg15 | |
| 407 | // AM_RANGE(0x600000, 0x600001) AM_NOP // ? 0 at startup only | |
| 408 | // AM_RANGE(0x640000, 0x640001) AM_WRITENOP // ? 0 at startup only | |
| 409 | // AM_RANGE(0x680000, 0x680001) AM_WRITENOP // ? 0 at startup only | |
| 410 | // AM_RANGE(0x6c0000, 0x6c0001) AM_WRITENOP // ? 0 at startup only | |
| 411 | AM_RANGE(0x700000, 0x700001) AM_NOP // Watchdog | |
| 406 | AM_RANGE(0x400000, 0x4fffff) AM_RAM_WRITE(galpani2_bg15_w) AM_SHARE("bg15") // bg15 | |
| 407 | AM_RANGE(0x500000, 0x5fffff) AM_RAM // bg15 | |
| 408 | AM_RANGE(0x600000, 0x600001) AM_NOP // ? 0 at startup only | |
| 409 | AM_RANGE(0x640000, 0x640001) AM_WRITENOP // ? 0 at startup only | |
| 410 | AM_RANGE(0x680000, 0x680001) AM_WRITENOP // ? 0 at startup only | |
| 411 | AM_RANGE(0x6c0000, 0x6c0001) AM_WRITENOP // ? 0 at startup only | |
| 412 | AM_RANGE(0x700000, 0x700001) AM_WRITENOP // Watchdog | |
| 412 | 413 | // AM_RANGE(0x740000, 0x740001) AM_WRITENOP // ? Reset mcu |
| 413 | 414 | AM_RANGE(0x780000, 0x780001) AM_WRITE8(galpani2_mcu_nmi2_w, 0x00ff) // ? 0 -> 1 -> 0 (lev 5) |
| 414 | 415 | AM_RANGE(0x7c0000, 0x7c0001) AM_WRITEONLY AM_SHARE("rombank") // Rom Bank |
| r242139 | r242140 | |
| 625 | 626 | MCFG_SCREEN_SIZE(320, 256) |
| 626 | 627 | MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 256-1-16) |
| 627 | 628 | MCFG_SCREEN_UPDATE_DRIVER(galpani2_state, screen_update_galpani2) |
| 629 | MCFG_SCREEN_PALETTE("palette") | |
| 628 | 630 | |
| 629 | 631 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", galpani2) |
| 630 | MCFG_PALETTE_ADD("palette", 0x4000) // sprites | |
| 632 | MCFG_PALETTE_ADD("palette", 0x4000 + 0x200 + 0x8000) // sprites, bg8, bg15 | |
| 631 | 633 | MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB) |
| 634 | MCFG_PALETTE_INIT_OWNER(galpani2_state, galpani2) | |
| 632 | 635 | |
| 633 | MCFG_PALETTE_ADD("bg8palette", 0x200/2) // bg8 | |
| 634 | MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB) | |
| 635 | ||
| 636 | MCFG_PALETTE_ADD("bgpalette", 32768) /* 32768 static colors for the bg */ | |
| 637 | MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB) | |
| 638 | MCFG_PALETTE_INIT_OWNER(galpani2_state,galpani2) | |
| 639 | ||
| 640 | 636 | MCFG_DEVICE_ADD_KC002_SPRITES |
| 641 | 637 | kaneko16_sprite_device::set_offsets(*device, 0x10000 - 0x16c0 + 0xc00, 0); |
| 642 | 638 | MCFG_KANEKO16_SPRITE_GFXDECODE("gfxdecode") |
| r242139 | r242140 | |
|---|---|---|
| 12 | 12 | IGS036 could be a upgraded version of IGS027A |
| 13 | 13 | but with GFX processor integrated |
| 14 | 14 | |
| 15 | I dont know the CPU core (should ARM based due to fail test) | |
| 16 | the chip has internal rom build-in | |
| 17 | the the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted | |
| 18 | if the external rom decrypted then we can | |
| 15 | I don't know the CPU core (should be ARM based due to fail test) | |
| 16 | the chip has internal rom built-in | |
| 17 | the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted | |
| 18 | if the external rom is decrypted then we can | |
| 19 | 19 | try to trojan the internal rom |
| 20 | here we offer several revision | |
| 20 | here we offer several revisions of the same game to see | |
| 21 | 21 | if anyone could find any clue, these 4 revision can |
| 22 | 22 | be programmed and running on a same PCB. |
| 23 | 23 | =================================================== |
| r242139 | r242140 | |
|---|---|---|
| 1 | 1 | |
| 2 | 2 | /* The following sets are known to exist based on official documentation, but have not been dumped. */ |
| 3 | /* no other official sets are known to exist apart from these and | |
| 3 | /* no other official sets are known to exist apart from these and the ones in multfish.c */ | |
| 4 | 4 | |
| 5 | 5 | #if 0 |
| 6 | 6 | ROM_START( mfish ) // 021120 |
| r242139 | r242140 | |
|---|---|---|
| 930 | 930 | /****************************************************************************** |
| 931 | 931 | |
| 932 | 932 | Gfx ROMs in pkunwar have an unusual layout, where a high address bit |
| 933 | (which is no the top bit) separates parts of the same tile. | |
| 933 | (which is not the top bit) separates parts of the same tile. | |
| 934 | 934 | |
| 935 | 935 | This all originates from Nova2001 apparently, which uses 0x2000 bytes ROMs for |
| 936 | 936 | the graphics. When the number of tiles was increased, the same 0x2000 blocks |
| r242139 | r242140 | |
|---|---|---|
| 45 | 45 | |
| 46 | 46 | How to play... |
| 47 | 47 | |
| 48 | This Roulette allow up to 6 players. To start the machine, turn the Operator Key | |
| 49 | (the the Operator Key light will turn green). Whilest this key is turned ON, you | |
| 48 | This Roulette allows up to 6 players. To start the machine, turn the Operator Key | |
| 49 | (the Operator Key light will turn green). Whilst this key is turned ON, you | |
| 50 | 50 | can insert credits, play, and payout. Once the key is turned OFF (red light), you |
| 51 | 51 | can play, but credits can't be entered/taken. |
| 52 | 52 |
| r242139 | r242140 | |
|---|---|---|
| 35 | 35 | - Tetris |
| 36 | 36 | - E-Swat |
| 37 | 37 | |
| 38 | These appear to be a variation | |
| 38 | These appear to be a variation on the encrypted / protected bootlegs, but without the encryption | |
| 39 | 39 | or protection |
| 40 | 40 | |
| 41 | 41 | - Golden Axe (set 2) |
| r242139 | r242140 | |
| 566 | 566 | int scroll = data & 0x1ff; |
| 567 | 567 | |
| 568 | 568 | scroll+= 0x200; |
| 569 | scroll+= 1; // so that the background | |
| 569 | scroll+= 1; // so that the background of the select screen is properly aligned | |
| 570 | 570 | m_bg_scrollx = -scroll; |
| 571 | 571 | } |
| 572 | 572 |
| r242139 | r242140 | |
|---|---|---|
| 364 | 364 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* bit 1 of dsw goes here */ |
| 365 | 365 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1) |
| 366 | 366 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1) |
| 367 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - dont change */ | |
| 367 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - don't change */ | |
| 368 | 368 | |
| 369 | 369 | /* Right Side Controls */ |
| 370 | 370 | PORT_START("IN2") |
| r242139 | r242140 | |
| 395 | 395 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* bit 1 of dsw goes here */ |
| 396 | 396 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_IMPULSE(1) |
| 397 | 397 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN4 ) PORT_IMPULSE(1) |
| 398 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - dont change */ | |
| 398 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - don't change */ | |
| 399 | 399 | |
| 400 | 400 | /* Both sides also have a DSW (#0 & #1) which are defined per game, below */ |
| 401 | 401 | INPUT_PORTS_END |
| r242139 | r242140 | |
|---|---|---|
| 62 | 62 | sometimes it seems colors are not entirely correct, this is only due |
| 63 | 63 | to the crappy artwork of the person that did the bootleg. |
| 64 | 64 | |
| 65 | Dip switches are not complete and they dont seem to differ from | |
| 65 | Dip switches are not complete and they don't seem to differ from | |
| 66 | 66 | the original machine. |
| 67 | 67 | |
| 68 | 68 | Last but not least, the set of ROMs i have for Euro League seem to have |
| r242139 | r242140 | |
|---|---|---|
| 21 | 21 | m_spriteram(*this, "spriteram"), |
| 22 | 22 | m_oki2(*this, "oki2"), |
| 23 | 23 | m_eeprom(*this, "eeprom"), |
| 24 | m_palette(*this, "palette"), | |
| 25 | m_bg15palette(*this, "bgpalette"), | |
| 26 | m_bg8palette(*this, "bg8palette") | |
| 27 | { } | |
| 24 | m_palette(*this, "palette") | |
| 25 | { } | |
| 28 | 26 | |
| 29 | 27 | required_shared_ptr_array<UINT16, 2> m_bg8; |
| 30 | 28 | optional_shared_ptr_array<UINT16, 2> m_palette_val; |
| r242139 | r242140 | |
| 37 | 35 | UINT16 m_old_mcu_nmi1; |
| 38 | 36 | UINT16 m_old_mcu_nmi2; |
| 39 | 37 | required_shared_ptr<UINT16> m_rombank; |
| 38 | bitmap_ind16 *m_bg8_bitmap[2]; | |
| 39 | bitmap_ind16 *m_bg15_bitmap; | |
| 40 | 40 | |
| 41 | 41 | required_device<cpu_device> m_maincpu; |
| 42 | 42 | required_device<cpu_device> m_subcpu; |
| r242139 | r242140 | |
| 55 | 55 | virtual void machine_reset(); |
| 56 | 56 | virtual void video_start(); |
| 57 | 57 | DECLARE_PALETTE_INIT(galpani2); |
| 58 | UINT32 screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); | |
| 59 | void copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer); | |
| 60 | void copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); | |
| 61 | ||
| 58 | UINT32 screen_update_galpani2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); | |
| 62 | 59 | TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt1); |
| 63 | 60 | TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt2); |
| 64 | 61 | void galpani2_mcu_nmi1(); |
| 65 | 62 | void galpani2_mcu_nmi2(); |
| 66 | 63 | /*----------- defined in video/galpani2.c -----------*/ |
| 64 | inline void galpani2_bg8_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_); | |
| 65 | inline void galpani2_palette_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_); | |
| 67 | 66 | |
| 67 | DECLARE_WRITE16_MEMBER( galpani2_palette_0_w ); | |
| 68 | DECLARE_WRITE16_MEMBER( galpani2_palette_1_w ); | |
| 69 | ||
| 70 | DECLARE_WRITE16_MEMBER( galpani2_bg8_0_w ); | |
| 71 | DECLARE_WRITE16_MEMBER( galpani2_bg8_1_w ); | |
| 72 | ||
| 73 | DECLARE_WRITE16_MEMBER( galpani2_bg15_w ); | |
| 68 | 74 | required_device<okim6295_device> m_oki2; |
| 69 | 75 | required_device<eeprom_serial_93cxx_device> m_eeprom; |
| 70 | 76 | required_device<palette_device> m_palette; |
| 71 | required_device<palette_device> m_bg15palette; | |
| 72 | required_device<palette_device> m_bg8palette; | |
| 73 | ||
| 74 | 77 | }; |
| r242139 | r242140 | |
|---|---|---|
| 27 | 27 | |
| 28 | 28 | optional_shared_ptr<UINT8> m_sharedram; |
| 29 | 29 | |
| 30 | int m_coin_count; /* coin count increments on startup ? , so dont count it */ | |
| 30 | int m_coin_count; /* coin count increments on startup ? , so don't count it */ | |
| 31 | 31 | int m_intenable; |
| 32 | 32 | |
| 33 | 33 | /* Demon world */ |
| r242139 | r242140 | |
|---|---|---|
| 498 | 498 | temp16[(base) /2] = 0xff1e; base += 2; |
| 499 | 499 | temp16[(base) /2] = 0xe12f; base += 2; |
| 500 | 500 | |
| 501 | // the non-EO area starts in the middle of a function that seems similar to those at 000037E4 / 000037D4 in killbldp.. by setting this up we allow the intro to run | |
| 502 | // it sets '0x10000038' to a value ot 1 | |
| 501 | // the non-EO area starts in the middle of a function that seems similar to those at 000037E4 / 000037D4 in killbldp. by setting this up we allow the intro to run | |
| 502 | // it sets '0x10000038' to a value of 1 | |
| 503 | 503 | base = 0x184; |
| 504 | 504 | temp16[(base) /2] = 0x105c; base += 2; |
| 505 | 505 | temp16[(base) /2] = 0xE59F; base += 2; |
| r242139 | r242140 | |
|---|---|---|
| 248 | 248 | x = (m_star_seed_tab[star_cntr].x + m_stars_scrollx) % 256; |
| 249 | 249 | y = (m_star_seed_tab[star_cntr].y + m_stars_scrolly) % 256; |
| 250 | 250 | |
| 251 | /* dont draw the stars that are off the screen */ | |
| 251 | /* don't draw the stars that are off the screen */ | |
| 252 | 252 | if ( x < 224 ) |
| 253 | 253 | { |
| 254 | 254 | if (flip) x += 64; |
| r242139 | r242140 | |
|---|---|---|
| 55 | 55 | WRITE16_MEMBER( galpani2_bg8_regs_1_w ) { galpani2_bg8_regs_w(space, offset, data, mem_mask, 1); } |
| 56 | 56 | #endif |
| 57 | 57 | |
| 58 | inline void galpani2_state::galpani2_bg8_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_) | |
| 59 | { | |
| 60 | int x,y,pen; | |
| 61 | UINT16 newword = COMBINE_DATA(&m_bg8[_n_][offset]); | |
| 62 | pen = newword & 0xff; | |
| 63 | x = (offset % 512); /* 512 x 256 */ | |
| 64 | y = (offset / 512); | |
| 65 | m_bg8_bitmap[_n_]->pix16(y, x) = 0x4000 + pen; | |
| 66 | } | |
| 58 | 67 | |
| 68 | WRITE16_MEMBER( galpani2_state::galpani2_bg8_0_w ) { galpani2_bg8_w(offset, data, mem_mask, 0); } | |
| 69 | WRITE16_MEMBER( galpani2_state::galpani2_bg8_1_w ) { galpani2_bg8_w(offset, data, mem_mask, 1); } | |
| 59 | 70 | |
| 71 | inline void galpani2_state::galpani2_palette_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_) | |
| 72 | { | |
| 73 | UINT16 newword = COMBINE_DATA(&m_palette_val[_n_][offset]); | |
| 74 | m_palette->set_pen_color( offset + 0x4000 + _n_ * 0x100, pal5bit(newword >> 5), pal5bit(newword >> 10), pal5bit(newword >> 0) ); | |
| 75 | } | |
| 76 | ||
| 77 | WRITE16_MEMBER( galpani2_state::galpani2_palette_0_w ) { galpani2_palette_w(offset, data, mem_mask, 0); } | |
| 78 | WRITE16_MEMBER( galpani2_state::galpani2_palette_1_w ) { galpani2_palette_w(offset, data, mem_mask, 1); } | |
| 79 | ||
| 80 | ||
| 60 | 81 | /*************************************************************************** |
| 61 | 82 | |
| 62 | 83 | |
| 84 | xRGB Background Layer | |
| 85 | ||
| 86 | ||
| 87 | ***************************************************************************/ | |
| 88 | ||
| 89 | /* 8 horizontal pages of 256x256 pixels? */ | |
| 90 | WRITE16_MEMBER( galpani2_state::galpani2_bg15_w ) | |
| 91 | { | |
| 92 | UINT16 newword = COMBINE_DATA(&m_bg15[offset]); | |
| 93 | ||
| 94 | int x = (offset % 256) + (offset / (256*256)) * 256 ; | |
| 95 | int y = (offset / 256) % 256; | |
| 96 | ||
| 97 | m_bg15_bitmap->pix16(y, x) = 0x4200 + (newword & 0x7fff); | |
| 98 | } | |
| 99 | ||
| 100 | ||
| 101 | /*************************************************************************** | |
| 102 | ||
| 103 | ||
| 63 | 104 | Video Init Functions |
| 64 | 105 | |
| 65 | 106 | |
| r242139 | r242140 | |
| 72 | 113 | |
| 73 | 114 | /* initialize 555 RGB lookup */ |
| 74 | 115 | for (i = 0; i < 0x8000; i++) |
| 75 | palette.set_pen_color(i,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0)); | |
| 116 | palette.set_pen_color(0x4200+i,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0)); | |
| 76 | 117 | } |
| 77 | 118 | |
| 78 | 119 | void galpani2_state::video_start() |
| 79 | 120 | { |
| 121 | m_bg15_bitmap = auto_bitmap_ind16_alloc(machine(), 256*8, 256); | |
| 122 | m_bg8_bitmap[0] = auto_bitmap_ind16_alloc(machine(), 512, 256); | |
| 123 | m_bg8_bitmap[1] = auto_bitmap_ind16_alloc(machine(), 512, 256); | |
| 80 | 124 | } |
| 81 | 125 | |
| 82 | 126 | |
| r242139 | r242140 | |
| 88 | 132 | |
| 89 | 133 | ***************************************************************************/ |
| 90 | 134 | |
| 91 | // based on videos these 8-bit layers actually get *blended* against the RGB555 layer | |
| 92 | // it should be noted that in the layer at 0x500000 the upper 8 bits are set too, this could be related | |
| 93 | void galpani2_state::copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer) | |
| 135 | UINT32 galpani2_state::screen_update_galpani2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) | |
| 94 | 136 | { |
| 95 | int x = - ( *m_bg8_scrollx[layer] + 0x200 - 0x0f5 ); | |
| 96 | int y = - ( *m_bg8_scrolly[layer] + 0x200 - 0x1be ); | |
| 97 | UINT16* ram = m_bg8[layer]; | |
| 98 | ||
| 99 | const pen_t *clut = &m_bg8palette->pen(0); | |
| 100 | for (int xx = 0; xx < 320; xx++) | |
| 101 | { | |
| 102 | for (int yy = 0; yy < 240; yy++) | |
| 103 | { | |
| 104 | UINT16 pen = ram[(((y + yy) & 0xff) * 512) + ((x + xx) & 0x1ff)]; | |
| 105 | if (pen) bitmap.pix32(yy, xx) = clut[pen & 0xff]; | |
| 106 | } | |
| 107 | } | |
| 108 | } | |
| 109 | ||
| 110 | // this seems to be 256x256 pages (arranged as 1024*256), but the game resolution is 320x240 | |
| 111 | // https://www.youtube.com/watch?v=2b2SLFtC0uA is a video of the galpanic2j set, and shows the RGB pattern at | |
| 112 | // startup covering all screen lines - is the hardware mixing bitmaps of different resolutions or is there a | |
| 113 | // line select somewhere? I should find the gal images and find what resolution they're stored at too. | |
| 114 | // (or is this just wrong format / layout due to protection?) | |
| 115 | void galpani2_state::copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) | |
| 116 | { | |
| 117 | UINT16* ram = m_bg15 + 0x40000/2; | |
| 118 | ||
| 119 | //int x = 0; | |
| 120 | //int y = 0; | |
| 121 | ||
| 122 | const pen_t *clut = &m_bg15palette->pen(0); | |
| 123 | for (int xx = 0; xx < 320; xx++) | |
| 124 | { | |
| 125 | for (int yy = 0; yy < 240; yy++) | |
| 126 | { | |
| 127 | UINT16 pen = ram[(xx * 0x800) + yy]; | |
| 128 | bitmap.pix32(yy, xx) = clut[pen & 0x7fff]; | |
| 129 | } | |
| 130 | } | |
| 131 | } | |
| 132 | ||
| 133 | UINT32 galpani2_state::screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) | |
| 134 | { | |
| 135 | 137 | int layers_ctrl = -1; |
| 136 | 138 | |
| 137 | #if | |
| 139 | #ifdef MAME_DEBUG | |
| 138 | 140 | if (machine().input().code_pressed(KEYCODE_Z)) |
| 139 | 141 | { |
| 140 | 142 | int msk = 0; |
| r242139 | r242140 | |
| 149 | 151 | bitmap.fill(0, cliprect); |
| 150 | 152 | screen.priority().fill(0, cliprect); |
| 151 | 153 | |
| 154 | if (layers_ctrl & 0x1) | |
| 155 | { | |
| 156 | int x = 0; | |
| 157 | int y = 0; | |
| 158 | copyscrollbitmap_trans(bitmap, *m_bg15_bitmap, | |
| 159 | 1, &x, 1, &y, | |
| 160 | cliprect,0x4200 + 0); | |
| 161 | } | |
| 162 | ||
| 152 | 163 | /* test mode: |
| 153 | 164 | 304000:0040 0000 0100 0000-0000 0000 0000 0000 (Sprite regs) |
| 154 | 165 | 304010:16C0 0200 16C0 0200-16C0 0200 16C0 0200 |
| 155 | 166 | 16c0/40 = 5b 200/40 = 8 |
| 156 | 167 | scrollx = f5, on screen x should be 0 (f5+5b = 150) */ |
| 157 | 168 | |
| 158 | if (layers_ctrl & 0x1) copybg15(screen, bitmap, cliprect); | |
| 159 | if (layers_ctrl & 0x2) copybg8(screen, bitmap, cliprect, 0); | |
| 160 | if (layers_ctrl & 0x4) copybg8(screen, bitmap, cliprect, 1); | |
| 169 | if (layers_ctrl & 0x2) | |
| 170 | { | |
| 171 | int x = - ( *m_bg8_scrollx[0] + 0x200 - 0x0f5 ); | |
| 172 | int y = - ( *m_bg8_scrolly[0] + 0x200 - 0x1be ); | |
| 173 | copyscrollbitmap_trans(bitmap, *m_bg8_bitmap[0], | |
| 174 | 1, &x, 1, &y, | |
| 175 | cliprect,0x4000 + 0); | |
| 176 | } | |
| 177 | ||
| 178 | if (layers_ctrl & 0x4) | |
| 179 | { | |
| 180 | int x = - ( *m_bg8_scrollx[1] + 0x200 - 0x0f5 ); | |
| 181 | int y = - ( *m_bg8_scrolly[1] + 0x200 - 0x1be ); | |
| 182 | copyscrollbitmap_trans(bitmap, *m_bg8_bitmap[1], | |
| 183 | 1, &x, 1, &y, | |
| 184 | cliprect,0x4000 + 0); | |
| 185 | } | |
| 186 | ||
| 161 | 187 | if (layers_ctrl & 0x8) m_kaneko_spr->kaneko16_render_sprites(bitmap, cliprect, screen.priority(), m_spriteram, m_spriteram.bytes()); |
| 162 | 188 | return 0; |
| 163 | 189 | } |
| r242139 | r242140 | |
|---|---|---|
| 194 | 194 | |
| 195 | 195 | color = 0; |
| 196 | 196 | |
| 197 | //0x02 - dont know (most of the time this bit is set in tank sprite and others but not all and not always) | |
| 197 | //0x02 - don't know (most of the time this bit is set in tank sprite and others but not all and not always) | |
| 198 | 198 | //0x04 - not used |
| 199 | 199 | //0x08 - not used |
| 200 | 200 | //0x10 - not used |
| r242139 | r242140 | |
|---|---|---|
| 20 | 20 | it is perfectly possible to generate other sounds with different rom code and data. |
| 21 | 21 | |
| 22 | 22 | Most upd17XXX devices are typically 4bit NEC MCUs, however based on information |
| 23 | in | |
| 23 | in "Electronic Speech Synthesis" by Geoff Bristow (ISBN 0-07-007912-9, pages 148-152) | |
| 24 | 24 | the upd1770/1771 is not one of these 4-bit ones. |
| 25 | 25 | |
| 26 | 26 | The uPD1770/uPD1771 SSM is a 16-bit-wide rom/ram mcu with 8kb (4kw) of rom code, |
| r242139 | r242140 | |
| 138 | 138 | pin 6 is tied to the PC3 pin of the upD7801 CPU |
| 139 | 139 | pin 26 is tied to the INT1 pin of the upD7801 (CPU pin 12), |
| 140 | 140 | |
| 141 | 1,2,3,28,27 dont generate any digital signals | |
| 141 | 1,2,3,28,27 don't generate any digital signals | |
| 142 | 142 | 6 seems to be lowered 2.5 ms before an audio write |
| 143 | 143 | 7 is always low. |
| 144 | 144 | 12 is always high |
| r242139 | r242140 | |
| 404 | 404 | m_t_timbre = (m_packet[1] & 0xe0) >> 5; |
| 405 | 405 | m_t_offset = (m_packet[1] & 0x1f); |
| 406 | 406 | m_t_period = m_packet[2]; |
| 407 | //smaller periods dont all equal to 0x20 | |
| 407 | //smaller periods don't all equal to 0x20 | |
| 408 | 408 | if (m_t_period < 0x20) |
| 409 | 409 | m_t_period = 0x20; |
| 410 | 410 |
| r242139 | r242140 | |
|---|---|---|
| 673 | 673 | return IMGTOOLERR_OUTOFMEMORY; |
| 674 | 674 | memset(info->allocation_bitmap, 0, info->allocation_bitmap_bytes); |
| 675 | 675 | |
| 676 | /* sectors per track and track size dont jive? */ | |
| 676 | /* sectors per track and track size don't jive? */ | |
| 677 | 677 | if (info->sectors_per_track != track_size_in_sectors) |
| 678 | 678 | return IMGTOOLERR_CORRUPTIMAGE; |
| 679 | 679 |
| https://github.com/mamedev/mame/commit/52e9bfd75d2b0d19323c2b74fa026427aa28c560 |
| Previous | 199869 Revisions | Next |