summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Peter Ferrie <peter.ferrie@gmail.com>2018-07-29 21:54:08 -0700
committer Peter Ferrie <peter.ferrie@gmail.com>2018-07-29 21:54:08 -0700
commit50830efb2adb9487edccbc8e912c7f29743ceeb5 (patch)
tree0619ee4332408d13c7b87b501c3801150393b074
parent83c4aa9f1e772638e50a781a6e3d66434212c814 (diff)
parentd14c601a767ff8240a93270dcb18211d773f8e30 (diff)
Merge branch 'master' of https://github.com/mamedev/mame
-rw-r--r--hash/ibm5150.xml31
-rw-r--r--hash/ibm5170.xml166
-rw-r--r--hash/pc88va.xml46
-rw-r--r--hash/vgmplay.xml66
-rw-r--r--hash/x68k_flop.xml12
-rw-r--r--makefile4
-rw-r--r--scripts/src/emu.lua10
-rw-r--r--scripts/target/mame/mess.lua2
-rw-r--r--scripts/target/mame/virtual.lua1
-rw-r--r--src/devices/bus/vme/vme_fccpu20.cpp10
-rw-r--r--src/devices/cpu/psx/psx.cpp38
-rw-r--r--src/devices/cpu/score/score.cpp2
-rw-r--r--src/devices/cpu/tlcs870/tlcs870.cpp178
-rw-r--r--src/devices/cpu/tlcs870/tlcs870.h91
-rw-r--r--src/devices/cpu/tlcs870/tlcs870_ops.cpp496
-rw-r--r--src/devices/cpu/tlcs870/tlcs870_ops_dst.cpp124
-rw-r--r--src/devices/cpu/tlcs870/tlcs870_ops_helper.cpp384
-rw-r--r--src/devices/cpu/tlcs870/tlcs870_ops_reg.cpp375
-rw-r--r--src/devices/cpu/tlcs870/tlcs870_ops_src.cpp581
-rw-r--r--src/devices/machine/applefdc.h3
-rw-r--r--src/devices/machine/ripple_counter.h2
-rw-r--r--src/devices/sound/2203intf.cpp2
-rw-r--r--src/devices/sound/2608intf.cpp15
-rw-r--r--src/devices/sound/2608intf.h1
-rw-r--r--src/devices/sound/2610intf.cpp12
-rw-r--r--src/devices/sound/2610intf.h1
-rw-r--r--src/devices/sound/2612intf.cpp2
-rw-r--r--src/devices/sound/262intf.cpp11
-rw-r--r--src/devices/sound/262intf.h1
-rw-r--r--src/devices/sound/8950intf.cpp10
-rw-r--r--src/devices/sound/8950intf.h1
-rw-r--r--src/devices/sound/c6280.cpp4
-rw-r--r--src/devices/sound/fm.cpp16
-rw-r--r--src/devices/sound/fm.h2
-rw-r--r--src/devices/sound/fmopl.cpp7
-rw-r--r--src/devices/sound/fmopl.h1
-rw-r--r--src/devices/sound/gb.cpp10
-rw-r--r--src/devices/sound/gb.h1
-rw-r--r--src/devices/sound/k053260.cpp10
-rw-r--r--src/devices/sound/k053260.h1
-rw-r--r--src/devices/sound/k054539.cpp5
-rw-r--r--src/devices/sound/k054539.h1
-rw-r--r--src/devices/sound/qsound.cpp34
-rw-r--r--src/devices/sound/qsound.h1
-rw-r--r--src/devices/sound/qsoundhle.cpp29
-rw-r--r--src/devices/sound/qsoundhle.h9
-rw-r--r--src/devices/sound/rf5c68.cpp9
-rw-r--r--src/devices/sound/rf5c68.h1
-rw-r--r--src/devices/sound/sn76496.cpp5
-rw-r--r--src/devices/sound/sn76496.h1
-rw-r--r--src/devices/sound/ym2413.cpp8
-rw-r--r--src/devices/sound/ym2413.h1
-rw-r--r--src/devices/sound/ymf262.cpp22
-rw-r--r--src/devices/sound/ymf262.h1
-rw-r--r--src/devices/sound/ymf278b.cpp24
-rw-r--r--src/devices/sound/ymf278b.h2
-rw-r--r--src/devices/video/bt45x.cpp2
-rw-r--r--src/devices/video/gba_lcd.cpp2
-rw-r--r--src/devices/video/poly.h58
-rw-r--r--src/devices/video/stvvdp2.cpp176
-rw-r--r--src/devices/video/upd7220.cpp13
-rw-r--r--src/devices/video/vic4567.cpp12
-rw-r--r--src/emu/debug/debugcmd.cpp4
-rw-r--r--src/emu/debug/debugcon.cpp66
-rw-r--r--src/emu/debug/debugcon.h4
-rw-r--r--src/emu/debug/debugcpu.cpp72
-rw-r--r--src/emu/debug/debugcpu.h9
-rw-r--r--src/emu/debug/dvdisasm.cpp3
-rw-r--r--src/emu/debug/express.cpp48
-rw-r--r--src/emu/debug/express.h6
-rw-r--r--src/emu/diexec.cpp4
-rw-r--r--src/emu/diexec.h5
-rw-r--r--src/emu/drawgfx.cpp6
-rw-r--r--src/emu/drawgfxm.h100
-rw-r--r--src/emu/layout/horizont.lay24
-rw-r--r--src/emu/layout/lcd.lay8
-rw-r--r--src/emu/layout/lcd_rot.lay8
-rw-r--r--src/emu/layout/svg.lay8
-rw-r--r--src/emu/layout/vertical.lay37
-rw-r--r--src/emu/render.cpp322
-rw-r--r--src/emu/rendfont.cpp7
-rw-r--r--src/emu/rendlay.cpp124
-rw-r--r--src/emu/rendlay.h11
-rw-r--r--src/emu/save.h61
-rw-r--r--src/emu/schedule.cpp6
-rw-r--r--src/emu/screen.cpp217
-rw-r--r--src/emu/screen.h16
-rw-r--r--src/emu/sound.cpp61
-rw-r--r--src/emu/tilemap.cpp50
-rw-r--r--src/frontend/mame/info.cpp53
-rw-r--r--src/frontend/mame/luaengine.cpp2
-rw-r--r--src/frontend/mame/ui/devopt.cpp5
-rw-r--r--src/frontend/mame/ui/imgcntrl.cpp2
-rw-r--r--src/frontend/mame/ui/info.cpp2
-rw-r--r--src/lib/formats/flopimg.h6
-rw-r--r--src/lib/formats/imd_dsk.cpp20
-rw-r--r--src/lib/util/avhuff.h9
-rw-r--r--src/lib/util/bitmap.cpp60
-rw-r--r--src/lib/util/bitmap.h50
-rw-r--r--src/lib/util/bitstream.h9
-rw-r--r--src/lib/util/cdrom.h11
-rw-r--r--src/lib/util/chd.h9
-rw-r--r--src/lib/util/chdcd.h8
-rw-r--r--src/lib/util/chdcodec.h9
-rw-r--r--src/lib/util/corestr.h8
-rw-r--r--src/lib/util/coretmpl.h20
-rw-r--r--src/lib/util/coreutil.h8
-rw-r--r--src/lib/util/delegate.h9
-rw-r--r--src/lib/util/flac.h29
-rw-r--r--src/lib/util/harddisk.h8
-rw-r--r--src/lib/util/hash.h8
-rw-r--r--src/lib/util/hashing.h8
-rw-r--r--src/lib/util/huffman.h9
-rw-r--r--src/lib/util/jedparse.h8
-rw-r--r--src/lib/util/opresolv.h8
-rw-r--r--src/lib/util/palette.h9
-rw-r--r--src/lib/util/plaparse.h10
-rw-r--r--src/lib/util/pool.h8
-rw-r--r--src/lib/util/vbiparse.h8
-rw-r--r--src/lib/util/wavwrite.h8
-rw-r--r--src/mame/drivers/accomm.cpp6
-rw-r--r--src/mame/drivers/alesis.cpp1
-rw-r--r--src/mame/drivers/alg.cpp4
-rw-r--r--src/mame/drivers/alphasma.cpp2
-rw-r--r--src/mame/drivers/alto2.cpp17
-rw-r--r--src/mame/drivers/apple1.cpp4
-rw-r--r--src/mame/drivers/apple2e.cpp274
-rw-r--r--src/mame/drivers/astrof.cpp2
-rw-r--r--src/mame/drivers/atarisy4.cpp6
-rw-r--r--src/mame/drivers/bfcobra.cpp4
-rw-r--r--src/mame/drivers/bmcpokr.cpp5
-rw-r--r--src/mame/drivers/bw2.cpp1
-rw-r--r--src/mame/drivers/c65.cpp4
-rw-r--r--src/mame/drivers/casloopy.cpp2
-rw-r--r--src/mame/drivers/ccs300.cpp3
-rw-r--r--src/mame/drivers/cesclass.cpp2
-rw-r--r--src/mame/drivers/cfx9850.cpp3
-rw-r--r--src/mame/drivers/clcd.cpp2
-rw-r--r--src/mame/drivers/cps3.cpp29
-rw-r--r--src/mame/drivers/cybiko.cpp4
-rw-r--r--src/mame/drivers/ddenlovr.cpp4
-rw-r--r--src/mame/drivers/ddragon3.cpp78
-rw-r--r--src/mame/drivers/deshoros.cpp2
-rw-r--r--src/mame/drivers/dooyong.cpp6
-rw-r--r--src/mame/drivers/dynax.cpp2
-rw-r--r--src/mame/drivers/fb01.cpp2
-rw-r--r--src/mame/drivers/firefox.cpp4
-rw-r--r--src/mame/drivers/fontwriter.cpp51
-rw-r--r--src/mame/drivers/fp200.cpp8
-rw-r--r--src/mame/drivers/funworld.cpp2
-rw-r--r--src/mame/drivers/gamepock.cpp3
-rw-r--r--src/mame/drivers/gb.cpp79
-rw-r--r--src/mame/drivers/gizmondo.cpp3
-rw-r--r--src/mame/drivers/gmaster.cpp2
-rw-r--r--src/mame/drivers/goupil.cpp45
-rw-r--r--src/mame/drivers/gp32.cpp4
-rw-r--r--src/mame/drivers/gridcomp.cpp5
-rw-r--r--src/mame/drivers/halleys.cpp62
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp33
-rw-r--r--src/mame/drivers/hh_melps4.cpp7
-rw-r--r--src/mame/drivers/hh_sm510.cpp68
-rw-r--r--src/mame/drivers/hh_tms1k.cpp3
-rw-r--r--src/mame/drivers/hh_ucom4.cpp17
-rw-r--r--src/mame/drivers/hng64.cpp69
-rw-r--r--src/mame/drivers/hp49gp.cpp4
-rw-r--r--src/mame/drivers/hp_ipc.cpp8
-rw-r--r--src/mame/drivers/hprot1.cpp2
-rw-r--r--src/mame/drivers/hunter2.cpp2
-rw-r--r--src/mame/drivers/hx20.cpp1
-rw-r--r--src/mame/drivers/icatel.cpp2
-rw-r--r--src/mame/drivers/indigo.cpp6
-rw-r--r--src/mame/drivers/juicebox.cpp2
-rw-r--r--src/mame/drivers/lcmate2.cpp2
-rw-r--r--src/mame/drivers/megaphx.cpp6
-rw-r--r--src/mame/drivers/micro20.cpp10
-rw-r--r--src/mame/drivers/micronic.cpp3
-rw-r--r--src/mame/drivers/microvsn.cpp3
-rw-r--r--src/mame/drivers/mini2440.cpp6
-rw-r--r--src/mame/drivers/missile.cpp14
-rw-r--r--src/mame/drivers/mrgame.cpp231
-rw-r--r--src/mame/drivers/mstation.cpp2
-rw-r--r--src/mame/drivers/nakajies.cpp9
-rw-r--r--src/mame/drivers/nbmj8688.cpp32
-rw-r--r--src/mame/drivers/nc.cpp3
-rw-r--r--src/mame/drivers/ngp.cpp3
-rw-r--r--src/mame/drivers/notetaker.cpp16
-rw-r--r--src/mame/drivers/osbexec.cpp180
-rw-r--r--src/mame/drivers/palm.cpp11
-rw-r--r--src/mame/drivers/palmz22.cpp10
-rw-r--r--src/mame/drivers/pasopia7.cpp3
-rw-r--r--src/mame/drivers/pb1000.cpp2
-rw-r--r--src/mame/drivers/pc2000.cpp2
-rw-r--r--src/mame/drivers/pc4.cpp2
-rw-r--r--src/mame/drivers/pce220.cpp4
-rw-r--r--src/mame/drivers/pda600.cpp9
-rw-r--r--src/mame/drivers/pitagjr.cpp3
-rw-r--r--src/mame/drivers/pofo.cpp3
-rw-r--r--src/mame/drivers/pokemini.cpp3
-rw-r--r--src/mame/drivers/popobear.cpp4
-rw-r--r--src/mame/drivers/prestige.cpp3
-rw-r--r--src/mame/drivers/psion.cpp2
-rw-r--r--src/mame/drivers/pulsar.cpp27
-rw-r--r--src/mame/drivers/replicator.cpp2
-rw-r--r--src/mame/drivers/rex6000.cpp3
-rw-r--r--src/mame/drivers/riscpc.cpp9
-rw-r--r--src/mame/drivers/sbrkout.cpp4
-rw-r--r--src/mame/drivers/slicer.cpp9
-rw-r--r--src/mame/drivers/super6.cpp99
-rw-r--r--src/mame/drivers/taito_f3.cpp1
-rw-r--r--src/mame/drivers/tetrisp2.cpp79
-rw-r--r--src/mame/drivers/ti630.cpp2
-rw-r--r--src/mame/drivers/ti89.cpp2
-rw-r--r--src/mame/drivers/tmmjprd.cpp37
-rw-r--r--src/mame/drivers/unkz80.cpp (renamed from src/mame/drivers/jade.cpp)41
-rw-r--r--src/mame/drivers/vgmplay.cpp1254
-rw-r--r--src/mame/drivers/wpc_dot.cpp55
-rw-r--r--src/mame/drivers/wpc_flip1.cpp27
-rw-r--r--src/mame/drivers/wpc_flip2.cpp27
-rw-r--r--src/mame/drivers/x07.cpp1
-rw-r--r--src/mame/drivers/y2.cpp18
-rw-r--r--src/mame/drivers/ymmu100.cpp2
-rw-r--r--src/mame/drivers/z88.cpp2
-rw-r--r--src/mame/drivers/zn.cpp4
-rw-r--r--src/mame/includes/alesis.h1
-rw-r--r--src/mame/includes/gb.h9
-rw-r--r--src/mame/includes/hng64.h20
-rw-r--r--src/mame/includes/hx20.h1
-rw-r--r--src/mame/includes/nbmj8688.h7
-rw-r--r--src/mame/includes/realbrk.h10
-rw-r--r--src/mame/includes/super6.h4
-rw-r--r--src/mame/includes/wpc_dot.h36
-rw-r--r--src/mame/includes/wpc_flip1.h6
-rw-r--r--src/mame/includes/wpc_flip2.h6
-rw-r--r--src/mame/includes/x07.h7
-rw-r--r--src/mame/includes/z88.h3
-rw-r--r--src/mame/layout/buggyboy.lay8
-rw-r--r--src/mame/layout/nbmj8688.lay40
-rw-r--r--src/mame/layout/rocknms.lay26
-rw-r--r--src/mame/layout/stepstag.lay41
-rw-r--r--src/mame/layout/vgmplay.lay16
-rw-r--r--src/mame/machine/amiga.cpp2
-rw-r--r--src/mame/machine/archimds.cpp14
-rw-r--r--src/mame/machine/deco_irq.cpp4
-rw-r--r--src/mame/machine/electron.cpp4
-rw-r--r--src/mame/machine/seibucop/seibucop.cpp2
-rw-r--r--src/mame/mame.lst26
-rw-r--r--src/mame/mess.flt2
-rw-r--r--src/mame/video/agat7.cpp20
-rw-r--r--src/mame/video/amiga.cpp10
-rw-r--r--src/mame/video/amigaaga.cpp10
-rw-r--r--src/mame/video/apple2.cpp64
-rw-r--r--src/mame/video/apple3.cpp16
-rw-r--r--src/mame/video/aquarium.cpp4
-rw-r--r--src/mame/video/arcadecl.cpp8
-rw-r--r--src/mame/video/atarig42.cpp8
-rw-r--r--src/mame/video/atarigt.cpp6
-rw-r--r--src/mame/video/atarigx2.cpp8
-rw-r--r--src/mame/video/atarimo.cpp20
-rw-r--r--src/mame/video/atarirle.cpp107
-rw-r--r--src/mame/video/atarisy1.cpp6
-rw-r--r--src/mame/video/atarisy2.cpp4
-rw-r--r--src/mame/video/atarivad.cpp40
-rw-r--r--src/mame/video/badlands.cpp4
-rw-r--r--src/mame/video/batman.cpp8
-rw-r--r--src/mame/video/beathead.cpp10
-rw-r--r--src/mame/video/blstroid.cpp4
-rw-r--r--src/mame/video/boogwing.cpp4
-rw-r--r--src/mame/video/ccastles.cpp6
-rw-r--r--src/mame/video/cinemat.cpp8
-rw-r--r--src/mame/video/cloak.cpp4
-rw-r--r--src/mame/video/cloud9.cpp6
-rw-r--r--src/mame/video/copsnrob.cpp2
-rw-r--r--src/mame/video/cvs.cpp6
-rw-r--r--src/mame/video/cyberbal.cpp4
-rw-r--r--src/mame/video/cybstorm.cpp8
-rw-r--r--src/mame/video/dassault.cpp4
-rw-r--r--src/mame/video/decbac06.cpp38
-rw-r--r--src/mame/video/deco16ic.cpp4
-rw-r--r--src/mame/video/deco32.cpp4
-rw-r--r--src/mame/video/deco_mlc.cpp19
-rw-r--r--src/mame/video/deco_zoomspr.cpp20
-rw-r--r--src/mame/video/decocass.cpp18
-rw-r--r--src/mame/video/decodmd1.cpp5
-rw-r--r--src/mame/video/decodmd2.cpp32
-rw-r--r--src/mame/video/decodmd3.cpp29
-rw-r--r--src/mame/video/decospr.cpp28
-rw-r--r--src/mame/video/dragrace.cpp3
-rw-r--r--src/mame/video/dynax.cpp4
-rw-r--r--src/mame/video/electron.cpp6
-rw-r--r--src/mame/video/eprom.cpp16
-rw-r--r--src/mame/video/equites.cpp6
-rw-r--r--src/mame/video/exidy440.cpp12
-rw-r--r--src/mame/video/fantland.cpp2
-rw-r--r--src/mame/video/firetrk.cpp10
-rw-r--r--src/mame/video/galaxia.cpp16
-rw-r--r--src/mame/video/galspnbl.cpp4
-rw-r--r--src/mame/video/gamate.cpp7
-rw-r--r--src/mame/video/gauntlet.cpp4
-rw-r--r--src/mame/video/harddriv.cpp4
-rw-r--r--src/mame/video/irobot.cpp2
-rw-r--r--src/mame/video/jaguar.cpp8
-rw-r--r--src/mame/video/jedi.cpp10
-rw-r--r--src/mame/video/klax.cpp4
-rw-r--r--src/mame/video/kyocera.cpp5
-rw-r--r--src/mame/video/leland.cpp4
-rw-r--r--src/mame/video/lemmings.cpp14
-rw-r--r--src/mame/video/mac.cpp31
-rw-r--r--src/mame/video/madalien.cpp15
-rw-r--r--src/mame/video/mermaid.cpp28
-rw-r--r--src/mame/video/namcos21.cpp12
-rw-r--r--src/mame/video/namcos22.cpp59
-rw-r--r--src/mame/video/offtwall.cpp4
-rw-r--r--src/mame/video/quasar.cpp4
-rw-r--r--src/mame/video/rampart.cpp8
-rw-r--r--src/mame/video/realbrk.cpp435
-rw-r--r--src/mame/video/relief.cpp4
-rw-r--r--src/mame/video/rohga.cpp8
-rw-r--r--src/mame/video/shuuz.cpp4
-rw-r--r--src/mame/video/skullxbo.cpp6
-rw-r--r--src/mame/video/sprint2.cpp16
-rw-r--r--src/mame/video/sprint4.cpp16
-rw-r--r--src/mame/video/sprint8.cpp4
-rw-r--r--src/mame/video/starshp1.cpp22
-rw-r--r--src/mame/video/tank8.cpp4
-rw-r--r--src/mame/video/thunderj.cpp8
-rw-r--r--src/mame/video/toobin.cpp4
-rw-r--r--src/mame/video/triplhnt.cpp6
-rw-r--r--src/mame/video/tunhunt.cpp4
-rw-r--r--src/mame/video/ultratnk.cpp16
-rw-r--r--src/mame/video/vindictr.cpp12
-rw-r--r--src/mame/video/wolfpack.cpp38
-rw-r--r--src/mame/video/wpc_dmd.cpp2
-rw-r--r--src/mame/video/xybots.cpp4
-rw-r--r--src/osd/eigccppc.h6
-rw-r--r--src/osd/osdnet.h8
-rw-r--r--src/osd/osdsync.h7
336 files changed, 6108 insertions, 3830 deletions
diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml
index 641dd785e15..d42e3c7567e 100644
--- a/hash/ibm5150.xml
+++ b/hash/ibm5150.xml
@@ -8903,6 +8903,25 @@ has been replaced with an all-zero block. -->
</part>
</software>
+ <software name="mathblst">
+ <description>Math Blaster</description>
+ <year>1983</year>
+ <publisher>Davidson &amp; Associates</publisher>
+ <info name="usage" value="Requires BASICA" />
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Side 1 - Program"/>
+ <dataarea name="flop" size = "163840">
+ <rom name="Math Blaster! (USA) (Side 1 - Program).img" size="163840" crc="b73a1e48" sha1="01cedf6b1b079b2403e88803d26fb89818bda895" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="Side 2 - Data"/>
+ <dataarea name="flop" size = "163840">
+ <rom name="Math Blaster! (USA) (Side 2 - Data).img" size="163840" crc="8880c9f6" sha1="b09383d9746665d90d0d9435857e7d4e3e89eb28" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="meanst">
<description>Mean Streets</description>
<year>1989</year>
@@ -10601,6 +10620,18 @@ has been replaced with an all-zero block. -->
</part>
</software>
+ <software name="writrrab">
+ <description>Writer Rabbit</description>
+ <year>1988</year>
+ <publisher>The Learning Company</publisher>
+ <info name="version" value="1.3" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="Writer Rabbit (USA) (v1.3) [5.25-inch].img" size="368640" crc="c5c51062" sha1="f56a708fb819fc73cd6b94f942c4103c09ea7e7d" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="xenon">
<description>Xenon</description>
<year>1988</year>
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index 5390872eee4..3e769666d49 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -57,6 +57,54 @@
</part>
</software>
+ <software name="allinone">
+ <description>The All In One Boot Floppy 1.0</description>
+ <year>2008</year>
+ <publisher>Michael Schierl</publisher>
+ <info name="version" value="1.0" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="allinone.img" size="1474560" crc="b9d206e2" sha1="48993ad7769f655a46180db1e4dd2cf6811299ed" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="allinonea" cloneof="allinone">
+ <description>The All In One Boot Floppy 0.9</description>
+ <year>2006</year>
+ <publisher>Michael Schierl</publisher>
+ <info name="version" value="0.9" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="rom" size = "1474560">
+ <rom name="allinone09.img" size="1474560" crc="f97836fd" sha1="f1c6cdb2a56010d5cc7d36609c343c5f434c98dc" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="allinonel" cloneof="allinone">
+ <description>The All In One Boot Floppy 0.9 (Lite Version)</description>
+ <year>2006</year>
+ <publisher>Michael Schierl</publisher>
+ <info name="version" value="0.9" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="lite.img" size="737280" crc="a817a384" sha1="28d34559991788ce2e0b8ef486a8265c42e4e03d" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="allinonef" cloneof="allinone">
+ <description>The All In One Boot Floppy 0.9 (FreeDOS only)</description>
+ <year>2006</year>
+ <publisher>Michael Schierl</publisher>
+ <info name="version" value="0.9" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="freedos.img" size="737280" crc="57e02573" sha1="17226bd9bb3fc593084fadb52727defffdf51433" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="brutware" supported="no">
<description>Brutalware Linux 1.1</description>
<year>1999</year>
@@ -2491,7 +2539,7 @@
</part>
</software>
- <software name="msdos622th">
+ <software name="msdos622th" cloneof="msdos622">
<description>MS-DOS (Version 6.22, Thai)</description>
<year>1994</year>
<publisher>Microsoft</publisher>
@@ -4746,6 +4794,19 @@
</part>
</software>
+ <software name="mitscd" supported="no">
+ <!-- from Acer CPR 1.2 recovery CD-ROM -->
+ <description>Mitsumi IDE CD-ROM Driver</description>
+ <year>1994</year>
+ <publisher>Mitsumi</publisher>
+ <info name="version" value="1.21" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="mtm disk1.img" size="1474560" crc="b174a5a1" sha1="8e540c920ec5737786f4bb2d0c10bc5362cd3fdc" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="mitsmous">
<!-- from Acer CPR 1.2 recovery CD-ROM -->
<description>Mitsumi Mouse Driver</description>
@@ -5115,6 +5176,18 @@
</part>
</software>
+ <software name="absdemo">
+ <description>ABS Self Running Demo</description>
+ <year>1995</year>
+ <publisher>American Business Solutions</publisher>
+ <info name="version" value="2.0A" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="ABS Self Running Demo v2.0A (American Business Solutions, Inc.)(1995).img" size="1474560" crc="28b8c301" sha1="153dbf509d103110bd9c17ad43ba1e36c04f1b2e" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="acerwin">
<!-- from Acer CPR 1.2 recovery CD-ROM -->
<description>Acer/Win Supplement</description>
@@ -5792,6 +5865,52 @@
</part>
</software>
+ <software name="prodpack">
+ <!-- from Acer CPR 1.2 recovery CD-ROM -->
+ <description>Microsoft Productivity Pack for Windows</description>
+ <year>1992</year>
+ <publisher>Microsoft</publisher>
+ <info name="version" value="3.1" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="prodpack disk1.img" size="1474560" crc="67c7b595" sha1="ca17fdba8e2bcc267e38e47cd919ef7955b72494" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="prodpack disk2.img" size="1474560" crc="68093322" sha1="54cc63457af4926f542b0445aedefef28b0bb59c" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msworks3">
+ <!-- from Acer CPR 1.2 recovery CD-ROM -->
+ <description>Microsoft Works 3.0b</description>
+ <year>1994</year>
+ <publisher>Microsoft</publisher>
+ <info name="version" value="3.0b" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="msworks disk1.img" size="1474560" crc="24ca92fe" sha1="f462e7da1704eccdc0fa6fcb51c938c585c98136" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="msworks disk2.img" size="1474560" crc="ed3d23d3" sha1="4ad83f15aabf69d3ae845656c2cf76378446dc5e" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="msworks disk3.img" size="1474560" crc="0d207897" sha1="c1332a1f8c59c746306a2f374dbd3aa62861c8be" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="msworks disk4.img" size="1474560" crc="2c98fcd2" sha1="1733f95eb545eee83d6afcf69600094ecae08758" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="mbhh95">
<description>MikroBITTI Huvi- ja hyötylevyke 1995 (Fin)</description>
<year>1995</year>
@@ -5814,6 +5933,19 @@
</part>
</software>
+ <software name="netcom">
+ <!-- from Acer CPR 1.2 recovery CD-ROM -->
+ <description>NETCOM NetCruiser</description>
+ <year>1994</year>
+ <publisher>NETCOM</publisher>
+ <info name="version" value="1.51" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="netcom disk1.img" size="1474560" crc="ff7fa3f6" sha1="13099e622c0e1b1a127c433e8900e83b541a45dc" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="bpdx301g">
<!-- KryoFlux dump from original media, many modified sectors -->
<description>Paradox 3.01 (German)</description>
@@ -8211,6 +8343,38 @@
</part>
</software>
+ <software name="lionking">
+ <description>Disney's The Lion King</description>
+ <year>1994</year>
+ <publisher>Virgin Interactive Entertainment, Inc.</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disney's The Lion King (USA) (Disk 1).img" size="1474560" crc="732d455a" sha1="20e85e8c381263363250c5b509fbc24415ed2e5d" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disney's The Lion King (USA) (Disk 2).img" size="1474560" crc="9101af49" sha1="ffa0965807bc23747d4aea77a67b3448df558b04" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disney's The Lion King (USA) (Disk 3).img" size="1474560" crc="2eb5e888" sha1="267b9fb48d5721d09dcc5fccbe2074024a2bb4bb" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lionkingd" cloneof="lionking">
+ <description>Disney's The Lion King (Playable Demo)</description>
+ <year>1994</year>
+ <publisher>Virgin Interactive Entertainment</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="lion.img" size="1474560" crc="e4767eb0" sha1="752b4b6268d464a6b7a8700152ca746f1e81b74b" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="dogz">
<description>Dogz, Your Computer Pet</description>
<year>1995</year>
diff --git a/hash/pc88va.xml b/hash/pc88va.xml
index bbcc275fbee..9cff43990b9 100644
--- a/hash/pc88va.xml
+++ b/hash/pc88va.xml
@@ -112,14 +112,14 @@ PC88VA doujin games (mostly undumped)
<publisher>&lt;unknown&gt;</publisher>
<info name="alt_title" value="アニメフレーマー" />
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Program Disk" />
+ <feature name="part_id" value="Program Disk" />
<dataarea name="flop" size="1338960">
<rom name="animeframer - prog disk.d88" size="1338960" crc="2eff589a" sha1="a385f97c7f38579af3320a8d0505f000134e7493" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Data Disk" />
+ <feature name="part_id" value="Data Disk" />
<dataarea name="flop" size="1338960">
<rom name="animeframer - data disk.d88" size="1338960" crc="9b5cd907" sha1="80f1558a3d5c6d21d1c42d8325ae55e320674ef7" offset="0" />
</dataarea>
@@ -132,14 +132,14 @@ PC88VA doujin games (mostly undumped)
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Program Disk" />
+ <feature name="part_id" value="Program Disk" />
<dataarea name="flop" size="1338960">
<rom name="paint - prog disk.d88" size="1331888" crc="08107401" sha1="aab13d4437358f0fac7adec31cf83d1a22608616" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Data Disk" />
+ <feature name="part_id" value="Data Disk" />
<dataarea name="flop" size="1338960">
<rom name="paint - data disk.d88" size="1331888" crc="73739619" sha1="60f493e7ab24ad8fc57367224a994b0ecf0ad5e2" offset="0" />
</dataarea>
@@ -190,21 +190,21 @@ PC88VA doujin games (mostly undumped)
<publisher>ゲームアーツ (Game Arts)</publisher>
<info name="alt_title" value="ファミリースタジアム" />
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Disk 1" />
+ <feature name="part_id" value="Disk 1" />
<dataarea name="flop" size="1281968">
<rom name="famista_1.d88" size="1281968" crc="3c78e2e7" sha1="1040b1d79052df93e4a1b3a6ed019098c8c2ad46" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Disk 2" />
+ <feature name="part_id" value="Disk 2" />
<dataarea name="flop" size="1281968">
<rom name="famista_2.d88" size="1281968" crc="29cfa16a" sha1="2a343ef96852ae882730cfe340cb130d48f17bc5" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <feature name="part id" value="User Disk" />
+ <feature name="part_id" value="User Disk" />
<dataarea name="flop" size="1331888">
<rom name="famista_u.d88" size="1331888" crc="d2623a5e" sha1="b57bb896488e62c6d1c5bd20acf97d4f9f805a0c" offset="0" />
</dataarea>
@@ -220,14 +220,14 @@ PC88VA doujin games (mostly undumped)
<!--rom name="family stadium pennant race ban (va).d88" size="2563936" crc="91d95d8e" sha1="3d31ab00a0be2f792d2bcb031afd065d138c747a" offset="0" /-->
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Disk 1" />
+ <feature name="part_id" value="Disk 1" />
<dataarea name="flop" size="1281968">
<rom name="family stadium pennant race ban (va) (disk 1).d88" size="1281968" crc="fd71b310" sha1="48e72d453a49cba1e6c31b7a1cdfe8ac2b0d01ad" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Disk 2" />
+ <feature name="part_id" value="Disk 2" />
<dataarea name="flop" size="1281968">
<rom name="family stadium pennant race ban (va) (disk 2).d88" size="1281968" crc="d7f86e0f" sha1="d5ebf14ae42e39f964c6eb5c69db12d2d9d7a926" offset="0" />
</dataarea>
@@ -239,21 +239,21 @@ PC88VA doujin games (mostly undumped)
<year>19??</year>
<publisher>ゲームアーツ (Game Arts)</publisher>
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Disk 1" />
+ <feature name="part_id" value="Disk 1" />
<dataarea name="flop" size="1298608">
<rom name="famista89_1.d88" size="1298608" crc="9c7766fe" sha1="00d3db6035ba07183066fe928dfd7a2753f76229" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Disk 2" />
+ <feature name="part_id" value="Disk 2" />
<dataarea name="flop" size="1298608">
<rom name="famista89_2.d88" size="1298608" crc="4304ec90" sha1="a9b2632c3dacacdbec10277797a05d256d7befc2" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <feature name="part id" value="User Disk" />
+ <feature name="part_id" value="User Disk" />
<dataarea name="flop" size="1331888">
<rom name="famista89_u.d88" size="1331888" crc="11ee32e8" sha1="959205c410d24db3cca3ceb147d57a8b94aa20bf" offset="0" />
</dataarea>
@@ -475,35 +475,35 @@ PC88VA doujin games (mostly undumped)
<info name="alt_title" value="ソーサリアン"/>
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Program" />
+ <feature name="part_id" value="Program" />
<dataarea name="flop" size="761008">
<rom name="sorcerian va (program)(nihon falcom).d88" size="761008" crc="b6184dce" sha1="1b465063194faffa634006aaaa76cdffa4d9529e" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="User" />
+ <feature name="part_id" value="User" />
<dataarea name="flop" size="761008">
<rom name="sorcerian va (user)(nihon falcom).d88" size="761008" crc="bf940215" sha1="41800b49186e3145c44b105d8c2a84c7c09c358e" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <feature name="part id" value="Scenario 1" />
+ <feature name="part_id" value="Scenario 1" />
<dataarea name="flop" size="761008">
<rom name="sorcerian va (scenario#1)(nihon falcom).d88" size="761008" crc="ae710257" sha1="500c3800e89e62580a8e766e4ea7ed702673d505" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_5_25">
- <feature name="part id" value="Scenario 2" />
+ <feature name="part_id" value="Scenario 2" />
<dataarea name="flop" size="761008">
<rom name="sorcerian va (scenario#2)(nihon falcom).d88" size="761008" crc="f41929f4" sha1="184d81ebf43627b0a3d4361477b757845b6e637e" offset="0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_5_25">
- <feature name="part id" value="Scenario 3" />
+ <feature name="part_id" value="Scenario 3" />
<dataarea name="flop" size="761008">
<rom name="sorcerian va (scenario#3)(nihon falcom).d88" size="761008" crc="53f6e8fe" sha1="86f86a1fbc783634fbcae292fff53af1f49cff8c" offset="0" />
</dataarea>
@@ -1015,42 +1015,42 @@ PC88VA doujin games (mostly undumped)
<info name="release" value="199005xx"/>
<info name="alt_title" value="ランス2-反逆の少女たち-"/>
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Disk A" />
+ <feature name="part_id" value="Disk A" />
<dataarea name="flop" size="1261568">
<rom name="adisk.xdf" size="1261568" crc="959d531e" sha1="8bfa67e8290f195f6325cc03ff667a7c935958ba" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Disk B" />
+ <feature name="part_id" value="Disk B" />
<dataarea name="flop" size="1261568">
<rom name="bdisk.xdf" size="1261568" crc="c51e2d10" sha1="3e82f90249ec3545a67758970e018d297ffb8f23" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <feature name="part id" value="Disk C" />
+ <feature name="part_id" value="Disk C" />
<dataarea name="flop" size="1261568">
<rom name="cdisk.xdf" size="1261568" crc="473aaf1c" sha1="e3bc65950531df8dda0e5392323cebb6cb92c44f" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_5_25">
- <feature name="part id" value="Disk D" />
+ <feature name="part_id" value="Disk D" />
<dataarea name="flop" size="1261568">
<rom name="ddisk.xdf" size="1261568" crc="b84fdce5" sha1="ba80bdd9d32cda0713abfc7259c841237463a512" offset="0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_5_25">
- <feature name="part id" value="Disk E" />
+ <feature name="part_id" value="Disk E" />
<dataarea name="flop" size="1261568">
<rom name="edisk.xdf" size="1261568" crc="df3de612" sha1="0cec33872aa32c1451a0741064a1db86f92ebfd7" offset="0" />
</dataarea>
</part>
<part name="flop6" interface="floppy_5_25">
- <feature name="part id" value="Disk F" />
+ <feature name="part_id" value="Disk F" />
<dataarea name="flop" size="1261568">
<rom name="fdisk.xdf" size="1261568" crc="0d9a2891" sha1="834cd1495d36217fb0e7d19814abd3ea387d4fc0" offset="0" />
</dataarea>
diff --git a/hash/vgmplay.xml b/hash/vgmplay.xml
new file mode 100644
index 00000000000..220e87cd351
--- /dev/null
+++ b/hash/vgmplay.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<softwarelist name="vgmplay" description="Video Game Music Files">
+
+ <software name="pwrdrift">
+ <description>Power Drift (Sega Y)</description>
+ <year>1988</year>
+ <publisher>Sega</publisher>
+
+ <part name="01" interface="vgm_quik">
+ <feature name="part_id" value="Credit" />
+ <dataarea name="quik" size="728">
+ <rom name="01 Credit.vgz" size="728" crc="eacc90bf" sha1="86689a2754d798bd5203cb4efcb454ea6d01abe5" offset="0" />
+ </dataarea>
+ </part>
+ <part name="02" interface="vgm_quik">
+ <feature name="part_id" value="poker face (opening)" />
+ <dataarea name="quik" size="82577">
+ <rom name="02 poker face (opening).vgz" size="82577" crc="a1c260a0" sha1="00c3ec812fab082a87fa47641a3b8a9f094e96bd" offset="0" />
+ </dataarea>
+ </part>
+ <part name="03" interface="vgm_quik">
+ <feature name="part_id" value="side street (a course)" />
+ <dataarea name="quik" size="135621">
+ <rom name="03 side street (a course).vgz" size="135621" crc="ff9eb659" sha1="00b1723c525500a947d54788c115e49c773c348a" offset="0" />
+ </dataarea>
+ </part>
+ <part name="04" interface="vgm_quik">
+ <feature name="part_id" value="like the wind (b course)" />
+ <dataarea name="quik" size="148162">
+ <rom name="04 like the wind (b course).vgz" size="148162" crc="7c1bf2a9" sha1="a16815b934412b17bbe5c581455b2529ae8eb465" offset="0" />
+ </dataarea>
+ </part>
+ <part name="05" interface="vgm_quik">
+ <feature name="part_id" value="silent language (c course)" />
+ <dataarea name="quik" size="101273">
+ <rom name="05 silent language (c course).vgz" size="101273" crc="e84a6f4a" sha1="b2e39aa24350bbb3b021aa375c787ce466c72e46" offset="0" />
+ </dataarea>
+ </part>
+ <part name="06" interface="vgm_quik">
+ <feature name="part_id" value="adjustment mind (d course)" />
+ <dataarea name="quik" size="112916">
+ <rom name="06 adjustment mind (d course).vgz" size="112916" crc="29be0194" sha1="cc2678d4a29a214d185cb9641860d8fb0c6483c0" offset="0" />
+ </dataarea>
+ </part>
+ <part name="07" interface="vgm_quik">
+ <feature name="part_id" value="artistic traps (e course)" />
+ <dataarea name="quik" size="95325">
+ <rom name="07 artistic traps (e course).vgz" size="95325" crc="8458319f" sha1="09b3c12577686e13d0cc70afc4c82390d2ecea8a" offset="0" />
+ </dataarea>
+ </part>
+ <part name="08" interface="vgm_quik">
+ <feature name="part_id" value="diversity (name entry)" />
+ <dataarea name="quik" size="48104">
+ <rom name="08 diversity (name entry).vgz" size="48104" crc="7dc38e81" sha1="7eeba3967a2fe9aa113e4feda04fcbe802037f06" offset="0" />
+ </dataarea>
+ </part>
+ <part name="09" interface="vgm_quik">
+ <feature name="part_id" value="not use" />
+ <dataarea name="quik" size="30719">
+ <rom name="09 not use.vgz" size="30719" crc="bd128149" sha1="e7abee49e6e04410308c99efa7309ad086dadbff" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+</softwarelist>
diff --git a/hash/x68k_flop.xml b/hash/x68k_flop.xml
index a1987101a12..f3d9b1ff41d 100644
--- a/hash/x68k_flop.xml
+++ b/hash/x68k_flop.xml
@@ -15636,42 +15636,42 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup
<info name="release" value="19900713"/>
<info name="alt_title" value="ランス2-反逆の少女たち-"/>
<part name="flop1" interface="floppy_5_25">
- <feature name="part id" value="Disk A" />
+ <feature name="part_id" value="Disk A" />
<dataarea name="flop" size="1261568">
<rom name="adisk.xdf" size="1261568" crc="959d531e" sha1="8bfa67e8290f195f6325cc03ff667a7c935958ba" offset="000000" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part id" value="Disk B" />
+ <feature name="part_id" value="Disk B" />
<dataarea name="flop" size="1261568">
<rom name="bdisk.xdf" size="1261568" crc="c51e2d10" sha1="3e82f90249ec3545a67758970e018d297ffb8f23" offset="000000" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <feature name="part id" value="Disk C" />
+ <feature name="part_id" value="Disk C" />
<dataarea name="flop" size="1261568">
<rom name="cdisk.xdf" size="1261568" crc="473aaf1c" sha1="e3bc65950531df8dda0e5392323cebb6cb92c44f" offset="000000" />
</dataarea>
</part>
<part name="flop4" interface="floppy_5_25">
- <feature name="part id" value="Disk D" />
+ <feature name="part_id" value="Disk D" />
<dataarea name="flop" size="1261568">
<rom name="ddisk.xdf" size="1261568" crc="b84fdce5" sha1="ba80bdd9d32cda0713abfc7259c841237463a512" offset="000000" />
</dataarea>
</part>
<part name="flop5" interface="floppy_5_25">
- <feature name="part id" value="Disk E" />
+ <feature name="part_id" value="Disk E" />
<dataarea name="flop" size="1261568">
<rom name="edisk.xdf" size="1261568" crc="df3de612" sha1="0cec33872aa32c1451a0741064a1db86f92ebfd7" offset="000000" />
</dataarea>
</part>
<part name="flop6" interface="floppy_5_25">
- <feature name="part id" value="Disk F" />
+ <feature name="part_id" value="Disk F" />
<dataarea name="flop" size="1261568">
<rom name="fdisk.xdf" size="1261568" crc="0d9a2891" sha1="834cd1495d36217fb0e7d19814abd3ea387d4fc0" offset="000000" />
</dataarea>
diff --git a/makefile b/makefile
index 89788aed12c..6c9664138f0 100644
--- a/makefile
+++ b/makefile
@@ -912,12 +912,12 @@ endif
ifeq ($(OS),windows)
ifeq (posix,$(SHELLTYPE))
GCC_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) -dumpversion 2> /dev/null)
-CLANG_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) --version 2> /dev/null| head -n 1 | grep clang | sed "s/^.*[^0-9]\([0-9]\+\.[0-9]\+\.[0-9]\+\).*$$/\1/" | head -n 1)
+CLANG_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) --version 2> /dev/null| head -n 1 | grep clang | sed "s/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$$/\1/" | head -n 1)
PYTHON_AVAILABLE := $(shell $(PYTHON) --version > /dev/null 2>&1 && echo python)
GIT_AVAILABLE := $(shell git --version > /dev/null 2>&1 && echo git)
else
GCC_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) -dumpversion 2> NUL)
-CLANG_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) --version 2> NUL| head -n 1 | grep clang | sed "s/^.*[^0-9]\([0-9]\+\.[0-9]\+\.[0-9]\+\).*$$/\1/" | head -n 1)
+CLANG_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) --version 2> NUL| head -n 1 | grep clang | sed "s/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$$/\1/" | head -n 1)
PYTHON_AVAILABLE := $(shell $(PYTHON) --version > NUL 2>&1 && echo python)
GIT_AVAILABLE := $(shell git --version > NUL 2>&1 && echo git)
endif
diff --git a/scripts/src/emu.lua b/scripts/src/emu.lua
index c9a8ddeb625..4e763996a2c 100644
--- a/scripts/src/emu.lua
+++ b/scripts/src/emu.lua
@@ -271,13 +271,8 @@ dependency {
{ MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/dualhovu.lh" },
{ MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/dualhsxs.lh" },
{ MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/dualhuov.lh" },
- { MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/horizont.lh" },
{ MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/triphsxs.lh" },
{ MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/quadhsxs.lh" },
- { MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/vertical.lh" },
- { MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/lcd.lh" },
- { MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/lcd_rot.lh" },
- { MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/svg.lh" },
{ MAME_DIR .. "src/emu/rendlay.cpp", GEN_DIR .. "emu/layout/noscreens.lh" },
}
@@ -291,13 +286,8 @@ custombuildtask {
layoutbuildtask("emu/layout", "dualhovu"),
layoutbuildtask("emu/layout", "dualhsxs"),
layoutbuildtask("emu/layout", "dualhuov"),
- layoutbuildtask("emu/layout", "horizont"),
layoutbuildtask("emu/layout", "triphsxs"),
layoutbuildtask("emu/layout", "quadhsxs"),
- layoutbuildtask("emu/layout", "vertical"),
- layoutbuildtask("emu/layout", "lcd"),
- layoutbuildtask("emu/layout", "lcd_rot"),
- layoutbuildtask("emu/layout", "svg"),
layoutbuildtask("emu/layout", "noscreens"),
}
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 8c24fcadf41..3d36a02c25c 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -3671,7 +3671,6 @@ files {
MAME_DIR .. "src/mame/drivers/imsai.cpp",
MAME_DIR .. "src/mame/drivers/indiana.cpp",
MAME_DIR .. "src/mame/drivers/itt3030.cpp",
- MAME_DIR .. "src/mame/drivers/jade.cpp",
MAME_DIR .. "src/mame/drivers/jonos.cpp",
MAME_DIR .. "src/mame/drivers/konin.cpp",
MAME_DIR .. "src/mame/drivers/kron.cpp",
@@ -3766,6 +3765,7 @@ files {
MAME_DIR .. "src/mame/drivers/tsispch.cpp",
MAME_DIR .. "src/mame/includes/tsispch.h",
MAME_DIR .. "src/mame/drivers/tti.cpp",
+ MAME_DIR .. "src/mame/drivers/unkz80.cpp",
MAME_DIR .. "src/mame/drivers/unistar.cpp",
MAME_DIR .. "src/mame/drivers/v6809.cpp",
MAME_DIR .. "src/mame/drivers/vector4.cpp",
diff --git a/scripts/target/mame/virtual.lua b/scripts/target/mame/virtual.lua
index 8407fe9df9e..0ea38d385f3 100644
--- a/scripts/target/mame/virtual.lua
+++ b/scripts/target/mame/virtual.lua
@@ -46,6 +46,7 @@ SOUNDS["YM2151"] = true
SOUNDS["YM2203"] = true
SOUNDS["YM2413"] = true
SOUNDS["YM2608"] = true
+SOUNDS["YM2610"] = true
SOUNDS["YM2612"] = true
SOUNDS["YM3526"] = true
SOUNDS["YM3812"] = true
diff --git a/src/devices/bus/vme/vme_fccpu20.cpp b/src/devices/bus/vme/vme_fccpu20.cpp
index af999f0f664..1e38411a44f 100644
--- a/src/devices/bus/vme/vme_fccpu20.cpp
+++ b/src/devices/bus/vme/vme_fccpu20.cpp
@@ -243,6 +243,15 @@ void vme_fccpu20_device::cpu20_mem(address_map &map)
}
+static DEVICE_INPUT_DEFAULTS_START( terminal )
+ DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
+ DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
+ DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
+ DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
+ DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
+ DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
+DEVICE_INPUT_DEFAULTS_END
+
MACHINE_CONFIG_START(vme_fccpu20_device::device_add_mconfig)
/* basic machine hardware */
MCFG_DEVICE_ADD ("maincpu", M68020, CLOCK50 / 3) /* Crytstal verified from picture HCI */
@@ -294,6 +303,7 @@ MACHINE_CONFIG_START(vme_fccpu20_device::device_add_mconfig)
MCFG_DEVICE_ADD (RS232P1_TAG, RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER (WRITELINE ("mpcc", mpcc68561_device, write_rx))
MCFG_RS232_CTS_HANDLER (WRITELINE ("mpcc", mpcc68561_device, cts_w))
+ MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
// MPCC2 - RS232
MCFG_DEVICE_ADD (RS232P2_TAG, RS232_PORT, default_rs232_devices, nullptr)
diff --git a/src/devices/cpu/psx/psx.cpp b/src/devices/cpu/psx/psx.cpp
index f74d998fed4..9ea179f6716 100644
--- a/src/devices/cpu/psx/psx.cpp
+++ b/src/devices/cpu/psx/psx.cpp
@@ -137,6 +137,10 @@
#define CAUSE_EXC ( 31L << 2 )
#define CAUSE_IP ( 255L << 8 )
+// software interrupts
+#define CAUSE_IP0 ( 1L << 8 )
+#define CAUSE_IP1 ( 1L << 9 )
+// hardware interrupts
#define CAUSE_IP2 ( 1L << 10 )
#define CAUSE_IP3 ( 1L << 11 )
#define CAUSE_IP4 ( 1L << 12 )
@@ -1436,21 +1440,32 @@ void psxcpu_device::update_rom_config()
}
}
-void psxcpu_device::update_cop0( int reg )
+void psxcpu_device::update_cop0(int reg)
{
- if( reg == CP0_SR )
+ if (reg == CP0_SR)
{
update_memory_handlers();
update_address_masks();
}
- if( ( reg == CP0_SR || reg == CP0_CAUSE ) &&
- ( m_cp0r[ CP0_SR ] & SR_IEC ) != 0 &&
- ( m_cp0r[ CP0_SR ] & m_cp0r[ CP0_CAUSE ] & CAUSE_IP ) != 0 )
+ if ((reg == CP0_SR || reg == CP0_CAUSE) &&
+ (m_cp0r[CP0_SR] & SR_IEC) != 0)
{
- m_op = m_cache->read_dword( m_pc );
- execute_unstoppable_instructions( 1 );
- exception( EXC_INT );
+ uint32_t ip = m_cp0r[CP0_SR] & m_cp0r[CP0_CAUSE] & CAUSE_IP;
+ if (ip != 0)
+ {
+ if (ip & CAUSE_IP0) debugger_exception_hook(EXC_INT);
+ if (ip & CAUSE_IP1) debugger_exception_hook(EXC_INT);
+ //if (ip & CAUSE_IP2) debugger_interrupt_hook(PSXCPU_IRQ0);
+ //if (ip & CAUSE_IP3) debugger_interrupt_hook(PSXCPU_IRQ1);
+ //if (ip & CAUSE_IP4) debugger_interrupt_hook(PSXCPU_IRQ2);
+ //if (ip & CAUSE_IP5) debugger_interrupt_hook(PSXCPU_IRQ3);
+ //if (ip & CAUSE_IP6) debugger_interrupt_hook(PSXCPU_IRQ4);
+ //if (ip & CAUSE_IP7) debugger_interrupt_hook(PSXCPU_IRQ5);
+ m_op = m_cache->read_dword(m_pc);
+ execute_unstoppable_instructions(1);
+ exception(EXC_INT);
+ }
}
}
@@ -1588,9 +1603,12 @@ void psxcpu_device::common_exception( int exception, uint32_t romOffset, uint32_
m_cp0r[ CP0_EPC ] = m_pc;
}
- if( LOG_BIOSCALL && exception != EXC_INT )
+ if (exception != EXC_INT)
{
- logerror( "%08x: Exception %d\n", m_pc, exception );
+ if (LOG_BIOSCALL)
+ logerror("%08x: Exception %d\n", m_pc, exception);
+
+ debugger_exception_hook(exception);
}
m_delayr = 0;
diff --git a/src/devices/cpu/score/score.cpp b/src/devices/cpu/score/score.cpp
index 3a3b1ce6b15..bf5b434cb06 100644
--- a/src/devices/cpu/score/score.cpp
+++ b/src/devices/cpu/score/score.cpp
@@ -325,7 +325,7 @@ void score7_cpu_device::check_irq()
if (m_pending_interrupt[i])
{
m_pending_interrupt[i] = false;
- debugger_interrupt_hook(i);
+ standard_irq_callback(i);
gen_exception(EXCEPTION_INTERRUPT, i);
return;
}
diff --git a/src/devices/cpu/tlcs870/tlcs870.cpp b/src/devices/cpu/tlcs870/tlcs870.cpp
index e893cf69e0b..a855697cfb7 100644
--- a/src/devices/cpu/tlcs870/tlcs870.cpp
+++ b/src/devices/cpu/tlcs870/tlcs870.cpp
@@ -22,7 +22,6 @@ DEFINE_DEVICE_TYPE(TMP87PH40AN, tmp87ph40an_device, "tmp87ph40an", "Toshiba TMP8
void tlcs870_device::tmp87ph40an_mem(address_map &map)
{
-#if 0
map(0x0000, 0x0000).rw(FUNC(tlcs870_device::port0_r), FUNC(tlcs870_device::port0_w));
map(0x0001, 0x0001).rw(FUNC(tlcs870_device::port1_r), FUNC(tlcs870_device::port1_w));
map(0x0002, 0x0002).rw(FUNC(tlcs870_device::port2_r), FUNC(tlcs870_device::port2_w));
@@ -37,6 +36,7 @@ void tlcs870_device::tmp87ph40an_mem(address_map &map)
map(0x000b, 0x000b).w(FUNC(tlcs870_device::p1cr_w)); // Port 1 I/O control
map(0x000c, 0x000c).w(FUNC(tlcs870_device::p6cr_w)); // Port 6 I/O control
map(0x000d, 0x000d).w(FUNC(tlcs870_device::p7cr_w)); // Port 7 I/O control
+#if 0
map(0x000e, 0x000e).rw(FUNC(tlcs870_device::adccr_r), FUNC(tlcs870_device::adccr_w)); // A/D converter control
map(0x000f, 0x000f).r(FUNC(tlcs870_device::adcdr_r)); // A/D converter result
@@ -107,6 +107,8 @@ tlcs870_device::tlcs870_device(const machine_config &mconfig, device_type optype
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, program_map)
, m_io_config("io", ENDIANNESS_LITTLE, 8, 16, 0)
, m_intram(*this, "intram")
+ , m_port_in_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}
+ , m_port_out_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}
{
}
@@ -129,6 +131,147 @@ bool tlcs870_device::stream_arg(std::ostream &stream, uint32_t pc, const char *p
return false;
}
+// NOT using templates here because there are subtle differences in the port behavior (the ports are multi-purpose) that still need implementing
+READ8_MEMBER(tlcs870_device::port0_r)
+{
+ // need to use P0CR (0x000a) to control direction
+
+ if (m_read_input_port)
+ return m_port_in_cb[0]();
+ else
+ return m_port_out_latch[0];
+}
+
+READ8_MEMBER(tlcs870_device::port1_r)
+{
+ // need to use P1CR (0x000b) to control direction
+
+ if (m_read_input_port)
+ return m_port_in_cb[1]();
+ else
+ return m_port_out_latch[1];
+}
+
+READ8_MEMBER(tlcs870_device::port2_r) // 3-bit port
+{
+ if (m_read_input_port)
+ return m_port_in_cb[2]() | 0xf8;
+ else
+ return m_port_out_latch[2];
+}
+
+READ8_MEMBER(tlcs870_device::port3_r)
+{
+ if (m_read_input_port)
+ return m_port_in_cb[3]();
+ else
+ return m_port_out_latch[3];
+}
+
+READ8_MEMBER(tlcs870_device::port4_r)
+{
+ if (m_read_input_port)
+ return m_port_in_cb[4]();
+ else
+ return m_port_out_latch[4];
+}
+
+READ8_MEMBER(tlcs870_device::port5_r) // 5-bit port
+{
+ if (m_read_input_port)
+ return m_port_in_cb[5]() | 0xe0;
+ else
+ return m_port_out_latch[5];
+}
+
+READ8_MEMBER(tlcs870_device::port6_r) // doubles up as analog?
+{
+ // need to use P6CR (0x000c) to control direction
+
+ if (m_read_input_port)
+ return m_port_in_cb[6]();
+ else
+ return m_port_out_latch[6];
+}
+
+READ8_MEMBER(tlcs870_device::port7_r)
+{
+ // need to use P7CR (0x000d) to control direction
+
+ if (m_read_input_port)
+ return m_port_in_cb[7]();
+ else
+ return m_port_out_latch[7];
+}
+
+WRITE8_MEMBER(tlcs870_device::port0_w)
+{
+ m_port_out_latch[0] = data;
+ m_port_out_cb[0](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port1_w)
+{
+ m_port_out_latch[1] = data;
+ m_port_out_cb[1](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port2_w)
+{
+ m_port_out_latch[2] = data;
+ m_port_out_cb[2](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port3_w)
+{
+ m_port_out_latch[3] = data;
+ m_port_out_cb[3](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port4_w)
+{
+ m_port_out_latch[4] = data;
+ m_port_out_cb[4](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port5_w)
+{
+ m_port_out_latch[5] = data;
+ m_port_out_cb[5](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port6_w)
+{
+ m_port_out_latch[6] = data;
+ m_port_out_cb[6](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::port7_w)
+{
+ m_port_out_latch[7] = data;
+ m_port_out_cb[7](data);
+}
+
+WRITE8_MEMBER(tlcs870_device::p0cr_w)
+{
+ m_port0_cr = data;
+}
+
+WRITE8_MEMBER(tlcs870_device::p1cr_w)
+{
+ m_port1_cr = data;
+}
+
+WRITE8_MEMBER(tlcs870_device::p6cr_w)
+{
+ m_port6_cr = data;
+}
+
+WRITE8_MEMBER(tlcs870_device::p7cr_w)
+{
+ m_port7_cr = data;
+}
+
void tlcs870_device::execute_set_input(int inputnum, int state)
{
#if 0
@@ -151,8 +294,6 @@ void tlcs870_device::execute_set_input(int inputnum, int state)
void tlcs870_device::execute_run()
{
- m_cycles = 1;
-
while (m_icount > 0)
{
m_prvpc.d = m_pc.d;
@@ -161,10 +302,20 @@ void tlcs870_device::execute_run()
//check_interrupts();
m_addr = m_pc.d;
m_tmppc = m_addr; // used for jumps etc.
+ m_cycles = 0;
+ m_read_input_port = 1; // some operations force the output latches to read from the memory mapped ports, not input ports
decode();
m_pc.d = m_addr;
- m_icount -= m_cycles * 4; // 1 machine cycle = 4 clock cycles?
+ if (m_cycles)
+ {
+ //m_icount -= m_cycles * 4; // 1 machine cycle = 4 clock cycles? (unclear, execution seems far too slow even for the ram test this way)
+ m_icount -= m_cycles;
+ }
+ else
+ {
+ fatalerror("m_cycles == 0 after PC %04x\n", m_tmppc);
+ }
};
}
@@ -172,6 +323,20 @@ void tlcs870_device::device_reset()
{
m_pc.d = RM16(0xfffe);
m_RBS = 0;
+
+ m_port_out_latch[0] = 0x00;
+ m_port_out_latch[1] = 0x00;
+ m_port_out_latch[2] = 0xff;
+ m_port_out_latch[3] = 0xff;
+ m_port_out_latch[4] = 0xff;
+ m_port_out_latch[5] = 0xff;
+ m_port_out_latch[6] = 0x00;
+ m_port_out_latch[7] = 0x00;
+
+ m_port0_cr = 0xff;
+ m_port1_cr = 0xff;
+ m_port6_cr = 0xff;
+ m_port7_cr = 0xff;
}
void tlcs870_device::state_import(const device_state_entry &entry)
@@ -315,6 +480,11 @@ void tlcs870_device::device_start()
state_add(STATE_GENFLAGS, "GENFLAGS", m_F).formatstr("%8s").noshow();
set_icountptr(m_icount);
+
+ for (auto &cb : m_port_in_cb)
+ cb.resolve_safe(0xff);
+ for (auto &cb : m_port_out_cb)
+ cb.resolve_safe();
}
diff --git a/src/devices/cpu/tlcs870/tlcs870.h b/src/devices/cpu/tlcs870/tlcs870.h
index 8b3c9d83bd3..846cf818961 100644
--- a/src/devices/cpu/tlcs870/tlcs870.h
+++ b/src/devices/cpu/tlcs870/tlcs870.h
@@ -7,6 +7,25 @@
class tlcs870_device : public cpu_device
{
+public:
+ auto p0_in_cb() { return m_port_in_cb[0].bind(); }
+ auto p1_in_cb() { return m_port_in_cb[1].bind(); }
+ auto p2_in_cb() { return m_port_in_cb[2].bind(); }
+ auto p3_in_cb() { return m_port_in_cb[3].bind(); }
+ auto p4_in_cb() { return m_port_in_cb[4].bind(); }
+ auto p5_in_cb() { return m_port_in_cb[5].bind(); }
+ auto p6_in_cb() { return m_port_in_cb[6].bind(); }
+ auto p7_in_cb() { return m_port_in_cb[7].bind(); }
+
+ auto p0_out_cb() { return m_port_out_cb[0].bind(); }
+ auto p1_out_cb() { return m_port_out_cb[1].bind(); }
+ auto p2_out_cb() { return m_port_out_cb[2].bind(); }
+ auto p3_out_cb() { return m_port_out_cb[3].bind(); }
+ auto p4_out_cb() { return m_port_out_cb[4].bind(); }
+ auto p5_out_cb() { return m_port_out_cb[5].bind(); }
+ auto p6_out_cb() { return m_port_out_cb[6].bind(); }
+ auto p7_out_cb() { return m_port_out_cb[7].bind(); }
+
protected:
// construction/destruction
tlcs870_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor program_map);
@@ -110,6 +129,35 @@ private:
address_space *m_io;
int m_icount;
+ devcb_read8 m_port_in_cb[8];
+ devcb_write8 m_port_out_cb[8];
+ uint8_t m_port_out_latch[8];
+ int m_read_input_port;
+ uint8_t m_port0_cr, m_port1_cr, m_port6_cr, m_port7_cr;
+
+ DECLARE_READ8_MEMBER(port0_r);
+ DECLARE_READ8_MEMBER(port1_r);
+ DECLARE_READ8_MEMBER(port2_r);
+ DECLARE_READ8_MEMBER(port3_r);
+ DECLARE_READ8_MEMBER(port4_r);
+ DECLARE_READ8_MEMBER(port5_r);
+ DECLARE_READ8_MEMBER(port6_r);
+ DECLARE_READ8_MEMBER(port7_r);
+
+ DECLARE_WRITE8_MEMBER(port0_w);
+ DECLARE_WRITE8_MEMBER(port1_w);
+ DECLARE_WRITE8_MEMBER(port2_w);
+ DECLARE_WRITE8_MEMBER(port3_w);
+ DECLARE_WRITE8_MEMBER(port4_w);
+ DECLARE_WRITE8_MEMBER(port5_w);
+ DECLARE_WRITE8_MEMBER(port6_w);
+ DECLARE_WRITE8_MEMBER(port7_w);
+
+ DECLARE_WRITE8_MEMBER(p0cr_w);
+ DECLARE_WRITE8_MEMBER(p1cr_w);
+ DECLARE_WRITE8_MEMBER(p6cr_w);
+ DECLARE_WRITE8_MEMBER(p7cr_w);
+
// Work registers
uint8_t m_cycles;
uint16_t m_tmppc;
@@ -162,6 +210,8 @@ private:
int is_CF() const { return ((m_F & FLAG_C) ? 1 : 0); }
int is_HF() const { return ((m_F & FLAG_H) ? 1 : 0); }
+ int get_base_srcdst_cycles(int i) const { const int SRC_DST_CYCLES[8] = { 1, 2, 0, 0, 2, 2, 1, 1 }; return SRC_DST_CYCLES[i]; }
+
bool stream_arg(std::ostream &stream, uint32_t pc, const char *pre, const uint16_t mode, const uint16_t r, const uint16_t rb);
// tlcs870_ops.cpp
@@ -232,12 +282,7 @@ private:
// tlcs870_ops_src.cpp
- void do_e0_opcode(const uint8_t opbyte0);
- void do_e1_to_e3_opcode(const uint8_t opbyte0);
- void do_e4_opcode(const uint8_t opbyte0);
- void do_e5_to_e7_opcode(const uint8_t opbyte0);
-
- void do_e0_to_e7_opcode(uint8_t opbyte0, uint16_t srcaddr);
+ void do_srcprefixtype_opcode(const uint8_t opbyte0);
void do_e0_to_e7_oprand_illegal(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr);
@@ -263,16 +308,8 @@ private:
void do_CALL_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr);
void do_JP_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr);
- uint16_t do_alu(int op, uint16_t param1, uint16_t param2);
-
// tlcs870_ops_dst.cpp
-
- void do_f0_opcode(const uint8_t opbyte0);
- void do_f2_to_f3_opcode(const uint8_t opbyte0);
- void do_f4_opcode(const uint8_t opbyte0);
- void do_f6_to_f7_opcode(const uint8_t opbyte0);
-
- void do_f0_to_f7_opcode(const uint8_t opbyte0, const uint16_t dstaddr);
+ void do_dstprefixtype_opcode(const uint8_t opbyte0);
void do_f0_to_f7_oprand_illegal_opcode(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t dstaddr);
@@ -310,9 +347,9 @@ private:
void do_ALUOP_g_n(const uint8_t opbyte0, const uint8_t opbyte1);
void do_SET_inppbit(const uint8_t opbyte0, const uint8_t opbyte1);
void do_CLR_inppbit(const uint8_t opbyte0, const uint8_t opbyte1);
- void do_CPL_inppbit(const uint8_t opbyte0, const uint8_t opbyte1);
- void do_LD_inppbit_CF(const uint8_t opbyte0, const uint8_t opbyte1);
- void do_LD_CF_inppbit(const uint8_t opbyte0, const uint8_t opbyte1);
+ void do_CPL_inpp_indirectbit(const uint8_t opbyte0, const uint8_t opbyte1);
+ void do_LD_inpp_indirectbit_CF(const uint8_t opbyte0, const uint8_t opbyte1);
+ void do_LD_CF_inpp_indirectbit(const uint8_t opbyte0, const uint8_t opbyte1);
void do_XCH_r_g(const uint8_t opbyte0, const uint8_t opbyte1);
void do_CPL_gbit(const uint8_t opbyte0, const uint8_t opbyte1);
void do_LD_gbit_CF(const uint8_t opbyte0, const uint8_t opbyte1);
@@ -323,10 +360,26 @@ private:
void do_CALL_gg(const uint8_t opbyte0, const uint8_t opbyte1);
void do_JP_gg(const uint8_t opbyte0, const uint8_t opbyte1);
+
+ // ALU related
+ uint16_t do_or(uint16_t param1, uint16_t param2);
+ uint16_t do_xor(uint16_t param1, uint16_t param2);
+ uint16_t do_and(uint16_t param1, uint16_t param2);
+
+ uint8_t do_add_8bit(uint16_t param1, uint16_t param2);
+ uint8_t do_sub_8bit(uint16_t param1, uint16_t param2);
+ void do_cmp_8bit(uint16_t param1, uint16_t param2);
+ uint8_t do_alu_8bit(int op, uint16_t param1, uint16_t param2);
+
+ uint8_t do_add_16bit(uint32_t param1, uint32_t param2);
+ uint8_t do_sub_16bit(uint32_t param1, uint32_t param2);
+ void do_cmp_16bit(uint32_t param1, uint32_t param2);
+ uint16_t do_alu_16bit(int op, uint32_t param1, uint32_t param2);
+
+ // Generic opcode helpers
void handle_div(const int reg);
void handle_mul(const int reg);
void handle_swap(const int reg);
-
uint8_t handle_SHLC(uint8_t val);
uint8_t handle_SHRC(uint8_t val);
uint8_t handle_DAS(uint8_t val);
diff --git a/src/devices/cpu/tlcs870/tlcs870_ops.cpp b/src/devices/cpu/tlcs870/tlcs870_ops.cpp
index a2ab06ca962..2a79879c8fa 100644
--- a/src/devices/cpu/tlcs870/tlcs870_ops.cpp
+++ b/src/devices/cpu/tlcs870/tlcs870_ops.cpp
@@ -4,20 +4,7 @@
Toshiba TLCS-870 Series MCUs
- (src) prefix ops (e0 to e7 subtable)
-
- (src) address depends on the first byte of the opcode
-
- E0 (x)
- E1 (PC+A)
- E2 (DE)
- E3 (HL)
- E4 (HL+d)
- E5 (HL+)
- E6 (-HL)
-
- note, in cases where the address is an immediate value, not a register (x) and (HL+d) the
- immediate value is directly after the first byte of the opcode
+ direct opcodes, no prefix
*************************************************************************************************************/
@@ -136,24 +123,12 @@ void tlcs870_device::decode()
do_JR_cc_a(opbyte0); break;
case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf:
do_LD_CF_inxbit(opbyte0); break;
- case 0xe0:
- do_e0_opcode(opbyte0); break;
- case 0xe1: case 0xe2: case 0xe3:
- do_e1_to_e3_opcode(opbyte0); break;
- case 0xe4:
- do_e4_opcode(opbyte0); break;
- case 0xe5: case 0xe6: case 0xe7:
- do_e5_to_e7_opcode(opbyte0); break;
+ case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
+ do_srcprefixtype_opcode(opbyte0); break;
case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
do_regprefixtype_opcode(opbyte0); break;
- case 0xf0:
- do_f0_opcode(opbyte0); break;
- case 0xf2: case 0xf3:
- do_f2_to_f3_opcode(opbyte0); break;
- case 0xf4:
- do_f4_opcode(opbyte0); break;
- case 0xf6: case 0xf7:
- do_f6_to_f7_opcode(opbyte0); break;
+ case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
+ do_dstprefixtype_opcode(opbyte0); break;
case 0xfa:
do_LD_SP_mn(opbyte0); break;
case 0xfb:
@@ -175,36 +150,62 @@ void tlcs870_device::decode()
void tlcs870_device::do_illegal(const uint8_t opbyte0)
{
+ m_cycles = 1;
logerror("illegal opcode %02x\n", opbyte0);
}
void tlcs870_device::do_NOP(const uint8_t opbyte0)
{
- // NOP
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ NOP 0000 0000 - - - - 1
+ */
+ m_cycles = 1;
}
void tlcs870_device::do_SWAP_A(const uint8_t opbyte0)
{
- // SWAP A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SWAP A 0000 0001 1 - - - 3
+ */
+ m_cycles = 3;
+
handle_swap(REG_A);
}
void tlcs870_device::do_MUL_W_A(const uint8_t opbyte0)
{
- // MUL W,A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ MUL W, A 0000 0010 Z Z - - 7
+ */
+ m_cycles = 7;
+
handle_mul(REG_WA);
}
void tlcs870_device::do_DIV_WA_C(const uint8_t opbyte0)
{
- // DIV WA,C
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DIV WA, C 0000 0011 Z Z C - 7
+ */
+ m_cycles = 7;
+
handle_div(REG_WA);
}
void tlcs870_device::do_RETI(const uint8_t opbyte0)
{
- // RETI
- // Return from maskable interrupt service (how does this differ from RETN?)
+ /*
+ Return from maskable interrupt service (how does this differ from RETN?)
+
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ RETI 0000 0100 * * * * 6
+ */
+ m_cycles = 6;
+
m_sp.d += 3;
m_addr = RM16(m_sp.d - 2);
set_PSW(RM8(m_sp.d - 1));
@@ -212,14 +213,24 @@ void tlcs870_device::do_RETI(const uint8_t opbyte0)
void tlcs870_device::do_RET(const uint8_t opbyte0)
{
- // RET
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ RET 0000 0101 - - - - 6
+ */
+ m_cycles = 6;
+
m_sp.d += 2;
m_addr = RM16(m_sp.d - 1);
};
void tlcs870_device::do_POP_PSW(const uint8_t opbyte0)
{
- // POP PSW
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ POP PSW 0000 0110 * * * * 3
+ */
+ m_cycles = 3;
+
m_sp.d += 2;
const uint16_t val = RM16(m_sp.d - 1);
set_PSW(val);
@@ -227,7 +238,12 @@ void tlcs870_device::do_POP_PSW(const uint8_t opbyte0)
void tlcs870_device::do_PUSH_PSW(const uint8_t opbyte0)
{
- // PUSH PSW:
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ POP PSW 0000 0111 - - - - 2
+ */
+ m_cycles = 2;
+
const uint16_t val = get_PSW();
WM16(m_sp.d - 1, val);
m_sp.d -= 2;
@@ -235,7 +251,12 @@ void tlcs870_device::do_PUSH_PSW(const uint8_t opbyte0)
void tlcs870_device::do_DAA_A(const uint8_t opbyte0)
{
- // DAA A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DAA A 0000 1010 C Z C H 2
+ */
+ m_cycles = 2;
+
uint8_t val = get_reg8(REG_A);
val = handle_DAA(val);
@@ -245,7 +266,12 @@ void tlcs870_device::do_DAA_A(const uint8_t opbyte0)
void tlcs870_device::do_DAS_A(const uint8_t opbyte0)
{
- // DAS A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DAS A 0000 1011 C Z C H 2
+ */
+ m_cycles = 2;
+
uint8_t val = get_reg8(REG_A);
val = handle_DAS(val);
@@ -255,21 +281,36 @@ void tlcs870_device::do_DAS_A(const uint8_t opbyte0)
void tlcs870_device::do_CLR_CF(const uint8_t opbyte0)
{
- // CLR CF
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR CF 0000 1100 1 - 0 - 1
+ */
+ m_cycles = 1;
+
clear_CF();
set_JF();
}
void tlcs870_device::do_SET_CF(const uint8_t opbyte0)
{
- // SET CF
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SET CF 0000 1101 0 - 1 - 1
+ */
+ m_cycles = 1;
+
set_CF();
clear_JF();
}
void tlcs870_device::do_CPL_CF(const uint8_t opbyte0)
{
- // CPL CF
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CPL CF 0000 1110 * - * - 1
+ */
+ m_cycles = 1;
+
if (is_CF())
{
set_JF();
@@ -284,7 +325,12 @@ void tlcs870_device::do_CPL_CF(const uint8_t opbyte0)
void tlcs870_device::do_LD_RBS_n(const uint8_t opbyte0) // register bank switching
{
- // LD RBS,n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD RBS, n 0000 1111 0000 nnnn 1 - - - 4
+ */
+ m_cycles = 4;
+
const uint8_t param = READ8();
m_RBS = param & 0x0f;
set_JF();
@@ -293,7 +339,12 @@ void tlcs870_device::do_LD_RBS_n(const uint8_t opbyte0) // register bank switchi
void tlcs870_device::do_INC_rr(const uint8_t opbyte0)
{
- // INC rr
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ INC rr 0001 00rr C Z - - 2
+ */
+ m_cycles = 2;
+
const int reg = opbyte0 & 3;
uint16_t temp = get_reg16(reg);
temp++;
@@ -315,7 +366,12 @@ void tlcs870_device::do_INC_rr(const uint8_t opbyte0)
void tlcs870_device::do_LD_rr_mn(const uint8_t opbyte0)
{
- // LD rr,mn
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD rr,mn 0001 01rr nnnn nnnn mmmm mmmm 1 - - - 3
+ */
+ m_cycles = 3;
+
const uint16_t val = READ16(); // 16-bit
set_reg16(opbyte0 & 3, val);
set_JF();
@@ -324,7 +380,12 @@ void tlcs870_device::do_LD_rr_mn(const uint8_t opbyte0)
void tlcs870_device::do_DEC_rr(const uint8_t opbyte0)
{
- // DEC rr
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DEC rr 0001 10rr C Z - - 2
+ */
+ m_cycles = 2;
+
const int reg = opbyte0 & 3;
uint16_t temp = get_reg16(reg);
temp--;
@@ -353,7 +414,12 @@ void tlcs870_device::do_DEC_rr(const uint8_t opbyte0)
void tlcs870_device::do_SHLC_A(const uint8_t opbyte0)
{
- // SHLC A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SHLC A 0001 1100 C Z * - 1
+ */
+ m_cycles = 1;
+
uint8_t val = get_reg8(REG_A);
val = handle_SHLC(val);
@@ -363,7 +429,12 @@ void tlcs870_device::do_SHLC_A(const uint8_t opbyte0)
void tlcs870_device::do_SHRC_A(const uint8_t opbyte0)
{
- // SHRC A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SHRC A 0001 1101 C Z * - 1
+ */
+ m_cycles = 1;
+
uint8_t val = get_reg8(REG_A);
val = handle_SHRC(val);
@@ -373,7 +444,12 @@ void tlcs870_device::do_SHRC_A(const uint8_t opbyte0)
void tlcs870_device::do_ROLC_A(const uint8_t opbyte0)
{
- // ROLC A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ROLC A 0001 1110 C Z * - 1
+ */
+ m_cycles = 1;
+
uint8_t val = get_reg8(REG_A);
val = handle_ROLC(val);
@@ -383,7 +459,12 @@ void tlcs870_device::do_ROLC_A(const uint8_t opbyte0)
void tlcs870_device::do_RORC_A(const uint8_t opbyte0)
{
- // RORC A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ RORC A 0001 1111 C Z * - 1
+ */
+ m_cycles = 1;
+
uint8_t val = get_reg8(REG_A);
val = handle_RORC(val);
@@ -393,7 +474,12 @@ void tlcs870_device::do_RORC_A(const uint8_t opbyte0)
void tlcs870_device::do_INC_inx(const uint8_t opbyte0)
{
- // INC (x)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ INC (x) 0010 0000 xxxx xxxx C Z - - 5
+ */
+ m_cycles = 5;
+
const uint16_t srcaddr = READ8();
uint8_t val = RM8(srcaddr);
@@ -416,7 +502,12 @@ void tlcs870_device::do_INC_inx(const uint8_t opbyte0)
void tlcs870_device::do_INC_inHL(const uint8_t opbyte0)
{
- // INC (HL)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ INC (HL) 0010 0001 C Z - - 4
+ */
+ m_cycles = 4;
+
const uint16_t addr = get_reg16(REG_HL);
uint8_t val = RM8(addr);
@@ -438,7 +529,12 @@ void tlcs870_device::do_INC_inHL(const uint8_t opbyte0)
void tlcs870_device::do_LD_A_inx(const uint8_t opbyte0)
{
- // LD A,(x)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD A, (x) 0010 0010 xxxx xxxx 1 Z - - 3
+ */
+ m_cycles = 3;
+
const uint16_t srcaddr = READ8();
const uint8_t val = RM8(srcaddr);
@@ -452,7 +548,12 @@ void tlcs870_device::do_LD_A_inx(const uint8_t opbyte0)
void tlcs870_device::do_LD_A_inHL(const uint8_t opbyte0)
{
- // LD A,(HL)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD A, (HL) 0010 0011 1 Z - - 2
+ */
+ m_cycles = 2;
+
const uint16_t srcaddr = get_reg16(REG_HL);
const uint8_t val = RM8(srcaddr);
@@ -466,7 +567,12 @@ void tlcs870_device::do_LD_A_inHL(const uint8_t opbyte0)
void tlcs870_device::do_LD_inx_iny(const uint8_t opbyte0)
{
- // LD (x),(y)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), (y) 0010 0110 yyyy yyyy xxxx xxxx 1 Z - - 5
+ */
+ m_cycles = 5;
+
const uint16_t srcaddr = READ8();
const uint16_t dstaddr = READ8();
@@ -482,7 +588,12 @@ void tlcs870_device::do_LD_inx_iny(const uint8_t opbyte0)
void tlcs870_device::do_DEC_inx(const uint8_t opbyte0)
{
- // DEC (x)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DEC (x) 0010 1000 xxxx xxxx C Z - - 5
+ */
+ m_cycles = 5;
+
const uint16_t addr = READ8();
uint8_t temp = RM8(addr);
@@ -511,7 +622,12 @@ void tlcs870_device::do_DEC_inx(const uint8_t opbyte0)
void tlcs870_device::do_DEC_inHL(const uint8_t opbyte0)
{
- // DEC (HL)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DEC (HL) 0010 1001 C Z - - 4
+ */
+ m_cycles = 4;
+
const uint16_t addr = get_reg16(REG_HL);
uint8_t temp = RM8(addr);
@@ -540,7 +656,12 @@ void tlcs870_device::do_DEC_inHL(const uint8_t opbyte0)
void tlcs870_device::do_LD_inx_A(const uint8_t opbyte0)
{
- // LD (x),A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), A 0010 1010 xxxx xxxx 1 - - - 3
+ */
+ m_cycles = 3;
+
const uint16_t dstaddr = READ8();
const uint8_t val = get_reg8(REG_A);
@@ -554,7 +675,12 @@ void tlcs870_device::do_LD_inx_A(const uint8_t opbyte0)
void tlcs870_device::do_LD_inHL_A(const uint8_t opbyte0)
{
- // LD (HL),A
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (HL), A 0010 1011 1 - - - 2
+ */
+ m_cycles = 2;
+
const uint8_t val = get_reg8(REG_A);
set_JF();
@@ -565,7 +691,12 @@ void tlcs870_device::do_LD_inHL_A(const uint8_t opbyte0)
void tlcs870_device::do_LD_inx_n(const uint8_t opbyte0)
{
- // LD (x),n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), n 0010 1100 xxxx xxxx nnnn nnnn 1 - - - 4
+ */
+ m_cycles = 4;
+
const uint16_t dstaddr = READ8();
const uint8_t val = READ8();
@@ -576,7 +707,12 @@ void tlcs870_device::do_LD_inx_n(const uint8_t opbyte0)
void tlcs870_device::do_LD_inHL_n(const uint8_t opbyte0)
{
- // LD (HL),n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (HL), n 0010 1101 nnnn nnnn 1 - - - 3
+ */
+ m_cycles = 3;
+
const uint8_t val = READ8();
const uint16_t addr = get_reg16(REG_HL);
@@ -587,7 +723,12 @@ void tlcs870_device::do_LD_inHL_n(const uint8_t opbyte0)
void tlcs870_device::do_CLR_inx(const uint8_t opbyte0)
{
- // CLR (x)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR (x) 0010 1110 xxxx xxxx 1 - - - 4
+ */
+ m_cycles = 4;
+
const uint16_t addr = READ8();
WM8(addr, 0);
@@ -597,7 +738,12 @@ void tlcs870_device::do_CLR_inx(const uint8_t opbyte0)
void tlcs870_device::do_CLR_inHL(const uint8_t opbyte0)
{
- // CLR (HL)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR (HL) 0010 1111 1 - - - 2
+ */
+ m_cycles = 2;
+
const uint16_t addr = get_reg16(REG_HL);
WM8(addr, 0);
@@ -606,7 +752,12 @@ void tlcs870_device::do_CLR_inHL(const uint8_t opbyte0)
void tlcs870_device::do_LD_r_n(const uint8_t opbyte0)
{
- // LD r,n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD r,n 0011 0rrr nnnn nnnn 1 - - - 2
+ */
+ m_cycles = 2;
+
const uint8_t param1 = opbyte0 & 7;
const uint8_t param2 = READ8();
@@ -617,10 +768,14 @@ void tlcs870_device::do_LD_r_n(const uint8_t opbyte0)
void tlcs870_device::do_SET_inxbit(const uint8_t opbyte0)
{
- // SET (x).b
- // 0100 0bbb xxxx xxxx
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SET (x).b 0100 0bbb xxxx xxxx Z * - - 5
+
+ (opbyte0 == 0x40) && (opval == 0x3a) is EI
+ */
+ m_cycles = 5;
- // (opbyte0 == 0x40) && (opval == 0x3a) is EI
const uint8_t srcaddr = READ8();
uint8_t val = RM8(srcaddr);
@@ -646,10 +801,14 @@ void tlcs870_device::do_SET_inxbit(const uint8_t opbyte0)
void tlcs870_device::do_CLR_inxbit(const uint8_t opbyte0)
{
- // CLR (x).b
- // 0100 1bbb xxxx xxxx
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR (x).b 0100 1bbb xxxx xxxx Z * - - 5
+
+ (opbyte0 == 0x48) && (opval == 0x3a) is DI
+ */
+ m_cycles = 5;
- // (opbyte0 == 0x48) && (opval == 0x3a) is DI
const uint8_t srcaddr = READ8();
uint8_t val = RM8(srcaddr);
@@ -675,8 +834,12 @@ void tlcs870_device::do_CLR_inxbit(const uint8_t opbyte0)
void tlcs870_device::do_LD_A_r(const uint8_t opbyte0)
{
- // LD A,r
- // 0101 0rrr
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD A, r 0101 0rrr 1 Z - - 1
+ */
+ m_cycles = 1;
+
const uint8_t val = get_reg8(opbyte0 & 0x7);
set_reg8(REG_A, val);
@@ -688,8 +851,12 @@ void tlcs870_device::do_LD_A_r(const uint8_t opbyte0)
void tlcs870_device::do_LD_r_A(const uint8_t opbyte0)
{
- // LD r,A
- // 0101 1rrr
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD r, A 0101 1rrr 1 Z - - 1
+ */
+ m_cycles = 1;
+
const uint8_t val = get_reg8(REG_A);
set_reg8(opbyte0 & 0x7, val);
@@ -701,7 +868,12 @@ void tlcs870_device::do_LD_r_A(const uint8_t opbyte0)
void tlcs870_device::do_INC_r(const uint8_t opbyte0)
{
- // INC r
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ INC r 0110 0rrr C Z - - 1
+ */
+ m_cycles = 1;
+
const int reg = opbyte0 & 7;
uint8_t temp = get_reg8(reg);
temp++;
@@ -722,7 +894,12 @@ void tlcs870_device::do_INC_r(const uint8_t opbyte0)
void tlcs870_device::do_DEC_r(const uint8_t opbyte0)
{
- // DEC r
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DEC r 0110 1rrr C Z - - 1
+ */
+ m_cycles = 1;
+
const int reg = opbyte0 & 7;
uint8_t temp = get_reg8(reg);
temp--;
@@ -750,41 +927,64 @@ void tlcs870_device::do_DEC_r(const uint8_t opbyte0)
void tlcs870_device::do_JRS_T_a(const uint8_t opbyte0)
{
- // JRS T,a
- const int param1 = 6;
+ /*
+ Jump Relative Short, if True
+
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JRS T, a 100d dddd 1 - - - 4 (2 if not taken)
+ */
+ m_cycles = 2;
int val = opbyte0 & 0x1f;
if (val & 0x10) val -= 0x20;
- const bool takejump = check_jump_condition(param1);
+ const bool takejump = check_jump_condition(COND_T);
if (takejump)
{
+ m_cycles += 2;
m_addr = m_tmppc + 2 + val;
- set_JF();
}
+
+ // always gets set?
+ set_JF();
}
void tlcs870_device::do_JRS_F_a(const uint8_t opbyte0)
{
- // JRS F,a
- const int param1 = 7;
+ /*
+ Jump Relative Short, if False
+
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JRS F, a 101d dddd 1 - - - 4 (2 if not taken)
+ */
+ m_cycles = 2;
int val = opbyte0 & 0x1f;
if (val & 0x10) val -= 0x20;
- const bool takejump = check_jump_condition(param1);
+ const bool takejump = check_jump_condition(COND_F);
if (takejump)
{
+ m_cycles += 2;
m_addr = m_tmppc + 2 + val;
- set_JF();
}
+
+ // manual isn't clear in description, but probably always set?
+ set_JF();
}
void tlcs870_device::do_CALLV_n(const uint8_t opbyte0)
{
- // CALLV n
+ /*
+ Call Vector
+
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CALLV n 1100 nnnn - - - - 7
+ */
+ m_cycles = 7;
+
const uint16_t addr = 0xffc0 + ((opbyte0 & 0xf) * 2);
WM16(m_sp.d - 1, m_addr);
@@ -795,7 +995,19 @@ void tlcs870_device::do_CALLV_n(const uint8_t opbyte0)
void tlcs870_device::do_JR_cc_a(const uint8_t opbyte0)
{
- // JR cc,a
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JR T, a 1101 0110 dddd dddd 1 - - - 4 (2 if not taken)
+ JR F, a 1101 0111 dddd dddd 1 - - - 4 (2 if not taken)
+ JR EQ, a (Z, a) 1101 0000 dddd dddd 1 - - - 4 (2 if not taken)
+ JR NE, a (NZ, a) 1101 0001 dddd dddd 1 - - - 4 (2 if not taken)
+ JR CS, a (LT, a) 1101 0010 dddd dddd 1 - - - 4 (2 if not taken)
+ JR CC, a (GE, a) 1101 0011 dddd dddd 1 - - - 4 (2 if not taken)
+ JR LE, a 1101 0100 dddd dddd 1 - - - 4 (2 if not taken)
+ JR GT, a 1101 0101 dddd dddd 1 - - - 4 (2 if not taken)
+ */
+ m_cycles = 2;
+
const int param1 = opbyte0 & 0x7;
int val = READ8();
@@ -805,21 +1017,31 @@ void tlcs870_device::do_JR_cc_a(const uint8_t opbyte0)
if (takejump)
{
+ m_cycles += 2;
m_addr = m_tmppc + 2 + val;
- set_JF();
}
+
+ // manual isn't clear in description, but probably always set?
+ set_JF();
}
void tlcs870_device::do_LD_CF_inxbit(const uint8_t opbyte0)
{
- // LD CF, (x).b aka TEST (x).b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD CF, (x).b 1101 1bbb xxxx xxxx ~C - * - 4
+
+ aka TEST (x).b
+ */
+ m_cycles = 4;
+
const uint16_t srcaddr = READ8();
const uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte0 & 0x7;
const int bitused = (1 << bitpos);
- uint8_t bit = val & bitused;
+ const uint8_t bit = val & bitused;
bit ? set_CF() : clear_CF();
// for this optype of operation ( LD CF, *.b ) the Jump Flag always ends up the inverse of the Carry Flag
@@ -828,8 +1050,12 @@ void tlcs870_device::do_LD_CF_inxbit(const uint8_t opbyte0)
void tlcs870_device::do_LD_SP_mn(const uint8_t opbyte0)
{
- // LD SP,mn
- // Flags / Cycles 1--- / 3
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD SP ,mn 1111 1010 nnnn nnnn mmmm mmmm 1 - - - 3
+ */
+ m_cycles = 3;
+
const uint16_t param = READ16();
m_sp.d = param;
set_JF();
@@ -837,7 +1063,12 @@ void tlcs870_device::do_LD_SP_mn(const uint8_t opbyte0)
void tlcs870_device::do_JR_a(const uint8_t opbyte0)
{
- // JR a
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JR a 1111 1011 dddd dddd 1 - - - 4
+ */
+ m_cycles = 4;
+
int val = READ8();
if (val & 0x80) val -= 0x100;
@@ -848,7 +1079,12 @@ void tlcs870_device::do_JR_a(const uint8_t opbyte0)
void tlcs870_device::do_CALL_mn(const uint8_t opbyte0)
{
- // CALL mn
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CALL mn 1111 1100 nnnn nnnn mmmm mmmm - - - - 6
+ */
+ m_cycles = 6;
+
const uint16_t addr = READ16();
WM16(m_sp.d - 1, m_addr);
@@ -859,7 +1095,12 @@ void tlcs870_device::do_CALL_mn(const uint8_t opbyte0)
void tlcs870_device::do_CALLP_n(const uint8_t opbyte0)
{
- // CALLP n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CALLP n 1111 1101 nnnn nnnn - - - - 6
+ */
+ m_cycles = 6;
+
const uint16_t addr = READ8() + 0xff00;
WM16(m_sp.d - 1, m_addr);
@@ -870,7 +1111,12 @@ void tlcs870_device::do_CALLP_n(const uint8_t opbyte0)
void tlcs870_device::do_JP_mn(const uint8_t opbyte0)
{
- // JP mn
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JP mn 1111 1110 nnnn nnnn mmmm mmmm 1 - - - 4
+ */
+ m_cycles = 4;
+
const int param2 = READ16();
m_addr = param2;
set_JF();
@@ -878,7 +1124,12 @@ void tlcs870_device::do_JP_mn(const uint8_t opbyte0)
void tlcs870_device::do_ff_opcode(const uint8_t opbyte0)
{
- // SWI
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SWI 1111 1111 - - - - 9 (1 if already in NMI)
+ */
+ m_cycles = 9; // TODO: 1 if in NMI (acts as NOP?)
+
handle_take_interrupt(0x0e);
}
@@ -888,14 +1139,23 @@ void tlcs870_device::do_ff_opcode(const uint8_t opbyte0)
void tlcs870_device::do_ALUOP_A_n(const uint8_t opbyte0)
{
- // (ALU OP) A,n
- // 0111 0000 nnnn nnnn ADDC A,n
- // 0111 0001 nnnn nnnn ADD A,n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC A, n 0111 0000 nnnn nnnn C Z C H 2
+ ADD A, n 0111 0001 nnnn nnnn C Z C H 2
+ SUBB A, n 0111 0010 nnnn nnnn C Z C H 2
+ SUB A, n 0111 0011 nnnn nnnn C Z C H 2
+ AND A, n 0111 0100 nnnn nnnn Z Z - - 2
+ XOR A, n 0111 0101 nnnn nnnn Z Z - - 2
+ OR A, n 0111 0110 nnnn nnnn Z Z - - 2
+ CMP A, n 0111 0111 nnnn nnnn Z Z C H 2
+ */
+ m_cycles = 2;
const int aluop = (opbyte0 & 0x7);
const uint8_t val = READ8();
- const uint8_t result = do_alu(aluop, get_reg8(REG_A), val);
+ const uint8_t result = do_alu_8bit(aluop, get_reg8(REG_A), val);
if (aluop != 0x07) // CMP doesn't write back
{
@@ -905,15 +1165,24 @@ void tlcs870_device::do_ALUOP_A_n(const uint8_t opbyte0)
void tlcs870_device::do_ALUOP_A_inx(const uint8_t opbyte0)
{
- // (ALU OP) A,(x)
- // 0111 1000 nnnn nnnn ADDC A,(x)
- // 0111 1001 nnnn nnnn ADD A,(x)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC A, (x) 0111 1000 xxxx xxxx C Z C H 4
+ ADD A, (x) 0111 1001 xxxx xxxx C Z C H 4
+ SUBB A, (x) 0111 1010 xxxx xxxx C Z C H 4
+ SUB A, (x) 0111 1011 xxxx xxxx C Z C H 4
+ AND A, (x) 0111 1100 xxxx xxxx Z Z - - 4
+ XOR A, (x) 0111 1101 xxxx xxxx Z Z - - 4
+ OR A, (x) 0111 1110 xxxx xxxx Z Z - - 4
+ CMP A, (x) 0111 1111 xxxx xxxx Z Z C H 4
+ */
+ m_cycles = 4;
const int aluop = (opbyte0 & 0x7);
const uint16_t addr = READ8();
const uint8_t val = RM8(addr);
- const uint8_t result = do_alu(aluop, get_reg8(REG_A), val);
+ const uint8_t result = do_alu_8bit(aluop, get_reg8(REG_A), val);
if (aluop != 0x07) // CMP doesn't write back
{
@@ -927,7 +1196,12 @@ void tlcs870_device::do_ALUOP_A_inx(const uint8_t opbyte0)
void tlcs870_device::do_LDW_inx_mn(const uint8_t opbyte0)
{
- // LDW (x),mn
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LDW (x), mn 0010 0100 xxxx xxxx nnnn nnnn mmmm mmmm 1 - - - 6
+ */
+ m_cycles = 6;
+
const uint16_t dstaddr = READ8();
const uint16_t val = READ16();
@@ -939,8 +1213,12 @@ void tlcs870_device::do_LDW_inx_mn(const uint8_t opbyte0)
void tlcs870_device::do_LDW_inHL_mn(const uint8_t opbyte0)
{
- // LDW (HL),mn
- // m_op = LDW;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LDW (HL), mn 0010 0101 nnnn nnnn mmmm mmmm 1 - - - 5
+ */
+ m_cycles = 5;
+
const uint16_t dstaddr = get_reg16(REG_HL);
const uint16_t val = READ16();
diff --git a/src/devices/cpu/tlcs870/tlcs870_ops_dst.cpp b/src/devices/cpu/tlcs870/tlcs870_ops_dst.cpp
index 6eee0ff72bc..3f5a77d0217 100644
--- a/src/devices/cpu/tlcs870/tlcs870_ops_dst.cpp
+++ b/src/devices/cpu/tlcs870/tlcs870_ops_dst.cpp
@@ -13,8 +13,9 @@
F2 (DE)
F3 (HL)
F4 (HL+d)
- F5 invalid (would be (HL+) based on the src table, check for undefined behavior?)
- F6 (-HL)
+ F5 invalid (would be (HL+C) based on the src table, check for undefined behavior?)
+ F6 (HL+)
+ F7 (-HL)
note, in cases where the address is an immediate value, not a register (x) and (HL+d) the
immediate value is directly after the first byte of the opcode
@@ -28,47 +29,31 @@
// Main dispatch handlers for these
-void tlcs870_device::do_f0_opcode(const uint8_t opbyte0)
-{
- // 1111 0000 xxxx xxxx 0101 0rrr
- // destination memory prefix (dst)
- const uint16_t dstaddr = get_addr((opbyte0 & 0x7), READ8());
- do_f0_to_f7_opcode(opbyte0, dstaddr);
-}
-
-void tlcs870_device::do_f2_to_f3_opcode(const uint8_t opbyte0)
-{
- // 0xf2: 1111 001p 0101 0rrr
- // 0xf3: 1111 001p 0101 0rrr
- // destination memory prefix (dst)
- const uint16_t dstaddr = get_addr((opbyte0 & 0x7), 0);
- do_f0_to_f7_opcode(opbyte0, dstaddr);
-}
-
-
-void tlcs870_device::do_f4_opcode(const uint8_t opbyte0)
+// f0 - f7 use this table
+// note, the manual shows both src/dst opcodes in the same table as there's no overlap, but they're not compatible
+void tlcs870_device::do_dstprefixtype_opcode(const uint8_t opbyte0)
{
- // 0xf4: 1111 0100 dddd dddd 0101 0rrr
- // destination memory prefix (dst)
- const uint16_t dstaddr = get_addr((opbyte0 & 0x7), READ8());
- do_f0_to_f7_opcode(opbyte0, dstaddr);
-}
+ m_cycles = get_base_srcdst_cycles(opbyte0 & 0x7); // set base number of cycles based on dst prefix mode
-void tlcs870_device::do_f6_to_f7_opcode(const uint8_t opbyte0)
-{
- // 0xf6: 1110 0110 0101 0rrr
- // 0xf7: 1111 0111 0101 0rrr
- // destination memory prefix (dst)
- const uint16_t dstaddr = get_addr((opbyte0 & 0x7), 0);
- do_f0_to_f7_opcode(opbyte0, dstaddr);
-}
+ uint16_t dstaddr;
+ // (x) and (HL+d) require an immediate value
+ if ((opbyte0 == 0xf0) || (opbyte0 == 0xf4))
+ {
+ dstaddr = get_addr((opbyte0 & 0x7), READ8());
+ }
+ else
+ {
+ dstaddr = get_addr((opbyte0 & 0x7), 0);
+ }
-// f0 - f7 use this table
-// note, same table is shown as above in manual, there's no overlap between src/dest, but they're not compatible
-void tlcs870_device::do_f0_to_f7_opcode(const uint8_t opbyte0, const uint16_t dstaddr)
-{
const uint8_t opbyte1 = READ8();
+ // these are illegal prefixes for dst, undefined behavior at least
+ if ((opbyte0 == 0xf1) || (opbyte0 == 0xf5))
+ {
+ do_f0_to_f7_oprand_illegal_opcode(opbyte0, opbyte1, dstaddr);
+ }
+
switch (opbyte1)
{
case 0x10: case 0x11: case 0x12: case 0x13:
@@ -82,6 +67,12 @@ void tlcs870_device::do_f0_to_f7_opcode(const uint8_t opbyte0, const uint16_t ds
}
}
+void tlcs870_device::do_f0_to_f7_oprand_illegal_opcode(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t dstaddr)
+{
+ m_cycles += 1;
+ logerror("illegal dst prefix opcode %02x %02x (dst addr %04x)\n", opbyte0, opbyte1, dstaddr);
+}
+
// Actual handlers
/**********************************************************************************************************************/
@@ -90,8 +81,22 @@ void tlcs870_device::do_f0_to_f7_opcode(const uint8_t opbyte0, const uint16_t ds
void tlcs870_device::do_LD_indst_rr(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t dstaddr)
{
- // LD (dst),rr
- // (dst) can only be (x) (pp) or (HL+d) ? not (HL+) or (-HL) ?
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), rr 1111 0000 xxxx xxxx 0001 00rr 1 - - - 5
+ LD (PC+A), rr invalid encoding (all PC+A are invalid for dst) ? ? ? ? ?
+ LD (DE), rr 1111 0010 0001 00rr 1 - - - 4
+ LD (HL), rr 1111 0011 0001 00rr 1 - - - 4
+ LD (HL+d), rr 1111 0100 dddd dddd 0001 00rr 1 - - - 6
+ LD (HL+C), rr invalid encoding (all HL+C are invalid for dst) ? ? ? ? ?
+ LD (HL+), rr not listed, invalid due to 16-bit op? ? ? ? ? ?
+ LD (-HL), rr not listed, invalid due to 16-bit op? ? ? ? ? ?
+
+ aka LD (dst),rr
+ (dst) can only be (x) (pp) or (HL+d) ? not (HL+) or (-HL) ?
+ */
+ m_cycles += 4;
+
const uint16_t val = get_reg16(opbyte1 & 0x3);
WM16(dstaddr, val);
@@ -104,8 +109,22 @@ void tlcs870_device::do_LD_indst_rr(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_LD_indst_n(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t dstaddr)
{
- // LD (dst),n
- // (dst) can only be (DE), (HL+), (-HL), or (HL+d) because (x) and (HL) are redundant encodings?
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), n not listed, redundant encoding? ? ? ? ? ?
+ LD (PC+A), n invalid encoding (all PC+A are invalid for dst) ? ? ? ? ?
+ LD (DE), n 1111 0010 0010 1100 nnnn nnnn 1 - - - 4
+ LD (HL), n not listed, redundant encoding? ? ? ? ? ?
+ LD (HL+d), n 1111 0100 dddd dddd 0010 1100 nnnn nnnn 1 - - - 6
+ LD (HL+C), n invalid encoding (all HL+C are invalid for dst) ? ? ? ? ?
+ LD (HL+), n 1111 0110 0010 1100 nnnn nnnn 1 - - - 5
+ LD (-HL), n 1111 0111 0010 1100 nnnn nnnn 1 - - - 5
+
+ aka (dst),n
+ (dst) can only be (DE), (HL+), (-HL), or (HL+d) because (x) and (HL) are redundant encodings?
+ */
+ m_cycles += 4;
+
const uint16_t n = READ8();
WM8(dstaddr, n);
@@ -114,14 +133,23 @@ void tlcs870_device::do_LD_indst_n(const uint8_t opbyte0, const uint8_t opbyte1,
void tlcs870_device::do_LD_indst_r(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t dstaddr)
{
- // LD (dst),r
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), r 1111 0000 xxxx xxxx 0101 1rrr 1 - - - 4
+ LD (PC+A), r invalid encoding (all PC+A are invalid for dst) ? ? ? ? ?
+ LD (DE), r 1111 0010 0101 1rrr 1 - - - 3
+ LD (HL), r 1111 0011 0101 1rrr 1 - - - 3
+ LD (HL+d), r 1111 0100 dddd dddd 0101 1rrr 1 - - - 5
+ LD (HL+C), r invalid encoding (all HL+C are invalid for dst) ? ? ? ? ?
+ LD (HL+), r 1111 0110 0101 0rrr 1 - - - 4 (invalid if r is H or L)
+ LD (-HL), r 1111 0111 0101 0rrr 1 - - - 4
+
+ aka LD (dst),r
+ */
+ m_cycles += 3;
+
const uint8_t reg = get_reg8(opbyte1 & 0x7);
WM8(dstaddr, reg);
set_JF();
}
-
-void tlcs870_device::do_f0_to_f7_oprand_illegal_opcode(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t dstaddr)
-{
- logerror("illegal dst prefix opcode %02x %02x (dst addr %04x)\n", opbyte0, opbyte1, dstaddr);
-}
diff --git a/src/devices/cpu/tlcs870/tlcs870_ops_helper.cpp b/src/devices/cpu/tlcs870/tlcs870_ops_helper.cpp
index e2a11b57661..8f494ba7475 100644
--- a/src/devices/cpu/tlcs870/tlcs870_ops_helper.cpp
+++ b/src/devices/cpu/tlcs870/tlcs870_ops_helper.cpp
@@ -216,60 +216,404 @@ const bool tlcs870_device::check_jump_condition(int param1)
return takejump;
}
+/*
+ All 16-bit ALU ops that would set the 'H' flag list the behavior as undefined.
+ Logically the half flag would be the 8/9 bit carry (usual C flag) in a 16-bit
+ op, but since this isn't listed as being the case there's a chance the behavior
+ is something unexpected, such as still using the 3/4 carry, or, if it's
+ internally handled as 4 4-bit operations, maybe the 12/13 bit carry
+
+ This needs testing on hardware.
+
+ (8-bit) JF ZF CF HF
+ ADDC C Z C H
+ ADD C Z C H
+ SUBB C Z C H
+ SUB C Z C H
+ AND Z Z - -
+ XOR Z Z - -
+ OR Z Z - -
+ CMP Z Z C H
+
+ (16-bit)
+ ADDC C Z C U
+ ADD C Z C U
+ SUBB C Z C U
+ SUB C Z C U
+ AND Z Z - -
+ XOR Z Z - -
+ OR Z Z - -
+ CMP Z Z C U
+
+*/
+
+uint8_t tlcs870_device::do_add_8bit(uint16_t param1, uint16_t param2)
+{
+ uint16_t result = param1 + param2;
+
+ if (result & 0x100)
+ {
+ set_CF();
+ }
+ else
+ {
+ clear_CF();
+ }
+
+ if ((result & 0xff) == 0x00)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ uint8_t temp = (param1 & 0xf) + (param2 & 0xf);
+
+ if (temp & 0x10)
+ {
+ set_HF();
+ }
+ else
+ {
+ clear_HF();
+ }
+
+ // JF is copied from CF
+ is_ZF() ? set_CF() : clear_CF();
+
+ return result;
+}
+
+uint8_t tlcs870_device::do_add_16bit(uint32_t param1, uint32_t param2)
+{
+ uint32_t result = param1 + param2;
+
+ if (result & 0x10000)
+ {
+ set_CF();
+ }
+ else
+ {
+ clear_CF();
+ }
+
+ if ((result & 0xffff) == 0x00)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // unknown, manual says undefined, see note above
+ uint8_t temp = (param1 & 0xff) + (param2 & 0xff);
+
+ if (temp & 0x100)
+ {
+ set_HF();
+ }
+ else
+ {
+ clear_HF();
+ }
+
+ // JF is copied from CF
+ is_ZF() ? set_CF() : clear_CF();
+
+ return result;
+}
+
+uint8_t tlcs870_device::do_sub_8bit(uint16_t param1, uint16_t param2)
+{
+ uint16_t result = param1 - param2;
+
+ if (param1 < param2)
+ {
+ set_CF();
+ }
+ else
+ {
+ clear_CF();
+ }
+
+ if ((param1 & 0xf) < (param2 & 0xf))
+ {
+ set_HF();
+ }
+ else
+ {
+ clear_HF();
+ }
+
+ if ((result & 0xff) == 0x00)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from CF
+ is_ZF() ? set_CF() : clear_CF();
+
+ return result;
+}
+
+
+uint8_t tlcs870_device::do_sub_16bit(uint32_t param1, uint32_t param2)
+{
+ uint32_t result = param1 - param2;
+
+ if (param1 < param2)
+ {
+ set_CF();
+ }
+ else
+ {
+ clear_CF();
+ }
+
+ // unknown, manual says undefined, see note above
+ if ((param1 & 0xff) < (param2 & 0xff))
+ {
+ set_HF();
+ }
+ else
+ {
+ clear_HF();
+ }
+
+ if ((result & 0xffff) == 0x0000)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from CF
+ is_ZF() ? set_CF() : clear_CF();
+
+ return result;
+}
+
+void tlcs870_device::do_cmp_8bit(uint16_t param1, uint16_t param2)
+{
+ if (param1 < param2)
+ {
+ set_CF();
+ }
+ else
+ {
+ clear_CF();
+ }
+
+ if ((param1 & 0xf) < (param2 & 0xf)) // see note above about half flag
+ {
+ set_HF();
+ }
+ else
+ {
+ clear_HF();
+ }
+
+ if (param1 == param2)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from ZF
+ is_ZF() ? set_JF() : clear_JF();
+}
+
+void tlcs870_device::do_cmp_16bit(uint32_t param1, uint32_t param2)
+{
+ if (param1 < param2)
+ {
+ set_CF();
+ }
+ else
+ {
+ clear_CF();
+ }
+
+ // unknown, manual says undefined, see note above
+ if ((param1 & 0xff) < (param2 & 0xff))
+ {
+ set_HF();
+ }
+ else
+ {
+ clear_HF();
+ }
+
+ if (param1 == param2)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from ZF
+ is_ZF() ? set_JF() : clear_JF();
+}
+
+
+uint16_t tlcs870_device::do_and(uint16_t param1, uint16_t param2)
+{
+ uint16_t result = param1 & param2;
+
+ if (result == 0x00)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from ZF
+ is_ZF() ? set_JF() : clear_JF();
+
+ return result;
+}
+
+uint16_t tlcs870_device::do_xor(uint16_t param1, uint16_t param2)
+{
+ uint16_t result = param1 ^ param2;
-uint16_t tlcs870_device::do_alu(int op, uint16_t param1, uint16_t param2)
+ if (result == 0x00)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from ZF
+ is_ZF() ? set_JF() : clear_JF();
+
+ return result;
+}
+
+uint16_t tlcs870_device::do_or(uint16_t param1, uint16_t param2)
+{
+ uint16_t result = param1 | param2;
+
+ if (result == 0x00)
+ {
+ set_ZF();
+ }
+ else
+ {
+ clear_ZF();
+ }
+
+ // JF is copied from ZF
+ is_ZF() ? set_JF() : clear_JF();
+
+ return result;
+}
+
+uint8_t tlcs870_device::do_alu_8bit(int op, uint16_t param1, uint16_t param2)
{
uint16_t result = 0x00;
- // TODO: flags
switch (op)
{
case 0x0: // ADDC
- result = param1 + param2;
- result += is_CF();
+ param2 += is_CF();
+ result = do_add_8bit(param1, param2);
break;
case 0x1: // ADD
- result = param1 + param2;
+ result = do_add_8bit(param1, param2);
break;
case 0x2: // SUBB
- result = param1 - param2;
- result -= is_CF();
+ param2 += is_CF();
+ result = do_sub_8bit(param1, param2);
break;
case 0x3: // SUB
- result = param1 - param2;
+ result = do_sub_8bit(param1, param2);
break;
case 0x4: // AND
- result = param1 & param2;
+ result = do_and(param1, param2);
break;
case 0x5: // XOR
- result = param1 ^ param2;
+ result = do_xor(param1, param2);
break;
case 0x6: // OR
- result = param1 | param2;
+ result = do_or(param1, param2);
break;
case 0x7: // CMP
- if (param1 < param2)
- {
- set_CF();
- }
- else
- {
- clear_CF();
- }
+ do_cmp_8bit(param1, param2);
break;
-
}
return result;
}
+uint16_t tlcs870_device::do_alu_16bit(int op, uint32_t param1, uint32_t param2)
+{
+ uint32_t result = 0x0000;
+
+ switch (op)
+ {
+ case 0x0: // ADDC
+ param2 += is_CF();
+ result = do_add_16bit(param1, param2);
+ break;
+
+ case 0x1: // ADD
+ result = do_add_16bit(param1, param2);
+ break;
+
+ case 0x2: // SUBB
+ param2 += is_CF();
+ result = do_sub_16bit(param1, param2);
+ break;
+
+ case 0x3: // SUB
+ result = do_sub_16bit(param1, param2);
+ break;
+
+ case 0x4: // AND
+ result = do_and(param1, param2);
+ break;
+
+ case 0x5: // XOR
+ result = do_xor(param1, param2);
+ break;
+
+ case 0x6: // OR
+ result = do_or(param1, param2);
+ break;
+
+ case 0x7: // CMP
+ do_cmp_16bit(param1, param2);
+ break;
+ }
+
+ return result;
+}
uint8_t tlcs870_device::handle_SHLC(uint8_t val)
{
diff --git a/src/devices/cpu/tlcs870/tlcs870_ops_reg.cpp b/src/devices/cpu/tlcs870/tlcs870_ops_reg.cpp
index e9073bc4c49..484ce98fbb5 100644
--- a/src/devices/cpu/tlcs870/tlcs870_ops_reg.cpp
+++ b/src/devices/cpu/tlcs870/tlcs870_ops_reg.cpp
@@ -97,11 +97,11 @@ void tlcs870_device::do_regprefixtype_opcode(const uint8_t opbyte0)
case 0x8a: case 0x8b:
do_CLR_inppbit(opbyte0, opbyte1); break;
case 0x92: case 0x93:
- do_CPL_inppbit(opbyte0, opbyte1); break;
+ do_CPL_inpp_indirectbit(opbyte0, opbyte1); break;
case 0x9a: case 0x9b:
- do_LD_inppbit_CF(opbyte0, opbyte1); break;
+ do_LD_inpp_indirectbit_CF(opbyte0, opbyte1); break;
case 0x9e: case 0x9f:
- do_LD_CF_inppbit(opbyte0, opbyte1); break;
+ do_LD_CF_inpp_indirectbit(opbyte0, opbyte1); break;
case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
do_XCH_r_g(opbyte0, opbyte1); break;
case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
@@ -134,6 +134,7 @@ void tlcs870_device::do_regprefixtype_opcode(const uint8_t opbyte0)
void tlcs870_device::do_regprefixtype_oprand_illegal(const uint8_t opbyte0, const uint8_t opbyte1)
{
+ m_cycles = 1;
logerror("illegal reg prefix opcode %02x %02x\n", opbyte0, opbyte1);
}
@@ -143,8 +144,13 @@ void tlcs870_device::do_RETN(const uint8_t opbyte0, const uint8_t opbyte1)
// with E8 only
if (opbyte0 == 0xe8)
{
- // RETN
- // Return from non-maskable interrupt service (how does this differ from RETI?)
+ /*
+ Return from non-maskable interrupt service (how does this differ from RETI?)
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ RETN 1110 1000 0000 0100 * * * * 7
+ */
+ m_cycles = 7;
+
m_sp.d += 3;
m_addr = RM16(m_sp.d - 2);
set_PSW(RM8(m_sp.d - 1));
@@ -161,15 +167,24 @@ void tlcs870_device::do_RETN(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_SWAP_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // SWAP g
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SWAP g 1110 1ggg 0000 0001 1 - - - 4
+ */
+ m_cycles = 4;
+
const uint8_t reg = opbyte0 & 0x7;
handle_swap(reg);
}
void tlcs870_device::do_DAA_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // DAA g
- // 1110 1ggg 0000 1010
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DAS g 1110 1ggg 0000 1010 C Z C H 3
+ */
+ m_cycles = 3;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
val = handle_DAA(val);
@@ -180,8 +195,12 @@ void tlcs870_device::do_DAA_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_DAS_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // DAS g
- // 1110 1ggg 0000 1011
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DAS g 1110 1ggg 0000 1011 C Z C H 3
+ */
+ m_cycles = 3;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
val = handle_DAS(val);
@@ -192,8 +211,13 @@ void tlcs870_device::do_DAS_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_SHLC_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // SHLC g
- // Logical Shift Left with Carry Flag
+ /*
+ Logical Shift Left with Carry Flag
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SHLC g 1110 1ggg 0001 1100 C Z * - 2
+ */
+ m_cycles = 2;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
val = handle_SHLC(val);
@@ -203,8 +227,12 @@ void tlcs870_device::do_SHLC_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_SHRC_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // SHRC g
- // Logical Shift Right with Carry Flag
+ /*
+ Logical Shift Right with Carry Flag
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SHRC g 1110 1ggg 0001 1101 C Z * - 2
+ */
+ m_cycles = 2;
uint8_t val = get_reg8(opbyte0 & 0x7);
@@ -215,8 +243,13 @@ void tlcs870_device::do_SHRC_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_ROLC_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // ROLC g
- // Rotate Left through Carry flag
+ /*
+ Rotate Left through Carry flag
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ROLC g 1110 1ggg 0001 1110 C Z * - 2
+ */
+ m_cycles = 2;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
val = handle_ROLC(val);
@@ -227,8 +260,13 @@ void tlcs870_device::do_ROLC_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_RORC_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // RORC g
- // Rotate Right through Carry flag
+ /*
+ Rotate Right through Carry flag
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ RORC g 1110 1ggg 0001 1111 C Z * - 2
+ */
+ m_cycles = 2;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
val = handle_RORC(val);
@@ -239,8 +277,12 @@ void tlcs870_device::do_RORC_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_LD_r_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD r,g
- // 1110 1ggg 0101 1rrr
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD r, g 1110 1ggg 0101 1rrr 1 Z - - 2
+ */
+ m_cycles = 2;
+
const uint8_t val = get_reg8(opbyte0 & 0x7);
set_reg8(opbyte1 & 0x7, val);
@@ -252,8 +294,12 @@ void tlcs870_device::do_LD_r_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_XCH_r_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // XCH r,g
- // 1110 1ggg 1010 1rrr
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ XCG r, g 1110 1ggg 1010 1rrr 1 Z - - 3
+ */
+ m_cycles = 3;
+
const uint8_t val = get_reg8(opbyte0 & 0x7);
const uint8_t r = get_reg8(opbyte1 & 0x7);
@@ -272,21 +318,22 @@ void tlcs870_device::do_XCH_r_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_ALUOP_A_g(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // (ALU OP) A,g
/*
- 1110 1ggg 0110 0000 ADDC A,g
- 1110 1ggg 0110 0001 ADD A,g
- 1110 1ggg 0110 0010 SUBB A,g
- 1110 1ggg 0110 0011 SUB A,g
- 1110 1ggg 0110 0100 AND A,g
- 1110 1ggg 0110 0101 XOR A,g
- 1110 1ggg 0110 0110 OR A,g
- 1110 1ggg 0110 0111 CMP A,g
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC A, g 1110 1ggg 0110 0000 C Z C H 2
+ ADD A, g 1110 1ggg 0110 0001 C Z C H 2
+ SUBB A, g 1110 1ggg 0110 0010 C Z C H 2
+ SUB A, g 1110 1ggg 0110 0011 C Z C H 2
+ AND A, g 1110 1ggg 0110 0100 Z Z - - 2
+ XOR A, g 1110 1ggg 0110 0101 Z Z - - 2
+ OR A, g 1110 1ggg 0110 0110 Z Z - - 2
+ CMP A, g 1110 1ggg 0110 0111 Z Z C H 2
*/
+ m_cycles = 2;
const int aluop = (opbyte1 & 0x7);
- const uint8_t result = do_alu(aluop, get_reg8(REG_A), get_reg8(opbyte0 & 0x7));
+ const uint8_t result = do_alu_8bit(aluop, get_reg8(REG_A), get_reg8(opbyte0 & 0x7));
if (aluop != 0x07) // CMP doesn't write back
{
@@ -296,20 +343,21 @@ void tlcs870_device::do_ALUOP_A_g(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_ALUOP_g_A(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // (ALU OP) g,A
/*
- 1110 1ggg 0110 1000 ADDC A,g
- 1110 1ggg 0110 1001 ADD A,g
- 1110 1ggg 0110 1010 SUBB A,g
- 1110 1ggg 0110 1011 SUB A,g
- 1110 1ggg 0110 1100 AND A,g
- 1110 1ggg 0110 1101 XOR A,g
- 1110 1ggg 0110 1110 OR A,g
- 1110 1ggg 0110 1111 CMP A,g
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC g, A 1110 1ggg 0110 1000 C Z C H 3
+ ADD g, A 1110 1ggg 0110 1001 C Z C H 3
+ SUBB g, A 1110 1ggg 0110 1010 C Z C H 3
+ SUB g, A 1110 1ggg 0110 1011 C Z C H 3
+ AND g, A 1110 1ggg 0110 1100 Z Z - - 3
+ XOR g, A 1110 1ggg 0110 1101 Z Z - - 3
+ OR g, A 1110 1ggg 0110 1110 Z Z - - 3
+ CMP g, A 1110 1ggg 0110 1111 Z Z C H 3
*/
+ m_cycles = 3;
const int aluop = (opbyte1 & 0x7);
- const uint8_t result = do_alu(aluop, get_reg8(opbyte0 & 0x7), get_reg8(REG_A));
+ const uint8_t result = do_alu_8bit(aluop, get_reg8(opbyte0 & 0x7), get_reg8(REG_A));
if (aluop != 0x07) // CMP doesn't write back
{
@@ -319,12 +367,24 @@ void tlcs870_device::do_ALUOP_g_A(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_ALUOP_g_n(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // (ALU OP) g,n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC g, n 1110 1ggg 0111 0000 nnnn nnnn C Z C H 3
+ ADD g, n 1110 1ggg 0111 0001 nnnn nnnn C Z C H 3
+ SUBB g, n 1110 1ggg 0111 0010 nnnn nnnn C Z C H 3
+ SUB g, n 1110 1ggg 0111 0011 nnnn nnnn C Z C H 3
+ AND g, n 1110 1ggg 0111 0100 nnnn nnnn Z Z - - 3
+ XOR g, n 1110 1ggg 0111 0101 nnnn nnnn Z Z - - 3
+ OR g, n 1110 1ggg 0111 0110 nnnn nnnn Z Z - - 3
+ CMP g, n 1110 1ggg 0111 0111 nnnn nnnn Z Z C H 3
+ */
+ m_cycles = 3;
+
const int aluop = (opbyte1 & 0x7);
const uint8_t n = READ8();
- const uint8_t result = do_alu(aluop, get_reg8(opbyte0 & 0x7), n);
+ const uint8_t result = do_alu_8bit(aluop, get_reg8(opbyte0 & 0x7), n);
if (aluop != 0x07) // CMP doesn't write back
{
@@ -338,21 +398,22 @@ void tlcs870_device::do_ALUOP_g_n(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_ALUOP_WA_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // (ALU OP) WA,gg
/*
- 1110 10gg 0011 0000 ADDC WA,gg
- 1110 10gg 0011 0001 ADD WA,gg
- 1110 10gg 0011 0010 SUBB WA,gg
- 1110 10gg 0011 0011 SUB WA,gg
- 1110 10gg 0011 0100 AND WA,gg
- 1110 10gg 0011 0101 XOR WA,gg
- 1110 10gg 0011 0110 OR WA,gg
- 1110 10gg 0011 0111 CMP WA,gg
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC WA, gg 1110 10gg 0011 0000 C Z C U 4
+ ADD WA, gg 1110 10gg 0011 0001 C Z C U 4
+ SUBB WA, gg 1110 10gg 0011 0010 C Z C U 4
+ SUB WA, gg 1110 10gg 0011 0011 C Z C U 4
+ AND WA, gg 1110 10gg 0011 0100 Z Z - - 4
+ XOR WA, gg 1110 10gg 0011 0101 Z Z - - 4
+ OR WA, gg 1110 10gg 0011 0110 Z Z - - 4
+ CMP WA, gg 1110 10gg 0011 0111 Z Z C U 4
*/
+ m_cycles = 4;
const int aluop = (opbyte1 & 0x7);
- const uint16_t result = do_alu(aluop, get_reg16(REG_WA), get_reg16(opbyte0 & 0x3));
+ const uint16_t result = do_alu_16bit(aluop, get_reg16(REG_WA), get_reg16(opbyte0 & 0x3));
if (aluop != 0x07) // CMP doesn't write back
{
@@ -363,12 +424,24 @@ void tlcs870_device::do_ALUOP_WA_gg(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_ALUOP_gg_mn(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // (ALU OP) gg,mn
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC gg, mn 1110 10gg 0011 1000 nnnn nnnn mmmm mmmm C Z C U 4
+ ADD gg, mn 1110 10gg 0011 1001 nnnn nnnn mmmm mmmm C Z C U 4
+ SUBB gg, mn 1110 10gg 0011 1010 nnnn nnnn mmmm mmmm C Z C U 4
+ SUB gg, mn 1110 10gg 0011 1011 nnnn nnnn mmmm mmmm C Z C U 4
+ AND gg, mn 1110 10gg 0011 1100 nnnn nnnn mmmm mmmm Z Z - - 4
+ XOR gg, mn 1110 10gg 0011 1101 nnnn nnnn mmmm mmmm Z Z - - 4
+ OR gg, mn 1110 10gg 0011 1110 nnnn nnnn mmmm mmmm Z Z - - 4
+ CMP gg, mn 1110 10gg 0011 1111 nnnn nnnn mmmm mmmm Z Z C U 4
+ */
+ m_cycles = 4;
+
const int aluop = (opbyte1 & 0x7);
const uint16_t mn = READ16();
- const uint16_t result = do_alu(aluop, get_reg16(opbyte0 & 0x3), mn);
+ const uint16_t result = do_alu_16bit(aluop, get_reg16(opbyte0 & 0x3), mn);
if (aluop != 0x07) // CMP doesn't write back
{
@@ -384,8 +457,14 @@ void tlcs870_device::do_ALUOP_gg_mn(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_SET_inppbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // SET (pp).g
- const uint8_t bitpos = opbyte0 & 7;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SET (DE).g 1110 1ggg 1000 0010 Z * - - 5
+ SET (HL).g 1110 1ggg 1000 0011 Z * - - 5
+ */
+ m_cycles = 5;
+
+ const uint8_t bitpos = get_reg8(opbyte0 & 7) & 0x7;
const uint8_t bitused = 1 << bitpos;
const uint16_t addr = get_reg16((opbyte1 & 1) + 2); // DE or HL
uint8_t val = RM8(addr);
@@ -408,8 +487,14 @@ void tlcs870_device::do_SET_inppbit(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_CLR_inppbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // CLR (pp).g
- const uint8_t bitpos = opbyte0 & 7;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR (DE).g 1110 1ggg 1000 1010 Z * - - 5
+ CLR (HL).g 1110 1ggg 1000 1011 Z * - - 5
+ */
+ m_cycles = 5;
+
+ const uint8_t bitpos = get_reg8(opbyte0 & 7) & 0x7;
const uint8_t bitused = 1 << bitpos;
const uint16_t addr = get_reg16((opbyte1 & 1) + 2); // DE or HL
uint8_t val = RM8(addr);
@@ -430,10 +515,16 @@ void tlcs870_device::do_CLR_inppbit(const uint8_t opbyte0, const uint8_t opbyte1
WM8(addr, val);
}
-void tlcs870_device::do_CPL_inppbit(const uint8_t opbyte0, const uint8_t opbyte1)
+void tlcs870_device::do_CPL_inpp_indirectbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // CPL (pp).g
- const uint8_t bitpos = opbyte0 & 7;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CPL (DE).g 1110 1ggg 1001 0010 Z * - - 5
+ CPL (HL).g 1110 1ggg 1001 0011 Z * - - 5
+ */
+ m_cycles = 5;
+
+ const uint8_t bitpos = get_reg8(opbyte0 & 7) & 0x7;
const uint8_t bitused = 1 << bitpos;
const uint16_t addr = get_reg16((opbyte1 & 1) + 2); // DE or HL
uint8_t val = RM8(addr);
@@ -458,10 +549,16 @@ void tlcs870_device::do_CPL_inppbit(const uint8_t opbyte0, const uint8_t opbyte1
WM8(addr, val);
}
-void tlcs870_device::do_LD_inppbit_CF(const uint8_t opbyte0, const uint8_t opbyte1)
+void tlcs870_device::do_LD_inpp_indirectbit_CF(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD (pp).g,CF
- const uint8_t bitpos = opbyte0 & 7;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (DE).g, CF 1110 1ggg 1001 1010 1 - - - 5
+ LD (HL).g, CF 1110 1ggg 1001 1011 1 - - - 5
+ */
+ m_cycles = 5;
+
+ const uint8_t bitpos = get_reg8(opbyte0 & 7) & 0x7;
const uint8_t bitused = 1 << bitpos;
const uint16_t addr = get_reg16((opbyte1 & 1) + 2); // DE or HL
uint8_t val = RM8(addr);
@@ -482,11 +579,18 @@ void tlcs870_device::do_LD_inppbit_CF(const uint8_t opbyte0, const uint8_t opbyt
}
-void tlcs870_device::do_LD_CF_inppbit(const uint8_t opbyte0, const uint8_t opbyte1)
+void tlcs870_device::do_LD_CF_inpp_indirectbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD CF,(pp).g aka TEST (pp).g
- // 1110 1ggg 1001 111p
- const uint8_t bitpos = opbyte0 & 7;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD CF, (DE).g 1110 1ggg 1001 1110 ~C - * - 4
+ LD CF, (HL).g 1110 1ggg 1001 1111 ~C - * - 4
+
+ aka aka TEST (pp).g
+ */
+ m_cycles = 4;
+
+ const uint8_t bitpos = get_reg8(opbyte0 & 7) & 0x7;
const uint8_t bitused = 1 << bitpos;
const uint16_t addr = get_reg16((opbyte1 & 1) + 2); // DE or HL
const uint8_t val = RM8(addr);
@@ -502,8 +606,12 @@ void tlcs870_device::do_LD_CF_inppbit(const uint8_t opbyte0, const uint8_t opbyt
void tlcs870_device::do_SET_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // SET g.b
- // 1110 1ggg 0100 0bbb
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SET g.b 1110 1ggg 0100 0bbb Z * - - 3
+ */
+ m_cycles = 3;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -527,8 +635,12 @@ void tlcs870_device::do_SET_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_CLR_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // CLR g.b
- // 1110 1ggg 0100 1bbb
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR g.b 1110 1ggg 0100 1bbb Z * - - 3
+ */
+ m_cycles = 3;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -552,8 +664,12 @@ void tlcs870_device::do_CLR_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_CPL_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // CPL g.b
- // 1110 1ggg 1100 0bbb
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CPL g.b 1110 1ggg 1100 0bbb Z * - - 3
+ */
+ m_cycles = 3;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -581,9 +697,12 @@ void tlcs870_device::do_CPL_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_LD_gbit_CF(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD g.b,CF
- // m_op = LD; // Flags / Cycles 1--- / 2
- //m_flagsaffected |= FLAG_J;
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD g.b, CF 1110 1ggg 1100 1bbb 1 - - - 2
+ */
+ m_cycles = 2;
+
uint8_t val = get_reg8(opbyte0 & 0x7);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -607,7 +726,12 @@ void tlcs870_device::do_LD_gbit_CF(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_XOR_CF_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // XOR CF,g.b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ XOR CF, g.b 1110 1ggg 1101 0bbb ~C - * - 2
+ */
+ m_cycles = 2;
+
const uint8_t bitpos = opbyte1 & 0x7;
const uint8_t bitused = 1 << bitpos;
@@ -648,7 +772,14 @@ void tlcs870_device::do_XOR_CF_gbit(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_LD_CF_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD CF,g.b aka TEST g.b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD CF, g.b 1110 1ggg 1101 1bbb ~C - * - 2
+
+ aka TEST g.b
+ */
+ m_cycles = 2;
+
const uint8_t bitpos = opbyte1 & 0x7;
const uint8_t bitused = 1 << bitpos;
@@ -667,23 +798,44 @@ void tlcs870_device::do_LD_CF_gbit(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_MUL_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // MUL ggH, ggL (odd syntax, basically MUL gg)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ MUL W, A not listed (redundant encoding?) ? ? ? ? ?
+ MUL B, C 1110 1010 0000 0010 Z Z - - 8
+ MUL D, E 1110 1010 0000 0010 Z Z - - 8
+ MUL H, L 1110 1011 0000 0010 Z Z - - 8
+
+ aka MUL ggH, ggL (odd syntax, basically MUL gg)
+ */
+ m_cycles = 8;
+
const uint8_t reg = opbyte0 & 0x3; // opbyte0 & 4 = invalid?
handle_mul(reg); // flag changes in handler
}
void tlcs870_device::do_DIV_gg_C(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // DIV gg,C
- // (DIV BC,C is presumably an illegal / undefined result)
- // (DIV WA,C is a redundant encoding)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DIV WA, C not listed (redundant encoding?) ? ? ? ? ?
+ DIV BC, C not listed (illegal?) ? ? ? ? ?
+ DIV DE, C 1110 1010 0000 0011 Z Z C - 8
+ DIV HL, C 1110 1011 0000 0011 Z Z C - 8
+ */
+ m_cycles = 8;
+
const uint8_t reg = opbyte0 & 0x3; // opbyte0 & 4 = invalid?
handle_div(reg); // flag changes in handler
}
void tlcs870_device::do_POP_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // POP gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ POP gg 1110 10gg 0000 0110 - - - - 5
+ */
+ m_cycles = 5;
+
m_sp.d += 2;
const uint16_t val = RM16(m_sp.d - 1);
set_reg16(opbyte0 & 3, val);
@@ -692,7 +844,12 @@ void tlcs870_device::do_POP_gg(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_PUSH_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // PUSH gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ PUSH gg 1110 10gg 0000 0111 - - - - 4
+ */
+ m_cycles = 4;
+
const uint16_t val = get_reg16(opbyte0 & 3);
WM16(m_sp.d - 1, val);
m_sp.d -= 2;
@@ -702,21 +859,36 @@ void tlcs870_device::do_PUSH_gg(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_LD_SP_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD SP,gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD SP, gg 1110 10gg 1111 1010 1 - - - 3
+ */
+ m_cycles = 3;
+
m_sp.d = get_reg16(opbyte0 & 0x3);
set_JF(); // no other flag changes for this type of LD
}
void tlcs870_device::do_LD_gg_SP(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD gg,SP
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD gg, SP 1110 10gg 1111 1011 1 - - - 3
+ */
+ m_cycles = 3;
+
set_reg16(opbyte0 & 0x3, m_sp.d);
set_JF(); // no other flag changes for this type of LD
}
void tlcs870_device::do_LD_rr_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // LD rr,gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD rr, gg 1110 10gg 0001 00rr 1 - - - 2
+ */
+ m_cycles = 2;
+
const uint16_t gg = get_reg16(opbyte0 & 0x3);
set_reg16(opbyte1 & 0x3, gg);
@@ -726,20 +898,30 @@ void tlcs870_device::do_LD_rr_gg(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_XCH_rr_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // XCH rr,gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ XCH rr, gg 1110 10gg 0001 01rr 1 - - - 3
+ */
+ m_cycles = 3;
+
const uint16_t gg = get_reg16(opbyte0 & 0x3);
const uint16_t rr = get_reg16(opbyte1 & 0x3);
set_reg16(opbyte1 & 0x3, gg);
set_reg16(opbyte0 & 0x3, rr);
- // flags not done
+ set_JF();
}
void tlcs870_device::do_CALL_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // CALL gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CALL gg 1110 10gg 1111 1100 - - - - 6
+ */
+ m_cycles = 6;
+
const uint16_t val = get_reg16(opbyte0 & 3);
WM16(m_sp.d - 1, m_addr);
@@ -752,7 +934,12 @@ void tlcs870_device::do_CALL_gg(const uint8_t opbyte0, const uint8_t opbyte1)
void tlcs870_device::do_JP_gg(const uint8_t opbyte0, const uint8_t opbyte1)
{
- // JP gg
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JP gg 1110 10gg 1111 1110 1 - - - 3
+ */
+ m_cycles = 3;
+
const uint16_t val = get_reg16(opbyte0 & 3);
m_addr = val;
diff --git a/src/devices/cpu/tlcs870/tlcs870_ops_src.cpp b/src/devices/cpu/tlcs870/tlcs870_ops_src.cpp
index afb1c0c9ac0..0d1a5ae6205 100644
--- a/src/devices/cpu/tlcs870/tlcs870_ops_src.cpp
+++ b/src/devices/cpu/tlcs870/tlcs870_ops_src.cpp
@@ -29,33 +29,18 @@
// Main dispatch handlers for these
-void tlcs870_device::do_e0_opcode(const uint8_t opbyte0)
-{
- const uint16_t srcaddr = get_addr((opbyte0 & 0x7), READ8());
- do_e0_to_e7_opcode(opbyte0, srcaddr);
-}
-
-void tlcs870_device::do_e1_to_e3_opcode(const uint8_t opbyte0)
-{
- const uint16_t srcaddr = get_addr((opbyte0 & 0x7), 0);
- do_e0_to_e7_opcode(opbyte0, srcaddr);
-}
-
-void tlcs870_device::do_e4_opcode(const uint8_t opbyte0)
+// e0 - e7 use this table
+void tlcs870_device::do_srcprefixtype_opcode(const uint8_t opbyte0)
{
- const uint16_t srcaddr = get_addr((opbyte0 & 0x7), READ8());
- do_e0_to_e7_opcode(opbyte0, srcaddr);
-}
+ m_cycles = get_base_srcdst_cycles(opbyte0 & 0x7); // set base number of cycles based on src prefix mode
-void tlcs870_device::do_e5_to_e7_opcode(const uint8_t opbyte0)
-{
- const uint16_t srcaddr = get_addr((opbyte0 & 0x7), 0);
- do_e0_to_e7_opcode(opbyte0, srcaddr);
-}
+ uint16_t srcaddr;
+ // (x) and (HL+d) require an immediate value
+ if ((opbyte0 == 0xe0) || (opbyte0 == 0xe4))
+ srcaddr = get_addr((opbyte0 & 0x7), READ8());
+ else
+ srcaddr = get_addr((opbyte0 & 0x7), 0);
-// e0 - e7 use this table
-void tlcs870_device::do_e0_to_e7_opcode(uint8_t opbyte0, uint16_t srcaddr)
-{
const uint8_t opbyte1 = READ8();
switch (opbyte1)
@@ -112,6 +97,7 @@ void tlcs870_device::do_e0_to_e7_opcode(uint8_t opbyte0, uint16_t srcaddr)
void tlcs870_device::do_e0_to_e7_oprand_illegal(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
+ m_cycles += 1;
logerror("illegal src prefix opcode %02x %02x (src addr %04x)\n", opbyte0, opbyte1, srcaddr);
}
@@ -121,7 +107,21 @@ void tlcs870_device::do_e0_to_e7_oprand_illegal(const uint8_t opbyte0, const uin
void tlcs870_device::do_LD_rr_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // LD rr, (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD rr, (x) 1110 0000 xxxx xxxx 0001 01rr 1 - - - 5
+ LD rr, (PC+A) 1110 0001 0001 01rr 1 - - - 6
+ LD rr, (DE) 1110 0010 0001 01rr 1 - - - 4
+ LD rr, (HL) 1110 0011 0001 01rr 1 - - - 4
+ LD rr, (HL+d) 1110 0100 dddd dddd 0001 01rr 1 - - - 6
+ LD rr, (HL+C) 1110 0101 0001 01rr 1 - - - 6
+ LD rr, (HL+) not listed, invalid due to 16-bit op? ? ? ? ? ?
+ LD rr, (-HL) not listed, invalid due to 16-bit op? ? ? ? ? ?
+
+ aka LD rr, (src)
+ */
+ m_cycles += 4;
+
const uint16_t val = RM16(srcaddr);
set_reg16(opbyte1 & 0x3, val);
set_JF();
@@ -133,7 +133,21 @@ void tlcs870_device::do_LD_rr_insrc(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_INC_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // INC (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ INC (x) not listed, redundant encoding? ? ? ? ? ?
+ INC (PC+A) 1110 0001 0010 0000 C Z - - 6
+ INC (DE) 1110 0010 0010 0000 C Z - - 4
+ INC (HL) not listed, redundant encoding? ? ? ? ? ?
+ INC (HL+d) 1110 0100 dddd dddd 0010 0000 C Z - - 6
+ INC (HL+C) 1110 0101 0010 0000 C Z - - 6
+ INC (HL+) 1110 0110 0010 0000 C Z - - 5
+ INC (-HL) 1110 0111 0010 0000 C Z - - 5
+
+ aka INC (src)
+ */
+ m_cycles += 4;
+
uint8_t val = RM8(srcaddr);
val++;
@@ -153,7 +167,21 @@ void tlcs870_device::do_INC_insrc(const uint8_t opbyte0, const uint8_t opbyte1,
void tlcs870_device::do_DEC_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // DEC (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ DEC (x) not listed, redundant encoding? ? ? ? ? ?
+ DEC (PC+A) 1110 0001 0010 1000 C Z - - 6
+ DEC (DE) 1110 0010 0010 1000 C Z - - 4
+ DEC (HL) not listed, redundant encoding? ? ? ? ? ?
+ DEC (HL+d) 1110 0100 dddd dddd 0010 1000 C Z - - 6
+ DEC (HL+C) 1110 0101 0010 1000 C Z - - 6
+ DEC (HL+) 1110 0110 0010 1000 C Z - - 5
+ DEC (-HL) 1110 0111 0010 1000 C Z - - 5
+
+ aka DEC (src)
+ */
+ m_cycles += 4;
+
uint8_t val = RM8(srcaddr);
val--;
@@ -173,7 +201,7 @@ void tlcs870_device::do_DEC_insrc(const uint8_t opbyte0, const uint8_t opbyte1,
}
else
{
- set_ZF();
+ clear_ZF();
}
WM8(srcaddr, val);
@@ -181,8 +209,22 @@ void tlcs870_device::do_DEC_insrc(const uint8_t opbyte0, const uint8_t opbyte1,
void tlcs870_device::do_ROLD_A_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // ROLD A,(src)
- // 12-bit left rotation using lower 4 bits of REG_A and content of (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ROLD A, (x) 1110 0000 xxxx xxxx 0000 1000 1 0 0 0 8
+ ROLD A, (PC+A) not listed, invalid? ? ? ? ? ?
+ ROLD A, (DE) 1110 0010 0000 1000 1 0 0 0 7
+ ROLD A, (HL) 1110 0011 0000 1000 1 0 0 0 7
+ ROLD A, (HL+d) 1110 0100 dddd dddd 0000 1000 1 0 0 0 9
+ ROLD A, (HL+C) 1110 0101 0000 1000 1 0 0 0 9
+ ROLD A, (HL+) 1110 0110 0000 1000 1 0 0 0 8
+ ROLD A, (-HL) 1110 0111 0000 1000 1 0 0 0 8
+
+ aka ROLD A,(src)
+ 12-bit left rotation using lower 4 bits of REG_A and content of (src)
+ */
+ m_cycles += 7;
+
const uint8_t val = RM8(srcaddr);
const uint8_t reg = get_reg8(REG_A);
@@ -193,13 +235,27 @@ void tlcs870_device::do_ROLD_A_insrc(const uint8_t opbyte0, const uint8_t opbyte
set_reg8(REG_A, tempa);
WM8(srcaddr, tempval);
- // TODO: flags
+ set_JF();
}
void tlcs870_device::do_RORD_A_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // RORD A,(src)
- // 12-bit right rotation using lower 4 bits of REG_A and content of (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ RORD A, (x) 1110 0000 xxxx xxxx 0000 1001 1 0 0 0 8
+ RORD A, (PC+A) not listed, invalid? ? ? ? ? ?
+ RORD A, (DE) 1110 0010 0000 1001 1 0 0 0 7
+ RORD A, (HL) 1110 0011 0000 1001 1 0 0 0 7
+ RORD A, (HL+d) 1110 0100 dddd dddd 0000 1001 1 0 0 0 9
+ RORD A, (HL+C) 1110 0101 0000 1001 1 0 0 0 9
+ RORD A, (HL+) 1110 0110 0000 1001 1 0 0 0 8
+ RORD A, (-HL) 1110 0111 0000 1001 1 0 0 0 8
+
+ aka RORD A,(src)
+ 12-bit right rotation using lower 4 bits of REG_A and content of (src)
+ */
+ m_cycles += 7;
+
const uint8_t val = RM8(srcaddr);
const uint8_t reg = get_reg8(REG_A);
@@ -210,15 +266,28 @@ void tlcs870_device::do_RORD_A_insrc(const uint8_t opbyte0, const uint8_t opbyte
set_reg8(REG_A, tempa);
WM8(srcaddr, tempval);
- // TODO: flags
+ set_JF();
}
void tlcs870_device::do_LD_inx_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // LD (x),(src)
- // invalid if (src) is also (x) ? (not specified)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x), (x) not listed, invalid? or redundant? ? ? ? ? ?
+ LD (x), (PC+A) 1110 0001 0010 0110 xxxx xxxx 1 U - - 7
+ LD (x), (DE) 1110 0010 0010 0110 xxxx xxxx 1 U - - 5
+ LD (x), (HL) 1110 0011 0010 0110 xxxx xxxx 1 U - - 5
+ LD (x), (HL+d) 1110 0100 dddd dddd 0010 0110 xxxx xxxx 1 U - - 7
+ LD (x), (HL+C) 1110 0101 0010 0110 xxxx xxxx 1 U - - 7
+ LD (x), (HL+) not listed, invalid? ? ? ? ? ?
+ LD (x), (-HL) not listed, invalid? ? ? ? ? ?
+
+ aka LD (x),(src)
+ */
+ m_cycles += 5;
+
const uint16_t x = READ8(); // get address x
const uint8_t val = RM8(srcaddr);
WM8(x, val);
@@ -229,11 +298,23 @@ void tlcs870_device::do_LD_inx_insrc(const uint8_t opbyte0, const uint8_t opbyte
void tlcs870_device::do_LD_inHL_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // LD (HL),(src)
- const uint8_t val = RM8(srcaddr);
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (HL), (x) 1110 0000 xxxx xxxx 0010 0111 1 Z - - 5
+ LD (HL), (PC+A) 1110 0001 0010 0111 1 Z - - 6
+ LD (HL), (DE) 1110 0010 0010 0111 1 Z - - 4
+ LD (HL), (HL) 1110 0011 0010 0111 1 Z - - 4
+ LD (HL), (HL+d) 1110 0100 dddd dddd 0010 0111 1 Z - - 6
+ LD (HL), (HL+C) 1110 0101 0010 0111 1 Z - - 6
+ LD (HL), (HL+) not listed, invalid? ? ? ? ? ?
+ LD (HL), (-HL) not listed, invalid? ? ? ? ? ?
+
+ aka LD (HL),(src)
+ */
+ m_cycles += 4;
+ const uint8_t val = RM8(srcaddr);
const uint16_t dstaddr = get_reg16(REG_HL);
-
WM8(dstaddr, val);
set_JF();
@@ -244,7 +325,21 @@ void tlcs870_device::do_LD_inHL_insrc(const uint8_t opbyte0, const uint8_t opbyt
void tlcs870_device::do_LD_r_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // LD r, (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD r, (x) 1110 0000 xxxx xxxx 0101 1rrr 1 Z - - 4
+ LD r, (PC+A) 1110 0001 0101 1rrr 1 Z - - 5
+ LD r, (DE) 1110 0010 0101 1rrr 1 Z - - 3
+ LD r, (HL) 1110 0011 0101 1rrr 1 Z - - 3
+ LD r, (HL+d) 1110 0100 dddd dddd 0101 1rrr 1 Z - - 5
+ LD r, (HL+C) 1110 0101 0101 1rrr 1 Z - - 5
+ LD r, (HL+) 1110 0110 0101 1rrr 1 Z - - 4 (invalid if r is H or L)
+ LD r, (-HL) 1110 0111 0101 1rrr 1 Z - - 4
+
+ aka LD r, (src)
+ */
+ m_cycles += 3;
+
const uint8_t val = RM8(srcaddr);
set_reg8(opbyte1 & 0x7, val);
@@ -257,7 +352,21 @@ void tlcs870_device::do_LD_r_insrc(const uint8_t opbyte0, const uint8_t opbyte1,
void tlcs870_device::do_MCMP_insrc_n(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // MCMP (src), n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ MCMP (x), n 1110 0000 xxxx xxxx 0010 1111 nnnn nnnn Z Z C H 6
+ MCMP (PC+A), n 1110 0001 0010 1111 nnnn nnnn Z Z C H 7
+ MCMP (DE), n 1110 0010 0010 1111 nnnn nnnn Z Z C H 5
+ MCMP (HL), n 1110 0011 0010 1111 nnnn nnnn Z Z C H 5
+ MCMP (HL+d), n 1110 0100 dddd dddd 0010 1111 nnnn nnnn Z Z C H 7
+ MCMP (HL+C), n 1110 0101 0010 1111 nnnn nnnn Z Z C H 7
+ MCMP (HL+), n 1110 0110 0010 1111 nnnn nnnn Z Z C H 6
+ MCMP (-HL), n 1110 0111 0010 1111 nnnn nnnn Z Z C H 6
+
+ aka MCMP (src), n
+ */
+ m_cycles += 5;
+
const uint8_t n = READ8();
const uint8_t val = RM8(srcaddr);
@@ -292,7 +401,21 @@ void tlcs870_device::do_MCMP_insrc_n(const uint8_t opbyte0, const uint8_t opbyte
void tlcs870_device::do_XCH_r_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // XCH r,(src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ XCH r, (x) 1110 0000 xxxx xxxx 1010 1rrr 1 Z - - 5
+ XCH r, (PC+A) 1110 0001 1010 1rrr 1 Z - - 6
+ XCH r, (DE) 1110 0010 1010 1rrr 1 Z - - 4
+ XCH r, (HL) 1110 0011 1010 1rrr 1 Z - - 4
+ XCH r, (HL+d) 1110 0100 dddd dddd 1010 1rrr 1 Z - - 6
+ XCH r, (HL+C) 1110 0101 1010 1rrr 1 Z - - 6
+ XCH r, (HL+) 1110 0110 1010 1rrr 1 Z - - 5 (invalid if r is H or L)
+ XCH r, (-HL) 1110 0111 1010 1rrr 1 Z - - 5
+
+ aka XCH r,(src)
+ */
+ m_cycles += 4;
+
const uint8_t val = RM8(srcaddr);
const uint8_t temp = get_reg8(opbyte1 & 0x7);
@@ -318,46 +441,280 @@ void tlcs870_device::do_XCH_r_insrc(const uint8_t opbyte0, const uint8_t opbyte1
void tlcs870_device::do_ALUOP_insrc_inHL(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // (ALU OP) (src), (HL)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC (x), (HL) 1110 0000 xxxx xxxx 0110 0000 C Z C H 7
+ ADDC (PC+A), (HL) 1110 0001 0110 0000 C Z C H 8
+ ADDC (DE), (HL) 1110 0010 0110 0000 C Z C H 6
+ ADDC (HL), (HL) 1110 0011 0110 0000 C Z C H 6
+ ADDC (HL+d), (HL) 1110 0100 dddd dddd 0110 0000 C Z C H 8
+ ADDC (HL+C), (HL) 1110 0101 0110 0000 C Z C H 8
+ ADDC (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ ADDC (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ ADD (x), (HL) 1110 0000 xxxx xxxx 0110 0001 C Z C H 7
+ ADD (PC+A), (HL) 1110 0001 0110 0001 C Z C H 8
+ ADD (DE), (HL) 1110 0010 0110 0001 C Z C H 6
+ ADD (HL), (HL) 1110 0011 0110 0001 C Z C H 6
+ ADD (HL+d), (HL) 1110 0100 dddd dddd 0110 0001 C Z C H 8
+ ADD (HL+C), (HL) 1110 0101 0110 0001 C Z C H 8
+ ADD (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ ADD (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ SUBB (x), (HL) 1110 0000 xxxx xxxx 0110 0010 C Z C H 7
+ SUBB (PC+A), (HL) 1110 0001 0110 0010 C Z C H 8
+ SUBB (DE), (HL) 1110 0010 0110 0010 C Z C H 6
+ SUBB (HL), (HL) 1110 0011 0110 0010 C Z C H 6
+ SUBB (HL+d), (HL) 1110 0100 dddd dddd 0110 0010 C Z C H 8
+ SUBB (HL+C), (HL) 1110 0101 0110 0010 C Z C H 8
+ SUBB (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ SUBB (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ SUB (x), (HL) 1110 0000 xxxx xxxx 0110 0011 C Z C H 7
+ SUB (PC+A), (HL) 1110 0001 0110 0011 C Z C H 8
+ SUB (DE), (HL) 1110 0010 0110 0011 C Z C H 6
+ SUB (HL), (HL) 1110 0011 0110 0011 C Z C H 6
+ SUB (HL+d), (HL) 1110 0100 dddd dddd 0110 0011 C Z C H 8
+ SUB (HL+C), (HL) 1110 0101 0110 0011 C Z C H 8
+ SUB (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ SUB (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ AND (x), (HL) 1110 0000 xxxx xxxx 0110 0100 Z Z - - 7
+ AND (PC+A), (HL) 1110 0001 0110 0100 Z Z - - 8
+ AND (DE), (HL) 1110 0010 0110 0100 Z Z - - 6
+ AND (HL), (HL) 1110 0011 0110 0100 Z Z - - 6
+ AND (HL+d), (HL) 1110 0100 dddd dddd 0110 0100 Z Z - - 8
+ AND (HL+C), (HL) 1110 0101 0110 0100 Z Z - - 8
+ AND (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ AND (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ XOR (x), (HL) 1110 0000 xxxx xxxx 0110 0101 Z Z - - 7
+ XOR (PC+A), (HL) 1110 0001 0110 0101 Z Z - - 8
+ XOR (DE), (HL) 1110 0010 0110 0101 Z Z - - 6
+ XOR (HL), (HL) 1110 0011 0110 0101 Z Z - - 6
+ XOR (HL+d), (HL) 1110 0100 dddd dddd 0110 0101 Z Z - - 8
+ XOR (HL+C), (HL) 1110 0101 0110 0101 Z Z - - 8
+ XOR (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ XOR (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ OR (x), (HL) 1110 0000 xxxx xxxx 0110 0110 Z Z - - 7
+ OR (PC+A), (HL) 1110 0001 0110 0110 Z Z - - 8
+ OR (DE), (HL) 1110 0010 0110 0110 Z Z - - 6
+ OR (HL), (HL) 1110 0011 0110 0110 Z Z - - 6
+ OR (HL+d), (HL) 1110 0100 dddd dddd 0110 0110 Z Z - - 8
+ OR (HL+C), (HL) 1110 0101 0110 0110 Z Z - - 8
+ OR (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ OR (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ CMP (x), (HL) 1110 0000 xxxx xxxx 0110 0111 Z Z C H 6
+ CMP (PC+A), (HL) 1110 0001 0110 0111 Z Z C H 7
+ CMP (DE), (HL) 1110 0010 0110 0111 Z Z C H 5
+ CMP (HL), (HL) 1110 0011 0110 0111 Z Z C H 5
+ CMP (HL+d), (HL) 1110 0100 dddd dddd 0110 0111 Z Z C H 7
+ CMP (HL+C), (HL) 1110 0101 0110 0111 Z Z C H 7
+ CMP (HL+), (HL) not listed, invalid? ? ? ? ? ?
+ CMP (-HL), (HL) not listed, invalid? ? ? ? ? ?
+
+ aka (ALU OP) (src), (HL)
+ */
+ m_cycles += 6;
+
const int aluop = (opbyte1 & 0x7);
const uint8_t val = RM8(srcaddr);
const uint16_t HL = get_reg16(REG_HL);
- const uint8_t result = do_alu(aluop, val, RM8(HL));
+ const uint8_t result = do_alu_8bit(aluop, val, RM8(HL));
if (aluop != 0x07) // CMP doesn't write back
{
+ m_cycles -= 1; // one less for CMP here?
WM8(srcaddr, result);
}
}
void tlcs870_device::do_ALUOP_insrc_n(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // (ALU OP) (src), n
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC (x), n 1110 0000 xxxx xxxx 0111 0000 nnnn nnnn C Z C H 6
+ ADDC (PC+A), n 1110 0001 0111 0000 nnnn nnnn C Z C H 7
+ ADDC (DE), n 1110 0010 0111 0000 nnnn nnnn C Z C H 5
+ ADDC (HL), n 1110 0011 0111 0000 nnnn nnnn C Z C H 5
+ ADDC (HL+d), n 1110 0100 dddd dddd 0111 0000 nnnn nnnn C Z C H 7
+ ADDC (HL+C), n 1110 0101 0111 0000 nnnn nnnn C Z C H 7
+ ADDC (HL+), n 1110 0110 0111 0000 nnnn nnnn C Z C H 6
+ ADDC (-HL), n 1110 0111 0111 0000 nnnn nnnn C Z C H 6
+
+ ADD (x), n 1110 0000 xxxx xxxx 0111 0001 nnnn nnnn C Z C H 6
+ ADD (PC+A), n 1110 0001 0111 0001 nnnn nnnn C Z C H 7
+ ADD (DE), n 1110 0010 0111 0001 nnnn nnnn C Z C H 5
+ ADD (HL), n 1110 0011 0111 0001 nnnn nnnn C Z C H 5
+ ADD (HL+d), n 1110 0100 dddd dddd 0111 0001 nnnn nnnn C Z C H 7
+ ADD (HL+C), n 1110 0101 0111 0001 nnnn nnnn C Z C H 7
+ ADD (HL+), n 1110 0110 0111 0001 nnnn nnnn C Z C H 6
+ ADD (-HL), n 1110 0111 0111 0001 nnnn nnnn C Z C H 6
+
+ SUBB (x), n 1110 0000 xxxx xxxx 0111 0010 nnnn nnnn C Z C H 6
+ SUBB (PC+A), n 1110 0001 0111 0010 nnnn nnnn C Z C H 7
+ SUBB (DE), n 1110 0010 0111 0010 nnnn nnnn C Z C H 5
+ SUBB (HL), n 1110 0011 0111 0010 nnnn nnnn C Z C H 5
+ SUBB (HL+d), n 1110 0100 dddd dddd 0111 0010 nnnn nnnn C Z C H 7
+ SUBB (HL+C), n 1110 0101 0111 0010 nnnn nnnn C Z C H 7
+ SUBB (HL+), n 1110 0110 0111 0010 nnnn nnnn C Z C H 6
+ SUBB (-HL), n 1110 0111 0111 0010 nnnn nnnn C Z C H 6
+
+ SUB (x), n 1110 0000 xxxx xxxx 0111 0011 nnnn nnnn C Z C H 6
+ SUB (PC+A), n 1110 0001 0111 0011 nnnn nnnn C Z C H 7
+ SUB (DE), n 1110 0010 0111 0011 nnnn nnnn C Z C H 5
+ SUB (HL), n 1110 0011 0111 0011 nnnn nnnn C Z C H 5
+ SUB (HL+d), n 1110 0100 dddd dddd 0111 0011 nnnn nnnn C Z C H 7
+ SUB (HL+C), n 1110 0101 0111 0011 nnnn nnnn C Z C H 7
+ SUB (HL+), n 1110 0110 0111 0011 nnnn nnnn C Z C H 6
+ SUB (-HL), n 1110 0111 0111 0011 nnnn nnnn C Z C H 6
+
+ AND (x), n 1110 0000 xxxx xxxx 0111 0100 nnnn nnnn Z Z - - 6
+ AND (PC+A), n 1110 0001 0111 0100 nnnn nnnn Z Z - - 7
+ AND (DE), n 1110 0010 0111 0100 nnnn nnnn Z Z - - 5
+ AND (HL), n 1110 0011 0111 0100 nnnn nnnn Z Z - - 5
+ AND (HL+d), n 1110 0100 dddd dddd 0111 0100 nnnn nnnn Z Z - - 7
+ AND (HL+C), n 1110 0101 0111 0100 nnnn nnnn Z Z - - 7
+ AND (HL+), n 1110 0110 0111 0100 nnnn nnnn Z Z - - 6
+ AND (-HL), n 1110 0111 0111 0100 nnnn nnnn Z Z - - 6
+
+ XOR (x), n 1110 0000 xxxx xxxx 0111 0101 nnnn nnnn Z Z - - 6
+ XOR (PC+A), n 1110 0001 0111 0101 nnnn nnnn Z Z - - 7
+ XOR (DE), n 1110 0010 0111 0101 nnnn nnnn Z Z - - 5
+ XOR (HL), n 1110 0011 0111 0101 nnnn nnnn Z Z - - 5
+ XOR (HL+d), n 1110 0100 dddd dddd 0111 0101 nnnn nnnn Z Z - - 7
+ XOR (HL+C), n 1110 0101 0111 0101 nnnn nnnn Z Z - - 7
+ XOR (HL+), n 1110 0110 0111 0101 nnnn nnnn Z Z - - 6
+ XOR (-HL), n 1110 0111 0111 0101 nnnn nnnn Z Z - - 6
+
+ OR (x), n 1110 0000 xxxx xxxx 0111 0110 nnnn nnnn Z Z - - 6
+ OR (PC+A), n 1110 0001 0111 0110 nnnn nnnn Z Z - - 7
+ OR (DE), n 1110 0010 0111 0110 nnnn nnnn Z Z - - 5
+ OR (HL), n 1110 0011 0111 0110 nnnn nnnn Z Z - - 5
+ OR (HL+d), n 1110 0100 dddd dddd 0111 0110 nnnn nnnn Z Z - - 7
+ OR (HL+C), n 1110 0101 0111 0110 nnnn nnnn Z Z - - 7
+ OR (HL+), n 1110 0110 0111 0110 nnnn nnnn Z Z - - 6
+ OR (-HL), n 1110 0111 0111 0110 nnnn nnnn Z Z - - 6
+
+ CMP (x), n 1110 0000 xxxx xxxx 0111 0111 nnnn nnnn Z Z C H 5
+ CMP (PC+A), n 1110 0001 0111 0111 nnnn nnnn Z Z C H 6
+ CMP (DE), n 1110 0010 0111 0111 nnnn nnnn Z Z C H 4
+ CMP (HL), n 1110 0011 0111 0111 nnnn nnnn Z Z C H 4
+ CMP (HL+d), n 1110 0100 dddd dddd 0111 0111 nnnn nnnn Z Z C H 6
+ CMP (HL+C), n 1110 0101 0111 0111 nnnn nnnn Z Z C H 6
+ CMP (HL+), n 1110 0110 0111 0111 nnnn nnnn Z Z C H 5
+ CMP (-HL), n 1110 0111 0111 0111 nnnn nnnn Z Z C H 5
+
+ aka (ALU OP) (src), n
+ */
+ m_cycles += 5;
+
const uint8_t n = READ8();
const int aluop = (opbyte1 & 0x7);
const uint8_t val = RM8(srcaddr);
- const uint8_t result = do_alu(aluop, val, n);
+ const uint8_t result = do_alu_8bit(aluop, val, n);
if (aluop != 0x07) // CMP doesn't write back
{
+ m_cycles -= 1; // one less for CMP here?
WM8(srcaddr, result);
}
}
void tlcs870_device::do_ALUOP_A_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // (ALU OP) A, (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ ADDC A, (x) 1110 0000 xxxx xxxx 0111 1000 C Z C H 4
+ ADDC A, (PC+A) 1110 0001 0111 1000 C Z C H 5
+ ADDC A, (DE) 1110 0010 0111 1000 C Z C H 3
+ ADDC A, (HL) 1110 0011 0111 1000 C Z C H 3
+ ADDC A, (HL+d) 1110 0100 dddd dddd 0111 1000 C Z C H 5
+ ADDC A, (HL+C) 1110 0101 0111 1000 C Z C H 5
+ ADDC A, (HL+) 1110 0110 0111 1000 C Z C H 4
+ ADDC A, (-HL) 1110 0111 0111 1000 C Z C H 4
+
+ ADD A, (x) 1110 0000 xxxx xxxx 0111 1001 C Z C H 4
+ ADD A, (PC+A) 1110 0001 0111 1001 C Z C H 5
+ ADD A, (DE) 1110 0010 0111 1001 C Z C H 3
+ ADD A, (HL) 1110 0011 0111 1001 C Z C H 3
+ ADD A, (HL+d) 1110 0100 dddd dddd 0111 1001 C Z C H 5
+ ADD A, (HL+C) 1110 0101 0111 1001 C Z C H 5
+ ADD A, (HL+) 1110 0110 0111 1001 C Z C H 4
+ ADD A, (-HL) 1110 0111 0111 1001 C Z C H 4
+
+ SUBB A, (x) 1110 0000 xxxx xxxx 0111 1010 C Z C H 4
+ SUBB A, (PC+A) 1110 0001 0111 1010 C Z C H 5
+ SUBB A, (DE) 1110 0010 0111 1010 C Z C H 3
+ SUBB A, (HL) 1110 0011 0111 1010 C Z C H 3
+ SUBB A, (HL+d) 1110 0100 dddd dddd 0111 1010 C Z C H 5
+ SUBB A, (HL+C) 1110 0101 0111 1010 C Z C H 5
+ SUBB A, (HL+) 1110 0110 0111 1010 C Z C H 4
+ SUBB A, (-HL) 1110 0111 0111 1010 C Z C H 4
+
+ SUB A, (x) 1110 0000 xxxx xxxx 0111 1011 C Z C H 4
+ SUB A, (PC+A) 1110 0001 0111 1011 C Z C H 5
+ SUB A, (DE) 1110 0010 0111 1011 C Z C H 3
+ SUB A, (HL) 1110 0011 0111 1011 C Z C H 3
+ SUB A, (HL+d) 1110 0100 dddd dddd 0111 1011 C Z C H 5
+ SUB A, (HL+C) 1110 0101 0111 1011 C Z C H 5
+ SUB A, (HL+) 1110 0110 0111 1011 C Z C H 4
+ SUB A, (-HL) 1110 0111 0111 1011 C Z C H 4
+
+ AND A, (x) 1110 0000 xxxx xxxx 0111 1100 Z Z - - 4
+ AND A, (PC+A) 1110 0001 0111 1100 Z Z - - 5
+ AND A, (DE) 1110 0010 0111 1100 Z Z - - 3
+ AND A, (HL) 1110 0011 0111 1100 Z Z - - 3
+ AND A, (HL+d) 1110 0100 dddd dddd 0111 1100 Z Z - - 5
+ AND A, (HL+C) 1110 0101 0111 1100 Z Z - - 5
+ AND A, (HL+) 1110 0110 0111 1100 Z Z - - 4
+ AND A, (-HL) 1110 0111 0111 1100 Z Z - - 4
+
+ XOR A, (x) 1110 0000 xxxx xxxx 0111 1101 Z Z - - 4
+ XOR A, (PC+A) 1110 0001 0111 1101 Z Z - - 5
+ XOR A, (DE) 1110 0010 0111 1101 Z Z - - 3
+ XOR A, (HL) 1110 0011 0111 1101 Z Z - - 3
+ XOR A, (HL+d) 1110 0100 dddd dddd 0111 1101 Z Z - - 5
+ XOR A, (HL+C) 1110 0101 0111 1101 Z Z - - 5
+ XOR A, (HL+) 1110 0110 0111 1101 Z Z - - 4
+ XOR A, (-HL) 1110 0111 0111 1101 Z Z - - 4
+
+ OR A, (x) 1110 0000 xxxx xxxx 0111 1110 Z Z - - 4
+ OR A, (PC+A) 1110 0001 0111 1110 Z Z - - 5
+ OR A, (DE) 1110 0010 0111 1110 Z Z - - 3
+ OR A, (HL) 1110 0011 0111 1110 Z Z - - 3
+ OR A, (HL+d) 1110 0100 dddd dddd 0111 1110 Z Z - - 5
+ OR A, (HL+C) 1110 0101 0111 1110 Z Z - - 5
+ OR A, (HL+) 1110 0110 0111 1110 Z Z - - 4
+ OR A, (-HL) 1110 0111 0111 1110 Z Z - - 4
+
+ CMP A, (x) 1110 0000 xxxx xxxx 0111 1111 Z Z C H 4
+ CMP A, (PC+A) 1110 0001 0111 1111 Z Z C H 5
+ CMP A, (DE) 1110 0010 0111 1111 Z Z C H 3
+ CMP A, (HL) 1110 0011 0111 1111 Z Z C H 3
+ CMP A, (HL+d) 1110 0100 dddd dddd 0111 1111 Z Z C H 5
+ CMP A, (HL+C) 1110 0101 0111 1111 Z Z C H 5
+ CMP A, (HL+) 1110 0110 0111 1111 Z Z C H 4
+ CMP A, (-HL) 1110 0111 0111 1111 Z Z C H 4
+
+ aka (ALU OP) A, (src)
+ */
+ m_cycles += 3;
+
const int aluop = (opbyte1 & 0x7);
const uint8_t val = RM8(srcaddr);
- const uint8_t result = do_alu(aluop, get_reg8(REG_A), val);
+ const uint8_t result = do_alu_8bit(aluop, get_reg8(REG_A), val);
if (aluop != 0x07) // CMP doesn't write back
{
+ // NOT one less for CMP here?
set_reg8(REG_A, result);
}
}
@@ -368,7 +725,21 @@ void tlcs870_device::do_ALUOP_A_insrc(const uint8_t opbyte0, const uint8_t opbyt
void tlcs870_device::do_CALL_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // CALL (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CALL (x) 1110 0000 xxxx xxxx 1111 1100 - - - - 9
+ CALL (PC+A) 1110 0001 1111 1100 - - - - 10
+ CALL (DE) 1110 0010 1111 1100 - - - - 8
+ CALL (HL) 1110 0011 1111 1100 - - - - 8
+ CALL (HL+d) 1110 0100 dddd dddd 1111 1100 - - - - 10
+ CALL (HL+C) 1110 0101 1111 1100 - - - - 10
+ CALL (HL+) not listed, invalid due to 16-bit op? ? ? ? ? ?
+ CALL (-HL) not listed, invalid due to 16-bit op? ? ? ? ? ?
+
+ aka CALL (src)
+ */
+ m_cycles += 8;
+
const uint16_t val = RM16(srcaddr);
WM16(m_sp.d - 1, m_addr);
@@ -381,7 +752,21 @@ void tlcs870_device::do_CALL_insrc(const uint8_t opbyte0, const uint8_t opbyte1,
void tlcs870_device::do_JP_insrc(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // JP (src)
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ JP (x) 1110 0000 xxxx xxxx 1111 1110 1 - - - 6
+ JP (PC+A) 1110 0001 1111 1110 1 - - - 7
+ JP (DE) 1110 0010 1111 1110 1 - - - 5
+ JP (HL) 1110 0011 1111 1110 1 - - - 5
+ JP (HL+d) 1110 0100 dddd dddd 1111 1110 1 - - - 7
+ JP (HL+C) 1110 0101 1111 1110 1 - - - 7
+ JP (HL+) not listed, invalid due to 16-bit op? ? ? ? ? ?
+ JP (-HL) not listed, invalid due to 16-bit op? ? ? ? ? ?
+
+ aka JP (src)
+ */
+ m_cycles += 5;
+
const uint16_t val = RM16(srcaddr);
m_addr = val;
set_JF();
@@ -393,7 +778,21 @@ void tlcs870_device::do_JP_insrc(const uint8_t opbyte0, const uint8_t opbyte1, c
void tlcs870_device::do_XOR_CF_insrcbit(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // XOR CF,(src).b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ XOR CF, (x).b 1110 0000 xxxx xxxx 1101 0bbb ~C - * - 4
+ XOR CF, (PC+A).b 1110 0001 1101 0bbb ~C - * - 5
+ XOR CF, (DE).b 1110 0010 1101 0bbb ~C - * - 3
+ XOR CF, (HL).b 1110 0011 1101 0bbb ~C - * - 3
+ XOR CF, (HL+d).b 1110 0100 dddd dddd 1101 0bbb ~C - * - 5
+ XOR CF, (HL+C).b 1110 0101 1101 0bbb ~C - * - 5
+ XOR CF, (HL+).b 1110 0110 1101 0bbb ~C - * - 4
+ XOR CF, (-HL).b 1110 0111 1101 0bbb ~C - * - 4
+
+ aka XOR CF,(src).b
+ */
+ m_cycles += 3;
+
const uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -434,7 +833,21 @@ void tlcs870_device::do_XOR_CF_insrcbit(const uint8_t opbyte0, const uint8_t opb
void tlcs870_device::do_LD_insrcbit_CF(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // LD (src).b,CF
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD (x).b, CF 1110 0000 xxxx xxxx 1100 1bbb 1 - - - 5
+ LD (PC+A).b, CF 1110 0001 1100 1bbb 1 - - - 6
+ LD (DE).b, CF 1110 0010 1100 1bbb 1 - - - 4
+ LD (HL).b, CF 1110 0011 1100 1bbb 1 - - - 4
+ LD (HL+d).b, CF 1110 0100 dddd dddd 1100 1bbb 1 - - - 6
+ LD (HL+C).b, CF 1110 0101 1100 1bbb 1 - - - 6
+ LD (HL+).b, CF 1110 0110 1100 1bbb 1 - - - 5
+ LD (-HL).b, CF 1110 0111 1100 1bbb 1 - - - 5
+
+ aka LD (src).b,CF
+ */
+ m_cycles += 4;
+
uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -457,7 +870,21 @@ void tlcs870_device::do_LD_insrcbit_CF(const uint8_t opbyte0, const uint8_t opby
void tlcs870_device::do_CPL_insrcbit(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // CPL (src).b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CPL (x).b 1110 0000 xxxx xxxx 1100 0bbb Z * - - 5
+ CPL (PC+A).b 1110 0001 1100 0bbb Z * - - 6
+ CPL (DE).b 1110 0010 1100 0bbb Z * - - 4
+ CPL (HL).b 1110 0011 1100 0bbb Z * - - 4
+ CPL (HL+d).b 1110 0100 dddd dddd 1100 0bbb Z * - - 6
+ CPL (HL+C).b 1110 0101 1100 0bbb Z * - - 6
+ CPL (HL+).b 1110 0110 1100 0bbb Z * - - 5
+ CPL (-HL).b 1110 0111 1100 0bbb Z * - - 5
+
+ aka CPL (src).b
+ */
+ m_cycles += 4;
+
uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -485,7 +912,21 @@ void tlcs870_device::do_CPL_insrcbit(const uint8_t opbyte0, const uint8_t opbyte
void tlcs870_device::do_LD_CF_insrcbit(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // LD CF,(src).b aka TEST (src).b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ LD CF, (x).b 1110 0000 xxxx xxxx 1101 1bbb ~C - * - 4
+ LD CF, (PC+A).b 1110 0001 1101 1bbb ~C - * - 5
+ LD CF, (DE).b 1110 0010 1101 1bbb ~C - * - 3
+ LD CF, (HL).b 1110 0011 1101 1bbb ~C - * - 3
+ LD CF, (HL+d).b 1110 0100 dddd dddd 1101 1bbb ~C - * - 5
+ LD CF, (HL+C).b 1110 0101 1101 1bbb ~C - * - 5
+ LD CF, (HL+).b 1110 0110 1101 1bbb ~C - * - 4
+ LD CF, (-HL).b 1110 0111 1101 1bbb ~C - * - 4
+
+ aka LD CF,(src).b or TEST (src).b
+ */
+ m_cycles += 3;
+
const uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -500,7 +941,21 @@ void tlcs870_device::do_LD_CF_insrcbit(const uint8_t opbyte0, const uint8_t opby
void tlcs870_device::do_SET_insrcbit(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // SET (src).b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ SET (x).b 1110 0000 xxxx xxxx 0100 0bbb Z * - - 5
+ SET (PC+A).b 1110 0001 0100 0bbb Z * - - 6
+ SET (DE).b 1110 0010 0100 0bbb Z * - - 4
+ SET (HL).b 1110 0011 0100 0bbb Z * - - 4
+ SET (HL+d).b 1110 0100 dddd dddd 0100 0bbb Z * - - 6
+ SET (HL+C).b 1110 0101 0100 0bbb Z * - - 6
+ SET (HL+).b 1110 0110 0100 0bbb Z * - - 5
+ SET (-HL).b 1110 0111 0100 0bbb Z * - - 5
+
+ aka SET (src).b
+ */
+ m_cycles += 4;
+
uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte1 & 0x7;
@@ -524,7 +979,21 @@ void tlcs870_device::do_SET_insrcbit(const uint8_t opbyte0, const uint8_t opbyte
void tlcs870_device::do_CLR_insrcbit(const uint8_t opbyte0, const uint8_t opbyte1, const uint16_t srcaddr)
{
- // CLR (src).b
+ /*
+ OP (opbyte0) (immval0) (opbyte1) (immval1) (immval2) JF ZF CF HF cycles
+ CLR (x).b 1110 0000 xxxx xxxx 0100 1bbb Z * - - 5
+ CLR (PC+A).b 1110 0001 0100 1bbb Z * - - 6
+ CLR (DE).b 1110 0010 0100 1bbb Z * - - 4
+ CLR (HL).b 1110 0011 0100 1bbb Z * - - 4
+ CLR (HL+d).b 1110 0100 dddd dddd 0100 1bbb Z * - - 6
+ CLR (HL+C).b 1110 0101 0100 1bbb Z * - - 6
+ CLR (HL+).b 1110 0110 0100 1bbb Z * - - 5
+ CLR (-HL).b 1110 0111 0100 1bbb Z * - - 5
+
+ aka CLR (src).b
+ */
+ m_cycles += 4;
+
uint8_t val = RM8(srcaddr);
const uint8_t bitpos = opbyte1 & 0x7;
diff --git a/src/devices/machine/applefdc.h b/src/devices/machine/applefdc.h
index 0190b57e4e6..3e70a8630ab 100644
--- a/src/devices/machine/applefdc.h
+++ b/src/devices/machine/applefdc.h
@@ -72,6 +72,8 @@ public:
// accessor
uint8_t get_lines();
+ virtual void device_reset() override;
+
protected:
enum applefdc_t
{
@@ -85,7 +87,6 @@ protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// other protecteds
diff --git a/src/devices/machine/ripple_counter.h b/src/devices/machine/ripple_counter.h
index c322b4fa718..e61c1ec5ef8 100644
--- a/src/devices/machine/ripple_counter.h
+++ b/src/devices/machine/ripple_counter.h
@@ -34,7 +34,7 @@ class ripple_counter_device : public device_t, public device_rom_interface
{
public:
// construction/destruction
- ripple_counter_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ ripple_counter_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
// configuration
void set_stages(u8 stages) { m_count_mask = (1U << stages) - 1; set_rom_addr_width(stages); }
diff --git a/src/devices/sound/2203intf.cpp b/src/devices/sound/2203intf.cpp
index 8b415d08b5d..faf3072e94e 100644
--- a/src/devices/sound/2203intf.cpp
+++ b/src/devices/sound/2203intf.cpp
@@ -40,7 +40,7 @@ void ym2203_device::device_timer(emu_timer &timer, device_timer_id id, int param
void ym2203_device::timer_handler(int c, int count, int clock)
{
- if( count == 0 )
+ if( count == 0 || clock == 0)
{ /* Reset FM Timer */
m_timer[c]->enable(false);
}
diff --git a/src/devices/sound/2608intf.cpp b/src/devices/sound/2608intf.cpp
index 959f29e14b1..4dc5bedf02f 100644
--- a/src/devices/sound/2608intf.cpp
+++ b/src/devices/sound/2608intf.cpp
@@ -11,9 +11,6 @@
- Control Write B
- Data Write B
- TODO:
- - fix set_unscaled_clock() changes (currently done only by vgmplay driver)
-
***************************************************************************/
#include "emu.h"
@@ -52,7 +49,7 @@ void ym2608_device::device_timer(emu_timer &timer, device_timer_id id, int param
void ym2608_device::timer_handler(int c,int count,int clock)
{
- if( count == 0 )
+ if( count == 0 || clock == 0 )
{ /* Reset FM Timer */
m_timer[c]->enable(false);
}
@@ -111,6 +108,16 @@ void ym2608_device::device_start()
}
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void ym2608_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 72);
+ ym2608_clock_changed(m_chip, clock(), clock() / 72);
+}
+
+//-------------------------------------------------
// device_stop - device-specific stop
//-------------------------------------------------
diff --git a/src/devices/sound/2608intf.h b/src/devices/sound/2608intf.h
index 7272f5778e9..cf96aa35be9 100644
--- a/src/devices/sound/2608intf.h
+++ b/src/devices/sound/2608intf.h
@@ -32,6 +32,7 @@ protected:
// device-level overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_post_load() override;
virtual void device_stop() override;
virtual void device_reset() override;
diff --git a/src/devices/sound/2610intf.cpp b/src/devices/sound/2610intf.cpp
index ae208511d03..6b2e2886d8c 100644
--- a/src/devices/sound/2610intf.cpp
+++ b/src/devices/sound/2610intf.cpp
@@ -51,7 +51,7 @@ void ym2610_device::device_timer(emu_timer &timer, device_timer_id id, int param
void ym2610_device::timer_handler(int c,int count,int clock)
{
- if( count == 0 )
+ if( count == 0 || clock == 0 )
{ /* Reset FM Timer */
m_timer[c]->enable(false);
}
@@ -129,6 +129,16 @@ void ym2610_device::device_start()
}
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void ym2610_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 72);
+ ym2610_clock_changed(m_chip, clock(), clock() / 72);
+}
+
+//-------------------------------------------------
// device_stop - device-specific stop
//-------------------------------------------------
diff --git a/src/devices/sound/2610intf.h b/src/devices/sound/2610intf.h
index bb25f97b51e..583091a666b 100644
--- a/src/devices/sound/2610intf.h
+++ b/src/devices/sound/2610intf.h
@@ -37,6 +37,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_post_load() override;
virtual void device_stop() override;
virtual void device_reset() override;
diff --git a/src/devices/sound/2612intf.cpp b/src/devices/sound/2612intf.cpp
index 7350d04a624..21ca436a004 100644
--- a/src/devices/sound/2612intf.cpp
+++ b/src/devices/sound/2612intf.cpp
@@ -42,7 +42,7 @@ void ym2612_device::device_timer(emu_timer &timer, device_timer_id id, int param
void ym2612_device::timer_handler(int c,int count,int clock)
{
- if( count == 0 )
+ if( count == 0 || clock == 0 )
{ /* Reset FM Timer */
m_timer[c]->enable(false);
}
diff --git a/src/devices/sound/262intf.cpp b/src/devices/sound/262intf.cpp
index c4da329ecff..905d9afd8b6 100644
--- a/src/devices/sound/262intf.cpp
+++ b/src/devices/sound/262intf.cpp
@@ -109,6 +109,17 @@ void ymf262_device::device_reset()
ymf262_reset_chip(m_chip);
}
+//-------------------------------------------------
+// device_clock_changed - called if the clock
+// changes
+//-------------------------------------------------
+
+void ymf262_device::device_clock_changed()
+{
+ int rate = clock()/288;
+ ymf262_clock_changed(m_chip,clock(),rate);
+ m_stream->set_sample_rate(rate);
+}
READ8_MEMBER( ymf262_device::read )
{
diff --git a/src/devices/sound/262intf.h b/src/devices/sound/262intf.h
index 9f1575ccb01..cefaebd814c 100644
--- a/src/devices/sound/262intf.h
+++ b/src/devices/sound/262intf.h
@@ -26,6 +26,7 @@ protected:
virtual void device_start() override;
virtual void device_stop() override;
virtual void device_reset() override;
+ virtual void device_clock_changed() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
diff --git a/src/devices/sound/8950intf.cpp b/src/devices/sound/8950intf.cpp
index a6f8be7aa2b..da0049f0a91 100644
--- a/src/devices/sound/8950intf.cpp
+++ b/src/devices/sound/8950intf.cpp
@@ -101,6 +101,16 @@ void y8950_device::device_start()
}
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void y8950_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 72);
+ y8950_clock_changed(m_chip, clock(), clock() / 72);
+}
+
+//-------------------------------------------------
// device_stop - device-specific stop
//-------------------------------------------------
diff --git a/src/devices/sound/8950intf.h b/src/devices/sound/8950intf.h
index 83aad8781c0..c1f3163a9ee 100644
--- a/src/devices/sound/8950intf.h
+++ b/src/devices/sound/8950intf.h
@@ -44,6 +44,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_stop() override;
virtual void device_reset() override;
diff --git a/src/devices/sound/c6280.cpp b/src/devices/sound/c6280.cpp
index c0a91f36651..53ac35ede3d 100644
--- a/src/devices/sound/c6280.cpp
+++ b/src/devices/sound/c6280.cpp
@@ -277,14 +277,14 @@ void c6280_device::calculate_clocks()
/* Make waveform frequency table */
for (int i = 0; i < 4096; i += 1)
{
- double step = ((clock() / rate) * 4096) / (i + 1);
+ double step = (16 * 4096) / (i + 1);
m_wave_freq_tab[(1 + i) & 0xFFF] = (uint32_t)step;
}
/* Make noise frequency table */
for (int i = 0; i < 32; i += 1)
{
- double step = ((clock() / rate) * 32) / (i+1);
+ double step = (16 * 32) / (i+1);
m_noise_freq_tab[i] = (uint32_t)step;
}
diff --git a/src/devices/sound/fm.cpp b/src/devices/sound/fm.cpp
index 9213e230b88..e93d009f65f 100644
--- a/src/devices/sound/fm.cpp
+++ b/src/devices/sound/fm.cpp
@@ -3011,6 +3011,14 @@ void * ym2608_init(device_t *device, int clock, int rate, void *pcmrom,int pcmsi
return F2608;
}
+void ym2608_clock_changed(void *chip, int clock, int rate)
+{
+ ym2608_state *F2608 = (ym2608_state *)chip;
+
+ F2608->OPN.ST.clock = clock;
+ F2608->OPN.ST.rate = rate;
+}
+
/* shut down emulator */
void ym2608_shutdown(void *chip)
{
@@ -3683,6 +3691,14 @@ void *ym2610_init(device_t *device, int clock, int rate, void *pcmroma,int pcmsi
return F2610;
}
+void ym2610_clock_changed(void *chip, int clock, int rate)
+{
+ ym2610_state *F2610 = (ym2610_state *)chip;
+
+ F2610->OPN.ST.clock = clock;
+ F2610->OPN.ST.rate = rate;
+}
+
/* shut down emulator */
void ym2610_shutdown(void *chip)
{
diff --git a/src/devices/sound/fm.h b/src/devices/sound/fm.h
index 60bdb9c4ec0..7b919ea7402 100644
--- a/src/devices/sound/fm.h
+++ b/src/devices/sound/fm.h
@@ -136,6 +136,7 @@ void ym2203_postload(void *chip);
void * ym2608_init(device_t *device, int baseclock, int rate,
void *pcmroma,int pcmsizea,
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const ssg_callbacks *ssg);
+void ym2608_clock_changed(void *chip, int clock, int rate);
void ym2608_shutdown(void *chip);
void ym2608_reset_chip(void *chip);
void ym2608_update_one(void *chip, FMSAMPLE **buffer, int length);
@@ -151,6 +152,7 @@ void ym2608_postload(void *chip);
void * ym2610_init(device_t *device, int baseclock, int rate,
void *pcmroma,int pcmasize,void *pcmromb,int pcmbsize,
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const ssg_callbacks *ssg);
+void ym2610_clock_changed(void *chip, int clock, int rate);
void ym2610_shutdown(void *chip);
void ym2610_reset_chip(void *chip);
void ym2610_update_one(void *chip, FMSAMPLE **buffer, int length);
diff --git a/src/devices/sound/fmopl.cpp b/src/devices/sound/fmopl.cpp
index 2e1be1b4266..c7390842710 100644
--- a/src/devices/sound/fmopl.cpp
+++ b/src/devices/sound/fmopl.cpp
@@ -1631,7 +1631,7 @@ void FM_OPL::initialize()
/*logerror("freqbase=%f\n", freqbase);*/
/* Timer base time */
- TimerBase = attotime::from_hz(clock) * 72;
+ TimerBase = clock ? attotime::from_hz(clock) * 72 : attotime::zero;
/* make fnumber -> increment counter table */
for( i=0 ; i < 1024 ; i++ )
@@ -2408,6 +2408,11 @@ static void Y8950_deltat_status_reset(void *chip, uint8_t changebits)
Y8950->STATUS_RESET(changebits);
}
+void y8950_clock_changed(void *chip, uint32_t clock, uint32_t rate)
+{
+ reinterpret_cast<FM_OPL *>(chip)->clock_changed(clock, rate);
+}
+
void *y8950_init(device_t *device, uint32_t clock, uint32_t rate)
{
/* emulator create */
diff --git a/src/devices/sound/fmopl.h b/src/devices/sound/fmopl.h
index c5366d7badb..5da3f110830 100644
--- a/src/devices/sound/fmopl.h
+++ b/src/devices/sound/fmopl.h
@@ -92,6 +92,7 @@ void y8950_set_keyboard_handler(void *chip, OPL_PORTHANDLER_W KeyboardHandler_w,
void y8950_set_delta_t_memory(void *chip, void * deltat_mem_ptr, int deltat_mem_size );
void * y8950_init(device_t *device, uint32_t clock, uint32_t rate);
+void y8950_clock_changed(void *chip, uint32_t clock, uint32_t rate);
void y8950_shutdown(void *chip);
void y8950_reset_chip(void *chip);
int y8950_write(void *chip, int a, int v);
diff --git a/src/devices/sound/gb.cpp b/src/devices/sound/gb.cpp
index c65b3872d00..c662d456ef6 100644
--- a/src/devices/sound/gb.cpp
+++ b/src/devices/sound/gb.cpp
@@ -170,6 +170,16 @@ void gameboy_sound_device::device_start()
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void gameboy_sound_device::device_clock_changed()
+{
+ m_timer->adjust(clocks_to_attotime(FRAME_CYCLES / 128), 0, clocks_to_attotime(FRAME_CYCLES / 128));
+}
+
+
+//-------------------------------------------------
// device_reset
//-------------------------------------------------
diff --git a/src/devices/sound/gb.h b/src/devices/sound/gb.h
index f4139d0b1a6..e559f5c7301 100644
--- a/src/devices/sound/gb.h
+++ b/src/devices/sound/gb.h
@@ -21,6 +21,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_reset() override;
// sound stream update overrides
diff --git a/src/devices/sound/k053260.cpp b/src/devices/sound/k053260.cpp
index 764f02487f9..cc5294b0b59 100644
--- a/src/devices/sound/k053260.cpp
+++ b/src/devices/sound/k053260.cpp
@@ -105,6 +105,16 @@ void k053260_device::device_start()
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void k053260_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / CLOCKS_PER_SAMPLE);
+}
+
+
+//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
diff --git a/src/devices/sound/k053260.h b/src/devices/sound/k053260.h
index a938a420090..9edb1d522f5 100644
--- a/src/devices/sound/k053260.h
+++ b/src/devices/sound/k053260.h
@@ -47,6 +47,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_reset() override;
// sound stream update overrides
diff --git a/src/devices/sound/k054539.cpp b/src/devices/sound/k054539.cpp
index 862f8e2f175..35f45bf4fa6 100644
--- a/src/devices/sound/k054539.cpp
+++ b/src/devices/sound/k054539.cpp
@@ -535,6 +535,11 @@ void k054539_device::device_start()
init_chip();
}
+void k054539_device::device_clock_changed()
+{
+ stream->set_sample_rate(clock() / 384);
+}
+
void k054539_device::device_reset()
{
regs[0x22c] = 0;
diff --git a/src/devices/sound/k054539.h b/src/devices/sound/k054539.h
index a8a6507963a..0b79173f205 100644
--- a/src/devices/sound/k054539.h
+++ b/src/devices/sound/k054539.h
@@ -67,6 +67,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
diff --git a/src/devices/sound/qsound.cpp b/src/devices/sound/qsound.cpp
index 197c1f03be7..31d4f08ac6c 100644
--- a/src/devices/sound/qsound.cpp
+++ b/src/devices/sound/qsound.cpp
@@ -227,6 +227,14 @@ void qsound_device::device_start()
save_item(NAME(m_channel));
}
+//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void qsound_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 2 / 1248);
+}
//-------------------------------------------------
// device_reset - device-specific reset
@@ -275,7 +283,7 @@ READ16_MEMBER(qsound_device::dsp_sample_r)
// FIXME: DSP16 doesn't like bytes, only signed words - should this zero-pad or byte-smear?
u8 const byte(read_byte((u32(m_rom_bank) << 16) | m_rom_offset));
if (!machine().side_effects_disabled())
- m_rom_bank = offset;
+ m_rom_bank = (m_rom_bank & 0x8000U) | offset;
return (u16(byte) << 8) | u16(byte);
}
@@ -323,25 +331,11 @@ WRITE_LINE_MEMBER(qsound_device::dsp_ock_w)
WRITE16_MEMBER(qsound_device::dsp_pio_w)
{
- /*
- * FIXME: what does this do when PDX is high?
- * There are seemingly two significant points where the program writes PDX1 every sample interval.
- *
- * Before writing the right-channel sample to SDX - this causes the PSEL 0->1 transition:
- * 0:5d4: 996e if true a0 = rnd(a0)
- * 0:5d5: 51e0 0000 pdx1 = 0x0000
- * 0:5d7: 49a0 move sdx = a0
- *
- * This curious code where it writes out the a word from RAM@0x00f1 - this value seems significant:
- * 0:335: 18f1 set r0 = 0x00f1
- * 0:336: 3cd0 nop, a0 = *r0
- * 0:337: d850 p = x*y, y = a1, x = *pt++i
- * 0:338: 49e0 move pdx1 = a0
- */
- if (offset)
- LOG("QSound: DSP PDX1 = %04X\n", data);
- else
- m_rom_offset = data;
+ // PDX0 is used for QSound ROM offset, and PDX1 is used for ADPCM ROM offset
+ // this prevents spurious PSEL transitions between sending samples to the DAC
+ // it could still be used to have separate QSound/ADPCM ROM banks
+ m_rom_bank = (m_rom_bank & 0x7fffU) | u16(offset << 15);
+ m_rom_offset = data;
}
diff --git a/src/devices/sound/qsound.h b/src/devices/sound/qsound.h
index f5be0c106d8..10c6c93c4cb 100644
--- a/src/devices/sound/qsound.h
+++ b/src/devices/sound/qsound.h
@@ -27,6 +27,7 @@ protected:
tiny_rom_entry const *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_reset() override;
// device_sound_interface implementation
diff --git a/src/devices/sound/qsoundhle.cpp b/src/devices/sound/qsoundhle.cpp
index 5a57f098454..8d182bb4b1a 100644
--- a/src/devices/sound/qsoundhle.cpp
+++ b/src/devices/sound/qsoundhle.cpp
@@ -29,6 +29,19 @@
#include "emu.h"
#include "qsoundhle.h"
+#include <algorithm>
+#include <limits>
+
+
+namespace {
+
+constexpr u32 saturate(s64 val)
+{
+ return std::min<s64>(std::max<s64>(val, std::numeric_limits<s32>::min()), std::numeric_limits<s32>::max());
+}
+
+} // anonymous namespace
+
// device type definition
DEFINE_DEVICE_TYPE(QSOUND_HLE, qsound_hle_device, "qsound_hle", "QSound (HLE)")
@@ -41,7 +54,7 @@ DEFINE_DEVICE_TYPE(QSOUND_HLE, qsound_hle_device, "qsound_hle", "QSound (HLE)")
// qsound_hle_device - constructor
//-------------------------------------------------
-qsound_hle_device::qsound_hle_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+qsound_hle_device::qsound_hle_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, QSOUND_HLE, tag, owner, clock)
, device_sound_interface(mconfig, *this)
, device_rom_interface(mconfig, *this, 24)
@@ -124,14 +137,14 @@ void qsound_hle_device::sound_stream_update(sound_stream &stream, stream_sample_
offs_t const addr(ch.reg[1] | (bank << 16));
// update based on playback rate
- uint32_t updated(uint32_t(ch.reg[2] << 4) + ((uint32_t(ch.reg[1]) << 16) | ch.reg[3]));
- ch.reg[3] = uint16_t(updated);
- if (updated >= (uint32_t(ch.reg[5]) << 16))
- updated -= uint32_t(ch.reg[4]) << 16;
- ch.reg[1] = uint16_t(updated >> 16);
+ s64 updated(s32(u32(ch.reg[2]) << 4) + s32((u32(ch.reg[1]) << 16) | ch.reg[3]));
+ ch.reg[3] = u16(saturate(updated));
+ if (updated >= s32(u32(ch.reg[5]) << 16))
+ updated -= s32(u32(ch.reg[4]) << 16);
+ ch.reg[1] = u16(saturate(updated) >> 16);
// get the scaled sample
- int32_t const scaled(int32_t(int16_t(ch.reg[6])) * read_sample(addr));
+ s32 const scaled(s32(s16(ch.reg[6])) * read_sample(addr));
// apply simple panning
*lmix++ += (((scaled >> 8) * ch.lvol) >> 14);
@@ -172,7 +185,7 @@ READ8_MEMBER(qsound_hle_device::qsound_r)
}
-void qsound_hle_device::write_data(uint8_t address, uint16_t data)
+void qsound_hle_device::write_data(u8 address, u16 data)
{
int ch = 0, reg;
diff --git a/src/devices/sound/qsoundhle.h b/src/devices/sound/qsoundhle.h
index 8f4def443a0..498343ba6cb 100644
--- a/src/devices/sound/qsoundhle.h
+++ b/src/devices/sound/qsoundhle.h
@@ -34,13 +34,12 @@ protected:
virtual void rom_bank_updated() override;
private:
-
// MAME resources
sound_stream *m_stream;
struct qsound_channel
{
- uint16_t reg[8]; // channel control registers
+ u16 reg[8]; // channel control registers
// work variables
int lvol; // left volume
@@ -48,10 +47,10 @@ private:
} m_channel[16];
int m_pan_table[33]; // pan volume table
- uint16_t m_data; // register latch data
+ u16 m_data; // register latch data
- inline int16_t read_sample(uint32_t offset) { return uint16_t(read_byte(offset)) << 8; }
- void write_data(uint8_t address, uint16_t data);
+ inline s16 read_sample(u32 offset) { return u16(read_byte(offset)) << 8; }
+ void write_data(u8 address, u16 data);
};
DECLARE_DEVICE_TYPE(QSOUND_HLE, qsound_hle_device)
diff --git a/src/devices/sound/rf5c68.cpp b/src/devices/sound/rf5c68.cpp
index 1509ab8d8b8..a00bd45d522 100644
--- a/src/devices/sound/rf5c68.cpp
+++ b/src/devices/sound/rf5c68.cpp
@@ -66,6 +66,15 @@ void rf5c68_device::device_start()
}
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+
+void rf5c68_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 384);
+}
+
+//-------------------------------------------------
// memory_space_config - return a description of
// any address spaces owned by this device
//-------------------------------------------------
diff --git a/src/devices/sound/rf5c68.h b/src/devices/sound/rf5c68.h
index f0c202e0e04..7d3fc2ba600 100644
--- a/src/devices/sound/rf5c68.h
+++ b/src/devices/sound/rf5c68.h
@@ -46,6 +46,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
diff --git a/src/devices/sound/sn76496.cpp b/src/devices/sound/sn76496.cpp
index 0c08ca0cb2e..87f1a95486e 100644
--- a/src/devices/sound/sn76496.cpp
+++ b/src/devices/sound/sn76496.cpp
@@ -267,6 +267,11 @@ void sn76496_base_device::device_start()
register_for_save_states();
}
+void sn76496_base_device::device_clock_changed()
+{
+ m_sound->set_sample_rate(clock()/2);
+}
+
WRITE8_MEMBER( sn76496_base_device::stereo_w )
{
m_sound->update();
diff --git a/src/devices/sound/sn76496.h b/src/devices/sound/sn76496.h
index 0a129260e4d..b3d330e0c2c 100644
--- a/src/devices/sound/sn76496.h
+++ b/src/devices/sound/sn76496.h
@@ -48,6 +48,7 @@ protected:
uint32_t clock);
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
private:
diff --git a/src/devices/sound/ym2413.cpp b/src/devices/sound/ym2413.cpp
index 4d9da3d1dee..69ad6b31e33 100644
--- a/src/devices/sound/ym2413.cpp
+++ b/src/devices/sound/ym2413.cpp
@@ -1616,6 +1616,14 @@ void ym2413_device::device_start()
}
//-------------------------------------------------
+// device_clock_changed
+//-------------------------------------------------
+void ym2413_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 72);
+}
+
+//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
diff --git a/src/devices/sound/ym2413.h b/src/devices/sound/ym2413.h
index 410ed10fcf9..8f496645ee9 100644
--- a/src/devices/sound/ym2413.h
+++ b/src/devices/sound/ym2413.h
@@ -19,6 +19,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_clock_changed() override;
virtual void device_reset() override;
// sound stream update overrides
diff --git a/src/devices/sound/ymf262.cpp b/src/devices/sound/ymf262.cpp
index f69c15da9d4..280168ef4c1 100644
--- a/src/devices/sound/ymf262.cpp
+++ b/src/devices/sound/ymf262.cpp
@@ -1351,7 +1351,7 @@ static void OPL3_initalize(OPL3 *chip)
/* logerror("YMF262: freqbase=%f\n", chip->freqbase); */
/* Timer base time */
- chip->TimerBase = attotime::from_hz(chip->clock) * (8*36);
+ chip->TimerBase = chip->clock ? attotime::from_hz(chip->clock) * (8 * 36) : attotime::zero;
/* make fnumber -> increment counter table */
for( i=0 ; i < 1024 ; i++ )
@@ -1401,6 +1401,15 @@ static void OPL3_initalize(OPL3 *chip)
}
+static void OPL3_clock_changed(OPL3 *chip, int clock, int rate)
+{
+ chip->clock = clock;
+ chip->rate = rate;
+
+ /* init global tables */
+ OPL3_initalize(chip);
+}
+
static inline void FM_KEYON(OPL3_SLOT *SLOT, uint32_t key_set)
{
if( !SLOT->key )
@@ -2360,11 +2369,7 @@ static OPL3 *OPL3Create(device_t *device, int clock, int rate, int type)
chip->device = device;
chip->type = type;
- chip->clock = clock;
- chip->rate = rate;
-
- /* init global tables */
- OPL3_initalize(chip);
+ OPL3_clock_changed(chip, clock, rate);
/* reset chip */
OPL3ResetChip(chip);
@@ -2531,6 +2536,11 @@ void * ymf262_init(device_t *device, int clock, int rate)
return chip;
}
+void ymf262_clock_changed(void *chip, int clock, int rate)
+{
+ OPL3_clock_changed((OPL3 *)chip, clock, rate);
+}
+
void ymf262_post_load(void *chip) {
OPL3 *opl3 = (OPL3 *)chip;
for (int ch=0; ch<18; ch++) {
diff --git a/src/devices/sound/ymf262.h b/src/devices/sound/ymf262.h
index b82a89b9724..bd1eed7cbe7 100644
--- a/src/devices/sound/ymf262.h
+++ b/src/devices/sound/ymf262.h
@@ -24,6 +24,7 @@ typedef void (*OPL3_UPDATEHANDLER)(device_t *device,int min_interval_us);
void *ymf262_init(device_t *device, int clock, int rate);
+void ymf262_clock_changed(void *chip, int clock, int rate);
void ymf262_post_load(void *chip);
void ymf262_shutdown(void *chip);
void ymf262_reset_chip(void *chip);
diff --git a/src/devices/sound/ymf278b.cpp b/src/devices/sound/ymf278b.cpp
index d44f8cdaf00..18451d71732 100644
--- a/src/devices/sound/ymf278b.cpp
+++ b/src/devices/sound/ymf278b.cpp
@@ -778,6 +778,14 @@ READ8_MEMBER( ymf278b_device::read )
/**************************************************************************/
//-------------------------------------------------
+// device_post_load - device-specific post load
+//-------------------------------------------------
+void ymf278b_device::device_post_load()
+{
+ ymf262_post_load(m_ymf262);
+}
+
+//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
@@ -841,6 +849,20 @@ void ymf278b_device::device_stop()
m_ymf262 = nullptr;
}
+void ymf278b_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock()/768);
+
+ m_clock = clock();
+ m_timer_base = m_clock ? attotime::from_hz(m_clock) * (19 * 36) : attotime::zero;
+
+ // YMF262 related
+
+ int ymf262_clock = clock() / (19/8.0);
+ ymf262_clock_changed(m_ymf262, ymf262_clock, ymf262_clock / 288);
+ m_stream_ymf262->set_sample_rate(ymf262_clock / 288);
+}
+
void ymf278b_device::rom_bank_updated()
{
m_stream->update();
@@ -949,7 +971,7 @@ void ymf278b_device::device_start()
m_clock = clock();
m_irq_handler.resolve();
- m_timer_base = attotime::from_hz(m_clock) * (19*36);
+ m_timer_base = m_clock ? attotime::from_hz(m_clock) * (19*36) : attotime::zero;
m_timer_a = timer_alloc(TIMER_A);
m_timer_b = timer_alloc(TIMER_B);
m_timer_busy = timer_alloc(TIMER_BUSY_CLEAR);
diff --git a/src/devices/sound/ymf278b.h b/src/devices/sound/ymf278b.h
index 39456acfbe1..7b12ae322f9 100644
--- a/src/devices/sound/ymf278b.h
+++ b/src/devices/sound/ymf278b.h
@@ -24,9 +24,11 @@ public:
protected:
// device-level overrides
+ virtual void device_post_load() override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_stop() override;
+ virtual void device_clock_changed() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
diff --git a/src/devices/video/bt45x.cpp b/src/devices/video/bt45x.cpp
index f1176ee5f77..2f676c831fe 100644
--- a/src/devices/video/bt45x.cpp
+++ b/src/devices/video/bt45x.cpp
@@ -146,7 +146,7 @@ void bt45x_rgb_device_base::device_start()
m_color_ram = std::make_unique<std::array<u8, 3>[]>(m_palette_colors + m_overlay_colors);
- //save_pointer(NAME(m_color_ram), m_palette_colors + m_overlay_colors);
+ save_pointer(NAME(m_color_ram), m_palette_colors + m_overlay_colors);
}
void bt45x_mono_device_base::device_start()
diff --git a/src/devices/video/gba_lcd.cpp b/src/devices/video/gba_lcd.cpp
index 098499b1af5..98957a3353a 100644
--- a/src/devices/video/gba_lcd.cpp
+++ b/src/devices/video/gba_lcd.cpp
@@ -13,7 +13,6 @@
#include "emu.h"
#include "gba_lcd.h"
-#include "rendlay.h"
#include "screen.h"
@@ -1810,7 +1809,6 @@ MACHINE_CONFIG_START(gba_lcd_device::device_add_mconfig)
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, gba_lcd_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 32768)
MCFG_PALETTE_INIT_OWNER(gba_lcd_device, gba)
MACHINE_CONFIG_END
diff --git a/src/devices/video/poly.h b/src/devices/video/poly.h
index 3f1053e65c6..cda1c46dc3b 100644
--- a/src/devices/video/poly.h
+++ b/src/devices/video/poly.h
@@ -513,8 +513,8 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_til
// clip coordinates
int32_t v1yclip = v1y;
int32_t v2yclip = v2y + ((m_flags & FLAG_INCLUDE_BOTTOM_EDGE) ? 1 : 0);
- v1yclip = std::max(v1yclip, cliprect.min_y);
- v2yclip = std::min(v2yclip, cliprect.max_y + 1);
+ v1yclip = std::max(v1yclip, cliprect.top());
+ v2yclip = std::min(v2yclip, cliprect.bottom() + 1);
if (v2yclip - v1yclip <= 0)
return 0;
@@ -558,10 +558,10 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_til
istopx++;
// apply left/right clipping
- if (istartx < cliprect.min_x)
- istartx = cliprect.min_x;
- if (istopx > cliprect.max_x)
- istopx = cliprect.max_x + 1;
+ if (istartx < cliprect.left())
+ istartx = cliprect.left();
+ if (istopx > cliprect.right())
+ istopx = cliprect.right() + 1;
if (istartx >= istopx)
return 0;
@@ -658,8 +658,8 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_tri
// clip coordinates
int32_t v1yclip = v1y;
int32_t v3yclip = v3y + ((m_flags & FLAG_INCLUDE_BOTTOM_EDGE) ? 1 : 0);
- v1yclip = std::max(v1yclip, cliprect.min_y);
- v3yclip = std::min(v3yclip, cliprect.max_y + 1);
+ v1yclip = std::max(v1yclip, cliprect.top());
+ v3yclip = std::min(v3yclip, cliprect.bottom() + 1);
if (v3yclip - v1yclip <= 0)
return 0;
@@ -772,10 +772,10 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_tri
istopx++;
// apply left/right clipping
- if (istartx < cliprect.min_x)
- istartx = cliprect.min_x;
- if (istopx > cliprect.max_x)
- istopx = cliprect.max_x + 1;
+ if (istartx < cliprect.left())
+ istartx = cliprect.left();
+ if (istopx > cliprect.right())
+ istopx = cliprect.right() + 1;
// set the extent and update the total pixel count
if (istartx >= istopx)
@@ -848,8 +848,8 @@ template<typename _BaseType, class _ObjectData, int _MaxParams, int _MaxPolys>
uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_triangle_custom(const rectangle &cliprect, render_delegate callback, int startscanline, int numscanlines, const extent_t *extents)
{
// clip coordinates
- int32_t v1yclip = std::max(startscanline, cliprect.min_y);
- int32_t v3yclip = std::min(startscanline + numscanlines, cliprect.max_y + 1);
+ int32_t v1yclip = std::max(startscanline, cliprect.top());
+ int32_t v3yclip = std::min(startscanline + numscanlines, cliprect.bottom() + 1);
if (v3yclip - v1yclip <= 0)
return 0;
@@ -883,14 +883,14 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_tri
int32_t istartx = srcextent.startx, istopx = srcextent.stopx;
// apply left/right clipping
- if (istartx < cliprect.min_x)
- istartx = cliprect.min_x;
- if (istartx > cliprect.max_x)
- istartx = cliprect.max_x + 1;
- if (istopx < cliprect.min_x)
- istopx = cliprect.min_x;
- if (istopx > cliprect.max_x)
- istopx = cliprect.max_x + 1;
+ if (istartx < cliprect.left())
+ istartx = cliprect.left();
+ if (istartx > cliprect.right())
+ istartx = cliprect.right() + 1;
+ if (istopx < cliprect.left())
+ istopx = cliprect.left();
+ if (istopx > cliprect.right())
+ istopx = cliprect.right() + 1;
// set the extent and update the total pixel count
extent_t &extent = unit.extent[extnum];
@@ -956,8 +956,8 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_pol
// clip coordinates
int32_t minyclip = miny;
int32_t maxyclip = maxy + ((m_flags & FLAG_INCLUDE_BOTTOM_EDGE) ? 1 : 0);
- minyclip = std::max(minyclip, cliprect.min_y);
- maxyclip = std::min(maxyclip, cliprect.max_y + 1);
+ minyclip = std::max(minyclip, cliprect.top());
+ maxyclip = std::min(maxyclip, cliprect.bottom() + 1);
if (maxyclip - minyclip <= 0)
return 0;
@@ -1092,14 +1092,14 @@ uint32_t poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::render_pol
istopx++;
// apply left/right clipping
- if (istartx < cliprect.min_x)
+ if (istartx < cliprect.left())
{
for (int paramnum = 0; paramnum < paramcount; paramnum++)
- extent.param[paramnum].start += (cliprect.min_x - istartx) * extent.param[paramnum].dpdx;
- istartx = cliprect.min_x;
+ extent.param[paramnum].start += (cliprect.left() - istartx) * extent.param[paramnum].dpdx;
+ istartx = cliprect.left();
}
- if (istopx > cliprect.max_x)
- istopx = cliprect.max_x + 1;
+ if (istopx > cliprect.right())
+ istopx = cliprect.right() + 1;
// set the extent and update the total pixel count
if (istartx >= istopx)
diff --git a/src/devices/video/stvvdp2.cpp b/src/devices/video/stvvdp2.cpp
index cc1da5b39d3..3c64fce6690 100644
--- a/src/devices/video/stvvdp2.cpp
+++ b/src/devices/video/stvvdp2.cpp
@@ -2502,27 +2502,27 @@ void saturn_state::stv_vdp2_drawgfxzoom(
y_index = 0;
}
- if( sx < myclip.min_x)
+ if( sx < myclip.left())
{ /* clip left */
- int pixels = myclip.min_x-sx;
+ int pixels = myclip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
- if( sy < myclip.min_y )
+ if( sy < myclip.top() )
{ /* clip top */
- int pixels = myclip.min_y-sy;
+ int pixels = myclip.top()-sy;
sy += pixels;
y_index += pixels*dy;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > myclip.max_x+1 )
+ if( ex > myclip.right()+1 )
{ /* clip right */
- int pixels = ex-myclip.max_x-1;
+ int pixels = ex-myclip.right()-1;
ex -= pixels;
}
- if( ey > myclip.max_y+1 )
+ if( ey > myclip.bottom()+1 )
{ /* clip bottom */
- int pixels = ey-myclip.max_y-1;
+ int pixels = ey-myclip.bottom()-1;
ey -= pixels;
}
@@ -2703,27 +2703,27 @@ void saturn_state::stv_vdp2_drawgfxzoom_rgb555(
y_index = 0;
}
- if( sx < myclip.min_x)
+ if( sx < myclip.left())
{ /* clip left */
- int pixels = myclip.min_x-sx;
+ int pixels = myclip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
- if( sy < myclip.min_y )
+ if( sy < myclip.top() )
{ /* clip top */
- int pixels = myclip.min_y-sy;
+ int pixels = myclip.top()-sy;
sy += pixels;
y_index += pixels*dy;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > myclip.max_x+1 )
+ if( ex > myclip.right()+1 )
{ /* clip right */
- int pixels = ex-myclip.max_x-1;
+ int pixels = ex-myclip.right()-1;
ex -= pixels;
}
- if( ey > myclip.max_y+1 )
+ if( ey > myclip.bottom()+1 )
{ /* clip bottom */
- int pixels = ey-myclip.max_y-1;
+ int pixels = ey-myclip.bottom()-1;
ey -= pixels;
}
@@ -2893,27 +2893,27 @@ void saturn_state::stv_vdp2_drawgfx_rgb555( bitmap_rgb32 &dest_bmp, const rectan
y_index = 0;
}
- if( sx < myclip.min_x)
+ if( sx < myclip.left())
{ /* clip left */
- int pixels = myclip.min_x-sx;
+ int pixels = myclip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
- if( sy < myclip.min_y )
+ if( sy < myclip.top() )
{ /* clip top */
- int pixels = myclip.min_y-sy;
+ int pixels = myclip.top()-sy;
sy += pixels;
y_index += pixels*dy;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > myclip.max_x+1 )
+ if( ex > myclip.right()+1 )
{ /* clip right */
- int pixels = ex-myclip.max_x-1;
+ int pixels = ex-myclip.right()-1;
ex -= pixels;
}
- if( ey > myclip.max_y+1 )
+ if( ey > myclip.bottom()+1 )
{ /* clip bottom */
- int pixels = ey-myclip.max_y-1;
+ int pixels = ey-myclip.bottom()-1;
ey -= pixels;
}
@@ -3006,27 +3006,27 @@ void saturn_state::stv_vdp2_drawgfx_rgb888( bitmap_rgb32 &dest_bmp, const rectan
y_index = 0;
}
- if( sx < myclip.min_x)
+ if( sx < myclip.left())
{ /* clip left */
- int pixels = myclip.min_x-sx;
+ int pixels = myclip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
- if( sy < myclip.min_y )
+ if( sy < myclip.top() )
{ /* clip top */
- int pixels = myclip.min_y-sy;
+ int pixels = myclip.top()-sy;
sy += pixels;
y_index += pixels*dy;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > myclip.max_x+1 )
+ if( ex > myclip.right()+1 )
{ /* clip right */
- int pixels = ex-myclip.max_x-1;
+ int pixels = ex-myclip.right()-1;
ex -= pixels;
}
- if( ey > myclip.max_y+1 )
+ if( ey > myclip.bottom()+1 )
{ /* clip bottom */
- int pixels = ey-myclip.max_y-1;
+ int pixels = ey-myclip.bottom()-1;
ey -= pixels;
}
@@ -3096,29 +3096,29 @@ void saturn_state::stv_vdp2_drawgfx_alpha(bitmap_rgb32 &dest_bmp,const rectangle
ey = sy + gfx->height();
/* clip left */
- if (sx < clip.min_x)
+ if (sx < clip.left())
{
- int pixels = clip.min_x-sx;
+ int pixels = clip.left()-sx;
sx += pixels;
x_index_base += xinc*pixels;
}
/* clip top */
- if (sy < clip.min_y)
- { int pixels = clip.min_y-sy;
+ if (sy < clip.top())
+ { int pixels = clip.top()-sy;
sy += pixels;
y_index += yinc*pixels;
}
/* clip right */
- if (ex > clip.max_x+1)
+ if (ex > clip.right()+1)
{
- ex = clip.max_x+1;
+ ex = clip.right()+1;
}
/* clip bottom */
- if (ey > clip.max_y+1)
+ if (ey > clip.bottom()+1)
{
- ey = clip.max_y+1;
+ ey = clip.bottom()+1;
}
/* skip if inner loop doesn't draw anything */
@@ -3173,29 +3173,29 @@ void saturn_state::stv_vdp2_drawgfx_transpen(bitmap_rgb32 &dest_bmp,const rectan
ey = sy + gfx->height();
/* clip left */
- if (sx < clip.min_x)
+ if (sx < clip.left())
{
- int pixels = clip.min_x-sx;
+ int pixels = clip.left()-sx;
sx += pixels;
x_index_base += xinc*pixels;
}
/* clip top */
- if (sy < clip.min_y)
- { int pixels = clip.min_y-sy;
+ if (sy < clip.top())
+ { int pixels = clip.top()-sy;
sy += pixels;
y_index += yinc*pixels;
}
/* clip right */
- if (ex > clip.max_x+1)
+ if (ex > clip.right()+1)
{
- ex = clip.max_x+1;
+ ex = clip.right()+1;
}
/* clip bottom */
- if (ey > clip.max_y+1)
+ if (ey > clip.bottom()+1)
{
- ey = clip.max_y+1;
+ ey = clip.bottom()+1;
}
/* skip if inner loop doesn't draw anything */
@@ -3251,9 +3251,9 @@ void saturn_state::draw_4bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr
if(stv2_current_tilemap.fade_control & 1)
pal_bank += ((stv2_current_tilemap.fade_control & 2) ? (2*2048) : (2048));
- for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++)
+ for(ydst=cliprect.top();ydst<=cliprect.bottom();ydst++)
{
- for(xdst=cliprect.min_x;xdst<=cliprect.max_x;xdst++)
+ for(xdst=cliprect.left();xdst<=cliprect.right();xdst++)
{
if(!stv_vdp2_window_process(xdst,ydst))
continue;
@@ -3308,9 +3308,9 @@ void saturn_state::draw_8bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr
if(stv2_current_tilemap.fade_control & 1)
pal_bank += ((stv2_current_tilemap.fade_control & 2) ? (2*2048) : (2048));
- for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++)
+ for(ydst=cliprect.top();ydst<=cliprect.bottom();ydst++)
{
- for(xdst=cliprect.min_x;xdst<=cliprect.max_x;xdst++)
+ for(xdst=cliprect.left();xdst<=cliprect.right();xdst++)
{
if(!stv_vdp2_window_process(xdst,ydst))
continue;
@@ -3364,9 +3364,9 @@ void saturn_state::draw_11bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip
if(stv2_current_tilemap.fade_control & 1)
pal_bank = ((stv2_current_tilemap.fade_control & 2) ? (2*2048) : (2048));
- for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++)
+ for(ydst=cliprect.top();ydst<=cliprect.bottom();ydst++)
{
- for(xdst=cliprect.min_x;xdst<=cliprect.max_x;xdst++)
+ for(xdst=cliprect.left();xdst<=cliprect.right();xdst++)
{
if(!stv_vdp2_window_process(xdst,ydst))
continue;
@@ -3418,9 +3418,9 @@ void saturn_state::draw_rgb15_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip
xsize_mask = (stv2_current_tilemap.linescroll_enable) ? 1024 : xsize;
ysize_mask = (stv2_current_tilemap.vertical_linescroll_enable) ? 512 : ysize;
- for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++)
+ for(ydst=cliprect.top();ydst<=cliprect.bottom();ydst++)
{
- for(xdst=cliprect.min_x;xdst<=cliprect.max_x;xdst++)
+ for(xdst=cliprect.left();xdst<=cliprect.right();xdst++)
{
if(!stv_vdp2_window_process(xdst,ydst))
continue;
@@ -3476,9 +3476,9 @@ void saturn_state::draw_rgb32_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip
xsize_mask = (stv2_current_tilemap.linescroll_enable) ? 1024 : xsize;
ysize_mask = (stv2_current_tilemap.vertical_linescroll_enable) ? 512 : ysize;
- for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++)
+ for(ydst=cliprect.top();ydst<=cliprect.bottom();ydst++)
{
- for(xdst=cliprect.min_x;xdst<=cliprect.max_x;xdst++)
+ for(xdst=cliprect.left();xdst<=cliprect.right();xdst++)
{
if(!stv_vdp2_window_process(xdst,ydst))
continue;
@@ -3958,7 +3958,7 @@ void saturn_state::stv_vdp2_draw_basic_tilemap(bitmap_rgb32 &bitmap, const recta
{
int drawyposinc = tilesizey*(stv2_current_tilemap.tile_size ? 2 : 1);
drawypos = -(stv2_current_tilemap.scrolly*scaley);
- while( ((drawypos + drawyposinc) >> 16) < cliprect.min_y )
+ while( ((drawypos + drawyposinc) >> 16) < cliprect.top() )
{
drawypos += drawyposinc;
y++;
@@ -3969,7 +3969,7 @@ void saturn_state::stv_vdp2_draw_basic_tilemap(bitmap_rgb32 &bitmap, const recta
{
drawypos += tilesizey*(stv2_current_tilemap.tile_size ? 2 : 1);
}
- if ((drawypos >> 16) > cliprect.max_y) break;
+ if ((drawypos >> 16) > cliprect.bottom()) break;
ypageoffs = y & (pgtiles_y-1);
@@ -3981,7 +3981,7 @@ void saturn_state::stv_vdp2_draw_basic_tilemap(bitmap_rgb32 &bitmap, const recta
{
int drawxposinc = tilesizex*(stv2_current_tilemap.tile_size ? 2 : 1);
drawxpos = -(stv2_current_tilemap.scrollx*scalex);
- while( ((drawxpos + drawxposinc) >> 16) < cliprect.min_x )
+ while( ((drawxpos + drawxposinc) >> 16) < cliprect.left() )
{
drawxpos += drawxposinc;
x++;
@@ -3992,7 +3992,7 @@ void saturn_state::stv_vdp2_draw_basic_tilemap(bitmap_rgb32 &bitmap, const recta
{
drawxpos+=tilesizex*(stv2_current_tilemap.tile_size ? 2 : 1);
}
- if ( (drawxpos >> 16) > cliprect.max_x ) break;
+ if ( (drawxpos >> 16) > cliprect.right() ) break;
xpageoffs = x & (pgtiles_x-1);
@@ -4190,7 +4190,7 @@ void saturn_state::stv_vdp2_draw_basic_tilemap(bitmap_rgb32 &bitmap, const recta
if ( LOG_VDP2 )
{
- logerror( "Layer RBG%d, size %d x %d\n", stv2_current_tilemap.layer_name & 0x7f, cliprect.max_x + 1, cliprect.max_y + 1 );
+ logerror( "Layer RBG%d, size %d x %d\n", stv2_current_tilemap.layer_name & 0x7f, cliprect.right() + 1, cliprect.bottom() + 1 );
logerror( "Tiles: min %08X, max %08X\n", tilecodemin, tilecodemax );
logerror( "MAP size in dwords %08X\n", mpsize_dwords );
for (i = 0; i < stv2_current_tilemap.map_count; i++)
@@ -4240,7 +4240,7 @@ void saturn_state::stv_vdp2_draw_basic_tilemap(bitmap_rgb32 &bitmap, const recta
void saturn_state::stv_vdp2_check_tilemap_with_linescroll(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
rectangle mycliprect;
- int cur_line = cliprect.min_y;
+ int cur_line = cliprect.top();
int address;
int active_functions = 0;
int32_t scroll_values[3], prev_scroll_values[3];
@@ -4278,7 +4278,7 @@ void saturn_state::stv_vdp2_check_tilemap_with_linescroll(bitmap_rgb32 &bitmap,
if ( linezoom_enable ) active_functions++;
// address of data table
- address = stv2_current_tilemap.linescroll_table_address + active_functions*4*cliprect.min_y;
+ address = stv2_current_tilemap.linescroll_table_address + active_functions*4*cliprect.top();
// get the first scroll values
for ( i = 0; i < active_functions; i++ )
@@ -4294,7 +4294,7 @@ void saturn_state::stv_vdp2_check_tilemap_with_linescroll(bitmap_rgb32 &bitmap,
}
}
- while( cur_line <= cliprect.max_y )
+ while( cur_line <= cliprect.bottom() )
{
lines = 0;
do
@@ -4325,12 +4325,11 @@ void saturn_state::stv_vdp2_check_tilemap_with_linescroll(bitmap_rgb32 &bitmap,
{
scroll_values_equal &= (scroll_values[i] == prev_scroll_values[i]);
}
- } while( scroll_values_equal && ((cur_line + lines) <= cliprect.max_y) );
+ } while( scroll_values_equal && ((cur_line + lines) <= cliprect.bottom()) );
// determined how many lines can be drawn
// prepare clipping rectangle
- mycliprect.min_y = cur_line;
- mycliprect.max_y = cur_line + lines - 1;
+ mycliprect.sety(cur_line, cur_line + lines - 1);
// prepare scroll values
i = 0;
@@ -4358,7 +4357,7 @@ void saturn_state::stv_vdp2_check_tilemap_with_linescroll(bitmap_rgb32 &bitmap,
i++;
}
-// if ( LOG_VDP2 ) logerror( "Linescroll: y < %d, %d >, scrollx = %d, scrolly = %d, incx = %f\n", mycliprect.min_y, mycliprect.max_y, stv2_current_tilemap.scrollx, stv2_current_tilemap.scrolly, (float)stv2_current_tilemap.incx/65536.0 );
+// if ( LOG_VDP2 ) logerror( "Linescroll: y < %d, %d >, scrollx = %d, scrolly = %d, incx = %f\n", mycliprect.top(), mycliprect.bottom(), stv2_current_tilemap.scrollx, stv2_current_tilemap.scrolly, (float)stv2_current_tilemap.incx/65536.0 );
// render current tilemap portion
if (stv2_current_tilemap.bitmap_enable) // this layer is a bitmap
{
@@ -4389,14 +4388,14 @@ void saturn_state::stv_vdp2_draw_line(bitmap_rgb32 &bitmap, const rectangle &cli
{
base_mask = STV_VDP2_VRAMSZ ? 0x7ffff : 0x3ffff;
- for(y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for(y=cliprect.top();y<=cliprect.bottom();y++)
{
base_offs = (STV_VDP2_LCTA & base_mask) << 1;
if(STV_VDP2_LCCLMD)
base_offs += (y / interlace) << 1;
- for(x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for(x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pen;
@@ -4427,9 +4426,9 @@ void saturn_state::stv_vdp2_draw_mosaic(bitmap_rgb32 &bitmap, const rectangle &c
if(STV_VDP2_LSMD == 3)
v_size <<= 1;
- for(y=cliprect.min_y;y<=cliprect.max_y;y+=v_size)
+ for(y=cliprect.top();y<=cliprect.bottom();y+=v_size)
{
- for(x=cliprect.min_x;x<=cliprect.max_x;x+=h_size)
+ for(x=cliprect.left();x<=cliprect.right();x+=h_size)
{
pix = bitmap.pix32(y, x);
@@ -4484,10 +4483,9 @@ void saturn_state::stv_vdp2_check_tilemap(bitmap_rgb32 &bitmap, const rectangle
//base_incx = stv2_current_tilemap.incx;
//base_incy = stv2_current_tilemap.incy;
- while(cur_char <= cliprect.max_x)
+ while(cur_char <= cliprect.right())
{
- mycliprect.min_x = cur_char;
- mycliprect.max_x = cur_char + 8 - 1;
+ mycliprect.setx(cur_char, cur_char + 8 - 1);
uint32_t cur_address;
int16_t char_scroll;
@@ -4755,7 +4753,7 @@ void saturn_state::stv_vdp2_copy_roz_bitmap(bitmap_rgb32 &bitmap,
xp = mul_fixed32( RP.A, RP.px - RP.cx ) + mul_fixed32( RP.B, RP.py - RP.cy ) + mul_fixed32( RP.C, RP.pz - RP.cz ) + RP.cx + RP.mx;
yp = mul_fixed32( RP.D, RP.px - RP.cx ) + mul_fixed32( RP.E, RP.py - RP.cy ) + mul_fixed32( RP.F, RP.pz - RP.cz ) + RP.cy + RP.my;
- for (vcnt = cliprect.min_y; vcnt <= cliprect.max_y; vcnt++ )
+ for (vcnt = cliprect.top(); vcnt <= cliprect.bottom(); vcnt++ )
{
/*xsp = RP.A * ( ( RP.xst + RP.dxst * (vcnt << 16) ) - RP.px ) +
RP.B * ( ( RP.yst + RP.dyst * (vcnt << 16) ) - RP.py ) +
@@ -4847,7 +4845,7 @@ void saturn_state::stv_vdp2_copy_roz_bitmap(bitmap_rgb32 &bitmap,
dxs = mul_fixed32( kx, mul_fixed32( dx, 1 << (16-hcnt_shift)));
dys = mul_fixed32( ky, mul_fixed32( dy, 1 << (16-hcnt_shift)));
- for (hcnt = cliprect.min_x; hcnt <= cliprect.max_x; xs+=dxs, ys+=dys, hcnt++ )
+ for (hcnt = cliprect.left(); hcnt <= cliprect.right(); xs+=dxs, ys+=dys, hcnt++ )
{
x = xs >> 16;
y = ys >> 16;
@@ -4904,7 +4902,7 @@ void saturn_state::stv_vdp2_copy_roz_bitmap(bitmap_rgb32 &bitmap,
}
else
{
- for (hcnt = cliprect.min_x; hcnt <= cliprect.max_x; hcnt++ )
+ for (hcnt = cliprect.left(); hcnt <= cliprect.right(); hcnt++ )
{
switch( coeff_table_size )
{
@@ -5830,13 +5828,13 @@ void saturn_state::stv_vdp2_draw_back(bitmap_rgb32 &bitmap, const rectangle &cli
{
base_mask = STV_VDP2_VRAMSZ ? 0x7ffff : 0x3ffff;
- for(y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for(y=cliprect.top();y<=cliprect.bottom();y++)
{
base_offs = ((STV_VDP2_BKTA ) & base_mask) << 1;
if(STV_VDP2_BKCLMD)
base_offs += ((y / interlace) << 1);
- for(x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for(x=cliprect.left();x<=cliprect.right();x++)
{
int r,g,b;
uint16_t dot;
@@ -6182,7 +6180,7 @@ uint8_t saturn_state::get_hblank( void )
const rectangle &visarea = m_screen->visible_area();
int cur_h = m_screen->hpos();
- if (cur_h > visarea.max_x) //TODO
+ if (cur_h > visarea.right()) //TODO
return 1;
return 0;
@@ -6791,7 +6789,7 @@ void saturn_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,
{
if ( alpha_enabled == 0 )
{
- for ( y = cliprect.min_y; y <= cliprect.max_y; y++ )
+ for ( y = cliprect.top(); y <= cliprect.bottom(); y++ )
{
if ( stv_sprite_priorities_usage_valid )
if (stv_sprite_priorities_in_fb_line[y][pri] == 0)
@@ -6800,7 +6798,7 @@ void saturn_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,
framebuffer_line = m_vdp1.framebuffer_display_lines[y];
bitmap_line = &bitmap.pix32(y);
- for ( x = cliprect.min_x; x <= cliprect.max_x; x++ )
+ for ( x = cliprect.left(); x <= cliprect.right(); x++ )
{
if(!stv_vdp2_window_process(x,y))
continue;
@@ -6884,7 +6882,7 @@ void saturn_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,
}
else //alpha_enabled == 1
{
- for ( y = cliprect.min_y; y <= cliprect.max_y; y++ )
+ for ( y = cliprect.top(); y <= cliprect.bottom(); y++ )
{
if ( stv_sprite_priorities_usage_valid )
if (stv_sprite_priorities_in_fb_line[y][pri] == 0)
@@ -6893,7 +6891,7 @@ void saturn_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,
framebuffer_line = m_vdp1.framebuffer_display_lines[y];
bitmap_line = &bitmap.pix32(y);
- for ( x = cliprect.min_x; x <= cliprect.max_x; x++ )
+ for ( x = cliprect.left(); x <= cliprect.right(); x++ )
{
if(!stv_vdp2_window_process(x,y))
continue;
@@ -6993,7 +6991,7 @@ void saturn_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,
}
else
{
- for ( y = cliprect.min_y; y <= cliprect.max_y / (interlace_framebuffer+1); y++ )
+ for ( y = cliprect.top(); y <= cliprect.bottom() / (interlace_framebuffer+1); y++ )
{
if ( stv_sprite_priorities_usage_valid )
if (stv_sprite_priorities_in_fb_line[y][pri] == 0)
@@ -7010,7 +7008,7 @@ void saturn_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,
bitmap_line2 = &bitmap.pix32(2*y + 1);
}
- for ( x = cliprect.min_x; x <= cliprect.max_x /(double_x+1) ; x++ )
+ for ( x = cliprect.left(); x <= cliprect.right() /(double_x+1) ; x++ )
{
if(!stv_vdp2_window_process(x,y))
continue;
diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp
index f7174ae4543..16bbc507a5a 100644
--- a/src/devices/video/upd7220.cpp
+++ b/src/devices/video/upd7220.cpp
@@ -408,15 +408,14 @@ inline void upd7220_device::recompute_parameters()
attoseconds_t refresh = HZ_TO_ATTOSECONDS(clock() * 8) * horiz_pix_total * vert_pix_total;
- rectangle visarea;
-
- visarea.min_x = 0; //(m_hs + m_hbp) * 8;
- visarea.min_y = m_vbp; //m_vs + m_vbp;
- visarea.max_x = m_aw * horiz_mult - 1;//horiz_pix_total - (m_hfp * 8) - 1;
- visarea.max_y = m_al * vert_mult + m_vbp - 1;//vert_pix_total - m_vfp - 1;
+ rectangle visarea(
+ 0, //(m_hs + m_hbp) * 8;
+ m_aw * horiz_mult - 1,//horiz_pix_total - (m_hfp * 8) - 1;
+ m_vbp, //m_vs + m_vbp;
+ m_al * vert_mult + m_vbp - 1);//vert_pix_total - m_vfp - 1;
LOG("uPD7220 Screen: %u x %u @ %f Hz\n", horiz_pix_total, vert_pix_total, 1 / ATTOSECONDS_TO_DOUBLE(refresh));
- LOG("Visible Area: (%u, %u) - (%u, %u)\n", visarea.min_x, visarea.min_y, visarea.max_x, visarea.max_y);
+ LOG("Visible Area: (%u, %u) - (%u, %u)\n", visarea.left(), visarea.top(), visarea.right(), visarea.bottom());
LOG("%d %d %d %d %d\n",m_hs,m_hbp,m_aw,m_hfp,m_pitch);
LOG("%d %d %d %d\n",m_vs,m_vbp,m_al,m_vfp);
diff --git a/src/devices/video/vic4567.cpp b/src/devices/video/vic4567.cpp
index 8154f6a9458..14e22461c23 100644
--- a/src/devices/video/vic4567.cpp
+++ b/src/devices/video/vic4567.cpp
@@ -1906,25 +1906,25 @@ void vic3_device::draw_bitplanes()
if (XPOS > 0)
{
- vis.set(0, XPOS - 1, 0, visarea.max_y);
+ vis.set(0, XPOS - 1, 0, visarea.bottom());
m_bitmap->fill(FRAMECOLOR, vis);
}
- if (XPOS + VIC3_BITPLANES_WIDTH < visarea.max_x)
+ if (XPOS + VIC3_BITPLANES_WIDTH < visarea.right())
{
- vis.set(XPOS + VIC3_BITPLANES_WIDTH, visarea.max_x, 0, visarea.max_y);
+ vis.set(XPOS + VIC3_BITPLANES_WIDTH, visarea.right(), 0, visarea.bottom());
m_bitmap->fill(FRAMECOLOR, vis);
}
if (YPOS > 0)
{
- vis.set(0, visarea.max_x, 0, YPOS - 1);
+ vis.set(0, visarea.right(), 0, YPOS - 1);
m_bitmap->fill(FRAMECOLOR, vis);
}
- if (YPOS + VIC3_LINES < visarea.max_y)
+ if (YPOS + VIC3_LINES < visarea.bottom())
{
- vis.set(0, visarea.max_x, YPOS + VIC3_LINES, visarea.max_y);
+ vis.set(0, visarea.right(), YPOS + VIC3_LINES, visarea.bottom());
m_bitmap->fill(FRAMECOLOR, vis);
}
}
diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp
index f253235f714..4dc4844ae6c 100644
--- a/src/emu/debug/debugcmd.cpp
+++ b/src/emu/debug/debugcmd.cpp
@@ -294,7 +294,7 @@ debugger_commands::debugger_commands(running_machine& machine, debugger_cpu& cpu
/* set up the initial debugscript if specified */
const char* name = m_machine.options().debug_script();
if (name[0] != 0)
- m_cpu.source_script(name);
+ m_console.source_script(name);
m_cheat.cpu[0] = m_cheat.cpu[1] = 0;
}
@@ -3094,7 +3094,7 @@ void debugger_commands::execute_snap(int ref, const std::vector<std::string> &pa
void debugger_commands::execute_source(int ref, const std::vector<std::string> &params)
{
- m_cpu.source_script(params[0].c_str());
+ m_console.source_script(params[0].c_str());
}
diff --git a/src/emu/debug/debugcon.cpp b/src/emu/debug/debugcon.cpp
index 3b0f2e98b6b..e19d23e6b55 100644
--- a/src/emu/debug/debugcon.cpp
+++ b/src/emu/debug/debugcon.cpp
@@ -15,6 +15,7 @@
#include "textbuf.h"
#include "debugger.h"
#include <ctype.h>
+#include <fstream>
/***************************************************************************
CONSTANTS
@@ -392,6 +393,71 @@ void debugger_console::register_command(const char *command, u32 flags, int ref,
}
+//-------------------------------------------------
+// source_script - specifies a debug command
+// script to execute
+//-------------------------------------------------
+
+void debugger_console::source_script(const char *file)
+{
+ // close any existing source file
+ m_source_file.reset();
+
+ // open a new one if requested
+ if (file != nullptr)
+ {
+ auto source_file = std::make_unique<std::ifstream>(file, std::ifstream::in);
+ if (source_file->fail())
+ {
+ if (m_machine.phase() == machine_phase::RUNNING)
+ printf("Cannot open command file '%s'\n", file);
+ else
+ fatalerror("Cannot open command file '%s'\n", file);
+ }
+ else
+ {
+ m_source_file = std::move(source_file);
+ }
+ }
+}
+
+
+//-------------------------------------------------
+// process_source_file - executes commands from
+// a source file
+//-------------------------------------------------
+
+void debugger_console::process_source_file()
+{
+ std::string buf;
+
+ // loop until the file is exhausted or until we are executing again
+ while (m_machine.debugger().cpu().is_stopped()
+ && m_source_file
+ && std::getline(*m_source_file, buf))
+ {
+ // strip out comments (text after '//')
+ size_t pos = buf.find("//");
+ if (pos != std::string::npos)
+ buf.resize(pos);
+
+ // strip whitespace
+ strtrimrightspace(buf);
+
+ // execute the command
+ if (!buf.empty())
+ execute_command(buf, true);
+ }
+
+ if (m_source_file && !m_source_file->good())
+ {
+ if (!m_source_file->eof())
+ printf("I/O error, script processing terminated\n");
+ m_source_file.reset();
+ }
+}
+
+
/***************************************************************************
diff --git a/src/emu/debug/debugcon.h b/src/emu/debug/debugcon.h
index 7cc1231d4c9..a64238ed8c6 100644
--- a/src/emu/debug/debugcon.h
+++ b/src/emu/debug/debugcon.h
@@ -80,6 +80,8 @@ public:
CMDERR execute_command(const std::string &command, bool echo);
CMDERR validate_command(const char *command);
void register_command(const char *command, u32 flags, int ref, int minparams, int maxparams, std::function<void(int, const std::vector<std::string> &)> handler);
+ void source_script(const char *file);
+ void process_source_file();
/* console management */
void vprintf(util::format_argument_pack<std::ostream> const &args);
@@ -132,6 +134,8 @@ private:
text_buffer *m_errorlog_textbuf;
debug_command *m_commandlist;
+
+ std::unique_ptr<std::istream> m_source_file; // script source file
};
#endif // MAME_EMU_DEBUG_DEBUGCON_H
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index cd17a1e40f7..bdb0928f926 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -25,9 +25,6 @@
#include "osdepend.h"
#include "xmlfile.h"
-#include <ctype.h>
-#include <fstream>
-
const size_t debugger_cpu::NUM_TEMP_VARIABLES = 10;
@@ -152,42 +149,13 @@ symbol_table* debugger_cpu::get_visible_symtable()
}
-/*-------------------------------------------------
- source_script - specifies a debug command
- script to execute
--------------------------------------------------*/
-
-void debugger_cpu::source_script(const char *file)
-{
- // close any existing source file
- m_source_file.reset();
-
- // open a new one if requested
- if (file != nullptr)
- {
- auto source_file = std::make_unique<std::ifstream>(file, std::ifstream::in);
- if (source_file->fail())
- {
- if (m_machine.phase() == machine_phase::RUNNING)
- m_machine.debugger().console().printf("Cannot open command file '%s'\n", file);
- else
- fatalerror("Cannot open command file '%s'\n", file);
- }
- else
- {
- m_source_file = std::move(source_file);
- }
- }
-}
-
-
//**************************************************************************
// MEMORY AND DISASSEMBLY HELPERS
//**************************************************************************
//-------------------------------------------------
-// omment_save - save all comments for the given
+// comment_save - save all comments for the given
// machine
//-------------------------------------------------
@@ -641,42 +609,6 @@ void debugger_cpu::reset_transient_flags()
}
-/*-------------------------------------------------
- process_source_file - executes commands from
- a source file
--------------------------------------------------*/
-
-void debugger_cpu::process_source_file()
-{
- std::string buf;
-
- // loop until the file is exhausted or until we are executing again
- while (m_execution_state == exec_state::STOPPED
- && m_source_file
- && std::getline(*m_source_file, buf))
- {
- // strip out comments (text after '//')
- size_t pos = buf.find("//");
- if (pos != std::string::npos)
- buf.resize(pos);
-
- // strip whitespace
- strtrimrightspace(buf);
-
- // execute the command
- if (!buf.empty())
- m_machine.debugger().console().execute_command(buf, true);
- }
-
- if (m_source_file && !m_source_file->good())
- {
- if (!m_source_file->eof())
- m_machine.debugger().console().printf("I/O error, script processing terminated\n");
- m_source_file.reset();
- }
-}
-
-
/***************************************************************************
EXPRESSION HANDLERS
@@ -1718,7 +1650,7 @@ void device_debug::instruction_hook(offs_t curpc)
}
// check for commands in the source file
- machine.debugger().cpu().process_source_file();
+ machine.debugger().console().process_source_file();
// if an event got scheduled, resume
if (machine.scheduled_event_pending())
diff --git a/src/emu/debug/debugcpu.h b/src/emu/debug/debugcpu.h
index f3e8f68a408..2244b6ccb42 100644
--- a/src/emu/debug/debugcpu.h
+++ b/src/emu/debug/debugcpu.h
@@ -504,12 +504,6 @@ public:
symbol_table *get_visible_symtable();
- /* ----- misc debugger functions ----- */
-
- /* specifies a debug command script to execute */
- void source_script(const char *file);
-
-
/* ----- debugger comment helpers ----- */
// save all comments for a given machine
@@ -581,7 +575,6 @@ public:
void halt_on_next_instruction(device_t *device, util::format_argument_pack<std::ostream> &&args);
void ensure_comments_loaded();
void reset_transient_flags();
- void process_source_file();
private:
static const size_t NUM_TEMP_VARIABLES;
@@ -611,8 +604,6 @@ private:
device_t * m_visiblecpu;
device_t * m_breakcpu;
- std::unique_ptr<std::istream> m_source_file; // script source file
-
std::unique_ptr<symbol_table> m_symtable; // global symbol table
bool m_within_instruction_hook;
diff --git a/src/emu/debug/dvdisasm.cpp b/src/emu/debug/dvdisasm.cpp
index b10df8c618f..fecb02d4998 100644
--- a/src/emu/debug/dvdisasm.cpp
+++ b/src/emu/debug/dvdisasm.cpp
@@ -311,7 +311,8 @@ void debug_view_disasm::generate_dasm(debug_disasm_buffer &buffer, offs_t pc)
m_topleft.x = 0;
m_topleft.y = 0;
}
- generate_from_address(buffer, m_expression.value());
+ const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source);
+ generate_from_address(buffer, m_expression.value() & source.m_space.logaddrmask());
return;
}
diff --git a/src/emu/debug/express.cpp b/src/emu/debug/express.cpp
index 0e4175c6aaf..bcd9269db30 100644
--- a/src/emu/debug/express.cpp
+++ b/src/emu/debug/express.cpp
@@ -539,8 +539,7 @@ void symbol_table::set_memory_value(const char *name, expression_space space, u3
//-------------------------------------------------
parsed_expression::parsed_expression(symbol_table *symtable, const char *expression, u64 *result)
- : m_symtable(symtable),
- m_token_stack_ptr(0)
+ : m_symtable(symtable)
{
// if we got an expression parse it
if (expression != nullptr)
@@ -1210,15 +1209,13 @@ void parsed_expression::normalize_operator(parse_token *prevtoken, parse_token &
// Determine if , refers to a function parameter
case TVL_COMMA:
- for (int lookback = 0; lookback < MAX_STACK_DEPTH; lookback++)
+ for (auto lookback = m_token_stack.rbegin(); lookback != m_token_stack.rend(); ++lookback)
{
- parse_token *peek = peek_token(lookback);
- if (peek == nullptr)
- break;
+ parse_token &peek = *lookback;
// if we hit an execute function operator, or else a left parenthesis that is
// already tagged, then tag us as well
- if (peek->is_operator(TVL_EXECUTEFUNC) || (peek->is_operator(TVL_LPAREN) && peek->is_function_separator()))
+ if (peek.is_operator(TVL_EXECUTEFUNC) || (peek.is_operator(TVL_LPAREN) && peek.is_function_separator()))
{
thistoken.set_function_separator();
break;
@@ -1332,11 +1329,11 @@ void parsed_expression::infix_to_postfix()
inline void parsed_expression::push_token(parse_token &token)
{
// check for overflow
- if (m_token_stack_ptr >= MAX_STACK_DEPTH)
+ if (m_token_stack.size() >= m_token_stack.max_size())
throw expression_error(expression_error::STACK_OVERFLOW, token.offset());
// push
- m_token_stack[m_token_stack_ptr++] = token;
+ m_token_stack.push_back(token);
}
@@ -1347,24 +1344,12 @@ inline void parsed_expression::push_token(parse_token &token)
inline void parsed_expression::pop_token(parse_token &token)
{
// check for underflow
- if (m_token_stack_ptr == 0)
+ if (m_token_stack.empty())
throw expression_error(expression_error::STACK_UNDERFLOW, token.offset());
// pop
- token = m_token_stack[--m_token_stack_ptr];
-}
-
-
-//-------------------------------------------------
-// peek_token - look at a token some number of
-// entries up the stack
-//-------------------------------------------------
-
-inline parsed_expression::parse_token *parsed_expression::peek_token(int count)
-{
- if (m_token_stack_ptr <= count)
- return nullptr;
- return &m_token_stack[m_token_stack_ptr - count - 1];
+ token = std::move(m_token_stack.back());
+ m_token_stack.pop_back();
}
@@ -1412,7 +1397,7 @@ inline void parsed_expression::pop_token_rval(parse_token &token)
u64 parsed_expression::execute_tokens()
{
// reset the token stack
- m_token_stack_ptr = 0;
+ m_token_stack.clear();
// loop over the entire sequence
parse_token t1, t2, result;
@@ -1662,7 +1647,7 @@ u64 parsed_expression::execute_tokens()
pop_token_rval(result);
// error if our stack isn't empty
- if (peek_token(0) != nullptr)
+ if (!m_token_stack.empty())
throw expression_error(expression_error::SYNTAX, 0);
return result.value();
@@ -1741,18 +1726,17 @@ void parsed_expression::execute_function(parse_token &token)
while (paramcount < MAX_FUNCTION_PARAMS)
{
// peek at the next token on the stack
- parse_token *peek = peek_token(0);
- if (peek == nullptr)
+ if (m_token_stack.empty())
throw expression_error(expression_error::INVALID_PARAM_COUNT, token.offset());
+ parse_token &peek = m_token_stack.back();
// if it is a function symbol, break out of the loop
- if (peek->is_symbol())
+ if (peek.is_symbol())
{
- symbol = peek->symbol();
+ symbol = peek.symbol();
if (symbol->is_function())
{
- parse_token t1;
- pop_token(t1);
+ m_token_stack.pop_back();
break;
}
}
diff --git a/src/emu/debug/express.h b/src/emu/debug/express.h
index 270743e6261..ee5a500ad0e 100644
--- a/src/emu/debug/express.h
+++ b/src/emu/debug/express.h
@@ -15,6 +15,7 @@
#include "emucore.h"
+#include <deque>
#include <functional>
#include <unordered_map>
@@ -366,7 +367,6 @@ private:
// execution helpers
void push_token(parse_token &token);
void pop_token(parse_token &token);
- parse_token *peek_token(int count);
void pop_token_lval(parse_token &token);
void pop_token_rval(parse_token &token);
u64 execute_tokens();
@@ -374,15 +374,13 @@ private:
// constants
static const int MAX_FUNCTION_PARAMS = 16;
- static const int MAX_STACK_DEPTH = 16;
// internal state
symbol_table * m_symtable; // symbol table
std::string m_original_string; // original string (prior to parsing)
simple_list<parse_token> m_tokenlist; // token list
simple_list<expression_string> m_stringlist; // string list
- int m_token_stack_ptr; // stack pointer (used during execution)
- parse_token m_token_stack[MAX_STACK_DEPTH]; // token stack (used during execution)
+ std::deque<parse_token> m_token_stack; // token stack (used during execution)
};
#endif // MAME_EMU_DEBUG_EXPRESS_H
diff --git a/src/emu/diexec.cpp b/src/emu/diexec.cpp
index 37fdcaa362c..67cb9bd123f 100644
--- a/src/emu/diexec.cpp
+++ b/src/emu/diexec.cpp
@@ -522,7 +522,9 @@ int device_execute_interface::standard_irq_callback(int irqline)
vector = m_driver_irq(device(), irqline);
// notify the debugger
- debugger_interrupt_hook(irqline);
+ if (device().machine().debug_flags & DEBUG_FLAG_ENABLED)
+ device().debug()->interrupt_hook(irqline);
+
return vector;
}
diff --git a/src/emu/diexec.h b/src/emu/diexec.h
index 3c9d754434e..e4973c2296f 100644
--- a/src/emu/diexec.h
+++ b/src/emu/diexec.h
@@ -237,11 +237,6 @@ protected:
if (device().machine().debug_flags & DEBUG_FLAG_ENABLED)
device().debug()->exception_hook(exception);
}
- void debugger_interrupt_hook(int irqline)
- {
- if (device().machine().debug_flags & DEBUG_FLAG_ENABLED)
- device().debug()->interrupt_hook(irqline);
- }
private:
// internal information about the state of inputs
diff --git a/src/emu/drawgfx.cpp b/src/emu/drawgfx.cpp
index 8c86de6ad9a..3a00569e32c 100644
--- a/src/emu/drawgfx.cpp
+++ b/src/emu/drawgfx.cpp
@@ -2014,8 +2014,7 @@ static inline void copyscrollbitmap_trans_common(_BitmapClass &dest, const _Bitm
for (s32 sx = xscroll - src.width(); sx < dest.width(); sx += src.width())
{
// compute the cliprect for this group
- subclip.min_x = col * colwidth + sx;
- subclip.max_x = (col + groupcols) * colwidth - 1 + sx;
+ subclip.setx(col * colwidth + sx, (col + groupcols) * colwidth - 1 + sx);
subclip &= cliprect;
// iterate over all portions of the scroll that overlap the destination
@@ -2051,8 +2050,7 @@ static inline void copyscrollbitmap_trans_common(_BitmapClass &dest, const _Bitm
for (s32 sy = yscroll - src.height(); sy < dest.height(); sy += src.height())
{
// compute the cliprect for this group
- subclip.min_y = row * rowheight + sy;
- subclip.max_y = (row + grouprows) * rowheight - 1 + sy;
+ subclip.sety(row * rowheight + sy, (row + grouprows) * rowheight - 1 + sy);
subclip &= cliprect;
// iterate over all portions of the scroll that overlap the destination
diff --git a/src/emu/drawgfxm.h b/src/emu/drawgfxm.h
index 1bef8e15237..f4566e9b59f 100644
--- a/src/emu/drawgfxm.h
+++ b/src/emu/drawgfxm.h
@@ -419,37 +419,37 @@ do {
\
/* compute final pixel in X and exit if we are entirely clipped */ \
destendx = destx + width() - 1; \
- if (destx > cliprect.max_x || destendx < cliprect.min_x) \
+ if (destx > cliprect.right() || destendx < cliprect.left()) \
break; \
\
/* apply left clip */ \
srcx = 0; \
- if (destx < cliprect.min_x) \
+ if (destx < cliprect.left()) \
{ \
- srcx = cliprect.min_x - destx; \
- destx = cliprect.min_x; \
+ srcx = cliprect.left() - destx; \
+ destx = cliprect.left(); \
} \
\
/* apply right clip */ \
- if (destendx > cliprect.max_x) \
- destendx = cliprect.max_x; \
+ if (destendx > cliprect.right()) \
+ destendx = cliprect.right(); \
\
/* compute final pixel in Y and exit if we are entirely clipped */ \
destendy = desty + height() - 1; \
- if (desty > cliprect.max_y || destendy < cliprect.min_y) \
+ if (desty > cliprect.bottom() || destendy < cliprect.top()) \
break; \
\
/* apply top clip */ \
srcy = 0; \
- if (desty < cliprect.min_y) \
+ if (desty < cliprect.top()) \
{ \
- srcy = cliprect.min_y - desty; \
- desty = cliprect.min_y; \
+ srcy = cliprect.top() - desty; \
+ desty = cliprect.top(); \
} \
\
/* apply bottom clip */ \
- if (destendy > cliprect.max_y) \
- destendy = cliprect.max_y; \
+ if (destendy > cliprect.bottom()) \
+ destendy = cliprect.bottom(); \
\
/* apply X flipping */ \
if (flipx) \
@@ -601,24 +601,24 @@ do {
\
/* compute final pixel in X and exit if we are entirely clipped */ \
destendx = destx + dstwidth - 1; \
- if (destx > cliprect.max_x || destendx < cliprect.min_x) \
+ if (destx > cliprect.right() || destendx < cliprect.left()) \
break; \
\
/* apply left clip */ \
srcx = 0; \
- if (destx < cliprect.min_x) \
+ if (destx < cliprect.left()) \
{ \
- srcx = (cliprect.min_x - destx) * dx; \
- destx = cliprect.min_x; \
+ srcx = (cliprect.left() - destx) * dx; \
+ destx = cliprect.left(); \
} \
\
/* apply right clip */ \
- if (destendx > cliprect.max_x) \
- destendx = cliprect.max_x; \
+ if (destendx > cliprect.right()) \
+ destendx = cliprect.right(); \
\
/* compute final pixel in Y and exit if we are entirely clipped */ \
destendy = desty + dstheight - 1; \
- if (desty > cliprect.max_y || destendy < cliprect.min_y) \
+ if (desty > cliprect.bottom() || destendy < cliprect.top()) \
{ \
g_profiler.stop(); \
return; \
@@ -626,15 +626,15 @@ do {
\
/* apply top clip */ \
srcy = 0; \
- if (desty < cliprect.min_y) \
+ if (desty < cliprect.top()) \
{ \
- srcy = (cliprect.min_y - desty) * dy; \
- desty = cliprect.min_y; \
+ srcy = (cliprect.top() - desty) * dy; \
+ desty = cliprect.top(); \
} \
\
/* apply bottom clip */ \
- if (destendy > cliprect.max_y) \
- destendy = cliprect.max_y; \
+ if (destendy > cliprect.bottom()) \
+ destendy = cliprect.bottom(); \
\
/* apply X flipping */ \
if (flipx) \
@@ -740,37 +740,37 @@ do {
\
/* compute final pixel in X and exit if we are entirely clipped */ \
destendx = destx + src.width() - 1; \
- if (destx > cliprect.max_x || destendx < cliprect.min_x) \
+ if (destx > cliprect.right() || destendx < cliprect.left()) \
break; \
\
/* apply left clip */ \
srcx = 0; \
- if (destx < cliprect.min_x) \
+ if (destx < cliprect.left()) \
{ \
- srcx = cliprect.min_x - destx; \
- destx = cliprect.min_x; \
+ srcx = cliprect.left() - destx; \
+ destx = cliprect.left(); \
} \
\
/* apply right clip */ \
- if (destendx > cliprect.max_x) \
- destendx = cliprect.max_x; \
+ if (destendx > cliprect.right()) \
+ destendx = cliprect.right(); \
\
/* compute final pixel in Y and exit if we are entirely clipped */ \
destendy = desty + src.height() - 1; \
- if (desty > cliprect.max_y || destendy < cliprect.min_y) \
+ if (desty > cliprect.bottom() || destendy < cliprect.top()) \
break; \
\
/* apply top clip */ \
srcy = 0; \
- if (desty < cliprect.min_y) \
+ if (desty < cliprect.top()) \
{ \
- srcy = cliprect.min_y - desty; \
- desty = cliprect.min_y; \
+ srcy = cliprect.top() - desty; \
+ desty = cliprect.top(); \
} \
\
/* apply bottom clip */ \
- if (destendy > cliprect.max_y) \
- destendy = cliprect.max_y; \
+ if (destendy > cliprect.bottom()) \
+ destendy = cliprect.bottom(); \
\
/* apply X flipping */ \
if (flipx) \
@@ -912,8 +912,8 @@ do {
srcfixheight = src.height() << 16; \
\
/* advance the starting coordinates to the top-left of the cliprect */ \
- startx += cliprect.min_x * incxx + cliprect.min_y * incyx; \
- starty += cliprect.min_x * incxy + cliprect.min_y * incyy; \
+ startx += cliprect.left() * incxx + cliprect.top() * incyx; \
+ starty += cliprect.left() * incxy + cliprect.top() * incyy; \
\
/* compute how many blocks of 4 pixels we have */ \
numblocks = cliprect.width() / 4; \
@@ -926,10 +926,10 @@ do {
if (!wraparound) \
{ \
/* iterate over pixels in Y */ \
- for (cury = cliprect.min_y; cury <= cliprect.max_y; cury++) \
+ for (cury = cliprect.top(); cury <= cliprect.bottom(); cury++) \
{ \
- PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.min_x); \
- PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.min_x); \
+ PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.left()); \
+ PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.left()); \
const PIXEL_TYPE *srcptr; \
s32 srcx = startx; \
s32 srcy = starty; \
@@ -987,10 +987,10 @@ do {
starty &= srcfixheight; \
\
/* iterate over pixels in Y */ \
- for (cury = cliprect.min_y; cury <= cliprect.max_y; cury++) \
+ for (cury = cliprect.top(); cury <= cliprect.bottom(); cury++) \
{ \
- PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.min_x); \
- PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.min_x); \
+ PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.left()); \
+ PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.left()); \
const PIXEL_TYPE *srcptr = &src.pixt<PIXEL_TYPE>(starty >> 16); \
s32 srcx = startx; \
\
@@ -1034,10 +1034,10 @@ do {
if (!wraparound) \
{ \
/* iterate over pixels in Y */ \
- for (cury = cliprect.min_y; cury <= cliprect.max_y; cury++) \
+ for (cury = cliprect.top(); cury <= cliprect.bottom(); cury++) \
{ \
- PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.min_x); \
- PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.min_x); \
+ PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.left()); \
+ PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.left()); \
const PIXEL_TYPE *srcptr; \
s32 srcx = startx; \
s32 srcy = starty; \
@@ -1110,10 +1110,10 @@ do {
starty &= srcfixheight; \
\
/* iterate over pixels in Y */ \
- for (cury = cliprect.min_y; cury <= cliprect.max_y; cury++) \
+ for (cury = cliprect.top(); cury <= cliprect.bottom(); cury++) \
{ \
- PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.min_x); \
- PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.min_x); \
+ PRIORITY_TYPE *priptr = PRIORITY_ADDR(priority, PRIORITY_TYPE, cury, cliprect.left()); \
+ PIXEL_TYPE *destptr = &dest.pixt<PIXEL_TYPE>(cury, cliprect.left()); \
const PIXEL_TYPE *srcptr; \
s32 srcx = startx; \
s32 srcy = starty; \
diff --git a/src/emu/layout/horizont.lay b/src/emu/layout/horizont.lay
deleted file mode 100644
index 908804832af..00000000000
--- a/src/emu/layout/horizont.lay
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<mamelayout version="2">
- <view name="Standard (4:3)">
- <screen index="0">
- <bounds left="0" top="0" right="4" bottom="3" />
- </screen>
- </view>
-
- <view name="Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
- </screen>
- </view>
-
- <view name="Cocktail">
- <screen index="0">
- <bounds x="0" y="-3.03" width="4" height="3" />
- <orientation rotate="180" />
- </screen>
- <screen index="0">
- <bounds x="0" y="0" width="4" height="3" />
- </screen>
- </view>
-</mamelayout>
diff --git a/src/emu/layout/lcd.lay b/src/emu/layout/lcd.lay
deleted file mode 100644
index 8de4141324a..00000000000
--- a/src/emu/layout/lcd.lay
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<mamelayout version="2">
- <view name="LCD with square pixels">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
- </screen>
- </view>
-</mamelayout>
diff --git a/src/emu/layout/lcd_rot.lay b/src/emu/layout/lcd_rot.lay
deleted file mode 100644
index 95176d24a06..00000000000
--- a/src/emu/layout/lcd_rot.lay
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<mamelayout version="2">
- <view name="LCD with square pixels">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0height~" bottom="~scr0width~" />
- </screen>
- </view>
-</mamelayout>
diff --git a/src/emu/layout/svg.lay b/src/emu/layout/svg.lay
deleted file mode 100644
index 96a25360a19..00000000000
--- a/src/emu/layout/svg.lay
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<mamelayout version="2">
- <view name="SVG">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
- </screen>
- </view>
-</mamelayout>
diff --git a/src/emu/layout/vertical.lay b/src/emu/layout/vertical.lay
deleted file mode 100644
index 2d66df317f8..00000000000
--- a/src/emu/layout/vertical.lay
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<mamelayout version="2">
- <view name="Standard (3:4)">
- <screen index="0">
- <bounds left="0" top="0" right="3" bottom="4" />
- </screen>
- </view>
-
- <view name="Pixel Aspect (~scr0nativeyaspect~:~scr0nativexaspect~)">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0height~" bottom="~scr0width~" />
- </screen>
- </view>
-
- <view name="Cocktail">
- <screen index="0">
- <bounds x="-3.03" y="0" width="3" height="4" />
- <orientation rotate="180" />
- </screen>
- <screen index="0">
- <bounds x="0" y="0" width="3" height="4" />
- </screen>
- </view>
-
- <element name="dbgdis">
- </element>
-
- <view name="Debug">
- <screen index="0">
- <bounds left="0" top="0" right="3" bottom="4" />
- </screen>
- <bezel element="dbgdis">
- <bounds x="-2.5" y="0" width="8" height="6" />
- </bezel>
- </view>
-
-</mamelayout>
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 9ec8445fa49..243b118d81e 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -46,8 +46,12 @@
#include "drivenum.h"
#include "xmlfile.h"
#include "ui/uimain.h"
+
#include <zlib.h>
+#include <algorithm>
+#include <functional>
+
//**************************************************************************
@@ -453,7 +457,7 @@ void render_texture::get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo
// add a reference and set up the source bitmap
primlist.add_reference(m_bitmap);
- texinfo.base = m_bitmap->raw_pixptr(m_sbounds.min_y, m_sbounds.min_x);
+ texinfo.base = m_bitmap->raw_pixptr(m_sbounds.top(), m_sbounds.left());
texinfo.rowpixels = m_bitmap->rowpixels();
texinfo.width = swidth;
texinfo.height = sheight;
@@ -562,20 +566,20 @@ const rgb_t *render_texture::get_adjusted_palette(render_container &container)
//-------------------------------------------------
render_container::render_container(render_manager &manager, screen_device *screen)
- : m_next(nullptr),
- m_manager(manager),
- m_screen(screen),
- m_overlaybitmap(nullptr),
- m_overlaytexture(nullptr)
+ : m_next(nullptr)
+ , m_manager(manager)
+ , m_screen(screen)
+ , m_overlaybitmap(nullptr)
+ , m_overlaytexture(nullptr)
{
// make sure it is empty
empty();
// if we have a screen, read and apply the options
- if (m_screen != nullptr)
+ if (m_screen)
{
// set the initial orientation and brightness/contrast/gamma
- m_user.m_orientation = manager.machine().system().flags & machine_flags::MASK_ORIENTATION;
+ m_user.m_orientation = m_screen->orientation();
m_user.m_brightness = manager.machine().options().brightness();
m_user.m_contrast = manager.machine().options().contrast();
m_user.m_gamma = manager.machine().options().gamma();
@@ -884,14 +888,14 @@ void render_container::update_palette()
//-------------------------------------------------
render_container::user_settings::user_settings()
- : m_orientation(0),
- m_brightness(1.0f),
- m_contrast(1.0f),
- m_gamma(1.0f),
- m_xscale(1.0f),
- m_yscale(1.0f),
- m_xoffset(0.0f),
- m_yoffset(0.0f)
+ : m_orientation(0)
+ , m_brightness(1.0f)
+ , m_contrast(1.0f)
+ , m_gamma(1.0f)
+ , m_xscale(1.0f)
+ , m_yscale(1.0f)
+ , m_xoffset(0.0f)
+ , m_yoffset(0.0f)
{
}
@@ -1676,23 +1680,53 @@ void render_target::load_additional_layout_files(const char *basename, bool have
}
- screen_device_iterator iter(m_manager.machine().root_device());
- unsigned const screens = iter.count();
-
- // now do the built-in layouts for single-screen games
- if (screens == 1)
+ // local screen info to avoid repeated code
+ class screen_info
{
- if (system.flags & ORIENTATION_SWAP_XY)
- load_layout_file(nullptr, layout_vertical);
- else
- load_layout_file(nullptr, layout_horizont);
- if (m_filelist.empty())
- throw emu_fatalerror("Couldn't parse default layout??");
- }
+ public:
+ screen_info(screen_device const &screen)
+ : m_device(screen)
+ , m_rotated(screen.orientation() & ORIENTATION_SWAP_XY)
+ , m_physical(screen.physical_aspect())
+ , m_native(screen.visible_area().width(), screen.visible_area().height())
+ {
+ util::reduce_fraction(m_native.first, m_native.second);
+ if (m_rotated)
+ {
+ std::swap(m_physical.first, m_physical.second);
+ std::swap(m_native.first, m_native.second);
+ }
+ }
+
+ screen_device const &device() const { return m_device.get(); }
+ bool rotated() const { return m_rotated; }
+ bool square() const { return m_physical == m_native; }
+ unsigned physical_x() const { return m_physical.first; }
+ unsigned physical_y() const { return m_physical.second; }
+ unsigned native_x() const { return m_native.first; }
+ unsigned native_y() const { return m_native.second; }
+
+ std::pair<float, float> tiled_size() const
+ {
+ if (physical_x() == physical_y())
+ return std::make_pair(1.0F, 1.0F);
+ else if (physical_x() > physical_y())
+ return std::make_pair(1.0F, float(physical_y()) / physical_x());
+ else
+ return std::make_pair(float(physical_x()) / physical_y(), 1.0F);
+ }
+
+ private:
+ std::reference_wrapper<screen_device const> m_device;
+ bool m_rotated;
+ std::pair<unsigned, unsigned> m_physical, m_native;
+ };
+ screen_device_iterator iter(m_manager.machine().root_device());
+ std::vector<screen_info> const screens(std::begin(iter), std::end(iter));
if (!have_default && !have_artwork)
{
- if (screens == 2)
+ if (screens.size() == 2U)
{
load_layout_file(nullptr, layout_dualhsxs);
if (m_filelist.empty())
@@ -1700,7 +1734,7 @@ void render_target::load_additional_layout_files(const char *basename, bool have
}
}
- if (screens == 0) // ensure the fallback view for systems with no screens is loaded if necessary
+ if (screens.empty()) // ensure the fallback view for systems with no screens is loaded if necessary
{
if (!view_by_index(0))
{
@@ -1709,7 +1743,7 @@ void render_target::load_additional_layout_files(const char *basename, bool have
throw emu_fatalerror("Couldn't parse default layout??");
}
}
- else if (screens >= 2) // generate default layouts for larger numbers of screens
+ else // generate default layouts for larger numbers of screens
{
util::xml::file::ptr const root(util::xml::file::create());
if (!root)
@@ -1719,17 +1753,18 @@ void render_target::load_additional_layout_files(const char *basename, bool have
throw emu_fatalerror("Couldn't create XML node??");
layoutnode->set_attribute_int("version", 2);
- // get standard width/height assuming 4:3 screens
- unsigned const stdwidth((system.flags & ORIENTATION_SWAP_XY) ? 3 : 4);
- unsigned const stdheight((system.flags & ORIENTATION_SWAP_XY) ? 4 : 3);
-
- // generate individual 4:3 views
- for (unsigned i = 0; screens > i; ++i)
+ // generate individual physical aspect views
+ for (unsigned i = 0; screens.size() > i; ++i)
{
util::xml::data_node *const viewnode(layoutnode->add_child("view", nullptr));
if (!viewnode)
throw emu_fatalerror("Couldn't create XML node??");
- viewnode->set_attribute("name", util::xml::normalize_string(util::string_format("Screen %1$u Standard (%2$u:%3$u)", i, stdwidth, stdheight).c_str()));
+ viewnode->set_attribute(
+ "name",
+ util::xml::normalize_string(
+ util::string_format(
+ "Screen %1$u Standard (%2$u:%3$u)",
+ i, screens[i].physical_x(), screens[i].physical_y()).c_str()));
util::xml::data_node *const screennode(viewnode->add_child("screen", nullptr));
if (!screennode)
throw emu_fatalerror("Couldn't create XML node??");
@@ -1739,40 +1774,85 @@ void render_target::load_additional_layout_files(const char *basename, bool have
throw emu_fatalerror("Couldn't create XML node??");
boundsnode->set_attribute_int("x", 0);
boundsnode->set_attribute_int("y", 0);
- boundsnode->set_attribute_int("width", stdwidth);
- boundsnode->set_attribute_int("height", stdheight);
+ boundsnode->set_attribute_int("width", screens[i].physical_x());
+ boundsnode->set_attribute_int("height", screens[i].physical_y());
}
// generate individual pixel aspect views
- for (unsigned i = 0; screens > i; ++i)
+ for (unsigned i = 0; screens.size() > i; ++i)
+ {
+ if (!screens[i].square())
+ {
+ util::xml::data_node *const viewnode(layoutnode->add_child("view", nullptr));
+ if (!viewnode)
+ throw emu_fatalerror("Couldn't create XML node??");
+ viewnode->set_attribute(
+ "name",
+ util::xml::normalize_string(
+ util::string_format(
+ "Screen %1$u Pixel Aspect (%2$u:%3$u)",
+ i, screens[i].native_x(), screens[i].native_y()).c_str()));
+ util::xml::data_node *const screennode(viewnode->add_child("screen", nullptr));
+ if (!screennode)
+ throw emu_fatalerror("Couldn't create XML node??");
+ screennode->set_attribute_int("index", i);
+ util::xml::data_node *const boundsnode(screennode->add_child("bounds", nullptr));
+ if (!boundsnode)
+ throw emu_fatalerror("Couldn't create XML node??");
+ boundsnode->set_attribute_int("x", 0);
+ boundsnode->set_attribute_int("y", 0);
+ boundsnode->set_attribute_int("width", screens[i].native_x());
+ boundsnode->set_attribute_int("height", screens[i].native_y());
+ }
+ }
+
+ // generate the fake cocktail view for single-screen systems
+ if (screens.size() == 1U)
{
util::xml::data_node *const viewnode(layoutnode->add_child("view", nullptr));
if (!viewnode)
throw emu_fatalerror("Couldn't create XML node??");
- viewnode->set_attribute("name", util::xml::normalize_string(util::string_format("Screen %1$u Pixel Aspect (~scr%1$unativexaspect~:~scr%1$unativeyaspect~)", i).c_str()));
+ viewnode->set_attribute("name", "Cocktail");
+
+ util::xml::data_node *const mirrornode(viewnode->add_child("screen", nullptr));
+ if (!mirrornode)
+ throw emu_fatalerror("Couldn't create XML node??");
+ mirrornode->set_attribute_int("index", 0);
+ util::xml::data_node *const mirrorbounds(mirrornode->add_child("bounds", nullptr));
+ if (!mirrorbounds)
+ throw emu_fatalerror("Couldn't create XML node??");
+ mirrorbounds->set_attribute_int("x", 0);
+ mirrorbounds->set_attribute_float("y", (-0.01 * (std::min)(screens[0].physical_x(), screens[0].physical_y())) - screens[0].physical_y());
+ mirrorbounds->set_attribute_int("width", screens[0].physical_x());
+ mirrorbounds->set_attribute_int("height", screens[0].physical_y());
+ util::xml::data_node *const flipper(mirrornode->add_child("orientation", nullptr));
+ if (!flipper)
+ throw emu_fatalerror("Couldn't create XML node??");
+ flipper->set_attribute_int("rotate", 180);
+
util::xml::data_node *const screennode(viewnode->add_child("screen", nullptr));
if (!screennode)
throw emu_fatalerror("Couldn't create XML node??");
- screennode->set_attribute_int("index", i);
- util::xml::data_node *const boundsnode(screennode->add_child("bounds", nullptr));
- if (!boundsnode)
+ screennode->set_attribute_int("index", 0);
+ util::xml::data_node *const screenbounds(screennode->add_child("bounds", nullptr));
+ if (!screenbounds)
throw emu_fatalerror("Couldn't create XML node??");
- boundsnode->set_attribute_int("x", 0);
- boundsnode->set_attribute_int("y", 0);
- boundsnode->set_attribute("width", util::xml::normalize_string(util::string_format("~scr%1$uwidth~", i).c_str()));
- boundsnode->set_attribute("height", util::xml::normalize_string(util::string_format("~scr%1$uheight~", i).c_str()));
+ screenbounds->set_attribute_int("x", 0);
+ screenbounds->set_attribute_int("y", 0);
+ screenbounds->set_attribute_int("width", screens[0].physical_x());
+ screenbounds->set_attribute_int("height", screens[0].physical_y());
}
// generate tiled views if the supplied artwork doesn't provide a view of all screens
- bool need_tiles(screens >= 3);
- if (!need_tiles)
+ bool need_tiles(screens.size() >= 3);
+ if (!need_tiles && (screens.size() >= 2))
{
need_tiles = true;
int viewindex(0);
for (layout_view *view = view_by_index(viewindex); need_tiles && view; view = view_by_index(++viewindex))
{
render_screen_list const &viewscreens(view->screens());
- if (viewscreens.count() >= screens)
+ if (viewscreens.count() >= screens.size())
{
bool screen_missing(false);
for (screen_device &screen : iter)
@@ -1790,93 +1870,119 @@ void render_target::load_additional_layout_files(const char *basename, bool have
}
if (need_tiles)
{
- // helper for generating a view since we do this a lot
+ // helpers for generating a view since we do this a lot
+ std::vector<float> widths(screens.size()), heights(screens.size());
+ std::vector<std::pair<float, float> > sizes(screens.size());
+ std::transform(screens.begin(), screens.end(), sizes.begin(), [] (screen_info const &s) { return s.tiled_size(); });
auto const generate_view =
- [&layoutnode, screens, stdwidth, stdheight] (char const *title, auto &&bounds_callback)
+ [&layoutnode, &screens, &widths, &heights, &sizes] (char const *title, unsigned columns, bool gapless, auto &&mapper)
{
+ // calculate necessary widths/heights of rows/columns restricting screens to unit square
+ assert(0U < columns);
+ assert(screens.size() >= columns);
+ unsigned const rows((screens.size() + columns - 1) / columns);
+ std::fill_n(widths.begin(), columns, 0.0F);
+ std::fill_n(heights.begin(), rows, 0.0F);
+ for (unsigned y = 0U; rows > y; ++y)
+ {
+ for (unsigned x = 0U; columns > x; ++x)
+ {
+ int const i(mapper(x, y));
+ if (0 <= i)
+ {
+ widths[x] = (std::max)(widths[x], sizes[i].first);
+ heights[y] = (std::max)(heights[y], sizes[i].second);
+ }
+ }
+ }
+
+ // spacing is 1% of minor dimension
+ float spacing(0.0F);
+ if (!gapless)
+ {
+ spacing = 0.01F * (std::min)(
+ *std::max_element(widths.begin(), widths.begin() + columns),
+ *std::max_element(heights.begin(), heights.begin() + rows));
+ }
+
+ // actually generate elements
util::xml::data_node *viewnode = layoutnode->add_child("view", nullptr);
if (!viewnode)
throw emu_fatalerror("Couldn't create XML node??");
viewnode->set_attribute("name", util::xml::normalize_string(title));
- for (unsigned i = 0; screens > i; ++i)
+ float ypos(0.0F);
+ for (unsigned y = 0U; rows > y; ypos += heights[y] + spacing, ++y)
{
- util::xml::data_node *const screennode(viewnode->add_child("screen", nullptr));
- if (!screennode)
- throw emu_fatalerror("Couldn't create XML node??");
- screennode->set_attribute_int("index", i);
- util::xml::data_node *const boundsnode(screennode->add_child("bounds", nullptr));
- if (!boundsnode)
- throw emu_fatalerror("Couldn't create XML node??");
- bounds_callback(*boundsnode, i);
- boundsnode->set_attribute_int("width", stdwidth);
- boundsnode->set_attribute_int("height", stdheight);
+ float xpos(0.0F);
+ for (unsigned x = 0U; columns > x; xpos += widths[x] + spacing, ++x)
+ {
+ int const i(mapper(x, y));
+ if (0 <= i)
+ {
+ util::xml::data_node *const screennode(viewnode->add_child("screen", nullptr));
+ if (!screennode)
+ throw emu_fatalerror("Couldn't create XML node??");
+ screennode->set_attribute_int("index", i);
+ util::xml::data_node *const boundsnode(screennode->add_child("bounds", nullptr));
+ if (!boundsnode)
+ throw emu_fatalerror("Couldn't create XML node??");
+ boundsnode->set_attribute_float("x", xpos + ((widths[x] - sizes[i].first) / 2));
+ boundsnode->set_attribute_float("y", ypos + ((heights[y] - sizes[i].second) / 2));
+ boundsnode->set_attribute_float("width", sizes[i].first);
+ boundsnode->set_attribute_float("height", sizes[i].second);
+ }
+ }
}
};
// generate linear views
- generate_view(
- "Left-to-Right",
- [stdwidth] (util::xml::data_node &boundsnode, unsigned i)
- {
- boundsnode.set_attribute_float("x", i * (stdwidth + 0.03f));
- boundsnode.set_attribute_int("y", 0);
- });
- generate_view(
- "Left-to-Right (Gapless)",
- [stdwidth] (util::xml::data_node &boundsnode, unsigned i)
- {
- boundsnode.set_attribute_int("x", i * stdwidth);
- boundsnode.set_attribute_int("y", 0);
- });
- generate_view(
- "Top-to-Bottom",
- [stdheight] (util::xml::data_node &boundsnode, unsigned i)
- {
- boundsnode.set_attribute_int("x", 0);
- boundsnode.set_attribute_float("y", i * (stdheight + 0.03f));
- });
- generate_view(
- "Top-to-Bottom (Gapless)",
- [stdheight] (util::xml::data_node &boundsnode, unsigned i)
- {
- boundsnode.set_attribute_int("x", 0);
- boundsnode.set_attribute_int("y", i * stdheight);
- });
+ generate_view("Left-to-Right", screens.size(), false, [] (unsigned x, unsigned y) { return x; });
+ generate_view("Left-to-Right (Gapless)", screens.size(), true, [] (unsigned x, unsigned y) { return x; });
+ generate_view("Top-to-Bottom", 1U, false, [] (unsigned x, unsigned y) { return y; });
+ generate_view("Top-to-Bottom (Gapless)", 1U, true, [] (unsigned x, unsigned y) { return y; });
// generate tiled views
- for (unsigned mindim = 2; ((screens + mindim - 1) / mindim) >= mindim; ++mindim)
+ for (unsigned mindim = 2; ((screens.size() + mindim - 1) / mindim) >= mindim; ++mindim)
{
- unsigned const majdim((screens + mindim - 1) / mindim);
- unsigned const remainder(screens % majdim);
+ unsigned const majdim((screens.size() + mindim - 1) / mindim);
+ unsigned const remainder(screens.size() % majdim);
if (!remainder || (((majdim + 1) / 2) <= remainder))
{
generate_view(
util::string_format("%1$u\xC3\x97%2$u Left-to-Right, Top-to-Bottom", majdim, mindim).c_str(),
- [majdim, stdwidth, stdheight] (util::xml::data_node &boundsnode, unsigned i)
+ majdim,
+ false,
+ [&screens, majdim] (unsigned x, unsigned y)
{
- boundsnode.set_attribute_float("x", (i % majdim) * (stdwidth + 0.03f));
- boundsnode.set_attribute_float("y", (i / majdim) * (stdheight + 0.03f));
+ unsigned const i(x + (y * majdim));
+ return (screens.size() > i) ? int(i) : -1;
});
generate_view(
util::string_format("%1$u\xC3\x97%2$u Left-to-Right, Top-to-Bottom (Gapless)", majdim, mindim).c_str(),
- [majdim, stdwidth, stdheight] (util::xml::data_node &boundsnode, unsigned i)
+ majdim,
+ true,
+ [&screens, majdim] (unsigned x, unsigned y)
{
- boundsnode.set_attribute_int("x", (i % majdim) * stdwidth);
- boundsnode.set_attribute_int("y", (i / majdim) * stdheight);
+ unsigned const i(x + (y * majdim));
+ return (screens.size() > i) ? int(i) : -1;
});
generate_view(
util::string_format("%1$u\xC3\x97%2$u Top-to-Bottom, Left-to-Right", mindim, majdim).c_str(),
- [majdim, stdwidth, stdheight] (util::xml::data_node &boundsnode, unsigned i)
+ mindim,
+ false,
+ [&screens, majdim] (unsigned x, unsigned y)
{
- boundsnode.set_attribute_float("x", (i / majdim) * (stdwidth + 0.03f));
- boundsnode.set_attribute_float("y", (i % majdim) * (stdheight + 0.03f));
+ unsigned const i((x * majdim) + y);
+ return (screens.size() > i) ? int(i) : -1;
});
generate_view(
util::string_format("%1$u\xC3\x97%2$u Top-to-Bottom, Left-to-Right (Gapless)", mindim, majdim).c_str(),
- [majdim, stdwidth, stdheight] (util::xml::data_node &boundsnode, unsigned i)
+ mindim,
+ true,
+ [&screens, majdim] (unsigned x, unsigned y)
{
- boundsnode.set_attribute_int("x", (i / majdim) * stdwidth);
- boundsnode.set_attribute_int("y", (i % majdim) * stdheight);
+ unsigned const i((x * majdim) + y);
+ return (screens.size() > i) ? int(i) : -1;
});
}
}
diff --git a/src/emu/rendfont.cpp b/src/emu/rendfont.cpp
index 5e7f0329fd2..a71a119f75f 100644
--- a/src/emu/rendfont.cpp
+++ b/src/emu/rendfont.cpp
@@ -524,10 +524,9 @@ inline render_font::glyph &render_font::get_char(char32_t chnum)
gl.bmheight = int(glyph_ch.bmheight * scale + 0.5f);
gl.bitmap.allocate(gl.bmwidth, gl.bmheight);
- rectangle clip;
- clip.min_x = clip.min_y = 0;
- clip.max_x = glyph_ch.bitmap.width() - 1;
- clip.max_y = glyph_ch.bitmap.height() - 1;
+ rectangle clip(
+ 0, glyph_ch.bitmap.width() - 1,
+ 0, glyph_ch.bitmap.height() - 1);
render_texture::hq_scale(gl.bitmap, glyph_ch.bitmap, clip, nullptr);
/* wrap a texture around the bitmap */
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 896391b264e..1d5dd7eadd5 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -40,10 +40,6 @@
// screenless layouts
#include "noscreens.lh"
-// single screen layouts
-#include "horizont.lh"
-#include "vertical.lh"
-
// dual screen layouts
#include "dualhsxs.lh"
#include "dualhovu.lh"
@@ -55,13 +51,6 @@
// quad screen layouts
#include "quadhsxs.lh"
-// LCD screen layouts
-#include "lcd.lh"
-#include "lcd_rot.lh"
-
-// SVG screen layouts
-#include "svg.lh"
-
namespace {
@@ -87,38 +76,6 @@ std::locale const f_portable_locale("C");
//**************************************************************************
//-------------------------------------------------
-// gcd - compute the greatest common divisor (GCD)
-// of two integers using the Euclidean algorithm
-//-------------------------------------------------
-
-template <typename M, typename N>
-constexpr std::common_type_t<M, N> gcd(M a, N b)
-{
- return b ? gcd(b, a % b) : a;
-}
-
-
-//-------------------------------------------------
-// reduce_fraction - reduce a fraction by
-// dividing out common factors
-//-------------------------------------------------
-
-template <typename M, typename N>
-inline void reduce_fraction(M &num, N &den)
-{
- // search the greatest common divisor
- auto const div = gcd(num, den);
-
- // reduce the fraction if a common divisor has been found
- if (div)
- {
- num /= div;
- den /= div;
- }
-}
-
-
-//-------------------------------------------------
// render_bounds_transform - apply translation/
// scaling
//-------------------------------------------------
@@ -430,9 +387,20 @@ private:
unsigned i(0U);
for (screen_device const &screen : screen_device_iterator(machine().root_device()))
{
+ std::pair<u64, u64> const physaspect(screen.physical_aspect());
s64 const w(screen.visible_area().width()), h(screen.visible_area().height());
s64 xaspect(w), yaspect(h);
- reduce_fraction(xaspect, yaspect);
+ util::reduce_fraction(xaspect, yaspect);
+
+ tmp.seekp(0);
+ util::stream_format(tmp, "scr%uphysicalxaspect", i);
+ tmp.put('\0');
+ try_insert(&tmp.vec()[0], s64(physaspect.first));
+
+ tmp.seekp(0);
+ util::stream_format(tmp, "scr%uphysicalyaspect", i);
+ tmp.put('\0');
+ try_insert(&tmp.vec()[0], s64(physaspect.second));
tmp.seekp(0);
util::stream_format(tmp, "scr%unativexaspect", i);
@@ -1171,11 +1139,11 @@ void layout_element::element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, c
if (curcomp->state() == -1 || curcomp->state() == elemtex->m_state)
{
// get the local scaled bounds
- rectangle bounds;
- bounds.min_x = render_round_nearest(curcomp->bounds().x0 * dest.width());
- bounds.min_y = render_round_nearest(curcomp->bounds().y0 * dest.height());
- bounds.max_x = render_round_nearest(curcomp->bounds().x1 * dest.width());
- bounds.max_y = render_round_nearest(curcomp->bounds().y1 * dest.height());
+ rectangle bounds(
+ render_round_nearest(curcomp->bounds().x0 * dest.width()),
+ render_round_nearest(curcomp->bounds().x1 * dest.width()),
+ render_round_nearest(curcomp->bounds().y0 * dest.height()),
+ render_round_nearest(curcomp->bounds().y1 * dest.height()));
bounds &= dest.cliprect();
// based on the component type, add to the texture
@@ -1287,9 +1255,9 @@ protected:
u32 const inva = (1.0f - color().a) * 255.0f;
// iterate over X and Y
- for (u32 y = bounds.min_y; y <= bounds.max_y; y++)
+ for (u32 y = bounds.top(); y <= bounds.bottom(); y++)
{
- for (u32 x = bounds.min_x; x <= bounds.max_x; x++)
+ for (u32 x = bounds.left(); x <= bounds.right(); x++)
{
u32 finalr = r;
u32 finalg = g;
@@ -1340,7 +1308,7 @@ protected:
float const ooyradius2 = 1.0f / (yradius * yradius);
// iterate over y
- for (u32 y = bounds.min_y; y <= bounds.max_y; y++)
+ for (u32 y = bounds.top(); y <= bounds.bottom(); y++)
{
float ycoord = ycenter - ((float)y + 0.5f);
float xval = xradius * sqrtf(1.0f - (ycoord * ycoord) * ooyradius2);
@@ -2189,23 +2157,23 @@ protected:
if (m_reelreversed==1)
{
- basey = bounds.min_y + ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry;
+ basey = bounds.top() + ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry;
}
else
{
- basey = bounds.min_y - ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry;
+ basey = bounds.top() - ((use_state)*(ourheight/num_shown)/(max_state_used/m_numstops)) + curry;
}
// wrap around...
- if (basey < bounds.min_y)
+ if (basey < bounds.top())
basey += ((max_state_used)*(ourheight/num_shown)/(max_state_used/m_numstops));
- if (basey > bounds.max_y)
+ if (basey > bounds.bottom())
basey -= ((max_state_used)*(ourheight/num_shown)/(max_state_used/m_numstops));
int endpos = basey+ourheight/num_shown;
// only render the symbol / text if it's atually in view because the code is SLOW
- if ((endpos >= bounds.min_y) && (basey <= bounds.max_y))
+ if ((endpos >= bounds.top()) && (basey <= bounds.bottom()))
{
while (1)
{
@@ -2216,7 +2184,7 @@ protected:
}
s32 curx;
- curx = bounds.min_x + (bounds.width() - width) / 2;
+ curx = bounds.left() + (bounds.width() - width) / 2;
if (m_file[fruit])
if (!m_bitmap[fruit].valid())
@@ -2234,14 +2202,14 @@ protected:
{
int effy = basey + y;
- if (effy >= bounds.min_y && effy <= bounds.max_y)
+ if (effy >= bounds.top() && effy <= bounds.bottom())
{
u32 *src = &tempbitmap2.pix32(y);
u32 *d = &dest.pix32(effy);
for (int x = 0; x < dest.width(); x++)
{
int effx = x;
- if (effx >= bounds.min_x && effx <= bounds.max_x)
+ if (effx >= bounds.left() && effx <= bounds.right())
{
u32 spix = rgb_t(src[x]).a();
if (spix != 0)
@@ -2281,14 +2249,14 @@ protected:
{
int effy = basey + y;
- if (effy >= bounds.min_y && effy <= bounds.max_y)
+ if (effy >= bounds.top() && effy <= bounds.bottom())
{
u32 *src = &tempbitmap.pix32(y);
u32 *d = &dest.pix32(effy);
for (int x = 0; x < chbounds.width(); x++)
{
- int effx = curx + x + chbounds.min_x;
- if (effx >= bounds.min_x && effx <= bounds.max_x)
+ int effx = curx + x + chbounds.left();
+ if (effx >= bounds.left() && effx <= bounds.right())
{
u32 spix = rgb_t(src[x]).a();
if (spix != 0)
@@ -2356,15 +2324,15 @@ private:
}
// wrap around...
- if (basex < bounds.min_x)
+ if (basex < bounds.left())
basex += ((max_state_used)*(ourwidth/num_shown)/(max_state_used/m_numstops));
- if (basex > bounds.max_x)
+ if (basex > bounds.right())
basex -= ((max_state_used)*(ourwidth/num_shown)/(max_state_used/m_numstops));
int endpos = basex+(ourwidth/num_shown);
// only render the symbol / text if it's atually in view because the code is SLOW
- if ((endpos >= bounds.min_x) && (basex <= bounds.max_x))
+ if ((endpos >= bounds.left()) && (basex <= bounds.right()))
{
while (1)
{
@@ -2375,7 +2343,7 @@ private:
}
s32 curx;
- curx = bounds.min_x;
+ curx = bounds.left();
if (m_file[fruit])
if (!m_bitmap[fruit].valid())
@@ -2393,14 +2361,14 @@ private:
{
int effy = y;
- if (effy >= bounds.min_y && effy <= bounds.max_y)
+ if (effy >= bounds.top() && effy <= bounds.bottom())
{
u32 *src = &tempbitmap2.pix32(y);
u32 *d = &dest.pix32(effy);
for (int x = 0; x < ourwidth/num_shown; x++)
{
int effx = basex + x;
- if (effx >= bounds.min_x && effx <= bounds.max_x)
+ if (effx >= bounds.left() && effx <= bounds.right())
{
u32 spix = rgb_t(src[x]).a();
if (spix != 0)
@@ -2442,14 +2410,14 @@ private:
{
int effy = y;
- if (effy >= bounds.min_y && effy <= bounds.max_y)
+ if (effy >= bounds.top() && effy <= bounds.bottom())
{
u32 *src = &tempbitmap.pix32(y);
u32 *d = &dest.pix32(effy);
for (int x = 0; x < chbounds.width(); x++)
{
int effx = basex + curx + x;
- if (effx >= bounds.min_x && effx <= bounds.max_x)
+ if (effx >= bounds.left() && effx <= bounds.right())
{
u32 spix = rgb_t(src[x]).a();
if (spix != 0)
@@ -2650,17 +2618,17 @@ void layout_element::component::draw_text(render_font &font, bitmap_argb32 &dest
{
// left
case 1:
- curx = bounds.min_x;
+ curx = bounds.left();
break;
// right
case 2:
- curx = bounds.max_x - width;
+ curx = bounds.right() - width;
break;
// default to center
default:
- curx = bounds.min_x + (bounds.width() - width) / 2;
+ curx = bounds.left() + (bounds.width() - width) / 2;
break;
}
@@ -2688,15 +2656,15 @@ void layout_element::component::draw_text(render_font &font, bitmap_argb32 &dest
// copy the data into the target
for (int y = 0; y < chbounds.height(); y++)
{
- int effy = bounds.min_y + y;
- if (effy >= bounds.min_y && effy <= bounds.max_y)
+ int effy = bounds.top() + y;
+ if (effy >= bounds.top() && effy <= bounds.bottom())
{
u32 *src = &tempbitmap.pix32(y);
u32 *d = &dest.pix32(effy);
for (int x = 0; x < chbounds.width(); x++)
{
- int effx = curx + x + chbounds.min_x;
- if (effx >= bounds.min_x && effx <= bounds.max_x)
+ int effx = curx + x + chbounds.left();
+ if (effx >= bounds.left() && effx <= bounds.right())
{
u32 spix = rgb_t(src[x]).a();
if (spix != 0)
diff --git a/src/emu/rendlay.h b/src/emu/rendlay.h
index e51a783e968..d1de55f73ef 100644
--- a/src/emu/rendlay.h
+++ b/src/emu/rendlay.h
@@ -21,10 +21,6 @@
// no screens layouts
extern const internal_layout layout_noscreens; // for screenless systems
-// single screen layouts
-extern const internal_layout layout_horizont; // horizontal 4:3 screens
-extern const internal_layout layout_vertical; // vertical 4:3 screens
-
// dual screen layouts
extern const internal_layout layout_dualhsxs; // dual 4:3 screens side-by-side
extern const internal_layout layout_dualhovu; // dual 4:3 screens above and below
@@ -36,11 +32,4 @@ extern const internal_layout layout_triphsxs; // triple 4:3 screens side-by-s
// quad screen layouts
extern const internal_layout layout_quadhsxs; // quad 4:3 screens side-by-side
-// LCD screen layouts
-extern const internal_layout layout_lcd; // generic 1:1 lcd screen layout
-extern const internal_layout layout_lcd_rot; // same, for use with ROT90 or ROT270
-
-// SVG screen layouts
-extern const internal_layout layout_svg; // generic 1:1 lcd screen layout
-
#endif // MAME_EMU_RENDLAY_H
diff --git a/src/emu/save.h b/src/emu/save.h
index 4559d230b96..9097c195dec 100644
--- a/src/emu/save.h
+++ b/src/emu/save.h
@@ -17,6 +17,8 @@
#ifndef MAME_EMU_SAVE_H
#define MAME_EMU_SAVE_H
+#include <array>
+
//**************************************************************************
@@ -86,6 +88,29 @@ class rewinder;
class save_manager
{
+ // stuff for working with arrays
+ template <typename T> struct array_unwrap
+ {
+ using underlying_type = T;
+ static constexpr std::size_t COUNT = 1U;
+ static constexpr std::size_t SIZE = sizeof(underlying_type);
+ static underlying_type *ptr(T &value) { return &value; }
+ };
+ template <typename T, std::size_t N> struct array_unwrap<T[N]>
+ {
+ using underlying_type = typename array_unwrap<T>::underlying_type;
+ static constexpr std::size_t COUNT = N * array_unwrap<T>::COUNT;
+ static constexpr std::size_t SIZE = sizeof(underlying_type);
+ static underlying_type *ptr(T (&value)[N]) { return array_unwrap<T>::ptr(value[0]); }
+ };
+ template <typename T, std::size_t N> struct array_unwrap<std::array<T, N> >
+ {
+ using underlying_type = typename array_unwrap<T>::underlying_type;
+ static constexpr std::size_t COUNT = N * array_unwrap<T>::COUNT;
+ static constexpr std::size_t SIZE = sizeof(underlying_type);
+ static underlying_type *ptr(std::array<T, N> &value) { return array_unwrap<T>::ptr(value[0]); }
+ };
+
// type_checker is a set of templates to identify valid save types
template<typename ItemType> struct type_checker { static const bool is_atom = false; static const bool is_pointer = false; };
template<typename ItemType> struct type_checker<ItemType*> { static const bool is_atom = false; static const bool is_pointer = true; };
@@ -118,45 +143,33 @@ public:
// generic memory registration
void save_memory(device_t *device, const char *module, const char *tag, u32 index, const char *name, void *val, u32 valsize, u32 valcount = 1);
- // templatized wrapper for general objects
+ // templatized wrapper for general objects and arrays
template<typename ItemType>
void save_item(device_t *device, const char *module, const char *tag, int index, ItemType &value, const char *valname)
{
- if (type_checker<ItemType>::is_pointer) throw emu_fatalerror("Called save_item on a pointer with no count!");
- if (!type_checker<ItemType>::is_atom) throw emu_fatalerror("Called save_item on a non-fundamental type!");
- save_memory(device, module, tag, index, valname, &value, sizeof(ItemType));
- }
-
- // templatized wrapper for 1-dimensional arrays
- template<typename ItemType, std::size_t N>
- void save_item(device_t *device, const char *module, const char *tag, int index, ItemType (&value)[N], const char *valname)
- {
- if (!type_checker<ItemType>::is_atom) throw emu_fatalerror("Called save_item on a non-fundamental type!");
- save_memory(device, module, tag, index, valname, &value[0], sizeof(ItemType), N);
- }
-
- // templatized wrapper for 2-dimensional arrays
- template<typename ItemType, std::size_t M, std::size_t N>
- void save_item(device_t *device, const char *module, const char *tag, int index, ItemType (&value)[M][N], const char *valname)
- {
- if (!type_checker<ItemType>::is_atom) throw emu_fatalerror("Called save_item on a non-fundamental type!");
- save_memory(device, module, tag, index, valname, &value[0][0], sizeof(ItemType), M * N);
+ if (type_checker<ItemType>::is_pointer)
+ throw emu_fatalerror("Called save_item on a pointer with no count!");
+ if (!type_checker<typename array_unwrap<ItemType>::underlying_type>::is_atom)
+ throw emu_fatalerror("Called save_item on a non-fundamental type!");
+ save_memory(device, module, tag, index, valname, array_unwrap<ItemType>::ptr(value), array_unwrap<ItemType>::SIZE, array_unwrap<ItemType>::COUNT);
}
// templatized wrapper for pointers
template<typename ItemType>
void save_pointer(device_t *device, const char *module, const char *tag, int index, ItemType *value, const char *valname, u32 count)
{
- if (!type_checker<ItemType>::is_atom) throw emu_fatalerror("Called save_item on a non-fundamental type!");
- save_memory(device, module, tag, index, valname, value, sizeof(ItemType), count);
+ if (!type_checker<typename array_unwrap<ItemType>::underlying_type>::is_atom)
+ throw emu_fatalerror("Called save_item on a non-fundamental type!");
+ save_memory(device, module, tag, index, valname, array_unwrap<ItemType>::ptr(value[0]), array_unwrap<ItemType>::SIZE, array_unwrap<ItemType>::COUNT * count);
}
// templatized wrapper for std::unique_ptr
template<typename ItemType>
void save_pointer(device_t *device, const char *module, const char *tag, int index, std::unique_ptr<ItemType[]> &value, const char *valname, u32 count)
{
- if (!type_checker<ItemType>::is_atom) throw emu_fatalerror("Called save_item on a non-fundamental type!");
- save_memory(device, module, tag, index, valname, value.get(), sizeof(ItemType), count);
+ if (!type_checker<typename array_unwrap<ItemType>::underlying_type>::is_atom)
+ throw emu_fatalerror("Called save_item on a non-fundamental type!");
+ save_memory(device, module, tag, index, valname, array_unwrap<ItemType>::ptr(value[0]), array_unwrap<ItemType>::SIZE, array_unwrap<ItemType>::COUNT * count);
}
// global memory registration
diff --git a/src/emu/schedule.cpp b/src/emu/schedule.cpp
index d281446d6c6..e2b1497995f 100644
--- a/src/emu/schedule.cpp
+++ b/src/emu/schedule.cpp
@@ -460,8 +460,12 @@ void device_scheduler::timeslice()
delta += ATTOSECONDS_PER_SECOND;
assert(delta == (target - exec->m_localtime).as_attoseconds());
+ if (exec->m_attoseconds_per_cycle == 0)
+ {
+ exec->m_localtime = target;
+ }
// if we have enough for at least 1 cycle, do the math
- if (delta >= exec->m_attoseconds_per_cycle)
+ else if (delta >= exec->m_attoseconds_per_cycle)
{
// compute how many cycles we want to execute
int ran = exec->m_cycles_running = divu_64x32(u64(delta) >> exec->m_divshift, exec->m_divisor);
diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp
index 00a1a6435e7..2ec5b660876 100644
--- a/src/emu/screen.cpp
+++ b/src/emu/screen.cpp
@@ -546,43 +546,45 @@ void screen_device::svg_renderer::rebuild_cache()
//-------------------------------------------------
screen_device::screen_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
- : device_t(mconfig, SCREEN, tag, owner, clock),
- m_type(SCREEN_TYPE_RASTER),
- m_oldstyle_vblank_supplied(false),
- m_refresh(0),
- m_vblank(0),
- m_xoffset(0.0f),
- m_yoffset(0.0f),
- m_xscale(1.0f),
- m_yscale(1.0f),
- m_screen_vblank(*this),
- m_palette(*this, finder_base::DUMMY_TAG),
- m_video_attributes(0),
- m_svg_region(nullptr),
- m_container(nullptr),
- m_width(100),
- m_height(100),
- m_visarea(0, 99, 0, 99),
- m_texformat(),
- m_curbitmap(0),
- m_curtexture(0),
- m_changed(true),
- m_last_partial_scan(0),
- m_partial_scan_hpos(0),
- m_color(rgb_t(0xff, 0xff, 0xff, 0xff)),
- m_brightness(0xff),
- m_frame_period(DEFAULT_FRAME_PERIOD.as_attoseconds()),
- m_scantime(1),
- m_pixeltime(1),
- m_vblank_period(0),
- m_vblank_start_time(attotime::zero),
- m_vblank_end_time(attotime::zero),
- m_vblank_begin_timer(nullptr),
- m_vblank_end_timer(nullptr),
- m_scanline0_timer(nullptr),
- m_scanline_timer(nullptr),
- m_frame_number(0),
- m_partial_updates_this_frame(0)
+ : device_t(mconfig, SCREEN, tag, owner, clock)
+ , m_type(SCREEN_TYPE_RASTER)
+ , m_orientation(ROT0)
+ , m_phys_aspect(0U, 0U)
+ , m_oldstyle_vblank_supplied(false)
+ , m_refresh(0)
+ , m_vblank(0)
+ , m_xoffset(0.0f)
+ , m_yoffset(0.0f)
+ , m_xscale(1.0f)
+ , m_yscale(1.0f)
+ , m_screen_vblank(*this)
+ , m_palette(*this, finder_base::DUMMY_TAG)
+ , m_video_attributes(0)
+ , m_svg_region(nullptr)
+ , m_container(nullptr)
+ , m_width(100)
+ , m_height(100)
+ , m_visarea(0, 99, 0, 99)
+ , m_texformat()
+ , m_curbitmap(0)
+ , m_curtexture(0)
+ , m_changed(true)
+ , m_last_partial_scan(0)
+ , m_partial_scan_hpos(0)
+ , m_color(rgb_t(0xff, 0xff, 0xff, 0xff))
+ , m_brightness(0xff)
+ , m_frame_period(DEFAULT_FRAME_PERIOD.as_attoseconds())
+ , m_scantime(1)
+ , m_pixeltime(1)
+ , m_vblank_period(0)
+ , m_vblank_start_time(attotime::zero)
+ , m_vblank_end_time(attotime::zero)
+ , m_vblank_begin_timer(nullptr)
+ , m_vblank_end_timer(nullptr)
+ , m_scanline0_timer(nullptr)
+ , m_scanline_timer(nullptr)
+ , m_frame_number(0)
+ , m_partial_updates_this_frame(0)
{
m_unique_id = m_id_counter;
m_id_counter++;
@@ -613,7 +615,7 @@ void screen_device::device_validity_check(validity_checker &valid) const
// sanity check display area
if (m_type != SCREEN_TYPE_VECTOR && m_type != SCREEN_TYPE_SVG)
{
- if (m_visarea.empty() || m_visarea.max_x >= m_width || m_visarea.max_y >= m_height)
+ if (m_visarea.empty() || m_visarea.right() >= m_width || m_visarea.bottom() >= m_height)
osd_printf_error("Invalid display area\n");
// sanity check screen formats
@@ -646,6 +648,48 @@ void screen_device::device_validity_check(validity_checker &valid) const
//-------------------------------------------------
+// device_config_complete - finalise static
+// configuration
+//-------------------------------------------------
+
+void screen_device::device_config_complete()
+{
+ // combine orientation with machine orientation
+ m_orientation = orientation_add(m_orientation, mconfig().gamedrv().flags & machine_flags::MASK_ORIENTATION);
+
+ // physical aspect ratio unconfigured
+ if (!m_phys_aspect.first || !m_phys_aspect.second)
+ {
+ switch (m_type)
+ {
+ case SCREEN_TYPE_RASTER:
+ case SCREEN_TYPE_VECTOR:
+ m_phys_aspect = std::make_pair(4, 3); // assume standard CRT
+ break;
+ case SCREEN_TYPE_LCD:
+ case SCREEN_TYPE_SVG:
+ m_phys_aspect = std::make_pair(~0U, ~0U); // assume square pixels
+ break;
+ case SCREEN_TYPE_INVALID:
+ default:
+ throw emu_fatalerror("%s: invalid screen type configured\n", tag());
+ }
+ }
+
+ // square pixels?
+ if ((~0U == m_phys_aspect.first) && (~0U == m_phys_aspect.second))
+ {
+ m_phys_aspect.first = visible_area().width();
+ m_phys_aspect.second = visible_area().height();
+ }
+
+ // always keep this in reduced form
+ util::reduce_fraction(m_phys_aspect.first, m_phys_aspect.second);
+}
+
+
+
+//-------------------------------------------------
// device_resolve_objects - resolve objects that
// may be needed for other devices to set
// initial conditions at start time
@@ -674,16 +718,18 @@ void screen_device::device_start()
{
memory_region *reg = owner()->memregion(m_svg_region);
if (!reg)
- fatalerror("SVG region \"%s\" does not exist\n", m_svg_region);
+ fatalerror("%s: SVG region \"%s\" does not exist\n", tag(), m_svg_region);
m_svg = std::make_unique<svg_renderer>(reg);
machine().output().set_notifier(nullptr, svg_renderer::output_notifier, m_svg.get());
- if (0)
+ // don't do this - SVG units are arbitrary and interpreting them as pixels causes bad things to happen
+ // just render at the size/aspect ratio supplied by the driver
+ if (false)
{
- // The osd picks up the size before start is called, so that's useless
+ // The OSD picks up the size before start is called, so this only affect the info display if it's called up in-game
m_width = m_svg->width();
m_height = m_svg->height();
- m_visarea.set(0, m_width-1, 0, m_height-1);
+ m_visarea.set(0, m_width - 1, 0, m_height - 1);
}
}
@@ -845,8 +891,8 @@ void screen_device::device_timer(emu_timer &timer, device_timer_id id, int param
// compute the next visible scanline
param++;
- if (param > m_visarea.max_y)
- param = m_visarea.min_y;
+ if (param > m_visarea.bottom())
+ param = m_visarea.top();
m_scanline_timer->adjust(time_until_pos(param), param);
break;
}
@@ -862,12 +908,12 @@ void screen_device::configure(int width, int height, const rectangle &visarea, a
// validate arguments
assert(width > 0);
assert(height > 0);
- assert(visarea.min_x >= 0);
- assert(visarea.min_y >= 0);
-// assert(visarea.max_x < width);
-// assert(visarea.max_y < height);
- assert(m_type == SCREEN_TYPE_VECTOR || m_type == SCREEN_TYPE_SVG || visarea.min_x < width);
- assert(m_type == SCREEN_TYPE_VECTOR || m_type == SCREEN_TYPE_SVG || visarea.min_y < height);
+ assert(visarea.left() >= 0);
+ assert(visarea.top() >= 0);
+// assert(visarea.right() < width);
+// assert(visarea.bottom() < height);
+ assert(m_type == SCREEN_TYPE_VECTOR || m_type == SCREEN_TYPE_SVG || visarea.left() < width);
+ assert(m_type == SCREEN_TYPE_VECTOR || m_type == SCREEN_TYPE_SVG || visarea.top() < height);
assert(frame_period > 0);
// fill in the new parameters
@@ -932,9 +978,9 @@ void screen_device::reset_origin(int beamy, int beamx)
else
m_scanline0_timer->adjust(time_until_pos(0));
- // if we are resetting relative to (visarea.max_y + 1, 0) == VBLANK start,
+ // if we are resetting relative to (visarea.bottom() + 1, 0) == VBLANK start,
// call the VBLANK start timer now; otherwise, adjust it for the future
- if (beamy == ((m_visarea.max_y + 1) % m_height) && beamx == 0)
+ if (beamy == ((m_visarea.bottom() + 1) % m_height) && beamx == 0)
vblank_begin();
else
m_vblank_begin_timer->adjust(time_until_vblank_start());
@@ -953,8 +999,8 @@ void screen_device::realloc_screen_bitmaps()
return;
// determine effective size to allocate
- s32 effwidth = std::max(m_width, m_visarea.max_x + 1);
- s32 effheight = std::max(m_height, m_visarea.max_y + 1);
+ s32 effwidth = std::max(m_width, m_visarea.right() + 1);
+ s32 effheight = std::max(m_height, m_visarea.bottom() + 1);
// reize all registered screen bitmaps
for (auto &item : m_auto_bitmap_list)
@@ -1022,21 +1068,20 @@ bool screen_device::update_partial(int scanline)
}
// set the range of scanlines to render
- rectangle clip = m_visarea;
- if (m_last_partial_scan > clip.min_y)
- clip.min_y = m_last_partial_scan;
- if (scanline < clip.max_y)
- clip.max_y = scanline;
+ rectangle clip(m_visarea);
+ clip.sety(
+ (std::max)(clip.top(), m_last_partial_scan),
+ (std::min)(clip.bottom(), scanline));
// skip if entirely outside of visible area
- if (clip.min_y > clip.max_y)
+ if (clip.top() > clip.bottom())
{
LOG_PARTIAL_UPDATES(("skipped because outside of visible area\n"));
return false;
}
// otherwise, render
- LOG_PARTIAL_UPDATES(("updating %d-%d\n", clip.min_y, clip.max_y));
+ LOG_PARTIAL_UPDATES(("updating %d-%d\n", clip.top(), clip.bottom()));
g_profiler.start(PROFILER_VIDEO);
u32 flags;
@@ -1096,7 +1141,7 @@ void screen_device::update_now()
int current_hpos = hpos();
rectangle clip = m_visarea;
- LOG_PARTIAL_UPDATES(("update_now(): Y=%d, X=%d, last partial %d, partial hpos %d (vis %d %d)\n", current_vpos, current_hpos, m_last_partial_scan, m_partial_scan_hpos, m_visarea.max_x, m_visarea.max_y));
+ LOG_PARTIAL_UPDATES(("update_now(): Y=%d, X=%d, last partial %d, partial hpos %d (vis %d %d)\n", current_vpos, current_hpos, m_last_partial_scan, m_partial_scan_hpos, m_visarea.right(), m_visarea.bottom()));
// start off by doing a partial update up to the line before us, in case that was necessary
if (current_vpos > m_last_partial_scan)
@@ -1113,17 +1158,14 @@ void screen_device::update_now()
// now finish the previous partial scanline
int scanline = current_vpos - 1;
- if (m_partial_scan_hpos > clip.min_x)
- clip.min_x = m_partial_scan_hpos;
- if (current_hpos < clip.max_x)
- clip.max_x = current_hpos;
- if (m_last_partial_scan > clip.min_y)
- clip.min_y = m_last_partial_scan;
- if (scanline < clip.max_y)
- clip.max_y = scanline;
+ clip.set(
+ (std::max)(clip.left(), m_partial_scan_hpos),
+ (std::min)(clip.right(), current_hpos),
+ (std::max)(clip.top(), m_last_partial_scan),
+ (std::min)(clip.bottom(), scanline));
// if there's something to draw, do it
- if ((clip.min_x <= clip.max_x) && (clip.min_y <= clip.max_y))
+ if (!clip.empty())
{
g_profiler.start(PROFILER_VIDEO);
@@ -1150,21 +1192,18 @@ void screen_device::update_now()
// now draw this partial scanline
clip = m_visarea;
- if (m_partial_scan_hpos > clip.min_x)
- clip.min_x = m_partial_scan_hpos;
- if (current_hpos < clip.max_x)
- clip.max_x = current_hpos;
- if (current_vpos > clip.min_y)
- clip.min_y = current_vpos;
- if (current_vpos < clip.max_y)
- clip.max_y = current_vpos;
+ clip.set(
+ (std::max)(clip.left(), m_partial_scan_hpos),
+ (std::min)(clip.right(), current_hpos),
+ (std::max)(clip.top(), current_vpos),
+ (std::min)(clip.bottom(), current_vpos));
// and if there's something to draw, do it
- if ((clip.min_x <= clip.max_x) && (clip.min_y <= clip.max_y))
+ if (!clip.empty())
{
g_profiler.start(PROFILER_VIDEO);
- LOG_PARTIAL_UPDATES(("doing scanline partial draw: Y %d X %d-%d\n", clip.max_y, clip.min_x, clip.max_x));
+ LOG_PARTIAL_UPDATES(("doing scanline partial draw: Y %d X %d-%d\n", clip.bottom(), clip.left(), clip.right()));
u32 flags;
screen_bitmap &curbitmap = m_bitmap[m_curbitmap];
@@ -1186,7 +1225,7 @@ void screen_device::update_now()
m_last_partial_scan = current_vpos;
// if we completed the line, mark it so
- if (current_hpos >= m_visarea.max_x)
+ if (current_hpos >= m_visarea.right())
{
m_partial_scan_hpos = 0;
m_last_partial_scan = current_vpos + 1;
@@ -1226,7 +1265,7 @@ int screen_device::vpos() const
vpos = delta / m_scantime;
// adjust for the fact that VBLANK starts at the bottom of the visible area
- return (m_visarea.max_y + 1 + vpos) % m_height;
+ return (m_visarea.bottom() + 1 + vpos) % m_height;
}
@@ -1266,7 +1305,7 @@ attotime screen_device::time_until_pos(int vpos, int hpos) const
assert(hpos >= 0);
// since we measure time relative to VBLANK, compute the scanline offset from VBLANK
- vpos += m_height - (m_visarea.max_y + 1);
+ vpos += m_height - (m_visarea.bottom() + 1);
vpos %= m_height;
// compute the delta for the given X,Y position
@@ -1504,11 +1543,11 @@ void screen_device::finalize_burnin()
return;
// compute the scaled visible region
- rectangle scaledvis;
- scaledvis.min_x = m_visarea.min_x * m_burnin.width() / m_width;
- scaledvis.max_x = m_visarea.max_x * m_burnin.width() / m_width;
- scaledvis.min_y = m_visarea.min_y * m_burnin.height() / m_height;
- scaledvis.max_y = m_visarea.max_y * m_burnin.height() / m_height;
+ rectangle scaledvis(
+ m_visarea.left() * m_burnin.width() / m_width,
+ m_visarea.right() * m_burnin.width() / m_width,
+ m_visarea.top() * m_burnin.height() / m_height,
+ m_visarea.bottom() * m_burnin.height() / m_height);
// wrap a bitmap around the memregion we care about
bitmap_argb32 finalmap(scaledvis.width(), scaledvis.height());
diff --git a/src/emu/screen.h b/src/emu/screen.h
index 27ac6d421be..45374fef1e7 100644
--- a/src/emu/screen.h
+++ b/src/emu/screen.h
@@ -173,7 +173,7 @@ public:
screen_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
screen_device(const machine_config &mconfig, const char *tag, device_t *owner, screen_type_enum type)
- : screen_device(mconfig, tag, owner, (u32)0)
+ : screen_device(mconfig, tag, owner, u32(0))
{
set_type(type);
}
@@ -181,6 +181,8 @@ public:
// configuration readers
screen_type_enum screen_type() const { return m_type; }
+ int orientation() const { assert(configured()); return m_orientation; }
+ std::pair<unsigned, unsigned> physical_aspect() const { assert(configured()); return m_phys_aspect; }
int width() const { return m_width; }
int height() const { return m_height; }
const rectangle &visible_area() const { return m_visarea; }
@@ -196,7 +198,10 @@ public:
bool have_screen_update() const { return !m_screen_update_ind16.isnull() && !m_screen_update_rgb32.isnull(); }
// inline configuration helpers
- void set_type(screen_type_enum type) { m_type = type; }
+ void set_type(screen_type_enum type) { assert(!configured()); m_type = type; }
+ void set_orientation(int orientation) { assert(!configured()); m_orientation = orientation; }
+ void set_physical_aspect(unsigned x, unsigned y) { assert(!configured()); m_phys_aspect = std::make_pair(x, y); }
+ void set_native_aspect() { assert(!configured()); m_phys_aspect = std::make_pair(~0U, ~0U); }
void set_raw(u32 pixclock, u16 htotal, u16 hbend, u16 hbstart, u16 vtotal, u16 vbend, u16 vbstart)
{
m_clock = pixclock;
@@ -274,11 +279,11 @@ public:
int vpos() const;
int hpos() const;
DECLARE_READ_LINE_MEMBER(vblank) const { return (machine().time() < m_vblank_end_time) ? 1 : 0; }
- DECLARE_READ_LINE_MEMBER(hblank) const { int const curpos = hpos(); return (curpos < m_visarea.min_x || curpos > m_visarea.max_x) ? 1 : 0; }
+ DECLARE_READ_LINE_MEMBER(hblank) const { int const curpos = hpos(); return (curpos < m_visarea.left() || curpos > m_visarea.right()) ? 1 : 0; }
// timing
attotime time_until_pos(int vpos, int hpos = 0) const;
- attotime time_until_vblank_start() const { return time_until_pos(m_visarea.max_y + 1); }
+ attotime time_until_vblank_start() const { return time_until_pos(m_visarea.bottom() + 1); }
attotime time_until_vblank_end() const;
attotime time_until_update() const { return (m_video_attributes & VIDEO_UPDATE_AFTER_VBLANK) ? time_until_vblank_end() : time_until_vblank_start(); }
attotime scan_period() const { return attotime(0, m_scantime); }
@@ -317,6 +322,7 @@ private:
// device-level overrides
virtual void device_validity_check(validity_checker &valid) const override;
+ virtual void device_config_complete() override;
virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
@@ -334,6 +340,8 @@ private:
// inline configuration data
screen_type_enum m_type; // type of screen
+ int m_orientation; // orientation flags combined with system flags
+ std::pair<unsigned, unsigned> m_phys_aspect; // physical aspect ratio
bool m_oldstyle_vblank_supplied; // MCFG_SCREEN_VBLANK_TIME macro used
attoseconds_t m_refresh; // default refresh period
attoseconds_t m_vblank; // duration of a VBLANK
diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp
index 775d85057dd..ce72846a9c3 100644
--- a/src/emu/sound.cpp
+++ b/src/emu/sound.cpp
@@ -53,7 +53,7 @@ sound_stream::sound_stream(device_t &device, int inputs, int outputs, int sample
: m_device(device),
m_next(nullptr),
m_sample_rate(sample_rate),
- m_new_sample_rate(0),
+ m_new_sample_rate(0xffffffff),
m_attoseconds_per_sample(0),
m_max_samples_per_update(0),
m_input(inputs),
@@ -264,6 +264,9 @@ void sound_stream::set_input(int index, sound_stream *input_stream, int output_i
void sound_stream::update()
{
+ if (!m_attoseconds_per_sample)
+ return;
+
// determine the number of samples since the start of this second
attotime time = m_device.machine().time();
s32 update_sampindex = s32(time.attoseconds() / m_attoseconds_per_sample);
@@ -427,25 +430,35 @@ void sound_stream::update_with_accounting(bool second_tick)
void sound_stream::apply_sample_rate_changes()
{
// skip if nothing to do
- if (m_new_sample_rate == 0)
+ if (m_new_sample_rate == 0xffffffff)
return;
// update to the new rate and remember the old rate
u32 old_rate = m_sample_rate;
m_sample_rate = m_new_sample_rate;
- m_new_sample_rate = 0;
+ m_new_sample_rate = 0xffffffff;
// recompute all the data
recompute_sample_rate_data();
// reset our sample indexes to the current time
- m_output_sampindex = s64(m_output_sampindex) * s64(m_sample_rate) / old_rate;
- m_output_update_sampindex = s64(m_output_update_sampindex) * s64(m_sample_rate) / old_rate;
+ if (old_rate)
+ {
+ m_output_sampindex = s64(m_output_sampindex) * s64(m_sample_rate) / old_rate;
+ m_output_update_sampindex = s64(m_output_update_sampindex) * s64(m_sample_rate) / old_rate;
+ }
+ else
+ {
+ m_output_sampindex = m_attoseconds_per_sample ? m_device.machine().sound().last_update().attoseconds() / m_attoseconds_per_sample : 0;
+ m_output_update_sampindex = m_output_sampindex;
+ }
+
m_output_base_sampindex = m_output_sampindex - m_max_samples_per_update;
// clear out the buffer
- for (auto & elem : m_output)
- memset(&elem.m_buffer[0], 0, m_max_samples_per_update * sizeof(elem.m_buffer[0]));
+ if (m_max_samples_per_update)
+ for (auto & elem : m_output)
+ memset(&elem.m_buffer[0], 0, m_max_samples_per_update * sizeof(elem.m_buffer[0]));
}
@@ -471,15 +484,22 @@ void sound_stream::recompute_sample_rate_data()
throw emu_fatalerror("Incompatible sample rates as input of a synchronous stream: %d and %d\n", m_sample_rate, input.m_source->m_stream->m_sample_rate);
}
}
- if (!m_sample_rate)
- m_sample_rate = 1000;
}
// recompute the timing parameters
attoseconds_t update_attoseconds = m_device.machine().sound().update_attoseconds();
- m_attoseconds_per_sample = ATTOSECONDS_PER_SECOND / m_sample_rate;
- m_max_samples_per_update = (update_attoseconds + m_attoseconds_per_sample - 1) / m_attoseconds_per_sample;
+
+ if (m_sample_rate)
+ {
+ m_attoseconds_per_sample = ATTOSECONDS_PER_SECOND / m_sample_rate;
+ m_max_samples_per_update = (update_attoseconds + m_attoseconds_per_sample - 1) / m_attoseconds_per_sample;
+ }
+ else
+ {
+ m_attoseconds_per_sample = 0;
+ m_max_samples_per_update = 0;
+ }
// update resample and output buffer sizes
allocate_resample_buffers();
@@ -490,7 +510,7 @@ void sound_stream::recompute_sample_rate_data()
{
// if we have a source, see if its sample rate changed
- if (input.m_source != nullptr)
+ if (input.m_source != nullptr && input.m_source->m_stream->m_sample_rate)
{
// okay, we have a new sample rate; recompute the latency to be the maximum
// sample period between us and our input
@@ -511,14 +531,23 @@ void sound_stream::recompute_sample_rate_data()
input.m_latency_attoseconds = std::max(input.m_latency_attoseconds, latency);
assert(input.m_latency_attoseconds < update_attoseconds);
}
+ else
+ {
+ input.m_latency_attoseconds = 0;
+ }
}
// If synchronous, prime the timer
if (m_synchronous)
{
attotime time = m_device.machine().time();
- attoseconds_t next_edge = m_attoseconds_per_sample - (time.attoseconds() % m_attoseconds_per_sample);
- m_sync_timer->adjust(attotime(0, next_edge));
+ if (m_attoseconds_per_sample)
+ {
+ attoseconds_t next_edge = m_attoseconds_per_sample - (time.attoseconds() % m_attoseconds_per_sample);
+ m_sync_timer->adjust(attotime(0, next_edge));
+ }
+ else
+ m_sync_timer->adjust(attotime::never);
}
}
@@ -587,7 +616,7 @@ void sound_stream::postload()
memset(&elem.m_buffer[0], 0, m_output_bufalloc * sizeof(elem.m_buffer[0]));
// recompute the sample indexes to make sense
- m_output_sampindex = m_device.machine().sound().last_update().attoseconds() / m_attoseconds_per_sample;
+ m_output_sampindex = m_attoseconds_per_sample ? m_device.machine().sound().last_update().attoseconds() / m_attoseconds_per_sample : 0;
m_output_update_sampindex = m_output_sampindex;
m_output_base_sampindex = m_output_sampindex - m_max_samples_per_update;
}
@@ -653,7 +682,7 @@ stream_sample_t *sound_stream::generate_resampled_data(stream_input &input, u32
{
// if we don't have an output to pull data from, generate silence
stream_sample_t *dest = &input.m_resample[0];
- if (input.m_source == nullptr)
+ if (input.m_source == nullptr || input.m_source->m_stream->m_attoseconds_per_sample == 0)
{
memset(dest, 0, numsamples * sizeof(*dest));
return &input.m_resample[0];
diff --git a/src/emu/tilemap.cpp b/src/emu/tilemap.cpp
index 0b7b748a494..9425ee88c16 100644
--- a/src/emu/tilemap.cpp
+++ b/src/emu/tilemap.cpp
@@ -953,8 +953,8 @@ g_profiler.start(PROFILER_TILEMAP_DRAW);
// flip the tilemap around the center of the visible area
rectangle visarea = screen.visible_area();
- u32 width = visarea.min_x + visarea.max_x + 1;
- u32 height = visarea.min_y + visarea.max_y + 1;
+ u32 width = visarea.left() + visarea.right() + 1;
+ u32 height = visarea.top() + visarea.bottom() + 1;
// XY scrolling playfield
if (m_scrollrows == 1 && m_scrollcols == 1)
@@ -962,8 +962,8 @@ g_profiler.start(PROFILER_TILEMAP_DRAW);
// iterate to handle wraparound
int scrollx = effective_rowscroll(0, width);
int scrolly = effective_colscroll(0, height);
- for (int ypos = scrolly - m_height; ypos <= blit.cliprect.max_y; ypos += m_height)
- for (int xpos = scrollx - m_width; xpos <= blit.cliprect.max_x; xpos += m_width)
+ for (int ypos = scrolly - m_height; ypos <= blit.cliprect.bottom(); ypos += m_height)
+ for (int xpos = scrollx - m_width; xpos <= blit.cliprect.right(); xpos += m_width)
draw_instance(screen, dest, blit, xpos, ypos);
}
@@ -975,10 +975,10 @@ g_profiler.start(PROFILER_TILEMAP_DRAW);
// iterate over Y to handle wraparound
int rowheight = m_height / m_scrollrows;
int scrolly = effective_colscroll(0, height);
- for (int ypos = scrolly - m_height; ypos <= original_cliprect.max_y; ypos += m_height)
+ for (int ypos = scrolly - m_height; ypos <= original_cliprect.bottom(); ypos += m_height)
{
- int const firstrow = std::max((original_cliprect.min_y - ypos) / rowheight, 0);
- int const lastrow = std::min((original_cliprect.max_y - ypos) / rowheight, s32(m_scrollrows) - 1);
+ int const firstrow = std::max((original_cliprect.top() - ypos) / rowheight, 0);
+ int const lastrow = std::min((original_cliprect.bottom() - ypos) / rowheight, s32(m_scrollrows) - 1);
// iterate over rows in the tilemap
int nextrow;
@@ -995,12 +995,11 @@ g_profiler.start(PROFILER_TILEMAP_DRAW);
continue;
// update the cliprect just for this set of rows
- blit.cliprect.min_y = currow * rowheight + ypos;
- blit.cliprect.max_y = nextrow * rowheight - 1 + ypos;
+ blit.cliprect.sety(currow * rowheight + ypos, nextrow * rowheight - 1 + ypos);
blit.cliprect &= original_cliprect;
// iterate over X to handle wraparound
- for (int xpos = scrollx - m_width; xpos <= original_cliprect.max_x; xpos += m_width)
+ for (int xpos = scrollx - m_width; xpos <= original_cliprect.right(); xpos += m_width)
draw_instance(screen, dest, blit, xpos, ypos);
}
}
@@ -1028,15 +1027,14 @@ g_profiler.start(PROFILER_TILEMAP_DRAW);
continue;
// iterate over X to handle wraparound
- for (int xpos = scrollx - m_width; xpos <= original_cliprect.max_x; xpos += m_width)
+ for (int xpos = scrollx - m_width; xpos <= original_cliprect.right(); xpos += m_width)
{
// update the cliprect just for this set of columns
- blit.cliprect.min_x = curcol * colwidth + xpos;
- blit.cliprect.max_x = nextcol * colwidth - 1 + xpos;
+ blit.cliprect.setx(curcol * colwidth + xpos, nextcol * colwidth - 1 + xpos);
blit.cliprect &= original_cliprect;
// iterate over Y to handle wraparound
- for (int ypos = scrolly - m_height; ypos <= original_cliprect.max_y; ypos += m_height)
+ for (int ypos = scrolly - m_height; ypos <= original_cliprect.bottom(); ypos += m_height)
draw_instance(screen, dest, blit, xpos, ypos);
}
}
@@ -1115,10 +1113,10 @@ void tilemap_t::draw_instance(screen_device &screen, _BitmapClass &dest, const b
{
// clip destination coordinates to the tilemap
// note that x2/y2 are exclusive, not inclusive
- int x1 = std::max(xpos, blit.cliprect.min_x);
- int x2 = std::min(xpos + (int)m_width, blit.cliprect.max_x + 1);
- int y1 = std::max(ypos, blit.cliprect.min_y);
- int y2 = std::min(ypos + (int)m_height, blit.cliprect.max_y + 1);
+ int x1 = (std::max)(xpos, blit.cliprect.left());
+ int x2 = (std::min)(xpos + int(m_width), blit.cliprect.right() + 1);
+ int y1 = (std::max)(ypos, blit.cliprect.top());
+ int y2 = (std::min)(ypos + int(m_height), blit.cliprect.bottom() + 1);
// if totally clipped, stop here
if (x1 >= x2 || y1 >= y2)
@@ -1305,14 +1303,14 @@ void tilemap_t::draw_roz_core(screen_device &screen, _BitmapClass &destbitmap, c
u8 alpha = blit.alpha;
// pre-advance based on the cliprect
- startx += blit.cliprect.min_x * incxx + blit.cliprect.min_y * incyx;
- starty += blit.cliprect.min_x * incxy + blit.cliprect.min_y * incyy;
+ startx += blit.cliprect.left() * incxx + blit.cliprect.top() * incyx;
+ starty += blit.cliprect.left() * incxy + blit.cliprect.top() * incyy;
// extract start/end points
- int sx = blit.cliprect.min_x;
- int sy = blit.cliprect.min_y;
- int ex = blit.cliprect.max_x;
- int ey = blit.cliprect.max_y;
+ int sx = blit.cliprect.left();
+ int sy = blit.cliprect.top();
+ int ex = blit.cliprect.right();
+ int ey = blit.cliprect.bottom();
// optimized loop for the not rotated case
if (incxy == 0 && incyx == 0 && !wraparound)
@@ -1476,8 +1474,8 @@ void tilemap_t::draw_debug(screen_device &screen, bitmap_rgb32 &dest, u32 scroll
realize_all_dirty_tiles();
// iterate to handle wraparound
- for (int ypos = scrolly - m_height; ypos <= blit.cliprect.max_y; ypos += m_height)
- for (int xpos = scrollx - m_width; xpos <= blit.cliprect.max_x; xpos += m_width)
+ for (int ypos = scrolly - m_height; ypos <= blit.cliprect.bottom(); ypos += m_height)
+ for (int xpos = scrollx - m_width; xpos <= blit.cliprect.right(); xpos += m_width)
draw_instance(screen, dest, blit, xpos, ypos);
}
diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp
index f4e1a01ca68..3e7af8a43c5 100644
--- a/src/frontend/mame/info.cpp
+++ b/src/frontend/mame/info.cpp
@@ -896,35 +896,32 @@ void info_xml_creator::output_display(device_t &device, machine_flags::type cons
}
// output the orientation as a string
- if (flags)
+ switch (screendev.orientation())
{
- switch (*flags & machine_flags::MASK_ORIENTATION)
- {
- case ORIENTATION_FLIP_X:
- fprintf(m_output, " rotate=\"0\" flipx=\"yes\"");
- break;
- case ORIENTATION_FLIP_Y:
- fprintf(m_output, " rotate=\"180\" flipx=\"yes\"");
- break;
- case ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y:
- fprintf(m_output, " rotate=\"180\"");
- break;
- case ORIENTATION_SWAP_XY:
- fprintf(m_output, " rotate=\"90\" flipx=\"yes\"");
- break;
- case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X:
- fprintf(m_output, " rotate=\"90\"");
- break;
- case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_Y:
- fprintf(m_output, " rotate=\"270\"");
- break;
- case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y:
- fprintf(m_output, " rotate=\"270\" flipx=\"yes\"");
- break;
- default:
- fprintf(m_output, " rotate=\"0\"");
- break;
- }
+ case ORIENTATION_FLIP_X:
+ fprintf(m_output, " rotate=\"0\" flipx=\"yes\"");
+ break;
+ case ORIENTATION_FLIP_Y:
+ fprintf(m_output, " rotate=\"180\" flipx=\"yes\"");
+ break;
+ case ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y:
+ fprintf(m_output, " rotate=\"180\"");
+ break;
+ case ORIENTATION_SWAP_XY:
+ fprintf(m_output, " rotate=\"90\" flipx=\"yes\"");
+ break;
+ case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X:
+ fprintf(m_output, " rotate=\"90\"");
+ break;
+ case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_Y:
+ fprintf(m_output, " rotate=\"270\"");
+ break;
+ case ORIENTATION_SWAP_XY|ORIENTATION_FLIP_X|ORIENTATION_FLIP_Y:
+ fprintf(m_output, " rotate=\"270\" flipx=\"yes\"");
+ break;
+ default:
+ fprintf(m_output, " rotate=\"0\"");
+ break;
}
// output width and height only for games that are not vector
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index edc56ee13b9..894767e0838 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -1782,7 +1782,7 @@ void lua_engine::initialize()
"height", [](screen_device &sdev) { return sdev.visible_area().height(); },
"width", [](screen_device &sdev) { return sdev.visible_area().width(); },
"orientation", [](screen_device &sdev) {
- uint32_t flags = sdev.machine().system().flags & machine_flags::MASK_ORIENTATION;
+ uint32_t flags = sdev.orientation();
int rotation_angle = 0;
switch (flags)
{
diff --git a/src/frontend/mame/ui/devopt.cpp b/src/frontend/mame/ui/devopt.cpp
index 562bcc26e2c..2c1ddd9aebd 100644
--- a/src/frontend/mame/ui/devopt.cpp
+++ b/src/frontend/mame/ui/devopt.cpp
@@ -32,6 +32,9 @@ void menu_device_config::populate(float &customtop, float &custombottom)
machine_config &mconfig(const_cast<machine_config &>(machine().config()));
machine_config::token const tok(mconfig.begin_configuration(mconfig.root_device()));
device_t *const dev = mconfig.device_add(m_option->name(), m_option->devtype(), 0);
+ for (device_t &d : device_iterator(*dev))
+ if (!d.configured())
+ d.config_complete();
std::ostringstream str;
util::stream_format(
@@ -96,7 +99,7 @@ void menu_device_config::populate(float &customtop, float &custombottom)
util::stream_format(
str,
- (machine().system().flags & ORIENTATION_SWAP_XY)
+ (screen.orientation() & ORIENTATION_SWAP_XY)
? _(" Screen '%1$s': %2$d \xC3\x97 %3$d (V) %4$f\xC2\xA0Hz\n")
: _(" Screen '%1$s': %2$d \xC3\x97 %3$d (H) %4$f\xC2\xA0Hz\n"),
screen.tag(),
diff --git a/src/frontend/mame/ui/imgcntrl.cpp b/src/frontend/mame/ui/imgcntrl.cpp
index ab502a39834..3312e5d54e7 100644
--- a/src/frontend/mame/ui/imgcntrl.cpp
+++ b/src/frontend/mame/ui/imgcntrl.cpp
@@ -206,7 +206,7 @@ void menu_control_device_image::handle()
break;
}
m_software_info_name.clear();
- menu::stack_push<menu_software_list>(ui(), container(), m_sld, m_image.image_interface(), m_software_info_name);
+ menu::stack_push_special_main<menu_software_list>(ui(), container(), m_sld, m_image.image_interface(), m_software_info_name);
m_state = SELECT_PARTLIST;
break;
diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp
index fde44227ea3..4a39bc050f5 100644
--- a/src/frontend/mame/ui/info.cpp
+++ b/src/frontend/mame/ui/info.cpp
@@ -385,7 +385,7 @@ std::string machine_info::game_info_string() const
const rectangle &visarea = screen.visible_area();
detail = string_format("%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz",
visarea.width(), visarea.height(),
- (m_machine.system().flags & ORIENTATION_SWAP_XY) ? "V" : "H",
+ (screen.orientation() & ORIENTATION_SWAP_XY) ? "V" : "H",
ATTOSECONDS_TO_HZ(screen.frame_period().attoseconds()));
}
diff --git a/src/lib/formats/flopimg.h b/src/lib/formats/flopimg.h
index fe6d8ed35dd..b7f4d542db2 100644
--- a/src/lib/formats/flopimg.h
+++ b/src/lib/formats/flopimg.h
@@ -735,7 +735,7 @@ public:
@param head head number
@return a pointer to the data buffer for this track and head
*/
- std::vector<uint32_t> &get_buffer(int track, int head, int subtrack = 0) { return track_array[track*4+subtrack][head].cell_data; }
+ std::vector<uint32_t> &get_buffer(int track, int head, int subtrack = 0) { assert(track < tracks && head < heads); return track_array[track*4+subtrack][head].cell_data; }
//! Sets the write splice position.
//! The "track splice" information indicates where to start writing
@@ -749,9 +749,9 @@ public:
@param head
@param pos the position
*/
- void set_write_splice_position(int track, int head, uint32_t pos, int subtrack = 0) { track_array[track*4+subtrack][head].write_splice = pos; }
+ void set_write_splice_position(int track, int head, uint32_t pos, int subtrack = 0) { assert(track < tracks && head < heads); track_array[track*4+subtrack][head].write_splice = pos; }
//! @return the current write splice position.
- uint32_t get_write_splice_position(int track, int head, int subtrack = 0) const { return track_array[track*4+subtrack][head].write_splice; }
+ uint32_t get_write_splice_position(int track, int head, int subtrack = 0) const { assert(track < tracks && head < heads); return track_array[track*4+subtrack][head].write_splice; }
//! @return the maximal geometry supported by this format.
void get_maximal_geometry(int &tracks, int &heads) const;
diff --git a/src/lib/formats/imd_dsk.cpp b/src/lib/formats/imd_dsk.cpp
index 8476da6ac38..51337a7f890 100644
--- a/src/lib/formats/imd_dsk.cpp
+++ b/src/lib/formats/imd_dsk.cpp
@@ -433,6 +433,9 @@ bool imd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
if(pos >= size)
return false;
+ int tracks, heads;
+ image->get_maximal_geometry(tracks, heads);
+
while(pos < size) {
uint8_t mode = img[pos++];
uint8_t track = img[pos++];
@@ -440,8 +443,23 @@ bool imd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
uint8_t sector_count = img[pos++];
uint8_t ssize = img[pos++];
+ if(track >= tracks)
+ {
+ osd_printf_error("imd_format: Track %d exceeds maximum of %d\n", track, tracks);
+ return false;
+ }
+
+ if((head & 0x3f) >= heads)
+ {
+ osd_printf_error("imd_format: Head %d exceeds maximum of %d\n", head & 0x3f, heads);
+ return false;
+ }
+
if(ssize == 0xff)
- throw emu_fatalerror("imd_format: Unsupported variable sector size on track %d head %d", track, head);
+ {
+ osd_printf_error("imd_format: Unsupported variable sector size on track %d head %d", track, head & 0x3f);
+ return false;
+ }
uint32_t actual_size = ssize < 7 ? 128 << ssize : 8192;
diff --git a/src/lib/util/avhuff.h b/src/lib/util/avhuff.h
index 9d00ed423e6..90ef43e977f 100644
--- a/src/lib/util/avhuff.h
+++ b/src/lib/util/avhuff.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_AVHUFF_H
+#define MAME_UTIL_AVHUFF_H
-#ifndef __AVHUFF_H__
-#define __AVHUFF_H__
+#pragma once
#include "osdcore.h"
#include "coretmpl.h"
@@ -198,5 +198,4 @@ private:
#endif
};
-
-#endif
+#endif // MAME_UTIL_AVHUFF_H
diff --git a/src/lib/util/bitmap.cpp b/src/lib/util/bitmap.cpp
index c8ceb5d3eab..a0a1e92f4d9 100644
--- a/src/lib/util/bitmap.cpp
+++ b/src/lib/util/bitmap.cpp
@@ -129,7 +129,7 @@ bitmap_t::bitmap_t(bitmap_format format, uint8_t bpp, void *base, int width, int
bitmap_t::bitmap_t(bitmap_format format, uint8_t bpp, bitmap_t &source, const rectangle &subrect)
: m_alloc()
, m_allocbytes(0)
- , m_base(source.raw_pixptr(subrect.min_y, subrect.min_x))
+ , m_base(source.raw_pixptr(subrect.top(), subrect.left()))
, m_rowpixels(source.m_rowpixels)
, m_width(subrect.width())
, m_height(subrect.height())
@@ -332,7 +332,7 @@ void bitmap_t::wrap(const bitmap_t &source, const rectangle &subrect)
reset();
// copy relevant fields
- m_base = source.raw_pixptr(subrect.min_y, subrect.min_x);
+ m_base = source.raw_pixptr(subrect.top(), subrect.left());
m_rowpixels = source.m_rowpixels;
m_width = subrect.width();
m_height = subrect.height();
@@ -391,29 +391,29 @@ void bitmap_t::fill(uint32_t color, const rectangle &cliprect)
{
case 8:
// 8bpp always uses memset
- for (int32_t y = fill.min_y; y <= fill.max_y; y++)
- memset(raw_pixptr(y, fill.min_x), (uint8_t)color, fill.width());
+ for (int32_t y = fill.top(); y <= fill.bottom(); y++)
+ memset(raw_pixptr(y, fill.left()), uint8_t(color), fill.width());
break;
case 16:
// 16bpp can use memset if the bytes are equal
- if ((uint8_t)(color >> 8) == (uint8_t)color)
+ if (uint8_t(color >> 8) == uint8_t(color))
{
- for (int32_t y = fill.min_y; y <= fill.max_y; y++)
- memset(raw_pixptr(y, fill.min_x), (uint8_t)color, fill.width() * 2);
+ for (int32_t y = fill.top(); y <= fill.bottom(); y++)
+ memset(raw_pixptr(y, fill.left()), uint8_t(color), fill.width() * 2);
}
else
{
// Fill the first line the hard way
- uint16_t *destrow = &pixt<uint16_t>(fill.min_y);
- for (int32_t x = fill.min_x; x <= fill.max_x; x++)
- destrow[x] = (uint16_t)color;
+ uint16_t *destrow = &pixt<uint16_t>(fill.top());
+ for (int32_t x = fill.left(); x <= fill.right(); x++)
+ destrow[x] = uint16_t(color);
// For the other lines, just copy the first one
- void *destrow0 = &pixt<uint16_t>(fill.min_y, fill.min_x);
- for (int32_t y = fill.min_y + 1; y <= fill.max_y; y++)
+ void *destrow0 = &pixt<uint16_t>(fill.top(), fill.left());
+ for (int32_t y = fill.top() + 1; y <= fill.bottom(); y++)
{
- destrow = &pixt<uint16_t>(y, fill.min_x);
+ destrow = &pixt<uint16_t>(y, fill.left());
memcpy(destrow, destrow0, fill.width() * 2);
}
}
@@ -423,21 +423,21 @@ void bitmap_t::fill(uint32_t color, const rectangle &cliprect)
// 32bpp can use memset if the bytes are equal
if ((uint8_t)(color >> 8) == (uint8_t)color && (uint16_t)(color >> 16) == (uint16_t)color)
{
- for (int32_t y = fill.min_y; y <= fill.max_y; y++)
- memset(&pixt<uint32_t>(y, fill.min_x), (uint8_t)color, fill.width() * 4);
+ for (int32_t y = fill.top(); y <= fill.bottom(); y++)
+ memset(&pixt<uint32_t>(y, fill.left()), uint8_t(color), fill.width() * 4);
}
else
{
// Fill the first line the hard way
- uint32_t *destrow = &pixt<uint32_t>(fill.min_y);
- for (int32_t x = fill.min_x; x <= fill.max_x; x++)
- destrow[x] = (uint32_t)color;
+ uint32_t *destrow = &pixt<uint32_t>(fill.top());
+ for (int32_t x = fill.left(); x <= fill.right(); x++)
+ destrow[x] = uint32_t(color);
// For the other lines, just copy the first one
- uint32_t *destrow0 = &pixt<uint32_t>(fill.min_y, fill.min_x);
- for (int32_t y = fill.min_y + 1; y <= fill.max_y; y++)
+ uint32_t *destrow0 = &pixt<uint32_t>(fill.top(), fill.left());
+ for (int32_t y = fill.top() + 1; y <= fill.bottom(); y++)
{
- destrow = &pixt<uint32_t>(y, fill.min_x);
+ destrow = &pixt<uint32_t>(y, fill.left());
memcpy(destrow, destrow0, fill.width() * 4);
}
}
@@ -445,23 +445,23 @@ void bitmap_t::fill(uint32_t color, const rectangle &cliprect)
case 64:
// 64bpp can use memset if the bytes are equal
- if ((uint8_t)(color >> 8) == (uint8_t)color && (uint16_t)(color >> 16) == (uint16_t)color)
+ if (uint8_t(color >> 8) == uint8_t(color) && uint16_t(color >> 16) == uint16_t(color)) // FIXME: really? wat about the upper bits that would be zeroed when done the "hard way"?
{
- for (int32_t y = fill.min_y; y <= fill.max_y; y++)
- memset(&pixt<uint64_t>(y, fill.min_x), (uint8_t)color, fill.width() * 8);
+ for (int32_t y = fill.top(); y <= fill.bottom(); y++)
+ memset(&pixt<uint64_t>(y, fill.left()), uint8_t(color), fill.width() * 8);
}
else
{
// Fill the first line the hard way
- uint64_t *destrow = &pixt<uint64_t>(fill.min_y);
- for (int32_t x = fill.min_x; x <= fill.max_x; x++)
- destrow[x] = (uint64_t)color;
+ uint64_t *destrow = &pixt<uint64_t>(fill.top());
+ for (int32_t x = fill.left(); x <= fill.right(); x++)
+ destrow[x] = uint64_t(color);
// For the other lines, just copy the first one
- uint64_t *destrow0 = &pixt<uint64_t>(fill.min_y, fill.min_x);
- for (int32_t y = fill.min_y + 1; y <= fill.max_y; y++)
+ uint64_t *destrow0 = &pixt<uint64_t>(fill.top(), fill.left());
+ for (int32_t y = fill.top() + 1; y <= fill.bottom(); y++)
{
- destrow = &pixt<uint64_t>(y, fill.min_x);
+ destrow = &pixt<uint64_t>(y, fill.left());
memcpy(destrow, destrow0, fill.width() * 8);
}
}
diff --git a/src/lib/util/bitmap.h b/src/lib/util/bitmap.h
index 7b0fc34610f..efb18f7e456 100644
--- a/src/lib/util/bitmap.h
+++ b/src/lib/util/bitmap.h
@@ -43,16 +43,16 @@ class rectangle
{
public:
// construction/destruction
- rectangle()
- : min_x(0), max_x(0), min_y(0), max_y(0) { }
- rectangle(int32_t minx, int32_t maxx, int32_t miny, int32_t maxy)
- : min_x(minx), max_x(maxx), min_y(miny), max_y(maxy) { }
+ constexpr rectangle() { }
+ constexpr rectangle(int32_t minx, int32_t maxx, int32_t miny, int32_t maxy)
+ : min_x(minx), max_x(maxx), min_y(miny), max_y(maxy)
+ { }
// getters
- int32_t left() const { return min_x; }
- int32_t right() const { return max_x; }
- int32_t top() const { return min_y; }
- int32_t bottom() const { return max_y; }
+ constexpr int32_t left() const { return min_x; }
+ constexpr int32_t right() const { return max_x; }
+ constexpr int32_t top() const { return min_y; }
+ constexpr int32_t bottom() const { return max_y; }
// compute intersection with another rect
rectangle &operator&=(const rectangle &src)
@@ -75,21 +75,21 @@ public:
}
// comparisons
- bool operator==(const rectangle &rhs) const { return min_x == rhs.min_x && max_x == rhs.max_x && min_y == rhs.min_y && max_y == rhs.max_y; }
- bool operator!=(const rectangle &rhs) const { return min_x != rhs.min_x || max_x != rhs.max_x || min_y != rhs.min_y || max_y != rhs.max_y; }
- bool operator>(const rectangle &rhs) const { return min_x < rhs.min_x && min_y < rhs.min_y && max_x > rhs.max_x && max_y > rhs.max_y; }
- bool operator>=(const rectangle &rhs) const { return min_x <= rhs.min_x && min_y <= rhs.min_y && max_x >= rhs.max_x && max_y >= rhs.max_y; }
- bool operator<(const rectangle &rhs) const { return min_x >= rhs.min_x || min_y >= rhs.min_y || max_x <= rhs.max_x || max_y <= rhs.max_y; }
- bool operator<=(const rectangle &rhs) const { return min_x > rhs.min_x || min_y > rhs.min_y || max_x < rhs.max_x || max_y < rhs.max_y; }
+ constexpr bool operator==(const rectangle &rhs) const { return min_x == rhs.min_x && max_x == rhs.max_x && min_y == rhs.min_y && max_y == rhs.max_y; }
+ constexpr bool operator!=(const rectangle &rhs) const { return min_x != rhs.min_x || max_x != rhs.max_x || min_y != rhs.min_y || max_y != rhs.max_y; }
+ constexpr bool operator>(const rectangle &rhs) const { return min_x < rhs.min_x && min_y < rhs.min_y && max_x > rhs.max_x && max_y > rhs.max_y; }
+ constexpr bool operator>=(const rectangle &rhs) const { return min_x <= rhs.min_x && min_y <= rhs.min_y && max_x >= rhs.max_x && max_y >= rhs.max_y; }
+ constexpr bool operator<(const rectangle &rhs) const { return min_x >= rhs.min_x || min_y >= rhs.min_y || max_x <= rhs.max_x || max_y <= rhs.max_y; }
+ constexpr bool operator<=(const rectangle &rhs) const { return min_x > rhs.min_x || min_y > rhs.min_y || max_x < rhs.max_x || max_y < rhs.max_y; }
// other helpers
- bool empty() const { return (min_x > max_x || min_y > max_y); }
- bool contains(int32_t x, int32_t y) const { return (x >= min_x && x <= max_x && y >= min_y && y <= max_y); }
- bool contains(const rectangle &rect) const { return (min_x <= rect.min_x && max_x >= rect.max_x && min_y <= rect.min_y && max_y >= rect.max_y); }
- int32_t width() const { return max_x + 1 - min_x; }
- int32_t height() const { return max_y + 1 - min_y; }
- int32_t xcenter() const { return (min_x + max_x + 1) / 2; }
- int32_t ycenter() const { return (min_y + max_y + 1) / 2; }
+ constexpr bool empty() const { return (min_x > max_x) || (min_y > max_y); }
+ constexpr bool contains(int32_t x, int32_t y) const { return (x >= min_x) && (x <= max_x) && (y >= min_y) && (y <= max_y); }
+ constexpr bool contains(const rectangle &rect) const { return (min_x <= rect.min_x) && (max_x >= rect.max_x) && (min_y <= rect.min_y) && (max_y >= rect.max_y); }
+ constexpr int32_t width() const { return max_x + 1 - min_x; }
+ constexpr int32_t height() const { return max_y + 1 - min_y; }
+ constexpr int32_t xcenter() const { return (min_x + max_x + 1) / 2; }
+ constexpr int32_t ycenter() const { return (min_y + max_y + 1) / 2; }
// setters
void set(int32_t minx, int32_t maxx, int32_t miny, int32_t maxy) { min_x = minx; max_x = maxx; min_y = miny; max_y = maxy; }
@@ -106,10 +106,10 @@ public:
void offsety(int32_t delta) { min_y += delta; max_y += delta; }
// internal state
- int32_t min_x; // minimum X, or left coordinate
- int32_t max_x; // maximum X, or right coordinate (inclusive)
- int32_t min_y; // minimum Y, or top coordinate
- int32_t max_y; // maximum Y, or bottom coordinate (inclusive)
+ int32_t min_x = 0; // minimum X, or left coordinate
+ int32_t max_x = 0; // maximum X, or right coordinate (inclusive)
+ int32_t min_y = 0; // minimum Y, or top coordinate
+ int32_t max_y = 0; // maximum Y, or bottom coordinate (inclusive)
};
diff --git a/src/lib/util/bitstream.h b/src/lib/util/bitstream.h
index 0056c4ce38e..3da6ec2c1cf 100644
--- a/src/lib/util/bitstream.h
+++ b/src/lib/util/bitstream.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_BITSTREAM_H
+#define MAME_UTIL_BITSTREAM_H
-#ifndef __BITSTREAM_H__
-#define __BITSTREAM_H__
+#pragma once
#include "osdcore.h"
@@ -238,5 +238,4 @@ inline uint32_t bitstream_out::flush()
return m_doffset;
}
-
-#endif
+#endif // MAME_UTIL_BITSTREAM_H
diff --git a/src/lib/util/cdrom.h b/src/lib/util/cdrom.h
index 8dd841b3459..50b762d5009 100644
--- a/src/lib/util/cdrom.h
+++ b/src/lib/util/cdrom.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_CDROM_H
+#define MAME_UTIL_CDROM_H
-#ifndef __CDROM_H__
-#define __CDROM_H__
+#pragma once
#include "osdcore.h"
#include "chd.h"
@@ -179,7 +179,4 @@ static inline uint32_t lba_to_msf_alt(int lba)
return ret;
}
-
-
-
-#endif // __CDROM_H__
+#endif // MAME_UTIL_CDROM_H
diff --git a/src/lib/util/chd.h b/src/lib/util/chd.h
index a85ae1b9c10..254a99daae1 100644
--- a/src/lib/util/chd.h
+++ b/src/lib/util/chd.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_CHD_H
+#define MAME_UTIL_CHD_H
-#ifndef __CHD_H__
-#define __CHD_H__
+#pragma once
#include "osdcore.h"
#include "coretmpl.h"
@@ -580,5 +580,4 @@ private:
uint32_t m_write_hunk; // next hunk to write
};
-
-#endif // __CHD_H__
+#endif // MAME_UTIL_CHD_H
diff --git a/src/lib/util/chdcd.h b/src/lib/util/chdcd.h
index 3f31bad7e00..65e4b943964 100644
--- a/src/lib/util/chdcd.h
+++ b/src/lib/util/chdcd.h
@@ -6,10 +6,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_CHDCD_H
+#define MAME_UTIL_CHDCD_H
-#ifndef __CHDCD_H__
-#define __CHDCD_H__
+#pragma once
#include "cdrom.h"
@@ -35,4 +35,4 @@ struct chdcd_track_input_info
chd_error chdcd_parse_toc(const char *tocfname, cdrom_toc &outtoc, chdcd_track_input_info &outinfo);
-#endif /* __CHDCD_H__ */
+#endif // MAME_UTIL_CHDCD_H
diff --git a/src/lib/util/chdcodec.h b/src/lib/util/chdcodec.h
index 899b5363592..e688b41a108 100644
--- a/src/lib/util/chdcodec.h
+++ b/src/lib/util/chdcodec.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_CHDCODEC_H
+#define MAME_UTIL_CHDCODEC_H
-#ifndef __CHDCODEC_H__
-#define __CHDCODEC_H__
+#pragma once
#include "osdcore.h"
#include "coretmpl.h"
@@ -190,5 +190,4 @@ enum
AVHUFF_CODEC_DECOMPRESS_CONFIG = 1
};
-
-#endif // __CHDCODEC_H__
+#endif // MAME_UTIL_CHDCODEC_H
diff --git a/src/lib/util/corestr.h b/src/lib/util/corestr.h
index 4df0a5ae812..d7734d50b29 100644
--- a/src/lib/util/corestr.h
+++ b/src/lib/util/corestr.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_CORESTR_H
+#define MAME_UTIL_CORESTR_H
-#ifndef __CORESTR_H__
-#define __CORESTR_H__
+#pragma once
#include "osdcore.h"
#include "strformat.h"
@@ -64,4 +64,4 @@ std::string &strmakeupper(std::string& str);
std::string &strmakelower(std::string& str);
int strreplace(std::string &str, const std::string& search, const std::string& replace);
-#endif /* __CORESTR_H__ */
+#endif // MAME_UTIL_CORESTR_H
diff --git a/src/lib/util/coretmpl.h b/src/lib/util/coretmpl.h
index 08c3a6b8678..4b3b05bf274 100644
--- a/src/lib/util/coretmpl.h
+++ b/src/lib/util/coretmpl.h
@@ -990,6 +990,26 @@ constexpr std::enable_if_t<std::is_signed<T>::value, T> iabs(T v) noexcept
return (v < T(0)) ? -v : v;
}
+
+// returns greatest common divisor of a and b using the Euclidean algorithm
+template <typename M, typename N>
+constexpr std::common_type_t<M, N> euclid_gcd(M a, N b)
+{
+ return b ? euclid_gcd(b, a % b) : a;
+}
+
+// reduce a fraction
+template <typename M, typename N>
+inline void reduce_fraction(M &num, N &den)
+{
+ auto const div(euclid_gcd(num, den));
+ if (div)
+ {
+ num /= div;
+ den /= div;
+ }
+}
+
}; // namespace util
#endif // MAME_UTIL_CORETMPL_H
diff --git a/src/lib/util/coreutil.h b/src/lib/util/coreutil.h
index 0a584c4a39e..cf5106f953d 100644
--- a/src/lib/util/coreutil.h
+++ b/src/lib/util/coreutil.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_COREUTIL_H
+#define MAME_UTIL_COREUTIL_H
-#ifndef __COREUTIL_H__
-#define __COREUTIL_H__
+#pragma once
#include "osdcomm.h"
@@ -81,4 +81,4 @@ void rand_memory(void *memory, size_t length);
uint32_t core_crc32(uint32_t crc, const uint8_t *buf, uint32_t len);
-#endif /* __COREUTIL_H__ */
+#endif // MAME_UTIL_COREUTIL_H
diff --git a/src/lib/util/delegate.h b/src/lib/util/delegate.h
index f8e23faf57d..e4b870ed06d 100644
--- a/src/lib/util/delegate.h
+++ b/src/lib/util/delegate.h
@@ -73,10 +73,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_DELEGATE_H
+#define MAME_UTIL_DELEGATE_H
-#ifndef __DELEGATE_H__
-#define __DELEGATE_H__
+#pragma once
// standard C++ includes
#include <cstring>
@@ -619,5 +619,4 @@ public:
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
-
-#endif /* __DELEGATE_H__ */
+#endif // MAME_UTIL_DELEGATE_H
diff --git a/src/lib/util/flac.h b/src/lib/util/flac.h
index f5951945b07..20e3f1b9378 100644
--- a/src/lib/util/flac.h
+++ b/src/lib/util/flac.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_FLAC_H
+#define MAME_UTIL_FLAC_H
-#ifndef __FLAC_H__
-#define __FLAC_H__
+#pragma once
#include "osdcore.h"
#include "corefile.h"
@@ -126,20 +126,19 @@ private:
// output state
FLAC__StreamDecoder * m_decoder; // actual encoder
util::core_file * m_file; // output file
- uint32_t m_sample_rate; // decoded sample rate
- uint8_t m_channels; // decoded number of channels
- uint8_t m_bits_per_sample; // decoded bits per sample
- uint32_t m_compressed_offset; // current offset in compressed data
+ uint32_t m_sample_rate; // decoded sample rate
+ uint8_t m_channels; // decoded number of channels
+ uint8_t m_bits_per_sample; // decoded bits per sample
+ uint32_t m_compressed_offset; // current offset in compressed data
const FLAC__byte * m_compressed_start; // start of compressed data
- uint32_t m_compressed_length; // length of compressed data
+ uint32_t m_compressed_length; // length of compressed data
const FLAC__byte * m_compressed2_start; // start of compressed data
- uint32_t m_compressed2_length; // length of compressed data
- int16_t * m_uncompressed_start[8];// pointer to start of uncompressed data (up to 8 streams)
- uint32_t m_uncompressed_offset; // current position in uncompressed data
- uint32_t m_uncompressed_length; // length of uncompressed data
+ uint32_t m_compressed2_length; // length of compressed data
+ int16_t * m_uncompressed_start[8];// pointer to start of uncompressed data (up to 8 streams)
+ uint32_t m_uncompressed_offset; // current position in uncompressed data
+ uint32_t m_uncompressed_length; // length of uncompressed data
bool m_uncompressed_swap; // swap uncompressed sample data
- uint8_t m_custom_header[0x2a]; // custom header
+ uint8_t m_custom_header[0x2a]; // custom header
};
-
-#endif // __FLAC_H__
+#endif // MAME_UTIL_FLAC_H
diff --git a/src/lib/util/harddisk.h b/src/lib/util/harddisk.h
index 727f9a3fd07..c0551703ca7 100644
--- a/src/lib/util/harddisk.h
+++ b/src/lib/util/harddisk.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_HARDDISK_H
+#define MAME_UTIL_HARDDISK_H
-#ifndef __HARDDISK_H__
-#define __HARDDISK_H__
+#pragma once
#include "osdcore.h"
#include "chd.h"
@@ -46,4 +46,4 @@ hard_disk_info *hard_disk_get_info(hard_disk_file *file);
uint32_t hard_disk_read(hard_disk_file *file, uint32_t lbasector, void *buffer);
uint32_t hard_disk_write(hard_disk_file *file, uint32_t lbasector, const void *buffer);
-#endif /* __HARDDISK_H__ */
+#endif // MAME_UTIL_HARDDISK_H
diff --git a/src/lib/util/hash.h b/src/lib/util/hash.h
index 23c8702958e..cb87f3f8b3c 100644
--- a/src/lib/util/hash.h
+++ b/src/lib/util/hash.h
@@ -10,10 +10,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_HASH_H
+#define MAME_UTIL_HASH_H
-#ifndef __HASH_H__
-#define __HASH_H__
+#pragma once
#include "hashing.h"
@@ -119,4 +119,4 @@ private:
} // namespace util
-#endif /* __HASH_H__ */
+#endif // MAME_UTIL_HASH_H
diff --git a/src/lib/util/hashing.h b/src/lib/util/hashing.h
index 5e9c9134c97..b1505c654a4 100644
--- a/src/lib/util/hashing.h
+++ b/src/lib/util/hashing.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_HASHING_H
+#define MAME_UTIL_HASHING_H
-#ifndef __HASHING_H__
-#define __HASHING_H__
+#pragma once
#include "osdcore.h"
#include "corestr.h"
@@ -260,4 +260,4 @@ template <> struct hash<::util::crc16_t>
} // namespace std
-#endif // __HASHING_H__
+#endif // MAME_UTIL_HASHING_H
diff --git a/src/lib/util/huffman.h b/src/lib/util/huffman.h
index 2814eb127dd..0eac393f380 100644
--- a/src/lib/util/huffman.h
+++ b/src/lib/util/huffman.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_HUFFMAN_H
+#define MAME_UTIL_HUFFMAN_H
-#ifndef __HUFFMAN_H__
-#define __HUFFMAN_H__
+#pragma once
#include "osdcore.h"
#include "bitstream.h"
@@ -219,5 +219,4 @@ inline uint32_t huffman_decoder<_NumCodes, _MaxBits>::decode_one(bitstream_in &b
return lookup >> 5;
}
-
-#endif
+#endif // MAME_UTIL_HUFFMAN_H
diff --git a/src/lib/util/jedparse.h b/src/lib/util/jedparse.h
index e2eca46b236..f12101ca154 100644
--- a/src/lib/util/jedparse.h
+++ b/src/lib/util/jedparse.h
@@ -8,8 +8,10 @@
***************************************************************************/
-#ifndef __JEDPARSE_H__
-#define __JEDPARSE_H__
+#ifndef MAME_UTIL_JEDPARSE_H
+#define MAME_UTIL_JEDPARSE_H
+
+#pragma once
#include "osdcore.h"
@@ -84,4 +86,4 @@ static inline void jed_set_fuse(jed_data *data, uint32_t fusenum, uint8_t value)
}
}
-#endif /* __JEDPARSE_H__ */
+#endif // MAME_UTIL_JEDPARSE_H
diff --git a/src/lib/util/opresolv.h b/src/lib/util/opresolv.h
index 1b1bc692118..52030dc4336 100644
--- a/src/lib/util/opresolv.h
+++ b/src/lib/util/opresolv.h
@@ -38,8 +38,10 @@
****************************************************************************/
-#ifndef __OPRESOLV_H__
-#define __OPRESOLV_H__
+#ifndef MAME_UTIL_OPRESOLV_H
+#define MAME_UTIL_OPRESOLV_H
+
+#pragma once
#include <stdlib.h>
#include <vector>
@@ -271,4 +273,4 @@ private:
} // namespace util
-#endif /* __OPRESOLV_H__ */
+#endif // MAME_UTIL_OPRESOLV_H
diff --git a/src/lib/util/palette.h b/src/lib/util/palette.h
index 8febfe39764..ff2c7bb80c9 100644
--- a/src/lib/util/palette.h
+++ b/src/lib/util/palette.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_PALETTE_H
+#define MAME_UTIL_PALETTE_H
-#ifndef __PALETTE_H__
-#define __PALETTE_H__
+#pragma once
#include "osdcore.h"
#include "coretmpl.h"
@@ -278,5 +278,4 @@ inline rgb_t pal555(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshif
inline rgb_t pal565(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<5,6,5>(data, rshift, gshift, bshift); }
inline rgb_t pal888(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<8,8,8>(data, rshift, gshift, bshift); }
-
-#endif // __PALETTE_H__
+#endif // MAME_UTIL_PALETTE_H
diff --git a/src/lib/util/plaparse.h b/src/lib/util/plaparse.h
index e3bfcaf0e2a..b0d3cbbe4e3 100644
--- a/src/lib/util/plaparse.h
+++ b/src/lib/util/plaparse.h
@@ -8,8 +8,10 @@
***************************************************************************/
-#ifndef __PLAPARSE_H__
-#define __PLAPARSE_H__
+#ifndef MAME_UTIL_PLAPARSE_H
+#define MAME_UTIL_PLAPARSE_H
+
+#pragma once
#include "osdcore.h"
#include "jedparse.h"
@@ -22,6 +24,4 @@
/* parse a file (read into memory) into a jed_data structure */
int pla_parse(const void *data, size_t length, jed_data *result);
-
-
-#endif /* __PLAPARSE_H__ */
+#endif // MAME_UTIL_PLAPARSE_H
diff --git a/src/lib/util/pool.h b/src/lib/util/pool.h
index 305fc9c5f51..2d1c5af31a7 100644
--- a/src/lib/util/pool.h
+++ b/src/lib/util/pool.h
@@ -8,8 +8,10 @@
***************************************************************************/
-#ifndef __POOL_H__
-#define __POOL_H__
+#ifndef MAME_UTIL_POOL_H
+#define MAME_UTIL_POOL_H
+
+#pragma once
#include "osdcore.h"
@@ -113,4 +115,4 @@ char *pool_strdup_file_line(object_pool *pool, const char *str, const char *file
bool test_memory_pools(void);
-#endif /* __POOL_H__ */
+#endif // MAME_UTIL_POOL_H
diff --git a/src/lib/util/vbiparse.h b/src/lib/util/vbiparse.h
index 4ccb6a935c4..8113cb5cb32 100644
--- a/src/lib/util/vbiparse.h
+++ b/src/lib/util/vbiparse.h
@@ -8,10 +8,10 @@
***************************************************************************/
-#pragma once
+#ifndef MAME_UTIL_VBIPARSE_H
+#define MAME_UTIL_VBIPARSE_H
-#ifndef __VBIPARSE_H__
-#define __VBIPARSE_H__
+#pragma once
#include "osdcomm.h"
@@ -90,4 +90,4 @@ void vbi_metadata_pack(uint8_t *dest, uint32_t framenum, const vbi_metadata *vbi
void vbi_metadata_unpack(vbi_metadata *vbi, uint32_t *framenum, const uint8_t *source);
-#endif /* __VBIPARSE_H__ */
+#endif // MAME_UTIL_VBIPARSE_H
diff --git a/src/lib/util/wavwrite.h b/src/lib/util/wavwrite.h
index da94a9d3782..8ceb6ad2a0d 100644
--- a/src/lib/util/wavwrite.h
+++ b/src/lib/util/wavwrite.h
@@ -1,9 +1,9 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
-#pragma once
+#ifndef MAME_UTIL_WAVWRITE_H
+#define MAME_UTIL_WAVWRITE_H
-#ifndef __WAVWRITE_H__
-#define __WAVWRITE_H__
+#pragma once
struct wav_file;
@@ -15,4 +15,4 @@ void wav_add_data_32(wav_file *wavptr, int32_t *data, int samples, int shift);
void wav_add_data_16lr(wav_file *wavptr, int16_t *left, int16_t *right, int samples);
void wav_add_data_32lr(wav_file *wavptr, int32_t *left, int32_t *right, int samples, int shift);
-#endif /* __WAVWRITE_H__ */
+#endif // MAME_UTIL_WAVWRITE_H
diff --git a/src/mame/drivers/accomm.cpp b/src/mame/drivers/accomm.cpp
index 4670a882007..9ef4100f7d1 100644
--- a/src/mame/drivers/accomm.cpp
+++ b/src/mame/drivers/accomm.cpp
@@ -238,17 +238,15 @@ uint32_t accomm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
{
int i;
int x = 0;
- int pal[16];
int scanline = screen.vpos();
rectangle r = cliprect;
- r.min_y = r.max_y = scanline;
+ r.sety(scanline, scanline);
if (scanline == 0)
- {
m_ula.screen_addr = m_ula.screen_start - m_ula.screen_base;
- }
/* set up palette */
+ int pal[16];
switch( m_ula.screen_mode )
{
case 0: case 3: case 4: case 6: case 7: /* 2 colour mode */
diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp
index fb331764ec4..322c9da3f23 100644
--- a/src/mame/drivers/alesis.cpp
+++ b/src/mame/drivers/alesis.cpp
@@ -431,7 +431,6 @@ MACHINE_CONFIG_START(alesis_state::hr16)
MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_PALETTE_INIT_OWNER(alesis_state, alesis)
diff --git a/src/mame/drivers/alg.cpp b/src/mame/drivers/alg.cpp
index b72d8a61b3a..96dc185ba6b 100644
--- a/src/mame/drivers/alg.cpp
+++ b/src/mame/drivers/alg.cpp
@@ -102,8 +102,8 @@ int alg_state::get_lightgun_pos(int player, int *x, int *y)
if (xpos == -1 || ypos == -1)
return false;
- *x = visarea.min_x + xpos * visarea.width() / 255;
- *y = visarea.min_y + ypos * visarea.height() / 255;
+ *x = visarea.left() + xpos * visarea.width() / 255;
+ *y = visarea.top() + ypos * visarea.height() / 255;
return true;
}
diff --git a/src/mame/drivers/alphasma.cpp b/src/mame/drivers/alphasma.cpp
index 50736a86f61..0b5137f6452 100644
--- a/src/mame/drivers/alphasma.cpp
+++ b/src/mame/drivers/alphasma.cpp
@@ -18,7 +18,6 @@
#include "machine/ram.h"
#include "video/hd44780.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
class alphasmart_state : public driver_device
@@ -458,7 +457,6 @@ MACHINE_CONFIG_START(alphasmart_state::alphasmart)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(alphasmart_state, alphasmart)
- config.set_default_layout(layout_lcd);
MCFG_NVRAM_ADD_0FILL("nvram")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp
index 890548e059e..2fcfa30f009 100644
--- a/src/mame/drivers/alto2.cpp
+++ b/src/mame/drivers/alto2.cpp
@@ -290,16 +290,13 @@ MACHINE_CONFIG_START(alto2_state::alto2)
MCFG_DEVICE_IO_MAP(alto2_iomem_map)
// Video hardware
- MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::white())
- MCFG_SCREEN_RAW_PARAMS(XTAL(20'160'000),
- A2_DISP_TOTAL_WIDTH, 0, A2_DISP_WIDTH,
- A2_DISP_TOTAL_HEIGHT, 0, A2_DISP_HEIGHT)
- // Two interlaced fields at 60Hz => 30Hz frame rate
- MCFG_SCREEN_REFRESH_RATE(30)
- MCFG_SCREEN_UPDATE_DEVICE("maincpu", alto2_cpu_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- config.set_default_layout(layout_vertical);
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_color(rgb_t::white());
+ screen.set_physical_aspect(3, 4); // Portrait CRT
+ screen.set_raw(XTAL(20'160'000), A2_DISP_TOTAL_WIDTH, 0, A2_DISP_WIDTH, A2_DISP_TOTAL_HEIGHT, 0, A2_DISP_HEIGHT);
+ screen.set_refresh_hz(30); // Two interlaced fields at 60Hz => 30Hz frame rate
+ screen.set_screen_update("maincpu", FUNC(alto2_cpu_device::screen_update));
+ screen.set_palette("palette");
MCFG_PALETTE_ADD_MONOCHROME("palette")
diff --git a/src/mame/drivers/apple1.cpp b/src/mame/drivers/apple1.cpp
index bb81a6bdc85..36b9ecf6fa3 100644
--- a/src/mame/drivers/apple1.cpp
+++ b/src/mame/drivers/apple1.cpp
@@ -358,14 +358,14 @@ uint32_t apple1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
// the cursor 555 timer counts 0.52 of a second; the cursor is ON for
// 2 of those counts and OFF for the last one.
- if (((int)(machine().time().as_double() / (0.52 / 3.0)) % 3) < 2)
+ if ((int(machine().time().as_double() / (0.52 / 3.0)) % 3) < 2)
{
curs_save = m_vram[(m_cursy * 40) + m_cursx];
m_vram[(m_cursy * 40) + m_cursx] = 0x40;
cursor_blink = 1;
}
- for (int row = 0; row < cliprect.max_y; row += 8)
+ for (int row = 0; row < cliprect.bottom(); row += 8)
{
for (int col = 0; col < 40; col++)
{
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index d485237893b..72e0a243d07 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -171,7 +171,7 @@ Address bus A0-A11 is Y0-Y11
#define A2_UPPERBANK_TAG "inhbank"
#define IIC_ACIA1_TAG "acia1"
#define IIC_ACIA2_TAG "acia2"
-#define IICP_IWM_TAG "iwm"
+#define IICP_IWM_TAG "fdc"
#define LASER128_UDC_TAG "l128udc"
#define PRINTER_PORT_TAG "printer"
#define MODEM_PORT_TAG "modem"
@@ -393,6 +393,9 @@ public:
void r2000bank_map(address_map &map);
void r4000bank_map(address_map &map);
void spectred_keyb_map(address_map &map);
+
+ bool m_35sel, m_hdsel, m_intdrive;
+
private:
int m_speaker_state;
int m_cassette_state, m_cassette_out;
@@ -435,6 +438,9 @@ private:
uint8_t m_migram[0x800];
uint16_t m_migpage;
+ bool m_zipunlocked;
+ int m_zipstage;
+
uint8_t *m_ram_ptr, *m_rom_ptr, *m_cec_ptr;
int m_ram_size;
@@ -486,21 +492,36 @@ private:
uint8_t apple2e_state::mig_r(uint16_t offset)
{
+ //printf("mig_r @ %x\n", offset + 0xc00);
// MIG RAM window
- if (offset < 0x20)
+ if ((offset >= 0x200) && (offset < 0x220))
{
return m_migram[m_migpage + offset];
}
- // increment MIG RAM window
- if (offset == 0x20)
+ // increment MIG RAM window and return previous value
+ if ((offset >= 0x220) && (offset < 0x240))
{
+ uint8_t rv = m_migram[m_migpage + offset];
m_migpage += 0x20;
- m_migpage &= 0x7ff; // make sure we wrap
+ m_migpage &= 0x7ff;
+ return rv;
+ }
+
+ if ((offset >= 0x240) && (offset < 0x260))
+ {
+ m_hdsel = false;
+ sony_set_sel_line(m_iicpiwm, 0);
+ }
+
+ if ((offset >= 0x260) && (offset < 0x280))
+ {
+ m_hdsel = true;
+ sony_set_sel_line(m_iicpiwm, 0x80);
}
// reset MIG RAM window
- if (offset == 0xa0)
+ if (offset == 0x2a0)
{
m_migpage = 0;
}
@@ -510,22 +531,58 @@ uint8_t apple2e_state::mig_r(uint16_t offset)
void apple2e_state::mig_w(uint16_t offset, uint8_t data)
{
+ //printf("mig_w %x @ %x\n", data, offset + 0xc00);
+
+ if (offset == 0x40)
+ {
+ m_iicpiwm->device_reset();
+ return;
+ }
+
+ if ((offset >= 0x80) && (offset < 0xa0))
+ {
+ //printf("MIG: enable internal drive on d2\n");
+ m_intdrive = true;
+ return;
+ }
+
+ if ((offset >= 0xc0) && (offset < 0xe0))
+ {
+ //printf("MIG: disable internal drive\n");
+ m_intdrive = false;
+ return;
+ }
+
// MIG RAM window
- if (offset < 0x20)
+ if ((offset >= 0x200) && (offset < 0x220))
{
m_migram[m_migpage + offset] = data;
return;
}
- // increment MIG RAM window
- if (offset == 0x20)
+ // increment MIG RAM window, but write value at old location first
+ if ((offset >= 0x220) && (offset < 0x240))
{
+ m_migram[m_migpage + offset] = data;
m_migpage += 0x20;
m_migpage &= 0x7ff; // make sure we wrap
+ return;
+ }
+
+ if ((offset >= 0x240) && (offset < 0x260))
+ {
+ m_35sel = false;
+ return;
+ }
+
+ if ((offset >= 0x260) && (offset < 0x280))
+ {
+ m_35sel = true;
+ return;
}
// reset MIG RAM window
- if (offset == 0xa0)
+ if (offset == 0x2a0)
{
m_migpage = 0;
}
@@ -853,6 +910,11 @@ void apple2e_state::machine_start()
save_item(NAME(m_mockingboard4c));
save_item(NAME(m_intc8rom));
save_item(NAME(m_cec_bank));
+ save_item(NAME(m_35sel));
+ save_item(NAME(m_hdsel));
+ save_item(NAME(m_intdrive));
+ save_item(NAME(m_zipunlocked));
+ save_item(NAME(m_zipstage));
}
void apple2e_state::machine_reset()
@@ -875,6 +937,8 @@ void apple2e_state::machine_reset()
m_mockingboard4c = false;
m_intc8rom = false;
m_cec_bank = 0;
+ m_zipunlocked = false;
+ m_zipstage = 0;
// IIe prefers INTCXROM default to off, IIc has it always on
if (m_rom_ptr[0x3bc0] == 0x00)
@@ -1391,6 +1455,14 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic)
m_romswitch = !m_romswitch;
update_slotrom_banks();
+ // MIG is reset when ROMSWITCH turns off
+ if ((m_isiicplus) && !(m_romswitch))
+ {
+ m_migpage = 0;
+ m_intdrive = false;
+ m_35sel = false;
+ }
+
// if LC is not enabled
if (!m_lcram)
{
@@ -1986,6 +2058,34 @@ WRITE8_MEMBER(apple2e_state::c000_iic_w)
m_strobe = 0;
break;
+ case 0x5a: // IIC+ accelerator unlock
+ if (m_isiicplus)
+ {
+ if (data == 0x5a)
+ {
+ m_zipstage++;
+ if (m_zipstage == 4)
+ {
+ m_zipunlocked = true;
+ }
+ }
+ else if (data == 0xa5)
+ {
+ // put settings into effect and lock
+ m_zipunlocked = false;
+ m_zipstage = 0;
+ }
+ else
+ {
+ // disable acceleration and lock
+ m_zipunlocked = false;
+ m_zipstage = 0;
+ }
+ }
+ break;
+
+ case 0x5b:
+
case 0x78:
case 0x79:
m_vbl = false;
@@ -2113,6 +2213,11 @@ READ8_MEMBER(apple2e_state::c080_r)
}
else
{
+ if ((m_isiicplus) && (slot == 6))
+ {
+ return m_iicpiwm->read(offset % 0x10);
+ }
+
if (m_slotdevice[slot] != nullptr)
{
return m_slotdevice[slot]->read_c0nx(offset % 0x10);
@@ -2143,6 +2248,12 @@ WRITE8_MEMBER(apple2e_state::c080_w)
}
else
{
+ if ((m_isiicplus) && (slot == 6))
+ {
+ m_iicpiwm->write(offset % 0x10, data);
+ return;
+ }
+
if (m_slotdevice[slot] != nullptr)
{
m_slotdevice[slot]->write_c0nx(offset % 0x10, data);
@@ -2291,11 +2402,6 @@ READ8_MEMBER(apple2e_state::c400_cec_bank_r) { return m_rom_ptr[0x4400 + offset
READ8_MEMBER(apple2e_state::c800_r)
{
- if ((m_isiicplus) && (m_romswitch) && (offset >= 0x600) && (offset < 0x700))
- {
- return mig_r(offset-0x600);
- }
-
if ((offset == 0x7ff) && !machine().side_effects_disabled())
{
m_cnxx_slot = CNXX_UNCLAIMED;
@@ -2313,11 +2419,6 @@ READ8_MEMBER(apple2e_state::c800_r)
READ8_MEMBER(apple2e_state::c800_int_r)
{
- if ((m_isiicplus) && (m_romswitch) && (offset >= 0x600) && (offset < 0x700))
- {
- return mig_r(offset-0x600);
- }
-
if ((offset == 0x7ff) && !machine().side_effects_disabled())
{
m_cnxx_slot = CNXX_UNCLAIMED;
@@ -2335,9 +2436,9 @@ READ8_MEMBER(apple2e_state::c800_int_r)
READ8_MEMBER(apple2e_state::c800_b2_int_r)
{
- if ((m_isiicplus) && (m_romswitch) && (offset >= 0x600) && (offset < 0x700))
+ if ((m_isiicplus) && (m_romswitch) && (((offset >= 0x400) && (offset < 0x500)) || ((offset >= 0x600) && (offset < 0x700))))
{
- return mig_r(offset-0x600);
+ return mig_r(offset-0x400);
}
if ((offset == 0x7ff) && !machine().side_effects_disabled())
@@ -2352,9 +2453,9 @@ READ8_MEMBER(apple2e_state::c800_b2_int_r)
WRITE8_MEMBER(apple2e_state::c800_w)
{
- if ((m_isiicplus) && (m_romswitch) && (offset >= 0x600) && (offset < 0x700))
+ if ((m_isiicplus) && (m_romswitch) && (((offset >= 0x400) && (offset < 0x500)) || ((offset >= 0x600) && (offset < 0x700))))
{
- mig_w(offset-0x600, data);
+ mig_w(offset-0x400, data);
return;
}
@@ -2400,22 +2501,11 @@ WRITE8_MEMBER(apple2e_state::inh_w)
READ8_MEMBER(apple2e_state::lc_romswitch_r)
{
- if ((offset >= 0xc00) && (offset < 0xd00))
- {
- return mig_r(offset-0xc00);
- }
-
return m_rom_ptr[0x5000 + offset];
}
WRITE8_MEMBER(apple2e_state::lc_romswitch_w)
{
- if ((offset >= 0xc00) && (offset < 0xd00))
- {
- mig_w(offset-0xc00, data);
- return;
- }
-
lc_w(space, offset, data);
}
@@ -4126,14 +4216,92 @@ MACHINE_CONFIG_START(apple2e_state::apple2c)
MCFG_RAM_EXTRA_OPTIONS("128K")
MACHINE_CONFIG_END
+static void apple2cp_set_lines(device_t *device, uint8_t lines)
+{
+ apple2e_state *state = device->machine().driver_data<apple2e_state>();
+
+ if (state->m_35sel)
+ {
+ sony_set_lines(device, lines);
+ }
+ else
+ {
+ apple525_set_lines(device, lines);
+ }
+}
+
+static void apple2cp_set_enable_lines(device_t *device,int enable_mask)
+{
+ apple2e_state *state = device->machine().driver_data<apple2e_state>();
+
+// printf("set_enable_lines: 35sel %d int %d enable_mask %d\n", state->m_35sel, state->m_intdrive, enable_mask);
+
+ if ((state->m_35sel) && (state->m_intdrive) && (enable_mask == 2))
+ {
+ sony_set_enable_lines(device, 1);
+ }
+ else if (!state->m_35sel)
+ {
+ apple525_set_enable_lines(device, enable_mask);
+ }
+ else
+ {
+ sony_set_enable_lines(device, 0);
+ }
+}
+
+static uint8_t apple2cp_read_data(device_t *device)
+{
+ apple2e_state *state = device->machine().driver_data<apple2e_state>();
+
+ if (state->m_35sel)
+ {
+ return sony_read_data(device);
+ }
+ else
+ {
+ return apple525_read_data(device);
+ }
+
+ return 0;
+}
+
+static void apple2cp_write_data(device_t *device, uint8_t data)
+{
+ apple2e_state *state = device->machine().driver_data<apple2e_state>();
+
+ if (state->m_35sel)
+ {
+ sony_write_data(device, data);
+ }
+ else
+ {
+ apple525_write_data(device, data);
+ }
+}
+
+static int apple2cp_read_status(device_t *device)
+{
+ apple2e_state *state = device->machine().driver_data<apple2e_state>();
+
+ if (state->m_35sel)
+ {
+ return sony_read_status(device);
+ }
+ else
+ {
+ return apple525_read_status(device);
+ }
+}
+
const applefdc_interface a2cp_interface =
{
- sony_set_lines, /* set_lines */
- sony_set_enable_lines, /* set_enable_lines */
+ apple2cp_set_lines, /* set_lines */
+ apple2cp_set_enable_lines, /* set_enable_lines */
- sony_read_data, /* read_data */
- sony_write_data, /* write_data */
- sony_read_status /* read_status */
+ apple2cp_read_data, /* read_data */
+ apple2cp_write_data, /* write_data */
+ apple2cp_read_status /* read_status */
};
static const floppy_interface apple2cp_floppy35_floppy_interface =
@@ -4143,12 +4311,27 @@ static const floppy_interface apple2cp_floppy35_floppy_interface =
"floppy_3_5"
};
+static const floppy_interface floppy_interface =
+{
+ FLOPPY_STANDARD_5_25_DSHD,
+ LEGACY_FLOPPY_OPTIONS_NAME(apple2),
+ "floppy_5_25"
+};
+
MACHINE_CONFIG_START(apple2e_state::apple2cp)
apple2c(config);
+ MCFG_DEVICE_REPLACE("maincpu", M65C02, 1021800) /* close to actual CPU frequency of 1.020484 MHz */
+ MCFG_DEVICE_PROGRAM_MAP(apple2c_memexp_map)
+
MCFG_DEVICE_REMOVE("sl4")
MCFG_DEVICE_REMOVE("sl6")
MCFG_IWM_ADD(IICP_IWM_TAG, a2cp_interface)
- MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(apple2cp_floppy35_floppy_interface)
+ MCFG_LEGACY_FLOPPY_APPLE_2_DRIVES_ADD(floppy_interface,15,16)
+ MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADDITIONAL_ADD(apple2cp_floppy35_floppy_interface)
+
+ MCFG_RAM_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("128K")
+ MCFG_RAM_EXTRA_OPTIONS("128K, 384K, 640K, 896K, 1152K")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(apple2e_state::apple2c_iwm)
@@ -4181,13 +4364,6 @@ const applefdc_interface fdc_interface =
apple525_read_status /* read_status */
};
-static const floppy_interface floppy_interface =
-{
- FLOPPY_STANDARD_5_25_DSHD,
- LEGACY_FLOPPY_OPTIONS_NAME(apple2),
- "floppy_5_25"
-};
-
MACHINE_CONFIG_START(apple2e_state::laser128)
apple2c(config);
MCFG_DEVICE_REPLACE("maincpu", M65C02, 1021800) /* close to actual CPU frequency of 1.020484 MHz */
@@ -4553,4 +4729,4 @@ COMP( 1985, apple2c0, apple2c, 0, apple2c_iwm, apple2c, apple2e_state,
COMP( 1986, apple2c3, apple2c, 0, apple2c_mem, apple2c, apple2e_state, empty_init, "Apple Computer", "Apple //c (Original Memory Expansion)", MACHINE_SUPPORTS_SAVE )
COMP( 1986, apple2c4, apple2c, 0, apple2c_mem, apple2c, apple2e_state, empty_init, "Apple Computer", "Apple //c (rev 4)", MACHINE_SUPPORTS_SAVE )
COMP( 1987, ceci, 0, apple2, ceci, ceci, apple2e_state, empty_init, "Shaanxi Province Computer Factory", "China Education Computer I", MACHINE_SUPPORTS_SAVE )
-COMP( 1988, apple2cp, apple2c, 0, apple2cp, apple2c, apple2e_state, empty_init, "Apple Computer", "Apple //c Plus", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1988, apple2cp, apple2c, 0, apple2cp, apple2c, apple2e_state, empty_init, "Apple Computer", "Apple //c Plus", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/astrof.cpp b/src/mame/drivers/astrof.cpp
index c6f3f85802b..954418c4465 100644
--- a/src/mame/drivers/astrof.cpp
+++ b/src/mame/drivers/astrof.cpp
@@ -374,7 +374,7 @@ void astrof_state::video_update_common( bitmap_rgb32 &bitmap, const rectangle &c
if (!m_flipscreen)
y = ~y;
- if ((y <= cliprect.min_y) || (y >= cliprect.max_y))
+ if ((y <= cliprect.top()) || (y >= cliprect.bottom()))
continue;
if (m_screen_off)
diff --git a/src/mame/drivers/atarisy4.cpp b/src/mame/drivers/atarisy4.cpp
index 977845b7795..4ccb756928e 100644
--- a/src/mame/drivers/atarisy4.cpp
+++ b/src/mame/drivers/atarisy4.cpp
@@ -245,13 +245,13 @@ uint32_t atarisy4_state::screen_update_atarisy4(screen_device &screen, bitmap_rg
//uint32_t offset = m_gpu.dpr << 5;
- for (y = cliprect.min_y; y <= cliprect.max_y; ++y)
+ for (y = cliprect.top(); y <= cliprect.bottom(); ++y)
{
uint16_t *src = &m_screen_ram[(offset + (4096 * y)) / 2];
- uint32_t *dest = &bitmap.pix32(y, cliprect.min_x);
+ uint32_t *dest = &bitmap.pix32(y, cliprect.left());
int x;
- for (x = cliprect.min_x; x < cliprect.max_x; x += 2)
+ for (x = cliprect.left(); x < cliprect.right(); x += 2)
{
uint16_t data = *src++;
diff --git a/src/mame/drivers/bfcobra.cpp b/src/mame/drivers/bfcobra.cpp
index 0215b85ce1c..c38ea142449 100644
--- a/src/mame/drivers/bfcobra.cpp
+++ b/src/mame/drivers/bfcobra.cpp
@@ -408,13 +408,13 @@ uint32_t bfcobra_state::screen_update_bfcobra(screen_device &screen, bitmap_rgb3
lorescol = m_col8bit;
}
- for (y = cliprect.min_y; y <= cliprect.max_y; ++y)
+ for (y = cliprect.top(); y <= cliprect.bottom(); ++y)
{
uint16_t y_offset = (y + m_v_scroll) * 256;
src = &m_video_ram[offset + y_offset];
dest = &bitmap.pix32(y);
- for (x = cliprect.min_x; x <= cliprect.max_x / 2; ++x)
+ for (x = cliprect.left(); x <= cliprect.right() / 2; ++x)
{
uint8_t x_offset = x + m_h_scroll;
uint8_t pen = *(src + x_offset);
diff --git a/src/mame/drivers/bmcpokr.cpp b/src/mame/drivers/bmcpokr.cpp
index 288882bc8de..fcd3c212560 100644
--- a/src/mame/drivers/bmcpokr.cpp
+++ b/src/mame/drivers/bmcpokr.cpp
@@ -236,11 +236,10 @@ void bmcpokr_state::draw_layer(screen_device &screen, bitmap_ind16 &bitmap, cons
{
if (linescroll)
{
- if ( (y < cliprect.min_y) || (y > cliprect.max_y) )
+ if ( (y < cliprect.top()) || (y > cliprect.bottom()) )
continue;
- clip.min_y = y;
- clip.max_y = y;
+ clip.sety(y, y);
}
int sx = (scroll[y] & 0xff) * 4;
diff --git a/src/mame/drivers/bw2.cpp b/src/mame/drivers/bw2.cpp
index 976a5a9131e..1b1a5d2bcc3 100644
--- a/src/mame/drivers/bw2.cpp
+++ b/src/mame/drivers/bw2.cpp
@@ -550,7 +550,6 @@ MACHINE_CONFIG_START(bw2_state::bw2)
MCFG_DEVICE_IO_MAP(bw2_io)
// video hardware
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_ADD(SCREEN_TAG, LCD)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_UPDATE_DEVICE( MSM6255_TAG, msm6255_device, screen_update )
diff --git a/src/mame/drivers/c65.cpp b/src/mame/drivers/c65.cpp
index 770b4a7fd61..597a6ed16c1 100644
--- a/src/mame/drivers/c65.cpp
+++ b/src/mame/drivers/c65.cpp
@@ -147,9 +147,9 @@ uint32_t c65_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap,
uint8_t *cptr = &m_iplrom[((m_VIC3_ControlA & 0x40) ? 0x9000: 0xd000) + ((m_VIC2_VS_CB_Base & 0x2) << 10)];
// TODO: border area
- for(int y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for(int y=cliprect.top();y<=cliprect.bottom();y++)
{
- for(int x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for(int x=cliprect.left();x<=cliprect.right();x++)
{
//int, xi,yi,xm,ym,dot_x;
int xi = inner_x_char(x / pixel_width);
diff --git a/src/mame/drivers/casloopy.cpp b/src/mame/drivers/casloopy.cpp
index ff2df37a817..060dfdd4a95 100644
--- a/src/mame/drivers/casloopy.cpp
+++ b/src/mame/drivers/casloopy.cpp
@@ -297,7 +297,7 @@ uint32_t casloopy_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
count = test;
- for (y=cliprect.min_y;y<cliprect.max_y;y++)
+ for (y=cliprect.top(); y<cliprect.bottom(); y++) // FIXME: off-by-one?
{
for(x=0;x<256;x++)
{
diff --git a/src/mame/drivers/ccs300.cpp b/src/mame/drivers/ccs300.cpp
index 170f211315c..3a1366331f9 100644
--- a/src/mame/drivers/ccs300.cpp
+++ b/src/mame/drivers/ccs300.cpp
@@ -105,13 +105,12 @@ void ccs300_state::init_ccs300()
membank("bankw0")->configure_entry(0, &main[0x0000]);
}
-// bit 7 needs to be stripped off, we do this by choosing 7 bits and even parity
static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
- DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_EVEN )
+ DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
DEVICE_INPUT_DEFAULTS_END
diff --git a/src/mame/drivers/cesclass.cpp b/src/mame/drivers/cesclass.cpp
index 8536ed29e21..98c638a197b 100644
--- a/src/mame/drivers/cesclass.cpp
+++ b/src/mame/drivers/cesclass.cpp
@@ -27,7 +27,6 @@
#include "sound/okim6295.h"
#include "machine/nvram.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -267,7 +266,6 @@ MACHINE_CONFIG_START(cesclassic_state::cesclassic)
MCFG_SCREEN_UPDATE_DRIVER(cesclassic_state, screen_update)
MCFG_SCREEN_SIZE(8*16*2, 8*8+3*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 8*16*2-1, 0*8, 8*8-1)
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 4)
MCFG_PALETTE_INIT_OWNER(cesclassic_state, cesclassic)
diff --git a/src/mame/drivers/cfx9850.cpp b/src/mame/drivers/cfx9850.cpp
index 8f9007a3740..6aeff5cb610 100644
--- a/src/mame/drivers/cfx9850.cpp
+++ b/src/mame/drivers/cfx9850.cpp
@@ -28,7 +28,6 @@ Debugging information:
#include "emu.h"
#include "cpu/hcd62121/hcd62121.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
class cfx9850_state : public driver_device
@@ -300,8 +299,6 @@ MACHINE_CONFIG_START(cfx9850_state::cfx9850)
MCFG_SCREEN_UPDATE_DRIVER(cfx9850_state, screen_update_cfx9850)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
// TODO: Verify amount of colors and palette. Colors can be changed by changing the contrast.
MCFG_PALETTE_ADD("palette", 4)
MCFG_PALETTE_INIT_OWNER(cfx9850_state, cfx9850)
diff --git a/src/mame/drivers/clcd.cpp b/src/mame/drivers/clcd.cpp
index e2e9a1bd457..31cf84c7300 100644
--- a/src/mame/drivers/clcd.cpp
+++ b/src/mame/drivers/clcd.cpp
@@ -24,7 +24,6 @@
#include "machine/nvram.h"
#include "sound/spkrdev.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -815,7 +814,6 @@ MACHINE_CONFIG_START(clcd_state::clcd)
MCFG_SCREEN_VISIBLE_AREA(0, 480-1, 0, 128-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(clcd_state, clcd)
diff --git a/src/mame/drivers/cps3.cpp b/src/mame/drivers/cps3.cpp
index 5f5ece2d0b9..78b470f1aab 100644
--- a/src/mame/drivers/cps3.cpp
+++ b/src/mame/drivers/cps3.cpp
@@ -564,26 +564,26 @@ inline void cps3_state::cps3_drawgfxzoom(bitmap_rgb32 &dest_bmp,const rectangle
y_index = 0;
}
- if( sx < myclip.min_x)
+ if( sx < myclip.left())
{ /* clip left */
- int pixels = myclip.min_x-sx;
+ int pixels = myclip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
- if( sy < myclip.min_y )
+ if( sy < myclip.top() )
{ /* clip top */
- int pixels = myclip.min_y-sy;
+ int pixels = myclip.top()-sy;
sy += pixels;
y_index += pixels*dy;
}
- if( ex > myclip.max_x+1 )
+ if( ex > myclip.right()+1 )
{ /* clip right */
- int pixels = ex-myclip.max_x-1;
+ int pixels = ex-myclip.right()-1;
ex -= pixels;
}
- if( ey > myclip.max_y+1 )
+ if( ey > myclip.bottom()+1 )
{ /* clip bottom */
- int pixels = ey-myclip.max_y-1;
+ int pixels = ey-myclip.bottom()-1;
ey -= pixels;
}
@@ -985,11 +985,11 @@ void cps3_state::cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_rg
drawline&=0x3ff;
- if (drawline>cliprect.max_y+4) return;
+ if (drawline>cliprect.bottom()+4) return;
- clip.set(cliprect.min_x, cliprect.max_x, drawline, drawline);
+ clip.set(cliprect.left(), cliprect.right(), drawline, drawline);
- for (x=0;x<(cliprect.max_x/16)+2;x++)
+ for (x=0;x<(cliprect.right()/16)+2;x++)
{
uint32_t dat;
int tileno;
@@ -1057,10 +1057,9 @@ uint32_t cps3_state::screen_update_cps3(screen_device &screen, bitmap_rgb32 &bit
fszx = (fullscreenzoomx<<16)/0x40;
fszy = (fullscreenzoomy<<16)/0x40;
- m_renderbuffer_clip.min_x = 0;
- m_renderbuffer_clip.max_x = ((m_screenwidth*fszx)>>16)-1;
- m_renderbuffer_clip.min_y = 0;
- m_renderbuffer_clip.max_y = ((224*fszx)>>16)-1;
+ m_renderbuffer_clip.set(
+ 0, ((m_screenwidth*fszx)>>16)-1,
+ 0, ((224*fszx)>>16)-1);
m_renderbuffer_bitmap.fill(0, m_renderbuffer_clip);
diff --git a/src/mame/drivers/cybiko.cpp b/src/mame/drivers/cybiko.cpp
index c08ec4a387f..e95b97985b0 100644
--- a/src/mame/drivers/cybiko.cpp
+++ b/src/mame/drivers/cybiko.cpp
@@ -22,7 +22,6 @@ ToDo:
#include "includes/cybiko.h"
#include "bus/rs232/rs232.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -401,7 +400,7 @@ MACHINE_CONFIG_START(cybiko_state::cybikov1)
MCFG_H8_SCI_CLK_CALLBACK(WRITELINE("flash1", at45db041_device, sck_w))
// screen
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE( 60 )
MCFG_SCREEN_SIZE( hd66421_device::WIDTH, hd66421_device::HEIGHT )
MCFG_SCREEN_VISIBLE_AREA( 0, hd66421_device::WIDTH - 1, 0, hd66421_device::HEIGHT - 1 )
@@ -409,7 +408,6 @@ MACHINE_CONFIG_START(cybiko_state::cybikov1)
MCFG_SCREEN_PALETTE("hd66421:palette")
// video
MCFG_HD66421_ADD("hd66421")
- config.set_default_layout(layout_lcd);
// sound
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp
index fce55440bad..0097e04ec0d 100644
--- a/src/mame/drivers/ddenlovr.cpp
+++ b/src/mame/drivers/ddenlovr.cpp
@@ -1633,9 +1633,9 @@ void ddenlovr_state::copylayer(bitmap_ind16 &bitmap, const rectangle &cliprect,
if (((m_ddenlovr_layer_enable2 << 4) | m_ddenlovr_layer_enable) & (1 << layer))
{
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
int pen = m_ddenlovr_pixmap[layer][512 * ((y + scrolly) & 0x1ff) + ((x + scrollx) & 0x1ff)];
if ((pen & transmask) != transpen)
diff --git a/src/mame/drivers/ddragon3.cpp b/src/mame/drivers/ddragon3.cpp
index ddd459e6bf3..a364b8b0520 100644
--- a/src/mame/drivers/ddragon3.cpp
+++ b/src/mame/drivers/ddragon3.cpp
@@ -932,7 +932,7 @@ MACHINE_CONFIG_START(wwfwfest_state::wwfwfest)
MCFG_SOUND_ROUTE(0, "mono", 0.45)
MCFG_SOUND_ROUTE(1, "mono", 0.45)
- MCFG_DEVICE_ADD("oki", OKIM6295, 1024188, okim6295_device::PIN7_HIGH) /* Verified - Pin 7 tied to +5VDC */
+ MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) /* Verified - Pin 7 tied to +5VDC */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90)
MACHINE_CONFIG_END
@@ -981,8 +981,8 @@ ROM_END
ROM_START( ddragon3j )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 64k for cpu code */
- ROM_LOAD16_BYTE( "30j15.ic78", 0x00001, 0x40000, CRC(40618cbc) SHA1(cb05498003a45d773983501d3a0f1584a25dcdd3) )
- ROM_LOAD16_BYTE( "30j14.ic79", 0x00000, 0x20000, CRC(96827e80) SHA1(499c0c67d55ff4816ad8832d1d8836eb7432bd13) )
+ ROM_LOAD16_BYTE( "30j15-0.ic78", 0x00001, 0x40000, CRC(40618cbc) SHA1(cb05498003a45d773983501d3a0f1584a25dcdd3) )
+ ROM_LOAD16_BYTE( "30j14-0.ic79", 0x00000, 0x20000, CRC(96827e80) SHA1(499c0c67d55ff4816ad8832d1d8836eb7432bd13) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound cpu code */
ROM_LOAD( "30j13.ic43", 0x00000, 0x10000, CRC(1e974d9b) SHA1(8e54ff747efe587a2e971c15e729445c4e232f0f) )
@@ -1115,7 +1115,7 @@ ROM_START( ctribe )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 64k for cpu code */
ROM_LOAD16_BYTE( "28a16-2.ic26", 0x00001, 0x20000, CRC(c46b2e63) SHA1(86ace715dca48c78a46da1d102de47e5f948a86c) )
ROM_LOAD16_BYTE( "28a15-2.ic25", 0x00000, 0x20000, CRC(3221c755) SHA1(0f6fe5cd6947f6547585eedb7fc5e6af8544b1f7) )
- ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
+ ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
/* No EVEN rom! */
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound cpu code */
@@ -1145,11 +1145,11 @@ ROM_START( ctribe )
ROM_LOAD( "28.ic44", 0x0000, 0x0100, CRC(964329ef) SHA1(f26846571a16d27b726f689049deb0188103aadb) )
ROM_END
-ROM_START( ctribe1 )
+ROM_START( ctribeua )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 64k for cpu code */
ROM_LOAD16_BYTE( "1_28a16-2.ic26", 0x00001, 0x20000, CRC(f00f8443) SHA1(3c099b6bea9956cc60ce4a9a5d790ac2bf7d77bd) )
ROM_LOAD16_BYTE( "1_28a15-2.ic25", 0x00000, 0x20000, CRC(dd70079f) SHA1(321b523fefec2a962d0afa20b33428e7caea8958) )
- ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
+ ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
/* No EVEN rom! */
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound cpu code */
@@ -1179,11 +1179,11 @@ ROM_START( ctribe1 )
ROM_LOAD( "28.ic44", 0x0000, 0x0100, CRC(964329ef) SHA1(f26846571a16d27b726f689049deb0188103aadb) )
ROM_END
-ROM_START( ctribeo ) // only main program code differs from ctribe1 set
+ROM_START( ctribeu1 ) // only main program code differs from ctribe1 set
ROM_REGION( 0x80000, "maincpu", 0 ) /* 64k for cpu code */
ROM_LOAD16_BYTE( "28a16-1.ic26", 0x00001, 0x20000, CRC(d108f36f) SHA1(af53fa441b9ddfc639abb573864a9b351633c6b7) )
ROM_LOAD16_BYTE( "28a15-1.ic25", 0x00000, 0x20000, CRC(3f5693a3) SHA1(2d4516506ad1d68ac45242fe149bba1b4b53eb45) )
- ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
+ ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
/* No EVEN rom! */
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound cpu code */
@@ -1215,9 +1215,9 @@ ROM_END
ROM_START( ctribej )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 64k for cpu code */
- ROM_LOAD16_BYTE( "28j16-02.26", 0x00001, 0x20000, CRC(658b8568) SHA1(899682f6ab28b184654c51c1169216974043f1b9) )
- ROM_LOAD16_BYTE( "28j15-12.25", 0x00000, 0x20000, CRC(50aac7e7) SHA1(af77107f325f9b45a92c544328d3073ed1db5465) )
- ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
+ ROM_LOAD16_BYTE( "28j16-2.ic26", 0x00001, 0x20000, CRC(658b8568) SHA1(899682f6ab28b184654c51c1169216974043f1b9) )
+ ROM_LOAD16_BYTE( "28j15-2.ic25", 0x00000, 0x20000, CRC(50aac7e7) SHA1(af77107f325f9b45a92c544328d3073ed1db5465) )
+ ROM_LOAD16_BYTE( "28j17-0.104", 0x40001, 0x10000, CRC(8c2c6dbd) SHA1(b99b9be6e0bdc8340fedd258819c4df587926a84) )
/* No EVEN rom! */
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound cpu code */
@@ -1385,7 +1385,36 @@ ROM_START( wwfwfestu )
ROM_LOAD( "31j1.ic2", 0x00000, 0x40000, CRC(82ed7155) SHA1(b338e1150ffe3277c11d4d6e801a7d3bd7c58492) ) /* 2,3 */
ROM_END
-ROM_START( wwfwfestb )
+ROM_START( wwfwfestu1 )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* Main CPU (68000) */
+ ROM_LOAD16_BYTE( "31a13-0.ic19", 0x00001, 0x40000, CRC(a01c7c95) SHA1(298b9eeaeb8a207cbb02f4bea87436f0421697fe) ) /* label had a blue stripe down the side */
+ ROM_LOAD16_BYTE( "31a14-0.ic18", 0x00000, 0x40000, CRC(30824d0b) SHA1(54281c76f380225516877648645a619d8417816e) ) /* label had a blue stripe down the side */
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU (Z80) */
+ ROM_LOAD( "31a11-0.ic42", 0x00000, 0x10000, CRC(5ddebfea) SHA1(30073963e965250d94f0dc3bd261a054850adf95) ) /* labeled as 31A11-0 but same data 31A11-2 */
+
+ ROM_REGION( 0x80000, "oki", 0 ) /* ADPCM samples */
+ ROM_LOAD( "31j10.ic73", 0x00000, 0x80000, CRC(6c522edb) SHA1(8005d59c94160638ba2ea7caf4e991fff03003d5) )
+
+ ROM_REGION( 0x20000, "gfx1", 0 ) /* FG0 Tiles (8x8) */
+ ROM_LOAD( "31a12-0.ic33", 0x00000, 0x20000, CRC(d0803e20) SHA1(b68758e9a5522396f831a3972571f8aed54c64de) )
+
+ ROM_REGION( 0x800000, "gfx2", 0 ) /* SPR Tiles (16x16), 27080 Mask ROM's */
+ ROM_LOAD( "31j3.ic9", 0x000000, 0x100000, CRC(e395cf1d) SHA1(241f98145e295993c9b6a44dc087a9b61fbc9a6f) ) /* Tiles 0 */
+ ROM_LOAD( "31j2.ic8", 0x100000, 0x100000, CRC(b5a97465) SHA1(08d82c29a5c02b83fdbd0bad649b74eb35ab7e54) ) /* Tiles 1 */
+ ROM_LOAD( "31j5.ic11", 0x200000, 0x100000, CRC(2ce545e8) SHA1(82173e58a8476a6fe9d2c990fce1f71af117a0ea) ) /* Tiles 0 */
+ ROM_LOAD( "31j4.ic10", 0x300000, 0x100000, CRC(00edb66a) SHA1(926606d1923936b6e75391b1ab03b369d9822d13) ) /* Tiles 1 */
+ ROM_LOAD( "31j6.ic12", 0x400000, 0x100000, CRC(79956cf8) SHA1(52207263620a6b6dde66d3f8749b772577899ea5) ) /* Tiles 0 */
+ ROM_LOAD( "31j7.ic13", 0x500000, 0x100000, CRC(74d774c3) SHA1(a723ac5d481bf91b12e17652fbb2d869c886dec0) ) /* Tiles 1 */
+ ROM_LOAD( "31j9.ic15", 0x600000, 0x100000, CRC(dd387289) SHA1(2cad42d4e7cd1a49346f844058ae18c38bc686a8) ) /* Tiles 0 */
+ ROM_LOAD( "31j8.ic14", 0x700000, 0x100000, CRC(44abe127) SHA1(c723e1dea117534e976d2d383e634faf073cd57b) ) /* Tiles 1 */
+
+ ROM_REGION( 0x80000, "gfx3", 0 ) /* BG0 / BG1 Tiles (16x16) */
+ ROM_LOAD( "31j0.ic1", 0x40000, 0x40000, CRC(8a12b450) SHA1(2e15c949efcda8bb6f11afe3ff07ba1dee9c771c) ) /* 0,1 */
+ ROM_LOAD( "31j1.ic2", 0x00000, 0x40000, CRC(82ed7155) SHA1(b338e1150ffe3277c11d4d6e801a7d3bd7c58492) ) /* 2,3 */
+ROM_END
+
+ROM_START( wwfwfestub )
ROM_REGION( 0x80000, "maincpu", 0 ) /* Main CPU (68000) */
ROM_LOAD16_BYTE( "3", 0x00000, 0x40000, CRC(ea73369c) SHA1(be614a342f9014251810fa30ec56fec03f7c8ef3) )
ROM_LOAD16_BYTE( "2", 0x00001, 0x40000, CRC(632bb3a4) SHA1(9c04fed5aeefc683810cfbd9b3318e155ed9813f) )
@@ -1486,15 +1515,16 @@ GAME( 1990, ddragon3j, ddragon3, ddragon3, ddragon3, ddragon3_state, empty_ini
GAME( 1990, ddragon3p, ddragon3, ddragon3, ddragon3, ddragon3_state, empty_init, ROT0, "Technos Japan", "Double Dragon 3 - The Rosetta Stone (prototype)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, ddragon3b, ddragon3, ddragon3b, ddragon3b, ddragon3_state, empty_init, ROT0, "bootleg", "Double Dragon 3 - The Rosetta Stone (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ctribe, 0, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ctribe1, ctribe, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (US set 1?)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ctribeo, ctribe, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (US, older)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ctribej, ctribe, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ctribeb, ctribe, ctribe, ctribeb, ddragon3_state, empty_init, ROT0, "bootleg", "The Combatribes (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ctribeb2, ctribe, ctribe, ctribeb, ddragon3_state, empty_init, ROT0, "bootleg", "The Combatribes (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-
-GAME( 1991, wwfwfest, 0, wwfwfest, wwfwfest, wwfwfest_state, empty_init, ROT0, "Technos Japan (Tecmo license)", "WWF WrestleFest (World)", MACHINE_SUPPORTS_SAVE ) // Euro label but shows FBI "Winners Don't Do drugs" logo
-GAME( 1991, wwfwfestu, wwfwfest, wwfwfest, wwfwfest, wwfwfest_state, empty_init, ROT0, "Technos Japan", "WWF WrestleFest (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, wwfwfestb, wwfwfest, wwfwfstb, wwfwfest, wwfwfest_state, empty_init, ROT0, "bootleg", "WWF WrestleFest (US bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, wwfwfestj, wwfwfest, wwfwfest, wwfwfesta, wwfwfest_state, empty_init, ROT0, "Technos Japan (Tecmo license)", "WWF WrestleFest (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, wwfwfestk, wwfwfest, wwfwfest, wwfwfesta, wwfwfest_state, empty_init, ROT0, "Technos Japan (Tecmo license)", "WWF WrestleFest (Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ctribe, 0, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (US, rev 2, set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ctribeua, ctribe, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (US, rev 2, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ctribeu1, ctribe, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (US, rev 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ctribej, ctribe, ctribe, ctribe, ddragon3_state, empty_init, ROT0, "Technos Japan", "The Combatribes (Japan, rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ctribeb, ctribe, ctribe, ctribeb, ddragon3_state, empty_init, ROT0, "bootleg", "The Combatribes (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ctribeb2, ctribe, ctribe, ctribeb, ddragon3_state, empty_init, ROT0, "bootleg", "The Combatribes (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+
+GAME( 1991, wwfwfest, 0, wwfwfest, wwfwfest, wwfwfest_state, empty_init, ROT0, "Technos Japan (Tecmo license)", "WWF WrestleFest (World)", MACHINE_SUPPORTS_SAVE ) // Euro label but shows FBI "Winners Don't Do drugs" logo
+GAME( 1991, wwfwfestu, wwfwfest, wwfwfest, wwfwfest, wwfwfest_state, empty_init, ROT0, "Technos Japan", "WWF WrestleFest (US, rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, wwfwfestu1, wwfwfest, wwfwfest, wwfwfest, wwfwfest_state, empty_init, ROT0, "Technos Japan", "WWF WrestleFest (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, wwfwfestub, wwfwfest, wwfwfstb, wwfwfest, wwfwfest_state, empty_init, ROT0, "bootleg", "WWF WrestleFest (US bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, wwfwfestj, wwfwfest, wwfwfest, wwfwfesta, wwfwfest_state, empty_init, ROT0, "Technos Japan (Tecmo license)", "WWF WrestleFest (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, wwfwfestk, wwfwfest, wwfwfest, wwfwfesta, wwfwfest_state, empty_init, ROT0, "Technos Japan (Tecmo license)", "WWF WrestleFest (Korea)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/deshoros.cpp b/src/mame/drivers/deshoros.cpp
index cbec35e6ab8..99e797a710a 100644
--- a/src/mame/drivers/deshoros.cpp
+++ b/src/mame/drivers/deshoros.cpp
@@ -33,7 +33,6 @@ TODO:
#include "cpu/m6809/m6809.h"
#include "sound/beep.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -280,7 +279,6 @@ MACHINE_CONFIG_START(destiny_state::destiny)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(6*16, 9*2)
MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_UPDATE_DRIVER(destiny_state, screen_update_destiny)
MCFG_SCREEN_PALETTE("palette")
diff --git a/src/mame/drivers/dooyong.cpp b/src/mame/drivers/dooyong.cpp
index 148e828b8c5..fa73754a06d 100644
--- a/src/mame/drivers/dooyong.cpp
+++ b/src/mame/drivers/dooyong.cpp
@@ -691,7 +691,7 @@ void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap
int const color = buffered_spriteram[offs+7] & 0x000f;
//TODO: This priority mechanism works for known games, but seems a bit strange.
//Are we missing something? (The obvious spare palette bit isn't it.)
- int const pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
+ int const pri = GFX_PMASK_4 | (((color == 0x00) || (color == 0x0f)) ? GFX_PMASK_2 : 0);
int const width = buffered_spriteram[offs+1] & 0x000f;
int const height = (buffered_spriteram[offs+1] & 0x00f0) >> 4;
@@ -753,12 +753,12 @@ uint32_t popbingo_state::screen_update_popbingo(screen_device &screen, bitmap_in
m_bg_bitmap[1].fill(m_palette->black_pen(), cliprect);
m_bg[1]->draw(screen, m_bg_bitmap[1], cliprect, 0, 1);
- for (int y = cliprect.min_y; cliprect.max_y >= y; y++)
+ for (int y = cliprect.top(); cliprect.bottom() >= y; y++)
{
uint16_t const *const bg_src(&m_bg_bitmap[0].pix16(y, 0));
uint16_t const *const bg2_src(&m_bg_bitmap[1].pix16(y, 0));
uint16_t *const dst(&bitmap.pix16(y, 0));
- for (int x = cliprect.min_x; cliprect.max_x >= x; x++)
+ for (int x = cliprect.left(); cliprect.right() >= x; x++)
dst[x] = 0x100U | (bg_src[x] << 4) | bg2_src[x];
}
diff --git a/src/mame/drivers/dynax.cpp b/src/mame/drivers/dynax.cpp
index 3f3f114be4e..7e28094ec1f 100644
--- a/src/mame/drivers/dynax.cpp
+++ b/src/mame/drivers/dynax.cpp
@@ -7371,7 +7371,7 @@ GAME( 1994, maya, 0, sprtmtch, drgpunch, dynax_state, init_maya,
GAME( 1994, mayaa, maya, sprtmtch, drgpunch, dynax_state, init_maya, ROT0, "Promat", "Maya (set 2)", MACHINE_SUPPORTS_SAVE ) // this set has backgrounds blacked out in attract
GAME( 1994, mayab, maya, sprtmtch, drgpunch, dynax_state, init_maya, ROT0, "Promat", "Maya (set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, mayac, maya, sprtmtch, drgpunch, dynax_state, init_mayac, ROT0, "Promat", "Maya (set 4, clean)", MACHINE_SUPPORTS_SAVE )
-GAME( 199?, inca, 0, sprtmtch, drgpunch, dynax_state, init_maya, ROT0, "<unknown>", "Inca", MACHINE_SUPPORTS_SAVE )
+GAME( 199?, inca, 0, sprtmtch, drgpunch, dynax_state, init_maya, ROT0, "<unknown>", "Inca", MACHINE_SUPPORTS_SAVE ) // PCB by "Barko", game too?
GAME( 199?, blktouch, 0, sprtmtch, drgpunch, dynax_state, init_blktouch, ROT0, "Yang Gi Co Ltd.", "Black Touch (Korea)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, mjfriday, 0, mjfriday, mjfriday, dynax_state, empty_init, ROT180, "Dynax", "Mahjong Friday (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/fb01.cpp b/src/mame/drivers/fb01.cpp
index 05e77a07e9e..0aa2b148e9a 100644
--- a/src/mame/drivers/fb01.cpp
+++ b/src/mame/drivers/fb01.cpp
@@ -17,7 +17,6 @@
#include "video/hd44780.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -195,7 +194,6 @@ MACHINE_CONFIG_START(fb01_state::fb01)
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd); // why set layout only to replace?
config.set_default_layout(layout_fb01);
MCFG_PALETTE_ADD("palette", 2)
diff --git a/src/mame/drivers/firefox.cpp b/src/mame/drivers/firefox.cpp
index 994b6f47edb..bbd1994f3f9 100644
--- a/src/mame/drivers/firefox.cpp
+++ b/src/mame/drivers/firefox.cpp
@@ -251,14 +251,14 @@ void firefox_state::video_start()
{
m_bgtiles = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(firefox_state::bgtile_get_info),this), TILEMAP_SCAN_ROWS, 8,8, 64,64);
m_bgtiles->set_transparent_pen(0);
- m_bgtiles->set_scrolldy(m_screen->visible_area().min_y, 0);
+ m_bgtiles->set_scrolldy(m_screen->visible_area().top(), 0);
}
uint32_t firefox_state::screen_update_firefox(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int sprite;
- int gfxtop = screen.visible_area().min_y;
+ int gfxtop = screen.visible_area().top();
bitmap.fill(m_palette->pen_color(256), cliprect);
diff --git a/src/mame/drivers/fontwriter.cpp b/src/mame/drivers/fontwriter.cpp
index ff07676d05a..eadbd74d06a 100644
--- a/src/mame/drivers/fontwriter.cpp
+++ b/src/mame/drivers/fontwriter.cpp
@@ -10,6 +10,7 @@
FDC: NEC 72068 (entire PC controller on a chip)
512k RAM
Custom gate array
+ AT28C16 parallel EPROM
640x400 dot-matrix LCD
Things to check
@@ -22,6 +23,7 @@
#include "emu.h"
#include "cpu/m37710/m37710.h"
#include "machine/nvram.h"
+#include "machine/at28c16.h"
#include "screen.h"
#include "speaker.h"
@@ -34,6 +36,7 @@ public:
{ }
void fontwriter(machine_config &config);
+ void fw600(machine_config &config);
private:
virtual void machine_reset() override;
@@ -46,15 +49,21 @@ private:
m_vbl ^= 0xff;
return m_vbl;
}
+ DECLARE_READ8_MEMBER(vbl2_r)
+ {
+ m_vbl2 ^= 0x88;
+ return m_vbl;
+ }
void io_map(address_map &map);
void main_map(address_map &map);
+ void fw600_map(address_map &map);
// devices
required_device<m37720s1_device> m_maincpu;
// driver_device overrides
virtual void video_start() override;
- uint8_t m_vbl;
+ uint8_t m_vbl, m_vbl2;
};
void fontwriter_state::machine_reset()
@@ -80,13 +89,24 @@ void fontwriter_state::main_map(address_map &map)
map(0x002000, 0x007fff).ram();
map(0x008000, 0x00ffff).rom().region("maincpu", 0x0000);
map(0x020000, 0x04ffff).ram();
- map(0x100000, 0x1007ff).ram();
+ map(0x100000, 0x1007ff).rw("at28c16", FUNC(at28c16_device::read), FUNC(at28c16_device::write));
map(0x200000, 0x3fffff).rom().region("maincpu", 0x0000);
}
void fontwriter_state::io_map(address_map &map)
{
map(M37710_PORT6, M37710_PORT6).r(FUNC(fontwriter_state::vbl_r));
+ map(M37710_PORT7, M37710_PORT7).r(FUNC(fontwriter_state::vbl2_r));
+}
+
+void fontwriter_state::fw600_map(address_map &map)
+{
+ map(0x000280, 0x0002ff).ram();
+ map(0x000800, 0x000fff).rw("at28c16", FUNC(at28c16_device::read), FUNC(at28c16_device::write));
+ map(0x002000, 0x007fff).ram();
+ map(0x008000, 0x00ffff).rom().region("maincpu", 0x1f8000);
+ map(0x020000, 0x04ffff).ram();
+ map(0x200000, 0x3fffff).rom().region("maincpu", 0x0000);
}
static INPUT_PORTS_START( fontwriter )
@@ -105,9 +125,36 @@ MACHINE_CONFIG_START(fontwriter_state::fontwriter)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399)
MACHINE_CONFIG_END
+MACHINE_CONFIG_START(fontwriter_state::fw600)
+ MCFG_DEVICE_ADD("maincpu", M37720S1, XTAL(16'000'000)) /* M37720S1 @ 16MHz - main CPU */
+ MCFG_DEVICE_PROGRAM_MAP(fw600_map)
+ MCFG_DEVICE_IO_MAP(io_map)
+
+ MCFG_DEVICE_ADD("at28c16", AT28C16, 0)
+
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
+ MCFG_SCREEN_UPDATE_DRIVER(fontwriter_state, screen_update)
+ MCFG_SCREEN_SIZE(640, 400)
+ MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399)
+MACHINE_CONFIG_END
+
+ROM_START(fw600)
+ ROM_REGION(0x200000, "maincpu", 0) /* M37720 program ROM */
+ ROM_LOAD( "lh5388n5.bin", 0x000000, 0x100000, CRC(3bcc5c19) SHA1(510e3795faf18e10f2fef69110f96183e7cfee35) )
+ ROM_LOAD( "lh5388n9.bin", 0x100000, 0x100000, CRC(be2198df) SHA1(9e42f3a933c6f247c452910af3a2e9196291574a) )
+
+ ROM_REGION(0x800, "at28c16", 0) /* AT28C16 parallel EPROM */
+ ROM_LOAD( "at28c16.bin", 0x000000, 0x000800, CRC(a84eafd9) SHA1(12503a71e98f80819959d41643b1d2773739b923) )
+ROM_END
+
ROM_START(fw700ger)
ROM_REGION(0x200000, "maincpu", 0) /* M37720 program ROM */
ROM_LOAD( "lh5370pd.ic7", 0x000000, 0x200000, CRC(29083e13) SHA1(7e1605f91b53580e75f638f9e6b0917305c35f84) )
+
+ ROM_REGION(0x800, "at28c16", ROMREGION_ERASE00) /* AT28C16 parallel EPROM */
ROM_END
+SYST( 1994, fw600, 0, 0, fw600, fontwriter, fontwriter_state, empty_init, "Sharp", "FontWriter FW-600", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
SYST( 1994, fw700ger, 0, 0, fontwriter, fontwriter, fontwriter_state, empty_init, "Sharp", "FontWriter FW-700 (German)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/fp200.cpp b/src/mame/drivers/fp200.cpp
index 478ac7c536a..61753f3f7ad 100644
--- a/src/mame/drivers/fp200.cpp
+++ b/src/mame/drivers/fp200.cpp
@@ -98,7 +98,7 @@ uint32_t fp200_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap
l_offs = 0;
r_offs = 0;
- for(int y=cliprect.min_y;y<cliprect.max_y;y++)
+ for(int y=cliprect.top(); y<cliprect.bottom(); y++) // FIXME: off-by-one?
{
for(int x=0;x<80;x++)
{
@@ -110,7 +110,7 @@ uint32_t fp200_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap
}
}
- for(int y=cliprect.min_y;y<cliprect.max_y;y++)
+ for(int y=cliprect.top(); y<cliprect.bottom(); y++) // FIXME: off-by-one?
{
for(int x=80;x<160;x++)
{
@@ -122,7 +122,7 @@ uint32_t fp200_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap
}
}
- for(int y=cliprect.min_y;y<cliprect.max_y;y++)
+ for(int y=cliprect.top(); y<cliprect.bottom(); y++) // FIXME: off-by-one?
{
for(int x=0;x<80;x++)
{
@@ -153,7 +153,7 @@ uint32_t fp200_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap
}
}
- for(int y=cliprect.min_y;y<cliprect.max_y;y++)
+ for(int y=cliprect.top(); y<cliprect.bottom(); y++) // FIXME: off-by-one?
{
for(int x=80;x<160;x++)
{
diff --git a/src/mame/drivers/funworld.cpp b/src/mame/drivers/funworld.cpp
index efb12ddad11..1d7a3540415 100644
--- a/src/mame/drivers/funworld.cpp
+++ b/src/mame/drivers/funworld.cpp
@@ -48,7 +48,7 @@
* Pool 10 (Italian, set 6), C.M.C., 1996.
* Pool 10 (Italian, set 7), C.M.C., 1997.
* Pool 10 (Italian, set 8), C.M.C., 1997.
- * Pool 10 (Italian, set 9), C.M.C., 1997.
+ * Pool 10 (Italian, set 9), bootleg (R.B.), 1996.
* Pool 10 (Italian, Dino 4 hardware, encrypted), C.M.C., 1997.
* Royal (Pool 10 hack), unknown, 2001.
* Tortuga Family (Italian), C.M.C., 1997.
diff --git a/src/mame/drivers/gamepock.cpp b/src/mame/drivers/gamepock.cpp
index 5c8e8c5fbe5..33c4a697374 100644
--- a/src/mame/drivers/gamepock.cpp
+++ b/src/mame/drivers/gamepock.cpp
@@ -9,7 +9,6 @@
#include "cpu/upd7810/upd7810.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -59,8 +58,6 @@ MACHINE_CONFIG_START(gamepock_state::gamepock)
screen.set_screen_update(FUNC(gamepock_state::screen_update_gamepock));
screen.set_palette("palette");
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
diff --git a/src/mame/drivers/gb.cpp b/src/mame/drivers/gb.cpp
index eaa2562c7af..49f1a2b4e2a 100644
--- a/src/mame/drivers/gb.cpp
+++ b/src/mame/drivers/gb.cpp
@@ -274,7 +274,6 @@ space. This mapper uses 32KB sized banks.
***************************************************************************/
#include "emu.h"
-#include "rendlay.h"
#include "includes/gb.h"
#include "bus/gameboy/rom.h"
#include "bus/gameboy/mbc.h"
@@ -617,16 +616,14 @@ MACHINE_CONFIG_START(gb_state::gameboy)
MCFG_LR35902_HALT_BUG
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(DMG_FRAMES_PER_SECOND)
- MCFG_SCREEN_VBLANK_TIME(0)
- MCFG_SCREEN_UPDATE_DEVICE("ppu", dmg_ppu_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- config.set_default_layout(layout_lcd);
-// MCFG_SCREEN_SIZE(20*8, 18*8)
- MCFG_SCREEN_SIZE( 458, 154 )
- MCFG_SCREEN_VISIBLE_AREA(0*8, 20*8-1, 0*8, 18*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(DMG_FRAMES_PER_SECOND);
+ screen.set_vblank_time(0);
+ screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
+ screen.set_palette("palette");
+// screen.set_size(20*8, 18*8);
+ screen.set_size(458, 154);
+ screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
MCFG_PALETTE_ADD("palette", 4)
@@ -660,15 +657,14 @@ MACHINE_CONFIG_START(gb_state::supergb)
MCFG_MACHINE_RESET_OVERRIDE(gb_state, sgb)
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(SGB_FRAMES_PER_SECOND)
- MCFG_SCREEN_VBLANK_TIME(0)
- MCFG_SCREEN_UPDATE_DEVICE("ppu", dmg_ppu_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- config.set_default_layout(layout_horizont); /* runs on a TV, not an LCD */
- MCFG_SCREEN_SIZE(32*8, 28*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_physical_aspect(4, 3); // runs on a TV, not an LCD
+ screen.set_refresh_hz(SGB_FRAMES_PER_SECOND);
+ screen.set_vblank_time(0);
+ screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
+ screen.set_palette("palette");
+ screen.set_size(32*8, 28*8);
+ screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
MCFG_PALETTE_ADD("palette", 32768)
@@ -701,11 +697,10 @@ MACHINE_CONFIG_START(gb_state::supergb2)
MCFG_MACHINE_RESET_OVERRIDE(gb_state, sgb)
/* video hardware */
- config.set_default_layout(layout_horizont); /* runs on a TV, not an LCD */
-
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(32*8, 28*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
+ screen_device &screen(*subdevice<screen_device>("screen"));
+ screen.set_physical_aspect(4, 3); // runs on a TV, not an LCD
+ screen.set_size(32*8, 28*8);
+ screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
MCFG_PALETTE_MODIFY("palette")
MCFG_PALETTE_ENTRIES(32768)
@@ -738,16 +733,14 @@ MACHINE_CONFIG_START(gb_state::gbcolor)
MCFG_MACHINE_RESET_OVERRIDE(gb_state,gbc)
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(DMG_FRAMES_PER_SECOND)
- MCFG_SCREEN_VBLANK_TIME(0)
- MCFG_SCREEN_UPDATE_DEVICE("ppu", dmg_ppu_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- config.set_default_layout(layout_lcd);
-// MCFG_SCREEN_SIZE(20*8, 18*8)
- MCFG_SCREEN_SIZE( 458, 154 )
- MCFG_SCREEN_VISIBLE_AREA(0*8, 20*8-1, 0*8, 18*8-1)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(DMG_FRAMES_PER_SECOND);
+ screen.set_vblank_time(0);
+ screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
+ screen.set_palette("palette");
+// screen.set_size(20*8, 18*8);
+ screen.set_size(458, 154);
+ screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
@@ -783,19 +776,17 @@ MACHINE_CONFIG_START(megaduck_state::megaduck)
MCFG_LR35902_HALT_BUG
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(DMG_FRAMES_PER_SECOND)
- MCFG_SCREEN_VBLANK_TIME(0)
- MCFG_SCREEN_PALETTE("palette")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(DMG_FRAMES_PER_SECOND);
+ screen.set_vblank_time(0);
+ screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
+ screen.set_palette("palette");
+ screen.set_size(20*8, 18*8);
+ screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1);
MCFG_MACHINE_START_OVERRIDE(megaduck_state, megaduck)
MCFG_MACHINE_RESET_OVERRIDE(megaduck_state, megaduck)
- MCFG_SCREEN_UPDATE_DEVICE("ppu", dmg_ppu_device, screen_update)
- MCFG_SCREEN_SIZE(20*8, 18*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 20*8-1, 0*8, 18*8-1)
-
- config.set_default_layout(layout_lcd);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
MCFG_PALETTE_ADD("palette", 4)
diff --git a/src/mame/drivers/gizmondo.cpp b/src/mame/drivers/gizmondo.cpp
index c1fa29da123..b2a215604f7 100644
--- a/src/mame/drivers/gizmondo.cpp
+++ b/src/mame/drivers/gizmondo.cpp
@@ -34,7 +34,6 @@ SYSINTR_GPS = INT_EINT3, INT_EINT8_23 (EINT18)
#include "machine/docg3.h"
#include "machine/s3c2440.h"
#include "video/gf4500.h"
-#include "rendlay.h"
#include "screen.h"
@@ -203,8 +202,6 @@ MACHINE_CONFIG_START(gizmondo_state::gizmondo)
MCFG_SCREEN_VISIBLE_AREA(0, 320 - 1, 0, 240 - 1)
MCFG_SCREEN_UPDATE_DEVICE("gf4500", gf4500_device, screen_update)
- config.set_default_layout(layout_lcd);
-
MCFG_GF4500_ADD("gf4500")
MCFG_DEVICE_ADD("s3c2440", S3C2440, 12000000)
diff --git a/src/mame/drivers/gmaster.cpp b/src/mame/drivers/gmaster.cpp
index 1863f322822..483beef069f 100644
--- a/src/mame/drivers/gmaster.cpp
+++ b/src/mame/drivers/gmaster.cpp
@@ -13,7 +13,6 @@
#include "bus/generic/carts.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -357,7 +356,6 @@ MACHINE_CONFIG_START(gmaster_state::gmaster)
MCFG_PALETTE_ADD("palette", ARRAY_LENGTH(gmaster_palette))
MCFG_PALETTE_INIT_OWNER(gmaster_state, gmaster)
- config.set_default_layout(layout_lcd);
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(0, "mono", 0.50);
diff --git a/src/mame/drivers/goupil.cpp b/src/mame/drivers/goupil.cpp
index 6e754618e6c..58f1fcf2f50 100644
--- a/src/mame/drivers/goupil.cpp
+++ b/src/mame/drivers/goupil.cpp
@@ -496,7 +496,7 @@ MC6845_UPDATE_ROW(goupil_g2_state::crtc_update_row)
{
uint16_t const offset = ( 0x400 + ( ma + x ) ) & 0x7FF;
uint8_t const chr = m_visu24x80_ram->pointer()[offset];
- uint8_t const gfx = m_visu24x80_rom[ ( ( chr & 0x7F ) << 4 ) + ra ];
+ uint8_t const gfx = m_visu24x80_rom[ ( ( chr & 0x7F ) << 4 ) + ra ] ^ ((x == cursor_x) ? 0xff : 0);
for (unsigned bit = 0; 8 > bit; ++bit)
{
@@ -647,23 +647,18 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( goupilg1 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_DEFAULT_BIOS("v1_0")
-
- ROM_SYSTEM_BIOS(0, "v1_0", "Version 1.0")
- ROMX_LOAD( "smt_goupil_g1_mon_1.bin", 0xF800, 0x0400, CRC(98b7be69) SHA1(69e83fe78a43fcf2b08fb0bcefb0d217a57b1ecb), ROM_BIOS(0) )
- ROM_LOAD ( "smt_goupil_g1_mon_2.bin", 0xFC00, 0x0400, CRC(19386b81) SHA1(e52f63fd29d374319781e9677de6d3fd61a3684c) )
-
- ROM_LOAD ( "smt_goupil_g1_mod_3.bin", 0xF400, 0x0400, CRC(e662f152) SHA1(11b91c5737e7572a2c18472b66bbd16b485132d5) )
-
- ROMX_LOAD( "smt_goupil_g1_basic_1.bin", 0xC000, 0x0400, CRC(ad105b12) SHA1(631cd4b997f76b57bf2509e4bff30b1595c8bd13), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_2.bin", 0xC400, 0x0400, CRC(0c5c309c) SHA1(f1cab4b0f9191e53113790a95f1ab7108f9406a1), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_3.bin", 0xC800, 0x0400, CRC(1f1eb127) SHA1(dbbb880c79d515acbfcb2be9a4c96962f3e4edea), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_4.bin", 0xCC00, 0x0400, CRC(09be48e4) SHA1(86cae0d159583c1d572a5754f3bb6b4a2e479359), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_5.bin", 0xD000, 0x0400, CRC(bdeb395c) SHA1(32a50468f1ca772ee45a1f5c61c66f3ecc774074), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_6.bin", 0xD400, 0x0400, CRC(850a4000) SHA1(720f0bb3e45877835219b7e1d943ef4f19b9977d), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_7.bin", 0xD800, 0x0400, CRC(586c7670) SHA1(13e2e96b9f1a53555ce0d55f657cf3c6b96f10a0), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_8.bin", 0xDC00, 0x0400, CRC(33281300) SHA1(ce631fa8157a3f8869c5fefe24b7f40e06696df9), ROM_BIOS(0) )
- ROMX_LOAD( "smt_goupil_g1_basic_9.bin", 0xE000, 0x0400, CRC(a3911201) SHA1(8623a0a2d83eb3a27a795030643c5c05a4350a9f), ROM_BIOS(0) )
+ ROM_LOAD( "smt_goupil_g1_basic_1.bin", 0xC000, 0x0400, CRC(ad105b12) SHA1(631cd4b997f76b57bf2509e4bff30b1595c8bd13) )
+ ROM_LOAD( "smt_goupil_g1_basic_2.bin", 0xC400, 0x0400, CRC(0c5c309c) SHA1(f1cab4b0f9191e53113790a95f1ab7108f9406a1) )
+ ROM_LOAD( "smt_goupil_g1_basic_3.bin", 0xC800, 0x0400, CRC(1f1eb127) SHA1(dbbb880c79d515acbfcb2be9a4c96962f3e4edea) )
+ ROM_LOAD( "smt_goupil_g1_basic_4.bin", 0xCC00, 0x0400, CRC(09be48e4) SHA1(86cae0d159583c1d572a5754f3bb6b4a2e479359) )
+ ROM_LOAD( "smt_goupil_g1_basic_5.bin", 0xD000, 0x0400, CRC(bdeb395c) SHA1(32a50468f1ca772ee45a1f5c61c66f3ecc774074) )
+ ROM_LOAD( "smt_goupil_g1_basic_6.bin", 0xD400, 0x0400, CRC(850a4000) SHA1(720f0bb3e45877835219b7e1d943ef4f19b9977d) )
+ ROM_LOAD( "smt_goupil_g1_basic_7.bin", 0xD800, 0x0400, CRC(586c7670) SHA1(13e2e96b9f1a53555ce0d55f657cf3c6b96f10a0) )
+ ROM_LOAD( "smt_goupil_g1_basic_8.bin", 0xDC00, 0x0400, CRC(33281300) SHA1(ce631fa8157a3f8869c5fefe24b7f40e06696df9) )
+ ROM_LOAD( "smt_goupil_g1_basic_9.bin", 0xE000, 0x0400, CRC(a3911201) SHA1(8623a0a2d83eb3a27a795030643c5c05a4350a9f) )
+ ROM_LOAD( "smt_goupil_g1_mod_3.bin", 0xF400, 0x0400, CRC(e662f152) SHA1(11b91c5737e7572a2c18472b66bbd16b485132d5) )
+ ROM_LOAD( "smt_goupil_g1_mon_1.bin", 0xF800, 0x0400, CRC(98b7be69) SHA1(69e83fe78a43fcf2b08fb0bcefb0d217a57b1ecb) )
+ ROM_LOAD( "smt_goupil_g1_mon_2.bin", 0xFC00, 0x0400, CRC(19386b81) SHA1(e52f63fd29d374319781e9677de6d3fd61a3684c) )
ROM_REGION( 0x400, "ef9364", 0 )
ROM_LOAD( "smt_goupil_g1_charset.bin", 0x0000, 0x0400, CRC(8b6da54b) SHA1(ac2204600f45c6dd0df1e759b62ed25928f02a12) )
@@ -672,17 +667,13 @@ ROM_END
/* ROM definition */
ROM_START( goupilg2 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_DEFAULT_BIOS("v1_4")
-
- ROM_SYSTEM_BIOS(0, "v1_4", "Version 1.4")
- ROMX_LOAD( "smt_goupil_g2_mon_1.bin", 0xF000, 0x0800, CRC(91a4f256) SHA1(ece3b47a17e47fc87e2262be806ce8015f5f5db6), ROM_BIOS(0) )
- ROM_LOAD ( "smt_goupil_g2_mon_2.bin", 0xF800, 0x0800, CRC(f7783a32) SHA1(7368fc0bd86b48e6727367bd7d1922f219741015) )
-
- ROM_LOAD ( "smt_goupil_g2_mod_1.bin", 0xC000, 0x0400, CRC(4d585e40) SHA1(7558f89db52299c4c305755259d5c908b3f66ac7) )
- ROM_LOAD ( "smt_goupil_g2_mod_2.bin", 0xC400, 0x0400, CRC(c5531667) SHA1(24b0a1d3b812b95e68f4dc4323581b1fd14eb4fb) )
+ ROM_LOAD( "smt_goupil_g2_mod_1.bin", 0xC000, 0x0400, CRC(4d585e40) SHA1(7558f89db52299c4c305755259d5c908b3f66ac7) )
+ ROM_LOAD( "smt_goupil_g2_mod_2.bin", 0xC400, 0x0400, CRC(c5531667) SHA1(24b0a1d3b812b95e68f4dc4323581b1fd14eb4fb) )
+ ROM_LOAD( "smt_goupil_g2_mon_1.bin", 0xF000, 0x0800, CRC(91a4f256) SHA1(ece3b47a17e47fc87e2262be806ce8015f5f5db6) )
+ ROM_LOAD( "smt_goupil_g2_mon_2.bin", 0xF800, 0x0800, CRC(f7783a32) SHA1(7368fc0bd86b48e6727367bd7d1922f219741015) )
ROM_REGION( 0x400, "ef9364", 0 )
- ROM_LOAD ( "smt_goupil_g2_charset.bin", 0x0000, 0x0400, CRC(d3930877) SHA1(7b790fb18f8893cfc753bf622c8b795075741d22) )
+ ROM_LOAD( "smt_goupil_g2_charset.bin", 0x0000, 0x0400, CRC(d3930877) SHA1(7b790fb18f8893cfc753bf622c8b795075741d22) )
ROM_REGION( 0x800, "visu_24x80", 0 )
ROM_LOAD( "smt_goupil_g2_charset_24x80.bin", 0x0000, 0x0800, CRC(f0f83b99) SHA1(75a7730aec30280ee4ccf3dcaf587eea4f861196) )
diff --git a/src/mame/drivers/gp32.cpp b/src/mame/drivers/gp32.cpp
index 6235ce7eefd..00fcd718098 100644
--- a/src/mame/drivers/gp32.cpp
+++ b/src/mame/drivers/gp32.cpp
@@ -23,7 +23,6 @@
#include "cpu/arm7/arm7core.h"
#include "sound/volt_reg.h"
-#include "rendlay.h"
#include "softlist.h"
#include "speaker.h"
@@ -1687,9 +1686,6 @@ MACHINE_CONFIG_START(gp32_state::gp32)
MCFG_SCREEN_VISIBLE_AREA(0, 239, 0, 319)
MCFG_SCREEN_UPDATE_DRIVER(gp32_state, screen_update_gp32)
- /* 320x240 is 4:3 but ROT270 causes an aspect ratio of 3:4 by default */
- config.set_default_layout(layout_lcd_rot);
-
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ldac", DAC_16BIT_R2R_TWOS_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) // unknown DAC
diff --git a/src/mame/drivers/gridcomp.cpp b/src/mame/drivers/gridcomp.cpp
index eb6ce77c674..afe2ae7e3b5 100644
--- a/src/mame/drivers/gridcomp.cpp
+++ b/src/mame/drivers/gridcomp.cpp
@@ -77,7 +77,6 @@
#include "sound/spkrdev.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -384,11 +383,10 @@ MACHINE_CONFIG_START(gridcomp_state::grid1101)
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
- MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber())
+ MCFG_SCREEN_ADD_MONOCHROME("screen", LCD, rgb_t::amber()) // actually a kind of EL display
MCFG_SCREEN_UPDATE_DRIVER(gridcomp_state, screen_update_110x)
MCFG_SCREEN_RAW_PARAMS(XTAL(15'000'000)/2, 424, 0, 320, 262, 0, 240) // XXX 66 Hz refresh
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(I80130_TAG, i80130_device, ir3_w))
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_MONOCHROME("palette")
@@ -628,4 +626,3 @@ COMP( 1984, grid1121, 0, 0, grid1121, gridcomp, gridcomp_state, empt
COMP( 1984, grid1129, grid1121, 0, grid1129, gridcomp, gridcomp_state, empty_init, "GRiD Computers", "Compass II 1129", MACHINE_IS_SKELETON )
COMP( 1984, grid1131, grid1121, 0, grid1131, gridcomp, gridcomp_state, empty_init, "GRiD Computers", "Compass II 1131", MACHINE_IS_SKELETON )
COMP( 1984, grid1139, grid1121, 0, grid1139, gridcomp, gridcomp_state, empty_init, "GRiD Computers", "Compass II 1139", MACHINE_IS_SKELETON )
-
diff --git a/src/mame/drivers/halleys.cpp b/src/mame/drivers/halleys.cpp
index 00bff4219f0..094e8d42c74 100644
--- a/src/mame/drivers/halleys.cpp
+++ b/src/mame/drivers/halleys.cpp
@@ -231,6 +231,7 @@ public:
void init_halley87();
void init_benberob();
void init_halleys();
+ void init_halleysp();
private:
uint16_t *m_render_layer[MAX_LAYERS];
@@ -2012,7 +2013,7 @@ ROM_START( benberob )
ROM_END
-ROM_START( halleys )
+ROM_START( halleysc )
ROM_REGION( 0x10000, "maincpu", 0 ) //MAIN PRG
ROM_LOAD( "a62_01.30", 0x0000, 0x4000, CRC(a5e82b3e) SHA1(c16c6a6c23a579454b8a2be4b951c35b04f2a856) )
ROM_LOAD( "a62_02.31", 0x4000, 0x4000, CRC(25f5bcd3) SHA1(9d72afe866df363d2ac33dab3ed6c3913f4de12d) )
@@ -2040,7 +2041,7 @@ ROM_START( halleys )
ROM_END
-ROM_START( halleycj )
+ROM_START( halleyscj )
ROM_REGION( 0x10000, "maincpu", 0 ) //MAIN PRG
ROM_LOAD( "a62_01.30", 0x0000, 0x4000, CRC(a5e82b3e) SHA1(c16c6a6c23a579454b8a2be4b951c35b04f2a856) )
ROM_LOAD( "a62_02.31", 0x4000, 0x4000, CRC(25f5bcd3) SHA1(9d72afe866df363d2ac33dab3ed6c3913f4de12d) )
@@ -2068,7 +2069,7 @@ ROM_START( halleycj )
ROM_END
-ROM_START( halleysc )
+ROM_START( halleyscja )
ROM_REGION( 0x10000, "maincpu", 0 ) //MAIN PRG
ROM_LOAD( "a62_01.30", 0x0000, 0x4000, CRC(a5e82b3e) SHA1(c16c6a6c23a579454b8a2be4b951c35b04f2a856) )
ROM_LOAD( "a62_02.31", 0x4000, 0x4000, CRC(25f5bcd3) SHA1(9d72afe866df363d2ac33dab3ed6c3913f4de12d) )
@@ -2096,7 +2097,35 @@ ROM_START( halleysc )
ROM_END
-ROM_START( halley87 )
+ROM_START( halleyscjp ) /* earliest version, preproduction or possible prototype with all hand written labels */
+ ROM_REGION( 0x10000, "maincpu", 0 ) //MAIN PRG
+ ROM_LOAD( "p_0_19f8.30", 0x0000, 0x4000, CRC(10acefe8) SHA1(2f64e052999bc98219129206ec73b5d96d20ae60) ) /* hand written label P_0 19F8 */
+ ROM_LOAD( "p_1_87b4.31", 0x4000, 0x4000, CRC(1fe05cff) SHA1(d11c308aac6788233a48abe23b0278dc54254d13) ) /* hand written label P_1 87B4 */
+ ROM_LOAD( "p_2_aaaa.52", 0x8000, 0x4000, CRC(de4a14f0) SHA1(50b23289e00753b421a3373e0a9350124b75af9e) ) /* hand written label P_2 AAAA */
+ ROM_LOAD( "p_3_0341.50", 0xc000, 0x4000, CRC(b4b2b4f1) SHA1(5f01c013984958c689d09f1c85068379ffb3eb45) ) /* hand written label P_3 0341 */
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) //SOUND
+ ROM_LOAD( "s1_3d02.5", 0x0000, 0x2000, CRC(7ce290db) SHA1(e3c72ba5d97cb07f0f72d2765a068af6fb5cca29) ) /* hand written label S1 3D02 == a62_13.5 */
+ ROM_LOAD( "s2_213d.4", 0x2000, 0x2000, CRC(ea74b1a2) SHA1(7be3b9e9d51cfa753ce97e92f7eebd9723fe5821) ) /* hand written label S2 213D == a62_14.4 */
+
+ ROM_REGION( 0x20000, "gfx1", 0 ) //CHR
+ ROM_LOAD( "ic-78_3441.78", 0x00000, 0x4000, CRC(c5834a7a) SHA1(4a24b3fa707cde89ad5a52d4e994412fcf28e81f) ) /* hand written label IC-78 3441 == a62_12.78 */
+ ROM_LOAD( "ic-77_a097.77", 0x04000, 0x4000, CRC(3ae7231e) SHA1(277f12570001d82104c79d3d0a58a0b57ed18778) ) /* hand written label IC-77 A097 == a62_10.77 */
+ ROM_LOAD( "ic-80_7f98.80", 0x08000, 0x4000, CRC(b9210dbe) SHA1(f72f2307e9acd2dd622a3efce71bd334b68a9b60) ) /* hand written label IC-80 7F98 == a62_08.80 */
+ ROM_LOAD( "ic-79_9383.79", 0x0c000, 0x4000, CRC(600be9ca) SHA1(a705b10be37ee93908b1bbaf806cfe7955aa3ffc) ) /* hand written label IC-79 9383 == a62_06.79 */
+ ROM_LOAD( "ic-89_ef2b.89", 0x10000, 0x4000, CRC(d0e9974e) SHA1(6826cfb4fbf098ed7b9d8b00e2684d7c85a13c11) ) /* hand written label IC-89 EF2B == a62_11.89 */
+ ROM_LOAD( "ic-88_a03d.88", 0x14000, 0x4000, CRC(e93ef281) SHA1(8bfe1ecce1c7107a5bd1b43b531594c8cfc0719d) ) /* hand written label IC-88 A03D == a62_09.88 */
+ ROM_LOAD( "ic-91_8b4c.91", 0x18000, 0x4000, CRC(64c95e8b) SHA1(4c3320a764b13a5751c0019c9fafb899ea2f908f) ) /* hand written label IC-91 8B4C == a62_07.91 */
+ ROM_LOAD( "ic-90_057c.90", 0x1c000, 0x4000, CRC(c3c877ef) SHA1(23180b106e50b7a2a230c5e9948832e5631972ae) ) /* hand written label IC-90 057C == a62_05.90 */
+
+ ROM_REGION( 0x0060, "proms", 0 ) //COLOR (all identical!)
+ ROM_LOAD( "a26-13.109", 0x0000, 0x0020, CRC(ec449aee) SHA1(aa33e82b592276d5ffd540d9a73d1b48d7d4accf) )
+ ROM_LOAD( "a26-13.110", 0x0020, 0x0020, CRC(ec449aee) SHA1(aa33e82b592276d5ffd540d9a73d1b48d7d4accf) )
+ ROM_LOAD( "a26-13.111", 0x0040, 0x0020, CRC(ec449aee) SHA1(aa33e82b592276d5ffd540d9a73d1b48d7d4accf) )
+ROM_END
+
+
+ROM_START( halleysc87 )
ROM_REGION( 0x10000, "maincpu", 0 ) //MAIN PRG
ROM_LOAD( "a62-17.30", 0x0000, 0x4000, CRC(fa2a58a6) SHA1(42cb587aad166ff74ece987f275aa7ad16d58300) )
ROM_LOAD( "a62-18.31", 0x4000, 0x4000, CRC(f3a078e6) SHA1(f8fa548b5814276d1ae2d575b9a5d3f0cc2f54fa) )
@@ -2215,12 +2244,26 @@ void halleys_state::init_benberob()
void halleys_state::init_halleys()
{
+/*
+LDA $66 96 66
+BNE +0E 26 0E <-- Intercept here
+ANDCC #$EF 1C EF
+*/
+
m_game_id = GAME_HALLEYS;
m_collision_detection = 0xb114;
init_common();
}
+void halleys_state::init_halleysp()
+{
+ m_game_id = GAME_HALLEYS;
+ m_collision_detection = 0xb038;
+
+ init_common();
+}
+
void halleys_state::init_halley87()
{
m_game_id = GAME_HALLEYS;
@@ -2233,8 +2276,9 @@ void halleys_state::init_halley87()
//**************************************************************************
// Game Definitions
-GAME( 1984, benberob, 0, benberob, benberob, halleys_state, init_benberob, ROT0, "Taito", "Ben Bero Beh (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
-GAME( 1986, halleys, 0, halleys, halleys, halleys_state, init_halleys, ROT90, "Taito America Corporation (Coin-It license)", "Halley's Comet (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
-GAME( 1986, halleysc, halleys, halleys, halleys, halleys_state, init_halleys, ROT90, "Taito Corporation", "Halley's Comet (Japan, Newer)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
-GAME( 1986, halleycj, halleys, halleys, halleys, halleys_state, init_halleys, ROT90, "Taito Corporation", "Halley's Comet (Japan, Older)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
-GAME( 1986, halley87, halleys, halleys, halleys, halleys_state, init_halley87, ROT90, "Taito Corporation", "Halley's Comet '87", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
+GAME( 1984, benberob, 0, benberob, benberob, halleys_state, init_benberob, ROT0, "Taito", "Ben Bero Beh (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
+GAME( 1986, halleysc, 0, halleys, halleys, halleys_state, init_halleys, ROT90, "Taito America Corporation (Coin-It license)", "Halley's Comet (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
+GAME( 1986, halleyscj, halleysc, halleys, halleys, halleys_state, init_halleys, ROT90, "Taito Corporation", "Halley's Comet (Japan, rev 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
+GAME( 1986, halleyscja, halleysc, halleys, halleys, halleys_state, init_halleys, ROT90, "Taito Corporation", "Halley's Comet (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
+GAME( 1985, halleyscjp, halleysc, halleys, halleys, halleys_state, init_halleysp, ROT90, "Taito Corporation", "Halley's Comet (Japan, prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
+GAME( 1986, halleysc87, halleysc, halleys, halleys, halleys_state, init_halley87, ROT90, "Taito Corporation", "Halley's Comet '87", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL )
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index b2caa7e5aca..3baefb4f54f 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -95,7 +95,6 @@
#include "machine/gen_latch.h"
#include "machine/timer.h"
#include "sound/spkrdev.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -109,8 +108,8 @@
class hh_hmcs40_state : public driver_device
{
public:
- hh_hmcs40_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ hh_hmcs40_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_soundlatch(*this, "soundlatch"),
@@ -445,7 +444,6 @@ MACHINE_CONFIG_START(bambball_state::bambball)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 478)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 478-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -582,7 +580,6 @@ MACHINE_CONFIG_START(bmboxing_state::bmboxing)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 529)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 529-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -706,7 +703,6 @@ MACHINE_CONFIG_START(bfriskyt_state::bfriskyt)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 675)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 675-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -817,7 +813,6 @@ MACHINE_CONFIG_START(packmon_state::packmon)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 766)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 766-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -951,7 +946,6 @@ MACHINE_CONFIG_START(msthawk_state::msthawk)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 696)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 696-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1073,7 +1067,6 @@ MACHINE_CONFIG_START(bzaxxon_state::bzaxxon)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(613, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 613-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1191,7 +1184,6 @@ MACHINE_CONFIG_START(zackman_state::zackman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(487, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 487-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1319,7 +1311,6 @@ MACHINE_CONFIG_START(bpengo_state::bpengo)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 759)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 759-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1443,7 +1434,6 @@ MACHINE_CONFIG_START(bbtime_state::bbtime)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(379, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 379-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1542,7 +1532,6 @@ MACHINE_CONFIG_START(bdoramon_state::bdoramon)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 668)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 668-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1634,7 +1623,6 @@ MACHINE_CONFIG_START(bultrman_state::bultrman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 673)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 673-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1724,7 +1712,6 @@ MACHINE_CONFIG_START(machiman_state::machiman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1534, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1534-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1993,7 +1980,6 @@ MACHINE_CONFIG_START(alnattck_state::alnattck)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 700)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 700-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2123,7 +2109,6 @@ MACHINE_CONFIG_START(cdkong_state::cdkong)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(605, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 605-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2252,7 +2237,6 @@ MACHINE_CONFIG_START(cgalaxn_state::cgalaxn)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(526, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 526-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2374,7 +2358,6 @@ MACHINE_CONFIG_START(cpacman_state::cpacman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(484, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 484-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2491,7 +2474,6 @@ MACHINE_CONFIG_START(cmspacmn_state::cmspacmn)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(481, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 481-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2753,7 +2735,6 @@ MACHINE_CONFIG_START(egalaxn2_state::egalaxn2)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(505, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 505-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3014,7 +2995,6 @@ MACHINE_CONFIG_START(eturtles_state::eturtles)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(484, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 484-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3123,7 +3103,6 @@ MACHINE_CONFIG_START(estargte_state::estargte)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 854)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 854-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3239,7 +3218,6 @@ MACHINE_CONFIG_START(ghalien_state::ghalien)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 699)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 699-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3366,7 +3344,6 @@ MACHINE_CONFIG_START(gckong_state::gckong)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(506, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 506-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3487,7 +3464,6 @@ MACHINE_CONFIG_START(gdigdug_state::gdigdug)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(476, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 476-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3648,7 +3624,6 @@ MACHINE_CONFIG_START(mwcbaseb_state::mwcbaseb)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 478)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 478-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3738,7 +3713,6 @@ MACHINE_CONFIG_START(pbqbert_state::pbqbert)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(603, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 603-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3859,7 +3833,6 @@ MACHINE_CONFIG_START(kingman_state::kingman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(374, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 374-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -3980,7 +3953,6 @@ MACHINE_CONFIG_START(tmtron_state::tmtron)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 662)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 662-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -4075,7 +4047,6 @@ MACHINE_CONFIG_START(vinvader_state::vinvader)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(233, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 233-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
diff --git a/src/mame/drivers/hh_melps4.cpp b/src/mame/drivers/hh_melps4.cpp
index f600c87b2a8..888d403f791 100644
--- a/src/mame/drivers/hh_melps4.cpp
+++ b/src/mame/drivers/hh_melps4.cpp
@@ -13,7 +13,6 @@
#include "machine/timer.h"
#include "sound/spkrdev.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -23,8 +22,8 @@
class hh_melps4_state : public driver_device
{
public:
- hh_melps4_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ hh_melps4_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_inp_matrix(*this, "IN.%u", 0),
m_out_x(*this, "%u.%u", 0U, 0U),
@@ -311,7 +310,6 @@ MACHINE_CONFIG_START(cfrogger_state::cfrogger)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(500, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 500-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_melps4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -428,7 +426,6 @@ MACHINE_CONFIG_START(gjungler_state::gjungler)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(481, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 481-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_melps4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 04d5e0fc213..b224001112a 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -297,7 +297,6 @@ MACHINE_CONFIG_START(kdribble_state::kdribble)
MCFG_SCREEN_VISIBLE_AREA(0, 1524-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -370,7 +369,6 @@ MACHINE_CONFIG_START(ktopgun_state::ktopgun)
MCFG_SCREEN_VISIBLE_AREA(0, 1515-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -444,7 +442,6 @@ MACHINE_CONFIG_START(kcontra_state::kcontra)
MCFG_SCREEN_VISIBLE_AREA(0, 1505-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -517,7 +514,6 @@ MACHINE_CONFIG_START(ktmnt_state::ktmnt)
MCFG_SCREEN_VISIBLE_AREA(0, 1505-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -587,7 +583,6 @@ MACHINE_CONFIG_START(kgradius_state::kgradius)
MCFG_SCREEN_VISIBLE_AREA(0, 1420-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -655,7 +650,6 @@ MACHINE_CONFIG_START(kloneran_state::kloneran)
MCFG_SCREEN_VISIBLE_AREA(0, 1497-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -726,7 +720,6 @@ MACHINE_CONFIG_START(kblades_state::kblades)
MCFG_SCREEN_SIZE(1516, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1516-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -799,7 +792,6 @@ MACHINE_CONFIG_START(knfl_state::knfl)
MCFG_SCREEN_SIZE(1449, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1449-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -871,7 +863,6 @@ MACHINE_CONFIG_START(kbilly_state::kbilly)
MCFG_SCREEN_SIZE(1490, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1490-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -937,7 +928,6 @@ MACHINE_CONFIG_START(kbucky_state::kbucky)
MCFG_SCREEN_SIZE(1490, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1490-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1007,7 +997,6 @@ MACHINE_CONFIG_START(kgarfld_state::kgarfld)
MCFG_SCREEN_SIZE(1500, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1500-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1102,7 +1091,6 @@ MACHINE_CONFIG_START(gnw_mmouse_state::gnw_mmouse)
MCFG_SCREEN_VISIBLE_AREA(0, 1711-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1217,7 +1205,6 @@ MACHINE_CONFIG_START(gnw_mickdon_state::gnw_mickdon)
MCFG_SCREEN_VISIBLE_AREA(0, 1920/2-1, 0, 1236/2-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_gnw_dualv);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1301,7 +1288,6 @@ MACHINE_CONFIG_START(gnw_dkong2_state::gnw_dkong2)
MCFG_SCREEN_VISIBLE_AREA(0, 1920/2-1, 0, 1237/2-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_gnw_dualv);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1387,7 +1373,6 @@ MACHINE_CONFIG_START(gnw_mario_state::gnw_mario)
MCFG_SCREEN_VISIBLE_AREA(0, 2261/2-1, 0, 1440/2-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_gnw_dualh);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1474,7 +1459,6 @@ MACHINE_CONFIG_START(gnw_dkjr_state::gnw_dkjr)
MCFG_SCREEN_VISIBLE_AREA(0, 1647-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1556,7 +1540,6 @@ MACHINE_CONFIG_START(gnw_mariocm_state::gnw_mariocm)
MCFG_SCREEN_VISIBLE_AREA(0, 1647-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1639,7 +1622,6 @@ MACHINE_CONFIG_START(gnw_smb_state::gnw_smb)
MCFG_SCREEN_VISIBLE_AREA(0, 1677-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1742,7 +1724,6 @@ MACHINE_CONFIG_START(gnw_boxing_state::gnw_boxing)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 524-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1853,7 +1834,6 @@ MACHINE_CONFIG_START(tgaunt_state::tgaunt)
MCFG_SCREEN_VISIBLE_AREA(0, 1425-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1956,7 +1936,6 @@ MACHINE_CONFIG_START(tddragon_state::tddragon)
MCFG_SCREEN_VISIBLE_AREA(0, 1467-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2051,7 +2030,6 @@ MACHINE_CONFIG_START(tkarnov_state::tkarnov)
MCFG_SCREEN_VISIBLE_AREA(0, 1477-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2145,7 +2123,6 @@ MACHINE_CONFIG_START(tvindictr_state::tvindictr)
MCFG_SCREEN_VISIBLE_AREA(0, 1459-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2262,7 +2239,6 @@ MACHINE_CONFIG_START(tgaiden_state::tgaiden)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2352,7 +2328,6 @@ MACHINE_CONFIG_START(tbatman_state::tbatman)
MCFG_SCREEN_VISIBLE_AREA(0, 1442-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2446,7 +2421,6 @@ MACHINE_CONFIG_START(tsharr2_state::tsharr2)
MCFG_SCREEN_VISIBLE_AREA(0, 1493-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2537,7 +2511,6 @@ MACHINE_CONFIG_START(tstrider_state::tstrider)
MCFG_SCREEN_VISIBLE_AREA(0, 1479-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2632,7 +2605,6 @@ MACHINE_CONFIG_START(tgoldnaxe_state::tgoldnaxe)
MCFG_SCREEN_VISIBLE_AREA(0, 1456-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2744,7 +2716,6 @@ MACHINE_CONFIG_START(trobocop2_state::trobocop2)
MCFG_SCREEN_VISIBLE_AREA(0, 1487-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2852,7 +2823,6 @@ MACHINE_CONFIG_START(taltbeast_state::taltbeast)
MCFG_SCREEN_VISIBLE_AREA(0, 1455-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -2947,7 +2917,6 @@ MACHINE_CONFIG_START(tsf2010_state::tsf2010)
MCFG_SCREEN_VISIBLE_AREA(0, 1465-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3038,7 +3007,6 @@ MACHINE_CONFIG_START(tswampt_state::tswampt)
MCFG_SCREEN_VISIBLE_AREA(0, 1450-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3133,7 +3101,6 @@ MACHINE_CONFIG_START(tspidman_state::tspidman)
MCFG_SCREEN_VISIBLE_AREA(0, 1440-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3228,7 +3195,6 @@ MACHINE_CONFIG_START(txmen_state::txmen)
MCFG_SCREEN_VISIBLE_AREA(0, 1467-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3323,7 +3289,6 @@ MACHINE_CONFIG_START(tddragon3_state::tddragon3)
MCFG_SCREEN_VISIBLE_AREA(0, 1514-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3418,7 +3383,6 @@ MACHINE_CONFIG_START(tflash_state::tflash)
MCFG_SCREEN_VISIBLE_AREA(0, 1444-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3513,7 +3477,6 @@ MACHINE_CONFIG_START(tmchammer_state::tmchammer)
MCFG_SCREEN_VISIBLE_AREA(0, 1471-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3608,7 +3571,6 @@ MACHINE_CONFIG_START(tbtoads_state::tbtoads)
MCFG_SCREEN_VISIBLE_AREA(0, 1454-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3703,7 +3665,6 @@ MACHINE_CONFIG_START(thook_state::thook)
MCFG_SCREEN_VISIBLE_AREA(0, 1489-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3797,7 +3758,6 @@ MACHINE_CONFIG_START(tbttf_state::tbttf)
MCFG_SCREEN_VISIBLE_AREA(0, 1466-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3894,7 +3854,6 @@ MACHINE_CONFIG_START(taddams_state::taddams)
MCFG_SCREEN_VISIBLE_AREA(0, 1464-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -3989,7 +3948,6 @@ MACHINE_CONFIG_START(thalone_state::thalone)
MCFG_SCREEN_VISIBLE_AREA(0, 1448-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4080,7 +4038,6 @@ MACHINE_CONFIG_START(txmenpx_state::txmenpx)
MCFG_SCREEN_VISIBLE_AREA(0, 1464-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4175,7 +4132,6 @@ MACHINE_CONFIG_START(thalone2_state::thalone2)
MCFG_SCREEN_VISIBLE_AREA(0, 1454-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4263,7 +4219,6 @@ MACHINE_CONFIG_START(tsonic_state::tsonic)
MCFG_SCREEN_SIZE(1517, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1517-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4359,7 +4314,6 @@ MACHINE_CONFIG_START(trobocop3_state::trobocop3)
MCFG_SCREEN_VISIBLE_AREA(0, 1464-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4450,7 +4404,6 @@ MACHINE_CONFIG_START(tdummies_state::tdummies)
MCFG_SCREEN_VISIBLE_AREA(0, 1441-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4545,7 +4498,6 @@ MACHINE_CONFIG_START(tsfight2_state::tsfight2)
MCFG_SCREEN_VISIBLE_AREA(0, 1444-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4640,7 +4592,6 @@ MACHINE_CONFIG_START(twworld_state::twworld)
MCFG_SCREEN_VISIBLE_AREA(0, 1429-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4731,7 +4682,6 @@ MACHINE_CONFIG_START(tjpark_state::tjpark)
MCFG_SCREEN_VISIBLE_AREA(0, 1454-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4819,7 +4769,6 @@ MACHINE_CONFIG_START(tsonic2_state::tsonic2)
MCFG_SCREEN_SIZE(1475, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1475-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -4920,7 +4869,6 @@ MACHINE_CONFIG_START(tsddragon_state::tsddragon)
MCFG_SCREEN_VISIBLE_AREA(0, 1503-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5016,7 +4964,6 @@ MACHINE_CONFIG_START(tdennis_state::tdennis)
MCFG_SCREEN_VISIBLE_AREA(0, 1467-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5115,7 +5062,6 @@ MACHINE_CONFIG_START(tnmarebc_state::tnmarebc)
MCFG_SCREEN_VISIBLE_AREA(0, 1456-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5210,7 +5156,6 @@ MACHINE_CONFIG_START(ttransf2_state::ttransf2)
MCFG_SCREEN_VISIBLE_AREA(0, 1476-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5301,7 +5246,6 @@ MACHINE_CONFIG_START(topaliens_state::topaliens)
MCFG_SCREEN_VISIBLE_AREA(0, 1450-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5397,7 +5341,6 @@ MACHINE_CONFIG_START(tmkombat_state::tmkombat)
MCFG_SCREEN_VISIBLE_AREA(0, 1468-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5492,7 +5435,6 @@ MACHINE_CONFIG_START(tshadow_state::tshadow)
MCFG_SCREEN_VISIBLE_AREA(0, 1484-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5587,7 +5529,6 @@ MACHINE_CONFIG_START(tskelwarr_state::tskelwarr)
MCFG_SCREEN_VISIBLE_AREA(0, 1444-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5683,7 +5624,6 @@ MACHINE_CONFIG_START(tbatfor_state::tbatfor)
MCFG_SCREEN_VISIBLE_AREA(0, 1493-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5779,7 +5719,6 @@ MACHINE_CONFIG_START(tjdredd_state::tjdredd)
MCFG_SCREEN_VISIBLE_AREA(0, 1444-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5875,7 +5814,6 @@ MACHINE_CONFIG_START(tapollo13_state::tapollo13)
MCFG_SCREEN_VISIBLE_AREA(0, 1467-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -5971,7 +5909,6 @@ MACHINE_CONFIG_START(tgoldeye_state::tgoldeye)
MCFG_SCREEN_VISIBLE_AREA(0, 1461-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -6062,7 +5999,6 @@ MACHINE_CONFIG_START(tinday_state::tinday)
MCFG_SCREEN_VISIBLE_AREA(0, 1463-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -6153,7 +6089,6 @@ MACHINE_CONFIG_START(tsjam_state::tsjam)
MCFG_SCREEN_VISIBLE_AREA(0, 1421-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -6242,7 +6177,6 @@ MACHINE_CONFIG_START(tbatmana_state::tbatmana)
MCFG_SCREEN_SIZE(1478, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 1478-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -6346,7 +6280,6 @@ MACHINE_CONFIG_START(tigarden_state::tigarden)
MCFG_SCREEN_VISIBLE_AREA(0, 1515-1, 0, 1080-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -6446,7 +6379,6 @@ MACHINE_CONFIG_START(nummunch_state::nummunch)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 875-1)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
- config.set_default_layout(layout_svg);
/* sound hardware */
SPEAKER(config, "mono").front_center();
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 6dc3282b622..410752a3e59 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -160,7 +160,6 @@
#include "softlist.h"
#include "screen.h"
#include "speaker.h"
-#include "rendlay.h"
// internal artwork
#include "7in1ss.lh"
@@ -4603,7 +4602,6 @@ MACHINE_CONFIG_START(ginv1000_state::ginv1000)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(226, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 226-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -4739,7 +4737,6 @@ MACHINE_CONFIG_START(ginv2000_state::ginv2000)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(364, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 364-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index a4d9eeba981..979736b186e 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -73,7 +73,6 @@ TODO:
#include "includes/hh_ucom4.h"
#include "video/hlcd0515.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -348,7 +347,6 @@ MACHINE_CONFIG_START(ufombs_state::ufombs)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(243, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 243-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -495,7 +493,6 @@ MACHINE_CONFIG_START(ssfball_state::ssfball)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 482)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 482-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -623,7 +620,6 @@ MACHINE_CONFIG_START(bmsoccer_state::bmsoccer)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(271, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 271-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -730,7 +726,6 @@ MACHINE_CONFIG_START(bmsafari_state::bmsafari)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(248, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 248-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -881,7 +876,6 @@ MACHINE_CONFIG_START(splasfgt_state::splasfgt)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 476)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 476-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -985,7 +979,6 @@ MACHINE_CONFIG_START(bcclimbr_state::bcclimbr)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(310, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 310-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1202,7 +1195,6 @@ MACHINE_CONFIG_START(invspace_state::invspace)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(289, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 289-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1418,7 +1410,6 @@ MACHINE_CONFIG_START(galaxy2_state::galaxy2)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(304, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 304-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1537,7 +1528,6 @@ MACHINE_CONFIG_START(astrocmd_state::astrocmd)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 525)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 525-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -1633,7 +1623,6 @@ MACHINE_CONFIG_START(edracula_state::edracula)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 526)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 526-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2026,7 +2015,6 @@ MACHINE_CONFIG_START(tccombat_state::tccombat)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(300, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 300-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2184,7 +2172,6 @@ MACHINE_CONFIG_START(tmtennis_state::tmtennis)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 417)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 417-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2293,7 +2280,6 @@ MACHINE_CONFIG_START(tmpacman_state::tmpacman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 508)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 508-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2396,7 +2382,6 @@ MACHINE_CONFIG_START(tmscramb_state::tmscramb)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 556)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 556-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2495,7 +2480,6 @@ MACHINE_CONFIG_START(tcaveman_state::tcaveman)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(1920, 559)
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 559-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
@@ -2628,7 +2612,6 @@ MACHINE_CONFIG_START(alnchase_state::alnchase)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(365, 1080)
MCFG_SCREEN_VISIBLE_AREA(0, 365-1, 0, 1080-1)
- config.set_default_layout(layout_svg);
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
/* sound hardware */
diff --git a/src/mame/drivers/hng64.cpp b/src/mame/drivers/hng64.cpp
index 6c4df6876cc..19f68c69c3d 100644
--- a/src/mame/drivers/hng64.cpp
+++ b/src/mame/drivers/hng64.cpp
@@ -1532,6 +1532,57 @@ void hng64_state::machine_reset()
reset_sound();
}
+// used
+READ8_MEMBER(hng64_state::ioport0_r)
+{
+ logerror("%s: ioport0_r\n", machine().describe_context());
+ return 0x03; // expects 0x03 after writing it to port 0 earlier
+}
+
+// used
+READ8_MEMBER(hng64_state::ioport1_r)
+{
+ logerror("%s: ioport1_r\n", machine().describe_context());
+ return 0xff;
+}
+
+// used
+WRITE8_MEMBER(hng64_state::ioport0_w)
+{
+ logerror("%s: ioport0_w %02x\n", machine().describe_context(), data);
+}
+
+// used
+WRITE8_MEMBER(hng64_state::ioport1_w)
+{
+ logerror("%s: ioport1_w %02x\n", machine().describe_context(), data);
+}
+
+// used
+WRITE8_MEMBER(hng64_state::ioport3_w)
+{
+ logerror("%s: ioport3_w %02x\n", machine().describe_context(), data);
+}
+
+// used
+WRITE8_MEMBER(hng64_state::ioport7_w)
+{
+ logerror("%s: ioport7_w %02x\n", machine().describe_context(), data);
+}
+
+// check if these are used
+READ8_MEMBER(hng64_state::ioport2_r) { logerror("%s: ioport2_r\n", machine().describe_context()); return 0xff; }
+READ8_MEMBER(hng64_state::ioport3_r) { logerror("%s: ioport3_r\n", machine().describe_context()); return 0xff; }
+READ8_MEMBER(hng64_state::ioport4_r) { logerror("%s: ioport4_r\n", machine().describe_context()); return 0xff; }
+READ8_MEMBER(hng64_state::ioport5_r) { logerror("%s: ioport5_r\n", machine().describe_context()); return 0xff; }
+READ8_MEMBER(hng64_state::ioport6_r) { logerror("%s: ioport6_r\n", machine().describe_context()); return 0xff; }
+READ8_MEMBER(hng64_state::ioport7_r) { logerror("%s: ioport7_r\n", machine().describe_context()); return 0xff; }
+
+WRITE8_MEMBER(hng64_state::ioport2_w) { logerror("%s: ioport2_w %02x\n", machine().describe_context(), data); }
+WRITE8_MEMBER(hng64_state::ioport4_w) { logerror("%s: ioport4_w %02x\n", machine().describe_context(), data); }
+WRITE8_MEMBER(hng64_state::ioport5_w) { logerror("%s: ioport5_w %02x\n", machine().describe_context(), data); }
+WRITE8_MEMBER(hng64_state::ioport6_w) { logerror("%s: ioport6_w %02x\n", machine().describe_context(), data); }
+
MACHINE_CONFIG_START(hng64_state::hng64)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", VR4300BE, HNG64_MASTER_CLOCK) // actually R4300
@@ -1557,7 +1608,23 @@ MACHINE_CONFIG_START(hng64_state::hng64)
hng64_audio(config);
hng64_network(config);
- MCFG_DEVICE_ADD("iomcu", TMP87PH40AN, 8000000)
+ tmp87ph40an_device &iomcu(TMP87PH40AN(config, m_iomcu, 8_MHz_XTAL));
+ iomcu.p0_in_cb().set(FUNC(hng64_state::ioport0_r));
+ iomcu.p1_in_cb().set(FUNC(hng64_state::ioport1_r));
+ iomcu.p2_in_cb().set(FUNC(hng64_state::ioport2_r));
+ iomcu.p3_in_cb().set(FUNC(hng64_state::ioport3_r));
+ iomcu.p4_in_cb().set(FUNC(hng64_state::ioport4_r));
+ iomcu.p5_in_cb().set(FUNC(hng64_state::ioport5_r));
+ iomcu.p6_in_cb().set(FUNC(hng64_state::ioport6_r));
+ iomcu.p7_in_cb().set(FUNC(hng64_state::ioport7_r));
+ iomcu.p0_out_cb().set(FUNC(hng64_state::ioport0_w));
+ iomcu.p1_out_cb().set(FUNC(hng64_state::ioport1_w));
+ iomcu.p2_out_cb().set(FUNC(hng64_state::ioport2_w));
+ iomcu.p3_out_cb().set(FUNC(hng64_state::ioport3_w));
+ iomcu.p4_out_cb().set(FUNC(hng64_state::ioport4_w));
+ iomcu.p5_out_cb().set(FUNC(hng64_state::ioport5_w));
+ iomcu.p6_out_cb().set(FUNC(hng64_state::ioport6_w));
+ iomcu.p7_out_cb().set(FUNC(hng64_state::ioport7_w));
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/hp49gp.cpp b/src/mame/drivers/hp49gp.cpp
index d08ad80e98f..53f5f732747 100644
--- a/src/mame/drivers/hp49gp.cpp
+++ b/src/mame/drivers/hp49gp.cpp
@@ -9,7 +9,6 @@
#include "emu.h"
#include "cpu/arm7/arm7.h"
#include "machine/s3c2410.h"
-#include "rendlay.h"
#include "screen.h"
#define VERBOSE_LEVEL ( 0 )
@@ -297,9 +296,6 @@ MACHINE_CONFIG_START(hp49gp_state::hp49gp)
MCFG_SCREEN_VISIBLE_AREA(0, 131 - 1, 0, 80 - 1)
MCFG_SCREEN_UPDATE_DEVICE("s3c2410", s3c2410_device, screen_update)
- config.set_default_layout(layout_lcd);
-
-
MCFG_DEVICE_ADD("s3c2410", S3C2410, 12000000)
MCFG_S3C2410_PALETTE("palette")
MCFG_S3C2410_SCREEN("screen")
diff --git a/src/mame/drivers/hp_ipc.cpp b/src/mame/drivers/hp_ipc.cpp
index 899cc0768f5..fcbe52ff23f 100644
--- a/src/mame/drivers/hp_ipc.cpp
+++ b/src/mame/drivers/hp_ipc.cpp
@@ -374,8 +374,6 @@ Software to look for
#include "machine/tms9914.h"
#include "bus/ieee488/ieee488.h"
-#include "rendlay.h"
-
#include "emupal.h"
#include "screen.h"
@@ -801,11 +799,10 @@ MACHINE_CONFIG_START(hp_ipc_state::hp_ipc)
// horizontal time = 60 us (min)
// ver.refresh period = ~300 us
// ver.period = 16.7ms (~60 hz)
- MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber())
+ MCFG_SCREEN_ADD_MONOCHROME("screen", LCD, rgb_t::amber()) // actually a kind of EL display
MCFG_SCREEN_UPDATE_DEVICE("gpu", hp1ll3_device, screen_update)
MCFG_SCREEN_RAW_PARAMS(6_MHz_XTAL * 2, 720, 0, 512, 278, 0, 256)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("mlc", hp_hil_mlc_device, ap_w)) // XXX actually it's driven by 555 (U59)
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_MONOCHROME("palette")
@@ -821,11 +818,10 @@ MACHINE_CONFIG_START(hp_ipc_state::hp9808a)
MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(16)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000000)
- MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber())
+ MCFG_SCREEN_ADD_MONOCHROME("screen", LCD, rgb_t::amber()) // actually a kind of EL display
MCFG_SCREEN_UPDATE_DEVICE("gpu", hp1ll3_device, screen_update)
MCFG_SCREEN_RAW_PARAMS(6_MHz_XTAL * 2, 720, 0, 640, 480, 0, 400)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("mlc", hp_hil_mlc_device, ap_w))
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_MONOCHROME("palette")
diff --git a/src/mame/drivers/hprot1.cpp b/src/mame/drivers/hprot1.cpp
index c353fb912a5..d81f856498d 100644
--- a/src/mame/drivers/hprot1.cpp
+++ b/src/mame/drivers/hprot1.cpp
@@ -60,7 +60,6 @@ Infinite loop is reached at address 0x7699
#include "sound/spkrdev.h"
#include "video/hd44780.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -262,7 +261,6 @@ MACHINE_CONFIG_START(hprot1_state::hprot1)
MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(hprot1_state, hprot1)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_hprot1)
diff --git a/src/mame/drivers/hunter2.cpp b/src/mame/drivers/hunter2.cpp
index 054bffa3533..3960ba36a48 100644
--- a/src/mame/drivers/hunter2.cpp
+++ b/src/mame/drivers/hunter2.cpp
@@ -30,7 +30,6 @@
#include "sound/spkrdev.h"
#include "video/hd61830.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -391,7 +390,6 @@ MACHINE_CONFIG_START(hunter2_state::hunter2)
MCFG_SCREEN_VISIBLE_AREA(0, 239, 0, 63)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(hunter2_state, hunter2)
MCFG_DEVICE_ADD("lcdc", HD61830, XTAL(4'915'200)/2/2) // unknown clock
diff --git a/src/mame/drivers/hx20.cpp b/src/mame/drivers/hx20.cpp
index b203f1193d1..f6e643a6495 100644
--- a/src/mame/drivers/hx20.cpp
+++ b/src/mame/drivers/hx20.cpp
@@ -905,7 +905,6 @@ MACHINE_CONFIG_START(hx20_state::hx20)
MCFG_DEVICE_IO_MAP(hx20_sub_io)
// video hardware
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_ADD(SCREEN_TAG, LCD)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
diff --git a/src/mame/drivers/icatel.cpp b/src/mame/drivers/icatel.cpp
index 65591006ec5..0b4828950e8 100644
--- a/src/mame/drivers/icatel.cpp
+++ b/src/mame/drivers/icatel.cpp
@@ -25,7 +25,6 @@
#include "debugger.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
@@ -273,7 +272,6 @@ MACHINE_CONFIG_START(icatel_state::icatel)
MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(icatel_state, icatel)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_icatel)
diff --git a/src/mame/drivers/indigo.cpp b/src/mame/drivers/indigo.cpp
index 7d9b1939ccd..4281179f99b 100644
--- a/src/mame/drivers/indigo.cpp
+++ b/src/mame/drivers/indigo.cpp
@@ -627,7 +627,7 @@ MACHINE_CONFIG_START(indigo_state::indigo4k)
MACHINE_CONFIG_END
ROM_START( indigo3k )
- ROM_REGION( 0x40000, "user1", 0 )
+ ROM_REGION32_BE( 0x40000, "user1", 0 )
ROM_SYSTEM_BIOS( 0, "401-rev-c", "SGI Version 4.0.1 Rev C LG1/GR2, Jul 9, 1992" ) // dumped over serial connection from boot monitor and swapped
ROMX_LOAD( "ip12prom.070-8088-xxx.u56", 0x000000, 0x040000, CRC(25ca912f) SHA1(94b3753d659bfe50b914445cef41290122f43880), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(0) )
ROM_SYSTEM_BIOS( 1, "401-rev-d", "SGI Version 4.0.1 Rev D LG1/GR2, Mar 24, 1992" ) // dumped with EPROM programmer
@@ -635,8 +635,8 @@ ROM_START( indigo3k )
ROM_END
ROM_START( indigo4k )
- ROM_REGION( 0x80000, "user1", 0 )
- ROM_LOAD( "ip20prom.070-8116-004.bin", 0x000000, 0x080000, CRC(940d960e) SHA1(596aba530b53a147985ff3f6f853471ce48c866c) )
+ ROM_REGION32_BE( 0x80000, "user1", 0 )
+ ROMX_LOAD( "ip20prom.070-8116-004.bin", 0x000000, 0x080000, CRC(940d960e) SHA1(596aba530b53a147985ff3f6f853471ce48c866c), ROM_GROUPDWORD | ROM_REVERSE )
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
diff --git a/src/mame/drivers/juicebox.cpp b/src/mame/drivers/juicebox.cpp
index 387537611ce..04fc84667df 100644
--- a/src/mame/drivers/juicebox.cpp
+++ b/src/mame/drivers/juicebox.cpp
@@ -15,7 +15,6 @@
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -320,7 +319,6 @@ MACHINE_CONFIG_START(juicebox_state::juicebox)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(240, 160)
MCFG_SCREEN_VISIBLE_AREA(0, 240 - 1, 0, 160 - 1)
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_UPDATE_DEVICE("s3c44b0", s3c44b0_device, video_update)
diff --git a/src/mame/drivers/lcmate2.cpp b/src/mame/drivers/lcmate2.cpp
index 96c9247d130..d15a9a4a57e 100644
--- a/src/mame/drivers/lcmate2.cpp
+++ b/src/mame/drivers/lcmate2.cpp
@@ -36,7 +36,6 @@
#include "sound/spkrdev.h"
#include "video/hd44780.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -248,7 +247,6 @@ MACHINE_CONFIG_START(lcmate2_state::lcmate2)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(lcmate2_state, lcmate2)
- config.set_default_layout(layout_lcd);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_lcmate2)
MCFG_HD44780_ADD("hd44780")
diff --git a/src/mame/drivers/megaphx.cpp b/src/mame/drivers/megaphx.cpp
index 6c1bcf6a1bb..128a35fa72b 100644
--- a/src/mame/drivers/megaphx.cpp
+++ b/src/mame/drivers/megaphx.cpp
@@ -439,9 +439,9 @@ ROM_START( megaphx )
ROM_LOAD( "pic16c54-xt.bin", 0x000000, 0x430, CRC(21f396fb) SHA1(c8badb9b3681e684bced0ced1de4c3a15641de8b) )
ROM_FILL(0x2c, 1, 0x01) // patch timer length or its too slow (pic issue?)
- ROM_REGION( 0x100000, "pals", 0 ) // jedutil won't convert these? are they bad?
- ROM_LOAD( "p31_u31_palce16v8h-25.jed", 0x000, 0xbd4, CRC(05ef04b7) SHA1(330dd81a832b6675fb0473868c26fe9bec2da854) )
- ROM_LOAD( "p40_u29_palce16v8h-25.jed", 0x000, 0xbd4, CRC(44b7e51c) SHA1(b8b34f3b319d664ec3ad72ed87d9f65701f183a5) )
+ ROM_REGION( 0x1000, "pals", 0 ) // protected
+ ROM_LOAD( "p31_u31_palce16v8h-25.jed", 0x000, 0xbd4, BAD_DUMP CRC(05ef04b7) SHA1(330dd81a832b6675fb0473868c26fe9bec2da854) )
+ ROM_LOAD( "p40_u29_palce16v8h-25.jed", 0x000, 0xbd4, BAD_DUMP CRC(44b7e51c) SHA1(b8b34f3b319d664ec3ad72ed87d9f65701f183a5) )
ROM_END
ROM_START( hamboy )
diff --git a/src/mame/drivers/micro20.cpp b/src/mame/drivers/micro20.cpp
index 1f0a56f679a..05b11e2b6a0 100644
--- a/src/mame/drivers/micro20.cpp
+++ b/src/mame/drivers/micro20.cpp
@@ -156,6 +156,15 @@ void micro20_state::micro20_map(address_map &map)
map(0xffff80c0, 0xffff80df).rw(m_pit, FUNC(pit68230_device::read), FUNC(pit68230_device::write));
}
+static DEVICE_INPUT_DEFAULTS_START( terminal )
+ DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_19200 )
+ DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_19200 )
+ DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
+ DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
+ DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
+ DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
+DEVICE_INPUT_DEFAULTS_END
+
MACHINE_CONFIG_START(micro20_state::micro20)
/* basic machine hardware */
MCFG_DEVICE_ADD(MAINCPU_TAG, M68020, 16.67_MHz_XTAL)
@@ -166,6 +175,7 @@ MACHINE_CONFIG_START(micro20_state::micro20)
MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE(DUART_A_TAG, mc68681_device, rx_a_w))
+ MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
MCFG_DEVICE_ADD(DUART_B_TAG, MC68681, 3.6864_MHz_XTAL)
diff --git a/src/mame/drivers/micronic.cpp b/src/mame/drivers/micronic.cpp
index 08414f85a7a..beec4e9a037 100644
--- a/src/mame/drivers/micronic.cpp
+++ b/src/mame/drivers/micronic.cpp
@@ -114,7 +114,6 @@
#include "emu.h"
#include "includes/micronic.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -364,8 +363,6 @@ MACHINE_CONFIG_START(micronic_state::micronic)
MCFG_SCREEN_VISIBLE_AREA(0, 120-1, 0, 64-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(micronic_state, micronic)
diff --git a/src/mame/drivers/microvsn.cpp b/src/mame/drivers/microvsn.cpp
index b0c30de9616..38e8d8f4ec6 100644
--- a/src/mame/drivers/microvsn.cpp
+++ b/src/mame/drivers/microvsn.cpp
@@ -23,7 +23,6 @@ of the games were clocked at around 500KHz, 550KHz, or 300KHz.
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "emupal.h"
-#include "rendlay.h"
#include "softlist.h"
#include "screen.h"
#include "speaker.h"
@@ -667,8 +666,6 @@ MACHINE_CONFIG_START(microvision_state::microvision)
MCFG_PALETTE_ADD("palette", 16)
MCFG_PALETTE_INIT_OWNER(microvision_state,microvision)
- config.set_default_layout(layout_lcd);
-
/* sound hardware */
SPEAKER(config, "speaker").front_center();
MCFG_DEVICE_ADD("dac", DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) // unknown DAC
diff --git a/src/mame/drivers/mini2440.cpp b/src/mame/drivers/mini2440.cpp
index 2fd5b759f81..f8699c28d60 100644
--- a/src/mame/drivers/mini2440.cpp
+++ b/src/mame/drivers/mini2440.cpp
@@ -12,7 +12,6 @@
#include "machine/smartmed.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -22,8 +21,8 @@
class mini2440_state : public driver_device
{
public:
- mini2440_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ mini2440_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_s3c2440(*this, "s3c2440"),
m_nand(*this, "nand"),
@@ -237,7 +236,6 @@ MACHINE_CONFIG_START(mini2440_state::mini2440)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(1024, 768)
MCFG_SCREEN_VISIBLE_AREA(0, 239, 0, 319)
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_UPDATE_DEVICE("s3c2440", s3c2440_device, screen_update)
diff --git a/src/mame/drivers/missile.cpp b/src/mame/drivers/missile.cpp
index 0cb8247b342..ceb7416cab1 100644
--- a/src/mame/drivers/missile.cpp
+++ b/src/mame/drivers/missile.cpp
@@ -685,8 +685,8 @@ uint32_t missile_state::screen_update_missile(screen_device &screen, bitmap_ind1
uint8_t *videoram = m_videoram;
int x, y;
- /* draw the bitmap to the screen, looping over Y */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ // draw the bitmap to the screen, looping over Y
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint16_t *dst = &bitmap.pix16(y);
@@ -694,18 +694,18 @@ uint32_t missile_state::screen_update_missile(screen_device &screen, bitmap_ind1
uint8_t *src = &videoram[effy * 64];
uint8_t *src3 = nullptr;
- /* compute the base of the 3rd pixel row */
+ // compute the base of the 3rd pixel row
if (effy >= 224)
src3 = &videoram[get_bit3_addr(effy << 8)];
- /* loop over X */
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ // loop over X
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
uint8_t pix = src[x / 4] >> (x & 3);
pix = ((pix >> 2) & 4) | ((pix << 1) & 2);
- /* if we're in the lower region, get the 3rd bit */
- if (src3 != nullptr)
+ // if we're in the lower region, get the 3rd bit
+ if (src3)
pix |= (src3[(x / 8) * 2] >> (x & 7)) & 1;
dst[x] = pix;
diff --git a/src/mame/drivers/mrgame.cpp b/src/mame/drivers/mrgame.cpp
index 3c460b5ebd4..aa9ddfe0b45 100644
--- a/src/mame/drivers/mrgame.cpp
+++ b/src/mame/drivers/mrgame.cpp
@@ -10,7 +10,7 @@
Status:
- motrshow, motrshowa, dakar working in the electronic sense, but not mechanically
- macattck most roms are missing
-- wcup90 different hardware, not coded
+- wcup90 different hardware, partially coded based on macattck schematic
How to set up the machine (motrshow, motrshowa, dakar):
- These machines need to be loaded with default settings before they can accept coins
@@ -27,16 +27,17 @@ ToDo:
- Support for electronic volume control
- Audio rom banking
- Most sounds missing due to unemulated M114 chip
-- wcup90 is different hardware and there's no schematic
*****************************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/i8255.h"
#include "machine/nvram.h"
#include "machine/timer.h"
+//#include "machine/watchdog.h"
#include "sound/dac.h"
#include "sound/tms5220.h"
#include "sound/volt_reg.h"
@@ -58,6 +59,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_audiocpu1(*this, "audiocpu1")
, m_audiocpu2(*this, "audiocpu2")
+ , m_videocpu(*this, "videocpu")
, m_io_dsw0(*this, "DSW0")
, m_io_dsw1(*this, "DSW1")
, m_io_x0(*this, "X0")
@@ -65,6 +67,7 @@ public:
{ }
void mrgame(machine_config &config);
+ void wcup90(machine_config &config);
void init_mrgame();
@@ -77,42 +80,55 @@ private:
DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_WRITE8_MEMBER(triple_w);
DECLARE_WRITE8_MEMBER(video_w);
- DECLARE_WRITE8_MEMBER(video_ctrl_w);
+ DECLARE_WRITE_LINE_MEMBER(video_a11_w);
+ DECLARE_WRITE_LINE_MEMBER(video_a12_w);
+ DECLARE_WRITE_LINE_MEMBER(video_a13_w);
+ DECLARE_WRITE_LINE_MEMBER(intst_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_intst_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_w);
DECLARE_READ8_MEMBER(col_r);
DECLARE_READ8_MEMBER(sound_r);
DECLARE_READ8_MEMBER(porta_r);
DECLARE_READ8_MEMBER(portc_r);
DECLARE_READ8_MEMBER(rsw_r);
+ DECLARE_WRITE_LINE_MEMBER(vblank_int_w);
+ DECLARE_WRITE_LINE_MEMBER(vblank_nmi_w);
TIMER_DEVICE_CALLBACK_MEMBER(irq_timer);
uint32_t screen_update_mrgame(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- std::unique_ptr<bitmap_ind16> m_tile_bitmap;
- required_device<palette_device> m_palette;
- required_shared_ptr<uint8_t> m_p_videoram;
- required_shared_ptr<uint8_t> m_p_objectram;
- required_device<gfxdecode_device> m_gfxdecode;
+
void audio1_io(address_map &map);
void audio1_map(address_map &map);
void audio2_io(address_map &map);
void audio2_map(address_map &map);
void main_map(address_map &map);
void video_map(address_map &map);
+ void wcup90_video_map(address_map &map);
+
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ std::unique_ptr<bitmap_ind16> m_tile_bitmap;
+ required_device<palette_device> m_palette;
+ required_shared_ptr<uint8_t> m_p_videoram;
+ required_shared_ptr<uint8_t> m_p_objectram;
+ required_device<gfxdecode_device> m_gfxdecode;
bool m_ack1;
bool m_ack2;
bool m_ackv;
bool m_flip;
+ bool m_intst;
uint8_t m_irq_state;
uint8_t m_row_data;
uint8_t m_sound_data;
uint8_t m_gfx_bank;
uint8_t m_video_data;
uint8_t m_video_status;
- uint8_t m_video_ctrl[8];
- virtual void machine_start() override;
- virtual void machine_reset() override;
+
required_device<m68000_device> m_maincpu;
required_device<z80_device> m_audiocpu1;
required_device<z80_device> m_audiocpu2;
+ required_device<z80_device> m_videocpu;
required_ioport m_io_dsw0;
required_ioport m_io_dsw1;
required_ioport m_io_x0;
@@ -140,11 +156,22 @@ void mrgame_state::video_map(address_map &map)
map(0x4000, 0x47ff).ram();
map(0x4800, 0x4bff).mirror(0x0400).ram().share("videoram");
map(0x5000, 0x50ff).mirror(0x0700).ram().share("objectram");
- map(0x6800, 0x6807).mirror(0x07f8).w(FUNC(mrgame_state::video_ctrl_w));
- map(0x7000, 0x77ff).nopr(); //AFR - looks like a watchdog
+ map(0x6800, 0x6807).mirror(0x07f8).w("selectlatch", FUNC(ls259_device::write_d0));
+ map(0x7000, 0x7000).mirror(0x07ff).nopr(); //AFR - watchdog reset
map(0x8100, 0x8103).mirror(0x7efc).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
}
+void mrgame_state::wcup90_video_map(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region("video", 0);
+ map(0x8000, 0x87ff).ram();
+ map(0x8800, 0x8bff).mirror(0x0400).ram().share("videoram");
+ map(0x9000, 0x90ff).mirror(0x0700).ram().share("objectram");
+ map(0xa800, 0xa807).mirror(0x07f8).w("selectlatch", FUNC(ls259_device::write_d0));
+ map(0xb000, 0xb000).mirror(0x07ff).nopr(); //AFR - watchdog reset
+ map(0xc000, 0xc003).mirror(0x3ffc).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
+}
+
void mrgame_state::audio1_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("audio1", 0);
@@ -225,13 +252,13 @@ static INPUT_PORTS_START( mrgame )
PORT_BIT( 0xe9, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
-READ8_MEMBER( mrgame_state::rsw_r )
+READ8_MEMBER(mrgame_state::rsw_r)
{
return m_io_dsw0->read() | ((uint8_t)m_ack1 << 5) | ((uint8_t)m_ack2 << 4);
}
// this is like a keyboard, energise a row and read the column data
-READ8_MEMBER( mrgame_state::col_r )
+READ8_MEMBER(mrgame_state::col_r)
{
if (m_row_data == 0)
return m_io_x0->read();
@@ -246,17 +273,17 @@ READ8_MEMBER( mrgame_state::col_r )
return 0xff;
}
-WRITE8_MEMBER( mrgame_state::row_w )
+WRITE8_MEMBER(mrgame_state::row_w)
{
m_row_data = data & 7;
}
-READ8_MEMBER( mrgame_state::sound_r )
+READ8_MEMBER(mrgame_state::sound_r)
{
return m_sound_data;
}
-WRITE8_MEMBER( mrgame_state::sound_w )
+WRITE8_MEMBER(mrgame_state::sound_w)
{
m_sound_data = data;
m_audiocpu1->set_input_line(INPUT_LINE_NMI, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
@@ -264,56 +291,73 @@ WRITE8_MEMBER( mrgame_state::sound_w )
}
// this produces 24 outputs from three driver chips to drive lamps & solenoids
-WRITE8_MEMBER( mrgame_state::triple_w )
+WRITE8_MEMBER(mrgame_state::triple_w)
{
if ((data & 0x18)==0)
m_ackv = BIT(data, 7);
}
-WRITE8_MEMBER( mrgame_state::video_w )
+WRITE8_MEMBER(mrgame_state::video_w)
{
m_video_data = data;
}
-WRITE8_MEMBER( mrgame_state::video_ctrl_w )
+WRITE_LINE_MEMBER(mrgame_state::video_a11_w)
{
- m_video_ctrl[offset] = data;
+ m_gfx_bank = (m_gfx_bank & 6) | (state ? 1 : 0);
+}
- if (offset == 0)
- m_gfx_bank = (m_gfx_bank & 6) | BIT(data, 0);
- else
- if (offset == 3)
- m_gfx_bank = (m_gfx_bank & 5) | (BIT(data, 0) << 1);
- else
- if (offset == 4)
- m_gfx_bank = (m_gfx_bank & 3) | (BIT(data, 0) << 2);
- else
- if (offset == 6)
- m_flip = BIT(data, 0);
+WRITE_LINE_MEMBER(mrgame_state::video_a12_w)
+{
+ m_gfx_bank = (m_gfx_bank & 5) | (state ? 2 : 0);
+}
+
+WRITE_LINE_MEMBER(mrgame_state::video_a13_w)
+{
+ m_gfx_bank = (m_gfx_bank & 3) | (state ? 4 : 0);
+}
+
+WRITE_LINE_MEMBER(mrgame_state::intst_w)
+{
+ m_intst = state;
+ if (!state)
+ m_videocpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER(mrgame_state::nmi_intst_w)
+{
+ m_intst = state;
+ if (!state)
+ m_videocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
-WRITE8_MEMBER( mrgame_state::ack1_w )
+WRITE_LINE_MEMBER(mrgame_state::flip_w)
+{
+ m_flip = state;
+}
+
+WRITE8_MEMBER(mrgame_state::ack1_w)
{
m_ack1 = BIT(data, 0);
}
-WRITE8_MEMBER( mrgame_state::ack2_w )
+WRITE8_MEMBER(mrgame_state::ack2_w)
{
m_ack2 = BIT(data, 0);
}
-READ8_MEMBER( mrgame_state::porta_r )
+READ8_MEMBER(mrgame_state::porta_r)
{
return m_video_data;
}
-WRITE8_MEMBER( mrgame_state::portb_w )
+WRITE8_MEMBER(mrgame_state::portb_w)
{
m_video_status = data;
m_ackv = 0;
}
-READ8_MEMBER( mrgame_state::portc_r )
+READ8_MEMBER(mrgame_state::portc_r)
{
return m_io_dsw1->read() | ((uint8_t)m_ackv << 4);
}
@@ -341,9 +385,21 @@ void mrgame_state::init_mrgame()
{
}
+WRITE_LINE_MEMBER(mrgame_state::vblank_int_w)
+{
+ if (state && m_intst)
+ m_videocpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
+}
+
+WRITE_LINE_MEMBER(mrgame_state::vblank_nmi_w)
+{
+ if (state && m_intst)
+ m_videocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+}
+
// This pulses the IRQ pins of both audio cpus. The schematic does not
//show which 4040 output is used, so we have guessed.
-TIMER_DEVICE_CALLBACK_MEMBER( mrgame_state::irq_timer )
+TIMER_DEVICE_CALLBACK_MEMBER(mrgame_state::irq_timer)
{
m_irq_state++;
// pulse_line of IRQ not allowed, so trying this instead
@@ -383,12 +439,12 @@ static const gfx_layout spritelayout =
32*8
};
-static GFXDECODE_START( gfx_mrgame )
- GFXDECODE_ENTRY( "chargen", 0, charlayout, 0, 16 )
- GFXDECODE_ENTRY( "chargen", 0, spritelayout, 0, 16 )
+static GFXDECODE_START(gfx_mrgame)
+ GFXDECODE_ENTRY("chargen", 0, charlayout, 0, 16)
+ GFXDECODE_ENTRY("chargen", 0, spritelayout, 0, 16)
GFXDECODE_END
-PALETTE_INIT_MEMBER( mrgame_state, mrgame)
+PALETTE_INIT_MEMBER(mrgame_state, mrgame)
{
static const int resistances[3] = { 1000, 470, 220 };
double rweights[3], gweights[3], bweights[2];
@@ -479,31 +535,43 @@ uint32_t mrgame_state::screen_update_mrgame(screen_device &screen, bitmap_ind16
MACHINE_CONFIG_START(mrgame_state::mrgame)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(6'000'000))
+ MCFG_DEVICE_ADD("maincpu", M68000, 6_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(main_map)
MCFG_DEVICE_PERIODIC_INT_DRIVER(mrgame_state, irq1_line_hold, 183)
- MCFG_DEVICE_ADD("videocpu", Z80, XTAL(18'432'000)/6)
+
+ MCFG_DEVICE_ADD("videocpu", Z80, 18.432_MHz_XTAL / 6)
MCFG_DEVICE_PROGRAM_MAP(video_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", mrgame_state, nmi_line_pulse)
- MCFG_DEVICE_ADD("audiocpu1", Z80, XTAL(4'000'000))
+
+ MCFG_DEVICE_ADD("audiocpu1", Z80, 4_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(audio1_map)
MCFG_DEVICE_IO_MAP(audio1_io)
- MCFG_DEVICE_ADD("audiocpu2", Z80, XTAL(4'000'000))
+
+ MCFG_DEVICE_ADD("audiocpu2", Z80, 4_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(audio2_map)
MCFG_DEVICE_IO_MAP(audio2_io)
- MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_NVRAM_ADD_0FILL("nvram") // 5564 (x2) + battery
+
+ ls259_device &select(LS259(config, "selectlatch")); // 5B
+ select.q_out_cb<0>().set(FUNC(mrgame_state::video_a11_w));
+ select.q_out_cb<1>().set(FUNC(mrgame_state::nmi_intst_w));
+ select.q_out_cb<3>().set(FUNC(mrgame_state::video_a12_w));
+ select.q_out_cb<4>().set(FUNC(mrgame_state::video_a13_w));
+ select.q_out_cb<6>().set(FUNC(mrgame_state::flip_w));
+
+ //watchdog_timer_device &watchdog(WATCHDOG_TIMER(config, "watchdog")); // LS393 at 5D (video board) driven by VBLANK
+ //watchdog.set_vblank_count("screen", 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(256, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 8, 247) // If you align with X on test screen some info is chopped off
+ MCFG_SCREEN_RAW_PARAMS(18.432_MHz_XTAL / 3, 384, 0, 256, 264, 8, 248) // If you align with X on test screen some info is chopped off
MCFG_SCREEN_UPDATE_DRIVER(mrgame_state, screen_update_mrgame)
MCFG_SCREEN_PALETTE("palette")
+ MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, mrgame_state, vblank_nmi_w))
+
MCFG_PALETTE_ADD("palette", 64)
MCFG_PALETTE_INIT_OWNER(mrgame_state, mrgame)
+
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_mrgame)
/* Sound */
@@ -530,6 +598,19 @@ MACHINE_CONFIG_START(mrgame_state::mrgame)
MCFG_I8255_IN_PORTC_CB(READ8(*this, mrgame_state, portc_r))
MACHINE_CONFIG_END
+MACHINE_CONFIG_START(mrgame_state::wcup90)
+ mrgame(config);
+
+ MCFG_DEVICE_MODIFY("videocpu")
+ MCFG_DEVICE_PROGRAM_MAP(wcup90_video_map)
+
+ MCFG_DEVICE_MODIFY("selectlatch") // U48
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, mrgame_state, intst_w))
+
+ MCFG_DEVICE_MODIFY("screen")
+ MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, mrgame_state, vblank_int_w))
+MACHINE_CONFIG_END
+
/*-------------------------------------------------------------------
/ Dakar (06/1988)
/-------------------------------------------------------------------*/
@@ -538,14 +619,14 @@ ROM_START(dakar)
ROM_LOAD16_BYTE("cpu_ic13.rom", 0x000001, 0x8000, CRC(83183929) SHA1(977ac10a1e78c759eb0550794f2639fe0e2d1507))
ROM_LOAD16_BYTE("cpu_ic14.rom", 0x000000, 0x8000, CRC(2010d28d) SHA1(d262dabd9298566df43df298cf71c974bee1434a))
- ROM_REGION(0x10000, "video", 0)
- ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(88a9ca81) SHA1(9660d416b2b8f1937cda7bca51bd287641c7730c))
+ ROM_REGION(0x8000, "video", 0)
+ ROM_LOAD("vid_ic14.rom", 0x0000, 0x8000, CRC(88a9ca81) SHA1(9660d416b2b8f1937cda7bca51bd287641c7730c))
- ROM_REGION( 0x10000, "chargen", 0 )
+ ROM_REGION(0x10000, "chargen", 0)
ROM_LOAD("vid_ic55.rom", 0x0000, 0x8000, CRC(3c68b448) SHA1(f416f00d2de0c71c021fec0e9702ba79b761d5e7))
ROM_LOAD("vid_ic56.rom", 0x8000, 0x8000, CRC(0aac43e9) SHA1(28edfeddb2d54e40425488bad37e3819e4488b0b))
- ROM_REGION( 0x0020, "proms", 0 )
+ ROM_REGION(0x0020, "proms", 0)
ROM_LOAD("vid_ic66.rom", 0x0000, 0x0020, CRC(c8269b27) SHA1(daa83bfdb1e255b846bbade7f200abeaa9399c06))
ROM_REGION(0x10000, "audio1", 0)
@@ -568,14 +649,14 @@ ROM_START(motrshow)
ROM_LOAD16_BYTE("cpu_ic13.rom", 0x000001, 0x8000, CRC(e862ca71) SHA1(b02e5f39f9427d58b70b7999a5ff6075beff05ae))
ROM_LOAD16_BYTE("cpu_ic14.rom", 0x000000, 0x8000, CRC(c898ae25) SHA1(f0e1369284a1e0f394f1d40281fd46252016602e))
- ROM_REGION(0x10000, "video", 0)
- ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(1d4568e2) SHA1(bfc2bb59708ce3a09f9a1b3460ed8d5269840c97))
+ ROM_REGION(0x8000, "video", 0)
+ ROM_LOAD("vid_ic14.rom", 0x0000, 0x8000, CRC(1d4568e2) SHA1(bfc2bb59708ce3a09f9a1b3460ed8d5269840c97))
- ROM_REGION( 0x10000, "chargen", 0 )
+ ROM_REGION(0x10000, "chargen", 0)
ROM_LOAD("vid_ic55.rom", 0x0000, 0x8000, CRC(c27a4ded) SHA1(9c2c9b17f1e71afb74bdfbdcbabb99ef935d32db))
ROM_LOAD("vid_ic56.rom", 0x8000, 0x8000, CRC(1664ec8d) SHA1(e7b15acdac7dfc51b668e908ca95f02a2b569737))
- ROM_REGION( 0x0020, "proms", 0 )
+ ROM_REGION(0x0020, "proms", 0)
ROM_LOAD("vid_ic66.rom", 0x0000, 0x0020, CRC(5b585252) SHA1(b88e56ebdce2c3a4b170aff4b05018e7c21a79b8))
ROM_REGION(0x10000, "audio1", 0)
@@ -594,14 +675,14 @@ ROM_START(motrshowa)
ROM_LOAD16_BYTE("cpuic13a.rom", 0x000001, 0x8000, CRC(2dbdd9d4) SHA1(b404814a4e83ead6da3c57818ae97f23d380f9da))
ROM_LOAD16_BYTE("cpuic14b.rom", 0x000000, 0x8000, CRC(0bd98fec) SHA1(b90a7e997db59740398003ba94a69118b1ee70af))
- ROM_REGION(0x10000, "video", 0)
- ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(1d4568e2) SHA1(bfc2bb59708ce3a09f9a1b3460ed8d5269840c97))
+ ROM_REGION(0x8000, "video", 0)
+ ROM_LOAD("vid_ic14.rom", 0x0000, 0x8000, CRC(1d4568e2) SHA1(bfc2bb59708ce3a09f9a1b3460ed8d5269840c97))
- ROM_REGION( 0x10000, "chargen", 0 )
+ ROM_REGION(0x10000, "chargen", 0)
ROM_LOAD("vid_ic55.rom", 0x0000, 0x8000, CRC(c27a4ded) SHA1(9c2c9b17f1e71afb74bdfbdcbabb99ef935d32db))
ROM_LOAD("vid_ic56.rom", 0x8000, 0x8000, CRC(1664ec8d) SHA1(e7b15acdac7dfc51b668e908ca95f02a2b569737))
- ROM_REGION( 0x0020, "proms", 0 )
+ ROM_REGION(0x0020, "proms", 0)
ROM_LOAD("vid_ic66.rom", 0x0000, 0x0020, CRC(5b585252) SHA1(b88e56ebdce2c3a4b170aff4b05018e7c21a79b8))
ROM_REGION(0x10000, "audio1", 0)
@@ -623,17 +704,17 @@ ROM_START(macattck)
ROM_LOAD16_BYTE("cpu_ic13.rom", 0x000001, 0x8000, NO_DUMP)
ROM_LOAD16_BYTE("cpu_ic14.rom", 0x000000, 0x8000, NO_DUMP)
- ROM_REGION(0x10000, "video", 0)
- ROM_LOAD("vid_ic91.rom", 0x00000, 0x8000, CRC(42d2ba01) SHA1(c13d38c2798575760461912cef65dde57dfd938c))
+ ROM_REGION(0x8000, "video", 0)
+ ROM_LOAD("vid_ic91.rom", 0x0000, 0x8000, CRC(42d2ba01) SHA1(c13d38c2798575760461912cef65dde57dfd938c))
- ROM_REGION( 0x30000, "chargen", 0 )
+ ROM_REGION(0x30000, "chargen", 0)
ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(f6e047fb) SHA1(6be712dda60257b9e7014315c8fee19812622bf6))
ROM_LOAD("vid_ic15.rom", 0x08000, 0x8000, CRC(405a8f54) SHA1(4d58915763db3c3be2bfc166be1a12285ff2c38b))
ROM_LOAD("vid_ic16.rom", 0x10000, 0x8000, CRC(063ea783) SHA1(385dbfcc8ecd3a784f9a8752d00e060b48d70d6a))
ROM_LOAD("vid_ic17.rom", 0x18000, 0x8000, CRC(9f95abf8) SHA1(d71cf36c8bf27ad41b2d3cebd0af620a34ce0062) BAD_DUMP)
ROM_LOAD("vid_ic18.rom", 0x20000, 0x8000, CRC(83ef25f8) SHA1(bab482badb8646b099dbb197ca9af3a126b274e3))
- ROM_REGION( 0x0020, "proms", 0 )
+ ROM_REGION(0x0020, "proms", 0)
ROM_LOAD("vid_ic61.rom", 0x0000, 0x0020, CRC(538c72ae) SHA1(f704492568257fcc4a4f1189207c6fb6526eb81c) BAD_DUMP)
ROM_REGION(0x10000, "audio1", 0)
@@ -655,17 +736,17 @@ ROM_START(wcup90)
ROM_LOAD16_BYTE("cpu_ic13.rom", 0x000001, 0x8000, CRC(0e2edfb0) SHA1(862fb1f6509fb1f560d0b2bb8a5764f64b259f04))
ROM_LOAD16_BYTE("cpu_ic14.rom", 0x000000, 0x8000, CRC(fdd03165) SHA1(6dc6e68197218f8808436098c26cd04fc3215b1c))
- ROM_REGION(0x10000, "video", 0)
- ROM_LOAD("vid_ic91.rom", 0x00000, 0x8000, CRC(3287ad20) SHA1(d5a453efc7292670073f157dca04897be857b8ed))
+ ROM_REGION(0x8000, "video", 0)
+ ROM_LOAD("vid_ic91.rom", 0x0000, 0x8000, CRC(3287ad20) SHA1(d5a453efc7292670073f157dca04897be857b8ed))
- ROM_REGION( 0x30000, "chargen", 0 )
+ ROM_REGION(0x30000, "chargen", 0)
ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(a101d562) SHA1(ad9ad3968f13169572ec60e22e84acf43382b51e))
ROM_LOAD("vid_ic15.rom", 0x08000, 0x8000, CRC(40791e7a) SHA1(788760b8527df48d1825be88099491b6e94f0a19))
ROM_LOAD("vid_ic16.rom", 0x10000, 0x8000, CRC(a7214157) SHA1(a4660180e8491a37028fec8533cf13daf839a7c4))
ROM_LOAD("vid_ic17.rom", 0x18000, 0x8000, CRC(caf4fb04) SHA1(81784a4dc7c671090cf39cafa7d34a6b34523168))
ROM_LOAD("vid_ic18.rom", 0x20000, 0x8000, CRC(83ad2a10) SHA1(37664e5872e6322ee6bb61ec9385876626598152))
- ROM_REGION( 0x0020, "proms", 0 )
+ ROM_REGION(0x0020, "proms", 0)
ROM_LOAD("vid_ic61.rom", 0x0000, 0x0020, CRC(538c72ae) SHA1(f704492568257fcc4a4f1189207c6fb6526eb81c))
ROM_REGION(0x10000, "audio1", 0)
@@ -686,5 +767,5 @@ ROM_END
GAME(1988, dakar, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Dakar", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME(1989, motrshow, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Motor Show (set 1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME(1989, motrshowa, motrshow, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Motor Show (set 2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-GAME(1990, macattck, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Mac Attack", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1990, wcup90, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "World Cup 90", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1990, macattck, 0, wcup90, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Mac Attack", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1990, wcup90, 0, wcup90, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "World Cup 90", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/mstation.cpp b/src/mame/drivers/mstation.cpp
index 1bd1734bfbb..14fd5ad2c22 100644
--- a/src/mame/drivers/mstation.cpp
+++ b/src/mame/drivers/mstation.cpp
@@ -34,7 +34,6 @@
#include "machine/rp5c01.h"
#include "machine/timer.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
@@ -463,7 +462,6 @@ MACHINE_CONFIG_START(mstation_state::mstation)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(mstation_state, mstation)
- config.set_default_layout(layout_lcd);
MCFG_AMD_29F080_ADD("flash0")
MCFG_SST_28SF040_ADD("flash1")
diff --git a/src/mame/drivers/nakajies.cpp b/src/mame/drivers/nakajies.cpp
index 44ea42721c6..16015369b1f 100644
--- a/src/mame/drivers/nakajies.cpp
+++ b/src/mame/drivers/nakajies.cpp
@@ -277,7 +277,6 @@ disabled). Perhaps power on/off related??
#include "machine/timer.h"
#include "sound/spkrdev.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -289,9 +288,10 @@ class nakajies_state : public driver_device
{
public:
nakajies_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "v20hl")
- {}
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "v20hl")
+ {
+ }
void nakajies210(machine_config &config);
void nakajies220(machine_config &config);
@@ -763,7 +763,6 @@ MACHINE_CONFIG_START(nakajies_state::nakajies210)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_wales210)
MCFG_PALETTE_ADD( "palette", 2 )
MCFG_PALETTE_INIT_OWNER(nakajies_state, nakajies)
- config.set_default_layout(layout_lcd);
/* sound */
SPEAKER(config, "mono").front_center();
diff --git a/src/mame/drivers/nbmj8688.cpp b/src/mame/drivers/nbmj8688.cpp
index 95e7fd95c28..e76db1c9774 100644
--- a/src/mame/drivers/nbmj8688.cpp
+++ b/src/mame/drivers/nbmj8688.cpp
@@ -2647,23 +2647,27 @@ MACHINE_CONFIG_START(nbmj8688_state::mbmj_p16bit_LCD)
MCFG_PALETTE_ADD("palette_lcd", 2)
MCFG_PALETTE_INIT_OWNER(nbmj8688_state,mbmj8688_lcd)
- MCFG_SCREEN_ADD("lcd0", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(480, 64)
- MCFG_SCREEN_VISIBLE_AREA(0, 480-1, 0, 64-1)
- MCFG_SCREEN_UPDATE_DEVICE("lcdc0", hd61830_device, screen_update)
- MCFG_SCREEN_PALETTE("palette_lcd")
+ screen_device &lcd0(SCREEN(config, "lcd0", SCREEN_TYPE_LCD));
+ lcd0.set_physical_aspect(15, 3);
+ lcd0.set_orientation(ROT180);
+ lcd0.set_refresh_hz(60);
+ lcd0.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ lcd0.set_size(480, 64);
+ lcd0.set_visarea(0, 480-1, 0, 64-1);
+ lcd0.set_screen_update("lcdc0", FUNC(hd61830_device::screen_update));
+ lcd0.set_palette("palette_lcd");
MCFG_DEVICE_ADD("lcdc0", HD61830B, 5000000/2) // ???
MCFG_VIDEO_SET_SCREEN("lcd0")
- MCFG_SCREEN_ADD("lcd1", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(480, 64)
- MCFG_SCREEN_VISIBLE_AREA(0, 480-1, 0, 64-1)
- MCFG_SCREEN_UPDATE_DEVICE("lcdc1", hd61830_device, screen_update)
- MCFG_SCREEN_PALETTE("palette_lcd")
+ screen_device &lcd1(SCREEN(config, "lcd1", SCREEN_TYPE_LCD));
+ lcd1.set_physical_aspect(15, 3);
+ lcd1.set_orientation(ROT180);
+ lcd1.set_refresh_hz(60);
+ lcd1.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ lcd1.set_size(480, 64);
+ lcd1.set_visarea(0, 480-1, 0, 64-1);
+ lcd1.set_screen_update("lcdc1", FUNC(hd61830_device::screen_update));
+ lcd1.set_palette("palette_lcd");
MCFG_DEVICE_ADD("lcdc1", HD61830B, 5000000/2) // ???
MCFG_VIDEO_SET_SCREEN("lcd1")
diff --git a/src/mame/drivers/nc.cpp b/src/mame/drivers/nc.cpp
index e4bdc34ca76..2e9c9ee223c 100644
--- a/src/mame/drivers/nc.cpp
+++ b/src/mame/drivers/nc.cpp
@@ -102,7 +102,6 @@
#include "machine/mc146818.h" // for NC200 real time clock
#include "machine/rp5c01.h" // for NC100 real time clock
#include "formats/pc_dsk.h" // for NC200 disk image
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -1393,8 +1392,6 @@ MACHINE_CONFIG_START(nc_state::nc_base)
MCFG_PALETTE_ADD("palette", NC_NUM_COLOURS)
MCFG_PALETTE_INIT_OWNER(nc_state, nc)
- config.set_default_layout(layout_lcd);
-
/* sound hardware */
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("beep.1", BEEP, 0)
diff --git a/src/mame/drivers/ngp.cpp b/src/mame/drivers/ngp.cpp
index b926a156ff0..e2be1d57e41 100644
--- a/src/mame/drivers/ngp.cpp
+++ b/src/mame/drivers/ngp.cpp
@@ -106,7 +106,6 @@ the Neogeo Pocket.
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "video/k1ge.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -842,8 +841,6 @@ MACHINE_CONFIG_START(ngp_state::ngp_common)
MCFG_SCREEN_RAW_PARAMS( 6.144_MHz_XTAL, 515, 0, 160 /*480*/, 199, 0, 152 )
MCFG_SCREEN_UPDATE_DRIVER(ngp_state, screen_update_ngp)
- config.set_default_layout(layout_lcd);
-
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/drivers/notetaker.cpp b/src/mame/drivers/notetaker.cpp
index fea32461bd9..34a0ba61357 100644
--- a/src/mame/drivers/notetaker.cpp
+++ b/src/mame/drivers/notetaker.cpp
@@ -846,13 +846,15 @@ MACHINE_CONFIG_START(notetaker_state::notetakr)
MCFG_TMS9927_VSYN_CALLBACK(WRITELINE("iop_pic8259", pic8259_device, ir4_w)) // note this triggers interrupts on both the iop (ir7) and emulatorcpu (ir4)
MCFG_VIDEO_SET_SCREEN("screen")
- MCFG_DEVICE_ADD( "kbduart", AY31015, 0 ) // HD6402, == AY-3-1015D
- MCFG_AY31015_RX_CLOCK(960_kHz_XTAL) // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
- MCFG_AY31015_TX_CLOCK(960_kHz_XTAL) // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
-
- MCFG_DEVICE_ADD( "eiauart", AY31015, 0 ) // HD6402, == AY-3-1015D
- MCFG_AY31015_RX_CLOCK(((960_kHz_XTAL/10)/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
- MCFG_AY31015_TX_CLOCK(((960_kHz_XTAL/10)/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
+ AY31015(config, m_kbduart, 0); // HD6402, == AY-3-1015D
+ m_kbduart->set_rx_clock(960_kHz_XTAL); // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
+ m_kbduart->set_tx_clock(960_kHz_XTAL); // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
+ m_kbduart->write_dav_callback().set("iop_pic8259", FUNC(pic8259_device::ir6_w)); // DataRecvd = KbdInt
+
+ AY31015(config, m_eiauart, 0); // HD6402, == AY-3-1015D
+ m_eiauart->set_rx_clock(((960_kHz_XTAL/10)/4)/5); // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
+ m_eiauart->set_tx_clock(((960_kHz_XTAL/10)/4)/5); // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
+ m_eiauart->write_dav_callback().set("iop_pic8259", FUNC(pic8259_device::ir3_w)); // EIADataReady = EIAInt
/* Floppy */
MCFG_DEVICE_ADD("wd1791", FD1791, (((24_MHz_XTAL/3)/2)/2)) // 2mhz, from 24mhz ip clock divided by 6 via 8284, an additional 2 by LS161 at #e1 on display/floppy board
diff --git a/src/mame/drivers/osbexec.cpp b/src/mame/drivers/osbexec.cpp
index 6cd100a9f19..6acb93a6a06 100644
--- a/src/mame/drivers/osbexec.cpp
+++ b/src/mame/drivers/osbexec.cpp
@@ -15,6 +15,7 @@
#include "machine/input_merger.h"
#include "machine/pit8253.h"
#include "machine/ram.h"
+#include "machine/ripple_counter.h"
#include "machine/wd_fdc.h"
#include "machine/z80sio.h"
#include "sound/spkrdev.h"
@@ -40,12 +41,12 @@ public:
, m_screen(*this, "screen")
, m_mb8877(*this, "mb8877")
, m_messram( *this, RAM_TAG)
- , m_pia_0(*this, "pia_0")
- , m_pia_1(*this, "pia_1")
+ , m_pia(*this, "pia_%u", 0U)
+ , m_rtc(*this, "rtc")
, m_sio(*this, "sio")
, m_speaker(*this, "speaker")
- , m_floppy0(*this, "mb8877:0:525ssdd")
- , m_floppy1(*this, "mb8877:1:525ssdd")
+ , m_floppy(*this, "mb8877:%u:525ssdd", 0U)
+ , m_kbd_row(*this, "ROW%u", 0U)
{ }
void osbexec(machine_config &config);
@@ -57,12 +58,12 @@ private:
required_device<screen_device> m_screen;
required_device<mb8877_device> m_mb8877;
required_device<ram_device> m_messram;
- required_device<pia6821_device> m_pia_0;
- required_device<pia6821_device> m_pia_1;
+ required_device_array<pia6821_device, 2> m_pia;
+ required_device<ripple_counter_device> m_rtc;
required_device<z80sio_device> m_sio;
required_device<speaker_sound_device> m_speaker;
- required_device<floppy_image_device> m_floppy0;
- required_device<floppy_image_device> m_floppy1;
+ required_device_array<floppy_image_device, 2> m_floppy;
+ required_ioport_array<8> m_kbd_row;
virtual void video_start() override;
@@ -70,10 +71,8 @@ private:
bitmap_ind16 m_bitmap;
- memory_region *m_fontram_region;
- memory_region *m_vram_region;
- uint8_t *m_fontram;
- uint8_t *m_vram;
+ std::unique_ptr<uint8_t[]> m_fontram;
+ std::unique_ptr<uint8_t[]> m_vram;
uint8_t *m_ram_0000;
uint8_t *m_ram_c000;
uint8_t m_temp_attr;
@@ -86,9 +85,6 @@ private:
/* PIA 1 (UD8) */
- /* Vblank counter ("RTC") */
- uint8_t m_rtc;
-
void set_banks()
{
uint8_t *ram_ptr = m_messram->pointer();
@@ -112,7 +108,7 @@ private:
}
if ( m_pia0_porta & 0x40 )
- m_ram_c000 = m_vram_region->base();
+ m_ram_c000 = m_vram.get();
}
DECLARE_WRITE8_MEMBER(osbexec_0000_w);
@@ -181,29 +177,9 @@ READ8_MEMBER(osbexec_state::osbexec_kbd_r)
{
uint8_t data = 0xFF;
- if ( offset & 0x0100 )
- data &= ioport( "ROW0" )->read();
-
- if ( offset & 0x0200 )
- data &= ioport( "ROW1" )->read();
-
- if ( offset & 0x0400 )
- data &= ioport( "ROW2" )->read();
-
- if ( offset & 0x0800 )
- data &= ioport( "ROW3" )->read();
-
- if ( offset & 0x1000 )
- data &= ioport( "ROW4" )->read();
-
- if ( offset & 0x2000 )
- data &= ioport( "ROW5" )->read();
-
- if ( offset & 0x4000 )
- data &= ioport( "ROW6" )->read();
-
- if ( offset & 0x8000 )
- data &= ioport( "ROW7" )->read();
+ for (int j = 0; j < 8; j++)
+ if (BIT(offset, j + 8))
+ data &= m_kbd_row[j]->read();
return data;
}
@@ -211,7 +187,8 @@ READ8_MEMBER(osbexec_state::osbexec_kbd_r)
READ8_MEMBER(osbexec_state::osbexec_rtc_r)
{
- return m_rtc;
+ // 74LS244 buffer @ UF13
+ return m_rtc->count();
}
@@ -229,11 +206,11 @@ void osbexec_state::osbexec_mem(address_map &map)
void osbexec_state::osbexec_io(address_map &map)
{
map.unmap_value_high();
- map(0x00, 0x03).mirror(0xff00).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* 6821 PIA @ UD12 */
+ map(0x00, 0x03).mirror(0xff00).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* 6821 PIA @ UD12 */
map(0x04, 0x07).mirror(0xff00).rw("ctc", FUNC(pit8253_device::read), FUNC(pit8253_device::write)); /* 8253 @UD1 */
map(0x08, 0x0B).mirror(0xff00).rw(m_mb8877, FUNC(wd_fdc_device_base::read), FUNC(wd_fdc_device_base::write)); /* MB8877 @ UB17 input clock = 1MHz */
map(0x0C, 0x0F).mirror(0xff00).rw(m_sio, FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w)); /* SIO @ UD4 */
- map(0x10, 0x13).mirror(0xff00).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* 6821 PIA @ UD8 */
+ map(0x10, 0x13).mirror(0xff00).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* 6821 PIA @ UD8 */
map(0x14, 0x17).select(0xff00).r(FUNC(osbexec_state::osbexec_kbd_r)); /* KBD */
map(0x18, 0x1b).mirror(0xff00).r(FUNC(osbexec_state::osbexec_rtc_r)); /* "RTC" @ UE13/UF13 */
/* ?? - vid ? */
@@ -395,12 +372,12 @@ WRITE8_MEMBER(osbexec_state::osbexec_pia0_b_w)
switch ( data & 0x06 )
{
case 0x02:
- m_mb8877->set_floppy(m_floppy1);
- m_floppy1->mon_w(0);
+ m_mb8877->set_floppy(m_floppy[1].target());
+ m_floppy[1]->mon_w(0);
break;
case 0x04:
- m_mb8877->set_floppy(m_floppy0);
- m_floppy0->mon_w(0);
+ m_mb8877->set_floppy(m_floppy[0].target());
+ m_floppy[0]->mon_w(0);
break;
default:
m_mb8877->set_floppy(nullptr);
@@ -426,40 +403,41 @@ WRITE_LINE_MEMBER(osbexec_state::osbexec_pia0_cb2_w)
WRITE_LINE_MEMBER(osbexec_state::modem_txclk_w)
{
if (BIT(m_pia0_portb, 5))
- m_sio->txca_w(!state);
+ m_sio->txca_w(state);
}
WRITE_LINE_MEMBER(osbexec_state::modem_rxclk_w)
{
if (BIT(m_pia0_portb, 4))
- m_sio->rxca_w(!state);
+ m_sio->rxca_w(state);
}
WRITE_LINE_MEMBER(osbexec_state::modem_dsr_w)
{
- m_pia0_portb &= 0xbf;
- if (!state)
+ if (state)
m_pia0_portb |= 0x40;
+ else
+ m_pia0_portb &= 0xbf;
}
WRITE_LINE_MEMBER(osbexec_state::modem_ri_w)
{
- m_pia0_portb &= 0x7f;
- if (!state)
+ if (state)
m_pia0_portb |= 0x80;
+ else
+ m_pia0_portb &= 0x7f;
}
WRITE_LINE_MEMBER(osbexec_state::comm_clk_a_w)
{
- //if (!BIT(m_pia0_portb, 5))
+ if (!BIT(m_pia0_portb, 5))
m_sio->txca_w(state);
- //if (!BIT(m_pia0_portb, 4))
+ if (!BIT(m_pia0_portb, 4))
m_sio->rxca_w(state);
- //m_modem->txclk_w(!state);
}
@@ -483,18 +461,6 @@ TIMER_CALLBACK_MEMBER(osbexec_state::osbexec_video_callback)
{
int y = m_screen->vpos();
- /* Start of frame */
- if ( y == 0 )
- {
- /* Clear CB1 on PIA @ UD12 */
- m_pia_0->cb1_w(0);
- }
- else if ( y == 240 )
- {
- /* Set CB1 on PIA @ UD12 */
- m_pia_0->cb1_w(1);
- m_rtc++;
- }
if ( y < 240 )
{
uint16_t row_addr = ( y / 10 ) * 128;
@@ -509,15 +475,15 @@ TIMER_CALLBACK_MEMBER(osbexec_state::osbexec_video_callback)
uint8_t font_bits = m_fontram[ ( ( attr & 0x10 ) ? 0x800 : 0 ) + ( ch & 0x7f ) * 16 + char_line ];
/* Check for underline */
- if ( ( attr & 0x40 ) && char_line == 9 )
+ if (BIT(attr, 6) && char_line == 9)
font_bits = 0xFF;
/* Check for blink */
- if ( ( attr & 0x20 ) && ( m_rtc & 0x10 ) )
+ if (BIT(attr, 5) && BIT(m_rtc->count(), 4))
font_bits = 0;
/* Check for inverse video */
- if ( ( ch & 0x80 ) && ! ( attr & 0x10 ) )
+ if (BIT(ch, 7) && !BIT(attr, 4))
font_bits ^= 0xFF;
for ( int b = 0; b < 8; b++ )
@@ -534,14 +500,8 @@ TIMER_CALLBACK_MEMBER(osbexec_state::osbexec_video_callback)
void osbexec_state::init_osbexec()
{
- m_fontram_region = machine().memory().region_alloc( "fontram", 0x1000, 1, ENDIANNESS_LITTLE);
- m_vram_region = machine().memory().region_alloc( "vram", 0x2000, 1, ENDIANNESS_LITTLE );
- m_vram = m_vram_region->base();
- m_fontram = m_fontram_region->base();
-
-
- memset( m_fontram, 0x00, 0x1000 );
- memset( m_vram, 0x00, 0x2000 );
+ m_vram = make_unique_clear<uint8_t[]>(0x2000);
+ m_fontram = make_unique_clear<uint8_t[]>(0x1000);
m_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(osbexec_state::osbexec_video_callback),this));
}
@@ -555,8 +515,6 @@ void osbexec_state::machine_reset()
m_video_timer->adjust( m_screen->time_until_pos( 0, 0 ) );
- m_rtc = 0;
-
// D0 cleared on interrupt acknowledge cycle by TTL gates at UC21 and UA18
m_maincpu->set_input_line_vector(0, 0xfe);
}
@@ -575,17 +533,21 @@ MACHINE_CONFIG_START(osbexec_state::osbexec)
MCFG_DEVICE_IO_MAP(osbexec_io)
MCFG_Z80_DAISY_CHAIN(osbexec_daisy_config)
- MCFG_SCREEN_ADD_MONOCHROME(m_screen, RASTER, rgb_t::green())
- MCFG_SCREEN_UPDATE_DRIVER(osbexec_state, screen_update)
- MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/2, 768, 0, 640, 260, 0, 240) /* May not be correct */
- MCFG_SCREEN_PALETTE("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_color(rgb_t::green());
+ m_screen->set_screen_update(FUNC(osbexec_state::screen_update));
+ m_screen->set_raw(MAIN_CLOCK/2, 768, 0, 640, 260, 0, 240); /* May not be correct */
+ m_screen->set_palette("palette");
+ m_screen->screen_vblank().set(m_pia[0], FUNC(pia6821_device::cb1_w));
+ m_screen->screen_vblank().append(m_rtc, FUNC(ripple_counter_device::clock_w)).invert();
+
MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD(m_speaker, SPEAKER_SOUND)
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
- MCFG_DEVICE_ADD(m_pia_0, PIA6821, 0)
+ MCFG_DEVICE_ADD(m_pia[0], PIA6821, 0)
MCFG_PIA_READPA_HANDLER(READ8(*this, osbexec_state, osbexec_pia0_a_r))
MCFG_PIA_READPB_HANDLER(READ8(*this, osbexec_state, osbexec_pia0_b_r))
MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, osbexec_state, osbexec_pia0_a_w))
@@ -595,43 +557,49 @@ MACHINE_CONFIG_START(osbexec_state::osbexec)
MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<0>))
MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<1>))
- MCFG_DEVICE_ADD(m_pia_1, PIA6821, 0)
+ MCFG_DEVICE_ADD(m_pia[1], PIA6821, 0)
MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<2>))
MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_device, in_w<3>))
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, 0);
+ RIPPLE_COUNTER(config, m_rtc); // 74LS393 @ UE13
+ m_rtc->set_stages(8); // two halves cascaded
+
Z80SIO(config, m_sio, MAIN_CLOCK/6);
- m_sio->out_txda_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_txd)).invert();
- m_sio->out_dtra_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_dtr)).invert();
- m_sio->out_rtsa_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_rts)).invert();
- m_sio->out_txdb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_txd)).invert();
- m_sio->out_dtrb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_dtr)).invert();
- m_sio->out_rtsb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_rts)).invert();
+ m_sio->out_txda_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_txd));
+ m_sio->out_dtra_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_dtr));
+ m_sio->out_rtsa_callback().set(MODEM_PORT_TAG, FUNC(rs232_port_device::write_rts));
+ m_sio->out_txdb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_txd));
+ m_sio->out_dtrb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_dtr));
+ m_sio->out_rtsb_callback().set(PRINTER_PORT_TAG, FUNC(rs232_port_device::write_rts));
m_sio->out_int_callback().set("mainirq", FUNC(input_merger_device::in_w<4>));
- MCFG_DEVICE_ADD("ctc", PIT8253, 0)
- MCFG_PIT8253_CLK0(MAIN_CLOCK / 13) // divided by 74S161 @ UC25
- MCFG_PIT8253_CLK1(MAIN_CLOCK / 13) // divided by 74S161 @ UC25
- MCFG_PIT8253_CLK2(MAIN_CLOCK / 12)
- MCFG_PIT8253_OUT0_HANDLER(WRITELINE(*this, osbexec_state, comm_clk_a_w))
- MCFG_PIT8253_OUT1_HANDLER(WRITELINE(m_sio, z80sio_device, rxtxcb_w))
- //MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, osbexec_state, spindle_clk_w))
+ pit8253_device &ctc(PIT8253(config, "ctc", 0));
+ ctc.set_clk<0>(MAIN_CLOCK / 13); // divided by 74S161 @ UC25
+ ctc.set_clk<1>(MAIN_CLOCK / 13); // divided by 74S161 @ UC25
+ ctc.set_clk<2>(MAIN_CLOCK / 12);
+ ctc.out_handler<0>().set(FUNC(osbexec_state::comm_clk_a_w));
+ ctc.out_handler<0>().append(MODEM_PORT_TAG, FUNC(rs232_port_device::write_etc));
+ ctc.out_handler<1>().set(m_sio, FUNC(z80sio_device::rxtxcb_w));
+ //ctc.out_handler<2>().set(FUNC(osbexec_state::spindle_clk_w));
rs232_port_device &modem_port(RS232_PORT(config, MODEM_PORT_TAG, default_rs232_devices, nullptr));
- modem_port.rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w)).invert();
- modem_port.dcd_handler().set(m_sio, FUNC(z80sio_device::dcda_w)).invert();
+ modem_port.rxd_handler().set(m_sio, FUNC(z80sio_device::rxa_w));
+ modem_port.dcd_handler().set(m_sio, FUNC(z80sio_device::dcda_w));
modem_port.dsr_handler().set(FUNC(osbexec_state::modem_dsr_w));
modem_port.ri_handler().set(FUNC(osbexec_state::modem_ri_w));
- modem_port.cts_handler().set(m_sio, FUNC(z80sio_device::ctsa_w)).invert();
+ modem_port.cts_handler().set(m_sio, FUNC(z80sio_device::ctsa_w));
+ modem_port.txc_handler().set(FUNC(osbexec_state::modem_txclk_w));
+ modem_port.rxc_handler().set(FUNC(osbexec_state::modem_rxclk_w));
rs232_port_device &printer_port(RS232_PORT(config, PRINTER_PORT_TAG, default_rs232_devices, nullptr));
- printer_port.rxd_handler().set(m_sio, FUNC(z80sio_device::rxb_w)).invert();
- printer_port.dcd_handler().set(m_sio, FUNC(z80sio_device::dcdb_w)).invert();
- printer_port.cts_handler().set(m_sio, FUNC(z80sio_device::ctsb_w)).invert();
+ printer_port.rxd_handler().set(m_sio, FUNC(z80sio_device::rxb_w));
+ printer_port.dcd_handler().set(m_sio, FUNC(z80sio_device::dcdb_w));
+ printer_port.cts_handler().set(m_sio, FUNC(z80sio_device::ctsb_w));
MCFG_DEVICE_ADD("mb8877", MB8877, MAIN_CLOCK/24)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(m_pia_1, pia6821_device, cb1_w))
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(m_pia[1], pia6821_device, cb1_w))
MCFG_FLOPPY_DRIVE_ADD("mb8877:0", osborne2_floppies, "525ssdd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("mb8877:1", osborne2_floppies, "525ssdd", floppy_image_device::default_floppy_formats)
diff --git a/src/mame/drivers/palm.cpp b/src/mame/drivers/palm.cpp
index fcb6fe5c4ce..27bb29208b3 100644
--- a/src/mame/drivers/palm.cpp
+++ b/src/mame/drivers/palm.cpp
@@ -18,7 +18,6 @@
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -27,15 +26,16 @@
class palm_state : public driver_device
{
public:
- palm_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ palm_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_lsi(*this, MC68328_TAG),
m_ram(*this, RAM_TAG),
m_io_penx(*this, "PENX"),
m_io_peny(*this, "PENY"),
m_io_penb(*this, "PENB"),
- m_io_portd(*this, "PORTD") { }
+ m_io_portd(*this, "PORTD")
+ { }
void palmiii(machine_config &config);
void pilot1k(machine_config &config);
@@ -188,7 +188,7 @@ MACHINE_CONFIG_START(palm_state::palm)
MCFG_QUANTUM_TIME( attotime::from_hz(60) )
- MCFG_SCREEN_ADD( "screen", RASTER )
+ MCFG_SCREEN_ADD( "screen", LCD )
MCFG_SCREEN_REFRESH_RATE( 60 )
MCFG_SCREEN_VBLANK_TIME( ATTOSECONDS_IN_USEC(1260) )
/* video hardware */
@@ -200,7 +200,6 @@ MACHINE_CONFIG_START(palm_state::palm)
MCFG_PALETTE_ADD( "palette", 2 )
MCFG_PALETTE_INIT_OWNER(palm_state, palm)
- config.set_default_layout(layout_lcd);
/* audio hardware */
SPEAKER(config, "speaker").front_center();
diff --git a/src/mame/drivers/palmz22.cpp b/src/mame/drivers/palmz22.cpp
index f6ed4ef927c..7701c59352a 100644
--- a/src/mame/drivers/palmz22.cpp
+++ b/src/mame/drivers/palmz22.cpp
@@ -67,7 +67,6 @@ end
#include "cpu/arm7/arm7.h"
#include "machine/s3c2410.h"
#include "machine/smartmed.h"
-#include "rendlay.h"
#include "screen.h"
#define PALM_Z22_BATTERY_LEVEL 75
@@ -78,10 +77,10 @@ class palmz22_state : public driver_device
{
public:
palmz22_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_s3c2410(*this, "s3c2410"),
- m_nand(*this, "nand")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_s3c2410(*this, "s3c2410")
+ , m_nand(*this, "nand")
{ }
DECLARE_INPUT_CHANGED_MEMBER(input_changed);
@@ -300,7 +299,6 @@ MACHINE_CONFIG_START(palmz22_state::palmz22)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(160, 160)
MCFG_SCREEN_VISIBLE_AREA(0, 160 - 1, 0, 160 - 1)
- config.set_default_layout(layout_lcd);
MCFG_SCREEN_UPDATE_DEVICE("s3c2410", s3c2410_device, screen_update)
diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp
index 57fce524b9a..f356aa8ee58 100644
--- a/src/mame/drivers/pasopia7.cpp
+++ b/src/mame/drivers/pasopia7.cpp
@@ -33,7 +33,6 @@
#include "video/mc6845.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -1011,8 +1010,6 @@ MACHINE_CONFIG_START(pasopia7_state::p7_lcd)
MCFG_MC6845_ADD("crtc", H46505, "screen", LCD_CLOCK) /* unknown clock, hand tuned to get ~60 fps */
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8)
-
- config.set_default_layout(layout_lcd);
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/pb1000.cpp b/src/mame/drivers/pb1000.cpp
index 09f50dee1bd..f55fbf99772 100644
--- a/src/mame/drivers/pb1000.cpp
+++ b/src/mame/drivers/pb1000.cpp
@@ -26,7 +26,6 @@
#include "video/hd44352.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -504,7 +503,6 @@ MACHINE_CONFIG_START(pb1000_state::pb1000)
MCFG_SCREEN_VISIBLE_AREA(0, 192-1, 0, 32-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pb1000_state, pb1000)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pb1000)
diff --git a/src/mame/drivers/pc2000.cpp b/src/mame/drivers/pc2000.cpp
index 159cd07f4fb..b55ea95f587 100644
--- a/src/mame/drivers/pc2000.cpp
+++ b/src/mame/drivers/pc2000.cpp
@@ -25,7 +25,6 @@
#include "bus/generic/carts.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -898,7 +897,6 @@ MACHINE_CONFIG_START(pc2000_state::pc2000)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pc2000_state, pc2000)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pc2000)
- config.set_default_layout(layout_lcd);
MCFG_HD44780_ADD("hd44780")
MCFG_HD44780_LCD_SIZE(2, 20)
diff --git a/src/mame/drivers/pc4.cpp b/src/mame/drivers/pc4.cpp
index e0a29cbd5ba..97bdfd88b83 100644
--- a/src/mame/drivers/pc4.cpp
+++ b/src/mame/drivers/pc4.cpp
@@ -30,7 +30,6 @@
#include "cpu/z80/z80.h"
#include "machine/rp5c01.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -232,7 +231,6 @@ MACHINE_CONFIG_START(pc4_state::pc4)
MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 36-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pc4_state, pc4)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pc4)
diff --git a/src/mame/drivers/pce220.cpp b/src/mame/drivers/pce220.cpp
index 2880970573a..bc907429e15 100644
--- a/src/mame/drivers/pce220.cpp
+++ b/src/mame/drivers/pce220.cpp
@@ -34,7 +34,6 @@
#include "machine/timer.h"
#include "sound/beep.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -962,7 +961,6 @@ MACHINE_CONFIG_START(pce220_state::pce220)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pce220_state,pce220)
- config.set_default_layout(layout_lcd);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -998,7 +996,6 @@ MACHINE_CONFIG_START(pcg850v_state::pcg815)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pce220_state,pce220)
- config.set_default_layout(layout_lcd);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -1034,7 +1031,6 @@ MACHINE_CONFIG_START(pcg850v_state::pcg850v)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pce220_state,pce220)
- config.set_default_layout(layout_lcd);
/* sound hardware */
SPEAKER(config, "mono").front_center();
diff --git a/src/mame/drivers/pda600.cpp b/src/mame/drivers/pda600.cpp
index 374eb596379..687cae1a2a7 100644
--- a/src/mame/drivers/pda600.cpp
+++ b/src/mame/drivers/pda600.cpp
@@ -60,7 +60,6 @@
#include "machine/nvram.h"
#include "machine/hd64610.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
@@ -68,9 +67,10 @@ class pda600_state : public driver_device
{
public:
pda600_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
- {}
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ {
+ }
void pda600(machine_config &config);
@@ -220,7 +220,6 @@ MACHINE_CONFIG_START(pda600_state::pda600)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pda600)
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD_MONOCHROME("palette")
// NVRAM needs to be filled with random data to fail the checksum and be initialized correctly
diff --git a/src/mame/drivers/pitagjr.cpp b/src/mame/drivers/pitagjr.cpp
index 29177c5665b..4f8b4cd7a3b 100644
--- a/src/mame/drivers/pitagjr.cpp
+++ b/src/mame/drivers/pitagjr.cpp
@@ -154,7 +154,6 @@
#include "cpu/m6805/m6805.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
@@ -222,8 +221,6 @@ MACHINE_CONFIG_START(pitagjr_state::pitajr)
MCFG_SCREEN_VISIBLE_AREA( 0, 200-1, 0, 100-1 )
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(pitagjr_state, pitagjr)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/pofo.cpp b/src/mame/drivers/pofo.cpp
index 166207bce87..8e91648b6e8 100644
--- a/src/mame/drivers/pofo.cpp
+++ b/src/mame/drivers/pofo.cpp
@@ -44,7 +44,6 @@
#include "video/hd61830.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -1031,8 +1030,6 @@ MACHINE_CONFIG_START(portfolio_state::portfolio)
MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 64-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(portfolio_state, portfolio)
diff --git a/src/mame/drivers/pokemini.cpp b/src/mame/drivers/pokemini.cpp
index 2699933d568..f5f6d2ba509 100644
--- a/src/mame/drivers/pokemini.cpp
+++ b/src/mame/drivers/pokemini.cpp
@@ -16,7 +16,6 @@ The LCD is likely to be a SSD1828 LCD.
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -1779,8 +1778,6 @@ MACHINE_CONFIG_START(pokemini_state::pokemini)
MCFG_SCREEN_REFRESH_RATE( 72 )
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 4)
MCFG_PALETTE_INIT_OWNER(pokemini_state, pokemini)
diff --git a/src/mame/drivers/popobear.cpp b/src/mame/drivers/popobear.cpp
index f973e7daa78..de8ae698ff4 100644
--- a/src/mame/drivers/popobear.cpp
+++ b/src/mame/drivers/popobear.cpp
@@ -414,7 +414,7 @@ uint32_t popobear_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
uint16_t val = m_vram[scrollbase/2 + line];
uint16_t upper = (m_vram[scrollbase2/2 + line]&0xff00)>>8;
- clip.min_y = clip.max_y = line;
+ clip.sety(line, line);
m_bg_tilemap[1]->set_scrollx(0,(val&0x00ff) | (upper << 8));
m_bg_tilemap[1]->set_scrolly(0,((val&0xff00)>>8)-line);
@@ -439,7 +439,7 @@ uint32_t popobear_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
uint16_t val = m_vram[scrollbase/2 + line];
uint16_t upper = (m_vram[scrollbase2/2 + line]&0x00ff)>>0;
- clip.min_y = clip.max_y = line;
+ clip.sety(line, line);
m_bg_tilemap[0]->set_scrollx(0,(val&0x00ff) | (upper << 8));
m_bg_tilemap[0]->set_scrolly(0,((val&0xff00)>>8)-line);
diff --git a/src/mame/drivers/prestige.cpp b/src/mame/drivers/prestige.cpp
index 39838a468d9..9430deca54a 100644
--- a/src/mame/drivers/prestige.cpp
+++ b/src/mame/drivers/prestige.cpp
@@ -87,7 +87,6 @@ Notes:
#include "bus/generic/carts.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
@@ -760,8 +759,6 @@ MACHINE_CONFIG_START(prestige_state::prestige_base)
MCFG_SCREEN_VISIBLE_AREA( 0, 240-1, 0, 100-1 )
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(prestige_state, prestige)
diff --git a/src/mame/drivers/psion.cpp b/src/mame/drivers/psion.cpp
index 41ebbdc07e7..638d993a902 100644
--- a/src/mame/drivers/psion.cpp
+++ b/src/mame/drivers/psion.cpp
@@ -23,7 +23,6 @@
#include "emu.h"
#include "includes/psion.h"
-#include "rendlay.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
@@ -583,7 +582,6 @@ MACHINE_CONFIG_START(psion_state::psion_2lines)
MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(psion_state, psion)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_psion)
diff --git a/src/mame/drivers/pulsar.cpp b/src/mame/drivers/pulsar.cpp
index 0f0f425da38..a6929df412e 100644
--- a/src/mame/drivers/pulsar.cpp
+++ b/src/mame/drivers/pulsar.cpp
@@ -16,7 +16,10 @@ The terminal must be set for 9600 baud, 7 bits, even parity, 1 stop bit.
ToDo:
-- Need software
+- Fix floppy. It needs to WAIT the cpu whenever port 0xD3 is read, wait
+ for either DRQ ir INTRQ to assert, then release the cpu and then do the
+ actual port read. Our Z80 cannot do that.
+- Fix FDC so MAME doesn't crash when a certain disk is inserted.
Monitor Commands:
@@ -71,8 +74,8 @@ private:
DECLARE_WRITE8_MEMBER(ppi_pc_w);
DECLARE_READ8_MEMBER(ppi_pc_r);
- void pulsar_io(address_map &map);
- void pulsar_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
floppy_image_device *m_floppy;
required_device<cpu_device> m_maincpu;
@@ -82,7 +85,7 @@ private:
required_device<msm5832_device> m_rtc;
};
-void pulsar_state::pulsar_mem(address_map &map)
+void pulsar_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).bankr("bankr0").bankw("bankw0");
@@ -90,7 +93,7 @@ void pulsar_state::pulsar_mem(address_map &map)
map(0xf800, 0xffff).bankr("bankr1").bankw("bankw1");
}
-void pulsar_state::pulsar_io(address_map &map)
+void pulsar_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -176,7 +179,7 @@ DEVICE_INPUT_DEFAULTS_END
static void pulsar_floppies(device_slot_interface &device)
{
- device.option_add("525hd", FLOPPY_525_HD);
+ device.option_add("flop", FLOPPY_8_DSDD);
}
/* Input ports */
@@ -209,8 +212,8 @@ void pulsar_state::init_pulsar()
MACHINE_CONFIG_START(pulsar_state::pulsar)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", Z80, 4_MHz_XTAL)
- MCFG_DEVICE_PROGRAM_MAP(pulsar_mem)
- MCFG_DEVICE_IO_MAP(pulsar_io)
+ MCFG_DEVICE_PROGRAM_MAP(mem_map)
+ MCFG_DEVICE_IO_MAP(io_map)
MCFG_Z80_DAISY_CHAIN(daisy_chain_intf)
MCFG_MACHINE_RESET_OVERRIDE(pulsar_state, pulsar)
@@ -242,9 +245,9 @@ MACHINE_CONFIG_START(pulsar_state::pulsar)
brg.ft_handler().append("dart", FUNC(z80dart_device::rxcb_w));
MCFG_DEVICE_ADD("fdc", FD1797, 4_MHz_XTAL / 2)
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", pulsar_floppies, "525hd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", pulsar_floppies, "flop", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(true)
- MCFG_FLOPPY_DRIVE_ADD("fdc:1", pulsar_floppies, "525hd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", pulsar_floppies, "flop", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(true)
MACHINE_CONFIG_END
@@ -252,9 +255,9 @@ MACHINE_CONFIG_END
ROM_START( pulsarlb )
ROM_REGION( 0x10800, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "mon7", "MP7A")
- ROMX_LOAD( "mp7a.bin", 0x10000, 0x800, CRC(726b8a19) SHA1(43b2af84d5622c1f67584c501b730acf002a6113), ROM_BIOS(0))
+ ROMX_LOAD( "mp7a.u2", 0x10000, 0x800, CRC(726b8a19) SHA1(43b2af84d5622c1f67584c501b730acf002a6113), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "mon6", "LBOOT6") // Blank screen until floppy boots
- ROMX_LOAD( "lboot6.rom", 0x10000, 0x800, CRC(3bca9096) SHA1(ff99288e51a9e832785ce8e3ab5a9452b1064231), ROM_BIOS(1))
+ ROMX_LOAD( "lboot6.u2", 0x10000, 0x800, CRC(3bca9096) SHA1(ff99288e51a9e832785ce8e3ab5a9452b1064231), ROM_BIOS(1))
ROM_END
/* Driver */
diff --git a/src/mame/drivers/replicator.cpp b/src/mame/drivers/replicator.cpp
index 7d18085be66..c54cef2f7ea 100644
--- a/src/mame/drivers/replicator.cpp
+++ b/src/mame/drivers/replicator.cpp
@@ -30,7 +30,6 @@
#include "sound/volt_reg.h"
#include "video/hd44780.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -637,7 +636,6 @@ MACHINE_CONFIG_START(replicator_state::replicator)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(replicator_state, replicator)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_replicator)
- config.set_default_layout(layout_lcd);
MCFG_HD44780_ADD("hd44780")
MCFG_HD44780_LCD_SIZE(4, 20)
diff --git a/src/mame/drivers/rex6000.cpp b/src/mame/drivers/rex6000.cpp
index c8999baed30..d084eb4f95b 100644
--- a/src/mame/drivers/rex6000.cpp
+++ b/src/mame/drivers/rex6000.cpp
@@ -38,7 +38,6 @@
#include "imagedev/snapquik.h"
#include "sound/beep.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -915,7 +914,6 @@ MACHINE_CONFIG_START(rex6000_state::rex6000)
MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 120-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(rex6000_state, rex6000)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_rex6000)
@@ -1005,7 +1003,6 @@ MACHINE_CONFIG_START(oz750_state::oz750)
MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 80-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(rex6000_state, rex6000)
diff --git a/src/mame/drivers/riscpc.cpp b/src/mame/drivers/riscpc.cpp
index 0ccd9663b15..b08056fdbfa 100644
--- a/src/mame/drivers/riscpc.cpp
+++ b/src/mame/drivers/riscpc.cpp
@@ -196,10 +196,11 @@ void riscpc_state::vidc20_dynamic_screen_change()
hblank_period = (m_vidc20_horz_reg[HCR] & 0x3ffc);
vblank_period = (m_vidc20_vert_reg[VCR] & 0x3fff);
/* note that we use the border registers as the visible area */
- visarea.min_x = (m_vidc20_horz_reg[HBSR] & 0x3ffe);
- visarea.max_x = (m_vidc20_horz_reg[HBER] & 0x3ffe)-1;
- visarea.min_y = (m_vidc20_vert_reg[VBSR] & 0x1fff);
- visarea.max_y = (m_vidc20_vert_reg[VBER] & 0x1fff)-1;
+ visarea.set(
+ (m_vidc20_horz_reg[HBSR] & 0x3ffe),
+ (m_vidc20_horz_reg[HBER] & 0x3ffe) - 1,
+ (m_vidc20_vert_reg[VBSR] & 0x1fff),
+ (m_vidc20_vert_reg[VBER] & 0x1fff) - 1);
m_screen->configure(hblank_period, vblank_period, visarea, m_screen->frame_period().attoseconds() );
logerror("VIDC20: successfully changed the screen to:\n Display Size = %d x %d\n Border Size %d x %d\n Cycle Period %d x %d\n",
diff --git a/src/mame/drivers/sbrkout.cpp b/src/mame/drivers/sbrkout.cpp
index a4f68428d88..3ad241a169a 100644
--- a/src/mame/drivers/sbrkout.cpp
+++ b/src/mame/drivers/sbrkout.cpp
@@ -182,7 +182,7 @@ TIMER_CALLBACK_MEMBER(sbrkout_state::scanline_callback)
m_dac->write((videoram[0x380 + 0x11] & (scanline >> 2)) != 0);
/* on the VBLANK, read the pot and schedule an interrupt time for it */
- if (scanline == m_screen->visible_area().max_y + 1)
+ if (scanline == m_screen->visible_area().bottom() + 1)
{
uint8_t potvalue = ioport("PADDLE")->read();
m_pot_timer->adjust(m_screen->time_until_pos(56 + (potvalue / 2), (potvalue % 2) * 128));
@@ -322,7 +322,7 @@ WRITE_LINE_MEMBER(sbrkout_state::coincount_w)
READ8_MEMBER(sbrkout_state::sync_r)
{
int hpos = m_screen->hpos();
- m_sync2_value = (hpos >= 128 && hpos <= m_screen->visible_area().max_x);
+ m_sync2_value = (hpos >= 128 && hpos <= m_screen->visible_area().right());
return m_screen->vpos();
}
diff --git a/src/mame/drivers/slicer.cpp b/src/mame/drivers/slicer.cpp
index 1aba773c3c2..1094b65dcc9 100644
--- a/src/mame/drivers/slicer.cpp
+++ b/src/mame/drivers/slicer.cpp
@@ -28,6 +28,7 @@ public:
private:
DECLARE_WRITE8_MEMBER(sio_out_w);
+ DECLARE_WRITE_LINE_MEMBER(drive_size_w);
template<unsigned int drive> DECLARE_WRITE_LINE_MEMBER(drive_sel_w);
void slicer_io(address_map &map);
@@ -66,6 +67,11 @@ WRITE_LINE_MEMBER(slicer_state::drive_sel_w)
m_fdc->set_floppy(floppy);
}
+WRITE_LINE_MEMBER(slicer_state::drive_size_w)
+{
+ m_fdc->set_unscaled_clock (state ? 1'000'000 : 2'000'000);
+}
+
void slicer_state::slicer_map(address_map &map)
{
map(0x00000, 0x3ffff).ram(); // fixed 256k for now
@@ -77,7 +83,7 @@ void slicer_state::slicer_io(address_map &map)
map.unmap_value_high();
map(0x0000, 0x007f).rw(m_fdc, FUNC(fd1797_device::read), FUNC(fd1797_device::write)).umask16(0x00ff); //PCS0
map(0x0080, 0x00ff).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask16(0x00ff); //PCS1
- map(0x0100, 0x0107).mirror(0x0078).w("drivelatch", FUNC(ls259_device::write_d0)).umask16(0x00ff); //PCS2
+ map(0x0100, 0x010f).mirror(0x0070).w("drivelatch", FUNC(ls259_device::write_d0)).umask16(0x00ff); //PCS2
// TODO: 0x180 sets ack
map(0x0180, 0x0180).r("sasi_data_in", FUNC(input_buffer_device::bus_r)).w("sasi_data_out", FUNC(output_latch_device::bus_w)).umask16(0x00ff); //PCS3
map(0x0181, 0x0181).r("sasi_ctrl_in", FUNC(input_buffer_device::bus_r));
@@ -122,6 +128,7 @@ MACHINE_CONFIG_START(slicer_state::slicer)
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, slicer_state, drive_sel_w<2>))
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, slicer_state, drive_sel_w<1>))
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, slicer_state, drive_sel_w<0>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, slicer_state, drive_size_w))
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE("fdc", fd1797_device, dden_w))
MCFG_DEVICE_ADD("sasi", SCSI_PORT, 0)
diff --git a/src/mame/drivers/super6.cpp b/src/mame/drivers/super6.cpp
index 69a284b8ce5..8fa0153a9c3 100644
--- a/src/mame/drivers/super6.cpp
+++ b/src/mame/drivers/super6.cpp
@@ -2,12 +2,20 @@
// copyright-holders:Curt Coder
/*
- TODO:
- - floppy (cannot be implemented currently since this is another case of halting the cpu mid-instruction)
- - interrupts
- - DMA
- - peripheral interfaces
+ToDo:
+- peripheral interfaces
+
+- Fix floppy. It needs to WAIT the cpu whenever port 0x14 is read, wait
+ for either DRQ ir INTRQ to assert, then release the cpu and then do the
+ actual port read. Our Z80 cannot do that.
+ The schematic isn't clear, but it seems the 2 halves of U16 (as shown) have
+ a common element, so that activity on one side can affect what happens on
+ the other side.
+ If you uncomment the line in fdc_intrq_w, and change the BOGUSWAIT to WAIT
+ in fdc_r, then load up the cpm disk (from software list), it will read the
+ CP/M boot track into memory and attempt to run it. However, it has an issue
+ and returns to the monitor. The other disks are useless.
*/
@@ -193,11 +201,9 @@ READ8_MEMBER( super6_state::fdc_r )
*/
- // don't crash please... but it's true, WAIT does nothing in our Z80
- //fatalerror("Z80 WAIT not supported by MAME core\n");
m_maincpu->set_input_line(Z80_INPUT_LINE_BOGUSWAIT, ASSERT_LINE);
- return !m_fdc->intrq_r() << 7;
+ return m_fdc->intrq_r() ? 0x7f : 0xff;
}
@@ -224,21 +230,24 @@ WRITE8_MEMBER( super6_state::fdc_w )
*/
// disk drive select
- floppy_image_device *m_floppy = nullptr;
+ floppy_image_device *floppy = nullptr;
if ((data & 3) == 0)
- m_floppy = m_floppy0->get_device();
+ floppy = m_floppy0->get_device();
if ((data & 3) == 1)
- m_floppy = m_floppy1->get_device();
+ floppy = m_floppy1->get_device();
- m_fdc->set_floppy(m_floppy);
- if (m_floppy) m_floppy->mon_w(0);
+ m_fdc->set_floppy(floppy);
+ if (floppy) floppy->mon_w(0);
// head select
- if (m_floppy) m_floppy->ss_w(BIT(data, 2));
+ if (floppy) floppy->ss_w(BIT(data, 2));
// disk density
m_fdc->dden_w(!BIT(data, 3));
+
+ // disk size
+ m_fdc->set_unscaled_clock (BIT(data, 4) ? 1'000'000 : 2'000'000); // division occurs inside fdc depending on ENMF
}
@@ -263,6 +272,7 @@ void super6_state::super6_mem(address_map &map)
void super6_state::super6_io(address_map &map)
{
map.global_mask(0xff);
+ map.unmap_value_high();
map(0x00, 0x03).rw(m_dart, FUNC(z80dart_device::ba_cd_r), FUNC(z80dart_device::ba_cd_w));
map(0x04, 0x07).rw(m_pio, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
map(0x08, 0x0b).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
@@ -289,7 +299,7 @@ void super6_state::super6_io(address_map &map)
static INPUT_PORTS_START( super6 )
PORT_START("J7")
- PORT_DIPNAME( 0x0f, 0x0f, "SIO Channel A Baud Rate" ) PORT_DIPLOCATION("J7:1,2,3,4")
+ PORT_DIPNAME( 0x0f, 0x0e, "SIO Channel A Baud Rate" ) PORT_DIPLOCATION("J7:1,2,3,4")
PORT_DIPSETTING( 0x00, "50" )
PORT_DIPSETTING( 0x01, "75" )
PORT_DIPSETTING( 0x02, "110" )
@@ -330,11 +340,6 @@ INPUT_PORTS_END
// Z80CTC
//-------------------------------------------------
-TIMER_DEVICE_CALLBACK_MEMBER( super6_state::ctc_tick )
-{
- m_ctc->trg0(1);
- m_ctc->trg0(0);
-}
//-------------------------------------------------
// Z80DMA
@@ -376,14 +381,15 @@ static void super6_floppies(device_slot_interface &device)
WRITE_LINE_MEMBER( super6_state::fdc_intrq_w )
{
- if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_BOGUSWAIT, CLEAR_LINE);
+ if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE);
- m_ctc->trg3(!state);
+ m_ctc->trg3(state); // J6 pin 7-8
+ // m_maincpu->set_state_int(Z80_AF, 0x7f00); // hack, see notes
}
WRITE_LINE_MEMBER( super6_state::fdc_drq_w )
{
- if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_BOGUSWAIT, CLEAR_LINE);
+ if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE);
m_dma->rdy_w(state);
}
@@ -393,24 +399,14 @@ WRITE_LINE_MEMBER( super6_state::fdc_drq_w )
// z80_daisy_config super6_daisy_chain
//-------------------------------------------------
-static const z80_daisy_config super6_daisy_chain[] =
-{
- { Z80CTC_TAG },
- { Z80DART_TAG },
- { Z80PIO_TAG },
- { nullptr }
-};
-
-
-static DEVICE_INPUT_DEFAULTS_START( terminal )
- DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_19200 )
- DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_19200 )
- DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
- DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 )
- DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
- DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
-DEVICE_INPUT_DEFAULTS_END
-
+// no evidence of daisy chain in use - removed for now
+//static const z80_daisy_config super6_daisy_chain[] =
+//{
+// { Z80CTC_TAG },
+// { Z80DART_TAG },
+// { Z80PIO_TAG },
+// { nullptr }
+//};
//**************************************************************************
@@ -435,11 +431,6 @@ void super6_state::machine_reset()
m_bank0 = m_bank1 = 0;
bankswitch();
-
- uint8_t baud = m_j7->read();
-
- m_brg->write_str(baud & 0x0f);
- m_brg->write_stt((baud >> 4) & 0x07);
}
@@ -457,17 +448,19 @@ MACHINE_CONFIG_START(super6_state::super6)
MCFG_DEVICE_ADD(m_maincpu, Z80, 24_MHz_XTAL / 4)
MCFG_DEVICE_PROGRAM_MAP(super6_mem)
MCFG_DEVICE_IO_MAP(super6_io)
- MCFG_Z80_DAISY_CHAIN(super6_daisy_chain)
+ //MCFG_Z80_DAISY_CHAIN(super6_daisy_chain)
// devices
MCFG_DEVICE_ADD(m_ctc, Z80CTC, 24_MHz_XTAL / 4)
+ MCFG_Z80CTC_ZC0_CB(WRITELINE(m_ctc, z80ctc_device, trg1)) // J6 pin 2-3
MCFG_Z80CTC_INTR_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", super6_state, ctc_tick, attotime::from_hz(24_MHz_XTAL / 16))
+ clock_device &ctc_tick(CLOCK(config, "ctc_tick", 24_MHz_XTAL / 16));
+ ctc_tick.signal_handler().set(m_ctc, FUNC(z80ctc_device::trg0)); // J6 pin 1-14 (1.5MHz)
MCFG_DEVICE_ADD(m_dma, Z80DMA, 24_MHz_XTAL / 6)
- MCFG_Z80DMA_OUT_BUSREQ_CB(INPUTLINE(Z80_TAG, INPUT_LINE_HALT))
- MCFG_Z80DMA_OUT_INT_CB(WRITELINE(Z80CTC_TAG, z80ctc_device, trg2))
+ MCFG_Z80DMA_OUT_BUSREQ_CB(WRITELINE(m_dma, z80dma_device, bai_w))
+ MCFG_Z80DMA_OUT_INT_CB(WRITELINE(m_ctc, z80ctc_device, trg2))
MCFG_Z80DMA_IN_MREQ_CB(READ8(*this, super6_state, memory_read_byte))
MCFG_Z80DMA_OUT_MREQ_CB(WRITE8(*this, super6_state, memory_write_byte))
MCFG_Z80DMA_IN_IORQ_CB(READ8(*this, super6_state, io_read_byte))
@@ -476,12 +469,15 @@ MACHINE_CONFIG_START(super6_state::super6)
MCFG_DEVICE_ADD(m_pio, Z80PIO, 24_MHz_XTAL / 4)
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
- MCFG_DEVICE_ADD(WD2793_TAG, WD2793, 1000000)
+ MCFG_DEVICE_ADD(m_fdc, WD2793, 24_MHz_XTAL / 12)
+ MCFG_WD_FDC_FORCE_READY
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, super6_state, fdc_intrq_w))
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(*this, super6_state, fdc_drq_w))
MCFG_FLOPPY_DRIVE_ADD(m_floppy0, super6_floppies, "525dd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD(m_floppy1, super6_floppies, nullptr, floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_DEVICE_ADD(m_dart, Z80DART, 24_MHz_XTAL / 4)
MCFG_Z80DART_OUT_TXDA_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
@@ -494,7 +490,6 @@ MACHINE_CONFIG_START(super6_state::super6)
MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(WRITELINE(m_dart, z80dart_device, rxa_w))
- MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS("terminal", terminal)
MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(m_dart, z80dart_device, rxb_w))
diff --git a/src/mame/drivers/taito_f3.cpp b/src/mame/drivers/taito_f3.cpp
index a40b2c26d5a..46fdb820873 100644
--- a/src/mame/drivers/taito_f3.cpp
+++ b/src/mame/drivers/taito_f3.cpp
@@ -13,7 +13,6 @@
sprite sync fixes, sprite zoom fixes and others!
Other Issues:
- - ES5510 DSP isn't hooked up.
- Various hacks in video core that needs squashing;
- When playing space invaders dx in original mode, t.t. with overlay, the
alpha blending effect is wrong (see Taito B version of game)
diff --git a/src/mame/drivers/tetrisp2.cpp b/src/mame/drivers/tetrisp2.cpp
index 9363b3af5aa..d6cb166b29f 100644
--- a/src/mame/drivers/tetrisp2.cpp
+++ b/src/mame/drivers/tetrisp2.cpp
@@ -1856,19 +1856,21 @@ MACHINE_CONFIG_START(tetrisp2_state::rocknms)
config.set_default_layout(layout_rocknms);
- MCFG_SCREEN_ADD("lscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x140, 0xe0)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
- MCFG_SCREEN_UPDATE_DRIVER(tetrisp2_state, screen_update_rocknms_left)
-
- MCFG_SCREEN_ADD("rscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x140, 0xe0)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
- MCFG_SCREEN_UPDATE_DRIVER(tetrisp2_state, screen_update_rocknms_right)
+ screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
+ lscreen.set_orientation(ROT0);
+ lscreen.set_refresh_hz(60);
+ lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ lscreen.set_size(0x140, 0xe0);
+ lscreen.set_visarea(0, 0x140-1, 0, 0xe0-1);
+ lscreen.set_screen_update(FUNC(tetrisp2_state::screen_update_rocknms_left));
+
+ screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
+ rscreen.set_orientation(ROT270);
+ rscreen.set_refresh_hz(60);
+ rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ rscreen.set_size(0x140, 0xe0);
+ rscreen.set_visarea(0, 0x140-1, 0, 0xe0-1);
+ rscreen.set_screen_update(FUNC(tetrisp2_state::screen_update_rocknms_right));
MCFG_VIDEO_START_OVERRIDE(tetrisp2_state,rocknms)
@@ -1896,30 +1898,33 @@ MACHINE_CONFIG_START(stepstag_state::stepstag)
MCFG_WATCHDOG_ADD("watchdog")
// video hardware
- MCFG_SCREEN_ADD("lscreen", RASTER)
-// MCFG_SCREEN_RAW_PARAMS(12288000*2, 768, 0, 496, 264*2,0,480)
- MCFG_SCREEN_REFRESH_RATE(30)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x160, 0xf0)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x160-1, 0, 0xf0-1)
- MCFG_SCREEN_UPDATE_DRIVER(stepstag_state, screen_update_stepstag_left)
-// MCFG_SCREEN_PALETTE("lpalette")
-
- MCFG_SCREEN_ADD("mscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x160, 0xf0)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x160-1, 0, 0xf0-1)
- MCFG_SCREEN_UPDATE_DRIVER(stepstag_state, screen_update_stepstag_mid)
-// MCFG_SCREEN_PALETTE("mpalette")
-
- MCFG_SCREEN_ADD("rscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(30)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(0x160, 0xf0)
- MCFG_SCREEN_VISIBLE_AREA(0, 0x160-1, 0, 0xf0-1)
- MCFG_SCREEN_UPDATE_DRIVER(stepstag_state, screen_update_stepstag_right)
- MCFG_SCREEN_PALETTE("rpalette")
+ screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
+ lscreen.set_orientation(ROT270);
+// lscreen.set_raw(12288000*2, 768, 0, 496, 264*2,0,480);
+ lscreen.set_refresh_hz(30);
+ lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ lscreen.set_size(0x160, 0xf0);
+ lscreen.set_visarea(0, 0x160-1, 0, 0xf0-1);
+ lscreen.set_screen_update(FUNC(stepstag_state::screen_update_stepstag_left));
+// lscreen.set_palette("lpalette"));
+
+ screen_device &mscreen(SCREEN(config, "mscreen", SCREEN_TYPE_RASTER));
+ mscreen.set_orientation(ROT0);
+ mscreen.set_refresh_hz(60);
+ mscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ mscreen.set_size(0x160, 0xf0);
+ mscreen.set_visarea(0, 0x160-1, 0, 0xf0-1);
+ mscreen.set_screen_update(FUNC(stepstag_state::screen_update_stepstag_mid));
+// mscreen.set_palette("mpalette"));
+
+ screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
+ rscreen.set_orientation(ROT270);;
+ rscreen.set_refresh_hz(30);
+ rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ rscreen.set_size(0x160, 0xf0);
+ rscreen.set_visarea(0, 0x160-1, 0, 0xf0-1);
+ rscreen.set_screen_update(FUNC(stepstag_state::screen_update_stepstag_right));
+ rscreen.set_palette("rpalette");
MCFG_VIDEO_START_OVERRIDE(stepstag_state, stepstag )
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tetrisp2)
diff --git a/src/mame/drivers/ti630.cpp b/src/mame/drivers/ti630.cpp
index 768aa9f228b..185ce0c11a2 100644
--- a/src/mame/drivers/ti630.cpp
+++ b/src/mame/drivers/ti630.cpp
@@ -38,7 +38,6 @@ It means we probably would have to emulate a modem device for it to treat commun
#include "cpu/mcs51/mcs51.h"
#include "video/hd44780.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
@@ -156,7 +155,6 @@ MACHINE_CONFIG_START(ti630_state::ti630)
MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(ti630_state, ti630)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ti630)
diff --git a/src/mame/drivers/ti89.cpp b/src/mame/drivers/ti89.cpp
index 57261b448b0..e410df8fd64 100644
--- a/src/mame/drivers/ti89.cpp
+++ b/src/mame/drivers/ti89.cpp
@@ -23,7 +23,6 @@
#include "cpu/m68000/m68000.h"
#include "machine/intelfsh.h"
#include "machine/nvram.h"
-#include "rendlay.h"
#include "screen.h"
@@ -538,7 +537,6 @@ MACHINE_CONFIG_START(ti68k_state::ti89)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(ti68k_state, ti68k)
- config.set_default_layout(layout_lcd);
MCFG_SHARP_UNK128MBIT_ADD("flash") //should be LH28F320 for ti89t and v200 and LH28F160S3T for other models
diff --git a/src/mame/drivers/tmmjprd.cpp b/src/mame/drivers/tmmjprd.cpp
index 904787851b9..3c7124b731a 100644
--- a/src/mame/drivers/tmmjprd.cpp
+++ b/src/mame/drivers/tmmjprd.cpp
@@ -42,8 +42,8 @@
class tmmjprd_state : public driver_device
{
public:
- tmmjprd_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ tmmjprd_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_eeprom(*this, "eeprom"),
m_gfxdecode(*this, "gfxdecode"),
@@ -57,7 +57,8 @@ public:
m_gfxroms(*this, "gfx2"),
m_pl1(*this, "PL1.%u", 1),
m_pl2(*this, "PL2.%u", 1),
- m_system(*this, "SYSTEM") { }
+ m_system(*this, "SYSTEM")
+ { }
void tmmjprd(machine_config &config);
void tmpdoki(machine_config &config);
@@ -738,7 +739,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(tmmjprd_state::scanline)
}
-MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
+MACHINE_CONFIG_START(tmmjprd_state::tmpdoki)
MCFG_DEVICE_ADD(m_maincpu,M68EC020,24000000) /* 24 MHz */
MCFG_DEVICE_PROGRAM_MAP(main_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmmjprd_state, scanline, "lscreen", 0, 1)
@@ -756,9 +757,6 @@ MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
MCFG_PALETTE_ADD(m_palette, 0x1000)
MCFG_PALETTE_FORMAT(XGRB)
-
- config.set_default_layout(layout_dualhsxs);
-
MCFG_SCREEN_ADD("lscreen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
@@ -768,15 +766,6 @@ MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_left)
MCFG_SCREEN_PALETTE(m_palette)
- MCFG_SCREEN_ADD("rscreen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(64*16, 64*16)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
- //MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1)
- MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_right)
- MCFG_SCREEN_PALETTE(m_palette)
-
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
@@ -787,11 +776,19 @@ MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(tmmjprd_state::tmpdoki)
- tmmjprd(config);
- config.set_default_layout(layout_horizont);
+MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
+ tmpdoki(config);
- MCFG_DEVICE_REMOVE("rscreen")
+ config.set_default_layout(layout_dualhsxs);
+
+ MCFG_SCREEN_ADD("rscreen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_SIZE(64*16, 64*16)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
+ //MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1)
+ MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_right)
+ MCFG_SCREEN_PALETTE(m_palette)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/jade.cpp b/src/mame/drivers/unkz80.cpp
index 41e619fb7a6..0b44b8f0f15 100644
--- a/src/mame/drivers/jade.cpp
+++ b/src/mame/drivers/unkz80.cpp
@@ -2,17 +2,19 @@
// copyright-holders:Robbbert
/***************************************************************************
- Jade JGZ80 (with Serial Parallel Interrupt Controller)
+Unknown Z80 (with Serial Parallel Interrupt Controller)
- Single board Z80 computer on a S100 card.
- The SPIO board adds four CTCs, two SIOs and one PIO.
+Single board Z80 computer on a S100 card.
+The SPIO board adds four CTCs, two SIOs and one PIO.
- 2013-09-12 Skeleton driver.
+2013-09-12 Skeleton driver.
- No info found as yet.
+No info found as yet.
- It takes about 8 seconds to start up.
- Type HE to get a list of commands.
+It should display P-Mon 4b 08/29/83 SPIC, then pause a bit,
+then show a # prompt. Type HE to get a list of commands.
+
+Currently does nothing due to a SIO regression.
****************************************************************************/
@@ -25,15 +27,15 @@
//#include "bus/s100/s100.h"
-class jade_state : public driver_device
+class unkz80_state : public driver_device
{
public:
- jade_state(const machine_config &mconfig, device_type type, const char *tag)
+ unkz80_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
{ }
- void jade(machine_config &config);
+ void unkz80(machine_config &config);
private:
void io_map(address_map &map);
@@ -43,14 +45,14 @@ private:
};
-void jade_state::mem_map(address_map &map)
+void unkz80_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).rom().region("roms", 0);
map(0x0800, 0xffff).ram();
}
-void jade_state::io_map(address_map &map)
+void unkz80_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -60,13 +62,13 @@ void jade_state::io_map(address_map &map)
}
/* Input ports */
-static INPUT_PORTS_START( jade )
+static INPUT_PORTS_START( unkz80 )
INPUT_PORTS_END
-MACHINE_CONFIG_START(jade_state::jade)
+MACHINE_CONFIG_START(unkz80_state::unkz80)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",Z80, XTAL(4'000'000))
+ MCFG_DEVICE_ADD("maincpu",Z80, 4_MHz_XTAL)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
@@ -79,8 +81,7 @@ MACHINE_CONFIG_START(jade_state::jade)
CLOCK(config, "trg0", 4_MHz_XTAL / 2).signal_handler().set("ctc2", FUNC(z80ctc_device::trg0));
/* Devices */
- MCFG_DEVICE_ADD("sio", Z80SIO, XTAL(4'000'000))
- //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set
+ MCFG_DEVICE_ADD("sio", Z80SIO, 4_MHz_XTAL)
MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE("rs232", rs232_port_device, write_txd))
MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE("rs232", rs232_port_device, write_dtr))
MCFG_Z80SIO_OUT_RTSA_CB(WRITELINE("rs232", rs232_port_device, write_rts))
@@ -91,12 +92,12 @@ MACHINE_CONFIG_START(jade_state::jade)
MACHINE_CONFIG_END
/* ROM definition */
-ROM_START( jgz80 )
+ROM_START( unkz80 )
ROM_REGION( 0x800, "roms", 0 )
- ROM_LOAD( "jgz80.rom", 0x0000, 0x0800, CRC(90c4a1ef) SHA1(8a93a11051cc27f3edca24f0f4297ebe0099964e) )
+ ROM_LOAD( "unkz80.rom", 0x0000, 0x0800, CRC(90c4a1ef) SHA1(8a93a11051cc27f3edca24f0f4297ebe0099964e) )
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, jgz80, 0, 0, jade, jade, jade_state, empty_init, "Jade Computer Products", "JGZ80", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
+COMP( 1983, unkz80, 0, 0, unkz80, unkz80, unkz80_state, empty_init, "<unknown>", "Unknown Z80 computer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp
index 0c346573764..4fa28ac9300 100644
--- a/src/mame/drivers/vgmplay.cpp
+++ b/src/mame/drivers/vgmplay.cpp
@@ -2,22 +2,25 @@
// copyright-holders: Olivier Galibert
// A "virtual" driver to play vgm files
-// Use with mame vgmplay -bitb file.vgm
+// Use with mame vgmplay -quik file.vgm
#include "emu.h"
#define QSOUND_LLE
-#include "imagedev/bitbngr.h"
+#include "imagedev/snapquik.h"
#include "cpu/h6280/h6280.h"
#include "cpu/m6502/n2a03.h"
#include "sound/2203intf.h"
#include "sound/2608intf.h"
+#include "sound/2610intf.h"
#include "sound/2612intf.h"
+#include "sound/262intf.h"
#include "sound/3526intf.h"
#include "sound/3812intf.h"
#include "sound/ay8910.h"
+#include "sound/8950intf.h"
#include "sound/c352.h"
#include "sound/c6280.h"
#include "sound/gb.h"
@@ -36,6 +39,7 @@
#include "sound/ym2151.h"
#include "sound/ym2413.h"
#include "sound/ymf271.h"
+#include "sound/ymf278b.h"
#include "sound/ymz280b.h"
#include "vgmplay.lh"
@@ -68,16 +72,22 @@ public:
enum io8_t
{
REG_SIZE = 0x00000000,
- A_YM2612 = 0x00000010,
- A_YM2151 = 0x00000020,
- A_YM2413 = 0x00000030,
- A_YM2203A = 0x00000040,
- A_YM2203B = 0x00000050,
- A_YM3526 = 0x00000060,
- A_YM3812 = 0x00000070,
+ A_YM2612_0 = 0x00000010,
+ A_YM2612_1 = 0x00000018,
+ A_YM2151_0 = 0x00000020,
+ A_YM2151_1 = 0x00000028,
+ A_YM2413_0 = 0x00000030,
+ A_YM2413_1 = 0x00000038,
+ A_YM2203_0 = 0x00000040,
+ A_YM2203_1 = 0x00000050,
+ A_YM3526_0 = 0x00000060,
+ A_YM3526_1 = 0x00000068,
+ A_YM3812_0 = 0x00000070,
+ A_YM3812_1 = 0x00000078,
A_AY8910A = 0x00000080,
A_AY8910B = 0x00000090,
- A_SN76496 = 0x000000a0,
+ A_SN76496_0 = 0x000000a0,
+ A_SN76496_1 = 0x000000a8,
A_K053260 = 0x000000b0,
A_C6280 = 0x000000e0,
A_OKIM6295A = 0x000000f0,
@@ -90,9 +100,20 @@ public:
A_MULTIPCMB = 0x00013010,
A_POKEYA = 0x00013020,
A_POKEYB = 0x00013030,
- A_YMF271 = 0x00013040,
- A_YMZ280B = 0x00013050,
- A_YM2608 = 0x00013060,
+ A_YM2608_0 = 0x00013060,
+ A_YM2608_1 = 0x00013068,
+ A_YM2610_0 = 0x00013070,
+ A_YM2610_1 = 0x00013078,
+ A_Y8950_0 = 0x00013080,
+ A_Y8950_1 = 0x00013088,
+ A_YMF262_0 = 0x00013090,
+ A_YMF262_1 = 0x00013098,
+ A_YMF278B_0 = 0x000130a0,
+ A_YMF278B_1 = 0x000130b0,
+ A_YMF271_0 = 0x000130c0,
+ A_YMF271_1 = 0x000130d0,
+ A_YMZ280B_0 = 0x000130e0,
+ A_YMZ280B_1 = 0x000130f0,
A_K054539A = 0x00013400,
A_K054539B = 0x00013800,
A_QSOUND = 0x00013c00,
@@ -126,17 +147,18 @@ public:
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
- DECLARE_READ8_MEMBER(segapcm_rom_r);
- DECLARE_READ8_MEMBER(ymf271_rom_r);
- DECLARE_READ8_MEMBER(ymz280b_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(segapcm_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(ymf278b_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(ymf271_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(ymz280b_rom_r);
template<int Chip> DECLARE_READ8_MEMBER(multipcm_rom_r);
- DECLARE_READ8_MEMBER(k053260_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(k053260_rom_r);
template<int Chip> DECLARE_READ8_MEMBER(okim6295_rom_r);
template<int Chip> DECLARE_READ8_MEMBER(k054539_rom_r);
- DECLARE_READ8_MEMBER(c352_rom_r);
- DECLARE_READ8_MEMBER(qsound_rom_r);
- DECLARE_READ8_MEMBER(ga20_rom_r);
- DECLARE_READ8_MEMBER(x1_010_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(c352_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(qsound_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(ga20_rom_r);
+ template<int Chip> DECLARE_READ8_MEMBER(x1_010_rom_r);
template<int Chip> DECLARE_WRITE8_MEMBER(multipcm_bank_hi_w);
template<int Chip> DECLARE_WRITE8_MEMBER(multipcm_bank_lo_w);
@@ -199,6 +221,10 @@ private:
LED_RF5C164,
LED_X1_010,
+ LED_YM2610,
+ LED_Y8950,
+ LED_YMF262,
+ LED_YMF278B,
LED_COUNT
};
@@ -274,7 +300,7 @@ class vgmplay_state : public driver_device
public:
vgmplay_state(const machine_config &mconfig, device_type type, const char *tag);
- virtual void machine_start() override;
+ DECLARE_QUICKLOAD_LOAD_MEMBER(load_file);
DECLARE_READ8_MEMBER(file_r);
DECLARE_READ8_MEMBER(file_size_r);
@@ -285,44 +311,50 @@ public:
DECLARE_WRITE8_MEMBER(scc_w);
void vgmplay(machine_config &config);
- void c352_map(address_map &map);
void file_map(address_map &map);
- void ga20_map(address_map &map);
- void h6280_io_map(address_map &map);
- void h6280_map(address_map &map);
- void k053260_map(address_map &map);
- void k054539a_map(address_map &map);
- void k054539b_map(address_map &map);
- void multipcma_map(address_map &map);
- void multipcmb_map(address_map &map);
- void nescpu_map(address_map &map);
- void okim6295a_map(address_map &map);
- void okim6295b_map(address_map &map);
- void qsound_map(address_map &map);
- void rf5c68_map(address_map &map);
- void rf5c164_map(address_map &map);
- void segapcm_map(address_map &map);
void soundchips16_map(address_map &map);
void soundchips_map(address_map &map);
- void x1_010_map(address_map &map);
- void ymf271_map(address_map &map);
- void ymz280b_map(address_map &map);
+ template<int Chip> void segapcm_map(address_map &map);
+ template<int Chip> void ymf278b_map(address_map &map);
+ template<int Chip> void ymf271_map(address_map &map);
+ template<int Chip> void ymz280b_map(address_map &map);
+ template<int Chip> void c352_map(address_map &map);
+ template<int Chip> void ga20_map(address_map &map);
+ template<int Chip> void h6280_io_map(address_map &map);
+ template<int Chip> void h6280_map(address_map &map);
+ template<int Chip> void k053260_map(address_map &map);
+ template<int Chip> void k054539_map(address_map &map);
+ template<int Chip> void multipcm_map(address_map &map);
+ template<int Chip> void nescpu_map(address_map &map);
+ template<int Chip> void okim6295_map(address_map &map);
+ template<int Chip> void qsound_map(address_map &map);
+ template<int Chip> void rf5c68_map(address_map &map);
+ template<int Chip> void rf5c164_map(address_map &map);
+ template<int Chip> void x1_010_map(address_map &map);
private:
std::vector<uint8_t> m_file_data;
- required_device<bitbanger_device> m_file;
required_device<vgmplay_device> m_vgmplay;
required_device<speaker_device> m_lspeaker;
required_device<speaker_device> m_rspeaker;
- required_device<ym2612_device> m_ym2612;
- required_device<ym2151_device> m_ym2151;
- required_device<ym2413_device> m_ym2413;
+ required_device_array<sn76496_device, 2> m_sn76496;
+ required_device_array<ym2413_device, 2> m_ym2413;
+ required_device_array<ym2612_device, 2> m_ym2612;
+ required_device_array<ym2151_device, 2> m_ym2151;
+ required_device<segapcm_device> m_segapcm;
+ required_device<rf5c68_device> m_rf5c68;
+ required_shared_ptr<uint8_t> m_rf5c68_ram;
required_device_array<ym2203_device, 2> m_ym2203;
- required_device<ym3526_device> m_ym3526;
- required_device<ym3812_device> m_ym3812;
+ required_device_array<ym2608_device, 2> m_ym2608;
+ required_device_array<ym2610_device, 2> m_ym2610;
+ required_device_array<ym3812_device, 2> m_ym3812;
+ required_device_array<ym3526_device, 2> m_ym3526;
+ required_device_array<y8950_device, 2> m_y8950;
+ required_device_array<ymf262_device, 2> m_ymf262;
+ required_device_array<ymf278b_device, 2> m_ymf278b;
+ required_device_array<ymf271_device, 2> m_ymf271;
+ required_device_array<ymz280b_device, 2> m_ymz280b;
required_device_array<ay8910_device, 2> m_ay8910;
- required_device<sn76496_device> m_sn76496;
- required_device<segapcm_device> m_segapcm;
required_device_array<multipcm_device, 2> m_multipcm;
required_device<gameboy_sound_device> m_dmg;
required_device<n2a03_device> m_nescpu;
@@ -334,15 +366,10 @@ private:
required_device_array<pokey_device, 2> m_pokey;
required_device<c352_device> m_c352;
required_device_array<okim6295_device, 2> m_okim6295;
- required_device<ymf271_device> m_ymf271;
- required_device<ymz280b_device> m_ymz280b;
- required_device<ym2608_device> m_ym2608;
required_device<qsound_device> m_qsound;
required_device<k051649_device> m_k051649;
required_device<iremga20_device> m_ga20;
- required_device<rf5c68_device> m_rf5c68;
required_device<rf5c68_device> m_rf5c164; // TODO : !!RF5C164!!
- required_shared_ptr<uint8_t> m_rf5c68_ram;
required_shared_ptr<uint8_t> m_rf5c164_ram;
required_device<x1_010_device> m_x1_010;
@@ -388,7 +415,6 @@ void vgmplay_device::device_reset()
m_pc = 0;
m_state = RESET;
m_paused = false;
- m_loop = true;
m_ym2612_stream_offset = 0;
blocks_clear();
@@ -576,86 +602,108 @@ void vgmplay_device::execute_run()
debugger_instruction_hook(m_pc);
uint8_t code = m_file->read_byte(m_pc);
switch(code) {
+ case 0x30:
+ pulse_act_led(LED_SN76496);
+ m_io->write_byte(A_SN76496_1 + 0, m_file->read_byte(m_pc + 1));
+ m_pc += 2;
+ break;
+
+ case 0x3f:
+ pulse_act_led(LED_SN76496);
+ m_io->write_byte(A_SN76496_1 + 1, m_file->read_byte(m_pc + 1));
+ m_pc += 2;
+ break;
+
case 0x4f:
pulse_act_led(LED_SN76496);
- m_io->write_byte(A_SN76496+0, m_file->read_byte(m_pc+1));
+ m_io->write_byte(A_SN76496_0 + 1, m_file->read_byte(m_pc + 1));
m_pc += 2;
break;
case 0x50:
pulse_act_led(LED_SN76496);
- m_io->write_byte(A_SN76496+1, m_file->read_byte(m_pc+1));
+ m_io->write_byte(A_SN76496_0 + 0, m_file->read_byte(m_pc + 1));
m_pc += 2;
break;
case 0x51:
pulse_act_led(LED_YM2413);
- m_io->write_byte(A_YM2413+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2413+1, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM2413_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2413_0 + 1, m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x52:
- pulse_act_led(LED_YM2612);
- m_io->write_byte(A_YM2612+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2612+1, m_file->read_byte(m_pc+2));
- m_pc += 3;
- break;
-
case 0x53:
pulse_act_led(LED_YM2612);
- m_io->write_byte(A_YM2612+2, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2612+3, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM2612_0 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2612_0 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x54:
pulse_act_led(LED_YM2151);
- m_io->write_byte(A_YM2151+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2151+1, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM2151_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2151_0 + 1, m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x55:
pulse_act_led(LED_YM2203);
- m_io->write_byte(A_YM2203A+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2203A+1, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM2203_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2203_0 + 1, m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x56:
case 0x57:
pulse_act_led(LED_YM2608);
- m_io->write_byte(A_YM2608+0+((code & 1) << 1), m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2608+1+((code & 1) << 1), m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM2608_0 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2608_0 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
- case 0xA5:
- pulse_act_led(LED_YM2203);
- m_io->write_byte(A_YM2203B+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM2203B+1, m_file->read_byte(m_pc+2));
+ case 0x58:
+ case 0x59:
+ pulse_act_led(LED_YM2610);
+ m_io->write_byte(A_YM2610_0 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2610_0 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x5a:
pulse_act_led(LED_YM3812);
- m_io->write_byte(A_YM3812+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM3812+1, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM3812_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM3812_0 + 1, m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x5b:
pulse_act_led(LED_YM3526);
- m_io->write_byte(A_YM3526+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YM3526+1, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YM3526_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM3526_0 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0x5c:
+ pulse_act_led(LED_Y8950);
+ m_io->write_byte(A_Y8950_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_Y8950_0 + 1, m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
case 0x5d:
pulse_act_led(LED_YMZ280B);
- m_io->write_byte(A_YMZ280B+0, m_file->read_byte(m_pc+1));
- m_io->write_byte(A_YMZ280B+1, m_file->read_byte(m_pc+2));
+ m_io->write_byte(A_YMZ280B_0 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YMZ280B_0 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0x5e:
+ case 0x5f:
+ pulse_act_led(LED_YMF262);
+ m_io->write_byte(A_YMF262_0 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YMF262_0 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
m_pc += 3;
break;
@@ -710,8 +758,8 @@ void vgmplay_device::execute_run()
if(m_ym2612_stream_offset >= int(m_data_streams[0].size()))
m_ym2612_stream_offset = 0;
- m_io->write_byte(A_YM2612+0, 0x2a);
- m_io->write_byte(A_YM2612+1, m_data_streams[0][m_ym2612_stream_offset]);
+ m_io->write_byte(A_YM2612_0+0, 0x2a);
+ m_io->write_byte(A_YM2612_0+1, m_data_streams[0][m_ym2612_stream_offset]);
m_ym2612_stream_offset++;
}
m_pc += 1;
@@ -722,16 +770,97 @@ void vgmplay_device::execute_run()
pulse_act_led(LED_AY8910);
uint8_t reg = m_file->read_byte(m_pc+1);
if(reg & 0x80) {
- m_io->write_byte(A_AY8910A+1, reg & 0x7f);
- m_io->write_byte(A_AY8910A+0, m_file->read_byte(m_pc+2));
- } else {
m_io->write_byte(A_AY8910B+1, reg & 0x7f);
m_io->write_byte(A_AY8910B+0, m_file->read_byte(m_pc+2));
+ } else {
+ m_io->write_byte(A_AY8910A+1, reg & 0x7f);
+ m_io->write_byte(A_AY8910A+0, m_file->read_byte(m_pc+2));
}
m_pc += 3;
break;
}
+ case 0xa1:
+ pulse_act_led(LED_YM2413);
+ m_io->write_byte(A_YM2413_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2413_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xa2:
+ case 0xa3:
+ pulse_act_led(LED_YM2612);
+ m_io->write_byte(A_YM2612_1 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2612_1 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xa4:
+ pulse_act_led(LED_YM2151);
+ m_io->write_byte(A_YM2151_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2151_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xa5:
+ pulse_act_led(LED_YM2203);
+ m_io->write_byte(A_YM2203_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2203_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xa6:
+ case 0xa7:
+ pulse_act_led(LED_YM2608);
+ m_io->write_byte(A_YM2608_0 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2608_0 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xa8:
+ case 0xa9:
+ pulse_act_led(LED_YM2610);
+ m_io->write_byte(A_YM2610_0 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM2610_0 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xaa:
+ pulse_act_led(LED_YM3812);
+ m_io->write_byte(A_YM3812_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM3812_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xab:
+ pulse_act_led(LED_YM3526);
+ m_io->write_byte(A_YM3526_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YM3526_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xac:
+ pulse_act_led(LED_Y8950);
+ m_io->write_byte(A_Y8950_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_Y8950_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xad:
+ pulse_act_led(LED_YMZ280B);
+ m_io->write_byte(A_YMZ280B_1 + 0, m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YMZ280B_1 + 1, m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
+ case 0xae:
+ case 0xaf:
+ pulse_act_led(LED_YMF262);
+ m_io->write_byte(A_YMF262_1 + 0 + ((code & 1) << 1), m_file->read_byte(m_pc + 1));
+ m_io->write_byte(A_YMF262_1 + 1 + ((code & 1) << 1), m_file->read_byte(m_pc + 2));
+ m_pc += 3;
+ break;
+
case 0xb0:
pulse_act_led(LED_RF5C68);
m_io->write_byte(A_RF5C68 + m_file->read_byte(m_pc+1), m_file->read_byte(m_pc+2));
@@ -794,9 +923,9 @@ void vgmplay_device::execute_run()
pulse_act_led(LED_POKEY);
uint8_t offset = m_file->read_byte(m_pc+1);
if (offset & 0x80)
- m_io->write_byte(A_POKEYA + (offset & 0x7f), m_file->read_byte(m_pc+2));
- else
m_io->write_byte(A_POKEYB + (offset & 0x7f), m_file->read_byte(m_pc+2));
+ else
+ m_io->write_byte(A_POKEYA + (offset & 0x7f), m_file->read_byte(m_pc+2));
m_pc += 3;
break;
}
@@ -855,11 +984,37 @@ void vgmplay_device::execute_run()
break;
}
+ case 0xd0:
+ {
+ pulse_act_led(LED_YMF278B);
+ uint8_t offset = m_file->read_byte(m_pc + 1);
+ if (offset & 0x80)
+ {
+ m_io->write_byte(A_YMF278B_1 + (offset & 7) * 2, m_file->read_byte(m_pc + 2));
+ m_io->write_byte(A_YMF278B_1 + (offset & 7) * 2 + 1, m_file->read_byte(m_pc + 3));
+ }
+ else
+ {
+ m_io->write_byte(A_YMF278B_0 + (offset & 7) * 2, m_file->read_byte(m_pc + 2));
+ m_io->write_byte(A_YMF278B_0 + (offset & 7) * 2 + 1, m_file->read_byte(m_pc + 3));
+ }
+ m_pc += 4;
+ break;
+ }
+
case 0xd1: {
pulse_act_led(LED_YMF271);
uint8_t offset = m_file->read_byte(m_pc+1);
- m_io->write_byte(A_YMF271 + (offset & 7) * 2, m_file->read_byte(m_pc+2));
- m_io->write_byte(A_YMF271 + (offset & 7) * 2 + 1, m_file->read_byte(m_pc+3));
+ if (offset & 0x80)
+ {
+ m_io->write_byte(A_YMF271_1 + (offset & 7) * 2, m_file->read_byte(m_pc + 2));
+ m_io->write_byte(A_YMF271_1 + (offset & 7) * 2 + 1, m_file->read_byte(m_pc + 3));
+ }
+ else
+ {
+ m_io->write_byte(A_YMF271_0 + (offset & 7) * 2, m_file->read_byte(m_pc + 2));
+ m_io->write_byte(A_YMF271_0 + (offset & 7) * 2 + 1, m_file->read_byte(m_pc + 3));
+ }
m_pc += 4;
break;
}
@@ -875,7 +1030,7 @@ void vgmplay_device::execute_run()
case 0xd3: {
pulse_act_led(LED_K054539);
- uint16_t offset = m_file->read_byte(m_pc+1) << 16 | m_file->read_byte(m_pc+2);
+ uint16_t offset = m_file->read_byte(m_pc+1) << 8 | m_file->read_byte(m_pc+2);
if (offset & 0x8000)
m_io->write_byte(A_K054539B + (offset & 0x3ff), m_file->read_byte(m_pc+3));
else
@@ -969,72 +1124,68 @@ uint32_t vgmplay_disassembler::opcode_alignment() const
offs_t vgmplay_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
switch(opcodes.r8(pc)) {
+ case 0x30:
+ util::stream_format(stream, "psg.1 write %02x", opcodes.r8(pc + 1));
+ return 2 | SUPPORTED;
+
+ case 0x3f:
+ util::stream_format(stream, "psg.1 r06 = %02x", opcodes.r8(pc + 1));
+ return 2 | SUPPORTED;
+
case 0x4f:
- util::stream_format(stream, "psg r06 = %02x", opcodes.r8(pc+1));
+ util::stream_format(stream, "psg.0 r06 = %02x", opcodes.r8(pc + 1));
return 2 | SUPPORTED;
case 0x50:
- util::stream_format(stream, "psg write %02x", opcodes.r8(pc+1));
+ util::stream_format(stream, "psg.0 write %02x", opcodes.r8(pc + 1));
return 2 | SUPPORTED;
case 0x51:
- util::stream_format(stream, "ym2413 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2413.0 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x52:
- util::stream_format(stream, "ym2612.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
- return 3 | SUPPORTED;
-
case 0x53:
- util::stream_format(stream, "ym2612.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2612.0 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x54:
- util::stream_format(stream, "ym2151 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2151.0 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x55:
- util::stream_format(stream, "ym2203a r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2203.0 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x56:
- util::stream_format(stream, "ym2608.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
- return 3 | SUPPORTED;
-
case 0x57:
- util::stream_format(stream, "ym2608.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2608.0 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x58:
- util::stream_format(stream, "ym2610.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
- return 3 | SUPPORTED;
-
case 0x59:
- util::stream_format(stream, "ym2610.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2610.0 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x5a:
- util::stream_format(stream, "ym3812 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym3812.0 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x5b:
- util::stream_format(stream, "ym3526 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym3526.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
return 3 | SUPPORTED;
case 0x5c:
- util::stream_format(stream, "y8950 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "y8950.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
return 3 | SUPPORTED;
case 0x5d:
- util::stream_format(stream, "ymz280b r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ymz280b.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
return 3 | SUPPORTED;
case 0x5e:
- util::stream_format(stream, "ymf262.0 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
- return 3 | SUPPORTED;
-
case 0x5f:
- util::stream_format(stream, "ymf262.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ymf262.0 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0x61: {
@@ -1146,8 +1297,47 @@ offs_t vgmplay_disassembler::disassemble(std::ostream &stream, offs_t pc, const
util::stream_format(stream, "ay8910 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
return 3 | SUPPORTED;
+ case 0xa1:
+ util::stream_format(stream, "ym2413.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ return 3 | SUPPORTED;
+
+ case 0xa2:
+ case 0xa3:
+ util::stream_format(stream, "ym2612.1 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc+1), opcodes.r8(pc+2));
+ return 3 | SUPPORTED;
+
+ case 0xa4:
+ util::stream_format(stream, "ym2151.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ return 3 | SUPPORTED;
+
case 0xa5:
- util::stream_format(stream, "ym2203b r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ util::stream_format(stream, "ym2203.1 r%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2));
+ return 3 | SUPPORTED;
+
+ case 0xa6:
+ case 0xa7:
+ util::stream_format(stream, "ym2608.1 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc + 1), opcodes.r8(pc + 2));
+ return 3 | SUPPORTED;
+
+ case 0xaa:
+ util::stream_format(stream, "ym3812.1 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
+ return 3 | SUPPORTED;
+
+ case 0xab:
+ util::stream_format(stream, "ym3526.1 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
+ return 3 | SUPPORTED;
+
+ case 0xac:
+ util::stream_format(stream, "y8950.1 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
+ return 3 | SUPPORTED;
+
+ case 0xad:
+ util::stream_format(stream, "ymz280b.1 r%02x = %02x", opcodes.r8(pc + 1), opcodes.r8(pc + 2));
+ return 3 | SUPPORTED;
+
+ case 0xae:
+ case 0xaf:
+ util::stream_format(stream, "ymf262.1 %d r%02x = %02x", opcodes.r8(pc) & 1, opcodes.r8(pc + 1), opcodes.r8(pc + 2));
return 3 | SUPPORTED;
case 0xb0:
@@ -1223,11 +1413,11 @@ offs_t vgmplay_disassembler::disassemble(std::ostream &stream, offs_t pc, const
return 4 | SUPPORTED;
case 0xd0:
- util::stream_format(stream, "ymf278b r%02x.%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2), opcodes.r8(pc+3));
+ util::stream_format(stream, "ymf278b.%d r%02x.%02x = %02x", BIT(opcodes.r8(pc + 1), 7), opcodes.r8(pc+1) & 0x7f, opcodes.r8(pc+2), opcodes.r8(pc+3));
return 4 | SUPPORTED;
case 0xd1:
- util::stream_format(stream, "ymf271 r%02x.%02x = %02x", opcodes.r8(pc+1), opcodes.r8(pc+2), opcodes.r8(pc+3));
+ util::stream_format(stream, "ymf271.%d r%02x.%02x = %02x", BIT(opcodes.r8(pc + 1), 7), opcodes.r8(pc+1), opcodes.r8(pc+2), opcodes.r8(pc+3));
return 4 | SUPPORTED;
case 0xd2:
@@ -1273,19 +1463,28 @@ uint8_t vgmplay_device::rom_r(int chip, uint8_t type, offs_t offset)
return 0;
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::segapcm_rom_r)
{
- return rom_r(0, 0x80, offset);
+ return rom_r(Chip, 0x80, offset);
+}
+
+template<int Chip>
+READ8_MEMBER(vgmplay_device::ymf278b_rom_r)
+{
+ return rom_r(Chip, 0x84, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::ymf271_rom_r)
{
- return rom_r(0, 0x85, offset);
+ return rom_r(Chip, 0x85, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::ymz280b_rom_r)
{
- return rom_r(0, 0x86, offset);
+ return rom_r(Chip, 0x86, offset);
}
template<int Chip>
@@ -1343,46 +1542,59 @@ READ8_MEMBER(vgmplay_device::k054539_rom_r)
return rom_r(Chip, 0x8c, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::k053260_rom_r)
{
- return rom_r(0, 0x8e, offset);
+ return rom_r(Chip, 0x8e, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::qsound_rom_r)
{
- return rom_r(0, 0x8f, offset);
+ return rom_r(Chip, 0x8f, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::x1_010_rom_r)
{
- return rom_r(0, 0x91, offset);
+ return rom_r(Chip, 0x91, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::c352_rom_r)
{
- return rom_r(0, 0x92, offset);
+ return rom_r(Chip, 0x92, offset);
}
+template<int Chip>
READ8_MEMBER(vgmplay_device::ga20_rom_r)
{
- return rom_r(0, 0x93, offset);
+ return rom_r(Chip, 0x93, offset);
}
vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_file(*this, "file")
, m_vgmplay(*this, "vgmplay")
, m_lspeaker(*this, "lspeaker")
, m_rspeaker(*this, "rspeaker")
- , m_ym2612(*this, "ym2612")
- , m_ym2151(*this, "ym2151")
- , m_ym2413(*this, "ym2413")
- , m_ym2203(*this, "ym2203%c", 'a')
- , m_ym3526(*this, "ym3526")
- , m_ym3812(*this, "ym3812")
- , m_ay8910(*this, "ay8910%c", 'a')
- , m_sn76496(*this, "sn76496")
+ , m_sn76496(*this, "sn76496.%d", 0)
+ , m_ym2413(*this, "ym2413.%d", 0)
+ , m_ym2612(*this, "ym2612.%d", 0)
+ , m_ym2151(*this, "ym2151.%d", 0)
, m_segapcm(*this, "segapcm")
+ , m_rf5c68(*this, "rf5c68")
+ , m_rf5c68_ram(*this, "rf5c68_ram")
+ , m_ym2203(*this, "ym2203.%d", 0)
+ , m_ym2608(*this, "ym2608.%d", 0)
+ , m_ym2610(*this, "ym2610.%d", 0)
+ , m_ym3812(*this, "ym3812.%d", 0)
+ , m_ym3526(*this, "ym3526.%d", 0)
+ , m_y8950(*this, "y8950.%d", 0)
+ , m_ymf262(*this, "ymf262.%d", 0)
+ , m_ymf278b(*this, "ymf278b.%d", 0)
+ , m_ymf271(*this, "ymf271.%d", 0)
+ , m_ymz280b(*this, "ymz280b.%d", 0)
+ , m_ay8910(*this, "ay8910%c", 'a')
, m_multipcm(*this, "multipcm%c", 'a')
, m_dmg(*this, "dmg")
, m_nescpu(*this, "nescpu")
@@ -1394,15 +1606,10 @@ vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, co
, m_pokey(*this, "pokey%c", 'a')
, m_c352(*this, "c352")
, m_okim6295(*this, "okim6295%c", 'a')
- , m_ymf271(*this, "ymf271")
- , m_ymz280b(*this, "ymz280b")
- , m_ym2608(*this, "ym2608")
, m_qsound(*this, "qsound")
, m_k051649(*this, "k051649")
, m_ga20(*this, "ga20")
- , m_rf5c68(*this, "rf5c68")
, m_rf5c164(*this, "rf5c164")
- , m_rf5c68_ram(*this, "rf5c68_ram")
, m_rf5c164_ram(*this, "rf5c164_ram")
, m_x1_010(*this, "x1_010")
{
@@ -1422,19 +1629,33 @@ uint8_t vgmplay_state::r8(int off) const
return 0;
}
-void vgmplay_state::machine_start()
+static const ay8910_device::psg_type_t vgm_ay8910_type(uint8_t vgm_type)
+{
+ return (vgm_type & 0x10) ? ay8910_device::PSG_TYPE_YM : ay8910_device::PSG_TYPE_AY;
+}
+
+static const uint8_t vgm_ay8910_flags(uint8_t vgm_flags)
+{
+ uint8_t flags = 0;
+ if (vgm_flags & 1) flags |= AY8910_LEGACY_OUTPUT;
+ if (vgm_flags & 2) flags |= AY8910_SINGLE_OUTPUT;
+ if (vgm_flags & 4) flags |= AY8910_DISCRETE_OUTPUT;
+ return flags;
+}
+
+QUICKLOAD_LOAD_MEMBER(vgmplay_state, load_file)
{
- // Disable executing devices if not required
- m_pokey[0]->set_unscaled_clock(0);
- m_pokey[1]->set_unscaled_clock(0);
- m_qsound->set_unscaled_clock(0);
+ m_vgmplay->stop();
- uint32_t size = 0;
- if(m_file->exists() && m_file->length() > 0) {
- size = m_file->length();
- m_file_data.resize(size);
- m_file->input(&m_file_data[0], size);
+ m_file_data.resize(quickload_size);
+ if (image.fread(&m_file_data[0], quickload_size) != quickload_size)
+ {
+ m_file_data.clear();
+ return image_init_result::FAIL;
+ }
+ else
+ {
// Decompress gzip-compressed files (aka vgz)
if(m_file_data[0] == 0x1f && m_file_data[1] == 0x8b) {
std::vector<uint8_t> decomp;
@@ -1453,7 +1674,7 @@ void vgmplay_state::machine_start()
if(err != Z_OK) {
logerror("gzip header but not a gzip file\n");
m_file_data.clear();
- return;
+ return image_init_result::FAIL;
}
do {
if(str.total_out >= decomp.size())
@@ -1465,7 +1686,7 @@ void vgmplay_state::machine_start()
if(err != Z_STREAM_END) {
logerror("broken gzip file\n");
m_file_data.clear();
- return;
+ return image_init_result::FAIL;
}
m_file_data.resize(str.total_out);
memcpy(&m_file_data[0], &decomp[0], str.total_out);
@@ -1474,207 +1695,166 @@ void vgmplay_state::machine_start()
if(m_file_data.size() < 0x40 || r32(0) != 0x206d6756) {
logerror("Not a vgm/vgz file\n");
m_file_data.clear();
- return;
+ return image_init_result::FAIL;
}
uint32_t version = r32(8);
logerror("File version %x.%02x\n", version >> 8, version & 0xff);
- uint32_t header_size = 0;
- if(version < 0x151)
- header_size = 0x40;
- else if(version < 0x161)
- header_size = 0x80;
- else if(version < 0x171)
- header_size = 0xc0;
- else
- header_size = 0x100;
- logerror("Header size according to version is %x, header size according to header is %x\n", header_size, r32(0x34) + 0x34);
-
- uint32_t data_start = header_size;
- if (version >= 0x150 && r32(0x34))
- data_start = r32(0x34) + 0x34;
+ uint32_t data_start = version >= 0x150 ? r32(0x34) + 0x34 : 0x40;
// Parse clocks
- if(r32(0x0c))
- m_sn76496->set_unscaled_clock(r32(0x0c));
- if(r32(0x10))
- m_ym2413->set_unscaled_clock(r32(0x10));
- if(version >= 0x110 && r32(0x2c))
- m_ym2612->set_unscaled_clock(r32(0x2c));
- if(version >= 0x110 && r32(0x30))
- m_ym2151->set_unscaled_clock(r32(0x30));
-
- if(version >= 0x151 && r32(0x38))
- m_segapcm->set_unscaled_clock(r32(0x38));
-
- if(version >= 0x151 && r32(0x3c))
- m_segapcm->set_bank(r32(0x3c));
-
- if (data_start > 0x40)
- {
- if(version >= 0x151 && r32(0x40))
- m_rf5c68->set_unscaled_clock(r32(0x40));
- if(version >= 0x151 && r32(0x44)) {
- uint32_t clock = r32(0x44);
- m_ym2203[0]->set_unscaled_clock(clock & ~0x40000000);
- if (clock & 0x40000000)
- {
- clock &= ~0x40000000;
- m_ym2203[1]->set_unscaled_clock(clock);
- }
- }
- if(version >= 0x151 && r32(0x48))
- m_ym2608->set_unscaled_clock(r32(0x48));
- if(version >= 0x151 && r32(0x4c))
- logerror("Warning: file requests an unsupported %s\n", r32(0x4c) & 0x80000000 ? "YM2610B" : "YM2610");
- if(version >= 0x151 && r32(0x50)) {
- m_ym3812->set_unscaled_clock(r32(0x50));
- }
- if(version >= 0x151 && r32(0x54)) {
- m_ym3526->set_unscaled_clock(r32(0x54));
- }
- if(version >= 0x151 && r32(0x58))
- logerror("Warning: file requests an unsupported Y8950\n");
- if(version >= 0x151 && r32(0x5c))
- logerror("Warning: file requests an unsupported YMF262\n");
- if(version >= 0x151 && r32(0x60))
- logerror("Warning: file requests an unsupported YMF278B\n");
- if(version >= 0x151 && r32(0x64)) {
- m_ymf271->set_unscaled_clock(r32(0x64));
- }
- if(version >= 0x151 && r32(0x68)) {
- m_ymz280b->set_unscaled_clock(r32(0x68));
- }
- if(version >= 0x151 && r32(0x6c))
- m_rf5c164->set_unscaled_clock(r32(0x6c));
- if(version >= 0x151 && r32(0x70))
- logerror("Warning: file requests an unsupported PWM\n");
- if(version >= 0x151 && r32(0x74)) {
- uint32_t clock = r32(0x74);
- m_ay8910[0]->set_unscaled_clock(clock & ~0x40000000);
- if (clock & 0x40000000) {
- clock &= ~0x40000000;
- m_ay8910[1]->set_unscaled_clock(clock);
- }
- }
- if(version >= 0x151 && r8(0x78)) {
- uint8_t type = r8(0x78);
- if (type & 0x10)
- {
- m_ay8910[0]->set_psg_type(ay8910_device::PSG_TYPE_YM);
- m_ay8910[1]->set_psg_type(ay8910_device::PSG_TYPE_YM);
- }
- }
- if(version >= 0x151 && r8(0x79)) {
- uint8_t flags = r8(0x79);
- uint8_t to_set = 0;
- if (flags & 1)
- to_set |= AY8910_LEGACY_OUTPUT;
- if (flags & 2)
- to_set |= AY8910_SINGLE_OUTPUT;
- if (flags & 4)
- to_set |= AY8910_DISCRETE_OUTPUT;
- m_ay8910[0]->set_flags(to_set);
- m_ay8910[1]->set_flags(to_set);
- }
- if(version >= 0x151 && r8(0x7a)) {
- uint8_t flags = r8(0x7a);
- uint8_t to_set = 0;
- if (flags & 1)
- to_set |= AY8910_LEGACY_OUTPUT;
- if (flags & 2)
- to_set |= AY8910_SINGLE_OUTPUT;
- if (flags & 4)
- to_set |= AY8910_DISCRETE_OUTPUT;
- m_ym2203[0]->set_flags(to_set);
- m_ym2203[1]->set_flags(to_set);
- }
- }
-
- if (data_start > 0x80)
- {
- if(version >= 0x161 && r32(0x80)) {
- m_dmg->set_unscaled_clock(r32(0x80));
- }
- if(version >= 0x161 && r32(0x84)) {
- m_nescpu->set_unscaled_clock(r32(0x84));
- m_nescpu->m_apu->set_unscaled_clock(r32(0x84));
- }
- if(version >= 0x161 && r32(0x88)) {
- uint32_t clock = r32(0x88);
- m_multipcm[0]->set_unscaled_clock(clock & ~0x40000000);
- if (clock & 0x40000000) {
- clock &= ~0x40000000;
- m_multipcm[1]->set_unscaled_clock(clock);
- }
- }
- if(version >= 0x161 && r8(0x95)) {
- m_k054539[0]->init_flags(r8(0x95));
- m_k054539[1]->init_flags(r8(0x95));
- }
- if(version >= 0x161 && r32(0x98)) {
- m_okim6295_clock[0] = r32(0x98);
- m_okim6295_pin7[0] = 0;
- if (m_okim6295_clock[0] & 0x80000000) {
- m_okim6295_clock[0] &= ~0x80000000;
- m_okim6295_pin7[0] = 1;
- }
- m_okim6295[0]->config_pin7(m_okim6295_pin7[0] ? okim6295_device::PIN7_HIGH : okim6295_device::PIN7_LOW); // FIXME: no guarantee this device hasn't started yet - may be better to wait for it to start then use set_pin7
- m_okim6295[0]->set_unscaled_clock(m_okim6295_clock[0] & ~0xc0000000);
- if (m_okim6295_clock[0] & 0x40000000) {
- m_okim6295_clock[0] &= ~0x40000000;
- m_okim6295_clock[1] = m_okim6295_clock[0];
- m_okim6295_pin7[1] = m_okim6295_pin7[0];
- m_okim6295[1]->config_pin7(m_okim6295_pin7[1] ? okim6295_device::PIN7_HIGH : okim6295_device::PIN7_LOW); // FIXME: no guarantee this device hasn't started yet - may be better to wait for it to start then use set_pin7
- m_okim6295[1]->set_unscaled_clock(m_okim6295_clock[1]);
- }
- }
- if(version >= 0x161 && r32(0x9c)) {
- m_k051649->set_unscaled_clock(r32(0x9c));
- }
- if(version >= 0x161 && r32(0xa0)) {
- uint32_t clock = r32(0xa0);
- m_k054539[0]->set_unscaled_clock(clock & ~0x40000000);
- if (clock & 0x40000000) {
- clock &= ~0x40000000;
- m_k054539[1]->set_unscaled_clock(clock);
- }
- }
- if(version >= 0x161 && r32(0xac)) {
- m_k053260->set_unscaled_clock(r32(0xac));
- }
- if(version >= 0x161 && r32(0xa4)) {
- m_c6280->set_unscaled_clock(r32(0xa4));
- }
- if(version >= 0x161 && r32(0xb0)) {
- uint32_t clock = r32(0xb0);
- m_pokey[0]->set_unscaled_clock(clock & ~0x40000000);
- if (clock & 0x40000000) {
- clock &= ~0x40000000;
- m_pokey[1]->set_unscaled_clock(clock);
- }
- }
- if(version >= 0x161 && r32(0xb4)) {
- m_qsound->set_unscaled_clock(r32(0xb4) * 15); // * 15 multipler for correct pitch
- }
- }
-
- if (data_start > 0xc0)
- {
- if(version >= 0x171 && r8(0xd6)) {
- m_c352->set_divider(r8(0xd6) * 4);
- }
- if(version >= 0x171 && r32(0xd8)) {
- m_x1_010->set_unscaled_clock(r32(0xd8));
- }
- if(version >= 0x171 && r32(0xdc)) {
- m_c352->set_unscaled_clock(r32(0xdc));
- }
- if(version >= 0x171 && r32(0xe0)) {
- m_ga20->set_unscaled_clock(r32(0xe0));
- }
- }
+ m_sn76496[0]->set_unscaled_clock(r32(0x0c) & ~0xc0000000);
+ m_sn76496[1]->set_unscaled_clock(r32(0x0c) & 0x40000000 ? r32(0x0c) & ~0xc0000000 : 0);
+ if (r32(0x0c) & 0x80000000)
+ logerror("Warning: file requests an unsupported T6W28");
+
+ m_ym2413[0]->set_unscaled_clock(r32(0x10) & ~0x40000000);
+ m_ym2413[1]->set_unscaled_clock(r32(0x10) & 0x40000000 ? r32(0x10) & ~0x40000000 : 0);
+
+ m_ym2612[0]->set_unscaled_clock((version >= 0x110 ? r32(0x2c) : r32(0x10)) & ~0xc0000000);
+ m_ym2612[1]->set_unscaled_clock((version >= 0x110 ? r32(0x2c) : r32(0x10)) & 0x40000000 ? (version >= 0x110 ? r32(0x2c) : r32(0x10)) & ~0xc0000000 : 0);
+ if (version >= 0x110 && (r32(0x2c) & 0x80000000))
+ logerror("Warning: file requests an unsupported YM3438\n");
+
+ m_ym2151[0]->set_unscaled_clock((version >= 0x110 ? r32(0x30) : r32(0x10)) & ~0x40000000);
+ m_ym2151[1]->set_unscaled_clock((version >= 0x110 ? r32(0x30) : r32(0x10)) & 0x40000000 ? (version >= 0x110 ? r32(0x30) : r32(0x10)) & ~0x40000000 : 0);
+
+ m_segapcm->set_unscaled_clock(version >= 0x151 && data_start >= 0x3c ? r32(0x38) : 0);
+ m_segapcm->set_bank(version >= 0x151 && data_start >= 0x40 ? r32(0x3c) : 0);
+
+ m_rf5c68->set_unscaled_clock(version >= 0x151 && data_start >= 0x44 ? r32(0x40) : 0);
+ m_ym2203[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x48 ? r32(0x44) & ~0x40000000 : 0);
+ m_ym2203[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x48 && (r32(0x44) & 0x40000000) ? r32(0x44) & ~0x40000000 : 0);
+ m_ym2608[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x4c ? r32(0x48) & ~0x40000000 : 0);
+ m_ym2608[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x4c && r32(0x48) & 0x40000000 ? r32(0x48) & ~0x40000000 : 0);
+
+ m_ym2610[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x50 ? r32(0x4c) & ~0xc0000000 : 0);
+ m_ym2610[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x50 && r32(0x4c) & 0x40000000 ? r32(0x4c) & ~0xc0000000 : 0);
+ if (version >= 0x151 && data_start >= 0x50 && (r32(0x4c) & 0x80000000))
+ logerror("Warning: file requests an unsupported YM2610B\n");
+
+ m_ym3812[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x54 ? r32(0x50) & ~0x40000000 : 0);
+ m_ym3812[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x54 && r32(0x50) & 0x40000000 ? r32(0x50) & ~0x40000000 : 0);
+ m_ym3526[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x58 ? r32(0x54) & ~0x40000000 : 0);
+ m_ym3526[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x58 && r32(0x54) & 0x40000000 ? r32(0x54) & ~0x40000000 : 0);
+ m_y8950[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x5c ? r32(0x58) & ~0x40000000 : 0);
+ m_y8950[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x5c && r32(0x58) & 0x40000000 ? r32(0x58) & ~0x40000000 : 0);
+ m_ymf262[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x60 ? r32(0x5c) & ~0x40000000 : 0);
+ m_ymf262[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x60 && r32(0x5c) & 0x40000000 ? r32(0x5c) & ~0x40000000 : 0);
+ m_ymf278b[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x64 ? r32(0x60) & ~0x40000000 : 0);
+ m_ymf278b[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x64 && r32(0x60) & 0x40000000 ? r32(0x60) & ~0x40000000 : 0);
+ m_ymf271[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x68 ? r32(0x64) & ~0x40000000 : 0);
+ m_ymf271[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x68 && r32(0x64) & 0x40000000 ? r32(0x64) & ~0x40000000 : 0);
+ m_ymz280b[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x6c ? r32(0x68) & ~0x40000000 : 0);
+ m_ymz280b[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x6c && r32(0x68) & 0x40000000 ? r32(0x68) & ~0x40000000 : 0);
+
+ m_rf5c164->set_unscaled_clock(version >= 0x151 && data_start >= 0x70 ? r32(0x6c) : 0);
+
+ if(version >= 0x151 && data_start >= 0x74 && r32(0x70))
+ logerror("Warning: file requests an unsupported PWM\n");
+
+ m_ay8910[0]->set_unscaled_clock(version >= 0x151 && data_start >= 0x78 ? r32(0x74) & ~0x40000000 : 0);
+ m_ay8910[1]->set_unscaled_clock(version >= 0x151 && data_start >= 0x78 && (r32(0x74) & 0x40000000) ? r32(0x74) & ~0x40000000 : 0);
+ m_ay8910[0]->set_psg_type(vgm_ay8910_type(version >= 0x151 && data_start >= 0x7c ? r8(0x78) : 0));
+ m_ay8910[1]->set_psg_type(vgm_ay8910_type(version >= 0x151 && data_start >= 0x7c ? r8(0x78) : 0));
+ m_ay8910[0]->set_flags(vgm_ay8910_flags(version >= 0x151 && data_start >= 0x7a ? r8(0x79) : 0));
+ m_ay8910[1]->set_flags(vgm_ay8910_flags(version >= 0x151 && data_start >= 0x7a ? r8(0x79) : 0));
+ m_ym2203[0]->set_flags(vgm_ay8910_flags(version >= 0x151 && data_start >= 0x7b ? r8(0x7a) : 0));
+ m_ym2203[1]->set_flags(vgm_ay8910_flags(version >= 0x151 && data_start >= 0x7b ? r8(0x7a) : 0));
+ m_ym2608[0]->set_flags(vgm_ay8910_flags(version >= 0x151 && data_start >= 0x7c ? r8(0x7b) : 0));
+ m_ym2608[1]->set_flags(vgm_ay8910_flags(version >= 0x151 && data_start >= 0x7c ? r8(0x7b) : 0));
+
+ m_dmg->set_unscaled_clock(version >= 0x161 && data_start >= 0x84 ? r32(0x80) & ~0x40000000 : 0);
+ if (version >= 0x161 && data_start >= 0x84 && (r32(0x80) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd DMG\n");
+
+ m_nescpu->set_unscaled_clock(version >= 0x161 && data_start >= 0x88 ? r32(0x84) & ~0x40000000 : 0);
+ m_nescpu->m_apu->set_unscaled_clock(version >= 0x161 && data_start >= 0x88 ? r32(0x84) & ~0x40000000 : 0);
+ if (version >= 0x161 && data_start >= 0x88 && (r32(0x84) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd NES APU\n");
+
+ m_multipcm[0]->set_unscaled_clock(version >= 0x161 && data_start >= 0x8c ? r32(0x88) & ~0x40000000 : 0);
+ m_multipcm[1]->set_unscaled_clock(version >= 0x161 && data_start >= 0x8c && (r32(0x88) & 0x40000000) ? r32(0x88) & ~0x40000000 : 0);
+
+ if (version >= 0x161 && data_start >= 0x90 && r32(0x8c))
+ logerror("Warning: file requests an unsupported uPD7759\n");
+ if (version >= 0x161 && data_start >= 0x94 && r32(0x90))
+ logerror("Warning: file requests an unsupported OKIM6258\n");
+
+ m_k054539[0]->init_flags(version >= 0x161 && data_start >= 0x96 ? r8(0x95) : 0);
+ m_k054539[1]->init_flags(version >= 0x161 && data_start >= 0x96 ? r8(0x95) : 0);
+
+ m_okim6295_clock[0] = version >= 0x161 && data_start >= 0x9c ? r32(0x98) & ~0xc0000000 : 0;
+ m_okim6295_clock[1] = version >= 0x161 && data_start >= 0x9c && (r32(0x98) & 0x40000000) ? r32(0x98) & ~0xc0000000 : 0;
+ m_okim6295[0]->set_unscaled_clock(m_okim6295_clock[0]);
+ m_okim6295[1]->set_unscaled_clock(m_okim6295_clock[1]);
+
+ m_okim6295_pin7[0] = version >= 0x161 && data_start >= 0x9c && (r32(0x98) & 0x80000000) ? 1 : 0;
+ m_okim6295_pin7[1] = version >= 0x161 && data_start >= 0x9c && (r32(0x98) & 0x40000000) && (r32(0x98) & 0x80000000) ? 1 : 0;
+ m_okim6295[0]->set_pin7(m_okim6295_pin7[0] ? okim6295_device::PIN7_HIGH : okim6295_device::PIN7_LOW);
+ m_okim6295[1]->set_pin7(m_okim6295_pin7[1] ? okim6295_device::PIN7_HIGH : okim6295_device::PIN7_LOW);
+
+ m_k051649->set_unscaled_clock(version >= 0x161 && data_start >= 0xa0 ? r32(0x9c) & ~0x40000000 : 0);
+ if (version >= 0x161 && data_start >= 0xa0 && (r32(0x9c) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd K051649\n");
+
+ m_k054539[0]->set_clock_scale(384); // HACK: VGMs contain 48,000 instead of 18,432,000
+ m_k054539[1]->set_clock_scale(384); // HACK: VGMs contain 48,000 instead of 18,432,000
+ m_k054539[0]->set_unscaled_clock(version >= 0x161 && data_start >= 0xa4 ? r32(0xa0) & ~0x40000000 : 0);
+ m_k054539[1]->set_unscaled_clock(version >= 0x161 && data_start >= 0xa4 && (r32(0xa0) & 0x40000000) ? r32(0xa0) & ~0x40000000 : 0);
+
+ m_c6280->set_unscaled_clock(version >= 0x161 && data_start >= 0xa8 ? r32(0xa4) & ~0x40000000 : 0);
+ if (version >= 0x161 && data_start >= 0xa8 && (r32(0xa4) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd C6280\n");
+
+ if (version >= 0x161 && data_start >= 0xac && r32(0xa8))
+ logerror("Warning: file requests an unsupported C140\n");
+
+ m_k053260->set_unscaled_clock(version >= 0x161 && data_start >= 0xb0 ? r32(0xac) & ~0x40000000 : 0);
+ if (version >= 0x161 && data_start >= 0xb0 && (r32(0xac) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd K053260\n");
+
+ m_pokey[0]->set_unscaled_clock(version >= 0x161 && data_start >= 0xb4 ? r32(0xb0) & ~0x40000000 : 0);
+ m_pokey[1]->set_unscaled_clock(version >= 0x161 && data_start >= 0xb4 && (r32(0xb0) & 0x40000000) ? r32(0xb0) & ~0x40000000 : 0);
+
+ m_qsound->set_clock_scale(15); // HACK: VGMs contain 4,000,000 instead of 60,000,000
+ m_qsound->set_unscaled_clock(version >= 0x161 && data_start >= 0xb8 ? r32(0xb4) : 0);
+
+ if (version >= 0x171 && data_start >= 0xbc && r32(0xb8))
+ logerror("Warning: file requests an unsupported SCSP\n");
+
+ if (version >= 0x170 && data_start >= 0xc0 && r32(0xbc))
+ logerror("Warning: file requests an unsupported Extra Header\n");
+
+ if (version >= 0x171 && data_start >= 0xc4 && r32(0xc0))
+ logerror("Warning: file requests an unsupported WonderSwan\n");
+ if (version >= 0x171 && data_start >= 0xc8 && r32(0xc4))
+ logerror("Warning: file requests an unsupported VSU\n");
+ if (version >= 0x171 && data_start >= 0xcc && r32(0xc8))
+ logerror("Warning: file requests an unsupported SAA1099\n");
+ if (version >= 0x171 && data_start >= 0xd0 && r32(0xcc))
+ logerror("Warning: file requests an unsupported ES5503\n");
+ if (version >= 0x171 && data_start >= 0xd4 && r32(0xd0))
+ logerror("Warning: file requests an unsupported %s\n", r32(0xd0) & 0x80000000 ? "ES5506" : "ES5505");
+
+ m_c352->set_divider(version >= 0x171 && data_start >= 0xd7 && r8(0xd6) ? r8(0xd6) * 4 : 1);
+
+ m_x1_010->set_unscaled_clock(version >= 0x171 && data_start >= 0xdc ? r32(0xd8) & ~0x40000000 : 0);
+ if (version >= 0x171 && data_start >= 0xdc && (r32(0xd8) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd X1-010\n");
+
+ m_c352->set_unscaled_clock(version >= 0x171 && data_start >= 0xe0 ? r32(0xdc) & ~0x40000000 : 0);
+ if (version >= 0x171 && data_start >= 0xe0 && (r32(0xdc) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd C352\n");
+
+ m_ga20->set_unscaled_clock(version >= 0x171 && data_start >= 0xe4 ? r32(0xe0) & ~0x40000000 : 0);
+ if (version >= 0x171 && data_start >= 0xe4 && (r32(0xe0) & 0x40000000))
+ logerror("Warning: file requests an unsupported 2nd GA20\n");
+
+ machine().schedule_soft_reset();
+
+ return image_init_result::PASS;
}
}
@@ -1837,20 +2017,44 @@ void vgmplay_state::soundchips16_map(address_map &map)
void vgmplay_state::soundchips_map(address_map &map)
{
- map(vgmplay_device::REG_SIZE, vgmplay_device::REG_SIZE+3).r(FUNC(vgmplay_state::file_size_r));
- map(vgmplay_device::A_YM2612, vgmplay_device::A_YM2612+3).w(m_ym2612, FUNC(ym2612_device::write));
- map(vgmplay_device::A_YM2151, vgmplay_device::A_YM2151+1).w(m_ym2151, FUNC(ym2151_device::write));
- map(vgmplay_device::A_YM2413, vgmplay_device::A_YM2413+1).w(m_ym2413, FUNC(ym2413_device::write));
- map(vgmplay_device::A_YM2203A, vgmplay_device::A_YM2203A+1).w("ym2203a", FUNC(ym2203_device::write));
- map(vgmplay_device::A_YM2203B, vgmplay_device::A_YM2203B+1).w("ym2203b", FUNC(ym2203_device::write));
- map(vgmplay_device::A_YM3526, vgmplay_device::A_YM3526+1).w(m_ym3526, FUNC(ym3526_device::write));
- map(vgmplay_device::A_YM3812, vgmplay_device::A_YM3812+1).w(m_ym3812, FUNC(ym3812_device::write));
+ map(vgmplay_device::REG_SIZE, vgmplay_device::REG_SIZE + 3).r(FUNC(vgmplay_state::file_size_r));
+ map(vgmplay_device::A_SN76496_0 + 0, vgmplay_device::A_SN76496_0 + 0).w(m_sn76496[0], FUNC(sn76496_device::command_w));
+// map(vgmplay_device::A_SN76496_0 + 1, vgmplay_device::A_SN76496_0 + 1).w(m_sn76496[0], FUNC(sn76496_device::stereo_w)); // TODO: GG stereo
+ map(vgmplay_device::A_SN76496_1 + 0, vgmplay_device::A_SN76496_1 + 0).w(m_sn76496[1], FUNC(sn76496_device::command_w));
+// map(vgmplay_device::A_SN76496_1 + 1, vgmplay_device::A_SN76496_1 + 1).w(m_sn76496[1], FUNC(sn76496_device::stereo_w)); // TODO: GG stereo
+ map(vgmplay_device::A_YM2413_0, vgmplay_device::A_YM2413_0 + 1).w(m_ym2413[0], FUNC(ym2413_device::write));
+ map(vgmplay_device::A_YM2413_1, vgmplay_device::A_YM2413_1 + 1).w(m_ym2413[1], FUNC(ym2413_device::write));
+ map(vgmplay_device::A_YM2612_0, vgmplay_device::A_YM2612_0 + 3).w(m_ym2612[0], FUNC(ym2612_device::write));
+ map(vgmplay_device::A_YM2612_1, vgmplay_device::A_YM2612_1 + 3).w(m_ym2612[1], FUNC(ym2612_device::write));
+ map(vgmplay_device::A_YM2151_0, vgmplay_device::A_YM2151_0 + 1).w(m_ym2151[0], FUNC(ym2151_device::write));
+ map(vgmplay_device::A_YM2151_1, vgmplay_device::A_YM2151_1 + 1).w(m_ym2151[1], FUNC(ym2151_device::write));
+ map(vgmplay_device::A_SEGAPCM, vgmplay_device::A_SEGAPCM + 0x7ff).w(m_segapcm, FUNC(segapcm_device::sega_pcm_w));
+ map(vgmplay_device::A_RF5C68, vgmplay_device::A_RF5C68 + 0xf).w(m_rf5c68, FUNC(rf5c68_device::rf5c68_w));
+ map(vgmplay_device::A_RF5C68RAM, vgmplay_device::A_RF5C68RAM + 0xffff).w(m_rf5c68, FUNC(rf5c68_device::rf5c68_mem_w));
+ map(vgmplay_device::A_YM2203_0, vgmplay_device::A_YM2203_0 + 1).w(m_ym2203[0], FUNC(ym2203_device::write));
+ map(vgmplay_device::A_YM2203_1, vgmplay_device::A_YM2203_1 + 1).w(m_ym2203[1], FUNC(ym2203_device::write));
+ map(vgmplay_device::A_YM2608_0, vgmplay_device::A_YM2608_0 + 0x3).w(m_ym2608[0], FUNC(ym2608_device::write));
+ map(vgmplay_device::A_YM2608_1, vgmplay_device::A_YM2608_1 + 0x3).w(m_ym2608[1], FUNC(ym2608_device::write));
+ map(vgmplay_device::A_YM2610_0, vgmplay_device::A_YM2610_0 + 0x3).w(m_ym2610[0], FUNC(ym2610_device::write));
+ map(vgmplay_device::A_YM2610_1, vgmplay_device::A_YM2610_1 + 0x3).w(m_ym2610[1], FUNC(ym2610_device::write));
+ map(vgmplay_device::A_YM3812_0, vgmplay_device::A_YM3812_0 + 1).w(m_ym3812[0], FUNC(ym3812_device::write));
+ map(vgmplay_device::A_YM3812_1, vgmplay_device::A_YM3812_1 + 1).w(m_ym3812[1], FUNC(ym3812_device::write));
+ map(vgmplay_device::A_YM3526_0, vgmplay_device::A_YM3526_0 + 1).w(m_ym3526[0], FUNC(ym3526_device::write));
+ map(vgmplay_device::A_YM3526_1, vgmplay_device::A_YM3526_1 + 1).w(m_ym3526[1], FUNC(ym3526_device::write));
+ map(vgmplay_device::A_Y8950_0, vgmplay_device::A_Y8950_0 + 1).w(m_y8950[0], FUNC(y8950_device::write));
+ map(vgmplay_device::A_Y8950_1, vgmplay_device::A_Y8950_1 + 1).w(m_y8950[1], FUNC(y8950_device::write));
+ map(vgmplay_device::A_YMF262_0, vgmplay_device::A_YMF262_0 + 1).w(m_ymf262[0], FUNC(ymf262_device::write));
+ map(vgmplay_device::A_YMF262_1, vgmplay_device::A_YMF262_1 + 1).w(m_ymf262[1], FUNC(ymf262_device::write));
+ map(vgmplay_device::A_YMF278B_0, vgmplay_device::A_YMF278B_0 + 0xf).w(m_ymf278b[0], FUNC(ymf278b_device::write));
+ map(vgmplay_device::A_YMF278B_1, vgmplay_device::A_YMF278B_1 + 0xf).w(m_ymf278b[1], FUNC(ymf278b_device::write));
+ map(vgmplay_device::A_YMF271_0, vgmplay_device::A_YMF271_0 + 0xf).w(m_ymf271[0], FUNC(ymf271_device::write));
+ map(vgmplay_device::A_YMF271_1, vgmplay_device::A_YMF271_1 + 0xf).w(m_ymf271[1], FUNC(ymf271_device::write));
+ map(vgmplay_device::A_YMZ280B_0, vgmplay_device::A_YMZ280B_0 + 0x1).w(m_ymz280b[0], FUNC(ymz280b_device::write));
+ map(vgmplay_device::A_YMZ280B_1, vgmplay_device::A_YMZ280B_1 + 0x1).w(m_ymz280b[1], FUNC(ymz280b_device::write));
map(vgmplay_device::A_AY8910A, vgmplay_device::A_AY8910A).w("ay8910a", FUNC(ay8910_device::data_w));
map(vgmplay_device::A_AY8910A+1, vgmplay_device::A_AY8910A+1).w("ay8910a", FUNC(ay8910_device::address_w));
map(vgmplay_device::A_AY8910B, vgmplay_device::A_AY8910B).w("ay8910b", FUNC(ay8910_device::data_w));
map(vgmplay_device::A_AY8910B+1, vgmplay_device::A_AY8910B+1).w("ay8910b", FUNC(ay8910_device::address_w));
-// AM_RANGE(vgmplay_device::A_SN76496+0, vgmplay_device::A_SN76496+0) AM_DEVWRITE ("sn76496", sn76496_device, stereo_w)
- map(vgmplay_device::A_SN76496+1, vgmplay_device::A_SN76496+1).w(m_sn76496, FUNC(sn76496_device::command_w));
map(vgmplay_device::A_K053260, vgmplay_device::A_K053260+0x2f).w(m_k053260, FUNC(k053260_device::write));
map(vgmplay_device::A_C6280, vgmplay_device::A_C6280+0xf).w(m_c6280, FUNC(c6280_device::c6280_w));
map(vgmplay_device::A_OKIM6295A, vgmplay_device::A_OKIM6295A).w("okim6295a", FUNC(okim6295_device::write));
@@ -1865,7 +2069,6 @@ void vgmplay_state::soundchips_map(address_map &map)
map(vgmplay_device::A_OKIM6295B+0xe, vgmplay_device::A_OKIM6295B+0xe).w("vgmplay", FUNC(vgmplay_device::okim6295_nmk112_enable_w<1>));
map(vgmplay_device::A_OKIM6295B+0xf, vgmplay_device::A_OKIM6295B+0xf).w("vgmplay", FUNC(vgmplay_device::okim6295_bank_w<1>));
map(vgmplay_device::A_OKIM6295B+0x10, vgmplay_device::A_OKIM6295B+0x13).w("vgmplay", FUNC(vgmplay_device::okim6295_nmk112_bank_w<1>));
- map(vgmplay_device::A_SEGAPCM, vgmplay_device::A_SEGAPCM+0x7ff).w(m_segapcm, FUNC(segapcm_device::sega_pcm_w));
map(vgmplay_device::A_GAMEBOY, vgmplay_device::A_GAMEBOY+0x16).w(m_dmg, FUNC(gameboy_sound_device::sound_w));
map(vgmplay_device::A_GAMEBOY+0x20, vgmplay_device::A_GAMEBOY+0x2f).w(m_dmg, FUNC(gameboy_sound_device::wave_w));
map(vgmplay_device::A_NESAPU, vgmplay_device::A_NESAPU+0x1f).w("nescpu:nesapu", FUNC(nesapu_device::write));
@@ -1878,111 +2081,113 @@ void vgmplay_state::soundchips_map(address_map &map)
map(vgmplay_device::A_MULTIPCMB+8, vgmplay_device::A_MULTIPCMB+11).w("vgmplay", FUNC(vgmplay_device::multipcm_bank_lo_w<1>));
map(vgmplay_device::A_POKEYA, vgmplay_device::A_POKEYA+0xf).w("pokeya", FUNC(pokey_device::write));
map(vgmplay_device::A_POKEYB, vgmplay_device::A_POKEYB+0xf).w("pokeyb", FUNC(pokey_device::write));
- map(vgmplay_device::A_YMF271, vgmplay_device::A_YMF271+0xf).w(m_ymf271, FUNC(ymf271_device::write));
- map(vgmplay_device::A_YMZ280B, vgmplay_device::A_YMZ280B+0x1).w(m_ymz280b, FUNC(ymz280b_device::write));
- map(vgmplay_device::A_YM2608, vgmplay_device::A_YM2608+0x3).w(m_ym2608, FUNC(ym2608_device::write));
map(vgmplay_device::A_K054539A, vgmplay_device::A_K054539A+0x22f).w("k054539a", FUNC(k054539_device::write));
map(vgmplay_device::A_K054539B, vgmplay_device::A_K054539B+0x22f).w("k054539b", FUNC(k054539_device::write));
map(vgmplay_device::A_QSOUND, vgmplay_device::A_QSOUND+0x2).w(m_qsound, FUNC(qsound_device::qsound_w));
map(vgmplay_device::A_K051649, vgmplay_device::A_K051649+0xf).w(FUNC(vgmplay_state::scc_w));
map(vgmplay_device::A_GA20, vgmplay_device::A_GA20+0x1f).w(m_ga20, FUNC(iremga20_device::irem_ga20_w));
- map(vgmplay_device::A_RF5C68, vgmplay_device::A_RF5C68+0xf).w(m_rf5c68, FUNC(rf5c68_device::rf5c68_w));
map(vgmplay_device::A_RF5C164, vgmplay_device::A_RF5C164+0xf).w(m_rf5c164, FUNC(rf5c68_device::rf5c68_w));
- map(vgmplay_device::A_RF5C68RAM, vgmplay_device::A_RF5C68RAM+0xffff).w(m_rf5c68, FUNC(rf5c68_device::rf5c68_mem_w));
map(vgmplay_device::A_RF5C164RAM, vgmplay_device::A_RF5C164RAM+0xffff).w(m_rf5c164, FUNC(rf5c68_device::rf5c68_mem_w));
map(vgmplay_device::A_X1_010, vgmplay_device::A_X1_010+0x1fff).w(m_x1_010, FUNC(x1_010_device::write));
}
+template<int Chip>
void vgmplay_state::segapcm_map(address_map &map)
{
- map(0, 0x1fffff).r("vgmplay", FUNC(vgmplay_device::segapcm_rom_r));
+ map(0, 0x1fffff).r("vgmplay", FUNC(vgmplay_device::segapcm_rom_r<Chip>));
}
-void vgmplay_state::multipcma_map(address_map &map)
+template<int Chip>
+void vgmplay_state::ymf278b_map(address_map &map)
{
- map(0, 0x3fffff).r("vgmplay", FUNC(vgmplay_device::multipcm_rom_r<0>));
+ map(0, 0x3fffff).r("vgmplay", FUNC(vgmplay_device::ymf278b_rom_r<Chip>));
}
-void vgmplay_state::multipcmb_map(address_map &map)
+template<int Chip>
+void vgmplay_state::ymf271_map(address_map &map)
{
- map(0, 0x3fffff).r("vgmplay", FUNC(vgmplay_device::multipcm_rom_r<1>));
+ map(0, 0x7fffff).r("vgmplay", FUNC(vgmplay_device::ymf271_rom_r<Chip>));
}
-void vgmplay_state::k053260_map(address_map &map)
+template<int Chip>
+void vgmplay_state::ymz280b_map(address_map &map)
{
- map(0, 0x1fffff).r("vgmplay", FUNC(vgmplay_device::k053260_rom_r));
+ map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::ymz280b_rom_r<Chip>));
}
-void vgmplay_state::okim6295a_map(address_map &map)
+template<int Chip>
+void vgmplay_state::multipcm_map(address_map &map)
{
- map(0, 0x3ffff).r("vgmplay", FUNC(vgmplay_device::okim6295_rom_r<0>));
+ map(0, 0x3fffff).r("vgmplay", FUNC(vgmplay_device::multipcm_rom_r<Chip>));
}
-void vgmplay_state::okim6295b_map(address_map &map)
+template<int Chip>
+void vgmplay_state::k053260_map(address_map &map)
{
- map(0, 0x3ffff).r("vgmplay", FUNC(vgmplay_device::okim6295_rom_r<1>));
+ map(0, 0x1fffff).r("vgmplay", FUNC(vgmplay_device::k053260_rom_r<Chip>));
}
-void vgmplay_state::k054539a_map(address_map &map)
+template<int Chip>
+void vgmplay_state::okim6295_map(address_map &map)
{
- map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::k054539_rom_r<0>));
+ map(0, 0x3ffff).r("vgmplay", FUNC(vgmplay_device::okim6295_rom_r<Chip>));
}
-void vgmplay_state::k054539b_map(address_map &map)
+template<int Chip>
+void vgmplay_state::k054539_map(address_map &map)
{
- map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::k054539_rom_r<1>));
+ map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::k054539_rom_r<Chip>));
}
+template<int Chip>
void vgmplay_state::c352_map(address_map &map)
{
- map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::c352_rom_r));
+ map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::c352_rom_r<Chip>));
}
+template<int Chip>
void vgmplay_state::qsound_map(address_map &map)
{
- map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::qsound_rom_r));
-}
-
-void vgmplay_state::ymf271_map(address_map &map)
-{
- map(0, 0x7fffff).r("vgmplay", FUNC(vgmplay_device::ymf271_rom_r));
-}
-
-void vgmplay_state::ymz280b_map(address_map &map)
-{
- map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::ymz280b_rom_r));
+ map(0, 0xffffff).r("vgmplay", FUNC(vgmplay_device::qsound_rom_r<Chip>));
}
+template<int Chip>
void vgmplay_state::ga20_map(address_map &map)
{
- map(0, 0xfffff).r("vgmplay", FUNC(vgmplay_device::ga20_rom_r));
+ map(0, 0xfffff).r("vgmplay", FUNC(vgmplay_device::ga20_rom_r<Chip>));
}
+template<int Chip>
void vgmplay_state::x1_010_map(address_map &map)
{
- map(0, 0xfffff).r("vgmplay", FUNC(vgmplay_device::x1_010_rom_r));
+ map(0, 0xfffff).r("vgmplay", FUNC(vgmplay_device::x1_010_rom_r<Chip>));
}
+template<int Chip>
void vgmplay_state::nescpu_map(address_map &map)
{
map(0, 0xffff).ram().share("nesapu_ram");
}
+template<int Chip>
void vgmplay_state::rf5c68_map(address_map &map)
{
map(0, 0xffff).ram().share("rf5c68_ram");
}
+template<int Chip>
void vgmplay_state::rf5c164_map(address_map &map)
{
map(0, 0xffff).ram().share("rf5c164_ram");
}
+template<int Chip>
void vgmplay_state::h6280_map(address_map &map)
{
map(0, 0xffff).noprw();
}
+template<int Chip>
void vgmplay_state::h6280_io_map(address_map &map)
{
map(0, 3).noprw();
@@ -1994,76 +2199,173 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay)
MCFG_DEVICE_IO_MAP( soundchips_map )
MCFG_CPU_IO16_MAP( soundchips16_map )
- MCFG_DEVICE_ADD("file", BITBANGER, 0)
- MCFG_BITBANGER_READONLY(true)
+ MCFG_QUICKLOAD_ADD("quickload", vgmplay_state, load_file, "vgm,vgz", 0)
+ MCFG_QUICKLOAD_INTERFACE("vgm_quik")
+
+ MCFG_SOFTWARE_LIST_ADD("vgm_list", "vgmplay")
+
config.set_default_layout(layout_vgmplay);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ym2612", YM2612, 7670454)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1)
+ SN76496(config, m_sn76496[0], 0);
+ m_sn76496[0]->add_route(0, "lspeaker", 0.5);
+ m_sn76496[0]->add_route(0, "rspeaker", 0.5);
- MCFG_DEVICE_ADD("ym2151", YM2151, 3579545)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1)
+ SN76496(config, m_sn76496[1], 0);
+ m_sn76496[1]->add_route(0, "lspeaker", 0.5);
+ m_sn76496[1]->add_route(0, "rspeaker", 0.5);
+
+ YM2413(config, m_ym2413[0], 0);
+ m_ym2413[0]->add_route(ALL_OUTPUTS, "lspeaker", 1);
+ m_ym2413[0]->add_route(ALL_OUTPUTS, "rspeaker", 1);
+
+ YM2413(config, m_ym2413[1], 0);
+ m_ym2413[1]->add_route(0, "lspeaker", 1);
+ m_ym2413[1]->add_route(1, "rspeaker", 1);
+
+ YM2612(config, m_ym2612[0], 0);
+ m_ym2612[0]->add_route(0, "lspeaker", 1);
+ m_ym2612[0]->add_route(1, "rspeaker", 1);
+
+ YM2612(config, m_ym2612[1], 0);
+ m_ym2612[1]->add_route(0, "lspeaker", 1);
+ m_ym2612[1]->add_route(1, "rspeaker", 1);
- MCFG_DEVICE_ADD("ym2413", YM2413, 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1)
+ YM2151(config, m_ym2151[0], 0);
+ m_ym2151[0]->add_route(0, "lspeaker", 1);
+ m_ym2151[0]->add_route(1, "rspeaker", 1);
- MCFG_DEVICE_ADD("sn76496", SN76496, 3579545)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.5)
- MCFG_SOUND_ROUTE(0, "rspeaker", 0.5)
+ YM2151(config, m_ym2151[1], 0);
+ m_ym2151[1]->add_route(0, "lspeaker", 1);
+ m_ym2151[1]->add_route(1, "rspeaker", 1);
- MCFG_DEVICE_ADD("segapcm", SEGAPCM, 4000000)
+ MCFG_DEVICE_ADD("segapcm", SEGAPCM, 0)
MCFG_SEGAPCM_BANK(BANK_512) // Should be configurable for yboard...
- MCFG_DEVICE_ADDRESS_MAP(0, segapcm_map)
+ MCFG_DEVICE_ADDRESS_MAP(0, segapcm_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("multipcma", MULTIPCM, 8000000)
- MCFG_DEVICE_ADDRESS_MAP(0, multipcma_map)
+ RF5C68(config, m_rf5c68, 0);
+ m_rf5c68->set_addrmap(0, &vgmplay_state::rf5c68_map<0>);
+ m_rf5c68->add_route(0, "lspeaker", 1);
+ m_rf5c68->add_route(1, "rspeaker", 1);
+
+ YM2203(config, m_ym2203[0], 0);
+ m_ym2203[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ym2203[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YM2203(config, m_ym2203[1], 0);
+ m_ym2203[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ym2203[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YM2608(config, m_ym2608[0], 0);
+ m_ym2608[0]->add_route(ALL_OUTPUTS, "lspeaker", 1);
+ m_ym2608[0]->add_route(ALL_OUTPUTS, "rspeaker", 1);
+
+ YM2608(config, m_ym2608[1], 0);
+ m_ym2608[1]->add_route(ALL_OUTPUTS, "lspeaker", 1);
+ m_ym2608[1]->add_route(ALL_OUTPUTS, "rspeaker", 1);
+
+ YM2610(config, m_ym2610[0], 0);
+ m_ym2610[0]->add_route(0, "lspeaker", 0.25);
+ m_ym2610[0]->add_route(0, "rspeaker", 0.25);
+ m_ym2610[0]->add_route(1, "lspeaker", 0.50);
+ m_ym2610[0]->add_route(2, "rspeaker", 0.50);
+
+ YM2610(config, m_ym2610[1], 0);
+ m_ym2610[1]->add_route(0, "lspeaker", 0.25);
+ m_ym2610[1]->add_route(0, "rspeaker", 0.25);
+ m_ym2610[1]->add_route(1, "lspeaker", 0.50);
+ m_ym2610[1]->add_route(2, "rspeaker", 0.50);
+
+ YM3812(config, m_ym3812[0], 0);
+ m_ym3812[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_ym3812[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+
+ YM3812(config, m_ym3812[1], 0);
+ m_ym3812[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_ym3812[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+
+ YM3526(config, m_ym3526[0], 0);
+ m_ym3526[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_ym3526[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+
+ YM3526(config, m_ym3526[1], 0);
+ m_ym3526[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_ym3526[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+
+ Y8950(config, m_y8950[0], 0);
+ m_y8950[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.40);
+ m_y8950[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.40);
+
+ Y8950(config, m_y8950[1], 0);
+ m_y8950[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.40);
+ m_y8950[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.40);
+
+ YMF262(config, m_ymf262[0], 0);
+ m_ymf262[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.00);
+ m_ymf262[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.00);
+
+ YMF262(config, m_ymf262[1], 0);
+ m_ymf262[1]->add_route(ALL_OUTPUTS, "lspeaker", 1.00);
+ m_ymf262[1]->add_route(ALL_OUTPUTS, "rspeaker", 1.00);
+
+ YMF278B(config, m_ymf278b[0], 0);
+ m_ymf278b[0]->set_addrmap(0, &vgmplay_state::ymf278b_map<0>);
+ m_ymf278b[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ymf278b[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YMF278B(config, m_ymf278b[1], 0);
+ m_ymf278b[1]->set_addrmap(0, &vgmplay_state::ymf278b_map<1>);
+ m_ymf278b[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ymf278b[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YMF271(config, m_ymf271[0], 0);
+ m_ymf271[0]->set_addrmap(0, &vgmplay_state::ymf271_map<0>);
+ m_ymf271[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ymf271[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YMF271(config, m_ymf271[1], 0);
+ m_ymf271[1]->set_addrmap(0, &vgmplay_state::ymf271_map<0>);
+ m_ymf271[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ymf271[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YMZ280B(config, m_ymz280b[0], 0);
+ m_ymz280b[0]->set_addrmap(0, &vgmplay_state::ymz280b_map<0>);
+ m_ymz280b[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ymz280b[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ YMZ280B(config, m_ymz280b[1], 0);
+ m_ymz280b[1]->set_addrmap(0, &vgmplay_state::ymz280b_map<1>);
+ m_ymz280b[1]->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
+ m_ymz280b[1]->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
+
+ MCFG_DEVICE_ADD("multipcma", MULTIPCM, 0)
+ MCFG_DEVICE_ADDRESS_MAP(0, multipcm_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("multipcmb", MULTIPCM, 8000000)
- MCFG_DEVICE_ADDRESS_MAP(0, multipcmb_map)
+ MCFG_DEVICE_ADD("multipcmb", MULTIPCM, 0)
+ MCFG_DEVICE_ADDRESS_MAP(0, multipcm_map<1>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("dmg", DMG_APU, XTAL(4'194'304))
+ MCFG_DEVICE_ADD("dmg", DMG_APU, 0)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("ay8910a", AY8910, 1500000)
+ MCFG_DEVICE_ADD("ay8910a", AY8910, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.33)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33)
- MCFG_DEVICE_ADD("ay8910b", AY8910, 1500000)
+ MCFG_DEVICE_ADD("ay8910b", AY8910, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.33)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33)
- MCFG_DEVICE_ADD("ym2203a", YM2203, 4000000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
-
- MCFG_DEVICE_ADD("ym2203b", YM2203, 4000000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
-
- MCFG_DEVICE_ADD("ym3526", YM3526, 4000000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
-
- MCFG_DEVICE_ADD("ym3812", YM3812, 4000000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
-
- MCFG_DEVICE_ADD("nescpu", N2A03, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(nescpu_map)
- MCFG_DEVICE_DISABLE()
+ MCFG_DEVICE_ADD("nescpu", N2A03, 0)
+ MCFG_DEVICE_PROGRAM_MAP(nescpu_map<0>)
MCFG_DEVICE_MODIFY("nescpu:nesapu")
MCFG_SOUND_ROUTES_RESET()
@@ -2071,101 +2373,85 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":rspeaker", 0.50)
MCFG_DEVICE_ADD("h6280", H6280, 1000000)
- MCFG_DEVICE_PROGRAM_MAP(h6280_map)
- MCFG_DEVICE_IO_MAP(h6280_io_map)
+ MCFG_DEVICE_PROGRAM_MAP(h6280_map<0>)
+ MCFG_DEVICE_IO_MAP(h6280_io_map<0>)
MCFG_DEVICE_DISABLE()
- MCFG_DEVICE_ADD("c6280", C6280, 3579545)
+ MCFG_DEVICE_ADD("c6280", C6280, 0)
MCFG_C6280_CPU("h6280")
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_K053260_ADD("k053260", 3579545)
- MCFG_DEVICE_ADDRESS_MAP(0, k053260_map)
+ MCFG_K053260_ADD("k053260", 0)
+ MCFG_DEVICE_ADDRESS_MAP(0, k053260_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("pokeya", POKEY, 1789772)
+ MCFG_DEVICE_ADD("pokeya", POKEY, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
- MCFG_DEVICE_ADD("pokeyb", POKEY, 1789772)
+ MCFG_DEVICE_ADD("pokeyb", POKEY, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5)
- MCFG_DEVICE_ADD("c352", C352, 1000000, 288)
- MCFG_DEVICE_ADDRESS_MAP(0, c352_map)
+ MCFG_DEVICE_ADD("c352", C352, 0, 1)
+ MCFG_DEVICE_ADDRESS_MAP(0, c352_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("okim6295a", OKIM6295, 1000000, okim6295_device::PIN7_HIGH)
- MCFG_DEVICE_ADDRESS_MAP(0, okim6295a_map)
+ MCFG_DEVICE_ADD("okim6295a", OKIM6295, 0, okim6295_device::PIN7_HIGH)
+ MCFG_DEVICE_ADDRESS_MAP(0, okim6295_map<0>)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
- MCFG_DEVICE_ADD("okim6295b", OKIM6295, 1000000, okim6295_device::PIN7_HIGH)
- MCFG_DEVICE_ADDRESS_MAP(0, okim6295b_map)
+ MCFG_DEVICE_ADD("okim6295b", OKIM6295, 0, okim6295_device::PIN7_HIGH)
+ MCFG_DEVICE_ADDRESS_MAP(0, okim6295_map<1>)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
- MCFG_DEVICE_ADD("ymf271", YMF271, 16934400)
- MCFG_DEVICE_ADDRESS_MAP(0, ymf271_map)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1)
-
- MCFG_DEVICE_ADD("ymz280b", YMZ280B, 16934400)
- MCFG_DEVICE_ADDRESS_MAP(0, ymz280b_map)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1)
-
- MCFG_DEVICE_ADD("ym2608", YM2608, 8000000)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(0, "rspeaker", 0.25)
- MCFG_SOUND_ROUTE(1, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(2, "rspeaker", 0.50)
-
- MCFG_DEVICE_ADD("k054539a", K054539, XTAL(18'432'000))
- MCFG_DEVICE_ADDRESS_MAP(0, k054539a_map)
+ MCFG_DEVICE_ADD("k054539a", K054539, 0)
+ MCFG_DEVICE_ADDRESS_MAP(0, k054539_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("k054539b", K054539, XTAL(18'432'000))
- MCFG_DEVICE_ADDRESS_MAP(0, k054539b_map)
+ MCFG_DEVICE_ADD("k054539b", K054539, 0)
+ MCFG_DEVICE_ADDRESS_MAP(0, k054539_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_DEVICE_ADD("qsound", QSOUND)
- MCFG_DEVICE_ADDRESS_MAP(0, qsound_map)
+ MCFG_DEVICE_ADD("qsound", QSOUND, 0)
+ MCFG_DEVICE_ADDRESS_MAP(0, qsound_map<0>)
MCFG_SOUND_ROUTE(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1)
- MCFG_K051649_ADD("k051649", 3579545)
+ MCFG_K051649_ADD("k051649", 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.33)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33)
- IREMGA20(config, m_ga20, 3579545);
- m_ga20->set_addrmap(0, &vgmplay_state::ga20_map);
+ IREMGA20(config, m_ga20, 0);
+ m_ga20->set_addrmap(0, &vgmplay_state::ga20_map<0>);
m_ga20->add_route(0, "lspeaker", 1);
m_ga20->add_route(1, "rspeaker", 1);
- RF5C68(config, m_rf5c68, 12500000);
- m_rf5c68->set_addrmap(0, &vgmplay_state::rf5c68_map);
- m_rf5c68->add_route(0, "lspeaker", 1);
- m_rf5c68->add_route(1, "rspeaker", 1);
-
- RF5C68(config, m_rf5c164, 12500000); // TODO : !!RF5C164!!
- m_rf5c164->set_addrmap(0, &vgmplay_state::rf5c164_map);
+ RF5C68(config, m_rf5c164, 0); // TODO : !!RF5C164!!
+ m_rf5c164->set_addrmap(0, &vgmplay_state::rf5c164_map<0>);
m_rf5c164->add_route(0, "lspeaker", 1);
m_rf5c164->add_route(1, "rspeaker", 1);
- X1_010(config, m_x1_010, 16000000);
- m_x1_010->set_addrmap(0, &vgmplay_state::x1_010_map);
+ X1_010(config, m_x1_010, 0);
+ m_x1_010->set_addrmap(0, &vgmplay_state::x1_010_map<0>);
m_x1_010->add_route(0, "lspeaker", 1);
m_x1_010->add_route(1, "rspeaker", 1);
MACHINE_CONFIG_END
ROM_START( vgmplay )
- ROM_REGION( 0x80000, "ym2608", ROMREGION_ERASE00 )
+ ROM_REGION( 0x80000, "ym2608.0", ROMREGION_ERASE00 )
+ ROM_REGION( 0x80000, "ym2608.1", ROMREGION_ERASE00 )
+ ROM_REGION( 0x80000, "ym2610.0", ROMREGION_ERASE00 )
+ ROM_REGION( 0x80000, "ym2610.1", ROMREGION_ERASE00 )
+ ROM_REGION( 0x80000, "y8950.0", ROMREGION_ERASE00 )
+ ROM_REGION( 0x80000, "y8950.1", ROMREGION_ERASE00 )
ROM_END
CONS( 2016, vgmplay, 0, 0, vgmplay, vgmplay, vgmplay_state, empty_init, "MAME", "VGM player", MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/wpc_dot.cpp b/src/mame/drivers/wpc_dot.cpp
index 60835081bcf..b1fe1de42a0 100644
--- a/src/mame/drivers/wpc_dot.cpp
+++ b/src/mame/drivers/wpc_dot.cpp
@@ -170,18 +170,18 @@ void wpc_dot_state::init_wpc_dot()
m_cpubank->set_entry(0);
m_fixedbank->configure_entries(0, 1, &fixed[codeoff],0x8000);
m_fixedbank->set_entry(0);
- m_dmdbank1->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
- m_dmdbank1->set_entry(0);
- m_dmdbank2->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
- m_dmdbank2->set_entry(1);
- m_dmdbank3->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
- m_dmdbank3->set_entry(2);
- m_dmdbank4->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
- m_dmdbank4->set_entry(3);
- m_dmdbank5->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
- m_dmdbank5->set_entry(4);
- m_dmdbank6->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
- m_dmdbank6->set_entry(5);
+ m_dmdbanks[0]->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
+ m_dmdbanks[0]->set_entry(0);
+ m_dmdbanks[1]->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
+ m_dmdbanks[1]->set_entry(1);
+ m_dmdbanks[2]->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
+ m_dmdbanks[2]->set_entry(2);
+ m_dmdbanks[3]->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
+ m_dmdbanks[3]->set_entry(3);
+ m_dmdbanks[4]->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
+ m_dmdbanks[4]->set_entry(4);
+ m_dmdbanks[5]->configure_entries(0, 16, &m_dmdram[0x0000],0x200);
+ m_dmdbanks[5]->set_entry(5);
m_vblank_timer = timer_alloc(TIMER_VBLANK);
m_vblank_timer->adjust(attotime::from_hz(60),0,attotime::from_hz(60*4));
m_irq_timer = timer_alloc(TIMER_IRQ);
@@ -213,28 +213,18 @@ WRITE8_MEMBER(wpc_dot_state::wpc_rombank_w)
WRITE8_MEMBER(wpc_dot_state::wpc_dmdbank_w)
{
- uint8_t page = offset >> 4;
+ uint8_t const bank(offset & 0x07);
+ uint8_t const page(offset >> 4);
- switch(offset & 0x07)
+ switch (bank)
{
case 0:
- m_dmdbank1->set_entry(data + (page*16));
- break;
case 1:
- m_dmdbank2->set_entry(data + (page*16));
- break;
case 2:
- m_dmdbank3->set_entry(data + (page*16));
- break;
case 3:
- m_dmdbank4->set_entry(data + (page*16));
- break;
case 4:
- m_dmdbank5->set_entry(data + (page*16));
- break;
case 5:
- m_dmdbank6->set_entry(data + (page*16));
- break;
+ m_dmdbanks[bank]->set_entry(data + (page << 4));
}
}
@@ -321,13 +311,12 @@ MACHINE_CONFIG_START(wpc_dot_state::wpc_dot)
MCFG_WPC_SOUND_REPLY_CALLBACK(WRITELINE(*this, wpc_dot_state,wpcsnd_reply_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
- config.set_default_layout(layout_lcd);
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(128, 32)
- MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 32-1)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(wpc_dot_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_native_aspect();
+ screen.set_size(128, 32);
+ screen.set_visarea(0, 128-1, 0, 32-1);
+ screen.set_refresh_hz(60);
+ screen.set_screen_update(FUNC(wpc_dot_state::screen_update));
MACHINE_CONFIG_END
/*-----------------
diff --git a/src/mame/drivers/wpc_flip1.cpp b/src/mame/drivers/wpc_flip1.cpp
index f8c801e824b..3a524f5e925 100644
--- a/src/mame/drivers/wpc_flip1.cpp
+++ b/src/mame/drivers/wpc_flip1.cpp
@@ -164,26 +164,25 @@ MACHINE_CONFIG_START(wpc_flip1_state::wpc_flip1)
MCFG_DEVICE_PROGRAM_MAP(wpc_flip1_map)
MCFG_WMS_WPC_ADD("wpc")
- MCFG_WPC_IRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_dot_state,wpc_irq_w))
- MCFG_WPC_FIRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_dot_state,wpc_firq_w))
- MCFG_WPC_ROMBANK(WRITE8(*this, wpc_dot_state,wpc_rombank_w))
- MCFG_WPC_SOUND_CTRL(READ8(*this, wpc_dot_state,wpc_sound_ctrl_r),WRITE8(*this, wpc_dot_state,wpc_sound_ctrl_w))
- MCFG_WPC_SOUND_DATA(READ8(*this, wpc_dot_state,wpc_sound_data_r),WRITE8(*this, wpc_dot_state,wpc_sound_data_w))
- MCFG_WPC_DMDBANK(WRITE8(*this, wpc_dot_state,wpc_dmdbank_w))
+ MCFG_WPC_IRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_flip1_state,wpc_irq_w))
+ MCFG_WPC_FIRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_flip1_state,wpc_firq_w))
+ MCFG_WPC_ROMBANK(WRITE8(*this, wpc_flip1_state,wpc_rombank_w))
+ MCFG_WPC_SOUND_CTRL(READ8(*this, wpc_flip1_state,wpc_sound_ctrl_r),WRITE8(*this, wpc_flip1_state,wpc_sound_ctrl_w))
+ MCFG_WPC_SOUND_DATA(READ8(*this, wpc_flip1_state,wpc_sound_data_r),WRITE8(*this, wpc_flip1_state,wpc_sound_data_w))
+ MCFG_WPC_DMDBANK(WRITE8(*this, wpc_flip1_state,wpc_dmdbank_w))
SPEAKER(config, "speaker").front_center();
MCFG_DEVICE_ADD("wpcsnd", WPCSND)
MCFG_WPC_ROM_REGION("sound1")
- MCFG_WPC_SOUND_REPLY_CALLBACK(WRITELINE(*this, wpc_dot_state,wpcsnd_reply_w))
+ MCFG_WPC_SOUND_REPLY_CALLBACK(WRITELINE(*this, wpc_flip1_state,wpcsnd_reply_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
- config.set_default_layout(layout_lcd);
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(128, 32)
- MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 32-1)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(wpc_dot_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_native_aspect();
+ screen.set_size(128, 32);
+ screen.set_visarea(0, 128-1, 0, 32-1);
+ screen.set_refresh_hz(60);
+ screen.set_screen_update(FUNC(wpc_flip1_state::screen_update));
MACHINE_CONFIG_END
/*-----------------
diff --git a/src/mame/drivers/wpc_flip2.cpp b/src/mame/drivers/wpc_flip2.cpp
index e9e421b6e40..bd4a7e2eb62 100644
--- a/src/mame/drivers/wpc_flip2.cpp
+++ b/src/mame/drivers/wpc_flip2.cpp
@@ -193,26 +193,25 @@ MACHINE_CONFIG_START(wpc_flip2_state::wpc_flip2)
MCFG_DEVICE_PROGRAM_MAP(wpc_flip2_map)
MCFG_WMS_WPC_ADD("wpc")
- MCFG_WPC_IRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_dot_state,wpc_irq_w))
- MCFG_WPC_FIRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_dot_state,wpc_firq_w))
- MCFG_WPC_ROMBANK(WRITE8(*this, wpc_dot_state,wpc_rombank_w))
- MCFG_WPC_SOUND_CTRL(READ8(*this, wpc_dot_state,wpc_sound_ctrl_r),WRITE8(*this, wpc_dot_state,wpc_sound_ctrl_w))
- MCFG_WPC_SOUND_DATA(READ8(*this, wpc_dot_state,wpc_sound_data_r),WRITE8(*this, wpc_dot_state,wpc_sound_data_w))
- MCFG_WPC_DMDBANK(WRITE8(*this, wpc_dot_state,wpc_dmdbank_w))
+ MCFG_WPC_IRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_flip2_state,wpc_irq_w))
+ MCFG_WPC_FIRQ_ACKNOWLEDGE(WRITELINE(*this, wpc_flip2_state,wpc_firq_w))
+ MCFG_WPC_ROMBANK(WRITE8(*this, wpc_flip2_state,wpc_rombank_w))
+ MCFG_WPC_SOUND_CTRL(READ8(*this, wpc_flip2_state,wpc_sound_ctrl_r),WRITE8(*this, wpc_flip2_state,wpc_sound_ctrl_w))
+ MCFG_WPC_SOUND_DATA(READ8(*this, wpc_flip2_state,wpc_sound_data_r),WRITE8(*this, wpc_flip2_state,wpc_sound_data_w))
+ MCFG_WPC_DMDBANK(WRITE8(*this, wpc_flip2_state,wpc_dmdbank_w))
SPEAKER(config, "speaker").front_center();
MCFG_DEVICE_ADD("wpcsnd", WPCSND)
MCFG_WPC_ROM_REGION("sound1")
- MCFG_WPC_SOUND_REPLY_CALLBACK(WRITELINE(*this, wpc_dot_state,wpcsnd_reply_w))
+ MCFG_WPC_SOUND_REPLY_CALLBACK(WRITELINE(*this, wpc_flip2_state,wpcsnd_reply_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
- config.set_default_layout(layout_lcd);
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(128, 32)
- MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 32-1)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(wpc_dot_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_native_aspect();
+ screen.set_size(128, 32);
+ screen.set_visarea(0, 128-1, 0, 32-1);
+ screen.set_refresh_hz(60);
+ screen.set_screen_update(FUNC(wpc_flip2_state::screen_update));
MACHINE_CONFIG_END
/*-----------------
diff --git a/src/mame/drivers/x07.cpp b/src/mame/drivers/x07.cpp
index 2e0074aab21..ad8bf59eeaa 100644
--- a/src/mame/drivers/x07.cpp
+++ b/src/mame/drivers/x07.cpp
@@ -1497,7 +1497,6 @@ MACHINE_CONFIG_START(x07_state::x07)
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(x07_state, x07)
- config.set_default_layout(layout_lcd);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_x07)
/* sound hardware */
diff --git a/src/mame/drivers/y2.cpp b/src/mame/drivers/y2.cpp
index f67b35e0957..a5eafc7a80f 100644
--- a/src/mame/drivers/y2.cpp
+++ b/src/mame/drivers/y2.cpp
@@ -81,8 +81,8 @@ MACHINE_CONFIG_START(system_board_y2_state::system_board_y2)
SPEAKER(config, "mono").front_center();
MACHINE_CONFIG_END
-ROM_START( kof2002um )
- ROM_REGION( 0x8000000, "boot", 0 ) // presumably the boot code (encrypted?)
+ROM_START( kof2002um ) // The King of Fighters 复仇之路/Fùchóu zhī lù/Road to Revenge
+ ROM_REGION( 0x8000000, "boot", 0 ) // sound program only? or boot too?
ROM_LOAD( "s29gl01gp11fcr2.u103", 0x0000000, 0x8000000, CRC(722cbad1) SHA1(0292be12255ee4bd586166a3f5cd108c5453295b) )
ROM_REGION( 0x42000000, "nand_u101", 0 ) // presumably accessed like a filesystem (encrypted)
@@ -91,6 +91,18 @@ ROM_START( kof2002um )
ROM_LOAD( "nand08gw3b2cn6.u102", 0x00000000, 0x42000000, CRC(ac2dc586) SHA1(5168b4c0c6343b6c040a206da04fa7cdbc3b35b9) )
ROM_END
+ROM_START( kof2002umj )
+ ROM_REGION( 0x8000000, "boot", 0 ) // sound program only? or boot too?
+ ROM_LOAD( "s29gl01gp11fcr2.u103", 0x0000000, 0x8000000, CRC(916c9d68) SHA1(65c09f75b6a71b0d79a827c6829d1c05d8699a32) )
+
+ ROM_REGION( 0x42000000, "nand_u101", 0 ) // presumably accessed like a filesystem (encrypted)
+ ROM_LOAD( "nand08gw3b2cn6.u101", 0x00000000, 0x42000000, CRC(46e03f1d) SHA1(62d8eeb7513e851bf11a26a84b5d310270f3fcf6) )
+ ROM_REGION( 0x42000000, "nand_u102", 0 )
+ ROM_LOAD( "nand08gw3b2cn6.u102", 0x00000000, 0x42000000, CRC(db931dca) SHA1(1b1fc88732944e9ede09e584c7b07e28a59df3e2) )
+ROM_END
+
+
/* The title screen shows "The King of Fighters - Road to Revenge" (Chinese / English) while the speech on the title screen announcer says "The King of Fighters 2002 Unlimited Match"
There is a PS2 version with the Unlimited Match title screen, but unless it's used for a different region the arcade doesn't show that title, only announces it. */
-GAME( 2009, kof2002um, 0, system_board_y2, system_board_y2, system_board_y2_state, empty_init, ROT0, "SNK Playmore / New Channel", "The King of Fighters - Road to Revenge / The King of Fighters 2002 Unlimited Match", MACHINE_IS_SKELETON )
+GAME( 2009, kof2002um, 0, system_board_y2, system_board_y2, system_board_y2_state, empty_init, ROT0, "SNK Playmore / New Channel", "The King of Fighters - Fuchou Zhi Lu/Road to Revenge / The King of Fighters 2002 Unlimited Match (China)", MACHINE_IS_SKELETON ) // also Export?
+GAME( 2009, kof2002umj, kof2002um, system_board_y2, system_board_y2, system_board_y2_state, empty_init, ROT0, "SNK Playmore", "The King of Fighters 2002 Unlimited Match (Japan)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/ymmu100.cpp b/src/mame/drivers/ymmu100.cpp
index 4eccfd7bf81..e810f5f9e0c 100644
--- a/src/mame/drivers/ymmu100.cpp
+++ b/src/mame/drivers/ymmu100.cpp
@@ -122,7 +122,6 @@
#include "video/hd44780.h"
#include "debugger.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -455,7 +454,6 @@ MACHINE_CONFIG_START(mu100_state::mu100)
MCFG_SCREEN_UPDATE_DRIVER(mu100_state, screen_update)
MCFG_SCREEN_SIZE(900, 241)
MCFG_SCREEN_VISIBLE_AREA(0, 899, 0, 240)
- config.set_default_layout(layout_lcd);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/drivers/z88.cpp b/src/mame/drivers/z88.cpp
index 35e9dccb673..f6293830018 100644
--- a/src/mame/drivers/z88.cpp
+++ b/src/mame/drivers/z88.cpp
@@ -614,8 +614,6 @@ MACHINE_CONFIG_START(z88_state::z88)
device = &PALETTE(config, m_palette, Z88_NUM_COLOURS);
MCFG_PALETTE_INIT_OWNER(z88_state, z88)
- config.set_default_layout(layout_lcd);
-
device = &UPD65031(config, m_blink, XTAL(9'830'400));
m_blink->kb_rd_callback().set(FUNC(z88_state::kb_r));
m_blink->int_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp
index bb7e3f395c1..49a9b94bcd0 100644
--- a/src/mame/drivers/zn.cpp
+++ b/src/mame/drivers/zn.cpp
@@ -4686,7 +4686,7 @@ ROM_START( psyforcex )
TAITOFX1_BIOS
ROM_REGION32_LE( 0x01000000, "bankedroms", 0 )
- ROM_LOAD16_BYTE( "e22-11.2", 0x0000001, 0x080000, CRC(a263b41f) SHA1(a797f1eb74a7ba7aeefabd9f5d55e6eec2df46e2) )
+ ROM_LOAD16_BYTE( "e22-11.2", 0x0000001, 0x080000, CRC(29ebebc9) SHA1(48a3371460d69ae5ba58d3e24615f389bf43b2cc) )
ROM_LOAD16_BYTE( "e22-12.7", 0x0000000, 0x080000, CRC(7426ffc5) SHA1(24b0132241e2e49109e585b082bf4ab67f86b294) )
ROM_LOAD( "e22-02.16", 0x0800000, 0x200000, CRC(03b50064) SHA1(0259537e86b266b3f34308c4fc0bcc04c037da71) )
ROM_LOAD( "e22-03.19", 0x0a00000, 0x200000, CRC(8372f839) SHA1(646b3919b6be63412c11850ec1524685abececc0) )
@@ -5437,7 +5437,7 @@ GAME( 1995, sfchampu, sfchamp, coh1000ta, znt, zn_state, empty_init, RO
GAME( 1995, sfchampj, sfchamp, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1995, psyforce, coh1000t, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force (Ver 2.4O)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1995, psyforcej, psyforce, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force (Ver 2.4J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-GAME( 1995, psyforcex, psyforce, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force EX (Ver 2.0J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // exception in attract after reading 0xbbbbbbbb from 0x8025ed18 leads to watchdog reset
+GAME( 1995, psyforcex, psyforce, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force EX (Ver 2.0J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, mgcldate, mgcldtex, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, mgcldtex, coh1000t, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/includes/alesis.h b/src/mame/includes/alesis.h
index a9fa9a1f33b..93ceda86a4b 100644
--- a/src/mame/includes/alesis.h
+++ b/src/mame/includes/alesis.h
@@ -17,7 +17,6 @@
#include "video/hd44780.h"
#include "imagedev/cassette.h"
#include "emupal.h"
-#include "rendlay.h"
#define MCFG_ALESIS_DM3AG_ADD(_tag,_clock) \
MCFG_DEVICE_ADD( _tag, ALESIS_DM3AG, _clock )
diff --git a/src/mame/includes/gb.h b/src/mame/includes/gb.h
index ac037d4ad47..09a585e9aff 100644
--- a/src/mame/includes/gb.h
+++ b/src/mame/includes/gb.h
@@ -9,6 +9,8 @@
#ifndef MAME_INCLUDES_GB_H
#define MAME_INCLUDES_GB_H
+#pragma once
+
#include "sound/gb.h"
#include "cpu/lr35902/lr35902.h"
#include "bus/gameboy/gb_slot.h"
@@ -20,8 +22,8 @@
class gb_state : public driver_device
{
public:
- gb_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ gb_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_cartslot(*this, "gbslot"),
m_maincpu(*this, "maincpu"),
m_apu(*this, "apu"),
@@ -30,7 +32,8 @@ public:
m_inputs(*this, "INPUTS"),
m_bios_hack(*this, "SKIP_CHECK"),
m_ram(*this, RAM_TAG),
- m_ppu(*this, "ppu") { }
+ m_ppu(*this, "ppu")
+ { }
uint8_t m_gb_io[0x10];
diff --git a/src/mame/includes/hng64.h b/src/mame/includes/hng64.h
index 058b04f8e80..0e8ccfb1df7 100644
--- a/src/mame/includes/hng64.h
+++ b/src/mame/includes/hng64.h
@@ -143,6 +143,7 @@ public:
m_palette(*this, "palette"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
+ m_iomcu(*this, "iomcu"),
m_dsp(*this, "l7a1045"),
m_comm(*this, "network"),
m_rtc(*this, "rtc"),
@@ -185,6 +186,7 @@ public:
private:
required_device<mips3_device> m_maincpu;
required_device<v53a_device> m_audiocpu;
+ required_device<tmp87ph40an_device> m_iomcu;
required_device<l7a1045_sound_device> m_dsp;
required_device<cpu_device> m_comm;
required_device<msm6242_device> m_rtc;
@@ -303,6 +305,24 @@ private:
DECLARE_READ8_MEMBER(hng64_comm_mmu_r);
DECLARE_WRITE8_MEMBER(hng64_comm_mmu_w);
+ DECLARE_READ8_MEMBER(ioport0_r);
+ DECLARE_READ8_MEMBER(ioport1_r);
+ DECLARE_READ8_MEMBER(ioport2_r);
+ DECLARE_READ8_MEMBER(ioport3_r);
+ DECLARE_READ8_MEMBER(ioport4_r);
+ DECLARE_READ8_MEMBER(ioport5_r);
+ DECLARE_READ8_MEMBER(ioport6_r);
+ DECLARE_READ8_MEMBER(ioport7_r);
+
+ DECLARE_WRITE8_MEMBER(ioport0_w);
+ DECLARE_WRITE8_MEMBER(ioport1_w);
+ DECLARE_WRITE8_MEMBER(ioport2_w);
+ DECLARE_WRITE8_MEMBER(ioport3_w);
+ DECLARE_WRITE8_MEMBER(ioport4_w);
+ DECLARE_WRITE8_MEMBER(ioport5_w);
+ DECLARE_WRITE8_MEMBER(ioport6_w);
+ DECLARE_WRITE8_MEMBER(ioport7_w);
+
void init_hng64_reorder_gfx();
void set_irq(uint32_t irq_vector);
diff --git a/src/mame/includes/hx20.h b/src/mame/includes/hx20.h
index c21acf72619..cf049c155a5 100644
--- a/src/mame/includes/hx20.h
+++ b/src/mame/includes/hx20.h
@@ -18,7 +18,6 @@
#include "bus/rs232/rs232.h"
#include "emupal.h"
-#include "rendlay.h"
#define HD6301V1_MAIN_TAG "8g"
#define HD6301V1_SLAVE_TAG "6d"
diff --git a/src/mame/includes/nbmj8688.h b/src/mame/includes/nbmj8688.h
index f6e7a01c8ce..396c5920950 100644
--- a/src/mame/includes/nbmj8688.h
+++ b/src/mame/includes/nbmj8688.h
@@ -1,5 +1,10 @@
// license:BSD-3-Clause
// copyright-holders:Takahiro Nogi
+#ifndef MAME_INCLUDES_NBMJ8688_H
+#define MAME_INCLUDES_NBMJ8688_H
+
+#pragma once
+
#include "video/hd61830.h"
#include "machine/nb1413m3.h"
#include "emupal.h"
@@ -156,3 +161,5 @@ private:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};
+
+#endif // MAME_INCLUDES_NBMJ8688_H
diff --git a/src/mame/includes/realbrk.h b/src/mame/includes/realbrk.h
index 6e40143e1e0..14a548366eb 100644
--- a/src/mame/includes/realbrk.h
+++ b/src/mame/includes/realbrk.h
@@ -1,5 +1,10 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia
+#ifndef MAME_INCLUDES_REALBRK_H
+#define MAME_INCLUDES_REALBRK_H
+
+#pragma once
+
#include "machine/tmp68301.h"
#include "emupal.h"
#include "screen.h"
@@ -79,8 +84,7 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_dai2kaku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer);
- void dai2kaku_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer);
+ template <bool Rotatable> void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer);
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
void base_mem(address_map &map);
@@ -89,3 +93,5 @@ private:
void pkgnshdx_mem(address_map &map);
void realbrk_mem(address_map &map);
};
+
+#endif // MAME_INCLUDES_REALBRK_H
diff --git a/src/mame/includes/super6.h b/src/mame/includes/super6.h
index d9641bda2a3..1ea9122c9fc 100644
--- a/src/mame/includes/super6.h
+++ b/src/mame/includes/super6.h
@@ -9,7 +9,7 @@
#include "machine/z80daisy.h"
#include "machine/com8116.h"
#include "machine/ram.h"
-#include "machine/timer.h"
+#include "machine/clock.h"
#include "machine/wd_fdc.h"
#include "machine/z80ctc.h"
#include "machine/z80dart.h"
@@ -59,8 +59,6 @@ private:
DECLARE_WRITE8_MEMBER( bank1_w );
DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w );
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
-
- TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick);
DECLARE_READ8_MEMBER(memory_read_byte);
DECLARE_WRITE8_MEMBER(memory_write_byte);
DECLARE_READ8_MEMBER(io_read_byte);
diff --git a/src/mame/includes/wpc_dot.h b/src/mame/includes/wpc_dot.h
index 073cadd2cd9..29a8ffa44a1 100644
--- a/src/mame/includes/wpc_dot.h
+++ b/src/mame/includes/wpc_dot.h
@@ -10,33 +10,31 @@
#ifndef MAME_INCLUDES_WPC_DOT_H
#define MAME_INCLUDES_WPC_DOT_H
+#pragma once
+
#include "cpu/m6809/m6809.h"
#include "audio/wpcsnd.h"
#include "audio/dcs.h"
#include "machine/wpc.h"
-#include "rendlay.h"
class wpc_dot_state : public driver_device
{
public:
wpc_dot_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_wpcsnd(*this,"wpcsnd"),
- m_wpc(*this,"wpc"),
- m_cpubank(*this, "cpubank"),
- m_fixedbank(*this, "fixedbank"),
- m_dmdbank1(*this, "dmdbank1"),
- m_dmdbank2(*this, "dmdbank2"),
- m_dmdbank3(*this, "dmdbank3"),
- m_dmdbank4(*this, "dmdbank4"),
- m_dmdbank5(*this, "dmdbank5"),
- m_dmdbank6(*this, "dmdbank6")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_wpcsnd(*this,"wpcsnd")
+ , m_wpc(*this,"wpc")
+ , m_cpubank(*this, "cpubank")
+ , m_fixedbank(*this, "fixedbank")
+ , m_dmdbanks(*this, "dmdbank%u", 1U)
{ }
+ void init_wpc_dot();
void wpc_dot(machine_config &config);
- void wpc_dot_map(address_map &map);
+
protected:
+ void wpc_dot_map(address_map &map);
// devices
required_device<cpu_device> m_maincpu;
@@ -44,20 +42,14 @@ protected:
required_device<wpc_device> m_wpc;
required_memory_bank m_cpubank;
required_memory_bank m_fixedbank;
- required_memory_bank m_dmdbank1;
- required_memory_bank m_dmdbank2;
- required_memory_bank m_dmdbank3;
- required_memory_bank m_dmdbank4;
- required_memory_bank m_dmdbank5;
- required_memory_bank m_dmdbank6;
+ required_memory_bank_array<6> m_dmdbanks;
// driver_device overrides
virtual void machine_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
static const device_timer_id TIMER_VBLANK = 0;
static const device_timer_id TIMER_IRQ = 1;
-public:
- void init_wpc_dot();
+
DECLARE_READ8_MEMBER(ram_r);
DECLARE_WRITE8_MEMBER(ram_w);
DECLARE_WRITE_LINE_MEMBER(wpcsnd_reply_w);
diff --git a/src/mame/includes/wpc_flip1.h b/src/mame/includes/wpc_flip1.h
index dd53bb41d08..8f26f9ebd75 100644
--- a/src/mame/includes/wpc_flip1.h
+++ b/src/mame/includes/wpc_flip1.h
@@ -8,6 +8,8 @@
#ifndef MAME_INCLUDES_WPC_FLIP1_H
#define MAME_INCLUDES_WPC_FLIP1_H
+#pragma once
+
#include "includes/wpc_dot.h"
class wpc_flip1_state : public wpc_dot_state
@@ -16,9 +18,11 @@ public:
wpc_flip1_state(const machine_config &mconfig, device_type type, const char *tag)
: wpc_dot_state(mconfig, type, tag)
{ }
-public:
+
void init_wpc_flip1();
void wpc_flip1(machine_config &config);
+
+protected:
void wpc_flip1_map(address_map &map);
};
diff --git a/src/mame/includes/wpc_flip2.h b/src/mame/includes/wpc_flip2.h
index 9709abedcb6..7c07907af1f 100644
--- a/src/mame/includes/wpc_flip2.h
+++ b/src/mame/includes/wpc_flip2.h
@@ -8,6 +8,8 @@
#ifndef MAME_INCLUDES_WPC_FLIP2_H
#define MAME_INCLUDES_WPC_FLIP2_H
+#pragma once
+
#include "includes/wpc_flip1.h"
class wpc_flip2_state : public wpc_flip1_state
@@ -16,9 +18,11 @@ public:
wpc_flip2_state(const machine_config &mconfig, device_type type, const char *tag)
: wpc_flip1_state(mconfig, type, tag)
{ }
-public:
+
void init_wpc_flip2();
void wpc_flip2(machine_config &config);
+
+protected:
void wpc_flip2_map(address_map &map);
};
diff --git a/src/mame/includes/x07.h b/src/mame/includes/x07.h
index 1d1c770b042..b3da10b3134 100644
--- a/src/mame/includes/x07.h
+++ b/src/mame/includes/x07.h
@@ -5,6 +5,10 @@
includes/x07.h
*********************************************************************/
+#ifndef MAME_INCLUDES_X07_H
+#define MAME_INCLUDES_X07_H
+
+#pragma once
#include "cpu/z80/z80.h"
#include "sound/beep.h"
@@ -18,7 +22,6 @@
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "emupal.h"
-#include "rendlay.h"
//default value for user defined keys, taken for official documentation
static const char *const udk_ini[12] = {
@@ -291,3 +294,5 @@ private:
void x07_io(address_map &map);
void x07_mem(address_map &map);
};
+
+#endif // MAME_INCLUDES_X07_H
diff --git a/src/mame/includes/z88.h b/src/mame/includes/z88.h
index cfe59c28a84..6d55aaae74a 100644
--- a/src/mame/includes/z88.h
+++ b/src/mame/includes/z88.h
@@ -9,6 +9,8 @@
#ifndef MAME_INCLUDES_Z88_H
#define MAME_INCLUDES_Z88_H
+#pragma once
+
#include "cpu/z80/z80.h"
#include "machine/ram.h"
#include "machine/upd65031.h"
@@ -20,7 +22,6 @@
#include "bus/z88/z88.h"
#include "emupal.h"
-#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
diff --git a/src/mame/layout/buggyboy.lay b/src/mame/layout/buggyboy.lay
index 2a19cad8797..c59643e47c1 100644
--- a/src/mame/layout/buggyboy.lay
+++ b/src/mame/layout/buggyboy.lay
@@ -59,7 +59,7 @@
<bounds x="1280" y="0" width="640" height="480" />
</screen>
-<bezel element="shifter" inputtag="PPI_PORTA" inputmask="0x40">
+<bezel element="shifter" inputtag="soundbrd:PPI_PORTA" inputmask="0x40">
<bounds x="1886" y="414" width="32" height="64" />
<color alpha="0.6" />
@@ -76,7 +76,7 @@
<bounds x="1280" y="0" width="640" height="480" />
</screen>
-<bezel element="shifter" inputtag="PPI_PORTA" inputmask="0x40">
+<bezel element="shifter" inputtag="soundbrd:PPI_PORTA" inputmask="0x40">
<bounds x="2" y="414" width="32" height="64" />
<color alpha="0.6" />
@@ -87,7 +87,7 @@
<bounds x="0" y="0" width="640" height="480" />
</screen>
-<bezel element="shifter" inputtag="PPI_PORTA" inputmask="0x40">
+<bezel element="shifter" inputtag="soundbrd:PPI_PORTA" inputmask="0x40">
<bounds x="606" y="414" width="32" height="64" />
<color alpha="0.6" />
@@ -98,7 +98,7 @@
<bounds x="0" y="0" width="640" height="480" />
</screen>
-<bezel element="shifter" inputtag="PPI_PORTA" inputmask="0x40">
+<bezel element="shifter" inputtag="soundbrd:PPI_PORTA" inputmask="0x40">
<bounds x="2" y="414" width="32" height="64" />
<color alpha="0.6" />
diff --git a/src/mame/layout/nbmj8688.lay b/src/mame/layout/nbmj8688.lay
index 9dc702d198a..d6e2037d4d4 100644
--- a/src/mame/layout/nbmj8688.lay
+++ b/src/mame/layout/nbmj8688.lay
@@ -1,51 +1,15 @@
<?xml version="1.0"?>
<mamelayout version="2">
- <view name="Main Screen Standard (4:3)">
- <screen tag="screen">
- <bounds left="0" top="0" right="4" bottom="3" />
- </screen>
- </view>
-
- <view name="LCD0 Standard (15:3)">
- <screen tag="lcd0">
- <bounds left="0" top="0" right="15" bottom="3" />
- </screen>
- </view>
-
- <view name="LCD1 Standard (15:3)">
- <screen tag="lcd1">
- <bounds left="0" top="0" right="15" bottom="3" />
- </screen>
- </view>
-
- <view name="Main Screen Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
- <screen tag="screen">
- <bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
- </screen>
- </view>
-
- <view name="LCD0 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
- <screen tag="lcd0">
- <bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
- </screen>
- </view>
-
- <view name="LCD1 Pixel Aspect (~scr2nativexaspect~:~scr2nativeyaspect~)">
- <screen tag="lcd1">
- <bounds left="0" top="0" right="~scr2width~" bottom="~scr2height~" />
- </screen>
- </view>
-
<view name="Triple">
<screen tag="screen">
<bounds x="0" y="3" width="15" height="11.25" />
</screen>
<screen tag="lcd0">
<bounds x="0" y="14.25" width="15" height="3" />
- <orientation rotate="180" />
</screen>
<screen tag="lcd1">
<bounds x="0" y="0" width="15" height="3" />
+ <orientation rotate="180" />
</screen>
</view>
@@ -55,7 +19,6 @@
</screen>
<screen tag="lcd0">
<bounds x="0" y="14.25" width="15" height="3" />
- <orientation rotate="180" />
</screen>
</view>
@@ -66,7 +29,6 @@
</screen>
<screen tag="lcd1">
<bounds x="0" y="14.25" width="15" height="3" />
- <orientation rotate="180" />
</screen>
</view>
</mamelayout>
diff --git a/src/mame/layout/rocknms.lay b/src/mame/layout/rocknms.lay
index d01706707f3..a8d892f3cb4 100644
--- a/src/mame/layout/rocknms.lay
+++ b/src/mame/layout/rocknms.lay
@@ -1,30 +1,5 @@
<?xml version="1.0"?>
<mamelayout version="2">
- <view name="Screen 0 Standard (4:3)">
- <screen index="0">
- <bounds left="0" top="0" right="4" bottom="3" />
- </screen>
- </view>
-
- <view name="Screen 1 Standard (3:4)">
- <screen index="1">
- <bounds left="0" top="0" right="3" bottom="4" />
- <orientation rotate="270" />
- </screen>
- </view>
-
- <view name="Screen 0 Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
- </screen>
- </view>
-
- <view name="Screen 1 Pixel Aspect (~scr1nativeyaspect~:~scr1nativexaspect~)">
- <screen index="1">
- <bounds left="0" top="0" right="~scr1height~" bottom="~scr1width~" />
- <orientation rotate="270" />
- </screen>
- </view>
<view name="Rockn Megasession Custom">
<screen index="0">
@@ -32,7 +7,6 @@
</screen>
<screen index="1">
<bounds x="0" y="9" width="12" height="16" />
- <orientation rotate="270" />
</screen>
</view>
diff --git a/src/mame/layout/stepstag.lay b/src/mame/layout/stepstag.lay
index 1c7dce7c093..f51becc014f 100644
--- a/src/mame/layout/stepstag.lay
+++ b/src/mame/layout/stepstag.lay
@@ -1,56 +1,15 @@
<?xml version="1.0"?>
<mamelayout version="2">
- <view name="Screen 0 Standard (3:4)">
- <screen index="0">
- <bounds left="0" top="0" right="3" bottom="4" />
- <orientation rotate="270" />
- </screen>
- </view>
-
- <view name="Screen 1 Standard (4:3)">
- <screen index="1">
- <bounds left="0" top="0" right="4" bottom="3" />
- </screen>
- </view>
-
- <view name="Screen 2 Standard (3:4)">
- <screen index="2">
- <bounds left="0" top="0" right="3" bottom="4" />
- <orientation rotate="270" />
- </screen>
- </view>
-
- <view name="Screen 0 Pixel Aspect (~scr0nativeyaspect~:~scr0nativexaspect~)">
- <screen index="0">
- <bounds left="0" top="0" right="~scr0height~" bottom="~scr0width~" />
- <orientation rotate="270" />
- </screen>
- </view>
-
- <view name="Screen 1 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
- <screen index="1">
- <bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
- </screen>
- </view>
-
- <view name="Screen 2 Pixel Aspect (~scr2nativeyaspect~:~scr2nativexaspect~)">
- <screen index="2">
- <bounds left="0" top="0" right="~scr2height~" bottom="~scr2width~" />
- <orientation rotate="270" />
- </screen>
- </view>
<view name="Stepping Stage Custom">
<screen index="0">
<bounds x="0" y="0" width="9" height="13.2" />
- <orientation rotate="270" />
</screen>
<screen index="1">
<bounds x="9.1" y="0" width="16" height="13.2" />
</screen>
<screen index="2">
<bounds x="25.2" y="0" width="9" height="13.2" />
- <orientation rotate="270" />
</screen>
</view>
diff --git a/src/mame/layout/vgmplay.lay b/src/mame/layout/vgmplay.lay
index 30efd5be8c9..ffeb7b2ee46 100644
--- a/src/mame/layout/vgmplay.lay
+++ b/src/mame/layout/vgmplay.lay
@@ -29,6 +29,10 @@
24: RF5C68
25: RF5C164
26: X1-010
+ 27: YM2610
+ 28: Y8950
+ 29: YMF262
+ 30: YMF278B
-->
<element name="backdrop"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
@@ -65,6 +69,10 @@
<element name="act_label_rf5c68"><text string="RF5C68" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="act_label_rf5c164"><text string="RF5C164" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="act_label_x1_010"><text string="X1-010" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="act_label_ym2610"><text string="YM2610" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="act_label_y8950"><text string="Y8950" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="act_label_ymf262"><text string="YMF262" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="act_label_ymf278b"><text string="YMF278B" align="1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="static_black2"><rect><color red="0.2" green="0.21" blue="0.23" /></rect></element>
@@ -126,6 +134,10 @@
<cpanel name="led_act_24" element="act_led"><bounds x="46" y="1" width="2" height="2" /></cpanel>
<cpanel name="led_act_25" element="act_led"><bounds x="46" y="4" width="2" height="2" /></cpanel>
<cpanel name="led_act_26" element="act_led"><bounds x="46" y="7" width="2" height="2" /></cpanel>
+ <cpanel name="led_act_27" element="act_led"><bounds x="46" y="10" width="2" height="2" /></cpanel>
+ <cpanel name="led_act_28" element="act_led"><bounds x="46" y="13" width="2" height="2" /></cpanel>
+ <cpanel name="led_act_29" element="act_led"><bounds x="46" y="16" width="2" height="2" /></cpanel>
+ <cpanel name="led_act_30" element="act_led"><bounds x="46" y="19" width="2" height="2" /></cpanel>
<cpanel element="act_label_ay8910"><bounds x="4" y="1.2" width="10" height="1.6" /></cpanel>
<cpanel element="act_label_sn76496"><bounds x="4" y="4.2" width="10" height="1.6" /></cpanel>
@@ -157,6 +169,10 @@
<cpanel element="act_label_rf5c68"><bounds x="49" y="1.2" width="10" height="1.6" /></cpanel>
<cpanel element="act_label_rf5c164"><bounds x="49" y="4.2" width="10" height="1.6" /></cpanel>
<cpanel element="act_label_x1_010"><bounds x="49" y="7.2" width="10" height="1.6" /></cpanel>
+ <cpanel element="act_label_ym2610"><bounds x="49" y="10.2" width="10" height="1.6" /></cpanel>
+ <cpanel element="act_label_y8950"><bounds x="49" y="13.2" width="10" height="1.6" /></cpanel>
+ <cpanel element="act_label_ymf262"><bounds x="49" y="16.2" width="10" height="1.6" /></cpanel>
+ <cpanel element="act_label_ymf278b"><bounds x="49" y="19.2" width="10" height="1.6" /></cpanel>
</group>
<view name="Internal Layout">
diff --git a/src/mame/machine/amiga.cpp b/src/mame/machine/amiga.cpp
index 89c7f28ae8c..bcda93d108c 100644
--- a/src/mame/machine/amiga.cpp
+++ b/src/mame/machine/amiga.cpp
@@ -278,7 +278,7 @@ TIMER_CALLBACK_MEMBER( amiga_state::scanline_callback )
}
// vblank end
- if (scanline == m_screen->visible_area().min_y)
+ if (scanline == m_screen->visible_area().top())
{
m_cia_0->tod_w(0);
}
diff --git a/src/mame/machine/archimds.cpp b/src/mame/machine/archimds.cpp
index 18168ddeb59..088c2bc21e1 100644
--- a/src/mame/machine/archimds.cpp
+++ b/src/mame/machine/archimds.cpp
@@ -884,22 +884,18 @@ void archimedes_state::vidc_dynamic_res_change()
(m_vidc_regs[VIDC_HBER] >= m_vidc_regs[VIDC_HBSR]) &&
(m_vidc_regs[VIDC_VBER] >= m_vidc_regs[VIDC_VBSR]))
{
- rectangle visarea;
- attoseconds_t refresh;
-
- visarea.min_x = 0;
- visarea.min_y = 0;
- visarea.max_x = m_vidc_regs[VIDC_HBER] - m_vidc_regs[VIDC_HBSR] - 1;
- visarea.max_y = (m_vidc_regs[VIDC_VBER] - m_vidc_regs[VIDC_VBSR]) * (m_vidc_interlace+1);
+ rectangle const visarea(
+ 0, m_vidc_regs[VIDC_HBER] - m_vidc_regs[VIDC_HBSR] - 1,
+ 0, (m_vidc_regs[VIDC_VBER] - m_vidc_regs[VIDC_VBSR]) * (m_vidc_interlace + 1));
m_vidc_vblank_time = m_vidc_regs[VIDC_VBER] * (m_vidc_interlace+1);
//logerror("Configuring: htotal %d vtotal %d border %d x %d display origin %d x %d vblank = %d\n",
// m_vidc_regs[VIDC_HCR], m_vidc_regs[VIDC_VCR],
- // visarea.max_x, visarea.max_y,
+ // visarea.right(), visarea.bottom(),
// m_vidc_regs[VIDC_HDER]-m_vidc_regs[VIDC_HDSR],m_vidc_regs[VIDC_VDER]-m_vidc_regs[VIDC_VDSR]+1,
// m_vidc_vblank_time);
- refresh = HZ_TO_ATTOSECONDS(pixel_rate[m_vidc_pixel_clk]) * m_vidc_regs[VIDC_HCR] * m_vidc_regs[VIDC_VCR];
+ attoseconds_t const refresh = HZ_TO_ATTOSECONDS(pixel_rate[m_vidc_pixel_clk]) * m_vidc_regs[VIDC_HCR] * m_vidc_regs[VIDC_VCR];
m_screen->configure(m_vidc_regs[VIDC_HCR], m_vidc_regs[VIDC_VCR] * (m_vidc_interlace+1), visarea, refresh);
}
diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp
index c22ca908adc..0654edc8755 100644
--- a/src/mame/machine/deco_irq.cpp
+++ b/src/mame/machine/deco_irq.cpp
@@ -108,14 +108,14 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback )
}
// lightgun?
- if (m_lightgun_latch >= visible.min_y && m_lightgun_latch <= visible.max_y && y == m_lightgun_latch)
+ if (m_lightgun_latch >= visible.top() && m_lightgun_latch <= visible.bottom() && y == m_lightgun_latch)
{
m_lightgun_irq = true;
m_lightgun_irq_cb(ASSERT_LINE);
}
// vblank-in?
- if (y == (visible.max_y + 1))
+ if (y == (visible.bottom() + 1))
{
m_vblank_irq = true;
m_vblank_irq_cb(ASSERT_LINE);
diff --git a/src/mame/machine/electron.cpp b/src/mame/machine/electron.cpp
index 725a57bb467..269ba54aa98 100644
--- a/src/mame/machine/electron.cpp
+++ b/src/mame/machine/electron.cpp
@@ -18,9 +18,9 @@ void electron_state::waitforramsync()
{
int cycles = 0;
- if (!(m_ula.screen_mode & 4) && (m_screen->vpos() > m_screen->visible_area().min_y) && (m_screen->vpos() < m_screen->visible_area().max_y) && !m_screen->hblank())
+ if (!(m_ula.screen_mode & 4) && (m_screen->vpos() > m_screen->visible_area().top()) && (m_screen->vpos() < m_screen->visible_area().bottom()) && !m_screen->hblank())
{
- cycles += (m_screen->visible_area().max_x - m_screen->hpos()) / 16;
+ cycles += (m_screen->visible_area().right() - m_screen->hpos()) / 16;
}
if (cycles & 1) cycles++;
diff --git a/src/mame/machine/seibucop/seibucop.cpp b/src/mame/machine/seibucop/seibucop.cpp
index 229eda863a8..d45698b4f97 100644
--- a/src/mame/machine/seibucop/seibucop.cpp
+++ b/src/mame/machine/seibucop/seibucop.cpp
@@ -1310,7 +1310,7 @@ WRITE16_MEMBER( raiden2cop_device::cop_unk_param_b_w)
COMBINE_DATA(&m_cop_unk_param_b);
}
-// cupsoc always writes 0xF before commands 0x5105, 0x5905, 0xD104 and 0xF105 and 0xE before 0xD104, then resets this to zero
+// cupsoc always writes 0xF before commands 0x5105, 0x5905, 0xD104 and 0xF105 and 0xE before 0xDDE5, then resets this to zero
// zeroteam writes 0xE here before 0xEDE5, then resets it to zero
WRITE16_MEMBER( raiden2cop_device::cop_precmd_w)
{
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index a8919f9ec85..4b0a8260777 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -11036,20 +11036,21 @@ tstrikea // Game Room
@source:ddragon3.cpp
ctribe // TA-0028 (c) 1990 (US)
-ctribe1 // TA-0028 (c) 1990 (US)
ctribeb // bootleg
ctribeb2 // bootleg
ctribej // TA-0028 (c) 1990 (Japan)
-ctribeo // TA-0028 (c) 1990 (US)
+ctribeu1 // TA-0028 (c) 1990 (US)
+ctribeua // TA-0028 (c) 1990 (US)
ddragon3 // TA-0030 (c) 1990
ddragon3b // bootleg
ddragon3j // TA-0030 (c) 1990 (Japan)
ddragon3p // TA-0030 (c) 1990
wwfwfest // TA-0031 (c) 1991 + Tecmo license (World)
-wwfwfestb // bootleg
wwfwfestj // TA-0031 (c) 1991 + Tecmo license (Japan)
wwfwfestk // TA-0031 (c) 1991 + Tecmo license (Korea)
wwfwfestu // TA-0031 (c) 1991 (US)
+wwfwfestu1 // TA-0031 (c) 1991 (US)
+wwfwfestub // bootleg
@source:ddribble.cpp
ddribble // GX690 (c) 1986
@@ -12902,6 +12903,7 @@ fmtownssj // FM-Towns II SJ
fmtownsux // 1991.11 FM-Towns II UX
@source:fontwriter.cpp
+fw600 // (c) Sharp
fw700ger // (c) Sharp
@source:foodf.cpp
@@ -13054,7 +13056,7 @@ pool10f // (c) 1997 C.M.C.
pool10g // (c) 1996 C.M.C.
pool10h // (c) 1996 C.M.C.
pool10i // (c) 1997 C.M.C.
-pool10j // (c) 1997 C.M.C.
+pool10j // (c) 1996 bootleg
potgame // (c) 1996 C.M.C.
powercrd // (c) 1993 Fun World
rcdino4 // 1998 unknown
@@ -14697,10 +14699,11 @@ h89 //
@source:halleys.cpp
benberob // A26
-halley87 // A62 (c) 1986 Taito Corporation (Japan)
-halleycj // A62 (c) 1986 Taito Corporation (Japan)
-halleys // A62 (c) 1986 Taito America Corporation + Coin It (US)
-halleysc // A62 (c) 1986 Taito Corporation (Japan)
+halleysc // A62 (c) 1986 Taito America Corporation + Coin It (US)
+halleysc87 // A62 (c) 1986 Taito Corporation (Japan)
+halleyscj // A62 (c) 1986 Taito Corporation (Japan, rev 1)
+halleyscja // A62 (c) 1986 Taito Corporation (Japan)
+halleyscjp // A62 (c) 1985 Taito Corporation (Japan, prototype)
@source:hanaawas.cpp
hanaawas // (c) SetaKikaku
@@ -15824,9 +15827,6 @@ jackie // (c) 1993 IGS
@source:jackpool.cpp
jackpool // (c) 1997 Electronic Projects
-@source:jade.cpp
-jgz80 // Jade JGZ-80
-
@source:jaguar.cpp
a51mxr3k // ?? (c) 1998
a51mxr3ka // ?? (c) 1998
@@ -37851,6 +37851,9 @@ uts20 //
@source:unkhorse.cpp
unkhorse //
+@source:unkz80.cpp
+unkz80 // Unknown
+
@source:upscope.cpp
upscope // (c) 1986 Grand products
@@ -39352,6 +39355,7 @@ xyonix // [1989 Philko]
@source:y2.cpp
kof2002um // (c)2009 SNK Playmore / New Channel
+kof2002umj // (c)2009 SNK Playmore / New Channel
@source:yiear.cpp
yiear // GX407 (c) 1985
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index f022750873e..90f375d1471 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -327,7 +327,6 @@ isbc8010.cpp
isbc8030.cpp
iskr103x.cpp
itt3030.cpp
-jade.cpp
jonos.cpp
jr100.cpp
jr200.cpp
@@ -748,6 +747,7 @@ tvc.cpp
tvgame.cpp
tx0.cpp
uknc.cpp
+unkz80.cpp
unichamp.cpp
unior.cpp
unistar.cpp
diff --git a/src/mame/video/agat7.cpp b/src/mame/video/agat7.cpp
index da54f00fdde..e165ae96c60 100644
--- a/src/mame/video/agat7.cpp
+++ b/src/mame/video/agat7.cpp
@@ -168,8 +168,8 @@ void agat7video_device::text_update_lores(screen_device &screen, bitmap_ind16 &b
int fg = 0;
int bg = 0;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = std::max(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = std::min(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
for (row = beginrow; row <= endrow; row += 8)
{
@@ -198,8 +198,8 @@ void agat7video_device::text_update_hires(screen_device &screen, bitmap_ind16 &b
uint8_t ch;
int fg, bg;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = std::max(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = std::min(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
if (m_start_address & 0x800) {
fg = 7; bg = 0;
@@ -227,8 +227,8 @@ void agat7video_device::graph_update_mono(screen_device &screen, bitmap_ind16 &b
uint8_t gfx, v;
int fg = 7, bg = 0;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = std::max(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = std::min(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
for (row = beginrow; row <= endrow; row++)
{
@@ -256,8 +256,8 @@ void agat7video_device::graph_update_hires(screen_device &screen, bitmap_ind16 &
uint16_t *p;
uint8_t gfx, v;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = std::max(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = std::min(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
for (row = beginrow; row <= endrow; row++)
{
@@ -287,8 +287,8 @@ void agat7video_device::graph_update_lores(screen_device &screen, bitmap_ind16 &
uint16_t *p;
uint8_t gfx, v;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = std::max(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = std::min(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
for (row = beginrow; row <= endrow; row++)
{
diff --git a/src/mame/video/amiga.cpp b/src/mame/video/amiga.cpp
index 83bf7d1dc8f..7409e5d471e 100644
--- a/src/mame/video/amiga.cpp
+++ b/src/mame/video/amiga.cpp
@@ -817,7 +817,7 @@ void amiga_state::render_scanline(bitmap_ind16 &bitmap, int scanline)
/* to render, we must have bitplane DMA enabled, at least 1 plane, and be within the */
/* vertical display window */
if ((CUSTOM_REG(REG_DMACON) & (DMACON_BPLEN | DMACON_DMAEN)) == (DMACON_BPLEN | DMACON_DMAEN) &&
- planes > 0 && scanline >= m_diw.min_y && scanline < m_diw.max_y)
+ planes > 0 && scanline >= m_diw.top() && scanline < m_diw.bottom())
{
int pfpix0 = 0, pfpix1 = 0, collide;
@@ -922,7 +922,7 @@ void amiga_state::render_scanline(bitmap_ind16 &bitmap, int scanline)
CUSTOM_REG(REG_CLXDAT) |= 0x001;
/* if we are within the display region, render */
- if (dst != nullptr && x >= m_diw.min_x && x < m_diw.max_x)
+ if (dst != nullptr && x >= m_diw.left() && x < m_diw.right())
{
int pix, pri;
@@ -1012,7 +1012,7 @@ void amiga_state::render_scanline(bitmap_ind16 &bitmap, int scanline)
}
// end of the line: time to add the modulos
- if (scanline >= m_diw.min_y && scanline < m_diw.max_y)
+ if (scanline >= m_diw.top() && scanline < m_diw.bottom())
{
// update odd planes
for (pl = 0; pl < planes; pl += 2)
@@ -1054,11 +1054,11 @@ uint32_t amiga_state::screen_update_amiga(screen_device &screen, bitmap_ind16 &b
{
// sometimes the core tells us to render a bunch of lines to keep up (resolution change, for example)
// this causes trouble for us since it can happen at any time
- if (cliprect.min_y != cliprect.max_y)
+ if (cliprect.top() != cliprect.bottom())
return 0;
// render each scanline in the visible region
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
render_scanline(bitmap, y);
return 0;
diff --git a/src/mame/video/amigaaga.cpp b/src/mame/video/amigaaga.cpp
index 0cfc1f23c87..987cbdeb4ad 100644
--- a/src/mame/video/amigaaga.cpp
+++ b/src/mame/video/amigaaga.cpp
@@ -596,7 +596,7 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
/* to render, we must have bitplane DMA enabled, at least 1 plane, and be within the */
/* vertical display window */
if ((CUSTOM_REG(REG_DMACON) & (DMACON_BPLEN | DMACON_DMAEN)) == (DMACON_BPLEN | DMACON_DMAEN) &&
- planes > 0 && scanline >= m_diw.min_y && scanline < m_diw.max_y)
+ planes > 0 && scanline >= m_diw.top() && scanline < m_diw.bottom())
{
int pfpix0 = 0, pfpix1 = 0, collide;
@@ -701,7 +701,7 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
CUSTOM_REG(REG_CLXDAT) |= 0x001;
/* if we are within the display region, render */
- if (dst != nullptr && x >= m_diw.min_x && x < m_diw.max_x)
+ if (dst != nullptr && x >= m_diw.left() && x < m_diw.right())
{
int pix, pri;
@@ -814,7 +814,7 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
#endif
/* end of the line: time to add the modulos */
- if (scanline >= m_diw.min_y && scanline < m_diw.max_y)
+ if (scanline >= m_diw.top() && scanline < m_diw.bottom())
{
/* update odd planes */
for (pl = 0; pl < planes; pl += 2)
@@ -853,11 +853,11 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
uint32_t amiga_state::screen_update_amiga_aga(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- if (cliprect.min_y != cliprect.max_y)
+ if (cliprect.top() != cliprect.bottom())
return 0;
// render each scanline in the visible region
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
aga_render_scanline(bitmap, y);
return 0;
diff --git a/src/mame/video/apple2.cpp b/src/mame/video/apple2.cpp
index be61550aa25..31229729742 100644
--- a/src/mame/video/apple2.cpp
+++ b/src/mame/video/apple2.cpp
@@ -361,8 +361,8 @@ void a2_video_device::lores_update(screen_device &screen, bitmap_ind16 &bitmap,
}
/* perform adjustments */
- beginrow = std::max(beginrow, cliprect.min_y);
- endrow = std::min(endrow, cliprect.max_y);
+ beginrow = (std::max)(beginrow, cliprect.top());
+ endrow = (std::min)(endrow, cliprect.bottom());
if (!(m_sysconfig & 0x03))
{
@@ -461,8 +461,8 @@ void a2_video_device::dlores_update(screen_device &screen, bitmap_ind16 &bitmap,
}
/* perform adjustments */
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = (std::max)(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = (std::min)(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
if (!(m_sysconfig & 0x03))
{
@@ -607,8 +607,8 @@ void a2_video_device::text_update(screen_device &screen, bitmap_ind16 &bitmap, c
start_address = m_page2 ? 0x800 : 0x400;
}
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = (std::max)(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = (std::min)(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
switch (m_sysconfig & 0x03)
{
@@ -654,8 +654,8 @@ void a2_video_device::text_update_orig(screen_device &screen, bitmap_ind16 &bitm
int fg = 0;
int bg = 0;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = (std::max)(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = (std::min)(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
switch (m_sysconfig & 0x03)
{
@@ -685,8 +685,8 @@ void a2_video_device::text_update_jplus(screen_device &screen, bitmap_ind16 &bit
int fg = 0;
int bg = 0;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = (std::max)(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = (std::min)(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
switch (m_sysconfig & 0x03)
{
@@ -716,8 +716,8 @@ void a2_video_device::text_update_ultr(screen_device &screen, bitmap_ind16 &bitm
int fg = 0;
int bg = 0;
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = (std::max)(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = (std::min)(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
switch (m_sysconfig & 0x03)
{
@@ -753,19 +753,19 @@ void a2_video_device::hgr_update(screen_device &screen, bitmap_ind16 &bitmap, co
int begincol = 0, endcol = 40;
/* sanity checks */
- if (beginrow < cliprect.min_y)
- beginrow = cliprect.min_y;
- if (endrow > cliprect.max_y)
- endrow = cliprect.max_y;
+ if (beginrow < cliprect.top())
+ beginrow = cliprect.top();
+ if (endrow > cliprect.bottom())
+ endrow = cliprect.bottom();
if (endrow < beginrow)
return;
// we generate 2 pixels per "column" so adjust
- if (begincol < (cliprect.min_x/14))
- begincol = (cliprect.min_x/14);
- if (endcol > (cliprect.max_x/14))
- endcol = (cliprect.max_x/14);
- if (cliprect.max_x > 39*14)
+ if (begincol < (cliprect.left()/14))
+ begincol = (cliprect.left()/14);
+ if (endcol > (cliprect.right()/14))
+ endcol = (cliprect.right()/14);
+ if (cliprect.right() > 39*14)
endcol = 40;
if (endcol < begincol)
return;
@@ -872,10 +872,10 @@ void a2_video_device::hgr_update_tk2000(screen_device &screen, bitmap_ind16 &bit
int mon_type = m_sysconfig & 0x03;
/* sanity checks */
- if (beginrow < cliprect.min_y)
- beginrow = cliprect.min_y;
- if (endrow > cliprect.max_y)
- endrow = cliprect.max_y;
+ if (beginrow < cliprect.top())
+ beginrow = cliprect.top();
+ if (endrow > cliprect.bottom())
+ endrow = cliprect.bottom();
if (endrow < beginrow)
return;
@@ -962,10 +962,10 @@ void a2_video_device::dhgr_update(screen_device &screen, bitmap_ind16 &bitmap, c
int mon_type = m_sysconfig & 0x03;
/* sanity checks */
- if (beginrow < cliprect.min_y)
- beginrow = cliprect.min_y;
- if (endrow > cliprect.max_y)
- endrow = cliprect.max_y;
+ if (beginrow < cliprect.top())
+ beginrow = cliprect.top();
+ if (endrow > cliprect.bottom())
+ endrow = cliprect.bottom();
if (endrow < beginrow)
return;
@@ -1084,7 +1084,7 @@ uint32_t a2_video_device::screen_update_GS(screen_device &screen, bitmap_rgb32 &
int beamy;
uint16_t *a2pixel;
- beamy = cliprect.min_y;
+ beamy = cliprect.top();
if (m_newvideo & 0x80)
{
@@ -1302,8 +1302,8 @@ void a2_video_device::text_updateGS(screen_device &screen, bitmap_ind16 &bitmap,
start_address = m_page2 ? 0x800 : 0x400;
}
- beginrow = std::max(beginrow, cliprect.min_y - (cliprect.min_y % 8));
- endrow = std::min(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
+ beginrow = (std::max)(beginrow, cliprect.top() - (cliprect.top() % 8));
+ endrow = (std::min)(endrow, cliprect.bottom() - (cliprect.bottom() % 8) + 7);
for (row = beginrow; row <= endrow; row += 8)
{
diff --git a/src/mame/video/apple3.cpp b/src/mame/video/apple3.cpp
index 724907d6c23..cfc4a675c5b 100644
--- a/src/mame/video/apple3.cpp
+++ b/src/mame/video/apple3.cpp
@@ -149,8 +149,8 @@ void apple3_state::text40(bitmap_ind16 &bitmap, const rectangle &cliprect)
uint8_t *ram = m_ram->pointer();
uint32_t ram_size = m_ram->size();
int smooth = m_va | (m_vb << 1) | (m_vc << 2);
- int beginrow = (cliprect.min_y - (cliprect.min_y % 8)) / 8;
- int endrow = (cliprect.max_y - (cliprect.max_y % 8) + 7) / 8;
+ int beginrow = (cliprect.top() - (cliprect.top() % 8)) / 8;
+ int endrow = (cliprect.bottom() - (cliprect.bottom() % 8) + 7) / 8;
for (y = beginrow; y <= endrow; y++)
{
@@ -220,8 +220,8 @@ void apple3_state::text80(bitmap_ind16 &bitmap, const rectangle &cliprect)
uint8_t *ram = m_ram->pointer();
uint32_t ram_size = m_ram->size();
int smooth = m_va | (m_vb << 1) | (m_vc << 2);
- int beginrow = (cliprect.min_y - (cliprect.min_y % 8)) / 8;
- int endrow = (cliprect.max_y - (cliprect.max_y % 8) + 7) / 8;
+ int beginrow = (cliprect.top() - (cliprect.top() % 8)) / 8;
+ int endrow = (cliprect.bottom() - (cliprect.bottom() % 8) + 7) / 8;
for (y = beginrow; y <= endrow; y++)
{
@@ -284,7 +284,7 @@ void apple3_state::graphics_hgr(bitmap_ind16 &bitmap, const rectangle &cliprect)
uint8_t *ram = m_ram->pointer();
int smooth = m_va | (m_vb << 1) | (m_vc << 2);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
ly = y;
if (m_smoothscr)
@@ -329,7 +329,7 @@ void apple3_state::graphics_chgr(bitmap_ind16 &bitmap, const rectangle &cliprect
uint8_t *ram = m_ram->pointer();
int smooth = m_va | (m_vb << 1) | (m_vc << 2);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
ly = y;
if (m_smoothscr)
@@ -386,7 +386,7 @@ void apple3_state::graphics_shgr(bitmap_ind16 &bitmap, const rectangle &cliprect
uint8_t *ram = m_ram->pointer();
int smooth = m_va | (m_vb << 1) | (m_vc << 2);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
ly = y;
if (m_smoothscr)
@@ -441,7 +441,7 @@ void apple3_state::graphics_chires(bitmap_ind16 &bitmap, const rectangle &clipre
uint8_t *ram = m_ram->pointer();
int smooth = m_va | (m_vb << 1) | (m_vc << 2);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
ly = y;
if (m_smoothscr)
diff --git a/src/mame/video/aquarium.cpp b/src/mame/video/aquarium.cpp
index 75562c6386f..89a2929e6b5 100644
--- a/src/mame/video/aquarium.cpp
+++ b/src/mame/video/aquarium.cpp
@@ -80,12 +80,12 @@ void aquarium_state::video_start()
void aquarium_state::mix_sprite_bitmap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int priority_mask, int priority_value)
{
- for (int y = cliprect.min_y;y <= cliprect.max_y;y++)
+ for (int y = cliprect.top();y <= cliprect.bottom();y++)
{
uint16_t* srcline = &m_temp_sprite_bitmap.pix16(y);
uint16_t* dstline = &bitmap.pix16(y);
- for (int x = cliprect.min_x;x <= cliprect.max_x;x++)
+ for (int x = cliprect.left();x <= cliprect.right();x++)
{
uint16_t pixel = srcline[x];
diff --git a/src/mame/video/arcadecl.cpp b/src/mame/video/arcadecl.cpp
index 57569f0040d..446ebb928a5 100644
--- a/src/mame/video/arcadecl.cpp
+++ b/src/mame/video/arcadecl.cpp
@@ -78,11 +78,11 @@ uint32_t arcadecl_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
// not yet verified
@@ -104,13 +104,13 @@ uint32_t arcadecl_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
uint32_t sparkz_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// update any dirty scanlines
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
const uint16_t *const src = &m_bitmap[256 * y];
uint16_t *const dst = &bitmap.pix16(y);
/* regenerate the line */
- for (int x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)
+ for (int x = cliprect.left() & ~1; x <= cliprect.right(); x += 2)
{
int bits = src[(x - 8) / 2];
dst[x + 0] = bits >> 8;
diff --git a/src/mame/video/atarig42.cpp b/src/mame/video/atarig42.cpp
index b553cc0f512..aa427b3d088 100644
--- a/src/mame/video/atarig42.cpp
+++ b/src/mame/video/atarig42.cpp
@@ -174,10 +174,10 @@ uint32_t atarig42_state::screen_update_atarig42(screen_device &screen, bitmap_in
/* copy the motion objects on top */
{
bitmap_ind16 &mo_bitmap = m_rle->vram(0);
- int left = cliprect.min_x;
- int top = cliprect.min_y;
- int right = cliprect.max_x + 1;
- int bottom = cliprect.max_y + 1;
+ int left = cliprect.left();
+ int top = cliprect.top();
+ int right = cliprect.right() + 1;
+ int bottom = cliprect.bottom() + 1;
int x, y;
/* now blend with the playfield */
diff --git a/src/mame/video/atarigt.cpp b/src/mame/video/atarigt.cpp
index d9cab371fb3..67563b639c5 100644
--- a/src/mame/video/atarigt.cpp
+++ b/src/mame/video/atarigt.cpp
@@ -503,7 +503,7 @@ uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb3
const pen_t *mram = &m_palette->pens()[(color_latch & 0xc0) << 7];
/* now do the nasty blend */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint16_t *an = &m_an_bitmap.pix16(y);
uint16_t *pf = &m_pf_bitmap.pix16(y);
@@ -514,7 +514,7 @@ uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb3
/* Primal Rage: no TRAM, slightly different priorities */
if (m_is_primrage)
{
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
uint8_t pfpri = (pf[x] >> 10) & 7;
uint8_t mopri = mo[x] >> ATARIRLE_PRIORITY_SHIFT;
@@ -548,7 +548,7 @@ uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb3
/* T-Mek: full TRAM and all effects */
else
{
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
uint8_t pfpri = (pf[x] >> 10) & 7;
uint8_t mopri = mo[x] >> ATARIRLE_PRIORITY_SHIFT;
diff --git a/src/mame/video/atarigx2.cpp b/src/mame/video/atarigx2.cpp
index 3159d1980a5..8d0b98235b0 100644
--- a/src/mame/video/atarigx2.cpp
+++ b/src/mame/video/atarigx2.cpp
@@ -182,10 +182,10 @@ uint32_t atarigx2_state::screen_update_atarigx2(screen_device &screen, bitmap_in
/* copy the motion objects on top */
{
bitmap_ind16 &mo_bitmap = m_rle->vram(0);
- int left = cliprect.min_x;
- int top = cliprect.min_y;
- int right = cliprect.max_x + 1;
- int bottom = cliprect.max_y + 1;
+ int left = cliprect.left();
+ int top = cliprect.top();
+ int right = cliprect.right() + 1;
+ int bottom = cliprect.bottom() + 1;
int x, y;
/* now blend with the playfield */
diff --git a/src/mame/video/atarimo.cpp b/src/mame/video/atarimo.cpp
index 35a63f30a38..3db58a6d8d2 100644
--- a/src/mame/video/atarimo.cpp
+++ b/src/mame/video/atarimo.cpp
@@ -161,8 +161,8 @@ atari_motion_objects_device::atari_motion_objects_device(const machine_config &m
void atari_motion_objects_device::draw(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// compute start/stop bands
- int startband = ((cliprect.min_y + m_yscroll - m_slipoffset) & m_bitmapymask) >> m_slipshift;
- int stopband = ((cliprect.max_y + m_yscroll - m_slipoffset) & m_bitmapymask) >> m_slipshift;
+ int startband = ((cliprect.top() + m_yscroll - m_slipoffset) & m_bitmapymask) >> m_slipshift;
+ int stopband = ((cliprect.bottom() + m_yscroll - m_slipoffset) & m_bitmapymask) >> m_slipshift;
if (startband > stopband)
startband -= m_bitmapheight >> m_slipshift;
if (m_slipshift == 0)
@@ -185,7 +185,7 @@ void atari_motion_objects_device::draw(bitmap_ind16 &bitmap, const rectangle &cl
bandclip.min_y -= m_bitmapheight;
// maximum Y is based on the minimum
- bandclip.max_y = bandclip.min_y + (1 << m_slipshift) - 1;
+ bandclip.set_height(1 << m_slipshift);
// keep within the cliprect
bandclip &= cliprect;
@@ -358,7 +358,7 @@ void atari_motion_objects_device::device_timer(emu_timer &timer, device_timer_id
if (param > 0)
screen().update_partial(param - 1);
param += 64;
- if (param >= screen().visible_area().max_y)
+ if (param >= screen().visible_area().bottom())
param = 0;
timer.adjust(screen().time_until_pos(param), param);
break;
@@ -504,19 +504,19 @@ void atari_motion_objects_device::render_object(bitmap_ind16 &bitmap, const rect
for (int y = 0, sy = ypos; y < height; y++, sy += yadv)
{
// clip the Y coordinate
- if (sy <= cliprect.min_y - m_tileheight)
+ if (sy <= cliprect.top() - m_tileheight)
{
code += width;
continue;
}
- else if (sy > cliprect.max_y)
+ else if (sy > cliprect.bottom())
break;
// loop over the width
for (int x = 0, sx = xpos; x < width; x++, sx += xadv, code++)
{
// clip the X coordinate
- if (sx <= -cliprect.min_x - m_tilewidth || sx > cliprect.max_x)
+ if (sx <= -cliprect.left() - m_tilewidth || sx > cliprect.right())
continue;
// draw the sprite
@@ -533,19 +533,19 @@ void atari_motion_objects_device::render_object(bitmap_ind16 &bitmap, const rect
for (int x = 0, sx = xpos; x < width; x++, sx += xadv)
{
// clip the X coordinate
- if (sx <= cliprect.min_x - m_tilewidth)
+ if (sx <= cliprect.left() - m_tilewidth)
{
code += height;
continue;
}
- else if (sx > cliprect.max_x)
+ else if (sx > cliprect.right())
break;
// loop over the height
for (int y = 0, sy = ypos; y < height; y++, sy += yadv, code++)
{
// clip the X coordinate
- if (sy <= -cliprect.min_y - m_tileheight || sy > cliprect.max_y)
+ if (sy <= -cliprect.top() - m_tileheight || sy > cliprect.bottom())
continue;
// draw the sprite
diff --git a/src/mame/video/atarirle.cpp b/src/mame/video/atarirle.cpp
index 5c54a2a785d..7c0882619bf 100644
--- a/src/mame/video/atarirle.cpp
+++ b/src/mame/video/atarirle.cpp
@@ -97,13 +97,12 @@ WRITE8_MEMBER(atari_rle_objects_device::control_write)
if ((oldbits & ATARIRLE_CONTROL_ERASE) != 0)
{
// compute the top and bottom of the rect
- rectangle cliprect = m_cliprect;
- if (m_partial_scanline + 1 > cliprect.min_y)
- cliprect.min_y = m_partial_scanline + 1;
- if (scanline < cliprect.max_y)
- cliprect.max_y = scanline;
+ rectangle cliprect(m_cliprect);
+ cliprect.sety(
+ (std::max)(cliprect.top(), m_partial_scanline + 1),
+ (std::min)(cliprect.bottom(), scanline));
-//logerror(" partial erase %d-%d (frame %d)\n", cliprect.min_y, cliprect.max_y, (oldbits & ATARIRLE_CONTROL_FRAME) >> 2);
+ //logerror(" partial erase %d-%d (frame %d)\n", cliprect.top(), cliprect.bottom(), (oldbits & ATARIRLE_CONTROL_FRAME) >> 2);
// erase the bitmap
m_vram[0][(oldbits & ATARIRLE_CONTROL_FRAME) >> 2].fill(0, cliprect);
@@ -152,10 +151,9 @@ void atari_rle_objects_device::vblank_callback(screen_device &screen, bool state
{
// compute top only; bottom is equal to visible_area
rectangle cliprect = m_cliprect;
- if (m_partial_scanline + 1 > cliprect.min_y)
- cliprect.min_y = m_partial_scanline + 1;
+ cliprect.sety((std::max)(cliprect.top(), m_partial_scanline + 1), cliprect.bottom());
- //logerror(" partial erase %d-%d (frame %d)\n", cliprect.min_y, cliprect.max_y, (m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2);
+ //logerror(" partial erase %d-%d (frame %d)\n", cliprect.top(), cliprect.bottom(), (m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2);
// erase the bitmap
m_vram[0][(m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2].fill(0, cliprect);
@@ -213,10 +211,7 @@ void atari_rle_objects_device::device_start()
// set up a cliprect
m_cliprect = screen().visible_area();
if (m_rightclip != 0)
- {
- m_cliprect.min_x = m_leftclip;
- m_cliprect.max_x = m_rightclip;
- }
+ m_cliprect.setx(m_leftclip, m_rightclip);
// compute the checksums
memset(m_checksums, 0, sizeof(m_checksums));
@@ -500,7 +495,7 @@ if (count++ == atarirle_hilite_index)
x = (int16_t)(x | ~m_xposmask.mask());
if (y & ((m_yposmask.mask() + 1) >> 1))
y = (int16_t)(y | ~m_yposmask.mask());
- x += m_cliprect.min_x;
+ x += m_cliprect.left();
// merge priority and color
color = (color << 4) | (priority << ATARIRLE_PRIORITY_SHIFT);
@@ -536,7 +531,7 @@ void atari_rle_objects_device::draw_rle(bitmap_ind16 &bitmap, const rectangle &c
if (hflip)
scaled_xoffs = ((xscale * info.width) >> 12) - scaled_xoffs;
-//if (clip.min_y == screen().visible_area().min_y)
+//if (clip.top() == screen().visible_area().top())
//logerror(" Sprite: c=%04X l=%04X h=%d X=%4d (o=%4d w=%3d) Y=%4d (o=%4d h=%d) s=%04X\n",
// code, color, hflip,
// x, -scaled_xoffs, (xscale * info.width) >> 12,
@@ -579,30 +574,30 @@ void atari_rle_objects_device::draw_rle_zoom(bitmap_ind16 &bitmap, const rectang
// left edge clip
int pixels_to_skip = 0;
bool xclipped = false;
- if (sx < clip.min_x)
- pixels_to_skip = clip.min_x - sx, xclipped = true;
- if (sx > clip.max_x)
+ if (sx < clip.left())
+ pixels_to_skip = clip.left() - sx, xclipped = true;
+ if (sx > clip.right())
return;
// right edge clip
- if (ex > clip.max_x)
- ex = clip.max_x, xclipped = true;
- else if (ex < clip.min_x)
+ if (ex > clip.right())
+ ex = clip.right(), xclipped = true;
+ else if (ex < clip.left())
return;
// top edge clip
- if (sy < clip.min_y)
+ if (sy < clip.top())
{
- sourcey += (clip.min_y - sy) * dy;
- sy = clip.min_y;
+ sourcey += (clip.top() - sy) * dy;
+ sy = clip.top();
}
- else if (sy > clip.max_y)
+ else if (sy > clip.bottom())
return;
// bottom edge clip
- if (ey > clip.max_y)
- ey = clip.max_y;
- else if (ey < clip.min_y)
+ if (ey > clip.bottom())
+ ey = clip.bottom();
+ else if (ey < clip.top())
return;
// loop top to bottom
@@ -758,30 +753,30 @@ void atari_rle_objects_device::draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const r
// left edge clip
int pixels_to_skip = 0;
bool xclipped = false;
- if (sx < clip.min_x)
- sx = clip.min_x, xclipped = true;
- if (sx > clip.max_x)
+ if (sx < clip.left())
+ sx = clip.left(), xclipped = true;
+ if (sx > clip.right())
return;
// right edge clip
- if (ex > clip.max_x)
- pixels_to_skip = ex - clip.max_x, xclipped = true;
- else if (ex < clip.min_x)
+ if (ex > clip.right())
+ pixels_to_skip = ex - clip.right(), xclipped = true;
+ else if (ex < clip.left())
return;
// top edge clip
- if (sy < clip.min_y)
+ if (sy < clip.top())
{
- sourcey += (clip.min_y - sy) * dy;
- sy = clip.min_y;
+ sourcey += (clip.top() - sy) * dy;
+ sy = clip.top();
}
- else if (sy > clip.max_y)
+ else if (sy > clip.bottom())
return;
// bottom edge clip
- if (ey > clip.max_y)
- ey = clip.max_y;
- else if (ey < clip.min_y)
+ if (ey > clip.bottom())
+ ey = clip.bottom();
+ else if (ey < clip.top())
return;
// loop top to bottom
@@ -933,10 +928,10 @@ void atari_rle_objects_device::hilite_object(bitmap_ind16 &bitmap, int hilite)
int y = m_yposmask.extract(m_ram, hilite);
if (x & ((m_xposmask.mask() + 1) >> 1))
- x = (int16_t)(x | ~m_xposmask.mask());
+ x = int16_t(x | ~m_xposmask.mask());
if (y & ((m_yposmask.mask() + 1) >> 1))
- y = (int16_t)(y | ~m_yposmask.mask());
- x += m_cliprect.min_x;
+ y = int16_t(y | ~m_yposmask.mask());
+ x += m_cliprect.left();
// merge priority and color
color = (color << 4) | (priority << ATARIRLE_PRIORITY_SHIFT);
@@ -969,27 +964,27 @@ void atari_rle_objects_device::hilite_object(bitmap_ind16 &bitmap, int hilite)
// left edge clip
const rectangle &visarea = screen().visible_area();
- if (sx < visarea.min_x)
- sx = visarea.min_x;
- if (sx > visarea.max_x)
+ if (sx < visarea.left())
+ sx = visarea.left();
+ if (sx > visarea.right())
break;
// right edge clip
- if (ex > visarea.max_x)
- ex = visarea.max_x;
- else if (ex < visarea.min_x)
+ if (ex > visarea.right())
+ ex = visarea.right();
+ else if (ex < visarea.left())
break;
// top edge clip
- if (sy < visarea.min_y)
- sy = visarea.min_y;
- else if (sy > visarea.max_y)
+ if (sy < visarea.top())
+ sy = visarea.top();
+ else if (sy > visarea.bottom())
break;
// bottom edge clip
- if (ey > visarea.max_y)
- ey = visarea.max_y;
- else if (ey < visarea.min_y)
+ if (ey > visarea.bottom())
+ ey = visarea.bottom();
+ else if (ey < visarea.left())
break;
for (int ty = sy; ty <= ey; ty++)
diff --git a/src/mame/video/atarisy1.cpp b/src/mame/video/atarisy1.cpp
index be249e8e873..d5f550200b5 100644
--- a/src/mame/video/atarisy1.cpp
+++ b/src/mame/video/atarisy1.cpp
@@ -291,7 +291,7 @@ WRITE16_MEMBER( atarisy1_state::atarisy1_yscroll_w )
/* because this latches a new value into the scroll base,
we need to adjust for the scanline */
adjusted_scroll = newscroll;
- if (scanline <= m_screen->visible_area().max_y)
+ if (scanline <= m_screen->visible_area().bottom())
adjusted_scroll -= (scanline + 1);
m_playfield_tilemap->set_scrolly(0, adjusted_scroll);
@@ -472,11 +472,11 @@ uint32_t atarisy1_state::screen_update_atarisy1(screen_device &screen, bitmap_in
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* high priority MO? */
diff --git a/src/mame/video/atarisy2.cpp b/src/mame/video/atarisy2.cpp
index 0c735cccc4f..4dc92540ca8 100644
--- a/src/mame/video/atarisy2.cpp
+++ b/src/mame/video/atarisy2.cpp
@@ -248,12 +248,12 @@ uint32_t atarisy2_state::screen_update_atarisy2(screen_device &screen, bitmap_in
/* draw and merge the MO */
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
uint8_t *pri = &priority_bitmap.pix8(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
diff --git a/src/mame/video/atarivad.cpp b/src/mame/video/atarivad.cpp
index 85a80776954..0798a0d7b8a 100644
--- a/src/mame/video/atarivad.cpp
+++ b/src/mame/video/atarivad.cpp
@@ -26,24 +26,24 @@ DEFINE_DEVICE_TYPE(ATARI_VAD, atari_vad_device, "atarivad", "Atari VAD")
//-------------------------------------------------
atari_vad_device::atari_vad_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, ATARI_VAD, tag, owner, clock),
- device_video_interface(mconfig, *this),
- m_scanline_int_cb(*this),
- m_alpha_tilemap(*this, "alpha"),
- m_playfield_tilemap(*this, "playfield"),
- m_playfield2_tilemap(*this, "playfield2"),
- m_mob(*this, "mob"),
- m_eof_data(*this, "eof"),
- m_scanline_int_timer(nullptr),
- m_tilerow_update_timer(nullptr),
- m_eof_timer(nullptr),
- m_palette_bank(0),
- m_pf0_xscroll_raw(0),
- m_pf0_yscroll(0),
- m_pf1_xscroll_raw(0),
- m_pf1_yscroll(0),
- m_mo_xscroll(0),
- m_mo_yscroll(0)
+ : device_t(mconfig, ATARI_VAD, tag, owner, clock)
+ , device_video_interface(mconfig, *this)
+ , m_scanline_int_cb(*this)
+ , m_alpha_tilemap(*this, "alpha")
+ , m_playfield_tilemap(*this, "playfield")
+ , m_playfield2_tilemap(*this, "playfield2")
+ , m_mob(*this, "mob")
+ , m_eof_data(*this, "eof")
+ , m_scanline_int_timer(nullptr)
+ , m_tilerow_update_timer(nullptr)
+ , m_eof_timer(nullptr)
+ , m_palette_bank(0)
+ , m_pf0_xscroll_raw(0)
+ , m_pf0_yscroll(0)
+ , m_pf1_xscroll_raw(0)
+ , m_pf1_yscroll(0)
+ , m_mo_xscroll(0)
+ , m_mo_yscroll(0)
{
}
@@ -76,7 +76,7 @@ READ16_MEMBER(atari_vad_device::control_read)
int result = screen().vpos();
if (result > 255)
result = 255;
- if (result > screen().visible_area().max_y)
+ if (result > screen().visible_area().bottom())
result |= 0x4000;
return result;
}
@@ -423,7 +423,7 @@ void atari_vad_device::update_parameter(uint16_t newword)
void atari_vad_device::update_tilerow(emu_timer &timer, int scanline)
{
// skip if out of bounds, or not enabled
- if (scanline <= screen().visible_area().max_y && (m_control[0x0a] & 0x2000) != 0 && m_alpha_tilemap != nullptr)
+ if (scanline <= screen().visible_area().bottom() && (m_control[0x0a] & 0x2000) != 0 && m_alpha_tilemap != nullptr)
{
// iterate over non-visible alpha tiles in this row
int offset = scanline / 8 * 64 + 48 + 2 * (scanline % 8);
diff --git a/src/mame/video/badlands.cpp b/src/mame/video/badlands.cpp
index c8c0a955b99..beab5dd320f 100644
--- a/src/mame/video/badlands.cpp
+++ b/src/mame/video/badlands.cpp
@@ -112,11 +112,11 @@ uint32_t badlands_state::screen_update_badlands(screen_device &screen, bitmap_in
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* not yet verified
diff --git a/src/mame/video/batman.cpp b/src/mame/video/batman.cpp
index e9ee2caa8e9..1b0d8632864 100644
--- a/src/mame/video/batman.cpp
+++ b/src/mame/video/batman.cpp
@@ -118,12 +118,12 @@ uint32_t batman_state::screen_update_batman(screen_device &screen, bitmap_ind16
// draw and merge the MO
bitmap_ind16 &mobitmap = m_vad->mob().bitmap();
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
uint8_t *pri = &priority_bitmap.pix8(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified on real hardware:
@@ -190,11 +190,11 @@ uint32_t batman_state::screen_update_batman(screen_device &screen, bitmap_ind16
/* now go back and process the upper bit of MO priority */
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
diff --git a/src/mame/video/beathead.cpp b/src/mame/video/beathead.cpp
index 5c6586b4fdc..daff388b72a 100644
--- a/src/mame/video/beathead.cpp
+++ b/src/mame/video/beathead.cpp
@@ -145,29 +145,29 @@ uint32_t beathead_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
int x, y;
/* generate the final screen */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
pen_t pen_base = (*m_palette_select & 0x7f) * 256;
uint16_t scanline[336];
/* blanking */
if (m_finescroll & 8)
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
scanline[x] = pen_base;
/* non-blanking */
else
{
offs_t scanline_offset = m_vram_latch_offset + (m_finescroll & 3);
- offs_t src = scanline_offset + cliprect.min_x;
+ offs_t src = scanline_offset + cliprect.left();
/* unswizzle the scanline first */
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
scanline[x] = pen_base | videoram[BYTE4_XOR_LE(src++)];
}
/* then draw it */
- draw_scanline16(bitmap, cliprect.min_x, y, cliprect.width(), &scanline[cliprect.min_x], nullptr);
+ draw_scanline16(bitmap, cliprect.left(), y, cliprect.width(), &scanline[cliprect.left()], nullptr);
}
return 0;
}
diff --git a/src/mame/video/blstroid.cpp b/src/mame/video/blstroid.cpp
index af8c6b9a12e..19c8307f2b8 100644
--- a/src/mame/video/blstroid.cpp
+++ b/src/mame/video/blstroid.cpp
@@ -149,11 +149,11 @@ uint32_t blstroid_state::screen_update_blstroid(screen_device &screen, bitmap_in
/* draw and merge the MO */
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified via schematics
diff --git a/src/mame/video/boogwing.cpp b/src/mame/video/boogwing.cpp
index 407d47b6085..52564201416 100644
--- a/src/mame/video/boogwing.cpp
+++ b/src/mame/video/boogwing.cpp
@@ -40,7 +40,7 @@ void boogwing_state::mix_boogwing(screen_device &screen, bitmap_rgb32 &bitmap, c
uint16_t *srcline1, *srcline2;
uint8_t *srcpriline;
- for (y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for (y=cliprect.top();y<=cliprect.bottom();y++)
{
srcline1=&sprite_bitmap1->pix16(y,0);
srcline2=&sprite_bitmap2->pix16(y,0);
@@ -48,7 +48,7 @@ void boogwing_state::mix_boogwing(screen_device &screen, bitmap_rgb32 &bitmap, c
dstline=&bitmap.pix32(y,0);
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix1 = srcline1[x];
uint16_t pix2 = srcline2[x];
diff --git a/src/mame/video/ccastles.cpp b/src/mame/video/ccastles.cpp
index 99bab35d18e..96981f086d2 100644
--- a/src/mame/video/ccastles.cpp
+++ b/src/mame/video/ccastles.cpp
@@ -272,14 +272,14 @@ uint32_t ccastles_state::screen_update_ccastles(screen_device &screen, bitmap_in
}
/* draw the bitmap to the screen, looping over Y */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint16_t *dst = &bitmap.pix16(y);
/* if we're in the VBLANK region, just fill with black */
if (m_syncprom[y] & 1)
{
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
dst[x] = black;
}
@@ -296,7 +296,7 @@ uint32_t ccastles_state::screen_update_ccastles(screen_device &screen, bitmap_in
src = &m_videoram[effy * 128];
/* loop over X */
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
/* if we're in the HBLANK region, just store black */
if (x >= 256)
diff --git a/src/mame/video/cinemat.cpp b/src/mame/video/cinemat.cpp
index e1f9c120e3a..5d38416f280 100644
--- a/src/mame/video/cinemat.cpp
+++ b/src/mame/video/cinemat.cpp
@@ -22,10 +22,10 @@ void cinemat_state::cinemat_vector_callback(int16_t sx, int16_t sy, int16_t ex,
int intensity = 0xff;
/* adjust for slop */
- sx = sx - visarea.min_x;
- ex = ex - visarea.min_x;
- sy = sy - visarea.min_y;
- ey = ey - visarea.min_y;
+ sx -= visarea.left();
+ ex -= visarea.left();
+ sy -= visarea.top();
+ ey -= visarea.top();
/* point intensity is determined by the shift value */
if (sx == ex && sy == ey)
diff --git a/src/mame/video/cloak.cpp b/src/mame/video/cloak.cpp
index ae98e819927..d550499533f 100644
--- a/src/mame/video/cloak.cpp
+++ b/src/mame/video/cloak.cpp
@@ -182,8 +182,8 @@ void cloak_state::draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int x, y;
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
pen_t pen = m_current_bitmap_videoram_displayed[(y << 8) | x] & 0x07;
diff --git a/src/mame/video/cloud9.cpp b/src/mame/video/cloud9.cpp
index 5a6eea3e0cb..af1d5d5c6d1 100644
--- a/src/mame/video/cloud9.cpp
+++ b/src/mame/video/cloud9.cpp
@@ -246,14 +246,14 @@ uint32_t cloud9_state::screen_update_cloud9(screen_device &screen, bitmap_ind16
}
/* draw the bitmap to the screen, looping over Y */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint16_t *dst = &bitmap.pix16(y);
/* if we're in the VBLANK region, just fill with black */
if (~m_syncprom[y] & 2)
{
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
dst[x] = black;
}
@@ -269,7 +269,7 @@ uint32_t cloud9_state::screen_update_cloud9(screen_device &screen, bitmap_ind16
src[1] = &m_videoram[0x0000 | (effy * 64)];
/* loop over X */
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
/* if we're in the HBLANK region, just store black */
if (x >= 256)
diff --git a/src/mame/video/copsnrob.cpp b/src/mame/video/copsnrob.cpp
index 66bb9e0ebd5..109f13fcf9b 100644
--- a/src/mame/video/copsnrob.cpp
+++ b/src/mame/video/copsnrob.cpp
@@ -122,7 +122,7 @@ uint32_t copsnrob_state::screen_update_copsnrob(screen_device &screen, bitmap_in
{
if (val & mask1)
{
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
if (m_bulletsram[y] & mask2)
bitmap.pix16(y, 256 - x) = 1;
}
diff --git a/src/mame/video/cvs.cpp b/src/mame/video/cvs.cpp
index a88258bcd67..47645bb080a 100644
--- a/src/mame/video/cvs.cpp
+++ b/src/mame/video/cvs.cpp
@@ -224,11 +224,11 @@ uint32_t cvs_state::screen_update_cvs(screen_device &screen, bitmap_ind16 &bitma
{
int y;
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
int x;
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
int pixel0 = s2636_0_bitmap.pix16(y, x);
int pixel1 = s2636_1_bitmap.pix16(y, x);
@@ -328,7 +328,7 @@ void cvs_state::cvs_update_stars(bitmap_ind16 &bitmap, const rectangle &cliprect
if (flip_screen_y())
y = ~y;
- if ((y >= cliprect.min_y) && (y <= cliprect.max_y) &&
+ if ((y >= cliprect.top()) && (y <= cliprect.bottom()) &&
(update_always || (m_palette->pen_indirect(bitmap.pix16(y, x)) == 0)))
bitmap.pix16(y, x) = star_pen;
}
diff --git a/src/mame/video/cyberbal.cpp b/src/mame/video/cyberbal.cpp
index bce32eb631a..0f470c6b7ff 100644
--- a/src/mame/video/cyberbal.cpp
+++ b/src/mame/video/cyberbal.cpp
@@ -233,11 +233,11 @@ uint32_t cyberbal_base_state::update_one_screen(screen_device &screen, bitmap_in
/* draw and merge the MO */
bitmap_ind16 &mobitmap = curmob.bitmap();
for (const sparse_dirty_rect *rect = curmob.first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* not verified: logic is all controlled in a PAL
diff --git a/src/mame/video/cybstorm.cpp b/src/mame/video/cybstorm.cpp
index 4cedc1d9482..ba8b8358965 100644
--- a/src/mame/video/cybstorm.cpp
+++ b/src/mame/video/cybstorm.cpp
@@ -129,12 +129,12 @@ uint32_t cybstorm_state::screen_update_cybstorm(screen_device &screen, bitmap_in
/* draw and merge the MO */
bitmap_ind16 &mobitmap = m_vad->mob().bitmap();
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
uint8_t *pri = &priority_bitmap.pix8(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x])
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
@@ -175,12 +175,12 @@ uint32_t cybstorm_state::screen_update_cybstorm(screen_device &screen, bitmap_in
/* now go back and process the upper bit of MO priority */
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
int count = 0;
- for (int x = rect->min_x; x <= rect->max_x || (count && x < bitmap.width()); x++)
+ for (int x = rect->left(); x <= rect->right() || (count && x < bitmap.width()); x++)
{
const uint16_t START_MARKER = ((4 << atari_motion_objects_device::PRIORITY_SHIFT) | 3);
const uint16_t END_MARKER = ((4 << atari_motion_objects_device::PRIORITY_SHIFT) | 7);
diff --git a/src/mame/video/dassault.cpp b/src/mame/video/dassault.cpp
index 94c989f66bc..7c7f8e7b550 100644
--- a/src/mame/video/dassault.cpp
+++ b/src/mame/video/dassault.cpp
@@ -37,12 +37,12 @@ void dassault_state::mixdassaultlayer(bitmap_rgb32 &bitmap, bitmap_ind16* sprite
uint16_t* srcline;
uint32_t* dstline;
- for (y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for (y=cliprect.top();y<=cliprect.bottom();y++)
{
srcline=&sprite_bitmap->pix16(y,0);
dstline=&bitmap.pix32(y,0);
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix = srcline[x];
diff --git a/src/mame/video/decbac06.cpp b/src/mame/video/decbac06.cpp
index 8f30ba0d737..590a569e245 100644
--- a/src/mame/video/decbac06.cpp
+++ b/src/mame/video/decbac06.cpp
@@ -68,23 +68,23 @@ Priority word (Midres):
DEFINE_DEVICE_TYPE(DECO_BAC06, deco_bac06_device, "deco_back06", "DECO BAC06 Tilemap")
deco_bac06_device::deco_bac06_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, DECO_BAC06, tag, owner, clock),
- m_pf_data(nullptr),
- m_pf_rowscroll(nullptr),
- m_pf_colscroll(nullptr),
- m_tile_region_8(0),
- m_tile_region_16(0),
- m_supports_8x8(true),
- m_supports_16x16(true),
- m_supports_rc_scroll(true),
- m_gfxcolmask(0),
- m_rambank(0),
- m_gfxregion8x8(0),
- m_gfxregion16x16(0),
- m_wide(0),
- m_bppmult(0),
- m_bppmask(0),
- m_gfxdecode(*this, finder_base::DUMMY_TAG)
+ : device_t(mconfig, DECO_BAC06, tag, owner, clock)
+ , m_pf_data(nullptr)
+ , m_pf_rowscroll(nullptr)
+ , m_pf_colscroll(nullptr)
+ , m_tile_region_8(0)
+ , m_tile_region_16(0)
+ , m_supports_8x8(true)
+ , m_supports_16x16(true)
+ , m_supports_rc_scroll(true)
+ , m_gfxcolmask(0)
+ , m_rambank(0)
+ , m_gfxregion8x8(0)
+ , m_gfxregion16x16(0)
+ , m_wide(0)
+ , m_bppmult(0)
+ , m_bppmask(0)
+ , m_gfxdecode(*this, finder_base::DUMMY_TAG)
{
for (int i = 0; i < 8; i++)
{
@@ -282,7 +282,7 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
else
src_y = scrolly;
- for (y=0; y<=cliprect.max_y; y++) {
+ for (y=0; y<=cliprect.bottom(); y++) {
if (row_scroll_enabled)
src_x=scrollx + rowscroll_ptr[(src_y >> (control1[3]&0xf))&(0x1ff>>(control1[3]&0xf))];
else
@@ -291,7 +291,7 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
if (m_flip_screen)
src_x=(src_bitmap.width() - 256) - src_x;
- for (x=0; x<=cliprect.max_x; x++) {
+ for (x=0; x<=cliprect.right(); x++) {
if (col_scroll_enabled)
column_offset=colscroll_ptr[((src_x >> 3) >> (control1[2]&0xf))&(0x3f>>(control1[2]&0xf))];
diff --git a/src/mame/video/deco16ic.cpp b/src/mame/video/deco16ic.cpp
index 7ff4d8dc5e6..b7e2dca7739 100644
--- a/src/mame/video/deco16ic.cpp
+++ b/src/mame/video/deco16ic.cpp
@@ -460,8 +460,8 @@ void deco16ic_device::custom_tilemap_draw(
if (!BIT(control0, 7))
return;
- int starty = cliprect.min_y;
- int endy = cliprect.max_y+1;
+ int starty = cliprect.top();
+ int endy = cliprect.bottom() + 1;
width_mask = src_bitmap0->width() - 1;
height_mask = src_bitmap0->height() - 1;
diff --git a/src/mame/video/deco32.cpp b/src/mame/video/deco32.cpp
index 75fdba3b035..6db1f9a645d 100644
--- a/src/mame/video/deco32.cpp
+++ b/src/mame/video/deco32.cpp
@@ -184,9 +184,9 @@ uint32_t dragngun_state::screen_update_dragngun(screen_device &screen, bitmap_rg
//
// really, it needs optimizing ..
// so for now we only draw these 2 layers on the last update call
- if (cliprect.max_y == 247)
+ if (cliprect.bottom() == 247)
{
- rectangle clip(cliprect.min_x, cliprect.max_x, 8, 247);
+ rectangle clip(cliprect.left(), cliprect.right(), 8, 247);
m_sprgenzoom->dragngun_draw_sprites(bitmap,clip,m_spriteram->buffer(), m_sprite_layout_ram[0], m_sprite_layout_ram[1], m_sprite_lookup_ram[0], m_sprite_lookup_ram[1], m_sprite_ctrl, screen.priority(), m_temp_render_bitmap );
diff --git a/src/mame/video/deco_mlc.cpp b/src/mame/video/deco_mlc.cpp
index 273fc492444..6c60a5f6e7b 100644
--- a/src/mame/video/deco_mlc.cpp
+++ b/src/mame/video/deco_mlc.cpp
@@ -74,16 +74,16 @@ void deco_mlc_state::drawgfxzoomline(uint32_t* dest,const rectangle &clip,gfx_el
x_index_base = 0;
}
- if( sx < clip.min_x)
+ if( sx < clip.left())
{ /* clip left */
- int pixels = clip.min_x-sx;
+ int pixels = clip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > clip.max_x+1 )
+ if( ex > clip.right()+1 )
{ /* clip right */
- int pixels = ex-clip.max_x-1;
+ int pixels = ex-clip.right()-1;
ex -= pixels;
}
@@ -245,16 +245,11 @@ void deco_mlc_state::draw_sprites( const rectangle &cliprect, int scanline, uint
int min_y = m_clip_ram[(clipper*4)+0];
int max_y = m_clip_ram[(clipper*4)+1];
- if (scanline<min_y)
+ if ((scanline<min_y) || (scanline>max_y))
continue;
- if (scanline>max_y)
- continue;
-
-
- user_clip.min_x=m_clip_ram[(clipper*4)+2];
- user_clip.max_x=m_clip_ram[(clipper*4)+3];
+ user_clip.setx(m_clip_ram[(clipper*4)+2], m_clip_ram[(clipper*4)+3]);
user_clip &= cliprect;
/* Any colours out of range (for the bpp value) trigger 'shadow' mode */
@@ -548,7 +543,7 @@ uint32_t deco_mlc_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
// temp_bitmap->fill(0, cliprect);
bitmap.fill(m_palette->pen(0), cliprect); /* Pen 0 fill colour confirmed from Skull Fang level 2 */
- for (int i=cliprect.min_y;i<=cliprect.max_y;i++)
+ for (int i=cliprect.top();i<=cliprect.bottom();i++)
{
uint32_t *dest = &bitmap.pix32(i);
diff --git a/src/mame/video/deco_zoomspr.cpp b/src/mame/video/deco_zoomspr.cpp
index d63941c62a4..e930e82d458 100644
--- a/src/mame/video/deco_zoomspr.cpp
+++ b/src/mame/video/deco_zoomspr.cpp
@@ -93,27 +93,27 @@ inline void deco_zoomspr_device::dragngun_drawgfxzoom(
y_index = 0;
}
- if( sx < clip.min_x)
+ if( sx < clip.left())
{ /* clip left */
- int pixels = clip.min_x-sx;
+ int pixels = clip.left()-sx;
sx += pixels;
x_index_base += pixels*dx;
}
- if( sy < clip.min_y )
+ if( sy < clip.top() )
{ /* clip top */
- int pixels = clip.min_y-sy;
+ int pixels = clip.top()-sy;
sy += pixels;
y_index += pixels*dy;
}
/* NS 980211 - fixed incorrect clipping */
- if( ex > clip.max_x+1 )
+ if( ex > clip.right()+1 )
{ /* clip right */
- int pixels = ex-clip.max_x-1;
+ int pixels = ex-clip.right()-1;
ex -= pixels;
}
- if( ey > clip.max_y+1 )
+ if( ey > clip.bottom()+1 )
{ /* clip bottom */
- int pixels = ey-clip.max_y-1;
+ int pixels = ey-clip.bottom()-1;
ey -= pixels;
}
@@ -396,12 +396,12 @@ void deco_zoomspr_device::dragngun_draw_sprites( bitmap_rgb32 &bitmap, const rec
}
}
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint32_t *src = &temp_bitmap.pix32(y);
uint32_t *dst = &bitmap.pix32(y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint32_t srcpix = src[x];
diff --git a/src/mame/video/decocass.cpp b/src/mame/video/decocass.cpp
index a93edf2fbfc..bf06d8cd5a9 100644
--- a/src/mame/video/decocass.cpp
+++ b/src/mame/video/decocass.cpp
@@ -252,10 +252,10 @@ void decocass_state::draw_special_priority(bitmap_ind16 &bitmap, bitmap_ind8 &pr
const uint8_t *objdata1 = m_gfxdecode->gfx(3)->get_data(1);
assert(m_gfxdecode->gfx(3)->rowbytes() == 64);
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
const int dy = y - sy;
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
const int dx = x - sx;
@@ -308,7 +308,7 @@ void decocass_state::draw_center(bitmap_ind16 &bitmap, const rectangle &cliprect
sx = (m_center_h_shift_space >> 2) & 0x3c;
for (y = 0; y < 4; y++)
- if ((sy + y) >= cliprect.min_y && (sy + y) <= cliprect.max_y)
+ if ((sy + y) >= cliprect.top() && (sy + y) <= cliprect.bottom())
{
if (((sy + y) & m_color_center_bot & 3) == (sy & m_color_center_bot & 3))
for (x = 0; x < 256; x++)
@@ -588,10 +588,10 @@ void decocass_state::draw_missiles(bitmap_ind16 &bitmap, bitmap_ind8 &priority,
sy = 240 - sy + missile_y_adjust_flip_screen;
}
sy -= missile_y_adjust;
- if (sy >= cliprect.min_y && sy <= cliprect.max_y)
+ if (sy >= cliprect.top() && sy <= cliprect.bottom())
for (x = 0; x < 4; x++)
{
- if (sx >= cliprect.min_x && sx <= cliprect.max_x)
+ if (sx >= cliprect.left() && sx <= cliprect.right())
{
bitmap.pix16(sy, sx) = (m_color_missiles & 7) | 8;
priority.pix8(sy, sx) |= 1 << 2;
@@ -607,10 +607,10 @@ void decocass_state::draw_missiles(bitmap_ind16 &bitmap, bitmap_ind8 &priority,
sy = 240 - sy + missile_y_adjust_flip_screen;
}
sy -= missile_y_adjust;
- if (sy >= cliprect.min_y && sy <= cliprect.max_y)
+ if (sy >= cliprect.top() && sy <= cliprect.bottom())
for (x = 0; x < 4; x++)
{
- if (sx >= cliprect.min_x && sx <= cliprect.max_x)
+ if (sx >= cliprect.left() && sx <= cliprect.right())
{
bitmap.pix16(sy, sx) = ((m_color_missiles >> 4) & 7) | 8;
priority.pix8(sy, sx) |= 1 << 3;
@@ -663,13 +663,13 @@ void decocass_state::draw_edge(bitmap_ind16 &bitmap, const rectangle &cliprect,
// technically our y drawing probably shouldn't wrap / mask, but simply draw the 128pixel high 'edge' at the requested position
// see note above this funciton
- for (y=clip.min_y; y<=clip.max_y;y++)
+ for (y=clip.top(); y<=clip.bottom(); y++)
{
int srcline = (y + scrolly) & 0x1ff;
uint16_t* src = &srcbitmap->pix16(srcline);
uint16_t* dst = &bitmap.pix16(y);
- for (x=clip.min_x; x<=clip.max_x;x++)
+ for (x=clip.left(); x<=clip.right(); x++)
{
int srccol = 0;
diff --git a/src/mame/video/decodmd1.cpp b/src/mame/video/decodmd1.cpp
index d3af92b81e2..17a6bdefcf7 100644
--- a/src/mame/video/decodmd1.cpp
+++ b/src/mame/video/decodmd1.cpp
@@ -9,7 +9,6 @@
#include "emu.h"
#include "decodmd1.h"
-#include "rendlay.h"
#include "screen.h"
DEFINE_DEVICE_TYPE(DECODMD1, decodmd_type1_device, "decodmd1", "Data East Pinball Dot Matrix Display Type 1")
@@ -206,9 +205,7 @@ MACHINE_CONFIG_START(decodmd_type1_device::device_add_mconfig)
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", decodmd_type1_device, dmd_nmi, attotime::from_hz(2000)) // seems a lot
- config.set_default_layout(layout_lcd);
-
- MCFG_SCREEN_ADD("dmd",LCD)
+ MCFG_SCREEN_ADD("dmd", LCD)
MCFG_SCREEN_SIZE(128, 16)
MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 16-1)
MCFG_SCREEN_UPDATE_DRIVER(decodmd_type1_device, screen_update)
diff --git a/src/mame/video/decodmd2.cpp b/src/mame/video/decodmd2.cpp
index 752ef6c522f..00622e504e6 100644
--- a/src/mame/video/decodmd2.cpp
+++ b/src/mame/video/decodmd2.cpp
@@ -10,7 +10,6 @@
#include "emu.h"
#include "decodmd2.h"
-#include "rendlay.h"
#include "screen.h"
DEFINE_DEVICE_TYPE(DECODMD2, decodmd_type2_device, "decodmd2", "Data East Pinball Dot Matrix Display Type 2")
@@ -143,29 +142,28 @@ MACHINE_CONFIG_START(decodmd_type2_device::device_add_mconfig)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_UPDATE_ROW_CB(decodmd_type2_device, crtc_update_row)
- config.set_default_layout(layout_lcd);
-
- MCFG_SCREEN_ADD("dmd",RASTER)
- MCFG_SCREEN_SIZE(128, 32)
- MCFG_SCREEN_VISIBLE_AREA(0, 128-1, 0, 32-1)
- MCFG_SCREEN_UPDATE_DEVICE("dmd6845", mc6845_device, screen_update)
- MCFG_SCREEN_REFRESH_RATE(60)
+ screen_device &screen(SCREEN(config, "dmd", SCREEN_TYPE_RASTER));
+ screen.set_native_aspect();
+ screen.set_size(128, 32);
+ screen.set_visarea(0, 128-1, 0, 32-1);
+ screen.set_screen_update("dmd6845", FUNC(mc6845_device::screen_update));
+ screen.set_refresh_hz(60);
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("12K")
-
MACHINE_CONFIG_END
decodmd_type2_device::decodmd_type2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, DECODMD2, tag, owner, clock),
- m_cpu(*this,"dmdcpu"),
- m_mc6845(*this,"dmd6845"),
- m_rombank1(*this,"dmdbank1"),
- m_rombank2(*this,"dmdbank2"),
- m_rambank(*this,"dmdram"),
- m_ram(*this,RAM_TAG)
-{}
+ : device_t(mconfig, DECODMD2, tag, owner, clock)
+ , m_cpu(*this, "dmdcpu")
+ , m_mc6845(*this, "dmd6845")
+ , m_rombank1(*this, "dmdbank1")
+ , m_rombank2(*this, "dmdbank2")
+ , m_rambank(*this, "dmdram")
+ , m_ram(*this, RAM_TAG)
+{
+}
void decodmd_type2_device::device_start()
{
diff --git a/src/mame/video/decodmd3.cpp b/src/mame/video/decodmd3.cpp
index 414ab2c1a5e..2148973db2b 100644
--- a/src/mame/video/decodmd3.cpp
+++ b/src/mame/video/decodmd3.cpp
@@ -10,7 +10,6 @@
#include "emu.h"
#include "decodmd3.h"
-#include "rendlay.h"
#include "screen.h"
DEFINE_DEVICE_TYPE(DECODMD3, decodmd_type3_device, "decodmd3", "Data East Pinball Dot Matrix Display Type 3")
@@ -145,13 +144,12 @@ MACHINE_CONFIG_START(decodmd_type3_device::device_add_mconfig)
MCFG_MC6845_CHAR_WIDTH(16)
MCFG_MC6845_UPDATE_ROW_CB(decodmd_type3_device, crtc_update_row)
- config.set_default_layout(layout_lcd);
-
- MCFG_SCREEN_ADD("dmd",RASTER)
- MCFG_SCREEN_SIZE(192, 64)
- MCFG_SCREEN_VISIBLE_AREA(0, 192-1, 0, 64-1)
- MCFG_SCREEN_UPDATE_DEVICE("dmd6845", mc6845_device, screen_update)
- MCFG_SCREEN_REFRESH_RATE(60)
+ screen_device &screen(SCREEN(config, "dmd", SCREEN_TYPE_RASTER));
+ screen.set_native_aspect();
+ screen.set_size(192, 64);
+ screen.set_visarea(0, 192-1, 0, 64-1);
+ screen.set_screen_update("dmd6845", FUNC(mc6845_device::screen_update));
+ screen.set_refresh_hz(60);
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("64K")
@@ -159,13 +157,14 @@ MACHINE_CONFIG_END
decodmd_type3_device::decodmd_type3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, DECODMD3, tag, owner, clock),
- m_cpu(*this,"dmdcpu"),
- m_mc6845(*this,"dmd6845"),
- m_ram(*this,RAM_TAG),
- m_rambank(*this,"dmdram"),
- m_rombank(*this,"dmdrom")
-{}
+ : device_t(mconfig, DECODMD3, tag, owner, clock)
+ , m_cpu(*this,"dmdcpu")
+ , m_mc6845(*this,"dmd6845")
+ , m_ram(*this,RAM_TAG)
+ , m_rambank(*this,"dmdram")
+ , m_rombank(*this,"dmdrom")
+{
+}
void decodmd_type3_device::device_start()
{
diff --git a/src/mame/video/decospr.cpp b/src/mame/video/decospr.cpp
index ba893bf3726..bdd2d1a02f9 100644
--- a/src/mame/video/decospr.cpp
+++ b/src/mame/video/decospr.cpp
@@ -183,7 +183,7 @@ void decospr_device::alloc_sprite_bitmap()
template<class _BitmapClass>
void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &cliprect, uint16_t* spriteram, int sizewords)
{
- //printf("cliprect %04x, %04x\n", cliprect.min_y, cliprect.max_y);
+ //printf("cliprect %04x, %04x\n", cliprect.top(), cliprect.bottom());
if (m_sprite_bitmap.valid() && !m_pri_cb.isnull())
fatalerror("m_sprite_bitmap && m_pri_cb is invalid\n");
@@ -274,7 +274,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
y = ((y&0x1ff) + m_y_offset)&0x1ff;
- if (cliprect.max_x>256)
+ if (cliprect.right()>256)
{
x = x & 0x01ff;
y = y & 0x01ff;
@@ -318,7 +318,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
if (flipscreen ^ m_flipallx)
{
- if (cliprect.max_x>256)
+ if (cliprect.right()>256)
x = 304 - x;
else
x = 240 - x;
@@ -334,11 +334,11 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
{
int ypos;
ypos = y + mult * multi;
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y)-16))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top())-16))
{
if(!m_sprite_bitmap.valid())
{
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y)-16))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top())-16))
{
if (!m_pri_cb.isnull())
m_gfxdecode->gfx(m_gfxregion)->prio_transpen(bitmap,cliprect,
@@ -463,7 +463,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
{
ypos = y + mult2 * (h-yy);
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y)-16))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top())-16))
{
m_gfxdecode->gfx(m_gfxregion)->prio_transpen(bitmap,cliprect,
sprite + yy + h * xx,
@@ -475,7 +475,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
ypos -= 512; // wrap-around y
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y-16)))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top()-16)))
{
m_gfxdecode->gfx(m_gfxregion)->prio_transpen(bitmap,cliprect,
sprite + yy + h * xx,
@@ -490,7 +490,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
{
ypos = y + mult2 * (h-yy);
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y)-16))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top())-16))
{
m_gfxdecode->gfx(m_gfxregion)->transpen(bitmap,cliprect,
sprite + yy + h * xx,
@@ -502,7 +502,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
ypos -= 512; // wrap-around y
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y-16)))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top()-16)))
{
m_gfxdecode->gfx(m_gfxregion)->transpen(bitmap,cliprect,
sprite + yy + h * xx,
@@ -517,7 +517,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
{
ypos = y + mult2 * (h-yy);
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y)-16))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top())-16))
{
m_gfxdecode->gfx(m_gfxregion)->transpen_raw(m_sprite_bitmap,cliprect,
sprite + yy + h * xx,
@@ -529,7 +529,7 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle &
ypos -= 512; // wrap-around y
- if ((ypos<=cliprect.max_y) && (ypos>=(cliprect.min_y-16)))
+ if ((ypos<=cliprect.bottom()) && (ypos>=(cliprect.top()-16)))
{
m_gfxdecode->gfx(m_gfxregion)->transpen_raw(m_sprite_bitmap,cliprect,
sprite + yy + h * xx,
@@ -567,14 +567,14 @@ void decospr_device::inefficient_copy_sprite_bitmap(bitmap_rgb32 &bitmap, const
uint16_t* srcline;
uint32_t* dstline;
- for (y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for (y=cliprect.top();y<=cliprect.bottom();y++)
{
srcline= &m_sprite_bitmap.pix16(y);
dstline= &bitmap.pix32(y);
if (alpha==0xff)
{
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix = srcline[x];
@@ -589,7 +589,7 @@ void decospr_device::inefficient_copy_sprite_bitmap(bitmap_rgb32 &bitmap, const
}
else
{
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix = srcline[x];
diff --git a/src/mame/video/dragrace.cpp b/src/mame/video/dragrace.cpp
index e28c710c854..d13441aed68 100644
--- a/src/mame/video/dragrace.cpp
+++ b/src/mame/video/dragrace.cpp
@@ -63,8 +63,7 @@ uint32_t dragrace_state::screen_update_dragrace(screen_device &screen, bitmap_in
m_bg_tilemap->set_scrollx(0, 16 * xh + xl - 8);
m_bg_tilemap->set_scrolly(0, 16 * yh + yl);
- if (rect.min_y < y + 0) rect.min_y = y + 0;
- if (rect.max_y > y + 3) rect.max_y = y + 3;
+ rect.sety((std::max)(rect.top(), y + 0), (std::min)(rect.bottom(), y + 3));
m_bg_tilemap->draw(screen, bitmap, rect, 0, 0);
}
diff --git a/src/mame/video/dynax.cpp b/src/mame/video/dynax.cpp
index 347a69f4150..94933026f61 100644
--- a/src/mame/video/dynax.cpp
+++ b/src/mame/video/dynax.cpp
@@ -748,7 +748,7 @@ void dynax_state::jantouki_copylayer( bitmap_ind16 &bitmap, const rectangle &cli
uint16_t *dst;
uint16_t *dstbase = &bitmap.pix16(sy);
- if ((sy < cliprect.min_y) || (sy > cliprect.max_y))
+ if ((sy < cliprect.top()) || (sy > cliprect.bottom()))
{
src1 += 256;
src2 += 256;
@@ -912,7 +912,7 @@ int dynax_state::debug_viewer(bitmap_ind16 &bitmap, const rectangle &cliprect )
if (m_layer_layout != LAYOUT_MJDIALQ2)
memset(m_pixmap[0][1].get(), 0, sizeof(uint8_t) * 0x100 * 0x100);
for (m_hanamai_layer_half = 0; m_hanamai_layer_half < 2; m_hanamai_layer_half++)
- blitter_drawgfx(0, 1, m_blitter_gfx, i, 0, cliprect.min_x, cliprect.min_y, 3, 0);
+ blitter_drawgfx(0, 1, m_blitter_gfx, i, 0, cliprect.left(), cliprect.top(), 3, 0);
if (m_layer_layout != LAYOUT_MJDIALQ2)
hanamai_copylayer(bitmap, cliprect, 0);
diff --git a/src/mame/video/electron.cpp b/src/mame/video/electron.cpp
index 64f6b1b11ec..a5050c3bcf4 100644
--- a/src/mame/video/electron.cpp
+++ b/src/mame/video/electron.cpp
@@ -85,13 +85,13 @@ inline void electron_state::electron_plot_pixel(bitmap_ind16 &bitmap, int x, int
uint32_t electron_state::screen_update_electron(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int min_x = screen.visible_area().min_x;
- int min_y = screen.visible_area().min_y;
+ int min_x = screen.visible_area().left();
+ int min_y = screen.visible_area().top();
int x = min_x;
int pal[16];
int scanline = screen.vpos();
rectangle r = cliprect;
- r.min_y = r.max_y = scanline;
+ r.sety(scanline, scanline);
/* set up palette */
switch( m_ula.screen_mode )
diff --git a/src/mame/video/eprom.cpp b/src/mame/video/eprom.cpp
index 6fbb6e34657..93becde10bc 100644
--- a/src/mame/video/eprom.cpp
+++ b/src/mame/video/eprom.cpp
@@ -219,11 +219,11 @@ uint32_t eprom_state::screen_update_eprom(screen_device &screen, bitmap_ind16 &b
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified from the GALs on the real PCB; equations follow
@@ -325,11 +325,11 @@ uint32_t eprom_state::screen_update_eprom(screen_device &screen, bitmap_ind16 &b
/* now go back and process the upper bit of MO priority */
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
@@ -366,11 +366,11 @@ uint32_t eprom_state::screen_update_guts(screen_device &screen, bitmap_ind16 &bi
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = (mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT) & 7;
@@ -391,11 +391,11 @@ uint32_t eprom_state::screen_update_guts(screen_device &screen, bitmap_ind16 &bi
/* now go back and process the upper bit of MO priority */
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
diff --git a/src/mame/video/equites.cpp b/src/mame/video/equites.cpp
index 6df9a32706a..82dec063f58 100644
--- a/src/mame/video/equites.cpp
+++ b/src/mame/video/equites.cpp
@@ -338,13 +338,13 @@ void splndrbt_state::splndrbt_draw_sprites(bitmap_ind16 &bitmap, const rectangle
{
int const y = yhalf ? sy + 1 + yy : sy - yy;
- if (y >= cliprect.min_y && y <= cliprect.max_y)
+ if (y >= cliprect.top() && y <= cliprect.bottom())
{
for (x = 0; x <= (scalex << 1); ++x)
{
int bx = (sx + x) & 0xff;
- if (bx >= cliprect.min_x && bx <= cliprect.max_x)
+ if (bx >= cliprect.left() && bx <= cliprect.right())
{
int xx = scalex ? (x * 29 + scalex) / (scalex << 1) + 1 : 16; // FIXME This is wrong. Should use the PROM.
int const offset = (fx ? (31 - xx) : xx) + ((fy ^ yhalf) ? (16 + line) : (15 - line)) * gfx->rowbytes();
@@ -382,7 +382,7 @@ void splndrbt_state::splndrbt_copy_bg(bitmap_ind16 &dst_bitmap, const rectangle
for (dst_y = 32; dst_y < 256-32; ++dst_y)
{
- if (dst_y >= cliprect.min_y && dst_y <= cliprect.max_y)
+ if (dst_y >= cliprect.top() && dst_y <= cliprect.bottom())
{
const uint8_t * const romline = &xrom[(dst_y ^ dinvert) << 5];
const uint16_t * const src_line = &src_bitmap.pix16((src_y + scroll_y) & 0x1ff);
diff --git a/src/mame/video/exidy440.cpp b/src/mame/video/exidy440.cpp
index 3aba8684ea7..12de6ba3be0 100644
--- a/src/mame/video/exidy440.cpp
+++ b/src/mame/video/exidy440.cpp
@@ -307,7 +307,7 @@ void exidy440_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
uint8_t *src;
/* skip if out of range */
- if (yoffs < cliprect.min_y || yoffs >= cliprect.max_y + 16)
+ if (yoffs < cliprect.top() || yoffs >= cliprect.bottom() + 16)
continue;
/* get a pointer to the source image */
@@ -328,11 +328,11 @@ void exidy440_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
sy += (VBSTART - VBEND);
/* stop if we get before the current scanline */
- if (yoffs < cliprect.min_y)
+ if (yoffs < cliprect.top())
break;
/* only draw scanlines that are in this cliprect */
- if (yoffs <= cliprect.max_y)
+ if (yoffs <= cliprect.bottom())
{
uint8_t *old = &m_local_videoram[sy * 512 + xoffs];
int currx = xoffs;
@@ -389,8 +389,8 @@ void exidy440_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
void exidy440_state::update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int scroll_offset, int check_collision)
{
/* draw any dirty scanlines from the VRAM directly */
- int sy = scroll_offset + cliprect.min_y;
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++, sy++)
+ int sy = scroll_offset + cliprect.top();
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++, sy++)
{
/* wrap at the bottom of the screen */
if (sy >= VBSTART)
@@ -418,7 +418,7 @@ uint32_t exidy440_state::screen_update_exidy440(screen_device &screen, bitmap_in
update_screen(screen, bitmap, cliprect, 0, true);
/* generate an interrupt once/frame for the beam */
- if (cliprect.max_y == screen.visible_area().max_y)
+ if (cliprect.bottom() == screen.visible_area().bottom())
{
int i;
diff --git a/src/mame/video/fantland.cpp b/src/mame/video/fantland.cpp
index a1a64f97014..44a9a742e46 100644
--- a/src/mame/video/fantland.cpp
+++ b/src/mame/video/fantland.cpp
@@ -73,7 +73,7 @@ void fantland_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect
// wheelrun is the only game with a smaller visible area
const rectangle &visarea = m_screen->visible_area();
- int special = (visarea.max_y - visarea.min_y + 1) < 0x100;
+ int special = visarea.height() < 0x100;
for ( ; ram < indx_ram; ram += 8,ram2++)
{
diff --git a/src/mame/video/firetrk.cpp b/src/mame/video/firetrk.cpp
index c19477615ee..d59c205aab7 100644
--- a/src/mame/video/firetrk.cpp
+++ b/src/mame/video/firetrk.cpp
@@ -323,8 +323,8 @@ void firetrk_state::check_collision(int which)
{
int y, x;
- for (y = playfield_window.min_y; y <= playfield_window.max_y; y++)
- for (x = playfield_window.min_x; x <= playfield_window.max_x; x++)
+ for (y = playfield_window.top(); y <= playfield_window.bottom(); y++)
+ for (x = playfield_window.left(); x <= playfield_window.right(); x++)
{
pen_t a = m_helper1.pix16(y, x);
pen_t b = m_helper2.pix16(y, x);
@@ -353,7 +353,7 @@ uint32_t firetrk_state::screen_update_firetrk(screen_device &screen, bitmap_ind1
draw_text(bitmap, cliprect, m_alpha_num_ram + 0x00, 296, 0x10, 0x10);
draw_text(bitmap, cliprect, m_alpha_num_ram + 0x10, 8, 0x10, 0x10);
- if (cliprect.max_y == screen.visible_area().max_y)
+ if (cliprect.bottom() == screen.visible_area().bottom())
{
m_tilemap2->draw(screen, m_helper1, playfield_window, 0, 0);
@@ -386,7 +386,7 @@ uint32_t firetrk_state::screen_update_superbug(screen_device &screen, bitmap_ind
draw_text(bitmap, cliprect, m_alpha_num_ram + 0x00, 296, 0x10, 0x10);
draw_text(bitmap, cliprect, m_alpha_num_ram + 0x10, 8, 0x10, 0x10);
- if (cliprect.max_y == screen.visible_area().max_y)
+ if (cliprect.bottom() == screen.visible_area().bottom())
{
m_tilemap2->draw(screen, m_helper1, playfield_window, 0, 0);
@@ -416,7 +416,7 @@ uint32_t firetrk_state::screen_update_montecar(screen_device &screen, bitmap_ind
draw_text(bitmap, cliprect, m_alpha_num_ram + 0x00, 24, 0x20, 0x08);
draw_text(bitmap, cliprect, m_alpha_num_ram + 0x20, 16, 0x20, 0x08);
- if (cliprect.max_y == screen.visible_area().max_y)
+ if (cliprect.bottom() == screen.visible_area().bottom())
{
m_tilemap2->draw(screen, m_helper1, playfield_window, 0, 0);
diff --git a/src/mame/video/galaxia.cpp b/src/mame/video/galaxia.cpp
index 94b6c423c61..6cfbcdb5e80 100644
--- a/src/mame/video/galaxia.cpp
+++ b/src/mame/video/galaxia.cpp
@@ -120,9 +120,9 @@ uint32_t galaxia_state::screen_update_galaxia(screen_device &screen, bitmap_ind1
cvs_update_stars(bitmap, cliprect, STAR_PEN, 1);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
bool bullet = m_bullet_ram[y] && x == (m_bullet_ram[y] ^ 0xff);
bool background = (bitmap.pix16(y, x) & 3) != 0;
@@ -185,7 +185,7 @@ uint32_t galaxia_state::screen_update_astrowar(screen_device &screen, bitmap_ind
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
copybitmap(m_temp_bitmap, bitmap, 0, 0, 0, 0, cliprect);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
// draw bullets (guesswork)
if (m_bullet_ram[y])
@@ -201,14 +201,14 @@ uint32_t galaxia_state::screen_update_astrowar(screen_device &screen, bitmap_ind
if (pos) bitmap.pix16(y, pos-1) = BULLET_PEN;
}
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
// NOTE: similar to zac2650.c, the sprite chip runs at a different frequency than the background generator
// the exact timing ratio is unknown, so we'll have to do with guesswork
float s_ratio = 256.0f / 196.0f;
float sx = x * s_ratio;
- if ((int)(sx + 0.5f) > cliprect.max_x)
+ if (int(sx + 0.5f) > cliprect.right())
break;
// copy the S2636 bitmap into the main bitmap and check collision
@@ -217,11 +217,11 @@ uint32_t galaxia_state::screen_update_astrowar(screen_device &screen, bitmap_ind
if (S2636_IS_PIXEL_DRAWN(pixel))
{
// S2636 vs. background collision detection
- if ((m_temp_bitmap.pix16(y, (int)(sx)) | m_temp_bitmap.pix16(y, (int)(sx + 0.5f))) & 1)
+ if ((m_temp_bitmap.pix16(y, int(sx)) | m_temp_bitmap.pix16(y, int(sx + 0.5f))) & 1)
m_collision_register |= 0x01;
- bitmap.pix16(y, (int)(sx)) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
- bitmap.pix16(y, (int)(sx + 0.5f)) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
+ bitmap.pix16(y, int(sx)) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
+ bitmap.pix16(y, int(sx + 0.5f)) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
}
}
}
diff --git a/src/mame/video/galspnbl.cpp b/src/mame/video/galspnbl.cpp
index 9b442a3b0bf..1c7308ff402 100644
--- a/src/mame/video/galspnbl.cpp
+++ b/src/mame/video/galspnbl.cpp
@@ -38,12 +38,12 @@ VIDEO_START_MEMBER(galspnbl_state,galspnbl)
void galspnbl_state::mix_sprite_layer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri)
{
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint16_t *dd = &bitmap.pix16(y);
uint16_t *sd2 = &m_sprite_bitmap.pix16(y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint16_t sprpixel = (sd2[x]);
//uint16_t sprpri = (sprpixel >> 8) & 3;
diff --git a/src/mame/video/gamate.cpp b/src/mame/video/gamate.cpp
index 39f62d0884f..5bb9a1e771d 100644
--- a/src/mame/video/gamate.cpp
+++ b/src/mame/video/gamate.cpp
@@ -26,7 +26,6 @@
#include "emu.h"
#include "video/gamate.h"
-#include "rendlay.h"
#include "screen.h"
DEFINE_DEVICE_TYPE(GAMATE_VIDEO, gamate_video_device, "gamate_vid", "Gamate Video Hardware")
@@ -262,13 +261,13 @@ int gamate_video_device::get_pixel_from_vram(int x, int y)
uint32_t gamate_video_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
//printf("updating scanline %d\n", y);
int real_x, real_y;
get_real_x_and_y(real_x, real_y, y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
int pix = get_pixel_from_vram(x + real_x, real_y);
@@ -316,8 +315,6 @@ MACHINE_CONFIG_START(gamate_video_device::device_add_mconfig)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE) // close approximate until we use timers to emulate exact video update
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 4)
MCFG_PALETTE_INIT_OWNER(gamate_video_device,gamate)
MACHINE_CONFIG_END
diff --git a/src/mame/video/gauntlet.cpp b/src/mame/video/gauntlet.cpp
index b003e45522b..e43f30c4d0a 100644
--- a/src/mame/video/gauntlet.cpp
+++ b/src/mame/video/gauntlet.cpp
@@ -168,11 +168,11 @@ uint32_t gauntlet_state::screen_update_gauntlet(screen_device &screen, bitmap_in
/* draw and merge the MO */
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified via schematics:
diff --git a/src/mame/video/harddriv.cpp b/src/mame/video/harddriv.cpp
index 931ff46e207..e2da5ba8d83 100644
--- a/src/mame/video/harddriv.cpp
+++ b/src/mame/video/harddriv.cpp
@@ -420,7 +420,7 @@ TMS340X0_SCANLINE_IND16_CB_MEMBER(harddriv_state::scanline_driver)
for (x = params->heblnk; x < params->hsblnk; x++)
dest[x] = m_gfx_palettebank * 256 + vram_base[BYTE_XOR_LE(coladdr++ & 0xfff)];
- if (scanline == screen.visible_area().max_y)
+ if (scanline == screen.visible_area().bottom())
display_speedups();
}
@@ -438,6 +438,6 @@ TMS340X0_SCANLINE_IND16_CB_MEMBER(harddriv_state::scanline_multisync)
for (x = params->heblnk; x < params->hsblnk; x++)
dest[x] = m_gfx_palettebank * 256 + vram_base[BYTE_XOR_LE(coladdr++ & 0x7ff)];
- if (scanline == screen.visible_area().max_y)
+ if (scanline == screen.visible_area().bottom())
display_speedups();
}
diff --git a/src/mame/video/irobot.cpp b/src/mame/video/irobot.cpp
index cdeef307727..1ff2031e48e 100644
--- a/src/mame/video/irobot.cpp
+++ b/src/mame/video/irobot.cpp
@@ -352,7 +352,7 @@ uint32_t irobot_state::screen_update_irobot(screen_device &screen, bitmap_ind16
int x, y, offs;
/* copy the polygon bitmap */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
draw_scanline8(bitmap, 0, y, BITMAP_WIDTH, &bitmap_base[y * BITMAP_WIDTH], nullptr);
/* redraw the non-zero characters in the alpha layer */
diff --git a/src/mame/video/jaguar.cpp b/src/mame/video/jaguar.cpp
index 803d5e14061..fde197a7ca1 100644
--- a/src/mame/video/jaguar.cpp
+++ b/src/mame/video/jaguar.cpp
@@ -204,8 +204,8 @@ inline void jaguar_state::get_crosshair_xy(int player, int &x, int &y)
const rectangle &visarea = m_screen->visible_area();
/* only 2 lightguns are connected */
- x = visarea.min_x + (((ioport(player ? "FAKE2_X" : "FAKE1_X")->read() & 0xff) * visarea.width()) >> 8);
- y = visarea.min_y + (((ioport(player ? "FAKE2_Y" : "FAKE1_Y")->read() & 0xff) * visarea.height()) >> 8);
+ x = visarea.left() + (((ioport(player ? "FAKE2_X" : "FAKE1_X")->read() & 0xff) * visarea.width()) >> 8);
+ y = visarea.top() + (((ioport(player ? "FAKE2_Y" : "FAKE1_Y")->read() & 0xff) * visarea.height()) >> 8);
}
@@ -752,7 +752,7 @@ void jaguar_state::scanline_update(int param)
if ((m_gpu_regs[VMODE] & 1) && vc >= (m_gpu_regs[VDB] & 0x7ff))
{
uint32_t *dest = &m_screen_bitmap.pix32(vc >> 1);
- int maxx = visarea.max_x;
+ int maxx = visarea.right();
int hde = effective_hvalue(m_gpu_regs[HDE]) >> 1;
uint16_t x,scanline[760];
uint8_t y,pixel_width = ((m_gpu_regs[VMODE]>>10)&3)+1;
@@ -761,7 +761,7 @@ void jaguar_state::scanline_update(int param)
if (ENABLE_BORDERS && vc % 2 == 0)
{
rgb_t border = rgb_t(m_gpu_regs[BORD1] & 0xff, m_gpu_regs[BORD1] >> 8, m_gpu_regs[BORD2] & 0xff);
- for (x = visarea.min_x; x <= visarea.max_x; x++)
+ for (x = visarea.left(); x <= visarea.right(); x++)
dest[x] = border;
}
diff --git a/src/mame/video/jedi.cpp b/src/mame/video/jedi.cpp
index d3ce309fa28..d99be2e9568 100644
--- a/src/mame/video/jedi.cpp
+++ b/src/mame/video/jedi.cpp
@@ -108,8 +108,8 @@ void jedi_state::do_pen_lookup(bitmap_rgb32 &bitmap, const rectangle &cliprect)
get_pens(pens);
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
- for(x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
+ for(x = cliprect.left(); x <= cliprect.right(); x++)
bitmap.pix32(y, x) = pens[bitmap.pix32(y, x)];
}
@@ -158,12 +158,12 @@ void jedi_state::draw_background_and_text(bitmap_rgb32 &bitmap, const rectangle
memset(background_line_buffer, 0, 0x200 * sizeof(int));
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
int x;
int bg_last_col = 0;
- for (x = cliprect.min_x; x <= cliprect.max_x; x += 2)
+ for (x = cliprect.left(); x <= cliprect.right(); x += 2)
{
int tx_col1, tx_col2, bg_col;
int bg_tempcol;
@@ -285,7 +285,7 @@ void jedi_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
int i;
uint16_t x = spriteram[offs + 0x100] + ((spriteram[offs + 0x40] & 0x01) << 8) - 2;
- if ((y < cliprect.min_y) || (y > cliprect.max_y))
+ if ((y < cliprect.top()) || (y > cliprect.bottom()))
continue;
if (flip_x)
diff --git a/src/mame/video/klax.cpp b/src/mame/video/klax.cpp
index b8a3129a35c..d32022c5d2b 100644
--- a/src/mame/video/klax.cpp
+++ b/src/mame/video/klax.cpp
@@ -100,11 +100,11 @@ uint32_t klax_state::screen_update_klax(screen_device &screen, bitmap_ind16 &bit
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified from schematics:
diff --git a/src/mame/video/kyocera.cpp b/src/mame/video/kyocera.cpp
index 78e96a6833c..ba34a0a5e84 100644
--- a/src/mame/video/kyocera.cpp
+++ b/src/mame/video/kyocera.cpp
@@ -3,7 +3,6 @@
#include "emu.h"
#include "includes/kyocera.h"
-#include "rendlay.h"
#include "screen.h"
@@ -56,8 +55,6 @@ MACHINE_CONFIG_START(kc85_state::kc85_video)
MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 64-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(kc85_state,kc85)
@@ -84,8 +81,6 @@ MACHINE_CONFIG_START(tandy200_state::tandy200_video)
MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 128-1)
MCFG_SCREEN_PALETTE("palette")
- config.set_default_layout(layout_lcd);
-
MCFG_PALETTE_ADD("palette", 2)
MCFG_PALETTE_INIT_OWNER(tandy200_state,tandy200)
diff --git a/src/mame/video/leland.cpp b/src/mame/video/leland.cpp
index d0dedd09e74..6408f1d1d9d 100644
--- a/src/mame/video/leland.cpp
+++ b/src/mame/video/leland.cpp
@@ -450,13 +450,13 @@ uint32_t leland_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
m_tilemap->draw(screen, bitmap, cliprect, 0);
/* for each scanline in the visible region */
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint16_t *const dst = &bitmap.pix16(y);
uint8_t const *const fg_src = &m_video_ram[y << 8];
/* for each pixel on the scanline */
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
/* build the pen, background is d0-d5 */
pen_t pen = dst[x] & 0x3f;
diff --git a/src/mame/video/lemmings.cpp b/src/mame/video/lemmings.cpp
index 70d13de215a..c7c3f80a4f4 100644
--- a/src/mame/video/lemmings.cpp
+++ b/src/mame/video/lemmings.cpp
@@ -118,11 +118,11 @@ void lemmings_state::lemmings_copy_bitmap(bitmap_rgb32& bitmap, int* xscroll, in
int y,x;
const pen_t *paldata = m_palette->pens();
- for (y=cliprect.min_y; y<cliprect.max_y;y++)
+ for (y=cliprect.top(); y<cliprect.bottom();y++)
{
uint32_t* dst = &bitmap.pix32(y,0);
- for (x=cliprect.min_x; x<cliprect.max_x;x++)
+ for (x=cliprect.left(); x<cliprect.right();x++)
{
uint16_t src = m_bitmap0.pix16((y-*yscroll)&0xff,(x-*xscroll)&0x7ff);
@@ -137,9 +137,7 @@ uint32_t lemmings_state::screen_update_lemmings(screen_device &screen, bitmap_rg
int x1 = -m_control_data[0];
int x0 = -m_control_data[2];
int y = 0;
- rectangle rect;
- rect.max_y = cliprect.max_y;
- rect.min_y = cliprect.min_y;
+ rectangle rect(0, 0, cliprect.top(), cliprect.bottom());
// sprites are flipped relative to tilemaps
m_sprgen[0]->set_flip_screen(true);
@@ -157,12 +155,10 @@ uint32_t lemmings_state::screen_update_lemmings(screen_device &screen, bitmap_rg
}
else
{
- rect.max_x = 159;
- rect.min_x = 0;
+ rect.setx(0, 159);
lemmings_copy_bitmap(bitmap, &x0, &y, rect);
- rect.max_x = 319;
- rect.min_x = 160;
+ rect.setx(160, 319);
lemmings_copy_bitmap(bitmap, &x1, &y, rect);
}
diff --git a/src/mame/video/mac.cpp b/src/mame/video/mac.cpp
index 5883d7f102d..ccf6bcfc245 100644
--- a/src/mame/video/mac.cpp
+++ b/src/mame/video/mac.cpp
@@ -226,7 +226,6 @@ VIDEO_RESET_MEMBER(mac_state,maceagle)
VIDEO_RESET_MEMBER(mac_state,macrbv)
{
- rectangle visarea;
int htotal, vtotal;
double framerate;
int view;
@@ -242,16 +241,14 @@ VIDEO_RESET_MEMBER(mac_state,macrbv)
m_rbv_type = RBV_TYPE_RBV;
- visarea.min_x = 0;
- visarea.min_y = 0;
view = 0;
m_rbv_montype = m_montype.read_safe(2);
+ rectangle visarea;
switch (m_rbv_montype)
{
case 1: // 15" portrait display
- visarea.max_x = 640-1;
- visarea.max_y = 870-1;
+ visarea.set(0, 640-1, 0, 870-1);
htotal = 832;
vtotal = 918;
framerate = 75.0;
@@ -259,8 +256,7 @@ VIDEO_RESET_MEMBER(mac_state,macrbv)
break;
case 2: // 12" RGB
- visarea.max_x = 512-1;
- visarea.max_y = 384-1;
+ visarea.set(0, 512-1, 0, 384-1);
htotal = 640;
vtotal = 407;
framerate = 60.15;
@@ -268,15 +264,14 @@ VIDEO_RESET_MEMBER(mac_state,macrbv)
case 6: // 13" RGB
default:
- visarea.max_x = 640-1;
- visarea.max_y = 480-1;
+ visarea.set(0, 640-1, 0, 480-1);
htotal = 800;
vtotal = 525;
framerate = 59.94;
break;
}
-// printf("RBV reset: monitor is %dx%d @ %f Hz\n", visarea.max_x+1, visarea.max_y+1, framerate);
+// logerror("RBV reset: monitor is %dx%d @ %f Hz\n", visarea.width(), visarea.height(), framerate);
m_screen->configure(htotal, vtotal, visarea, HZ_TO_ATTOSECONDS(framerate));
render_target *target = machine().render().first_target();
target->set_view(view);
@@ -284,7 +279,6 @@ VIDEO_RESET_MEMBER(mac_state,macrbv)
VIDEO_RESET_MEMBER(mac_state,macsonora)
{
- rectangle visarea;
int htotal, vtotal;
double framerate;
int view = 0;
@@ -300,15 +294,12 @@ VIDEO_RESET_MEMBER(mac_state,macsonora)
m_rbv_type = RBV_TYPE_SONORA;
- visarea.min_x = 0;
- visarea.min_y = 0;
-
m_rbv_montype = m_montype.read_safe(2);
+ rectangle visarea;
switch (m_rbv_montype)
{
case 1: // 15" portrait display
- visarea.max_x = 640-1;
- visarea.max_y = 870-1;
+ visarea.set(0, 640-1, 0, 870-1);
htotal = 832;
vtotal = 918;
framerate = 75.0;
@@ -316,8 +307,7 @@ VIDEO_RESET_MEMBER(mac_state,macsonora)
break;
case 2: // 12" RGB
- visarea.max_x = 512-1;
- visarea.max_y = 384-1;
+ visarea.set(0, 512-1, 0, 384-1);
htotal = 640;
vtotal = 407;
framerate = 60.15;
@@ -325,15 +315,14 @@ VIDEO_RESET_MEMBER(mac_state,macsonora)
case 6: // 13" RGB
default:
- visarea.max_x = 640-1;
- visarea.max_y = 480-1;
+ visarea.set(0, 640-1, 0, 480-1);
htotal = 800;
vtotal = 525;
framerate = 59.94;
break;
}
-// printf("Sonora reset: monitor is %dx%d @ %f Hz\n", visarea.max_x+1, visarea.max_y+1, framerate);
+// logerror("Sonora reset: monitor is %dx%d @ %f Hz\n", visarea.width(), visarea.height(), framerate);
m_screen->configure(htotal, vtotal, visarea, HZ_TO_ATTOSECONDS(framerate));
render_target *target = machine().render().first_target();
target->set_view(view);
diff --git a/src/mame/video/madalien.cpp b/src/mame/video/madalien.cpp
index f07b9badfcf..41e49f8aa1c 100644
--- a/src/mame/video/madalien.cpp
+++ b/src/mame/video/madalien.cpp
@@ -155,11 +155,8 @@ VIDEO_START_MEMBER(madalien_state,madalien)
void madalien_state::draw_edges(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int flip, int scroll_mode)
{
- rectangle clip_edge1;
- rectangle clip_edge2;
-
- clip_edge1 = cliprect;
- clip_edge2 = cliprect;
+ rectangle clip_edge1(cliprect);
+ rectangle clip_edge2(cliprect);
if (flip)
{
@@ -205,7 +202,7 @@ void madalien_state::draw_headlight(bitmap_ind16 &bitmap, const rectangle &clipr
if (flip)
hy = ~hy;
- if ((hy < cliprect.min_y) || (hy > cliprect.max_y))
+ if ((hy < cliprect.top()) || (hy > cliprect.bottom()))
continue;
for (x = 0; x < 0x80; x++)
@@ -215,7 +212,7 @@ void madalien_state::draw_headlight(bitmap_ind16 &bitmap, const rectangle &clipr
if (flip)
hx = ~hx;
- if ((hx < cliprect.min_x) || (hx > cliprect.max_x))
+ if ((hx < cliprect.left()) || (hx > cliprect.right()))
continue;
if (m_headlight_bitmap->pix16(y, x) != 0)
@@ -283,9 +280,9 @@ uint32_t madalien_state::screen_update_madalien(screen_device &screen, bitmap_in
min_x = 0xff - max_x_save;
}
- for (y = cliprect.min_y; y <= cliprect.max_y ; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
for (x = min_x; x <= max_x; x++)
- if ((x >= cliprect.min_x) && (x <= cliprect.max_x))
+ if ((x >= cliprect.left()) && (x <= cliprect.right()))
bitmap.pix16(y, x) |= 8;
}
diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp
index 035ec20ca30..00a57d3c3f0 100644
--- a/src/mame/video/mermaid.cpp
+++ b/src/mame/video/mermaid.cpp
@@ -230,8 +230,8 @@ uint8_t mermaid_state::collision_check( rectangle& rect )
int x;
int y;
- for (y = rect.min_y; y <= rect.max_y; y++)
- for (x = rect.min_x; x <= rect.max_x; x++)
+ for (y = rect.top(); y <= rect.bottom(); y++)
+ for (x = rect.left(); x <= rect.right(); x++)
{
uint16_t a = m_palette->pen_indirect(m_helper.pix16(y, x)) & 0x3f;
uint16_t b = m_palette->pen_indirect(m_helper2.pix16(y, x)) & 0x3f;
@@ -289,11 +289,9 @@ void mermaid_state::collision_update()
sy = 240 - sy;
}
- rect.min_x = sx;
- rect.min_y = sy;
- rect.max_x = sx + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = sy + m_gfxdecode->gfx(1)->height() - 1;
-
+ rect.set(
+ sx, sx + m_gfxdecode->gfx(1)->width() - 1,
+ sy, sy + m_gfxdecode->gfx(1)->height() - 1);
rect &= visarea;
// check collision sprite - background
@@ -392,11 +390,9 @@ void mermaid_state::collision_update()
sy = 240 - sy;
}
- rect.min_x = sx;
- rect.min_y = sy;
- rect.max_x = sx + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = sy + m_gfxdecode->gfx(1)->height() - 1;
-
+ rect.set(
+ sx, sx + m_gfxdecode->gfx(1)->width() - 1,
+ sy, sy + m_gfxdecode->gfx(1)->height() - 1);
rect &= visarea;
// check collision sprite - sprite
@@ -473,11 +469,9 @@ void mermaid_state::collision_update()
sy = 240 - sy;
}
- rect.min_x = sx;
- rect.min_y = sy;
- rect.max_x = sx + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = sy + m_gfxdecode->gfx(1)->height() - 1;
-
+ rect.set(
+ sx, sx + m_gfxdecode->gfx(1)->width() - 1,
+ sy, sy + m_gfxdecode->gfx(1)->height() - 1);
rect &= visarea;
// check collision sprite - sprite
diff --git a/src/mame/video/namcos21.cpp b/src/mame/video/namcos21.cpp
index 5fdb1deda54..db10b9fe6ca 100644
--- a/src/mame/video/namcos21.cpp
+++ b/src/mame/video/namcos21.cpp
@@ -103,13 +103,13 @@ void namcos21_state::copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, const r
{
/* blit the visible framebuffer */
int sy;
- for( sy=clip.min_y; sy<=clip.max_y; sy++ )
+ for( sy=clip.top(); sy<=clip.bottom(); sy++ )
{
uint16_t *dest = &bitmap.pix16(sy);
const uint16_t *pPen = m_mpPolyFrameBufferPens2.get()+NAMCOS21_POLY_FRAME_WIDTH*sy;
const uint16_t *pZ = m_mpPolyFrameBufferZ2.get()+NAMCOS21_POLY_FRAME_WIDTH*sy;
int sx;
- for( sx=clip.min_x; sx<=clip.max_x; sx++ )
+ for( sx=clip.left(); sx<=clip.right(); sx++ )
{
int z = pZ[sx];
//if( pZ[sx]!=0x7fff )
@@ -429,17 +429,17 @@ uint32_t namcos21_state::screen_update_driveyes(screen_device &screen, bitmap_in
void namcos21_state::winrun_bitmap_draw(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint8_t *videoram = m_videoram.get();
- //printf("%d %d (%d %d) - %04x %04x %04x|%04x %04x\n",cliprect.min_y,cliprect.max_y,m_screen->vpos(),m_gpu_intc->get_posirq_line(),m_winrun_gpu_register[0],m_winrun_gpu_register[2/2],m_winrun_gpu_register[4/2],m_winrun_gpu_register[0xa/2],m_winrun_gpu_register[0xc/2]);
+ //printf("%d %d (%d %d) - %04x %04x %04x|%04x %04x\n",cliprect.top(),cliprect.bottom(),m_screen->vpos(),m_gpu_intc->get_posirq_line(),m_winrun_gpu_register[0],m_winrun_gpu_register[2/2],m_winrun_gpu_register[4/2],m_winrun_gpu_register[0xa/2],m_winrun_gpu_register[0xc/2]);
- int yscroll = -cliprect.min_y+(int16_t)m_winrun_gpu_register[0x2/2];
+ int yscroll = -cliprect.top()+(int16_t)m_winrun_gpu_register[0x2/2];
int xscroll = 0;//m_winrun_gpu_register[0xc/2] >> 7;
int base = 0x1000+0x100*(m_winrun_color&0xf);
int sx,sy;
- for( sy=cliprect.min_y; sy<=cliprect.max_y; sy++ )
+ for( sy=cliprect.top(); sy<=cliprect.bottom(); sy++ )
{
const uint8_t *pSource = &videoram[((yscroll+sy)&0x3ff)*0x200];
uint16_t *pDest = &bitmap.pix16(sy);
- for( sx=cliprect.min_x; sx<=cliprect.max_x; sx++ )
+ for( sx=cliprect.left(); sx<=cliprect.right(); sx++ )
{
int pen = pSource[(sx+xscroll) & 0x1ff];
switch( pen )
diff --git a/src/mame/video/namcos22.cpp b/src/mame/video/namcos22.cpp
index 19cabcc08bd..f5765af21d6 100644
--- a/src/mame/video/namcos22.cpp
+++ b/src/mame/video/namcos22.cpp
@@ -307,11 +307,11 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit
int cy = 240 + node->data.quad.vy;
m_clipx = cx;
m_clipy = cy;
- m_cliprect.set(cx + node->data.quad.vw, cx - node->data.quad.vw, cy + node->data.quad.vh, cy - node->data.quad.vh);
- if (m_cliprect.min_x < 0) m_cliprect.min_x = 0;
- if (m_cliprect.max_x > 639) m_cliprect.max_x = 639;
- if (m_cliprect.min_y < 0) m_cliprect.min_y = 0;
- if (m_cliprect.max_y > 479) m_cliprect.max_y = 479;
+ m_cliprect.set(
+ std::max<s32>(cx + node->data.quad.vw, 0),
+ std::min<s32>(cx - node->data.quad.vw, 639),
+ std::max<s32>(cy + node->data.quad.vh, 0),
+ std::min<s32>(cy - node->data.quad.vh, 479));
// non-direct case: project and z-clip
if (!direct)
@@ -583,11 +583,11 @@ void namcos22_renderer::poly3d_drawsprite(
void namcos22_renderer::render_sprite(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node)
{
// scene clip
- m_cliprect.set(node->data.sprite.cx_min, node->data.sprite.cx_max, node->data.sprite.cy_min, node->data.sprite.cy_max);
- if (m_cliprect.min_x < 0) m_cliprect.min_x = 0;
- if (m_cliprect.max_x > 639) m_cliprect.max_x = 639;
- if (m_cliprect.min_y < 0) m_cliprect.min_y = 0;
- if (m_cliprect.max_y > 479) m_cliprect.max_y = 479;
+ m_cliprect.set(
+ std::max<s32>(node->data.sprite.cx_min, 0),
+ std::min<s32>(node->data.sprite.cx_max, 639),
+ std::max<s32>(node->data.sprite.cy_min, 0),
+ std::min<s32>(node->data.sprite.cy_max, 479));
int offset = 0;
@@ -602,20 +602,19 @@ void namcos22_renderer::render_sprite(screen_device &screen, bitmap_rgb32 &bitma
code += nthword(&m_state.m_spriteram[0x800/4], offset + node->data.sprite.linktype*4);
poly3d_drawsprite(
- screen,
- bitmap,
- code,
- node->data.sprite.color,
- node->data.sprite.flipx,
- node->data.sprite.flipy,
- node->data.sprite.xpos + col * node->data.sprite.sizex,
- node->data.sprite.ypos + row * node->data.sprite.sizey,
- (node->data.sprite.sizex << 16) / 32,
- (node->data.sprite.sizey << 16) / 32,
- node->data.sprite.cz,
- node->data.sprite.pri,
- 0xff - node->data.sprite.translucency
- );
+ screen,
+ bitmap,
+ code,
+ node->data.sprite.color,
+ node->data.sprite.flipx,
+ node->data.sprite.flipy,
+ node->data.sprite.xpos + col * node->data.sprite.sizex,
+ node->data.sprite.ypos + row * node->data.sprite.sizey,
+ (node->data.sprite.sizex << 16) / 32,
+ (node->data.sprite.sizey << 16) / 32,
+ node->data.sprite.cz,
+ node->data.sprite.pri,
+ 0xff - node->data.sprite.translucency);
offset++;
}
}
@@ -1895,12 +1894,12 @@ void namcos22_state::namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb3
rgbaint_t fade_color(0, m_screen_fade_r, m_screen_fade_g, m_screen_fade_b);
// mix textlayer with poly/sprites
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
src = &m_mix_bitmap->pix16(y);
dest = &bitmap.pix32(y);
pri = &screen.priority().pix8(y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
// skip if transparent or under poly/sprite
if (pri[x] == prival)
@@ -1970,12 +1969,12 @@ void namcos22_state::namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32
};
// mix textlayer with poly/sprites
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
src = &m_mix_bitmap->pix16(y);
dest = &bitmap.pix32(y);
pri = &screen.priority().pix8(y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint32_t pixel = dest[x];
@@ -2314,10 +2313,10 @@ uint32_t namcos22_state::screen_update_namcos22s(screen_device &screen, bitmap_r
const uint8_t *rlut = (const uint8_t *)&m_mixer[0x100/4];
const uint8_t *glut = (const uint8_t *)&m_mixer[0x200/4];
const uint8_t *blut = (const uint8_t *)&m_mixer[0x300/4];
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint32_t *dest = &bitmap.pix32(y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
int rgb = dest[x];
int r = rlut[NATIVE_ENDIAN_VALUE_LE_BE(3, 0) ^ ((rgb >> 16) & 0xff)];
diff --git a/src/mame/video/offtwall.cpp b/src/mame/video/offtwall.cpp
index 1bdd845059f..d7217b32847 100644
--- a/src/mame/video/offtwall.cpp
+++ b/src/mame/video/offtwall.cpp
@@ -87,11 +87,11 @@ uint32_t offtwall_state::screen_update_offtwall(screen_device &screen, bitmap_in
// draw and merge the MO
bitmap_ind16 &mobitmap = m_vad->mob().bitmap();
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* not yet verified
diff --git a/src/mame/video/quasar.cpp b/src/mame/video/quasar.cpp
index 8f94b3b89e0..8450ffe354f 100644
--- a/src/mame/video/quasar.cpp
+++ b/src/mame/video/quasar.cpp
@@ -170,11 +170,11 @@ uint32_t quasar_state::screen_update_quasar(screen_device &screen, bitmap_ind16
{
int y;
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (y = cliprect.top(); y <= cliprect.bottom(); y++)
{
int x;
- for (x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (x = cliprect.left(); x <= cliprect.right(); x++)
{
int pixel0 = s2636_0_bitmap.pix16(y, x);
int pixel1 = s2636_1_bitmap.pix16(y, x);
diff --git a/src/mame/video/rampart.cpp b/src/mame/video/rampart.cpp
index d4ea5e1a2d0..4798bb4d8c8 100644
--- a/src/mame/video/rampart.cpp
+++ b/src/mame/video/rampart.cpp
@@ -76,11 +76,11 @@ uint32_t rampart_state::screen_update_rampart(screen_device &screen, bitmap_ind1
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* the PCB supports more complex priorities, but the PAL is not stuffed, so we get the default */
@@ -101,13 +101,13 @@ uint32_t rampart_state::screen_update_rampart(screen_device &screen, bitmap_ind1
void rampart_state::rampart_bitmap_render(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* update any dirty scanlines */
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
const uint16_t *src = &m_bitmap[256 * y];
uint16_t *dst = &bitmap.pix16(y);
/* regenerate the line */
- for (int x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)
+ for (int x = cliprect.left() & ~1; x <= cliprect.right(); x += 2)
{
int bits = src[(x - 8) / 2];
dst[x + 0] = bits >> 8;
diff --git a/src/mame/video/realbrk.cpp b/src/mame/video/realbrk.cpp
index 0b419694fd6..02b1118f122 100644
--- a/src/mame/video/realbrk.cpp
+++ b/src/mame/video/realbrk.cpp
@@ -184,81 +184,74 @@ void realbrk_state::video_start()
***************************************************************************/
-void realbrk_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer)
+// DaiDaiKakumei
+// layer : 0== bghigh<spr 1== bglow<spr<bghigh 2==spr<bglow 3==boarder
+template <bool Rotatable>
+void realbrk_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer)
{
- int offs;
+ int const max_x(m_screen->width());
+ int const max_y(m_screen->height());
- int max_x = m_screen->width();
- int max_y = m_screen->height();
-
- rectangle spritetile_clip(0, 31, 0, 31);
-
- for ( offs = 0x3000/2; offs < 0x3600/2; offs += 2/2 )
+ for (int offs = 0x3000 / 2; offs < 0x3600 / 2; offs += 2 / 2)
{
- int sx, sy, dim, zoom, flip, color, attr, code, flipx, flipy, gfx, rot, pri;
+ if (BIT(m_spriteram[offs], 15))
+ continue;
- int x, xdim, xnum, xstart, xend, xinc;
- int y, ydim, ynum, ystart, yend, yinc;
+ uint16_t const *const s(&m_spriteram[(m_spriteram[offs] & 0x3ff) * 16 / 2]);
- if (m_spriteram[offs] & 0x8000)
- continue;
+ int sy = s[0];
- uint16_t const *const s = &m_spriteram[(m_spriteram[offs] & 0x3ff) * 16/2];
+ int sx = s[1];
- sy = s[ 0 ];
- sx = s[ 1 ];
- dim = s[ 2 ];
- zoom = s[ 3 ];
- flip = s[ 4 ];
- color = s[ 5 ];
- attr = s[ 6 ];
- code = s[ 7 ];
+ int xnum = ((s[2] >> 0) & 0x001f) + 1;
+ int ynum = ((s[2] >> 8) & 0x001f) + 1;
- pri = flip & 0x03;
+ int xdim = ((s[3] >> 0) & 0x00ff) << (16 - 6 + 4);
+ int ydim = ((s[3] >> 8) & 0x00ff) << (16 - 6 + 4);
- if(pri != layer)
- continue;
+ int flipx = BIT(s[4], 8);
+ int flipy = BIT(s[4], 9);
+ int rot = (s[4] >> 4) & 0x0003;
+ int pri = (s[4] >> 0) & 0x0003;
+
+ int color = s[5];
- xnum = ((dim >> 0) & 0x1f) + 1;
- ynum = ((dim >> 8) & 0x1f) + 1;
+ int gfx = (s[6] & 0x0001) + 2;
- flipx = flip & 0x0100;
- flipy = flip & 0x0200;
- rot = (flip & 0x0030) >> 4;
+ int code = s[7];
- gfx = (attr & 0x0001) + 2;
+ if (pri != layer)
+ continue;
sx = ((sx & 0x1ff) - (sx & 0x200)) << 16;
sy = ((sy & 0x0ff) - (sy & 0x100)) << 16;
- xdim = ((zoom & 0x00ff) >> 0) << (16-6+4);
- ydim = ((zoom & 0xff00) >> 8) << (16-6+4);
-
- if (flip_screen_x()) { flipx = !flipx; sx = (max_x << 16) - sx - xnum * xdim; }
- if (flip_screen_y()) { flipy = !flipy; sy = (max_y << 16) - sy - ynum * ydim; }
+ if (flip_screen_x()) { flipx = !flipx; sx = (max_x << 16) - sx - xnum * xdim; }
+ if (flip_screen_y()) { flipy = !flipy; sy = (max_y << 16) - sy - ynum * ydim; }
+ int xstart, xend, xinc;
if (flipx) { xstart = xnum-1; xend = -1; xinc = -1; }
else { xstart = 0; xend = xnum; xinc = +1; }
+ int ystart, yend, yinc;
if (flipy) { ystart = ynum-1; yend = -1; yinc = -1; }
else { ystart = 0; yend = ynum; yinc = +1; }
-
- // The positioning of the rotated sprites makes it look as if
- // the sprite source is scanned in a constant pattern left to right,
- // top to bottom, and the destination plotting pattern is varied.
- // copyrozbitmap works the other way.
-
- // Rotating a sprite when drawgfxzoom draws a tile at a time means
- // - rotating each sprite tile
- // - transforming each tile position
- // - compensating for the offset introduced by the difference in
- // scanning patterns between the original mechanism and copyrozbitmap
-
-
- for (y = ystart; y != yend; y += yinc)
+ /*
+ The positioning of the rotated sprites makes it look as if
+ the sprite source is scanned in a constant pattern left to right,
+ top to bottom, and the destination plotting pattern is varied.
+ copyrozbitmap works the other way.
+
+ Rotating a sprite when drawgfxzoom draws a tile at a time means
+ - rotating each sprite tile
+ - transforming each tile position
+ - compensating for the offset introduced by the difference in
+ scanning patterns between the original mechanism and copyrozbitmap
+ */
+ for (int y = ystart; y != yend; y += yinc)
{
- for (x = xstart; x != xend; x += xinc)
+ for (int x = xstart; x != xend; x += xinc)
{
int currx = (sx + x * xdim) / 0x10000;
int curry = (sy + y * ydim) / 0x10000;
@@ -266,159 +259,79 @@ void realbrk_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,
int scalex = (sx + (x + 1) * xdim) / 0x10000 - currx;
int scaley = (sy + (y + 1) * ydim) / 0x10000 - curry;
- // buffer the tile and rotate it into bitmap
- if( rot )
+ if (Rotatable && rot)
{
- m_tmpbitmap0->fill(0, spritetile_clip );
- m_tmpbitmap1->fill(0, spritetile_clip );
- m_gfxdecode->gfx(gfx)->zoom_transpen(*m_tmpbitmap0,spritetile_clip,
- code++,
- color,
- flipx, flipy,
- 0,0,
- (rot & 1 ? scaley : scalex) << 12, (rot & 1 ? scalex : scaley) << 12,0);
+ // buffer the tile and rotate it into bitmap
+ constexpr rectangle spritetile_clip(0, 31, 0, 31);
+ m_tmpbitmap0->fill(0, spritetile_clip);
+ m_tmpbitmap1->fill(0, spritetile_clip);
+ m_gfxdecode->gfx(gfx)->zoom_transpen(*m_tmpbitmap0, spritetile_clip,
+ code++,
+ color,
+ flipx, flipy,
+ 0, 0,
+ ((rot & 1) ? scaley : scalex) << 12, ((rot & 1) ? scalex : scaley) << 12,
+ 0);
// peek at the unrotated sprite
- // copybitmap_trans( bitmap,*m_tmpbitmap0, 0,0, 50+(x * xdim/0x10000),50+(y * ydim/0x10000), cliprect, 0 );
- }
-
- switch( rot )
- {
+ // copybitmap_trans(bitmap, *m_tmpbitmap0, 0,0, 50 + (x * xdim / 0x10000), 50 + (y * ydim/0x10000), cliprect, 0);
+ switch (rot)
+ {
case 0x1: // rot 90
- copyrozbitmap_trans( *m_tmpbitmap1, m_tmpbitmap1->cliprect(), *m_tmpbitmap0,
- (uint32_t)0<<16,
- (uint32_t)16<<16,
- 0 << 16,
- 0xffff << 16,
- 1 << 16,
- 0 << 16,
- 0, 0 );
-
- currx = (sx - (y+1) * ydim) / 0x10000;
- curry = (sy + x * xdim) / 0x10000;
-
- copybitmap_trans( bitmap,*m_tmpbitmap1, 0,0, currx,curry, cliprect, 0 );
+ copyrozbitmap_trans(*m_tmpbitmap1, m_tmpbitmap1->cliprect(), *m_tmpbitmap0,
+ uint32_t(0) << 16,
+ uint32_t(16) << 16,
+ 0 << 16,
+ 0xffff << 16,
+ 1 << 16,
+ 0 << 16,
+ 0, 0);
+
+ currx = (sx - (y + 1) * ydim) / 0x10000;
+ curry = (sy + x * xdim) / 0x10000;
break;
case 0x2: // rot 180
- copyrozbitmap_trans( *m_tmpbitmap1, m_tmpbitmap1->cliprect(), *m_tmpbitmap0,
- (uint32_t)16<<16,
- (uint32_t)16<<16,
- 0xffff << 16,
- 0 << 16,
- 0 << 16,
- 0xffff << 16,
- 0, 0 );
-
- currx = (sx - (x+1) * xdim) / 0x10000;
- curry = (sy - (y+1) * ydim) / 0x10000;
-
- copybitmap_trans( bitmap,*m_tmpbitmap1, 0,0, currx,curry, cliprect, 0 );
+ copyrozbitmap_trans(*m_tmpbitmap1, m_tmpbitmap1->cliprect(), *m_tmpbitmap0,
+ uint32_t(16) << 16,
+ uint32_t(16) << 16,
+ 0xffff << 16,
+ 0 << 16,
+ 0 << 16,
+ 0xffff << 16,
+ 0, 0);
+
+ currx = (sx - (x + 1) * xdim) / 0x10000;
+ curry = (sy - (y + 1) * ydim) / 0x10000;
break;
case 0x3: // rot 270
- copyrozbitmap_trans( *m_tmpbitmap1, m_tmpbitmap1->cliprect(), *m_tmpbitmap0,
- (uint32_t)16<<16,
- (uint32_t)0<<16,
- 0 << 16,
- 1 << 16,
- 0xffff << 16,
- 0 << 16,
- 0, 0 );
-
- currx = (sx + y * ydim) / 0x10000;
- curry = (sy - (x+1) * xdim) / 0x10000;
-
- copybitmap_trans( bitmap,*m_tmpbitmap1, 0,0, currx,curry, cliprect, 0 );
+ copyrozbitmap_trans(*m_tmpbitmap1, m_tmpbitmap1->cliprect(), *m_tmpbitmap0,
+ uint32_t(16) << 16,
+ uint32_t(0) << 16,
+ 0 << 16,
+ 1 << 16,
+ 0xffff << 16,
+ 0 << 16,
+ 0, 0);
+
+ currx = (sx + y * ydim) / 0x10000;
+ curry = (sy - (x + 1) * xdim) / 0x10000;
break;
+ }
- default:
- m_gfxdecode->gfx(gfx)->zoom_transpen(bitmap,cliprect,
- code++,
- color,
- flipx, flipy,
- currx, curry,
- scalex << 12, scaley << 12,0);
- break;
+ copybitmap_trans(bitmap, *m_tmpbitmap1, 0, 0, currx, curry, cliprect, 0);
+ }
+ else
+ {
+ m_gfxdecode->gfx(gfx)->zoom_transpen(bitmap, cliprect,
+ code++,
+ color,
+ flipx, flipy,
+ currx, curry,
+ scalex << 12, scaley << 12,
+ 0);
}
-
- }
- }
- }
-}
-
-/* DaiDaiKakumei */
-/* layer : 0== bghigh<spr 1== bglow<spr<bghigh 2==spr<bglow 3==boarder */
-void realbrk_state::dai2kaku_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int layer)
-{
- int offs;
-
- int max_x = m_screen->width();
- int max_y = m_screen->height();
-
- for ( offs = 0x3000/2; offs < 0x3600/2; offs += 2/2 )
- {
- int sx, sy, dim, zoom, flip, color, attr, code, flipx, flipy, gfx;
-
- int x, xdim, xnum, xstart, xend, xinc;
- int y, ydim, ynum, ystart, yend, yinc;
-
- uint16_t *s;
-
- if (m_spriteram[offs] & 0x8000) continue;
-
- s = &m_spriteram[(m_spriteram[offs] & 0x3ff) * 16/2];
-
- sy = s[ 0 ];
- sx = s[ 1 ];
- dim = s[ 2 ];
- zoom = s[ 3 ];
- flip = s[ 4 ];
- color = s[ 5 ];
- attr = s[ 6 ];
- code = s[ 7 ];
-
- if(( flip & 0x03 ) != layer ) continue;
-
- xnum = ((dim >> 0) & 0x1f) + 1;
- ynum = ((dim >> 8) & 0x1f) + 1;
-
- flipx = flip & 0x0100;
- flipy = flip & 0x0200;
-
- gfx = (attr & 0x0001) + 2;
-
- sx = ((sx & 0x1ff) - (sx & 0x200)) << 16;
- sy = ((sy & 0x0ff) - (sy & 0x100)) << 16;
-
- xdim = ((zoom & 0x00ff) >> 0) << (16-6+4);
- ydim = ((zoom & 0xff00) >> 8) << (16-6+4);
-
- if (flip_screen_x()) { flipx = !flipx; sx = (max_x << 16) - sx - xnum * xdim; }
- if (flip_screen_y()) { flipy = !flipy; sy = (max_y << 16) - sy - ynum * ydim; }
-
- if (flipx) { xstart = xnum-1; xend = -1; xinc = -1; }
- else { xstart = 0; xend = xnum; xinc = +1; }
-
- if (flipy) { ystart = ynum-1; yend = -1; yinc = -1; }
- else { ystart = 0; yend = ynum; yinc = +1; }
-
- for (y = ystart; y != yend; y += yinc)
- {
- for (x = xstart; x != xend; x += xinc)
- {
- int currx = (sx + x * xdim) / 0x10000;
- int curry = (sy + y * ydim) / 0x10000;
-
- int scalex = (sx + (x + 1) * xdim) / 0x10000 - currx;
- int scaley = (sy + (y + 1) * ydim) / 0x10000 - curry;
-
- m_gfxdecode->gfx(gfx)->zoom_transpen(bitmap,cliprect,
- code++,
- color,
- flipx, flipy,
- currx, curry,
- scalex << 12, scaley << 12,0);
}
}
}
@@ -465,46 +378,46 @@ WRITE16_MEMBER(realbrk_state::vregs_w)
uint32_t realbrk_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int layers_ctrl = -1;
-
m_tilemap[0]->set_scrolly(0, m_vregs[0x0/2]);
m_tilemap[0]->set_scrollx(0, m_vregs[0x2/2]);
m_tilemap[1]->set_scrolly(0, m_vregs[0x4/2]);
m_tilemap[1]->set_scrollx(0, m_vregs[0x6/2]);
-#ifdef MAME_DEBUG
-if ( machine().input().code_pressed(KEYCODE_Z) )
-{
- int msk = 0;
- if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1;
- if (machine().input().code_pressed(KEYCODE_W)) msk |= 2;
- if (machine().input().code_pressed(KEYCODE_E)) msk |= 4;
- if (machine().input().code_pressed(KEYCODE_A)) msk |= 8;
- if (msk != 0) layers_ctrl &= msk;
-}
-#endif
-
if (m_disable_video)
{
bitmap.fill(m_palette->black_pen(), cliprect);
return 0;
}
- else
- bitmap.fill(m_vregs[0xc/2] & 0x7fff, cliprect);
- if (layers_ctrl & 8) draw_sprites(bitmap,cliprect,3); // Unknown
- if (layers_ctrl & 8) draw_sprites(bitmap,cliprect,2); // Under m_tilemap[1], Under m_tilemap[0]
+ bitmap.fill(m_vregs[0xc / 2] & 0x7fff, cliprect);
+ screen.priority().fill(0, cliprect);
+
+ int layers_ctrl(-1);
+#ifdef MAME_DEBUG
+ if (machine().input().code_pressed(KEYCODE_Z))
+ {
+ int msk(0);
+ if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1;
+ if (machine().input().code_pressed(KEYCODE_W)) msk |= 2;
+ if (machine().input().code_pressed(KEYCODE_E)) msk |= 4;
+ if (machine().input().code_pressed(KEYCODE_A)) msk |= 8;
+ if (msk) layers_ctrl &= msk;
+ }
+#endif
+
+ if (layers_ctrl & 8) draw_sprites<true>(bitmap, cliprect, 3); // Unknown
+ if (layers_ctrl & 8) draw_sprites<true>(bitmap, cliprect, 2); // Under m_tilemap[1], Under m_tilemap[0]
- if (layers_ctrl & 2) m_tilemap[1]->draw(screen, bitmap, cliprect, 0,0);
+ if (layers_ctrl & 2) m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 1);
- if (layers_ctrl & 8) draw_sprites(bitmap,cliprect,1); // Over m_tilemap[1], Under m_tilemap[0]
+ if (layers_ctrl & 8) draw_sprites<true>(bitmap,cliprect, 1); // Over m_tilemap[1], Under m_tilemap[0]
- if (layers_ctrl & 1) m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
+ if (layers_ctrl & 1) m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 2);
- if (layers_ctrl & 8) draw_sprites(bitmap,cliprect,0); // Over m_tilemap[1], Over m_tilemap[0]
+ if (layers_ctrl & 8) draw_sprites<true>(bitmap,cliprect, 0); // Over m_tilemap[1], Over m_tilemap[0]
- if (layers_ctrl & 4) m_tilemap[2]->draw(screen, bitmap, cliprect, 0,0);
+ if (layers_ctrl & 4) m_tilemap[2]->draw(screen, bitmap, cliprect, 0, 4);
// popmessage("%04x",m_vregs[0x8/2]);
return 0;
@@ -513,85 +426,79 @@ if ( machine().input().code_pressed(KEYCODE_Z) )
/* DaiDaiKakumei */
uint32_t realbrk_state::screen_update_dai2kaku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int layers_ctrl = -1;
- int offs;
-
- int const bgy0 = m_vregs[0x0/2];
- int const bgx0 = m_vregs[0x2/2];
- int const bgy1 = m_vregs[0x4/2];
- int const bgx1 = m_vregs[0x6/2];
-
// bg0
- if( m_vregs[8/2] & (0x0100)){
+ int const bgy0(m_vregs[0x0 / 2]);
+ int const bgx0(m_vregs[0x2 / 2]);
+ if (BIT(m_vregs[8 / 2], 8))
+ {
m_tilemap[0]->set_scroll_rows(512);
- for(offs=0; offs<(512); offs++) {
- m_tilemap[0]->set_scrollx(offs, bgx0 - (m_vram_ras[1][offs]&0x3ff) );
- }
- } else {
+ for (int offs = 0; offs < 512; offs++)
+ m_tilemap[0]->set_scrollx(offs, bgx0 - (m_vram_ras[1][offs] & 0x3ff));
+ }
+ else
+ {
m_tilemap[0]->set_scroll_rows(1);
- m_tilemap[0]->set_scrollx(0, bgx0 );
+ m_tilemap[0]->set_scrollx(0, bgx0);
}
- m_tilemap[0]->set_scrolly(0, bgy0 );
+ m_tilemap[0]->set_scrolly(0, bgy0);
// bg1
- if( m_vregs[8/2] & (0x0001)){
+ int const bgy1(m_vregs[0x4 / 2]);
+ int const bgx1(m_vregs[0x6 / 2]);
+ if (BIT(m_vregs[8 / 2], 0))
+ {
m_tilemap[1]->set_scroll_rows(512);
- for(offs=0; offs<(512); offs++) {
- m_tilemap[1]->set_scrollx(offs, bgx1 - (m_vram_ras[1][offs]&0x3ff) );
- }
- } else {
+ for (int offs = 0; offs < 512; offs++)
+ m_tilemap[1]->set_scrollx(offs, bgx1 - (m_vram_ras[1][offs] & 0x3ff));
+ }
+ else
+ {
m_tilemap[1]->set_scroll_rows(1);
- m_tilemap[1]->set_scrollx(0, bgx1 );
+ m_tilemap[1]->set_scrollx(0, bgx1);
}
- m_tilemap[1]->set_scrolly(0, bgy1 );
-
-#ifdef MAME_DEBUG
-if ( machine().input().code_pressed(KEYCODE_Z) )
-{
- int msk = 0;
- if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1;
- if (machine().input().code_pressed(KEYCODE_W)) msk |= 2;
- if (machine().input().code_pressed(KEYCODE_E)) msk |= 4;
- if (machine().input().code_pressed(KEYCODE_A)) msk |= 8;
- if (msk != 0) layers_ctrl &= msk;
-}
-#endif
+ m_tilemap[1]->set_scrolly(0, bgy1);
if (m_disable_video)
{
bitmap.fill(m_palette->black_pen(), cliprect);
return 0;
}
- else
- bitmap.fill(m_vregs[0xc/2] & 0x7fff, cliprect);
+ bitmap.fill(m_vregs[0xc/2] & 0x7fff, cliprect);
+ screen.priority().fill(0, cliprect);
+
+ int layers_ctrl(-1);
+#ifdef MAME_DEBUG
+ if (machine().input().code_pressed(KEYCODE_Z))
+ {
+ int msk(0);
+ if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1;
+ if (machine().input().code_pressed(KEYCODE_W)) msk |= 2;
+ if (machine().input().code_pressed(KEYCODE_E)) msk |= 4;
+ if (machine().input().code_pressed(KEYCODE_A)) msk |= 8;
+ if (msk) layers_ctrl &= msk;
+ }
+#endif
+ bool const bgpri(BIT(m_vregs[8 / 2], 15));
// spr 0
- if (layers_ctrl & 8) dai2kaku_draw_sprites(bitmap,cliprect,2);
+ if (layers_ctrl & 8) draw_sprites<false>(bitmap, cliprect, 2);
// bglow
- if( m_vregs[8/2] & (0x8000)){
- if (layers_ctrl & 1) m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
- } else {
- if (layers_ctrl & 2) m_tilemap[1]->draw(screen, bitmap, cliprect, 0,0);
- }
+ if (layers_ctrl & (bgpri ? 1 : 2)) m_tilemap[bgpri ? 0 : 1]->draw(screen, bitmap, cliprect, 0, 1);
// spr 1
- if (layers_ctrl & 8) dai2kaku_draw_sprites(bitmap,cliprect,1);
+ if (layers_ctrl & 8) draw_sprites<false>(bitmap, cliprect, 1);
// bghigh
- if( m_vregs[8/2] & (0x8000)){
- if (layers_ctrl & 2) m_tilemap[1]->draw(screen, bitmap, cliprect, 0,0);
- } else {
- if (layers_ctrl & 1) m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
- }
+ if (layers_ctrl & (bgpri ? 2 : 1)) m_tilemap[bgpri ? 1 : 0]->draw(screen, bitmap, cliprect, 0, 2);
// spr 2
- if (layers_ctrl & 8) dai2kaku_draw_sprites(bitmap,cliprect,0);
+ if (layers_ctrl & 8) draw_sprites<false>(bitmap, cliprect, 0);
// fix
- if (layers_ctrl & 4) m_tilemap[2]->draw(screen, bitmap, cliprect, 0,0);
+ if (layers_ctrl & 4) m_tilemap[2]->draw(screen, bitmap, cliprect, 0, 4);
// usrintf_showmessage("%04x",m_vregs[0x8/2]);
return 0;
diff --git a/src/mame/video/relief.cpp b/src/mame/video/relief.cpp
index e5d64c94d22..26b344682ef 100644
--- a/src/mame/video/relief.cpp
+++ b/src/mame/video/relief.cpp
@@ -107,12 +107,12 @@ uint32_t relief_state::screen_update_relief(screen_device &screen, bitmap_ind16
// draw and merge the MO
bitmap_ind16 &mobitmap = m_vad->mob().bitmap();
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
uint8_t *pri = &priority_bitmap.pix8(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified from the GALs on the real PCB; equations follow
diff --git a/src/mame/video/rohga.cpp b/src/mame/video/rohga.cpp
index e1e6da0e055..73833d5dc9a 100644
--- a/src/mame/video/rohga.cpp
+++ b/src/mame/video/rohga.cpp
@@ -95,12 +95,12 @@ void rohga_state::mixwizdfirelayer(bitmap_rgb32 &bitmap, const rectangle &clipre
uint32_t* dstline;
- for (y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for (y=cliprect.top();y<=cliprect.bottom();y++)
{
srcline=&sprite_bitmap->pix16(y,0);
dstline=&bitmap.pix32(y,0);
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix = srcline[x];
@@ -183,7 +183,7 @@ void rohga_state::mixnitroballlayer(screen_device &screen, bitmap_rgb32 &bitmap,
uint16_t *srcline1, *srcline2;
uint8_t *srcpriline;
- for (y=cliprect.min_y;y<=cliprect.max_y;y++)
+ for (y=cliprect.top();y<=cliprect.bottom();y++)
{
srcline1=&sprite_bitmap1->pix16(y,0);
srcline2=&sprite_bitmap2->pix16(y,0);
@@ -191,7 +191,7 @@ void rohga_state::mixnitroballlayer(screen_device &screen, bitmap_rgb32 &bitmap,
dstline=&bitmap.pix32(y,0);
- for (x=cliprect.min_x;x<=cliprect.max_x;x++)
+ for (x=cliprect.left();x<=cliprect.right();x++)
{
uint16_t pix1 = srcline1[x];
uint16_t pix2 = srcline2[x];
diff --git a/src/mame/video/shuuz.cpp b/src/mame/video/shuuz.cpp
index eb0aa7089cf..af83bede0e0 100644
--- a/src/mame/video/shuuz.cpp
+++ b/src/mame/video/shuuz.cpp
@@ -86,11 +86,11 @@ uint32_t shuuz_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
// draw and merge the MO
bitmap_ind16 &mobitmap = m_vad->mob().bitmap();
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified from the GALs on the real PCB; equations follow
diff --git a/src/mame/video/skullxbo.cpp b/src/mame/video/skullxbo.cpp
index 8ebc443e31a..dd0507fa1a1 100644
--- a/src/mame/video/skullxbo.cpp
+++ b/src/mame/video/skullxbo.cpp
@@ -120,7 +120,7 @@ WRITE16_MEMBER( skullxbo_state::skullxbo_yscroll_w )
m_screen->update_partial(scanline);
/* adjust the effective scroll for the current scanline */
- if (scanline > m_screen->visible_area().max_y)
+ if (scanline > m_screen->visible_area().bottom())
scanline = 0;
effscroll = (newscroll >> 7) - scanline;
@@ -241,11 +241,11 @@ uint32_t skullxbo_state::screen_update_skullxbo(screen_device &screen, bitmap_in
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified from the GALs on the real PCB; equations follow
diff --git a/src/mame/video/sprint2.cpp b/src/mame/video/sprint2.cpp
index 537f8d9dea3..ac826694ae7 100644
--- a/src/mame/video/sprint2.cpp
+++ b/src/mame/video/sprint2.cpp
@@ -83,8 +83,8 @@ uint8_t sprint2_state::collision_check(rectangle& rect)
int x;
int y;
- for (y = rect.min_y; y <= rect.max_y; y++)
- for (x = rect.min_x; x <= rect.max_x; x++)
+ for (y = rect.top(); y <= rect.bottom(); y++)
+ for (x = rect.left(); x <= rect.right(); x++)
{
uint16_t a = m_palette->pen_indirect(m_helper.pix16(y, x));
@@ -155,13 +155,11 @@ WRITE_LINE_MEMBER(sprint2_state::screen_vblank_sprint2)
for (i = 0; i < 2; i++)
{
- rectangle rect;
-
- rect.min_x = get_sprite_x(video_ram, i);
- rect.min_y = get_sprite_y(video_ram, i);
- rect.max_x = get_sprite_x(video_ram, i) + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = get_sprite_y(video_ram, i) + m_gfxdecode->gfx(1)->height() - 1;
-
+ rectangle rect(
+ get_sprite_x(video_ram, i),
+ get_sprite_x(video_ram, i) + m_gfxdecode->gfx(1)->width() - 1,
+ get_sprite_y(video_ram, i),
+ get_sprite_y(video_ram, i) + m_gfxdecode->gfx(1)->height() - 1);
rect &= visarea;
/* check for sprite-tilemap collisions */
diff --git a/src/mame/video/sprint4.cpp b/src/mame/video/sprint4.cpp
index 9df60a4710f..0c7429ef3c8 100644
--- a/src/mame/video/sprint4.cpp
+++ b/src/mame/video/sprint4.cpp
@@ -90,19 +90,17 @@ WRITE_LINE_MEMBER(sprint4_state::screen_vblank)
for (int i = 0; i < 4; i++)
{
- rectangle rect;
-
int bank = 0;
uint8_t horz = m_videoram[0x390 + 2 * i + 0];
uint8_t vert = m_videoram[0x398 + 2 * i + 0];
uint8_t code = m_videoram[0x398 + 2 * i + 1];
- rect.min_x = horz - 15;
- rect.min_y = vert - 15;
- rect.max_x = horz - 15 + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = vert - 15 + m_gfxdecode->gfx(1)->height() - 1;
-
+ rectangle rect(
+ horz - 15,
+ horz - 15 + m_gfxdecode->gfx(1)->width() - 1,
+ vert - 15,
+ vert - 15 + m_gfxdecode->gfx(1)->height() - 1);
rect &= m_screen->visible_area();
m_playfield->draw(*m_screen, m_helper, rect, 0, 0);
@@ -117,8 +115,8 @@ WRITE_LINE_MEMBER(sprint4_state::screen_vblank)
horz - 15,
vert - 15, 1);
- for (int y = rect.min_y; y <= rect.max_y; y++)
- for (int x = rect.min_x; x <= rect.max_x; x++)
+ for (int y = rect.top(); y <= rect.bottom(); y++)
+ for (int x = rect.left(); x <= rect.right(); x++)
if (m_palette->pen_indirect(m_helper.pix16(y, x)) != 0)
m_collision[i] = 1;
}
diff --git a/src/mame/video/sprint8.cpp b/src/mame/video/sprint8.cpp
index 9971b6d627e..a3ce7092c30 100644
--- a/src/mame/video/sprint8.cpp
+++ b/src/mame/video/sprint8.cpp
@@ -170,12 +170,12 @@ WRITE_LINE_MEMBER(sprint8_state::screen_vblank)
draw_sprites(m_helper1, visarea);
- for (int y = visarea.min_y; y <= visarea.max_y; y++)
+ for (int y = visarea.top(); y <= visarea.bottom(); y++)
{
const uint16_t* p1 = &m_helper1.pix16(y);
const uint16_t* p2 = &m_helper2.pix16(y);
- for (int x = visarea.min_x; x <= visarea.max_x; x++)
+ for (int x = visarea.left(); x <= visarea.right(); x++)
if (p1[x] != 0x20 && p2[x] == 0x23)
m_collision_timer->adjust(m_screen->time_until_pos(y + 24, x), m_palette->pen_indirect(p1[x]));
}
diff --git a/src/mame/video/starshp1.cpp b/src/mame/video/starshp1.cpp
index 947d6eb9438..0e63333814b 100644
--- a/src/mame/video/starshp1.cpp
+++ b/src/mame/video/starshp1.cpp
@@ -305,14 +305,11 @@ void starshp1_state::draw_circle(bitmap_ind16 &bitmap)
int starshp1_state::spaceship_collision(bitmap_ind16 &bitmap, const rectangle &rect)
{
- int x;
- int y;
-
- for (y = rect.min_y; y <= rect.max_y; y++)
+ for (int y = rect.top(); y <= rect.bottom(); y++)
{
const uint16_t* pLine = &m_helper.pix16(y);
- for (x = rect.min_x; x <= rect.max_x; x++)
+ for (int x = rect.left(); x <= rect.right(); x++)
if (pLine[x] != 0)
return 1;
}
@@ -337,10 +334,10 @@ int starshp1_state::circle_collision(const rectangle &rect)
int r = get_radius();
- return point_in_circle(rect.min_x, rect.min_y, center_x, center_y, r) ||
- point_in_circle(rect.min_x, rect.max_y, center_x, center_y, r) ||
- point_in_circle(rect.max_x, rect.min_y, center_x, center_y, r) ||
- point_in_circle(rect.max_x, rect.max_y, center_x, center_y, r);
+ return point_in_circle(rect.left(), rect.top(), center_x, center_y, r) ||
+ point_in_circle(rect.left(), rect.bottom(), center_x, center_y, r) ||
+ point_in_circle(rect.right(), rect.top(), center_x, center_y, r) ||
+ point_in_circle(rect.right(), rect.bottom(), center_x, center_y, r);
}
@@ -378,13 +375,10 @@ WRITE_LINE_MEMBER(starshp1_state::screen_vblank_starshp1)
// rising edge
if (state)
{
- rectangle rect;
const rectangle &visarea = m_screen->visible_area();
- rect.min_x = get_sprite_hpos(13);
- rect.min_y = get_sprite_vpos(13);
- rect.max_x = rect.min_x + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = rect.min_y + m_gfxdecode->gfx(1)->height() - 1;
+ rectangle rect(get_sprite_hpos(13), 0, get_sprite_vpos(13), 0);
+ rect.set_size(m_gfxdecode->gfx(1)->width(), m_gfxdecode->gfx(1)->height());
rect &= m_helper.cliprect();
diff --git a/src/mame/video/tank8.cpp b/src/mame/video/tank8.cpp
index d38ca8dbbf4..a1c515cfba2 100644
--- a/src/mame/video/tank8.cpp
+++ b/src/mame/video/tank8.cpp
@@ -210,7 +210,7 @@ WRITE_LINE_MEMBER(tank8_state::screen_vblank)
draw_sprites(m_helper2, visarea);
draw_bullets(m_helper3, visarea);
- for (y = visarea.min_y; y <= visarea.max_y; y++)
+ for (y = visarea.top(); y <= visarea.bottom(); y++)
{
int _state = 0;
@@ -221,7 +221,7 @@ WRITE_LINE_MEMBER(tank8_state::screen_vblank)
if ((m_screen->frame_number() ^ y) & 1)
continue; /* video display is interlaced */
- for (x = visarea.min_x; x <= visarea.max_x; x++)
+ for (x = visarea.left(); x <= visarea.right(); x++)
{
uint8_t index;
diff --git a/src/mame/video/thunderj.cpp b/src/mame/video/thunderj.cpp
index b2a5e3506fc..e51c58d899f 100644
--- a/src/mame/video/thunderj.cpp
+++ b/src/mame/video/thunderj.cpp
@@ -119,12 +119,12 @@ uint32_t thunderj_state::screen_update_thunderj(screen_device &screen, bitmap_in
// draw and merge the MO
bitmap_ind16 &mobitmap = m_vad->mob().bitmap();
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
uint8_t *pri = &priority_bitmap.pix8(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified from the GALs on the real PCB; equations follow
@@ -217,11 +217,11 @@ uint32_t thunderj_state::screen_update_thunderj(screen_device &screen, bitmap_in
/* now go back and process the upper bit of MO priority */
for (const sparse_dirty_rect *rect = m_vad->mob().first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
diff --git a/src/mame/video/toobin.cpp b/src/mame/video/toobin.cpp
index d16fce21cd1..643b6d7f26d 100644
--- a/src/mame/video/toobin.cpp
+++ b/src/mame/video/toobin.cpp
@@ -224,13 +224,13 @@ uint32_t toobin_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap
/* draw and merge the MO */
bitmap_ind16 &mobitmap = m_mob->bitmap();
const pen_t *palette = m_palette->pens();
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint32_t *dest = &bitmap.pix32(y);
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &m_pfbitmap.pix16(y);
uint8_t *pri = &priority_bitmap.pix8(y);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint16_t pix = pf[x];
if (mo[x] != 0xffff)
diff --git a/src/mame/video/triplhnt.cpp b/src/mame/video/triplhnt.cpp
index e1b95963282..0984d3f99de 100644
--- a/src/mame/video/triplhnt.cpp
+++ b/src/mame/video/triplhnt.cpp
@@ -83,7 +83,7 @@ void triplhnt_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
m_gfxdecode->gfx(m_sprite_zoom)->opaque(m_helper,cliprect,
2 * code + m_sprite_bank, 0, code & 8, 0,
- rect.min_x, rect.min_y);
+ rect.left(), rect.top());
rect &= cliprect;
@@ -93,9 +93,9 @@ void triplhnt_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
int x;
int y;
- for (x = rect.min_x; x <= rect.max_x; x++)
+ for (x = rect.left(); x <= rect.right(); x++)
{
- for (y = rect.min_y; y <= rect.max_y; y++)
+ for (y = rect.top(); y <= rect.bottom(); y++)
{
pen_t a = m_helper.pix16(y, x);
pen_t b = bitmap.pix16(y, x);
diff --git a/src/mame/video/tunhunt.cpp b/src/mame/video/tunhunt.cpp
index 5fe83d29341..3f9100cad93 100644
--- a/src/mame/video/tunhunt.cpp
+++ b/src/mame/video/tunhunt.cpp
@@ -291,7 +291,7 @@ void tunhunt_state::draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect)
for( y=0; y<256; y++ )
{
- if (0xff-y >= cliprect.min_y && 0xff-y <= cliprect.max_y)
+ if (0xff-y >= cliprect.top() && 0xff-y <= cliprect.bottom())
for( x=0; x<256; x++ )
{
color = 0;
@@ -308,7 +308,7 @@ void tunhunt_state::draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect)
z = x0; /* give priority to rightmost spans */
}
}
- if (x >= cliprect.min_x && x <= cliprect.max_x)
+ if (x >= cliprect.left() && x <= cliprect.right())
bitmap.pix16(0xff-y, x) = color;
}
}
diff --git a/src/mame/video/ultratnk.cpp b/src/mame/video/ultratnk.cpp
index 797089cd82f..68113aec3c6 100644
--- a/src/mame/video/ultratnk.cpp
+++ b/src/mame/video/ultratnk.cpp
@@ -95,19 +95,17 @@ WRITE_LINE_MEMBER(ultratnk_state::screen_vblank)
for (int i = 0; i < 4; i++)
{
- rectangle rect;
-
int bank = 0;
uint8_t horz = m_videoram[0x390 + 2 * i + 0];
uint8_t vert = m_videoram[0x398 + 2 * i + 0];
uint8_t code = m_videoram[0x398 + 2 * i + 1];
- rect.min_x = horz - 15;
- rect.min_y = vert - 15;
- rect.max_x = horz - 15 + m_gfxdecode->gfx(1)->width() - 1;
- rect.max_y = vert - 15 + m_gfxdecode->gfx(1)->height() - 1;
-
+ rectangle rect(
+ horz - 15,
+ horz - 15 + m_gfxdecode->gfx(1)->width() - 1,
+ vert - 15,
+ vert - 15 + m_gfxdecode->gfx(1)->height() - 1);
rect &= m_screen->visible_area();
m_playfield->draw(*m_screen, m_helper, rect, 0, 0);
@@ -122,8 +120,8 @@ WRITE_LINE_MEMBER(ultratnk_state::screen_vblank)
horz - 15,
vert - 15, 1);
- for (int y = rect.min_y; y <= rect.max_y; y++)
- for (int x = rect.min_x; x <= rect.max_x; x++)
+ for (int y = rect.top(); y <= rect.bottom(); y++)
+ for (int x = rect.left(); x <= rect.right(); x++)
if (m_palette->pen_indirect(m_helper.pix16(y, x)) != BG)
m_collision[i] = 1;
}
diff --git a/src/mame/video/vindictr.cpp b/src/mame/video/vindictr.cpp
index 810700c2e83..0b243780a87 100644
--- a/src/mame/video/vindictr.cpp
+++ b/src/mame/video/vindictr.cpp
@@ -179,8 +179,8 @@ void vindictr_state::scanline_update(screen_device &screen, int scanline)
/* a new vscroll latches the offset into a counter; we must adjust for this */
int offset = scanline;
const rectangle &visible_area = screen.visible_area();
- if (offset > visible_area.max_y)
- offset -= visible_area.max_y + 1;
+ if (offset > visible_area.bottom())
+ offset -= visible_area.bottom() + 1;
if (m_playfield_yscroll != ((data - offset) & 0x1ff))
{
@@ -213,11 +213,11 @@ uint32_t vindictr_state::screen_update_vindictr(screen_device &screen, bitmap_in
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* partially verified via schematics (there are a lot of PALs involved!):
@@ -253,11 +253,11 @@ uint32_t vindictr_state::screen_update_vindictr(screen_device &screen, bitmap_in
/* now go back and process the upper bit of MO priority */
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
int mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT;
diff --git a/src/mame/video/wolfpack.cpp b/src/mame/video/wolfpack.cpp
index 0d35050a597..b00c6d983f6 100644
--- a/src/mame/video/wolfpack.cpp
+++ b/src/mame/video/wolfpack.cpp
@@ -195,14 +195,10 @@ void wolfpack_state::draw_torpedo(bitmap_ind16 &bitmap, const rectangle &cliprec
void wolfpack_state::draw_pt(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- rectangle rect = cliprect;
-
- if (!(m_pt_pic & 0x20))
- rect.min_x = 256;
-
- if (!(m_pt_pic & 0x10))
- rect.max_x = 255;
-
+ rectangle rect(cliprect);
+ rect.setx(
+ (m_pt_pic & 0x20) ? rect.left() : 256,
+ (m_pt_pic & 0x10) ? rect.right() : 255);
m_gfxdecode->gfx(2)->transpen(bitmap,rect,
m_pt_pic,
@@ -223,19 +219,11 @@ void wolfpack_state::draw_pt(bitmap_ind16 &bitmap, const rectangle &cliprect)
void wolfpack_state::draw_water(palette_device &palette, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- rectangle rect = cliprect;
-
- int x;
- int y;
-
- if (rect.max_y > 127)
- rect.max_y = 127;
-
- for (y = rect.min_y; y <= rect.max_y; y++)
+ for (int y = cliprect.top(); y <= (std::min)(cliprect.bottom(), 127); y++)
{
uint16_t* p = &bitmap.pix16(y);
- for (x = rect.min_x; x <= rect.max_x; x++)
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
p[x] = palette.pen_indirect(p[x]) | 0x08;
}
}
@@ -243,9 +231,6 @@ void wolfpack_state::draw_water(palette_device &palette, bitmap_ind16 &bitmap, c
uint32_t wolfpack_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int i;
- int j;
-
uint8_t color = 0x48;
if (m_ship_size & 0x10) color += 0x13;
if (m_ship_size & 0x20) color += 0x22;
@@ -259,8 +244,8 @@ uint32_t wolfpack_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
bitmap.fill(m_video_invert, cliprect);
- for (i = 0; i < 8; i++)
- for (j = 0; j < 32; j++)
+ for (int i = 0; i < 8; i++)
+ for (int j = 0; j < 32; j++)
{
int code = m_alpha_num_ram[32 * i + j];
@@ -286,19 +271,16 @@ WRITE_LINE_MEMBER(wolfpack_state::screen_vblank)
// rising edge
if (state)
{
- int x;
- int y;
-
m_helper.fill(0);
draw_ship(m_helper, m_helper.cliprect());
- for (y = 128; y < 224 - m_torpedo_v; y++)
+ for (int y = 128; y < 224 - m_torpedo_v; y++)
{
int x1 = 248 - m_torpedo_h - 1;
int x2 = 248 - m_torpedo_h + 1;
- for (x = 2 * x1; x < 2 * x2; x++)
+ for (int x = 2 * x1; x < 2 * x2; x++)
{
if (x < 0 || x >= m_helper.width())
continue;
diff --git a/src/mame/video/wpc_dmd.cpp b/src/mame/video/wpc_dmd.cpp
index 98675d0561d..683ee65e407 100644
--- a/src/mame/video/wpc_dmd.cpp
+++ b/src/mame/video/wpc_dmd.cpp
@@ -2,7 +2,6 @@
// copyright-holders:Olivier Galibert
#include "emu.h"
#include "wpc_dmd.h"
-#include "rendlay.h"
#include "screen.h"
DEFINE_DEVICE_TYPE(WPC_DMD, wpc_dmd_device, "wpc_dmd", "Williams Pinball Controller Dot Matrix Display")
@@ -43,7 +42,6 @@ MACHINE_CONFIG_START(wpc_dmd_device::device_add_mconfig)
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, wpc_dmd_device, screen_update)
MCFG_SCREEN_SIZE(128*4, 32*4)
MCFG_SCREEN_VISIBLE_AREA(0, 128*4-1, 0, 32*4-1)
- config.set_default_layout(layout_lcd);
MCFG_TIMER_DRIVER_ADD_PERIODIC("scanline", wpc_dmd_device, scanline_timer, attotime::from_hz(60*4*32))
MACHINE_CONFIG_END
diff --git a/src/mame/video/xybots.cpp b/src/mame/video/xybots.cpp
index 6502f0f6256..5bcd5d17181 100644
--- a/src/mame/video/xybots.cpp
+++ b/src/mame/video/xybots.cpp
@@ -98,11 +98,11 @@ uint32_t xybots_state::screen_update_xybots(screen_device &screen, bitmap_ind16
// draw and merge the MO
bitmap_ind16 &mobitmap = m_mob->bitmap();
for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next())
- for (int y = rect->min_y; y <= rect->max_y; y++)
+ for (int y = rect->top(); y <= rect->bottom(); y++)
{
uint16_t *mo = &mobitmap.pix16(y);
uint16_t *pf = &bitmap.pix16(y);
- for (int x = rect->min_x; x <= rect->max_x; x++)
+ for (int x = rect->left(); x <= rect->right(); x++)
if (mo[x] != 0xffff)
{
/* verified via schematics:
diff --git a/src/osd/eigccppc.h b/src/osd/eigccppc.h
index 7f932eb1e88..56a4c65d5b1 100644
--- a/src/osd/eigccppc.h
+++ b/src/osd/eigccppc.h
@@ -9,8 +9,8 @@
***************************************************************************/
-#ifndef __EIGCCPPC__
-#define __EIGCCPPC__
+#ifndef MAME_OSD_EIGCCPPC_H
+#define MAME_OSD_EIGCCPPC_H
/***************************************************************************
@@ -283,4 +283,4 @@ _count_leading_ones(uint32_t value)
return result;
}
-#endif /* __EIGCCPPC__ */
+#endif // MAME_OSD_EIGCCPPC_H
diff --git a/src/osd/osdnet.h b/src/osd/osdnet.h
index 908a8f33242..87a1b56b9f0 100644
--- a/src/osd/osdnet.h
+++ b/src/osd/osdnet.h
@@ -1,8 +1,9 @@
// license:BSD-3-Clause
// copyright-holders:Carl
-#ifndef __OSDNET_H__
-#define __OSDNET_H__
+#ifndef MAME_OSD_OSDNET_H
+#define MAME_OSD_OSDNET_H
+#pragma once
class osd_netdev;
@@ -46,4 +47,5 @@ void add_netdev(const char *name, const char *description, create_netdev func);
void clear_netdev();
const std::vector<std::unique_ptr<osd_netdev::entry_t>>& get_netdev_list();
int netdev_count();
-#endif
+
+#endif // MAME_OSD_OSDNET_H
diff --git a/src/osd/osdsync.h b/src/osd/osdsync.h
index 71726a830cf..3a286b60afa 100644
--- a/src/osd/osdsync.h
+++ b/src/osd/osdsync.h
@@ -5,9 +5,10 @@
// osdsync.h - Core synchronization functions
//
//============================================================
+#ifndef MAME_OSD_OSDSYNC_H
+#define MAME_OSD_OSDSYNC_H
-#ifndef __OSDSYNC__
-#define __OSDSYNC__
+#pragma once
// C++ headers
#include <mutex>
@@ -163,4 +164,4 @@ private:
};
-#endif /* __OSDSYNC__ */
+#endif // MAME_OSD_OSDSYNC_H