From cd704879b2dd42faa6515f4327f70cea4a8f5dfb Mon Sep 17 00:00:00 2001 From: MetalliC <0vetal0@gmail.com> Date: Sat, 16 Feb 2019 22:10:34 +0200 Subject: [PATCH 01/21] naomi.cpp: - documentation update [f205v] - redumped clubk2kp program ROM [CoolMod, MetalliC] --- src/mame/drivers/naomi.cpp | 292 +++++++++++++++++++++---------------- 1 file changed, 164 insertions(+), 128 deletions(-) diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index deb43d7b4a6..1458aa9ca1b 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -327,19 +327,21 @@ Crazy Taxi 840-0002C ? 13 (64Mb) ? Ferrari F355 Challenge (twin/deluxe, preview) no cart 22848P* 21 (64Mb) present 315-6206 317-0267-COM * other ROM board we've seen had 2x flashroms PCB instead of IC22 EEPROM, contents is the same. /Ferrari F355 Challenge 2 - International \Course Edition (twin/deluxe, prototype) no cart 23399 21 (64Mb) present 315-6206 317-0287-COM content is the same as regular 171-7919A cart -Mushiking (MUSHIUSA '04 1ST, Prototype) no sticker none 11*(64Mb) present 315-6206 not present * only first 7 flash roms contain game data, PCB have label 840-0150B-FLS. Inu No Osanpo / Dog Walking (Rev A) 840-0073C 22294A 16 (64Mb) present 315-6206 317-0316-JPN requires 837-13844 JVS IO with DIPSW 1 ON -Samba de Amigo (prototype) no cart * 21*(64Mb) present 315-6206 317-0270-COM * only first 14 flash roms contain game data, instead of EPROM have tiny PCB with 2 flashroms on it -Shootout Pool Prize Ver.B -P 840-0136C ** 21*(64Mb) present 317-6206 not present * only first 4 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it +/Mushiking The King Of Beetle +\(MUSHIUSA '04 1ST, Prototype) not present none 11*(64Mb) present 315-6206 not present * only first 7 flash roms contain game data, PCB have label 840-0150B-FLS. +Samba de Amigo (prototype) no cart ** 21*(64Mb) present 315-6206 317-0270-COM * only first 14 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it +/Shootout Pool Prize (Export) / Shootout +\Pool The Medal (Japan) Version B (prototype) 840-0136C ** 21*(64Mb) present 317-6206 not present * only first 4 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it Soul Surfer (Rev A) 840-0095C 23838C 21 (64Mb) present 315-6206 not present Star Horse (live and backup) 840-0055B 23626 17 (64Mb) present 315-6206 not present requires 837-13785 ARCNET&IO BD -Horse Data 840-0034B - 2 (64Mb) present 315-6206 not present not contain game data, used in stack with 840-0121(sound&backup) ROM board as game backup data storage, have JP3 and JP4 in position 2-3 +Star Horse Progress (backup data) 840-0034B - 2 (64Mb) present 315-6206 not present not contain game data, used in stack with 840-0121(sound&backup) ROM board as game backup data storage, have JP3 and JP4 in position 2-3 The House of the Dead 2 (prototype) no cart A1E2 21 (64Mb) present 315-6206 present no label on IC42 -The King of Route 66 (prototype) no cart 23819* 21 (64Mb) present 315-6206 not present * flash-PCB with printed label "EPR-23819 IC22 0109 CHK" handwritten "1/11" -The King of Route 66 (Rev A) 840-0087C 23819A 20 (64Mb) present 315-6206 not present content is the same as regular 171-8132A cart +The King of Route 66 (prototype) no cart 23819* 21 (64Mb) present 315-6206 not present * flash-PCB with printed label "EPR-23819 IC22 0109 CHK" handwritten "1/11" - it is assumed that only 20 flash roms are used +The King of Route 66 (Rev A) 840-0087C 23819A 20 (64Mb) present 315-6206 not present content is the same as regular 171-8132B cart The Maze of the Kings (prototype) no cart * 21 (64Mb) present 315-6206 FRI * flash-PCB, not dumped but known to exist Tokyo Bus Guide (Rev A) 840-0045C 23468A 18 (64Mb) present 315-6206 317-0290-COM requires 837-13844 JVS IO -Virtua Athletics (prototype) no cart none 21*(64Mb) present 315-6206 present * only first 14 flash roms contain game data, have Japan text label "Overseas sales (NA & EU)" +Virtua Athletics / Virtua Athlete (prototype) no cart none 21*(64Mb) present 315-6206 present * only first 14 flash roms contain game data, have Japan text label "Overseas sales (NA & EU)" Virtua NBA (prototype) no cart * 21 (64Mb) present 315-6206 317-0271-COM * instead of EPROM have tiny PCB with 2 flashroms on it Virtua NBA (prototype, 15.11) no cart * 21 (64Mb) present 315-6206 317-0271-COM * instead of EPROM have tiny PCB with 2 flashroms on it Virtua Tennis / Power Smash (prototype) no cart * 21 (64Mb) present 315-6206 317-0263-COM * flash-PCB, title screen have label "SOFT R&D Dept.#3", not dumped but known to exist @@ -379,7 +381,9 @@ Games known to use this PCB include.... Sticker EPROM mask ROMs X76F100 XC9536 315-5881 Game on cart IC22# # of SOP44 IC37# IC41# IC42# Notes ------------------------------------------------------------------------------------------------------------------------------ -18 Wheeler (deluxe) (Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM +18 Wheeler (deluxe) ? 22185 20 (64Mb) ? ? ? +18 Wheeler (deluxe, Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM +18 Wheeler (deluxe, Rev T) ? 22185T 20 (64Mb) ? ? ? 18 Wheeler (standard) 840-0036C 23298 20 (64Mb) present 315-6213 317-0273-COM 18 Wheeler (upright) 840-0037C 23299 20 (64Mb) present 315-6213 317-0273-COM Airline Pilots (World, Rev B) ? 21787B 11 (64Mb) present 315-6213 317-0251-COM 2 known BIOS 21801 (USA), 21802 (EXP) @@ -391,16 +395,17 @@ Dead Or Alive 2 (Rev A) 841-0003C 22121A 21 (64Mb) Dead Or Alive 2 841-0003C-01 22207 21 (64Mb) present 315-6213 317-5048-COM have unlocked Tag and Survival game modes, possible USA or international release Dead Or Alive 2 Millennium 841-0003C DOA2 Ver.M 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons Death Crimson OX 841-0016C 23524 10 (64Mb) present 315-6213 317-5066-COM -Death Crimson OX 841-0016C 23524A 10 (64Mb) present 315-6213 317-5066-COM cart case had no revision label +Death Crimson OX (Rev A) 841-0016C 23524A 10 (64Mb) present 315-6213 317-5066-COM cart case had no revision label Dengen Tenshi Taisen Janshi Shangri-La 841-0004C 22060 12 (64Mb) ? 315-6213 317-5050-JPN -Derby Owners Club (Japan) (Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader +Derby Owners Club (Japan, Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader Derby Owners Club 2000 (Japan) * 22222 16 (64Mb) present 315-6213 not present * no cart, master unit stickers: 833-13937-01, DOC 4050-01, DOC S. not dumped. -Derby Owners Club 2000 Ver.2 (Japan) (Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present -Dynamite Baseball '99 (Japan) (Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player) +Derby Owners Club 2000 Ver.2 (Japan, Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present +Dynamite Baseball '99 (Japan, Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player) Dynamite Baseball NAOMI (Japan) 840-0001C 21575 21 (64Mb) ? 315-6213 317-0246-JPN requires special panel (joystick + 2 buttons + bat controller for each player) Ferrari F355 Challenge (deluxe, no link) 834-13842 21902 21 (64Mb) present 315-6213 317-0254-COM BIOS 21862 (JPN), 21863 (USA), 21864 (EXP) Ferrari F355 Challenge (twin/deluxe) 834-13950 22848 21 (64Mb) present 315-6213 317-0267-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP) -Ferrari F355 Challenge 2 (twin/deluxe) 840-0042C 23399 21 (64Mb) present 315-6213 317-0287-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP) +/Ferrari F355 Challenge 2 - International +\Course Edition (twin/deluxe) 840-0042C 23399 21 (64Mb) present 315-6213 317-0287-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP) Giant Gram: All Japan Pro Wrestling 2 840-0007C 21820 9 (64Mb) ? 315-6213 317-0253-JPN joystick + 3 buttons Guilty Gear X 841-0013C 23356 14 (64Mb) present 315-6213 317-5063-COM Gun Spike 841-0012C 23210 12 (64Mb) present 315-6213 317-5060-COM \same ROM board @@ -409,13 +414,15 @@ Heavy Metal Geomatrix (Rev B) HMG016007 23716A 11 (64Mb) Idol Janshi Suchie-Pai 3 841-0002C 21979 14 (64Mb) ? 315-6213 317-5047-JPN requires mahjong panel Jambo! Safari (Rev A) 840-0013C 22826A 8 (64Mb) ? 315-6213 317-0264-COM Mars TV 840-0025C 22993 15 (64Mb) present 315-6213 317-0274-JPN -Marvel Vs. Capcom 2 (USA) (Rev A) 841-0007C-01 23062A 14 (64Mb) present 315-6213 317-5053-COM +Marvel Vs. Capcom 2 (USA, Rev A) 841-0007C-01 23062A 14 (64Mb) present 315-6213 317-5053-COM OutTrigger 840-0017C 22163 19 (64Mb) ? 315-6213 317-0266-COM requires regular 837-13551 and 837-13938 rotary JVS boards, and special panel Power Stone 841-0001C 21597 8 (64Mb) present 315-6213 317-5046-COM joystick + 3 buttons Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? 315-6213 317-5052-COM -Ring Out 4x4 840-0004C 21779 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards -Samba de Amigo (Rev B) (Rev A) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it +Ring Out 4x4 ? 21779 10 (64Mb) ? ? ? +Ring Out 4x4 (Rev A) 840-0004C 21779A 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards +Samba de Amigo (Rev A) 840-0020C 22966A 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it +Samba de Amigo (Rev B) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires 837-13844 JVS IO with all DIPSW Off and fishing controller Sega Strike Fighter (Rev A) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on case Sega Strike Fighter (Rev A, no training mode) 840-0035C 23786A 20 (64Mb) present 315-6213 317-0281-COM have no training mode, "Rev. A" label on PCB, cart case have no revision label @@ -425,17 +432,20 @@ Spawn In the Demon's Hand (Rev B) 841-0005C 22977B 10 (64Mb) World Series 99 840-0012C 22059 21 (64Mb) ? 315-6213 317-0259-COM \same ROM board Super Major League 99 840-0012C-01 22059 21 (64Mb) ? 315-6213 317-0259-COM / The House of the Dead 2 834-13636 21385 20 (64Mb) not present not present \ ROM board type is 837-13390 -The House of the Dead 2 (USA) 834-13636-01 21585 20 (64Mb) not present not present / uses Lattice ispLSI 2032 80LJ instead of Xilinx +The House of the Dead 2 (Export) ? 21805 20 (64Mb) ? not present | uses Lattice ispLSI 2032 80LJ instead of Xilinx +The House of the Dead 2 (USA) 834-13636-01 21585 20 (64Mb) not present not present / The Typing of the Dead 840-0026C 23021 20 (64Mb) present 315-6213 not present The Typing of the Dead (Rev A) 840-0026C 23021A 20 (64Mb) present 315-6213 not present -Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer. +Touch de Uno! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer. Toy Fighter 840-0011C 22035 10 (64Mb) present 315-6212 317-0257-COM joystick + 3 buttons Virtua NBA 840-0021C 22949 21 (64Mb) present 315-6213 317-0271-COM Virtua NBA (USA) 840-0021C-01 23073 21 (64Mb) present 315-6213 not present PCB s/n is 840-0021B-01 +Virtua Striker 2 Ver. 2000 840-0010C 21929 14 (64Mb) ? ? ? Virtua Striker 2 Ver. 2000 (Rev C) 840-0010C 21929C 14 (64Mb)* present 315-6213 317-0258-COM joystick + 3 buttons *(+1x 32Mb) Virtua Tennis / Power Smash 840-0015C 22927 11 (64Mb) present 315-6213 317-0263-COM Virtual On Oratorio Tangram M.S.B.S. ver5.66 840-0028C 23198 13 (64Mb) ? 315-6213 317-0279-COM Zombie Revenge 840-0003C 21707 19 (64Mb) ? 315-6213 317-0249-COM joystick + 3 buttons +Zombie Revenge (Export) ? 21834 19 (64Mb) ? ? ? Zombie Revenge (Rev A) 840-0003C 21707A 19 (64Mb) present 315-6213 317-0249-COM joystick + 3 buttons @@ -477,7 +487,7 @@ Notes: JP6 - JUMPER Unknown function (1-2) SW1 - PUSHBUTTON SW2 - 8X2 DIPswitch - SCSI-CTRL - SCSI-II controller MB86604A + SCSI-CTRL - SCSI-II controller MB86604A (ic45) CNDB25 - DB-25 SCSI-II connector IC17S-IC38S - Intel DA28F640J5 FlashROM (SOP56), 64Mb. IC16 - EPROM (DIP42), not populated. @@ -529,7 +539,7 @@ Notes: On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS IC11 - EPROM (DIP42), either 27C160 or 27C322 JP1 - JUMPER Sets the size of the EPROM. 1-2 = 32M, 2-3 = 16M - IC13S - EEPROM (SOIC8) 25LC040 serial EEPROM + IC13S - EEPROM (SOIC8) 25LC040 serial EEPROM (on PCB etched as AT25010) IC14 - 256 x 9 AsyncFIFO, 5.0V (SOP28) IC15 - SRAM (SOJ28) 32kx8, IDT71256 IC17S-IC38S - MaskROM (SOP44), either 32Mb or 64Mb. Not all positions are populated @@ -540,25 +550,27 @@ from NAOMI side it read as X76F100-type, probably simulated by ACTEL FPGA. Actual data is shuffled, address bits 3 to 6 have reversed order, i.e. 8 7 3 4 5 6 2 1 0. Games known to use this PCB include.... - Sticker EPROM mask ROMs 25LC040 A54SX32 -Game on cart IC11# # of SOP44 IC13S# IC1# Notes ------------------------------------------------------------------------------------------------------------------------------------------------ -Club Kart: European Session (2003, Rev A) 840-0139C 24173A 18 (64Mb) present 317-0382-COM -Club Kart Prize (Rev A) 840-0129C 24082A 16 (64Mb) present 317-0368-COM requires Naomi-based hopper controller (Naomi bd + 840-0130 cart + 837-14381 "G2 EXPANSION BD") -Club Kart Prize Version B 840-0137C 24149 16 (64Mb) present 317-0368-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit) -Giant Gram 2000 840-0039C 23377 20 (64Mb) present 317-0296-COM -Kick '4' Cash 840-0140C 24212 16 (64Mb) present 317-0397-COM requires 837-14438 "SH I/O BD" hopper controller -Marvel Vs. Capcom 2 New Age of Heroes (Export) (Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin -Marvel Vs. Capcom 2 New Age of Heroes (Korea) (Rev A) 841-0007C-03 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin -MushiKing The King of Beetles 2K3 2ND 840-0150C 24217 6 (64Mb) present 317-0394-COM requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip -Quiz Ah Megamisama 840-0030C 23227 16 (64Mb) present 317-0280-JPN -Shootout Pool 840-0098C 23844 4 (64Mb) present 317-0336-COM requires regular 837-13551 and 837-13938 rotary JVS boards -Shootout Pool Prize / Shootout Pool The Medal (Rev A) 840-0128C 24065A 4 (64Mb) present 317-0367-COM requires Naomi-based hopper controller -Shootout Pool Prize Ver. B / Shootout Pool The Medal Ver. B 840-0136C 24148 4 (64Mb) present 317-0367-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit) -SWP Hopper Board 840-0130C 24083 20 (64Mb) present 317-0339-COM reused VF4 Evo ROM board with all maskroms still in place; there is an additional 837-14381 IO board -Touch de UNO! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer. -Virtua Fighter 4 Evolution 840-0106B 23934 20 (64Mb) present 317-0339-COM -Virtua Tennis 2 / Power Smash 2 (Rev A) 840-0084C 22327A 18 (64Mb) present 317-0320-COM + Sticker EPROM mask ROMs 25LC040 A54SX32 +Game on cart IC11# # of SOP44 IC13S# IC1# Notes +------------------------------------------------------------------------------------------------------------------------------------------ +Club Kart: European Session (2003, Rev A) 840-0139C 24173A 18 (64Mb) present 317-0382-COM +Club Kart Prize (Export, Japan, Rev A) 840-0129C 24082A 16 (64Mb) present 317-0368-COM requires Naomi-based hopper controller (Naomi bd + 840-0130 cart + 837-14381 "G2 EXPANSION BD") +Club Kart Prize Version B (Export, Japan) 840-0137C 24149 16 (64Mb) present 317-0368-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit) +Giant Gram 2000 840-0039C 23377 20 (64Mb) present 317-0296-COM +Kick '4' Cash 840-0140C 24212 16 (64Mb) present 317-0397-COM requires 837-14438 "SH I/O BD" hopper controller +Marvel Vs. Capcom 2 New Age of Heroes (Export, Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin +Marvel Vs. Capcom 2 New Age of Heroes (Korea, Rev A) 841-0007C-03 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin +MushiKing The King of Beetles 2K3 2ND 840-0150C 24217 6 (64Mb) present 317-0394-COM requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip +Quiz Ah Megamisama 840-0030C 23227 16 (64Mb) present 317-0280-JPN +Shootout Pool 840-0098C 23844 4 (64Mb) present 317-0336-COM requires regular 837-13551 and 837-13938 rotary JVS boards +/Shootout Pool Prize (Export) / +\Shootout Pool The Medal (Japan, Rev A) 840-0128C 24065A 4 (64Mb) present 317-0367-COM requires Naomi-based hopper controller +/Shootout Pool Prize (Export) / +\Shootout Pool The Medal (Japan) Version B 840-0136C 24148 4 (64Mb) present 317-0367-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit) +SWP Hopper Board 840-0130C 24083 20 (64Mb) present 317-0339-COM reused VF4 Evo ROM board with all maskROMs still in place; there is an additional 837-14381 IO board +Touch de Uno! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer. +Virtua Fighter 4 Evolution (World) 840-0106B 23934 20 (64Mb) present 317-0339-COM +Virtua Tennis 2 / Power Smash 2 (Rev A) 840-0084C 22327A 18 (64Mb) present 317-0320-COM PFSB 128M Mask ROM board @@ -602,10 +614,11 @@ Capcom Vs. SNK Millennium Fight 2000 841-0011C 23511 7 (128Mb) 3 Capcom Vs. SNK Millennium Fight 2000 (Rev A) 841-0011C 23511A 7 (128Mb) 315-6219 315-6213 317-5059-COM ? Date on screen: 000804 Capcom Vs. SNK Millennium Fight 2000 (Rev C) 841-0011C 23511C 7 (128Mb) 315-6319 315-6213 317-5059-COM ? Date on screen: 000904 Club Kart: European Session 840-0062C 23704 11 (128Mb) 315-6319A 315-6213 317-0313-COM present -Club Kart: European Session (Rev C) 840-0062C * 11 (128Mb) 315-6319A 315-6213 317-0313-COM present * EPR have handwritten Japanese label possibly readable as 'teteto 74 lcl' +Club Kart: European Session (Rev A) 840-0062C * 11 (128Mb) 315-6319A 315-6213 317-0313-COM present * EPR have handwritten Japanese label possibly readable as 'teteto 74 lcl' +Club Kart: European Session (Rev C) ? 23704C 11 (128Mb) ? ? ? ? Club Kart: European Session (Rev D) 840-0062C 23704D 11 (128Mb) 315-6319A 315-6213 317-0313-COM present Crackin' DJ 840-0043C 23450 10 (128Mb) 315-6319 315-6213 317-0288-COM ? requires regular 837-13551 and 837-13938 rotary JVS boards, and turntable simulation -Derby Owners Club II Ver.2.1 (Japan) (Rev B) 840-0083C 22306B 11 (128Mb) 315-6319A 315-6213 317-0327-JPN present +Derby Owners Club II Ver.2.1 (Japan, Rev B) 840-0083C 22306B 11 (128Mb) 315-6319A 315-6213 317-0327-JPN present Derby Owners Club World Edition (Rev B) 840-0088C 22336B 7 (128Mb) 315-6319A 315-6213 not present present Derby Owners Club World Edition (Rev C) 840-0088C 22336C 7 (128Mb) 315-6319A 315-6213 not present not present Derby Owners Club World Edition EX (Rev D) 840-0088C 22336D 7 (128Mb) 315-6319A 315-6213 not present not present 2 MaskROM are different from Rev C @@ -614,19 +627,19 @@ Mobile Suit Gundam: Federation Vs. Zeon 841-0017C 23638 10 (128Mb) 3 Moero! Justice Gakuen / Project Justice (Rev A) 841-0015C 23548A 11 (128Mb) 315-6319A 315-6213 317-5065-COM present MushiKing The King Of Beetles 2004 Second (Jpn) 840-0152C 24241 5 (128Mb) 315-6319A 315-6213 not present not present requires 610-0669 barcode reader MushiKing The King Of Beetles 2005 First (Jpn) 840-0158C 24286 7 (128Mb) 315-6319A 315-6213 not present not present requires 610-0669 barcode reader -Oinori-daimyoujin Matsuri 840-0126B 24053 5 (128Mb) 315-6319A 315-6213 not present not present requires 837-14274 "G2 EXPANSION BD" (similar to hopper 837-14381 but with ARC NET chip) +Oinori-daimyoujin Matsuri 840-0126B 24053 5 (128Mb) 315-6319A 315-6213 not present not present no cart, requires 837-14274 "G2 EXPANSION BD" (similar to hopper 837-14381 but with ARC NET chip) Samba de Amigo Ver. 2000 840-0047C 23600 11 (128Mb) 315-6319A 315-6213 317-0295-COM ? Star Horse (main screens) 840-0054C 23625 4 (128Mb) 315-6319 315-6213 not present present requires 837-13785 ARCNET&IO BD Star Horse (satellite) 840-0056C 23627 6 (128Mb)* 315-6319 315-6213 not present present * +1 (64Mb), requires 837-13785 ARCNET&IO BD -Star Horse 2001 (satellite) (Rev B) 840-0078B 23739B 7 (128Mb) 315-6319 315-6213 not present present requires 837-13785 ARCNET&IO BD +Star Horse 2001 (satellite, Rev B) 840-0078B 23739B 7 (128Mb) 315-6319A 315-6213 not present present requires 837-13785 ARCNET&IO BD Star Horse Progress (main screen, Rev B) 840-0120B 24087B 6 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD Star Horse Progress (sound & backup, Rev A) 840-0121B 24097A 6 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD Star Horse Progress (live, Rev A) 840-0122B 24107A 11 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD Star Horse Progress (satellite, Rev A) 840-0123B 24122A 7 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD The King of Route 66 (Rev A) 840-0087C 23819A 10 (128Mb) 315-6319A 315-6213 not present present -Virtua Fighter 4 840-0080C 23785 11 (128Mb) ? ? 317-0324-COM ? -Virtua Striker 3 840-0061C 23663 11 (128Mb) 315-6319A 315-6213 317-0310-COM ? -Virtua Striker 3 (Rev B) 840-0061C 23663B 11 (128Mb) 315-6319A 315-6213 317-0310-COM present +Virtua Fighter 4 (World) 840-0080C 23785 11 (128Mb) ? ? 317-0324-COM ? +Virtua Striker 3 (World) 840-0061C 23663 11 (128Mb) 315-6319A 315-6213 317-0310-COM present +Virtua Striker 3 (World, Rev B) 840-0061C 23663B 11 (128Mb) 315-6319A 315-6213 317-0310-COM present Wave Runner GP 840-0064C 24059 6 (128Mb) 315-6319A 315-6213 not present present Wild Riders 840-0046C 23622 10 (128Mb) 315-6319A 315-6213 317-0301-COM ? WWF Royal Rumble 840-0040C 22261 8 (128Mb) 315-6319 315-6213 317-0285-COM ? @@ -667,20 +680,23 @@ Notes: CN4 - 6 legs connector for ISP programming Games known to use this PCB include.... - Sticker EPROM FLASHROMs XC3S50 PIC16C621A XCF01S -Game on cart IC7# # of SOP56 IC2# IC3# IC4# Notes + Sticker EPROM FLASHROMs XC3S50 PIC16C621A XCF01S +Game on cart IC7# # of SOP56 IC2# IC3# IC4# Notes ------------------------------------------------------------------------------------------------------------------------------------------- Akatsuki Blitzkampf Ausf. Achse 841-0058C not present 4 (512Mb) present 317-5130-JPN present IC2# is labeled "VER.2" - IC4# is marked "5A" - IC#10 & IC#11 are empty -Dynamite Deka EX / Asian Dynamite 840-0175C not present 4 (512Mb) present 317-0495-COM present IC2# is labeled "VER.2" -Dynamite Deka EX / Asian Dynamite (older) 840-0175C not present 4 (512Mb) present 317-0495-COM present 2x PCBs dumped, 840-0175B and 840-0168B, contents is the same. +Asian Dynamite / Dynamite Deka EX 840-0175C not present 4 (512Mb) present 317-0495-COM present IC2# is labeled "VER.2" +Asian Dynamite / Dynamite Deka EX (older) 840-0175C not present 4 (512Mb) present 317-0495-COM present 2x PCBs dumped, 840-0175B and 840-0168B, contents is the same. Illvelo (Illmatic Envelope) 841-0059C not present 4 (512Mb) present 317-5131-JPN present IC2# is labeled "VER.2" - IC#11 is empty Mamoru-kun wa Norowarete Shimatta 841-0060C not present 4 (512Mb) present 317-5132-JPN present IC2# is labeled "VER.2" Manic Panic Ghost! (USA) 840-0170C-01 not present 5 (512Mb) present 317-0461-COM present requires 837-14672 sensor board (SH4 based) - PCB s/n is 840-0170B-01 -Melty Blood Actress Again 841-0061C not present 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A" +Melty Blood Actress Again (Japan) 841-0061C not present 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A" Melty Blood Actress Again Version A (Rev A) 841-0061C 24455 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A" -Mushiking - The King Of Beetles II ENG (Ver. 1.001) 840-0164C not present 2 (512Mb) present 317-0437-COM present requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip -Mushiking - The King Of Beetles II ENG (Ver. 2.001) 840-0164C 24357 2 (512Mb) present 317-0437-COM present IC4# is marked "18" -Mushiking - The King Of Beetles IV ENG 840-0180C not present 2 (512Mb) present 317-0437-COM present IC2# is labeled "VER.1", IC4# is marked "8A", requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip +/Mushiking The King Of Beetles +\Mushiking II / III / III+ (Ver. 1.001) (World) 840-0164C not present 2 (512Mb) present 317-0437-COM present requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip +/Mushiking The King Of Beetles +\Mushiking II / III / III+ (Ver. 2.001) (World) 840-0164C 24357 2 (512Mb) present 317-0437-COM present IC4# is marked "18" +/Mushiking The King Of Beetles +\Mushiking IV / V / VI (World) 840-0180C not present 2 (512Mb) present 317-0437-COM present IC2# is labeled "VER.1", IC4# is marked "8A", requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip Pokasuka Ghost! 840-0170C not present 5 (512Mb) present 317-0461-COM present requires 837-14672 sensor board (SH4 based) Radirgy Noa 841-0062C not present 4 (512Mb) present 317-5138-JPN present IC2# is labeled "VER.2" - IC4# is marked "8A" Rhythm Tengoku 841-0177C not present 4 (512Mb) present 317-0503-JPN present IC2# is labeled "VER.2" - IC4# is marked "8A" @@ -730,22 +746,23 @@ Notes: CN1/2/3 - connectors joining to main board Games known to use this PCB include.... - Cart Sticker FL0-FL3 FLASHROMs X76F100 EPM7064 EPM7064 315-5881 Known Game - Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 1H IC @ 2K IC @ 1M code (1) Notes -------------------------------------------------------------------------------------------------------------------------------------------------------------- + Cart Sticker FL0-FL3 FLASHROMs X76F100 EPM7064 EPM7064 315-5881 Known Game + Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 1H IC @ 2K IC @ 1M code (1) Notes +-------------------------------------------------------------------------------------------------------------------------------------------------------------- /Gun Survivor 2 Biohazard -\Code: Veronica (Japan, Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF1 uses Namco FCA JVS I/O (not dumped), will crash if COMM.BOARD not present +\Code: Veronica (Japan, BHF1 Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF1 uses Namco FCA JVS I/O (not dumped), will crash if COMM.BOARD not present /Gun Survivor 2 Biohazard -\Code: Veronica (World, Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF2 -/Shin Nihon Prowrestling Toukon /FL0 & FL1 have pin55 raised from PCB. -\Retsuden 4 Arcade Edition (Japan, Ver.A) F2X 25349801 2 (64Mb) 15 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM TRF1 \They are connected together and go to pin89 on 2K. -World Kicks PCB (Japan, WKC1 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC1 uses Namco V226 JVS I/O (not dumped) -World Kicks PCB (World, WKC2 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC2 -World Kicks (Japan, WK1 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK1 -World Kicks (World, WK2 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK2 -World Kicks (US, WK3 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK3 +\Code: Veronica (World, BHF2 Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF2 +/Shin Nihon Prowrestling Toukon Retsuden 4 /FL0 & FL1 have pin55 raised from PCB. +\Arcade Edition (Japan, TRF1 Ver.A) F2X 25349801 2 (64Mb) 15 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM TRF1 \They are connected together and go to pin89 on 2K. +World Kicks PCB (Japan, WKC1 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC1 uses Namco V226 JVS I/O (not dumped) +World Kicks PCB (World, WKC2 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC2 uses Namco V226 JVS I/O (not dumped) +World Kicks (Japan, WK1 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK1 +World Kicks (World, WK2 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK2 +World Kicks (US, WK3 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK3 -(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = Asia, 3 = US, 4 = World. +(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = World, 3 = US, 4 = Asia. + real meaning of 2 and 4 is not clear, it can be like "some other part of World", also possible Europe MASK C (C) Namco 2000 @@ -786,17 +803,18 @@ Notes: CN1/2/3 - connectors joining to main board Games known to use this PCB include.... - Cart Sticker FL0-FL3 FLASHROMs X76F100 CY37128 315-5881 Known Game - Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 2J IC @ 1M code (1) Notes + Cart Sticker FL0-FL3 FLASHROMs X76F100 CY37128 315-5881 Known Game + Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 2J IC @ 1M code (1) Notes ---------------------------------------------------------------------------------------------------------------------------------------- -Mazan: Flash of the Blade (World, Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ2 uses 2x Namco FCB JVS I/O (not dumped) -Mazan: Flash of the Blade (US, Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ3 -Ninja Assault (Japan, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA1 uses Namco JYU JVS I/O -Ninja Assault (World, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA2 -Ninja Assault (US, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA3 -Ninja Assault (Asia, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA4 +Mazan: Flash of the Blade (World, MAZ2 Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ2 uses 2x Namco FCB JVS I/O (not dumped) +Mazan: Flash of the Blade (US, MAZ3 Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ3 +Ninja Assault (Japan, NJA1 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA1 uses Namco JYU JVS I/O +Ninja Assault (World, NJA2 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA2 +Ninja Assault (US, NJA3 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA3 +Ninja Assault (Asia, NJA4 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA4 -(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = Asia, 3 = US, 4 = World. +(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = World, 3 = US, 4 = Asia. + real meaning of 2 and 4 is not clear, it can be like "some other part of World", also possible Europe Note! Generally, games that require a special I/O board or controller will not boot at all with a standard NAOMI I/O board. Usually they display a message saying the I/O board is not acceptable @@ -5487,7 +5505,7 @@ ROM_START( 18wheelro ) ROM_PARAMETER( ":rom_board:segam2crypt:key", "2807cf54" ) ROM_END -/* 18 Wheeler (deluxe) (Rev A) */ +/* 18 Wheeler (deluxe, Rev A) */ ROM_START( 18wheelr ) NAOMI_BIOS NAOMI_DEFAULT_EEPROM @@ -5531,7 +5549,7 @@ ROM_START( 18wheelr ) ROM_PARAMETER( ":rom_board:segam2crypt:key", "2807cf54" ) ROM_END -/* 18 Wheeler (deluxe) (Rev T) */ +/* 18 Wheeler (deluxe, Rev T) */ ROM_START( 18wheelrt ) NAOMI_BIOS NAOMI_DEFAULT_EEPROM @@ -6085,6 +6103,9 @@ ROM_START( qmegamis ) ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) + /* ROM_REGION(0x200, "some_eeprom", 0) + ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */ + // 840-0030 2000 317-0280-JPN Naomi ROM_PARAMETER( ":rom_board:key", "cd9b4896" ) ROM_END @@ -6246,6 +6267,9 @@ ROM_START( shootopl ) ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) + /* ROM_REGION(0x200, "some_eeprom", 0) + ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */ + // 840-0098 2002 317-0336-COM Naomi ROM_PARAMETER( ":rom_board:key", "a0f37ca7" ) ROM_END @@ -6285,6 +6309,9 @@ ROM_START( shootplm ) ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) + /* ROM_REGION(0x200, "some_eeprom", 0) + ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */ + // 840-0136 2002 317-0367-COM Naomi ROM_PARAMETER( ":rom_board:key", "9dbde9cd" ) ROM_END @@ -7507,6 +7534,9 @@ ROM_START( vtenis2c ) ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) + /* ROM_REGION(0x200, "some_eeprom", 0) + ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */ + // 840-0084 2001 317-0320-COM Naomi ROM_PARAMETER( ":rom_board:key", "2d2d4743" ) ROM_END @@ -9589,6 +9619,9 @@ ROM_START( vf4evoct ) ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) + /* ROM_REGION(0x200, "some_eeprom", 0) + ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */ + // 840-0106 2002 317-0339-COM Naomi 2 ROM_PARAMETER( ":rom_board:key", "1e5bb0cd" ) ROM_END @@ -9793,6 +9826,9 @@ ROM_START( clubk2k3 ) ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) +/* ROM_REGION(0x200, "some_eeprom", 0) + ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */ + // 840-0139 2003 317-0382-COM Naomi 2 ROM_PARAMETER( ":rom_board:key", "d8b0fa4c" ) ROM_END @@ -9803,7 +9839,7 @@ ROM_START( clubk2kp ) NAOMI_DEFAULT_EEPROM ROM_REGION( 0xa000000, "rom_board", ROMREGION_ERASEFF) - ROM_LOAD( "ic22.bin", 0x0000000, 0x400000, CRC(1e601d98) SHA1(70d244c1b7cde236d833585b8d2064ba6d727825) ) // flash ROM module + ROM_LOAD( "ic22.bin", 0x0000000, 0x400000, CRC(334fc561) SHA1(e8c8707b0d13216ec7071da05823e330deb810d4) ) // flash ROM module // game data ROMs not dumped, not the same as regular revision. technically, all below should be marked as NO_DUMP. ROM_LOAD32_WORD( "opr-24151.ic17s", 0x1000000, 0x800000, CRC(91594439) SHA1(a195bfe0c70a0c7048b547af0a92c98d126230c6) ) ROM_LOAD32_WORD( "opr-24152.ic18", 0x1000002, 0x800000, CRC(fd131f88) SHA1(bc27b3ab5b41a3fe33b541b7cca28d6baed157b3) ) @@ -10721,7 +10757,7 @@ ROM_START( ggisuka ) ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE) ROM_LOAD( "ax1201p01.ic18", 0x0000000, 0x0800000, CRC(0a78d52c) SHA1(e9006dc43cd11d5ba49a092a1dff31dc10700c28) ) - ROM_LOAD( "ax1201m01.ic10", 0x0800000, 0x1000000, CRC(df96ce30) SHA1(25a9f743b1c2b11896d0c7a2dc1c198fc977aaca) ) // 2x mirrored 8MB data, TODO: check is IC10 Mask ROM not 16MB but 8MB + ROM_LOAD( "ax1201m01.ic10", 0x0800000, 0x1000000, CRC(df96ce30) SHA1(25a9f743b1c2b11896d0c7a2dc1c198fc977aaca) ) // 2x mirrored 8MB data, TODO: check if IC10 mask ROM not 16MB but 8MB ROM_LOAD( "ax1202m01.ic11", 0x1000000, 0x1000000, CRC(dfc6fd67) SHA1(f9d35b18a03d22f70feda42d314b0f9dd54eea55) ) ROM_LOAD( "ax1203m01.ic12", 0x2000000, 0x1000000, CRC(bf623df9) SHA1(8b9a8e8100ff6d2ce9a982ab8eb1d542f1c7af03) ) ROM_LOAD( "ax1204m01.ic13", 0x3000000, 0x1000000, CRC(c80c3930) SHA1(5c39fde36e2ebbfe72967d7d0202eb454a8d3bbe) ) @@ -11086,8 +11122,8 @@ ROM_END /* 0021-01 */ GAME( 2000, virnba, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Virtua NBA (USA)", GAME_FLAGS ) /* 0022 */ GAME( 2000, tduno2, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Touch de Uno! 2 (Japan)", GAME_FLAGS ) /* 0023 */ GAME( 2000, 18wheelro, 18wheelr, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe)", GAME_FLAGS ) -/* 0023 */ GAME( 2000, 18wheelr, naomi, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe) (Rev A)", GAME_FLAGS ) -/* 0023 */ GAME( 2000, 18wheelrt, 18wheelr, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe) (Rev T)", GAME_FLAGS ) +/* 0023 */ GAME( 2000, 18wheelr, naomi, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe, Rev A)", GAME_FLAGS ) +/* 0023 */ GAME( 2000, 18wheelrt, 18wheelr, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe, Rev T)", GAME_FLAGS ) /* 0025 */ GAME( 1999, marstv, naomi, naomim2, marstv, naomi_state, init_naomi, ROT0, "Sega", "Mars TV (Japan)", GAME_FLAGS ) /* 0026 */ GAME( 2000, totdo, totd, naomim2_kb, naomi_kb, naomi_state, init_naomi, ROT0, "Sega", "The Typing of the Dead", GAME_FLAGS ) /* 0026 */ GAME( 2000, totd, naomi, naomim2_kb, naomi_kb, naomi_state, init_naomi, ROT0, "Sega", "The Typing of the Dead (Rev A)", GAME_FLAGS ) @@ -11117,7 +11153,7 @@ ROM_END /* 0064 */ GAME( 2001, wrungpo, wrungp, naomim2, naomi, naomi_state, init_naomi, ROT0, "CRI / Sega", "Wave Runner GP (USA, Rev A)", GAME_FLAGS ) /* 0064 */ GAME( 2001, wrungp, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "CRI / Sega", "Wave Runner GP", GAME_FLAGS ) /* 0068 */ GAME( 2001, crakndj2, naomi, naomim2, crackndj,naomi_state, init_naomi, ROT0, "Sega", "Crackin' DJ Part 2 (Japan)", GAME_FLAGS ) -/* 0073 */ GAME( 2001, inunoos, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega / Cave", "Inu No Osanpo / Dog Walking (Japan, Export, Rev A)", GAME_FLAGS ) +/* 0073 */ GAME( 2001, inunoos, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Wow Entertainment / Sega", "Inu No Osanpo / Dog Walking (Japan, Export, Rev A)", GAME_FLAGS ) /* 0078 */ GAME( 2002, shors2k1, naomi, naomim2, naomi, naomi_state, init_naomi, ROT270,"Sega", "Star Horse 2001 (satellite, Rev B)", GAME_FLAGS ) /* 0083 */ GAME( 2001, derbyoc2, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Derby Owners Club II Ver.2.1 (Japan, Rev B)", GAME_FLAGS ) /* 0084 */ GAME( 2001, vtenis2c, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (Rev A)", GAME_FLAGS ) @@ -11130,7 +11166,7 @@ ROM_END /* 0122 */ GAME( 2003, shorsepl, shorsep, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Star Horse Progress (live, Rev A)", GAME_FLAGS ) /* 0123 */ GAME( 2003, shorsep, naomi, naomim2, naomi, naomi_state, init_naomi, ROT270,"Sega", "Star Horse Progress (satellite, Rev A)", GAME_FLAGS ) /* 0126 */ GAME( 2003, oinori, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Oinori-daimyoujin Matsuri", GAME_FLAGS ) -/* 0128 */ GAME( 2003, shootpl, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) (Rev A)", GAME_FLAGS ) +/* 0128 */ GAME( 2003, shootpl, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan, Rev A)", GAME_FLAGS ) /* 0130 */ GAME( 2002, hopper, naomi, naomi, naomi, naomi_state, init_naomi, ROT0, "Sega", "SWP Hopper Board", GAME_FLAGS ) // 0132 Mushiking 2K3 2ND (Japan) /* 0136 */ GAME( 2004, shootplm, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B", GAME_FLAGS ) // Build: 23 Jan 2004 @@ -11145,41 +11181,41 @@ ROM_END /* 0166 */ GAME( 2006, zunou, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Touch De Zunou (Japan, Rev A)", GAME_FLAGS ) /* 0170-01 */ GAME( 2007, manicpnc, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Manic Panic Ghosts! (USA, Export)", GAME_FLAGS ) /* 0170 */ GAME( 2007, pokasuka, manicpnc, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Pokasuka Ghost! (Japan)", GAME_FLAGS ) -// 0171 Mushiking 2K6 2ND (Japan) +// 0171 Mushiking 2K6 2ND (Japan) note: starting from ver 2K6 was moved to SystemSP platform and later to PC-based hardware /* 0175 */ GAME( 2007, asndynmt, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Asian Dynamite / Dynamite Deka EX", GAME_FLAGS ) /* 0175 */ GAME( 2007, asndynmto, asndynmt, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Asian Dynamite / Dynamite Deka EX (older)", GAME_FLAGS ) // no revision stickers, presumably older revision but might be release for Asian market /* 0177 */ GAME( 2007, rhytngk, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega / Nintendo - J.P ROOM", "Rhythm Tengoku (Japan)", GAME_FLAGS ) /* 0180 */ GAME( 2007, mushik4e, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetles - Mushiking IV / V / VI (World)", GAME_FLAGS ) // not for Japan or Korea, version can be changed in secret menu, ~equivalent of Japanese 2K6 versions. /* 0186 */ GAME( 2009, shorsepr, naomi, naomim4, naomi, naomi_state, init_naomi, ROT270,"Sega", "Star Horse Progress Returns (satellite)", GAME_FLAGS ) -// 0xxx Mushiking 2K3 1ST (Japan) -// 0xxx Mushiking 2K4 1ST (Japan) -// 0xxx Mushiking 2K5 2ND (Japan) note: starting from ver 2K6 2ND was moved to SystemSP platform and later to PC-based hardware +// 00xx Mayjinsen (Formation Battle in May) - prototype, never released +// 01xx Mushiking 2K3 1ST (Japan) +// 01xx Mushiking 2K4 1ST (Japan) +// 01xx Mushiking 2K5 2ND (Japan) // 0xxx Star Horse 2001 (main screens, server) // 0xxx Star Horse 2002 (whole set) // 0xxx Star Horse Progress Returns (main screens, server) -// 00xx Mayjinsen (Formation Battle in May) - prototype, never released /* Cartridge prototypes of games released on GD-ROM */ /* none */ GAME( 2003, puyofevp, puyofev, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Puyo Puyo Fever (prototype ver 0.01)", GAME_FLAGS ) /* none */ GAME( 2001, vathletep, vathlete, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Virtua Athletics / Virtua Athlete (prototype)", GAME_FLAGS ) /* 840-xxxxx (Sega Naomi 2 cart games) */ -/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Wild Riders", GAME_FLAGS ) -/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Striker 3 (World)", GAME_FLAGS ) // not for Japan -/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Striker 3 (World, Rev B)", GAME_FLAGS ) // not for Japan -/* 0062 */ GAME( 2001, clubkrto, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS ) -/* 0062 */ GAME( 2001, clubkrta, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev A)", GAME_FLAGS ) -/* 0062 */ GAME( 2001, clubkrtc, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS ) -/* 0062 */ GAME( 2001, clubkrt, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS ) -/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (World)", GAME_FLAGS ) // not for Japan -/* none */ GAME( 2002, kingrt66p,kingrt66,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (prototype)", GAME_FLAGS ) -/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (Rev A)", GAME_FLAGS ) -/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS ) -/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (World)", GAME_FLAGS ) // not for Japan -/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan)", GAME_FLAGS ) -/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS ) -/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS ) -/* none */ GAME( 2003, clubk2kp, clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype)", GAME_FLAGS ) +/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Wow Entertainment / Sega", "Wild Riders", GAME_FLAGS ) +/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Amusement Vision / Sega", "Virtua Striker 3 (World)", GAME_FLAGS ) // not for Japan +/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Amusement Vision / Sega", "Virtua Striker 3 (World, Rev B)", GAME_FLAGS ) // not for Japan +/* 0062 */ GAME( 2001, clubkrto, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS ) +/* 0062 */ GAME( 2001, clubkrta, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev A)", GAME_FLAGS ) +/* 0062 */ GAME( 2001, clubkrtc, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS ) +/* 0062 */ GAME( 2001, clubkrt, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS ) +/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (World)", GAME_FLAGS ) // not for Japan +/* none */ GAME( 2002, kingrt66p,kingrt66,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (prototype)", GAME_FLAGS ) +/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (Rev A)", GAME_FLAGS ) +/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS ) +/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (World)", GAME_FLAGS ) // not for Japan +/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan, Rev A)", GAME_FLAGS ) +/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS ) +/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS ) +/* none */ GAME( 2003, clubk2kp, clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype)", GAME_FLAGS ) /* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/ /* 0001 */ GAME( 1999, pstone, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Capcom", "Power Stone", GAME_FLAGS ) @@ -11209,9 +11245,9 @@ ROM_END /* 0058 */ GAME( 2008, ausfache, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Subtle Style", "Akatsuki Blitzkampf Ausf. Achse (Japan)", GAME_FLAGS ) /* 0059 */ GAME( 2008, illvelo, naomi, naomim4, naomi, naomi_state, init_naomi, ROT270,"Milestone", "Illvelo (Illmatic Envelope) (Japan)", GAME_FLAGS ) /* 0060 */ GAME( 2008, mamonoro, naomi, naomim4, naomi, naomi_state, init_naomi, ROT270,"G.Rev", "Mamoru-kun wa Norowarete Shimatta! (Japan)", GAME_FLAGS ) -/* 0061 */ GAME( 2008, mbaao, mbaa, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon/Ecole", "Melty Blood Actress Again (Japan)", GAME_FLAGS ) -/* 0061 */ GAME( 2008, mbaa, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon/Ecole", "Melty Blood Actress Again Version A (Japan, Rev A)", GAME_FLAGS ) -/* 0062 */ GAME( 2009, radirgyn, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Milestone/Lucky", "Radirgy Noa (Japan)", GAME_FLAGS ) +/* 0061 */ GAME( 2008, mbaao, mbaa, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon / Ecole", "Melty Blood Actress Again (Japan)", GAME_FLAGS ) +/* 0061 */ GAME( 2008, mbaa, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon / Ecole", "Melty Blood Actress Again Version A (Japan, Rev A)", GAME_FLAGS ) +/* 0062 */ GAME( 2009, radirgyn, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Milestone / Lucky", "Radirgy Noa (Japan)", GAME_FLAGS ) /* HMG016007 */ GAME( 2001, hmgeo, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Capcom", "Heavy Metal Geomatrix (Rev B)", GAME_FLAGS ) /* Cart games on Namco custom ROM board @@ -11251,13 +11287,13 @@ ROM_END // 0009 Dynamic Golf / Virtua Golf (GDS-0009) /* 0009A */ GAME( 2001, dygolf, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Golf / Dynamic Golf (Rev A) (GDS-0009A)", GAME_FLAGS ) /* 0010 */ GAME( 2001, wsbbgd, naomigd, naomigd, dybbnao, naomi_state, init_naomigd, ROT0, "Sega", "World Series Baseball / Super Major League (GDS-0010)", GAME_FLAGS ) -/* 0011 */ GAME( 1999, vtennisg, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Tennis / Power Smash (GDS-0011)", GAME_FLAGS ) +/* 0011 */ GAME( 2001, vtennisg, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Tennis / Power Smash (GDS-0011)", GAME_FLAGS ) /* 0012 */ GAME( 2001, vf4o, vf4, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (GDS-0012)", GAME_FLAGS ) // 0012A Virtua Fighter 4 (Rev A) (GDS-0012A) -/* 0012B */ GAME( 2001, vf4b, vf4, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (Rev B) (GDS-0012B)", GAME_FLAGS ) -/* 0012C */ GAME( 2001, vf4, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Version C (GDS-0012C)", GAME_FLAGS ) +/* 0012B */ GAME( 2001, vf4b, vf4, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (Rev B) (GDS-0012B)", GAME_FLAGS ) +/* 0012C */ GAME( 2001, vf4, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Version C (GDS-0012C)", GAME_FLAGS ) /* 0013 */ GAME( 2001, shaktmsp, naomigd, naomigd, shaktamb, naomi_state, init_naomigd, ROT0, "Sega", "Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR) (GDS-0013)", GAME_FLAGS ) -/* 0014 */ GAME( 2001, beachspi, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Beach Spikers (GDS-0014)", GAME_FLAGS ) +/* 0014 */ GAME( 2001, beachspi, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "CRI / Sega", "Beach Spikers (GDS-0014)", GAME_FLAGS ) // 0015 Virtua Tennis 2 / Power Smash 2 (GDS-0015) /* 0015A */ GAME( 2001, vtennis2, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A)", GAME_FLAGS ) /* 0016 */ GAME( 2001, shaktamb, naomigd, naomigd, shaktamb, naomi_state, init_naomigd, ROT0, "Sega", "Shakatto Tambourine Cho Powerup Chu (2K1 AUT) (GDS-0016)", GAME_FLAGS ) @@ -11266,8 +11302,8 @@ ROM_END /* 0018A */ GAME( 2001, lupinsho, naomigd, naomigd, hotd2, naomi_state, init_naomigd, ROT0, "Sega / Eighting", "Lupin The Third - The Shooting (Rev A) (GDS-0018A)", GAME_FLAGS ) /* 0019 */ GAME( 2001, vathlete, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Athletics / Virtua Athlete (GDS-0019)", GAME_FLAGS ) /* 0020 */ GAME( 2002, initdo, initd, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Japan) (GDS-0020)", GAME_FLAGS ) -// 0020A Initial D Arcade Stage (Rev A) (GDS-0020A) -/* 0020B */ GAME( 2002, initd, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Rev B) (Japan) (GDS-0020B)", GAME_FLAGS ) +// 0020A Initial D Arcade Stage (Japan, Rev A) (GDS-0020A) +/* 0020B */ GAME( 2002, initd, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Japan, Rev B) (GDS-0020B)", GAME_FLAGS ) // 0021 Lupin The Third - The Typing (GDS-0021) /* 0021A */ GAME( 2002, luptype, naomigd, naomigd_kb, naomi_kb, naomi_state, init_naomigd, ROT0, "Sega", "Lupin The Third - The Typing (Rev A) (GDS-0021A)", GAME_FLAGS ) /* 0022 */ GAME( 2002, mok, naomigd, naomigd, hotd2, naomi_state, init_naomigd, ROT0, "Sega", "The Maze of the Kings (GDS-0022)", GAME_FLAGS ) @@ -11282,10 +11318,10 @@ ROM_END /* 0024B */ GAME( 2002, vf4evob, vf4evo, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (Version B) (Japan) (GDS-0024B)", GAME_FLAGS ) /* 0024C */ GAME( 2002, vf4evo, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (Version B) (Japan) (GDS-0024C)", GAME_FLAGS ) /* 0025 */ GAME( 2002, initdexpo,initdexp,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Export) (GDS-0025)", GAME_FLAGS ) -/* 0025A */ GAME( 2002, initdexp, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Export) (Rev A) (GDS-0025A)", GAME_FLAGS ) +/* 0025A */ GAME( 2002, initdexp, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Export, Rev A) (GDS-0025A)", GAME_FLAGS ) /* 0026 */ GAME( 2002, initdv2jo,initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan) (GDS-0026)", GAME_FLAGS ) -/* 0026A */ GAME( 2002, initdv2ja,initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan) (Rev A) (GDS-0026A)", GAME_FLAGS ) -/* 0026B */ GAME( 2003, initdv2j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan) (Rev B) (GDS-0026B)", GAME_FLAGS ) +/* 0026A */ GAME( 2002, initdv2ja,initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan, Rev A) (GDS-0026A)", GAME_FLAGS ) +/* 0026B */ GAME( 2003, initdv2j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan, Rev B) (GDS-0026B)", GAME_FLAGS ) /* 0027 */ GAME( 2003, initdv2e, initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Export) (GDS-0027)", GAME_FLAGS ) // 0028 Shakka to Tambourine 4EVER (GD SOFT TMB 4EVER) /* 0029 */ GAME( 2003, clubkcyco,clubkcyc,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart for Cycraft (GDS-0029)", GAME_FLAGS ) @@ -11294,25 +11330,25 @@ ROM_END /* 0030B */ GAME( 2003, dragntr, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Dragon Treasure (Rev B) (GDS-0030B)", GAME_FLAGS ) /* 0031 */ GAME( 2003, puyofevj, puyofev, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Puyo Puyo Fever (Japan) (GDS-0031)", GAME_FLAGS ) // 0032 Initial D Arcade Stage Ver. 3 (Japan) (GDS-0032) -// 0032A Initial D Arcade Stage Ver. 3 (Japan) (Rev A) (GDS-0032A) -/* 0032B */ GAME( 2004, initdv3jb,initdv3j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan) (Rev B) (GDS-0032B)", GAME_FLAGS ) -/* 0032C */ GAME( 2004, initdv3j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan) (Rev C) (GDS-0032C)", GAME_FLAGS ) +// 0032A Initial D Arcade Stage Ver. 3 (Japan, Rev A) (GDS-0032A) +/* 0032B */ GAME( 2004, initdv3jb,initdv3j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan, Rev B) (GDS-0032B)", GAME_FLAGS ) +/* 0032C */ GAME( 2004, initdv3j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan, Rev C) (GDS-0032C)", GAME_FLAGS ) /* 0033 */ GAME( 2004, initdv3e, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Export) (GDS-0033)", GAME_FLAGS ) /* 0034 */ GAME( 2003, puyofev, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Puyo Pop Fever (World) (GDS-0034)", GAME_FLAGS ) // 0035 GD SOFT KIT DKG // 0036 Virtua Fighter 4 Final Tuned (GDS-0036) -/* 0036A */ GAME( 2004, vf4tuneda,vf4tuned,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (GDS-0036A)", GAME_FLAGS ) -// 0036B Virtua Fighter 4 Final Tuned (GDS-0036B) -// 0036C Virtua Fighter 4 Final Tuned (GDS-0036C) +/* 0036A */ GAME( 2004, vf4tuneda,vf4tuned,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (Rev A) (GDS-0036A)", GAME_FLAGS ) +// 0036B Virtua Fighter 4 Final Tuned (Rev B) (GDS-0036B) +// 0036C Virtua Fighter 4 Final Tuned (Rev C) (GDS-0036C) /* 0036D */ GAME( 2004, vf4tunedd,vf4tuned,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (Ver. A) (GDS-0036D)", GAME_FLAGS ) -// 0036E Virtua Fighter 4 Final Tuned (GDS-0036E) +// 0036E Virtua Fighter 4 Final Tuned (Rev E) (GDS-0036E) /* 0036F */ GAME( 2004, vf4tuned, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (Ver. B) (GDS-0036F)", GAME_FLAGS ) // 0037 Dragon Treasure 2 (GDS-0037) /* 0037A */ GAME( 2004, dragntr2, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Dragon Treasure 2 (Rev A) (GDS-0037A)", GAME_FLAGS ) // 0038 Initial D Arcade Stage Ver. 3 Cycraft Edition (Japan) (NAOMI2 GDROM TOS SP) // 0039 Initial D Arcade Stage Ver. 3 Cycraft Edition (Export) (GDS-0039) -/* 0039A */ GAME( 2004, inidv3ca, inidv3cy,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export) (Rev A) (GDS-0039A)", GAME_FLAGS ) -/* 0039B */ GAME( 2006, inidv3cy, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export) (Rev B) (GDS-0039B)", GAME_FLAGS ) +/* 0039A */ GAME( 2004, inidv3ca, inidv3cy,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export, Rev A) (GDS-0039A)", GAME_FLAGS ) +/* 0039B */ GAME( 2006, inidv3cy, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export, Rev B) (GDS-0039B)", GAME_FLAGS ) // 0040 NAOMI2 GDROM MTG // 0041 Dragon Treasure 3 (GDS-0041) /* 0041A */ GAME( 2005, dragntr3, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Dragon Treasure 3 (Rev A) (GDS-0041A)", GAME_FLAGS ) @@ -11329,12 +11365,12 @@ ROM_END /* 0005 */ GAME( 2001, starseek, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "G.Rev", "Doki Doki Idol Star Seeker (GDL-0005)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) /* 0006 */ GAME( 2001, gundmxgd, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom", "Mobile Suit Gundam: Federation Vs. Zeon DX (USA, Japan) (GDL-0006)", GAME_FLAGS ) // 0007 Capcom Vs. SNK 2 (Japan) (GDL-0007) -/* 0007A */ GAME( 2001, cvs2mf, cvs2, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom / SNK", "Capcom Vs. SNK 2 Millionaire Fighting 2001 (Japan) (Rev A) (GDL-0007A)", GAME_FLAGS ) +/* 0007A */ GAME( 2001, cvs2mf, cvs2, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom / SNK", "Capcom Vs. SNK 2 Millionaire Fighting 2001 (Japan, Rev A) (GDL-0007A)", GAME_FLAGS ) /* 0008 */ GAME( 2001, cvs2, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom / SNK", "Capcom Vs. SNK 2 Mark Of The Millennium 2001 (USA) (GDL-0008)", GAME_FLAGS ) // 0009 Capcom Vs. SNK 2 (Export) /* 0010 */ GAME( 2001, ikaruga, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT270, "Treasure", "Ikaruga (GDL-0010)", GAME_FLAGS ) /* 0011 */ GAME( 2002, ggxx, naomigd, naomigd, naomi, naomi_state, init_ggxx, ROT0,"Arc System Works","Guilty Gear XX (GDL-0011)", GAME_FLAGS ) -/* 0012 */ GAME( 2002, cleoftp, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Altron", "Cleopatra Fortune Plus (GDL-0012)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) +/* 0012 */ GAME( 2002, cleoftp, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Altron / Taito", "Cleopatra Fortune Plus (GDL-0012)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND ) /* 0013 */ GAME( 2002, moeru, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Altron", "Moeru Casinyo (Japan) (GDL-0013)", GAME_FLAGS ) // 0014 Musapey's Choco Marker (GDL-0014) /* 0014A */ GAME( 2002, chocomk, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Ecole Software", "Musapey's Choco Marker (Rev A) (GDL-0014A)", GAME_FLAGS ) From 4210ce2de00ab1bef328c4fa93ef49508db29e71 Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 16 Feb 2019 15:27:10 -0500 Subject: [PATCH 02/21] apple2: fix missing floating bus reads and improved joystick/paddle calibration [Golden Child] --- src/mame/drivers/apple2.cpp | 22 ++++++++-------- src/mame/drivers/apple2e.cpp | 48 ++++++++++++++++++----------------- src/mame/drivers/apple2gs.cpp | 21 +++++++-------- 3 files changed, 47 insertions(+), 44 deletions(-) diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index edfba571531..7e0b4bea203 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -313,8 +313,8 @@ void apple2_state::machine_start() m_inh_bank = 0; // precalculate joystick time constants - m_x_calibration = attotime::from_usec(12).as_double(); - m_y_calibration = attotime::from_usec(13).as_double(); + m_x_calibration = attotime::from_nsec(10800).as_double(); + m_y_calibration = attotime::from_nsec(10800).as_double(); // cache slot devices for (int i = 0; i <= 7; i++) @@ -630,33 +630,33 @@ READ8_MEMBER(apple2_state::flags_r) switch (offset) { case 0: // cassette in - return m_cassette->input() > 0.0 ? 0x80 : 0; + return (m_cassette->input() > 0.0 ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 1: // button 0 - return (m_joybuttons->read() & 0x10) ? 0x80 : 0; + return ((m_joybuttons->read() & 0x10) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 2: // button 1 - return (m_joybuttons->read() & 0x20) ? 0x80 : 0; + return ((m_joybuttons->read() & 0x20) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 3: // button 2 // check if SHIFT key mod configured if (m_sysconfig->read() & 0x04) { - return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | (read_floatingbus() & 0x3f); } - return (m_joybuttons->read() & 0x40) ? 0x80 : 0; + return ((m_joybuttons->read() & 0x40) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 4: // joy 1 X axis - return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 5: // joy 1 Y axis - return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 6: // joy 2 X axis - return (machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 7: // joy 2 Y axis - return (machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); } // this is never reached diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 6956d51b541..b560a9b8917 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -780,8 +780,8 @@ void apple2e_state::machine_start() } // precalculate joystick time constants - m_x_calibration = attotime::from_usec(12).as_double(); - m_y_calibration = attotime::from_usec(13).as_double(); + m_x_calibration = attotime::from_nsec(10800).as_double(); + m_y_calibration = attotime::from_nsec(10800).as_double(); // cache slot devices for (int i = 0; i <= 7; i++) @@ -1592,6 +1592,7 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) READ8_MEMBER(apple2e_state::c000_r) { if(machine().side_effects_disabled()) return read_floatingbus(); + u8 uFloatingBus7 = read_floatingbus() & 0x7f; if ((offset & 0xf0) == 0x00) // keyboard latch, $C000 is really 00-0F { @@ -1656,43 +1657,43 @@ READ8_MEMBER(apple2e_state::c000_r) case 0x68: if (m_cassette) { - return m_cassette->input() > 0.0 ? 0x80 : 0; + return (m_cassette->input() > 0.0 ? 0x80 : 0) | uFloatingBus7; } - return 0; + return uFloatingBus7; case 0x61: // button 0 or Open Apple case 0x69: - return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0) | uFloatingBus7; case 0x62: // button 1 or Solid Apple case 0x6a: - return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0) | uFloatingBus7; case 0x63: // button 2 or SHIFT key case 0x6b: - return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | uFloatingBus7; case 0x64: // joy 1 X axis case 0x6c: - return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | uFloatingBus7; case 0x65: // joy 1 Y axis case 0x6d: - return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | uFloatingBus7; case 0x66: // joy 2 X axis case 0x6e: - return (machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | uFloatingBus7; case 0x67: // joy 2 Y axis case 0x6f: - return (machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | uFloatingBus7; case 0x7e: // read IOUDIS - return m_ioudis ? 0x80 : 0x00; + return (m_ioudis ? 0x80 : 0x00) | uFloatingBus7; case 0x7f: // read DHIRES - return m_video->m_dhires ? 0x00 : 0x80; + return (m_video->m_dhires ? 0x00 : 0x80) | uFloatingBus7; default: do_io(space, offset, false); @@ -1833,6 +1834,7 @@ WRITE8_MEMBER(apple2e_state::c000_w) READ8_MEMBER(apple2e_state::c000_iic_r) { if(machine().side_effects_disabled()) return read_floatingbus(); + u8 uFloatingBus7 = read_floatingbus() & 0x7f; if ((offset & 0xf0) == 0x00) // keyboard latch, $C000 is really 00-0F { @@ -1908,43 +1910,43 @@ READ8_MEMBER(apple2e_state::c000_iic_r) return m_y0edge ? 0x80 : 0x00; case 0x60: // 40/80 column switch (IIc only) - return (m_sysconfig->read() & 0x04) ? 0x80 : 0; + return ((m_sysconfig->read() & 0x04) ? 0x80 : 0) | uFloatingBus7; case 0x61: // button 0 or Open Apple or mouse button 1 case 0x69: - return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0) | uFloatingBus7; case 0x62: // button 1 or Solid Apple case 0x6a: - return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0) | uFloatingBus7; case 0x63: // mouse button 2 (no other function on IIc) case 0x6b: - return m_mouseb->read() ? 0 : 0x80; + return (m_mouseb->read() ? 0 : 0x80) | uFloatingBus7; case 0x64: // joy 1 X axis case 0x6c: - return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | uFloatingBus7; case 0x65: // joy 1 Y axis case 0x6d: - return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | uFloatingBus7; case 0x66: // mouse X1 (IIc only) case 0x6e: - return m_x1 ? 0x80 : 0; + return (m_x1 ? 0x80 : 0) | uFloatingBus7; case 0x67: // mouse Y1 (IIc only) case 0x6f: - return m_y1 ? 0x80 : 0; + return (m_y1 ? 0x80 : 0) | uFloatingBus7; case 0x7e: // read IOUDIS m_vbl = false; lower_irq(IRQ_VBL); - return m_ioudis ? 0x80 : 0x00; + return (m_ioudis ? 0x80 : 0x00) | uFloatingBus7; case 0x7f: // read DHIRES - return m_video->m_dhires ? 0x00 : 0x80; + return (m_video->m_dhires ? 0x00 : 0x80) | uFloatingBus7; default: do_io(space, offset, true); diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index db2ab6bbdd5..efa0517557a 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -1212,8 +1212,8 @@ void apple2gs_state::machine_start() m_speaker->set_levels(16, lvlTable); // precalculate joystick time constants - m_x_calibration = attotime::from_usec(12).as_double(); - m_y_calibration = attotime::from_usec(13).as_double(); + m_x_calibration = attotime::from_nsec(10800).as_double(); + m_y_calibration = attotime::from_nsec(10800).as_double(); // cache slot devices for (int i = 0; i <= 7; i++) @@ -2029,6 +2029,7 @@ READ8_MEMBER(apple2gs_state::c000_r) } slow_cycle(); + u8 uFloatingBus7 = read_floatingbus(); switch (offset) { @@ -2272,28 +2273,28 @@ READ8_MEMBER(apple2gs_state::c000_r) return (m_an3 ? INTFLAG_AN3 : 0x00) | m_intflag; case 0x60: // button 3 on IIgs - return (m_joybuttons->read() & 0x80); + return (m_joybuttons->read() & 0x80) | uFloatingBus7; case 0x61: // button 0 or Open Apple - return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0) | uFloatingBus7; case 0x62: // button 1 or Solid Apple - return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0) | uFloatingBus7; case 0x63: // button 2 or SHIFT key - return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0; + return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | uFloatingBus7; case 0x64: // joy 1 X axis - return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | uFloatingBus7; case 0x65: // joy 1 Y axis - return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | uFloatingBus7; case 0x66: // joy 2 X axis - return (machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | uFloatingBus7; case 0x67: // joy 2 Y axis - return (machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0; + return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | uFloatingBus7; case 0x68: // STATEREG, synthesizes all the IIe state regs return (m_altzp ? 0x80 : 0x00) | From f7b53ed1bcf4845a75520ac5a6ae4320cb4fa972 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 16 Feb 2019 21:44:57 +0100 Subject: [PATCH 03/21] fidel68k: untangle fex68k with feag (nw) --- src/mame/drivers/fidel6502.cpp | 5 ++-- src/mame/drivers/fidel68k.cpp | 50 +++++++++++++++++++++++++++++----- src/mame/includes/fidelbase.h | 2 ++ 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index bc8082fe4ed..ce64ef56cec 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -476,7 +476,6 @@ public: fidel6502_state(const machine_config &mconfig, device_type type, const char *tag) : fidelbase_state(mconfig, type, tag), m_ppi8255(*this, "ppi8255"), - m_rombank(*this, "rombank"), m_mainmap(*this, "mainmap"), m_div_config(*this, "div_config") { } @@ -529,7 +528,6 @@ public: private: // devices/pointers optional_device m_ppi8255; - optional_memory_bank m_rombank; optional_device m_mainmap; optional_ioport m_div_config; @@ -1190,7 +1188,8 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_control_w) display_matrix(9, 2, m_inp_mux, ~m_led_select & 3, false); // 74259 Q2: book rom A14 - m_rombank->set_entry(~m_led_select >> 2 & 1); + if (m_rombank != nullptr) + m_rombank->set_entry(~m_led_select >> 2 & 1); // 74259 Q3: lcd common, update on rising edge if (~q3_old & m_led_select & 8) diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp index 8ee543db846..b7ccd80b23b 100644 --- a/src/mame/drivers/fidel68k.cpp +++ b/src/mame/drivers/fidel68k.cpp @@ -224,6 +224,10 @@ private: optional_device m_ram; // Excel 68000 + void fex68k_prepare_display(); + DECLARE_READ8_MEMBER(fex68k_input_r); + DECLARE_WRITE8_MEMBER(fex68k_leds_w); + DECLARE_WRITE8_MEMBER(fex68k_7seg_w); DECLARE_WRITE8_MEMBER(fex68k_mux_w); void fex68k_map(address_map &map); void fex68km2_map(address_map &map); @@ -257,6 +261,34 @@ private: Excel 68000 ******************************************************************************/ +void fidel68k_state::fex68k_prepare_display() +{ + // 4*7seg leds, 8*8 chessboard leds + u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4); + set_display_segmask(0x55, 0x7f); + display_matrix(16, 8, m_led_data << 8 | seg_data, m_inp_mux); +} + +READ8_MEMBER(fidel68k_state::fex68k_input_r) +{ + // a1-a3,d7: multiplexed inputs (active low) + return (read_inputs(9) >> offset & 1) ? 0 : 0x80; +} + +WRITE8_MEMBER(fidel68k_state::fex68k_leds_w) +{ + // a1-a3,d0: led data + m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset); + fex68k_prepare_display(); +} + +WRITE8_MEMBER(fidel68k_state::fex68k_7seg_w) +{ + // a1-a3,d0(d8): digit segment data + m_7seg_data = (m_7seg_data & ~(1 << offset)) | ((data & 1) << offset); + fex68k_prepare_display(); +} + WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) { // a1-a3,d0: 74259 @@ -264,7 +296,12 @@ WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); // 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C) - eag_mux_w(space, offset, m_led_select & 0xf); + // 74145 0-8: input mux, digit/led select + // 74145 9: speaker out + u16 sel = 1 << (m_led_select & 0xf); + m_dac->write(BIT(sel, 9)); + m_inp_mux = sel & 0x1ff; + fex68k_prepare_display(); } @@ -347,10 +384,9 @@ void fidel68k_state::init_fdes2265() void fidel68k_state::eag_prepare_display() { - // Excel 68000: 4*7seg leds, 8*8 chessboard leds - // EAG: 8*7seg leds(2 panels), (8+1)*8 chessboard leds + // 8*7seg leds(2 panels), (8+1)*8 chessboard leds u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4); - set_display_segmask(0x1ff, 0x7f); + set_display_segmask(0x1ef, 0x7f); display_matrix(16, 9, m_led_data << 8 | seg_data, m_inp_mux); } @@ -402,10 +438,10 @@ WRITE8_MEMBER(fidel68k_state::eag_mux_w) void fidel68k_state::fex68k_map(address_map &map) { map(0x000000, 0x00ffff).rom(); - map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::eag_leds_w)).umask16(0x00ff); - map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::eag_7seg_w)).umask16(0xff00); + map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::fex68k_leds_w)).umask16(0x00ff); + map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::fex68k_7seg_w)).umask16(0xff00); map(0x044000, 0x047fff).ram(); - map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(fidel68k_state::eag_input1_r)).umask16(0x00ff); + map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(fidel68k_state::fex68k_input_r)).umask16(0x00ff); map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(fidel68k_state::fex68k_mux_w)).umask16(0x00ff); } diff --git a/src/mame/includes/fidelbase.h b/src/mame/includes/fidelbase.h index 97f1a3b5cfc..29e627c56a1 100644 --- a/src/mame/includes/fidelbase.h +++ b/src/mame/includes/fidelbase.h @@ -26,6 +26,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_irq_on(*this, "irq_on"), + m_rombank(*this, "rombank"), m_inp_matrix(*this, "IN.%u", 0), m_out_x(*this, "%u.%u", 0U, 0U), m_out_a(*this, "%u.a", 0U), @@ -42,6 +43,7 @@ public: // devices/pointers required_device m_maincpu; optional_device m_irq_on; + optional_memory_bank m_rombank; optional_ioport_array<11> m_inp_matrix; // max 11 output_finder<0x20, 0x20> m_out_x; output_finder<0x20> m_out_a; From dbb4a1fb182739d590a81d0b98cb17dd88752264 Mon Sep 17 00:00:00 2001 From: cracyc Date: Sat, 16 Feb 2019 14:53:30 -0600 Subject: [PATCH 04/21] tandy2k: add mouse [Carl] --- src/mame/drivers/tandy2k.cpp | 160 ++++++++++++++++++++++++++++++++++- src/mame/includes/tandy2k.h | 31 ++++++- 2 files changed, 186 insertions(+), 5 deletions(-) diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp index c7852b4c8fe..309d7b87821 100644 --- a/src/mame/drivers/tandy2k.cpp +++ b/src/mame/drivers/tandy2k.cpp @@ -14,11 +14,11 @@ - HDL is also connected to WP/TS input where TS is used to detect motor status - 3 second motor off delay timer - video (video RAM is at memory top - 0x1400, i.e. 0x1ec00) - - keyboard ROM - - hires graphics board + - keyboard ROM, same as earlier tandy 1000 - WD1010 - hard disk - - mouse + - clock/mouse 8042 mcu ROM, probably same as tandy 1000 isa clock/mouse adapter + - sab3019 rtc */ @@ -219,6 +219,77 @@ READ8_MEMBER( tandy2k_state::kbint_clr_r ) return 0xff; } +READ8_MEMBER( tandy2k_state::clkmouse_r ) +{ + uint8_t ret = 0; + switch (offset) + { + case 0: + if (!m_clkmouse_cnt) + return 0; + ret = m_clkmouse_cmd[--m_clkmouse_cnt]; + m_pic1->ir2_w(0); + if (m_clkmouse_cnt > 0) + m_mcu_delay->adjust(attotime::from_msec(1)); + break; + case 2: + ret = m_buttons->read(); + if (m_clkmouse_cnt) + ret |= 1; + break; + } + return ret; +} + +WRITE8_MEMBER( tandy2k_state::clkmouse_w ) +{ + switch (offset) + { + case 0: + m_pic1->ir2_w(0); + if (m_clkmouse_cnt < 8) + m_clkmouse_cmd[m_clkmouse_cnt++] = data; + break; + case 1: + break; + case 2: + if (m_clkmouse_cnt < 8) + m_clkmouse_cmd[m_clkmouse_cnt++] = data; + switch (m_clkmouse_cmd[0]) + { + case 0x01: //set time + break; + case 0x02: //read time + break; + case 0x08: + if(m_clkmouse_cmd[1] > 0) + m_clkmouse_irq |= MO_IRQ; + else + m_clkmouse_irq &= ~MO_IRQ; + if(m_clkmouse_cmd[2] > 0) + m_clkmouse_irq |= BT_IRQ; + else + m_clkmouse_irq &= ~BT_IRQ; + break; + case 0x20: + if(m_clkmouse_cmd[1] > 0) + m_mouse_timer->adjust(attotime::from_hz(40), 0, attotime::from_hz(40)); + else + m_mouse_timer->adjust(attotime::never); + break; + } + m_clkmouse_cnt = 0; + break; + case 3: + m_pic1->ir2_w(0); + m_clkmouse_cnt = 0; + m_clkmouse_irq = 0; + m_mouse_x = m_x_axis->read(); + m_mouse_y = m_y_axis->read(); + break; + } +} + READ8_MEMBER( tandy2k_state::fldtc_r ) { if (LOG) logerror("FLDTC\n"); @@ -315,6 +386,7 @@ void tandy2k_state::tandy2k_io(address_map &map) map(0x00180, 0x00180).r(FUNC(tandy2k_state::hires_status_r)).umask16(0x00ff); map(0x00180, 0x0018f).mirror(0x10).w(m_colpal, FUNC(palette_device::write8)).umask16(0x00ff).share("colpal"); map(0x001a0, 0x001a0).w(FUNC(tandy2k_state::hires_plane_w)).umask16(0x00ff); + map(0x002fc, 0x002ff).rw(FUNC(tandy2k_state::clkmouse_r), FUNC(tandy2k_state::clkmouse_w)); } void tandy2k_state::tandy2k_hd_io(address_map &map) @@ -368,8 +440,47 @@ static INPUT_PORTS_START( tandy2k ) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) /* HOME 58 D8 */ PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F11") PORT_CODE(KEYCODE_F11) /* F11 59 D9 */ PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F12") PORT_CODE(KEYCODE_F12) /* F12 5a Da */ + + PORT_START("MOUSEBTN") + PORT_BIT( 0xff8f, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(MOUSECODE_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(MOUSECODE_BUTTON2) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) /* this would be button three but AFAIK no tandy mouse ever had one */ + + PORT_START("MOUSEX") + PORT_BIT( 0xffff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr) + + PORT_START("MOUSEY") + PORT_BIT( 0xffff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr) INPUT_PORTS_END +INPUT_CHANGED_MEMBER(tandy2k_state::input_changed) +{ + if (m_clkmouse_cnt || !m_clkmouse_irq) + return; + if ((m_clkmouse_irq & BT_IRQ) && (field.name()[5] == 'B')) + { + m_clkmouse_cnt = 1; + m_clkmouse_cmd[0] = 'B'; + } + else if ((m_clkmouse_irq & MO_IRQ)) + { + uint16_t x = m_x_axis->read(); + uint16_t y = m_y_axis->read(); + uint16_t dx = x - m_mouse_x; + uint16_t dy = y - m_mouse_y; + m_mouse_x = x; + m_mouse_y = y; + m_clkmouse_cnt = 5; + m_clkmouse_cmd[4] = 'M'; + m_clkmouse_cmd[3] = dx & 0xff; + m_clkmouse_cmd[2] = dx >> 8; + m_clkmouse_cmd[1] = dy & 0xff; + m_clkmouse_cmd[0] = dy >> 8; + } + m_pic1->ir2_w(1); +} + // Video uint32_t tandy2k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -788,7 +899,8 @@ void tandy2k_state::machine_start() program.install_ram(0x00000, ram_size - 1, ram); m_char_ram.allocate(0x1000); - m_hires_en = 0; + m_mouse_timer = timer_alloc(MOUS_TIMER); + m_mcu_delay = timer_alloc(MCU_DELAY); // register for state saving save_item(NAME(m_dma_mux)); @@ -804,6 +916,19 @@ void tandy2k_state::machine_start() save_item(NAME(m_clkcnt)); save_item(NAME(m_outspkr)); save_item(NAME(m_spkrdata)); + save_item(NAME(m_clkmouse_cmd)); + save_item(NAME(m_clkmouse_cnt)); + save_item(NAME(m_clkmouse_irq)); + save_item(NAME(m_mouse_x)); + save_item(NAME(m_mouse_y)); + save_item(NAME(m_hires_en)); +} + +void tandy2k_state::machine_reset() +{ + m_hires_en = 0; + m_clkmouse_cnt = 0; + m_clkmouse_irq = 0; } void tandy2k_state::device_reset_after_children() @@ -811,6 +936,33 @@ void tandy2k_state::device_reset_after_children() m_pc_keyboard->enable(0); } +void tandy2k_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case MOUS_TIMER: + { + uint16_t x = m_x_axis->read(); + uint16_t y = m_y_axis->read(); + uint16_t dx = x - m_mouse_x; + uint16_t dy = y - m_mouse_y; + m_mouse_x = x; + m_mouse_y = y; + m_clkmouse_cnt = 5; + m_clkmouse_cmd[4] = 'A'; + m_clkmouse_cmd[3] = dx & 0xff; + m_clkmouse_cmd[2] = dx >> 8; + m_clkmouse_cmd[1] = dy & 0xff; + m_clkmouse_cmd[0] = dy >> 8; + m_pic1->ir2_w(1); + break; + } + case MCU_DELAY: + m_pic1->ir2_w(1); + break; + } +} + rgb_t tandy2k_state::IRGB(uint32_t raw) { uint8_t i = (raw >> 3) & 1; diff --git a/src/mame/includes/tandy2k.h b/src/mame/includes/tandy2k.h index 22fe23caa02..9515335bf06 100644 --- a/src/mame/includes/tandy2k.h +++ b/src/mame/includes/tandy2k.h @@ -100,7 +100,10 @@ public: m_centronics_fault(0), m_centronics_select(0), m_centronics_perror(0), - m_centronics_busy(0) + m_centronics_busy(0), + m_buttons(*this, "MOUSEBTN"), + m_x_axis(*this, "MOUSEX"), + m_y_axis(*this, "MOUSEY") { for (auto & elem : m_busdmarq) { @@ -110,6 +113,7 @@ public: void tandy2k_hd(machine_config &config); void tandy2k(machine_config &config); + DECLARE_INPUT_CHANGED_MEMBER(input_changed); private: required_device m_maincpu; @@ -138,7 +142,9 @@ private: required_device m_pc_keyboard; // temporary until the tandy keyboard has a rom dump virtual void machine_start() override; + virtual void machine_reset() override; virtual void device_reset_after_children() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -176,6 +182,8 @@ private: DECLARE_WRITE8_MEMBER( drb_attr_w ); DECLARE_WRITE_LINE_MEMBER( kbdclk_w ); DECLARE_WRITE_LINE_MEMBER( kbddat_w ); + DECLARE_READ8_MEMBER( clkmouse_r ); + DECLARE_WRITE8_MEMBER( clkmouse_w ); DECLARE_READ8_MEMBER( irq_callback ); DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); DECLARE_WRITE_LINE_MEMBER( fdc_hdl_w ); @@ -240,11 +248,32 @@ private: int m_centronics_perror; int m_centronics_busy; + enum + { + MO_IRQ = 1, + BT_IRQ = 2 + }; + + enum + { + MOUS_TIMER, + MCU_DELAY + }; + + uint8_t m_clkmouse_cmd[8]; + int m_clkmouse_cnt; + uint8_t m_clkmouse_irq; + uint16_t m_mouse_x, m_mouse_y; + emu_timer *m_mouse_timer; + emu_timer *m_mcu_delay; + void tandy2k_hd_io(address_map &map); void tandy2k_io(address_map &map); void tandy2k_mem(address_map &map); void vpac_mem(address_map &map); void vrambank_mem(address_map &map); + + required_ioport m_buttons, m_x_axis, m_y_axis; }; #endif // MAME_INCLUDES_TANDY2K_H From e71714a8faef03b8d06bb24d7752b277b23d4d42 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 16 Feb 2019 22:11:49 +0100 Subject: [PATCH 05/21] fidelmcs48: rename class (nw) --- src/mame/drivers/fidelmcs48.cpp | 67 +++++++++++++-------------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/src/mame/drivers/fidelmcs48.cpp b/src/mame/drivers/fidelmcs48.cpp index 6cb818e209e..6c06abbbcc4 100644 --- a/src/mame/drivers/fidelmcs48.cpp +++ b/src/mame/drivers/fidelmcs48.cpp @@ -3,18 +3,6 @@ // thanks-to:yoyo_chessboard /****************************************************************************** - Fidelity Electronics generic MCS-48 based chess computer driver - - NOTE: MAME doesn't include a generalized implementation for boardpieces yet, - greatly affecting user playability of emulated electronic board games. - As workaround for the chess games, use an external chess GUI on the side, - such as Arena(in editmode). - - TODO: - - nothing - -****************************************************************************** - Sensory Chess Challenger 6 (model SC6): - PCB label 510-1045B01 - INS8040N-11 MCU, 11MHz XTAL @@ -41,10 +29,10 @@ SC6 program is contained in BO6 and CG6. #include "fidel_sc6.lh" // clickable -class fidelmcs48_state : public fidelbase_state +class sc6_state : public fidelbase_state { public: - fidelmcs48_state(const machine_config &mconfig, device_type type, const char *tag) : + sc6_state(const machine_config &mconfig, device_type type, const char *tag) : fidelbase_state(mconfig, type, tag), m_maincpu(*this, "maincpu") { } @@ -52,30 +40,31 @@ public: void sc6(machine_config &config); private: + // devices/pointers required_device m_maincpu; - // SC6 + void sc6_map(address_map &map); + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sc6_cartridge); + + // I/O handlers void sc6_prepare_display(); DECLARE_WRITE8_MEMBER(sc6_mux_w); DECLARE_WRITE8_MEMBER(sc6_select_w); DECLARE_READ8_MEMBER(sc6_input_r); DECLARE_READ_LINE_MEMBER(sc6_input6_r); DECLARE_READ_LINE_MEMBER(sc6_input7_r); - void sc6_map(address_map &map); - DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sc6_cartridge); }; -// Devices, I/O - /****************************************************************************** - SC6 + Devices, I/O ******************************************************************************/ // cartridge -DEVICE_IMAGE_LOAD_MEMBER(fidelmcs48_state, sc6_cartridge) +DEVICE_IMAGE_LOAD_MEMBER(sc6_state, sc6_cartridge) { u32 size = m_cart->common_get_size("rom"); @@ -95,14 +84,14 @@ DEVICE_IMAGE_LOAD_MEMBER(fidelmcs48_state, sc6_cartridge) // MCU ports/generic -void fidelmcs48_state::sc6_prepare_display() +void sc6_state::sc6_prepare_display() { // 2 7seg leds set_display_segmask(3, 0x7f); display_matrix(7, 2, m_7seg_data, m_led_select); } -WRITE8_MEMBER(fidelmcs48_state::sc6_mux_w) +WRITE8_MEMBER(sc6_state::sc6_mux_w) { // P24-P27: 7442 A-D u16 sel = 1 << (data >> 4 & 0xf) & 0x3ff; @@ -116,26 +105,26 @@ WRITE8_MEMBER(fidelmcs48_state::sc6_mux_w) m_dac->write(BIT(sel, 9)); } -WRITE8_MEMBER(fidelmcs48_state::sc6_select_w) +WRITE8_MEMBER(sc6_state::sc6_select_w) { // P16,P17: digit select m_led_select = ~data >> 6 & 3; sc6_prepare_display(); } -READ8_MEMBER(fidelmcs48_state::sc6_input_r) +READ8_MEMBER(sc6_state::sc6_input_r) { // P10-P15: multiplexed inputs low return (~read_inputs(9) & 0x3f) | 0xc0; } -READ_LINE_MEMBER(fidelmcs48_state::sc6_input6_r) +READ_LINE_MEMBER(sc6_state::sc6_input6_r) { // T0: multiplexed inputs bit 6 return ~read_inputs(9) >> 6 & 1; } -READ_LINE_MEMBER(fidelmcs48_state::sc6_input7_r) +READ_LINE_MEMBER(sc6_state::sc6_input7_r) { // T1: multiplexed inputs bit 7 return ~read_inputs(9) >> 7 & 1; @@ -147,9 +136,7 @@ READ_LINE_MEMBER(fidelmcs48_state::sc6_input7_r) Address Maps ******************************************************************************/ -// SC6 - -void fidelmcs48_state::sc6_map(address_map &map) +void sc6_state::sc6_map(address_map &map) { map(0x0000, 0x0fff).r("cartslot", FUNC(generic_slot_device::read_rom)); } @@ -180,16 +167,16 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void fidelmcs48_state::sc6(machine_config &config) +void sc6_state::sc6(machine_config &config) { /* basic machine hardware */ I8040(config, m_maincpu, 11_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidelmcs48_state::sc6_map); - m_maincpu->p2_out_cb().set(FUNC(fidelmcs48_state::sc6_mux_w)); - m_maincpu->p1_in_cb().set(FUNC(fidelmcs48_state::sc6_input_r)); - m_maincpu->p1_out_cb().set(FUNC(fidelmcs48_state::sc6_select_w)); - m_maincpu->t0_in_cb().set(FUNC(fidelmcs48_state::sc6_input6_r)); - m_maincpu->t1_in_cb().set(FUNC(fidelmcs48_state::sc6_input7_r)); + m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::sc6_map); + m_maincpu->p2_out_cb().set(FUNC(sc6_state::sc6_mux_w)); + m_maincpu->p1_in_cb().set(FUNC(sc6_state::sc6_input_r)); + m_maincpu->p1_out_cb().set(FUNC(sc6_state::sc6_select_w)); + m_maincpu->t0_in_cb().set(FUNC(sc6_state::sc6_input6_r)); + m_maincpu->t1_in_cb().set(FUNC(sc6_state::sc6_input7_r)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_sc6); @@ -203,7 +190,7 @@ void fidelmcs48_state::sc6(machine_config &config) /* cartridge */ generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_sc6", "bin")); - cartslot.set_device_load(device_image_load_delegate(&fidelmcs48_state::device_image_load_sc6_cartridge, this)); + cartslot.set_device_load(device_image_load_delegate(&sc6_state::device_image_load_sc6_cartridge, this)); cartslot.set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("fidel_sc6"); @@ -226,5 +213,5 @@ ROM_END Drivers ******************************************************************************/ -// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -CONS( 1982, fscc6, 0, 0, sc6, sc6, fidelmcs48_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 6", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +CONS( 1982, fscc6, 0, 0, sc6, sc6, sc6_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 6", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) From 8e3a8fd4a33f23f222c58dce406375f8c715c311 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 16 Feb 2019 22:20:56 +0100 Subject: [PATCH 06/21] rename fidelmcs48 to fidel_sc6 (nw) --- scripts/target/mame/mess.lua | 2 +- src/mame/drivers/{fidelmcs48.cpp => fidel_sc6.cpp} | 0 src/mame/mame.lst | 6 +++--- src/mame/mess.flt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/mame/drivers/{fidelmcs48.cpp => fidel_sc6.cpp} (100%) diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 964d45835a0..24db5d6b1a5 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2127,9 +2127,9 @@ createMESSProjects(_target, _subtarget, "fidelity") files { MAME_DIR .. "src/mame/drivers/fidelz80.cpp", MAME_DIR .. "src/mame/includes/fidelbase.h", + MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp", MAME_DIR .. "src/mame/drivers/fidel6502.cpp", MAME_DIR .. "src/mame/drivers/fidel68k.cpp", - MAME_DIR .. "src/mame/drivers/fidelmcs48.cpp", } createMESSProjects(_target, _subtarget, "force") diff --git a/src/mame/drivers/fidelmcs48.cpp b/src/mame/drivers/fidel_sc6.cpp similarity index 100% rename from src/mame/drivers/fidelmcs48.cpp rename to src/mame/drivers/fidel_sc6.cpp diff --git a/src/mame/mame.lst b/src/mame/mame.lst index b8f3dcf9ee0..183cbd5ef48 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12849,6 +12849,9 @@ feversoc // (c) 2004 fgoal // TF (c) 1979 Taito Corporation fgoala // MF (c) 1979 Taito Corporation +@source:fidel_sc6.cpp +fscc6 // + @source:fidel6502.cpp chesster // chesstera // @@ -12921,9 +12924,6 @@ fex68kb // fex68km2 // fex68km3 // -@source:fidelmcs48.cpp -fscc6 // - @source:fidelz80.cpp backgamc // bridgec3 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 88927ee51ea..93da1ab056b 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -239,9 +239,9 @@ fb01.cpp fc100.cpp fccpu20.cpp fccpu30.cpp +fidel_sc6.cpp fidel6502.cpp fidel68k.cpp -fidelmcs48.cpp fidelz80.cpp fk1.cpp fm7.cpp From 72213467f115db92e06262d6a17371cff246ad0e Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 16 Feb 2019 16:27:51 -0500 Subject: [PATCH 07/21] apple2: Slight code cleanup (nw) Note that the 0x3f mask formerly used instead of 0x7f for one case was spurious. --- src/mame/drivers/apple2.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index 7e0b4bea203..f01df1d4176 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -626,41 +626,42 @@ READ8_MEMBER(apple2_state::switches_r) READ8_MEMBER(apple2_state::flags_r) { + uint8_t busdata = read_floatingbus() & 0x7f; + // Y output of 74LS251 at H14 read as D7 switch (offset) { case 0: // cassette in - return (m_cassette->input() > 0.0 ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return (m_cassette->input() > 0.0 ? 0x80 : 0) | busdata; case 1: // button 0 - return ((m_joybuttons->read() & 0x10) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return (BIT(m_joybuttons->read(), 4) ? 0x80 : 0) | busdata; case 2: // button 1 - return ((m_joybuttons->read() & 0x20) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return (BIT(m_joybuttons->read(), 5) ? 0x80 : 0) | busdata; case 3: // button 2 // check if SHIFT key mod configured - if (m_sysconfig->read() & 0x04) - { - return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | (read_floatingbus() & 0x3f); - } - return ((m_joybuttons->read() & 0x40) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + if (BIT(m_sysconfig->read(), 2)) + return ((BIT(m_joybuttons->read(), 6) || (m_kbspecial->read() & 0x06) != 0) ? 0x80 : 0) | busdata; + else + return (BIT(m_joybuttons->read(), 6) ? 0x80 : 0) | busdata; case 4: // joy 1 X axis - return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | busdata; case 5: // joy 1 Y axis - return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | busdata; case 6: // joy 2 X axis - return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | busdata; case 7: // joy 2 Y axis - return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); + return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | busdata; } // this is never reached - return 0; + return busdata; } READ8_MEMBER(apple2_state::controller_strobe_r) From c1bbcf3448799e89a113c8c291abba4f29491ada Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 16 Feb 2019 23:11:00 +0100 Subject: [PATCH 08/21] fidelz80: separate classes (nw) --- src/mame/drivers/fidel6502.cpp | 11 +- src/mame/drivers/fidelz80.cpp | 289 +++++++++++++++++++-------------- 2 files changed, 174 insertions(+), 126 deletions(-) diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index ce64ef56cec..f97de6fd491 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -614,6 +614,7 @@ private: // Chesster DECLARE_WRITE8_MEMBER(chesster_control_w); DECLARE_WRITE8_MEMBER(kishon_control_w); + DECLARE_READ8_MEMBER(chesster_input_r); void chesster_map(address_map &map); void kishon_map(address_map &map); @@ -1281,6 +1282,12 @@ WRITE8_MEMBER(fidel6502_state::kishon_control_w) m_rombank->set_entry(bank); } +READ8_MEMBER(fidel6502_state::chesster_input_r) +{ + // a0-a2,d7: multiplexed inputs (active low) + return (read_inputs(9) >> offset & 1) ? 0 : 0x80; +} + void fidel6502_state::init_chesster() { m_rombank->configure_entries(0, memregion("rombank")->bytes() / 0x4000, memregion("rombank")->base(), 0x4000); @@ -1463,7 +1470,7 @@ void fidel6502_state::fphantom_map(address_map &map) void fidel6502_state::chesster_map(address_map &map) { map(0x0000, 0x1fff).ram(); - map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::chesster_control_w)); + map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::chesster_input_r), FUNC(fidel6502_state::chesster_control_w)); map(0x4000, 0x7fff).bankr("rombank"); map(0x6000, 0x6000).mirror(0x1fff).w("dac8", FUNC(dac_byte_interface::data_w)); map(0x8000, 0xffff).rom(); @@ -1472,7 +1479,7 @@ void fidel6502_state::chesster_map(address_map &map) void fidel6502_state::kishon_map(address_map &map) { chesster_map(map); - map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::kishon_control_w)); + map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::chesster_input_r), FUNC(fidel6502_state::kishon_control_w)); } diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 84f44947084..7543539261c 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -513,62 +513,6 @@ expect that the software reads these once on startup only. #include "fidel_bv3.lh" // clickable #include "fidel_vsc.lh" // clickable - -class fidelz80_state : public fidelbase_state -{ -public: - fidelz80_state(const machine_config &mconfig, device_type type, const char *tag) : - fidelbase_state(mconfig, type, tag), - m_z80pio(*this, "z80pio"), - m_ppi8255(*this, "ppi8255") - { } - - void bcc(machine_config &config); - void bkc(machine_config &config); - void scc(machine_config &config); - void vsc(machine_config &config); - void dsc(machine_config &config); - -private: - // devices/pointers - optional_device m_z80pio; - optional_device m_ppi8255; - - // BCC, BKC - DECLARE_READ8_MEMBER(bcc_input_r); - DECLARE_WRITE8_MEMBER(bcc_control_w); - void bcc_io(address_map &map); - void bcc_map(address_map &map); - - // SCC - DECLARE_READ8_MEMBER(scc_input_r); - DECLARE_WRITE8_MEMBER(scc_control_w); - void scc_io(address_map &map); - void scc_map(address_map &map); - - // VSC - void vsc_prepare_display(); - DECLARE_READ8_MEMBER(vsc_speech_r); - DECLARE_READ8_MEMBER(vsc_io_trampoline_r); - DECLARE_WRITE8_MEMBER(vsc_io_trampoline_w); - DECLARE_WRITE8_MEMBER(vsc_ppi_porta_w); - DECLARE_WRITE8_MEMBER(vsc_ppi_portb_w); - DECLARE_WRITE8_MEMBER(vsc_ppi_portc_w); - DECLARE_READ8_MEMBER(vsc_pio_porta_r); - DECLARE_READ8_MEMBER(vsc_pio_portb_r); - DECLARE_WRITE8_MEMBER(vsc_pio_portb_w); - void vsc_io(address_map &map); - void vsc_map(address_map &map); - - // DSC - void dsc_prepare_display(); - DECLARE_WRITE8_MEMBER(dsc_control_w); - DECLARE_WRITE8_MEMBER(dsc_select_w); - DECLARE_READ8_MEMBER(dsc_input_r); - void dsc_map(address_map &map); -}; - - // machine start/reset void fidelbase_state::machine_start() @@ -613,6 +557,98 @@ void fidelbase_state::machine_reset() +class scc_state : public fidelbase_state +{ +public: + scc_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + + void scc(machine_config &config); + +private: + void scc_map(address_map &map); + void scc_io(address_map &map); + + // I/O handlers + DECLARE_READ8_MEMBER(scc_input_r); + DECLARE_WRITE8_MEMBER(scc_control_w); +}; + + +class dsc_state : public fidelbase_state +{ +public: + dsc_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + + void dsc(machine_config &config); + +private: + void dsc_map(address_map &map); + + // I/O handlers + void dsc_prepare_display(); + DECLARE_WRITE8_MEMBER(dsc_control_w); + DECLARE_WRITE8_MEMBER(dsc_select_w); + DECLARE_READ8_MEMBER(dsc_input_r); +}; + + +class bcc_state : public fidelbase_state +{ +public: + bcc_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + + void bcc(machine_config &config); + void bkc(machine_config &config); + +private: + void bcc_map(address_map &map); + void bcc_io(address_map &map); + + // I/O handlers + DECLARE_READ8_MEMBER(bcc_input_r); + DECLARE_WRITE8_MEMBER(bcc_control_w); +}; + + +class vsc_state : public fidelbase_state +{ +public: + vsc_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag), + m_z80pio(*this, "z80pio"), + m_ppi8255(*this, "ppi8255") + { } + + void vsc(machine_config &config); + +private: + // devices/pointers + required_device m_z80pio; + required_device m_ppi8255; + + void vsc_map(address_map &map); + void vsc_io(address_map &map); + + // I/O handlers + void vsc_prepare_display(); + DECLARE_READ8_MEMBER(vsc_speech_r); + DECLARE_READ8_MEMBER(vsc_io_trampoline_r); + DECLARE_WRITE8_MEMBER(vsc_io_trampoline_w); + DECLARE_WRITE8_MEMBER(vsc_ppi_porta_w); + DECLARE_WRITE8_MEMBER(vsc_ppi_portb_w); + DECLARE_WRITE8_MEMBER(vsc_ppi_portc_w); + DECLARE_READ8_MEMBER(vsc_pio_porta_r); + DECLARE_READ8_MEMBER(vsc_pio_portb_r); + DECLARE_WRITE8_MEMBER(vsc_pio_portb_w); +}; + + class ccx_state : public fidelbase_state { public: @@ -635,13 +671,15 @@ private: TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); } + void ccx_map(address_map &map); + void ccx_io(address_map &map); + + // I/O handlers void ccx_prepare_display(); DECLARE_WRITE8_MEMBER(ccx_ppi_porta_w); DECLARE_WRITE8_MEMBER(ccx_ppi_portb_w); DECLARE_READ8_MEMBER(ccx_ppi_portc_r); DECLARE_WRITE8_MEMBER(ccx_ppi_portc_w); - void ccx_io(address_map &map); - void ccx_map(address_map &map); }; @@ -666,13 +704,14 @@ private: required_device m_mcu; required_device m_i8243; + void vbrc_main_map(address_map &map); + void vbrc_main_io(address_map &map); + void vbrc_prepare_display(); DECLARE_WRITE8_MEMBER(vbrc_speech_w); DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w); DECLARE_READ8_MEMBER(vbrc_mcu_p2_r); template void vbrc_ioexp_port_w(uint8_t data); - void vbrc_main_io(address_map &map); - void vbrc_main_map(address_map &map); }; @@ -695,6 +734,10 @@ private: // devices/pointers required_device m_ppi8255; + void vcc_map(address_map &map); + void vcc_io(address_map &map); + + // I/O handlers void vcc_prepare_display(); DECLARE_READ8_MEMBER(vcc_speech_r); DECLARE_WRITE8_MEMBER(vcc_ppi_porta_w); @@ -702,8 +745,6 @@ private: DECLARE_WRITE8_MEMBER(vcc_ppi_portb_w); DECLARE_READ8_MEMBER(vcc_ppi_portc_r); DECLARE_WRITE8_MEMBER(vcc_ppi_portc_w); - void vcc_io(address_map &map); - void vcc_map(address_map &map); }; void vcc_state::machine_start() @@ -969,7 +1010,7 @@ WRITE8_MEMBER(ccx_state::ccx_ppi_portc_w) // TTL -WRITE8_MEMBER(fidelz80_state::bcc_control_w) +WRITE8_MEMBER(bcc_state::bcc_control_w) { // a0-a2,d7: digit segment data via NE591 u8 mask = 1 << (offset & 7); @@ -986,7 +1027,7 @@ WRITE8_MEMBER(fidelz80_state::bcc_control_w) m_inp_mux = data & 0xf; } -READ8_MEMBER(fidelz80_state::bcc_input_r) +READ8_MEMBER(bcc_state::bcc_input_r) { // d0-d3: multiplexed inputs return read_inputs(4); @@ -1000,7 +1041,7 @@ READ8_MEMBER(fidelz80_state::bcc_input_r) // TTL -WRITE8_MEMBER(fidelz80_state::scc_control_w) +WRITE8_MEMBER(scc_state::scc_control_w) { // a0-a2,d7: led data u8 mask = 1 << (offset & 7); @@ -1013,7 +1054,7 @@ WRITE8_MEMBER(fidelz80_state::scc_control_w) display_matrix(8, 9, m_led_data, (m_inp_mux & 0xff) | (data << 4 & 0x100)); } -READ8_MEMBER(fidelz80_state::scc_input_r) +READ8_MEMBER(scc_state::scc_input_r) { // d0-d7: multiplexed inputs (active low) return ~read_inputs(9); @@ -1027,14 +1068,14 @@ READ8_MEMBER(fidelz80_state::scc_input_r) // misc handlers -void fidelz80_state::vsc_prepare_display() +void vsc_state::vsc_prepare_display() { // 4 7seg leds+H, 8*8 chessboard leds set_display_segmask(0xf, 0x7f); display_matrix(16, 8, m_led_data << 8 | m_7seg_data, m_led_select); } -READ8_MEMBER(fidelz80_state::vsc_speech_r) +READ8_MEMBER(vsc_state::vsc_speech_r) { return m_speech_rom[m_speech_bank << 12 | offset]; } @@ -1042,7 +1083,7 @@ READ8_MEMBER(fidelz80_state::vsc_speech_r) // I8255 PPI -WRITE8_MEMBER(fidelz80_state::vsc_ppi_porta_w) +WRITE8_MEMBER(vsc_state::vsc_ppi_porta_w) { // d0-d5: TSI C0-C5 m_speech->data_w(space, 0, data & 0x3f); @@ -1052,14 +1093,14 @@ WRITE8_MEMBER(fidelz80_state::vsc_ppi_porta_w) vsc_prepare_display(); } -WRITE8_MEMBER(fidelz80_state::vsc_ppi_portb_w) +WRITE8_MEMBER(vsc_state::vsc_ppi_portb_w) { // d0-d7: led row data m_led_data = data; vsc_prepare_display(); } -WRITE8_MEMBER(fidelz80_state::vsc_ppi_portc_w) +WRITE8_MEMBER(vsc_state::vsc_ppi_portc_w) { // d0-d3: select digits // d0-d7: select leds, input mux low bits @@ -1071,13 +1112,13 @@ WRITE8_MEMBER(fidelz80_state::vsc_ppi_portc_w) // Z80 PIO -READ8_MEMBER(fidelz80_state::vsc_pio_porta_r) +READ8_MEMBER(vsc_state::vsc_pio_porta_r) { // d0-d7: multiplexed inputs return read_inputs(11); } -READ8_MEMBER(fidelz80_state::vsc_pio_portb_r) +READ8_MEMBER(vsc_state::vsc_pio_portb_r) { u8 data = 0; @@ -1087,7 +1128,7 @@ READ8_MEMBER(fidelz80_state::vsc_pio_portb_r) return data; } -WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w) +WRITE8_MEMBER(vsc_state::vsc_pio_portb_w) { // d0,d1: input mux highest bits // d5: enable language switch @@ -1170,14 +1211,14 @@ READ8_MEMBER(card_state::vbrc_mcu_p2_r) // TTL -void fidelz80_state::dsc_prepare_display() +void dsc_state::dsc_prepare_display() { // 4 7seg leds set_display_segmask(0xf, 0x7f); display_matrix(8, 4, m_7seg_data, m_led_select); } -WRITE8_MEMBER(fidelz80_state::dsc_control_w) +WRITE8_MEMBER(dsc_state::dsc_control_w) { // d0-d7: input mux, 7seg data m_inp_mux = ~data; @@ -1185,7 +1226,7 @@ WRITE8_MEMBER(fidelz80_state::dsc_control_w) dsc_prepare_display(); } -WRITE8_MEMBER(fidelz80_state::dsc_select_w) +WRITE8_MEMBER(dsc_state::dsc_select_w) { // d4: speaker out m_dac->write(BIT(~data, 4)); @@ -1195,7 +1236,7 @@ WRITE8_MEMBER(fidelz80_state::dsc_select_w) dsc_prepare_display(); } -READ8_MEMBER(fidelz80_state::dsc_input_r) +READ8_MEMBER(dsc_state::dsc_input_r) { // d0-d7: multiplexed inputs (active low) return ~read_inputs(8); @@ -1240,7 +1281,7 @@ void vcc_state::vcc_io(address_map &map) // BCC, BKC -void fidelz80_state::bcc_map(address_map &map) +void bcc_state::bcc_map(address_map &map) { map.unmap_value_high(); map.global_mask(0x3fff); @@ -1248,31 +1289,31 @@ void fidelz80_state::bcc_map(address_map &map) map(0x3000, 0x30ff).mirror(0x0f00).ram(); } -void fidelz80_state::bcc_io(address_map &map) +void bcc_state::bcc_io(address_map &map) { map.global_mask(0x07); - map(0x00, 0x07).rw(FUNC(fidelz80_state::bcc_input_r), FUNC(fidelz80_state::bcc_control_w)); + map(0x00, 0x07).rw(FUNC(bcc_state::bcc_input_r), FUNC(bcc_state::bcc_control_w)); } // SCC -void fidelz80_state::scc_map(address_map &map) +void scc_state::scc_map(address_map &map) { map(0x0000, 0x0fff).rom(); map(0x5000, 0x50ff).ram(); } -void fidelz80_state::scc_io(address_map &map) +void scc_state::scc_io(address_map &map) { map.global_mask(0x07); - map(0x00, 0x07).rw(FUNC(fidelz80_state::scc_input_r), FUNC(fidelz80_state::scc_control_w)); + map(0x00, 0x07).rw(FUNC(scc_state::scc_input_r), FUNC(scc_state::scc_control_w)); } // VSC -void fidelz80_state::vsc_map(address_map &map) +void vsc_state::vsc_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x3fff).rom(); @@ -1281,7 +1322,7 @@ void fidelz80_state::vsc_map(address_map &map) } // VSC io: A2 is 8255 _CE, A3 is Z80 PIO _CE - in theory, both chips can be accessed simultaneously -READ8_MEMBER(fidelz80_state::vsc_io_trampoline_r) +READ8_MEMBER(vsc_state::vsc_io_trampoline_r) { u8 data = 0xff; // open bus if (~offset & 4) @@ -1292,7 +1333,7 @@ READ8_MEMBER(fidelz80_state::vsc_io_trampoline_r) return data; } -WRITE8_MEMBER(fidelz80_state::vsc_io_trampoline_w) +WRITE8_MEMBER(vsc_state::vsc_io_trampoline_w) { if (~offset & 4) m_ppi8255->write(offset & 3, data); @@ -1300,10 +1341,10 @@ WRITE8_MEMBER(fidelz80_state::vsc_io_trampoline_w) m_z80pio->write(space, offset & 3, data); } -void fidelz80_state::vsc_io(address_map &map) +void vsc_state::vsc_io(address_map &map) { map.global_mask(0x0f); - map(0x00, 0x0f).rw(FUNC(fidelz80_state::vsc_io_trampoline_r), FUNC(fidelz80_state::vsc_io_trampoline_w)); + map(0x00, 0x0f).rw(FUNC(vsc_state::vsc_io_trampoline_r), FUNC(vsc_state::vsc_io_trampoline_w)); } @@ -1326,13 +1367,13 @@ void card_state::vbrc_main_io(address_map &map) // DSC -void fidelz80_state::dsc_map(address_map &map) +void dsc_state::dsc_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x1fff).rom(); - map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(fidelz80_state::dsc_control_w)); - map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(fidelz80_state::dsc_select_w)); - map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(fidelz80_state::dsc_input_r)); + map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(dsc_state::dsc_control_w)); + map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(dsc_state::dsc_select_w)); + map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(dsc_state::dsc_input_r)); map(0xa000, 0xa3ff).mirror(0x1c00).ram(); } @@ -1868,18 +1909,18 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void fidelz80_state::bkc(machine_config &config) +void bcc_state::bkc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.579545_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::bcc_map); - m_maincpu->set_addrmap(AS_IO, &fidelz80_state::bcc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &bcc_state::bcc_map); + m_maincpu->set_addrmap(AS_IO, &bcc_state::bcc_io); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_bkc); } -void fidelz80_state::bcc(machine_config &config) +void bcc_state::bcc(machine_config &config) { bkc(config); config.set_default_layout(layout_fidel_bcc); @@ -1892,12 +1933,12 @@ void fidelz80_state::bcc(machine_config &config) vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } -void fidelz80_state::scc(machine_config &config) +void scc_state::scc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.9_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::scc_map); - m_maincpu->set_addrmap(AS_IO, &fidelz80_state::scc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &scc_state::scc_map); + m_maincpu->set_addrmap(AS_IO, &scc_state::scc_io); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_sc8); @@ -1962,27 +2003,27 @@ void vcc_state::vcc(machine_config &config) m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75); } -void fidelz80_state::vsc(machine_config &config) +void vsc_state::vsc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator - m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::vsc_map); - m_maincpu->set_addrmap(AS_IO, &fidelz80_state::vsc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::vsc_map); + m_maincpu->set_addrmap(AS_IO, &vsc_state::vsc_io); const attotime irq_period = attotime::from_hz(587); // 555 timer, measured - TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(vsc_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_usec(845)); // active for 0.845ms (approx half) - TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(vsc_state::irq_off), irq_period); I8255(config, m_ppi8255); - m_ppi8255->out_pa_callback().set(FUNC(fidelz80_state::vsc_ppi_porta_w)); - m_ppi8255->out_pb_callback().set(FUNC(fidelz80_state::vsc_ppi_portb_w)); - m_ppi8255->out_pc_callback().set(FUNC(fidelz80_state::vsc_ppi_portc_w)); + m_ppi8255->out_pa_callback().set(FUNC(vsc_state::vsc_ppi_porta_w)); + m_ppi8255->out_pb_callback().set(FUNC(vsc_state::vsc_ppi_portb_w)); + m_ppi8255->out_pc_callback().set(FUNC(vsc_state::vsc_ppi_portc_w)); Z80PIO(config, m_z80pio, 3.9_MHz_XTAL); - m_z80pio->in_pa_callback().set(FUNC(fidelz80_state::vsc_pio_porta_r)); - m_z80pio->in_pb_callback().set(FUNC(fidelz80_state::vsc_pio_portb_r)); - m_z80pio->out_pb_callback().set(FUNC(fidelz80_state::vsc_pio_portb_w)); + m_z80pio->in_pa_callback().set(FUNC(vsc_state::vsc_pio_porta_r)); + m_z80pio->in_pb_callback().set(FUNC(vsc_state::vsc_pio_portb_r)); + m_z80pio->out_pb_callback().set(FUNC(vsc_state::vsc_pio_portb_w)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_vsc); @@ -1990,7 +2031,7 @@ void fidelz80_state::vsc(machine_config &config) /* sound hardware */ SPEAKER(config, "speaker").front_center(); S14001A(config, m_speech, 25000); // R/C circuit, around 25khz - m_speech->ext_read().set(FUNC(fidelz80_state::vsc_speech_r)); + m_speech->ext_read().set(FUNC(vsc_state::vsc_speech_r)); m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75); } @@ -2052,16 +2093,16 @@ void card_state::bv3(machine_config &config) config.set_default_layout(layout_fidel_bv3); } -void fidelz80_state::dsc(machine_config &config) +void dsc_state::dsc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator - m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::dsc_map); + m_maincpu->set_addrmap(AS_PROGRAM, &dsc_state::dsc_map); const attotime irq_period = attotime::from_hz(523); // from 555 timer (22nF, 120K, 2.7K) - TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(dsc_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us - TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(dsc_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_dsc); @@ -2277,10 +2318,10 @@ ROM_END // YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS CONS( 1978, cc10, 0, 0, ccx, ccx, ccx_state, empty_init, "Fidelity Electronics", "Chess Challenger 10 (model CCX, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1979, cc7, 0, 0, bcc, bcc, fidelz80_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1979, backgamc, 0, 0, bkc, bkc, fidelz80_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) +CONS( 1979, cc7, 0, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1979, backgamc, 0, 0, bkc, bkc, bcc_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) -CONS( 1980, fscc8, 0, 0, scc, scc, fidelz80_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1980, fscc8, 0, 0, scc, scc, scc_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1979, vcc, 0, 0, vcc, vcc, vcc_state, empty_init, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1979, vccsp, vcc, 0, vcc, vccsp, vcc_state, empty_init, "Fidelity Electronics", "Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) @@ -2292,13 +2333,13 @@ CONS( 1980, uvcsp, vcc, 0, vcc, vccsp, vcc_state, empty_init, "Fidelit CONS( 1980, uvcg, vcc, 0, vcc, vccg, vcc_state, empty_init, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1980, uvcfr, vcc, 0, vcc, vccfr, vcc_state, empty_init, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1980, vsc, 0, 0, vsc, vsc, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1980, vscsp, vsc, 0, vsc, vscsp, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1980, vscg, vsc, 0, vsc, vscg, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1980, vscfr, vsc, 0, vsc, vscfr, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1980, vsc, 0, 0, vsc, vsc, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1980, vscsp, vsc, 0, vsc, vscsp, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1980, vscg, vsc, 0, vsc, vscg, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1980, vscfr, vsc, 0, vsc, vscfr, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1980, vbrc, 0, 0, vbrc, vbrc, card_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, card_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) CONS( 1982, bridgec3, 0, 0, bv3, bv3, card_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) -CONS( 1981, damesc, 0, 0, dsc, dsc, fidelz80_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1981, damesc, 0, 0, dsc, dsc, dsc_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) From 7df0cf84a27c28953221e894d99c0e18a0ba19fd Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 16 Feb 2019 23:24:50 +0100 Subject: [PATCH 09/21] fidelz80: remove function prefix (nw) --- src/mame/drivers/fidelz80.cpp | 300 +++++++++++++++++----------------- 1 file changed, 150 insertions(+), 150 deletions(-) diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 7543539261c..11d0ba18b1a 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -567,12 +567,12 @@ public: void scc(machine_config &config); private: - void scc_map(address_map &map); - void scc_io(address_map &map); + void main_map(address_map &map); + void main_io(address_map &map); // I/O handlers - DECLARE_READ8_MEMBER(scc_input_r); - DECLARE_WRITE8_MEMBER(scc_control_w); + DECLARE_READ8_MEMBER(input_r); + DECLARE_WRITE8_MEMBER(control_w); }; @@ -586,13 +586,13 @@ public: void dsc(machine_config &config); private: - void dsc_map(address_map &map); + void main_map(address_map &map); // I/O handlers - void dsc_prepare_display(); - DECLARE_WRITE8_MEMBER(dsc_control_w); - DECLARE_WRITE8_MEMBER(dsc_select_w); - DECLARE_READ8_MEMBER(dsc_input_r); + void prepare_display(); + DECLARE_WRITE8_MEMBER(control_w); + DECLARE_WRITE8_MEMBER(select_w); + DECLARE_READ8_MEMBER(input_r); }; @@ -607,12 +607,12 @@ public: void bkc(machine_config &config); private: - void bcc_map(address_map &map); - void bcc_io(address_map &map); + void main_map(address_map &map); + void main_io(address_map &map); // I/O handlers - DECLARE_READ8_MEMBER(bcc_input_r); - DECLARE_WRITE8_MEMBER(bcc_control_w); + DECLARE_READ8_MEMBER(input_r); + DECLARE_WRITE8_MEMBER(control_w); }; @@ -632,20 +632,20 @@ private: required_device m_z80pio; required_device m_ppi8255; - void vsc_map(address_map &map); - void vsc_io(address_map &map); + void main_map(address_map &map); + void main_io(address_map &map); + DECLARE_READ8_MEMBER(main_io_trampoline_r); + DECLARE_WRITE8_MEMBER(main_io_trampoline_w); // I/O handlers - void vsc_prepare_display(); - DECLARE_READ8_MEMBER(vsc_speech_r); - DECLARE_READ8_MEMBER(vsc_io_trampoline_r); - DECLARE_WRITE8_MEMBER(vsc_io_trampoline_w); - DECLARE_WRITE8_MEMBER(vsc_ppi_porta_w); - DECLARE_WRITE8_MEMBER(vsc_ppi_portb_w); - DECLARE_WRITE8_MEMBER(vsc_ppi_portc_w); - DECLARE_READ8_MEMBER(vsc_pio_porta_r); - DECLARE_READ8_MEMBER(vsc_pio_portb_r); - DECLARE_WRITE8_MEMBER(vsc_pio_portb_w); + void prepare_display(); + DECLARE_READ8_MEMBER(speech_r); + DECLARE_WRITE8_MEMBER(ppi_porta_w); + DECLARE_WRITE8_MEMBER(ppi_portb_w); + DECLARE_WRITE8_MEMBER(ppi_portc_w); + DECLARE_READ8_MEMBER(pio_porta_r); + DECLARE_READ8_MEMBER(pio_portb_r); + DECLARE_WRITE8_MEMBER(pio_portb_w); }; @@ -671,15 +671,15 @@ private: TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); } - void ccx_map(address_map &map); - void ccx_io(address_map &map); + void main_map(address_map &map); + void main_io(address_map &map); // I/O handlers - void ccx_prepare_display(); - DECLARE_WRITE8_MEMBER(ccx_ppi_porta_w); - DECLARE_WRITE8_MEMBER(ccx_ppi_portb_w); - DECLARE_READ8_MEMBER(ccx_ppi_portc_r); - DECLARE_WRITE8_MEMBER(ccx_ppi_portc_w); + void prepare_display(); + DECLARE_WRITE8_MEMBER(ppi_porta_w); + DECLARE_WRITE8_MEMBER(ppi_portb_w); + DECLARE_READ8_MEMBER(ppi_portc_r); + DECLARE_WRITE8_MEMBER(ppi_portc_w); }; @@ -704,14 +704,14 @@ private: required_device m_mcu; required_device m_i8243; - void vbrc_main_map(address_map &map); - void vbrc_main_io(address_map &map); + void main_map(address_map &map); + void main_io(address_map &map); - void vbrc_prepare_display(); - DECLARE_WRITE8_MEMBER(vbrc_speech_w); - DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w); - DECLARE_READ8_MEMBER(vbrc_mcu_p2_r); - template void vbrc_ioexp_port_w(uint8_t data); + void prepare_display(); + DECLARE_WRITE8_MEMBER(speech_w); + DECLARE_WRITE8_MEMBER(mcu_p1_w); + DECLARE_READ8_MEMBER(mcu_p2_r); + template void ioexp_port_w(uint8_t data); }; @@ -734,17 +734,17 @@ private: // devices/pointers required_device m_ppi8255; - void vcc_map(address_map &map); - void vcc_io(address_map &map); + void main_map(address_map &map); + void main_io(address_map &map); // I/O handlers - void vcc_prepare_display(); - DECLARE_READ8_MEMBER(vcc_speech_r); - DECLARE_WRITE8_MEMBER(vcc_ppi_porta_w); - DECLARE_READ8_MEMBER(vcc_ppi_portb_r); - DECLARE_WRITE8_MEMBER(vcc_ppi_portb_w); - DECLARE_READ8_MEMBER(vcc_ppi_portc_r); - DECLARE_WRITE8_MEMBER(vcc_ppi_portc_w); + void prepare_display(); + DECLARE_READ8_MEMBER(speech_r); + DECLARE_WRITE8_MEMBER(ppi_porta_w); + DECLARE_READ8_MEMBER(ppi_portb_r); + DECLARE_WRITE8_MEMBER(ppi_portb_w); + DECLARE_READ8_MEMBER(ppi_portc_r); + DECLARE_WRITE8_MEMBER(ppi_portc_w); }; void vcc_state::machine_start() @@ -892,7 +892,7 @@ READ8_MEMBER(fidelbase_state::cartridge_r) // misc handlers -void vcc_state::vcc_prepare_display() +void vcc_state::prepare_display() { // 4 7seg leds (note: sel d0 for extra leds) u8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80); @@ -900,7 +900,7 @@ void vcc_state::vcc_prepare_display() display_matrix(8, 4, outdata, m_led_select >> 2 & 0xf); } -READ8_MEMBER(vcc_state::vcc_speech_r) +READ8_MEMBER(vcc_state::speech_r) { return m_speech_rom[m_speech_bank << 12 | offset]; } @@ -908,11 +908,11 @@ READ8_MEMBER(vcc_state::vcc_speech_r) // I8255 PPI -WRITE8_MEMBER(vcc_state::vcc_ppi_porta_w) +WRITE8_MEMBER(vcc_state::ppi_porta_w) { // d0-d6: digit segment data, bits are xABCDEFG m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6); - vcc_prepare_display(); + prepare_display(); // d0-d5: TSI C0-C5 // d7: TSI START line @@ -928,28 +928,28 @@ WRITE8_MEMBER(vcc_state::vcc_ppi_porta_w) } } -READ8_MEMBER(vcc_state::vcc_ppi_portb_r) +READ8_MEMBER(vcc_state::ppi_portb_r) { // d7: TSI BUSY line return (m_speech->busy_r()) ? 0x80 : 0x00; } -WRITE8_MEMBER(vcc_state::vcc_ppi_portb_w) +WRITE8_MEMBER(vcc_state::ppi_portb_w) { // d0,d2-d5: digit/led select // _d6: enable language switches m_led_select = data; - vcc_prepare_display(); + prepare_display(); } -READ8_MEMBER(vcc_state::vcc_ppi_portc_r) +READ8_MEMBER(vcc_state::ppi_portc_r) { // d0-d3: multiplexed inputs (active low), also language switches u8 lan = (~m_led_select & 0x40) ? m_inp_matrix[4]->read() : 0; return ~(lan | read_inputs(4)) & 0xf; } -WRITE8_MEMBER(vcc_state::vcc_ppi_portc_w) +WRITE8_MEMBER(vcc_state::ppi_portc_w) { // d4-d7: input mux (inverted) m_inp_mux = ~data >> 4 & 0xf; @@ -958,7 +958,7 @@ WRITE8_MEMBER(vcc_state::vcc_ppi_portc_w) // CCX-specific (no speech chip, 1-bit beeper instead) -void ccx_state::ccx_prepare_display() +void ccx_state::prepare_display() { // 4 7seg leds (note: sel d0 for extra leds) u8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80); @@ -969,7 +969,7 @@ void ccx_state::ccx_prepare_display() // I8255 PPI -WRITE8_MEMBER(ccx_state::ccx_ppi_porta_w) +WRITE8_MEMBER(ccx_state::ppi_porta_w) { // d7: enable beeper on falling edge (555 monostable) if (m_beeper && ~data & m_7seg_data & 0x80) @@ -980,23 +980,23 @@ WRITE8_MEMBER(ccx_state::ccx_ppi_porta_w) // d0-d6: digit segment data m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6); - ccx_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(ccx_state::ccx_ppi_portb_w) +WRITE8_MEMBER(ccx_state::ppi_portb_w) { // d0,d2-d5: digit/led select m_led_select = data; - ccx_prepare_display(); + prepare_display(); } -READ8_MEMBER(ccx_state::ccx_ppi_portc_r) +READ8_MEMBER(ccx_state::ppi_portc_r) { // d0-d3: multiplexed inputs (active low) return ~read_inputs(4) & 0xf; } -WRITE8_MEMBER(ccx_state::ccx_ppi_portc_w) +WRITE8_MEMBER(ccx_state::ppi_portc_w) { // d4-d7: input mux (inverted) m_inp_mux = ~data >> 4 & 0xf; @@ -1010,7 +1010,7 @@ WRITE8_MEMBER(ccx_state::ccx_ppi_portc_w) // TTL -WRITE8_MEMBER(bcc_state::bcc_control_w) +WRITE8_MEMBER(bcc_state::control_w) { // a0-a2,d7: digit segment data via NE591 u8 mask = 1 << (offset & 7); @@ -1027,7 +1027,7 @@ WRITE8_MEMBER(bcc_state::bcc_control_w) m_inp_mux = data & 0xf; } -READ8_MEMBER(bcc_state::bcc_input_r) +READ8_MEMBER(bcc_state::input_r) { // d0-d3: multiplexed inputs return read_inputs(4); @@ -1041,7 +1041,7 @@ READ8_MEMBER(bcc_state::bcc_input_r) // TTL -WRITE8_MEMBER(scc_state::scc_control_w) +WRITE8_MEMBER(scc_state::control_w) { // a0-a2,d7: led data u8 mask = 1 << (offset & 7); @@ -1054,7 +1054,7 @@ WRITE8_MEMBER(scc_state::scc_control_w) display_matrix(8, 9, m_led_data, (m_inp_mux & 0xff) | (data << 4 & 0x100)); } -READ8_MEMBER(scc_state::scc_input_r) +READ8_MEMBER(scc_state::input_r) { // d0-d7: multiplexed inputs (active low) return ~read_inputs(9); @@ -1068,14 +1068,14 @@ READ8_MEMBER(scc_state::scc_input_r) // misc handlers -void vsc_state::vsc_prepare_display() +void vsc_state::prepare_display() { // 4 7seg leds+H, 8*8 chessboard leds set_display_segmask(0xf, 0x7f); display_matrix(16, 8, m_led_data << 8 | m_7seg_data, m_led_select); } -READ8_MEMBER(vsc_state::vsc_speech_r) +READ8_MEMBER(vsc_state::speech_r) { return m_speech_rom[m_speech_bank << 12 | offset]; } @@ -1083,42 +1083,42 @@ READ8_MEMBER(vsc_state::vsc_speech_r) // I8255 PPI -WRITE8_MEMBER(vsc_state::vsc_ppi_porta_w) +WRITE8_MEMBER(vsc_state::ppi_porta_w) { // d0-d5: TSI C0-C5 m_speech->data_w(space, 0, data & 0x3f); // d0-d7: data for the 4 7seg leds, bits are HGCBAFED (H is extra led) m_7seg_data = bitswap<8>(data,7,6,2,1,0,5,4,3); - vsc_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(vsc_state::vsc_ppi_portb_w) +WRITE8_MEMBER(vsc_state::ppi_portb_w) { // d0-d7: led row data m_led_data = data; - vsc_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(vsc_state::vsc_ppi_portc_w) +WRITE8_MEMBER(vsc_state::ppi_portc_w) { // d0-d3: select digits // d0-d7: select leds, input mux low bits m_inp_mux = (m_inp_mux & ~0xff) | data; m_led_select = data; - vsc_prepare_display(); + prepare_display(); } // Z80 PIO -READ8_MEMBER(vsc_state::vsc_pio_porta_r) +READ8_MEMBER(vsc_state::pio_porta_r) { // d0-d7: multiplexed inputs return read_inputs(11); } -READ8_MEMBER(vsc_state::vsc_pio_portb_r) +READ8_MEMBER(vsc_state::pio_portb_r) { u8 data = 0; @@ -1128,7 +1128,7 @@ READ8_MEMBER(vsc_state::vsc_pio_portb_r) return data; } -WRITE8_MEMBER(vsc_state::vsc_pio_portb_w) +WRITE8_MEMBER(vsc_state::pio_portb_w) { // d0,d1: input mux highest bits // d5: enable language switch @@ -1153,7 +1153,7 @@ WRITE8_MEMBER(vsc_state::vsc_pio_portb_w) // misc handlers -void card_state::vbrc_prepare_display() +void card_state::prepare_display() { // 14seg led segments, d15(12) is extra led u16 outdata = bitswap<16>(m_7seg_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8); @@ -1161,7 +1161,7 @@ void card_state::vbrc_prepare_display() display_matrix(16, 8, outdata, m_led_select); } -WRITE8_MEMBER(card_state::vbrc_speech_w) +WRITE8_MEMBER(card_state::speech_w) { if (m_speech == nullptr) return; @@ -1175,11 +1175,11 @@ WRITE8_MEMBER(card_state::vbrc_speech_w) // I8243 I/O expander template -void card_state::vbrc_ioexp_port_w(uint8_t data) +void card_state::ioexp_port_w(uint8_t data) { // P4x-P7x: digit segment data m_7seg_data = (m_7seg_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P)); - vbrc_prepare_display(); + prepare_display(); // P71 is tone (not on speech model) if (P == 3 && m_dac != nullptr) @@ -1189,14 +1189,14 @@ void card_state::vbrc_ioexp_port_w(uint8_t data) // I8041 MCU -WRITE8_MEMBER(card_state::vbrc_mcu_p1_w) +WRITE8_MEMBER(card_state::mcu_p1_w) { // P10-P17: select digits, input mux m_inp_mux = m_led_select = data; - vbrc_prepare_display(); + prepare_display(); } -READ8_MEMBER(card_state::vbrc_mcu_p2_r) +READ8_MEMBER(card_state::mcu_p2_r) { // P20-P23: I8243 P2 // P24-P27: multiplexed inputs (active low) @@ -1211,32 +1211,32 @@ READ8_MEMBER(card_state::vbrc_mcu_p2_r) // TTL -void dsc_state::dsc_prepare_display() +void dsc_state::prepare_display() { // 4 7seg leds set_display_segmask(0xf, 0x7f); display_matrix(8, 4, m_7seg_data, m_led_select); } -WRITE8_MEMBER(dsc_state::dsc_control_w) +WRITE8_MEMBER(dsc_state::control_w) { // d0-d7: input mux, 7seg data m_inp_mux = ~data; m_7seg_data = data; - dsc_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(dsc_state::dsc_select_w) +WRITE8_MEMBER(dsc_state::select_w) { // d4: speaker out m_dac->write(BIT(~data, 4)); // d0-d3: digit select m_led_select = data & 0xf; - dsc_prepare_display(); + prepare_display(); } -READ8_MEMBER(dsc_state::dsc_input_r) +READ8_MEMBER(dsc_state::input_r) { // d0-d7: multiplexed inputs (active low) return ~read_inputs(8); @@ -1250,7 +1250,7 @@ READ8_MEMBER(dsc_state::dsc_input_r) // CCX, VCC/UVC -void ccx_state::ccx_map(address_map &map) +void ccx_state::main_map(address_map &map) { map.unmap_value_high(); map.global_mask(0x3fff); @@ -1259,20 +1259,20 @@ void ccx_state::ccx_map(address_map &map) map(0x3000, 0x30ff).mirror(0x0f00).ram(); } -void ccx_state::ccx_io(address_map &map) +void ccx_state::main_io(address_map &map) { map.global_mask(0x03); map(0x00, 0x03).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write)); } -void vcc_state::vcc_map(address_map &map) +void vcc_state::main_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x2fff).rom(); map(0x4000, 0x43ff).mirror(0x1c00).ram(); } -void vcc_state::vcc_io(address_map &map) +void vcc_state::main_io(address_map &map) { map.global_mask(0x03); map(0x00, 0x03).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write)); @@ -1281,7 +1281,7 @@ void vcc_state::vcc_io(address_map &map) // BCC, BKC -void bcc_state::bcc_map(address_map &map) +void bcc_state::main_map(address_map &map) { map.unmap_value_high(); map.global_mask(0x3fff); @@ -1289,31 +1289,31 @@ void bcc_state::bcc_map(address_map &map) map(0x3000, 0x30ff).mirror(0x0f00).ram(); } -void bcc_state::bcc_io(address_map &map) +void bcc_state::main_io(address_map &map) { map.global_mask(0x07); - map(0x00, 0x07).rw(FUNC(bcc_state::bcc_input_r), FUNC(bcc_state::bcc_control_w)); + map(0x00, 0x07).rw(FUNC(bcc_state::input_r), FUNC(bcc_state::control_w)); } // SCC -void scc_state::scc_map(address_map &map) +void scc_state::main_map(address_map &map) { map(0x0000, 0x0fff).rom(); map(0x5000, 0x50ff).ram(); } -void scc_state::scc_io(address_map &map) +void scc_state::main_io(address_map &map) { map.global_mask(0x07); - map(0x00, 0x07).rw(FUNC(scc_state::scc_input_r), FUNC(scc_state::scc_control_w)); + map(0x00, 0x07).rw(FUNC(scc_state::input_r), FUNC(scc_state::control_w)); } // VSC -void vsc_state::vsc_map(address_map &map) +void vsc_state::main_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x3fff).rom(); @@ -1322,7 +1322,7 @@ void vsc_state::vsc_map(address_map &map) } // VSC io: A2 is 8255 _CE, A3 is Z80 PIO _CE - in theory, both chips can be accessed simultaneously -READ8_MEMBER(vsc_state::vsc_io_trampoline_r) +READ8_MEMBER(vsc_state::main_io_trampoline_r) { u8 data = 0xff; // open bus if (~offset & 4) @@ -1333,7 +1333,7 @@ READ8_MEMBER(vsc_state::vsc_io_trampoline_r) return data; } -WRITE8_MEMBER(vsc_state::vsc_io_trampoline_w) +WRITE8_MEMBER(vsc_state::main_io_trampoline_w) { if (~offset & 4) m_ppi8255->write(offset & 3, data); @@ -1341,24 +1341,24 @@ WRITE8_MEMBER(vsc_state::vsc_io_trampoline_w) m_z80pio->write(space, offset & 3, data); } -void vsc_state::vsc_io(address_map &map) +void vsc_state::main_io(address_map &map) { map.global_mask(0x0f); - map(0x00, 0x0f).rw(FUNC(vsc_state::vsc_io_trampoline_r), FUNC(vsc_state::vsc_io_trampoline_w)); + map(0x00, 0x0f).rw(FUNC(vsc_state::main_io_trampoline_r), FUNC(vsc_state::main_io_trampoline_w)); } // VBRC/UBC, BV3 -void card_state::vbrc_main_map(address_map &map) +void card_state::main_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x5fff).rom(); map(0x6000, 0x63ff).mirror(0x1c00).ram(); - map(0xe000, 0xe000).mirror(0x1fff).w(FUNC(card_state::vbrc_speech_w)); + map(0xe000, 0xe000).mirror(0x1fff).w(FUNC(card_state::speech_w)); } -void card_state::vbrc_main_io(address_map &map) +void card_state::main_io(address_map &map) { map.global_mask(0x01); map(0x00, 0x01).rw(m_mcu, FUNC(i8041_device::upi41_master_r), FUNC(i8041_device::upi41_master_w)); @@ -1367,13 +1367,13 @@ void card_state::vbrc_main_io(address_map &map) // DSC -void dsc_state::dsc_map(address_map &map) +void dsc_state::main_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x1fff).rom(); - map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(dsc_state::dsc_control_w)); - map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(dsc_state::dsc_select_w)); - map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(dsc_state::dsc_input_r)); + map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(dsc_state::control_w)); + map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(dsc_state::select_w)); + map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(dsc_state::input_r)); map(0xa000, 0xa3ff).mirror(0x1c00).ram(); } @@ -1913,8 +1913,8 @@ void bcc_state::bkc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.579545_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &bcc_state::bcc_map); - m_maincpu->set_addrmap(AS_IO, &bcc_state::bcc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &bcc_state::main_map); + m_maincpu->set_addrmap(AS_IO, &bcc_state::main_io); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_bkc); @@ -1937,8 +1937,8 @@ void scc_state::scc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.9_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &scc_state::scc_map); - m_maincpu->set_addrmap(AS_IO, &scc_state::scc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &scc_state::main_map); + m_maincpu->set_addrmap(AS_IO, &scc_state::main_io); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_sc8); @@ -1955,17 +1955,17 @@ void ccx_state::ccx(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 4_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &ccx_state::ccx_map); - m_maincpu->set_addrmap(AS_IO, &ccx_state::ccx_io); + m_maincpu->set_addrmap(AS_PROGRAM, &ccx_state::main_map); + m_maincpu->set_addrmap(AS_IO, &ccx_state::main_io); I8255(config, m_ppi8255); - m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ccx_ppi_porta_w)); + m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ppi_porta_w)); m_ppi8255->tri_pa_callback().set_constant(0); m_ppi8255->in_pb_callback().set_ioport("LEVEL"); - m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ccx_ppi_portb_w)); - m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ccx_ppi_portc_r)); + m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w)); + m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r)); m_ppi8255->tri_pb_callback().set_constant(0); - m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ccx_ppi_portc_w)); + m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_cc10); @@ -1981,17 +1981,17 @@ void vcc_state::vcc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 4_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &vcc_state::vcc_map); - m_maincpu->set_addrmap(AS_IO, &vcc_state::vcc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &vcc_state::main_map); + m_maincpu->set_addrmap(AS_IO, &vcc_state::main_io); I8255(config, m_ppi8255); - m_ppi8255->out_pa_callback().set(FUNC(vcc_state::vcc_ppi_porta_w)); + m_ppi8255->out_pa_callback().set(FUNC(vcc_state::ppi_porta_w)); m_ppi8255->tri_pa_callback().set_constant(0); - m_ppi8255->in_pb_callback().set(FUNC(vcc_state::vcc_ppi_portb_r)); - m_ppi8255->out_pb_callback().set(FUNC(vcc_state::vcc_ppi_portb_w)); + m_ppi8255->in_pb_callback().set(FUNC(vcc_state::ppi_portb_r)); + m_ppi8255->out_pb_callback().set(FUNC(vcc_state::ppi_portb_w)); m_ppi8255->tri_pb_callback().set_constant(0); - m_ppi8255->in_pc_callback().set(FUNC(vcc_state::vcc_ppi_portc_r)); - m_ppi8255->out_pc_callback().set(FUNC(vcc_state::vcc_ppi_portc_w)); + m_ppi8255->in_pc_callback().set(FUNC(vcc_state::ppi_portc_r)); + m_ppi8255->out_pc_callback().set(FUNC(vcc_state::ppi_portc_w)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_vcc); @@ -1999,7 +1999,7 @@ void vcc_state::vcc(machine_config &config) /* sound hardware */ SPEAKER(config, "speaker").front_center(); S14001A(config, m_speech, 25000); // R/C circuit, around 25khz - m_speech->ext_read().set(FUNC(vcc_state::vcc_speech_r)); + m_speech->ext_read().set(FUNC(vcc_state::speech_r)); m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75); } @@ -2007,8 +2007,8 @@ void vsc_state::vsc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator - m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::vsc_map); - m_maincpu->set_addrmap(AS_IO, &vsc_state::vsc_io); + m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::main_map); + m_maincpu->set_addrmap(AS_IO, &vsc_state::main_io); const attotime irq_period = attotime::from_hz(587); // 555 timer, measured TIMER(config, m_irq_on).configure_periodic(FUNC(vsc_state::irq_on), irq_period); @@ -2016,14 +2016,14 @@ void vsc_state::vsc(machine_config &config) TIMER(config, "irq_off").configure_periodic(FUNC(vsc_state::irq_off), irq_period); I8255(config, m_ppi8255); - m_ppi8255->out_pa_callback().set(FUNC(vsc_state::vsc_ppi_porta_w)); - m_ppi8255->out_pb_callback().set(FUNC(vsc_state::vsc_ppi_portb_w)); - m_ppi8255->out_pc_callback().set(FUNC(vsc_state::vsc_ppi_portc_w)); + m_ppi8255->out_pa_callback().set(FUNC(vsc_state::ppi_porta_w)); + m_ppi8255->out_pb_callback().set(FUNC(vsc_state::ppi_portb_w)); + m_ppi8255->out_pc_callback().set(FUNC(vsc_state::ppi_portc_w)); Z80PIO(config, m_z80pio, 3.9_MHz_XTAL); - m_z80pio->in_pa_callback().set(FUNC(vsc_state::vsc_pio_porta_r)); - m_z80pio->in_pb_callback().set(FUNC(vsc_state::vsc_pio_portb_r)); - m_z80pio->out_pb_callback().set(FUNC(vsc_state::vsc_pio_portb_w)); + m_z80pio->in_pa_callback().set(FUNC(vsc_state::pio_porta_r)); + m_z80pio->in_pb_callback().set(FUNC(vsc_state::pio_portb_r)); + m_z80pio->out_pb_callback().set(FUNC(vsc_state::pio_portb_w)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_vsc); @@ -2031,7 +2031,7 @@ void vsc_state::vsc(machine_config &config) /* sound hardware */ SPEAKER(config, "speaker").front_center(); S14001A(config, m_speech, 25000); // R/C circuit, around 25khz - m_speech->ext_read().set(FUNC(vsc_state::vsc_speech_r)); + m_speech->ext_read().set(FUNC(vsc_state::speech_r)); m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75); } @@ -2039,13 +2039,13 @@ void card_state::brc_base(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 5_MHz_XTAL/2); - m_maincpu->set_addrmap(AS_PROGRAM, &card_state::vbrc_main_map); - m_maincpu->set_addrmap(AS_IO, &card_state::vbrc_main_io); + m_maincpu->set_addrmap(AS_PROGRAM, &card_state::main_map); + m_maincpu->set_addrmap(AS_IO, &card_state::main_io); config.m_perfect_cpu_quantum = subtag("maincpu"); I8041(config, m_mcu, 5_MHz_XTAL); - m_mcu->p1_out_cb().set(FUNC(card_state::vbrc_mcu_p1_w)); - m_mcu->p2_in_cb().set(FUNC(card_state::vbrc_mcu_p2_r)); + m_mcu->p1_out_cb().set(FUNC(card_state::mcu_p1_w)); + m_mcu->p2_in_cb().set(FUNC(card_state::mcu_p2_r)); m_mcu->p2_out_cb().set(m_i8243, FUNC(i8243_device::p2_w)); m_mcu->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w)); m_mcu->t0_in_cb().set_ioport("BARCODE"); // card scanner @@ -2055,10 +2055,10 @@ void card_state::brc_base(machine_config &config) m_mcu->t1_in_cb().set("t1_clock", FUNC(clock_device::signal_r)).invert(); I8243(config, m_i8243); - m_i8243->p4_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<0>)); - m_i8243->p5_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<1>)); - m_i8243->p6_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<2>)); - m_i8243->p7_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<3>)); + m_i8243->p4_out_cb().set(FUNC(card_state::ioexp_port_w<0>)); + m_i8243->p5_out_cb().set(FUNC(card_state::ioexp_port_w<1>)); + m_i8243->p6_out_cb().set(FUNC(card_state::ioexp_port_w<2>)); + m_i8243->p7_out_cb().set(FUNC(card_state::ioexp_port_w<3>)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_vbrc); @@ -2097,7 +2097,7 @@ void dsc_state::dsc(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator - m_maincpu->set_addrmap(AS_PROGRAM, &dsc_state::dsc_map); + m_maincpu->set_addrmap(AS_PROGRAM, &dsc_state::main_map); const attotime irq_period = attotime::from_hz(523); // from 555 timer (22nF, 120K, 2.7K) TIMER(config, m_irq_on).configure_periodic(FUNC(dsc_state::irq_on), irq_period); From 1c3ceca74e327159a7221644655eda7d53513a52 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 00:29:38 +0100 Subject: [PATCH 10/21] fidel68k: separate classes (nw) --- src/mame/drivers/cxgz80.cpp | 15 +- src/mame/drivers/fidel68k.cpp | 300 ++++++++++++++++++--------------- src/mame/drivers/fidel_sc6.cpp | 50 +++--- 3 files changed, 193 insertions(+), 172 deletions(-) diff --git a/src/mame/drivers/cxgz80.cpp b/src/mame/drivers/cxgz80.cpp index 64bfddffba4..8366a859fa2 100644 --- a/src/mame/drivers/cxgz80.cpp +++ b/src/mame/drivers/cxgz80.cpp @@ -42,7 +42,7 @@ public: m_maincpu(*this, "maincpu"), m_irq_on(*this, "irq_on"), m_dac(*this, "dac"), - m_speaker_off_timer(*this, "speaker_off"), + m_speaker_off(*this, "speaker_off"), m_inp_matrix(*this, "IN.%u", 0), m_out_x(*this, "%u.%u", 0U, 0U), m_out_a(*this, "%u.a", 0U), @@ -56,7 +56,7 @@ public: required_device m_maincpu; required_device m_irq_on; required_device m_dac; - required_device m_speaker_off_timer; + required_device m_speaker_off; optional_ioport_array<10> m_inp_matrix; // max 10 output_finder<0x20, 0x20> m_out_x; output_finder<0x20> m_out_a; @@ -87,7 +87,7 @@ public: void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); // Chess 2001 - TIMER_DEVICE_CALLBACK_MEMBER(speaker_off_callback); + TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); } DECLARE_WRITE8_MEMBER(ch2001_speaker_on_w); DECLARE_WRITE8_MEMBER(ch2001_leds_w); DECLARE_READ8_MEMBER(ch2001_input_r); @@ -231,16 +231,11 @@ u16 cxgz80_state::read_inputs(int columns) // TTL -TIMER_DEVICE_CALLBACK_MEMBER(cxgz80_state::speaker_off_callback) -{ - m_dac->write(0); -} - WRITE8_MEMBER(cxgz80_state::ch2001_speaker_on_w) { // 74ls109 clock pulse to speaker m_dac->write(1); - m_speaker_off_timer->adjust(attotime::from_usec(200)); // not accurate + m_speaker_off->adjust(attotime::from_usec(200)); // not accurate } WRITE8_MEMBER(cxgz80_state::ch2001_leds_w) @@ -408,7 +403,7 @@ void cxgz80_state::ch2001(machine_config &config) m_irq_on->set_start_delay(irq_period - attotime::from_nsec(18300)); // active for 18.3us TIMER(config, "irq_off").configure_periodic(FUNC(cxgz80_state::irq_off), irq_period); - TIMER(config, m_speaker_off_timer).configure_generic(FUNC(cxgz80_state::speaker_off_callback)); + TIMER(config, m_speaker_off).configure_generic(FUNC(cxgz80_state::speaker_off)); TIMER(config, "display_decay").configure_periodic(FUNC(cxgz80_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_cxg_ch2001); diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp index b7ccd80b23b..6d6f551ab66 100644 --- a/src/mame/drivers/fidel68k.cpp +++ b/src/mame/drivers/fidel68k.cpp @@ -195,22 +195,14 @@ B0000x-xxxxxx: see V7, -800000 #include "fidel_eag_68k.lh" // clickable -class fidel68k_state : public fidelbase_state +class eag_state : public fidelbase_state { public: - fidel68k_state(const machine_config &mconfig, device_type type, const char *tag) : + eag_state(const machine_config &mconfig, device_type type, const char *tag) : fidelbase_state(mconfig, type, tag), m_ram(*this, "ram") { } - void fex68k(machine_config &config); - void fex68km2(machine_config &config); - void fex68km3(machine_config &config); - - void fdes2265(machine_config &config); - void fdes2325(machine_config &config); - void init_fdes2265(); - void eag_base(machine_config &config); void eag(machine_config &config); void eagv5(machine_config &config); @@ -218,39 +210,73 @@ public: void eagv9(machine_config &config); void eagv10(machine_config &config); void eagv11(machine_config &config); + void init_eag(); private: + // devices/pointers optional_device m_ram; - // Excel 68000 - void fex68k_prepare_display(); - DECLARE_READ8_MEMBER(fex68k_input_r); - DECLARE_WRITE8_MEMBER(fex68k_leds_w); - DECLARE_WRITE8_MEMBER(fex68k_7seg_w); - DECLARE_WRITE8_MEMBER(fex68k_mux_w); - void fex68k_map(address_map &map); - void fex68km2_map(address_map &map); - void fex68km3_map(address_map &map); - - // Designer Master - DECLARE_WRITE8_MEMBER(fdes68k_control_w); - DECLARE_READ8_MEMBER(fdes68k_input_r); - DECLARE_WRITE8_MEMBER(fdes68k_lcd_w); - void fdes2265_map(address_map &map); - void fdes2325_map(address_map &map); - - // EAG(6114/6117) - void eag_prepare_display(); - DECLARE_READ8_MEMBER(eag_input1_r); - DECLARE_WRITE8_MEMBER(eag_leds_w); - DECLARE_WRITE8_MEMBER(eag_7seg_w); - DECLARE_WRITE8_MEMBER(eag_mux_w); - DECLARE_READ8_MEMBER(eag_input2_r); void eag_map(address_map &map); void eagv7_map(address_map &map); void eagv11_map(address_map &map); void eagv5_slave_map(address_map &map); + + // I/O handlers + void prepare_display(); + DECLARE_READ8_MEMBER(input1_r); + DECLARE_READ8_MEMBER(input2_r); + DECLARE_WRITE8_MEMBER(leds_w); + DECLARE_WRITE8_MEMBER(digit_w); + DECLARE_WRITE8_MEMBER(mux_w); +}; + + +class desmaster_state : public fidelbase_state +{ +public: + desmaster_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + + void fdes2265(machine_config &config); + void fdes2325(machine_config &config); + + void init_fdes2265(); + +private: + void fdes2265_map(address_map &map); + void fdes2325_map(address_map &map); + + // I/O handlers + DECLARE_WRITE8_MEMBER(control_w); + DECLARE_READ8_MEMBER(input_r); + DECLARE_WRITE8_MEMBER(lcd_w); +}; + + +class excel68k_state : public fidelbase_state +{ +public: + excel68k_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + + void fex68k(machine_config &config); + void fex68km2(machine_config &config); + void fex68km3(machine_config &config); + +private: + void fex68k_map(address_map &map); + void fex68km2_map(address_map &map); + void fex68km3_map(address_map &map); + + // I/O handlers + void prepare_display(); + DECLARE_READ8_MEMBER(input_r); + DECLARE_WRITE8_MEMBER(leds_w); + DECLARE_WRITE8_MEMBER(digit_w); + DECLARE_WRITE8_MEMBER(mux_w); }; @@ -261,7 +287,7 @@ private: Excel 68000 ******************************************************************************/ -void fidel68k_state::fex68k_prepare_display() +void excel68k_state::prepare_display() { // 4*7seg leds, 8*8 chessboard leds u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4); @@ -269,27 +295,27 @@ void fidel68k_state::fex68k_prepare_display() display_matrix(16, 8, m_led_data << 8 | seg_data, m_inp_mux); } -READ8_MEMBER(fidel68k_state::fex68k_input_r) +READ8_MEMBER(excel68k_state::input_r) { // a1-a3,d7: multiplexed inputs (active low) return (read_inputs(9) >> offset & 1) ? 0 : 0x80; } -WRITE8_MEMBER(fidel68k_state::fex68k_leds_w) +WRITE8_MEMBER(excel68k_state::leds_w) { // a1-a3,d0: led data m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset); - fex68k_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(fidel68k_state::fex68k_7seg_w) +WRITE8_MEMBER(excel68k_state::digit_w) { // a1-a3,d0(d8): digit segment data m_7seg_data = (m_7seg_data & ~(1 << offset)) | ((data & 1) << offset); - fex68k_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) +WRITE8_MEMBER(excel68k_state::mux_w) { // a1-a3,d0: 74259 u8 mask = 1 << offset; @@ -301,7 +327,7 @@ WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) u16 sel = 1 << (m_led_select & 0xf); m_dac->write(BIT(sel, 9)); m_inp_mux = sel & 0x1ff; - fex68k_prepare_display(); + prepare_display(); } @@ -310,7 +336,7 @@ WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) Designer Master ******************************************************************************/ -WRITE8_MEMBER(fidel68k_state::fdes68k_control_w) +WRITE8_MEMBER(desmaster_state::control_w) { u8 q3_old = m_led_select & 8; @@ -341,13 +367,13 @@ WRITE8_MEMBER(fidel68k_state::fdes68k_control_w) display_update(); } -READ8_MEMBER(fidel68k_state::fdes68k_input_r) +READ8_MEMBER(desmaster_state::input_r) { // a1-a3,d7(d15): multiplexed inputs (active low) return (read_inputs(9) >> offset & 1) ? 0 : 0x80; } -WRITE8_MEMBER(fidel68k_state::fdes68k_lcd_w) +WRITE8_MEMBER(desmaster_state::lcd_w) { // a1-a3,d0-d3: 4*74259 to lcd digit segments u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5); @@ -358,7 +384,7 @@ WRITE8_MEMBER(fidel68k_state::fdes68k_lcd_w) } } -void fidel68k_state::init_fdes2265() +void desmaster_state::init_fdes2265() { u16 *rom = (u16*)memregion("maincpu")->base(); const u32 len = memregion("maincpu")->bytes() / 2; @@ -382,7 +408,7 @@ void fidel68k_state::init_fdes2265() // TTL/generic -void fidel68k_state::eag_prepare_display() +void eag_state::prepare_display() { // 8*7seg leds(2 panels), (8+1)*8 chessboard leds u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4); @@ -390,33 +416,33 @@ void fidel68k_state::eag_prepare_display() display_matrix(16, 9, m_led_data << 8 | seg_data, m_inp_mux); } -READ8_MEMBER(fidel68k_state::eag_input1_r) +READ8_MEMBER(eag_state::input1_r) { // a1-a3,d7: multiplexed inputs (active low) return (read_inputs(9) >> offset & 1) ? 0 : 0x80; } -READ8_MEMBER(fidel68k_state::eag_input2_r) +READ8_MEMBER(eag_state::input2_r) { // d7: multiplexed inputs highest bit return (read_inputs(9) & 0x100) ? 0x80 : 0; } -WRITE8_MEMBER(fidel68k_state::eag_leds_w) +WRITE8_MEMBER(eag_state::leds_w) { // a1-a3,d0: led data m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset); - eag_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(fidel68k_state::eag_7seg_w) +WRITE8_MEMBER(eag_state::digit_w) { // a1-a3,d0(d8): digit segment data m_7seg_data = (m_7seg_data & ~(1 << offset)) | ((data & 1) << offset); - eag_prepare_display(); + prepare_display(); } -WRITE8_MEMBER(fidel68k_state::eag_mux_w) +WRITE8_MEMBER(eag_state::mux_w) { // d0-d3: 74145 A-D // 74145 0-8: input mux, digit/led select @@ -424,7 +450,7 @@ WRITE8_MEMBER(fidel68k_state::eag_mux_w) u16 sel = 1 << (data & 0xf); m_dac->write(BIT(sel, 9)); m_inp_mux = sel & 0x1ff; - eag_prepare_display(); + prepare_display(); } @@ -435,23 +461,23 @@ WRITE8_MEMBER(fidel68k_state::eag_mux_w) // Excel 68000 -void fidel68k_state::fex68k_map(address_map &map) +void excel68k_state::fex68k_map(address_map &map) { map(0x000000, 0x00ffff).rom(); - map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::fex68k_leds_w)).umask16(0x00ff); - map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::fex68k_7seg_w)).umask16(0xff00); + map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask16(0x00ff); + map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask16(0xff00); map(0x044000, 0x047fff).ram(); - map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(fidel68k_state::fex68k_input_r)).umask16(0x00ff); - map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(fidel68k_state::fex68k_mux_w)).umask16(0x00ff); + map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input_r)).umask16(0x00ff); + map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask16(0x00ff); } -void fidel68k_state::fex68km2_map(address_map &map) +void excel68k_state::fex68km2_map(address_map &map) { fex68k_map(map); map(0x200000, 0x21ffff).ram(); } -void fidel68k_state::fex68km3_map(address_map &map) +void excel68k_state::fex68km3_map(address_map &map) { fex68k_map(map); map(0x200000, 0x20ffff).ram(); @@ -460,24 +486,24 @@ void fidel68k_state::fex68km3_map(address_map &map) // Designer Master -void fidel68k_state::fdes2265_map(address_map &map) +void desmaster_state::fdes2265_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); - map(0x000000, 0x00000f).w(FUNC(fidel68k_state::fdes68k_lcd_w)).umask16(0x00ff); + map(0x000000, 0x00000f).w(FUNC(desmaster_state::lcd_w)).umask16(0x00ff); map(0x044000, 0x047fff).ram(); map(0x100000, 0x10ffff).ram(); - map(0x140000, 0x14000f).r(FUNC(fidel68k_state::fdes68k_input_r)).umask16(0xff00); - map(0x140000, 0x14000f).w(FUNC(fidel68k_state::fdes68k_control_w)).umask16(0x00ff); + map(0x140000, 0x14000f).r(FUNC(desmaster_state::input_r)).umask16(0xff00); + map(0x140000, 0x14000f).w(FUNC(desmaster_state::control_w)).umask16(0x00ff); } -void fidel68k_state::fdes2325_map(address_map &map) +void desmaster_state::fdes2325_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); - map(0x100000, 0x10000f).w(FUNC(fidel68k_state::fdes68k_lcd_w)).umask32(0x00ff00ff); - map(0x140000, 0x14000f).w(FUNC(fidel68k_state::fdes68k_control_w)).umask32(0x00ff00ff); - map(0x180000, 0x18000f).r(FUNC(fidel68k_state::fdes68k_input_r)).umask32(0xff00ff00); + map(0x100000, 0x10000f).w(FUNC(desmaster_state::lcd_w)).umask32(0x00ff00ff); + map(0x140000, 0x14000f).w(FUNC(desmaster_state::control_w)).umask32(0x00ff00ff); + map(0x180000, 0x18000f).r(FUNC(desmaster_state::input_r)).umask32(0xff00ff00); map(0x300000, 0x37ffff).ram(); map(0x500000, 0x507fff).ram(); } @@ -485,55 +511,55 @@ void fidel68k_state::fdes2325_map(address_map &map) // EAG -void fidel68k_state::init_eag() +void eag_state::init_eag() { // eag_map: DRAM slots at $200000-$2fffff - V1/V2/V5: 128K, V3: 512K, V4: 1M m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x200000 + m_ram->size() - 1, m_ram->pointer()); } -void fidel68k_state::eag_map(address_map &map) +void eag_state::eag_map(address_map &map) { map(0x000000, 0x01ffff).rom(); map(0x104000, 0x107fff).ram(); - map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(fidel68k_state::eag_7seg_w)).umask16(0xff00).nopr(); - map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(fidel68k_state::eag_input1_r), FUNC(fidel68k_state::eag_leds_w)).umask16(0x00ff); - map(0x400000, 0x407fff).r(FUNC(fidel68k_state::cartridge_r)).umask16(0xff00); - map(0x400001, 0x400001).w(FUNC(fidel68k_state::eag_mux_w)); + map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr(); + map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff); + map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask16(0xff00); + map(0x400001, 0x400001).w(FUNC(eag_state::mux_w)); map(0x400002, 0x400007).nopw(); // ? map(0x604000, 0x607fff).ram().share("nvram"); - map(0x700003, 0x700003).r(FUNC(fidel68k_state::eag_input2_r)); + map(0x700003, 0x700003).r(FUNC(eag_state::input2_r)); } -void fidel68k_state::eagv7_map(address_map &map) +void eag_state::eagv7_map(address_map &map) { map(0x000000, 0x01ffff).rom(); map(0x104000, 0x107fff).ram(); map(0x200000, 0x2fffff).ram(); - map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(fidel68k_state::eag_7seg_w)).umask32(0xff00ff00).nopr(); - map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(fidel68k_state::eag_input1_r), FUNC(fidel68k_state::eag_leds_w)).umask32(0x00ff00ff); - map(0x400000, 0x407fff).r(FUNC(fidel68k_state::cartridge_r)).umask32(0xff00ff00); - map(0x400001, 0x400001).w(FUNC(fidel68k_state::eag_mux_w)); + map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr(); + map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff); + map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00); + map(0x400001, 0x400001).w(FUNC(eag_state::mux_w)); map(0x400004, 0x400007).nopw(); // ? map(0x604000, 0x607fff).ram().share("nvram"); - map(0x700003, 0x700003).r(FUNC(fidel68k_state::eag_input2_r)); + map(0x700003, 0x700003).r(FUNC(eag_state::input2_r)); map(0x800000, 0x807fff).ram(); } -void fidel68k_state::eagv11_map(address_map &map) +void eag_state::eagv11_map(address_map &map) { map(0x00000000, 0x0001ffff).rom(); map(0x00200000, 0x003fffff).ram(); - map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(fidel68k_state::eag_7seg_w)).umask32(0xff00ff00).nopr(); - map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(fidel68k_state::eag_input1_r), FUNC(fidel68k_state::eag_leds_w)).umask32(0x00ff00ff); - map(0x00c00000, 0x00c07fff).r(FUNC(fidel68k_state::cartridge_r)).umask32(0xff00ff00); - map(0x00c00001, 0x00c00001).w(FUNC(fidel68k_state::eag_mux_w)); + map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr(); + map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff); + map(0x00c00000, 0x00c07fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00); + map(0x00c00001, 0x00c00001).w(FUNC(eag_state::mux_w)); map(0x00c00004, 0x00c00007).nopw(); // ? map(0x00e04000, 0x00e07fff).ram().share("nvram"); - map(0x00f00003, 0x00f00003).r(FUNC(fidel68k_state::eag_input2_r)); + map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r)); map(0x01000000, 0x0101ffff).ram(); } -void fidel68k_state::eagv5_slave_map(address_map &map) +void eag_state::eagv5_slave_map(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x044000, 0x047fff).ram(); @@ -545,7 +571,7 @@ void fidel68k_state::eagv5_slave_map(address_map &map) Input Ports ******************************************************************************/ -static INPUT_PORTS_START( fex68k ) +static INPUT_PORTS_START( excel68k ) PORT_INCLUDE( fidel_cb_buttons ) PORT_START("IN.8") @@ -560,7 +586,7 @@ static INPUT_PORTS_START( fex68k ) INPUT_PORTS_END -static INPUT_PORTS_START( fdes68k ) +static INPUT_PORTS_START( desmaster ) PORT_INCLUDE( fidel_cb_buttons ) PORT_START("IN.8") @@ -604,16 +630,16 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void fidel68k_state::fex68k(machine_config &config) +void excel68k_state::fex68k(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12_MHz_XTAL); // HD68HC000P12 - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fex68k_map); + m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68k_map); const attotime irq_period = attotime::from_hz(618); // theoretical frequency from 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz - TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(excel68k_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us - TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(excel68k_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_ex_68k); @@ -626,33 +652,33 @@ void fidel68k_state::fex68k(machine_config &config) vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } -void fidel68k_state::fex68km2(machine_config &config) +void excel68k_state::fex68km2(machine_config &config) { fex68k(config); /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fex68km2_map); + m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km2_map); } -void fidel68k_state::fex68km3(machine_config &config) +void excel68k_state::fex68km3(machine_config &config) { fex68k(config); /* basic machine hardware */ m_maincpu->set_clock(16_MHz_XTAL); // factory overclock - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fex68km3_map); + m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map); } -void fidel68k_state::fdes2265(machine_config &config) +void desmaster_state::fdes2265(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 16_MHz_XTAL); // MC68HC000P12F - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fdes2265_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desmaster_state::fdes2265_map); const attotime irq_period = attotime::from_hz(597); // from 555 timer, measured - TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(desmaster_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us - TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(desmaster_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_desdis_68kr); @@ -665,27 +691,27 @@ void fidel68k_state::fdes2265(machine_config &config) vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } -void fidel68k_state::fdes2325(machine_config &config) +void desmaster_state::fdes2325(machine_config &config) { fdes2265(config); /* basic machine hardware */ M68EC020(config.replace(), m_maincpu, 20_MHz_XTAL); // MC68EC020RP25 - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fdes2325_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desmaster_state::fdes2325_map); config.set_default_layout(layout_fidel_desdis_68kg); } -void fidel68k_state::eag_base(machine_config &config) +void eag_state::eag_base(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 16_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eag_map); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map); const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 600Hz - TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us - TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off), irq_period); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); @@ -706,13 +732,13 @@ void fidel68k_state::eag_base(machine_config &config) SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc"); } -void fidel68k_state::eag(machine_config &config) +void eag_state::eag(machine_config &config) { eag_base(config); RAM(config, m_ram).set_default_size("1M").set_extra_options("128K, 512K, 1M"); } -void fidel68k_state::eagv5(machine_config &config) +void eag_state::eagv5(machine_config &config) { eag(config); @@ -720,44 +746,44 @@ void fidel68k_state::eagv5(machine_config &config) m_ram->set_default_size("128K"); m68000_device &subcpu(M68000(config, "subcpu", 16_MHz_XTAL)); - subcpu.set_addrmap(AS_PROGRAM, &fidel68k_state::eagv5_slave_map); + subcpu.set_addrmap(AS_PROGRAM, &eag_state::eagv5_slave_map); } -void fidel68k_state::eagv7(machine_config &config) +void eag_state::eagv7(machine_config &config) { eag_base(config); /* basic machine hardware */ M68020(config.replace(), m_maincpu, 20_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv7_map); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map); } -void fidel68k_state::eagv9(machine_config &config) +void eag_state::eagv9(machine_config &config) { eagv7(config); /* basic machine hardware */ M68030(config.replace(), m_maincpu, 32_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv7_map); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map); } -void fidel68k_state::eagv10(machine_config &config) +void eag_state::eagv10(machine_config &config) { eagv7(config); /* basic machine hardware */ M68040(config.replace(), m_maincpu, 25_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv11_map); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map); } -void fidel68k_state::eagv11(machine_config &config) +void eag_state::eagv11(machine_config &config) { eagv7(config); /* basic machine hardware */ M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2*2); // wrong! should be M68EC060 @ 72MHz - m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv11_map); - m_maincpu->set_periodic_int(FUNC(fidel68k_state::irq2_line_hold), attotime::from_hz(600)); + m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map); + m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600)); config.device_remove("irq_on"); // 8.25us is too long config.device_remove("irq_off"); @@ -878,20 +904,20 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS -CONS( 1987, fex68k, 0, 0, fex68k, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1987, fex68ka, fex68k, 0, fex68k, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1987, fex68kb, fex68k, 0, fex68k, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1988, fex68km2, fex68k, 0, fex68km2, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1988, fex68km3, fex68k, 0, fex68km3, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1987, fex68k, 0, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1987, fex68ka, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, fdes2265, 0, 0, fdes2265, fdes68k, fidel68k_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1991, fdes2325, fdes2265, 0, fdes2325, fdes68k, fidel68k_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, fdes2265, 0, 0, fdes2265, desmaster, desmaster_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1991, fdes2325, fdes2265, 0, fdes2325, desmaster, desmaster_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, feagv2, 0, 0, eag, eag, fidel68k_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, feagv2a, feagv2, 0, eag, eag, fidel68k_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, feagv5, feagv2, 0, eagv5, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) -CONS( 1990, feagv7, feagv2, 0, eagv7, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1990, feagv9, feagv2, 0, eagv9, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1990, feagv10, feagv2, 0, eagv10, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 2002, feagv11, feagv2, 0, eagv11, eag, fidel68k_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) +CONS( 1990, feagv7, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1990, feagv9, feagv2, 0, eagv9, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) diff --git a/src/mame/drivers/fidel_sc6.cpp b/src/mame/drivers/fidel_sc6.cpp index 6c06abbbcc4..d8a6e85a294 100644 --- a/src/mame/drivers/fidel_sc6.cpp +++ b/src/mame/drivers/fidel_sc6.cpp @@ -43,17 +43,17 @@ private: // devices/pointers required_device m_maincpu; - void sc6_map(address_map &map); + void main_map(address_map &map); - DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sc6_cartridge); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge); // I/O handlers - void sc6_prepare_display(); - DECLARE_WRITE8_MEMBER(sc6_mux_w); - DECLARE_WRITE8_MEMBER(sc6_select_w); - DECLARE_READ8_MEMBER(sc6_input_r); - DECLARE_READ_LINE_MEMBER(sc6_input6_r); - DECLARE_READ_LINE_MEMBER(sc6_input7_r); + void prepare_display(); + DECLARE_WRITE8_MEMBER(mux_w); + DECLARE_WRITE8_MEMBER(select_w); + DECLARE_READ8_MEMBER(input_r); + DECLARE_READ_LINE_MEMBER(input6_r); + DECLARE_READ_LINE_MEMBER(input7_r); }; @@ -64,7 +64,7 @@ private: // cartridge -DEVICE_IMAGE_LOAD_MEMBER(sc6_state, sc6_cartridge) +DEVICE_IMAGE_LOAD_MEMBER(sc6_state, cartridge) { u32 size = m_cart->common_get_size("rom"); @@ -84,14 +84,14 @@ DEVICE_IMAGE_LOAD_MEMBER(sc6_state, sc6_cartridge) // MCU ports/generic -void sc6_state::sc6_prepare_display() +void sc6_state::prepare_display() { // 2 7seg leds set_display_segmask(3, 0x7f); display_matrix(7, 2, m_7seg_data, m_led_select); } -WRITE8_MEMBER(sc6_state::sc6_mux_w) +WRITE8_MEMBER(sc6_state::mux_w) { // P24-P27: 7442 A-D u16 sel = 1 << (data >> 4 & 0xf) & 0x3ff; @@ -99,32 +99,32 @@ WRITE8_MEMBER(sc6_state::sc6_mux_w) // 7442 0-8: input mux, 7seg data m_inp_mux = sel & 0x1ff; m_7seg_data = sel & 0x7f; - sc6_prepare_display(); + prepare_display(); // 7442 9: speaker out m_dac->write(BIT(sel, 9)); } -WRITE8_MEMBER(sc6_state::sc6_select_w) +WRITE8_MEMBER(sc6_state::select_w) { // P16,P17: digit select m_led_select = ~data >> 6 & 3; - sc6_prepare_display(); + prepare_display(); } -READ8_MEMBER(sc6_state::sc6_input_r) +READ8_MEMBER(sc6_state::input_r) { // P10-P15: multiplexed inputs low return (~read_inputs(9) & 0x3f) | 0xc0; } -READ_LINE_MEMBER(sc6_state::sc6_input6_r) +READ_LINE_MEMBER(sc6_state::input6_r) { // T0: multiplexed inputs bit 6 return ~read_inputs(9) >> 6 & 1; } -READ_LINE_MEMBER(sc6_state::sc6_input7_r) +READ_LINE_MEMBER(sc6_state::input7_r) { // T1: multiplexed inputs bit 7 return ~read_inputs(9) >> 7 & 1; @@ -136,7 +136,7 @@ READ_LINE_MEMBER(sc6_state::sc6_input7_r) Address Maps ******************************************************************************/ -void sc6_state::sc6_map(address_map &map) +void sc6_state::main_map(address_map &map) { map(0x0000, 0x0fff).r("cartslot", FUNC(generic_slot_device::read_rom)); } @@ -171,12 +171,12 @@ void sc6_state::sc6(machine_config &config) { /* basic machine hardware */ I8040(config, m_maincpu, 11_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::sc6_map); - m_maincpu->p2_out_cb().set(FUNC(sc6_state::sc6_mux_w)); - m_maincpu->p1_in_cb().set(FUNC(sc6_state::sc6_input_r)); - m_maincpu->p1_out_cb().set(FUNC(sc6_state::sc6_select_w)); - m_maincpu->t0_in_cb().set(FUNC(sc6_state::sc6_input6_r)); - m_maincpu->t1_in_cb().set(FUNC(sc6_state::sc6_input7_r)); + m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::main_map); + m_maincpu->p2_out_cb().set(FUNC(sc6_state::mux_w)); + m_maincpu->p1_in_cb().set(FUNC(sc6_state::input_r)); + m_maincpu->p1_out_cb().set(FUNC(sc6_state::select_w)); + m_maincpu->t0_in_cb().set(FUNC(sc6_state::input6_r)); + m_maincpu->t1_in_cb().set(FUNC(sc6_state::input7_r)); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_sc6); @@ -190,7 +190,7 @@ void sc6_state::sc6(machine_config &config) /* cartridge */ generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_sc6", "bin")); - cartslot.set_device_load(device_image_load_delegate(&sc6_state::device_image_load_sc6_cartridge, this)); + cartslot.set_device_load(device_image_load_delegate(&sc6_state::device_image_load_cartridge, this)); cartslot.set_must_be_loaded(true); SOFTWARE_LIST(config, "cart_list").set_original("fidel_sc6"); From 6638f07f8458befb6e772b43cd2dc9985f8863f7 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 00:34:24 +0100 Subject: [PATCH 11/21] fidel6502: separate fdesdis class (nw) --- src/mame/drivers/fidel6502.cpp | 71 +++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index f97de6fd491..72737eeb26c 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -514,10 +514,6 @@ public: void fdes2000(machine_config &config); DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch); - void fdes2000d(machine_config &config); - void fdes2100d(machine_config &config); - void init_fdesdis(); - void fphantom(machine_config &config); void init_fphantom(); @@ -601,11 +597,6 @@ private: void fexcelb_map(address_map &map); void fexcelp_map(address_map &map); - // Designer Display - DECLARE_WRITE8_MEMBER(fdesdis_control_w); - DECLARE_WRITE8_MEMBER(fdesdis_lcd_w); - DECLARE_READ8_MEMBER(fdesdis_input_r); - void fdesdis_map(address_map &map); // Phantom DECLARE_MACHINE_RESET(fphantom); @@ -643,6 +634,28 @@ void fidel6502_state::machine_reset() +class desdis_state : public fidelbase_state +{ +public: + desdis_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + + void fdes2000d(machine_config &config); + void fdes2100d(machine_config &config); + void init_fdes2100d(); + +private: + void fdes2100d_map(address_map &map); + + // I/O handlers + DECLARE_WRITE8_MEMBER(control_w); + DECLARE_WRITE8_MEMBER(lcd_w); + DECLARE_READ8_MEMBER(input_r); +}; + + + /*************************************************************************** Helper Functions @@ -1169,7 +1182,7 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r) // TTL/generic -WRITE8_MEMBER(fidel6502_state::fdesdis_control_w) +WRITE8_MEMBER(desdis_state::control_w) { u8 q3_old = m_led_select & 8; @@ -1204,7 +1217,7 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_control_w) display_update(); } -WRITE8_MEMBER(fidel6502_state::fdesdis_lcd_w) +WRITE8_MEMBER(desdis_state::lcd_w) { // a0-a2,d0-d3: 4*74259 to lcd digit segments u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5); @@ -1215,13 +1228,13 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_lcd_w) } } -READ8_MEMBER(fidel6502_state::fdesdis_input_r) +READ8_MEMBER(desdis_state::input_r) { // a0-a2,d7: multiplexed inputs (active low) return (read_inputs(9) >> offset & 1) ? 0 : 0x80; } -void fidel6502_state::init_fdesdis() +void desdis_state::init_fdes2100d() { m_rombank->configure_entries(0, 2, memregion("rombank")->base(), 0x4000); } @@ -1451,12 +1464,12 @@ void fidel6502_state::fexcelb_map(address_map &map) // Designer Display, Phantom, Chesster -void fidel6502_state::fdesdis_map(address_map &map) +void desdis_state::fdes2100d_map(address_map &map) { map(0x0000, 0x1fff).ram(); - map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::fdesdis_control_w)); + map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(desdis_state::input_r), FUNC(desdis_state::control_w)); map(0x4000, 0x7fff).bankr("rombank"); - map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(fidel6502_state::fdesdis_lcd_w)); + map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(desdis_state::lcd_w)); map(0x8000, 0xffff).rom(); } @@ -1802,7 +1815,7 @@ static INPUT_PORTS_START( fdes ) INPUT_PORTS_END -static INPUT_PORTS_START( fdesdis ) +static INPUT_PORTS_START( desdis ) PORT_INCLUDE( fidel_cb_buttons ) PORT_START("IN.8") @@ -1817,13 +1830,17 @@ static INPUT_PORTS_START( fdesdis ) INPUT_PORTS_END static INPUT_PORTS_START( chesster ) - PORT_INCLUDE( fdesdis ) + PORT_INCLUDE( fidel_cb_buttons ) - PORT_MODIFY("IN.8") + PORT_START("IN.8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / No") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Yes") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Repeat") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New") PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Replay") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift") INPUT_PORTS_END @@ -2214,16 +2231,16 @@ void fidel6502_state::fexceld(machine_config &config) config.set_default_layout(layout_fidel_exd); } -void fidel6502_state::fdes2100d(machine_config &config) +void desdis_state::fdes2100d(machine_config &config) { /* basic machine hardware */ M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6 - m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map); const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K) - TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(desdis_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us - TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(desdis_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_desdis); @@ -2236,13 +2253,13 @@ void fidel6502_state::fdes2100d(machine_config &config) vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } -void fidel6502_state::fdes2000d(machine_config &config) +void desdis_state::fdes2000d(machine_config &config) { fdes2100d(config); /* basic machine hardware */ R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // R65C02P3 - m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map); } void fidel6502_state::fphantom(machine_config &config) @@ -2907,8 +2924,8 @@ CONS( 1986, granits, fexcelp, 0, granits, fexcel, fidel6502_state, empt CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, fidel6502_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // Excellence series hardware CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, fidel6502_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // " -CONS( 1988, fdes2100d, 0, 0, fdes2100d, fdesdis, fidel6502_state, init_fdesdis, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, fdesdis, fidel6502_state, init_fdesdis, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1988, fdes2100d, 0, 0, fdes2100d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fphantom, 0, 0, fphantom, fphantom, fidel6502_state, init_fphantom, "Fidelity Electronics", "Phantom (Fidelity)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) From d6303dcccae14376d56631962ecb580cd15eafe7 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 01:11:47 +0100 Subject: [PATCH 12/21] fidel*: make desmas a child class of desdis (nw) --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/fidel6502.cpp | 18 ++-- src/mame/drivers/fidel68k.cpp | 109 +++++++----------------- src/mame/includes/fidel_desdis_common.h | 33 +++++++ 4 files changed, 70 insertions(+), 91 deletions(-) create mode 100644 src/mame/includes/fidel_desdis_common.h diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 24db5d6b1a5..28575d12132 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2129,6 +2129,7 @@ files { MAME_DIR .. "src/mame/includes/fidelbase.h", MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp", MAME_DIR .. "src/mame/drivers/fidel6502.cpp", + MAME_DIR .. "src/mame/includes/fidel_desdis_common.h", MAME_DIR .. "src/mame/drivers/fidel68k.cpp", } diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 72737eeb26c..87d41339b2e 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -441,6 +441,7 @@ I/O is via TTL, very similar to Designer Display #include "emu.h" #include "includes/fidelbase.h" +#include "includes/fidel_desdis_common.h" #include "cpu/m6502/m6502.h" #include "cpu/m6502/r65c02.h" @@ -634,11 +635,11 @@ void fidel6502_state::machine_reset() -class desdis_state : public fidelbase_state +class desdis_state : public desdis_common_state { public: desdis_state(const machine_config &mconfig, device_type type, const char *tag) : - fidelbase_state(mconfig, type, tag) + desdis_common_state(mconfig, type, tag) { } void fdes2000d(machine_config &config); @@ -647,11 +648,6 @@ public: private: void fdes2100d_map(address_map &map); - - // I/O handlers - DECLARE_WRITE8_MEMBER(control_w); - DECLARE_WRITE8_MEMBER(lcd_w); - DECLARE_READ8_MEMBER(input_r); }; @@ -1182,7 +1178,7 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r) // TTL/generic -WRITE8_MEMBER(desdis_state::control_w) +WRITE8_MEMBER(desdis_common_state::control_w) { u8 q3_old = m_led_select & 8; @@ -1217,7 +1213,7 @@ WRITE8_MEMBER(desdis_state::control_w) display_update(); } -WRITE8_MEMBER(desdis_state::lcd_w) +WRITE8_MEMBER(desdis_common_state::lcd_w) { // a0-a2,d0-d3: 4*74259 to lcd digit segments u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5); @@ -1228,7 +1224,7 @@ WRITE8_MEMBER(desdis_state::lcd_w) } } -READ8_MEMBER(desdis_state::input_r) +READ8_MEMBER(desdis_common_state::input_r) { // a0-a2,d7: multiplexed inputs (active low) return (read_inputs(9) >> offset & 1) ? 0 : 0x80; @@ -1815,7 +1811,7 @@ static INPUT_PORTS_START( fdes ) INPUT_PORTS_END -static INPUT_PORTS_START( desdis ) +INPUT_PORTS_START( desdis ) PORT_INCLUDE( fidel_cb_buttons ) PORT_START("IN.8") diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp index 6d6f551ab66..ecc1156f045 100644 --- a/src/mame/drivers/fidel68k.cpp +++ b/src/mame/drivers/fidel68k.cpp @@ -181,6 +181,7 @@ B0000x-xxxxxx: see V7, -800000 #include "emu.h" #include "includes/fidelbase.h" +#include "includes/fidel_desdis_common.h" #include "cpu/m68000/m68000.h" #include "machine/ram.h" @@ -232,11 +233,11 @@ private: }; -class desmaster_state : public fidelbase_state +class desmas_state : public desdis_common_state { public: - desmaster_state(const machine_config &mconfig, device_type type, const char *tag) : - fidelbase_state(mconfig, type, tag) + desmas_state(const machine_config &mconfig, device_type type, const char *tag) : + desdis_common_state(mconfig, type, tag) { } void fdes2265(machine_config &config); @@ -249,9 +250,8 @@ private: void fdes2325_map(address_map &map); // I/O handlers - DECLARE_WRITE8_MEMBER(control_w); - DECLARE_READ8_MEMBER(input_r); - DECLARE_WRITE8_MEMBER(lcd_w); + virtual DECLARE_WRITE8_MEMBER(control_w) override; + virtual DECLARE_WRITE8_MEMBER(lcd_w) override; }; @@ -336,55 +336,19 @@ WRITE8_MEMBER(excel68k_state::mux_w) Designer Master ******************************************************************************/ -WRITE8_MEMBER(desmaster_state::control_w) +WRITE8_MEMBER(desmas_state::control_w) { - u8 q3_old = m_led_select & 8; - - // a1-a3,d0: 74259 - u8 mask = 1 << offset; - m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); - - // 74259 Q4-Q7: 7442 a0-a3 - // 7442 0-8: led data, input mux - u16 sel = 1 << (m_led_select >> 4 & 0xf) & 0x3ff; - m_inp_mux = sel & 0x1ff; - - // 7442 9: speaker out - m_dac->write(BIT(sel, 9)); - - // 74259 Q0,Q1: led select (active low) - display_matrix(9, 2, m_inp_mux, ~m_led_select & 3, false); - - // 74259 Q3: lcd common, update on rising edge - if (~q3_old & m_led_select & 8) - { - for (int i = 0; i < 4; i++) - m_display_state[i+2] = m_7seg_data >> (8*i) & 0xff; - } - - m_display_maxy += 4; - set_display_segmask(0x3c, 0x7f); - display_update(); + // same as desdis, d0 instead of d7 + desdis_common_state::control_w(space, offset, data << 7); } -READ8_MEMBER(desmaster_state::input_r) +WRITE8_MEMBER(desmas_state::lcd_w) { - // a1-a3,d7(d15): multiplexed inputs (active low) - return (read_inputs(9) >> offset & 1) ? 0 : 0x80; + // same as desdis, inverted data + desdis_common_state::lcd_w(space, offset, ~data); } -WRITE8_MEMBER(desmaster_state::lcd_w) -{ - // a1-a3,d0-d3: 4*74259 to lcd digit segments - u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5); - for (int i = 0; i < 4; i++) - { - m_7seg_data = (m_7seg_data & ~mask) | ((data >> i & 1) ? mask : 0); - mask <<= 8; - } -} - -void desmaster_state::init_fdes2265() +void desmas_state::init_fdes2265() { u16 *rom = (u16*)memregion("maincpu")->base(); const u32 len = memregion("maincpu")->bytes() / 2; @@ -486,24 +450,24 @@ void excel68k_state::fex68km3_map(address_map &map) // Designer Master -void desmaster_state::fdes2265_map(address_map &map) +void desmas_state::fdes2265_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); - map(0x000000, 0x00000f).w(FUNC(desmaster_state::lcd_w)).umask16(0x00ff); + map(0x000000, 0x00000f).w(FUNC(desmas_state::lcd_w)).umask16(0x00ff); map(0x044000, 0x047fff).ram(); map(0x100000, 0x10ffff).ram(); - map(0x140000, 0x14000f).r(FUNC(desmaster_state::input_r)).umask16(0xff00); - map(0x140000, 0x14000f).w(FUNC(desmaster_state::control_w)).umask16(0x00ff); + map(0x140000, 0x14000f).r(FUNC(desmas_state::input_r)).umask16(0xff00); + map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask16(0x00ff); } -void desmaster_state::fdes2325_map(address_map &map) +void desmas_state::fdes2325_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); - map(0x100000, 0x10000f).w(FUNC(desmaster_state::lcd_w)).umask32(0x00ff00ff); - map(0x140000, 0x14000f).w(FUNC(desmaster_state::control_w)).umask32(0x00ff00ff); - map(0x180000, 0x18000f).r(FUNC(desmaster_state::input_r)).umask32(0xff00ff00); + map(0x100000, 0x10000f).w(FUNC(desmas_state::lcd_w)).umask32(0x00ff00ff); + map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask32(0x00ff00ff); + map(0x180000, 0x18000f).r(FUNC(desmas_state::input_r)).umask32(0xff00ff00); map(0x300000, 0x37ffff).ram(); map(0x500000, 0x507fff).ram(); } @@ -586,21 +550,6 @@ static INPUT_PORTS_START( excel68k ) INPUT_PORTS_END -static INPUT_PORTS_START( desmaster ) - PORT_INCLUDE( fidel_cb_buttons ) - - PORT_START("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / Alternate") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Info") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Replay") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Time") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift") -INPUT_PORTS_END - - static INPUT_PORTS_START( eag ) PORT_INCLUDE( fidel_cb_magnets ) @@ -669,16 +618,16 @@ void excel68k_state::fex68km3(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map); } -void desmaster_state::fdes2265(machine_config &config) +void desmas_state::fdes2265(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 16_MHz_XTAL); // MC68HC000P12F - m_maincpu->set_addrmap(AS_PROGRAM, &desmaster_state::fdes2265_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desmas_state::fdes2265_map); const attotime irq_period = attotime::from_hz(597); // from 555 timer, measured - TIMER(config, m_irq_on).configure_periodic(FUNC(desmaster_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(desmas_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us - TIMER(config, "irq_off").configure_periodic(FUNC(desmaster_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(desmas_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_desdis_68kr); @@ -691,13 +640,13 @@ void desmaster_state::fdes2265(machine_config &config) vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } -void desmaster_state::fdes2325(machine_config &config) +void desmas_state::fdes2325(machine_config &config) { fdes2265(config); /* basic machine hardware */ M68EC020(config.replace(), m_maincpu, 20_MHz_XTAL); // MC68EC020RP25 - m_maincpu->set_addrmap(AS_PROGRAM, &desmaster_state::fdes2325_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desmas_state::fdes2325_map); config.set_default_layout(layout_fidel_desdis_68kg); } @@ -910,8 +859,8 @@ CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_in CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, fdes2265, 0, 0, fdes2265, desmaster, desmaster_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1991, fdes2325, fdes2265, 0, fdes2325, desmaster, desmaster_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, fdes2265, 0, 0, fdes2265, desdis, desmas_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1991, fdes2325, fdes2265, 0, fdes2325, desdis, desmas_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/includes/fidel_desdis_common.h b/src/mame/includes/fidel_desdis_common.h new file mode 100644 index 00000000000..c6721b32aa7 --- /dev/null +++ b/src/mame/includes/fidel_desdis_common.h @@ -0,0 +1,33 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** +* +* Fidelity Electronics Designer Display common class +* +******************************************************************************/ + +#pragma once + +#ifndef MAME_INCLUDES_DESDIS_COMMON_H +#define MAME_INCLUDES_DESDIS_COMMON_H + +#include "includes/fidelbase.h" + +class desdis_common_state : public fidelbase_state +{ +public: + desdis_common_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + +protected: + // I/O handlers + virtual DECLARE_WRITE8_MEMBER(control_w); + virtual DECLARE_WRITE8_MEMBER(lcd_w); + virtual DECLARE_READ8_MEMBER(input_r); +}; + + +INPUT_PORTS_EXTERN( desdis ); + +#endif // MAME_INCLUDES_DESDIS_COMMON_H From 330727ee639f9e18f410757d85468528ae6a5d10 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 02:05:10 +0100 Subject: [PATCH 13/21] rename ckz80, cxgz80, fidelz80 (nw) --- scripts/target/mame/mess.lua | 6 +++--- src/mame/drivers/{ckz80.cpp => cking_master.cpp} | 0 src/mame/drivers/{cxgz80.cpp => cxg_ch2001.cpp} | 0 src/mame/drivers/{fidelz80.cpp => fidelbase.cpp} | 0 src/mame/mame.lst | 6 +++--- src/mame/mess.flt | 6 +++--- 6 files changed, 9 insertions(+), 9 deletions(-) rename src/mame/drivers/{ckz80.cpp => cking_master.cpp} (100%) rename src/mame/drivers/{cxgz80.cpp => cxg_ch2001.cpp} (100%) rename src/mame/drivers/{fidelz80.cpp => fidelbase.cpp} (100%) diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 28575d12132..00a214b9371 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1835,7 +1835,7 @@ files { createMESSProjects(_target, _subtarget, "chessking") files { - MAME_DIR .. "src/mame/drivers/ckz80.cpp", + MAME_DIR .. "src/mame/drivers/cking_master.cpp", } createMESSProjects(_target, _subtarget, "chromatics") @@ -1897,7 +1897,7 @@ files { createMESSProjects(_target, _subtarget, "cxg") files { - MAME_DIR .. "src/mame/drivers/cxgz80.cpp", + MAME_DIR .. "src/mame/drivers/cxg_ch2001.cpp", } createMESSProjects(_target, _subtarget, "cybiko") @@ -2125,7 +2125,7 @@ files { createMESSProjects(_target, _subtarget, "fidelity") files { - MAME_DIR .. "src/mame/drivers/fidelz80.cpp", + MAME_DIR .. "src/mame/drivers/fidelbase.cpp", MAME_DIR .. "src/mame/includes/fidelbase.h", MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp", MAME_DIR .. "src/mame/drivers/fidel6502.cpp", diff --git a/src/mame/drivers/ckz80.cpp b/src/mame/drivers/cking_master.cpp similarity index 100% rename from src/mame/drivers/ckz80.cpp rename to src/mame/drivers/cking_master.cpp diff --git a/src/mame/drivers/cxgz80.cpp b/src/mame/drivers/cxg_ch2001.cpp similarity index 100% rename from src/mame/drivers/cxgz80.cpp rename to src/mame/drivers/cxg_ch2001.cpp diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelbase.cpp similarity index 100% rename from src/mame/drivers/fidelz80.cpp rename to src/mame/drivers/fidelbase.cpp diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 183cbd5ef48..548e04002f5 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -9897,7 +9897,7 @@ citycon // (c) 1985 Jaleco citycona // (c) 1985 Jaleco cruisin // (c) 1985 Jaleco/Kitkorp -@source:ckz80.cpp +@source:cking_master.cpp ckmaster // @source:clayshoo.cpp @@ -10915,7 +10915,7 @@ wallst // (c) 1982 Century @source:cwheel.cpp cwheel // (c) 19?? Gamebar -@source:cxgz80.cpp +@source:cxg_ch2001.cpp ch2001 // @source:cxhumax.cpp @@ -12924,7 +12924,7 @@ fex68kb // fex68km2 // fex68km3 // -@source:fidelz80.cpp +@source:fidelbase.cpp backgamc // bridgec3 // bridgeca // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 93da1ab056b..75e7094a0b4 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -138,7 +138,7 @@ chessmst.cpp chesstrv.cpp cit101.cpp cit220.cpp -ckz80.cpp +cking_master.cpp clcd.cpp clickstart.cpp cm1800.cpp @@ -163,7 +163,7 @@ crimson.cpp crvision.cpp ct486.cpp cvicny.cpp -cxgz80.cpp +cxg_ch2001.cpp cxhumax.cpp cybiko.cpp cz101.cpp @@ -242,7 +242,7 @@ fccpu30.cpp fidel_sc6.cpp fidel6502.cpp fidel68k.cpp -fidelz80.cpp +fidelbase.cpp fk1.cpp fm7.cpp fmtowns.cpp From b24ab57233e681e6f4130ab65bbe45cca049d23f Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 16 Feb 2019 20:11:35 -0500 Subject: [PATCH 14/21] apple2: AppleWin-like memory fill; fixes hang in Joust [R. Belmont] --- src/mame/drivers/apple2.cpp | 33 +++++++++++++++++++-------------- src/mame/drivers/apple2e.cpp | 8 ++++++++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index f01df1d4176..0da7e729343 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -322,6 +322,12 @@ void apple2_state::machine_start() m_slotdevice[i] = m_a2bus->get_a2bus_card(i); } + for (int adr = 0; adr < 0x10000; adr += 2) + { + m_ram_ptr[adr] = 0; + m_ram_ptr[adr+1] = 0xff; + } + // setup save states save_item(NAME(m_speaker_state)); save_item(NAME(m_cassette_state)); @@ -626,42 +632,41 @@ READ8_MEMBER(apple2_state::switches_r) READ8_MEMBER(apple2_state::flags_r) { - uint8_t busdata = read_floatingbus() & 0x7f; - // Y output of 74LS251 at H14 read as D7 switch (offset) { case 0: // cassette in - return (m_cassette->input() > 0.0 ? 0x80 : 0) | busdata; + return (m_cassette->input() > 0.0 ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 1: // button 0 - return (BIT(m_joybuttons->read(), 4) ? 0x80 : 0) | busdata; + return ((m_joybuttons->read() & 0x10) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 2: // button 1 - return (BIT(m_joybuttons->read(), 5) ? 0x80 : 0) | busdata; + return ((m_joybuttons->read() & 0x20) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 3: // button 2 // check if SHIFT key mod configured - if (BIT(m_sysconfig->read(), 2)) - return ((BIT(m_joybuttons->read(), 6) || (m_kbspecial->read() & 0x06) != 0) ? 0x80 : 0) | busdata; - else - return (BIT(m_joybuttons->read(), 6) ? 0x80 : 0) | busdata; + if (m_sysconfig->read() & 0x04) + { + return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | (read_floatingbus() & 0x3f); + } + return ((m_joybuttons->read() & 0x40) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 4: // joy 1 X axis - return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | busdata; + return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 5: // joy 1 Y axis - return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | busdata; + return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 6: // joy 2 X axis - return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | busdata; + return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); case 7: // joy 2 Y axis - return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | busdata; + return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f); } // this is never reached - return busdata; + return 0; } READ8_MEMBER(apple2_state::controller_strobe_r) diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index b560a9b8917..f4a6acc566b 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -818,6 +818,14 @@ void apple2e_state::machine_start() m_video->m_char_ptr = memregion("gfx1")->base(); m_video->m_char_size = memregion("gfx1")->bytes(); + for (int adr = 0; adr < 0x10000; adr += 2) + { + m_ram_ptr[adr] = 0; + m_ram_ptr[adr+1] = 0xff; + m_aux_ptr[adr] = 0; + m_aux_ptr[adr+1] = 0xff; + } + m_inh_slot = -1; m_cnxx_slot = CNXX_UNCLAIMED; m_mockingboard4c = false; From 40e81f0678f1c4fa31a9c92a67f9eac6d4e7e7b9 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 02:35:55 +0100 Subject: [PATCH 15/21] cking,cxg: separate classes (nw) --- src/mame/drivers/cking_master.cpp | 110 +++++++++++++++++------------- src/mame/drivers/cxg_ch2001.cpp | 86 +++++++++++++---------- 2 files changed, 112 insertions(+), 84 deletions(-) diff --git a/src/mame/drivers/cking_master.cpp b/src/mame/drivers/cking_master.cpp index d2dd6ae0f92..e0b16f034f0 100644 --- a/src/mame/drivers/cking_master.cpp +++ b/src/mame/drivers/cking_master.cpp @@ -37,15 +37,13 @@ Master: #include "ck_master.lh" // clickable -class ckz80_state : public driver_device +class ckingbase_state : public driver_device { public: - ckz80_state(const machine_config &mconfig, device_type type, const char *tag) : + ckingbase_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_irq_on(*this, "irq_on"), - m_dac(*this, "dac"), - m_master_map(*this, "master_map"), m_inp_matrix(*this, "IN.%u", 0), m_out_x(*this, "%u.%u", 0U, 0U), m_out_a(*this, "%u.a", 0U), @@ -57,9 +55,7 @@ public: // devices/pointers required_device m_maincpu; - required_device m_irq_on; - required_device m_dac; - optional_device m_master_map; + optional_device m_irq_on; optional_ioport_array<10> m_inp_matrix; // max 10 output_finder<0x20, 0x20> m_out_x; output_finder<0x20> m_out_a; @@ -89,16 +85,6 @@ public: void set_display_size(int maxx, int maxy); void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); - // Master - u8 master_input_r(); - void master_control_w(u8 data); - void init_master(); - u8 master_trampoline_r(offs_t offset); - void master_trampoline_w(offs_t offset, u8 data); - void master_map(address_map &map); - void master_trampoline(address_map &map); - void master(machine_config &config); - protected: virtual void machine_start() override; virtual void machine_reset() override; @@ -107,7 +93,7 @@ protected: // machine start/reset -void ckz80_state::machine_start() +void ckingbase_state::machine_start() { // resolve handlers m_out_x.resolve(); @@ -137,7 +123,7 @@ void ckz80_state::machine_start() save_item(NAME(m_led_data)); } -void ckz80_state::machine_reset() +void ckingbase_state::machine_reset() { } @@ -152,7 +138,7 @@ void ckz80_state::machine_reset() // The device may strobe the outputs very fast, it is unnoticeable to the user. // To prevent flickering here, we need to simulate a decay. -void ckz80_state::display_update() +void ckingbase_state::display_update() { for (int y = 0; y < m_display_maxy; y++) { @@ -181,7 +167,7 @@ void ckz80_state::display_update() } } -TIMER_DEVICE_CALLBACK_MEMBER(ckz80_state::display_decay_tick) +TIMER_DEVICE_CALLBACK_MEMBER(ckingbase_state::display_decay_tick) { // slowly turn off unpowered segments for (int y = 0; y < m_display_maxy; y++) @@ -192,13 +178,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(ckz80_state::display_decay_tick) display_update(); } -void ckz80_state::set_display_size(int maxx, int maxy) +void ckingbase_state::set_display_size(int maxx, int maxy) { m_display_maxx = maxx; m_display_maxy = maxy; } -void ckz80_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) +void ckingbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) { set_display_size(maxx, maxy); @@ -214,7 +200,7 @@ void ckz80_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool up // generic input handlers -u16 ckz80_state::read_inputs(int columns) +u16 ckingbase_state::read_inputs(int columns) { u16 ret = 0; @@ -226,7 +212,35 @@ u16 ckz80_state::read_inputs(int columns) return ret; } +namespace { +class master_state : public ckingbase_state +{ +public: + master_state(const machine_config &mconfig, device_type type, const char *tag) : + ckingbase_state(mconfig, type, tag), + m_dac(*this, "dac"), + m_mainmap(*this, "mainmap") + { } + + void master(machine_config &config); + + void init_master(); + +private: + // devices/pointers + required_device m_dac; + required_device m_mainmap; + + void main_map(address_map &map); + void main_trampoline(address_map &map); + u8 main_trampoline_r(offs_t offset); + void main_trampoline_w(offs_t offset, u8 data); + + // I/O handlers + u8 input_r(); + void control_w(u8 data); +}; // Devices, I/O @@ -236,7 +250,7 @@ u16 ckz80_state::read_inputs(int columns) // TTL/generic -void ckz80_state::master_control_w(u8 data) +void master_state::control_w(u8 data) { // d0-d3: 74145 A-D // 74145 0-9: input mux, led select @@ -250,13 +264,13 @@ void ckz80_state::master_control_w(u8 data) m_dac->write(data >> 6 & 3); } -u8 ckz80_state::master_input_r() +u8 master_state::input_r() { // d0-d7: multiplexed inputs (active low) return ~read_inputs(10); } -void ckz80_state::init_master() +void master_state::init_master() { u8 *rom = memregion("maincpu")->base(); const u32 len = memregion("maincpu")->bytes(); @@ -280,38 +294,38 @@ void ckz80_state::init_master() // Master -void ckz80_state::master_map(address_map &map) +void master_state::main_map(address_map &map) { map(0x0000, 0x1fff).mirror(0x6000).rom().region("maincpu", 0); // _A15 - map(0xa000, 0xa000).mirror(0x1fff).rw(FUNC(ckz80_state::master_input_r), FUNC(ckz80_state::master_control_w)); // A13 + map(0xa000, 0xa000).mirror(0x1fff).rw(FUNC(master_state::input_r), FUNC(master_state::control_w)); // A13 map(0xc000, 0xc7ff).mirror(0x3800).ram(); // A14 } // PCB design is prone to bus conflicts, but should be fine if software obeys -void ckz80_state::master_trampoline_w(offs_t offset, u8 data) +void master_state::main_trampoline_w(offs_t offset, u8 data) { if (offset & 0x2000) - m_master_map->write8((offset & 0x3fff) | 0x8000, data); + m_mainmap->write8((offset & 0x3fff) | 0x8000, data); if (offset & 0x4000) - m_master_map->write8((offset & 0x7fff) | 0x8000, data); + m_mainmap->write8((offset & 0x7fff) | 0x8000, data); } -u8 ckz80_state::master_trampoline_r(offs_t offset) +u8 master_state::main_trampoline_r(offs_t offset) { u8 data = 0xff; if (~offset & 0x8000) - data &= m_master_map->read8(offset); + data &= m_mainmap->read8(offset); if (offset & 0x2000) - data &= m_master_map->read8((offset & 0x3fff) | 0x8000); + data &= m_mainmap->read8((offset & 0x3fff) | 0x8000); if (offset & 0x4000) - data &= m_master_map->read8((offset & 0x7fff) | 0x8000); + data &= m_mainmap->read8((offset & 0x7fff) | 0x8000); return data; } -void ckz80_state::master_trampoline(address_map &map) +void master_state::main_trampoline(address_map &map) { - map(0x0000, 0xffff).rw(FUNC(ckz80_state::master_trampoline_r), FUNC(ckz80_state::master_trampoline_w)); + map(0x0000, 0xffff).rw(FUNC(master_state::main_trampoline_r), FUNC(master_state::main_trampoline_w)); } @@ -320,7 +334,7 @@ void ckz80_state::master_trampoline(address_map &map) Input Ports ******************************************************************************/ -static INPUT_PORTS_START( cb_buttons ) +INPUT_PORTS_START( cking_cb_buttons ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") @@ -404,7 +418,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( master ) - PORT_INCLUDE( cb_buttons ) + PORT_INCLUDE( cking_cb_buttons ) PORT_START("IN.8") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Change Position") @@ -433,19 +447,19 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void ckz80_state::master(machine_config &config) +void master_state::master(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 8_MHz_XTAL/2); - m_maincpu->set_addrmap(AS_PROGRAM, &ckz80_state::master_trampoline); - ADDRESS_MAP_BANK(config, "master_map").set_map(&ckz80_state::master_map).set_options(ENDIANNESS_LITTLE, 8, 16); + m_maincpu->set_addrmap(AS_PROGRAM, &master_state::main_trampoline); + ADDRESS_MAP_BANK(config, "mainmap").set_map(&master_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16); const attotime irq_period = attotime::from_hz(429); // theoretical frequency from 555 timer (22nF, 150K, 1K5), measurement was 418Hz - TIMER(config, m_irq_on).configure_periodic(FUNC(ckz80_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(master_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us - TIMER(config, "irq_off").configure_periodic(FUNC(ckz80_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(master_state::irq_off), irq_period); - TIMER(config, "display_decay").configure_periodic(FUNC(ckz80_state::display_decay_tick), attotime::from_msec(1)); + TIMER(config, "display_decay").configure_periodic(FUNC(ckingbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_ck_master); /* sound hardware */ @@ -468,11 +482,11 @@ ROM_START( ckmaster ) ROM_LOAD("ckmaster.ic2", 0x0000, 0x2000, CRC(59cbec9e) SHA1(2e0629e65778da62bed857406b91a334698d2fe8) ) // D2764C, no label ROM_END - +} // anonymous namespace /****************************************************************************** Drivers ******************************************************************************/ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1984, ckmaster, 0, 0, master, master, ckz80_state, init_master, "Chess King", "Master (Chess King)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1984, ckmaster, 0, 0, master, master, master_state, init_master, "Chess King", "Master (Chess King)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/drivers/cxg_ch2001.cpp b/src/mame/drivers/cxg_ch2001.cpp index 8366a859fa2..fd08ceddc03 100644 --- a/src/mame/drivers/cxg_ch2001.cpp +++ b/src/mame/drivers/cxg_ch2001.cpp @@ -34,15 +34,14 @@ Chess 2001: #include "cxg_ch2001.lh" // clickable -class cxgz80_state : public driver_device +class cxgbase_state : public driver_device { public: - cxgz80_state(const machine_config &mconfig, device_type type, const char *tag) : + cxgbase_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_irq_on(*this, "irq_on"), m_dac(*this, "dac"), - m_speaker_off(*this, "speaker_off"), m_inp_matrix(*this, "IN.%u", 0), m_out_x(*this, "%u.%u", 0U, 0U), m_out_a(*this, "%u.a", 0U), @@ -54,9 +53,8 @@ public: // devices/pointers required_device m_maincpu; - required_device m_irq_on; - required_device m_dac; - required_device m_speaker_off; + optional_device m_irq_on; + optional_device m_dac; optional_ioport_array<10> m_inp_matrix; // max 10 output_finder<0x20, 0x20> m_out_x; output_finder<0x20> m_out_a; @@ -86,14 +84,6 @@ public: void set_display_size(int maxx, int maxy); void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); - // Chess 2001 - TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); } - DECLARE_WRITE8_MEMBER(ch2001_speaker_on_w); - DECLARE_WRITE8_MEMBER(ch2001_leds_w); - DECLARE_READ8_MEMBER(ch2001_input_r); - void ch2001_map(address_map &map); - void ch2001(machine_config &config); - protected: virtual void machine_start() override; virtual void machine_reset() override; @@ -102,7 +92,7 @@ protected: // machine start/reset -void cxgz80_state::machine_start() +void cxgbase_state::machine_start() { // resolve handlers m_out_x.resolve(); @@ -132,11 +122,35 @@ void cxgz80_state::machine_start() save_item(NAME(m_led_data)); } -void cxgz80_state::machine_reset() +void cxgbase_state::machine_reset() { } +class ch2001_state : public cxgbase_state +{ +public: + ch2001_state(const machine_config &mconfig, device_type type, const char *tag) : + cxgbase_state(mconfig, type, tag), + m_speaker_off(*this, "speaker_off") + { } + + void ch2001(machine_config &config); + +private: + // devices/pointers + required_device m_speaker_off; + + void main_map(address_map &map); + + TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); } + + // I/O handlers + DECLARE_WRITE8_MEMBER(speaker_w); + DECLARE_WRITE8_MEMBER(leds_w); + DECLARE_READ8_MEMBER(input_r); +}; + /*************************************************************************** @@ -147,7 +161,7 @@ void cxgz80_state::machine_reset() // The device may strobe the outputs very fast, it is unnoticeable to the user. // To prevent flickering here, we need to simulate a decay. -void cxgz80_state::display_update() +void cxgbase_state::display_update() { for (int y = 0; y < m_display_maxy; y++) { @@ -176,7 +190,7 @@ void cxgz80_state::display_update() } } -TIMER_DEVICE_CALLBACK_MEMBER(cxgz80_state::display_decay_tick) +TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick) { // slowly turn off unpowered segments for (int y = 0; y < m_display_maxy; y++) @@ -187,13 +201,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(cxgz80_state::display_decay_tick) display_update(); } -void cxgz80_state::set_display_size(int maxx, int maxy) +void cxgbase_state::set_display_size(int maxx, int maxy) { m_display_maxx = maxx; m_display_maxy = maxy; } -void cxgz80_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) +void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) { set_display_size(maxx, maxy); @@ -209,7 +223,7 @@ void cxgz80_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool u // generic input handlers -u16 cxgz80_state::read_inputs(int columns) +u16 cxgbase_state::read_inputs(int columns) { u16 ret = 0; @@ -231,14 +245,14 @@ u16 cxgz80_state::read_inputs(int columns) // TTL -WRITE8_MEMBER(cxgz80_state::ch2001_speaker_on_w) +WRITE8_MEMBER(ch2001_state::speaker_w) { // 74ls109 clock pulse to speaker m_dac->write(1); m_speaker_off->adjust(attotime::from_usec(200)); // not accurate } -WRITE8_MEMBER(cxgz80_state::ch2001_leds_w) +WRITE8_MEMBER(ch2001_state::leds_w) { // d0-d7: 74ls273 (WR to CLK) // 74ls273 Q1-Q4: 74ls145 A-D @@ -251,7 +265,7 @@ WRITE8_MEMBER(cxgz80_state::ch2001_leds_w) display_matrix(8, 10, led_data, m_inp_mux); } -READ8_MEMBER(cxgz80_state::ch2001_input_r) +READ8_MEMBER(ch2001_state::input_r) { // d0-d7: multiplexed inputs return ~read_inputs(10); @@ -265,12 +279,12 @@ READ8_MEMBER(cxgz80_state::ch2001_input_r) // Chess 2001 -void cxgz80_state::ch2001_map(address_map &map) +void ch2001_state::main_map(address_map &map) { map(0x0000, 0x3fff).rom(); map(0x4000, 0x47ff).mirror(0x3800).ram(); - map(0x8000, 0x8000).mirror(0x3fff).rw(FUNC(cxgz80_state::ch2001_input_r), FUNC(cxgz80_state::ch2001_leds_w)); - map(0xc000, 0xc000).mirror(0x3fff).w(FUNC(cxgz80_state::ch2001_speaker_on_w)); + map(0x8000, 0x8000).mirror(0x3fff).rw(FUNC(ch2001_state::input_r), FUNC(ch2001_state::leds_w)); + map(0xc000, 0xc000).mirror(0x3fff).w(FUNC(ch2001_state::speaker_w)); } @@ -279,7 +293,7 @@ void cxgz80_state::ch2001_map(address_map &map) Input Ports ******************************************************************************/ -static INPUT_PORTS_START( cb_magnets ) +INPUT_PORTS_START( cxg_cb_magnets ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") @@ -363,7 +377,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( ch2001 ) - PORT_INCLUDE( cb_magnets ) + PORT_INCLUDE( cxg_cb_magnets ) PORT_START("IN.8") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Black") @@ -392,20 +406,20 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void cxgz80_state::ch2001(machine_config &config) +void ch2001_state::ch2001(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 8_MHz_XTAL/2); - m_maincpu->set_addrmap(AS_PROGRAM, &cxgz80_state::ch2001_map); + m_maincpu->set_addrmap(AS_PROGRAM, &ch2001_state::main_map); const attotime irq_period = attotime::from_hz(484); // theoretical frequency from 555 timer (22nF, 100K+33K, 1K2), measurement was 568Hz - TIMER(config, m_irq_on).configure_periodic(FUNC(cxgz80_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(ch2001_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(18300)); // active for 18.3us - TIMER(config, "irq_off").configure_periodic(FUNC(cxgz80_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(ch2001_state::irq_off), irq_period); - TIMER(config, m_speaker_off).configure_generic(FUNC(cxgz80_state::speaker_off)); + TIMER(config, m_speaker_off).configure_generic(FUNC(ch2001_state::speaker_off)); - TIMER(config, "display_decay").configure_periodic(FUNC(cxgz80_state::display_decay_tick), attotime::from_msec(1)); + TIMER(config, "display_decay").configure_periodic(FUNC(cxgbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_cxg_ch2001); /* sound hardware */ @@ -434,4 +448,4 @@ ROM_END ******************************************************************************/ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1984, ch2001, 0, 0, ch2001, ch2001, cxgz80_state, empty_init, "CXG", "Chess 2001", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1984, ch2001, 0, 0, ch2001, ch2001, ch2001_state, empty_init, "CXG", "Chess 2001", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) From 2aa97bfc47b34274fce39acb60b9e728f56d51a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Wed, 13 Feb 2019 22:30:09 +0100 Subject: [PATCH 16/21] Show video-mode option 'accel' in help and GUI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Andreas Müller --- src/osd/sdl/sdlmain.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/osd/sdl/sdlmain.cpp b/src/osd/sdl/sdlmain.cpp index f7d80a10484..37d1434a2e8 100644 --- a/src/osd/sdl/sdlmain.cpp +++ b/src/osd/sdl/sdlmain.cpp @@ -375,6 +375,7 @@ static void osd_sdl_info(void) void sdl_osd_interface::video_register() { video_options_add("soft", nullptr); + video_options_add("accel", nullptr); #if USE_OPENGL video_options_add("opengl", nullptr); #endif From 9f7c4385a85806b510ab6a4d62bc60f433af8fe1 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 03:07:01 +0100 Subject: [PATCH 17/21] cking,cxg: split files (nw) --- scripts/target/mame/mess.lua | 4 + src/mame/drivers/cking_master.cpp | 292 ++---------------------------- src/mame/drivers/ckingbase.cpp | 222 +++++++++++++++++++++++ src/mame/drivers/cxg_ch2001.cpp | 285 +---------------------------- src/mame/drivers/cxgbase.cpp | 223 +++++++++++++++++++++++ src/mame/includes/ckingbase.h | 72 ++++++++ src/mame/includes/cxgbase.h | 75 ++++++++ src/mame/mess.flt | 2 + 8 files changed, 617 insertions(+), 558 deletions(-) create mode 100644 src/mame/drivers/ckingbase.cpp create mode 100644 src/mame/drivers/cxgbase.cpp create mode 100644 src/mame/includes/ckingbase.h create mode 100644 src/mame/includes/cxgbase.h diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 00a214b9371..aa122a10aee 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1835,6 +1835,8 @@ files { createMESSProjects(_target, _subtarget, "chessking") files { + MAME_DIR .. "src/mame/drivers/ckingbase.cpp", + MAME_DIR .. "src/mame/includes/ckingbase.h", MAME_DIR .. "src/mame/drivers/cking_master.cpp", } @@ -1897,6 +1899,8 @@ files { createMESSProjects(_target, _subtarget, "cxg") files { + MAME_DIR .. "src/mame/drivers/cxgbase.cpp", + MAME_DIR .. "src/mame/includes/cxgbase.h", MAME_DIR .. "src/mame/drivers/cxg_ch2001.cpp", } diff --git a/src/mame/drivers/cking_master.cpp b/src/mame/drivers/cking_master.cpp index e0b16f034f0..4210f447a74 100644 --- a/src/mame/drivers/cking_master.cpp +++ b/src/mame/drivers/cking_master.cpp @@ -3,31 +3,23 @@ // thanks-to:Berger /****************************************************************************** - Chess King generic Z80 based chess computer driver - - NOTE: MAME doesn't include a generalized implementation for boardpieces yet, - greatly affecting user playability of emulated electronic board games. - As workaround for the chess games, use an external chess GUI on the side, - such as Arena(in editmode). - - TODO: - - ckmaster 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible - (wait state is similar to MSX) but I can't be bothered, better solution - is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast. - -****************************************************************************** - -Master: +Master: (yes, it's plainly named "Master") - Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer - 8KB ROM(NEC D2764C-3), 2KB RAM(NEC D4016C), ROM is scrambled for easy PCB placement - simple I/O via 2*74373 and a 74145 - 8*8 chessboard buttons, 32+1 border leds, piezo +TODO: +- 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible + (wait state is similar to MSX) but I can't be bothered, better solution + is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast. + ******************************************************************************/ #include "emu.h" +#include "includes/ckingbase.h" + #include "cpu/z80/z80.h" -#include "machine/timer.h" #include "machine/bankdev.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -37,181 +29,6 @@ Master: #include "ck_master.lh" // clickable -class ckingbase_state : public driver_device -{ -public: - ckingbase_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_irq_on(*this, "irq_on"), - m_inp_matrix(*this, "IN.%u", 0), - m_out_x(*this, "%u.%u", 0U, 0U), - m_out_a(*this, "%u.a", 0U), - m_out_digit(*this, "digit%u", 0U), - m_display_wait(33), - m_display_maxy(1), - m_display_maxx(0) - { } - - // devices/pointers - required_device m_maincpu; - optional_device m_irq_on; - optional_ioport_array<10> m_inp_matrix; // max 10 - output_finder<0x20, 0x20> m_out_x; - output_finder<0x20> m_out_a; - output_finder<0x20> m_out_digit; - - template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); } - template TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); } - - // misc common - u16 m_inp_mux; // multiplexed keypad mask - u16 m_led_select; - u16 m_led_data; - - u16 read_inputs(int columns); - - // display common - int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) - int m_display_maxy; // display matrix number of rows - int m_display_maxx; // display matrix number of columns (max 31 for now) - - u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on) - u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments - u8 m_display_decay[0x20][0x20]; // (internal use) - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - void set_display_size(int maxx, int maxy); - void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; -}; - - -// machine start/reset - -void ckingbase_state::machine_start() -{ - // resolve handlers - m_out_x.resolve(); - m_out_a.resolve(); - m_out_digit.resolve(); - - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - memset(m_display_segmask, 0, sizeof(m_display_segmask)); - - m_inp_mux = 0; - m_led_select = 0; - m_led_data = 0; - - // register for savestates - save_item(NAME(m_display_maxy)); - save_item(NAME(m_display_maxx)); - save_item(NAME(m_display_wait)); - - save_item(NAME(m_display_state)); - save_item(NAME(m_display_decay)); - save_item(NAME(m_display_segmask)); - - save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_select)); - save_item(NAME(m_led_data)); -} - -void ckingbase_state::machine_reset() -{ -} - - - -/*************************************************************************** - - Helper Functions - -***************************************************************************/ - -// The device may strobe the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -void ckingbase_state::display_update() -{ - for (int y = 0; y < m_display_maxy; y++) - { - u32 active_state = 0; - - for (int x = 0; x <= m_display_maxx; x++) - { - // turn on powered segments - if (m_display_state[y] >> x & 1) - m_display_decay[y][x] = m_display_wait; - - // determine active state - u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0; - active_state |= (ds << x); - - // output to y.x, or y.a when always-on - if (x != m_display_maxx) - m_out_x[y][x] = ds; - else - m_out_a[y] = ds; - } - - // output to digity - if (m_display_segmask[y] != 0) - m_out_digit[y] = active_state & m_display_segmask[y]; - } -} - -TIMER_DEVICE_CALLBACK_MEMBER(ckingbase_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int y = 0; y < m_display_maxy; y++) - for (int x = 0; x <= m_display_maxx; x++) - if (m_display_decay[y][x] != 0) - m_display_decay[y][x]--; - - display_update(); -} - -void ckingbase_state::set_display_size(int maxx, int maxy) -{ - m_display_maxx = maxx; - m_display_maxy = maxy; -} - -void ckingbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) -{ - set_display_size(maxx, maxy); - - // update current state - u32 mask = (1 << maxx) - 1; - for (int y = 0; y < maxy; y++) - m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; - - if (update) - display_update(); -} - - -// generic input handlers - -u16 ckingbase_state::read_inputs(int columns) -{ - u16 ret = 0; - - // read selected input rows - for (int i = 0; i < columns; i++) - if (m_inp_mux >> i & 1) - ret |= m_inp_matrix[i]->read(); - - return ret; -} - namespace { class master_state : public ckingbase_state @@ -242,10 +59,10 @@ private: void control_w(u8 data); }; -// Devices, I/O + /****************************************************************************** - Master + Devices, I/O ******************************************************************************/ // TTL/generic @@ -292,8 +109,6 @@ void master_state::init_master() Address Maps ******************************************************************************/ -// Master - void master_state::main_map(address_map &map) { map(0x0000, 0x1fff).mirror(0x6000).rom().region("maincpu", 0); // _A15 @@ -334,89 +149,6 @@ void master_state::main_trampoline(address_map &map) Input Ports ******************************************************************************/ -INPUT_PORTS_START( cking_cb_buttons ) - PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - - PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") -INPUT_PORTS_END - - static INPUT_PORTS_START( master ) PORT_INCLUDE( cking_cb_buttons ) @@ -484,9 +216,11 @@ ROM_END } // anonymous namespace + + /****************************************************************************** Drivers ******************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ CONS( 1984, ckmaster, 0, 0, master, master, master_state, init_master, "Chess King", "Master (Chess King)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/drivers/ckingbase.cpp b/src/mame/drivers/ckingbase.cpp new file mode 100644 index 00000000000..65dd6b41e90 --- /dev/null +++ b/src/mame/drivers/ckingbase.cpp @@ -0,0 +1,222 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** + + Chess King chess computer driver base class + + NOTE: MAME doesn't include a generalized implementation for boardpieces yet, + greatly affecting user playability of emulated electronic board games. + As workaround for the chess games, use an external chess GUI on the side, + such as Arena(in editmode). + +******************************************************************************/ + +#include "emu.h" +#include "includes/ckingbase.h" + + +// machine start/reset + +void ckingbase_state::machine_start() +{ + // resolve handlers + m_out_x.resolve(); + m_out_a.resolve(); + m_out_digit.resolve(); + + // zerofill + memset(m_display_state, 0, sizeof(m_display_state)); + memset(m_display_decay, 0, sizeof(m_display_decay)); + memset(m_display_segmask, 0, sizeof(m_display_segmask)); + + m_inp_mux = 0; + m_led_select = 0; + m_led_data = 0; + + // register for savestates + save_item(NAME(m_display_maxy)); + save_item(NAME(m_display_maxx)); + save_item(NAME(m_display_wait)); + + save_item(NAME(m_display_state)); + save_item(NAME(m_display_decay)); + save_item(NAME(m_display_segmask)); + + save_item(NAME(m_inp_mux)); + save_item(NAME(m_led_select)); + save_item(NAME(m_led_data)); +} + +void ckingbase_state::machine_reset() +{ +} + + + +/*************************************************************************** + + Helper Functions + +***************************************************************************/ + +// The device may strobe the outputs very fast, it is unnoticeable to the user. +// To prevent flickering here, we need to simulate a decay. + +void ckingbase_state::display_update() +{ + for (int y = 0; y < m_display_maxy; y++) + { + u32 active_state = 0; + + for (int x = 0; x <= m_display_maxx; x++) + { + // turn on powered segments + if (m_display_state[y] >> x & 1) + m_display_decay[y][x] = m_display_wait; + + // determine active state + u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0; + active_state |= (ds << x); + + // output to y.x, or y.a when always-on + if (x != m_display_maxx) + m_out_x[y][x] = ds; + else + m_out_a[y] = ds; + } + + // output to digity + if (m_display_segmask[y] != 0) + m_out_digit[y] = active_state & m_display_segmask[y]; + } +} + +TIMER_DEVICE_CALLBACK_MEMBER(ckingbase_state::display_decay_tick) +{ + // slowly turn off unpowered segments + for (int y = 0; y < m_display_maxy; y++) + for (int x = 0; x <= m_display_maxx; x++) + if (m_display_decay[y][x] != 0) + m_display_decay[y][x]--; + + display_update(); +} + +void ckingbase_state::set_display_size(int maxx, int maxy) +{ + m_display_maxx = maxx; + m_display_maxy = maxy; +} + +void ckingbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) +{ + set_display_size(maxx, maxy); + + // update current state + u32 mask = (1 << maxx) - 1; + for (int y = 0; y < maxy; y++) + m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; + + if (update) + display_update(); +} + + +// generic input handlers + +u16 ckingbase_state::read_inputs(int columns) +{ + u16 ret = 0; + + // read selected input rows + for (int i = 0; i < columns; i++) + if (m_inp_mux >> i & 1) + ret |= m_inp_matrix[i]->read(); + + return ret; +} + + +// chessboard generic inputs + +INPUT_PORTS_START( cking_cb_buttons ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") +INPUT_PORTS_END diff --git a/src/mame/drivers/cxg_ch2001.cpp b/src/mame/drivers/cxg_ch2001.cpp index fd08ceddc03..60a94e6656d 100644 --- a/src/mame/drivers/cxg_ch2001.cpp +++ b/src/mame/drivers/cxg_ch2001.cpp @@ -3,19 +3,6 @@ // thanks-to:Berger /****************************************************************************** - CXG* generic Z80 based chess computer driver - *later known as CXG Newcrest Technology Ltd. - - NOTE: MAME doesn't include a generalized implementation for boardpieces yet, - greatly affecting user playability of emulated electronic board games. - As workaround for the chess games, use an external chess GUI on the side, - such as Arena(in editmode). - - TODO: - - nothing - -****************************************************************************** - Chess 2001: - Zilog Z8400APS @ 4 MHz (8MHz XTAL) - 2KB RAM HM6116, 16KB ROM D27128D @@ -24,9 +11,9 @@ Chess 2001: ******************************************************************************/ #include "emu.h" +#include "includes/cxgbase.h" + #include "cpu/z80/z80.h" -#include "machine/timer.h" -#include "sound/dac.h" #include "sound/volt_reg.h" #include "speaker.h" @@ -34,98 +21,7 @@ Chess 2001: #include "cxg_ch2001.lh" // clickable -class cxgbase_state : public driver_device -{ -public: - cxgbase_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_irq_on(*this, "irq_on"), - m_dac(*this, "dac"), - m_inp_matrix(*this, "IN.%u", 0), - m_out_x(*this, "%u.%u", 0U, 0U), - m_out_a(*this, "%u.a", 0U), - m_out_digit(*this, "digit%u", 0U), - m_display_wait(33), - m_display_maxy(1), - m_display_maxx(0) - { } - - // devices/pointers - required_device m_maincpu; - optional_device m_irq_on; - optional_device m_dac; - optional_ioport_array<10> m_inp_matrix; // max 10 - output_finder<0x20, 0x20> m_out_x; - output_finder<0x20> m_out_a; - output_finder<0x20> m_out_digit; - - template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); } - template TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); } - - // misc common - u16 m_inp_mux; // multiplexed keypad mask - u16 m_led_select; - u16 m_led_data; - - u16 read_inputs(int columns); - - // display common - int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) - int m_display_maxy; // display matrix number of rows - int m_display_maxx; // display matrix number of columns (max 31 for now) - - u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on) - u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments - u8 m_display_decay[0x20][0x20]; // (internal use) - - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); - void display_update(); - void set_display_size(int maxx, int maxy); - void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; -}; - - -// machine start/reset - -void cxgbase_state::machine_start() -{ - // resolve handlers - m_out_x.resolve(); - m_out_a.resolve(); - m_out_digit.resolve(); - - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_decay, 0, sizeof(m_display_decay)); - memset(m_display_segmask, 0, sizeof(m_display_segmask)); - - m_inp_mux = 0; - m_led_select = 0; - m_led_data = 0; - - // register for savestates - save_item(NAME(m_display_maxy)); - save_item(NAME(m_display_maxx)); - save_item(NAME(m_display_wait)); - - save_item(NAME(m_display_state)); - save_item(NAME(m_display_decay)); - save_item(NAME(m_display_segmask)); - - save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_select)); - save_item(NAME(m_led_data)); -} - -void cxgbase_state::machine_reset() -{ -} - +namespace { class ch2001_state : public cxgbase_state { @@ -152,95 +48,9 @@ private: }; -/*************************************************************************** - - Helper Functions - -***************************************************************************/ - -// The device may strobe the outputs very fast, it is unnoticeable to the user. -// To prevent flickering here, we need to simulate a decay. - -void cxgbase_state::display_update() -{ - for (int y = 0; y < m_display_maxy; y++) - { - u32 active_state = 0; - - for (int x = 0; x <= m_display_maxx; x++) - { - // turn on powered segments - if (m_display_state[y] >> x & 1) - m_display_decay[y][x] = m_display_wait; - - // determine active state - u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0; - active_state |= (ds << x); - - // output to y.x, or y.a when always-on - if (x != m_display_maxx) - m_out_x[y][x] = ds; - else - m_out_a[y] = ds; - } - - // output to digity - if (m_display_segmask[y] != 0) - m_out_digit[y] = active_state & m_display_segmask[y]; - } -} - -TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick) -{ - // slowly turn off unpowered segments - for (int y = 0; y < m_display_maxy; y++) - for (int x = 0; x <= m_display_maxx; x++) - if (m_display_decay[y][x] != 0) - m_display_decay[y][x]--; - - display_update(); -} - -void cxgbase_state::set_display_size(int maxx, int maxy) -{ - m_display_maxx = maxx; - m_display_maxy = maxy; -} - -void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) -{ - set_display_size(maxx, maxy); - - // update current state - u32 mask = (1 << maxx) - 1; - for (int y = 0; y < maxy; y++) - m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; - - if (update) - display_update(); -} - - -// generic input handlers - -u16 cxgbase_state::read_inputs(int columns) -{ - u16 ret = 0; - - // read selected input rows - for (int i = 0; i < columns; i++) - if (m_inp_mux >> i & 1) - ret |= m_inp_matrix[i]->read(); - - return ret; -} - - - -// Devices, I/O /****************************************************************************** - Chess 2001 + Devices, I/O ******************************************************************************/ // TTL @@ -277,8 +87,6 @@ READ8_MEMBER(ch2001_state::input_r) Address Maps ******************************************************************************/ -// Chess 2001 - void ch2001_state::main_map(address_map &map) { map(0x0000, 0x3fff).rom(); @@ -293,89 +101,6 @@ void ch2001_state::main_map(address_map &map) Input Ports ******************************************************************************/ -INPUT_PORTS_START( cxg_cb_magnets ) - PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - - PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") -INPUT_PORTS_END - - static INPUT_PORTS_START( ch2001 ) PORT_INCLUDE( cxg_cb_magnets ) @@ -441,6 +166,8 @@ ROM_START( ch2001 ) ROM_LOAD("ch2001.bin", 0x0000, 0x4000, CRC(b3485c73) SHA1(f405c6f67fe70edf45dcc383a4049ee6bad387a9) ) // D27128D, no label ROM_END +} // anonymous namespace + /****************************************************************************** diff --git a/src/mame/drivers/cxgbase.cpp b/src/mame/drivers/cxgbase.cpp new file mode 100644 index 00000000000..141a07740ef --- /dev/null +++ b/src/mame/drivers/cxgbase.cpp @@ -0,0 +1,223 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** + + CXG* chess computer driver base class + *later known as CXG Newcrest Technology Ltd. + + NOTE: MAME doesn't include a generalized implementation for boardpieces yet, + greatly affecting user playability of emulated electronic board games. + As workaround for the chess games, use an external chess GUI on the side, + such as Arena(in editmode). + +******************************************************************************/ + +#include "emu.h" +#include "includes/cxgbase.h" + + +// machine start/reset + +void cxgbase_state::machine_start() +{ + // resolve handlers + m_out_x.resolve(); + m_out_a.resolve(); + m_out_digit.resolve(); + + // zerofill + memset(m_display_state, 0, sizeof(m_display_state)); + memset(m_display_decay, 0, sizeof(m_display_decay)); + memset(m_display_segmask, 0, sizeof(m_display_segmask)); + + m_inp_mux = 0; + m_led_select = 0; + m_led_data = 0; + + // register for savestates + save_item(NAME(m_display_maxy)); + save_item(NAME(m_display_maxx)); + save_item(NAME(m_display_wait)); + + save_item(NAME(m_display_state)); + save_item(NAME(m_display_decay)); + save_item(NAME(m_display_segmask)); + + save_item(NAME(m_inp_mux)); + save_item(NAME(m_led_select)); + save_item(NAME(m_led_data)); +} + +void cxgbase_state::machine_reset() +{ +} + + + +/*************************************************************************** + + Helper Functions + +***************************************************************************/ + +// The device may strobe the outputs very fast, it is unnoticeable to the user. +// To prevent flickering here, we need to simulate a decay. + +void cxgbase_state::display_update() +{ + for (int y = 0; y < m_display_maxy; y++) + { + u32 active_state = 0; + + for (int x = 0; x <= m_display_maxx; x++) + { + // turn on powered segments + if (m_display_state[y] >> x & 1) + m_display_decay[y][x] = m_display_wait; + + // determine active state + u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0; + active_state |= (ds << x); + + // output to y.x, or y.a when always-on + if (x != m_display_maxx) + m_out_x[y][x] = ds; + else + m_out_a[y] = ds; + } + + // output to digity + if (m_display_segmask[y] != 0) + m_out_digit[y] = active_state & m_display_segmask[y]; + } +} + +TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick) +{ + // slowly turn off unpowered segments + for (int y = 0; y < m_display_maxy; y++) + for (int x = 0; x <= m_display_maxx; x++) + if (m_display_decay[y][x] != 0) + m_display_decay[y][x]--; + + display_update(); +} + +void cxgbase_state::set_display_size(int maxx, int maxy) +{ + m_display_maxx = maxx; + m_display_maxy = maxy; +} + +void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) +{ + set_display_size(maxx, maxy); + + // update current state + u32 mask = (1 << maxx) - 1; + for (int y = 0; y < maxy; y++) + m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; + + if (update) + display_update(); +} + + +// generic input handlers + +u16 cxgbase_state::read_inputs(int columns) +{ + u16 ret = 0; + + // read selected input rows + for (int i = 0; i < columns; i++) + if (m_inp_mux >> i & 1) + ret |= m_inp_matrix[i]->read(); + + return ret; +} + + +// chessboard generic inputs + +INPUT_PORTS_START( cxg_cb_magnets ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") +INPUT_PORTS_END diff --git a/src/mame/includes/ckingbase.h b/src/mame/includes/ckingbase.h new file mode 100644 index 00000000000..f7e22ebac57 --- /dev/null +++ b/src/mame/includes/ckingbase.h @@ -0,0 +1,72 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** +* +* Chess King chess computer driver base class +* +******************************************************************************/ + +#pragma once + +#ifndef MAME_INCLUDES_CKINGBASE_H +#define MAME_INCLUDES_CKINGBASE_H + +#include "machine/timer.h" + +class ckingbase_state : public driver_device +{ +public: + ckingbase_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_irq_on(*this, "irq_on"), + m_inp_matrix(*this, "IN.%u", 0), + m_out_x(*this, "%u.%u", 0U, 0U), + m_out_a(*this, "%u.a", 0U), + m_out_digit(*this, "digit%u", 0U), + m_display_wait(33), + m_display_maxy(1), + m_display_maxx(0) + { } + + // devices/pointers + required_device m_maincpu; + optional_device m_irq_on; + optional_ioport_array<10> m_inp_matrix; // max 10 + output_finder<0x20, 0x20> m_out_x; + output_finder<0x20> m_out_a; + output_finder<0x20> m_out_digit; + + template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); } + template TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); } + + // misc common + u16 m_inp_mux; // multiplexed keypad mask + u16 m_led_select; + u16 m_led_data; + + u16 read_inputs(int columns); + + // display common + int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) + int m_display_maxy; // display matrix number of rows + int m_display_maxx; // display matrix number of columns (max 31 for now) + + u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on) + u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments + u8 m_display_decay[0x20][0x20]; // (internal use) + + TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); + void display_update(); + void set_display_size(int maxx, int maxy); + void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; +}; + + +INPUT_PORTS_EXTERN( cking_cb_buttons ); + +#endif // MAME_INCLUDES_CKINGBASE_H diff --git a/src/mame/includes/cxgbase.h b/src/mame/includes/cxgbase.h new file mode 100644 index 00000000000..be3d8e599a6 --- /dev/null +++ b/src/mame/includes/cxgbase.h @@ -0,0 +1,75 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** +* +* CXG chess computer driver base class +* +******************************************************************************/ + +#pragma once + +#ifndef MAME_INCLUDES_CXGBASE_H +#define MAME_INCLUDES_CXGBASE_H + +#include "machine/timer.h" +#include "sound/dac.h" + +class cxgbase_state : public driver_device +{ +public: + cxgbase_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_irq_on(*this, "irq_on"), + m_dac(*this, "dac"), + m_inp_matrix(*this, "IN.%u", 0), + m_out_x(*this, "%u.%u", 0U, 0U), + m_out_a(*this, "%u.a", 0U), + m_out_digit(*this, "digit%u", 0U), + m_display_wait(33), + m_display_maxy(1), + m_display_maxx(0) + { } + + // devices/pointers + required_device m_maincpu; + optional_device m_irq_on; + optional_device m_dac; + optional_ioport_array<10> m_inp_matrix; // max 10 + output_finder<0x20, 0x20> m_out_x; + output_finder<0x20> m_out_a; + output_finder<0x20> m_out_digit; + + template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); } + template TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); } + + // misc common + u16 m_inp_mux; // multiplexed keypad mask + u16 m_led_select; + u16 m_led_data; + + u16 read_inputs(int columns); + + // display common + int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) + int m_display_maxy; // display matrix number of rows + int m_display_maxx; // display matrix number of columns (max 31 for now) + + u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on) + u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments + u8 m_display_decay[0x20][0x20]; // (internal use) + + TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); + void display_update(); + void set_display_size(int maxx, int maxy); + void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; +}; + + +INPUT_PORTS_EXTERN( cxg_cb_magnets ); + +#endif // MAME_INCLUDES_CXGBASE_H diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 75e7094a0b4..5971cac2f34 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -139,6 +139,7 @@ chesstrv.cpp cit101.cpp cit220.cpp cking_master.cpp +ckingbase.cpp clcd.cpp clickstart.cpp cm1800.cpp @@ -164,6 +165,7 @@ crvision.cpp ct486.cpp cvicny.cpp cxg_ch2001.cpp +cxgbase.cpp cxhumax.cpp cybiko.cpp cz101.cpp From 314f411b13588207d6f8bceadc2d3121b5a8b6e6 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 16 Feb 2019 21:27:06 -0500 Subject: [PATCH 18/21] Eliminate qsort usage in debugger (nw) --- src/emu/debug/debugcmd.cpp | 12 +++---- src/emu/debug/dvbpoints.cpp | 51 +++++++++++----------------- src/emu/debug/dvbpoints.h | 2 +- src/emu/debug/dvwpoints.cpp | 67 ++++++++++++++----------------------- src/emu/debug/dvwpoints.h | 2 +- 5 files changed, 52 insertions(+), 82 deletions(-) diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index 05fb6acbddd..7f650a2e356 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -21,6 +21,7 @@ #include "natkeyboard.h" #include "render.h" #include +#include #include @@ -3215,13 +3216,6 @@ void debugger_commands::execute_memdump(int ref, const std::vector execute_symlist - execute the symlist command -------------------------------------------------*/ -static int CLIB_DECL symbol_sort_compare(const void *item1, const void *item2) -{ - const char *str1 = *(const char **)item1; - const char *str2 = *(const char **)item2; - return strcmp(str1, str2); -} - void debugger_commands::execute_symlist(int ref, const std::vector ¶ms) { device_t *cpu = nullptr; @@ -3257,7 +3251,9 @@ void debugger_commands::execute_symlist(int ref, const std::vector /* sort the symbols */ if (count > 1) - qsort((void *)namelist, count, sizeof(namelist[0]), symbol_sort_compare); + std::sort(&namelist[0], &namelist[count], [](const char *item1, const char *item2) { + return strcmp(item1, item2) < 0; + }); /* iterate over symbols and print out relevant ones */ for (symnum = 0; symnum < count; symnum++) diff --git a/src/emu/debug/dvbpoints.cpp b/src/emu/debug/dvbpoints.cpp index 6bc4a008c5f..3b76c7d26fe 100644 --- a/src/emu/debug/dvbpoints.cpp +++ b/src/emu/debug/dvbpoints.cpp @@ -12,79 +12,68 @@ #include "debugger.h" #include "dvbpoints.h" +#include #include // Sorting functors for the qsort function -static int cIndexAscending(const void* a, const void* b) +static bool cIndexAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { - const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; - const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; - return left->index() - right->index(); + return a->index() < b->index(); } -static int cIndexDescending(const void* a, const void* b) +static bool cIndexDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { return cIndexAscending(b, a); } -static int cEnabledAscending(const void* a, const void* b) +static bool cEnabledAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { - const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; - const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; - return (left->enabled() ? 1 : 0) - (right->enabled() ? 1 : 0); + return !a->enabled() && b->enabled(); } -static int cEnabledDescending(const void* a, const void* b) +static bool cEnabledDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { return cEnabledAscending(b, a); } -static int cCpuAscending(const void* a, const void* b) +static bool cCpuAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { - const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; - const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; - return strcmp(left->debugInterface()->device().tag(), right->debugInterface()->device().tag()); + return strcmp(a->debugInterface()->device().tag(), b->debugInterface()->device().tag()) < 0; } -static int cCpuDescending(const void* a, const void* b) +static bool cCpuDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { return cCpuAscending(b, a); } -static int cAddressAscending(const void* a, const void* b) +static bool cAddressAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { - const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; - const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; - return (left->address() > right->address()) ? 1 : (left->address() < right->address()) ? -1 : 0; + return a->address() < b->address(); } -static int cAddressDescending(const void* a, const void* b) +static bool cAddressDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { return cAddressAscending(b, a); } -static int cConditionAscending(const void* a, const void* b) +static bool cConditionAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { - const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; - const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; - return strcmp(left->condition(), right->condition()); + return strcmp(a->condition(), b->condition()) < 0; } -static int cConditionDescending(const void* a, const void* b) +static bool cConditionDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { return cConditionAscending(b, a); } -static int cActionAscending(const void* a, const void* b) +static bool cActionAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { - const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; - const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; - return strcmp(left->action(), right->action()); + return strcmp(a->action(), b->action()) < 0; } -static int cActionDescending(const void* a, const void* b) +static bool cActionDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) { return cActionAscending(b, a); } @@ -210,7 +199,7 @@ void debug_view_breakpoints::gather_breakpoints() // And now for the sort if (!m_buffer.empty()) - qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::breakpoint *), m_sortType); + std::stable_sort(m_buffer.begin(), m_buffer.end(), m_sortType); } diff --git a/src/emu/debug/dvbpoints.h b/src/emu/debug/dvbpoints.h index 5d74549fd66..2d3ae38fa58 100644 --- a/src/emu/debug/dvbpoints.h +++ b/src/emu/debug/dvbpoints.h @@ -48,7 +48,7 @@ private: // internal state - int (*m_sortType)(void const *, void const *); + bool (*m_sortType)(const device_debug::breakpoint *, const device_debug::breakpoint *); std::vector m_buffer; }; diff --git a/src/emu/debug/dvwpoints.cpp b/src/emu/debug/dvwpoints.cpp index 2ab1fc6a0bf..b0584b5d61c 100644 --- a/src/emu/debug/dvwpoints.cpp +++ b/src/emu/debug/dvwpoints.cpp @@ -11,102 +11,87 @@ #include "emu.h" #include "dvwpoints.h" +#include #include -static int cIndexAscending(const void* a, const void* b) +static bool cIndexAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return left->index() - right->index(); + return a->index() < b->index(); } -static int cIndexDescending(const void* a, const void* b) +static bool cIndexDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cIndexAscending(b, a); } -static int cEnabledAscending(const void* a, const void* b) +static bool cEnabledAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return (left->enabled() ? 1 : 0) - (right->enabled() ? 1 : 0); + return !a->enabled() && b->enabled(); } -static int cEnabledDescending(const void* a, const void* b) +static bool cEnabledDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cEnabledAscending(b, a); } -static int cCpuAscending(const void* a, const void* b) +static bool cCpuAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return strcmp(left->debugInterface()->device().tag(), right->debugInterface()->device().tag()); + return strcmp(a->debugInterface()->device().tag(), b->debugInterface()->device().tag()) < 0; } -static int cCpuDescending(const void* a, const void* b) +static bool cCpuDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cCpuAscending(b, a); } -static int cSpaceAscending(const void* a, const void* b) +static bool cSpaceAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return strcmp(left->space().name(), right->space().name()); + return strcmp(a->space().name(), b->space().name()) < 0; } -static int cSpaceDescending(const void* a, const void* b) +static bool cSpaceDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cSpaceAscending(b, a); } -static int cAddressAscending(const void* a, const void* b) +static bool cAddressAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return (left->address() > right->address()) ? 1 : (left->address() < right->address()) ? -1 : 0; + return a->address() < b->address(); } -static int cAddressDescending(const void* a, const void* b) +static bool cAddressDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cAddressAscending(b, a); } -static int cTypeAscending(const void* a, const void* b) +static bool cTypeAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return int(left->type()) - int(right->type()); + return int(a->type()) < int(b->type()); } -static int cTypeDescending(const void* a, const void* b) +static bool cTypeDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cTypeAscending(b, a); } -static int cConditionAscending(const void* a, const void* b) +static bool cConditionAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return strcmp(left->condition(), right->condition()); + return strcmp(a->condition(), b->condition()) < 0; } -static int cConditionDescending(const void* a, const void* b) +static bool cConditionDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cConditionAscending(b, a); } -static int cActionAscending(const void* a, const void* b) +static bool cActionAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { - const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; - const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; - return left->action().compare(right->action()); + return a->action() < b->action(); } -static int cActionDescending(const void* a, const void* b) +static bool cActionDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) { return cActionAscending(b, a); } @@ -236,7 +221,7 @@ void debug_view_watchpoints::gather_watchpoints() // And now for the sort if (!m_buffer.empty()) - qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::watchpoint *), m_sortType); + std::stable_sort(m_buffer.begin(), m_buffer.end(), m_sortType); } diff --git a/src/emu/debug/dvwpoints.h b/src/emu/debug/dvwpoints.h index b1707b7d5b2..26b7c676e0e 100644 --- a/src/emu/debug/dvwpoints.h +++ b/src/emu/debug/dvwpoints.h @@ -43,7 +43,7 @@ private: // internal state - int (*m_sortType)(void const *, void const *); + bool (*m_sortType)(const device_debug::watchpoint *, const device_debug::watchpoint *); std::vector m_buffer; }; From db494eba5430e64f5daee17cf158785866c8459d Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 16 Feb 2019 22:22:56 -0500 Subject: [PATCH 19/21] vt100, ms6102: Caps Lock is physically toggled --- src/mame/machine/vt100_kbd.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mame/machine/vt100_kbd.cpp b/src/mame/machine/vt100_kbd.cpp index 134d0ef0571..591e0789cc4 100644 --- a/src/mame/machine/vt100_kbd.cpp +++ b/src/mame/machine/vt100_kbd.cpp @@ -73,7 +73,7 @@ static INPUT_PORTS_START(vt100_kbd) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("~") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line feed") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT)) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line feed") PORT_CODE(KEYCODE_RALT) PORT_CHAR(0x0a) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) @@ -152,7 +152,7 @@ static INPUT_PORTS_START(vt100_kbd) PORT_START("LINEE") PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE PORT_START("LINEF") PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED) @@ -472,11 +472,11 @@ static INPUT_PORTS_START(ms7002) PORT_START("LINED") PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xd0\x92\xd0\xa0") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // ВР = верхний регистр + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xd0\xa1\xd0\x94\xd0\x92") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // СДВ = сдвинуть PORT_START("LINEE") PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) // maybe + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xd0\x92\xd0\xa0") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE // ВР = верхний регистр PORT_START("LINEF") PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED) From 0e10c56d5204eff07b8fda19405b1fd05b564d01 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 16 Feb 2019 22:32:57 -0500 Subject: [PATCH 20/21] tv950: Set toggle for "Alpha Lock" key --- src/mame/machine/tv950kb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/machine/tv950kb.cpp b/src/mame/machine/tv950kb.cpp index 6e07fa86cec..ab92932b710 100644 --- a/src/mame/machine/tv950kb.cpp +++ b/src/mame/machine/tv950kb.cpp @@ -200,7 +200,7 @@ static INPUT_PORTS_START(tv950kb) PORT_START("FUNCT") PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Funct") PORT_CHAR(UCHAR_MAMEKEY(LALT)) PORT_CODE(KEYCODE_LALT) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_BIT(0x9f, IP_ACTIVE_LOW, IPT_UNUSED) INPUT_PORTS_END From 2b01b8107e0b735b9ac922339e800debee7054e5 Mon Sep 17 00:00:00 2001 From: katananja <9029191+katananja@users.noreply.github.com> Date: Sat, 16 Feb 2019 23:49:37 -0300 Subject: [PATCH 21/21] Update for Brazilian keyboard map All key maps tested and working. --- keymaps/km_br_LINUX.map | 50 ++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/keymaps/km_br_LINUX.map b/keymaps/km_br_LINUX.map index fb764448380..79958b20bac 100644 --- a/keymaps/km_br_LINUX.map +++ b/keymaps/km_br_LINUX.map @@ -1,38 +1,42 @@ -# -# FIXME: This file produces errors and needs to be fixed. -# - [SDL2] -# MAME/MESS keymap for Brazilian QWERTY 107-keys keyboard (Linux) -# -# The 107-keys Brazilian keyboard has an extra key used to type "/". -# Since I don't own such a keyboard, I can't write a proper definition. -# However, it should be placed in the 4th row, after ITEM_ID_SLASH. -# -# SDL can tell the difference between the two COMPOSE keys but assigns them the same label -# thus both OPENBRACE and QUOTE appear like "´ ~" in the user interface. -# The following definitions are therefore correct. +# MAME/MESS keymap for Brazilian ABNT2 QWERTY 105-keys keyboard (Linux) # # Row 1 # -ITEM_ID_TILDE SDL_SCANCODE_QUOTE ' +ITEM_ID_TILDE SDL_SCANCODE_APOSTROPHE ~ # # Row 2 # -ITEM_ID_OPENBRACE SDL_SCANCODE_COMPOSE ´ -ITEM_ID_CLOSEBRACE SDL_SCANCODE_LEFTBRACKET [ +ITEM_ID_OPENBRACE SDL_SCANCODE_RIGHTBRACKET [ +ITEM_ID_CLOSEBRACE SDL_SCANCODE_BACKSLASH ] # # Row 3 # -ITEM_ID_COLON SDL_SCANCODE_WORLD_71 Ç -ITEM_ID_QUOTE SDL_SCANCODE_COMPOSE ~ -ITEM_ID_BACKSLASH SDL_SCANCODE_RIGHTBRACKET ] +ITEM_ID_COLON SDL_SCANCODE_SLASH : +ITEM_ID_QUOTE SDL_SCANCODE_GRAVE " +ITEM_ID_BACKSLASH SDL_SCANCODE_NONUSBACKSLASH \ # # Row 4 # -ITEM_ID_BACKSLASH2 SDL_SCANCODE_LESS < -ITEM_ID_SLASH SDL_SCANCODE_SEMICOLON ; +ITEM_ID_STOP SDL_SCANCODE_PERIOD . # -# Row 5 +# keyPad row 1 # -ITEM_ID_RALT SDL_SCANCODE_MODE ALTGR \ No newline at end of file +ITEM_ID_NUMLOCK SDL_SCANCODE_NUMLOCKCLEAR NUMLOCK +ITEM_ID_SLASH_PAD SDL_SCANCODE_KP_DIVIDE / +ITEM_ID_ASTERISK SDL_SCANCODE_KP_MULTIPLY * +ITEM_ID_MINUS_PAD SDL_SCANCODE_KP_MINUS - +# +# keyPad row 2 +# +ITEM_ID_PLUS_PAD SDL_SCANCODE_KP_PLUS + +# +# keyPad row 3 +# +ITEM_ID_STOP SDL_SCANCODE_KP_DECIMAL . +# +# keyPad row 4 +# +# keyPad row 5 +# +ITEM_ID_COMMA SDL_SCANCODE_KP_PERIOD ,