src/mame/mame.lst
| r11240 | r11241 | |
| 1 | 1 | /****************************************************************************** |
| 2 | 2 | |
| 3 | 3 | mame.lst |
| 4 | | |
| 4 | |
| 5 | 5 | List of all enabled drivers in the system. This file is parsed by |
| 6 | 6 | makelist.exe, sorted, and output as C code describing the drivers. |
| 7 | 7 | |
| r11240 | r11241 | |
| 86 | 86 | piranhao // GL |
| 87 | 87 | nmouse // (c) 1981 Amenip (Palcom Queen River) |
| 88 | 88 | nmouseb // (c) 1981 Amenip Nova Games Ltd. |
| 89 | | mspacman // (c) 1981 Midway // made by General Computer |
| 89 | mspacman // (c) 1981 Midway // made by General Computer |
| 90 | 90 | mspacmnf // hack |
| 91 | 91 | mspacmat // hack |
| 92 | 92 | woodpeck // (c) 1981 Amenip (Palcom Queen River) |
| r11240 | r11241 | |
| 728 | 728 | liblrabl // (c) 1983 |
| 729 | 729 | toypop // (c) 1986 |
| 730 | 730 | // Z8000 games |
| 731 | | polepos // (c) 1982 |
| 731 | polepos // (c) 1982 |
| 732 | 732 | poleposa // 136014 (c) 1982 + Atari license |
| 733 | 733 | polepos1 // 136014 (c) 1982 Atari |
| 734 | 734 | topracer // bootleg |
| r11240 | r11241 | |
| 1544 | 1544 | andromed // (c) 1979 |
| 1545 | 1545 | ipminvad // M10 no copyright notice (Arcade TV Game List - P.67, Left, 26 from top) |
| 1546 | 1546 | ipminvad1 // M10 incomplete dump |
| 1547 | | ptrmj // M14 (c) 1979 |
| 1547 | ptrmj // M14 (c) 1979 |
| 1548 | 1548 | skychut // Irem [1980] |
| 1549 | 1549 | spacbeam // M15 no copyright notice |
| 1550 | 1550 | greenber // Irem |
| r11240 | r11241 | |
| 1612 | 1612 | rtypej // (c) 1987 (Japan) |
| 1613 | 1613 | rtypejp // (c) 1987 (Japan) |
| 1614 | 1614 | rtypeu // (c) 1987 + Nintendo USA license (US) |
| 1615 | | rtypeb // bootleg |
| 1615 | rtypeb // bootleg |
| 1616 | 1616 | bchopper // (c) 1987 |
| 1617 | 1617 | mrheli // (c) 1987 (Japan) |
| 1618 | 1618 | nspirit // (c) 1988 |
| r11240 | r11241 | |
| 1728 | 1728 | qbertqub // GV-119 (c) 1983 Mylstar |
| 1729 | 1729 | screwloo // GV-123 (c) 1983 Mylstar - never released |
| 1730 | 1730 | curvebal // GV-134 (c) 1984 Mylstar |
| 1731 | | vidvince // GV-??? (c) 1984 Mylstar - never released |
| 1731 | vidvince // GV-??? (c) 1984 Mylstar - never released |
| 1732 | 1732 | wizwarz // GV-??? (c) 1984 Mylstar - never released |
| 1733 | 1733 | |
| 1734 | 1734 | // Taito "Qix hardware" games |
| r11240 | r11241 | |
| 2358 | 2358 | outzonec // TP-O18 (c) 1990 Toaplan |
| 2359 | 2359 | outzoned // TP-O18 (c) 1990 Toaplan |
| 2360 | 2360 | vimana // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan) |
| 2361 | | vimana1 // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan) |
| 2361 | vimana1 // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan) |
| 2362 | 2362 | vimanan // TP-O19 (c) 1991 Toaplan (+ Nova Apparate GMBH & Co license) |
| 2363 | 2363 | snowbros // MIN16-02 (c) 1990 Toaplan + Romstar license |
| 2364 | 2364 | snowbrosa // MIN16-02 (c) 1990 Toaplan + Romstar license |
| r11240 | r11241 | |
| 2607 | 2607 | |
| 2608 | 2608 | // Capcom games |
| 2609 | 2609 | // The following is a COMPLETE list of the Capcom games up to 1997, as shown on |
| 2610 | | // their web site. The list is sorted by production date. |
| 2611 | | // A comprehensive list of Capcom games with board info can be found here: |
| 2612 | | // http://www.arcadeflyers.com/strider/capcom_list.html |
| 2610 | // their web site. The list is sorted by production date. |
| 2611 | // A comprehensive list of Capcom games with board info can be found here: |
| 2612 | // http://www.arcadeflyers.com/strider/capcom_list.html |
| 2613 | 2613 | vulgus // 5/1984 (c) 1984 |
| 2614 | 2614 | vulgus2 // 5/1984 (c) 1984 |
| 2615 | 2615 | vulgusj // 5/1984 (c) 1984 |
| r11240 | r11241 | |
| 4116 | 4116 | eswatbl // BOOTLEG |
| 4117 | 4117 | fpointbl // (c) 1989 (Datsu bootleg) |
| 4118 | 4118 | fpointbj // (c) 1989 (Datsu bootleg, Japan) |
| 4119 | | goldnaxeb1 // BOOTLEG |
| 4120 | | goldnaxeb2 // BOOTLEG |
| 4119 | goldnaxeb1 // BOOTLEG |
| 4120 | goldnaxeb2 // BOOTLEG |
| 4121 | 4121 | passht4b // bootleg |
| 4122 | 4122 | passshtb // bootleg |
| 4123 | 4123 | shinoblb // (c) 1987 (but bootleg) |
| r11240 | r11241 | |
| 4311 | 4311 | sonic // 1993.09 Sonic the Hedgehog (Japan) |
| 4312 | 4312 | sonicp // 1993.?? Sonic the Hedgehog (proto, Japan) |
| 4313 | 4313 | kokoroj2 // 1993.12 Soreike! Kokoroji 2 (Japan) |
| 4314 | | jpark // 1994.?? Jurassic Park (World) |
| 4314 | jpark // 1994.?? Jurassic Park (World) |
| 4315 | 4315 | // 1994.?? Jurassic Park (US) |
| 4316 | 4316 | // 1994.02 Jurassic Park (Japan) |
| 4317 | 4317 | dbzvrvs // 1994.03 Dragon Ball Z V.R.V.S. (Japan) |
| r11240 | r11241 | |
| 5912 | 5912 | bm2ndmix // GX853 (c) 1998 (Japan) |
| 5913 | 5913 | bm2ndmxa // GX853 (c) 1998 (Japan) |
| 5914 | 5914 | bm3rdmix // GX853 (c) 1998 (Japan) |
| 5915 | | //bm3rdmxb // GX853 (c) 1998 (Japan) |
| 5915 | //bm3rdmxb // GX853 (c) 1998 (Japan) |
| 5916 | 5916 | bmcompmx // GX858 (c) 1999 (Japan) |
| 5917 | 5917 | hmcompmx // GX858 (c) 1999 |
| 5918 | 5918 | bm4thmix // GX847 (c) 1999 (Japan) |
| r11240 | r11241 | |
| 5926 | 5926 | bm7thmix // GXB07 (c) 2001 (Japan) |
| 5927 | 5927 | bmfinal // GXC01 (c) 2002 (Japan) |
| 5928 | 5928 | |
| 5929 | | //popn1 // GX803 (c) 1998 (Japan) |
| 5929 | //popn1 // GX803 (c) 1998 (Japan) |
| 5930 | 5930 | popn2 // GX831 (c) 1998 (Japan) |
| 5931 | | //popn3 // GX980 (c) 1999 (Japan) |
| 5932 | | //popnstex // GX970 (c) 1999 (Japan) |
| 5931 | //popn3 // GX980 (c) 1999 (Japan) |
| 5932 | //popnstex // GX970 (c) 1999 (Japan) |
| 5933 | 5933 | |
| 5934 | 5934 | // Firebeat games |
| 5935 | 5935 | ppp // GQ977 (c) 2000 |
| r11240 | r11241 | |
| 6074 | 6074 | tourtabl // 030170 1978/03 [6507] |
| 6075 | 6075 | tourtab2 // 030170 1978/03 [6507] |
| 6076 | 6076 | avalnche // 030574 1978/04 [6502] |
| 6077 | | cascade // bootleg |
| 6077 | cascade // bootleg |
| 6078 | 6078 | firetrk // 030926 1978/06 [6808] |
| 6079 | 6079 | skydiver // 009787 1978/06 [6800] |
| 6080 | 6080 | // Smokey Joe // 030926 1978/07 [6502] |
| r11240 | r11241 | |
| 7017 | 7017 | ddungeone // East Coast Coin Company (Melbourne) |
| 7018 | 7018 | darktowr // Game Room |
| 7019 | 7019 | tstrike // East Coast Coin Company (Melbourne) |
| 7020 | | tstrikea // Game Room |
| 7020 | tstrikea // Game Room |
| 7021 | 7021 | ctribe // TA-0028 (c) 1990 (US) |
| 7022 | 7022 | ctribe1 // TA-0028 (c) 1990 (US) - Set 1? |
| 7023 | 7023 | ctribej // TA-0028 (c) 1990 (Japan) |
| r11240 | r11241 | |
| 9384 | 9384 | tcl // (c) 1995 Uniwang |
| 9385 | 9385 | othello // (c) 1984 Success |
| 9386 | 9386 | sothello // (c) 1986 Success / Fujiwara |
| 9387 | | quake // (c) 19?? Lazer-Tron / iD Software |
| 9387 | quake // (c) 19?? Lazer-Tron / iD Software |
| 9388 | 9388 | majorpkr // (c) 1994 PAL System. |
| 9389 | 9389 | |
| 9390 | 9390 | // Multi Amenity Cassette System |
| r11240 | r11241 | |
| 10395 | 10395 | |
| 10396 | 10396 | // Igrosoft Original sets |
| 10397 | 10397 | // Multifish |
| 10398 | | //mfish // (c) 2002 |
| 10399 | | //mfish_2 // (c) 2002 |
| 10400 | | //mfish_4 // (c) 2002 |
| 10401 | | //mfish_5 // (c) 2002 |
| 10402 | | //mfish_7 // (c) 2002 |
| 10403 | | //mfish_8 // (c) 2002 |
| 10404 | | //mfish_9 // (c) 2002 |
| 10405 | | //mfish_10 // (c) 2002 |
| 10406 | | //mfish_13 // (c) 2002 |
| 10398 | //mfish // (c) 2002 |
| 10399 | //mfish_2 // (c) 2002 |
| 10400 | //mfish_4 // (c) 2002 |
| 10401 | //mfish_5 // (c) 2002 |
| 10402 | //mfish_7 // (c) 2002 |
| 10403 | //mfish_8 // (c) 2002 |
| 10404 | //mfish_9 // (c) 2002 |
| 10405 | //mfish_10 // (c) 2002 |
| 10406 | //mfish_13 // (c) 2002 |
| 10407 | 10407 | mfish_3 // (c) 2002 |
| 10408 | 10408 | mfish_6 // (c) 2002 |
| 10409 | 10409 | mfish_11 // (c) 2002 |
| r11240 | r11241 | |
| 10411 | 10411 | mfish_13 // (c) 2002 |
| 10412 | 10412 | |
| 10413 | 10413 | // Crazy Monkey |
| 10414 | | //crzmon // (c) 2003 |
| 10415 | | //crzmon_2 // (c) 2003 |
| 10416 | | //crzmon_3 // (c) 2003 |
| 10417 | | //crzmon_4 // (c) 2003 |
| 10418 | | //crzmon_5 // (c) 2003 |
| 10419 | | //crzmon_6 // (c) 2003 |
| 10414 | //crzmon // (c) 2003 |
| 10415 | //crzmon_2 // (c) 2003 |
| 10416 | //crzmon_3 // (c) 2003 |
| 10417 | //crzmon_4 // (c) 2003 |
| 10418 | //crzmon_5 // (c) 2003 |
| 10419 | //crzmon_6 // (c) 2003 |
| 10420 | 10420 | crzmon_5 // (c) 2003 |
| 10421 | 10421 | crzmon_7 // (c) 2003 |
| 10422 | 10422 | crzmon_8 // (c) 2003 |
| 10423 | 10423 | crzmon_9 // (c) 2003 |
| 10424 | 10424 | |
| 10425 | 10425 | // Fruit Cocktail |
| 10426 | | //fcockt // (c) 2003 |
| 10427 | | //fcockt_2 // (c) 2003 |
| 10426 | //fcockt // (c) 2003 |
| 10427 | //fcockt_2 // (c) 2003 |
| 10428 | 10428 | fcockt_3 // (c) 2003 |
| 10429 | | //fcockt_4 // (c) 2003 |
| 10429 | //fcockt_4 // (c) 2003 |
| 10430 | 10430 | fcockt_5 // (c) 2003 |
| 10431 | 10431 | fcockt_6 // (c) 2003 |
| 10432 | 10432 | fcockt_7 // (c) 2003 |
| r11240 | r11241 | |
| 10437 | 10437 | fcockt_12 // (c) 2003 |
| 10438 | 10438 | |
| 10439 | 10439 | // Lucky Haunter |
| 10440 | | //lhaunt // (c) 2003 |
| 10440 | //lhaunt // (c) 2003 |
| 10441 | 10441 | lhaunt_2 // (c) 2003 |
| 10442 | | //lhaunt_3 // (c) 2003 |
| 10442 | //lhaunt_3 // (c) 2003 |
| 10443 | 10443 | lhaunt_4 // (c) 2003 |
| 10444 | 10444 | lhaunt_5 // (c) 2003 |
| 10445 | 10445 | lhaunt_6 // (c) 2003 |
| r11240 | r11241 | |
| 10447 | 10447 | lhaunt_8 // (c) 2003 |
| 10448 | 10448 | |
| 10449 | 10449 | // Rollfruit |
| 10450 | | //rollfr // (c) 2003 |
| 10450 | //rollfr // (c) 2003 |
| 10451 | 10451 | rollfr_2 // (c) 2003 |
| 10452 | 10452 | |
| 10453 | 10453 | // Garage |
| 10454 | | //garage // (c) 2004 |
| 10455 | | //garage_2 // (c) 2004 |
| 10456 | | //garage_3 // (c) 2004 |
| 10454 | //garage // (c) 2004 |
| 10455 | //garage_2 // (c) 2004 |
| 10456 | //garage_3 // (c) 2004 |
| 10457 | 10457 | garage_4 // (c) 2004 |
| 10458 | 10458 | garage_5 // (c) 2004 |
| 10459 | 10459 | garage_6 // (c) 2004 |
| 10460 | 10460 | garage_7 // (c) 2004 |
| 10461 | 10461 | |
| 10462 | 10462 | // Rock Climber |
| 10463 | | //rclimb_2 // (c) 2004 |
| 10463 | //rclimb_2 // (c) 2004 |
| 10464 | 10464 | rclimb // (c) 2004 |
| 10465 | 10465 | rclimb_3 // (c) 2004 |
| 10466 | 10466 | rclimb_4 // (c) 2004 |
| r11240 | r11241 | |
| 10480 | 10480 | island_2 // (c) 2005 |
| 10481 | 10481 | |
| 10482 | 10482 | // Pirate |
| 10483 | | //pirate // (c) 2005 |
| 10483 | //pirate // (c) 2005 |
| 10484 | 10484 | pirate_2 // (c) 2005 |
| 10485 | 10485 | pirate_3 // (c) 2005 |
| 10486 | 10486 | pirate_4 // (c) 2005 |
| r11240 | r11241 | |
| 10819 | 10819 | bowarrow |
| 10820 | 10820 | eightbll |
| 10821 | 10821 | evelknie |
| 10822 | | freedom |
| 10822 | freedom |
| 10823 | 10823 | matahari |
| 10824 | 10824 | nightrdr |
| 10825 | 10825 | nightr20 |
| r11240 | r11241 | |
| 10831 | 10831 | */ |
| 10832 | 10832 | bullseye |
| 10833 | 10833 | blakpyra |
| 10834 | | bmx |
| 10835 | | centaur |
| 10834 | bmx |
| 10835 | centaur |
| 10836 | 10836 | cosflash |
| 10837 | 10837 | cybrnaut |
| 10838 | 10838 | dollyptn |
| 10839 | 10839 | eballdlx |
| 10840 | 10840 | eballd14 |
| 10841 | | elektra |
| 10842 | | embryon |
| 10843 | | fathom |
| 10844 | | fbclass |
| 10841 | elektra |
| 10842 | embryon |
| 10843 | fathom |
| 10844 | fbclass |
| 10845 | 10845 | fball_ii |
| 10846 | 10846 | flashgdn |
| 10847 | 10847 | flashgdnf |
| r11240 | r11241 | |
| 10854 | 10854 | granslam4 |
| 10855 | 10855 | hglbtrtr |
| 10856 | 10856 | hotdoggn |
| 10857 | | kosteel |
| 10858 | | kiss |
| 10857 | kosteel |
| 10858 | kiss |
| 10859 | 10859 | lostwrlp |
| 10860 | | medusa |
| 10861 | | m_mpac |
| 10862 | | mystic |
| 10860 | medusa |
| 10861 | m_mpac |
| 10862 | mystic |
| 10863 | 10863 | myststar |
| 10864 | | newwave |
| 10864 | newwave |
| 10865 | 10865 | ngndshkr |
| 10866 | | paragon |
| 10867 | | playboy |
| 10866 | paragon |
| 10867 | playboy |
| 10868 | 10868 | rapidfip |
| 10869 | 10869 | rollston |
| 10870 | | saturn2 |
| 10870 | saturn2 |
| 10871 | 10871 | slbmania |
| 10872 | 10872 | skatebll |
| 10873 | 10873 | spacehaw |
| 10874 | 10874 | spaceinv |
| 10875 | 10875 | speakesy |
| 10876 | 10876 | speakesy4p |
| 10877 | | spectrm |
| 10877 | spectrm |
| 10878 | 10878 | spectrm4 |
| 10879 | 10879 | spyhuntr |
| 10880 | 10880 | startrep |
| 10881 | | sst |
| 10882 | | smman |
| 10881 | sst |
| 10882 | smman |
| 10883 | 10883 | tigerrag |
| 10884 | | vector |
| 10885 | | viking |
| 10886 | | voltan |
| 10887 | | xsandos |
| 10888 | | xenon |
| 10889 | | xenonf |
| 10884 | vector |
| 10885 | viking |
| 10886 | voltan |
| 10887 | xsandos |
| 10888 | xenon |
| 10889 | xenonf |
| 10890 | 10890 | worlddef |
| 10891 | 10891 | darkshad |
| 10892 | 10892 | skflight |
| 10893 | | cobrap |
| 10893 | cobrap |
| 10894 | 10894 | futrquen |
| 10895 | | f1gpp |
| 10896 | | toppin |
| 10897 | | uboat65 |
| 10895 | f1gpp |
| 10896 | toppin |
| 10897 | uboat65 |
| 10898 | 10898 | bbbowlin |
| 10899 | 10899 | monrobwl |
| 10900 | 10900 | mdntmrdr |
| r11240 | r11241 | |
| 10904 | 10904 | /* |
| 10905 | 10905 | Bally Kiss 8035 prototype |
| 10906 | 10906 | */ |
| 10907 | | kissp |
| 10907 | kissp |
| 10908 | 10908 | |
| 10909 | 10909 | /* |
| 10910 | 10910 | Bally MPU A084-91786-AH06 (6803) |
| r11240 | r11241 | |
| 10933 | 10933 | /* |
| 10934 | 10934 | Bally MPU AS-2518-133 |
| 10935 | 10935 | */ |
| 10936 | | babypac |
| 10937 | | granny |
| 10936 | babypac |
| 10937 | granny |
| 10938 | 10938 | |
| 10939 | 10939 | // by68701.c |
| 10940 | 10940 | flashgdnp1 |
src/mame/machine/snessdd1.c
| r11240 | r11241 | |
| 10 | 10 | |
| 11 | 11 | static UINT8 sdd1_read(running_machine& machine, UINT32 addr); |
| 12 | 12 | |
| 13 | | typedef struct //Input Manager |
| 13 | class SDD1_IM //Input Manager |
| 14 | 14 | { |
| 15 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 15 | public: |
| 16 | SDD1_IM(running_machine &machine) |
| 17 | : m_machine(machine) { } |
| 16 | 18 | |
| 17 | | running_machine* m_machine; |
| 19 | running_machine &machine() const { return m_machine; } |
| 20 | |
| 18 | 21 | UINT32 byte_ptr; |
| 19 | 22 | UINT8 bit_count; |
| 20 | | } SDD1_IM; |
| 21 | 23 | |
| 22 | | static SDD1_IM* SDD1_IM_ctor(running_machine& machine) |
| 23 | | { |
| 24 | | SDD1_IM* newclass = (SDD1_IM*)auto_alloc_array(machine, UINT8, sizeof(SDD1_IM)); |
| 25 | | newclass->m_machine = &machine; |
| 26 | | return newclass; |
| 27 | | } |
| 24 | private: |
| 25 | running_machine& m_machine; |
| 26 | }; |
| 28 | 27 | |
| 29 | 28 | static void SDD1_IM_prepareDecomp(SDD1_IM* thisptr, UINT32 in_buf) |
| 30 | 29 | { |
| r11240 | r11241 | |
| 55 | 54 | return codeword; |
| 56 | 55 | } |
| 57 | 56 | |
| 58 | | typedef struct //Golomb-Code Decoder |
| 57 | class SDD1_GCD //Golomb-Code Decoder |
| 59 | 58 | { |
| 60 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 59 | public: |
| 60 | SDD1_GCD(running_machine &machine, SDD1_IM* associatedIM) |
| 61 | : IM(associatedIM), |
| 62 | m_machine(machine) { } |
| 63 | |
| 64 | running_machine &machine() const { return m_machine; } |
| 61 | 65 | |
| 62 | | running_machine* m_machine; |
| 63 | 66 | SDD1_IM* IM; |
| 64 | | } SDD1_GCD; |
| 65 | 67 | |
| 66 | | static SDD1_GCD* SDD1_GCD_ctor(running_machine& machine, SDD1_IM* associatedIM) |
| 67 | | { |
| 68 | | SDD1_GCD* newclass = (SDD1_GCD*)auto_alloc_array(machine, UINT8, sizeof(SDD1_GCD)); |
| 69 | | newclass->m_machine = &machine; |
| 70 | | newclass->IM = associatedIM; |
| 71 | | return newclass; |
| 72 | | } |
| 68 | private: |
| 69 | running_machine& m_machine; |
| 70 | }; |
| 73 | 71 | |
| 74 | 72 | static void SDD1_GCD_getRunCount(SDD1_GCD* thisptr, UINT8 code_num, UINT8* MPScount, UINT8* LPSind) |
| 75 | 73 | { |
| r11240 | r11241 | |
| 122 | 120 | } |
| 123 | 121 | } |
| 124 | 122 | |
| 125 | | typedef struct // Bits Generator |
| 123 | class SDD1_BG // Bits Generator |
| 126 | 124 | { |
| 127 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 125 | public: |
| 126 | SDD1_BG(running_machine &machine, SDD1_GCD* associatedGCD, UINT8 code) |
| 127 | : code_num(code), |
| 128 | GCD(associatedGCD), |
| 129 | m_machine(machine) { } |
| 128 | 130 | |
| 129 | | running_machine* m_machine; |
| 131 | running_machine &machine() const { return m_machine; } |
| 132 | |
| 130 | 133 | UINT8 code_num; |
| 131 | 134 | UINT8 MPScount; |
| 132 | 135 | UINT8 LPSind; |
| 133 | 136 | SDD1_GCD* GCD; |
| 134 | | } SDD1_BG; |
| 135 | 137 | |
| 136 | | static SDD1_BG* SDD1_BG_ctor(running_machine& machine, SDD1_GCD* associatedGCD, UINT8 code) |
| 137 | | { |
| 138 | | SDD1_BG* newclass = (SDD1_BG*)auto_alloc_array(machine, UINT8, sizeof(SDD1_BG)); |
| 139 | | newclass->m_machine = &machine; |
| 140 | | newclass->code_num = code; |
| 141 | | newclass->GCD = associatedGCD; |
| 142 | | return newclass; |
| 143 | | } |
| 138 | public: |
| 139 | running_machine& m_machine; |
| 140 | } ; |
| 144 | 141 | |
| 145 | 142 | static void SDD1_BG_prepareDecomp(SDD1_BG* thisptr) |
| 146 | 143 | { |
| r11240 | r11241 | |
| 231 | 228 | UINT8 MPS; |
| 232 | 229 | } SDD1_PEM_ContextInfo; |
| 233 | 230 | |
| 234 | | typedef struct //Probability Estimation Module |
| 231 | class SDD1_PEM //Probability Estimation Module |
| 235 | 232 | { |
| 236 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 237 | | |
| 238 | | running_machine* m_machine; |
| 239 | | SDD1_PEM_ContextInfo contextInfo[32]; |
| 240 | | SDD1_BG* BG[8]; |
| 241 | | } SDD1_PEM; |
| 242 | | |
| 243 | | static SDD1_PEM* SDD1_PEM_ctor(running_machine& machine, |
| 233 | public: |
| 234 | SDD1_PEM(running_machine& machine, |
| 244 | 235 | SDD1_BG* associatedBG0, SDD1_BG* associatedBG1, |
| 245 | 236 | SDD1_BG* associatedBG2, SDD1_BG* associatedBG3, |
| 246 | 237 | SDD1_BG* associatedBG4, SDD1_BG* associatedBG5, |
| 247 | 238 | SDD1_BG* associatedBG6, SDD1_BG* associatedBG7) |
| 248 | | { |
| 249 | | SDD1_PEM* newclass = (SDD1_PEM*)auto_alloc_array(machine, UINT8, sizeof(SDD1_PEM)); |
| 250 | | newclass->m_machine = &machine; |
| 251 | | newclass->BG[0] = associatedBG0; |
| 252 | | newclass->BG[1] = associatedBG1; |
| 253 | | newclass->BG[2] = associatedBG2; |
| 254 | | newclass->BG[3] = associatedBG3; |
| 255 | | newclass->BG[4] = associatedBG4; |
| 256 | | newclass->BG[5] = associatedBG5; |
| 257 | | newclass->BG[6] = associatedBG6; |
| 258 | | newclass->BG[7] = associatedBG7; |
| 259 | | return newclass; |
| 260 | | } |
| 239 | : m_machine(machine) |
| 240 | { |
| 241 | BG[0] = associatedBG0; |
| 242 | BG[1] = associatedBG1; |
| 243 | BG[2] = associatedBG2; |
| 244 | BG[3] = associatedBG3; |
| 245 | BG[4] = associatedBG4; |
| 246 | BG[5] = associatedBG5; |
| 247 | BG[6] = associatedBG6; |
| 248 | BG[7] = associatedBG7; |
| 249 | } |
| 250 | |
| 251 | running_machine &machine() const { return m_machine; } |
| 261 | 252 | |
| 253 | SDD1_PEM_ContextInfo contextInfo[32]; |
| 254 | SDD1_BG* BG[8]; |
| 255 | |
| 256 | private: |
| 257 | running_machine& m_machine; |
| 258 | } ; |
| 259 | |
| 262 | 260 | static void SDD1_PEM_prepareDecomp(SDD1_PEM* thisptr) |
| 263 | 261 | { |
| 264 | 262 | UINT8 i; |
| r11240 | r11241 | |
| 300 | 298 | return bit ^ currentMPS; |
| 301 | 299 | } |
| 302 | 300 | |
| 303 | | typedef struct |
| 301 | class SDD1_CM |
| 304 | 302 | { |
| 305 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 303 | public: |
| 304 | SDD1_CM(running_machine& machine, SDD1_PEM* associatedPEM) |
| 305 | : PEM(associatedPEM), |
| 306 | m_machine(machine) { } |
| 307 | |
| 308 | running_machine &machine() const { return m_machine; } |
| 306 | 309 | |
| 307 | | running_machine* m_machine; |
| 308 | 310 | UINT8 bitplanesInfo; |
| 309 | 311 | UINT8 contextBitsInfo; |
| 310 | 312 | UINT8 bit_number; |
| 311 | 313 | UINT8 currBitplane; |
| 312 | 314 | UINT16 prevBitplaneBits[8]; |
| 313 | 315 | SDD1_PEM* PEM; |
| 314 | | } SDD1_CM; |
| 315 | 316 | |
| 316 | | static SDD1_CM* SDD1_CM_ctor(running_machine& machine, SDD1_PEM* associatedPEM) |
| 317 | | { |
| 318 | | SDD1_CM* newclass = (SDD1_CM*)auto_alloc_array(machine, UINT8, sizeof(SDD1_CM)); |
| 319 | | newclass->m_machine = &machine; |
| 320 | | newclass->PEM = associatedPEM; |
| 321 | | return newclass; |
| 322 | | } |
| 317 | private: |
| 318 | running_machine& m_machine; |
| 319 | } ; |
| 323 | 320 | |
| 324 | 321 | static void SDD1_CM_prepareDecomp(SDD1_CM* thisptr, UINT32 first_byte) |
| 325 | 322 | { |
| r11240 | r11241 | |
| 404 | 401 | return bit; |
| 405 | 402 | } |
| 406 | 403 | |
| 407 | | typedef struct |
| 404 | class SDD1_OL |
| 408 | 405 | { |
| 409 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 406 | public: |
| 407 | SDD1_OL(running_machine& machine, SDD1_CM* associatedCM) |
| 408 | : CM(associatedCM), |
| 409 | m_machine(machine) { } |
| 410 | 410 | |
| 411 | | running_machine* m_machine; |
| 411 | running_machine &machine() const { return m_machine; } |
| 412 | |
| 412 | 413 | UINT8 bitplanesInfo; |
| 413 | 414 | UINT16 length; |
| 414 | 415 | UINT8* buffer; |
| 415 | 416 | SDD1_CM* CM; |
| 416 | | } SDD1_OL; |
| 417 | 417 | |
| 418 | | static SDD1_OL* SDD1_OL_ctor(running_machine& machine, SDD1_CM* associatedCM) |
| 419 | | { |
| 420 | | SDD1_OL* newclass = (SDD1_OL*)auto_alloc_array(machine, UINT8, sizeof(SDD1_OL)); |
| 421 | | newclass->m_machine = &machine; |
| 422 | | newclass->CM = associatedCM; |
| 423 | | return newclass; |
| 424 | | } |
| 418 | private: |
| 419 | running_machine& m_machine; |
| 420 | } ; |
| 425 | 421 | |
| 426 | 422 | static void SDD1_OL_prepareDecomp(SDD1_OL* thisptr, UINT32 first_byte, UINT16 out_len, UINT8 *out_buf) |
| 427 | 423 | { |
| r11240 | r11241 | |
| 481 | 477 | } |
| 482 | 478 | } |
| 483 | 479 | |
| 484 | | typedef struct |
| 480 | class SDD1emu |
| 485 | 481 | { |
| 486 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 482 | public: |
| 483 | SDD1emu(running_machine &machine); |
| 484 | |
| 485 | running_machine &machine() const { return m_machine; } |
| 487 | 486 | |
| 488 | | running_machine* m_machine; |
| 489 | 487 | SDD1_IM* IM; |
| 490 | 488 | SDD1_GCD* GCD; |
| 491 | 489 | SDD1_BG* BG0; SDD1_BG* BG1; SDD1_BG* BG2; SDD1_BG* BG3; |
| r11240 | r11241 | |
| 493 | 491 | SDD1_PEM* PEM; |
| 494 | 492 | SDD1_CM* CM; |
| 495 | 493 | SDD1_OL* OL; |
| 496 | | } SDD1emu; |
| 497 | 494 | |
| 498 | | static SDD1emu* SDD1emu_ctor(running_machine &machine) |
| 499 | | { |
| 500 | | SDD1emu* newclass = (SDD1emu*)auto_alloc_array(machine, UINT8, sizeof(SDD1emu)); |
| 501 | | newclass->m_machine = &machine; |
| 495 | private: |
| 496 | running_machine& m_machine; |
| 497 | }; |
| 502 | 498 | |
| 503 | | newclass->IM = SDD1_IM_ctor(machine); |
| 504 | | newclass->GCD = SDD1_GCD_ctor(machine, newclass->IM); |
| 505 | | newclass->BG0 = SDD1_BG_ctor(machine, newclass->GCD, 0); |
| 506 | | newclass->BG1 = SDD1_BG_ctor(machine, newclass->GCD, 1); |
| 507 | | newclass->BG2 = SDD1_BG_ctor(machine, newclass->GCD, 2); |
| 508 | | newclass->BG3 = SDD1_BG_ctor(machine, newclass->GCD, 3); |
| 509 | | newclass->BG4 = SDD1_BG_ctor(machine, newclass->GCD, 4); |
| 510 | | newclass->BG5 = SDD1_BG_ctor(machine, newclass->GCD, 5); |
| 511 | | newclass->BG6 = SDD1_BG_ctor(machine, newclass->GCD, 6); |
| 512 | | newclass->BG7 = SDD1_BG_ctor(machine, newclass->GCD, 7); |
| 513 | | newclass->PEM = SDD1_PEM_ctor(machine, newclass->BG0, newclass->BG1, newclass->BG2, newclass->BG3, |
| 514 | | newclass->BG4, newclass->BG5, newclass->BG6, newclass->BG7); |
| 515 | | newclass->CM = SDD1_CM_ctor(machine, newclass->PEM); |
| 516 | | newclass->OL = SDD1_OL_ctor(machine, newclass->CM); |
| 517 | | return newclass; |
| 499 | SDD1emu::SDD1emu(running_machine &machine) |
| 500 | : m_machine(machine) |
| 501 | { |
| 502 | IM = auto_alloc(machine, SDD1_IM(machine)); |
| 503 | GCD = auto_alloc(machine, SDD1_GCD(machine, IM)); |
| 504 | BG0 = auto_alloc(machine, SDD1_BG(machine, GCD, 0)); |
| 505 | BG1 = auto_alloc(machine, SDD1_BG(machine, GCD, 1)); |
| 506 | BG2 = auto_alloc(machine, SDD1_BG(machine, GCD, 2)); |
| 507 | BG3 = auto_alloc(machine, SDD1_BG(machine, GCD, 3)); |
| 508 | BG4 = auto_alloc(machine, SDD1_BG(machine, GCD, 4)); |
| 509 | BG5 = auto_alloc(machine, SDD1_BG(machine, GCD, 5)); |
| 510 | BG6 = auto_alloc(machine, SDD1_BG(machine, GCD, 6)); |
| 511 | BG7 = auto_alloc(machine, SDD1_BG(machine, GCD, 7)); |
| 512 | PEM = auto_alloc(machine, SDD1_PEM(machine, BG0, BG1, BG2, BG3, |
| 513 | BG4, BG5, BG6, BG7)); |
| 514 | CM = auto_alloc(machine, SDD1_CM(machine, PEM)); |
| 515 | OL = auto_alloc(machine, SDD1_OL(machine, CM)); |
| 518 | 516 | } |
| 519 | 517 | |
| 520 | 518 | static void SDD1emu_decompress(SDD1emu* thisptr, UINT32 in_buf, UINT16 out_len, UINT8 *out_buf) |
| r11240 | r11241 | |
| 577 | 575 | snes_sdd1.dma[i].size = 0; |
| 578 | 576 | } |
| 579 | 577 | |
| 580 | | snes_sdd1.sdd1emu = SDD1emu_ctor(machine); |
| 578 | snes_sdd1.sdd1emu = auto_alloc(machine, SDD1emu(machine)); |
| 581 | 579 | |
| 582 | 580 | snes_sdd1.buffer.data = (UINT8*)auto_alloc_array(machine, UINT8, 0x10000); |
| 583 | 581 | snes_sdd1.buffer.ready = 0; |
src/mame/machine/cdicdic.c
| r11240 | r11241 | |
| 448 | 448 | { |
| 449 | 449 | // Get XA format from sector header |
| 450 | 450 | |
| 451 | | cdi_state *state = m_machine.driver_data<cdi_state>(); |
| 451 | cdi_state *state = machine().driver_data<cdi_state>(); |
| 452 | 452 | const UINT8 *hdr = xa + 4; |
| 453 | 453 | INT32 channels; |
| 454 | 454 | INT32 bits = 4; |
| r11240 | r11241 | |
| 460 | 460 | return; |
| 461 | 461 | } |
| 462 | 462 | |
| 463 | | verboselog(m_machine, 0, "decode_audio_sector, got header type %02x\n", hdr[2] ); |
| 463 | verboselog(machine(), 0, "decode_audio_sector, got header type %02x\n", hdr[2] ); |
| 464 | 464 | |
| 465 | 465 | switch(hdr[2] & 0x3f) // ignore emphasis and reserved bits |
| 466 | 466 | { |
| r11240 | r11241 | |
| 573 | 573 | { |
| 574 | 574 | if(m_decode_addr == 0xffff) |
| 575 | 575 | { |
| 576 | | verboselog(m_machine, 0, "Decode stop requested, stopping playback\n" ); |
| 576 | verboselog(machine(), 0, "Decode stop requested, stopping playback\n" ); |
| 577 | 577 | m_audio_sample_timer->adjust(attotime::never); |
| 578 | 578 | return; |
| 579 | 579 | } |
| r11240 | r11241 | |
| 581 | 581 | if(!m_decode_delay) |
| 582 | 582 | { |
| 583 | 583 | // Indicate that data has been decoded |
| 584 | | verboselog(m_machine, 0, "Flagging that audio data has been decoded\n" ); |
| 584 | verboselog(machine(), 0, "Flagging that audio data has been decoded\n" ); |
| 585 | 585 | m_audio_buffer |= 0x8000; |
| 586 | 586 | |
| 587 | 587 | // Set the CDIC interrupt line |
| 588 | | verboselog(m_machine, 0, "Setting CDIC interrupt line for soundmap decode\n" ); |
| 589 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_4, 128); |
| 590 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 588 | verboselog(machine(), 0, "Setting CDIC interrupt line for soundmap decode\n" ); |
| 589 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_4, 128); |
| 590 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 591 | 591 | } |
| 592 | 592 | else |
| 593 | 593 | { |
| r11240 | r11241 | |
| 596 | 596 | |
| 597 | 597 | if(CDIC_IS_VALID_SAMPLE_BUF(m_ram, m_decode_addr & 0x3ffe)) |
| 598 | 598 | { |
| 599 | | verboselog(m_machine, 0, "Hit audio_sample_trigger, with m_decode_addr == %04x, calling decode_audio_sector\n", m_decode_addr ); |
| 599 | verboselog(machine(), 0, "Hit audio_sample_trigger, with m_decode_addr == %04x, calling decode_audio_sector\n", m_decode_addr ); |
| 600 | 600 | |
| 601 | 601 | // Decode the data at Z+4, the same offset as a normal CD sector. |
| 602 | 602 | decode_audio_sector(((UINT8*)m_ram) + (m_decode_addr & 0x3ffe) + 4, 1); |
| r11240 | r11241 | |
| 604 | 604 | // Swap buffer positions to indicate our new buffer position at the next read |
| 605 | 605 | m_decode_addr ^= 0x1a00; |
| 606 | 606 | |
| 607 | | verboselog(m_machine, 0, "Updated m_decode_addr, new value is %04x\n", m_decode_addr ); |
| 607 | verboselog(machine(), 0, "Updated m_decode_addr, new value is %04x\n", m_decode_addr ); |
| 608 | 608 | |
| 609 | 609 | //// Delay for Frequency * (18*28*2*size in bytes) before requesting more data |
| 610 | | verboselog(m_machine, 0, "Data is valid, setting up a new callback\n" ); |
| 610 | verboselog(machine(), 0, "Data is valid, setting up a new callback\n" ); |
| 611 | 611 | m_decode_period = attotime::from_hz(CDIC_SAMPLE_BUF_FREQ(m_ram, m_decode_addr & 0x3ffe)) * (18*28*2*CDIC_SAMPLE_BUF_SIZE(m_ram, m_decode_addr & 0x3ffe)); |
| 612 | 612 | m_audio_sample_timer->adjust(m_decode_period); |
| 613 | 613 | //dmadac_enable(&dmadac[0], 2, 0); |
| r11240 | r11241 | |
| 617 | 617 | // Swap buffer positions to indicate our new buffer position at the next read |
| 618 | 618 | m_decode_addr ^= 0x1a00; |
| 619 | 619 | |
| 620 | | verboselog(m_machine, 0, "Data is not valid, indicating to shut down on the next audio sample\n" ); |
| 620 | verboselog(machine(), 0, "Data is not valid, indicating to shut down on the next audio sample\n" ); |
| 621 | 621 | m_decode_addr = 0xffff; |
| 622 | 622 | m_audio_sample_timer->adjust(m_decode_period); |
| 623 | 623 | } |
| r11240 | r11241 | |
| 686 | 686 | lba = nybbles[0] + nybbles[1]*10 + ((nybbles[2] + nybbles[3]*10)*75) + ((nybbles[4] + nybbles[5]*10)*75*60); |
| 687 | 687 | |
| 688 | 688 | //printf( "Reading Mode %d sector from MSF location %06x\n", m_command - 0x28, m_time | 2 ); |
| 689 | | verboselog(m_machine, 0, "Reading Mode %d sector from MSF location %06x\n", m_command - 0x28, m_time | 2 ); |
| 689 | verboselog(machine(), 0, "Reading Mode %d sector from MSF location %06x\n", m_command - 0x28, m_time | 2 ); |
| 690 | 690 | |
| 691 | 691 | cdrom_read_data(m_cd, lba, buffer, CD_TRACK_RAW_DONTCARE); |
| 692 | 692 | |
| r11240 | r11241 | |
| 725 | 725 | if(((buffer[CDIC_SECTOR_SUBMODE2] & (CDIC_SUBMODE_FORM | CDIC_SUBMODE_DATA | CDIC_SUBMODE_AUDIO | CDIC_SUBMODE_VIDEO)) == (CDIC_SUBMODE_FORM | CDIC_SUBMODE_AUDIO)) && |
| 726 | 726 | (m_channel & m_audio_channel & (1 << buffer[CDIC_SECTOR_CHAN2]))) |
| 727 | 727 | { |
| 728 | | verboselog(m_machine, 0, "Audio sector\n" ); |
| 728 | verboselog(machine(), 0, "Audio sector\n" ); |
| 729 | 729 | |
| 730 | 730 | m_x_buffer |= 0x8000; |
| 731 | 731 | //m_data_buffer |= 0x4000; |
| r11240 | r11241 | |
| 739 | 739 | decode_audio_sector(((UINT8*)m_ram) + ((m_data_buffer & 5) * 0xa00 + 4), 0); |
| 740 | 740 | |
| 741 | 741 | //printf( "Setting CDIC interrupt line\n" ); |
| 742 | | verboselog(m_machine, 0, "Setting CDIC interrupt line for audio sector\n" ); |
| 743 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_4, 128); |
| 744 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 742 | verboselog(machine(), 0, "Setting CDIC interrupt line for audio sector\n" ); |
| 743 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_4, 128); |
| 744 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 745 | 745 | } |
| 746 | 746 | else if((buffer[CDIC_SECTOR_SUBMODE2] & (CDIC_SUBMODE_DATA | CDIC_SUBMODE_AUDIO | CDIC_SUBMODE_VIDEO)) == 0x00) |
| 747 | 747 | { |
| r11240 | r11241 | |
| 758 | 758 | (buffer[CDIC_SECTOR_SUBMODE2] & CDIC_SUBMODE_EOF) == CDIC_SUBMODE_EOF) |
| 759 | 759 | { |
| 760 | 760 | //printf( "Setting CDIC interrupt line\n" ); |
| 761 | | verboselog(m_machine, 0, "Setting CDIC interrupt line for message sector\n" ); |
| 762 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_4, 128); |
| 763 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 761 | verboselog(machine(), 0, "Setting CDIC interrupt line for message sector\n" ); |
| 762 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_4, 128); |
| 763 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 764 | 764 | } |
| 765 | 765 | else |
| 766 | 766 | { |
| 767 | | verboselog(m_machine, 0, "Message sector, ignored\n" ); |
| 767 | verboselog(machine(), 0, "Message sector, ignored\n" ); |
| 768 | 768 | } |
| 769 | 769 | } |
| 770 | 770 | else |
| r11240 | r11241 | |
| 778 | 778 | } |
| 779 | 779 | |
| 780 | 780 | //printf( "Setting CDIC interrupt line\n" ); |
| 781 | | verboselog(m_machine, 0, "Setting CDIC interrupt line for data sector\n" ); |
| 782 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_4, 128); |
| 783 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 781 | verboselog(machine(), 0, "Setting CDIC interrupt line for data sector\n" ); |
| 782 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_4, 128); |
| 783 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 784 | 784 | } |
| 785 | 785 | |
| 786 | 786 | if((buffer[CDIC_SECTOR_SUBMODE2] & CDIC_SUBMODE_EOF) == 0 && m_command != 0x23) |
| r11240 | r11241 | |
| 842 | 842 | if(!(msf & 0x0000ff)) |
| 843 | 843 | { |
| 844 | 844 | next_lba = next_nybbles[0] + next_nybbles[1]*10 + ((next_nybbles[2] + next_nybbles[3]*10)*75) + ((next_nybbles[4] + next_nybbles[5]*10)*75*60); |
| 845 | | verboselog(m_machine, 0, "Playing CDDA sector from MSF location %06x\n", m_time | 2 ); |
| 845 | verboselog(machine(), 0, "Playing CDDA sector from MSF location %06x\n", m_time | 2 ); |
| 846 | 846 | |
| 847 | | cdda_start_audio(m_machine.device("cdda"), lba, rounded_next_msf); |
| 847 | cdda_start_audio(machine().device("cdda"), lba, rounded_next_msf); |
| 848 | 848 | } |
| 849 | 849 | |
| 850 | 850 | m_ram[(m_data_buffer & 5) * (0xa00/2) + 0x924/2] = 0x0001; // CTRL |
| r11240 | r11241 | |
| 873 | 873 | m_ram[(m_data_buffer & 5) * (0xa00/2) + (index - 6)] = (buffer[index*2] << 8) | buffer[index*2 + 1]; |
| 874 | 874 | } |
| 875 | 875 | |
| 876 | | verboselog(m_machine, 0, "Setting CDIC interrupt line for CDDA sector\n" ); |
| 877 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_4, 128); |
| 878 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 876 | verboselog(machine(), 0, "Setting CDIC interrupt line for CDDA sector\n" ); |
| 877 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_4, 128); |
| 878 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 879 | 879 | break; |
| 880 | 880 | } |
| 881 | 881 | case 0x2c: // Seek |
| r11240 | r11241 | |
| 924 | 924 | |
| 925 | 925 | m_time = next_msf << 8; |
| 926 | 926 | |
| 927 | | verboselog(m_machine, 0, "Setting CDIC interrupt line for Seek sector\n" ); |
| 928 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_4, 128); |
| 929 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 927 | verboselog(machine(), 0, "Setting CDIC interrupt line for Seek sector\n" ); |
| 928 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_4, 128); |
| 929 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, ASSERT_LINE); |
| 930 | 930 | break; |
| 931 | 931 | } |
| 932 | 932 | } |
| r11240 | r11241 | |
| 944 | 944 | switch(addr) |
| 945 | 945 | { |
| 946 | 946 | case 0x3c00/2: // Command register |
| 947 | | verboselog(m_machine, 0, "cdic_r: Command Register = %04x & %04x\n", m_command, mem_mask); |
| 947 | verboselog(machine(), 0, "cdic_r: Command Register = %04x & %04x\n", m_command, mem_mask); |
| 948 | 948 | return m_command; |
| 949 | 949 | |
| 950 | 950 | case 0x3c02/2: // Time register (MSW) |
| 951 | | verboselog(m_machine, 0, "cdic_r: Time Register (MSW) = %04x & %04x\n", m_time >> 16, mem_mask); |
| 951 | verboselog(machine(), 0, "cdic_r: Time Register (MSW) = %04x & %04x\n", m_time >> 16, mem_mask); |
| 952 | 952 | return m_time >> 16; |
| 953 | 953 | |
| 954 | 954 | case 0x3c04/2: // Time register (LSW) |
| 955 | | verboselog(m_machine, 0, "cdic_r: Time Register (LSW) = %04x & %04x\n", (UINT16)(m_time & 0x0000ffff), mem_mask); |
| 955 | verboselog(machine(), 0, "cdic_r: Time Register (LSW) = %04x & %04x\n", (UINT16)(m_time & 0x0000ffff), mem_mask); |
| 956 | 956 | return m_time & 0x0000ffff; |
| 957 | 957 | |
| 958 | 958 | case 0x3c06/2: // File register |
| 959 | | verboselog(m_machine, 0, "cdic_r: File Register = %04x & %04x\n", m_file, mem_mask); |
| 959 | verboselog(machine(), 0, "cdic_r: File Register = %04x & %04x\n", m_file, mem_mask); |
| 960 | 960 | return m_file; |
| 961 | 961 | |
| 962 | 962 | case 0x3c08/2: // Channel register (MSW) |
| 963 | | verboselog(m_machine, 0, "cdic_r: Channel Register (MSW) = %04x & %04x\n", m_channel >> 16, mem_mask); |
| 963 | verboselog(machine(), 0, "cdic_r: Channel Register (MSW) = %04x & %04x\n", m_channel >> 16, mem_mask); |
| 964 | 964 | return m_channel >> 16; |
| 965 | 965 | |
| 966 | 966 | case 0x3c0a/2: // Channel register (LSW) |
| 967 | | verboselog(m_machine, 0, "cdic_r: Channel Register (LSW) = %04x & %04x\n", m_channel & 0x0000ffff, mem_mask); |
| 967 | verboselog(machine(), 0, "cdic_r: Channel Register (LSW) = %04x & %04x\n", m_channel & 0x0000ffff, mem_mask); |
| 968 | 968 | return m_channel & 0x0000ffff; |
| 969 | 969 | |
| 970 | 970 | case 0x3c0c/2: // Audio Channel register |
| 971 | | verboselog(m_machine, 0, "cdic_r: Audio Channel Register = %04x & %04x\n", m_audio_channel, mem_mask); |
| 971 | verboselog(machine(), 0, "cdic_r: Audio Channel Register = %04x & %04x\n", m_audio_channel, mem_mask); |
| 972 | 972 | return m_audio_channel; |
| 973 | 973 | |
| 974 | 974 | case 0x3ff4/2: // ABUF |
| r11240 | r11241 | |
| 977 | 977 | m_audio_buffer &= 0x7fff; |
| 978 | 978 | if(!((m_audio_buffer | m_x_buffer) & 0x8000)) |
| 979 | 979 | { |
| 980 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, CLEAR_LINE); |
| 981 | | verboselog(m_machine, 0, "Clearing CDIC interrupt line\n" ); |
| 980 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, CLEAR_LINE); |
| 981 | verboselog(machine(), 0, "Clearing CDIC interrupt line\n" ); |
| 982 | 982 | ////printf("Clearing CDIC interrupt line\n" ); |
| 983 | 983 | } |
| 984 | | verboselog(m_machine, 0, "cdic_r: Audio Buffer Register = %04x & %04x\n", temp, mem_mask); |
| 984 | verboselog(machine(), 0, "cdic_r: Audio Buffer Register = %04x & %04x\n", temp, mem_mask); |
| 985 | 985 | return temp; |
| 986 | 986 | } |
| 987 | 987 | |
| r11240 | r11241 | |
| 991 | 991 | m_x_buffer &= 0x7fff; |
| 992 | 992 | if(!((m_audio_buffer | m_x_buffer) & 0x8000)) |
| 993 | 993 | { |
| 994 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_4, CLEAR_LINE); |
| 995 | | verboselog(m_machine, 0, "Clearing CDIC interrupt line\n" ); |
| 994 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_4, CLEAR_LINE); |
| 995 | verboselog(machine(), 0, "Clearing CDIC interrupt line\n" ); |
| 996 | 996 | ////printf("Clearing CDIC interrupt line\n" ); |
| 997 | 997 | } |
| 998 | | verboselog(m_machine, 0, "cdic_r: X-Buffer Register = %04x & %04x\n", temp, mem_mask); |
| 998 | verboselog(machine(), 0, "cdic_r: X-Buffer Register = %04x & %04x\n", temp, mem_mask); |
| 999 | 999 | return temp; |
| 1000 | 1000 | } |
| 1001 | 1001 | |
| r11240 | r11241 | |
| 1005 | 1005 | { |
| 1006 | 1006 | m_z_buffer ^= 0x0001; |
| 1007 | 1007 | } |
| 1008 | | verboselog(m_machine, 0, "cdic_r: Z-Buffer Register = %04x & %04x\n", m_z_buffer, mem_mask); |
| 1008 | verboselog(machine(), 0, "cdic_r: Z-Buffer Register = %04x & %04x\n", m_z_buffer, mem_mask); |
| 1009 | 1009 | return m_z_buffer; |
| 1010 | 1010 | } |
| 1011 | 1011 | |
| 1012 | 1012 | case 0x3ffe/2: |
| 1013 | 1013 | { |
| 1014 | | verboselog(m_machine, 0, "cdic_r: Data buffer Register = %04x & %04x\n", m_data_buffer, mem_mask); |
| 1014 | verboselog(machine(), 0, "cdic_r: Data buffer Register = %04x & %04x\n", m_data_buffer, mem_mask); |
| 1015 | 1015 | return m_data_buffer; |
| 1016 | 1016 | } |
| 1017 | 1017 | default: |
| 1018 | | verboselog(m_machine, 0, "cdic_r: UNIMPLEMENTED: Unknown address: %04x & %04x\n", addr*2, mem_mask); |
| 1018 | verboselog(machine(), 0, "cdic_r: UNIMPLEMENTED: Unknown address: %04x & %04x\n", addr*2, mem_mask); |
| 1019 | 1019 | return 0; |
| 1020 | 1020 | } |
| 1021 | 1021 | } |
| r11240 | r11241 | |
| 1027 | 1027 | |
| 1028 | 1028 | void cdicdic_device::register_write(const UINT32 offset, const UINT16 data, const UINT16 mem_mask) |
| 1029 | 1029 | { |
| 1030 | | cdi_state *state = m_machine.driver_data<cdi_state>(); |
| 1030 | cdi_state *state = machine().driver_data<cdi_state>(); |
| 1031 | 1031 | |
| 1032 | 1032 | UINT32 addr = offset + 0x3c00/2; |
| 1033 | 1033 | |
| 1034 | 1034 | switch(addr) |
| 1035 | 1035 | { |
| 1036 | 1036 | case 0x3c00/2: // Command register |
| 1037 | | verboselog(m_machine, 0, "cdic_w: Command Register = %04x & %04x\n", data, mem_mask); |
| 1037 | verboselog(machine(), 0, "cdic_w: Command Register = %04x & %04x\n", data, mem_mask); |
| 1038 | 1038 | COMBINE_DATA(&m_command); |
| 1039 | 1039 | break; |
| 1040 | 1040 | |
| 1041 | 1041 | case 0x3c02/2: // Time register (MSW) |
| 1042 | 1042 | m_time &= ~(mem_mask << 16); |
| 1043 | 1043 | m_time |= (data & mem_mask) << 16; |
| 1044 | | verboselog(m_machine, 0, "cdic_w: Time Register (MSW) = %04x & %04x\n", data, mem_mask); |
| 1044 | verboselog(machine(), 0, "cdic_w: Time Register (MSW) = %04x & %04x\n", data, mem_mask); |
| 1045 | 1045 | break; |
| 1046 | 1046 | |
| 1047 | 1047 | case 0x3c04/2: // Time register (LSW) |
| 1048 | 1048 | m_time &= ~mem_mask; |
| 1049 | 1049 | m_time |= data & mem_mask; |
| 1050 | | verboselog(m_machine, 0, "cdic_w: Time Register (LSW) = %04x & %04x\n", data, mem_mask); |
| 1050 | verboselog(machine(), 0, "cdic_w: Time Register (LSW) = %04x & %04x\n", data, mem_mask); |
| 1051 | 1051 | break; |
| 1052 | 1052 | |
| 1053 | 1053 | case 0x3c06/2: // File register |
| 1054 | | verboselog(m_machine, 0, "cdic_w: File Register = %04x & %04x\n", data, mem_mask); |
| 1054 | verboselog(machine(), 0, "cdic_w: File Register = %04x & %04x\n", data, mem_mask); |
| 1055 | 1055 | COMBINE_DATA(&m_file); |
| 1056 | 1056 | break; |
| 1057 | 1057 | |
| 1058 | 1058 | case 0x3c08/2: // Channel register (MSW) |
| 1059 | 1059 | m_channel &= ~(mem_mask << 16); |
| 1060 | 1060 | m_channel |= (data & mem_mask) << 16; |
| 1061 | | verboselog(m_machine, 0, "cdic_w: Channel Register (MSW) = %04x & %04x\n", data, mem_mask); |
| 1061 | verboselog(machine(), 0, "cdic_w: Channel Register (MSW) = %04x & %04x\n", data, mem_mask); |
| 1062 | 1062 | break; |
| 1063 | 1063 | |
| 1064 | 1064 | case 0x3c0a/2: // Channel register (LSW) |
| 1065 | 1065 | m_channel &= ~mem_mask; |
| 1066 | 1066 | m_channel |= data & mem_mask; |
| 1067 | | verboselog(m_machine, 0, "cdic_w: Channel Register (LSW) = %04x & %04x\n", data, mem_mask); |
| 1067 | verboselog(machine(), 0, "cdic_w: Channel Register (LSW) = %04x & %04x\n", data, mem_mask); |
| 1068 | 1068 | break; |
| 1069 | 1069 | |
| 1070 | 1070 | case 0x3c0c/2: // Audio Channel register |
| 1071 | | verboselog(m_machine, 0, "cdic_w: Audio Channel Register = %04x & %04x\n", data, mem_mask); |
| 1071 | verboselog(machine(), 0, "cdic_w: Audio Channel Register = %04x & %04x\n", data, mem_mask); |
| 1072 | 1072 | COMBINE_DATA(&m_audio_channel); |
| 1073 | 1073 | break; |
| 1074 | 1074 | |
| 1075 | 1075 | case 0x3ff4/2: |
| 1076 | | verboselog(m_machine, 0, "cdic_w: Audio Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1076 | verboselog(machine(), 0, "cdic_w: Audio Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1077 | 1077 | COMBINE_DATA(&m_audio_buffer); |
| 1078 | 1078 | break; |
| 1079 | 1079 | |
| 1080 | 1080 | case 0x3ff6/2: |
| 1081 | | verboselog(m_machine, 0, "cdic_w: X Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1081 | verboselog(machine(), 0, "cdic_w: X Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1082 | 1082 | COMBINE_DATA(&m_x_buffer); |
| 1083 | 1083 | break; |
| 1084 | 1084 | |
| r11240 | r11241 | |
| 1090 | 1090 | UINT32 index = 0; |
| 1091 | 1091 | UINT32 device_index = (data & 0x3fff) >> 1; |
| 1092 | 1092 | UINT16 *memory = state->m_planea; |
| 1093 | | verboselog(m_machine, 0, "memory address counter: %08x\n", scc68070->dma.channel[0].memory_address_counter); |
| 1094 | | verboselog(m_machine, 0, "cdic_w: DMA Control Register = %04x & %04x\n", data, mem_mask); |
| 1095 | | verboselog(m_machine, 0, "Doing copy, transferring %04x bytes\n", count * 2 ); |
| 1093 | verboselog(machine(), 0, "memory address counter: %08x\n", scc68070->dma.channel[0].memory_address_counter); |
| 1094 | verboselog(machine(), 0, "cdic_w: DMA Control Register = %04x & %04x\n", data, mem_mask); |
| 1095 | verboselog(machine(), 0, "Doing copy, transferring %04x bytes\n", count * 2 ); |
| 1096 | 1096 | ////printf("Doing copy, transferring %04x bytes\n", count * 2 ); |
| 1097 | 1097 | if((start & 0x00f00000) == 0x00200000) |
| 1098 | 1098 | { |
| r11240 | r11241 | |
| 1116 | 1116 | |
| 1117 | 1117 | case 0x3ffa/2: |
| 1118 | 1118 | { |
| 1119 | | verboselog(m_machine, 0, "cdic_w: Z-Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1119 | verboselog(machine(), 0, "cdic_w: Z-Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1120 | 1120 | COMBINE_DATA(&m_z_buffer); |
| 1121 | 1121 | if(m_z_buffer & 0x2000) |
| 1122 | 1122 | { |
| r11240 | r11241 | |
| 1136 | 1136 | break; |
| 1137 | 1137 | } |
| 1138 | 1138 | case 0x3ffc/2: |
| 1139 | | verboselog(m_machine, 0, "cdic_w: Interrupt Vector Register = %04x & %04x\n", data, mem_mask); |
| 1139 | verboselog(machine(), 0, "cdic_w: Interrupt Vector Register = %04x & %04x\n", data, mem_mask); |
| 1140 | 1140 | COMBINE_DATA(&m_interrupt_vector); |
| 1141 | 1141 | break; |
| 1142 | 1142 | case 0x3ffe/2: |
| 1143 | 1143 | { |
| 1144 | | verboselog(m_machine, 0, "cdic_w: Data Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1144 | verboselog(machine(), 0, "cdic_w: Data Buffer Register = %04x & %04x\n", data, mem_mask); |
| 1145 | 1145 | COMBINE_DATA(&m_data_buffer); |
| 1146 | 1146 | if(m_data_buffer & 0x8000) |
| 1147 | 1147 | { |
| r11240 | r11241 | |
| 1156 | 1156 | break; |
| 1157 | 1157 | } |
| 1158 | 1158 | case 0x2b: // Stop CDDA |
| 1159 | | cdda_stop_audio(m_machine.device("cdda")); |
| 1159 | cdda_stop_audio(machine().device("cdda")); |
| 1160 | 1160 | m_interrupt_timer->adjust(attotime::never); |
| 1161 | 1161 | break; |
| 1162 | 1162 | case 0x23: // Reset Mode 1 |
| r11240 | r11241 | |
| 1180 | 1180 | break; |
| 1181 | 1181 | } |
| 1182 | 1182 | default: |
| 1183 | | verboselog(m_machine, 0, "Unknown CDIC command: %02x\n", m_command ); |
| 1183 | verboselog(machine(), 0, "Unknown CDIC command: %02x\n", m_command ); |
| 1184 | 1184 | break; |
| 1185 | 1185 | } |
| 1186 | 1186 | } |
| r11240 | r11241 | |
| 1188 | 1188 | break; |
| 1189 | 1189 | } |
| 1190 | 1190 | default: |
| 1191 | | verboselog(m_machine, 0, "cdic_w: UNIMPLEMENTED: Unknown address: %04x = %04x & %04x\n", addr*2, data, mem_mask); |
| 1191 | verboselog(machine(), 0, "cdic_w: UNIMPLEMENTED: Unknown address: %04x = %04x & %04x\n", addr*2, data, mem_mask); |
| 1192 | 1192 | break; |
| 1193 | 1193 | } |
| 1194 | 1194 | } |
| r11240 | r11241 | |
| 1216 | 1216 | { |
| 1217 | 1217 | register_globals(); |
| 1218 | 1218 | |
| 1219 | | m_interrupt_timer = m_machine.scheduler().timer_alloc(FUNC(trigger_readback_int)); |
| 1219 | m_interrupt_timer = machine().scheduler().timer_alloc(FUNC(trigger_readback_int)); |
| 1220 | 1220 | m_interrupt_timer->adjust(attotime::never); |
| 1221 | 1221 | |
| 1222 | | m_audio_sample_timer = m_machine.scheduler().timer_alloc(FUNC(audio_sample_trigger)); |
| 1222 | m_audio_sample_timer = machine().scheduler().timer_alloc(FUNC(audio_sample_trigger)); |
| 1223 | 1223 | m_audio_sample_timer->adjust(attotime::never); |
| 1224 | 1224 | |
| 1225 | | m_ram = auto_alloc_array(m_machine, UINT16, 0x3c00/2); |
| 1225 | m_ram = auto_alloc_array(machine(), UINT16, 0x3c00/2); |
| 1226 | 1226 | } |
| 1227 | 1227 | |
| 1228 | 1228 | //------------------------------------------------- |
| r11240 | r11241 | |
| 1233 | 1233 | { |
| 1234 | 1234 | init(); |
| 1235 | 1235 | |
| 1236 | | device_t *cdrom_dev = m_machine.device("cdrom"); |
| 1236 | device_t *cdrom_dev = machine().device("cdrom"); |
| 1237 | 1237 | if( cdrom_dev ) |
| 1238 | 1238 | { |
| 1239 | 1239 | // MESS case (has CDROM device) |
| 1240 | 1240 | m_cd = cd_get_cdrom_file(cdrom_dev); |
| 1241 | | cdda_set_cdrom(m_machine.device("cdda"), m_cd); |
| 1241 | cdda_set_cdrom(machine().device("cdda"), m_cd); |
| 1242 | 1242 | } |
| 1243 | 1243 | else |
| 1244 | 1244 | { |
| 1245 | 1245 | // MAME case |
| 1246 | | m_cd = cdrom_open(get_disk_handle(m_machine, "cdrom")); |
| 1247 | | cdda_set_cdrom(m_machine.device("cdda"), m_cd); |
| 1246 | m_cd = cdrom_open(get_disk_handle(machine(), "cdrom")); |
| 1247 | cdda_set_cdrom(machine().device("cdda"), m_cd); |
| 1248 | 1248 | } |
| 1249 | 1249 | } |
| 1250 | 1250 | |
| r11240 | r11241 | |
| 1294 | 1294 | |
| 1295 | 1295 | void cdicdic_device::ram_write(const UINT32 offset, const UINT16 data, const UINT16 mem_mask) |
| 1296 | 1296 | { |
| 1297 | | verboselog(m_machine, 5, "cdic_ram_w: %08x = %04x & %04x\n", 0x00300000 + offset*2, data, mem_mask); |
| 1297 | verboselog(machine(), 5, "cdic_ram_w: %08x = %04x & %04x\n", 0x00300000 + offset*2, data, mem_mask); |
| 1298 | 1298 | COMBINE_DATA(&m_ram[offset]); |
| 1299 | 1299 | } |
| 1300 | 1300 | |
| r11240 | r11241 | |
| 1305 | 1305 | |
| 1306 | 1306 | UINT16 cdicdic_device::ram_read(const UINT32 offset, const UINT16 mem_mask) |
| 1307 | 1307 | { |
| 1308 | | verboselog(m_machine, 5, "cdic_ram_r: %08x = %04x & %04x\n", 0x00300000 + offset * 2, m_ram[offset], mem_mask); |
| 1308 | verboselog(machine(), 5, "cdic_ram_r: %08x = %04x & %04x\n", 0x00300000 + offset * 2, m_ram[offset], mem_mask); |
| 1309 | 1309 | return m_ram[offset]; |
| 1310 | 1310 | } |
| 1311 | 1311 | |
src/mame/machine/cdislave.c
| r11240 | r11241 | |
| 90 | 90 | |
| 91 | 91 | void cdislave_device::readback_trigger() |
| 92 | 92 | { |
| 93 | | verboselog(m_machine, 0, "Asserting IRQ2\n" ); |
| 94 | | device_set_input_line_vector(m_machine.device("maincpu"), M68K_IRQ_2, 26); |
| 95 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_2, ASSERT_LINE); |
| 93 | verboselog(machine(), 0, "Asserting IRQ2\n" ); |
| 94 | device_set_input_line_vector(machine().device("maincpu"), M68K_IRQ_2, 26); |
| 95 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_2, ASSERT_LINE); |
| 96 | 96 | m_interrupt_timer->adjust(attotime::never); |
| 97 | 97 | } |
| 98 | 98 | |
| r11240 | r11241 | |
| 111 | 111 | |
| 112 | 112 | void cdislave_device::perform_mouse_update() |
| 113 | 113 | { |
| 114 | | UINT16 x = input_port_read(m_machine, "MOUSEX"); |
| 115 | | UINT16 y = input_port_read(m_machine, "MOUSEY"); |
| 116 | | UINT8 buttons = input_port_read(m_machine, "MOUSEBTN"); |
| 114 | UINT16 x = input_port_read(machine(), "MOUSEX"); |
| 115 | UINT16 y = input_port_read(machine(), "MOUSEY"); |
| 116 | UINT8 buttons = input_port_read(machine(), "MOUSEBTN"); |
| 117 | 117 | |
| 118 | 118 | UINT16 old_mouse_x = m_real_mouse_x; |
| 119 | 119 | UINT16 old_mouse_y = m_real_mouse_y; |
| r11240 | r11241 | |
| 165 | 165 | if(m_channel[offset].m_out_count) |
| 166 | 166 | { |
| 167 | 167 | UINT8 ret = m_channel[offset].m_out_buf[m_channel[offset].m_out_index]; |
| 168 | | verboselog(m_machine, 0, "slave_r: Channel %d: %d, %02x\n", offset, m_channel[offset].m_out_index, ret ); |
| 168 | verboselog(machine(), 0, "slave_r: Channel %d: %d, %02x\n", offset, m_channel[offset].m_out_index, ret ); |
| 169 | 169 | if(m_channel[offset].m_out_index == 0) |
| 170 | 170 | { |
| 171 | 171 | switch(m_channel[offset].m_out_cmd) |
| r11240 | r11241 | |
| 176 | 176 | case 0xf3: |
| 177 | 177 | case 0xf4: |
| 178 | 178 | case 0xf7: |
| 179 | | verboselog(m_machine, 0, "slave_r: De-asserting IRQ2\n" ); |
| 180 | | cputag_set_input_line(m_machine, "maincpu", M68K_IRQ_2, CLEAR_LINE); |
| 179 | verboselog(machine(), 0, "slave_r: De-asserting IRQ2\n" ); |
| 180 | cputag_set_input_line(machine(), "maincpu", M68K_IRQ_2, CLEAR_LINE); |
| 181 | 181 | break; |
| 182 | 182 | } |
| 183 | 183 | } |
| r11240 | r11241 | |
| 191 | 191 | } |
| 192 | 192 | return ret; |
| 193 | 193 | } |
| 194 | | verboselog(m_machine, 0, "slave_r: Channel %d: %d\n", offset, m_channel[offset].m_out_index ); |
| 194 | verboselog(machine(), 0, "slave_r: Channel %d: %d\n", offset, m_channel[offset].m_out_index ); |
| 195 | 195 | return 0xff; |
| 196 | 196 | } |
| 197 | 197 | |
| r11240 | r11241 | |
| 220 | 220 | |
| 221 | 221 | void cdislave_device::register_write(const UINT32 offset, const UINT16 data, const UINT16 mem_mask) |
| 222 | 222 | { |
| 223 | | cdi_state *state = m_machine.driver_data<cdi_state>(); |
| 223 | cdi_state *state = machine().driver_data<cdi_state>(); |
| 224 | 224 | |
| 225 | 225 | switch(offset) |
| 226 | 226 | { |
| 227 | 227 | case 0: |
| 228 | 228 | if(m_in_index) |
| 229 | 229 | { |
| 230 | | verboselog(m_machine, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 230 | verboselog(machine(), 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 231 | 231 | m_in_buf[m_in_index] = data & 0x00ff; |
| 232 | 232 | m_in_index++; |
| 233 | 233 | if(m_in_index == m_in_count) |
| r11240 | r11241 | |
| 264 | 264 | case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: |
| 265 | 265 | case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: |
| 266 | 266 | case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: |
| 267 | | verboselog(m_machine, 0, "slave_w: Channel %d: Update Mouse Position (0x%02x)\n", offset, data & 0x00ff ); |
| 267 | verboselog(machine(), 0, "slave_w: Channel %d: Update Mouse Position (0x%02x)\n", offset, data & 0x00ff ); |
| 268 | 268 | m_in_count = 3; |
| 269 | 269 | break; |
| 270 | 270 | default: |
| 271 | | verboselog(m_machine, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 271 | verboselog(machine(), 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 272 | 272 | m_in_index = 0; |
| 273 | 273 | break; |
| 274 | 274 | } |
| r11240 | r11241 | |
| 277 | 277 | case 1: |
| 278 | 278 | if(m_in_index) |
| 279 | 279 | { |
| 280 | | verboselog(m_machine, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 280 | verboselog(machine(), 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 281 | 281 | m_in_buf[m_in_index] = data & 0x00ff; |
| 282 | 282 | m_in_index++; |
| 283 | 283 | if(m_in_index == m_in_count) |
| r11240 | r11241 | |
| 303 | 303 | switch(data & 0x00ff) |
| 304 | 304 | { |
| 305 | 305 | default: |
| 306 | | verboselog(m_machine, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 306 | verboselog(machine(), 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 307 | 307 | memset(m_in_buf, 0, 17); |
| 308 | 308 | m_in_index = 0; |
| 309 | 309 | m_in_count = 0; |
| r11240 | r11241 | |
| 314 | 314 | case 2: |
| 315 | 315 | if(m_in_index) |
| 316 | 316 | { |
| 317 | | verboselog(m_machine, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 317 | verboselog(machine(), 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 318 | 318 | m_in_buf[m_in_index] = data & 0x00ff; |
| 319 | 319 | m_in_index++; |
| 320 | 320 | if(m_in_index == m_in_count) |
| r11240 | r11241 | |
| 340 | 340 | switch(data & 0x00ff) |
| 341 | 341 | { |
| 342 | 342 | case 0x82: // Mute Audio |
| 343 | | verboselog(m_machine, 0, "slave_w: Channel %d: Mute Audio (0x82)\n", offset ); |
| 343 | verboselog(machine(), 0, "slave_w: Channel %d: Mute Audio (0x82)\n", offset ); |
| 344 | 344 | dmadac_enable(&state->m_dmadac[0], 2, 0); |
| 345 | 345 | m_in_index = 0; |
| 346 | 346 | m_in_count = 0; |
| 347 | 347 | //cdic->audio_sample_timer->adjust(attotime::never); |
| 348 | 348 | break; |
| 349 | 349 | case 0x83: // Unmute Audio |
| 350 | | verboselog(m_machine, 0, "slave_w: Channel %d: Unmute Audio (0x83)\n", offset ); |
| 350 | verboselog(machine(), 0, "slave_w: Channel %d: Unmute Audio (0x83)\n", offset ); |
| 351 | 351 | dmadac_enable(&state->m_dmadac[0], 2, 1); |
| 352 | 352 | m_in_index = 0; |
| 353 | 353 | m_in_count = 0; |
| 354 | 354 | break; |
| 355 | 355 | case 0xf0: // Set Front Panel LCD |
| 356 | | verboselog(m_machine, 0, "slave_w: Channel %d: Set Front Panel LCD (0xf0)\n", offset ); |
| 356 | verboselog(machine(), 0, "slave_w: Channel %d: Set Front Panel LCD (0xf0)\n", offset ); |
| 357 | 357 | m_in_count = 17; |
| 358 | 358 | break; |
| 359 | 359 | default: |
| 360 | | verboselog(m_machine, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 360 | verboselog(machine(), 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 361 | 361 | memset(m_in_buf, 0, 17); |
| 362 | 362 | m_in_index = 0; |
| 363 | 363 | m_in_count = 0; |
| r11240 | r11241 | |
| 368 | 368 | case 3: |
| 369 | 369 | if(m_in_index) |
| 370 | 370 | { |
| 371 | | verboselog(m_machine, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 371 | verboselog(machine(), 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); |
| 372 | 372 | m_in_buf[m_in_index] = data & 0x00ff; |
| 373 | 373 | m_in_index++; |
| 374 | 374 | if(m_in_index == m_in_count) |
| r11240 | r11241 | |
| 402 | 402 | switch(data & 0x00ff) |
| 403 | 403 | { |
| 404 | 404 | case 0xb0: // Request Disc Status |
| 405 | | verboselog(m_machine, 0, "slave_w: Channel %d: Request Disc Status (0xb0)\n", offset ); |
| 405 | verboselog(machine(), 0, "slave_w: Channel %d: Request Disc Status (0xb0)\n", offset ); |
| 406 | 406 | m_in_count = 4; |
| 407 | 407 | break; |
| 408 | 408 | case 0xb1: // Request Disc Base |
| 409 | | verboselog(m_machine, 0, "slave_w: Channel %d: Request Disc Base (0xb1)\n", offset ); |
| 409 | verboselog(machine(), 0, "slave_w: Channel %d: Request Disc Base (0xb1)\n", offset ); |
| 410 | 410 | m_in_count = 4; |
| 411 | 411 | break; |
| 412 | 412 | case 0xf0: // Request SLAVE Revision |
| 413 | | verboselog(m_machine, 0, "slave_w: Channel %d: Request SLAVE Revision (0xf0)\n", offset ); |
| 413 | verboselog(machine(), 0, "slave_w: Channel %d: Request SLAVE Revision (0xf0)\n", offset ); |
| 414 | 414 | prepare_readback(attotime::from_hz(10000), 2, 2, 0xf0, 0x32, 0x31, 0, 0xf0); |
| 415 | 415 | m_in_index = 0; |
| 416 | 416 | break; |
| 417 | 417 | case 0xf3: // Request Pointer Type |
| 418 | | verboselog(m_machine, 0, "slave_w: Channel %d: Request Pointer Type (0xf3)\n", offset ); |
| 418 | verboselog(machine(), 0, "slave_w: Channel %d: Request Pointer Type (0xf3)\n", offset ); |
| 419 | 419 | m_in_index = 0; |
| 420 | 420 | prepare_readback(attotime::from_hz(10000), 2, 2, 0xf3, 1, 0, 0, 0xf3); |
| 421 | 421 | break; |
| 422 | 422 | case 0xf4: // Request Test Plug Status |
| 423 | | verboselog(m_machine, 0, "slave_w: Channel %d: Request Test Plug Status (0xf4)\n", offset ); |
| 423 | verboselog(machine(), 0, "slave_w: Channel %d: Request Test Plug Status (0xf4)\n", offset ); |
| 424 | 424 | m_in_index = 0; |
| 425 | 425 | prepare_readback(attotime::from_hz(10000), 2, 2, 0xf4, 0, 0, 0, 0xf4); |
| 426 | 426 | break; |
| 427 | 427 | case 0xf6: // Request NTSC/PAL Status |
| 428 | | verboselog(m_machine, 0, "slave_w: Channel %d: Request NTSC/PAL Status (0xf6)\n", offset ); |
| 428 | verboselog(machine(), 0, "slave_w: Channel %d: Request NTSC/PAL Status (0xf6)\n", offset ); |
| 429 | 429 | prepare_readback(attotime::never, 2, 2, 0xf6, 2, 0, 0, 0xf6); |
| 430 | 430 | m_in_index = 0; |
| 431 | 431 | break; |
| 432 | 432 | case 0xf7: // Enable Input Polling |
| 433 | | verboselog(m_machine, 0, "slave_w: Channel %d: Activate Input Polling (0xf7)\n", offset ); |
| 433 | verboselog(machine(), 0, "slave_w: Channel %d: Activate Input Polling (0xf7)\n", offset ); |
| 434 | 434 | m_polling_active = 1; |
| 435 | 435 | m_in_index = 0; |
| 436 | 436 | break; |
| 437 | 437 | case 0xfa: // Enable X-Bus Interrupts |
| 438 | | verboselog(m_machine, 0, "slave_w: Channel %d: X-Bus Interrupt Enable (0xfa)\n", offset ); |
| 438 | verboselog(machine(), 0, "slave_w: Channel %d: X-Bus Interrupt Enable (0xfa)\n", offset ); |
| 439 | 439 | m_xbus_interrupt_enable = 1; |
| 440 | 440 | m_in_index = 0; |
| 441 | 441 | break; |
| 442 | 442 | default: |
| 443 | | verboselog(m_machine, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 443 | verboselog(machine(), 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); |
| 444 | 444 | memset(m_in_buf, 0, 17); |
| 445 | 445 | m_in_index = 0; |
| 446 | 446 | m_in_count = 0; |
| r11240 | r11241 | |
| 474 | 474 | { |
| 475 | 475 | register_globals(); |
| 476 | 476 | |
| 477 | | m_interrupt_timer = m_machine.scheduler().timer_alloc(FUNC(trigger_readback_int)); |
| 477 | m_interrupt_timer = machine().scheduler().timer_alloc(FUNC(trigger_readback_int)); |
| 478 | 478 | m_interrupt_timer->adjust(attotime::never); |
| 479 | 479 | } |
| 480 | 480 | |
src/mame/video/atarimo.c
| r11240 | r11241 | |
| 15 | 15 | ***************************************************************************/ |
| 16 | 16 | |
| 17 | 17 | /* internal structure containing a word index, shift and mask */ |
| 18 | | typedef struct _atarimo_mask atarimo_mask; |
| 19 | | struct _atarimo_mask |
| 18 | struct atarimo_mask |
| 20 | 19 | { |
| 21 | 20 | int word; /* word index */ |
| 22 | 21 | int shift; /* shift amount */ |
| r11240 | r11241 | |
| 24 | 23 | }; |
| 25 | 24 | |
| 26 | 25 | /* internal structure containing the state of the motion objects */ |
| 27 | | typedef struct _atarimo_data atarimo_data; |
| 28 | | struct _atarimo_data |
| 26 | class atarimo_data |
| 29 | 27 | { |
| 30 | | running_machine &machine() const { assert(m_machine != NULL); return *m_machine; } |
| 28 | public: |
| 29 | atarimo_data(running_machine &machine) |
| 30 | : m_machine(machine) |
| 31 | { |
| 32 | } |
| 31 | 33 | |
| 32 | | running_machine * m_machine; /* pointer back to the machine */ |
| 34 | running_machine &machine() const { return m_machine; } |
| 33 | 35 | |
| 34 | 36 | UINT32 gfxchanged; /* true if the gfx info has changed */ |
| 35 | | gfx_element gfxelement[MAX_GFX_ELEMENTS]; /* local copy of graphics elements */ |
| 37 | gfx_element * gfxelement[MAX_GFX_ELEMENTS]; /* local copy of graphics elements */ |
| 36 | 38 | int gfxgranularity[MAX_GFX_ELEMENTS]; |
| 37 | 39 | |
| 38 | 40 | bitmap_t *bitmap; /* temporary bitmap to render to */ |
| r11240 | r11241 | |
| 112 | 114 | |
| 113 | 115 | UINT32 last_xpos; /* (during processing) the previous X position */ |
| 114 | 116 | UINT32 next_xpos; /* (during processing) the next X position */ |
| 117 | |
| 118 | private: |
| 119 | running_machine & m_machine; /* pointer back to the machine */ |
| 115 | 120 | }; |
| 116 | 121 | |
| 117 | 122 | |
| r11240 | r11241 | |
| 129 | 134 | STATIC VARIABLES |
| 130 | 135 | ***************************************************************************/ |
| 131 | 136 | |
| 132 | | static atarimo_data atarimo[ATARIMO_MAX]; |
| 137 | static atarimo_data *atarimo[ATARIMO_MAX]; |
| 133 | 138 | static emu_timer *force_update_timer; |
| 134 | 139 | |
| 135 | 140 | |
| r11240 | r11241 | |
| 230 | 235 | |
| 231 | 236 | INLINE void init_gfxelement(atarimo_data *mo, int idx) |
| 232 | 237 | { |
| 233 | | mo->gfxelement[idx] = *mo->machine().gfx[idx]; |
| 234 | | mo->gfxgranularity[idx] = mo->gfxelement[idx].color_granularity; |
| 235 | | mo->gfxelement[idx].color_granularity = 1; |
| 236 | | mo->gfxelement[idx].color_base = 0; |
| 237 | | mo->gfxelement[idx].total_colors = 65536; |
| 238 | mo->gfxelement[idx] = auto_alloc(mo->machine(), gfx_element(mo->machine())); |
| 239 | memcpy(mo->gfxelement[idx], mo->machine().gfx[idx], sizeof(*mo->gfxelement[idx])); |
| 240 | mo->gfxgranularity[idx] = mo->gfxelement[idx]->color_granularity; |
| 241 | mo->gfxelement[idx]->color_granularity = 1; |
| 242 | mo->gfxelement[idx]->color_base = 0; |
| 243 | mo->gfxelement[idx]->total_colors = 65536; |
| 238 | 244 | } |
| 239 | 245 | |
| 240 | 246 | |
| r11240 | r11241 | |
| 326 | 332 | void atarimo_init(running_machine &machine, int map, const atarimo_desc *desc) |
| 327 | 333 | { |
| 328 | 334 | gfx_element *gfx = machine.gfx[desc->gfxindex]; |
| 329 | | atarimo_data *mo = &atarimo[map]; |
| 330 | 335 | int i; |
| 331 | 336 | |
| 332 | 337 | assert_always(map >= 0 && map < ATARIMO_MAX, "atarimo_init: map out of range"); |
| 338 | atarimo_data *mo = atarimo[map] = auto_alloc(machine, atarimo_data(machine)); |
| 333 | 339 | |
| 334 | 340 | /* determine the masks first */ |
| 335 | 341 | convert_mask(&desc->linkmask, &mo->linkmask); |
| r11240 | r11241 | |
| 348 | 354 | convert_mask(&desc->absolutemask, &mo->absolutemask); |
| 349 | 355 | |
| 350 | 356 | /* copy in the basic data */ |
| 351 | | mo->m_machine = &machine; |
| 352 | 357 | mo->gfxchanged = FALSE; |
| 353 | 358 | |
| 354 | 359 | mo->linked = desc->linked; |
| r11240 | r11241 | |
| 452 | 457 | |
| 453 | 458 | UINT16 *atarimo_get_code_lookup(int map, int *size) |
| 454 | 459 | { |
| 455 | | atarimo_data *mo = &atarimo[map]; |
| 460 | atarimo_data *mo = atarimo[map]; |
| 456 | 461 | |
| 457 | 462 | if (size) |
| 458 | 463 | *size = round_to_powerof2(mo->codemask.mask); |
| r11240 | r11241 | |
| 467 | 472 | |
| 468 | 473 | UINT8 *atarimo_get_color_lookup(int map, int *size) |
| 469 | 474 | { |
| 470 | | atarimo_data *mo = &atarimo[map]; |
| 475 | atarimo_data *mo = atarimo[map]; |
| 471 | 476 | |
| 472 | 477 | if (size) |
| 473 | 478 | *size = round_to_powerof2(mo->colormask.mask); |
| r11240 | r11241 | |
| 482 | 487 | |
| 483 | 488 | UINT8 *atarimo_get_gfx_lookup(int map, int *size) |
| 484 | 489 | { |
| 485 | | atarimo_data *mo = &atarimo[map]; |
| 490 | atarimo_data *mo = atarimo[map]; |
| 486 | 491 | |
| 487 | 492 | mo->gfxchanged = TRUE; |
| 488 | 493 | if (size) |
| r11240 | r11241 | |
| 633 | 638 | |
| 634 | 639 | bitmap_t *atarimo_render(int map, const rectangle *cliprect, atarimo_rect_list *rectlist) |
| 635 | 640 | { |
| 636 | | atarimo_data *mo = &atarimo[map]; |
| 641 | atarimo_data *mo = atarimo[map]; |
| 637 | 642 | int startband, stopband, band, i; |
| 638 | 643 | rectangle *rect; |
| 639 | 644 | |
| r11240 | r11241 | |
| 737 | 742 | static int mo_render_object(atarimo_data *mo, const atarimo_entry *entry, const rectangle *cliprect) |
| 738 | 743 | { |
| 739 | 744 | int gfxindex = mo->gfxlookup[EXTRACT_DATA(entry, mo->gfxmask)]; |
| 740 | | const gfx_element *gfx = &mo->gfxelement[gfxindex]; |
| 745 | const gfx_element *gfx = mo->gfxelement[gfxindex]; |
| 741 | 746 | bitmap_t *bitmap = mo->bitmap; |
| 742 | 747 | int x, y, sx, sy; |
| 743 | 748 | |
| r11240 | r11241 | |
| 910 | 915 | |
| 911 | 916 | void atarimo_set_bank(int map, int bank) |
| 912 | 917 | { |
| 913 | | atarimo_data *mo = &atarimo[map]; |
| 918 | atarimo_data *mo = atarimo[map]; |
| 914 | 919 | mo->bank = bank; |
| 915 | 920 | } |
| 916 | 921 | |
| r11240 | r11241 | |
| 922 | 927 | |
| 923 | 928 | void atarimo_set_xscroll(int map, int xscroll) |
| 924 | 929 | { |
| 925 | | atarimo_data *mo = &atarimo[map]; |
| 930 | atarimo_data *mo = atarimo[map]; |
| 926 | 931 | mo->xscroll = xscroll; |
| 927 | 932 | } |
| 928 | 933 | |
| r11240 | r11241 | |
| 934 | 939 | |
| 935 | 940 | void atarimo_set_yscroll(int map, int yscroll) |
| 936 | 941 | { |
| 937 | | atarimo_data *mo = &atarimo[map]; |
| 942 | atarimo_data *mo = atarimo[map]; |
| 938 | 943 | mo->yscroll = yscroll; |
| 939 | 944 | } |
| 940 | 945 | |
| r11240 | r11241 | |
| 946 | 951 | |
| 947 | 952 | int atarimo_get_bank(int map) |
| 948 | 953 | { |
| 949 | | return atarimo[map].bank; |
| 954 | return atarimo[map]->bank; |
| 950 | 955 | } |
| 951 | 956 | |
| 952 | 957 | |
| r11240 | r11241 | |
| 957 | 962 | |
| 958 | 963 | int atarimo_get_xscroll(int map) |
| 959 | 964 | { |
| 960 | | return atarimo[map].xscroll; |
| 965 | return atarimo[map]->xscroll; |
| 961 | 966 | } |
| 962 | 967 | |
| 963 | 968 | |
| r11240 | r11241 | |
| 968 | 973 | |
| 969 | 974 | int atarimo_get_yscroll(int map) |
| 970 | 975 | { |
| 971 | | return atarimo[map].yscroll; |
| 976 | return atarimo[map]->yscroll; |
| 972 | 977 | } |
| 973 | 978 | |
| 974 | 979 | |
| r11240 | r11241 | |
| 978 | 983 | |
| 979 | 984 | READ16_HANDLER( atarimo_0_spriteram_r ) |
| 980 | 985 | { |
| 981 | | atarimo_data *mo = &atarimo[0]; |
| 986 | atarimo_data *mo = atarimo[0]; |
| 982 | 987 | return mo->sprite_ram[offset] & mem_mask; |
| 983 | 988 | } |
| 984 | 989 | |
| r11240 | r11241 | |
| 990 | 995 | WRITE16_HANDLER( atarimo_0_spriteram_w ) |
| 991 | 996 | { |
| 992 | 997 | int entry, idx, bank; |
| 993 | | atarimo_data *mo = &atarimo[0]; |
| 998 | atarimo_data *mo = atarimo[0]; |
| 994 | 999 | |
| 995 | 1000 | COMBINE_DATA(&mo->sprite_ram[offset]); |
| 996 | 1001 | if (mo->split) |
| r11240 | r11241 | |
| 1014 | 1019 | |
| 1015 | 1020 | READ16_HANDLER( atarimo_1_spriteram_r ) |
| 1016 | 1021 | { |
| 1017 | | atarimo_data *mo = &atarimo[1]; |
| 1022 | atarimo_data *mo = atarimo[1]; |
| 1018 | 1023 | return mo->sprite_ram[offset] & mem_mask; |
| 1019 | 1024 | } |
| 1020 | 1025 | |
| r11240 | r11241 | |
| 1026 | 1031 | WRITE16_HANDLER( atarimo_1_spriteram_w ) |
| 1027 | 1032 | { |
| 1028 | 1033 | int entry, idx, bank; |
| 1029 | | atarimo_data *mo = &atarimo[1]; |
| 1034 | atarimo_data *mo = atarimo[1]; |
| 1030 | 1035 | |
| 1031 | 1036 | COMBINE_DATA(&mo->sprite_ram[offset]); |
| 1032 | 1037 | if (mo->split) |
| r11240 | r11241 | |
| 1052 | 1057 | WRITE16_HANDLER( atarimo_0_spriteram_expanded_w ) |
| 1053 | 1058 | { |
| 1054 | 1059 | int entry, idx, bank; |
| 1055 | | atarimo_data *mo = &atarimo[0]; |
| 1060 | atarimo_data *mo = atarimo[0]; |
| 1056 | 1061 | |
| 1057 | 1062 | COMBINE_DATA(&mo->sprite_ram[offset]); |
| 1058 | 1063 | if (!(offset & 1)) |
| r11240 | r11241 | |
| 1080 | 1085 | |
| 1081 | 1086 | void atarimo_set_slipram(int map, UINT16 *ram) |
| 1082 | 1087 | { |
| 1083 | | atarimo_data *mo = &atarimo[map]; |
| 1088 | atarimo_data *mo = atarimo[map]; |
| 1084 | 1089 | mo->slip_ram = ram; |
| 1085 | 1090 | } |
| 1086 | 1091 | |
| r11240 | r11241 | |
| 1091 | 1096 | |
| 1092 | 1097 | READ16_HANDLER( atarimo_0_slipram_r ) |
| 1093 | 1098 | { |
| 1094 | | atarimo_data *mo = &atarimo[0]; |
| 1099 | atarimo_data *mo = atarimo[0]; |
| 1095 | 1100 | logerror("READ: %04x:%04x\n", offset, mo->slip_ram[offset] & mem_mask); |
| 1096 | 1101 | return mo->slip_ram[offset] & mem_mask; |
| 1097 | 1102 | } |
| r11240 | r11241 | |
| 1103 | 1108 | |
| 1104 | 1109 | WRITE16_HANDLER( atarimo_0_slipram_w ) |
| 1105 | 1110 | { |
| 1106 | | atarimo_data *mo = &atarimo[0]; |
| 1111 | atarimo_data *mo = atarimo[0]; |
| 1107 | 1112 | logerror("WRITE: %04x:%04x:%04x:%04x\n", offset, mo->slip_ram[offset], data, mem_mask); |
| 1108 | 1113 | COMBINE_DATA(&mo->slip_ram[offset]); |
| 1109 | 1114 | } |
| r11240 | r11241 | |
| 1115 | 1120 | |
| 1116 | 1121 | READ16_HANDLER( atarimo_1_slipram_r ) |
| 1117 | 1122 | { |
| 1118 | | atarimo_data *mo = &atarimo[1]; |
| 1123 | atarimo_data *mo = atarimo[1]; |
| 1119 | 1124 | return mo->slip_ram[offset] & mem_mask; |
| 1120 | 1125 | } |
| 1121 | 1126 | |
| r11240 | r11241 | |
| 1126 | 1131 | |
| 1127 | 1132 | WRITE16_HANDLER( atarimo_1_slipram_w ) |
| 1128 | 1133 | { |
| 1129 | | atarimo_data *mo = &atarimo[1]; |
| 1134 | atarimo_data *mo = atarimo[1]; |
| 1130 | 1135 | COMBINE_DATA(&mo->slip_ram[offset]); |
| 1131 | 1136 | } |
| 1132 | 1137 | |
src/mame/layout/luckyrlt.lay
| r11240 | r11241 | |
| 25 | 25 | <bounds left="100" top="96" right="832" bottom="1072" /> |
| 26 | 26 | </screen> |
| 27 | 27 | |
| 28 | | <bezel name="lamp134" element="BALL0"> |
| 28 | <bezel name="lamp134" element="BALL0"> |
| 29 | 29 | <bounds x="1321.5755279531" y="319.178830824334" width="16" height="16" /> |
| 30 | | </bezel> |
| 31 | | <bezel name="lamp135" element="BALL"> |
| 30 | </bezel> |
| 31 | <bezel name="lamp135" element="BALL"> |
| 32 | 32 | <bounds x="1332.56513467655" y="335.702636395822" width="16" height="16" /> |
| 33 | | </bezel> |
| 34 | | <bezel name="lamp8" element="BALL"> |
| 33 | </bezel> |
| 34 | <bezel name="lamp8" element="BALL"> |
| 35 | 35 | <bounds x="1340.60412921523" y="353.84601461785" width="16" height="16" /> |
| 36 | | </bezel> |
| 37 | | <bezel name="lamp9" element="BALL"> |
| 36 | </bezel> |
| 37 | <bezel name="lamp9" element="BALL"> |
| 38 | 38 | <bounds x="1345.46124433281" y="373.087013532536" width="16" height="16" /> |
| 39 | | </bezel> |
| 40 | | <bezel name="lamp10" element="BALL"> |
| 39 | </bezel> |
| 40 | <bezel name="lamp10" element="BALL"> |
| 41 | 41 | <bounds x="1346.9967496707" y="392.872104633103" width="16" height="16" /> |
| 42 | | </bezel> |
| 43 | | <bezel name="lamp11" element="BALL"> |
| 42 | </bezel> |
| 43 | <bezel name="lamp11" element="BALL"> |
| 44 | 44 | <bounds x="1345.16647153601" y="412.632106871213" width="16" height="16" /> |
| 45 | | </bezel> |
| 46 | | <bezel name="lamp12" element="BALL"> |
| 45 | </bezel> |
| 46 | <bezel name="lamp12" element="BALL"> |
| 47 | 47 | <bounds x="1340.0230636983" y="431.798560959421" width="16" height="16" /> |
| 48 | | </bezel> |
| 49 | | <bezel name="lamp13" element="BALL"> |
| 48 | </bezel> |
| 49 | <bezel name="lamp13" element="BALL"> |
| 50 | 50 | <bounds x="1331.71449263647" y="449.820082909883" width="16" height="16" /> |
| 51 | | </bezel> |
| 52 | | <bezel name="lamp14" element="BALL"> |
| 51 | </bezel> |
| 52 | <bezel name="lamp14" element="BALL"> |
| 53 | 53 | <bounds x="1320.4797808126" y="466.178226347788" width="16" height="16" /> |
| 54 | | </bezel> |
| 55 | | <bezel name="lamp16" element="BALL"> |
| 54 | </bezel> |
| 55 | <bezel name="lamp16" element="BALL"> |
| 56 | 56 | <bounds x="1306.64213043088" y="480.402397269624" width="16" height="16" /> |
| 57 | | </bezel> |
| 58 | | <bezel name="lamp17" element="BALL"> |
| 57 | </bezel> |
| 58 | <bezel name="lamp17" element="BALL"> |
| 59 | 59 | <bounds x="1290.59962549863" y="492.083392175853" width="16" height="16" /> |
| 60 | | </bezel> |
| 61 | | <bezel name="lamp18" element="BALL"> |
| 60 | </bezel> |
| 61 | <bezel name="lamp18" element="BALL"> |
| 62 | 62 | <bounds x="1272.81377967425" y="500.885170110556" width="16" height="16" /> |
| 63 | | </bezel> |
| 64 | | <bezel name="lamp19" element="BALL"> |
| 63 | </bezel> |
| 64 | <bezel name="lamp19" element="BALL"> |
| 65 | 65 | <bounds x="1253.7962593595" y="506.554519947908" width="16" height="16" /> |
| 66 | | </bezel> |
| 67 | | <bezel name="lamp20" element="BALL"> |
| 66 | </bezel> |
| 67 | <bezel name="lamp20" element="BALL"> |
| 68 | 68 | <bounds x="1234.09416398871" y="508.928344815248" width="16" height="16" /> |
| 69 | | </bezel> |
| 70 | | <bezel name="lamp21" element="BALL"> |
| 69 | </bezel> |
| 70 | <bezel name="lamp21" element="BALL"> |
| 71 | 71 | <bounds x="1214.27428697419" y="507.938354093155" width="16" height="16" /> |
| 72 | | </bezel> |
| 73 | | <bezel name="lamp22" element="BALL"> |
| 72 | </bezel> |
| 73 | <bezel name="lamp22" element="BALL"> |
| 74 | 74 | <bounds x="1194.90681009169" y="503.613028012232" width="16" height="16" /> |
| 75 | | </bezel> |
| 76 | | <bezel name="lamp32" element="BALL"> |
| 75 | </bezel> |
| 76 | <bezel name="lamp32" element="BALL"> |
| 77 | 77 | <bounds x="1176.54890038884" y="496.076798328726" width="16" height="16" /> |
| 78 | | </bezel> |
| 79 | | <bezel name="lamp33" element="BALL"> |
| 78 | </bezel> |
| 79 | <bezel name="lamp33" element="BALL"> |
| 80 | 80 | <bounds x="1159.72868150364" y="485.546468649452" width="16" height="16" /> |
| 81 | | </bezel> |
| 82 | | <bezel name="lamp34" element="BALL"> |
| 81 | </bezel> |
| 82 | <bezel name="lamp34" element="BALL"> |
| 83 | 83 | <bounds x="1144.93004050891" y="472.32497738676" width="16" height="16" /> |
| 84 | | </bezel> |
| 85 | | <bezel name="lamp35" element="BALL"> |
| 84 | </bezel> |
| 85 | <bezel name="lamp35" element="BALL"> |
| 86 | 86 | <bounds x="1132.57870736225" y="456.792682771969" width="16" height="16" /> |
| 87 | | </bezel> |
| 88 | | <bezel name="lamp36" element="BALL"> |
| 87 | </bezel> |
| 88 | <bezel name="lamp36" element="BALL"> |
| 89 | 89 | <bounds x="1123.03000743027" y="439.396420641569" width="16" height="16" /> |
| 90 | | </bezel> |
| 91 | | <bezel name="lamp37" element="BALL"> |
| 90 | </bezel> |
| 91 | <bezel name="lamp37" element="BALL"> |
| 92 | 92 | <bounds x="1116.55863942476" y="420.636649783757" width="16" height="16" /> |
| 93 | | </bezel> |
| 94 | | <bezel name="lamp38" element="BALL"> |
| 93 | </bezel> |
| 94 | <bezel name="lamp38" element="BALL"> |
| 95 | 95 | <bounds x="1113.35077282082" y="401.053054650283" width="16" height="16" /> |
| 96 | | </bezel> |
| 97 | | <bezel name="lamp64" element="BALL"> |
| 96 | </bezel> |
| 97 | <bezel name="lamp64" element="BALL"> |
| 98 | 98 | <bounds x="1113.49869210012" y="381.209019617376" width="16" height="16" /> |
| 99 | | </bezel> |
| 100 | | <bezel name="lamp65" element="BALL"> |
| 99 | </bezel> |
| 100 | <bezel name="lamp65" element="BALL"> |
| 101 | 101 | <bounds x="1116.99814189431" y="361.675421442988" width="16" height="16" /> |
| 102 | | </bezel> |
| 103 | | <bezel name="lamp66" element="BALL"> |
| 102 | </bezel> |
| 103 | <bezel name="lamp66" element="BALL"> |
| 104 | 104 | <bounds x="1123.74844940422" y="343.014206181865" width="16" height="16" /> |
| 105 | | </bezel> |
| 106 | | <bezel name="lamp67" element="BALL"> |
| 105 | </bezel> |
| 106 | <bezel name="lamp67" element="BALL"> |
| 107 | 107 | <bounds x="1133.55542057307" y="325.762223020679" width="16" height="16" /> |
| 108 | | </bezel> |
| 109 | | <bezel name="lamp68" element="BALL"> |
| 108 | </bezel> |
| 109 | <bezel name="lamp68" element="BALL"> |
| 110 | 110 | <bounds x="1146.13692669582" y="310.415780104371" width="16" height="16" /> |
| 111 | | </bezel> |
| 112 | | <bezel name="lamp69" element="BALL"> |
| 111 | </bezel> |
| 112 | <bezel name="lamp69" element="BALL"> |
| 113 | 113 | <bounds x="1161.13102074843" y="297.416366654444" width="16" height="16" /> |
| 114 | | </bezel> |
| 115 | | <bezel name="lamp70" element="BALL"> |
| 114 | </bezel> |
| 115 | <bezel name="lamp70" element="BALL"> |
| 116 | 116 | <bounds x="1178.10634994466" y="287.137952127882" width="16" height="16" /> |
| 117 | | </bezel> |
| 118 | | <bezel name="lamp71" element="BALL"> |
| 117 | </bezel> |
| 118 | <bezel name="lamp71" element="BALL"> |
| 119 | 119 | <bounds x="1196.57456497046" y="279.876227796751" width="16" height="16" /> |
| 120 | | </bezel> |
| 121 | | <bezel name="lamp128" element="BALL"> |
| 120 | </bezel> |
| 121 | <bezel name="lamp128" element="BALL"> |
| 122 | 122 | <bounds x="1216.00436890452" y="275.840100248669" width="16" height="16" /> |
| 123 | | </bezel> |
| 124 | | <bezel name="lamp129" element="BALL"> |
| 123 | </bezel> |
| 124 | <bezel name="lamp129" element="BALL"> |
| 125 | 125 | <bounds x="1235.83680166342" y="275.145681524636" width="16" height="16" /> |
| 126 | | </bezel> |
| 127 | | <bezel name="lamp130" element="BALL"> |
| 126 | </bezel> |
| 127 | <bezel name="lamp130" element="BALL"> |
| 128 | 128 | <bounds x="1255.5013202655" y="277.812948787016" width="16" height="16" /> |
| 129 | | </bezel> |
| 130 | | <bezel name="lamp131" element="BALL"> |
| 129 | </bezel> |
| 130 | <bezel name="lamp131" element="BALL"> |
| 131 | 131 | <bounds x="1274.43221231367" y="283.765169612954" width="16" height="16" /> |
| 132 | | </bezel> |
| 133 | | <bezel name="lamp132" element="BALL"> |
| 132 | </bezel> |
| 133 | <bezel name="lamp132" element="BALL"> |
| 134 | 134 | <bounds x="1292.08487051111" y="292.831109446467" width="16" height="16" /> |
| 135 | | </bezel> |
| 136 | | <bezel name="lamp133" element="BALL"> |
| 135 | </bezel> |
| 136 | <bezel name="lamp133" element="BALL"> |
| 137 | 137 | <bounds x="1307.95146002158" y="304.749957704861" width="16" height="16" /> |
| 138 | | </bezel> |
| 138 | </bezel> |
| 139 | 139 | |
| 140 | 140 | </view> |
| 141 | 141 | </mamelayout> |
src/mame/layout/re900.lay
| r11240 | r11241 | |
| 140 | 140 | <bezel name="lamp6" element="L6"> |
| 141 | 141 | <bounds x="1400" y="950" width="70" height="45" /> |
| 142 | 142 | </bezel> |
| 143 | | <bezel name="lamp20" element="BALL0"> |
| 143 | <bezel name="lamp20" element="BALL0"> |
| 144 | 144 | <bounds x="1321.5755279531" y="319.178830824334" width="16" height="16" /> |
| 145 | | </bezel> |
| 146 | | <bezel name="lamp21" element="BALL"> |
| 145 | </bezel> |
| 146 | <bezel name="lamp21" element="BALL"> |
| 147 | 147 | <bounds x="1332.56513467655" y="335.702636395822" width="16" height="16" /> |
| 148 | | </bezel> |
| 149 | | <bezel name="lamp22" element="BALL"> |
| 148 | </bezel> |
| 149 | <bezel name="lamp22" element="BALL"> |
| 150 | 150 | <bounds x="1340.60412921523" y="353.84601461785" width="16" height="16" /> |
| 151 | | </bezel> |
| 152 | | <bezel name="lamp23" element="BALL"> |
| 151 | </bezel> |
| 152 | <bezel name="lamp23" element="BALL"> |
| 153 | 153 | <bounds x="1345.46124433281" y="373.087013532536" width="16" height="16" /> |
| 154 | | </bezel> |
| 155 | | <bezel name="lamp24" element="BALL"> |
| 154 | </bezel> |
| 155 | <bezel name="lamp24" element="BALL"> |
| 156 | 156 | <bounds x="1346.9967496707" y="392.872104633103" width="16" height="16" /> |
| 157 | | </bezel> |
| 158 | | <bezel name="lamp25" element="BALL"> |
| 157 | </bezel> |
| 158 | <bezel name="lamp25" element="BALL"> |
| 159 | 159 | <bounds x="1345.16647153601" y="412.632106871213" width="16" height="16" /> |
| 160 | | </bezel> |
| 161 | | <bezel name="lamp26" element="BALL"> |
| 160 | </bezel> |
| 161 | <bezel name="lamp26" element="BALL"> |
| 162 | 162 | <bounds x="1340.0230636983" y="431.798560959421" width="16" height="16" /> |
| 163 | | </bezel> |
| 164 | | <bezel name="lamp27" element="BALL"> |
| 163 | </bezel> |
| 164 | <bezel name="lamp27" element="BALL"> |
| 165 | 165 | <bounds x="1331.71449263647" y="449.820082909883" width="16" height="16" /> |
| 166 | | </bezel> |
| 167 | | <bezel name="lamp28" element="BALL"> |
| 166 | </bezel> |
| 167 | <bezel name="lamp28" element="BALL"> |
| 168 | 168 | <bounds x="1320.4797808126" y="466.178226347788" width="16" height="16" /> |
| 169 | | </bezel> |
| 170 | | <bezel name="lamp29" element="BALL"> |
| 169 | </bezel> |
| 170 | <bezel name="lamp29" element="BALL"> |
| 171 | 171 | <bounds x="1306.64213043088" y="480.402397269624" width="16" height="16" /> |
| 172 | | </bezel> |
| 173 | | <bezel name="lamp30" element="BALL"> |
| 172 | </bezel> |
| 173 | <bezel name="lamp30" element="BALL"> |
| 174 | 174 | <bounds x="1290.59962549863" y="492.083392175853" width="16" height="16" /> |
| 175 | | </bezel> |
| 176 | | <bezel name="lamp31" element="BALL"> |
| 175 | </bezel> |
| 176 | <bezel name="lamp31" element="BALL"> |
| 177 | 177 | <bounds x="1272.81377967425" y="500.885170110556" width="16" height="16" /> |
| 178 | | </bezel> |
| 179 | | <bezel name="lamp32" element="BALL"> |
| 178 | </bezel> |
| 179 | <bezel name="lamp32" element="BALL"> |
| 180 | 180 | <bounds x="1253.7962593595" y="506.554519947908" width="16" height="16" /> |
| 181 | | </bezel> |
| 182 | | <bezel name="lamp33" element="BALL"> |
| 181 | </bezel> |
| 182 | <bezel name="lamp33" element="BALL"> |
| 183 | 183 | <bounds x="1234.09416398871" y="508.928344815248" width="16" height="16" /> |
| 184 | | </bezel> |
| 185 | | <bezel name="lamp34" element="BALL"> |
| 184 | </bezel> |
| 185 | <bezel name="lamp34" element="BALL"> |
| 186 | 186 | <bounds x="1214.27428697419" y="507.938354093155" width="16" height="16" /> |
| 187 | | </bezel> |
| 188 | | <bezel name="lamp35" element="BALL"> |
| 187 | </bezel> |
| 188 | <bezel name="lamp35" element="BALL"> |
| 189 | 189 | <bounds x="1194.90681009169" y="503.613028012232" width="16" height="16" /> |
| 190 | | </bezel> |
| 191 | | <bezel name="lamp36" element="BALL"> |
| 190 | </bezel> |
| 191 | <bezel name="lamp36" element="BALL"> |
| 192 | 192 | <bounds x="1176.54890038884" y="496.076798328726" width="16" height="16" /> |
| 193 | | </bezel> |
| 194 | | <bezel name="lamp37" element="BALL"> |
| 193 | </bezel> |
| 194 | <bezel name="lamp37" element="BALL"> |
| 195 | 195 | <bounds x="1159.72868150364" y="485.546468649452" width="16" height="16" /> |
| 196 | | </bezel> |
| 197 | | <bezel name="lamp38" element="BALL"> |
| 196 | </bezel> |
| 197 | <bezel name="lamp38" element="BALL"> |
| 198 | 198 | <bounds x="1144.93004050891" y="472.32497738676" width="16" height="16" /> |
| 199 | | </bezel> |
| 200 | | <bezel name="lamp39" element="BALL"> |
| 199 | </bezel> |
| 200 | <bezel name="lamp39" element="BALL"> |
| 201 | 201 | <bounds x="1132.57870736225" y="456.792682771969" width="16" height="16" /> |
| 202 | | </bezel> |
| 203 | | <bezel name="lamp40" element="BALL"> |
| 202 | </bezel> |
| 203 | <bezel name="lamp40" element="BALL"> |
| 204 | 204 | <bounds x="1123.03000743027" y="439.396420641569" width="16" height="16" /> |
| 205 | | </bezel> |
| 206 | | <bezel name="lamp41" element="BALL"> |
| 205 | </bezel> |
| 206 | <bezel name="lamp41" element="BALL"> |
| 207 | 207 | <bounds x="1116.55863942476" y="420.636649783757" width="16" height="16" /> |
| 208 | | </bezel> |
| 209 | | <bezel name="lamp42" element="BALL"> |
| 208 | </bezel> |
| 209 | <bezel name="lamp42" element="BALL"> |
| 210 | 210 | <bounds x="1113.35077282082" y="401.053054650283" width="16" height="16" /> |
| 211 | | </bezel> |
| 212 | | <bezel name="lamp43" element="BALL"> |
| 211 | </bezel> |
| 212 | <bezel name="lamp43" element="BALL"> |
| 213 | 213 | <bounds x="1113.49869210012" y="381.209019617376" width="16" height="16" /> |
| 214 | | </bezel> |
| 215 | | <bezel name="lamp44" element="BALL"> |
| 214 | </bezel> |
| 215 | <bezel name="lamp44" element="BALL"> |
| 216 | 216 | <bounds x="1116.99814189431" y="361.675421442988" width="16" height="16" /> |
| 217 | | </bezel> |
| 218 | | <bezel name="lamp45" element="BALL"> |
| 217 | </bezel> |
| 218 | <bezel name="lamp45" element="BALL"> |
| 219 | 219 | <bounds x="1123.74844940422" y="343.014206181865" width="16" height="16" /> |
| 220 | | </bezel> |
| 221 | | <bezel name="lamp46" element="BALL"> |
| 220 | </bezel> |
| 221 | <bezel name="lamp46" element="BALL"> |
| 222 | 222 | <bounds x="1133.55542057307" y="325.762223020679" width="16" height="16" /> |
| 223 | | </bezel> |
| 224 | | <bezel name="lamp47" element="BALL"> |
| 223 | </bezel> |
| 224 | <bezel name="lamp47" element="BALL"> |
| 225 | 225 | <bounds x="1146.13692669582" y="310.415780104371" width="16" height="16" /> |
| 226 | | </bezel> |
| 227 | | <bezel name="lamp48" element="BALL"> |
| 226 | </bezel> |
| 227 | <bezel name="lamp48" element="BALL"> |
| 228 | 228 | <bounds x="1161.13102074843" y="297.416366654444" width="16" height="16" /> |
| 229 | | </bezel> |
| 230 | | <bezel name="lamp49" element="BALL"> |
| 229 | </bezel> |
| 230 | <bezel name="lamp49" element="BALL"> |
| 231 | 231 | <bounds x="1178.10634994466" y="287.137952127882" width="16" height="16" /> |
| 232 | | </bezel> |
| 233 | | <bezel name="lamp50" element="BALL"> |
| 232 | </bezel> |
| 233 | <bezel name="lamp50" element="BALL"> |
| 234 | 234 | <bounds x="1196.57456497046" y="279.876227796751" width="16" height="16" /> |
| 235 | | </bezel> |
| 236 | | <bezel name="lamp51" element="BALL"> |
| 235 | </bezel> |
| 236 | <bezel name="lamp51" element="BALL"> |
| 237 | 237 | <bounds x="1216.00436890452" y="275.840100248669" width="16" height="16" /> |
| 238 | | </bezel> |
| 239 | | <bezel name="lamp52" element="BALL"> |
| 238 | </bezel> |
| 239 | <bezel name="lamp52" element="BALL"> |
| 240 | 240 | <bounds x="1235.83680166342" y="275.145681524636" width="16" height="16" /> |
| 241 | | </bezel> |
| 242 | | <bezel name="lamp53" element="BALL"> |
| 241 | </bezel> |
| 242 | <bezel name="lamp53" element="BALL"> |
| 243 | 243 | <bounds x="1255.5013202655" y="277.812948787016" width="16" height="16" /> |
| 244 | | </bezel> |
| 245 | | <bezel name="lamp54" element="BALL"> |
| 244 | </bezel> |
| 245 | <bezel name="lamp54" element="BALL"> |
| 246 | 246 | <bounds x="1274.43221231367" y="283.765169612954" width="16" height="16" /> |
| 247 | | </bezel> |
| 248 | | <bezel name="lamp55" element="BALL"> |
| 247 | </bezel> |
| 248 | <bezel name="lamp55" element="BALL"> |
| 249 | 249 | <bounds x="1292.08487051111" y="292.831109446467" width="16" height="16" /> |
| 250 | | </bezel> |
| 251 | | <bezel name="lamp56" element="BALL"> |
| 250 | </bezel> |
| 251 | <bezel name="lamp56" element="BALL"> |
| 252 | 252 | <bounds x="1307.95146002158" y="304.749957704861" width="16" height="16" /> |
| 253 | | </bezel> |
| 253 | </bezel> |
| 254 | 254 | |
| 255 | 255 | </view> |
| 256 | 256 | </mamelayout> |
src/mame/layout/re800.lay
| r11240 | r11241 | |
| 25 | 25 | <bounds left="100" top="96" right="832" bottom="1072" /> |
| 26 | 26 | </screen> |
| 27 | 27 | |
| 28 | | <bezel name="lamp0" element="BALL0"> |
| 28 | <bezel name="lamp0" element="BALL0"> |
| 29 | 29 | <bounds x="1321.5755279531" y="319.178830824334" width="16" height="16" /> |
| 30 | | </bezel> |
| 31 | | <bezel name="lamp1" element="BALL"> |
| 30 | </bezel> |
| 31 | <bezel name="lamp1" element="BALL"> |
| 32 | 32 | <bounds x="1332.56513467655" y="335.702636395822" width="16" height="16" /> |
| 33 | | </bezel> |
| 34 | | <bezel name="lamp2" element="BALL"> |
| 33 | </bezel> |
| 34 | <bezel name="lamp2" element="BALL"> |
| 35 | 35 | <bounds x="1340.60412921523" y="353.84601461785" width="16" height="16" /> |
| 36 | | </bezel> |
| 37 | | <bezel name="lamp3" element="BALL"> |
| 36 | </bezel> |
| 37 | <bezel name="lamp3" element="BALL"> |
| 38 | 38 | <bounds x="1345.46124433281" y="373.087013532536" width="16" height="16" /> |
| 39 | | </bezel> |
| 40 | | <bezel name="lamp4" element="BALL"> |
| 39 | </bezel> |
| 40 | <bezel name="lamp4" element="BALL"> |
| 41 | 41 | <bounds x="1346.9967496707" y="392.872104633103" width="16" height="16" /> |
| 42 | | </bezel> |
| 43 | | <bezel name="lamp5" element="BALL"> |
| 42 | </bezel> |
| 43 | <bezel name="lamp5" element="BALL"> |
| 44 | 44 | <bounds x="1345.16647153601" y="412.632106871213" width="16" height="16" /> |
| 45 | | </bezel> |
| 46 | | <bezel name="lamp6" element="BALL"> |
| 45 | </bezel> |
| 46 | <bezel name="lamp6" element="BALL"> |
| 47 | 47 | <bounds x="1340.0230636983" y="431.798560959421" width="16" height="16" /> |
| 48 | | </bezel> |
| 49 | | <bezel name="lamp7" element="BALL"> |
| 48 | </bezel> |
| 49 | <bezel name="lamp7" element="BALL"> |
| 50 | 50 | <bounds x="1331.71449263647" y="449.820082909883" width="16" height="16" /> |
| 51 | | </bezel> |
| 52 | | <bezel name="lamp8" element="BALL"> |
| 51 | </bezel> |
| 52 | <bezel name="lamp8" element="BALL"> |
| 53 | 53 | <bounds x="1320.4797808126" y="466.178226347788" width="16" height="16" /> |
| 54 | | </bezel> |
| 55 | | <bezel name="lamp9" element="BALL"> |
| 54 | </bezel> |
| 55 | <bezel name="lamp9" element="BALL"> |
| 56 | 56 | <bounds x="1306.64213043088" y="480.402397269624" width="16" height="16" /> |
| 57 | | </bezel> |
| 58 | | <bezel name="lamp10" element="BALL"> |
| 57 | </bezel> |
| 58 | <bezel name="lamp10" element="BALL"> |
| 59 | 59 | <bounds x="1290.59962549863" y="492.083392175853" width="16" height="16" /> |
| 60 | | </bezel> |
| 61 | | <bezel name="lamp11" element="BALL"> |
| 60 | </bezel> |
| 61 | <bezel name="lamp11" element="BALL"> |
| 62 | 62 | <bounds x="1272.81377967425" y="500.885170110556" width="16" height="16" /> |
| 63 | | </bezel> |
| 64 | | <bezel name="lamp12" element="BALL"> |
| 63 | </bezel> |
| 64 | <bezel name="lamp12" element="BALL"> |
| 65 | 65 | <bounds x="1253.7962593595" y="506.554519947908" width="16" height="16" /> |
| 66 | | </bezel> |
| 67 | | <bezel name="lamp13" element="BALL"> |
| 66 | </bezel> |
| 67 | <bezel name="lamp13" element="BALL"> |
| 68 | 68 | <bounds x="1234.09416398871" y="508.928344815248" width="16" height="16" /> |
| 69 | | </bezel> |
| 70 | | <bezel name="lamp14" element="BALL"> |
| 69 | </bezel> |
| 70 | <bezel name="lamp14" element="BALL"> |
| 71 | 71 | <bounds x="1214.27428697419" y="507.938354093155" width="16" height="16" /> |
| 72 | | </bezel> |
| 73 | | <bezel name="lamp15" element="BALL"> |
| 72 | </bezel> |
| 73 | <bezel name="lamp15" element="BALL"> |
| 74 | 74 | <bounds x="1194.90681009169" y="503.613028012232" width="16" height="16" /> |
| 75 | | </bezel> |
| 76 | | <bezel name="lamp16" element="BALL"> |
| 75 | </bezel> |
| 76 | <bezel name="lamp16" element="BALL"> |
| 77 | 77 | <bounds x="1176.54890038884" y="496.076798328726" width="16" height="16" /> |
| 78 | | </bezel> |
| 79 | | <bezel name="lamp17" element="BALL"> |
| 78 | </bezel> |
| 79 | <bezel name="lamp17" element="BALL"> |
| 80 | 80 | <bounds x="1159.72868150364" y="485.546468649452" width="16" height="16" /> |
| 81 | | </bezel> |
| 82 | | <bezel name="lamp18" element="BALL"> |
| 81 | </bezel> |
| 82 | <bezel name="lamp18" element="BALL"> |
| 83 | 83 | <bounds x="1144.93004050891" y="472.32497738676" width="16" height="16" /> |
| 84 | | </bezel> |
| 85 | | <bezel name="lamp19" element="BALL"> |
| 84 | </bezel> |
| 85 | <bezel name="lamp19" element="BALL"> |
| 86 | 86 | <bounds x="1132.57870736225" y="456.792682771969" width="16" height="16" /> |
| 87 | | </bezel> |
| 88 | | <bezel name="lamp20" element="BALL"> |
| 87 | </bezel> |
| 88 | <bezel name="lamp20" element="BALL"> |
| 89 | 89 | <bounds x="1123.03000743027" y="439.396420641569" width="16" height="16" /> |
| 90 | | </bezel> |
| 91 | | <bezel name="lamp21" element="BALL"> |
| 90 | </bezel> |
| 91 | <bezel name="lamp21" element="BALL"> |
| 92 | 92 | <bounds x="1116.55863942476" y="420.636649783757" width="16" height="16" /> |
| 93 | | </bezel> |
| 94 | | <bezel name="lamp22" element="BALL"> |
| 93 | </bezel> |
| 94 | <bezel name="lamp22" element="BALL"> |
| 95 | 95 | <bounds x="1113.35077282082" y="401.053054650283" width="16" height="16" /> |
| 96 | | </bezel> |
| 97 | | <bezel name="lamp23" element="BALL"> |
| 96 | </bezel> |
| 97 | <bezel name="lamp23" element="BALL"> |
| 98 | 98 | <bounds x="1113.49869210012" y="381.209019617376" width="16" height="16" /> |
| 99 | | </bezel> |
| 100 | | <bezel name="lamp24" element="BALL"> |
| 99 | </bezel> |
| 100 | <bezel name="lamp24" element="BALL"> |
| 101 | 101 | <bounds x="1116.99814189431" y="361.675421442988" width="16" height="16" /> |
| 102 | | </bezel> |
| 103 | | <bezel name="lamp25" element="BALL"> |
| 102 | </bezel> |
| 103 | <bezel name="lamp25" element="BALL"> |
| 104 | 104 | <bounds x="1123.74844940422" y="343.014206181865" width="16" height="16" /> |
| 105 | | </bezel> |
| 106 | | <bezel name="lamp26" element="BALL"> |
| 105 | </bezel> |
| 106 | <bezel name="lamp26" element="BALL"> |
| 107 | 107 | <bounds x="1133.55542057307" y="325.762223020679" width="16" height="16" /> |
| 108 | | </bezel> |
| 109 | | <bezel name="lamp27" element="BALL"> |
| 108 | </bezel> |
| 109 | <bezel name="lamp27" element="BALL"> |
| 110 | 110 | <bounds x="1146.13692669582" y="310.415780104371" width="16" height="16" /> |
| 111 | | </bezel> |
| 112 | | <bezel name="lamp28" element="BALL"> |
| 111 | </bezel> |
| 112 | <bezel name="lamp28" element="BALL"> |
| 113 | 113 | <bounds x="1161.13102074843" y="297.416366654444" width="16" height="16" /> |
| 114 | | </bezel> |
| 115 | | <bezel name="lamp29" element="BALL"> |
| 114 | </bezel> |
| 115 | <bezel name="lamp29" element="BALL"> |
| 116 | 116 | <bounds x="1178.10634994466" y="287.137952127882" width="16" height="16" /> |
| 117 | | </bezel> |
| 118 | | <bezel name="lamp30" element="BALL"> |
| 117 | </bezel> |
| 118 | <bezel name="lamp30" element="BALL"> |
| 119 | 119 | <bounds x="1196.57456497046" y="279.876227796751" width="16" height="16" /> |
| 120 | | </bezel> |
| 121 | | <bezel name="lamp31" element="BALL"> |
| 120 | </bezel> |
| 121 | <bezel name="lamp31" element="BALL"> |
| 122 | 122 | <bounds x="1216.00436890452" y="275.840100248669" width="16" height="16" /> |
| 123 | | </bezel> |
| 124 | | <bezel name="lamp32" element="BALL"> |
| 123 | </bezel> |
| 124 | <bezel name="lamp32" element="BALL"> |
| 125 | 125 | <bounds x="1235.83680166342" y="275.145681524636" width="16" height="16" /> |
| 126 | | </bezel> |
| 127 | | <bezel name="lamp33" element="BALL"> |
| 126 | </bezel> |
| 127 | <bezel name="lamp33" element="BALL"> |
| 128 | 128 | <bounds x="1255.5013202655" y="277.812948787016" width="16" height="16" /> |
| 129 | | </bezel> |
| 130 | | <bezel name="lamp34" element="BALL"> |
| 129 | </bezel> |
| 130 | <bezel name="lamp34" element="BALL"> |
| 131 | 131 | <bounds x="1274.43221231367" y="283.765169612954" width="16" height="16" /> |
| 132 | | </bezel> |
| 133 | | <bezel name="lamp35" element="BALL"> |
| 132 | </bezel> |
| 133 | <bezel name="lamp35" element="BALL"> |
| 134 | 134 | <bounds x="1292.08487051111" y="292.831109446467" width="16" height="16" /> |
| 135 | | </bezel> |
| 136 | | <bezel name="lamp36" element="BALL"> |
| 135 | </bezel> |
| 136 | <bezel name="lamp36" element="BALL"> |
| 137 | 137 | <bounds x="1307.95146002158" y="304.749957704861" width="16" height="16" /> |
| 138 | | </bezel> |
| 138 | </bezel> |
| 139 | 139 | |
| 140 | 140 | </view> |
| 141 | 141 | </mamelayout> |
src/mame/layout/roul.lay
| r11240 | r11241 | |
| 25 | 25 | <bounds left="100" top="96" right="832" bottom="1072" /> |
| 26 | 26 | </screen> |
| 27 | 27 | |
| 28 | | <bezel name="lamp134" element="BALL0"> |
| 28 | <bezel name="lamp134" element="BALL0"> |
| 29 | 29 | <bounds x="1321.5755279531" y="319.178830824334" width="16" height="16" /> |
| 30 | | </bezel> |
| 31 | | <bezel name="lamp135" element="BALL"> |
| 30 | </bezel> |
| 31 | <bezel name="lamp135" element="BALL"> |
| 32 | 32 | <bounds x="1332.56513467655" y="335.702636395822" width="16" height="16" /> |
| 33 | | </bezel> |
| 34 | | <bezel name="lamp8" element="BALL"> |
| 33 | </bezel> |
| 34 | <bezel name="lamp8" element="BALL"> |
| 35 | 35 | <bounds x="1340.60412921523" y="353.84601461785" width="16" height="16" /> |
| 36 | | </bezel> |
| 37 | | <bezel name="lamp9" element="BALL"> |
| 36 | </bezel> |
| 37 | <bezel name="lamp9" element="BALL"> |
| 38 | 38 | <bounds x="1345.46124433281" y="373.087013532536" width="16" height="16" /> |
| 39 | | </bezel> |
| 40 | | <bezel name="lamp10" element="BALL"> |
| 39 | </bezel> |
| 40 | <bezel name="lamp10" element="BALL"> |
| 41 | 41 | <bounds x="1346.9967496707" y="392.872104633103" width="16" height="16" /> |
| 42 | | </bezel> |
| 43 | | <bezel name="lamp11" element="BALL"> |
| 42 | </bezel> |
| 43 | <bezel name="lamp11" element="BALL"> |
| 44 | 44 | <bounds x="1345.16647153601" y="412.632106871213" width="16" height="16" /> |
| 45 | | </bezel> |
| 46 | | <bezel name="lamp12" element="BALL"> |
| 45 | </bezel> |
| 46 | <bezel name="lamp12" element="BALL"> |
| 47 | 47 | <bounds x="1340.0230636983" y="431.798560959421" width="16" height="16" /> |
| 48 | | </bezel> |
| 49 | | <bezel name="lamp13" element="BALL"> |
| 48 | </bezel> |
| 49 | <bezel name="lamp13" element="BALL"> |
| 50 | 50 | <bounds x="1331.71449263647" y="449.820082909883" width="16" height="16" /> |
| 51 | | </bezel> |
| 52 | | <bezel name="lamp14" element="BALL"> |
| 51 | </bezel> |
| 52 | <bezel name="lamp14" element="BALL"> |
| 53 | 53 | <bounds x="1320.4797808126" y="466.178226347788" width="16" height="16" /> |
| 54 | | </bezel> |
| 55 | | <bezel name="lamp16" element="BALL"> |
| 54 | </bezel> |
| 55 | <bezel name="lamp16" element="BALL"> |
| 56 | 56 | <bounds x="1306.64213043088" y="480.402397269624" width="16" height="16" /> |
| 57 | | </bezel> |
| 58 | | <bezel name="lamp17" element="BALL"> |
| 57 | </bezel> |
| 58 | <bezel name="lamp17" element="BALL"> |
| 59 | 59 | <bounds x="1290.59962549863" y="492.083392175853" width="16" height="16" /> |
| 60 | | </bezel> |
| 61 | | <bezel name="lamp18" element="BALL"> |
| 60 | </bezel> |
| 61 | <bezel name="lamp18" element="BALL"> |
| 62 | 62 | <bounds x="1272.81377967425" y="500.885170110556" width="16" height="16" /> |
| 63 | | </bezel> |
| 64 | | <bezel name="lamp19" element="BALL"> |
| 63 | </bezel> |
| 64 | <bezel name="lamp19" element="BALL"> |
| 65 | 65 | <bounds x="1253.7962593595" y="506.554519947908" width="16" height="16" /> |
| 66 | | </bezel> |
| 67 | | <bezel name="lamp20" element="BALL"> |
| 66 | </bezel> |
| 67 | <bezel name="lamp20" element="BALL"> |
| 68 | 68 | <bounds x="1234.09416398871" y="508.928344815248" width="16" height="16" /> |
| 69 | | </bezel> |
| 70 | | <bezel name="lamp21" element="BALL"> |
| 69 | </bezel> |
| 70 | <bezel name="lamp21" element="BALL"> |
| 71 | 71 | <bounds x="1214.27428697419" y="507.938354093155" width="16" height="16" /> |
| 72 | | </bezel> |
| 73 | | <bezel name="lamp22" element="BALL"> |
| 72 | </bezel> |
| 73 | <bezel name="lamp22" element="BALL"> |
| 74 | 74 | <bounds x="1194.90681009169" y="503.613028012232" width="16" height="16" /> |
| 75 | | </bezel> |
| 76 | | <bezel name="lamp32" element="BALL"> |
| 75 | </bezel> |
| 76 | <bezel name="lamp32" element="BALL"> |
| 77 | 77 | <bounds x="1176.54890038884" y="496.076798328726" width="16" height="16" /> |
| 78 | | </bezel> |
| 79 | | <bezel name="lamp33" element="BALL"> |
| 78 | </bezel> |
| 79 | <bezel name="lamp33" element="BALL"> |
| 80 | 80 | <bounds x="1159.72868150364" y="485.546468649452" width="16" height="16" /> |
| 81 | | </bezel> |
| 82 | | <bezel name="lamp34" element="BALL"> |
| 81 | </bezel> |
| 82 | <bezel name="lamp34" element="BALL"> |
| 83 | 83 | <bounds x="1144.93004050891" y="472.32497738676" width="16" height="16" /> |
| 84 | | </bezel> |
| 85 | | <bezel name="lamp35" element="BALL"> |
| 84 | </bezel> |
| 85 | <bezel name="lamp35" element="BALL"> |
| 86 | 86 | <bounds x="1132.57870736225" y="456.792682771969" width="16" height="16" /> |
| 87 | | </bezel> |
| 88 | | <bezel name="lamp36" element="BALL"> |
| 87 | </bezel> |
| 88 | <bezel name="lamp36" element="BALL"> |
| 89 | 89 | <bounds x="1123.03000743027" y="439.396420641569" width="16" height="16" /> |
| 90 | | </bezel> |
| 91 | | <bezel name="lamp37" element="BALL"> |
| 90 | </bezel> |
| 91 | <bezel name="lamp37" element="BALL"> |
| 92 | 92 | <bounds x="1116.55863942476" y="420.636649783757" width="16" height="16" /> |
| 93 | | </bezel> |
| 94 | | <bezel name="lamp38" element="BALL"> |
| 93 | </bezel> |
| 94 | <bezel name="lamp38" element="BALL"> |
| 95 | 95 | <bounds x="1113.35077282082" y="401.053054650283" width="16" height="16" /> |
| 96 | | </bezel> |
| 97 | | <bezel name="lamp64" element="BALL"> |
| 96 | </bezel> |
| 97 | <bezel name="lamp64" element="BALL"> |
| 98 | 98 | <bounds x="1113.49869210012" y="381.209019617376" width="16" height="16" /> |
| 99 | | </bezel> |
| 100 | | <bezel name="lamp65" element="BALL"> |
| 99 | </bezel> |
| 100 | <bezel name="lamp65" element="BALL"> |
| 101 | 101 | <bounds x="1116.99814189431" y="361.675421442988" width="16" height="16" /> |
| 102 | | </bezel> |
| 103 | | <bezel name="lamp66" element="BALL"> |
| 102 | </bezel> |
| 103 | <bezel name="lamp66" element="BALL"> |
| 104 | 104 | <bounds x="1123.74844940422" y="343.014206181865" width="16" height="16" /> |
| 105 | | </bezel> |
| 106 | | <bezel name="lamp67" element="BALL"> |
| 105 | </bezel> |
| 106 | <bezel name="lamp67" element="BALL"> |
| 107 | 107 | <bounds x="1133.55542057307" y="325.762223020679" width="16" height="16" /> |
| 108 | | </bezel> |
| 109 | | <bezel name="lamp68" element="BALL"> |
| 108 | </bezel> |
| 109 | <bezel name="lamp68" element="BALL"> |
| 110 | 110 | <bounds x="1146.13692669582" y="310.415780104371" width="16" height="16" /> |
| 111 | | </bezel> |
| 112 | | <bezel name="lamp69" element="BALL"> |
| 111 | </bezel> |
| 112 | <bezel name="lamp69" element="BALL"> |
| 113 | 113 | <bounds x="1161.13102074843" y="297.416366654444" width="16" height="16" /> |
| 114 | | </bezel> |
| 115 | | <bezel name="lamp70" element="BALL"> |
| 114 | </bezel> |
| 115 | <bezel name="lamp70" element="BALL"> |
| 116 | 116 | <bounds x="1178.10634994466" y="287.137952127882" width="16" height="16" /> |
| 117 | | </bezel> |
| 118 | | <bezel name="lamp71" element="BALL"> |
| 117 | </bezel> |
| 118 | <bezel name="lamp71" element="BALL"> |
| 119 | 119 | <bounds x="1196.57456497046" y="279.876227796751" width="16" height="16" /> |
| 120 | | </bezel> |
| 121 | | <bezel name="lamp128" element="BALL"> |
| 120 | </bezel> |
| 121 | <bezel name="lamp128" element="BALL"> |
| 122 | 122 | <bounds x="1216.00436890452" y="275.840100248669" width="16" height="16" /> |
| 123 | | </bezel> |
| 124 | | <bezel name="lamp129" element="BALL"> |
| 123 | </bezel> |
| 124 | <bezel name="lamp129" element="BALL"> |
| 125 | 125 | <bounds x="1235.83680166342" y="275.145681524636" width="16" height="16" /> |
| 126 | | </bezel> |
| 127 | | <bezel name="lamp130" element="BALL"> |
| 126 | </bezel> |
| 127 | <bezel name="lamp130" element="BALL"> |
| 128 | 128 | <bounds x="1255.5013202655" y="277.812948787016" width="16" height="16" /> |
| 129 | | </bezel> |
| 130 | | <bezel name="lamp131" element="BALL"> |
| 129 | </bezel> |
| 130 | <bezel name="lamp131" element="BALL"> |
| 131 | 131 | <bounds x="1274.43221231367" y="283.765169612954" width="16" height="16" /> |
| 132 | | </bezel> |
| 133 | | <bezel name="lamp132" element="BALL"> |
| 132 | </bezel> |
| 133 | <bezel name="lamp132" element="BALL"> |
| 134 | 134 | <bounds x="1292.08487051111" y="292.831109446467" width="16" height="16" /> |
| 135 | | </bezel> |
| 136 | | <bezel name="lamp133" element="BALL"> |
| 135 | </bezel> |
| 136 | <bezel name="lamp133" element="BALL"> |
| 137 | 137 | <bounds x="1307.95146002158" y="304.749957704861" width="16" height="16" /> |
| 138 | | </bezel> |
| 138 | </bezel> |
| 139 | 139 | |
| 140 | 140 | </view> |
| 141 | 141 | </mamelayout> |
src/tools/src2html.c
| r11240 | r11241 | |
| 121 | 121 | { |
| 122 | 122 | { ".c", FILE_TYPE_C }, |
| 123 | 123 | { ".h", FILE_TYPE_C }, |
| 124 | { ".lst", FILE_TYPE_C }, |
| 124 | 125 | { ".mak", FILE_TYPE_MAKE }, |
| 125 | 126 | { "makefile", FILE_TYPE_MAKE }, |
| 126 | 127 | { ".lay", FILE_TYPE_XML }, |
| 128 | { ".xml", FILE_TYPE_XML }, |
| 127 | 129 | { ".txt", FILE_TYPE_TEXT }, |
| 128 | 130 | }; |
| 129 | 131 | |
| r11240 | r11241 | |
| 150 | 152 | { "#undef", PREPROC_CLASS }, |
| 151 | 153 | |
| 152 | 154 | { "auto", KEYWORD_CLASS }, |
| 155 | { "bool", KEYWORD_CLASS }, |
| 153 | 156 | { "break", KEYWORD_CLASS }, |
| 154 | 157 | { "case", KEYWORD_CLASS }, |
| 158 | { "catch", KEYWORD_CLASS }, |
| 155 | 159 | { "char", KEYWORD_CLASS }, |
| 160 | { "class", KEYWORD_CLASS }, |
| 156 | 161 | { "const", KEYWORD_CLASS }, |
| 162 | { "const_cast", KEYWORD_CLASS }, |
| 157 | 163 | { "continue", KEYWORD_CLASS }, |
| 158 | 164 | { "default", KEYWORD_CLASS }, |
| 165 | { "delete", KEYWORD_CLASS }, |
| 159 | 166 | { "do", KEYWORD_CLASS }, |
| 160 | 167 | { "double", KEYWORD_CLASS }, |
| 168 | { "dynamic_cast", KEYWORD_CLASS }, |
| 161 | 169 | { "else", KEYWORD_CLASS }, |
| 162 | 170 | { "enum", KEYWORD_CLASS }, |
| 171 | { "explicit", KEYWORD_CLASS }, |
| 172 | { "export", KEYWORD_CLASS }, |
| 163 | 173 | { "extern", KEYWORD_CLASS }, |
| 174 | { "false", KEYWORD_CLASS }, |
| 164 | 175 | { "float", KEYWORD_CLASS }, |
| 165 | 176 | { "for", KEYWORD_CLASS }, |
| 177 | { "friend", KEYWORD_CLASS }, |
| 166 | 178 | { "goto", KEYWORD_CLASS }, |
| 167 | 179 | { "if", KEYWORD_CLASS }, |
| 180 | { "inline", KEYWORD_CLASS }, |
| 168 | 181 | { "int", KEYWORD_CLASS }, |
| 169 | 182 | { "long", KEYWORD_CLASS }, |
| 183 | { "mutable", KEYWORD_CLASS }, |
| 184 | { "namespace", KEYWORD_CLASS }, |
| 185 | { "new", KEYWORD_CLASS }, |
| 186 | { "operator", KEYWORD_CLASS }, |
| 187 | { "private", KEYWORD_CLASS }, |
| 188 | { "protected", KEYWORD_CLASS }, |
| 189 | { "public", KEYWORD_CLASS }, |
| 170 | 190 | { "register", KEYWORD_CLASS }, |
| 191 | { "reinterpret_cast", KEYWORD_CLASS }, |
| 171 | 192 | { "return", KEYWORD_CLASS }, |
| 172 | 193 | { "short", KEYWORD_CLASS }, |
| 173 | 194 | { "signed", KEYWORD_CLASS }, |
| 174 | 195 | { "sizeof", KEYWORD_CLASS }, |
| 175 | 196 | { "static", KEYWORD_CLASS }, |
| 197 | { "static_cast", KEYWORD_CLASS }, |
| 176 | 198 | { "struct", KEYWORD_CLASS }, |
| 177 | 199 | { "switch", KEYWORD_CLASS }, |
| 200 | { "template", KEYWORD_CLASS }, |
| 201 | { "this", KEYWORD_CLASS }, |
| 202 | { "throw", KEYWORD_CLASS }, |
| 203 | { "true", KEYWORD_CLASS }, |
| 204 | { "try", KEYWORD_CLASS }, |
| 178 | 205 | { "typedef", KEYWORD_CLASS }, |
| 206 | { "typeid", KEYWORD_CLASS }, |
| 207 | { "typename", KEYWORD_CLASS }, |
| 179 | 208 | { "union", KEYWORD_CLASS }, |
| 180 | 209 | { "unsigned", KEYWORD_CLASS }, |
| 210 | { "virtual", KEYWORD_CLASS }, |
| 181 | 211 | { "void", KEYWORD_CLASS }, |
| 182 | 212 | { "volatile", KEYWORD_CLASS }, |
| 213 | { "wchar_t", KEYWORD_CLASS }, |
| 183 | 214 | { "while", KEYWORD_CLASS }, |
| 184 | 215 | |
| 185 | 216 | /* |
src/emu/video.c
| r11240 | r11241 | |
| 218 | 218 | void video_manager::frame_update(bool debug) |
| 219 | 219 | { |
| 220 | 220 | // only render sound and video if we're in the running phase |
| 221 | | int phase = m_machine.phase(); |
| 221 | int phase = machine().phase(); |
| 222 | 222 | bool skipped_it = m_skipping_this_frame; |
| 223 | | if (phase == MACHINE_PHASE_RUNNING && (!m_machine.paused() || m_machine.options().update_in_pause())) |
| 223 | if (phase == MACHINE_PHASE_RUNNING && (!machine().paused() || machine().options().update_in_pause())) |
| 224 | 224 | { |
| 225 | 225 | bool anything_changed = finish_screen_updates(); |
| 226 | 226 | |
| r11240 | r11241 | |
| 234 | 234 | } |
| 235 | 235 | |
| 236 | 236 | // draw the user interface |
| 237 | | ui_update_and_render(m_machine, &m_machine.render().ui_container()); |
| 237 | ui_update_and_render(machine(), &machine().render().ui_container()); |
| 238 | 238 | |
| 239 | 239 | // update the internal render debugger |
| 240 | | debugint_update_during_game(m_machine); |
| 240 | debugint_update_during_game(machine()); |
| 241 | 241 | |
| 242 | 242 | // if we're throttling, synchronize before rendering |
| 243 | | attotime current_time = m_machine.time(); |
| 243 | attotime current_time = machine().time(); |
| 244 | 244 | if (!debug && !skipped_it && effective_throttle()) |
| 245 | 245 | update_throttle(current_time); |
| 246 | 246 | |
| 247 | 247 | // ask the OSD to update |
| 248 | 248 | g_profiler.start(PROFILER_BLIT); |
| 249 | | m_machine.osd().update(!debug && skipped_it); |
| 249 | machine().osd().update(!debug && skipped_it); |
| 250 | 250 | g_profiler.stop(); |
| 251 | 251 | |
| 252 | 252 | // perform tasks for this frame |
| 253 | 253 | if (!debug) |
| 254 | | m_machine.call_notifiers(MACHINE_NOTIFY_FRAME); |
| 254 | machine().call_notifiers(MACHINE_NOTIFY_FRAME); |
| 255 | 255 | |
| 256 | 256 | // update frameskipping |
| 257 | 257 | if (!debug) |
| r11240 | r11241 | |
| 265 | 265 | if (phase == MACHINE_PHASE_RUNNING) |
| 266 | 266 | { |
| 267 | 267 | // reset partial updates if we're paused or if the debugger is active |
| 268 | | if (m_machine.primary_screen != NULL && (m_machine.paused() || debug || debugger_within_instruction_hook(m_machine))) |
| 269 | | m_machine.primary_screen->scanline0_callback(); |
| 268 | if (machine().primary_screen != NULL && (machine().paused() || debug || debugger_within_instruction_hook(machine()))) |
| 269 | machine().primary_screen->scanline0_callback(); |
| 270 | 270 | |
| 271 | 271 | // otherwise, call the video EOF callback |
| 272 | 272 | else |
| 273 | 273 | { |
| 274 | 274 | g_profiler.start(PROFILER_VIDEO); |
| 275 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 275 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 276 | 276 | screen->screen_eof(); |
| 277 | 277 | g_profiler.stop(); |
| 278 | 278 | } |
| r11240 | r11241 | |
| 290 | 290 | string.reset(); |
| 291 | 291 | |
| 292 | 292 | // if we're paused, just display Paused |
| 293 | | bool paused = m_machine.paused(); |
| 293 | bool paused = machine().paused(); |
| 294 | 294 | if (paused) |
| 295 | 295 | string.cat("paused"); |
| 296 | 296 | |
| r11240 | r11241 | |
| 312 | 312 | |
| 313 | 313 | // display the number of partial updates as well |
| 314 | 314 | int partials = 0; |
| 315 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 315 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 316 | 316 | partials += screen->partial_updates(); |
| 317 | 317 | if (partials > 1) |
| 318 | 318 | string.catprintf("\n%d partial updates", partials); |
| r11240 | r11241 | |
| 336 | 336 | |
| 337 | 337 | // add two text entries describing the image |
| 338 | 338 | astring text1(APPNAME, " ", build_version); |
| 339 | | astring text2(m_machine.system().manufacturer, " ", m_machine.system().description); |
| 339 | astring text2(machine().system().manufacturer, " ", machine().system().description); |
| 340 | 340 | png_info pnginfo = { 0 }; |
| 341 | 341 | png_add_text(&pnginfo, "Software", text1); |
| 342 | 342 | png_add_text(&pnginfo, "System", text2); |
| 343 | 343 | |
| 344 | 344 | // now do the actual work |
| 345 | | const rgb_t *palette = (m_machine.palette != NULL) ? palette_entry_list_adjusted(m_machine.palette) : NULL; |
| 346 | | png_error error = png_write_bitmap(file, &pnginfo, m_snap_bitmap, m_machine.total_colors(), palette); |
| 345 | const rgb_t *palette = (machine().palette != NULL) ? palette_entry_list_adjusted(machine().palette) : NULL; |
| 346 | png_error error = png_write_bitmap(file, &pnginfo, m_snap_bitmap, machine().total_colors(), palette); |
| 347 | 347 | if (error != PNGERR_NONE) |
| 348 | 348 | mame_printf_error("Error generating PNG for snapshot: png_error = %d\n", error); |
| 349 | 349 | |
| r11240 | r11241 | |
| 363 | 363 | if (m_snap_native) |
| 364 | 364 | { |
| 365 | 365 | // write one snapshot per visible screen |
| 366 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 367 | | if (m_machine.render().is_live(*screen)) |
| 366 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 367 | if (machine().render().is_live(*screen)) |
| 368 | 368 | { |
| 369 | | emu_file file(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 369 | emu_file file(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 370 | 370 | file_error filerr = open_next(file, "png"); |
| 371 | 371 | if (filerr == FILERR_NONE) |
| 372 | 372 | save_snapshot(screen, file); |
| r11240 | r11241 | |
| 376 | 376 | // otherwise, just write a single snapshot |
| 377 | 377 | else |
| 378 | 378 | { |
| 379 | | emu_file file(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 379 | emu_file file(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 380 | 380 | file_error filerr = open_next(file, "png"); |
| 381 | 381 | if (filerr == FILERR_NONE) |
| 382 | 382 | save_snapshot(NULL, file); |
| r11240 | r11241 | |
| 398 | 398 | |
| 399 | 399 | // reset the state |
| 400 | 400 | m_movie_frame = 0; |
| 401 | | m_movie_next_frame_time = m_machine.time(); |
| 401 | m_movie_next_frame_time = machine().time(); |
| 402 | 402 | |
| 403 | 403 | // start up an AVI recording |
| 404 | 404 | if (format == MF_AVI) |
| r11240 | r11241 | |
| 406 | 406 | // build up information about this new movie |
| 407 | 407 | avi_movie_info info; |
| 408 | 408 | info.video_format = 0; |
| 409 | | info.video_timescale = 1000 * ((m_machine.primary_screen != NULL) ? ATTOSECONDS_TO_HZ(m_machine.primary_screen->frame_period().attoseconds) : screen_device::DEFAULT_FRAME_RATE); |
| 409 | info.video_timescale = 1000 * ((machine().primary_screen != NULL) ? ATTOSECONDS_TO_HZ(machine().primary_screen->frame_period().attoseconds) : screen_device::DEFAULT_FRAME_RATE); |
| 410 | 410 | info.video_sampletime = 1000; |
| 411 | 411 | info.video_numsamples = 0; |
| 412 | 412 | info.video_width = m_snap_bitmap->width; |
| r11240 | r11241 | |
| 414 | 414 | info.video_depth = 24; |
| 415 | 415 | |
| 416 | 416 | info.audio_format = 0; |
| 417 | | info.audio_timescale = m_machine.sample_rate(); |
| 417 | info.audio_timescale = machine().sample_rate(); |
| 418 | 418 | info.audio_sampletime = 1; |
| 419 | 419 | info.audio_numsamples = 0; |
| 420 | 420 | info.audio_channels = 2; |
| 421 | 421 | info.audio_samplebits = 16; |
| 422 | | info.audio_samplerate = m_machine.sample_rate(); |
| 422 | info.audio_samplerate = machine().sample_rate(); |
| 423 | 423 | |
| 424 | 424 | // create a new temporary movie file |
| 425 | 425 | file_error filerr; |
| 426 | 426 | astring fullpath; |
| 427 | 427 | { |
| 428 | | emu_file tempfile(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 428 | emu_file tempfile(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 429 | 429 | if (name != NULL) |
| 430 | 430 | filerr = tempfile.open(name); |
| 431 | 431 | else |
| r11240 | r11241 | |
| 452 | 452 | else if (format == MF_MNG) |
| 453 | 453 | { |
| 454 | 454 | // create a new movie file and start recording |
| 455 | | m_mngfile = auto_alloc(m_machine, emu_file(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS)); |
| 455 | m_mngfile = auto_alloc(machine(), emu_file(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS)); |
| 456 | 456 | file_error filerr; |
| 457 | 457 | if (name != NULL) |
| 458 | 458 | filerr = m_mngfile->open(name); |
| r11240 | r11241 | |
| 462 | 462 | if (filerr == FILERR_NONE) |
| 463 | 463 | { |
| 464 | 464 | // start the capture |
| 465 | | int rate = (m_machine.primary_screen != NULL) ? ATTOSECONDS_TO_HZ(m_machine.primary_screen->frame_period().attoseconds) : screen_device::DEFAULT_FRAME_RATE; |
| 465 | int rate = (machine().primary_screen != NULL) ? ATTOSECONDS_TO_HZ(machine().primary_screen->frame_period().attoseconds) : screen_device::DEFAULT_FRAME_RATE; |
| 466 | 466 | png_error pngerr = mng_capture_start(*m_mngfile, m_snap_bitmap, rate); |
| 467 | 467 | if (pngerr != PNGERR_NONE) |
| 468 | 468 | return end_recording(); |
| r11240 | r11241 | |
| 497 | 497 | if (m_mngfile != NULL) |
| 498 | 498 | { |
| 499 | 499 | mng_capture_stop(*m_mngfile); |
| 500 | | auto_free(m_machine, m_mngfile); |
| 500 | auto_free(machine(), m_mngfile); |
| 501 | 501 | m_mngfile = NULL; |
| 502 | 502 | } |
| 503 | 503 | |
| r11240 | r11241 | |
| 547 | 547 | |
| 548 | 548 | // free all the graphics elements |
| 549 | 549 | for (int i = 0; i < MAX_GFX_ELEMENTS; i++) |
| 550 | | gfx_element_free(m_machine.gfx[i]); |
| 550 | gfx_element_free(machine().gfx[i]); |
| 551 | 551 | |
| 552 | 552 | // free the snapshot target |
| 553 | | m_machine.render().target_free(m_snap_target); |
| 553 | machine().render().target_free(m_snap_target); |
| 554 | 554 | if (m_snap_bitmap != NULL) |
| 555 | 555 | global_free(m_snap_bitmap); |
| 556 | 556 | |
| r11240 | r11241 | |
| 584 | 584 | |
| 585 | 585 | void video_manager::postload() |
| 586 | 586 | { |
| 587 | | m_movie_next_frame_time = m_machine.time(); |
| 587 | m_movie_next_frame_time = machine().time(); |
| 588 | 588 | } |
| 589 | 589 | |
| 590 | 590 | |
| r11240 | r11241 | |
| 597 | 597 | inline int video_manager::effective_autoframeskip() const |
| 598 | 598 | { |
| 599 | 599 | // if we're fast forwarding or paused, autoframeskip is disabled |
| 600 | | if (m_fastforward || m_machine.paused()) |
| 600 | if (m_fastforward || machine().paused()) |
| 601 | 601 | return false; |
| 602 | 602 | |
| 603 | 603 | // otherwise, it's up to the user |
| r11240 | r11241 | |
| 631 | 631 | inline bool video_manager::effective_throttle() const |
| 632 | 632 | { |
| 633 | 633 | // if we're paused, or if the UI is active, we always throttle |
| 634 | | if (m_machine.paused() || ui_is_menu_active()) |
| 634 | if (machine().paused() || ui_is_menu_active()) |
| 635 | 635 | return true; |
| 636 | 636 | |
| 637 | 637 | // if we're fast forwarding, we don't throttle |
| r11240 | r11241 | |
| 650 | 650 | |
| 651 | 651 | inline int video_manager::original_speed_setting() const |
| 652 | 652 | { |
| 653 | | return m_machine.options().speed() * 100.0 + 0.5; |
| 653 | return machine().options().speed() * 100.0 + 0.5; |
| 654 | 654 | } |
| 655 | 655 | |
| 656 | 656 | |
| r11240 | r11241 | |
| 662 | 662 | bool video_manager::finish_screen_updates() |
| 663 | 663 | { |
| 664 | 664 | // finish updating the screens |
| 665 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 665 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 666 | 666 | screen->update_partial(screen->visible_area().max_y); |
| 667 | 667 | |
| 668 | 668 | // now add the quads for all the screens |
| 669 | 669 | bool anything_changed = false; |
| 670 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 670 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 671 | 671 | if (screen->update_quads()) |
| 672 | 672 | anything_changed = true; |
| 673 | 673 | |
| 674 | 674 | // update our movie recording and burn-in state |
| 675 | | if (!m_machine.paused()) |
| 675 | if (!machine().paused()) |
| 676 | 676 | { |
| 677 | 677 | record_frame(); |
| 678 | 678 | |
| 679 | 679 | // iterate over screens and update the burnin for the ones that care |
| 680 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 680 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 681 | 681 | screen->update_burnin(); |
| 682 | 682 | } |
| 683 | 683 | |
| 684 | 684 | // draw any crosshairs |
| 685 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 685 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 686 | 686 | crosshair_render(*screen); |
| 687 | 687 | |
| 688 | 688 | return anything_changed; |
| r11240 | r11241 | |
| 761 | 761 | // and explicitly reset our tracked real and emulated timers to that value ... |
| 762 | 762 | // this means we pretend that the last update was exactly 1/60th of a second |
| 763 | 763 | // ago, and was in sync in both real and emulated time |
| 764 | | if (m_machine.paused()) |
| 764 | if (machine().paused()) |
| 765 | 765 | { |
| 766 | 766 | m_throttle_emutime = emutime - attotime(0, ATTOSECONDS_PER_SECOND / PAUSED_REFRESH_RATE); |
| 767 | 767 | m_throttle_realtime = m_throttle_emutime; |
| r11240 | r11241 | |
| 850 | 850 | // we're allowed to sleep via the OSD code only if we're configured to do so |
| 851 | 851 | // and we're not frameskipping due to autoframeskip, or if we're paused |
| 852 | 852 | bool allowed_to_sleep = false; |
| 853 | | if (m_machine.options().sleep() && (!effective_autoframeskip() || effective_frameskip() == 0)) |
| 853 | if (machine().options().sleep() && (!effective_autoframeskip() || effective_frameskip() == 0)) |
| 854 | 854 | allowed_to_sleep = true; |
| 855 | | if (m_machine.paused()) |
| 855 | if (machine().paused()) |
| 856 | 856 | allowed_to_sleep = true; |
| 857 | 857 | |
| 858 | 858 | // loop until we reach our target |
| r11240 | r11241 | |
| 956 | 956 | void video_manager::update_refresh_speed() |
| 957 | 957 | { |
| 958 | 958 | // only do this if the refreshspeed option is used |
| 959 | | if (m_machine.options().refresh_speed()) |
| 959 | if (machine().options().refresh_speed()) |
| 960 | 960 | { |
| 961 | | float minrefresh = m_machine.render().max_update_rate(); |
| 961 | float minrefresh = machine().render().max_update_rate(); |
| 962 | 962 | if (minrefresh != 0) |
| 963 | 963 | { |
| 964 | 964 | // find the screen with the shortest frame period (max refresh rate) |
| 965 | 965 | // note that we first check the token since this can get called before all screens are created |
| 966 | 966 | attoseconds_t min_frame_period = ATTOSECONDS_PER_SECOND; |
| 967 | | for (screen_device *screen = m_machine.first_screen(); screen != NULL; screen = screen->next_screen()) |
| 967 | for (screen_device *screen = machine().first_screen(); screen != NULL; screen = screen->next_screen()) |
| 968 | 968 | { |
| 969 | 969 | attoseconds_t period = screen->frame_period().attoseconds; |
| 970 | 970 | if (period != 0) |
| r11240 | r11241 | |
| 998 | 998 | void video_manager::recompute_speed(attotime emutime) |
| 999 | 999 | { |
| 1000 | 1000 | // if we don't have a starting time yet, or if we're paused, reset our starting point |
| 1001 | | if (m_speed_last_realtime == 0 || m_machine.paused()) |
| 1001 | if (m_speed_last_realtime == 0 || machine().paused()) |
| 1002 | 1002 | { |
| 1003 | 1003 | m_speed_last_realtime = osd_ticks(); |
| 1004 | 1004 | m_speed_last_emutime = emutime; |
| r11240 | r11241 | |
| 1040 | 1040 | // if we're past the "time-to-execute" requested, signal an exit |
| 1041 | 1041 | if (m_seconds_to_run != 0 && emutime.seconds >= m_seconds_to_run) |
| 1042 | 1042 | { |
| 1043 | | if (m_machine.primary_screen != NULL) |
| 1043 | if (machine().primary_screen != NULL) |
| 1044 | 1044 | { |
| 1045 | 1045 | // create a final screenshot |
| 1046 | | emu_file file(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 1047 | | file_error filerr = file.open(m_machine.basename(), PATH_SEPARATOR "final.png"); |
| 1046 | emu_file file(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 1047 | file_error filerr = file.open(machine().basename(), PATH_SEPARATOR "final.png"); |
| 1048 | 1048 | if (filerr == FILERR_NONE) |
| 1049 | | save_snapshot(m_machine.primary_screen, file); |
| 1049 | save_snapshot(machine().primary_screen, file); |
| 1050 | 1050 | } |
| 1051 | 1051 | |
| 1052 | 1052 | // schedule our demise |
| 1053 | | m_machine.schedule_exit(); |
| 1053 | machine().schedule_exit(); |
| 1054 | 1054 | } |
| 1055 | 1055 | } |
| 1056 | 1056 | |
| r11240 | r11241 | |
| 1066 | 1066 | // select the appropriate view in our dummy target |
| 1067 | 1067 | if (m_snap_native && screen != NULL) |
| 1068 | 1068 | { |
| 1069 | | int view_index = m_machine.m_devicelist.indexof(SCREEN, screen->tag()); |
| 1069 | int view_index = machine().m_devicelist.indexof(SCREEN, screen->tag()); |
| 1070 | 1070 | assert(view_index != -1); |
| 1071 | 1071 | m_snap_target->set_view(view_index); |
| 1072 | 1072 | } |
| r11240 | r11241 | |
| 1082 | 1082 | if (m_snap_bitmap == NULL || width != m_snap_bitmap->width || height != m_snap_bitmap->height) |
| 1083 | 1083 | { |
| 1084 | 1084 | if (m_snap_bitmap != NULL) |
| 1085 | | auto_free(m_machine, m_snap_bitmap); |
| 1086 | | m_snap_bitmap = auto_alloc(m_machine, bitmap_t(width, height, BITMAP_FORMAT_RGB32)); |
| 1085 | auto_free(machine(), m_snap_bitmap); |
| 1086 | m_snap_bitmap = auto_alloc(machine(), bitmap_t(width, height, BITMAP_FORMAT_RGB32)); |
| 1087 | 1087 | } |
| 1088 | 1088 | |
| 1089 | 1089 | // render the screen there |
| r11240 | r11241 | |
| 1105 | 1105 | UINT32 origflags = file.openflags(); |
| 1106 | 1106 | |
| 1107 | 1107 | // handle defaults |
| 1108 | | const char *snapname = m_machine.options().snap_name(); |
| 1108 | const char *snapname = machine().options().snap_name(); |
| 1109 | 1109 | |
| 1110 | 1110 | if (snapname == NULL || snapname[0] == 0) |
| 1111 | 1111 | snapname = "%g/%i"; |
| r11240 | r11241 | |
| 1154 | 1154 | |
| 1155 | 1155 | // verify that there is such a device for this system |
| 1156 | 1156 | device_image_interface *image = NULL; |
| 1157 | | for (bool gotone = m_machine.m_devicelist.first(image); gotone; gotone = image->next(image)) |
| 1157 | for (bool gotone = machine().m_devicelist.first(image); gotone; gotone = image->next(image)) |
| 1158 | 1158 | { |
| 1159 | 1159 | // get the device name |
| 1160 | 1160 | astring tempdevname(image->image_config().brief_instance_name()); |
| r11240 | r11241 | |
| 1191 | 1191 | |
| 1192 | 1192 | // substitute path and gamename up front |
| 1193 | 1193 | snapstr.replace(0, "/", PATH_SEPARATOR); |
| 1194 | | snapstr.replace(0, "%g", m_machine.basename()); |
| 1194 | snapstr.replace(0, "%g", machine().basename()); |
| 1195 | 1195 | |
| 1196 | 1196 | // determine if the template has an index; if not, we always use the same name |
| 1197 | 1197 | astring fname; |
| r11240 | r11241 | |
| 1235 | 1235 | |
| 1236 | 1236 | // start the profiler and get the current time |
| 1237 | 1237 | g_profiler.start(PROFILER_MOVIE_REC); |
| 1238 | | attotime curtime = m_machine.time(); |
| 1238 | attotime curtime = machine().time(); |
| 1239 | 1239 | |
| 1240 | 1240 | // create the bitmap |
| 1241 | 1241 | create_snapshot_bitmap(NULL); |
| r11240 | r11241 | |
| 1263 | 1263 | if (m_movie_frame == 0) |
| 1264 | 1264 | { |
| 1265 | 1265 | astring text1(APPNAME, " ", build_version); |
| 1266 | | astring text2(m_machine.system().manufacturer, " ", m_machine.system().description); |
| 1266 | astring text2(machine().system().manufacturer, " ", machine().system().description); |
| 1267 | 1267 | png_add_text(&pnginfo, "Software", text1); |
| 1268 | 1268 | png_add_text(&pnginfo, "System", text2); |
| 1269 | 1269 | } |
| 1270 | 1270 | |
| 1271 | 1271 | // write the next frame |
| 1272 | | const rgb_t *palette = (m_machine.palette != NULL) ? palette_entry_list_adjusted(m_machine.palette) : NULL; |
| 1273 | | png_error error = mng_capture_frame(*m_mngfile, &pnginfo, m_snap_bitmap, m_machine.total_colors(), palette); |
| 1272 | const rgb_t *palette = (machine().palette != NULL) ? palette_entry_list_adjusted(machine().palette) : NULL; |
| 1273 | png_error error = mng_capture_frame(*m_mngfile, &pnginfo, m_snap_bitmap, machine().total_colors(), palette); |
| 1274 | 1274 | png_free(&pnginfo); |
| 1275 | 1275 | if (error != PNGERR_NONE) |
| 1276 | 1276 | { |
src/emu/schedule.c
| r11240 | r11241 | |
| 290 | 290 | } |
| 291 | 291 | |
| 292 | 292 | // save the bits |
| 293 | | m_machine->state().save_item("timer", name, index, NAME(m_param)); |
| 294 | | m_machine->state().save_item("timer", name, index, NAME(m_enabled)); |
| 295 | | m_machine->state().save_item("timer", name, index, NAME(m_period)); |
| 296 | | m_machine->state().save_item("timer", name, index, NAME(m_start)); |
| 297 | | m_machine->state().save_item("timer", name, index, NAME(m_expire)); |
| 293 | machine().state().save_item("timer", name, index, NAME(m_param)); |
| 294 | machine().state().save_item("timer", name, index, NAME(m_enabled)); |
| 295 | machine().state().save_item("timer", name, index, NAME(m_period)); |
| 296 | machine().state().save_item("timer", name, index, NAME(m_start)); |
| 297 | machine().state().save_item("timer", name, index, NAME(m_expire)); |
| 298 | 298 | } |
| 299 | 299 | |
| 300 | 300 | |
| r11240 | r11241 | |
| 340 | 340 | m_quantum_minimum(ATTOSECONDS_IN_NSEC(1) / 1000) |
| 341 | 341 | { |
| 342 | 342 | // append a single never-expiring timer so there is always one in the list |
| 343 | | m_timer_list = &m_timer_allocator.alloc()->init(m_machine, NULL, NULL, NULL, true); |
| 343 | m_timer_list = &m_timer_allocator.alloc()->init(machine, NULL, NULL, NULL, true); |
| 344 | 344 | m_timer_list->adjust(attotime::never); |
| 345 | 345 | |
| 346 | 346 | // register global states |
| 347 | | m_machine.state().save_item(NAME(m_basetime)); |
| 348 | | m_machine.state().register_postload(&state_postload_stub<device_scheduler, &device_scheduler::postload>, this); |
| 347 | machine.state().save_item(NAME(m_basetime)); |
| 348 | machine.state().register_postload(&state_postload_stub<device_scheduler, &device_scheduler::postload>, this); |
| 349 | 349 | } |
| 350 | 350 | |
| 351 | 351 | |
| r11240 | r11241 | |
| 401 | 401 | |
| 402 | 402 | void device_scheduler::timeslice() |
| 403 | 403 | { |
| 404 | | bool call_debugger = ((m_machine.debug_flags & DEBUG_FLAG_ENABLED) != 0); |
| 404 | bool call_debugger = ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0); |
| 405 | 405 | |
| 406 | 406 | // build the execution list if we don't have one yet |
| 407 | 407 | if (m_execute_list == NULL) |
| r11240 | r11241 | |
| 562 | 562 | |
| 563 | 563 | emu_timer *device_scheduler::timer_alloc(timer_expired_func callback, const char *name, void *ptr) |
| 564 | 564 | { |
| 565 | | return &m_timer_allocator.alloc()->init(m_machine, callback, name, ptr, false); |
| 565 | return &m_timer_allocator.alloc()->init(machine(), callback, name, ptr, false); |
| 566 | 566 | } |
| 567 | 567 | |
| 568 | 568 | |
| r11240 | r11241 | |
| 574 | 574 | |
| 575 | 575 | void device_scheduler::timer_set(attotime duration, timer_expired_func callback, const char *name, int param, void *ptr) |
| 576 | 576 | { |
| 577 | | m_timer_allocator.alloc()->init(m_machine, callback, name, ptr, true).adjust(duration, param); |
| 577 | m_timer_allocator.alloc()->init(machine(), callback, name, ptr, true).adjust(duration, param); |
| 578 | 578 | } |
| 579 | 579 | |
| 580 | 580 | |
| r11240 | r11241 | |
| 586 | 586 | |
| 587 | 587 | void device_scheduler::timer_pulse(attotime period, timer_expired_func callback, const char *name, int param, void *ptr) |
| 588 | 588 | { |
| 589 | | m_timer_allocator.alloc()->init(m_machine, callback, name, ptr, false).adjust(period, param, period); |
| 589 | m_timer_allocator.alloc()->init(machine(), callback, name, ptr, false).adjust(period, param, period); |
| 590 | 590 | } |
| 591 | 591 | |
| 592 | 592 | |
| r11240 | r11241 | |
| 719 | 719 | if (m_quantum_list.first() == NULL) |
| 720 | 720 | { |
| 721 | 721 | // set the core scheduling quantum |
| 722 | | attotime min_quantum = m_machine.config().m_minimum_quantum; |
| 722 | attotime min_quantum = machine().config().m_minimum_quantum; |
| 723 | 723 | |
| 724 | 724 | // if none specified default to 60Hz |
| 725 | 725 | if (min_quantum == attotime::zero) |
| 726 | 726 | min_quantum = attotime::from_hz(60); |
| 727 | 727 | |
| 728 | 728 | // if the configuration specifies a device to make perfect, pick that as the minimum |
| 729 | | if (m_machine.config().m_perfect_cpu_quantum != NULL) |
| 729 | if (machine().config().m_perfect_cpu_quantum != NULL) |
| 730 | 730 | { |
| 731 | | device_t *device = m_machine.device(m_machine.config().m_perfect_cpu_quantum); |
| 731 | device_t *device = machine().device(machine().config().m_perfect_cpu_quantum); |
| 732 | 732 | if (device == NULL) |
| 733 | | fatalerror("Device '%s' specified for perfect interleave is not present!", m_machine.config().m_perfect_cpu_quantum); |
| 733 | fatalerror("Device '%s' specified for perfect interleave is not present!", machine().config().m_perfect_cpu_quantum); |
| 734 | 734 | |
| 735 | 735 | device_execute_interface *exec; |
| 736 | 736 | if (!device->interface(exec)) |
| 737 | | fatalerror("Device '%s' specified for perfect interleave is not an executing device!", m_machine.config().m_perfect_cpu_quantum); |
| 737 | fatalerror("Device '%s' specified for perfect interleave is not an executing device!", machine().config().m_perfect_cpu_quantum); |
| 738 | 738 | |
| 739 | 739 | min_quantum = min(attotime(0, exec->minimum_quantum()), min_quantum); |
| 740 | 740 | } |
| r11240 | r11241 | |
| 756 | 756 | |
| 757 | 757 | // iterate over all devices |
| 758 | 758 | device_execute_interface *exec = NULL; |
| 759 | | for (bool gotone = m_machine.m_devicelist.first(exec); gotone; gotone = exec->next(exec)) |
| 759 | for (bool gotone = machine().m_devicelist.first(exec); gotone; gotone = exec->next(exec)) |
| 760 | 760 | { |
| 761 | 761 | // append to the appropriate list |
| 762 | 762 | exec->m_nextexec = NULL; |
| r11240 | r11241 | |
| 875 | 875 | if (timer.m_device != NULL) |
| 876 | 876 | timer.m_device->timer_expired(timer, timer.m_id, timer.m_param, timer.m_ptr); |
| 877 | 877 | else if (timer.m_callback != NULL) |
| 878 | | (*timer.m_callback)(m_machine, timer.m_ptr, timer.m_param); |
| 878 | (*timer.m_callback)(machine(), timer.m_ptr, timer.m_param); |
| 879 | 879 | |
| 880 | 880 | g_profiler.stop(); |
| 881 | 881 | } |
src/emu/memory.c
| r11240 | r11241 | |
| 262 | 262 | ~memory_block(); |
| 263 | 263 | |
| 264 | 264 | // getters |
| 265 | running_machine &machine() const { return m_machine; } |
| 265 | 266 | memory_block *next() const { return m_next; } |
| 266 | 267 | offs_t bytestart() const { return m_bytestart; } |
| 267 | 268 | offs_t byteend() const { return m_byteend; } |
| r11240 | r11241 | |
| 336 | 337 | |
| 337 | 338 | // getters |
| 338 | 339 | memory_bank *next() const { return m_next; } |
| 340 | running_machine &machine() const { return m_machine; } |
| 339 | 341 | int index() const { return m_index; } |
| 340 | 342 | int entry() const { return m_curentry; } |
| 341 | 343 | bool anonymous() const { return m_anonymous; } |
| r11240 | r11241 | |
| 1793 | 1795 | : m_next(NULL), |
| 1794 | 1796 | m_config(*memory.space_config(spacenum)), |
| 1795 | 1797 | m_device(memory.device()), |
| 1796 | | m_machine(memory.device().machine()), |
| 1797 | 1798 | m_map(NULL), |
| 1798 | 1799 | m_addrmask(0xffffffffUL >> (32 - m_config.m_addrbus_width)), |
| 1799 | 1800 | m_bytemask(address_to_byte_end(m_addrmask)), |
| r11240 | r11241 | |
| 1806 | 1807 | m_direct(*auto_alloc(memory.device().machine(), direct_read_data(*this))), |
| 1807 | 1808 | m_name(memory.space_config(spacenum)->name()), |
| 1808 | 1809 | m_addrchars((m_config.m_databus_width + 3) / 4), |
| 1809 | | m_logaddrchars((m_config.m_logaddr_width + 3) / 4) |
| 1810 | m_logaddrchars((m_config.m_logaddr_width + 3) / 4), |
| 1811 | m_machine(memory.device().machine()) |
| 1810 | 1812 | { |
| 1811 | 1813 | // notify the device |
| 1812 | 1814 | memory.set_address_space(spacenum, *this); |
| r11240 | r11241 | |
| 1934 | 1936 | |
| 1935 | 1937 | void address_space::prepare_map() |
| 1936 | 1938 | { |
| 1937 | | const memory_region *devregion = (m_spacenum == AS_0) ? m_machine.region(m_device.tag()) : NULL; |
| 1939 | const memory_region *devregion = (m_spacenum == AS_0) ? machine().region(m_device.tag()) : NULL; |
| 1938 | 1940 | UINT32 devregionsize = (devregion != NULL) ? devregion->bytes() : 0; |
| 1939 | 1941 | |
| 1940 | 1942 | // allocate the address map |
| r11240 | r11241 | |
| 1959 | 1961 | adjust_addresses(entry->m_bytestart, entry->m_byteend, entry->m_bytemask, entry->m_bytemirror); |
| 1960 | 1962 | |
| 1961 | 1963 | // if we have a share entry, add it to our map |
| 1962 | | if (entry->m_share != NULL && m_machine.memory_data->sharemap.find(entry->m_share) == NULL) |
| 1964 | if (entry->m_share != NULL && machine().memory_data->sharemap.find(entry->m_share) == NULL) |
| 1963 | 1965 | { |
| 1964 | 1966 | VPRINTF(("Creating share '%s' of length 0x%X\n", entry->m_share, entry->m_byteend + 1 - entry->m_bytestart)); |
| 1965 | | memory_share *share = auto_alloc(m_machine, memory_share(entry->m_byteend + 1 - entry->m_bytestart)); |
| 1966 | | m_machine.memory_data->sharemap.add(entry->m_share, share, false); |
| 1967 | memory_share *share = auto_alloc(machine(), memory_share(entry->m_byteend + 1 - entry->m_bytestart)); |
| 1968 | machine().memory_data->sharemap.add(entry->m_share, share, false); |
| 1967 | 1969 | } |
| 1968 | 1970 | |
| 1969 | 1971 | // if this is a ROM handler without a specified region, attach it to the implicit region |
| r11240 | r11241 | |
| 1980 | 1982 | // validate adjusted addresses against implicit regions |
| 1981 | 1983 | if (entry->m_region != NULL && entry->m_share == NULL && entry->m_baseptr == NULL) |
| 1982 | 1984 | { |
| 1983 | | const memory_region *region = m_machine.region(entry->m_region); |
| 1985 | const memory_region *region = machine().region(entry->m_region); |
| 1984 | 1986 | if (region == NULL) |
| 1985 | 1987 | fatalerror("Error: device '%s' %s space memory map entry %X-%X references non-existant region \"%s\"", m_device.tag(), m_name, entry->m_addrstart, entry->m_addrend, entry->m_region); |
| 1986 | 1988 | |
| r11240 | r11241 | |
| 1991 | 1993 | |
| 1992 | 1994 | // convert any region-relative entries to their memory pointers |
| 1993 | 1995 | if (entry->m_region != NULL) |
| 1994 | | entry->m_memory = m_machine.region(entry->m_region)->base() + entry->m_rgnoffs; |
| 1996 | entry->m_memory = machine().region(entry->m_region)->base() + entry->m_rgnoffs; |
| 1995 | 1997 | } |
| 1996 | 1998 | |
| 1997 | 1999 | // now loop over all the handlers and enforce the address mask |
| r11240 | r11241 | |
| 2068 | 2070 | case AMH_DEVICE_DELEGATE: |
| 2069 | 2071 | if (data.m_type == AMH_DRIVER_DELEGATE) |
| 2070 | 2072 | { |
| 2071 | | object = m_machine.driver_data<driver_device>(); |
| 2073 | object = machine().driver_data<driver_device>(); |
| 2072 | 2074 | if (object == NULL) |
| 2073 | 2075 | throw emu_fatalerror("Attempted to map a driver delegate in space %s of device '%s' when there is no driver data\n", m_name, m_device.tag()); |
| 2074 | 2076 | } |
| 2075 | 2077 | else |
| 2076 | 2078 | { |
| 2077 | | object = m_machine.device(data.m_tag); |
| 2079 | object = machine().device(data.m_tag); |
| 2078 | 2080 | if (object == NULL) |
| 2079 | 2081 | throw emu_fatalerror("Attempted to map a non-existent device '%s' in space %s of device '%s'\n", data.m_tag, m_name, m_device.tag()); |
| 2080 | 2082 | } |
| r11240 | r11241 | |
| 2117 | 2119 | break; |
| 2118 | 2120 | |
| 2119 | 2121 | case AMH_LEGACY_DEVICE_HANDLER: |
| 2120 | | device = m_machine.device(data.m_tag); |
| 2122 | device = machine().device(data.m_tag); |
| 2121 | 2123 | if (device == NULL) |
| 2122 | 2124 | fatalerror("Attempted to map a non-existent device '%s' in space %s of device '%s'\n", data.m_tag, m_name, m_device.tag()); |
| 2123 | 2125 | |
| r11240 | r11241 | |
| 2162 | 2164 | |
| 2163 | 2165 | void address_space::allocate_memory() |
| 2164 | 2166 | { |
| 2165 | | simple_list<memory_block> &blocklist = m_machine.memory_data->blocklist; |
| 2167 | simple_list<memory_block> &blocklist = machine().memory_data->blocklist; |
| 2166 | 2168 | |
| 2167 | 2169 | // make a first pass over the memory map and track blocks with hardcoded pointers |
| 2168 | 2170 | // we do this to make sure they are found by space_find_backing_memory first |
| 2169 | 2171 | memory_block *prev_memblock_tail = blocklist.last(); |
| 2170 | 2172 | for (address_map_entry *entry = m_map->m_entrylist.first(); entry != NULL; entry = entry->next()) |
| 2171 | 2173 | if (entry->m_memory != NULL) |
| 2172 | | blocklist.append(*auto_alloc(m_machine, memory_block(*this, entry->m_bytestart, entry->m_byteend, entry->m_memory))); |
| 2174 | blocklist.append(*auto_alloc(machine(), memory_block(*this, entry->m_bytestart, entry->m_byteend, entry->m_memory))); |
| 2173 | 2175 | |
| 2174 | 2176 | // loop over all blocks just allocated and assign pointers from them |
| 2175 | 2177 | address_map_entry *unassigned = NULL; |
| r11240 | r11241 | |
| 2216 | 2218 | // we now have a block to allocate; do it |
| 2217 | 2219 | offs_t curbytestart = curblockstart * MEMORY_BLOCK_CHUNK; |
| 2218 | 2220 | offs_t curbyteend = curblockend * MEMORY_BLOCK_CHUNK + (MEMORY_BLOCK_CHUNK - 1); |
| 2219 | | memory_block &block = blocklist.append(*auto_alloc(m_machine, memory_block(*this, curbytestart, curbyteend))); |
| 2221 | memory_block &block = blocklist.append(*auto_alloc(machine(), memory_block(*this, curbytestart, curbyteend))); |
| 2220 | 2222 | |
| 2221 | 2223 | // assign memory that intersected the new block |
| 2222 | 2224 | unassigned = block_assign_intersecting(curbytestart, curbyteend, block.data()); |
| r11240 | r11241 | |
| 2237 | 2239 | if (entry->m_baseptr != NULL) |
| 2238 | 2240 | *entry->m_baseptr = entry->m_memory; |
| 2239 | 2241 | if (entry->m_baseptroffs_plus1 != 0) |
| 2240 | | *(void **)(reinterpret_cast<UINT8 *>(m_machine.driver_data<void>()) + entry->m_baseptroffs_plus1 - 1) = entry->m_memory; |
| 2242 | *(void **)(reinterpret_cast<UINT8 *>(machine().driver_data<void>()) + entry->m_baseptroffs_plus1 - 1) = entry->m_memory; |
| 2241 | 2243 | if (entry->m_genbaseptroffs_plus1 != 0) |
| 2242 | | *(void **)((UINT8 *)&m_machine.generic + entry->m_genbaseptroffs_plus1 - 1) = entry->m_memory; |
| 2244 | *(void **)((UINT8 *)&machine().generic + entry->m_genbaseptroffs_plus1 - 1) = entry->m_memory; |
| 2243 | 2245 | if (entry->m_sizeptr != NULL) |
| 2244 | 2246 | *entry->m_sizeptr = entry->m_byteend - entry->m_bytestart + 1; |
| 2245 | 2247 | if (entry->m_sizeptroffs_plus1 != 0) |
| 2246 | | *(size_t *)(reinterpret_cast<UINT8 *>(m_machine.driver_data<void>()) + entry->m_sizeptroffs_plus1 - 1) = entry->m_byteend - entry->m_bytestart + 1; |
| 2248 | *(size_t *)(reinterpret_cast<UINT8 *>(machine().driver_data<void>()) + entry->m_sizeptroffs_plus1 - 1) = entry->m_byteend - entry->m_bytestart + 1; |
| 2247 | 2249 | if (entry->m_gensizeptroffs_plus1 != 0) |
| 2248 | | *(size_t *)((UINT8 *)&m_machine.generic + entry->m_gensizeptroffs_plus1 - 1) = entry->m_byteend - entry->m_bytestart + 1; |
| 2250 | *(size_t *)((UINT8 *)&machine().generic + entry->m_gensizeptroffs_plus1 - 1) = entry->m_byteend - entry->m_bytestart + 1; |
| 2249 | 2251 | } |
| 2250 | 2252 | |
| 2251 | 2253 | // once this is done, find the starting bases for the banks |
| 2252 | | for (memory_bank *bank = m_machine.memory_data->banklist.first(); bank != NULL; bank = bank->next()) |
| 2254 | for (memory_bank *bank = machine().memory_data->banklist.first(); bank != NULL; bank = bank->next()) |
| 2253 | 2255 | if (bank->base() == NULL && bank->references_space(*this, ROW_READWRITE)) |
| 2254 | 2256 | { |
| 2255 | 2257 | // set the initial bank pointer |
| r11240 | r11241 | |
| 2280 | 2282 | bool found = false; |
| 2281 | 2283 | |
| 2282 | 2284 | // loop over banks looking for a match |
| 2283 | | for (memory_bank *bank = m_machine.memory_data->banklist.first(); bank != NULL; bank = bank->next()) |
| 2285 | for (memory_bank *bank = machine().memory_data->banklist.first(); bank != NULL; bank = bank->next()) |
| 2284 | 2286 | { |
| 2285 | 2287 | // consider this bank if it is used for reading and matches the address space |
| 2286 | 2288 | if (bank->references_space(*this, ROW_READ)) |
| r11240 | r11241 | |
| 2312 | 2314 | |
| 2313 | 2315 | address_map_entry *address_space::block_assign_intersecting(offs_t bytestart, offs_t byteend, UINT8 *base) |
| 2314 | 2316 | { |
| 2315 | | memory_private *memdata = m_machine.memory_data; |
| 2317 | memory_private *memdata = machine().memory_data; |
| 2316 | 2318 | address_map_entry *unassigned = NULL; |
| 2317 | 2319 | |
| 2318 | 2320 | // loop over the adjusted map and assign memory to any blocks we can |
| r11240 | r11241 | |
| 2444 | 2446 | if (rtag != NULL) |
| 2445 | 2447 | { |
| 2446 | 2448 | // find the port |
| 2447 | | const input_port_config *port = m_machine.port(rtag); |
| 2449 | const input_port_config *port = machine().port(rtag); |
| 2448 | 2450 | if (port == NULL) |
| 2449 | 2451 | throw emu_fatalerror("Attempted to map non-existent port '%s' for read in space %s of device '%s'\n", rtag, m_name, m_device.tag()); |
| 2450 | 2452 | |
| r11240 | r11241 | |
| 2456 | 2458 | if (wtag != NULL) |
| 2457 | 2459 | { |
| 2458 | 2460 | // find the port |
| 2459 | | const input_port_config *port = m_machine.port(wtag); |
| 2461 | const input_port_config *port = machine().port(wtag); |
| 2460 | 2462 | if (port == NULL) |
| 2461 | 2463 | fatalerror("Attempted to map non-existent port '%s' for write in space %s of device '%s'\n", wtag, m_name, m_device.tag()); |
| 2462 | 2464 | |
| r11240 | r11241 | |
| 2466 | 2468 | } |
| 2467 | 2469 | |
| 2468 | 2470 | // update the memory dump |
| 2469 | | generate_memdump(m_machine); |
| 2471 | generate_memdump(machine()); |
| 2470 | 2472 | } |
| 2471 | 2473 | |
| 2472 | 2474 | |
| r11240 | r11241 | |
| 2497 | 2499 | } |
| 2498 | 2500 | |
| 2499 | 2501 | // update the memory dump |
| 2500 | | generate_memdump(m_machine); |
| 2502 | generate_memdump(machine()); |
| 2501 | 2503 | } |
| 2502 | 2504 | |
| 2503 | 2505 | |
| r11240 | r11241 | |
| 2508 | 2510 | |
| 2509 | 2511 | void *address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr) |
| 2510 | 2512 | { |
| 2511 | | memory_private *memdata = m_machine.memory_data; |
| 2513 | memory_private *memdata = machine().memory_data; |
| 2512 | 2514 | |
| 2513 | 2515 | VPRINTF(("address_space::install_ram_generic(%s-%s mask=%s mirror=%s, %s, %p)\n", |
| 2514 | 2516 | core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), |
| r11240 | r11241 | |
| 2538 | 2540 | // if we still don't have a pointer, and we're past the initialization phase, allocate a new block |
| 2539 | 2541 | if (bank.base() == NULL && memdata->initialized) |
| 2540 | 2542 | { |
| 2541 | | if (m_machine.phase() >= MACHINE_PHASE_RESET) |
| 2543 | if (machine().phase() >= MACHINE_PHASE_RESET) |
| 2542 | 2544 | fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!"); |
| 2543 | | memory_block &block = memdata->blocklist.append(*auto_alloc(m_machine, memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); |
| 2545 | memory_block &block = memdata->blocklist.append(*auto_alloc(machine(), memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); |
| 2544 | 2546 | bank.set_base(block.data()); |
| 2545 | 2547 | } |
| 2546 | 2548 | } |
| r11240 | r11241 | |
| 2567 | 2569 | // if we still don't have a pointer, and we're past the initialization phase, allocate a new block |
| 2568 | 2570 | if (bank.base() == NULL && memdata->initialized) |
| 2569 | 2571 | { |
| 2570 | | if (m_machine.phase() >= MACHINE_PHASE_RESET) |
| 2572 | if (machine().phase() >= MACHINE_PHASE_RESET) |
| 2571 | 2573 | fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!"); |
| 2572 | | memory_block &block = memdata->blocklist.append(*auto_alloc(m_machine, memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); |
| 2574 | memory_block &block = memdata->blocklist.append(*auto_alloc(machine(), memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); |
| 2573 | 2575 | bank.set_base(block.data()); |
| 2574 | 2576 | } |
| 2575 | 2577 | } |
| r11240 | r11241 | |
| 2592 | 2594 | |
| 2593 | 2595 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2594 | 2596 | read().handler_read(entry).set_delegate(handler, unitmask); |
| 2595 | | generate_memdump(m_machine); |
| 2597 | generate_memdump(machine()); |
| 2596 | 2598 | return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend)); |
| 2597 | 2599 | } |
| 2598 | 2600 | |
| r11240 | r11241 | |
| 2605 | 2607 | |
| 2606 | 2608 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2607 | 2609 | write().handler_write(entry).set_delegate(handler, unitmask); |
| 2608 | | generate_memdump(m_machine); |
| 2610 | generate_memdump(machine()); |
| 2609 | 2611 | return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend)); |
| 2610 | 2612 | } |
| 2611 | 2613 | |
| r11240 | r11241 | |
| 2631 | 2633 | |
| 2632 | 2634 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2633 | 2635 | read().handler_read(entry).set_legacy_func(*this, rhandler, rname, unitmask); |
| 2634 | | generate_memdump(m_machine); |
| 2636 | generate_memdump(machine()); |
| 2635 | 2637 | return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend)); |
| 2636 | 2638 | } |
| 2637 | 2639 | |
| r11240 | r11241 | |
| 2644 | 2646 | |
| 2645 | 2647 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2646 | 2648 | write().handler_write(entry).set_legacy_func(*this, whandler, wname, unitmask); |
| 2647 | | generate_memdump(m_machine); |
| 2649 | generate_memdump(machine()); |
| 2648 | 2650 | return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend)); |
| 2649 | 2651 | } |
| 2650 | 2652 | |
| r11240 | r11241 | |
| 2669 | 2671 | |
| 2670 | 2672 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2671 | 2673 | read().handler_read(entry).set_legacy_func(device, rhandler, rname, unitmask); |
| 2672 | | generate_memdump(m_machine); |
| 2674 | generate_memdump(machine()); |
| 2673 | 2675 | return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend)); |
| 2674 | 2676 | } |
| 2675 | 2677 | |
| r11240 | r11241 | |
| 2682 | 2684 | |
| 2683 | 2685 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2684 | 2686 | write().handler_write(entry).set_legacy_func(device, whandler, wname, unitmask); |
| 2685 | | generate_memdump(m_machine); |
| 2687 | generate_memdump(machine()); |
| 2686 | 2688 | return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend)); |
| 2687 | 2689 | } |
| 2688 | 2690 | |
| r11240 | r11241 | |
| 2702 | 2704 | { |
| 2703 | 2705 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2704 | 2706 | read().handler_read(entry).set_delegate(handler, unitmask); |
| 2705 | | generate_memdump(m_machine); |
| 2707 | generate_memdump(machine()); |
| 2706 | 2708 | return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend)); |
| 2707 | 2709 | } |
| 2708 | 2710 | |
| r11240 | r11241 | |
| 2710 | 2712 | { |
| 2711 | 2713 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2712 | 2714 | write().handler_write(entry).set_delegate(handler, unitmask); |
| 2713 | | generate_memdump(m_machine); |
| 2715 | generate_memdump(machine()); |
| 2714 | 2716 | return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend)); |
| 2715 | 2717 | } |
| 2716 | 2718 | |
| r11240 | r11241 | |
| 2731 | 2733 | { |
| 2732 | 2734 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2733 | 2735 | read().handler_read(entry).set_legacy_func(*this, rhandler, rname, unitmask); |
| 2734 | | generate_memdump(m_machine); |
| 2736 | generate_memdump(machine()); |
| 2735 | 2737 | return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend)); |
| 2736 | 2738 | } |
| 2737 | 2739 | |
| r11240 | r11241 | |
| 2739 | 2741 | { |
| 2740 | 2742 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2741 | 2743 | write().handler_write(entry).set_legacy_func(*this, whandler, wname, unitmask); |
| 2742 | | generate_memdump(m_machine); |
| 2744 | generate_memdump(machine()); |
| 2743 | 2745 | return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend)); |
| 2744 | 2746 | } |
| 2745 | 2747 | |
| r11240 | r11241 | |
| 2759 | 2761 | { |
| 2760 | 2762 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2761 | 2763 | read().handler_read(entry).set_legacy_func(device, rhandler, rname, unitmask); |
| 2762 | | generate_memdump(m_machine); |
| 2764 | generate_memdump(machine()); |
| 2763 | 2765 | return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend)); |
| 2764 | 2766 | } |
| 2765 | 2767 | |
| r11240 | r11241 | |
| 2767 | 2769 | { |
| 2768 | 2770 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2769 | 2771 | write().handler_write(entry).set_legacy_func(device, whandler, wname, unitmask); |
| 2770 | | generate_memdump(m_machine); |
| 2772 | generate_memdump(machine()); |
| 2771 | 2773 | return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend)); |
| 2772 | 2774 | } |
| 2773 | 2775 | |
| r11240 | r11241 | |
| 2787 | 2789 | { |
| 2788 | 2790 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2789 | 2791 | read().handler_read(entry).set_delegate(handler, unitmask); |
| 2790 | | generate_memdump(m_machine); |
| 2792 | generate_memdump(machine()); |
| 2791 | 2793 | return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend)); |
| 2792 | 2794 | } |
| 2793 | 2795 | |
| r11240 | r11241 | |
| 2795 | 2797 | { |
| 2796 | 2798 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2797 | 2799 | write().handler_write(entry).set_delegate(handler, unitmask); |
| 2798 | | generate_memdump(m_machine); |
| 2800 | generate_memdump(machine()); |
| 2799 | 2801 | return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend)); |
| 2800 | 2802 | } |
| 2801 | 2803 | |
| r11240 | r11241 | |
| 2816 | 2818 | { |
| 2817 | 2819 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2818 | 2820 | read().handler_read(entry).set_legacy_func(*this, rhandler, rname, unitmask); |
| 2819 | | generate_memdump(m_machine); |
| 2821 | generate_memdump(machine()); |
| 2820 | 2822 | return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend)); |
| 2821 | 2823 | } |
| 2822 | 2824 | |
| r11240 | r11241 | |
| 2824 | 2826 | { |
| 2825 | 2827 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2826 | 2828 | write().handler_write(entry).set_legacy_func(*this, whandler, wname, unitmask); |
| 2827 | | generate_memdump(m_machine); |
| 2829 | generate_memdump(machine()); |
| 2828 | 2830 | return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend)); |
| 2829 | 2831 | } |
| 2830 | 2832 | |
| r11240 | r11241 | |
| 2844 | 2846 | { |
| 2845 | 2847 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2846 | 2848 | read().handler_read(entry).set_legacy_func(device, rhandler, rname, unitmask); |
| 2847 | | generate_memdump(m_machine); |
| 2849 | generate_memdump(machine()); |
| 2848 | 2850 | return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend)); |
| 2849 | 2851 | } |
| 2850 | 2852 | |
| r11240 | r11241 | |
| 2852 | 2854 | { |
| 2853 | 2855 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2854 | 2856 | write().handler_write(entry).set_legacy_func(device, whandler, wname, unitmask); |
| 2855 | | generate_memdump(m_machine); |
| 2857 | generate_memdump(machine()); |
| 2856 | 2858 | return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend)); |
| 2857 | 2859 | } |
| 2858 | 2860 | |
| r11240 | r11241 | |
| 2872 | 2874 | { |
| 2873 | 2875 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2874 | 2876 | read().handler_read(entry).set_delegate(handler, unitmask); |
| 2875 | | generate_memdump(m_machine); |
| 2877 | generate_memdump(machine()); |
| 2876 | 2878 | return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend)); |
| 2877 | 2879 | } |
| 2878 | 2880 | |
| r11240 | r11241 | |
| 2880 | 2882 | { |
| 2881 | 2883 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2882 | 2884 | write().handler_write(entry).set_delegate(handler, unitmask); |
| 2883 | | generate_memdump(m_machine); |
| 2885 | generate_memdump(machine()); |
| 2884 | 2886 | return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend)); |
| 2885 | 2887 | } |
| 2886 | 2888 | |
| r11240 | r11241 | |
| 2901 | 2903 | { |
| 2902 | 2904 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2903 | 2905 | read().handler_read(entry).set_legacy_func(*this, rhandler, rname, unitmask); |
| 2904 | | generate_memdump(m_machine); |
| 2906 | generate_memdump(machine()); |
| 2905 | 2907 | return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend)); |
| 2906 | 2908 | } |
| 2907 | 2909 | |
| r11240 | r11241 | |
| 2909 | 2911 | { |
| 2910 | 2912 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2911 | 2913 | write().handler_write(entry).set_legacy_func(*this, whandler, wname, unitmask); |
| 2912 | | generate_memdump(m_machine); |
| 2914 | generate_memdump(machine()); |
| 2913 | 2915 | return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend)); |
| 2914 | 2916 | } |
| 2915 | 2917 | |
| r11240 | r11241 | |
| 2929 | 2931 | { |
| 2930 | 2932 | UINT32 entry = read().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2931 | 2933 | read().handler_read(entry).set_legacy_func(device, rhandler, rname, unitmask); |
| 2932 | | generate_memdump(m_machine); |
| 2934 | generate_memdump(machine()); |
| 2933 | 2935 | return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend)); |
| 2934 | 2936 | } |
| 2935 | 2937 | |
| r11240 | r11241 | |
| 2937 | 2939 | { |
| 2938 | 2940 | UINT32 entry = write().map_range(addrstart, addrend, addrmask, addrmirror); |
| 2939 | 2941 | write().handler_write(entry).set_legacy_func(device, whandler, wname, unitmask); |
| 2940 | | generate_memdump(m_machine); |
| 2942 | generate_memdump(machine()); |
| 2941 | 2943 | return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend)); |
| 2942 | 2944 | } |
| 2943 | 2945 | |
| r11240 | r11241 | |
| 2982 | 2984 | } |
| 2983 | 2985 | |
| 2984 | 2986 | // if not found there, look in the allocated blocks |
| 2985 | | for (memory_block *block = m_machine.memory_data->blocklist.first(); block != NULL; block = block->next()) |
| 2987 | for (memory_block *block = machine().memory_data->blocklist.first(); block != NULL; block = block->next()) |
| 2986 | 2988 | if (block->contains(*this, bytestart, byteend)) |
| 2987 | 2989 | { |
| 2988 | 2990 | VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block->bytestart(), block->byteend(), block->data() + (bytestart - block->bytestart()))); |
| r11240 | r11241 | |
| 3009 | 3011 | // if we are sharing, and we don't have a pointer yet, create one |
| 3010 | 3012 | if (entry->m_share != NULL) |
| 3011 | 3013 | { |
| 3012 | | memory_share *share = m_machine.memory_data->sharemap.find(entry->m_share); |
| 3014 | memory_share *share = machine().memory_data->sharemap.find(entry->m_share); |
| 3013 | 3015 | if (share != NULL && share->ptr() == NULL) |
| 3014 | 3016 | return true; |
| 3015 | 3017 | } |
| r11240 | r11241 | |
| 3019 | 3021 | return true; |
| 3020 | 3022 | |
| 3021 | 3023 | // if we're reading from RAM or from ROM outside of address space 0 or its region, then yes, we do need backing |
| 3022 | | const memory_region *region = m_machine.region(m_device.tag()); |
| 3024 | const memory_region *region = machine().region(m_device.tag()); |
| 3023 | 3025 | if (entry->m_read.m_type == AMH_RAM || |
| 3024 | 3026 | (entry->m_read.m_type == AMH_ROM && (m_spacenum != AS_0 || region == NULL || entry->m_addrstart >= region->bytes()))) |
| 3025 | 3027 | return true; |
| r11240 | r11241 | |
| 3042 | 3044 | |
| 3043 | 3045 | memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite) |
| 3044 | 3046 | { |
| 3045 | | memory_private *memdata = m_machine.memory_data; |
| 3047 | memory_private *memdata = machine().memory_data; |
| 3046 | 3048 | |
| 3047 | 3049 | // adjust the addresses, handling mirrors and such |
| 3048 | 3050 | offs_t bytemirror = addrmirror; |
| r11240 | r11241 | |
| 3076 | 3078 | } |
| 3077 | 3079 | |
| 3078 | 3080 | // allocate the bank |
| 3079 | | bank = auto_alloc(m_machine, memory_bank(*this, banknum, bytestart, byteend, tag)); |
| 3081 | bank = auto_alloc(machine(), memory_bank(*this, banknum, bytestart, byteend, tag)); |
| 3080 | 3082 | memdata->banklist.append(*bank); |
| 3081 | 3083 | |
| 3082 | 3084 | // for named banks, add to the map and register for save states |
| r11240 | r11241 | |
| 4104 | 4106 | memory_block::~memory_block() |
| 4105 | 4107 | { |
| 4106 | 4108 | if (m_allocated != NULL) |
| 4107 | | auto_free(m_machine, m_allocated); |
| 4109 | auto_free(machine(), m_allocated); |
| 4108 | 4110 | } |
| 4109 | 4111 | |
| 4110 | 4112 | |
| r11240 | r11241 | |
| 4153 | 4155 | |
| 4154 | 4156 | memory_bank::~memory_bank() |
| 4155 | 4157 | { |
| 4156 | | auto_free(m_machine, m_entry); |
| 4158 | auto_free(machine(), m_entry); |
| 4157 | 4159 | } |
| 4158 | 4160 | |
| 4159 | 4161 | |
| r11240 | r11241 | |
| 4267 | 4269 | int newcount = entrynum + 1; |
| 4268 | 4270 | |
| 4269 | 4271 | // allocate a new array and copy from the old one; zero out the new entries |
| 4270 | | bank_entry *newentry = auto_alloc_array(m_machine, bank_entry, newcount); |
| 4272 | bank_entry *newentry = auto_alloc_array(machine(), bank_entry, newcount); |
| 4271 | 4273 | memcpy(newentry, m_entry, sizeof(m_entry[0]) * m_entry_count); |
| 4272 | 4274 | memset(&newentry[m_entry_count], 0, (newcount - m_entry_count) * sizeof(m_entry[0])); |
| 4273 | 4275 | |
| 4274 | 4276 | // free the old array and set the updated values |
| 4275 | | auto_free(m_machine, m_entry); |
| 4277 | auto_free(machine(), m_entry); |
| 4276 | 4278 | m_entry = newentry; |
| 4277 | 4279 | m_entry_count = newcount; |
| 4278 | 4280 | } |
src/emu/screen.c
| r11240 | r11241 | |
| 347 | 347 | |
| 348 | 348 | screen_device::~screen_device() |
| 349 | 349 | { |
| 350 | | m_machine.render().texture_free(m_texture[0]); |
| 351 | | m_machine.render().texture_free(m_texture[1]); |
| 350 | machine().render().texture_free(m_texture[0]); |
| 351 | machine().render().texture_free(m_texture[1]); |
| 352 | 352 | if (m_burnin != NULL) |
| 353 | 353 | finalize_burnin(); |
| 354 | 354 | global_free(m_screen_overlay_bitmap); |
| r11240 | r11241 | |
| 371 | 371 | m_container->set_user_settings(settings); |
| 372 | 372 | |
| 373 | 373 | // allocate the VBLANK timers |
| 374 | | m_vblank_begin_timer = m_machine.scheduler().timer_alloc(FUNC(static_vblank_begin_callback), (void *)this); |
| 375 | | m_vblank_end_timer = m_machine.scheduler().timer_alloc(FUNC(static_vblank_end_callback), (void *)this); |
| 374 | m_vblank_begin_timer = machine().scheduler().timer_alloc(FUNC(static_vblank_begin_callback), (void *)this); |
| 375 | m_vblank_end_timer = machine().scheduler().timer_alloc(FUNC(static_vblank_end_callback), (void *)this); |
| 376 | 376 | |
| 377 | 377 | // allocate a timer to reset partial updates |
| 378 | | m_scanline0_timer = m_machine.scheduler().timer_alloc(FUNC(static_scanline0_callback), (void *)this); |
| 378 | m_scanline0_timer = machine().scheduler().timer_alloc(FUNC(static_scanline0_callback), (void *)this); |
| 379 | 379 | |
| 380 | 380 | // allocate a timer to generate per-scanline updates |
| 381 | | if ((m_machine.config().m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0) |
| 382 | | m_scanline_timer = m_machine.scheduler().timer_alloc(FUNC(static_scanline_update_callback), (void *)this); |
| 381 | if ((machine().config().m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0) |
| 382 | m_scanline_timer = machine().scheduler().timer_alloc(FUNC(static_scanline_update_callback), (void *)this); |
| 383 | 383 | |
| 384 | 384 | // configure the screen with the default parameters |
| 385 | 385 | configure(m_config.m_width, m_config.m_height, m_config.m_visarea, m_config.m_refresh); |
| r11240 | r11241 | |
| 389 | 389 | m_vblank_end_time = attotime(0, m_vblank_period); |
| 390 | 390 | |
| 391 | 391 | // start the timer to generate per-scanline updates |
| 392 | | if ((m_machine.config().m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0) |
| 392 | if ((machine().config().m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0) |
| 393 | 393 | m_scanline_timer->adjust(time_until_pos(0)); |
| 394 | 394 | |
| 395 | 395 | // create burn-in bitmap |
| 396 | | if (m_machine.options().burnin()) |
| 396 | if (machine().options().burnin()) |
| 397 | 397 | { |
| 398 | 398 | int width, height; |
| 399 | | if (sscanf(m_machine.options().snap_size(), "%dx%d", &width, &height) != 2 || width == 0 || height == 0) |
| 399 | if (sscanf(machine().options().snap_size(), "%dx%d", &width, &height) != 2 || width == 0 || height == 0) |
| 400 | 400 | width = height = 300; |
| 401 | | m_burnin = auto_alloc(m_machine, bitmap_t(width, height, BITMAP_FORMAT_INDEXED64)); |
| 401 | m_burnin = auto_alloc(machine(), bitmap_t(width, height, BITMAP_FORMAT_INDEXED64)); |
| 402 | 402 | if (m_burnin == NULL) |
| 403 | 403 | fatalerror("Error allocating burn-in bitmap for screen at (%dx%d)\n", width, height); |
| 404 | 404 | bitmap_fill(m_burnin, NULL, 0); |
| 405 | 405 | } |
| 406 | 406 | |
| 407 | 407 | // load the effect overlay |
| 408 | | const char *overname = m_machine.options().effect(); |
| 408 | const char *overname = machine().options().effect(); |
| 409 | 409 | if (overname != NULL && strcmp(overname, "none") != 0) |
| 410 | 410 | load_effect_overlay(overname); |
| 411 | 411 | |
| r11240 | r11241 | |
| 484 | 484 | m_vblank_begin_timer->adjust(time_until_vblank_start()); |
| 485 | 485 | |
| 486 | 486 | // adjust speed if necessary |
| 487 | | m_machine.video().update_refresh_speed(); |
| 487 | machine().video().update_refresh_speed(); |
| 488 | 488 | } |
| 489 | 489 | |
| 490 | 490 | |
| r11240 | r11241 | |
| 496 | 496 | void screen_device::reset_origin(int beamy, int beamx) |
| 497 | 497 | { |
| 498 | 498 | // compute the effective VBLANK start/end times |
| 499 | | attotime curtime = m_machine.time(); |
| 499 | attotime curtime = machine().time(); |
| 500 | 500 | m_vblank_end_time = curtime - attotime(0, beamy * m_scantime + beamx * m_pixeltime); |
| 501 | 501 | m_vblank_start_time = m_vblank_end_time - attotime(0, m_vblank_period); |
| 502 | 502 | |
| r11240 | r11241 | |
| 539 | 539 | if (m_width > curwidth || m_height > curheight) |
| 540 | 540 | { |
| 541 | 541 | // free what we have currently |
| 542 | | m_machine.render().texture_free(m_texture[0]); |
| 543 | | m_machine.render().texture_free(m_texture[1]); |
| 544 | | auto_free(m_machine, m_bitmap[0]); |
| 545 | | auto_free(m_machine, m_bitmap[1]); |
| 542 | machine().render().texture_free(m_texture[0]); |
| 543 | machine().render().texture_free(m_texture[1]); |
| 544 | auto_free(machine(), m_bitmap[0]); |
| 545 | auto_free(machine(), m_bitmap[1]); |
| 546 | 546 | |
| 547 | 547 | // compute new width/height |
| 548 | 548 | curwidth = MAX(m_width, curwidth); |
| r11240 | r11241 | |
| 552 | 552 | palette_t *palette = NULL; |
| 553 | 553 | switch (m_config.m_format) |
| 554 | 554 | { |
| 555 | | case BITMAP_FORMAT_INDEXED16: m_texture_format = TEXFORMAT_PALETTE16; palette = m_machine.palette; break; |
| 555 | case BITMAP_FORMAT_INDEXED16: m_texture_format = TEXFORMAT_PALETTE16; palette = machine().palette; break; |
| 556 | 556 | case BITMAP_FORMAT_RGB15: m_texture_format = TEXFORMAT_RGB15; palette = NULL; break; |
| 557 | 557 | case BITMAP_FORMAT_RGB32: m_texture_format = TEXFORMAT_RGB32; palette = NULL; break; |
| 558 | 558 | default: fatalerror("Invalid bitmap format!"); break; |
| 559 | 559 | } |
| 560 | 560 | |
| 561 | 561 | // allocate bitmaps |
| 562 | | m_bitmap[0] = auto_alloc(m_machine, bitmap_t(curwidth, curheight, m_config.m_format)); |
| 563 | | bitmap_set_palette(m_bitmap[0], m_machine.palette); |
| 564 | | m_bitmap[1] = auto_alloc(m_machine, bitmap_t(curwidth, curheight, m_config.m_format)); |
| 565 | | bitmap_set_palette(m_bitmap[1], m_machine.palette); |
| 562 | m_bitmap[0] = auto_alloc(machine(), bitmap_t(curwidth, curheight, m_config.m_format)); |
| 563 | bitmap_set_palette(m_bitmap[0], machine().palette); |
| 564 | m_bitmap[1] = auto_alloc(machine(), bitmap_t(curwidth, curheight, m_config.m_format)); |
| 565 | bitmap_set_palette(m_bitmap[1], machine().palette); |
| 566 | 566 | |
| 567 | 567 | // allocate textures |
| 568 | | m_texture[0] = m_machine.render().texture_alloc(); |
| 568 | m_texture[0] = machine().render().texture_alloc(); |
| 569 | 569 | m_texture[0]->set_bitmap(m_bitmap[0], &m_visarea, m_texture_format, palette); |
| 570 | | m_texture[1] = m_machine.render().texture_alloc(); |
| 570 | m_texture[1] = machine().render().texture_alloc(); |
| 571 | 571 | m_texture[1]->set_bitmap(m_bitmap[1], &m_visarea, m_texture_format, palette); |
| 572 | 572 | } |
| 573 | 573 | } |
| r11240 | r11241 | |
| 609 | 609 | LOG_PARTIAL_UPDATES(("Partial: update_partial(%s, %d): ", tag(), scanline)); |
| 610 | 610 | |
| 611 | 611 | // these two checks only apply if we're allowed to skip frames |
| 612 | | if (!(m_machine.config().m_video_attributes & VIDEO_ALWAYS_UPDATE)) |
| 612 | if (!(machine().config().m_video_attributes & VIDEO_ALWAYS_UPDATE)) |
| 613 | 613 | { |
| 614 | 614 | // if skipping this frame, bail |
| 615 | | if (m_machine.video().skip_this_frame()) |
| 615 | if (machine().video().skip_this_frame()) |
| 616 | 616 | { |
| 617 | 617 | LOG_PARTIAL_UPDATES(("skipped due to frameskipping\n")); |
| 618 | 618 | return FALSE; |
| 619 | 619 | } |
| 620 | 620 | |
| 621 | 621 | // skip if this screen is not visible anywhere |
| 622 | | if (!m_machine.render().is_live(*this)) |
| 622 | if (!machine().render().is_live(*this)) |
| 623 | 623 | { |
| 624 | 624 | LOG_PARTIAL_UPDATES(("skipped because screen not live\n")); |
| 625 | 625 | return FALSE; |
| r11240 | r11241 | |
| 696 | 696 | |
| 697 | 697 | int screen_device::vpos() const |
| 698 | 698 | { |
| 699 | | attoseconds_t delta = (m_machine.time() - m_vblank_start_time).as_attoseconds(); |
| 699 | attoseconds_t delta = (machine().time() - m_vblank_start_time).as_attoseconds(); |
| 700 | 700 | int vpos; |
| 701 | 701 | |
| 702 | 702 | // round to the nearest pixel |
| r11240 | r11241 | |
| 717 | 717 | |
| 718 | 718 | int screen_device::hpos() const |
| 719 | 719 | { |
| 720 | | attoseconds_t delta = (m_machine.time() - m_vblank_start_time).as_attoseconds(); |
| 720 | attoseconds_t delta = (machine().time() - m_vblank_start_time).as_attoseconds(); |
| 721 | 721 | |
| 722 | 722 | // round to the nearest pixel |
| 723 | 723 | delta += m_pixeltime / 2; |
| r11240 | r11241 | |
| 753 | 753 | attoseconds_t targetdelta = (attoseconds_t)vpos * m_scantime + (attoseconds_t)hpos * m_pixeltime; |
| 754 | 754 | |
| 755 | 755 | // if we're past that time (within 1/2 of a pixel), head to the next frame |
| 756 | | attoseconds_t curdelta = (m_machine.time() - m_vblank_start_time).as_attoseconds(); |
| 756 | attoseconds_t curdelta = (machine().time() - m_vblank_start_time).as_attoseconds(); |
| 757 | 757 | if (targetdelta <= curdelta + m_pixeltime / 2) |
| 758 | 758 | targetdelta += m_frame_period; |
| 759 | 759 | while (targetdelta <= curdelta) |
| r11240 | r11241 | |
| 777 | 777 | attotime target_time = m_vblank_end_time; |
| 778 | 778 | if (!vblank()) |
| 779 | 779 | target_time += attotime(0, m_frame_period); |
| 780 | | return target_time - m_machine.time(); |
| 780 | return target_time - machine().time(); |
| 781 | 781 | } |
| 782 | 782 | |
| 783 | 783 | |
| r11240 | r11241 | |
| 800 | 800 | // if not found, register |
| 801 | 801 | if (*itemptr == NULL) |
| 802 | 802 | { |
| 803 | | *itemptr = auto_alloc(m_machine, callback_item); |
| 803 | *itemptr = auto_alloc(machine(), callback_item); |
| 804 | 804 | (*itemptr)->m_next = NULL; |
| 805 | 805 | (*itemptr)->m_callback = vblank_callback; |
| 806 | 806 | (*itemptr)->m_param = param; |
| r11240 | r11241 | |
| 816 | 816 | void screen_device::vblank_begin_callback() |
| 817 | 817 | { |
| 818 | 818 | // reset the starting VBLANK time |
| 819 | | m_vblank_start_time = m_machine.time(); |
| 819 | m_vblank_start_time = machine().time(); |
| 820 | 820 | m_vblank_end_time = m_vblank_start_time + attotime(0, m_vblank_period); |
| 821 | 821 | |
| 822 | 822 | // call the screen specific callbacks |
| r11240 | r11241 | |
| 824 | 824 | (*item->m_callback)(*this, item->m_param, true); |
| 825 | 825 | |
| 826 | 826 | // if this is the primary screen and we need to update now |
| 827 | | if (this == m_machine.primary_screen && !(m_machine.config().m_video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) |
| 828 | | m_machine.video().frame_update(); |
| 827 | if (this == machine().primary_screen && !(machine().config().m_video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) |
| 828 | machine().video().frame_update(); |
| 829 | 829 | |
| 830 | 830 | // reset the VBLANK start timer for the next frame |
| 831 | 831 | m_vblank_begin_timer->adjust(time_until_vblank_start()); |
| r11240 | r11241 | |
| 850 | 850 | (*item->m_callback)(*this, item->m_param, false); |
| 851 | 851 | |
| 852 | 852 | // if this is the primary screen and we need to update now |
| 853 | | if (this == m_machine.primary_screen && (m_machine.config().m_video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) |
| 854 | | m_machine.video().frame_update(); |
| 853 | if (this == machine().primary_screen && (machine().config().m_video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) |
| 854 | machine().video().frame_update(); |
| 855 | 855 | |
| 856 | 856 | // increment the frame number counter |
| 857 | 857 | m_frame_number++; |
| r11240 | r11241 | |
| 899 | 899 | bool screen_device::update_quads() |
| 900 | 900 | { |
| 901 | 901 | // only update if live |
| 902 | | if (m_machine.render().is_live(*this)) |
| 902 | if (machine().render().is_live(*this)) |
| 903 | 903 | { |
| 904 | 904 | // only update if empty and not a vector game; otherwise assume the driver did it directly |
| 905 | | if (m_config.m_type != SCREEN_TYPE_VECTOR && (m_machine.config().m_video_attributes & VIDEO_SELF_RENDER) == 0) |
| 905 | if (m_config.m_type != SCREEN_TYPE_VECTOR && (machine().config().m_video_attributes & VIDEO_SELF_RENDER) == 0) |
| 906 | 906 | { |
| 907 | 907 | // if we're not skipping the frame and if the screen actually changed, then update the texture |
| 908 | | if (!m_machine.video().skip_this_frame() && m_changed) |
| 908 | if (!machine().video().skip_this_frame() && m_changed) |
| 909 | 909 | { |
| 910 | 910 | rectangle fixedvis = m_visarea; |
| 911 | 911 | fixedvis.max_x++; |
| 912 | 912 | fixedvis.max_y++; |
| 913 | 913 | |
| 914 | | palette_t *palette = (m_texture_format == TEXFORMAT_PALETTE16) ? m_machine.palette : NULL; |
| 914 | palette_t *palette = (m_texture_format == TEXFORMAT_PALETTE16) ? machine().palette : NULL; |
| 915 | 915 | m_texture[m_curbitmap]->set_bitmap(m_bitmap[m_curbitmap], &fixedvis, m_texture_format, palette); |
| 916 | 916 | |
| 917 | 917 | m_curtexture = m_curbitmap; |
| r11240 | r11241 | |
| 965 | 965 | if (srcbitmap->format == BITMAP_FORMAT_INDEXED16) |
| 966 | 966 | { |
| 967 | 967 | const UINT16 *src = BITMAP_ADDR16(srcbitmap, srcy >> 16, 0); |
| 968 | | const rgb_t *palette = palette_entry_list_adjusted(m_machine.palette); |
| 968 | const rgb_t *palette = palette_entry_list_adjusted(machine().palette); |
| 969 | 969 | for (x = 0, srcx = xstart; x < dstwidth; x++, srcx += xstep) |
| 970 | 970 | { |
| 971 | 971 | rgb_t pixel = palette[src[srcx >> 16]]; |
| r11240 | r11241 | |
| 1015 | 1015 | scaledvis.max_y = m_visarea.max_y * m_burnin->height / m_height; |
| 1016 | 1016 | |
| 1017 | 1017 | // wrap a bitmap around the subregion we care about |
| 1018 | | bitmap_t *finalmap = auto_alloc(m_machine, bitmap_t(scaledvis.max_x + 1 - scaledvis.min_x, |
| 1018 | bitmap_t *finalmap = auto_alloc(machine(), bitmap_t(scaledvis.max_x + 1 - scaledvis.min_x, |
| 1019 | 1019 | scaledvis.max_y + 1 - scaledvis.min_y, |
| 1020 | 1020 | BITMAP_FORMAT_ARGB32)); |
| 1021 | 1021 | |
| r11240 | r11241 | |
| 1057 | 1057 | // write the final PNG |
| 1058 | 1058 | |
| 1059 | 1059 | // compute the name and create the file |
| 1060 | | emu_file file(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 1061 | | file_error filerr = file.open(m_machine.basename(), PATH_SEPARATOR "burnin-", tag(), ".png") ; |
| 1060 | emu_file file(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); |
| 1061 | file_error filerr = file.open(machine().basename(), PATH_SEPARATOR "burnin-", tag(), ".png") ; |
| 1062 | 1062 | if (filerr == FILERR_NONE) |
| 1063 | 1063 | { |
| 1064 | 1064 | png_info pnginfo = { 0 }; |
| r11240 | r11241 | |
| 1068 | 1068 | // add two text entries describing the image |
| 1069 | 1069 | sprintf(text, APPNAME " %s", build_version); |
| 1070 | 1070 | png_add_text(&pnginfo, "Software", text); |
| 1071 | | sprintf(text, "%s %s", m_machine.system().manufacturer, m_machine.system().description); |
| 1071 | sprintf(text, "%s %s", machine().system().manufacturer, machine().system().description); |
| 1072 | 1072 | png_add_text(&pnginfo, "System", text); |
| 1073 | 1073 | |
| 1074 | 1074 | // now do the actual work |
| r11240 | r11241 | |
| 1094 | 1094 | fullname.cat(".png"); |
| 1095 | 1095 | |
| 1096 | 1096 | // load the file |
| 1097 | | emu_file file(m_machine.options().art_path(), OPEN_FLAG_READ); |
| 1097 | emu_file file(machine().options().art_path(), OPEN_FLAG_READ); |
| 1098 | 1098 | m_screen_overlay_bitmap = render_load_png(file, NULL, fullname, NULL, NULL); |
| 1099 | 1099 | if (m_screen_overlay_bitmap != NULL) |
| 1100 | 1100 | m_container->set_overlay(m_screen_overlay_bitmap); |
| r11240 | r11241 | |
| 1112 | 1112 | if (m_config.m_screen_update != NULL) { |
| 1113 | 1113 | return (*m_config.m_screen_update)(this, &bitmap, &cliprect); |
| 1114 | 1114 | } else { |
| 1115 | | m_machine.driver_data<driver_device>()->screen_update(*this, bitmap, cliprect); |
| 1115 | machine().driver_data<driver_device>()->screen_update(*this, bitmap, cliprect); |
| 1116 | 1116 | } |
| 1117 | 1117 | return 0; |
| 1118 | 1118 | } |
| r11240 | r11241 | |
| 1125 | 1125 | void screen_device::screen_eof() |
| 1126 | 1126 | { |
| 1127 | 1127 | if (m_config.m_screen_eof != NULL) { |
| 1128 | | return (*m_config.m_screen_eof)(this, m_machine); |
| 1128 | return (*m_config.m_screen_eof)(this, machine()); |
| 1129 | 1129 | } else { |
| 1130 | | m_machine.driver_data<driver_device>()->screen_eof(); |
| 1130 | machine().driver_data<driver_device>()->screen_eof(); |
| 1131 | 1131 | } |
| 1132 | 1132 | } |
| 1133 | 1133 | |
src/mess/devices/kermit.c
| r11240 | r11241 | |
| 83 | 83 | |
| 84 | 84 | typedef struct { |
| 85 | 85 | |
| 86 | | UINT8 m_pin[1024]; /* packet received */ |
| 87 | | UINT8 m_pout[1024]; /* packet sent */ |
| 88 | | UINT32 m_seq; /* sequence number, starting at 0 */ |
| 89 | | UINT16 m_posin; /* position in pin */ |
| 90 | | UINT16 m_posout; /* position in pout */ |
| 91 | | UINT16 m_nbout; /* size of pout */ |
| 86 | UINT8 pin[1024]; /* packet received */ |
| 87 | UINT8 pout[1024]; /* packet sent */ |
| 88 | UINT32 seq; /* sequence number, starting at 0 */ |
| 89 | UINT16 posin; /* position in pin */ |
| 90 | UINT16 posout; /* position in pout */ |
| 91 | UINT16 nbout; /* size of pout */ |
| 92 | 92 | |
| 93 | | UINT8 m_state; /* current protocol state */ |
| 94 | | UINT8 m_retries; /* packet retries remaining */ |
| 93 | UINT8 state; /* current protocol state */ |
| 94 | UINT8 retries; /* packet retries remaining */ |
| 95 | 95 | |
| 96 | 96 | /* (relevant) configuration information, sent in S and D packet */ |
| 97 | | UINT8 m_maxl; /* max packet length (value of <len>) */ |
| 98 | | UINT8 m_npad; /* number of padding characters before packet */ |
| 99 | | UINT8 m_padc; /* padding character */ |
| 100 | | UINT8 m_eol; /* character to add after packet */ |
| 101 | | UINT8 m_qctl; /* escape character */ |
| 97 | UINT8 maxl; /* max packet length (value of <len>) */ |
| 98 | UINT8 npad; /* number of padding characters before packet */ |
| 99 | UINT8 padc; /* padding character */ |
| 100 | UINT8 eol; /* character to add after packet */ |
| 101 | UINT8 qctl; /* escape character */ |
| 102 | 102 | |
| 103 | | emu_timer* m_resend; /* auto-resend packet */ |
| 103 | emu_timer* resend; /* auto-resend packet */ |
| 104 | 104 | |
| 105 | | device_image_interface* m_image; /* underlying image */ |
| 105 | device_image_interface* image; /* underlying image */ |
| 106 | 106 | |
| 107 | | running_machine *m_machine; |
| 108 | | kermit_config* m_conf; |
| 107 | running_machine *machine; |
| 108 | kermit_config* conf; |
| 109 | 109 | |
| 110 | 110 | } kermit; |
| 111 | 111 | |
| r11240 | r11241 | |
| 165 | 165 | { |
| 166 | 166 | int i; |
| 167 | 167 | |
| 168 | | for (i=1;i<state->m_nbout;i++) |
| 169 | | if (kermit_is_ctl(state->m_pout[i])) |
| 170 | | logerror( "send: not char %i at pos %i\n", state->m_pout[i], i ); |
| 168 | for (i=1;i<state->nbout;i++) |
| 169 | if (kermit_is_ctl(state->pout[i])) |
| 170 | logerror( "send: not char %i at pos %i\n", state->pout[i], i ); |
| 171 | 171 | |
| 172 | | if ( state->m_nbout <= 0 ) return; |
| 172 | if ( state->nbout <= 0 ) return; |
| 173 | 173 | |
| 174 | 174 | /* prepend padding and append eol */ |
| 175 | | if ( state->m_npad > 0 ) |
| 175 | if ( state->npad > 0 ) |
| 176 | 176 | { |
| 177 | | memmove( state->m_pout + state->m_npad, state->m_pout, state->m_nbout ); |
| 178 | | memset( state->m_pout, state->m_padc, state->m_npad ); |
| 179 | | state->m_nbout += state->m_npad; |
| 177 | memmove( state->pout + state->npad, state->pout, state->nbout ); |
| 178 | memset( state->pout, state->padc, state->npad ); |
| 179 | state->nbout += state->npad; |
| 180 | 180 | } |
| 181 | | state->m_pout[ state->m_nbout ] = state->m_eol; |
| 182 | | state->m_nbout++; |
| 181 | state->pout[ state->nbout ] = state->eol; |
| 182 | state->nbout++; |
| 183 | 183 | |
| 184 | | if ( state->m_conf && state->m_conf->send ) |
| 184 | if ( state->conf && state->conf->send ) |
| 185 | 185 | { |
| 186 | | state->m_conf->send( *state->m_machine, state->m_pout[ 0 ] ); |
| 186 | state->conf->send( *state->machine, state->pout[ 0 ] ); |
| 187 | 187 | } |
| 188 | | state->m_posout = 1; |
| 188 | state->posout = 1; |
| 189 | 189 | |
| 190 | | state->m_retries = KERMIT_MAX_RETRIES; |
| 191 | | state->m_resend->adjust( KERMIT_RETRY_DELAY, 0, KERMIT_RETRY_DELAY ); |
| 190 | state->retries = KERMIT_MAX_RETRIES; |
| 191 | state->resend->adjust( KERMIT_RETRY_DELAY, 0, KERMIT_RETRY_DELAY ); |
| 192 | 192 | } |
| 193 | 193 | |
| 194 | 194 | static void kermit_reset( kermit* state ); |
| 195 | 195 | |
| 196 | 196 | static void kermit_resend( kermit* state ) |
| 197 | 197 | { |
| 198 | | if ( state->m_conf && state->m_conf->send ) |
| 198 | if ( state->conf && state->conf->send ) |
| 199 | 199 | { |
| 200 | 200 | /* retry */ |
| 201 | | if ( state->m_nbout == 0 ) return; |
| 202 | | if ( state->m_retries <= 0 ) |
| 201 | if ( state->nbout == 0 ) return; |
| 202 | if ( state->retries <= 0 ) |
| 203 | 203 | { |
| 204 | 204 | kermit_reset( state ); |
| 205 | 205 | return; |
| 206 | 206 | } |
| 207 | 207 | |
| 208 | | state->m_conf->send( *state->m_machine, state->m_pout[ 0 ] ); |
| 208 | state->conf->send( *state->machine, state->pout[ 0 ] ); |
| 209 | 209 | |
| 210 | | state->m_posout = 1; |
| 211 | | state->m_retries--; |
| 212 | | LOG(( "kermit: resend packet (%i tries left)\n", state->m_retries )); |
| 210 | state->posout = 1; |
| 211 | state->retries--; |
| 212 | LOG(( "kermit: resend packet (%i tries left)\n", state->retries )); |
| 213 | 213 | } |
| 214 | 214 | } |
| 215 | 215 | |
| r11240 | r11241 | |
| 217 | 217 | static TIMER_CALLBACK( kermit_resend_cb ) |
| 218 | 218 | { |
| 219 | 219 | kermit* state = (kermit*) ptr; |
| 220 | | if ( state->m_posout >= state->m_nbout) |
| 220 | if ( state->posout >= state->nbout) |
| 221 | 221 | { |
| 222 | 222 | kermit_resend( state ); |
| 223 | 223 | } |
| r11240 | r11241 | |
| 228 | 228 | { |
| 229 | 229 | int len; |
| 230 | 230 | LOG(( "kermit: send data packet\n" )); |
| 231 | | for ( len = 2; len < state->m_maxl-2; len++ ) |
| 231 | for ( len = 2; len < state->maxl-2; len++ ) |
| 232 | 232 | { |
| 233 | 233 | UINT8 c; |
| 234 | | if ( state->m_image->image_feof() ) break; |
| 235 | | c = state->m_image->fgetc(); |
| 234 | if ( state->image->image_feof() ) break; |
| 235 | c = state->image->fgetc(); |
| 236 | 236 | if ( kermit_is_ctl( c ) ) |
| 237 | 237 | { |
| 238 | 238 | /* escape control char */ |
| 239 | | state->m_pout[ 2 + len ] = state->m_qctl; |
| 239 | state->pout[ 2 + len ] = state->qctl; |
| 240 | 240 | len++; |
| 241 | | state->m_pout[ 2 + len ] = kermit_ctl( c ); |
| 241 | state->pout[ 2 + len ] = kermit_ctl( c ); |
| 242 | 242 | } |
| 243 | | else if ( (c & 0x7f) == state->m_qctl ) |
| 243 | else if ( (c & 0x7f) == state->qctl ) |
| 244 | 244 | { |
| 245 | 245 | /* escape escape char */ |
| 246 | | state->m_pout[ 2 + len ] = state->m_qctl; |
| 246 | state->pout[ 2 + len ] = state->qctl; |
| 247 | 247 | len++; |
| 248 | | state->m_pout[ 2 + len ] = c; |
| 248 | state->pout[ 2 + len ] = c; |
| 249 | 249 | } |
| 250 | 250 | else |
| 251 | 251 | { |
| 252 | | state->m_pout[ 2 + len ] = c; |
| 252 | state->pout[ 2 + len ] = c; |
| 253 | 253 | } |
| 254 | 254 | } |
| 255 | | state->m_pout[ 0 ] = KERMIT_SOH; |
| 256 | | state->m_pout[ 1 ] = kermit_tochar( len + 1 ); |
| 257 | | state->m_pout[ 2 ] = kermit_tochar( state->m_seq & 63 ); |
| 258 | | state->m_pout[ 3 ] = KERMIT_DATA; |
| 259 | | state->m_pout[ 2 + len ] = kermit_checksum( state->m_pout ); |
| 260 | | state->m_nbout = len + 3; |
| 255 | state->pout[ 0 ] = KERMIT_SOH; |
| 256 | state->pout[ 1 ] = kermit_tochar( len + 1 ); |
| 257 | state->pout[ 2 ] = kermit_tochar( state->seq & 63 ); |
| 258 | state->pout[ 3 ] = KERMIT_DATA; |
| 259 | state->pout[ 2 + len ] = kermit_checksum( state->pout ); |
| 260 | state->nbout = len + 3; |
| 261 | 261 | kermit_start_sending( state ); |
| 262 | 262 | } |
| 263 | 263 | |
| 264 | 264 | /* write data from packet to the image */ |
| 265 | 265 | static void kermit_write_data_packet( kermit* state ) |
| 266 | 266 | { |
| 267 | | int i, len = kermit_unchar( state->m_pin[1] ); |
| 267 | int i, len = kermit_unchar( state->pin[1] ); |
| 268 | 268 | LOG(( "kermit: received data pack, len=%i\n", len )); |
| 269 | 269 | for ( i = 4; i <= len; i++ ) |
| 270 | 270 | { |
| 271 | | UINT8 c = state->m_pin[i]; |
| 272 | | if ( (c /*& 0x7f*/) == state->m_qctl ) |
| 271 | UINT8 c = state->pin[i]; |
| 272 | if ( (c /*& 0x7f*/) == state->qctl ) |
| 273 | 273 | { |
| 274 | 274 | /* unescape */ |
| 275 | 275 | i++; |
| 276 | | c = state->m_pin[i]; |
| 276 | c = state->pin[i]; |
| 277 | 277 | if ( kermit_is_ctl( kermit_ctl( c ) ) ) |
| 278 | 278 | { |
| 279 | 279 | c = kermit_ctl( c ); |
| 280 | 280 | } |
| 281 | 281 | } |
| 282 | | state->m_image->fwrite(&c, 1 ); |
| 282 | state->image->fwrite(&c, 1 ); |
| 283 | 283 | } |
| 284 | 284 | } |
| 285 | 285 | |
| r11240 | r11241 | |
| 287 | 287 | static int kermit_validate_packet( kermit* state ) |
| 288 | 288 | { |
| 289 | 289 | int len; |
| 290 | | if ( state->m_pin[ 0 ] != KERMIT_SOH ) return -1; |
| 291 | | if ( !kermit_is_char( state->m_pin[1] ) ) return -1; |
| 292 | | if ( !kermit_is_char( state->m_pin[2] ) ) return -1; |
| 293 | | len = kermit_unchar( state->m_pin[1] ); |
| 294 | | if ( state->m_pin[ 1 + len ] != kermit_checksum( state->m_pin ) ) return -1; |
| 290 | if ( state->pin[ 0 ] != KERMIT_SOH ) return -1; |
| 291 | if ( !kermit_is_char( state->pin[1] ) ) return -1; |
| 292 | if ( !kermit_is_char( state->pin[2] ) ) return -1; |
| 293 | len = kermit_unchar( state->pin[1] ); |
| 294 | if ( state->pin[ 1 + len ] != kermit_checksum( state->pin ) ) return -1; |
| 295 | 295 | return 0; |
| 296 | 296 | } |
| 297 | 297 | |
| 298 | 298 | /* interpret configuration packet, <0 if error */ |
| 299 | 299 | static int kermit_get_conf( kermit* state ) |
| 300 | 300 | { |
| 301 | | int len = kermit_unchar( state->m_pin[1] ); |
| 302 | | if ( len >= 4 ) state->m_maxl = kermit_unchar( state->m_pin[ 4 ] ); |
| 303 | | if ( len >= 6 ) state->m_npad = kermit_unchar( state->m_pin[ 6 ] ); |
| 304 | | if ( len >= 7 ) state->m_padc = kermit_ctl( state->m_pin[ 7 ] ); |
| 305 | | if ( len >= 8 ) state->m_eol = kermit_unchar( state->m_pin[ 8 ] ); |
| 306 | | if ( len >= 9 ) state->m_qctl = state->m_pin[ 9 ]; |
| 301 | int len = kermit_unchar( state->pin[1] ); |
| 302 | if ( len >= 4 ) state->maxl = kermit_unchar( state->pin[ 4 ] ); |
| 303 | if ( len >= 6 ) state->npad = kermit_unchar( state->pin[ 6 ] ); |
| 304 | if ( len >= 7 ) state->padc = kermit_ctl( state->pin[ 7 ] ); |
| 305 | if ( len >= 8 ) state->eol = kermit_unchar( state->pin[ 8 ] ); |
| 306 | if ( len >= 9 ) state->qctl = state->pin[ 9 ]; |
| 307 | 307 | |
| 308 | 308 | LOG(( "kermit: get conf: len=%i, maxl=%i, npad=%i, padc=%i, eol=%i, qctl=%i\n", |
| 309 | | len, state->m_maxl, state->m_npad, state->m_padc, state->m_eol, state->m_qctl )); |
| 309 | len, state->maxl, state->npad, state->padc, state->eol, state->qctl )); |
| 310 | 310 | |
| 311 | 311 | /* validation */ |
| 312 | | if ( state->m_maxl < 10 || state->m_maxl > 94 ) return -1; |
| 312 | if ( state->maxl < 10 || state->maxl > 94 ) return -1; |
| 313 | 313 | return 0; |
| 314 | 314 | } |
| 315 | 315 | |
| r11240 | r11241 | |
| 317 | 317 | static void kermit_send_conf_packet( kermit* state, UINT8 h ) |
| 318 | 318 | { |
| 319 | 319 | LOG(( "kermit: send conf packet of type %c\n", h )); |
| 320 | | state->m_seq = 0; |
| 321 | | state->m_pout[ 0 ] = KERMIT_SOH; |
| 322 | | state->m_pout[ 1 ] = kermit_tochar( 13 ); |
| 323 | | state->m_pout[ 2 ] = kermit_tochar( state->m_seq & 63 ); |
| 324 | | state->m_pout[ 3 ] = h; |
| 325 | | state->m_pout[ 4 ] = kermit_tochar( state->m_maxl ); /* maxl */ |
| 326 | | state->m_pout[ 5 ] = kermit_tochar( 1 ); /* time: 1 sec */ |
| 327 | | state->m_pout[ 6 ] = kermit_tochar( state->m_npad ); /* npad */ |
| 328 | | state->m_pout[ 7 ] = kermit_ctl( state->m_padc ); /* padc */ |
| 329 | | state->m_pout[ 8 ] = kermit_tochar( state->m_eol ); /* eol */ |
| 330 | | state->m_pout[ 9 ] = state->m_qctl; /* qtcl */ |
| 331 | | state->m_pout[ 10 ] = 'N'; /* qbin: no 8-bit quoting */ |
| 332 | | state->m_pout[ 11 ] = '1'; /* chkt: single character checksum */ |
| 333 | | state->m_pout[ 12 ] = ' '; /* rept: no repeat count */ |
| 334 | | state->m_pout[ 13 ] = kermit_tochar( 0 ); /* capas: no capabilities */ |
| 335 | | state->m_pout[ 14 ] = kermit_checksum( state->m_pout ); |
| 336 | | state->m_nbout = 15; |
| 320 | state->seq = 0; |
| 321 | state->pout[ 0 ] = KERMIT_SOH; |
| 322 | state->pout[ 1 ] = kermit_tochar( 13 ); |
| 323 | state->pout[ 2 ] = kermit_tochar( state->seq & 63 ); |
| 324 | state->pout[ 3 ] = h; |
| 325 | state->pout[ 4 ] = kermit_tochar( state->maxl ); /* maxl */ |
| 326 | state->pout[ 5 ] = kermit_tochar( 1 ); /* time: 1 sec */ |
| 327 | state->pout[ 6 ] = kermit_tochar( state->npad ); /* npad */ |
| 328 | state->pout[ 7 ] = kermit_ctl( state->padc ); /* padc */ |
| 329 | state->pout[ 8 ] = kermit_tochar( state->eol ); /* eol */ |
| 330 | state->pout[ 9 ] = state->qctl; /* qtcl */ |
| 331 | state->pout[ 10 ] = 'N'; /* qbin: no 8-bit quoting */ |
| 332 | state->pout[ 11 ] = '1'; /* chkt: single character checksum */ |
| 333 | state->pout[ 12 ] = ' '; /* rept: no repeat count */ |
| 334 | state->pout[ 13 ] = kermit_tochar( 0 ); /* capas: no capabilities */ |
| 335 | state->pout[ 14 ] = kermit_checksum( state->pout ); |
| 336 | state->nbout = 15; |
| 337 | 337 | kermit_start_sending( state ); |
| 338 | 338 | } |
| 339 | 339 | |
| 340 | 340 | /* sends a packet with no data */ |
| 341 | 341 | static void kermit_send_simple_packet( kermit* state, UINT8 h ) |
| 342 | 342 | { |
| 343 | | LOG(( "kermit: send empty packet of type %c, seq=%i\n", h, state->m_seq & 63 )); |
| 344 | | state->m_pout[ 0 ] = KERMIT_SOH; |
| 345 | | state->m_pout[ 1 ] = kermit_tochar( 3 ); |
| 346 | | state->m_pout[ 2 ] = kermit_tochar( state->m_seq & 63 ); |
| 347 | | state->m_pout[ 3 ] = h; |
| 348 | | state->m_pout[ 4 ] = kermit_checksum( state->m_pout ); |
| 349 | | state->m_nbout = 5; |
| 343 | LOG(( "kermit: send empty packet of type %c, seq=%i\n", h, state->seq & 63 )); |
| 344 | state->pout[ 0 ] = KERMIT_SOH; |
| 345 | state->pout[ 1 ] = kermit_tochar( 3 ); |
| 346 | state->pout[ 2 ] = kermit_tochar( state->seq & 63 ); |
| 347 | state->pout[ 3 ] = h; |
| 348 | state->pout[ 4 ] = kermit_checksum( state->pout ); |
| 349 | state->nbout = 5; |
| 350 | 350 | kermit_start_sending( state ); |
| 351 | 351 | } |
| 352 | 352 | |
| r11240 | r11241 | |
| 354 | 354 | static void kermit_send_string_packet( kermit* state, UINT8 h, const char* data ) |
| 355 | 355 | { |
| 356 | 356 | int i, len; |
| 357 | | LOG(( "kermit: send string packet of type %c, data=%s, seq=%i\n", h, data, state->m_seq & 63 )); |
| 358 | | for ( len = i = 0; (len < state->m_maxl - 5) && data[i]; i++ ) |
| 357 | LOG(( "kermit: send string packet of type %c, data=%s, seq=%i\n", h, data, state->seq & 63 )); |
| 358 | for ( len = i = 0; (len < state->maxl - 5) && data[i]; i++ ) |
| 359 | 359 | { |
| 360 | 360 | char c = data[i]; |
| 361 | 361 | if ( kermit_is_char( c ) && ( c != '_' ) && ( c != ' ' ) ) |
| 362 | 362 | { |
| 363 | | state->m_pout[ 4 + len ] = c; |
| 363 | state->pout[ 4 + len ] = c; |
| 364 | 364 | len++; |
| 365 | 365 | } |
| 366 | 366 | } |
| 367 | | state->m_pout[ 0 ] = KERMIT_SOH; |
| 368 | | state->m_pout[ 1 ] = kermit_tochar( len + 3 ); |
| 369 | | state->m_pout[ 2 ] = kermit_tochar( state->m_seq & 63 ); |
| 370 | | state->m_pout[ 3 ] = h; |
| 371 | | state->m_pout[ 4 + len ] = kermit_checksum( state->m_pout ); |
| 372 | | state->m_nbout = len + 5; |
| 367 | state->pout[ 0 ] = KERMIT_SOH; |
| 368 | state->pout[ 1 ] = kermit_tochar( len + 3 ); |
| 369 | state->pout[ 2 ] = kermit_tochar( state->seq & 63 ); |
| 370 | state->pout[ 3 ] = h; |
| 371 | state->pout[ 4 + len ] = kermit_checksum( state->pout ); |
| 372 | state->nbout = len + 5; |
| 373 | 373 | kermit_start_sending( state ); |
| 374 | 374 | } |
| 375 | 375 | |
| 376 | 376 | /* extract the string contained in received packet */ |
| 377 | 377 | static char* kermit_string_in_packet( kermit* state ) |
| 378 | 378 | { |
| 379 | | int len = kermit_unchar( state->m_pin[1] ); |
| 380 | | state->m_pin[ len + 1 ] = 0; |
| 381 | | return (char*) state->m_pin + 4; |
| 379 | int len = kermit_unchar( state->pin[1] ); |
| 380 | state->pin[ len + 1 ] = 0; |
| 381 | return (char*) state->pin + 4; |
| 382 | 382 | } |
| 383 | 383 | |
| 384 | 384 | static void kermit_reset( kermit* state ) |
| 385 | 385 | { |
| 386 | 386 | /* default config */ |
| 387 | | state->m_maxl = KERMIT_MAXL; |
| 388 | | state->m_npad = 0; |
| 389 | | state->m_padc = 0; |
| 390 | | state->m_eol = KERMIT_EOL; |
| 391 | | state->m_qctl = KERMIT_QCTL; |
| 387 | state->maxl = KERMIT_MAXL; |
| 388 | state->npad = 0; |
| 389 | state->padc = 0; |
| 390 | state->eol = KERMIT_EOL; |
| 391 | state->qctl = KERMIT_QCTL; |
| 392 | 392 | |
| 393 | | state->m_retries = KERMIT_MAX_RETRIES; |
| 394 | | state->m_posin = 0; |
| 395 | | state->m_posout = 0; |
| 396 | | state->m_nbout = 0; |
| 397 | | state->m_state = KERMIT_IDLE; |
| 398 | | state->m_seq = 0; |
| 393 | state->retries = KERMIT_MAX_RETRIES; |
| 394 | state->posin = 0; |
| 395 | state->posout = 0; |
| 396 | state->nbout = 0; |
| 397 | state->state = KERMIT_IDLE; |
| 398 | state->seq = 0; |
| 399 | 399 | |
| 400 | | if ( state->m_image ) |
| 400 | if ( state->image ) |
| 401 | 401 | { |
| 402 | | state->m_image->fseek( SEEK_SET, 0 ); |
| 402 | state->image->fseek( SEEK_SET, 0 ); |
| 403 | 403 | } |
| 404 | 404 | |
| 405 | | state->m_resend->adjust( attotime::never, 0, attotime::never ); |
| 405 | state->resend->adjust( attotime::never, 0, attotime::never ); |
| 406 | 406 | } |
| 407 | 407 | |
| 408 | 408 | |
| r11240 | r11241 | |
| 411 | 411 | { |
| 412 | 412 | kermit* state = get_safe_token(device); |
| 413 | 413 | |
| 414 | | LOG(( "get %i %2x %c (%i)\n", data, data, data, state->m_posin )); |
| 414 | LOG(( "get %i %2x %c (%i)\n", data, data, data, state->posin )); |
| 415 | 415 | |
| 416 | 416 | /* get SOH */ |
| 417 | | if ( (data == KERMIT_SOH) && (state->m_posin <= 1) ) |
| 417 | if ( (data == KERMIT_SOH) && (state->posin <= 1) ) |
| 418 | 418 | { |
| 419 | | state->m_pin[ 0 ] = data; |
| 420 | | state->m_posin = 1; |
| 419 | state->pin[ 0 ] = data; |
| 420 | state->posin = 1; |
| 421 | 421 | } |
| 422 | 422 | |
| 423 | 423 | /* get packet contents */ |
| 424 | | else if ( state->m_posin > 0 ) |
| 424 | else if ( state->posin > 0 ) |
| 425 | 425 | { |
| 426 | | if ( state->m_posin >= sizeof( state->m_pout ) ) |
| 426 | if ( state->posin >= sizeof( state->pout ) ) |
| 427 | 427 | { |
| 428 | 428 | LOG(( "kermit: too many bytes received\n" )); |
| 429 | | state->m_posin = 0; |
| 429 | state->posin = 0; |
| 430 | 430 | kermit_send_simple_packet( state, KERMIT_NAK ); |
| 431 | 431 | return; |
| 432 | 432 | } |
| 433 | 433 | |
| 434 | 434 | if (kermit_is_ctl(data)) |
| 435 | | logerror( "received: not char %i at pos %i\n", data, state->m_posin ); |
| 435 | logerror( "received: not char %i at pos %i\n", data, state->posin ); |
| 436 | 436 | |
| 437 | | state->m_pin[ state->m_posin ] = data; |
| 438 | | state->m_posin++; |
| 437 | state->pin[ state->posin ] = data; |
| 438 | state->posin++; |
| 439 | 439 | |
| 440 | | if ( state->m_posin > 5 ) |
| 440 | if ( state->posin > 5 ) |
| 441 | 441 | { |
| 442 | 442 | int len, seq, typ; |
| 443 | | if ( !kermit_is_char( state->m_pin[1] ) || |
| 444 | | (kermit_unchar( state->m_pin[1] ) < 3) || |
| 445 | | (kermit_unchar( state->m_pin[1] ) > state->m_maxl) ) |
| 443 | if ( !kermit_is_char( state->pin[1] ) || |
| 444 | (kermit_unchar( state->pin[1] ) < 3) || |
| 445 | (kermit_unchar( state->pin[1] ) > state->maxl) ) |
| 446 | 446 | { |
| 447 | | LOG(( "kermit: invalid packet size %i-32, not in 3-%i\n", state->m_pin[1], state->m_maxl )); |
| 447 | LOG(( "kermit: invalid packet size %i-32, not in 3-%i\n", state->pin[1], state->maxl )); |
| 448 | 448 | kermit_resend( state ); |
| 449 | 449 | return; |
| 450 | 450 | } |
| 451 | 451 | |
| 452 | | len = kermit_unchar( state->m_pin[1] ); |
| 452 | len = kermit_unchar( state->pin[1] ); |
| 453 | 453 | |
| 454 | | if ( state->m_posin >= len + 2 ) |
| 454 | if ( state->posin >= len + 2 ) |
| 455 | 455 | { |
| 456 | 456 | /* got packet! */ |
| 457 | | state->m_posin = 0; |
| 457 | state->posin = 0; |
| 458 | 458 | if ( kermit_validate_packet( state ) ) |
| 459 | 459 | { |
| 460 | 460 | LOG(( "kermit: invalid packet\n" )); |
| r11240 | r11241 | |
| 462 | 462 | return; |
| 463 | 463 | } |
| 464 | 464 | |
| 465 | | typ = state->m_pin[3]; |
| 466 | | seq = kermit_unchar( state->m_pin[2] ); |
| 465 | typ = state->pin[3]; |
| 466 | seq = kermit_unchar( state->pin[2] ); |
| 467 | 467 | |
| 468 | 468 | LOG(( "kermit: received packet type=%c, seq=%i, len=%i\n", typ, seq, len )); |
| 469 | 469 | |
| 470 | | if ( !state->m_image ) |
| 470 | if ( !state->image ) |
| 471 | 471 | { |
| 472 | 472 | kermit_send_string_packet( state, KERMIT_ERR, "NO IMAGE" ); |
| 473 | 473 | return; |
| r11240 | r11241 | |
| 481 | 481 | |
| 482 | 482 | case KERMIT_SEND: |
| 483 | 483 | kermit_get_conf( state ); |
| 484 | | if ( state->m_maxl >= KERMIT_MAXL ) |
| 484 | if ( state->maxl >= KERMIT_MAXL ) |
| 485 | 485 | { |
| 486 | | state->m_maxl = KERMIT_MAXL; |
| 486 | state->maxl = KERMIT_MAXL; |
| 487 | 487 | } |
| 488 | 488 | kermit_send_conf_packet( state, KERMIT_ACK ); |
| 489 | | state->m_state = KERMIT_RECEIVE; |
| 489 | state->state = KERMIT_RECEIVE; |
| 490 | 490 | break; |
| 491 | 491 | |
| 492 | 492 | case KERMIT_FILE: |
| 493 | 493 | LOG(( "kermit: got file name '%s'\n", kermit_string_in_packet( state ) )); |
| 494 | | state->m_seq = seq; |
| 494 | state->seq = seq; |
| 495 | 495 | kermit_send_simple_packet( state, KERMIT_ACK ); |
| 496 | 496 | break; |
| 497 | 497 | |
| 498 | 498 | case KERMIT_DATA: |
| 499 | 499 | case KERMIT_EOF: |
| 500 | | if ( seq == ((state->m_seq + 1) & 63) ) |
| 500 | if ( seq == ((state->seq + 1) & 63) ) |
| 501 | 501 | { |
| 502 | 502 | /* next packet */ |
| 503 | 503 | if ( typ == KERMIT_DATA ) |
| 504 | 504 | { |
| 505 | 505 | kermit_write_data_packet( state ); |
| 506 | 506 | } |
| 507 | | state->m_seq = seq; |
| 507 | state->seq = seq; |
| 508 | 508 | kermit_send_simple_packet( state, KERMIT_ACK ); |
| 509 | 509 | } |
| 510 | | else if ( seq == (state->m_seq & 63) ) |
| 510 | else if ( seq == (state->seq & 63) ) |
| 511 | 511 | { |
| 512 | 512 | /* same packet */ |
| 513 | 513 | kermit_send_simple_packet( state, KERMIT_ACK ); |
| r11240 | r11241 | |
| 515 | 515 | else |
| 516 | 516 | { |
| 517 | 517 | /* unexpected sequence number */ |
| 518 | | LOG(( "kermit: got seq=%i, expected %i\n", seq, (state->m_seq + 1) & 63 )); |
| 519 | | state->m_seq++; |
| 518 | LOG(( "kermit: got seq=%i, expected %i\n", seq, (state->seq + 1) & 63 )); |
| 519 | state->seq++; |
| 520 | 520 | kermit_send_simple_packet( state, KERMIT_NAK ); |
| 521 | | state->m_seq--; |
| 521 | state->seq--; |
| 522 | 522 | } |
| 523 | 523 | break; |
| 524 | 524 | |
| 525 | 525 | case KERMIT_EOT: |
| 526 | 526 | /* send ack and reset */ |
| 527 | | state->m_seq = seq; |
| 527 | state->seq = seq; |
| 528 | 528 | kermit_send_simple_packet( state, KERMIT_ACK ); |
| 529 | | state->m_state = KERMIT_RESET; |
| 529 | state->state = KERMIT_RESET; |
| 530 | 530 | break; |
| 531 | 531 | |
| 532 | 532 | |
| r11240 | r11241 | |
| 535 | 535 | case KERMIT_NAK: |
| 536 | 536 | case KERMIT_ACK: |
| 537 | 537 | |
| 538 | | if ( (typ == KERMIT_NAK) && (seq == 0) && (state->m_state == KERMIT_IDLE) ) |
| 538 | if ( (typ == KERMIT_NAK) && (seq == 0) && (state->state == KERMIT_IDLE) ) |
| 539 | 539 | { |
| 540 | 540 | /* transfer start */ |
| 541 | 541 | kermit_send_conf_packet( state, KERMIT_SEND ); |
| 542 | 542 | break; |
| 543 | 543 | } |
| 544 | 544 | |
| 545 | | if ( ((seq == (state->m_seq & 63)) && (typ == KERMIT_ACK)) || |
| 546 | | ((seq == ((state->m_seq + 1) & 63)) && (typ == KERMIT_NAK)) ) |
| 545 | if ( ((seq == (state->seq & 63)) && (typ == KERMIT_ACK)) || |
| 546 | ((seq == ((state->seq + 1) & 63)) && (typ == KERMIT_NAK)) ) |
| 547 | 547 | { |
| 548 | 548 | /* send next packet */ |
| 549 | 549 | |
| 550 | | state->m_seq = state->m_seq + 1; |
| 550 | state->seq = state->seq + 1; |
| 551 | 551 | |
| 552 | | switch ( state->m_state ) |
| 552 | switch ( state->state ) |
| 553 | 553 | { |
| 554 | 554 | case KERMIT_IDLE: |
| 555 | 555 | /* get conf & send file name */ |
| 556 | 556 | kermit_get_conf( state ); |
| 557 | | kermit_send_string_packet( state, KERMIT_FILE, state->m_image->basename() ); |
| 558 | | state->m_state = KERMIT_SEND_DATA;; |
| 557 | kermit_send_string_packet( state, KERMIT_FILE, state->image->basename() ); |
| 558 | state->state = KERMIT_SEND_DATA;; |
| 559 | 559 | break; |
| 560 | 560 | |
| 561 | 561 | case KERMIT_SEND_DATA: |
| 562 | 562 | /* send next data packet or EOF */ |
| 563 | | if ( state->m_image->image_feof() ) |
| 563 | if ( state->image->image_feof() ) |
| 564 | 564 | { |
| 565 | 565 | kermit_send_simple_packet( state, KERMIT_EOF ); |
| 566 | | state->m_state = KERMIT_SEND_EOF; |
| 566 | state->state = KERMIT_SEND_EOF; |
| 567 | 567 | } |
| 568 | 568 | else |
| 569 | 569 | { |
| r11240 | r11241 | |
| 574 | 574 | case KERMIT_SEND_EOF: |
| 575 | 575 | /* send EOT */ |
| 576 | 576 | kermit_send_simple_packet( state, KERMIT_EOT ); |
| 577 | | state->m_state = KERMIT_SEND_EOT; |
| 577 | state->state = KERMIT_SEND_EOT; |
| 578 | 578 | break; |
| 579 | 579 | |
| 580 | 580 | case KERMIT_SEND_EOT: |
| 581 | 581 | /* reset */ |
| 582 | 582 | kermit_reset( state ); |
| 583 | | state->m_state = KERMIT_RESET; |
| 583 | state->state = KERMIT_RESET; |
| 584 | 584 | break; |
| 585 | 585 | |
| 586 | 586 | } |
| 587 | 587 | } |
| 588 | 588 | |
| 589 | | else if ( (seq == (state->m_seq & 63)) && (typ == KERMIT_NAK) ) |
| 589 | else if ( (seq == (state->seq & 63)) && (typ == KERMIT_NAK) ) |
| 590 | 590 | { |
| 591 | 591 | /* resend last packet */ |
| 592 | 592 | kermit_resend( state ); |
| r11240 | r11241 | |
| 594 | 594 | else |
| 595 | 595 | { |
| 596 | 596 | /* bad */ |
| 597 | | LOG(( "kermit: expected to send %i, got seq=%i\n", (state->m_seq + 1) & 63, seq )); |
| 597 | LOG(( "kermit: expected to send %i, got seq=%i\n", (state->seq + 1) & 63, seq )); |
| 598 | 598 | kermit_reset( state ); |
| 599 | 599 | } |
| 600 | 600 | break; |
| r11240 | r11241 | |
| 603 | 603 | |
| 604 | 604 | case KERMIT_ERR: |
| 605 | 605 | LOG(( "kermit: got error '%s'\n", kermit_string_in_packet( state ) )); |
| 606 | | state->m_seq = seq; |
| 606 | state->seq = seq; |
| 607 | 607 | kermit_reset( state ); |
| 608 | 608 | break; |
| 609 | 609 | |
| 610 | 610 | default: |
| 611 | | LOG(( "kermit: ignoring packet type %c\n", state->m_pin[ 3 ] )); |
| 611 | LOG(( "kermit: ignoring packet type %c\n", state->pin[ 3 ] )); |
| 612 | 612 | /* no abort, just ignoring */ |
| 613 | 613 | } |
| 614 | 614 | } |
| r11240 | r11241 | |
| 620 | 620 | { |
| 621 | 621 | kermit* state = get_safe_token(device); |
| 622 | 622 | |
| 623 | | LOG(( "transmitted %i %2x %c, %i / %i\n", state->m_pout[ state->m_posout-1 ], state->m_pout[ state->m_posout-1 ], state->m_pout[ state->m_posout-1 ], state->m_posout - 1, state->m_nbout - 1 )); |
| 623 | LOG(( "transmitted %i %2x %c, %i / %i\n", state->pout[ state->posout-1 ], state->pout[ state->posout-1 ], state->pout[ state->posout-1 ], state->posout - 1, state->nbout - 1 )); |
| 624 | 624 | |
| 625 | 625 | /* at end of packet */ |
| 626 | | if ( state->m_posout >= state->m_nbout ) |
| 626 | if ( state->posout >= state->nbout ) |
| 627 | 627 | { |
| 628 | | if ( state->m_state == KERMIT_RESET ) |
| 628 | if ( state->state == KERMIT_RESET ) |
| 629 | 629 | { |
| 630 | 630 | kermit_reset( state ); |
| 631 | 631 | } |
| 632 | 632 | return; |
| 633 | 633 | } |
| 634 | 634 | |
| 635 | | if ( state->m_conf && state->m_conf->send ) |
| 635 | if ( state->conf && state->conf->send ) |
| 636 | 636 | { |
| 637 | | state->m_conf->send(*state->m_machine, state->m_pout[ state->m_posout ] ); |
| 637 | state->conf->send(*state->machine, state->pout[ state->posout ] ); |
| 638 | 638 | } |
| 639 | | state->m_posout++; |
| 639 | state->posout++; |
| 640 | 640 | } |
| 641 | 641 | |
| 642 | 642 | static DEVICE_START( kermit ) |
| 643 | 643 | { |
| 644 | 644 | kermit* state = get_safe_token(device); |
| 645 | 645 | LOG(( "kermit: start\n" )); |
| 646 | | state->m_image = NULL; |
| 647 | | state->m_conf = (kermit_config*) device->baseconfig().static_config(); |
| 648 | | state->m_machine = &device->machine(); |
| 649 | | state->m_resend = device->machine().scheduler().timer_alloc(FUNC(kermit_resend_cb), state ); |
| 646 | state->image = NULL; |
| 647 | state->conf = (kermit_config*) device->baseconfig().static_config(); |
| 648 | state->machine = &device->machine(); |
| 649 | state->resend = device->machine().scheduler().timer_alloc(FUNC(kermit_resend_cb), state ); |
| 650 | 650 | kermit_reset( state ); |
| 651 | 651 | } |
| 652 | 652 | |
| r11240 | r11241 | |
| 661 | 661 | { |
| 662 | 662 | kermit* state = get_safe_token(&image.device()); |
| 663 | 663 | LOG(( "kermit: image load\n" )); |
| 664 | | state->m_image = ℑ |
| 664 | state->image = ℑ |
| 665 | 665 | kermit_reset( state ); |
| 666 | 666 | return IMAGE_INIT_PASS; |
| 667 | 667 | } |
| r11240 | r11241 | |
| 670 | 670 | { |
| 671 | 671 | kermit* state = get_safe_token(&image.device()); |
| 672 | 672 | LOG(( "kermit: image create\n" )); |
| 673 | | state->m_image = ℑ |
| 673 | state->image = ℑ |
| 674 | 674 | kermit_reset( state ); |
| 675 | 675 | return IMAGE_INIT_PASS; |
| 676 | 676 | } |
| r11240 | r11241 | |
| 679 | 679 | { |
| 680 | 680 | kermit* state = get_safe_token(&image.device()); |
| 681 | 681 | LOG(( "kermit: image unload\n" )); |
| 682 | | state->m_image = NULL; |
| 682 | state->image = NULL; |
| 683 | 683 | kermit_reset( state ); |
| 684 | 684 | } |
| 685 | 685 | |
src/mess/machine/comx35.c
| r11240 | r11241 | |
| 128 | 128 | { |
| 129 | 129 | UINT8 result; |
| 130 | 130 | |
| 131 | | switch (m_machine.phase()) |
| 131 | switch (machine().phase()) |
| 132 | 132 | { |
| 133 | 133 | case MACHINE_PHASE_RESET: |
| 134 | 134 | case MACHINE_PHASE_RUNNING: |
| 135 | | result = input_port_read(m_machine, "EXPANSION"); |
| 135 | result = input_port_read(machine(), "EXPANSION"); |
| 136 | 136 | break; |
| 137 | 137 | |
| 138 | 138 | default: |
| r11240 | r11241 | |
| 145 | 145 | |
| 146 | 146 | bool comx35_state::is_expansion_box_installed() |
| 147 | 147 | { |
| 148 | | return (&m_machine.region(CDP1802_TAG)->base()[0xe800] != 0x00); |
| 148 | return (&machine().region(CDP1802_TAG)->base()[0xe800] != 0x00); |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | bool comx35_state::is_dos_card_active() |
| r11240 | r11241 | |
| 246 | 246 | |
| 247 | 247 | UINT8 comx35_state::printer_r() |
| 248 | 248 | { |
| 249 | | int printer = input_port_read(m_machine, "PRINTER") & 0x07; |
| 249 | int printer = input_port_read(machine(), "PRINTER") & 0x07; |
| 250 | 250 | UINT8 data = 0; |
| 251 | 251 | |
| 252 | 252 | switch (printer) |
| r11240 | r11241 | |
| 285 | 285 | |
| 286 | 286 | void comx35_state::printer_w(UINT8 data) |
| 287 | 287 | { |
| 288 | | int printer = input_port_read(m_machine, "PRINTER") & 0x07; |
| 288 | int printer = input_port_read(machine(), "PRINTER") & 0x07; |
| 289 | 289 | |
| 290 | 290 | switch (printer) |
| 291 | 291 | { |
| r11240 | r11241 | |
| 337 | 337 | } |
| 338 | 338 | |
| 339 | 339 | if (m_slot > 0) |
| 340 | | m_bank = input_port_read(m_machine, slotnames[m_slot]); |
| 340 | m_bank = input_port_read(machine(), slotnames[m_slot]); |
| 341 | 341 | } |
| 342 | 342 | else |
| 343 | 343 | { |
| r11240 | r11241 | |
| 415 | 415 | break; |
| 416 | 416 | } |
| 417 | 417 | |
| 418 | | memory_set_bank(m_machine, "bank1", bank); |
| 418 | memory_set_bank(machine(), "bank1", bank); |
| 419 | 419 | } |
| 420 | 420 | |
| 421 | 421 | WRITE8_MEMBER( comx35_state::bank_select_w ) |
| r11240 | r11241 | |
| 445 | 445 | break; |
| 446 | 446 | |
| 447 | 447 | case BANK_JOYCARD: |
| 448 | | data = input_port_read(m_machine, "JOY1"); |
| 448 | data = input_port_read(machine(), "JOY1"); |
| 449 | 449 | break; |
| 450 | 450 | |
| 451 | 451 | case BANK_80_COLUMNS: |
| r11240 | r11241 | |
| 477 | 477 | break; |
| 478 | 478 | |
| 479 | 479 | case BANK_JOYCARD: |
| 480 | | data = input_port_read(m_machine, "JOY2"); |
| 480 | data = input_port_read(machine(), "JOY2"); |
| 481 | 481 | break; |
| 482 | 482 | |
| 483 | 483 | case BANK_80_COLUMNS: |
| r11240 | r11241 | |
| 557 | 557 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 558 | 558 | |
| 559 | 559 | /* opbase handling for DOS Card */ |
| 560 | | program->set_direct_update_handler(direct_update_delegate(FUNC(comx35_opbase_handler), &m_machine)); |
| 560 | program->set_direct_update_handler(direct_update_delegate(FUNC(comx35_opbase_handler), &machine())); |
| 561 | 561 | |
| 562 | 562 | /* BASIC ROM banking */ |
| 563 | 563 | program->install_read_bank(0x1000, 0x17ff, "bank2"); |
| 564 | 564 | program->unmap_write(0x1000, 0x17ff); |
| 565 | | memory_configure_bank(m_machine, "bank2", 0, 1, m_machine.region(CDP1802_TAG)->base() + 0x1000, 0); // normal ROM |
| 566 | | memory_configure_bank(m_machine, "bank2", 1, 1, m_machine.region(CDP1802_TAG)->base() + 0xe000, 0); // expansion box ROM |
| 565 | memory_configure_bank(machine(), "bank2", 0, 1, machine().region(CDP1802_TAG)->base() + 0x1000, 0); // normal ROM |
| 566 | memory_configure_bank(machine(), "bank2", 1, 1, machine().region(CDP1802_TAG)->base() + 0xe000, 0); // expansion box ROM |
| 567 | 567 | |
| 568 | | memory_configure_bank(m_machine, "bank3", 0, 1, m_machine.region(CDP1802_TAG)->base() + 0xe000, 0); |
| 569 | | memory_set_bank(m_machine, "bank3", 0); |
| 568 | memory_configure_bank(machine(), "bank3", 0, 1, machine().region(CDP1802_TAG)->base() + 0xe000, 0); |
| 569 | memory_set_bank(machine(), "bank3", 0); |
| 570 | 570 | |
| 571 | 571 | if (is_expansion_box_installed()) |
| 572 | 572 | { |
| 573 | 573 | program->install_read_bank(0xe000, 0xefff, "bank3"); |
| 574 | 574 | program->unmap_write(0xe000, 0xefff); |
| 575 | | memory_set_bank(m_machine, "bank2", 1); |
| 575 | memory_set_bank(machine(), "bank2", 1); |
| 576 | 576 | } |
| 577 | 577 | else |
| 578 | 578 | { |
| 579 | 579 | program->unmap_readwrite(0xe000, 0xefff); |
| 580 | | memory_set_bank(m_machine, "bank2", 0); |
| 580 | memory_set_bank(machine(), "bank2", 0); |
| 581 | 581 | } |
| 582 | 582 | |
| 583 | 583 | /* card slot banking */ |
| 584 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(CDP1802_TAG)->base() + 0xc000, 0); |
| 585 | | memory_configure_bank(m_machine, "bank1", BANK_FLOPPY, 1, m_machine.region("fdc")->base(), 0); |
| 586 | | memory_configure_bank(m_machine, "bank1", BANK_PRINTER_PARALLEL, 1, m_machine.region("printer")->base(), 0); |
| 587 | | memory_configure_bank(m_machine, "bank1", BANK_PRINTER_PARALLEL_FM, 1, m_machine.region("printer_fm")->base(), 0); |
| 588 | | memory_configure_bank(m_machine, "bank1", BANK_PRINTER_SERIAL, 1, m_machine.region("rs232")->base(), 0); |
| 589 | | memory_configure_bank(m_machine, "bank1", BANK_PRINTER_THERMAL, 1, m_machine.region("thermal")->base(), 0); |
| 590 | | memory_configure_bank(m_machine, "bank1", BANK_JOYCARD, 1, m_machine.region(CDP1802_TAG)->base(), 0); |
| 591 | | memory_configure_bank(m_machine, "bank1", BANK_80_COLUMNS, 1, m_machine.region("80column")->base(), 0); |
| 592 | | memory_configure_bank(m_machine, "bank1", BANK_RAMCARD, 4, ram_get_ptr(m_ram), 0x2000); |
| 584 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(CDP1802_TAG)->base() + 0xc000, 0); |
| 585 | memory_configure_bank(machine(), "bank1", BANK_FLOPPY, 1, machine().region("fdc")->base(), 0); |
| 586 | memory_configure_bank(machine(), "bank1", BANK_PRINTER_PARALLEL, 1, machine().region("printer")->base(), 0); |
| 587 | memory_configure_bank(machine(), "bank1", BANK_PRINTER_PARALLEL_FM, 1, machine().region("printer_fm")->base(), 0); |
| 588 | memory_configure_bank(machine(), "bank1", BANK_PRINTER_SERIAL, 1, machine().region("rs232")->base(), 0); |
| 589 | memory_configure_bank(machine(), "bank1", BANK_PRINTER_THERMAL, 1, machine().region("thermal")->base(), 0); |
| 590 | memory_configure_bank(machine(), "bank1", BANK_JOYCARD, 1, machine().region(CDP1802_TAG)->base(), 0); |
| 591 | memory_configure_bank(machine(), "bank1", BANK_80_COLUMNS, 1, machine().region("80column")->base(), 0); |
| 592 | memory_configure_bank(machine(), "bank1", BANK_RAMCARD, 4, ram_get_ptr(m_ram), 0x2000); |
| 593 | 593 | |
| 594 | | memory_set_bank(m_machine, "bank1", 0); |
| 594 | memory_set_bank(machine(), "bank1", 0); |
| 595 | 595 | |
| 596 | 596 | if (!is_expansion_box_installed()) |
| 597 | 597 | { |
| r11240 | r11241 | |
| 599 | 599 | } |
| 600 | 600 | |
| 601 | 601 | /* allocate reset timer */ |
| 602 | | m_reset_timer = m_machine.scheduler().timer_alloc(FUNC(reset_tick)); |
| 602 | m_reset_timer = machine().scheduler().timer_alloc(FUNC(reset_tick)); |
| 603 | 603 | |
| 604 | 604 | /* register for state saving */ |
| 605 | | m_machine.state().register_postload(comx35_state_save_postload, NULL); |
| 606 | | state_save_register_global(m_machine, m_reset); |
| 607 | | state_save_register_global(m_machine, m_cdp1802_q); |
| 608 | | state_save_register_global(m_machine, m_cdp1802_ef4); |
| 609 | | state_save_register_global(m_machine, m_iden); |
| 610 | | state_save_register_global(m_machine, m_slot); |
| 611 | | state_save_register_global(m_machine, m_bank); |
| 612 | | state_save_register_global(m_machine, m_rambank); |
| 613 | | state_save_register_global(m_machine, m_dma); |
| 614 | | state_save_register_global(m_machine, m_fdc_addr); |
| 615 | | state_save_register_global(m_machine, m_fdc_irq); |
| 616 | | state_save_register_global(m_machine, m_fdc_drq_enable); |
| 605 | machine().state().register_postload(comx35_state_save_postload, NULL); |
| 606 | state_save_register_global(machine(), m_reset); |
| 607 | state_save_register_global(machine(), m_cdp1802_q); |
| 608 | state_save_register_global(machine(), m_cdp1802_ef4); |
| 609 | state_save_register_global(machine(), m_iden); |
| 610 | state_save_register_global(machine(), m_slot); |
| 611 | state_save_register_global(machine(), m_bank); |
| 612 | state_save_register_global(machine(), m_rambank); |
| 613 | state_save_register_global(machine(), m_dma); |
| 614 | state_save_register_global(machine(), m_fdc_addr); |
| 615 | state_save_register_global(machine(), m_fdc_irq); |
| 616 | state_save_register_global(machine(), m_fdc_drq_enable); |
| 617 | 617 | } |
| 618 | 618 | |
| 619 | 619 | void comx35_state::machine_reset() |
src/mess/video/atarist.c
| r11240 | r11241 | |
| 63 | 63 | m_shifter_rr[2] <<= 1; |
| 64 | 64 | m_shifter_rr[3] <<= 1; |
| 65 | 65 | |
| 66 | | return m_machine.pens[color]; |
| 66 | return machine().pens[color]; |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | 69 | |
| r11240 | r11241 | |
| 87 | 87 | m_shifter_shift = 0; |
| 88 | 88 | } |
| 89 | 89 | |
| 90 | | return m_machine.pens[color]; |
| 90 | return machine().pens[color]; |
| 91 | 91 | } |
| 92 | 92 | |
| 93 | 93 | |
| r11240 | r11241 | |
| 124 | 124 | break; |
| 125 | 125 | } |
| 126 | 126 | |
| 127 | | return m_machine.pens[color]; |
| 127 | return machine().pens[color]; |
| 128 | 128 | } |
| 129 | 129 | |
| 130 | 130 | |
| r11240 | r11241 | |
| 134 | 134 | |
| 135 | 135 | void st_state::shifter_tick() |
| 136 | 136 | { |
| 137 | | int y = m_machine.primary_screen->vpos(); |
| 138 | | int x = m_machine.primary_screen->hpos(); |
| 137 | int y = machine().primary_screen->vpos(); |
| 138 | int x = machine().primary_screen->hpos(); |
| 139 | 139 | |
| 140 | 140 | pen_t pen; |
| 141 | 141 | |
| r11240 | r11241 | |
| 154 | 154 | break; |
| 155 | 155 | |
| 156 | 156 | default: |
| 157 | | pen = get_black_pen(m_machine); |
| 157 | pen = get_black_pen(machine()); |
| 158 | 158 | break; |
| 159 | 159 | } |
| 160 | 160 | |
| 161 | | *BITMAP_ADDR32(m_machine.generic.tmpbitmap, y, x) = pen; |
| 161 | *BITMAP_ADDR32(machine().generic.tmpbitmap, y, x) = pen; |
| 162 | 162 | } |
| 163 | 163 | |
| 164 | 164 | |
| r11240 | r11241 | |
| 205 | 205 | |
| 206 | 206 | void st_state::glue_tick() |
| 207 | 207 | { |
| 208 | | int y = m_machine.primary_screen->vpos(); |
| 209 | | int x = m_machine.primary_screen->hpos(); |
| 208 | int y = machine().primary_screen->vpos(); |
| 209 | int x = machine().primary_screen->hpos(); |
| 210 | 210 | |
| 211 | 211 | int v = (y >= m_shifter_y_start) && (y < m_shifter_y_end); |
| 212 | 212 | int h = (x >= m_shifter_x_start) && (x < m_shifter_x_end); |
| r11240 | r11241 | |
| 242 | 242 | { |
| 243 | 243 | case 0: |
| 244 | 244 | pen = shift_mode_0(); |
| 245 | | *BITMAP_ADDR32(m_machine.generic.tmpbitmap, y, x) = pen; |
| 245 | *BITMAP_ADDR32(machine().generic.tmpbitmap, y, x) = pen; |
| 246 | 246 | pen = shift_mode_0(); |
| 247 | | *BITMAP_ADDR32(m_machine.generic.tmpbitmap, y, x+1) = pen; |
| 247 | *BITMAP_ADDR32(machine().generic.tmpbitmap, y, x+1) = pen; |
| 248 | 248 | pen = shift_mode_0(); |
| 249 | | *BITMAP_ADDR32(m_machine.generic.tmpbitmap, y, x+2) = pen; |
| 249 | *BITMAP_ADDR32(machine().generic.tmpbitmap, y, x+2) = pen; |
| 250 | 250 | pen = shift_mode_0(); |
| 251 | | *BITMAP_ADDR32(m_machine.generic.tmpbitmap, y, x+3) = pen; |
| 251 | *BITMAP_ADDR32(machine().generic.tmpbitmap, y, x+3) = pen; |
| 252 | 252 | break; |
| 253 | 253 | |
| 254 | 254 | case 1: |
| r11240 | r11241 | |
| 260 | 260 | break; |
| 261 | 261 | |
| 262 | 262 | default: |
| 263 | | pen = get_black_pen(m_machine); |
| 263 | pen = get_black_pen(machine()); |
| 264 | 264 | break; |
| 265 | 265 | } |
| 266 | 266 | } |
| r11240 | r11241 | |
| 438 | 438 | m_shifter_palette[offset] = data; |
| 439 | 439 | logerror("SHIFTER Palette[%x] = %x\n", offset, data); |
| 440 | 440 | |
| 441 | | palette_set_color_rgb(m_machine, offset, pal3bit(data >> 8), pal3bit(data >> 4), pal3bit(data)); |
| 441 | palette_set_color_rgb(machine(), offset, pal3bit(data >> 8), pal3bit(data >> 4), pal3bit(data)); |
| 442 | 442 | } |
| 443 | 443 | |
| 444 | 444 | |
| r11240 | r11241 | |
| 534 | 534 | m_shifter_palette[offset] = data; |
| 535 | 535 | logerror("SHIFTER palette %x = %x\n", offset, data); |
| 536 | 536 | |
| 537 | | palette_set_color_rgb(m_machine, offset, r, g, b); |
| 537 | palette_set_color_rgb(machine(), offset, r, g, b); |
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | |
| r11240 | r11241 | |
| 1058 | 1058 | m_mfp->i3_w(m_blitter_done); |
| 1059 | 1059 | |
| 1060 | 1060 | int nops = BLITTER_NOPS[m_blitter_op][m_blitter_hop]; // each NOP takes 4 cycles |
| 1061 | | m_machine.scheduler().timer_set(attotime::from_hz((Y2/4)/(4*nops)), FUNC(atarist_blitter_tick)); |
| 1061 | machine().scheduler().timer_set(attotime::from_hz((Y2/4)/(4*nops)), FUNC(atarist_blitter_tick)); |
| 1062 | 1062 | } |
| 1063 | 1063 | } |
| 1064 | 1064 | } |
| r11240 | r11241 | |
| 1080 | 1080 | |
| 1081 | 1081 | void st_state::video_start() |
| 1082 | 1082 | { |
| 1083 | | m_shifter_timer = m_machine.scheduler().timer_alloc(FUNC(atarist_shifter_tick)); |
| 1084 | | m_glue_timer = m_machine.scheduler().timer_alloc(FUNC(atarist_glue_tick)); |
| 1083 | m_shifter_timer = machine().scheduler().timer_alloc(FUNC(atarist_shifter_tick)); |
| 1084 | m_glue_timer = machine().scheduler().timer_alloc(FUNC(atarist_glue_tick)); |
| 1085 | 1085 | |
| 1086 | | // m_shifter_timer->adjust(m_machine.primary_screen->time_until_pos(0), 0, attotime::from_hz(Y2/4)); // 125 ns |
| 1087 | | m_glue_timer->adjust(m_machine.primary_screen->time_until_pos(0), 0, attotime::from_hz(Y2/16)); // 500 ns |
| 1086 | // m_shifter_timer->adjust(machine().primary_screen->time_until_pos(0), 0, attotime::from_hz(Y2/4)); // 125 ns |
| 1087 | m_glue_timer->adjust(machine().primary_screen->time_until_pos(0), 0, attotime::from_hz(Y2/16)); // 500 ns |
| 1088 | 1088 | |
| 1089 | 1089 | /* register for state saving */ |
| 1090 | | state_save_register_global(m_machine, m_shifter_base); |
| 1091 | | state_save_register_global(m_machine, m_shifter_ofs); |
| 1092 | | state_save_register_global(m_machine, m_shifter_sync); |
| 1093 | | state_save_register_global(m_machine, m_shifter_mode); |
| 1094 | | state_save_register_global_array(m_machine, m_shifter_palette); |
| 1095 | | state_save_register_global_array(m_machine, m_shifter_rr); |
| 1096 | | state_save_register_global_array(m_machine, m_shifter_ir); |
| 1097 | | state_save_register_global(m_machine, m_shifter_bitplane); |
| 1098 | | state_save_register_global(m_machine, m_shifter_shift); |
| 1099 | | state_save_register_global(m_machine, m_shifter_h); |
| 1100 | | state_save_register_global(m_machine, m_shifter_v); |
| 1101 | | state_save_register_global(m_machine, m_shifter_de); |
| 1090 | state_save_register_global(machine(), m_shifter_base); |
| 1091 | state_save_register_global(machine(), m_shifter_ofs); |
| 1092 | state_save_register_global(machine(), m_shifter_sync); |
| 1093 | state_save_register_global(machine(), m_shifter_mode); |
| 1094 | state_save_register_global_array(machine(), m_shifter_palette); |
| 1095 | state_save_register_global_array(machine(), m_shifter_rr); |
| 1096 | state_save_register_global_array(machine(), m_shifter_ir); |
| 1097 | state_save_register_global(machine(), m_shifter_bitplane); |
| 1098 | state_save_register_global(machine(), m_shifter_shift); |
| 1099 | state_save_register_global(machine(), m_shifter_h); |
| 1100 | state_save_register_global(machine(), m_shifter_v); |
| 1101 | state_save_register_global(machine(), m_shifter_de); |
| 1102 | 1102 | |
| 1103 | | state_save_register_global_array(m_machine, m_blitter_halftone); |
| 1104 | | state_save_register_global(m_machine, m_blitter_src_inc_x); |
| 1105 | | state_save_register_global(m_machine, m_blitter_src_inc_y); |
| 1106 | | state_save_register_global(m_machine, m_blitter_dst_inc_x); |
| 1107 | | state_save_register_global(m_machine, m_blitter_dst_inc_y); |
| 1108 | | state_save_register_global(m_machine, m_blitter_src); |
| 1109 | | state_save_register_global(m_machine, m_blitter_dst); |
| 1110 | | state_save_register_global(m_machine, m_blitter_endmask1); |
| 1111 | | state_save_register_global(m_machine, m_blitter_endmask2); |
| 1112 | | state_save_register_global(m_machine, m_blitter_endmask3); |
| 1113 | | state_save_register_global(m_machine, m_blitter_xcount); |
| 1114 | | state_save_register_global(m_machine, m_blitter_ycount); |
| 1115 | | state_save_register_global(m_machine, m_blitter_xcountl); |
| 1116 | | state_save_register_global(m_machine, m_blitter_hop); |
| 1117 | | state_save_register_global(m_machine, m_blitter_op); |
| 1118 | | state_save_register_global(m_machine, m_blitter_ctrl); |
| 1119 | | state_save_register_global(m_machine, m_blitter_skew); |
| 1103 | state_save_register_global_array(machine(), m_blitter_halftone); |
| 1104 | state_save_register_global(machine(), m_blitter_src_inc_x); |
| 1105 | state_save_register_global(machine(), m_blitter_src_inc_y); |
| 1106 | state_save_register_global(machine(), m_blitter_dst_inc_x); |
| 1107 | state_save_register_global(machine(), m_blitter_dst_inc_y); |
| 1108 | state_save_register_global(machine(), m_blitter_src); |
| 1109 | state_save_register_global(machine(), m_blitter_dst); |
| 1110 | state_save_register_global(machine(), m_blitter_endmask1); |
| 1111 | state_save_register_global(machine(), m_blitter_endmask2); |
| 1112 | state_save_register_global(machine(), m_blitter_endmask3); |
| 1113 | state_save_register_global(machine(), m_blitter_xcount); |
| 1114 | state_save_register_global(machine(), m_blitter_ycount); |
| 1115 | state_save_register_global(machine(), m_blitter_xcountl); |
| 1116 | state_save_register_global(machine(), m_blitter_hop); |
| 1117 | state_save_register_global(machine(), m_blitter_op); |
| 1118 | state_save_register_global(machine(), m_blitter_ctrl); |
| 1119 | state_save_register_global(machine(), m_blitter_skew); |
| 1120 | 1120 | |
| 1121 | 1121 | set_screen_parameters(); |
| 1122 | 1122 | |
| 1123 | | VIDEO_START_NAME(generic_bitmapped)(m_machine); |
| 1123 | VIDEO_START_NAME(generic_bitmapped)(machine()); |
| 1124 | 1124 | } |
| 1125 | 1125 | |
| 1126 | 1126 | |
| r11240 | r11241 | |
| 1133 | 1133 | st_state::video_start(); |
| 1134 | 1134 | |
| 1135 | 1135 | // register for state saving |
| 1136 | | state_save_register_global(m_machine, m_shifter_lineofs); |
| 1137 | | state_save_register_global(m_machine, m_shifter_pixelofs); |
| 1136 | state_save_register_global(machine(), m_shifter_lineofs); |
| 1137 | state_save_register_global(machine(), m_shifter_pixelofs); |
| 1138 | 1138 | } |
src/mess/drivers/pc8401a.c
| r11240 | r11241 | |
| 42 | 42 | /* scan keyboard */ |
| 43 | 43 | for (row = 0; row < 10; row++) |
| 44 | 44 | { |
| 45 | | UINT8 data = input_port_read(m_machine, keynames[row]); |
| 45 | UINT8 data = input_port_read(machine(), keynames[row]); |
| 46 | 46 | |
| 47 | 47 | if (data != 0xff) |
| 48 | 48 | { |
| r11240 | r11241 | |
| 86 | 86 | /* internal ROM */ |
| 87 | 87 | program->install_read_bank(0x0000, 0x7fff, "bank1"); |
| 88 | 88 | program->unmap_write(0x0000, 0x7fff); |
| 89 | | memory_set_bank(m_machine, "bank1", rombank); |
| 89 | memory_set_bank(machine(), "bank1", rombank); |
| 90 | 90 | } |
| 91 | 91 | else |
| 92 | 92 | { |
| r11240 | r11241 | |
| 98 | 98 | |
| 99 | 99 | case 1: /* RAM 0000H to 7FFFH */ |
| 100 | 100 | program->install_readwrite_bank(0x0000, 0x7fff, "bank1"); |
| 101 | | memory_set_bank(m_machine, "bank1", 4); |
| 101 | memory_set_bank(machine(), "bank1", 4); |
| 102 | 102 | //logerror("0x0000-0x7fff = RAM 0-7fff\n"); |
| 103 | 103 | break; |
| 104 | 104 | |
| 105 | 105 | case 2: /* RAM 8000H to FFFFH */ |
| 106 | 106 | program->install_readwrite_bank(0x0000, 0x7fff, "bank1"); |
| 107 | | memory_set_bank(m_machine, "bank1", 5); |
| 107 | memory_set_bank(machine(), "bank1", 5); |
| 108 | 108 | //logerror("0x0000-0x7fff = RAM 8000-ffff\n"); |
| 109 | 109 | break; |
| 110 | 110 | |
| r11240 | r11241 | |
| 117 | 117 | { |
| 118 | 118 | case 0: /* cell addresses 0000H to 3FFFH */ |
| 119 | 119 | program->install_readwrite_bank(0x8000, 0xbfff, "bank3"); |
| 120 | | memory_set_bank(m_machine, "bank3", 0); |
| 120 | memory_set_bank(machine(), "bank3", 0); |
| 121 | 121 | //logerror("0x8000-0xbfff = RAM 0-3fff\n"); |
| 122 | 122 | break; |
| 123 | 123 | |
| 124 | 124 | case 1: /* cell addresses 4000H to 7FFFH */ |
| 125 | 125 | program->install_readwrite_bank(0x8000, 0xbfff, "bank3"); |
| 126 | | memory_set_bank(m_machine, "bank3", 1); |
| 126 | memory_set_bank(machine(), "bank3", 1); |
| 127 | 127 | //logerror("0x8000-0xbfff = RAM 4000-7fff\n"); |
| 128 | 128 | break; |
| 129 | 129 | |
| 130 | 130 | case 2: /* cell addresses 8000H to BFFFH */ |
| 131 | 131 | program->install_readwrite_bank(0x8000, 0xbfff, "bank3"); |
| 132 | | memory_set_bank(m_machine, "bank3", 2); |
| 132 | memory_set_bank(machine(), "bank3", 2); |
| 133 | 133 | //logerror("0x8000-0xbfff = RAM 8000-bfff\n"); |
| 134 | 134 | break; |
| 135 | 135 | |
| r11240 | r11241 | |
| 137 | 137 | if (ram_get_size(m_ram) > 64) |
| 138 | 138 | { |
| 139 | 139 | program->install_readwrite_bank(0x8000, 0xbfff, "bank3"); |
| 140 | | memory_set_bank(m_machine, "bank3", 3); // TODO or 4 |
| 140 | memory_set_bank(machine(), "bank3", 3); // TODO or 4 |
| 141 | 141 | } |
| 142 | 142 | else |
| 143 | 143 | { |
| r11240 | r11241 | |
| 152 | 152 | /* CRT video RAM */ |
| 153 | 153 | program->install_readwrite_bank(0xc000, 0xdfff, "bank4"); |
| 154 | 154 | program->unmap_readwrite(0xe000, 0xe7ff); |
| 155 | | memory_set_bank(m_machine, "bank4", 1); |
| 155 | memory_set_bank(machine(), "bank4", 1); |
| 156 | 156 | //logerror("0xc000-0xdfff = video RAM\n"); |
| 157 | 157 | } |
| 158 | 158 | else |
| 159 | 159 | { |
| 160 | 160 | /* RAM */ |
| 161 | 161 | program->install_readwrite_bank(0xc000, 0xe7ff, "bank4"); |
| 162 | | memory_set_bank(m_machine, "bank4", 0); |
| 162 | memory_set_bank(machine(), "bank4", 0); |
| 163 | 163 | //logerror("0xc000-0e7fff = RAM c000-e7fff\n"); |
| 164 | 164 | } |
| 165 | 165 | } |
| r11240 | r11241 | |
| 261 | 261 | |
| 262 | 262 | READ8_MEMBER( pc8401a_state::io_rom_data_r ) |
| 263 | 263 | { |
| 264 | | UINT8 *iorom = m_machine.region("iorom")->base(); |
| 264 | UINT8 *iorom = machine().region("iorom")->base(); |
| 265 | 265 | |
| 266 | 266 | //logerror("I/O ROM read from %05x\n", m_io_addr); |
| 267 | 267 | |
| r11240 | r11241 | |
| 491 | 491 | m_rtc->cs_w(1); |
| 492 | 492 | |
| 493 | 493 | /* allocate CRT video RAM */ |
| 494 | | m_crt_ram = auto_alloc_array(m_machine, UINT8, PC8401A_CRT_VIDEORAM_SIZE); |
| 494 | m_crt_ram = auto_alloc_array(machine(), UINT8, PC8401A_CRT_VIDEORAM_SIZE); |
| 495 | 495 | |
| 496 | 496 | UINT8 *ram = ram_get_ptr(m_ram); |
| 497 | 497 | |
| 498 | 498 | /* set up A0/A1 memory banking */ |
| 499 | | memory_configure_bank(m_machine, "bank1", 0, 4, m_machine.region(Z80_TAG)->base(), 0x8000); |
| 500 | | memory_configure_bank(m_machine, "bank1", 4, 2, ram, 0x8000); |
| 501 | | memory_set_bank(m_machine, "bank1", 0); |
| 499 | memory_configure_bank(machine(), "bank1", 0, 4, machine().region(Z80_TAG)->base(), 0x8000); |
| 500 | memory_configure_bank(machine(), "bank1", 4, 2, ram, 0x8000); |
| 501 | memory_set_bank(machine(), "bank1", 0); |
| 502 | 502 | |
| 503 | 503 | /* set up A2 memory banking */ |
| 504 | | memory_configure_bank(m_machine, "bank3", 0, 5, ram, 0x4000); |
| 505 | | memory_set_bank(m_machine, "bank3", 0); |
| 504 | memory_configure_bank(machine(), "bank3", 0, 5, ram, 0x4000); |
| 505 | memory_set_bank(machine(), "bank3", 0); |
| 506 | 506 | |
| 507 | 507 | /* set up A3 memory banking */ |
| 508 | | memory_configure_bank(m_machine, "bank4", 0, 1, ram + 0xc000, 0); |
| 509 | | memory_configure_bank(m_machine, "bank4", 1, 1, m_crt_ram, 0); |
| 510 | | memory_set_bank(m_machine, "bank4", 0); |
| 508 | memory_configure_bank(machine(), "bank4", 0, 1, ram + 0xc000, 0); |
| 509 | memory_configure_bank(machine(), "bank4", 1, 1, m_crt_ram, 0); |
| 510 | memory_set_bank(machine(), "bank4", 0); |
| 511 | 511 | |
| 512 | 512 | /* set up A4 memory banking */ |
| 513 | | memory_configure_bank(m_machine, "bank5", 0, 1, ram + 0xe800, 0); |
| 514 | | memory_set_bank(m_machine, "bank5", 0); |
| 513 | memory_configure_bank(machine(), "bank5", 0, 1, ram + 0xe800, 0); |
| 514 | memory_set_bank(machine(), "bank5", 0); |
| 515 | 515 | |
| 516 | 516 | /* bank switch */ |
| 517 | 517 | bankswitch(0); |
src/mess/drivers/mc1000.c
| r11240 | r11241 | |
| 29 | 29 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 30 | 30 | |
| 31 | 31 | /* MC6845 video RAM */ |
| 32 | | memory_set_bank(m_machine, "bank2", m_mc6845_bank); |
| 32 | memory_set_bank(machine(), "bank2", m_mc6845_bank); |
| 33 | 33 | |
| 34 | 34 | /* extended RAM */ |
| 35 | 35 | if (ram_get_size(m_ram) > 16*1024) |
| r11240 | r11241 | |
| 58 | 58 | program->install_readwrite_bank(0x8000, 0x97ff, "bank4"); |
| 59 | 59 | } |
| 60 | 60 | |
| 61 | | memory_set_bank(m_machine, "bank4", m_mc6847_bank); |
| 61 | memory_set_bank(machine(), "bank4", m_mc6847_bank); |
| 62 | 62 | |
| 63 | 63 | /* extended RAM */ |
| 64 | 64 | if (ram_get_size(m_ram) > 16*1024) |
| r11240 | r11241 | |
| 297 | 297 | |
| 298 | 298 | if (!BIT(m_keylatch, 0)) |
| 299 | 299 | { |
| 300 | | data &= input_port_read(m_machine, "ROW0"); |
| 301 | | if (input_port_read(m_machine, "JOYBKEYMAP")) data &= input_port_read(m_machine, "JOYB"); |
| 300 | data &= input_port_read(machine(), "ROW0"); |
| 301 | if (input_port_read(machine(), "JOYBKEYMAP")) data &= input_port_read(machine(), "JOYB"); |
| 302 | 302 | } |
| 303 | 303 | if (!BIT(m_keylatch, 1)) |
| 304 | 304 | { |
| 305 | | data &= input_port_read(m_machine, "ROW1"); |
| 306 | | if (input_port_read(m_machine, "JOYAKEYMAP")) data &= input_port_read(m_machine, "JOYA"); |
| 305 | data &= input_port_read(machine(), "ROW1"); |
| 306 | if (input_port_read(machine(), "JOYAKEYMAP")) data &= input_port_read(machine(), "JOYA"); |
| 307 | 307 | } |
| 308 | | if (!BIT(m_keylatch, 2)) data &= input_port_read(m_machine, "ROW2"); |
| 309 | | if (!BIT(m_keylatch, 3)) data &= input_port_read(m_machine, "ROW3"); |
| 310 | | if (!BIT(m_keylatch, 4)) data &= input_port_read(m_machine, "ROW4"); |
| 311 | | if (!BIT(m_keylatch, 5)) data &= input_port_read(m_machine, "ROW5"); |
| 312 | | if (!BIT(m_keylatch, 6)) data &= input_port_read(m_machine, "ROW6"); |
| 313 | | if (!BIT(m_keylatch, 7)) data &= input_port_read(m_machine, "ROW7"); |
| 308 | if (!BIT(m_keylatch, 2)) data &= input_port_read(machine(), "ROW2"); |
| 309 | if (!BIT(m_keylatch, 3)) data &= input_port_read(machine(), "ROW3"); |
| 310 | if (!BIT(m_keylatch, 4)) data &= input_port_read(machine(), "ROW4"); |
| 311 | if (!BIT(m_keylatch, 5)) data &= input_port_read(machine(), "ROW5"); |
| 312 | if (!BIT(m_keylatch, 6)) data &= input_port_read(machine(), "ROW6"); |
| 313 | if (!BIT(m_keylatch, 7)) data &= input_port_read(machine(), "ROW7"); |
| 314 | 314 | |
| 315 | | data = (input_port_read(m_machine, "MODIFIERS") & 0xc0) | (data & 0x3f); |
| 315 | data = (input_port_read(machine(), "MODIFIERS") & 0xc0) | (data & 0x3f); |
| 316 | 316 | |
| 317 | 317 | if (cassette_input(m_cassette) < +0.0) data &= 0x7f; |
| 318 | 318 | |
| r11240 | r11241 | |
| 336 | 336 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 337 | 337 | |
| 338 | 338 | /* setup memory banking */ |
| 339 | | UINT8 *rom = m_machine.region(Z80_TAG)->base(); |
| 339 | UINT8 *rom = machine().region(Z80_TAG)->base(); |
| 340 | 340 | |
| 341 | 341 | program->install_readwrite_bank(0x0000, 0x1fff, "bank1"); |
| 342 | | memory_configure_bank(m_machine, "bank1", 0, 1, rom, 0); |
| 343 | | memory_configure_bank(m_machine, "bank1", 1, 1, rom + 0xc000, 0); |
| 344 | | memory_set_bank(m_machine, "bank1", 1); |
| 342 | memory_configure_bank(machine(), "bank1", 0, 1, rom, 0); |
| 343 | memory_configure_bank(machine(), "bank1", 1, 1, rom + 0xc000, 0); |
| 344 | memory_set_bank(machine(), "bank1", 1); |
| 345 | 345 | |
| 346 | 346 | m_rom0000 = 1; |
| 347 | 347 | |
| 348 | 348 | program->install_readwrite_bank(0x2000, 0x27ff, "bank2"); |
| 349 | | memory_configure_bank(m_machine, "bank2", 0, 1, rom + 0x2000, 0); |
| 350 | | memory_configure_bank(m_machine, "bank2", 1, 1, m_mc6845_video_ram, 0); |
| 351 | | memory_set_bank(m_machine, "bank2", 0); |
| 349 | memory_configure_bank(machine(), "bank2", 0, 1, rom + 0x2000, 0); |
| 350 | memory_configure_bank(machine(), "bank2", 1, 1, m_mc6845_video_ram, 0); |
| 351 | memory_set_bank(machine(), "bank2", 0); |
| 352 | 352 | |
| 353 | | memory_configure_bank(m_machine, "bank3", 0, 1, rom + 0x4000, 0); |
| 354 | | memory_set_bank(m_machine, "bank3", 0); |
| 353 | memory_configure_bank(machine(), "bank3", 0, 1, rom + 0x4000, 0); |
| 354 | memory_set_bank(machine(), "bank3", 0); |
| 355 | 355 | |
| 356 | | memory_configure_bank(m_machine, "bank4", 0, 1, m_mc6847_video_ram, 0); |
| 357 | | memory_configure_bank(m_machine, "bank4", 1, 1, rom + 0x8000, 0); |
| 358 | | memory_set_bank(m_machine, "bank4", 0); |
| 356 | memory_configure_bank(machine(), "bank4", 0, 1, m_mc6847_video_ram, 0); |
| 357 | memory_configure_bank(machine(), "bank4", 1, 1, rom + 0x8000, 0); |
| 358 | memory_set_bank(machine(), "bank4", 0); |
| 359 | 359 | |
| 360 | | memory_configure_bank(m_machine, "bank5", 0, 1, rom + 0x9800, 0); |
| 361 | | memory_set_bank(m_machine, "bank5", 0); |
| 360 | memory_configure_bank(machine(), "bank5", 0, 1, rom + 0x9800, 0); |
| 361 | memory_set_bank(machine(), "bank5", 0); |
| 362 | 362 | |
| 363 | 363 | bankswitch(); |
| 364 | 364 | |
| r11240 | r11241 | |
| 373 | 373 | |
| 374 | 374 | void mc1000_state::machine_reset() |
| 375 | 375 | { |
| 376 | | memory_set_bank(m_machine, "bank1", 1); |
| 376 | memory_set_bank(machine(), "bank1", 1); |
| 377 | 377 | |
| 378 | 378 | m_rom0000 = 1; |
| 379 | 379 | } |
src/mess/drivers/adam.c
| r11240 | r11241 | |
| 258 | 258 | if (BIT(m_adamnet, 1)) |
| 259 | 259 | { |
| 260 | 260 | program->unmap_readwrite(0x0000, 0x5fff); |
| 261 | | program->install_rom(0x6000, 0x7fff, m_machine.region("wp")->base() + 0x8000); |
| 261 | program->install_rom(0x6000, 0x7fff, machine().region("wp")->base() + 0x8000); |
| 262 | 262 | } |
| 263 | 263 | else |
| 264 | 264 | { |
| 265 | | program->install_rom(0x0000, 0x7fff, m_machine.region("wp")->base()); |
| 265 | program->install_rom(0x0000, 0x7fff, machine().region("wp")->base()); |
| 266 | 266 | } |
| 267 | 267 | break; |
| 268 | 268 | |
| r11240 | r11241 | |
| 278 | 278 | break; |
| 279 | 279 | |
| 280 | 280 | case LO_OS7_ROM_INTERNAL_RAM: |
| 281 | | program->install_rom(0x0000, 0x1fff, m_machine.region("os7")->base()); |
| 281 | program->install_rom(0x0000, 0x1fff, machine().region("os7")->base()); |
| 282 | 282 | program->install_ram(0x2000, 0x7fff, ram + 0x2000); |
| 283 | 283 | break; |
| 284 | 284 | } |
| r11240 | r11241 | |
| 290 | 290 | break; |
| 291 | 291 | |
| 292 | 292 | case HI_ROM_EXPANSION: |
| 293 | | program->install_rom(0x8000, 0xffff, m_machine.region("xrom")->base()); |
| 293 | program->install_rom(0x8000, 0xffff, machine().region("xrom")->base()); |
| 294 | 294 | break; |
| 295 | 295 | |
| 296 | 296 | case HI_RAM_EXPANSION: |
| 297 | 297 | if (m_game) |
| 298 | 298 | { |
| 299 | | program->install_rom(0x8000, 0xffff, m_machine.region("cart")->base()); |
| 299 | program->install_rom(0x8000, 0xffff, machine().region("cart")->base()); |
| 300 | 300 | } |
| 301 | 301 | else |
| 302 | 302 | { |
| r11240 | r11241 | |
| 308 | 308 | break; |
| 309 | 309 | |
| 310 | 310 | case HI_CARTRIDGE_ROM: |
| 311 | | program->install_rom(0x8000, 0xffff, m_machine.region("cart")->base()); |
| 311 | program->install_rom(0x8000, 0xffff, machine().region("cart")->base()); |
| 312 | 312 | break; |
| 313 | 313 | } |
| 314 | 314 | } |
| r11240 | r11241 | |
| 409 | 409 | { |
| 410 | 410 | m_reset = 1; |
| 411 | 411 | |
| 412 | | m_machine.device(M6801_KB_TAG)->reset(); |
| 413 | | m_machine.device(M6801_DDP_TAG)->reset(); |
| 414 | | m_machine.device(M6801_PRN_TAG)->reset(); |
| 415 | | m_machine.device(M6801_FDC_TAG)->reset(); |
| 412 | machine().device(M6801_KB_TAG)->reset(); |
| 413 | machine().device(M6801_DDP_TAG)->reset(); |
| 414 | machine().device(M6801_PRN_TAG)->reset(); |
| 415 | machine().device(M6801_FDC_TAG)->reset(); |
| 416 | 416 | wd17xx_mr_w(m_fdc, 0); |
| 417 | 417 | wd17xx_mr_w(m_fdc, 1); |
| 418 | | //m_machine.device(M6801_SPI_TAG)->reset(); |
| 418 | //machine().device(M6801_SPI_TAG)->reset(); |
| 419 | 419 | |
| 420 | 420 | m_reset = 0; |
| 421 | 421 | } |
| r11240 | r11241 | |
| 605 | 605 | |
| 606 | 606 | UINT8 data = 0xff; |
| 607 | 607 | |
| 608 | | if (!BIT(m_key_y, 0)) data &= input_port_read(m_machine, "Y0"); |
| 609 | | if (!BIT(m_key_y, 1)) data &= input_port_read(m_machine, "Y1"); |
| 610 | | if (!BIT(m_key_y, 2)) data &= input_port_read(m_machine, "Y2"); |
| 611 | | if (!BIT(m_key_y, 3)) data &= input_port_read(m_machine, "Y3"); |
| 612 | | if (!BIT(m_key_y, 4)) data &= input_port_read(m_machine, "Y4"); |
| 613 | | if (!BIT(m_key_y, 5)) data &= input_port_read(m_machine, "Y5"); |
| 614 | | if (!BIT(m_key_y, 6)) data &= input_port_read(m_machine, "Y6"); |
| 615 | | if (!BIT(m_key_y, 7)) data &= input_port_read(m_machine, "Y7"); |
| 616 | | if (!BIT(m_key_y, 8)) data &= input_port_read(m_machine, "Y8"); |
| 617 | | if (!BIT(m_key_y, 9)) data &= input_port_read(m_machine, "Y9"); |
| 618 | | if (!BIT(m_key_y, 10)) data &= input_port_read(m_machine, "Y10"); |
| 619 | | if (!BIT(m_key_y, 11)) data &= input_port_read(m_machine, "Y11"); |
| 620 | | if (!BIT(m_key_y, 12)) data &= input_port_read(m_machine, "Y12"); |
| 608 | if (!BIT(m_key_y, 0)) data &= input_port_read(machine(), "Y0"); |
| 609 | if (!BIT(m_key_y, 1)) data &= input_port_read(machine(), "Y1"); |
| 610 | if (!BIT(m_key_y, 2)) data &= input_port_read(machine(), "Y2"); |
| 611 | if (!BIT(m_key_y, 3)) data &= input_port_read(machine(), "Y3"); |
| 612 | if (!BIT(m_key_y, 4)) data &= input_port_read(machine(), "Y4"); |
| 613 | if (!BIT(m_key_y, 5)) data &= input_port_read(machine(), "Y5"); |
| 614 | if (!BIT(m_key_y, 6)) data &= input_port_read(machine(), "Y6"); |
| 615 | if (!BIT(m_key_y, 7)) data &= input_port_read(machine(), "Y7"); |
| 616 | if (!BIT(m_key_y, 8)) data &= input_port_read(machine(), "Y8"); |
| 617 | if (!BIT(m_key_y, 9)) data &= input_port_read(machine(), "Y9"); |
| 618 | if (!BIT(m_key_y, 10)) data &= input_port_read(machine(), "Y10"); |
| 619 | if (!BIT(m_key_y, 11)) data &= input_port_read(machine(), "Y11"); |
| 620 | if (!BIT(m_key_y, 12)) data &= input_port_read(machine(), "Y12"); |
| 621 | 621 | |
| 622 | 622 | return data; |
| 623 | 623 | } |
| r11240 | r11241 | |
| 1197 | 1197 | |
| 1198 | 1198 | READ8_MEMBER( adam_state::input1_r ) |
| 1199 | 1199 | { |
| 1200 | | return coleco_paddle1_read(m_machine, m_joy_mode, m_joy_status0); |
| 1200 | return coleco_paddle1_read(machine(), m_joy_mode, m_joy_status0); |
| 1201 | 1201 | } |
| 1202 | 1202 | |
| 1203 | 1203 | |
| r11240 | r11241 | |
| 1207 | 1207 | |
| 1208 | 1208 | READ8_MEMBER( adam_state::input2_r ) |
| 1209 | 1209 | { |
| 1210 | | return coleco_paddle1_read(m_machine, m_joy_mode, m_joy_status1); |
| 1210 | return coleco_paddle1_read(machine(), m_joy_mode, m_joy_status1); |
| 1211 | 1211 | } |
| 1212 | 1212 | |
| 1213 | 1213 | |
| r11240 | r11241 | |
| 1617 | 1617 | TMS9928A_configure(&tms9928a_interface); |
| 1618 | 1618 | |
| 1619 | 1619 | // register for state saving |
| 1620 | | state_save_register_global(m_machine, m_mioc); |
| 1621 | | state_save_register_global(m_machine, m_game); |
| 1622 | | state_save_register_global(m_machine, m_adamnet); |
| 1623 | | state_save_register_global_array(m_machine, m_txd); |
| 1624 | | state_save_register_global(m_machine, m_rxd); |
| 1625 | | state_save_register_global(m_machine, m_reset); |
| 1626 | | state_save_register_global(m_machine, m_ba); |
| 1627 | | state_save_register_global(m_machine, m_dma); |
| 1628 | | state_save_register_global(m_machine, m_bwr); |
| 1629 | | state_save_register_global(m_machine, m_data_in); |
| 1630 | | state_save_register_global(m_machine, m_data_out); |
| 1631 | | state_save_register_global(m_machine, m_key_y); |
| 1632 | | state_save_register_global(m_machine, m_joy_mode); |
| 1633 | | state_save_register_global(m_machine, m_joy_status0); |
| 1634 | | state_save_register_global(m_machine, m_joy_status1); |
| 1635 | | state_save_register_global(m_machine, m_vdp_nmi); |
| 1636 | | state_save_register_global(m_machine, m_wr0); |
| 1637 | | state_save_register_global(m_machine, m_wr1); |
| 1638 | | state_save_register_global(m_machine, m_track); |
| 1620 | state_save_register_global(machine(), m_mioc); |
| 1621 | state_save_register_global(machine(), m_game); |
| 1622 | state_save_register_global(machine(), m_adamnet); |
| 1623 | state_save_register_global_array(machine(), m_txd); |
| 1624 | state_save_register_global(machine(), m_rxd); |
| 1625 | state_save_register_global(machine(), m_reset); |
| 1626 | state_save_register_global(machine(), m_ba); |
| 1627 | state_save_register_global(machine(), m_dma); |
| 1628 | state_save_register_global(machine(), m_bwr); |
| 1629 | state_save_register_global(machine(), m_data_in); |
| 1630 | state_save_register_global(machine(), m_data_out); |
| 1631 | state_save_register_global(machine(), m_key_y); |
| 1632 | state_save_register_global(machine(), m_joy_mode); |
| 1633 | state_save_register_global(machine(), m_joy_status0); |
| 1634 | state_save_register_global(machine(), m_joy_status1); |
| 1635 | state_save_register_global(machine(), m_vdp_nmi); |
| 1636 | state_save_register_global(machine(), m_wr0); |
| 1637 | state_save_register_global(machine(), m_wr1); |
| 1638 | state_save_register_global(machine(), m_track); |
| 1639 | 1639 | } |
| 1640 | 1640 | |
| 1641 | 1641 | |
| r11240 | r11241 | |
| 1645 | 1645 | |
| 1646 | 1646 | void adam_state::machine_reset() |
| 1647 | 1647 | { |
| 1648 | | device_image_interface *image = dynamic_cast<device_image_interface *>(m_machine.device("cart")); |
| 1648 | device_image_interface *image = dynamic_cast<device_image_interface *>(machine().device("cart")); |
| 1649 | 1649 | |
| 1650 | 1650 | if (image->exists()) |
| 1651 | 1651 | { |
src/mess/drivers/xor100.c
| r11240 | r11241 | |
| 67 | 67 | if (m_bank < banks) |
| 68 | 68 | { |
| 69 | 69 | program->install_write_bank(0x0000, 0xffff, "bank1"); |
| 70 | | memory_set_bank(m_machine, "bank1", 1 + m_bank); |
| 70 | memory_set_bank(machine(), "bank1", 1 + m_bank); |
| 71 | 71 | } |
| 72 | 72 | else |
| 73 | 73 | { |
| r11240 | r11241 | |
| 76 | 76 | |
| 77 | 77 | program->install_read_bank(0x0000, 0xf7ff, 0x07ff, 0, "bank2"); |
| 78 | 78 | program->install_read_bank(0xf800, 0xffff, "bank3"); |
| 79 | | memory_set_bank(m_machine, "bank2", 0); |
| 80 | | memory_set_bank(m_machine, "bank3", 0); |
| 79 | memory_set_bank(machine(), "bank2", 0); |
| 80 | memory_set_bank(machine(), "bank3", 0); |
| 81 | 81 | break; |
| 82 | 82 | |
| 83 | 83 | case EPROM_F800: |
| r11240 | r11241 | |
| 85 | 85 | { |
| 86 | 86 | program->install_write_bank(0x0000, 0xffff, "bank1"); |
| 87 | 87 | program->install_read_bank(0x0000, 0xf7ff, "bank2"); |
| 88 | | memory_set_bank(m_machine, "bank1", 1 + m_bank); |
| 89 | | memory_set_bank(m_machine, "bank2", 1 + m_bank); |
| 88 | memory_set_bank(machine(), "bank1", 1 + m_bank); |
| 89 | memory_set_bank(machine(), "bank2", 1 + m_bank); |
| 90 | 90 | } |
| 91 | 91 | else |
| 92 | 92 | { |
| r11240 | r11241 | |
| 95 | 95 | } |
| 96 | 96 | |
| 97 | 97 | program->install_read_bank(0xf800, 0xffff, "bank3"); |
| 98 | | memory_set_bank(m_machine, "bank3", 0); |
| 98 | memory_set_bank(machine(), "bank3", 0); |
| 99 | 99 | break; |
| 100 | 100 | |
| 101 | 101 | case EPROM_OFF: |
| r11240 | r11241 | |
| 104 | 104 | program->install_write_bank(0x0000, 0xffff, "bank1"); |
| 105 | 105 | program->install_read_bank(0x0000, 0xf7ff, "bank2"); |
| 106 | 106 | program->install_read_bank(0xf800, 0xffff, "bank3"); |
| 107 | | memory_set_bank(m_machine, "bank1", 1 + m_bank); |
| 108 | | memory_set_bank(m_machine, "bank2", 1 + m_bank); |
| 109 | | memory_set_bank(m_machine, "bank3", 1 + m_bank); |
| 107 | memory_set_bank(machine(), "bank1", 1 + m_bank); |
| 108 | memory_set_bank(machine(), "bank2", 1 + m_bank); |
| 109 | memory_set_bank(machine(), "bank3", 1 + m_bank); |
| 110 | 110 | } |
| 111 | 111 | else |
| 112 | 112 | { |
| r11240 | r11241 | |
| 534 | 534 | { |
| 535 | 535 | int banks = ram_get_size(m_ram) / 0x10000; |
| 536 | 536 | UINT8 *ram = ram_get_ptr(m_ram); |
| 537 | | UINT8 *rom = m_machine.region(Z80_TAG)->base(); |
| 537 | UINT8 *rom = machine().region(Z80_TAG)->base(); |
| 538 | 538 | |
| 539 | 539 | /* setup memory banking */ |
| 540 | | memory_configure_bank(m_machine, "bank1", 1, banks, ram, 0x10000); |
| 541 | | memory_configure_bank(m_machine, "bank2", 0, 1, rom, 0); |
| 542 | | memory_configure_bank(m_machine, "bank2", 1, banks, ram, 0x10000); |
| 543 | | memory_configure_bank(m_machine, "bank3", 0, 1, rom, 0); |
| 544 | | memory_configure_bank(m_machine, "bank3", 1, banks, ram + 0xf800, 0x10000); |
| 540 | memory_configure_bank(machine(), "bank1", 1, banks, ram, 0x10000); |
| 541 | memory_configure_bank(machine(), "bank2", 0, 1, rom, 0); |
| 542 | memory_configure_bank(machine(), "bank2", 1, banks, ram, 0x10000); |
| 543 | memory_configure_bank(machine(), "bank3", 0, 1, rom, 0); |
| 544 | memory_configure_bank(machine(), "bank3", 1, banks, ram + 0xf800, 0x10000); |
| 545 | 545 | |
| 546 | 546 | /* register for state saving */ |
| 547 | | state_save_register_global(m_machine, m_mode); |
| 548 | | state_save_register_global(m_machine, m_bank); |
| 549 | | state_save_register_global(m_machine, m_fdc_irq); |
| 550 | | state_save_register_global(m_machine, m_fdc_drq); |
| 551 | | state_save_register_global(m_machine, m_fdc_dden); |
| 547 | state_save_register_global(machine(), m_mode); |
| 548 | state_save_register_global(machine(), m_bank); |
| 549 | state_save_register_global(machine(), m_fdc_irq); |
| 550 | state_save_register_global(machine(), m_fdc_drq); |
| 551 | state_save_register_global(machine(), m_fdc_dden); |
| 552 | 552 | } |
| 553 | 553 | |
| 554 | 554 | void xor100_state::machine_reset() |
src/mess/drivers/sg1000.c
| r11240 | r11241 | |
| 110 | 110 | { |
| 111 | 111 | if (data & 0x01) |
| 112 | 112 | { |
| 113 | | m_tvdraw_data = input_port_read(m_machine, "TVDRAW_X"); |
| 113 | m_tvdraw_data = input_port_read(machine(), "TVDRAW_X"); |
| 114 | 114 | |
| 115 | 115 | if (m_tvdraw_data < 4) m_tvdraw_data = 4; |
| 116 | 116 | if (m_tvdraw_data > 251) m_tvdraw_data = 251; |
| 117 | 117 | } |
| 118 | 118 | else |
| 119 | 119 | { |
| 120 | | m_tvdraw_data = input_port_read(m_machine, "TVDRAW_Y") + 32; |
| 120 | m_tvdraw_data = input_port_read(machine(), "TVDRAW_Y") + 32; |
| 121 | 121 | } |
| 122 | 122 | } |
| 123 | 123 | |
| r11240 | r11241 | |
| 127 | 127 | |
| 128 | 128 | READ8_MEMBER( sg1000_state::tvdraw_status_r ) |
| 129 | 129 | { |
| 130 | | return input_port_read(m_machine, "TVDRAW_PEN"); |
| 130 | return input_port_read(machine(), "TVDRAW_PEN"); |
| 131 | 131 | } |
| 132 | 132 | |
| 133 | 133 | /*------------------------------------------------- |
| r11240 | r11241 | |
| 573 | 573 | |
| 574 | 574 | static const char *const keynames[] = { "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7" }; |
| 575 | 575 | |
| 576 | | return input_port_read(m_machine, keynames[m_keylatch]); |
| 576 | return input_port_read(machine(), keynames[m_keylatch]); |
| 577 | 577 | } |
| 578 | 578 | |
| 579 | 579 | READ8_MEMBER( sc3000_state::ppi_pb_r ) |
| r11240 | r11241 | |
| 594 | 594 | static const char *const keynames[] = { "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7" }; |
| 595 | 595 | |
| 596 | 596 | /* keyboard */ |
| 597 | | UINT8 data = input_port_read(m_machine, keynames[m_keylatch]); |
| 597 | UINT8 data = input_port_read(machine(), keynames[m_keylatch]); |
| 598 | 598 | |
| 599 | 599 | /* cartridge contact */ |
| 600 | 600 | data |= 0x10; |
| r11240 | r11241 | |
| 711 | 711 | } |
| 712 | 712 | |
| 713 | 713 | /* ROM selection */ |
| 714 | | memory_set_bank(m_machine, "bank1", BIT(data, 6)); |
| 714 | memory_set_bank(machine(), "bank1", BIT(data, 6)); |
| 715 | 715 | |
| 716 | 716 | /* printer strobe */ |
| 717 | 717 | centronics_strobe_w(m_centronics, BIT(data, 7)); |
| r11240 | r11241 | |
| 791 | 791 | case 40 * 1024: |
| 792 | 792 | program->install_read_bank(0x8000, 0x9fff, "bank1"); |
| 793 | 793 | program->unmap_write(0x8000, 0x9fff); |
| 794 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(Z80_TAG)->base() + 0x8000, 0); |
| 795 | | memory_set_bank(m_machine, "bank1", 0); |
| 794 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(Z80_TAG)->base() + 0x8000, 0); |
| 795 | memory_set_bank(machine(), "bank1", 0); |
| 796 | 796 | break; |
| 797 | 797 | |
| 798 | 798 | case 48 * 1024: |
| 799 | 799 | program->install_read_bank(0x8000, 0xbfff, "bank1"); |
| 800 | 800 | program->unmap_write(0x8000, 0xbfff); |
| 801 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(Z80_TAG)->base() + 0x8000, 0); |
| 802 | | memory_set_bank(m_machine, "bank1", 0); |
| 801 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(Z80_TAG)->base() + 0x8000, 0); |
| 802 | memory_set_bank(machine(), "bank1", 0); |
| 803 | 803 | break; |
| 804 | 804 | |
| 805 | 805 | default: |
| r11240 | r11241 | |
| 971 | 971 | TMS9928A_configure(&tms9928a_interface); |
| 972 | 972 | |
| 973 | 973 | /* toggle light gun crosshair */ |
| 974 | | m_machine.scheduler().timer_set(attotime::zero, FUNC(lightgun_tick)); |
| 974 | machine().scheduler().timer_set(attotime::zero, FUNC(lightgun_tick)); |
| 975 | 975 | |
| 976 | 976 | /* register for state saving */ |
| 977 | | state_save_register_global(m_machine, m_tvdraw_data); |
| 977 | state_save_register_global(machine(), m_tvdraw_data); |
| 978 | 978 | } |
| 979 | 979 | |
| 980 | 980 | /*------------------------------------------------- |
| r11240 | r11241 | |
| 987 | 987 | TMS9928A_configure(&tms9928a_interface); |
| 988 | 988 | |
| 989 | 989 | /* toggle light gun crosshair */ |
| 990 | | m_machine.scheduler().timer_set(attotime::zero, FUNC(lightgun_tick)); |
| 990 | machine().scheduler().timer_set(attotime::zero, FUNC(lightgun_tick)); |
| 991 | 991 | |
| 992 | 992 | /* register for state saving */ |
| 993 | | state_save_register_global(m_machine, m_tvdraw_data); |
| 994 | | state_save_register_global(m_machine, m_keylatch); |
| 993 | state_save_register_global(machine(), m_tvdraw_data); |
| 994 | state_save_register_global(machine(), m_keylatch); |
| 995 | 995 | } |
| 996 | 996 | |
| 997 | 997 | /*------------------------------------------------- |
| r11240 | r11241 | |
| 1018 | 1018 | floppy_drive_set_index_pulse_callback(m_floppy0, sf7000_fdc_index_callback); |
| 1019 | 1019 | |
| 1020 | 1020 | /* configure memory banking */ |
| 1021 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(Z80_TAG)->base(), 0); |
| 1022 | | memory_configure_bank(m_machine, "bank1", 1, 1, ram_get_ptr(m_ram), 0); |
| 1023 | | memory_configure_bank(m_machine, "bank2", 0, 1, ram_get_ptr(m_ram), 0); |
| 1021 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(Z80_TAG)->base(), 0); |
| 1022 | memory_configure_bank(machine(), "bank1", 1, 1, ram_get_ptr(m_ram), 0); |
| 1023 | memory_configure_bank(machine(), "bank2", 0, 1, ram_get_ptr(m_ram), 0); |
| 1024 | 1024 | |
| 1025 | 1025 | /* register for state saving */ |
| 1026 | | state_save_register_global(m_machine, m_keylatch); |
| 1027 | | state_save_register_global(m_machine, m_fdc_irq); |
| 1028 | | state_save_register_global(m_machine, m_fdc_index); |
| 1026 | state_save_register_global(machine(), m_keylatch); |
| 1027 | state_save_register_global(machine(), m_fdc_irq); |
| 1028 | state_save_register_global(machine(), m_fdc_index); |
| 1029 | 1029 | } |
| 1030 | 1030 | |
| 1031 | 1031 | /*------------------------------------------------- |
| r11240 | r11241 | |
| 1034 | 1034 | |
| 1035 | 1035 | void sf7000_state::machine_reset() |
| 1036 | 1036 | { |
| 1037 | | memory_set_bank(m_machine, "bank1", 0); |
| 1038 | | memory_set_bank(m_machine, "bank2", 0); |
| 1037 | memory_set_bank(machine(), "bank1", 0); |
| 1038 | memory_set_bank(machine(), "bank2", 0); |
| 1039 | 1039 | } |
| 1040 | 1040 | |
| 1041 | 1041 | /*************************************************************************** |
src/mess/drivers/mikromik.c
| r11240 | r11241 | |
| 63 | 63 | { |
| 64 | 64 | case 0: /* IC24 A8 */ |
| 65 | 65 | //logerror("IC24 A8 %u\n", d); |
| 66 | | memory_set_bank(m_machine, "bank1", d); |
| 66 | memory_set_bank(machine(), "bank1", d); |
| 67 | 67 | |
| 68 | 68 | if (d) |
| 69 | 69 | { |
| r11240 | r11241 | |
| 110 | 110 | floppy_drive_set_ready_state(m_floppy0, d, 1); |
| 111 | 111 | floppy_drive_set_ready_state(m_floppy1, d, 1); |
| 112 | 112 | |
| 113 | | if (input_port_read(m_machine, "T5")) upd765_ready_w(m_fdc, d); |
| 113 | if (input_port_read(machine(), "T5")) upd765_ready_w(m_fdc, d); |
| 114 | 114 | break; |
| 115 | 115 | } |
| 116 | 116 | } |
| r11240 | r11241 | |
| 323 | 323 | void mm1_state::video_start() |
| 324 | 324 | { |
| 325 | 325 | // find memory regions |
| 326 | | m_char_rom = m_machine.region("chargen")->base(); |
| 326 | m_char_rom = machine().region("chargen")->base(); |
| 327 | 327 | |
| 328 | | VIDEO_START_NAME(generic_bitmapped)(m_machine); |
| 328 | VIDEO_START_NAME(generic_bitmapped)(machine()); |
| 329 | 329 | } |
| 330 | 330 | |
| 331 | 331 | bool mm1_state::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect) |
| r11240 | r11241 | |
| 561 | 561 | { |
| 562 | 562 | static const char *const keynames[] = { "ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7", "ROW8", "ROW9" }; |
| 563 | 563 | |
| 564 | | UINT8 data = input_port_read(m_machine, keynames[m_drive]); |
| 565 | | UINT8 special = input_port_read(m_machine, "SPECIAL"); |
| 564 | UINT8 data = input_port_read(machine(), keynames[m_drive]); |
| 565 | UINT8 special = input_port_read(machine(), "SPECIAL"); |
| 566 | 566 | int ctrl = BIT(special, 0); |
| 567 | 567 | int shift = BIT(special, 2) & BIT(special, 1); |
| 568 | 568 | UINT8 keydata = 0xff; |
| r11240 | r11241 | |
| 658 | 658 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 659 | 659 | |
| 660 | 660 | /* find memory regions */ |
| 661 | | m_key_rom = m_machine.region("keyboard")->base(); |
| 661 | m_key_rom = machine().region("keyboard")->base(); |
| 662 | 662 | |
| 663 | 663 | /* setup memory banking */ |
| 664 | 664 | program->install_read_bank(0x0000, 0x0fff, "bank1"); |
| 665 | 665 | program->unmap_write(0x0000, 0x0fff); |
| 666 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region("bios")->base(), 0); |
| 667 | | memory_configure_bank(m_machine, "bank1", 1, 1, ram_get_ptr(m_machine.device(RAM_TAG)), 0); |
| 668 | | memory_set_bank(m_machine, "bank1", 0); |
| 666 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region("bios")->base(), 0); |
| 667 | memory_configure_bank(machine(), "bank1", 1, 1, ram_get_ptr(machine().device(RAM_TAG)), 0); |
| 668 | memory_set_bank(machine(), "bank1", 0); |
| 669 | 669 | |
| 670 | 670 | /* register for state saving */ |
| 671 | | state_save_register_global(m_machine, m_sense); |
| 672 | | state_save_register_global(m_machine, m_drive); |
| 673 | | state_save_register_global(m_machine, m_llen); |
| 674 | | state_save_register_global(m_machine, m_intc); |
| 675 | | state_save_register_global(m_machine, m_rx21); |
| 676 | | state_save_register_global(m_machine, m_tx21); |
| 677 | | state_save_register_global(m_machine, m_rcl); |
| 678 | | state_save_register_global(m_machine, m_recall); |
| 679 | | state_save_register_global(m_machine, m_dack3); |
| 671 | state_save_register_global(machine(), m_sense); |
| 672 | state_save_register_global(machine(), m_drive); |
| 673 | state_save_register_global(machine(), m_llen); |
| 674 | state_save_register_global(machine(), m_intc); |
| 675 | state_save_register_global(machine(), m_rx21); |
| 676 | state_save_register_global(machine(), m_tx21); |
| 677 | state_save_register_global(machine(), m_rcl); |
| 678 | state_save_register_global(machine(), m_recall); |
| 679 | state_save_register_global(machine(), m_dack3); |
| 680 | 680 | } |
| 681 | 681 | |
| 682 | 682 | void mm1_state::machine_reset() |
| r11240 | r11241 | |
| 688 | 688 | for (i = 0; i < 8; i++) ls259_w(*program, i, 0); |
| 689 | 689 | |
| 690 | 690 | /* set FDC ready */ |
| 691 | | if (!input_port_read(m_machine, "T5")) upd765_ready_w(m_fdc, 1); |
| 691 | if (!input_port_read(machine(), "T5")) upd765_ready_w(m_fdc, 1); |
| 692 | 692 | |
| 693 | 693 | /* reset FDC */ |
| 694 | 694 | upd765_reset_w(m_fdc, 1); |
src/mess/drivers/v1050.c
| r11240 | r11241 | |
| 127 | 127 | if (BIT(m_bank, 0)) |
| 128 | 128 | { |
| 129 | 129 | program->install_readwrite_bank(0x0000, 0x1fff, "bank1"); |
| 130 | | memory_set_bank(m_machine, "bank1", bank); |
| 130 | memory_set_bank(machine(), "bank1", bank); |
| 131 | 131 | } |
| 132 | 132 | else |
| 133 | 133 | { |
| 134 | 134 | program->install_read_bank(0x0000, 0x1fff, "bank1"); |
| 135 | 135 | program->unmap_write(0x0000, 0x1fff); |
| 136 | | memory_set_bank(m_machine, "bank1", 3); |
| 136 | memory_set_bank(machine(), "bank1", 3); |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | | memory_set_bank(m_machine, "bank2", bank); |
| 139 | memory_set_bank(machine(), "bank2", bank); |
| 140 | 140 | |
| 141 | 141 | if (bank == 2) |
| 142 | 142 | { |
| r11240 | r11241 | |
| 146 | 146 | { |
| 147 | 147 | program->install_readwrite_bank(0x4000, 0x7fff, "bank3"); |
| 148 | 148 | program->install_readwrite_bank(0x8000, 0xbfff, "bank4"); |
| 149 | | memory_set_bank(m_machine, "bank3", bank); |
| 150 | | memory_set_bank(m_machine, "bank4", bank); |
| 149 | memory_set_bank(machine(), "bank3", bank); |
| 150 | memory_set_bank(machine(), "bank4", bank); |
| 151 | 151 | } |
| 152 | 152 | |
| 153 | | memory_set_bank(m_machine, "bank5", bank); |
| 153 | memory_set_bank(machine(), "bank5", bank); |
| 154 | 154 | } |
| 155 | 155 | |
| 156 | 156 | /* Keyboard HACK */ |
| r11240 | r11241 | |
| 224 | 224 | int table = 0, row, col; |
| 225 | 225 | int keydata = 0xff; |
| 226 | 226 | |
| 227 | | UINT8 line_mod = input_port_read(m_machine, "ROW12"); |
| 227 | UINT8 line_mod = input_port_read(machine(), "ROW12"); |
| 228 | 228 | |
| 229 | 229 | if((line_mod & 0x07) && (line_mod & 0x18)) |
| 230 | 230 | { |
| r11240 | r11241 | |
| 242 | 242 | /* scan keyboard */ |
| 243 | 243 | for (row = 0; row < 12; row++) |
| 244 | 244 | { |
| 245 | | UINT8 data = input_port_read(m_machine, keynames[row]); |
| 245 | UINT8 data = input_port_read(machine(), keynames[row]); |
| 246 | 246 | |
| 247 | 247 | for (col = 0; col < 8; col++) |
| 248 | 248 | { |
| r11240 | r11241 | |
| 346 | 346 | { |
| 347 | 347 | static const char *const KEY_ROW[] = { "X0", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "XA", "XB" }; |
| 348 | 348 | |
| 349 | | return input_port_read(m_machine, KEY_ROW[m_keylatch]); |
| 349 | return input_port_read(machine(), KEY_ROW[m_keylatch]); |
| 350 | 350 | } |
| 351 | 351 | |
| 352 | 352 | WRITE8_MEMBER( v1050_state::keyboard_w ) |
| r11240 | r11241 | |
| 1108 | 1108 | device_set_irq_callback(m_maincpu, v1050_int_ack); |
| 1109 | 1109 | |
| 1110 | 1110 | /* setup memory banking */ |
| 1111 | | UINT8 *ram = ram_get_ptr(m_machine.device(RAM_TAG)); |
| 1111 | UINT8 *ram = ram_get_ptr(machine().device(RAM_TAG)); |
| 1112 | 1112 | |
| 1113 | | memory_configure_bank(m_machine, "bank1", 0, 2, ram, 0x10000); |
| 1114 | | memory_configure_bank(m_machine, "bank1", 2, 1, ram + 0x1c000, 0); |
| 1115 | | memory_configure_bank(m_machine, "bank1", 3, 1, m_machine.region(Z80_TAG)->base(), 0); |
| 1113 | memory_configure_bank(machine(), "bank1", 0, 2, ram, 0x10000); |
| 1114 | memory_configure_bank(machine(), "bank1", 2, 1, ram + 0x1c000, 0); |
| 1115 | memory_configure_bank(machine(), "bank1", 3, 1, machine().region(Z80_TAG)->base(), 0); |
| 1116 | 1116 | |
| 1117 | 1117 | program->install_readwrite_bank(0x2000, 0x3fff, "bank2"); |
| 1118 | | memory_configure_bank(m_machine, "bank2", 0, 2, ram + 0x2000, 0x10000); |
| 1119 | | memory_configure_bank(m_machine, "bank2", 2, 1, ram + 0x1e000, 0); |
| 1118 | memory_configure_bank(machine(), "bank2", 0, 2, ram + 0x2000, 0x10000); |
| 1119 | memory_configure_bank(machine(), "bank2", 2, 1, ram + 0x1e000, 0); |
| 1120 | 1120 | |
| 1121 | 1121 | program->install_readwrite_bank(0x4000, 0x7fff, "bank3"); |
| 1122 | | memory_configure_bank(m_machine, "bank3", 0, 2, ram + 0x4000, 0x10000); |
| 1122 | memory_configure_bank(machine(), "bank3", 0, 2, ram + 0x4000, 0x10000); |
| 1123 | 1123 | |
| 1124 | 1124 | program->install_readwrite_bank(0x8000, 0xbfff, "bank4"); |
| 1125 | | memory_configure_bank(m_machine, "bank4", 0, 2, ram + 0x8000, 0x10000); |
| 1125 | memory_configure_bank(machine(), "bank4", 0, 2, ram + 0x8000, 0x10000); |
| 1126 | 1126 | |
| 1127 | 1127 | program->install_readwrite_bank(0xc000, 0xffff, "bank5"); |
| 1128 | | memory_configure_bank(m_machine, "bank5", 0, 3, ram + 0xc000, 0); |
| 1128 | memory_configure_bank(machine(), "bank5", 0, 3, ram + 0xc000, 0); |
| 1129 | 1129 | |
| 1130 | 1130 | bankswitch(); |
| 1131 | 1131 | |
| 1132 | 1132 | /* register for state saving */ |
| 1133 | | state_save_register_global(m_machine, m_int_mask); |
| 1134 | | state_save_register_global(m_machine, m_int_state); |
| 1135 | | state_save_register_global(m_machine, m_f_int_enb); |
| 1136 | | state_save_register_global(m_machine, m_keylatch); |
| 1137 | | state_save_register_global(m_machine, m_keydata); |
| 1138 | | state_save_register_global(m_machine, m_keyavail); |
| 1139 | | state_save_register_global(m_machine, m_kb_so); |
| 1140 | | state_save_register_global(m_machine, m_rxrdy); |
| 1141 | | state_save_register_global(m_machine, m_txrdy); |
| 1142 | | state_save_register_global(m_machine, m_baud_sel); |
| 1143 | | state_save_register_global(m_machine, m_bank); |
| 1133 | state_save_register_global(machine(), m_int_mask); |
| 1134 | state_save_register_global(machine(), m_int_state); |
| 1135 | state_save_register_global(machine(), m_f_int_enb); |
| 1136 | state_save_register_global(machine(), m_keylatch); |
| 1137 | state_save_register_global(machine(), m_keydata); |
| 1138 | state_save_register_global(machine(), m_keyavail); |
| 1139 | state_save_register_global(machine(), m_kb_so); |
| 1140 | state_save_register_global(machine(), m_rxrdy); |
| 1141 | state_save_register_global(machine(), m_txrdy); |
| 1142 | state_save_register_global(machine(), m_baud_sel); |
| 1143 | state_save_register_global(machine(), m_bank); |
| 1144 | 1144 | } |
| 1145 | 1145 | |
| 1146 | 1146 | void v1050_state::machine_reset() |
src/mess/drivers/ql.c
| r11240 | r11241 | |
| 248 | 248 | |
| 249 | 249 | UINT8 data = 0; |
| 250 | 250 | |
| 251 | | if (BIT(m_keylatch, 0)) data |= input_port_read(m_machine, "ROW0") | input_port_read(m_machine, "JOY0"); |
| 252 | | if (BIT(m_keylatch, 1)) data |= input_port_read(m_machine, "ROW1") | input_port_read(m_machine, "JOY1"); |
| 253 | | if (BIT(m_keylatch, 2)) data |= input_port_read(m_machine, "ROW2"); |
| 254 | | if (BIT(m_keylatch, 3)) data |= input_port_read(m_machine, "ROW3"); |
| 255 | | if (BIT(m_keylatch, 4)) data |= input_port_read(m_machine, "ROW4"); |
| 256 | | if (BIT(m_keylatch, 5)) data |= input_port_read(m_machine, "ROW5"); |
| 257 | | if (BIT(m_keylatch, 6)) data |= input_port_read(m_machine, "ROW6"); |
| 258 | | if (BIT(m_keylatch, 7)) data |= input_port_read(m_machine, "ROW7"); |
| 251 | if (BIT(m_keylatch, 0)) data |= input_port_read(machine(), "ROW0") | input_port_read(machine(), "JOY0"); |
| 252 | if (BIT(m_keylatch, 1)) data |= input_port_read(machine(), "ROW1") | input_port_read(machine(), "JOY1"); |
| 253 | if (BIT(m_keylatch, 2)) data |= input_port_read(machine(), "ROW2"); |
| 254 | if (BIT(m_keylatch, 3)) data |= input_port_read(machine(), "ROW3"); |
| 255 | if (BIT(m_keylatch, 4)) data |= input_port_read(machine(), "ROW4"); |
| 256 | if (BIT(m_keylatch, 5)) data |= input_port_read(machine(), "ROW5"); |
| 257 | if (BIT(m_keylatch, 6)) data |= input_port_read(machine(), "ROW6"); |
| 258 | if (BIT(m_keylatch, 7)) data |= input_port_read(machine(), "ROW7"); |
| 259 | 259 | |
| 260 | 260 | return data; |
| 261 | 261 | } |
| r11240 | r11241 | |
| 265 | 265 | UINT8 result = 0; |
| 266 | 266 | |
| 267 | 267 | if(LOG_DISK_READ) |
| 268 | | logerror("%s DiskIO:Read of %08X\n",m_machine.describe_context(),m_disk_io_base+offset); |
| 268 | logerror("%s DiskIO:Read of %08X\n",machine().describe_context(),m_disk_io_base+offset); |
| 269 | 269 | |
| 270 | 270 | switch (offset) |
| 271 | 271 | { |
| r11240 | r11241 | |
| 273 | 273 | case 0x0001 : result=wd17xx_r(m_fdc, offset); break; |
| 274 | 274 | case 0x0002 : result=wd17xx_r(m_fdc, offset); break; |
| 275 | 275 | case 0x0003 : result=wd17xx_r(m_fdc, offset); break; |
| 276 | | default : logerror("%s DiskIO undefined read : from %08X\n",m_machine.describe_context(),m_disk_io_base+offset); break; |
| 276 | default : logerror("%s DiskIO undefined read : from %08X\n",machine().describe_context(),m_disk_io_base+offset); break; |
| 277 | 277 | } |
| 278 | 278 | |
| 279 | 279 | return result; |
| r11240 | r11241 | |
| 282 | 282 | WRITE8_MEMBER( ql_state::disk_io_w ) |
| 283 | 283 | { |
| 284 | 284 | if(LOG_DISK_WRITE) |
| 285 | | logerror("%s DiskIO:Write %02X to %08X\n",m_machine.describe_context(),data,m_disk_io_base+offset); |
| 285 | logerror("%s DiskIO:Write %02X to %08X\n",machine().describe_context(),data,m_disk_io_base+offset); |
| 286 | 286 | |
| 287 | 287 | switch (offset) |
| 288 | 288 | { |
| r11240 | r11241 | |
| 296 | 296 | m_printer_char=data; |
| 297 | 297 | case 0x2000 : if(m_disk_type==DISK_TYPE_TRUMP) |
| 298 | 298 | trump_card_set_control(data);break; |
| 299 | | default : logerror("%s DiskIO undefined write : %02X to %08X\n",m_machine.describe_context(),data,m_disk_io_base+offset); break; |
| 299 | default : logerror("%s DiskIO undefined write : %02X to %08X\n",machine().describe_context(),data,m_disk_io_base+offset); break; |
| 300 | 300 | } |
| 301 | 301 | } |
| 302 | 302 | |
| r11240 | r11241 | |
| 310 | 310 | space.unmap_readwrite(0x0c0000, 0x0fffff); |
| 311 | 311 | |
| 312 | 312 | // Setup trumcard rom mapped to rom so unlink us |
| 313 | | space.install_rom(0x010000, 0x018000, &m_machine.region(M68008_TAG)->base()[TRUMP_ROM_BASE]); |
| 313 | space.install_rom(0x010000, 0x018000, &machine().region(M68008_TAG)->base()[TRUMP_ROM_BASE]); |
| 314 | 314 | |
| 315 | | return m_machine.region(M68008_TAG)->base()[TRUMP_ROM_BASE+offset]; |
| 315 | return machine().region(M68008_TAG)->base()[TRUMP_ROM_BASE+offset]; |
| 316 | 316 | } |
| 317 | 317 | |
| 318 | 318 | READ8_MEMBER( ql_state::cart_rom_r ) |
| 319 | 319 | { |
| 320 | 320 | // Setup trumcard rom mapped in at $c0000 |
| 321 | | space.install_rom(0x0c0000, 0x0c8000, &m_machine.region(M68008_TAG)->base()[TRUMP_ROM_BASE]); |
| 321 | space.install_rom(0x0c0000, 0x0c8000, &machine().region(M68008_TAG)->base()[TRUMP_ROM_BASE]); |
| 322 | 322 | |
| 323 | 323 | // Setup cart rom to rom handler, so unlink us |
| 324 | | space.install_rom(0x0c000, 0x0ffff, &m_machine.region(M68008_TAG)->base()[CART_ROM_BASE]); |
| 324 | space.install_rom(0x0c000, 0x0ffff, &machine().region(M68008_TAG)->base()[CART_ROM_BASE]); |
| 325 | 325 | |
| 326 | | return m_machine.region(M68008_TAG)->base()[CART_ROM_BASE+offset]; |
| 326 | return machine().region(M68008_TAG)->base()[CART_ROM_BASE+offset]; |
| 327 | 327 | } |
| 328 | 328 | |
| 329 | 329 | void ql_state::trump_card_set_control(UINT8 data) |
| r11240 | r11241 | |
| 927 | 927 | void ql_state::machine_start() |
| 928 | 928 | { |
| 929 | 929 | // register for state saving |
| 930 | | state_save_register_global(m_machine, m_keylatch); |
| 931 | | state_save_register_global(m_machine, m_ipl); |
| 932 | | state_save_register_global(m_machine, m_comdata); |
| 933 | | state_save_register_global(m_machine, m_baudx4); |
| 934 | | state_save_register_global(m_machine, m_printer_char); |
| 935 | | state_save_register_global(m_machine, m_disk_io_byte); |
| 930 | state_save_register_global(machine(), m_keylatch); |
| 931 | state_save_register_global(machine(), m_ipl); |
| 932 | state_save_register_global(machine(), m_comdata); |
| 933 | state_save_register_global(machine(), m_baudx4); |
| 934 | state_save_register_global(machine(), m_printer_char); |
| 935 | state_save_register_global(machine(), m_disk_io_byte); |
| 936 | 936 | } |
| 937 | 937 | |
| 938 | 938 | void ql_state::machine_reset() |
| 939 | 939 | { |
| 940 | 940 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 941 | 941 | |
| 942 | | m_disk_type=input_port_read(m_machine,QL_CONFIG_PORT) & DISK_TYPE_MASK; |
| 942 | m_disk_type=input_port_read(machine(),QL_CONFIG_PORT) & DISK_TYPE_MASK; |
| 943 | 943 | logerror("disktype=%d\n",m_disk_type); |
| 944 | 944 | |
| 945 | 945 | m_printer_char=0; |
| r11240 | r11241 | |
| 974 | 974 | { |
| 975 | 975 | case DISK_TYPE_SANDY : |
| 976 | 976 | logerror("Configuring SandySuperDisk\n"); |
| 977 | | program->install_rom(0x0c0000, 0x0c3fff, &m_machine.region(M68008_TAG)->base()[SANDY_ROM_BASE]); |
| 977 | program->install_rom(0x0c0000, 0x0c3fff, &machine().region(M68008_TAG)->base()[SANDY_ROM_BASE]); |
| 978 | 978 | program->install_read_handler(SANDY_IO_BASE, SANDY_IO_END, 0, 0, read8_delegate(FUNC(ql_state::disk_io_r), this)); |
| 979 | 979 | program->install_write_handler(SANDY_IO_BASE, SANDY_IO_END, 0, 0, write8_delegate(FUNC(ql_state::disk_io_w), this)); |
| 980 | 980 | m_disk_io_base=SANDY_IO_BASE; |
src/mess/drivers/abc80x.c
| r11240 | r11241 | |
| 301 | 301 | else |
| 302 | 302 | { |
| 303 | 303 | // BASIC ROM selected |
| 304 | | program->install_rom(0x0000, 0x3fff, m_machine.region(Z80_TAG)->base()); |
| 304 | program->install_rom(0x0000, 0x3fff, machine().region(Z80_TAG)->base()); |
| 305 | 305 | } |
| 306 | 306 | } |
| 307 | 307 | |
| r11240 | r11241 | |
| 317 | 317 | if (m_lrs) |
| 318 | 318 | { |
| 319 | 319 | // ROM and video RAM selected |
| 320 | | program->install_rom(0x0000, 0x77ff, m_machine.region(Z80_TAG)->base()); |
| 320 | program->install_rom(0x0000, 0x77ff, machine().region(Z80_TAG)->base()); |
| 321 | 321 | program->install_ram(0x7800, 0x7fff, m_char_ram); |
| 322 | 322 | } |
| 323 | 323 | else |
| r11240 | r11241 | |
| 356 | 356 | //logerror("%04x-%04x: Video RAM %04x (32K)\n", start_addr, end_addr, videoram_offset); |
| 357 | 357 | |
| 358 | 358 | program->install_readwrite_bank(start_addr, end_addr, bank_name); |
| 359 | | memory_configure_bank(m_machine, bank_name, 1, 1, m_video_ram + videoram_offset, 0); |
| 360 | | memory_set_bank(m_machine, bank_name, 1); |
| 359 | memory_configure_bank(machine(), bank_name, 1, 1, m_video_ram + videoram_offset, 0); |
| 360 | memory_set_bank(machine(), bank_name, 1); |
| 361 | 361 | } |
| 362 | 362 | |
| 363 | 363 | for (bank = 9; bank <= 16; bank++) |
| r11240 | r11241 | |
| 370 | 370 | //logerror("%04x-%04x: Work RAM (32K)\n", start_addr, end_addr); |
| 371 | 371 | |
| 372 | 372 | program->install_readwrite_bank(start_addr, end_addr, bank_name); |
| 373 | | memory_set_bank(m_machine, bank_name, 0); |
| 373 | memory_set_bank(machine(), bank_name, 0); |
| 374 | 374 | } |
| 375 | 375 | } |
| 376 | 376 | else |
| r11240 | r11241 | |
| 390 | 390 | //logerror("%04x-%04x: Video RAM %04x (4K)\n", start_addr, end_addr, videoram_offset); |
| 391 | 391 | |
| 392 | 392 | program->install_readwrite_bank(start_addr, end_addr, bank_name); |
| 393 | | memory_configure_bank(m_machine, bank_name, 1, 1, m_video_ram + videoram_offset, 0); |
| 394 | | memory_set_bank(m_machine, bank_name, 1); |
| 393 | memory_configure_bank(machine(), bank_name, 1, 1, m_video_ram + videoram_offset, 0); |
| 394 | memory_set_bank(machine(), bank_name, 1); |
| 395 | 395 | } |
| 396 | 396 | else |
| 397 | 397 | { |
| r11240 | r11241 | |
| 405 | 405 | |
| 406 | 406 | program->install_read_bank(start_addr, end_addr, bank_name); |
| 407 | 407 | program->unmap_write(start_addr, end_addr); |
| 408 | | memory_set_bank(m_machine, bank_name, 0); |
| 408 | memory_set_bank(machine(), bank_name, 0); |
| 409 | 409 | break; |
| 410 | 410 | |
| 411 | 411 | case 8: |
| r11240 | r11241 | |
| 415 | 415 | program->install_read_bank(0x7000, 0x77ff, bank_name); |
| 416 | 416 | program->unmap_write(0x7000, 0x77ff); |
| 417 | 417 | program->install_readwrite_handler(0x7800, 0x7fff, 0, 0, read8_delegate(FUNC(abc806_state::charram_r),this), write8_delegate(FUNC(abc806_state::charram_w),this)); |
| 418 | | memory_set_bank(m_machine, bank_name, 0); |
| 418 | memory_set_bank(machine(), bank_name, 0); |
| 419 | 419 | break; |
| 420 | 420 | |
| 421 | 421 | default: |
| r11240 | r11241 | |
| 423 | 423 | //logerror("%04x-%04x: Work RAM (4K)\n", start_addr, end_addr); |
| 424 | 424 | |
| 425 | 425 | program->install_readwrite_bank(start_addr, end_addr, bank_name); |
| 426 | | memory_set_bank(m_machine, bank_name, 0); |
| 426 | memory_set_bank(machine(), bank_name, 0); |
| 427 | 427 | break; |
| 428 | 428 | } |
| 429 | 429 | } |
| r11240 | r11241 | |
| 456 | 456 | program->install_readwrite_bank(start_addr, end_addr, bank_name); |
| 457 | 457 | } |
| 458 | 458 | |
| 459 | | memory_configure_bank(m_machine, bank_name, 1, 1, m_video_ram + videoram_offset, 0); |
| 460 | | memory_set_bank(m_machine, bank_name, 1); |
| 459 | memory_configure_bank(machine(), bank_name, 1, 1, m_video_ram + videoram_offset, 0); |
| 460 | memory_set_bank(machine(), bank_name, 1); |
| 461 | 461 | } |
| 462 | 462 | } |
| 463 | 463 | } |
| r11240 | r11241 | |
| 554 | 554 | |
| 555 | 555 | if (m_kb_stb && m_kb_row < 12) |
| 556 | 556 | { |
| 557 | | data = input_port_read(m_machine, ABC800_KEY_ROW[m_kb_row]); |
| 557 | data = input_port_read(machine(), ABC800_KEY_ROW[m_kb_row]); |
| 558 | 558 | } |
| 559 | 559 | |
| 560 | 560 | return data; |
| r11240 | r11241 | |
| 1271 | 1271 | m_kb_txd = 1; |
| 1272 | 1272 | |
| 1273 | 1273 | // register for state saving |
| 1274 | | state_save_register_global(m_machine, m_fetch_charram); |
| 1275 | | state_save_register_global(m_machine, m_kb_row); |
| 1276 | | state_save_register_global(m_machine, m_kb_txd); |
| 1277 | | state_save_register_global(m_machine, m_kb_clk); |
| 1278 | | state_save_register_global(m_machine, m_kb_stb); |
| 1279 | | state_save_register_global(m_machine, m_pling); |
| 1280 | | state_save_register_global(m_machine, m_sio_rxcb); |
| 1281 | | state_save_register_global(m_machine, m_sio_txcb); |
| 1274 | state_save_register_global(machine(), m_fetch_charram); |
| 1275 | state_save_register_global(machine(), m_kb_row); |
| 1276 | state_save_register_global(machine(), m_kb_txd); |
| 1277 | state_save_register_global(machine(), m_kb_clk); |
| 1278 | state_save_register_global(machine(), m_kb_stb); |
| 1279 | state_save_register_global(machine(), m_pling); |
| 1280 | state_save_register_global(machine(), m_sio_rxcb); |
| 1281 | state_save_register_global(machine(), m_sio_txcb); |
| 1282 | 1282 | } |
| 1283 | 1283 | |
| 1284 | 1284 | |
| r11240 | r11241 | |
| 1288 | 1288 | |
| 1289 | 1289 | void abc800_state::machine_reset() |
| 1290 | 1290 | { |
| 1291 | | m_sb = input_port_read(m_machine, "SB"); |
| 1291 | m_sb = input_port_read(machine(), "SB"); |
| 1292 | 1292 | |
| 1293 | 1293 | m_fetch_charram = 0; |
| 1294 | 1294 | bankswitch(); |
| r11240 | r11241 | |
| 1307 | 1307 | void abc802_state::machine_start() |
| 1308 | 1308 | { |
| 1309 | 1309 | // register for state saving |
| 1310 | | state_save_register_global(m_machine, m_lrs); |
| 1311 | | state_save_register_global(m_machine, m_pling); |
| 1312 | | state_save_register_global(m_machine, m_keylatch); |
| 1310 | state_save_register_global(machine(), m_lrs); |
| 1311 | state_save_register_global(machine(), m_pling); |
| 1312 | state_save_register_global(machine(), m_keylatch); |
| 1313 | 1313 | } |
| 1314 | 1314 | |
| 1315 | 1315 | |
| r11240 | r11241 | |
| 1319 | 1319 | |
| 1320 | 1320 | void abc802_state::machine_reset() |
| 1321 | 1321 | { |
| 1322 | | UINT8 config = input_port_read(m_machine, "CONFIG"); |
| 1323 | | m_sb = input_port_read(m_machine, "SB"); |
| 1322 | UINT8 config = input_port_read(machine(), "CONFIG"); |
| 1323 | m_sb = input_port_read(machine(), "SB"); |
| 1324 | 1324 | |
| 1325 | 1325 | // memory banking |
| 1326 | 1326 | m_lrs = 1; |
| r11240 | r11241 | |
| 1346 | 1346 | |
| 1347 | 1347 | void abc806_state::machine_start() |
| 1348 | 1348 | { |
| 1349 | | UINT8 *mem = m_machine.region(Z80_TAG)->base(); |
| 1349 | UINT8 *mem = machine().region(Z80_TAG)->base(); |
| 1350 | 1350 | UINT32 videoram_size = ram_get_size(m_ram) - (32 * 1024); |
| 1351 | 1351 | int bank; |
| 1352 | 1352 | char bank_name[10]; |
| 1353 | 1353 | |
| 1354 | 1354 | // setup memory banking |
| 1355 | | m_video_ram = auto_alloc_array(m_machine, UINT8, videoram_size); |
| 1355 | m_video_ram = auto_alloc_array(machine(), UINT8, videoram_size); |
| 1356 | 1356 | |
| 1357 | 1357 | for (bank = 1; bank <= 16; bank++) |
| 1358 | 1358 | { |
| 1359 | 1359 | sprintf(bank_name,"bank%d",bank); |
| 1360 | | memory_configure_bank(m_machine, bank_name, 0, 1, mem + (0x1000 * (bank - 1)), 0); |
| 1361 | | memory_configure_bank(m_machine, bank_name, 1, 1, m_video_ram, 0); |
| 1362 | | memory_set_bank(m_machine, bank_name, 0); |
| 1360 | memory_configure_bank(machine(), bank_name, 0, 1, mem + (0x1000 * (bank - 1)), 0); |
| 1361 | memory_configure_bank(machine(), bank_name, 1, 1, m_video_ram, 0); |
| 1362 | memory_set_bank(machine(), bank_name, 0); |
| 1363 | 1363 | } |
| 1364 | 1364 | |
| 1365 | 1365 | // register for state saving |
| 1366 | | state_save_register_global(m_machine, m_keydtr); |
| 1367 | | state_save_register_global(m_machine, m_eme); |
| 1368 | | state_save_register_global(m_machine, m_fetch_charram); |
| 1369 | | state_save_register_global_array(m_machine, m_map); |
| 1370 | | state_save_register_global(m_machine, m_keylatch); |
| 1366 | state_save_register_global(machine(), m_keydtr); |
| 1367 | state_save_register_global(machine(), m_eme); |
| 1368 | state_save_register_global(machine(), m_fetch_charram); |
| 1369 | state_save_register_global_array(machine(), m_map); |
| 1370 | state_save_register_global(machine(), m_keylatch); |
| 1371 | 1371 | } |
| 1372 | 1372 | |
| 1373 | 1373 | |
| r11240 | r11241 | |
| 1377 | 1377 | |
| 1378 | 1378 | void abc806_state::machine_reset() |
| 1379 | 1379 | { |
| 1380 | | m_sb = input_port_read(m_machine, "SB"); |
| 1380 | m_sb = input_port_read(machine(), "SB"); |
| 1381 | 1381 | |
| 1382 | 1382 | // setup memory banking |
| 1383 | 1383 | int bank; |
| r11240 | r11241 | |
| 1386 | 1386 | for (bank = 1; bank <= 16; bank++) |
| 1387 | 1387 | { |
| 1388 | 1388 | sprintf(bank_name,"bank%d",bank); |
| 1389 | | memory_set_bank(m_machine, bank_name, 0); |
| 1389 | memory_set_bank(machine(), bank_name, 0); |
| 1390 | 1390 | } |
| 1391 | 1391 | |
| 1392 | 1392 | bankswitch(); |
src/mess/drivers/tmc1800.c
| r11240 | r11241 | |
| 169 | 169 | { |
| 170 | 170 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 171 | 171 | UINT8 *ram = ram_get_ptr(m_ram); |
| 172 | | UINT8 *rom = m_machine.region(CDP1802_TAG)->base(); |
| 172 | UINT8 *rom = machine().region(CDP1802_TAG)->base(); |
| 173 | 173 | |
| 174 | 174 | if (m_roc) |
| 175 | 175 | { |
| r11240 | r11241 | |
| 482 | 482 | |
| 483 | 483 | READ_LINE_MEMBER( tmc1800_state::clear_r ) |
| 484 | 484 | { |
| 485 | | return BIT(input_port_read(m_machine, "RUN"), 0); |
| 485 | return BIT(input_port_read(machine(), "RUN"), 0); |
| 486 | 486 | } |
| 487 | 487 | |
| 488 | 488 | READ_LINE_MEMBER( tmc1800_state::ef2_r ) |
| r11240 | r11241 | |
| 493 | 493 | READ_LINE_MEMBER( tmc1800_state::ef3_r ) |
| 494 | 494 | { |
| 495 | 495 | static const char *const keynames[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7" }; |
| 496 | | UINT8 data = ~input_port_read(m_machine, keynames[m_keylatch / 8]); |
| 496 | UINT8 data = ~input_port_read(machine(), keynames[m_keylatch / 8]); |
| 497 | 497 | |
| 498 | 498 | return BIT(data, m_keylatch % 8); |
| 499 | 499 | } |
| r11240 | r11241 | |
| 523 | 523 | |
| 524 | 524 | READ_LINE_MEMBER( osc1000b_state::clear_r ) |
| 525 | 525 | { |
| 526 | | return BIT(input_port_read(m_machine, "RUN"), 0); |
| 526 | return BIT(input_port_read(machine(), "RUN"), 0); |
| 527 | 527 | } |
| 528 | 528 | |
| 529 | 529 | READ_LINE_MEMBER( osc1000b_state::ef2_r ) |
| r11240 | r11241 | |
| 534 | 534 | READ_LINE_MEMBER( osc1000b_state::ef3_r ) |
| 535 | 535 | { |
| 536 | 536 | static const char *const keynames[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7" }; |
| 537 | | UINT8 data = ~input_port_read(m_machine, keynames[m_keylatch / 8]); |
| 537 | UINT8 data = ~input_port_read(machine(), keynames[m_keylatch / 8]); |
| 538 | 538 | |
| 539 | 539 | return BIT(data, m_keylatch % 8); |
| 540 | 540 | } |
| r11240 | r11241 | |
| 564 | 564 | |
| 565 | 565 | READ_LINE_MEMBER( tmc2000_state::clear_r ) |
| 566 | 566 | { |
| 567 | | return BIT(input_port_read(m_machine, "RUN"), 0); |
| 567 | return BIT(input_port_read(machine(), "RUN"), 0); |
| 568 | 568 | } |
| 569 | 569 | |
| 570 | 570 | READ_LINE_MEMBER( tmc2000_state::ef2_r ) |
| r11240 | r11241 | |
| 575 | 575 | READ_LINE_MEMBER( tmc2000_state::ef3_r ) |
| 576 | 576 | { |
| 577 | 577 | static const char *const keynames[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7" }; |
| 578 | | UINT8 data = ~input_port_read(m_machine, keynames[m_keylatch / 8]); |
| 578 | UINT8 data = ~input_port_read(machine(), keynames[m_keylatch / 8]); |
| 579 | 579 | |
| 580 | 580 | return BIT(data, m_keylatch % 8); |
| 581 | 581 | } |
| r11240 | r11241 | |
| 586 | 586 | cdp1864_aoe_w(m_cti, state); |
| 587 | 587 | |
| 588 | 588 | /* set Q led status */ |
| 589 | | set_led_status(m_machine, 1, state); |
| 589 | set_led_status(machine(), 1, state); |
| 590 | 590 | |
| 591 | 591 | /* tape output */ |
| 592 | 592 | cassette_output(m_cassette, state ? 1.0 : -1.0); |
| r11240 | r11241 | |
| 625 | 625 | |
| 626 | 626 | READ_LINE_MEMBER( nano_state::clear_r ) |
| 627 | 627 | { |
| 628 | | int run = BIT(input_port_read(m_machine, "RUN"), 0); |
| 629 | | int monitor = BIT(input_port_read(m_machine, "MONITOR"), 0); |
| 628 | int run = BIT(input_port_read(machine(), "RUN"), 0); |
| 629 | int monitor = BIT(input_port_read(machine(), "MONITOR"), 0); |
| 630 | 630 | |
| 631 | 631 | return run & monitor; |
| 632 | 632 | } |
| r11240 | r11241 | |
| 639 | 639 | READ_LINE_MEMBER( nano_state::ef3_r ) |
| 640 | 640 | { |
| 641 | 641 | static const char *const keynames[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7" }; |
| 642 | | UINT8 data = ~input_port_read(m_machine, keynames[m_keylatch / 8]); |
| 642 | UINT8 data = ~input_port_read(machine(), keynames[m_keylatch / 8]); |
| 643 | 643 | |
| 644 | 644 | return BIT(data, m_keylatch % 8); |
| 645 | 645 | } |
| r11240 | r11241 | |
| 650 | 650 | cdp1864_aoe_w(m_cti, state); |
| 651 | 651 | |
| 652 | 652 | /* set Q led status */ |
| 653 | | set_led_status(m_machine, 1, state); |
| 653 | set_led_status(machine(), 1, state); |
| 654 | 654 | |
| 655 | 655 | /* tape output */ |
| 656 | 656 | cassette_output(m_cassette, state ? 1.0 : -1.0); |
| r11240 | r11241 | |
| 706 | 706 | { |
| 707 | 707 | UINT16 addr; |
| 708 | 708 | |
| 709 | | m_colorram = auto_alloc_array(m_machine, UINT8, TMC2000_COLORRAM_SIZE); |
| 709 | m_colorram = auto_alloc_array(machine(), UINT8, TMC2000_COLORRAM_SIZE); |
| 710 | 710 | |
| 711 | 711 | // randomize color RAM contents |
| 712 | 712 | for (addr = 0; addr < TMC2000_COLORRAM_SIZE; addr++) |
| 713 | 713 | { |
| 714 | | m_colorram[addr] = m_machine.rand() & 0xff; |
| 714 | m_colorram[addr] = machine().rand() & 0xff; |
| 715 | 715 | } |
| 716 | 716 | |
| 717 | 717 | // state saving |
| r11240 | r11241 | |
| 737 | 737 | void nano_state::machine_start() |
| 738 | 738 | { |
| 739 | 739 | /* allocate monitor timer */ |
| 740 | | m_ef4_timer = m_machine.scheduler().timer_alloc(FUNC(nano_ef4_tick)); |
| 740 | m_ef4_timer = machine().scheduler().timer_alloc(FUNC(nano_ef4_tick)); |
| 741 | 741 | |
| 742 | 742 | /* register for state saving */ |
| 743 | 743 | save_item(NAME(m_keylatch)); |
| r11240 | r11241 | |
| 753 | 753 | |
| 754 | 754 | /* enable ROM */ |
| 755 | 755 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| 756 | | UINT8 *rom = m_machine.region(CDP1802_TAG)->base(); |
| 756 | UINT8 *rom = machine().region(CDP1802_TAG)->base(); |
| 757 | 757 | program->install_rom(0x0000, 0x01ff, 0, 0x7e00, rom); |
| 758 | 758 | } |
| 759 | 759 | |
src/mess/drivers/newbrain.c
| r11240 | r11241 | |
| 86 | 86 | case 0: |
| 87 | 87 | /* ROM */ |
| 88 | 88 | memory_install_rom_helper(program, bank_name, bank_start, bank_end); |
| 89 | | memory_configure_bank(m_machine, bank_name, 0, 1, m_machine.region("eim")->base() + eim_bank_start, 0); |
| 89 | memory_configure_bank(machine(), bank_name, 0, 1, machine().region("eim")->base() + eim_bank_start, 0); |
| 90 | 90 | break; |
| 91 | 91 | |
| 92 | 92 | case 2: |
| 93 | 93 | /* RAM */ |
| 94 | 94 | memory_install_ram_helper(program, bank_name, bank_start, bank_end); |
| 95 | | memory_configure_bank(m_machine, bank_name, 0, 1, m_eim_ram + eim_bank_start, 0); |
| 95 | memory_configure_bank(machine(), bank_name, 0, 1, m_eim_ram + eim_bank_start, 0); |
| 96 | 96 | break; |
| 97 | 97 | |
| 98 | 98 | default: |
| r11240 | r11241 | |
| 118 | 118 | { |
| 119 | 119 | /* all banks point to ROM at 0xe000 */ |
| 120 | 120 | memory_install_rom_helper(program, bank_name, bank_start, bank_end); |
| 121 | | memory_configure_bank(m_machine, bank_name, 0, 1, m_machine.region(Z80_TAG)->base() + 0xe000, 0); |
| 121 | memory_configure_bank(machine(), bank_name, 0, 1, machine().region(Z80_TAG)->base() + 0xe000, 0); |
| 122 | 122 | } |
| 123 | 123 | else |
| 124 | 124 | { |
| 125 | | memory_configure_bank(m_machine, bank_name, 0, 1, m_machine.region(Z80_TAG)->base() + bank_start, 0); |
| 125 | memory_configure_bank(machine(), bank_name, 0, 1, machine().region(Z80_TAG)->base() + bank_start, 0); |
| 126 | 126 | |
| 127 | 127 | if (bank < 5) |
| 128 | 128 | { |
| r11240 | r11241 | |
| 132 | 132 | else if (bank == 5) |
| 133 | 133 | { |
| 134 | 134 | /* 0x8000-0x9fff */ |
| 135 | | if (m_machine.region("eim")->base()) |
| 135 | if (machine().region("eim")->base()) |
| 136 | 136 | { |
| 137 | 137 | /* expansion interface ROM */ |
| 138 | 138 | memory_install_rom_helper(program, bank_name, bank_start, bank_end); |
| 139 | | memory_configure_bank(m_machine, bank_name, 0, 1, m_machine.region("eim")->base() + 0x4000, 0); |
| 139 | memory_configure_bank(machine(), bank_name, 0, 1, machine().region("eim")->base() + 0x4000, 0); |
| 140 | 140 | } |
| 141 | 141 | else |
| 142 | 142 | { |
| 143 | 143 | /* mirror of 0xa000-0xbfff */ |
| 144 | | if (m_machine.region(Z80_TAG)->base()[0xa001] == 0) |
| 144 | if (machine().region(Z80_TAG)->base()[0xa001] == 0) |
| 145 | 145 | { |
| 146 | 146 | /* unmapped on the M model */ |
| 147 | 147 | memory_install_unmapped(program, bank_name, bank_start, bank_end); |
| r11240 | r11241 | |
| 152 | 152 | memory_install_rom_helper(program, bank_name, bank_start, bank_end); |
| 153 | 153 | } |
| 154 | 154 | |
| 155 | | memory_configure_bank(m_machine, bank_name, 0, 1, m_machine.region(Z80_TAG)->base() + 0xa000, 0); |
| 155 | memory_configure_bank(machine(), bank_name, 0, 1, machine().region(Z80_TAG)->base() + 0xa000, 0); |
| 156 | 156 | } |
| 157 | 157 | } |
| 158 | 158 | else if (bank == 6) |
| 159 | 159 | { |
| 160 | 160 | /* 0xa000-0xbfff */ |
| 161 | | if (m_machine.region(Z80_TAG)->base()[0xa001] == 0) |
| 161 | if (machine().region(Z80_TAG)->base()[0xa001] == 0) |
| 162 | 162 | { |
| 163 | 163 | /* unmapped on the M model */ |
| 164 | 164 | memory_install_unmapped(program, bank_name, bank_start, bank_end); |
| r11240 | r11241 | |
| 176 | 176 | } |
| 177 | 177 | } |
| 178 | 178 | |
| 179 | | memory_set_bank(m_machine, bank_name, 0); |
| 179 | memory_set_bank(machine(), bank_name, 0); |
| 180 | 180 | } |
| 181 | 181 | } |
| 182 | 182 | |
| r11240 | r11241 | |
| 472 | 472 | m_keylatch = 0; |
| 473 | 473 | } |
| 474 | 474 | |
| 475 | | m_keydata = input_port_read(m_machine, keynames[m_keylatch]); |
| 475 | m_keydata = input_port_read(machine(), keynames[m_keylatch]); |
| 476 | 476 | |
| 477 | 477 | output_set_digit_value(m_keylatch, m_segment_data[m_keylatch]); |
| 478 | 478 | } |
| r11240 | r11241 | |
| 1266 | 1266 | m_copregint = 1; |
| 1267 | 1267 | |
| 1268 | 1268 | /* allocate reset timer */ |
| 1269 | | m_reset_timer = m_machine.scheduler().timer_alloc(FUNC(reset_tick)); |
| 1269 | m_reset_timer = machine().scheduler().timer_alloc(FUNC(reset_tick)); |
| 1270 | 1270 | m_reset_timer->adjust(attotime::from_usec(get_reset_t())); |
| 1271 | 1271 | |
| 1272 | 1272 | /* allocate power up timer */ |
| 1273 | | m_pwrup_timer = m_machine.scheduler().timer_alloc(FUNC(pwrup_tick)); |
| 1273 | m_pwrup_timer = machine().scheduler().timer_alloc(FUNC(pwrup_tick)); |
| 1274 | 1274 | m_pwrup_timer->adjust(attotime::from_usec(get_pwrup_t())); |
| 1275 | 1275 | |
| 1276 | 1276 | /* initialize variables */ |
| r11240 | r11241 | |
| 1314 | 1314 | newbrain_state::machine_start(); |
| 1315 | 1315 | |
| 1316 | 1316 | /* allocate expansion RAM */ |
| 1317 | | m_eim_ram = auto_alloc_array(m_machine, UINT8, NEWBRAIN_EIM_RAM_SIZE); |
| 1317 | m_eim_ram = auto_alloc_array(machine(), UINT8, NEWBRAIN_EIM_RAM_SIZE); |
| 1318 | 1318 | |
| 1319 | 1319 | /* register for state saving */ |
| 1320 | 1320 | save_pointer(NAME(m_eim_ram), NEWBRAIN_EIM_RAM_SIZE); |
src/mess/drivers/kyocera.c
| r11240 | r11241 | |
| 123 | 123 | program->unmap_write(0x0000, 0x7fff); |
| 124 | 124 | } |
| 125 | 125 | |
| 126 | | memory_set_bank(m_machine, "bank1", rom_bank); |
| 126 | memory_set_bank(machine(), "bank1", rom_bank); |
| 127 | 127 | |
| 128 | 128 | switch (ram_bank) |
| 129 | 129 | { |
| r11240 | r11241 | |
| 158 | 158 | break; |
| 159 | 159 | } |
| 160 | 160 | |
| 161 | | memory_set_bank(m_machine, "bank2", ram_bank); |
| 161 | memory_set_bank(machine(), "bank2", ram_bank); |
| 162 | 162 | } |
| 163 | 163 | |
| 164 | 164 | WRITE8_MEMBER( pc8201_state::bank_w ) |
| r11240 | r11241 | |
| 274 | 274 | data |= 0x20; |
| 275 | 275 | |
| 276 | 276 | // low power sensor |
| 277 | | data |= BIT(input_port_read(m_machine, "BATTERY"), 0) << 7; |
| 277 | data |= BIT(input_port_read(machine(), "BATTERY"), 0) << 7; |
| 278 | 278 | |
| 279 | 279 | return data; |
| 280 | 280 | } |
| r11240 | r11241 | |
| 317 | 317 | data |= 0x20; |
| 318 | 318 | |
| 319 | 319 | // low power sensor |
| 320 | | data |= BIT(input_port_read(m_machine, "BATTERY"), 0) << 7; |
| 320 | data |= BIT(input_port_read(machine(), "BATTERY"), 0) << 7; |
| 321 | 321 | |
| 322 | 322 | return data; |
| 323 | 323 | } |
| r11240 | r11241 | |
| 392 | 392 | |
| 393 | 393 | if (m_rom_sel) |
| 394 | 394 | { |
| 395 | | data = m_machine.region("option")->base()[m_rom_addr & 0x1ffff]; |
| 395 | data = machine().region("option")->base()[m_rom_addr & 0x1ffff]; |
| 396 | 396 | } |
| 397 | 397 | |
| 398 | 398 | return data; |
| r11240 | r11241 | |
| 436 | 436 | */ |
| 437 | 437 | |
| 438 | 438 | /* ROM bank selection */ |
| 439 | | memory_set_bank(m_machine, "bank1", BIT(data, 0)); |
| 439 | memory_set_bank(machine(), "bank1", BIT(data, 0)); |
| 440 | 440 | |
| 441 | 441 | /* printer strobe */ |
| 442 | 442 | centronics_strobe_w(m_centronics, BIT(data, 1)); |
| r11240 | r11241 | |
| 450 | 450 | |
| 451 | 451 | READ8_MEMBER( kc85_state::keyboard_r ) |
| 452 | 452 | { |
| 453 | | return read_keyboard(m_machine, m_keylatch); |
| 453 | return read_keyboard(machine(), m_keylatch); |
| 454 | 454 | } |
| 455 | 455 | |
| 456 | 456 | void tandy200_state::bankswitch(UINT8 data) |
| r11240 | r11241 | |
| 471 | 471 | { |
| 472 | 472 | program->install_read_bank(0x0000, 0x7fff, "bank1"); |
| 473 | 473 | program->unmap_write(0x0000, 0x7fff); |
| 474 | | memory_set_bank(m_machine, "bank1", rom_bank); |
| 474 | memory_set_bank(machine(), "bank1", rom_bank); |
| 475 | 475 | } |
| 476 | 476 | |
| 477 | 477 | if (ram_get_size(m_ram) < ((ram_bank + 1) * 24 * 1024)) |
| r11240 | r11241 | |
| 482 | 482 | else |
| 483 | 483 | { |
| 484 | 484 | program->install_readwrite_bank(0xa000, 0xffff, "bank2"); |
| 485 | | memory_set_bank(m_machine, "bank2", ram_bank); |
| 485 | memory_set_bank(machine(), "bank2", ram_bank); |
| 486 | 486 | } |
| 487 | 487 | } |
| 488 | 488 | |
| r11240 | r11241 | |
| 498 | 498 | |
| 499 | 499 | READ8_MEMBER( tandy200_state::stbk_r ) |
| 500 | 500 | { |
| 501 | | return read_keyboard(m_machine, m_keylatch); |
| 501 | return read_keyboard(machine(), m_keylatch); |
| 502 | 502 | } |
| 503 | 503 | |
| 504 | 504 | WRITE8_MEMBER( tandy200_state::stbk_w ) |
| r11240 | r11241 | |
| 1121 | 1121 | /* configure ROM banking */ |
| 1122 | 1122 | program->install_read_bank(0x0000, 0x7fff, "bank1"); |
| 1123 | 1123 | program->unmap_write(0x0000, 0x7fff); |
| 1124 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(I8085_TAG)->base(), 0); |
| 1125 | | memory_configure_bank(m_machine, "bank1", 1, 1, m_machine.region("option")->base(), 0); |
| 1126 | | memory_set_bank(m_machine, "bank1", 0); |
| 1124 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(I8085_TAG)->base(), 0); |
| 1125 | memory_configure_bank(machine(), "bank1", 1, 1, machine().region("option")->base(), 0); |
| 1126 | memory_set_bank(machine(), "bank1", 0); |
| 1127 | 1127 | |
| 1128 | 1128 | /* configure RAM banking */ |
| 1129 | 1129 | switch (ram_get_size(m_ram)) |
| r11240 | r11241 | |
| 1138 | 1138 | break; |
| 1139 | 1139 | } |
| 1140 | 1140 | |
| 1141 | | memory_configure_bank(m_machine, "bank2", 0, 1, ram_get_ptr(m_ram), 0); |
| 1142 | | memory_set_bank(m_machine, "bank2", 0); |
| 1141 | memory_configure_bank(machine(), "bank2", 0, 1, ram_get_ptr(m_ram), 0); |
| 1142 | memory_set_bank(machine(), "bank2", 0); |
| 1143 | 1143 | |
| 1144 | 1144 | /* register for state saving */ |
| 1145 | | state_save_register_global(m_machine, m_bank); |
| 1146 | | state_save_register_global(m_machine, m_keylatch); |
| 1147 | | state_save_register_global(m_machine, m_buzzer); |
| 1148 | | state_save_register_global(m_machine, m_bell); |
| 1145 | state_save_register_global(machine(), m_bank); |
| 1146 | state_save_register_global(machine(), m_keylatch); |
| 1147 | state_save_register_global(machine(), m_buzzer); |
| 1148 | state_save_register_global(machine(), m_bell); |
| 1149 | 1149 | } |
| 1150 | 1150 | |
| 1151 | 1151 | void pc8201_state::machine_start() |
| r11240 | r11241 | |
| 1157 | 1157 | m_rtc->oe_w(1); |
| 1158 | 1158 | |
| 1159 | 1159 | /* configure ROM banking */ |
| 1160 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(I8085_TAG)->base(), 0); |
| 1161 | | memory_configure_bank(m_machine, "bank1", 1, 1, m_machine.region("option")->base(), 0); |
| 1162 | | memory_configure_bank(m_machine, "bank1", 2, 2, ram + 0x8000, 0x8000); |
| 1163 | | memory_set_bank(m_machine, "bank1", 0); |
| 1160 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(I8085_TAG)->base(), 0); |
| 1161 | memory_configure_bank(machine(), "bank1", 1, 1, machine().region("option")->base(), 0); |
| 1162 | memory_configure_bank(machine(), "bank1", 2, 2, ram + 0x8000, 0x8000); |
| 1163 | memory_set_bank(machine(), "bank1", 0); |
| 1164 | 1164 | |
| 1165 | 1165 | /* configure RAM banking */ |
| 1166 | | memory_configure_bank(m_machine, "bank2", 0, 1, ram, 0); |
| 1167 | | memory_configure_bank(m_machine, "bank2", 2, 2, ram + 0x8000, 0x8000); |
| 1168 | | memory_set_bank(m_machine, "bank2", 0); |
| 1166 | memory_configure_bank(machine(), "bank2", 0, 1, ram, 0); |
| 1167 | memory_configure_bank(machine(), "bank2", 2, 2, ram + 0x8000, 0x8000); |
| 1168 | memory_set_bank(machine(), "bank2", 0); |
| 1169 | 1169 | |
| 1170 | 1170 | bankswitch(0); |
| 1171 | 1171 | |
| 1172 | 1172 | /* register for state saving */ |
| 1173 | | state_save_register_global(m_machine, m_bank); |
| 1174 | | state_save_register_global(m_machine, m_keylatch); |
| 1175 | | state_save_register_global(m_machine, m_buzzer); |
| 1176 | | state_save_register_global(m_machine, m_bell); |
| 1177 | | state_save_register_global(m_machine, m_iosel); |
| 1173 | state_save_register_global(machine(), m_bank); |
| 1174 | state_save_register_global(machine(), m_keylatch); |
| 1175 | state_save_register_global(machine(), m_buzzer); |
| 1176 | state_save_register_global(machine(), m_bell); |
| 1177 | state_save_register_global(machine(), m_iosel); |
| 1178 | 1178 | } |
| 1179 | 1179 | |
| 1180 | 1180 | void trsm100_state::machine_start() |
| r11240 | r11241 | |
| 1188 | 1188 | /* configure ROM banking */ |
| 1189 | 1189 | program->install_read_bank(0x0000, 0x7fff, "bank1"); |
| 1190 | 1190 | program->unmap_write(0x0000, 0x7fff); |
| 1191 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(I8085_TAG)->base(), 0); |
| 1192 | | memory_configure_bank(m_machine, "bank1", 1, 1, m_machine.region("option")->base(), 0); |
| 1193 | | memory_set_bank(m_machine, "bank1", 0); |
| 1191 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(I8085_TAG)->base(), 0); |
| 1192 | memory_configure_bank(machine(), "bank1", 1, 1, machine().region("option")->base(), 0); |
| 1193 | memory_set_bank(machine(), "bank1", 0); |
| 1194 | 1194 | |
| 1195 | 1195 | /* configure RAM banking */ |
| 1196 | 1196 | switch (ram_get_size(m_ram)) |
| r11240 | r11241 | |
| 1215 | 1215 | break; |
| 1216 | 1216 | } |
| 1217 | 1217 | |
| 1218 | | memory_configure_bank(m_machine, "bank2", 0, 1, ram_get_ptr(m_ram), 0); |
| 1219 | | memory_set_bank(m_machine, "bank2", 0); |
| 1218 | memory_configure_bank(machine(), "bank2", 0, 1, ram_get_ptr(m_ram), 0); |
| 1219 | memory_set_bank(machine(), "bank2", 0); |
| 1220 | 1220 | |
| 1221 | 1221 | /* register for state saving */ |
| 1222 | | state_save_register_global(m_machine, m_bank); |
| 1223 | | state_save_register_global(m_machine, m_keylatch); |
| 1224 | | state_save_register_global(m_machine, m_buzzer); |
| 1225 | | state_save_register_global(m_machine, m_bell); |
| 1222 | state_save_register_global(machine(), m_bank); |
| 1223 | state_save_register_global(machine(), m_keylatch); |
| 1224 | state_save_register_global(machine(), m_buzzer); |
| 1225 | state_save_register_global(machine(), m_bell); |
| 1226 | 1226 | } |
| 1227 | 1227 | |
| 1228 | 1228 | void tandy200_state::machine_start() |
| 1229 | 1229 | { |
| 1230 | 1230 | /* configure ROM banking */ |
| 1231 | | memory_configure_bank(m_machine, "bank1", 0, 1, m_machine.region(I8085_TAG)->base(), 0); |
| 1232 | | memory_configure_bank(m_machine, "bank1", 1, 1, m_machine.region(I8085_TAG)->base() + 0x10000, 0); |
| 1233 | | memory_configure_bank(m_machine, "bank1", 2, 1, m_machine.region("option")->base(), 0); |
| 1234 | | memory_set_bank(m_machine, "bank1", 0); |
| 1231 | memory_configure_bank(machine(), "bank1", 0, 1, machine().region(I8085_TAG)->base(), 0); |
| 1232 | memory_configure_bank(machine(), "bank1", 1, 1, machine().region(I8085_TAG)->base() + 0x10000, 0); |
| 1233 | memory_configure_bank(machine(), "bank1", 2, 1, machine().region("option")->base(), 0); |
| 1234 | memory_set_bank(machine(), "bank1", 0); |
| 1235 | 1235 | |
| 1236 | 1236 | /* configure RAM banking */ |
| 1237 | | memory_configure_bank(m_machine, "bank2", 0, 3, ram_get_ptr(m_ram), 0x6000); |
| 1238 | | memory_set_bank(m_machine, "bank2", 0); |
| 1237 | memory_configure_bank(machine(), "bank2", 0, 3, ram_get_ptr(m_ram), 0x6000); |
| 1238 | memory_set_bank(machine(), "bank2", 0); |
| 1239 | 1239 | |
| 1240 | 1240 | /* register for state saving */ |
| 1241 | | state_save_register_global(m_machine, m_bank); |
| 1242 | | state_save_register_global(m_machine, m_tp); |
| 1243 | | state_save_register_global(m_machine, m_keylatch); |
| 1244 | | state_save_register_global(m_machine, m_buzzer); |
| 1245 | | state_save_register_global(m_machine, m_bell); |
| 1241 | state_save_register_global(machine(), m_bank); |
| 1242 | state_save_register_global(machine(), m_tp); |
| 1243 | state_save_register_global(machine(), m_keylatch); |
| 1244 | state_save_register_global(machine(), m_buzzer); |
| 1245 | state_save_register_global(machine(), m_bell); |
| 1246 | 1246 | } |
| 1247 | 1247 | |
| 1248 | 1248 | static const cassette_config kc85_cassette_config = |
src/mess/drivers/tiki100.c
| r11240 | r11241 | |
| 58 | 58 | program->install_readwrite_handler(0x0000, 0x7fff, read8_delegate(FUNC(tiki100_state::gfxram_r), this), write8_delegate(FUNC(tiki100_state::gfxram_w), this)); |
| 59 | 59 | program->install_readwrite_bank(0x8000, 0xffff, "bank3"); |
| 60 | 60 | |
| 61 | | memory_set_bank(m_machine, "bank1", BANK_VIDEO_RAM); |
| 62 | | memory_set_bank(m_machine, "bank2", BANK_VIDEO_RAM); |
| 63 | | memory_set_bank(m_machine, "bank3", BANK_RAM); |
| 61 | memory_set_bank(machine(), "bank1", BANK_VIDEO_RAM); |
| 62 | memory_set_bank(machine(), "bank2", BANK_VIDEO_RAM); |
| 63 | memory_set_bank(machine(), "bank3", BANK_RAM); |
| 64 | 64 | } |
| 65 | 65 | } |
| 66 | 66 | else |
| r11240 | r11241 | |
| 73 | 73 | program->install_readwrite_bank(0x4000, 0x7fff, "bank2"); |
| 74 | 74 | program->install_readwrite_bank(0x8000, 0xffff, "bank3"); |
| 75 | 75 | |
| 76 | | memory_set_bank(m_machine, "bank1", BANK_ROM); |
| 77 | | memory_set_bank(m_machine, "bank2", BANK_RAM); |
| 78 | | memory_set_bank(m_machine, "bank3", BANK_RAM); |
| 76 | memory_set_bank(machine(), "bank1", BANK_ROM); |
| 77 | memory_set_bank(machine(), "bank2", BANK_RAM); |
| 78 | memory_set_bank(machine(), "bank3", BANK_RAM); |
| 79 | 79 | } |
| 80 | 80 | else |
| 81 | 81 | { |
| r11240 | r11241 | |
| 84 | 84 | program->install_readwrite_bank(0x4000, 0x7fff, "bank2"); |
| 85 | 85 | program->install_readwrite_bank(0x8000, 0xffff, "bank3"); |
| 86 | 86 | |
| 87 | | memory_set_bank(m_machine, "bank1", BANK_RAM); |
| 88 | | memory_set_bank(m_machine, "bank2", BANK_RAM); |
| 89 | | memory_set_bank(m_machine, "bank3", BANK_RAM); |
| 87 | memory_set_bank(machine(), "bank1", BANK_RAM); |
| 88 | memory_set_bank(machine(), "bank2", BANK_RAM); |
| 89 | memory_set_bank(machine(), "bank3", BANK_RAM); |
| 90 | 90 | } |
| 91 | 91 | } |
| 92 | 92 | } |
| r11240 | r11241 | |
| 96 | 96 | READ8_MEMBER( tiki100_state::keyboard_r ) |
| 97 | 97 | { |
| 98 | 98 | static const char *const keynames[] = { "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7", "ROW8", "ROW9", "ROW10", "ROW11", "ROW12" }; |
| 99 | | UINT8 data = input_port_read(m_machine, keynames[m_keylatch]); |
| 99 | UINT8 data = input_port_read(machine(), keynames[m_keylatch]); |
| 100 | 100 | |
| 101 | 101 | m_keylatch++; |
| 102 | 102 | |
| r11240 | r11241 | |
| 134 | 134 | int color = data & 0x0f; |
| 135 | 135 | UINT8 colordata = ~m_palette; |
| 136 | 136 | |
| 137 | | palette_set_color_rgb(m_machine, color, pal3bit(colordata >> 5), pal3bit(colordata >> 2), pal2bit(colordata >> 0)); |
| 137 | palette_set_color_rgb(machine(), color, pal3bit(colordata >> 5), pal3bit(colordata >> 2), pal2bit(colordata >> 0)); |
| 138 | 138 | } |
| 139 | 139 | } |
| 140 | 140 | |
| r11240 | r11241 | |
| 189 | 189 | floppy_drive_set_ready_state(m_floppy1, BIT(data, 6), 1); |
| 190 | 190 | |
| 191 | 191 | /* GRAFIKK key led */ |
| 192 | | set_led_status(m_machine, 1, BIT(data, 5)); |
| 192 | set_led_status(machine(), 1, BIT(data, 5)); |
| 193 | 193 | |
| 194 | 194 | /* LOCK key led */ |
| 195 | | set_led_status(m_machine, 2, BIT(data, 7)); |
| 195 | set_led_status(machine(), 2, BIT(data, 7)); |
| 196 | 196 | |
| 197 | 197 | /* bankswitch */ |
| 198 | 198 | m_rome = BIT(data, 2); |
| r11240 | r11241 | |
| 548 | 548 | void tiki100_state::machine_start() |
| 549 | 549 | { |
| 550 | 550 | /* allocate video RAM */ |
| 551 | | m_video_ram = auto_alloc_array(m_machine, UINT8, TIKI100_VIDEORAM_SIZE); |
| 551 | m_video_ram = auto_alloc_array(machine(), UINT8, TIKI100_VIDEORAM_SIZE); |
| 552 | 552 | |
| 553 | 553 | /* setup memory banking */ |
| 554 | 554 | UINT8 *ram = ram_get_ptr(m_ram); |
| 555 | 555 | |
| 556 | | memory_configure_bank(m_machine, "bank1", BANK_ROM, 1, m_machine.region(Z80_TAG)->base(), 0); |
| 557 | | memory_configure_bank(m_machine, "bank1", BANK_RAM, 1, ram, 0); |
| 558 | | memory_configure_bank(m_machine, "bank1", BANK_VIDEO_RAM, 1, m_video_ram, 0); |
| 556 | memory_configure_bank(machine(), "bank1", BANK_ROM, 1, machine().region(Z80_TAG)->base(), 0); |
| 557 | memory_configure_bank(machine(), "bank1", BANK_RAM, 1, ram, 0); |
| 558 | memory_configure_bank(machine(), "bank1", BANK_VIDEO_RAM, 1, m_video_ram, 0); |
| 559 | 559 | |
| 560 | | memory_configure_bank(m_machine, "bank2", BANK_RAM, 1, ram + 0x4000, 0); |
| 561 | | memory_configure_bank(m_machine, "bank2", BANK_VIDEO_RAM, 1, m_video_ram + 0x4000, 0); |
| 560 | memory_configure_bank(machine(), "bank2", BANK_RAM, 1, ram + 0x4000, 0); |
| 561 | memory_configure_bank(machine(), "bank2", BANK_VIDEO_RAM, 1, m_video_ram + 0x4000, 0); |
| 562 | 562 | |
| 563 | | memory_configure_bank(m_machine, "bank3", BANK_RAM, 1, ram + 0x8000, 0); |
| 563 | memory_configure_bank(machine(), "bank3", BANK_RAM, 1, ram + 0x8000, 0); |
| 564 | 564 | |
| 565 | 565 | bankswitch(); |
| 566 | 566 | |
src/mess/drivers/x07.c
| r11240 | r11241 | |
| 772 | 772 | } |
| 773 | 773 | else //charset |
| 774 | 774 | { |
| 775 | | return m_machine.region("gfx1")->base()[pos]; |
| 775 | return machine().region("gfx1")->base()[pos]; |
| 776 | 776 | } |
| 777 | 777 | } |
| 778 | 778 | |
| r11240 | r11241 | |
| 782 | 782 | |
| 783 | 783 | if (m_kb_on) |
| 784 | 784 | { |
| 785 | | UINT8 shift = (input_port_read(m_machine, "A1") & 0x01); |
| 785 | UINT8 shift = (input_port_read(machine, "A1") & 0x01); |
| 786 | 786 | UINT16 udk_s = udk_offset[(shift*6) + idx - 1]; |
| 787 | 787 | |
| 788 | 788 | /* First 3 chars are used for description */ |
| r11240 | r11241 | |
| 803 | 803 | void x07_state::kb_scan_keys(running_machine &machine, UINT8 keycode) |
| 804 | 804 | { |
| 805 | 805 | UINT8 modifier; |
| 806 | | UINT8 a1 = input_port_read(m_machine, "A1"); |
| 807 | | UINT8 bz = input_port_read(m_machine, "BZ"); |
| 806 | UINT8 a1 = input_port_read(machine, "A1"); |
| 807 | UINT8 bz = input_port_read(machine, "BZ"); |
| 808 | 808 | |
| 809 | 809 | if (m_kb_on) |
| 810 | 810 | { |
| r11240 | r11241 | |
| 1339 | 1339 | |
| 1340 | 1340 | void x07_state::machine_start() |
| 1341 | 1341 | { |
| 1342 | | m_rsta_clear = m_machine.scheduler().timer_alloc(FUNC(rsta_clear)); |
| 1343 | | m_rstb_clear = m_machine.scheduler().timer_alloc(FUNC(rstb_clear)); |
| 1344 | | m_beep_stop = m_machine.scheduler().timer_alloc(FUNC(beep_stop)); |
| 1345 | | m_k7irq = m_machine.scheduler().timer_alloc(FUNC(k7_irq)); |
| 1342 | m_rsta_clear = machine().scheduler().timer_alloc(FUNC(rsta_clear)); |
| 1343 | m_rstb_clear = machine().scheduler().timer_alloc(FUNC(rstb_clear)); |
| 1344 | m_beep_stop = machine().scheduler().timer_alloc(FUNC(beep_stop)); |
| 1345 | m_k7irq = machine().scheduler().timer_alloc(FUNC(k7_irq)); |
| 1346 | 1346 | |
| 1347 | 1347 | /* Save State */ |
| 1348 | | state_save_register_global(m_machine, m_sleep); |
| 1349 | | state_save_register_global(m_machine, m_warm_start); |
| 1350 | | state_save_register_global(m_machine, m_udk_on); |
| 1351 | | state_save_register_global(m_machine, m_draw_udk); |
| 1352 | | state_save_register_global(m_machine, m_sp_on); |
| 1353 | | state_save_register_global(m_machine, m_font_code); |
| 1354 | | state_save_register_global(m_machine, m_lcd_on); |
| 1355 | | state_save_register_global(m_machine, m_scroll_min); |
| 1356 | | state_save_register_global(m_machine, m_scroll_max); |
| 1357 | | state_save_register_global(m_machine, m_blink); |
| 1358 | | state_save_register_global(m_machine, m_kb_on); |
| 1359 | | state_save_register_global(m_machine, m_repeat_key); |
| 1360 | | state_save_register_global(m_machine, m_kb_size); |
| 1361 | | state_save_register_global(m_machine, m_prn_sendbit); |
| 1362 | | state_save_register_global(m_machine, m_prn_char_code); |
| 1363 | | state_save_register_global(m_machine, m_prn_size); |
| 1364 | | state_save_register_global(m_machine, m_k7on); |
| 1365 | | state_save_register_global(m_machine, m_k7size); |
| 1366 | | state_save_register_global(m_machine, m_k7pos); |
| 1367 | | state_save_register_global_array(m_machine, m_t6834_ram); |
| 1368 | | state_save_register_global_array(m_machine, m_regs_r); |
| 1369 | | state_save_register_global_array(m_machine, m_regs_w); |
| 1370 | | state_save_register_global_array(m_machine, m_alarm); |
| 1371 | | state_save_register_global_2d_array(m_machine, m_lcd_map); |
| 1372 | | state_save_register_global_array(m_machine, m_prn_buffer); |
| 1373 | | state_save_register_global_pointer(m_machine, m_k7data, m_k7size); |
| 1374 | | state_save_register_global(m_machine, m_in.read); |
| 1375 | | state_save_register_global(m_machine, m_in.write); |
| 1376 | | state_save_register_global_array(m_machine, m_in.data); |
| 1377 | | state_save_register_global(m_machine, m_out.read); |
| 1378 | | state_save_register_global(m_machine, m_out.write); |
| 1379 | | state_save_register_global_array(m_machine, m_out.data); |
| 1380 | | state_save_register_global(m_machine, m_locate.x); |
| 1381 | | state_save_register_global(m_machine, m_locate.y); |
| 1382 | | state_save_register_global(m_machine, m_locate.on); |
| 1383 | | state_save_register_global(m_machine, m_cursor.x); |
| 1384 | | state_save_register_global(m_machine, m_cursor.y); |
| 1385 | | state_save_register_global(m_machine, m_cursor.on); |
| 1348 | state_save_register_global(machine(), m_sleep); |
| 1349 | state_save_register_global(machine(), m_warm_start); |
| 1350 | state_save_register_global(machine(), m_udk_on); |
| 1351 | state_save_register_global(machine(), m_draw_udk); |
| 1352 | state_save_register_global(machine(), m_sp_on); |
| 1353 | state_save_register_global(machine(), m_font_code); |
| 1354 | state_save_register_global(machine(), m_lcd_on); |
| 1355 | state_save_register_global(machine(), m_scroll_min); |
| 1356 | state_save_register_global(machine(), m_scroll_max); |
| 1357 | state_save_register_global(machine(), m_blink); |
| 1358 | state_save_register_global(machine(), m_kb_on); |
| 1359 | state_save_register_global(machine(), m_repeat_key); |
| 1360 | state_save_register_global(machine(), m_kb_size); |
| 1361 | state_save_register_global(machine(), m_prn_sendbit); |
| 1362 | state_save_register_global(machine(), m_prn_char_code); |
| 1363 | state_save_register_global(machine(), m_prn_size); |
| 1364 | state_save_register_global(machine(), m_k7on); |
| 1365 | state_save_register_global(machine(), m_k7size); |
| 1366 | state_save_register_global(machine(), m_k7pos); |
| 1367 | state_save_register_global_array(machine(), m_t6834_ram); |
| 1368 | state_save_register_global_array(machine(), m_regs_r); |
| 1369 | state_save_register_global_array(machine(), m_regs_w); |
| 1370 | state_save_register_global_array(machine(), m_alarm); |
| 1371 | state_save_register_global_2d_array(machine(), m_lcd_map); |
| 1372 | state_save_register_global_array(machine(), m_prn_buffer); |
| 1373 | state_save_register_global_pointer(machine(), m_k7data, m_k7size); |
| 1374 | state_save_register_global(machine(), m_in.read); |
| 1375 | state_save_register_global(machine(), m_in.write); |
| 1376 | state_save_register_global_array(machine(), m_in.data); |
| 1377 | state_save_register_global(machine(), m_out.read); |
| 1378 | state_save_register_global(machine(), m_out.write); |
| 1379 | state_save_register_global_array(machine(), m_out.data); |
| 1380 | state_save_register_global(machine(), m_locate.x); |
| 1381 | state_save_register_global(machine(), m_locate.y); |
| 1382 | state_save_register_global(machine(), m_locate.on); |
| 1383 | state_save_register_global(machine(), m_cursor.x); |
| 1384 | state_save_register_global(machine(), m_cursor.y); |
| 1385 | state_save_register_global(machine(), m_cursor.on); |
| 1386 | 1386 | |
| 1387 | 1387 | /* install RAM */ |
| 1388 | 1388 | address_space *program = m_maincpu->memory().space(AS_PROGRAM); |
| r11240 | r11241 | |
| 1418 | 1418 | m_prn_char_code = 0; |
| 1419 | 1419 | m_prn_size = 0; |
| 1420 | 1420 | |
| 1421 | | m_regs_r[2] = input_port_read(m_machine, "CARDBATTERY"); |
| 1421 | m_regs_r[2] = input_port_read(machine(), "CARDBATTERY"); |
| 1422 | 1422 | |
| 1423 | 1423 | cpu_set_reg(m_maincpu, Z80_PC, 0xc3c3); |
| 1424 | 1424 | } |
src/mess/drivers/prestige.c
| r11240 | r11241 | |
| 126 | 126 | switch (offset) |
| 127 | 127 | { |
| 128 | 128 | case 0: |
| 129 | | memory_set_bank(m_machine, "bank1", data & 0x3f); |
| 129 | memory_set_bank(machine(), "bank1", data & 0x3f); |
| 130 | 130 | break; |
| 131 | 131 | |
| 132 | 132 | case 1: |
| 133 | 133 | if (m_bank[5] & 0x08) |
| 134 | | memory_set_bank(m_machine, "bank2", 0x40 + (data & 1)); |
| 134 | memory_set_bank(machine(), "bank2", 0x40 + (data & 1)); |
| 135 | 135 | else |
| 136 | | memory_set_bank(m_machine, "bank2", data & 0x3f); |
| 136 | memory_set_bank(machine(), "bank2", data & 0x3f); |
| 137 | 137 | break; |
| 138 | 138 | |
| 139 | 139 | case 2: |
| 140 | 140 | if (m_bank[5] & 0x04) |
| 141 | | memory_set_bank(m_machine, "bank3", 0x40 + (data & 1)); |
| 141 | memory_set_bank(machine(), "bank3", 0x40 + (data & 1)); |
| 142 | 142 | else |
| 143 | | memory_set_bank(m_machine, "bank3", data & 0x3f); |
| 143 | memory_set_bank(machine(), "bank3", data & 0x3f); |
| 144 | 144 | break; |
| 145 | 145 | |
| 146 | 146 | case 3: |
| 147 | 147 | if (m_bank[5] & 0x02) |
| 148 | | memory_set_bank(m_machine, "bank4", 0x04 + (data & 0x03)); |
| 148 | memory_set_bank(machine(), "bank4", 0x04 + (data & 0x03)); |
| 149 | 149 | else |
| 150 | | memory_set_bank(m_machine, "bank4", data & 0x03); |
| 150 | memory_set_bank(machine(), "bank4", data & 0x03); |
| 151 | 151 | break; |
| 152 | 152 | |
| 153 | 153 | case 4: |
| 154 | | memory_set_bank(m_machine, "bank5", data & 0x03); |
| 154 | memory_set_bank(machine(), "bank5", data & 0x03); |
| 155 | 155 | break; |
| 156 | 156 | |
| 157 | 157 | case 5: |
| 158 | | if (input_port_read(m_machine, "CART_TYPE") == 0x01) |
| 158 | if (input_port_read(machine(), "CART_TYPE") == 0x01) |
| 159 | 159 | { |
| 160 | 160 | //cartridge memory is writable |
| 161 | 161 | if (data & 0x08) |
| r11240 | r11241 | |
| 200 | 200 | |
| 201 | 201 | for (int line=0; line<8; line++) |
| 202 | 202 | if (!(m_kb_matrix & (1<<line))) |
| 203 | | data &= input_port_read(m_machine, bitnames[offset][line]); |
| 203 | data &= input_port_read(machine(), bitnames[offset][line]); |
| 204 | 204 | |
| 205 | 205 | return data; |
| 206 | 206 | } |
| r11240 | r11241 | |
| 217 | 217 | switch( offset ) |
| 218 | 218 | { |
| 219 | 219 | case 0: //x-axis |
| 220 | | data = (input_port_read(m_machine, "MOUSEX") - m_mousex); |
| 220 | data = (input_port_read(machine(), "MOUSEX") - m_mousex); |
| 221 | 221 | break; |
| 222 | 222 | case 1: //y-axis |
| 223 | | data = (input_port_read(m_machine, "MOUSEY") - m_mousey); |
| 223 | data = (input_port_read(machine(), "MOUSEY") - m_mousey); |
| 224 | 224 | break; |
| 225 | 225 | } |
| 226 | 226 | |
| r11240 | r11241 | |
| 232 | 232 | switch( offset ) |
| 233 | 233 | { |
| 234 | 234 | case 0: //x-axis |
| 235 | | m_mousex = input_port_read(m_machine, "MOUSEX"); |
| 235 | m_mousex = input_port_read(machine(), "MOUSEX"); |
| 236 | 236 | break; |
| 237 | 237 | case 1: //y-axis |
| 238 | | m_mousey = input_port_read(m_machine, "MOUSEY"); |
| 238 | m_mousey = input_port_read(machine(), "MOUSEY"); |
| 239 | 239 | break; |
| 240 | 240 | } |
| 241 | 241 | } |
| r11240 | r11241 | |
| 420 | 420 | |
| 421 | 421 | device_set_irq_callback(m_maincpu, prestige_int_ack); |
| 422 | 422 | |
| 423 | | memory_configure_bank(m_machine, "bank1", 0, 64, m_machine.region("maincpu")->base(), 0x4000); |
| 424 | | memory_configure_bank(m_machine, "bank2", 0, 64, m_machine.region("maincpu")->base(), 0x4000); |
| 425 | | memory_configure_bank(m_machine, "bank2", 64, 2, m_machine.region("cart")->base(), 0x4000); |
| 426 | | memory_configure_bank(m_machine, "bank3", 0, 64, m_machine.region("maincpu")->base(), 0x4000); |
| 427 | | memory_configure_bank(m_machine, "bank3", 64, 2, m_machine.region("cart")->base(), 0x4000); |
| 428 | | memory_configure_bank(m_machine, "bank4", 0, 4, ram, 0x2000); |
| 429 | | memory_configure_bank(m_machine, "bank4", 4, 4, m_machine.region("cart")->base(), 0x2000); |
| 430 | | memory_configure_bank(m_machine, "bank5", 0, 4, ram, 0x2000); |
| 423 | memory_configure_bank(machine(), "bank1", 0, 64, machine().region("maincpu")->base(), 0x4000); |
| 424 | memory_configure_bank(machine(), "bank2", 0, 64, machine().region("maincpu")->base(), 0x4000); |
| 425 | memory_configure_bank(machine(), "bank2", 64, 2, machine().region("cart")->base(), 0x4000); |
| 426 | memory_configure_bank(machine(), "bank3", 0, 64, machine().region("maincpu")->base(), 0x4000); |
| 427 | memory_configure_bank(machine(), "bank3", 64, 2, machine().region("cart")->base(), 0x4000); |
| 428 | memory_configure_bank(machine(), "bank4", 0, 4, ram, 0x2000); |
| 429 | memory_configure_bank(machine(), "bank4", 4, 4, machine().region("cart")->base(), 0x2000); |
| 430 | memory_configure_bank(machine(), "bank5", 0, 4, ram, 0x2000); |
| 431 | 431 | |
| 432 | | memory_set_bank(m_machine, "bank1", 0); |
| 433 | | memory_set_bank(m_machine, "bank2", 0); |
| 434 | | memory_set_bank(m_machine, "bank3", 0); |
| 435 | | memory_set_bank(m_machine, "bank4", 0); |
| 436 | | memory_set_bank(m_machine, "bank5", 0); |
| 432 | memory_set_bank(machine(), "bank1", 0); |
| 433 | memory_set_bank(machine(), "bank2", 0); |
| 434 | memory_set_bank(machine(), "bank3", 0); |
| 435 | memory_set_bank(machine(), "bank4", 0); |
| 436 | memory_set_bank(machine(), "bank5", 0); |
| 437 | 437 | |
| 438 | 438 | //pointer to the videoram |
| 439 | 439 | m_vram = ram; |
src/mess/drivers/bw2.c
| r11240 | r11241 | |
| 31 | 31 | |
| 32 | 32 | int bw2_state::get_ramdisk_size() |
| 33 | 33 | { |
| 34 | | return input_port_read(m_machine, "RAMCARD") * 256; |
| 34 | return input_port_read(machine(), "RAMCARD") * 256; |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | /* Memory */ |
| r11240 | r11241 | |
| 115 | 115 | break; |
| 116 | 116 | } |
| 117 | 117 | |
| 118 | | memory_set_bank(m_machine, "bank1", m_bank); |
| 118 | memory_set_bank(machine(), "bank1", m_bank); |
| 119 | 119 | } |
| 120 | 120 | |
| 121 | 121 | void bw2_state::ramcard_bankswitch(UINT8 data) |
| r11240 | r11241 | |
| 195 | 195 | break; |
| 196 | 196 | } |
| 197 | 197 | |
| 198 | | memory_set_bank(m_machine, "bank1", m_bank); |
| 198 | memory_set_bank(machine(), "bank1", m_bank); |
| 199 | 199 | } |
| 200 | 200 | |
| 201 | 201 | WRITE8_MEMBER( bw2_state::ramcard_bank_w ) |
| r11240 | r11241 | |
| 214 | 214 | program->install_readwrite_bank(0x0000, 0x7fff, "bank1"); |
| 215 | 215 | } |
| 216 | 216 | |
| 217 | | memory_configure_bank(m_machine, "bank1", BANK_RAMCARD_RAM, 1, m_ramcard_ram + bank_offset, 0); |
| 218 | | memory_set_bank(m_machine, "bank1", m_bank); |
| 217 | memory_configure_bank(machine(), "bank1", BANK_RAMCARD_RAM, 1, m_ramcard_ram + bank_offset, 0); |
| 218 | memory_set_bank(machine(), "bank1", m_bank); |
| 219 | 219 | } |
| 220 | 220 | |
| 221 | 221 | /* Floppy */ |
| r11240 | r11241 | |
| 455 | 455 | |
| 456 | 456 | if (m_kb_row <= 9) |
| 457 | 457 | { |
| 458 | | data = input_port_read(m_machine, rownames[m_kb_row]); |
| 458 | data = input_port_read(machine(), rownames[m_kb_row]); |
| 459 | 459 | } |
| 460 | 460 | |
| 461 | 461 | return data; |
| r11240 | r11241 | |
| 624 | 624 | void bw2_state::machine_start() |
| 625 | 625 | { |
| 626 | 626 | /* allocate memory */ |
| 627 | | m_work_ram = auto_alloc_array(m_machine, UINT8, ram_get_size(m_ram)); |
| 628 | | m_video_ram = auto_alloc_array(m_machine, UINT8, BW2_VIDEORAM_SIZE); |
| 629 | | m_ramcard_ram = auto_alloc_array(m_machine, UINT8, BW2_RAMCARD_SIZE); |
| 627 | m_work_ram = auto_alloc_array(machine(), UINT8, ram_get_size(m_ram)); |
| 628 | m_video_ram = auto_alloc_array(machine(), UINT8, BW2_VIDEORAM_SIZE); |
| 629 | m_ramcard_ram = auto_alloc_array(machine(), UINT8, BW2_RAMCARD_SIZE); |
| 630 | 630 | |
| 631 | 631 | /* memory banking */ |
| 632 | | memory_configure_bank(m_machine, "bank1", BANK_RAM1, 1, m_work_ram, 0); |
| 633 | | memory_configure_bank(m_machine, "bank1", BANK_VRAM, 1, m_video_ram, 0); |
| 634 | | memory_configure_bank(m_machine, "bank1", BANK_ROM, 1, m_machine.region("ic1")->base(), 0); |
| 632 | memory_configure_bank(machine(), "bank1", BANK_RAM1, 1, m_work_ram, 0); |
| 633 | memory_configure_bank(machine(), "bank1", BANK_VRAM, 1, m_video_ram, 0); |
| 634 | memory_configure_bank(machine(), "bank1", BANK_ROM, 1, machine().region("ic1")->base(), 0); |
| 635 | 635 | |
| 636 | 636 | /* register for state saving */ |
| 637 | | state_save_register_global(m_machine, m_kb_row); |
| 638 | | state_save_register_global_pointer(m_machine, m_work_ram, ram_get_size(m_ram)); |
| 639 | | state_save_register_global_pointer(m_machine, m_ramcard_ram, BW2_RAMCARD_SIZE); |
| 640 | | state_save_register_global(m_machine, m_bank); |
| 641 | | state_save_register_global(m_machine, m_drive); |
| 642 | | state_save_register_global(m_machine, m_mtron); |
| 643 | | state_save_register_global(m_machine, m_mfdbk); |
| 644 | | state_save_register_global_pointer(m_machine, m_video_ram, BW2_VIDEORAM_SIZE); |
| 637 | state_save_register_global(machine(), m_kb_row); |
| 638 | state_save_register_global_pointer(machine(), m_work_ram, ram_get_size(m_ram)); |
| 639 | state_save_register_global_pointer(machine(), m_ramcard_ram, BW2_RAMCARD_SIZE); |
| 640 | state_save_register_global(machine(), m_bank); |
| 641 | state_save_register_global(machine(), m_drive); |
| 642 | state_save_register_global(machine(), m_mtron); |
| 643 | state_save_register_global(machine(), m_mfdbk); |
| 644 | state_save_register_global_pointer(machine(), m_video_ram, BW2_VIDEORAM_SIZE); |
| 645 | 645 | } |
| 646 | 646 | |
| 647 | 647 | void bw2_state::machine_reset() |
| 648 | 648 | { |
| 649 | | address_space *io = m_machine.device(Z80_TAG)->memory().space(AS_IO); |
| 649 | address_space *io = machine().device(Z80_TAG)->memory().space(AS_IO); |
| 650 | 650 | |
| 651 | 651 | if (get_ramdisk_size() > 0) |
| 652 | 652 | { |
| 653 | 653 | // RAMCARD installed |
| 654 | 654 | |
| 655 | | memory_configure_bank(m_machine, "bank1", BANK_RAMCARD_ROM, 1, m_machine.region("ramcard")->base(), 0); |
| 656 | | memory_configure_bank(m_machine, "bank1", BANK_RAM3, 2, m_work_ram + 0x8000, 0x8000); |
| 657 | | memory_configure_bank(m_machine, "bank1", BANK_RAMCARD_RAM, 1, m_ramcard_ram, 0); |
| 658 | | memory_configure_bank(m_machine, "bank1", BANK_RAM6, 1, m_work_ram + 0x18000, 0); |
| 655 | memory_configure_bank(machine(), "bank1", BANK_RAMCARD_ROM, 1, machine().region("ramcard")->base(), 0); |
| 656 | memory_configure_bank(machine(), "bank1", BANK_RAM3, 2, m_work_ram + 0x8000, 0x8000); |
| 657 | memory_configure_bank(machine(), "bank1", BANK_RAMCARD_RAM, 1, m_ramcard_ram, 0); |
| 658 | memory_configure_bank(machine(), "bank1", BANK_RAM6, 1, m_work_ram + 0x18000, 0); |
| 659 | 659 | |
| 660 | 660 | io->install_write_handler(0x30, 0x30, 0, 0x0f, write8_delegate(FUNC(bw2_state::ramcard_bank_w), this), 0); |
| 661 | 661 | } |
| r11240 | r11241 | |
| 663 | 663 | { |
| 664 | 664 | // no RAMCARD |
| 665 | 665 | |
| 666 | | memory_configure_bank(m_machine, "bank1", BANK_RAM2, 5, m_work_ram + 0x8000, 0x8000); |
| 666 | memory_configure_bank(machine(), "bank1", BANK_RAM2, 5, m_work_ram + 0x8000, 0x8000); |
| 667 | 667 | |
| 668 | 668 | io->unmap_write(0x30, 0x30, 0, 0x0f); |
| 669 | 669 | } |
| 670 | 670 | |
| 671 | | memory_set_bank(m_machine, "bank1", BANK_ROM); |
| 671 | memory_set_bank(machine(), "bank1", BANK_ROM); |
| 672 | 672 | } |
| 673 | 673 | |
| 674 | 674 | static MACHINE_CONFIG_START( bw2, bw2_state ) |
src/mess/drivers/psion.c
| r11240 | r11241 | |
| 350 | 350 | ---- --x- pulse |
| 351 | 351 | ---- ---x battery status |
| 352 | 352 | */ |
| 353 | | return kb_read(m_machine) | input_port_read(m_machine, "BATTERY") | input_port_read(m_machine, "ON") | (m_kb_counter == 0x7ff)<<1 | m_pulse<<1; |
| 353 | return kb_read(machine()) | input_port_read(machine(), "BATTERY") | input_port_read(machine(), "ON") | (m_kb_counter == 0x7ff)<<1 | m_pulse<<1; |
| 354 | 354 | case 0x17: |
| 355 | 355 | /* datapack control lines */ |
| 356 | 356 | { |
| r11240 | r11241 | |
| 402 | 402 | { |
| 403 | 403 | m_ram_bank=0; |
| 404 | 404 | m_rom_bank=0; |
| 405 | | update_banks(m_machine); |
| 405 | update_banks(machine()); |
| 406 | 406 | } |
| 407 | 407 | else |
| 408 | 408 | m_kb_counter++; |
| r11240 | r11241 | |
| 411 | 411 | if (offset == 0x2a0 && m_ram_bank_count) |
| 412 | 412 | { |
| 413 | 413 | m_ram_bank++; |
| 414 | | update_banks(m_machine); |
| 414 | update_banks(machine()); |
| 415 | 415 | } |
| 416 | 416 | else |
| 417 | 417 | m_enable_nmi = 1; |
| r11240 | r11241 | |
| 420 | 420 | if (offset == 0x2e0 && m_rom_bank_count) |
| 421 | 421 | { |
| 422 | 422 | m_rom_bank++; |
| 423 | | update_banks(m_machine); |
| 423 | update_banks(machine()); |
| 424 | 424 | } |
| 425 | 425 | else |
| 426 | 426 | m_enable_nmi = 0; |
| r11240 | r11241 | |
| 636 | 636 | |
| 637 | 637 | void psion_state::machine_start() |
| 638 | 638 | { |
| 639 | | if (!strcmp(m_machine.system().name, "psionlam")) |
| 639 | if (!strcmp(machine().system().name, "psionlam")) |
| 640 | 640 | { |
| 641 | 641 | m_rom_bank_count = 3; |
| 642 | 642 | m_ram_bank_count = 0; |
| 643 | 643 | } |
| 644 | | else if (!strcmp(m_machine.system().name, "psionp350")) |
| 644 | else if (!strcmp(machine().system().name, "psionp350")) |
| 645 | 645 | { |
| 646 | 646 | m_rom_bank_count = 0; |
| 647 | 647 | m_ram_bank_count = 5; |
| 648 | 648 | } |
| 649 | | else if (!strncmp(m_machine.system().name, "psionlz", 7)) |
| 649 | else if (!strncmp(machine().system().name, "psionlz", 7)) |
| 650 | 650 | { |
| 651 | 651 | m_rom_bank_count = 3; |
| 652 | 652 | m_ram_bank_count = 3; |
| 653 | 653 | } |
| 654 | | else if (!strcmp(m_machine.system().name, "psionp464")) |
| 654 | else if (!strcmp(machine().system().name, "psionp464")) |
| 655 | 655 | { |
| 656 | 656 | m_rom_bank_count = 3; |
| 657 | 657 | m_ram_bank_count = 9; |
| r11240 | r11241 | |
| 664 | 664 | |
| 665 | 665 | if (m_rom_bank_count) |
| 666 | 666 | { |
| 667 | | UINT8* rom_base = (UINT8 *)m_machine.region("maincpu")->base(); |
| 667 | UINT8* rom_base = (UINT8 *)machine().region("maincpu")->base(); |
| 668 | 668 | |
| 669 | | memory_configure_bank(m_machine, "rombank", 0, 1, rom_base + 0x8000, 0x4000); |
| 670 | | memory_configure_bank(m_machine, "rombank", 1, m_rom_bank_count-1, rom_base + 0x10000, 0x4000); |
| 671 | | memory_set_bank(m_machine, "rombank", 0); |
| 669 | memory_configure_bank(machine(), "rombank", 0, 1, rom_base + 0x8000, 0x4000); |
| 670 | memory_configure_bank(machine(), "rombank", 1, m_rom_bank_count-1, rom_base + 0x10000, 0x4000); |
| 671 | memory_set_bank(machine(), "rombank", 0); |
| 672 | 672 | } |
| 673 | 673 | |
| 674 | 674 | if (m_ram_bank_count) |
| 675 | 675 | { |
| 676 | | m_paged_ram = auto_alloc_array(m_machine, UINT8, m_ram_bank_count * 0x4000); |
| 677 | | memory_configure_bank(m_machine, "rambank", 0, m_ram_bank_count, m_paged_ram, 0x4000); |
| 678 | | memory_set_bank(m_machine, "rambank", 0); |
| 676 | m_paged_ram = auto_alloc_array(machine(), UINT8, m_ram_bank_count * 0x4000); |
| 677 | memory_configure_bank(machine(), "rambank", 0, m_ram_bank_count, m_paged_ram, 0x4000); |
| 678 | memory_set_bank(machine(), "rambank", 0); |
| 679 | 679 | } |
| 680 | 680 | |
| 681 | | state_save_register_global(m_machine, m_kb_counter); |
| 682 | | state_save_register_global(m_machine, m_enable_nmi); |
| 683 | | state_save_register_global(m_machine, m_tcsr_value); |
| 684 | | state_save_register_global(m_machine, m_stby_pwr); |
| 685 | | state_save_register_global(m_machine, m_pulse); |
| 686 | | state_save_register_global(m_machine, m_rom_bank); |
| 687 | | state_save_register_global(m_machine, m_ram_bank); |
| 688 | | state_save_register_global(m_machine, m_port2_ddr); |
| 689 | | state_save_register_global(m_machine, m_port2); |
| 690 | | state_save_register_global(m_machine, m_port6_ddr); |
| 691 | | state_save_register_global(m_machine, m_port6); |
| 692 | | state_save_register_global_pointer(m_machine, m_paged_ram, m_ram_bank_count * 0x4000); |
| 681 | state_save_register_global(machine(), m_kb_counter); |
| 682 | state_save_register_global(machine(), m_enable_nmi); |
| 683 | state_save_register_global(machine(), m_tcsr_value); |
| 684 | state_save_register_global(machine(), m_stby_pwr); |
| 685 | state_save_register_global(machine(), m_pulse); |
| 686 | state_save_register_global(machine(), m_rom_bank); |
| 687 | state_save_register_global(machine(), m_ram_bank); |
| 688 | state_save_register_global(machine(), m_port2_ddr); |
| 689 | state_save_register_global(machine(), m_port2); |
| 690 | state_save_register_global(machine(), m_port6_ddr); |
| 691 | state_save_register_global(machine(), m_port6); |
| 692 | state_save_register_global_pointer(machine(), m_paged_ram, m_ram_bank_count * 0x4000); |
| 693 | 693 | } |
| 694 | 694 | |
| 695 | 695 | void psion_state::machine_reset() |
| r11240 | r11241 | |
| 701 | 701 | m_pulse=0; |
| 702 | 702 | |
| 703 | 703 | if (m_rom_bank_count || m_ram_bank_count) |
| 704 | | update_banks(m_machine); |
| 704 | update_banks(machine()); |
| 705 | 705 | } |
| 706 | 706 | |
| 707 | 707 | bool psion_state::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect) |
src/mess/drivers/vixen.c
| r11240 | r11241 | |
| 92 | 92 | { |
| 93 | 93 | logerror("CTL %u\n", data); |
| 94 | 94 | |
| 95 | | memory_set_bank(m_machine, "bank3", BIT(data, 0)); |
| 95 | memory_set_bank(machine(), "bank3", BIT(data, 0)); |
| 96 | 96 | } |
| 97 | 97 | |
| 98 | 98 | |
| r11240 | r11241 | |
| 372 | 372 | void vixen_state::video_start() |
| 373 | 373 | { |
| 374 | 374 | // find memory regions |
| 375 | | m_sync_rom = m_machine.region("video")->base(); |
| 376 | | m_char_rom = m_machine.region("chargen")->base(); |
| 375 | m_sync_rom = machine().region("video")->base(); |
| 376 | m_char_rom = machine().region("chargen")->base(); |
| 377 | 377 | |
| 378 | 378 | // register for state saving |
| 379 | | state_save_register_global(m_machine, m_alt); |
| 380 | | state_save_register_global(m_machine, m_256); |
| 381 | | state_save_register_global(m_machine, m_vsync); |
| 382 | | state_save_register_global_pointer(m_machine, m_video_ram, 0x1000); |
| 379 | state_save_register_global(machine(), m_alt); |
| 380 | state_save_register_global(machine(), m_256); |
| 381 | state_save_register_global(machine(), m_vsync); |
| 382 | state_save_register_global_pointer(machine(), m_video_ram, 0x1000); |
| 383 | 383 | } |
| 384 | 384 | |
| 385 | 385 | |
| r11240 | r11241 | |
| 471 | 471 | { |
| 472 | 472 | UINT8 data = 0xff; |
| 473 | 473 | |
| 474 | | if (!BIT(m_col, 0)) data &= input_port_read(m_machine, "ROW0"); |
| 475 | | if (!BIT(m_col, 1)) data &= input_port_read(m_machine, "ROW1"); |
| 476 | | if (!BIT(m_col, 2)) data &= input_port_read(m_machine, "ROW2"); |
| 477 | | if (!BIT(m_col, 3)) data &= input_port_read(m_machine, "ROW3"); |
| 478 | | if (!BIT(m_col, 4)) data &= input_port_read(m_machine, "ROW4"); |
| 479 | | if (!BIT(m_col, 5)) data &= input_port_read(m_machine, "ROW5"); |
| 480 | | if (!BIT(m_col, 6)) data &= input_port_read(m_machine, "ROW6"); |
| 481 | | if (!BIT(m_col, 7)) data &= input_port_read(m_machine, "ROW7"); |
| 474 | if (!BIT(m_col, 0)) data &= input_port_read(machine(), "ROW0"); |
| 475 | if (!BIT(m_col, 1)) data &= input_port_read(machine(), "ROW1"); |
| 476 | if (!BIT(m_col, 2)) data &= input_port_read(machine(), "ROW2"); |
| 477 | if (!BIT(m_col, 3)) data &= input_port_read(machine(), "ROW3"); |
| 478 | if (!BIT(m_col, 4)) data &= input_port_read(machine(), "ROW4"); |
| 479 | if (!BIT(m_col, 5)) data &= input_port_read(machine(), "ROW5"); |
| 480 | if (!BIT(m_col, 6)) data &= input_port_read(machine(), "ROW6"); |
| 481 | if (!BIT(m_col, 7)) data &= input_port_read(machine(), "ROW7"); |
| 482 | 482 | |
| 483 | 483 | return data; |
| 484 | 484 | } |
| r11240 | r11241 | |
| 741 | 741 | // configure memory banking |
| 742 | 742 | UINT8 *ram = ram_get_ptr(m_ram); |
| 743 | 743 | |
| 744 | | memory_configure_bank(m_machine, "bank1", 0, 1, ram, 0); |
| 745 | | memory_configure_bank(m_machine, "bank1", 1, 1, m_machine.region(Z8400A_TAG)->base(), 0); |
| 744 | memory_configure_bank(machine(), "bank1", 0, 1, ram, 0); |
| 745 | memory_configure_bank(machine(), "bank1", 1, 1, machine().region(Z8400A_TAG)->base(), 0); |
| 746 | 746 | |
| 747 | | memory_configure_bank(m_machine, "bank2", 0, 1, ram, 0); |
| 748 | | memory_configure_bank(m_machine, "bank2", 1, 1, m_video_ram, 0); |
| 747 | memory_configure_bank(machine(), "bank2", 0, 1, ram, 0); |
| 748 | memory_configure_bank(machine(), "bank2", 1, 1, m_video_ram, 0); |
| 749 | 749 | |
| 750 | | memory_configure_bank(m_machine, "bank3", 0, 1, m_video_ram, 0); |
| 751 | | memory_configure_bank(m_machine, "bank3", 1, 1, m_machine.region(Z8400A_TAG)->base(), 0); |
| 750 | memory_configure_bank(machine(), "bank3", 0, 1, m_video_ram, 0); |
| 751 | memory_configure_bank(machine(), "bank3", 1, 1, machine().region(Z8400A_TAG)->base(), 0); |
| 752 | 752 | |
| 753 | | memory_configure_bank(m_machine, "bank4", 0, 1, m_video_ram, 0); |
| 753 | memory_configure_bank(machine(), "bank4", 0, 1, m_video_ram, 0); |
| 754 | 754 | |
| 755 | 755 | // register for state saving |
| 756 | | state_save_register_global(m_machine, m_reset); |
| 757 | | state_save_register_global(m_machine, m_col); |
| 758 | | state_save_register_global(m_machine, m_cmd_d0); |
| 759 | | state_save_register_global(m_machine, m_cmd_d1); |
| 760 | | state_save_register_global(m_machine, m_fdint); |
| 756 | state_save_register_global(machine(), m_reset); |
| 757 | state_save_register_global(machine(), m_col); |
| 758 | state_save_register_global(machine(), m_cmd_d0); |
| 759 | state_save_register_global(machine(), m_cmd_d1); |
| 760 | state_save_register_global(machine(), m_fdint); |
| 761 | 761 | } |
| 762 | 762 | |
| 763 | 763 | |
| r11240 | r11241 | |
| 772 | 772 | program->install_read_bank(0x0000, 0xefff, 0xfff, 0, "bank1"); |
| 773 | 773 | program->install_write_bank(0x0000, 0xefff, 0xfff, 0, "bank2"); |
| 774 | 774 | |
| 775 | | memory_set_bank(m_machine, "bank1", 1); |
| 776 | | memory_set_bank(m_machine, "bank2", 1); |
| 777 | | memory_set_bank(m_machine, "bank3", 1); |
| 775 | memory_set_bank(machine(), "bank1", 1); |
| 776 | memory_set_bank(machine(), "bank2", 1); |
| 777 | memory_set_bank(machine(), "bank3", 1); |
| 778 | 778 | |
| 779 | 779 | m_reset = 1; |
| 780 | 780 | |
src/ldplayer/ldplayer.c
| r11240 | r11241 | |
| 26 | 26 | * |
| 27 | 27 | *************************************/ |
| 28 | 28 | |
| 29 | | enum |
| 30 | | { |
| 31 | | CMD_SCAN_REVERSE, |
| 32 | | CMD_STEP_REVERSE, |
| 33 | | CMD_SLOW_REVERSE, |
| 34 | | CMD_FAST_REVERSE, |
| 35 | | CMD_SCAN_FORWARD, |
| 36 | | CMD_STEP_FORWARD, |
| 37 | | CMD_SLOW_FORWARD, |
| 38 | | CMD_FAST_FORWARD, |
| 39 | | CMD_PLAY, |
| 40 | | CMD_PAUSE, |
| 41 | | CMD_FRAME_TOGGLE, |
| 42 | | CMD_CHAPTER_TOGGLE, |
| 43 | | CMD_CH1_TOGGLE, |
| 44 | | CMD_CH2_TOGGLE, |
| 45 | | CMD_0, |
| 46 | | CMD_1, |
| 47 | | CMD_2, |
| 48 | | CMD_3, |
| 49 | | CMD_4, |
| 50 | | CMD_5, |
| 51 | | CMD_6, |
| 52 | | CMD_7, |
| 53 | | CMD_8, |
| 54 | | CMD_9, |
| 55 | | CMD_SEARCH |
| 56 | | }; |
| 57 | | |
| 58 | | |
| 59 | | |
| 60 | 29 | /************************************* |
| 61 | 30 | * |
| 62 | 31 | * Globals |
| 63 | 32 | * |
| 64 | 33 | *************************************/ |
| 65 | 34 | |
| 66 | | static astring filename; |
| 35 | class ldplayer_state : public driver_device |
| 36 | { |
| 37 | public: |
| 38 | // construction/destruction |
| 39 | ldplayer_state(running_machine &machine, const driver_device_config_base &config) |
| 40 | : driver_device(machine, config), |
| 41 | m_last_controls(0), |
| 42 | m_playing(false), |
| 43 | m_laserdisc(*this, "laserdisc") { } |
| 67 | 44 | |
| 68 | | static input_port_value last_controls; |
| 69 | | static UINT8 playing; |
| 45 | // callback hook |
| 46 | static chd_file *get_disc_static(device_t *device) { return device->machine().driver_data<ldplayer_state>()->get_disc(); } |
| 70 | 47 | |
| 71 | | static emu_timer *pr8210_bit_timer; |
| 72 | | static UINT32 pr8210_command_buffer_in, pr8210_command_buffer_out; |
| 73 | | static UINT8 pr8210_command_buffer[10]; |
| 48 | protected: |
| 49 | // device overrides |
| 50 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 51 | virtual void machine_start(); |
| 52 | virtual void machine_reset(); |
| 74 | 53 | |
| 75 | | static void (*execute_command)(device_t *laserdisc, int command); |
| 54 | // internal helpers |
| 55 | chd_file *get_disc(); |
| 56 | void process_commands(); |
| 57 | |
| 58 | // derived classes |
| 59 | virtual void execute_command(int command) { assert(false); } |
| 76 | 60 | |
| 61 | // timer IDs |
| 62 | enum |
| 63 | { |
| 64 | TIMER_ID_AUTOPLAY, |
| 65 | TIMER_ID_VSYNC_UPDATE |
| 66 | }; |
| 77 | 67 | |
| 68 | // commands |
| 69 | enum |
| 70 | { |
| 71 | CMD_SCAN_REVERSE, |
| 72 | CMD_STEP_REVERSE, |
| 73 | CMD_SLOW_REVERSE, |
| 74 | CMD_FAST_REVERSE, |
| 75 | CMD_SCAN_FORWARD, |
| 76 | CMD_STEP_FORWARD, |
| 77 | CMD_SLOW_FORWARD, |
| 78 | CMD_FAST_FORWARD, |
| 79 | CMD_PLAY, |
| 80 | CMD_PAUSE, |
| 81 | CMD_FRAME_TOGGLE, |
| 82 | CMD_CHAPTER_TOGGLE, |
| 83 | CMD_CH1_TOGGLE, |
| 84 | CMD_CH2_TOGGLE, |
| 85 | CMD_0, |
| 86 | CMD_1, |
| 87 | CMD_2, |
| 88 | CMD_3, |
| 89 | CMD_4, |
| 90 | CMD_5, |
| 91 | CMD_6, |
| 92 | CMD_7, |
| 93 | CMD_8, |
| 94 | CMD_9, |
| 95 | CMD_SEARCH |
| 96 | }; |
| 78 | 97 | |
| 98 | // internal state |
| 99 | astring m_filename; |
| 100 | input_port_value m_last_controls; |
| 101 | bool m_playing; |
| 102 | required_device<laserdisc_device> m_laserdisc; |
| 103 | }; |
| 104 | |
| 105 | |
| 106 | class pr8210_state : public ldplayer_state |
| 107 | { |
| 108 | public: |
| 109 | // construction/destruction |
| 110 | pr8210_state(running_machine &machine, const driver_device_config_base &config) |
| 111 | : ldplayer_state(machine, config), |
| 112 | m_bit_timer(timer_alloc(TIMER_ID_BIT)), |
| 113 | m_command_buffer_in(0), |
| 114 | m_command_buffer_out(0) { } |
| 115 | |
| 116 | protected: |
| 117 | // device overrides |
| 118 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 119 | virtual void machine_reset(); |
| 120 | |
| 121 | // command execution hook |
| 122 | virtual void execute_command(int command); |
| 123 | |
| 124 | // internal helpers |
| 125 | inline void add_command(UINT8 command); |
| 126 | |
| 127 | // timer IDs |
| 128 | enum |
| 129 | { |
| 130 | TIMER_ID_BIT = 100, |
| 131 | TIMER_ID_BIT_OFF |
| 132 | }; |
| 133 | |
| 134 | // internal state |
| 135 | emu_timer *m_bit_timer; |
| 136 | UINT32 m_command_buffer_in; |
| 137 | UINT32 m_command_buffer_out; |
| 138 | UINT8 m_command_buffer[10]; |
| 139 | }; |
| 140 | |
| 141 | |
| 142 | class ldv1000_state : public ldplayer_state |
| 143 | { |
| 144 | public: |
| 145 | // construction/destruction |
| 146 | ldv1000_state(running_machine &machine, const driver_device_config_base &config) |
| 147 | : ldplayer_state(machine, config) { } |
| 148 | |
| 149 | protected: |
| 150 | // command execution hook |
| 151 | virtual void execute_command(int command); |
| 152 | }; |
| 153 | |
| 154 | |
| 155 | |
| 79 | 156 | /************************************* |
| 80 | 157 | * |
| 81 | 158 | * Disc location |
| 82 | 159 | * |
| 83 | 160 | *************************************/ |
| 84 | 161 | |
| 85 | | static void free_string(running_machine &machine) |
| 162 | chd_file *ldplayer_state::get_disc() |
| 86 | 163 | { |
| 87 | | } |
| 164 | // open a path to the ROMs and find the first CHD file |
| 165 | file_enumerator path(machine().options().media_path()); |
| 88 | 166 | |
| 89 | | |
| 90 | | static chd_file *get_disc(device_t *device) |
| 91 | | { |
| 167 | // iterate while we get new objects |
| 168 | const osd_directory_entry *dir; |
| 92 | 169 | emu_file *image_file = NULL; |
| 93 | 170 | chd_file *image_chd = NULL; |
| 94 | | |
| 95 | | /* open a path to the ROMs and find the first CHD file */ |
| 96 | | file_enumerator path(device->machine().options().media_path()); |
| 97 | | const osd_directory_entry *dir; |
| 98 | | |
| 99 | | /* iterate while we get new objects */ |
| 100 | 171 | while ((dir = path.next()) != NULL) |
| 101 | 172 | { |
| 102 | 173 | int length = strlen(dir->name); |
| 103 | 174 | |
| 104 | | /* look for files ending in .chd */ |
| 175 | // look for files ending in .chd |
| 105 | 176 | if (length > 4 && |
| 106 | 177 | dir->name[length - 4] == '.' && |
| 107 | 178 | tolower(dir->name[length - 3]) == 'c' && |
| 108 | 179 | tolower(dir->name[length - 2]) == 'h' && |
| 109 | 180 | tolower(dir->name[length - 1]) == 'd') |
| 110 | 181 | { |
| 111 | | file_error filerr; |
| 112 | | chd_error chderr; |
| 113 | | |
| 114 | | /* open the file itself via our search path */ |
| 115 | | image_file = auto_alloc(device->machine(), emu_file(device->machine().options().media_path(), OPEN_FLAG_READ)); |
| 116 | | filerr = image_file->open(dir->name); |
| 182 | // open the file itself via our search path |
| 183 | image_file = auto_alloc(machine(), emu_file(machine().options().media_path(), OPEN_FLAG_READ)); |
| 184 | file_error filerr = image_file->open(dir->name); |
| 117 | 185 | if (filerr == FILERR_NONE) |
| 118 | 186 | { |
| 119 | | /* try to open the CHD */ |
| 120 | | chderr = chd_open_file(*image_file, CHD_OPEN_READ, NULL, &image_chd); |
| 187 | // try to open the CHD |
| 188 | chd_error chderr = chd_open_file(*image_file, CHD_OPEN_READ, NULL, &image_chd); |
| 121 | 189 | if (chderr == CHDERR_NONE) |
| 122 | 190 | { |
| 123 | | set_disk_handle(device->machine(), "laserdisc", *image_file, *image_chd); |
| 124 | | filename.cpy(dir->name); |
| 125 | | device->machine().add_notifier(MACHINE_NOTIFY_EXIT, free_string); |
| 191 | set_disk_handle(machine(), "laserdisc", *image_file, *image_chd); |
| 192 | m_filename.cpy(dir->name); |
| 126 | 193 | break; |
| 127 | 194 | } |
| 128 | 195 | } |
| 129 | 196 | |
| 130 | | /* close the file on failure */ |
| 131 | | auto_free(device->machine(), image_file); |
| 197 | // close the file on failure |
| 198 | auto_free(machine(), image_file); |
| 132 | 199 | image_file = NULL; |
| 133 | 200 | } |
| 134 | 201 | } |
| 135 | 202 | |
| 136 | | /* if we failed, pop a message and exit */ |
| 203 | // if we failed, pop a message and exit |
| 137 | 204 | if (image_file == NULL) |
| 138 | | fatalerror("No valid image file found!\n"); |
| 205 | throw emu_fatalerror("No valid image file found!\n"); |
| 139 | 206 | |
| 140 | | return get_disk_handle(device->machine(), "laserdisc"); |
| 207 | return get_disk_handle(machine(), "laserdisc"); |
| 141 | 208 | } |
| 142 | 209 | |
| 143 | 210 | |
| r11240 | r11241 | |
| 148 | 215 | * |
| 149 | 216 | *************************************/ |
| 150 | 217 | |
| 151 | | static void process_commands(device_t *laserdisc) |
| 218 | void ldplayer_state::process_commands() |
| 152 | 219 | { |
| 153 | | input_port_value controls = input_port_read(laserdisc->machine(), "controls"); |
| 220 | input_port_value controls = input_port_read(machine(), "controls"); |
| 154 | 221 | int number; |
| 155 | 222 | |
| 156 | | /* step backwards */ |
| 157 | | if (!(last_controls & 0x01) && (controls & 0x01)) |
| 158 | | (*execute_command)(laserdisc, CMD_STEP_REVERSE); |
| 223 | // step backwards |
| 224 | if (!(m_last_controls & 0x01) && (controls & 0x01)) |
| 225 | execute_command(CMD_STEP_REVERSE); |
| 159 | 226 | |
| 160 | | /* step forwards */ |
| 161 | | if (!(last_controls & 0x02) && (controls & 0x02)) |
| 162 | | (*execute_command)(laserdisc, CMD_STEP_FORWARD); |
| 227 | // step forwards |
| 228 | if (!(m_last_controls & 0x02) && (controls & 0x02)) |
| 229 | execute_command(CMD_STEP_FORWARD); |
| 163 | 230 | |
| 164 | | /* scan backwards */ |
| 231 | // scan backwards |
| 165 | 232 | if (controls & 0x04) |
| 166 | | (*execute_command)(laserdisc, CMD_SCAN_REVERSE); |
| 233 | execute_command(CMD_SCAN_REVERSE); |
| 167 | 234 | |
| 168 | | /* scan forwards */ |
| 235 | // scan forwards |
| 169 | 236 | if (controls & 0x08) |
| 170 | | (*execute_command)(laserdisc, CMD_SCAN_FORWARD); |
| 237 | execute_command(CMD_SCAN_FORWARD); |
| 171 | 238 | |
| 172 | | /* slow backwards */ |
| 173 | | if (!(last_controls & 0x10) && (controls & 0x10)) |
| 174 | | (*execute_command)(laserdisc, CMD_SLOW_REVERSE); |
| 239 | // slow backwards |
| 240 | if (!(m_last_controls & 0x10) && (controls & 0x10)) |
| 241 | execute_command(CMD_SLOW_REVERSE); |
| 175 | 242 | |
| 176 | | /* slow forwards */ |
| 177 | | if (!(last_controls & 0x20) && (controls & 0x20)) |
| 178 | | (*execute_command)(laserdisc, CMD_SLOW_FORWARD); |
| 243 | // slow forwards |
| 244 | if (!(m_last_controls & 0x20) && (controls & 0x20)) |
| 245 | execute_command(CMD_SLOW_FORWARD); |
| 179 | 246 | |
| 180 | | /* fast backwards */ |
| 247 | // fast backwards |
| 181 | 248 | if (controls & 0x40) |
| 182 | | (*execute_command)(laserdisc, CMD_FAST_REVERSE); |
| 249 | execute_command(CMD_FAST_REVERSE); |
| 183 | 250 | |
| 184 | | /* fast forwards */ |
| 251 | // fast forwards |
| 185 | 252 | if (controls & 0x80) |
| 186 | | (*execute_command)(laserdisc, CMD_FAST_FORWARD); |
| 253 | execute_command(CMD_FAST_FORWARD); |
| 187 | 254 | |
| 188 | | /* play/pause */ |
| 189 | | if (!(last_controls & 0x100) && (controls & 0x100)) |
| 255 | // play/pause |
| 256 | if (!(m_last_controls & 0x100) && (controls & 0x100)) |
| 190 | 257 | { |
| 191 | | playing = !playing; |
| 192 | | (*execute_command)(laserdisc, playing ? CMD_PLAY : CMD_PAUSE); |
| 258 | m_playing = !m_playing; |
| 259 | execute_command(m_playing ? CMD_PLAY : CMD_PAUSE); |
| 193 | 260 | } |
| 194 | 261 | |
| 195 | | /* toggle frame display */ |
| 196 | | if (!(last_controls & 0x200) && (controls & 0x200)) |
| 197 | | (*execute_command)(laserdisc, CMD_FRAME_TOGGLE); |
| 262 | // toggle frame display |
| 263 | if (!(m_last_controls & 0x200) && (controls & 0x200)) |
| 264 | execute_command(CMD_FRAME_TOGGLE); |
| 198 | 265 | |
| 199 | | /* toggle chapter display */ |
| 200 | | if (!(last_controls & 0x400) && (controls & 0x400)) |
| 201 | | (*execute_command)(laserdisc, CMD_CHAPTER_TOGGLE); |
| 266 | // toggle chapter display |
| 267 | if (!(m_last_controls & 0x400) && (controls & 0x400)) |
| 268 | execute_command(CMD_CHAPTER_TOGGLE); |
| 202 | 269 | |
| 203 | | /* toggle left channel */ |
| 204 | | if (!(last_controls & 0x800) && (controls & 0x800)) |
| 205 | | (*execute_command)(laserdisc, CMD_CH1_TOGGLE); |
| 270 | // toggle left channel |
| 271 | if (!(m_last_controls & 0x800) && (controls & 0x800)) |
| 272 | execute_command(CMD_CH1_TOGGLE); |
| 206 | 273 | |
| 207 | | /* toggle right channel */ |
| 208 | | if (!(last_controls & 0x1000) && (controls & 0x1000)) |
| 209 | | (*execute_command)(laserdisc, CMD_CH2_TOGGLE); |
| 274 | // toggle right channel |
| 275 | if (!(m_last_controls & 0x1000) && (controls & 0x1000)) |
| 276 | execute_command(CMD_CH2_TOGGLE); |
| 210 | 277 | |
| 211 | | /* numbers */ |
| 278 | // numbers |
| 212 | 279 | for (number = 0; number < 10; number++) |
| 213 | | if (!(last_controls & (0x10000 << number)) && (controls & (0x10000 << number))) |
| 214 | | (*execute_command)(laserdisc, CMD_0 + number); |
| 280 | if (!(m_last_controls & (0x10000 << number)) && (controls & (0x10000 << number))) |
| 281 | execute_command(CMD_0 + number); |
| 215 | 282 | |
| 216 | | /* enter */ |
| 217 | | if (!(last_controls & 0x4000000) && (controls & 0x4000000)) |
| 218 | | (*execute_command)(laserdisc, CMD_SEARCH); |
| 283 | // enter |
| 284 | if (!(m_last_controls & 0x4000000) && (controls & 0x4000000)) |
| 285 | execute_command(CMD_SEARCH); |
| 219 | 286 | |
| 220 | | last_controls = controls; |
| 287 | m_last_controls = controls; |
| 221 | 288 | } |
| 222 | 289 | |
| 223 | 290 | |
| 224 | | static TIMER_CALLBACK( vsync_update ) |
| 291 | void ldplayer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 225 | 292 | { |
| 226 | | device_t *laserdisc = machine.m_devicelist.first(LASERDISC); |
| 227 | | int vblank_scanline; |
| 228 | | attotime target; |
| 293 | switch (id) |
| 294 | { |
| 295 | case TIMER_ID_VSYNC_UPDATE: |
| 296 | { |
| 297 | // handle commands |
| 298 | if (param == 0) |
| 299 | process_commands(); |
| 229 | 300 | |
| 230 | | /* handle commands */ |
| 231 | | if (!param) |
| 232 | | process_commands(laserdisc); |
| 233 | | |
| 234 | | /* set a timer to go off on the next VBLANK */ |
| 235 | | vblank_scanline = machine.primary_screen->visible_area().max_y + 1; |
| 236 | | target = machine.primary_screen->time_until_pos(vblank_scanline); |
| 237 | | machine.scheduler().timer_set(target, FUNC(vsync_update)); |
| 301 | // set a timer to go off on the next VBLANK |
| 302 | int vblank_scanline = machine().primary_screen->visible_area().max_y + 1; |
| 303 | attotime target = machine().primary_screen->time_until_pos(vblank_scanline); |
| 304 | timer_set(target, TIMER_ID_VSYNC_UPDATE); |
| 305 | break; |
| 306 | } |
| 307 | |
| 308 | case TIMER_ID_AUTOPLAY: |
| 309 | // start playing |
| 310 | execute_command(CMD_PLAY); |
| 311 | m_playing = true; |
| 312 | break; |
| 313 | } |
| 238 | 314 | } |
| 239 | 315 | |
| 240 | 316 | |
| 241 | | static MACHINE_START( ldplayer ) |
| 317 | void ldplayer_state::machine_start() |
| 242 | 318 | { |
| 243 | | vsync_update(machine, NULL, 1); |
| 319 | // start the vsync timer going |
| 320 | timer_set(attotime::zero, TIMER_ID_VSYNC_UPDATE, 1); |
| 244 | 321 | } |
| 245 | 322 | |
| 246 | 323 | |
| 247 | | static TIMER_CALLBACK( autoplay ) |
| 324 | void ldplayer_state::machine_reset() |
| 248 | 325 | { |
| 249 | | device_t *laserdisc = machine.m_devicelist.first(LASERDISC); |
| 326 | // set up a timer to start playing immediately |
| 327 | timer_set(attotime::zero, TIMER_ID_AUTOPLAY); |
| 250 | 328 | |
| 251 | | /* start playing */ |
| 252 | | (*execute_command)(laserdisc, CMD_PLAY); |
| 253 | | playing = TRUE; |
| 329 | // indicate the name of the file we opened |
| 330 | popmessage("Opened %s\n", m_filename.cstr()); |
| 254 | 331 | } |
| 255 | 332 | |
| 256 | 333 | |
| 257 | | static MACHINE_RESET( ldplayer ) |
| 258 | | { |
| 259 | | /* set up a timer to start playing immediately */ |
| 260 | | machine.scheduler().timer_set(attotime::zero, FUNC(autoplay)); |
| 261 | 334 | |
| 262 | | /* indicate the name of the file we opened */ |
| 263 | | popmessage("Opened %s\n", filename.cstr()); |
| 264 | | } |
| 265 | | |
| 266 | | |
| 267 | | |
| 268 | 335 | /************************************* |
| 269 | 336 | * |
| 270 | 337 | * PR-8210 implementation |
| 271 | 338 | * |
| 272 | 339 | *************************************/ |
| 273 | 340 | |
| 274 | | INLINE void pr8210_add_command(UINT8 command) |
| 341 | void pr8210_state::add_command(UINT8 command) |
| 275 | 342 | { |
| 276 | | pr8210_command_buffer[pr8210_command_buffer_in++ % ARRAY_LENGTH(pr8210_command_buffer)] = (command & 0x1f) | 0x20; |
| 277 | | pr8210_command_buffer[pr8210_command_buffer_in++ % ARRAY_LENGTH(pr8210_command_buffer)] = 0x00 | 0x20; |
| 343 | m_command_buffer[m_command_buffer_in++ % ARRAY_LENGTH(m_command_buffer)] = (command & 0x1f) | 0x20; |
| 344 | m_command_buffer[m_command_buffer_in++ % ARRAY_LENGTH(m_command_buffer)] = 0x00 | 0x20; |
| 278 | 345 | } |
| 279 | 346 | |
| 280 | 347 | |
| 281 | | static TIMER_CALLBACK( pr8210_bit_off_callback ) |
| 348 | void pr8210_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 282 | 349 | { |
| 283 | | device_t *laserdisc = (device_t *)ptr; |
| 350 | switch (id) |
| 351 | { |
| 352 | case TIMER_ID_BIT: |
| 353 | { |
| 354 | attotime duration = attotime::from_msec(30); |
| 355 | UINT8 bitsleft = param >> 16; |
| 356 | UINT8 data = param; |
| 284 | 357 | |
| 285 | | /* deassert the control line */ |
| 286 | | laserdisc_line_w(laserdisc, LASERDISC_LINE_CONTROL, CLEAR_LINE); |
| 287 | | } |
| 358 | // if we have bits, process |
| 359 | if (bitsleft != 0) |
| 360 | { |
| 361 | // assert the line and set a timer for deassertion |
| 362 | laserdisc_line_w(m_laserdisc, LASERDISC_LINE_CONTROL, ASSERT_LINE); |
| 363 | timer_set(attotime::from_usec(250), TIMER_ID_BIT_OFF); |
| 288 | 364 | |
| 365 | // space 0 bits apart by 1msec, and 1 bits by 2msec |
| 366 | duration = attotime::from_msec((data & 0x80) ? 2 : 1); |
| 367 | data <<= 1; |
| 368 | bitsleft--; |
| 369 | } |
| 289 | 370 | |
| 290 | | static TIMER_CALLBACK( pr8210_bit_callback ) |
| 291 | | { |
| 292 | | attotime duration = attotime::from_msec(30); |
| 293 | | device_t *laserdisc = (device_t *)ptr; |
| 294 | | UINT8 bitsleft = param >> 16; |
| 295 | | UINT8 data = param; |
| 296 | | |
| 297 | | /* if we have bits, process */ |
| 298 | | if (bitsleft != 0) |
| 299 | | { |
| 300 | | /* assert the line and set a timer for deassertion */ |
| 301 | | laserdisc_line_w(laserdisc, LASERDISC_LINE_CONTROL, ASSERT_LINE); |
| 302 | | machine.scheduler().timer_set(attotime::from_usec(250), FUNC(pr8210_bit_off_callback), 0, ptr); |
| 303 | | |
| 304 | | /* space 0 bits apart by 1msec, and 1 bits by 2msec */ |
| 305 | | duration = attotime::from_msec((data & 0x80) ? 2 : 1); |
| 306 | | data <<= 1; |
| 307 | | bitsleft--; |
| 371 | // if we're out of bits, queue up the next command |
| 372 | else if (bitsleft == 0 && m_command_buffer_in != m_command_buffer_out) |
| 373 | { |
| 374 | data = m_command_buffer[m_command_buffer_out++ % ARRAY_LENGTH(m_command_buffer)]; |
| 375 | bitsleft = 12; |
| 376 | } |
| 377 | m_bit_timer->adjust(duration, (bitsleft << 16) | data); |
| 378 | break; |
| 379 | } |
| 380 | |
| 381 | // deassert the control line |
| 382 | case TIMER_ID_BIT_OFF: |
| 383 | laserdisc_line_w(m_laserdisc, LASERDISC_LINE_CONTROL, CLEAR_LINE); |
| 384 | break; |
| 385 | |
| 386 | // others to the parent class |
| 387 | default: |
| 388 | ldplayer_state::device_timer(timer, id, param, ptr); |
| 389 | break; |
| 308 | 390 | } |
| 309 | | |
| 310 | | /* if we're out of bits, queue up the next command */ |
| 311 | | else if (bitsleft == 0 && pr8210_command_buffer_in != pr8210_command_buffer_out) |
| 312 | | { |
| 313 | | data = pr8210_command_buffer[pr8210_command_buffer_out++ % ARRAY_LENGTH(pr8210_command_buffer)]; |
| 314 | | bitsleft = 12; |
| 315 | | } |
| 316 | | pr8210_bit_timer->adjust(duration, (bitsleft << 16) | data); |
| 317 | 391 | } |
| 318 | 392 | |
| 319 | 393 | |
| 320 | | static MACHINE_START( pr8210 ) |
| 394 | void pr8210_state::machine_reset() |
| 321 | 395 | { |
| 322 | | device_t *laserdisc = machine.m_devicelist.first(LASERDISC); |
| 323 | | MACHINE_START_CALL(ldplayer); |
| 324 | | pr8210_bit_timer = machine.scheduler().timer_alloc(FUNC(pr8210_bit_callback), (void *)laserdisc); |
| 396 | ldplayer_state::machine_reset(); |
| 397 | m_bit_timer->adjust(attotime::zero); |
| 325 | 398 | } |
| 326 | 399 | |
| 327 | 400 | |
| 328 | | static MACHINE_RESET( pr8210 ) |
| 401 | void pr8210_state::execute_command(int command) |
| 329 | 402 | { |
| 330 | | MACHINE_RESET_CALL(ldplayer); |
| 331 | | pr8210_bit_timer->adjust(attotime::zero); |
| 332 | | } |
| 333 | | |
| 334 | | |
| 335 | | static void pr8210_execute(device_t *laserdisc, int command) |
| 336 | | { |
| 337 | 403 | static const UINT8 digits[10] = { 0x01, 0x11, 0x09, 0x19, 0x05, 0x15, 0x0d, 0x1d, 0x03, 0x13 }; |
| 338 | 404 | |
| 339 | 405 | switch (command) |
| 340 | 406 | { |
| 341 | 407 | case CMD_SCAN_REVERSE: |
| 342 | | if (pr8210_command_buffer_in == pr8210_command_buffer_out || |
| 343 | | pr8210_command_buffer_in == (pr8210_command_buffer_out + 1) % ARRAY_LENGTH(pr8210_command_buffer)) |
| 408 | if (m_command_buffer_in == m_command_buffer_out || |
| 409 | m_command_buffer_in == (m_command_buffer_out + 1) % ARRAY_LENGTH(m_command_buffer)) |
| 344 | 410 | { |
| 345 | | pr8210_add_command(0x1c); |
| 346 | | playing = TRUE; |
| 411 | add_command(0x1c); |
| 412 | m_playing = true; |
| 347 | 413 | } |
| 348 | 414 | break; |
| 349 | 415 | |
| 350 | 416 | case CMD_STEP_REVERSE: |
| 351 | | pr8210_add_command(0x12); |
| 352 | | playing = FALSE; |
| 417 | add_command(0x12); |
| 418 | m_playing = false; |
| 353 | 419 | break; |
| 354 | 420 | |
| 355 | 421 | case CMD_SLOW_REVERSE: |
| 356 | | pr8210_add_command(0x02); |
| 357 | | playing = TRUE; |
| 422 | add_command(0x02); |
| 423 | m_playing = true; |
| 358 | 424 | break; |
| 359 | 425 | |
| 360 | 426 | case CMD_FAST_REVERSE: |
| 361 | | if (pr8210_command_buffer_in == pr8210_command_buffer_out || |
| 362 | | pr8210_command_buffer_in == (pr8210_command_buffer_out + 1) % ARRAY_LENGTH(pr8210_command_buffer)) |
| 427 | if (m_command_buffer_in == m_command_buffer_out || |
| 428 | m_command_buffer_in == (m_command_buffer_out + 1) % ARRAY_LENGTH(m_command_buffer)) |
| 363 | 429 | { |
| 364 | | pr8210_add_command(0x0c); |
| 365 | | playing = TRUE; |
| 430 | add_command(0x0c); |
| 431 | m_playing = true; |
| 366 | 432 | } |
| 367 | 433 | break; |
| 368 | 434 | |
| 369 | 435 | case CMD_SCAN_FORWARD: |
| 370 | | if (pr8210_command_buffer_in == pr8210_command_buffer_out || |
| 371 | | pr8210_command_buffer_in == (pr8210_command_buffer_out + 1) % ARRAY_LENGTH(pr8210_command_buffer)) |
| 436 | if (m_command_buffer_in == m_command_buffer_out || |
| 437 | m_command_buffer_in == (m_command_buffer_out + 1) % ARRAY_LENGTH(m_command_buffer)) |
| 372 | 438 | { |
| 373 | | pr8210_add_command(0x08); |
| 374 | | playing = TRUE; |
| 439 | add_command(0x08); |
| 440 | m_playing = true; |
| 375 | 441 | } |
| 376 | 442 | break; |
| 377 | 443 | |
| 378 | 444 | case CMD_STEP_FORWARD: |
| 379 | | pr8210_add_command(0x04); |
| 380 | | playing = FALSE; |
| 445 | add_command(0x04); |
| 446 | m_playing = false; |
| 381 | 447 | break; |
| 382 | 448 | |
| 383 | 449 | case CMD_SLOW_FORWARD: |
| 384 | | pr8210_add_command(0x18); |
| 385 | | playing = TRUE; |
| 450 | add_command(0x18); |
| 451 | m_playing = true; |
| 386 | 452 | break; |
| 387 | 453 | |
| 388 | 454 | case CMD_FAST_FORWARD: |
| 389 | | if (pr8210_command_buffer_in == pr8210_command_buffer_out || |
| 390 | | pr8210_command_buffer_in == (pr8210_command_buffer_out + 1) % ARRAY_LENGTH(pr8210_command_buffer)) |
| 455 | if (m_command_buffer_in == m_command_buffer_out || |
| 456 | m_command_buffer_in == (m_command_buffer_out + 1) % ARRAY_LENGTH(m_command_buffer)) |
| 391 | 457 | { |
| 392 | | pr8210_add_command(0x10); |
| 393 | | playing = TRUE; |
| 458 | add_command(0x10); |
| 459 | m_playing = true; |
| 394 | 460 | } |
| 395 | 461 | break; |
| 396 | 462 | |
| 397 | 463 | case CMD_PLAY: |
| 398 | | pr8210_add_command(0x14); |
| 399 | | playing = TRUE; |
| 464 | add_command(0x14); |
| 465 | m_playing = true; |
| 400 | 466 | break; |
| 401 | 467 | |
| 402 | 468 | case CMD_PAUSE: |
| 403 | | pr8210_add_command(0x0a); |
| 404 | | playing = FALSE; |
| 469 | add_command(0x0a); |
| 470 | m_playing = false; |
| 405 | 471 | break; |
| 406 | 472 | |
| 407 | 473 | case CMD_FRAME_TOGGLE: |
| 408 | | pr8210_add_command(0x0b); |
| 474 | add_command(0x0b); |
| 409 | 475 | break; |
| 410 | 476 | |
| 411 | 477 | case CMD_CHAPTER_TOGGLE: |
| 412 | | pr8210_add_command(0x06); |
| 478 | add_command(0x06); |
| 413 | 479 | break; |
| 414 | 480 | |
| 415 | 481 | case CMD_CH1_TOGGLE: |
| 416 | | pr8210_add_command(0x0e); |
| 482 | add_command(0x0e); |
| 417 | 483 | break; |
| 418 | 484 | |
| 419 | 485 | case CMD_CH2_TOGGLE: |
| 420 | | pr8210_add_command(0x16); |
| 486 | add_command(0x16); |
| 421 | 487 | break; |
| 422 | 488 | |
| 423 | 489 | case CMD_0: |
| r11240 | r11241 | |
| 430 | 496 | case CMD_7: |
| 431 | 497 | case CMD_8: |
| 432 | 498 | case CMD_9: |
| 433 | | pr8210_add_command(digits[command - CMD_0]); |
| 499 | add_command(digits[command - CMD_0]); |
| 434 | 500 | break; |
| 435 | 501 | |
| 436 | 502 | case CMD_SEARCH: |
| 437 | | pr8210_add_command(0x1a); |
| 438 | | playing = FALSE; |
| 503 | add_command(0x1a); |
| 504 | m_playing = false; |
| 439 | 505 | break; |
| 440 | 506 | } |
| 441 | 507 | } |
| r11240 | r11241 | |
| 448 | 514 | * |
| 449 | 515 | *************************************/ |
| 450 | 516 | |
| 451 | | static void ldv1000_execute(device_t *laserdisc, int command) |
| 517 | void ldv1000_state::execute_command(int command) |
| 452 | 518 | { |
| 453 | 519 | static const UINT8 digits[10] = { 0x3f, 0x0f, 0x8f, 0x4f, 0x2f, 0xaf, 0x6f, 0x1f, 0x9f, 0x5f }; |
| 454 | 520 | switch (command) |
| 455 | 521 | { |
| 456 | 522 | case CMD_SCAN_REVERSE: |
| 457 | | laserdisc_data_w(laserdisc, 0xf8); |
| 458 | | playing = TRUE; |
| 523 | laserdisc_data_w(m_laserdisc, 0xf8); |
| 524 | m_playing = true; |
| 459 | 525 | break; |
| 460 | 526 | |
| 461 | 527 | case CMD_STEP_REVERSE: |
| 462 | | laserdisc_data_w(laserdisc, 0xfe); |
| 463 | | playing = FALSE; |
| 528 | laserdisc_data_w(m_laserdisc, 0xfe); |
| 529 | m_playing = false; |
| 464 | 530 | break; |
| 465 | 531 | |
| 466 | 532 | case CMD_SCAN_FORWARD: |
| 467 | | laserdisc_data_w(laserdisc, 0xf0); |
| 468 | | playing = TRUE; |
| 533 | laserdisc_data_w(m_laserdisc, 0xf0); |
| 534 | m_playing = true; |
| 469 | 535 | break; |
| 470 | 536 | |
| 471 | 537 | case CMD_STEP_FORWARD: |
| 472 | | laserdisc_data_w(laserdisc, 0xf6); |
| 473 | | playing = FALSE; |
| 538 | laserdisc_data_w(m_laserdisc, 0xf6); |
| 539 | m_playing = false; |
| 474 | 540 | break; |
| 475 | 541 | |
| 476 | 542 | case CMD_PLAY: |
| 477 | | laserdisc_data_w(laserdisc, 0xfd); |
| 478 | | playing = TRUE; |
| 543 | laserdisc_data_w(m_laserdisc, 0xfd); |
| 544 | m_playing = true; |
| 479 | 545 | break; |
| 480 | 546 | |
| 481 | 547 | case CMD_PAUSE: |
| 482 | | laserdisc_data_w(laserdisc, 0xa0); |
| 483 | | playing = FALSE; |
| 548 | laserdisc_data_w(m_laserdisc, 0xa0); |
| 549 | m_playing = false; |
| 484 | 550 | break; |
| 485 | 551 | |
| 486 | 552 | case CMD_FRAME_TOGGLE: |
| 487 | | laserdisc_data_w(laserdisc, 0xf1); |
| 553 | laserdisc_data_w(m_laserdisc, 0xf1); |
| 488 | 554 | break; |
| 489 | 555 | |
| 490 | 556 | case CMD_0: |
| r11240 | r11241 | |
| 497 | 563 | case CMD_7: |
| 498 | 564 | case CMD_8: |
| 499 | 565 | case CMD_9: |
| 500 | | laserdisc_data_w(laserdisc, digits[command - CMD_0]); |
| 566 | laserdisc_data_w(m_laserdisc, digits[command - CMD_0]); |
| 501 | 567 | break; |
| 502 | 568 | |
| 503 | 569 | case CMD_SEARCH: |
| 504 | | laserdisc_data_w(laserdisc, 0xf7); |
| 505 | | playing = FALSE; |
| 570 | laserdisc_data_w(m_laserdisc, 0xf7); |
| 571 | m_playing = false; |
| 506 | 572 | break; |
| 507 | 573 | } |
| 508 | 574 | } |
| r11240 | r11241 | |
| 551 | 617 | * |
| 552 | 618 | *************************************/ |
| 553 | 619 | |
| 554 | | static MACHINE_CONFIG_FRAGMENT( ldplayer_core ) |
| 620 | static MACHINE_CONFIG_START( ldplayer_core, ldplayer_state ) |
| 555 | 621 | |
| 556 | | MCFG_MACHINE_START(ldplayer) |
| 557 | | MCFG_MACHINE_RESET(ldplayer) |
| 558 | | |
| 559 | | /* audio hardware */ |
| 622 | // audio hardware |
| 560 | 623 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 561 | 624 | |
| 562 | 625 | MCFG_SOUND_ADD("ldsound", LASERDISC_SOUND, 0) |
| r11240 | r11241 | |
| 570 | 633 | MACHINE_CONFIG_END |
| 571 | 634 | |
| 572 | 635 | |
| 573 | | static MACHINE_CONFIG_DERIVED( ldv1000, ldplayer_ntsc ) |
| 636 | static MACHINE_CONFIG_DERIVED_CLASS( ldv1000, ldplayer_ntsc, ldv1000_state ) |
| 574 | 637 | MCFG_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, "screen", "ldsound") |
| 575 | | MCFG_LASERDISC_GET_DISC(get_disc) |
| 638 | MCFG_LASERDISC_GET_DISC(ldplayer_state::get_disc_static) |
| 576 | 639 | MACHINE_CONFIG_END |
| 577 | 640 | |
| 578 | 641 | |
| 579 | | static MACHINE_CONFIG_DERIVED( pr8210, ldplayer_ntsc ) |
| 580 | | MCFG_MACHINE_START(pr8210) |
| 581 | | MCFG_MACHINE_RESET(pr8210) |
| 642 | static MACHINE_CONFIG_DERIVED_CLASS( pr8210, ldplayer_ntsc, pr8210_state ) |
| 582 | 643 | MCFG_LASERDISC_ADD("laserdisc", PIONEER_PR8210, "screen", "ldsound") |
| 583 | | MCFG_LASERDISC_GET_DISC(get_disc) |
| 644 | MCFG_LASERDISC_GET_DISC(ldplayer_state::get_disc_static) |
| 584 | 645 | MACHINE_CONFIG_END |
| 585 | 646 | |
| 586 | 647 | |
| r11240 | r11241 | |
| 604 | 665 | |
| 605 | 666 | /************************************* |
| 606 | 667 | * |
| 607 | | * Driver initialization |
| 608 | | * |
| 609 | | *************************************/ |
| 610 | | |
| 611 | | static DRIVER_INIT( ldv1000 ) { execute_command = ldv1000_execute; } |
| 612 | | static DRIVER_INIT( pr8210 ) { execute_command = pr8210_execute; } |
| 613 | | |
| 614 | | |
| 615 | | |
| 616 | | /************************************* |
| 617 | | * |
| 618 | 668 | * Game drivers |
| 619 | 669 | * |
| 620 | 670 | *************************************/ |
| 621 | 671 | |
| 622 | | GAME( 2008, ldv1000, 0, ldv1000, ldplayer, ldv1000, ROT0, "MAME", "Pioneer LDV-1000 Simulator", 0 ) |
| 623 | | GAMEL(2008, pr8210, 0, pr8210, ldplayer, pr8210, ROT0, "MAME", "Pioneer PR-8210 Simulator", 0, layout_pr8210 ) |
| 672 | GAME( 2008, ldv1000, 0, ldv1000, ldplayer, 0, ROT0, "MAME", "Pioneer LDV-1000 Simulator", 0 ) |
| 673 | GAMEL(2008, pr8210, 0, pr8210, ldplayer, 0, ROT0, "MAME", "Pioneer PR-8210 Simulator", 0, layout_pr8210 ) |