diff --git a/src/mame/skeleton/pv9234.cpp b/src/mame/skeleton/pv9234.cpp index 328fee5a296..3b2ccbaf1b4 100644 --- a/src/mame/skeleton/pv9234.cpp +++ b/src/mame/skeleton/pv9234.cpp @@ -8,33 +8,60 @@ PowerVu D9234 STB (c) 1997 Scientific Atlanta References: - http://www.vetrun.net/forums/showthread.php?t=395 -- http://colibri.net63.net/powervu.htm -- http://www.growl.de/d9234/ +- https://web.archive.org/web/20080203175218/http://www.growl.de/d9234/ TODO: - everything, including PCB pictures and user manual; - Probably shared with other PowerVu DVB-S STB models; +- Flash ROM is (2x? 4x?) AT29C256 according to an evasive pic; +- $3f000 area should be bootstrap code, inits UART from there? Front Panel: -- On/standby / Signal on left -- arrow keys with select in the middle, next to DVB logo +- On/Standby | Signal/Menu on the left; +- arrow keys with select in the middle, next to DVB logo; +- PowerVu Conditional Access slot, on the right; Back Panel: -- CH3 / CH4 dip; -- Ant In and Tv Out UHF connectors, near composite audio/video jacks -- Satellite LNB PWR +13/+19V 250mA +- CH3 / CH4 dip, HF modulator (US standard); +- Ant In and Tv Out VHF/UHF connectors, near composite audio/video jacks; +- Satellite LNB PWR +13/+19V 250mA; - LNB PWR ON / OFF dip; -- AC IN, 100V-240V, 50/60Hz +- AC IN, 100V-240V, 50/60Hz; +According to the Quick Setup Guide, can have following optional slots: +- S-Video Out; +- DE-9 Wideband Data and/or DA-25 Expansion Port; =================================================================================================== -Meant for payTV providers to decrypt signals from the satellite and pump -them out on a local cable network. The powervu encryption is very secure. +This is the serial output to a terminal, used for debugging. +The boot process goes something like this: + +Start + +Config: 0x00001080 (Max Config: 00003C80) +MV 00000004.00000003 +DL Avail +IOP Com. O.K. 00000004 +Check CRC ... +CRC O.K. +Launch App +************** +* Ver 2.05 * +************** +Compiled by: FURLANO +Date & time: Nov 3 1997, 15:34:29 +All printing enabled. Press space bar to toggle on/off. +Time stamping enabled. Press 't' to turn on/off. +Press 'o' to toggle printing of MPEG Xport error messages. **************************************************************************************************/ #include "emu.h" + +#include "bus/rs232/rs232.h" #include "cpu/arm7/arm7.h" +#include "machine/ins8250.h" + #include "emupal.h" #include "screen.h" @@ -54,9 +81,7 @@ public: void pv9234(machine_config &config); private: - void debug_w(uint32_t data); void debug1_w(uint32_t data); - void debug2_w(uint32_t data); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -79,37 +104,6 @@ uint32_t pv9234_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap } -/* -This is the serial output to a terminal, used for debugging. -The boot process goes something like this: - -Start - -Config: 0x00001080 (Max Config: 00003C80) -MV 00000004.00000003 -DL Avail -IOP Com. O.K. 00000004 -Check CRC ... -CRC O.K. -Launch App -************** -* Ver 2.05 * -************** -Compiled by: FURLANO -Date & time: Nov 3 1997, 15:34:29 -All printing enabled. Press space bar to toggle on/off. -Time stamping enabled. Press 't' to turn on/off. -Press 'o' to toggle printing of MPEG Xport error messages. -*/ -void pv9234_state::debug_w(uint32_t data) -{ - if (data) - { - //printf("%02x %c\n",data,data); // this prints 'Start' to the console. - logerror("debug=%02x %c\n",data,data); - } -} - void pv9234_state::debug1_w(uint32_t data) { uint8_t i,j; @@ -126,25 +120,30 @@ void pv9234_state::debug1_w(uint32_t data) } } -void pv9234_state::debug2_w(uint32_t data) -{ - if (data) - logerror("debug2=%02x\n",data); // ignore the huge amount of zeroes here -} - void pv9234_state::main_map(address_map &map) { - map(0x00000000, 0x0007ffff).rom().region("maincpu", 0); //FLASH ROM! + //map.unmap_value_high(); + // TODO: flash ROM + map(0x00000000, 0x0007ffff).rom().region("maincpu", 0); // map(0x00000000, 0x00000033).w(FUNC(pv9234_state::)); something // map(0x00000044, 0x00000047).w(FUNC(pv9234_state::)); // map(0x00000060, 0x0000006b).w(FUNC(pv9234_state::)); // map(0x00007000, 0x00007003).w(FUNC(pv9234_state::)); // map(0x00008000, 0x00008003).w(FUNC(pv9234_state::)); + map(0x00008000, 0x000080ff).unmaprw(); map(0x00008014, 0x00008017).w(FUNC(pv9234_state::debug1_w)); // map(0x00008020, 0x00008027).w(FUNC(pv9234_state::)); - map(0x000080c0, 0x000080c3).w(FUNC(pv9234_state::debug2_w)); - map(0x000080cc, 0x000080cf).w(FUNC(pv9234_state::debug_w)); - // map(0x000080d0, 0x000080d3).w(FUNC(pv9234_state::)); + map(0x000080c0, 0x000080df).rw("uart", FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w)).umask32(0x000000ff); + map(0x000080cc, 0x000080cc).lw8( + NAME([this] (offs_t offset, u8 data) { + if (data) + { + //printf("%02x %c\n",data,data); // this prints 'Start' to the console. + logerror("debug=%02x %c\n",data,data); + } + }) + ); + map(0x0003e000, 0x0003efff).ram().share("p_ram"); map(0x00080000, 0x00087fff).mirror(0x78000).ram().share("share1");//mirror is a guess, writes a prg at 0xc0200 then it jumps at b0200 (!) map(0xe0000000, 0xe0007fff).mirror(0x0fff8000).ram().share("share1"); @@ -166,11 +165,9 @@ void pv9234_state::machine_reset() void pv9234_state::pv9234(machine_config &config) { - /* basic machine hardware */ - ARM7(config, m_maincpu, 4915000); // TODO: unknown type + ARM7(config, m_maincpu, 4915000); // TODO: unknown type, VLSI branded? m_maincpu->set_addrmap(AS_PROGRAM, &pv9234_state::main_map); - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ @@ -179,10 +176,25 @@ void pv9234_state::pv9234(machine_config &config) screen.set_screen_update(FUNC(pv9234_state::screen_update)); screen.set_palette("palette"); + // TODO: wideband DE-9 port + + // TODO: actually NS16550A, uses DA-25 port for a non-standard 8P1 125k baud rate + NS16550(config, "uart", 8_MHz_XTAL); +// uart.out_tx_callback().set("serial", FUNC(rs232_port_device::write_txd)); +// uart.out_dtr_callback().set("serial", FUNC(rs232_port_device::write_dtr)); +// uart.out_rts_callback().set("serial", FUNC(rs232_port_device::write_rts)); +// +// rs232_port_device &serial(RS232_PORT(config, "serial", default_rs232_devices, "terminal")); +// serial.rxd_handler().set("uart", FUNC(ns16550_device::rx_w)); +// serial.dcd_handler().set("uart", FUNC(ns16550_device::dcd_w)); +// serial.dsr_handler().set("uart", FUNC(ns16550_device::dsr_w)); +// serial.cts_handler().set("uart", FUNC(ns16550_device::cts_w)); + + // TODO: has a Philips SAA-branded chip on the evasive PCB picture + PALETTE(config, "palette", palette_device::MONOCHROME); } -/* ROM definition */ ROM_START( pv9234 ) ROM_REGION32_LE( 0x80000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_BYTE( "u19.bin", 0x00000, 0x20000, CRC(1e06b0c8) SHA1(f8047f7127919e73675375578bb9fcc0eed2178e)) @@ -193,5 +205,6 @@ ROM_END } // anonymous namespace - +// PowerVu D9223 Commercial Satellite Receiver +// PowerVu D9225 Headend Satellite Receiver SYST( 1997, pv9234, 0, 0, pv9234, pv9234, pv9234_state, empty_init, "Scientific Atlanta", "PowerVu D9234 Business Satellite Receiver", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)