diff options
Diffstat (limited to 'src/mess/drivers/fanucspmg.c')
-rw-r--r-- | src/mess/drivers/fanucspmg.c | 1011 |
1 files changed, 0 insertions, 1011 deletions
diff --git a/src/mess/drivers/fanucspmg.c b/src/mess/drivers/fanucspmg.c deleted file mode 100644 index 9b40227094b..00000000000 --- a/src/mess/drivers/fanucspmg.c +++ /dev/null @@ -1,1011 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:R. Belmont -/*************************************************************************** - -Fanuc System P-Model G -Fanuc 1983 - -2014-03-22 Skeleton driver. -This is a machine from 1983 in a single case -with a lot of ports and a unique keyboard. - -Also known as Fanuc P-G System, this is a dedicated 8085+8086+8087-based computer -system running software for CNC Programming. -The system boots up from on-board EPROM and shows a big ASCII-art boot screen -FANUC SYSTEM P and the ROM software version in the lower right corner. -To initiate booting from the floppy drive hold down the LOAD key for 3-5 seconds. -The system checks for a long LOAD key press so that it doesn't load software -if the LOAD key is accidentally pressed quickly while using the system, which would -erase everything in memory and all data up to that point and re-load the software from -scratch. When loading is activated application software is read from floppies. - -The softwares are not point and click auto-generation type conversational CAD/CAM -applications. The earlier 'non-Symbolic' software requires knowledge of programming in APT -and other languages of the era. The 'Symbolic' software has menus and asks questions and -the blanks must be filled in correctly. The graphics are mostly made of lines but are -sufficient to complete the task easily. Efficient and effective use of this system -requires deep knowledge of CNC Machining techniques (Turning/Milling etc) and a -good understanding of machining processes and procedures. With correct usage this system -can be used to create CNC G-Code programs for any part that can be manufactured on a -CNC Machine. Because the system is made in Japan in the early 80's and the manuals are -very technical it also requires some skill in deciphering Japanese-English translated -technical texts to understand how to use it properly. - -The box housing everything is 20" wide by 20" deep by 12" high and weighs -approximately 40 pounds. Power input is 85VAC to 110VAC. For the non-US and -non-Japanese markets a separate dedicated power supply is provided and is 12" -wide by 8" deep by 10" high and weighs approximately 20 pounds. - -A number of optional peripherals can connect to it including a Fanuc Printer, -Fanuc PPR Unit (Paper tape Puncher/Reader with built-in printer), Fanuc Program -File (containing a 20MB HDD, two 8" floppy drives and two RS232 ports), Fanuc Cassette -Adapter, XY Plotter (A3 or A1), Fanuc Digitizing Tablet (A3 or A0) and Fanuc I/O Selector Box. - -The P-G System has an internal 12" monitor and dual 5 1/4" floppy drives. -The first model had a 12" monochrome green monitor. In 1985 a color version was released. -In 1986 another model was released called the Mark II using dual 3 1/2" floppy drives. - -The screen resolution is 512 x 384 pixels. It can display 64 characters x 24 lines. - -The floppy format is custom. Floppies are double sided double density and -regular PC DSDD 360k floppies can be used after they are formatted using the -P-G System. -The floppy geometry is 40 tracks, 16 sectors per track, 256 bytes per sector -and 2 sides for a total storage capacity of 327680 bytes. -The floppy drives are typical PC-type 5 1/4" 360k drives and were manufactured -by Y-E DATA, model YD-580. - -The 5 1/4" floppy disks can be backed-up and imaged using a DOS program called ImageDisk -which is available here..... -http://www.classiccmp.org/dunfield/img/index.htm -With a 5 1/4" HD floppy drive, in the GUI in settings change the number of -cylinders to 40, translate speed 300 -> 250 (to read a DD disk on a HD drive). -On the main menu press R to Read, type a file-name and press enter, press enter -again to skip the comment. Press enter again and it will read the disk and save -it to the HDD. - -The following is a complete list of software titles available. -The info is taken from a glossy sales brochure printed in July 1985. -Other versions probably exist so this list is not final. -* denotes it is dumped. All other titles are not dumped and are needed. - -Language Input - - - Title Part Number - -------------------------------- - FAPT TURN A08B-0033-J600#E - FAPT CUT A08B-0033-J620#E - FAPT MILL A08B-0033-J640#E - FAPT DIE-II A08B-0033-J660#E - FAPT PUNCH-I A08B-0033-J520#E - FAPT PUNCH-II A08B-0033-J700#E - FAPT HELICAL A08B-0033-J642#E - FAPT POST A08B-0033-H642#E - *FAPT POST A08B-0031-H630 Edition C 85/1/31 - - -Graphic Input - - - Title Part Number - -------------------------------------- - *Symbolic FAPT TURN A08B-0033-J800#E Edition B V02 L03 841116 - Symbolic FAPT MILL A08B-0033-J840#E - Symbolic FAPT DRILL A08B-0033-J860#E - Symbolic FAPT CUT A08B-0033-J820#E - FAPT DIGITIZER A08B-0033-J510#E - -+ Symbolic FAPT TURN was available in English, German, French, Dutch, Finnish, -and Swedish versions. Currently only the English version is archived. - - -Support System - - - Title Part Number - ------------------------------- - *FAPT TRACER A08B-0033-H620#E Edition B V02 L02 841108 - *FAPT TEACHER A08B-0033-J610#E Edition B L02 V01 841101 - *FAPT DOCTOR A08B-0033-J600#E Edition B V01 L03 841108 - - -The software listed above with (*) have been tested on both mono and color versions and works fine. -Note: To initiate booting from the floppy drive hold down the LOAD key for 3-5 seconds. - -The software for the Fanuc System P-Model G is extremely rare now and very difficult to find. -If you do have any of these wanted software titles or any manuals listed below and want to help -please contact me (Guru) via http://mamedev.org/contact.html - -The following is a complete list of manuals available for the first edition of the -Fanuc System P-Model G released in 1983. The info is taken from a glossy sales brochure -printed in July 1985. There were other manuals released later for the Mark II and -updated manuals (each with a different part number). -The manuals were available in Japanese and English. The part numbers listed here -are English versions, denoted by the E at the end of the part number. -* denotes these manuals are secured and available in PDF format. - -Description - - - Title Part Number - --------------------------------------- - FAPT TURN/MILL Description B-54102E - FAPT CUT Description B-54103E - FAPT PUNCH-I Description B-54104E - FAPT TRACER Description B-54106E - FAPT DIGITIZER Description B-54107E - FAPT DIE-II Description B-54121E - Symbolic FAPT Description B-54131E - - -Operator's Manual - - - Title Part Number - ---------------------------------------------------------- - *System P-Model G Operator's Manual B-54111E/03 - System P-Model G Mark II Operator's Manual B-66014E - *System P-Model G Operator's Manual Supplement B-54112E/03-1 - FAPT TURN/MILL Operator's Manual B-54112E - FAPT CUT Operator's Manual B-54113E - FAPT PUNCH-I Operator's Manual B-54114E - FAPT PUNCH-II Operator's Manual B-54115E - *FAPT TRACER Operator's Manual B-54116E/03 - FAPT DIGITIZER Operator's Manual B-54117E - *FAPT Universal POST Operator's Manual B-54118E/02 - FAPT DIE-II Operator's Manual (Volume 1) B-54122E - FAPT DIE-II Operator's Manual (Volume 2) B-54122E-1 - *FAPT TEACHER Operator's Manual B-54126E/01 - 220S FAPT MILL Operator's Manual B-54127E - *Symbolic FAPT TURN Operator's Manual B-54132E/01 - Symbolic FAPT MILL Operator's Manual B-54134E - Symbolic FAPT CUT Operator's Manual B-54136E - Symbolic FAPT DRILL Operator's Manual B-54138E - *Symbolic FAPT TURN Operator's Manual B-66025E/01 (for System P Mark II) - - -Others - - - Title Part Number - ----------------------------------------------------- - *Symbolic FAPT TURN Operator's Handbook B-53034E (for System P Model D) - FANUC CASSETTE Operator's Manual B-53484E - FAPT DIE-II Part program examples B-54123E - FAPT TURN/MILL/CUT Part program examples B-54128E - Symbolic FAPT TURN Operator's Handbook B-54133E - System P-Model G Operator's Handbook B-54158E - *System P-Model G Maintenance Manual B-54159E/01 - *FANUC PPR Operator's Manual B-54584E/01 - -Note the handbooks are pocket-sized 8" long by 3 1/2" wide and approximately 50 pages. - - -The unit has it's own dedicated keyboard with many special keys. -The keyboard clips to the main box and is the top cover when the main box is transported. -The keyboard layout is shown below. - -|------------------------------------------------------------------------------| -| | -| LOAD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 R0 R1 R2 R3 | -| | -| | -| ! " # $ % & ' ( ) = | -| K0 1 2 3 4 5 6 7 8 9 0 - ^ Y DEL 7 8 9 + | (Y is Japanese Yen sign) -| | -| | -| K1 CAN Q W E R T Y U I O P @ [ NL BS 4 5 6 - | (NL means NEXT LINE, BS is backspace) -| | (NL is equivalent to return or enter and) -| + * | (forces the cursor to move to the next data entry point) -| K2 UC A S D F G H J K L ; : ] UC 1 2 3 x | (UC is uppercase) -| | -| < > ? | -| K3 LC Z X C V B N M , . / - LC 0 , . / | (LC is lowercase) -| | -| | -| _S__P__A__C__E__B__A__R_ _N__L_ | -| | -|------------------------------------------------------------------------------| - -On the numeric keypad there are directional arrows on numbers 1 2 3 4 6 7 8 9 -1 3 7 9 have arrows pointing South West, South East, North West, North East. -2 4 6 8 have arrows pointing down, left, right and up. -5 is the center and has no additional markings on it. -Number 0 has an anti-clockwise 180 degrees arc with an arrow at the end and . has -a clockwise 180 degrees arc with an arrow at the end. -These keys are the 'Symbolic' keys. - -The F-keys and R-keys are programmed by the software that is running on the system. -The F-keys act like SPDT switches and can be toggled either off or on. -When they are on, a LED in the center of the key lights. -For Symbolic FAPT TURN these keys are pre-programmed as follows..... - -F0 - ON: Sets the backwards direction when using the R1 key. - OFF: Sets the forwards direction when using the R1 key. Default is OFF. -F1 - ON: Makes the whole screen the graphic area. - OFF: Auto-calc the graphic area so the graphic does not overlap the text. Default is OFF. -F2 - ON: Shows the parts figure (graphics). Default is ON. - OFF: Does not show the parts figure. -F3 - ON: Display the NC G-Code data on screen. Default is ON. - OFF: Does not display the NC G-Code data on screen. -F4 - ON: Printer ON. - OFF: Printer OFF. The printer can be switched on or off any time. When enabled - everything displayed on the screen will also print on the printer. Default is OFF. -F5 - ON: Stops execution of the NC G-Code data before each process begins. Keyboard input additions - can also be done at this time. To continue press NL. - OFF: Program execution continues to the end. Default is OFF. -F6 - ON: Outputs the NC G-Code data to a separately selected medium (floppy/cassette or paper tape) - OFF: No output to additional medium. Default is OFF. -F7 - ON: Stops each time a line of NC G-Code data is output. This is equivalent to Single Block on a CNC Machine. - To continue press NL. - OFF: Program execution continues to the end. Default is OFF. -F8 - -F9 - -F10- ON: Sends the part figure graphic and NC G-Code data to the XY plotter - OFF: No output to XY plotter -F11- -F12- -F13- -F14- -F15- - -The function of the R-keys changes depending on the application and the menu shown on the screen. -The R-keys are used for tasks within the current screen so the function of the R-keys is always -displayed on screen at all times. -The initial Symbolic FAPT TURN settings for the R-keys are.... -R0 - FAPT Execution -R1 - Family Program -R2 - Setting -R3 - Auxiliary Work - - -Box Layout (top view) ----------- - -A08B-0033-B001 (Color Version from 1985) -A08B-0031-B001 (Mono Version from 1983) -A08B-0031-B002 (Mono Version from 1984) -|--------------------------------------------| -| ------------MAIN PCB---------------------- | -| -----------SUB-PCB----------- | | -| | | -| |-----------------------| | | -| | | | | -| | FANUC 12" COLOR | P | -| | CRT UNIT | O | -| | A61L-0001-0078 | W | -| | | E | -| | | |---------| R | -| | | |FANUC | | | -| | OR | |FDD UNIT | P | -| | | |A87l-0001| C | -| | | |-0026 | B | -| | FANUC 12" MONO | | | | | -| | CRT UNIT | |5 1/4" | | | -| | A61L-0001-0073 | |FLOPPY | | -| | | |DRIVES | | -| | | |x2 | | -| |-----------------------| |---------| | -|--------------------------------------------| -Notes: - The CRT tube in the color version is a Matsushita 320DHB22. Input voltage is 110V AC - The CRT tube in the mono version is a Hitachi 310KEB31. Input voltage is 24V DC and B+ is 11.0V - The mono version does not have a SUB PCB - The power PCB is identical for both color and mono versions - - -Main PCB Layout (for color version) ---------------- - -A20B-1000-0710/03B -|-------------------------------------------| -| CNF CNE CND CNC CNB CNA | -| VR1 ^ | -| JUMPERS XXXXXXXXX| -| % MB15541 XXXXXXXXXXXXXXXXXX| -| XXXXXXXXXXXXXXXXXX| -| 8087-3 D8253 XXXXXXXXXXXXXXXXXX| -| 8086-2 D765 D8253 XXXXXXXXX| -| D8257 | -|15MHz D8259 D8259 D8251 D8251 | -|D8284 040_001A.13A D8251 D8251 | -| 040_002A.15A VR2 CN2 CN1 | -| CN7 CN6 CN5 CN4 CN3 | -|-------------------------------------------| -Notes: - D8086 - Intel 8086-2 CPU. Clock input 5.000MHz [15/3] - D8087 - Intel 8087-3 x87 Floating-Point Co-Processor. Clock input 5.000MHz [15/3] - XXXXXXX - Fujitsu MB8265-15 65536 x1-bit DRAM (72 chips total) - MB15541 - Fujitsu MB15541 Custom Chip - D765 - NEC D765 Single/Double Density Floppy-Disk Controller. Clock input 4.000MHz [16/4] - D8251 - Intel D8251 Programmable Communications Interface (USART) - D8253 - NEC D8253 Programmable Interval Timer. Clock input 1.25MHz [15/12] - D8257 - NEC D8257 Programmable DMA Controller. Clock input 3.000MHz [15/5] - D8259 - NEC D8259 Programmable Interrupt Controller - D8284 - Intel D8284 Clock Generator and Driver for 8086/8088 Processors - A40_00* - Fujitsu MBM2764 8k x8-bit EPROM - VR1 - Potentiometer to adjust pulse width of floppy disk control unit - VR2 - Potentiometer to adjust screen brightness - ^ - 3 chips marked Y-E Data Fujitsu - MB4393 - MB14324 - MB14323 - % - Unknown 20-pin Ceramic DIP chip with heat-sink (likely to be Intel 8288 Bus Controller) - CNA - 50-pin flat cable joining to Sub PCB - CNB - 50-pin flat cable joining to Sub PCB - CNC - 6-pin power cable joining to Sub PCB - CND - 34-pin flat cable joining to FDD Unit - CNE - Fanuc Honda MR-50 50-pin female connector for factory testing (not used) - CNF - Power input connector - CN1 - 25-pin Female D-type connector. (for RS232 external peripherals \ CNC Machine, - CN2 - 25-pin Female D-type connector. (for RS232 external peripherals | PPR Unit, X-Y Plotter, - CN3 - 25-pin Female D-type connector. (for RS232 external peripherals | Tablet, - CN4 - 25-pin Female D-type connector. (for RS232 external peripherals / Cassette Adapter etc (connections in any order) - CN5 - Fanuc Honda MR-50 50-pin female connector (probably for external connection of the Fanuc Program File Unit) - CN6 - Fanuc Honda MR-20 20-pin female connector for the keyboard - CN7 - Fanuc Honda MR-20 20-pin male connector. Specification says 'not used'. Video signals are present on - the connector so it is probably used for an external monitor - JUMPERS - 15 2-pin jumpers labelled S1 to S15. S2, S3 & S4 are open and the others are shorted - - -Sub PCB Layout (for color version) --------------- - -A20B-1000-0720/02B -|--------------------------------| -| CNA CNB CNC CND | -| | -| MB15542 CNE| -| | -| HD6845S D8085| -| 16MHz | -| | -| X | -| XXXXXXXX | -| XXXXXXXX | -| XXXXXXXX 6264 A41_010B.28B| -| 6264 A41_020A.30B| -|--------------------------------| -Notes: - D8085 - NEC D8085A-2 CPU. Clock input 8.000MHz [16/2] - Note 8085 has internal /2 divider so actual clock speed is 4.000MHz - HD6845S - Hitachi HD6845S / HD46505S CRT Controller. Clock input 2.000MHz [16/8] - 6264 - Hitachi HM6264P-15 8k x 8-bit SRAM - XXXXXXX - Fujitsu MB8265-15 65536 x1-bit DRAM (25 chips total) - MB15542 - Fujitsu MB15542 Custom Chip - A41_010B- Intel D27128 16k x8-bit EPROM - A42_020A- Hitachi 27256G 32k x8-bit EPROM - CNA - 50-pin flat cable joining to Main PCB - CNB - 50-pin flat cable joining to Main PCB - CNC - 6-pin power cable joining to Main PCB - CND - 20-pin flat cable joining to CRT Unit (video output) - CNE - Fanuc Honda MR-50 50-pin male connector for factory testing (not used) - HSync - 22.7273kHz - VSync - 54.6330Hz - - -Main PCB Layout (for mono version) ---------------- - -A20B-1000-0140/09F -|-------------------------------------------| -| CN10 CN9 VR1 CN8 | -| 6116 S3 ^ | -| A22_020B.5G % D765 XXXXXXXXX| -| 16MHz MB15542 MB15541 D8257 XXXXXXXXX| -| S4 15MHz D8284 XXXXXXXXX| -| 8085-2 HD6845S 8087 D8259 XXXXXXXXX| -| CN12 A21_010F.17D 8086 D8253 A25_001A.33E| -| CN11 S2 A25_002A.35E | -| S1 D8251 D8251 D39 | -| D8251 D8251 S5 S6 S7| -| YYYYYYYYY VR2 D8253 CN2 CN1 | -| CN7 CN6 CN5 CN4 CN3 | -|-------------------------------------------| -Notes: - D8086 - Intel 8086-2 CPU. Clock input 5.000MHz [15/3] - D8087 - Intel 8087-3 x87 Floating-Point Co-Processor. Clock input 5.000MHz [15/3] - D8085 - NEC D8085A-2 CPU. Clock input 8.000MHz [16/2] - Note 8085 has internal /2 divider so actual clock speed is 4.000MHz - HD6845S - Hitachi HD6845S / HD46505S CRT Controller. Clock input 2.000MHz [16/8] - XXXXXXX - Fujitsu MB8265-15 65536 x1-bit DRAM (36 chips total) - YYYYYYY - Fujitsu MB8265-15 65536 x1-bit DRAM (9 chips total) - 6116 - Hitachi HM6116P-3 2k x 8-bit SRAM - MB15541 - Fujitsu MB15541 Custom Chip - MB15542 - Fujitsu MB15542 Custom Chip - D765 - NEC D765 Single/Double Density Floppy-Disk Controller. Clock input 4.000MHz [16/4] - D8251 - Intel D8251 Programmable Communications Interface (USART) - D8253 - NEC D8253 Programmable Interval Timer. Clock input 1.25MHz [15/12] - D8257 - NEC D8257 Programmable DMA Controller. Clock input 3.000MHz [15/5] - D8259 - NEC D8259 Programmable Interrupt Controller - D8284 - Intel D8284 Clock Generator and Driver for 8086/8088 Processors - A2* - Hitachi HN482764G 8k x8-bit EPROM - VR1 - Potentiometer to adjust pulse width of floppy disk control unit - VR2 - Potentiometer to adjust screen brightness - ^ - 3 chips marked Y-E Data Fujitsu - MB4393 - MB14324 - MB14323 - % - Unknown 20-pin Ceramic DIP chip with heat-sink (likely to be Intel 8288 Bus Controller) - CN1 - 25-pin Female D-type connector. (for RS232 external peripherals \ CNC Machine, - CN2 - 25-pin Female D-type connector. (for RS232 external peripherals | PPR Unit, X-Y Plotter, - CN3 - 25-pin Female D-type connector. (for RS232 external peripherals | Tablet, - CN4 - 25-pin Female D-type connector. (for RS232 external peripherals / Cassette Adapter etc (connections in any order) - CN5 - Fanuc Honda MR-50 50-pin female connector (probably for external connection of the Fanuc Program File Unit) - CN6 - Fanuc Honda MR-20 20-pin female connector for the keyboard - CN7 - Fanuc Honda MR-20 20-pin male. Specification says 'not used' and no signals are present on the connector - CN8 - 20-pin flat cable joining to CRT Unit (video output) - CN9 - 34-pin flat cable joining to FDD Unit - CN10 - Power input connector - CN11/12 - Fanuc Honda MR-50 50-pin female connector for factory testing (not used) - Sx - 7 2-pin jumpers (S1 to S7). S2, S3 & S4 are open and the others are shorted - D39 - Bank of 8 2-pin jumpers vertically orientated. 2 and 7 are shorted and the others are open - - -Block Diagram -------------- -Below is the block diagram shown in the System P-Model G Maintenance Manual, relating to the mono version. -The arrows denote direction of data flow. - - |-------| |--------| |----------------| - |Sub CPU| |Main CPU|<---->|Math Coprocessor| - |-------| |--------| |----------------| - /\ /\ /\ - | | | - | \/ \/ - |-----| | |------------------| - |EPROM|<--->| /\ - |-----| | |---------------| | |----------------| - | | Common memory |<---------------------------------->|<--->|RS232C interface|---CN1 - |<-------->|===============| | |----------------| - | /-->| Graphic memory|------| | - | | |---------------| | | |----------------| - | | | |--------| |<--->|RS232C interface|---CN2 - | | | | BOOT |<-------->| |----------------| - | | | | EPROM | | - | | |----------------| | |--------| | |----------------| - |<-----|-->|Character memory|--| | |<--->|RS232C interface|---CN3 - | |-->|----------------| | | |--------| | |----------------| - | | | | |Main RAM|<-------->| - | | | | |--------| | |----------------| - | | | | |<--->|RS232C interface|---CN4 - | | | | | |----------------| -|---------| | | \/ \/ | -|Keyboard | \/ \---|---------------------------| | |-----------------| CN9 |--------| -|interface|<->|<-------->| CRT control circuit | |<--->|Floppy controller|---O---|FDD UNIT| -|----|----| |-------------|-------------| | |-----------------| |--------| - | | | - | | \/ - O CN6 O CN8 O CN5 - | | - | | - |---|----| |----|----| - |Keyboard| | Screen | - |--------| |---------| - - TODO: - - Is the VRAM hookup anything like correct? - - Hookup enough keyboard to get it to boot a floppy, the FAPT DOCTOR - program will be invaluable to answering many questions. - - Shared RAM is 8k, but there are 2 6264s on the sub board. Is shared RAM - banked? - - To boot a floppy put "bp fc5fa,1,{ip=c682;g}" and "bp fc6d7,1,{ip=c755;g}" - into the debugger. - - At NMI: f8008 must have bit 7 clear and bit 6 set (e008 on 8085) - f8009 must not equal 0x01 (e009 on 8085) - - 8085 sets f8008 to keyboard row 0 AND 0xf3 - " " f8009 to keyboard row 1 - -****************************************************************************/ - -#include "emu.h" -#include "cpu/i86/i86.h" -#include "cpu/i8085/i8085.h" -#include "machine/ram.h" -#include "machine/i8251.h" -#include "machine/i8257.h" -#include "machine/upd765.h" -#include "machine/pic8259.h" -#include "machine/pit8253.h" -#include "machine/upd765.h" -#include "video/mc6845.h" -#include "formats/imd_dsk.h" - -#define MAINCPU_TAG "maincpu" -#define SUBCPU_TAG "subcpu" -#define USART0_TAG "usart0" -#define USART1_TAG "usart1" -#define USART2_TAG "usart2" -#define USART3_TAG "usart3" -#define PIT0_TAG "pit0" -#define PIT1_TAG "pit1" -#define PIC0_TAG "pic0" -#define PIC1_TAG "pic1" -#define DMAC_TAG "dmac" -#define CRTC_TAG "crtc" -#define FDC_TAG "fdc" -#define SCREEN_TAG "screen" -#define SHARED_TAG "shared" -#define CHARGEN_TAG "chargen" - -class fanucspmg_state : public driver_device -{ -public: - fanucspmg_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, MAINCPU_TAG) - , m_subcpu(*this, SUBCPU_TAG) - , m_usart0(*this, USART0_TAG) - , m_usart1(*this, USART1_TAG) - , m_usart2(*this, USART2_TAG) - , m_usart3(*this, USART3_TAG) - , m_pit0(*this, PIT0_TAG) - , m_pit1(*this, PIT1_TAG) - , m_pic0(*this, PIC0_TAG) - , m_pic1(*this, PIC1_TAG) - , m_dmac(*this, DMAC_TAG) - , m_crtc(*this, CRTC_TAG) - , m_fdc(*this, FDC_TAG) - , m_shared(*this, SHARED_TAG) - , m_chargen(*this, CHARGEN_TAG) - { } - - required_device<i8086_cpu_device> m_maincpu; - required_device<i8085a_cpu_device> m_subcpu; - required_device<i8251_device> m_usart0; - required_device<i8251_device> m_usart1; - required_device<i8251_device> m_usart2; - required_device<i8251_device> m_usart3; - required_device<pit8253_device> m_pit0; - required_device<pit8253_device> m_pit1; - required_device<pic8259_device> m_pic0; - required_device<pic8259_device> m_pic1; - required_device<i8257_device> m_dmac; - required_device<mc6845_device> m_crtc; - required_device<upd765a_device> m_fdc; - required_shared_ptr<UINT8> m_shared; - required_memory_region m_chargen; - - DECLARE_FLOPPY_FORMATS( floppy_formats ); - - DECLARE_READ8_MEMBER(memory_read_byte); - DECLARE_WRITE8_MEMBER(memory_write_byte); - DECLARE_READ8_MEMBER(shared_r); - DECLARE_WRITE8_MEMBER(shared_w); - DECLARE_READ8_MEMBER(vram1_r); - DECLARE_WRITE8_MEMBER(vram1_w); - DECLARE_READ8_MEMBER(vram2_r); - DECLARE_WRITE8_MEMBER(vram2_w); - DECLARE_WRITE8_MEMBER(vram_bank_w); - DECLARE_READ8_MEMBER(vblank_ack_r); - DECLARE_WRITE8_MEMBER(vbl_ctrl_w); - DECLARE_WRITE8_MEMBER(keyboard_row_w); - DECLARE_READ8_MEMBER(keyboard_r); - DECLARE_WRITE8_MEMBER(video_ctrl_w); - DECLARE_READ8_MEMBER(fdcdma_r); - DECLARE_WRITE8_MEMBER(fdcdma_w); - DECLARE_READ8_MEMBER(get_slave_ack); - DECLARE_WRITE8_MEMBER(dma_page_w); - - DECLARE_READ16_MEMBER(magic_r); - - DECLARE_WRITE_LINE_MEMBER(vsync_w); - DECLARE_WRITE_LINE_MEMBER(tc_w); - DECLARE_WRITE_LINE_MEMBER(hrq_w); - - MC6845_UPDATE_ROW(crtc_update_row); - MC6845_UPDATE_ROW(crtc_update_row_mono); - - DECLARE_DRIVER_INIT(fanucspmg); - - UINT8 m_vram[24576]; - UINT8 m_video_ctrl; - -private: - virtual void machine_reset(); - INT32 m_vram_bank; - UINT8 m_vbl_ctrl; - UINT8 m_keyboard_row; - UINT8 m_vbl_stat; - UINT8 m_dma_page; -}; - -DRIVER_INIT_MEMBER(fanucspmg_state, fanucspmg) -{ - memset(m_vram, 0, sizeof(m_vram)); - - save_item(NAME(m_vram)); - save_item(NAME(m_vram_bank)); - save_item(NAME(m_vbl_ctrl)); - save_item(NAME(m_keyboard_row)); - save_item(NAME(m_video_ctrl)); -} - -READ8_MEMBER(fanucspmg_state::shared_r) -{ - return m_shared[offset]; -} - -WRITE8_MEMBER(fanucspmg_state::shared_w) -{ - m_shared[offset] = data; -} - -READ8_MEMBER(fanucspmg_state::get_slave_ack) -{ - if(offset == 7) - return m_pic1->acknowledge(); - - return 0x00; -} - -WRITE_LINE_MEMBER(fanucspmg_state::tc_w) -{ - m_fdc->tc_w(state); -} - -WRITE_LINE_MEMBER(fanucspmg_state::hrq_w) -{ - m_maincpu->set_input_line(INPUT_LINE_HALT, state); - m_dmac->hlda_w(state); -} - -READ8_MEMBER(fanucspmg_state::fdcdma_r) -{ - return m_fdc->dma_r(); -} - -WRITE8_MEMBER(fanucspmg_state::fdcdma_w) -{ - m_fdc->dma_w(data); -} - -WRITE8_MEMBER(fanucspmg_state::dma_page_w) -{ - floppy_image_device *floppy0 = m_fdc->subdevice<floppy_connector>("0")->get_device(); - floppy_image_device *floppy1 = m_fdc->subdevice<floppy_connector>("1")->get_device(); - // verify - floppy0->mon_w(!(data & 2)); - floppy1->mon_w(!(data & 2)); - - m_dma_page = (data >> 2) & 0xf; -} - -READ16_MEMBER(fanucspmg_state::magic_r) -{ - return 0x0041; // 31 = memory error -} - -static ADDRESS_MAP_START(maincpu_mem, AS_PROGRAM, 16, fanucspmg_state) - AM_RANGE(0x00000, 0x7ffff) AM_RAM // main RAM - - AM_RANGE(0x80000, 0x81fff) AM_RAM // believed to be shared RAM with a CPU inside the Program File - AM_RANGE(0x88000, 0x88001) AM_NOP // Program File "ready" bit - - AM_RANGE(0xf0000, 0xf0003) AM_DEVREADWRITE8(PIC0_TAG, pic8259_device, read, write, 0x00ff) - AM_RANGE(0xf0004, 0xf0007) AM_DEVICE8(FDC_TAG, upd765a_device, map, 0x00ff) - AM_RANGE(0xf0008, 0xf000f) AM_DEVREADWRITE8(PIT0_TAG, pit8253_device, read, write, 0x00ff) - AM_RANGE(0xf0010, 0xf0011) AM_DEVREADWRITE8(USART0_TAG, i8251_device, data_r, data_w, 0x00ff) - AM_RANGE(0xf0012, 0xf0013) AM_DEVREADWRITE8(USART0_TAG, i8251_device, status_r, control_w, 0x00ff) - AM_RANGE(0xf0014, 0xf0015) AM_DEVREADWRITE8(USART1_TAG, i8251_device, data_r, data_w, 0x00ff) - AM_RANGE(0xf0016, 0xf0017) AM_DEVREADWRITE8(USART1_TAG, i8251_device, status_r, control_w, 0x00ff) - AM_RANGE(0xf0018, 0xf0019) AM_DEVREADWRITE8(USART2_TAG, i8251_device, data_r, data_w, 0x00ff) - AM_RANGE(0xf001a, 0xf001b) AM_DEVREADWRITE8(USART2_TAG, i8251_device, status_r, control_w, 0x00ff) - AM_RANGE(0xf001c, 0xf001d) AM_DEVREADWRITE8(USART3_TAG, i8251_device, data_r, data_w, 0x00ff) - AM_RANGE(0xf001e, 0xf001f) AM_DEVREADWRITE8(USART3_TAG, i8251_device, status_r, control_w, 0x00ff) - AM_RANGE(0xf0020, 0xf0029) AM_DEVREADWRITE8(DMAC_TAG, i8257_device, read, write, 0xffff) - AM_RANGE(0xf0042, 0xf0043) AM_READ(magic_r) - AM_RANGE(0xf0046, 0xf0047) AM_WRITE8(dma_page_w, 0x00ff) - AM_RANGE(0xf0048, 0xf004f) AM_DEVREADWRITE8(PIT1_TAG, pit8253_device, read, write, 0x00ff) - AM_RANGE(0xf2000, 0xf2003) AM_DEVREADWRITE8(PIC1_TAG, pic8259_device, read, write, 0x00ff) - - AM_RANGE(0xf8000, 0xf9fff) AM_READWRITE8(shared_r, shared_w, 0xffff) - AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION(MAINCPU_TAG, 0) -ADDRESS_MAP_END - -static ADDRESS_MAP_START(maincpu_io, AS_IO, 16, fanucspmg_state) -ADDRESS_MAP_END - -WRITE_LINE_MEMBER(fanucspmg_state::vsync_w) -{ - if ((m_vbl_ctrl & 0x08) == 0x08) - { - if (state == ASSERT_LINE) - { - m_subcpu->set_input_line(I8085_RST75_LINE, ASSERT_LINE); - } - } - - m_vbl_stat = (state == ASSERT_LINE) ? 1 : 0; -} - -READ8_MEMBER(fanucspmg_state::vram1_r) -{ - return m_vram[m_vram_bank + offset]; -} - -WRITE8_MEMBER(fanucspmg_state::vram1_w) -{ - m_vram[m_vram_bank + offset] = data; -} - -READ8_MEMBER(fanucspmg_state::vram2_r) -{ - return m_vram[m_vram_bank + offset + 0x600]; -} - -WRITE8_MEMBER(fanucspmg_state::vram2_w) -{ - m_vram[m_vram_bank + offset + 0x600] = data; -} - -WRITE8_MEMBER(fanucspmg_state::vram_bank_w) -{ - m_vram_bank = (data & 7) * 0xc00; -} - -READ8_MEMBER(fanucspmg_state::vblank_ack_r) -{ - m_subcpu->set_input_line(I8085_RST75_LINE, CLEAR_LINE); - - return 0xff; -} - -// bit 1 is unknown -// bit 3 appears to enable vblank IRQs -WRITE8_MEMBER(fanucspmg_state::vbl_ctrl_w) -{ - m_vbl_ctrl = data; -} - -// row 2: raising a bit toggles the corresponding bit at 500a -// row 3: raising a bit toggles the corresponding bit at 500b -WRITE8_MEMBER(fanucspmg_state::keyboard_row_w) -{ - m_keyboard_row = data; -} - -READ8_MEMBER(fanucspmg_state::keyboard_r) -{ - return 0; -} - -// bit 0 is set when clearing VRAM -// bit 1 is display enable -WRITE8_MEMBER(fanucspmg_state::video_ctrl_w) -{ - m_video_ctrl = data; -} - -static ADDRESS_MAP_START(subcpu_mem, AS_PROGRAM, 8, fanucspmg_state) - AM_RANGE(0x0000, 0x3fff) AM_ROM AM_REGION(SUBCPU_TAG, 0) - - AM_RANGE(0x4000, 0x45ff) AM_READWRITE(vram1_r, vram1_w) - AM_RANGE(0x4800, 0x4dff) AM_READWRITE(vram2_r, vram2_w) - - AM_RANGE(0x5000, 0x5000) AM_DEVREADWRITE(CRTC_TAG, mc6845_device, status_r, address_w) - AM_RANGE(0x5001, 0x5001) AM_DEVREADWRITE(CRTC_TAG, mc6845_device, register_r, register_w) - AM_RANGE(0x5008, 0x5008) AM_WRITE(keyboard_row_w) - AM_RANGE(0x5009, 0x5009) AM_READ(keyboard_r) - AM_RANGE(0x500a, 0x500b) AM_WRITENOP // keyboard rows 2 and 3 control what's written here. dip switches? - AM_RANGE(0x500c, 0x500c) AM_WRITE(vbl_ctrl_w) - AM_RANGE(0x500d, 0x500d) AM_WRITE(vram_bank_w) - AM_RANGE(0x500e, 0x500e) AM_READ(vblank_ack_r) - AM_RANGE(0x5018, 0x5018) AM_WRITE(video_ctrl_w) - - AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE(SHARED_TAG) // shared RAM -ADDRESS_MAP_END - -/* Input ports */ -static INPUT_PORTS_START( fanucspmg ) -INPUT_PORTS_END - -void fanucspmg_state::machine_reset() -{ - m_vbl_ctrl = 0; - m_vram_bank = 0; - m_video_ctrl = 0; - m_dma_page = 0; -} - -READ8_MEMBER(fanucspmg_state::memory_read_byte) -{ - address_space& prog_space = m_maincpu->space(AS_PROGRAM); - return prog_space.read_byte(offset | (m_dma_page << 16)); -} - -WRITE8_MEMBER(fanucspmg_state::memory_write_byte) -{ - address_space& prog_space = m_maincpu->space(AS_PROGRAM); - return prog_space.write_byte(offset | (m_dma_page << 16), data); -} - -MC6845_UPDATE_ROW( fanucspmg_state::crtc_update_row ) -{ - UINT32 *p = &bitmap.pix32(y); - int i; - UINT8 *chargen = m_chargen->base(); - - for ( i = 0; i < x_count; i++ ) - { - UINT16 offset = ( ma + i ); - - if (m_video_ctrl & 0x02) - { - if (offset <= 0x5ff) - { - UINT8 chr = m_vram[offset + 0x600]; - UINT8 attr = m_vram[offset]; - UINT8 data = chargen[ chr + (ra * 256) ]; - UINT32 fg = 0; - UINT32 bg = 0; - - if (attr & 0x20) fg |= 0xff0000; - if (attr & 0x40) fg |= 0x00ff00; - if (attr & 0x80) fg |= 0x0000ff; - - *p++ = ( data & 0x01 ) ? fg : bg; - *p++ = ( data & 0x02 ) ? fg : bg; - *p++ = ( data & 0x04 ) ? fg : bg; - *p++ = ( data & 0x08 ) ? fg : bg; - *p++ = ( data & 0x10 ) ? fg : bg; - *p++ = ( data & 0x20 ) ? fg : bg; - *p++ = ( data & 0x40 ) ? fg : bg; - *p++ = ( data & 0x80 ) ? fg : bg; - } - } - else - { - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - } - } -} - -MC6845_UPDATE_ROW( fanucspmg_state::crtc_update_row_mono ) -{ - UINT32 *p = &bitmap.pix32(y); - int i; - UINT8 *chargen = m_chargen->base(); - - for ( i = 0; i < x_count; i++ ) - { - UINT16 offset = ( ma + i ); - - if (m_video_ctrl & 0x02) - { - if (offset <= 0x5ff) - { - UINT8 chr = m_vram[offset + 0x600]; -// UINT8 attr = m_vram[offset]; - UINT8 data = chargen[ chr + (ra * 256) ]; - UINT32 fg = 0xff00; - UINT32 bg = 0; - - *p++ = ( data & 0x01 ) ? fg : bg; - *p++ = ( data & 0x02 ) ? fg : bg; - *p++ = ( data & 0x04 ) ? fg : bg; - *p++ = ( data & 0x08 ) ? fg : bg; - *p++ = ( data & 0x10 ) ? fg : bg; - *p++ = ( data & 0x20 ) ? fg : bg; - *p++ = ( data & 0x40 ) ? fg : bg; - *p++ = ( data & 0x80 ) ? fg : bg; - } - } - else - { - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - *p++ = 0; - } - } -} - -static SLOT_INTERFACE_START( fanuc_floppies ) - SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) -SLOT_INTERFACE_END - -FLOPPY_FORMATS_MEMBER( fanucspmg_state::floppy_formats ) - FLOPPY_IMD_FORMAT -FLOPPY_FORMATS_END - -static MACHINE_CONFIG_START( fanucspmg, fanucspmg_state ) - /* basic machine hardware */ - MCFG_CPU_ADD(MAINCPU_TAG, I8086, XTAL_15MHz/3) - MCFG_CPU_PROGRAM_MAP(maincpu_mem) - MCFG_CPU_IO_MAP(maincpu_io) - MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE(PIC0_TAG, pic8259_device, inta_cb) - - MCFG_CPU_ADD(SUBCPU_TAG, I8085A, XTAL_16MHz/2/2) - MCFG_CPU_PROGRAM_MAP(subcpu_mem) - - MCFG_DEVICE_ADD(USART0_TAG, I8251, 0) - MCFG_DEVICE_ADD(USART1_TAG, I8251, 0) - MCFG_DEVICE_ADD(USART2_TAG, I8251, 0) - MCFG_DEVICE_ADD(USART3_TAG, I8251, 0) - - MCFG_DEVICE_ADD(PIT0_TAG, PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL_15MHz/12) - MCFG_PIT8253_CLK1(XTAL_15MHz/12) - MCFG_PIT8253_CLK2(XTAL_15MHz/12) - MCFG_DEVICE_ADD(PIT1_TAG, PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL_15MHz/12) - MCFG_PIT8253_CLK1(XTAL_15MHz/12) - MCFG_PIT8253_CLK2(XTAL_15MHz/12) - - MCFG_DEVICE_ADD(DMAC_TAG, I8257, XTAL_15MHz / 5) - MCFG_I8257_OUT_HRQ_CB(WRITELINE(fanucspmg_state, hrq_w)) - MCFG_I8257_OUT_TC_CB(WRITELINE(fanucspmg_state, tc_w)) - MCFG_I8257_IN_MEMR_CB(READ8(fanucspmg_state, memory_read_byte)) - MCFG_I8257_OUT_MEMW_CB(WRITE8(fanucspmg_state, memory_write_byte)) - MCFG_I8257_IN_IOR_0_CB(READ8(fanucspmg_state, fdcdma_r)) - MCFG_I8257_OUT_IOW_0_CB(WRITE8(fanucspmg_state, fdcdma_w)) - - MCFG_PIC8259_ADD(PIC0_TAG, INPUTLINE("maincpu", 0), VCC, READ8(fanucspmg_state, get_slave_ack)) - MCFG_PIC8259_ADD(PIC1_TAG, DEVWRITELINE(PIC0_TAG, pic8259_device, ir7_w), GND, NULL) - - MCFG_UPD765A_ADD(FDC_TAG, true, true) - MCFG_UPD765_INTRQ_CALLBACK(DEVWRITELINE(PIC0_TAG, pic8259_device, ir3_w)) - MCFG_UPD765_DRQ_CALLBACK(DEVWRITELINE(DMAC_TAG, i8257_device, dreq0_w)) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", fanuc_floppies, "525dd", fanucspmg_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":1", fanuc_floppies, "525dd", fanucspmg_state::floppy_formats) - - MCFG_SCREEN_ADD( SCREEN_TAG, RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL_15MHz, 640, 0, 512, 390, 0, 384 ) - MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) - - MCFG_MC6845_ADD( CRTC_TAG, HD6845, SCREEN_TAG, XTAL_8MHz/2) - MCFG_MC6845_SHOW_BORDER_AREA(false) - MCFG_MC6845_CHAR_WIDTH(8) - MCFG_MC6845_UPDATE_ROW_CB(fanucspmg_state, crtc_update_row) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(fanucspmg_state, vsync_w)) -MACHINE_CONFIG_END - -static MACHINE_CONFIG_DERIVED( fanucspmgm, fanucspmg ) - MCFG_DEVICE_REMOVE( CRTC_TAG ) - - MCFG_MC6845_ADD( CRTC_TAG, HD6845, SCREEN_TAG, XTAL_8MHz/2) - MCFG_MC6845_SHOW_BORDER_AREA(false) - MCFG_MC6845_CHAR_WIDTH(8) - MCFG_MC6845_UPDATE_ROW_CB(fanucspmg_state, crtc_update_row_mono) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(fanucspmg_state, vsync_w)) -MACHINE_CONFIG_END - -/* ROM definition */ -ROM_START( fanucspg ) - ROM_REGION(0x4000, MAINCPU_TAG, 0) - ROM_LOAD16_BYTE( "a40_001a.13a", 0x000000, 0x002000, CRC(1b8ac8ef) SHA1(309c081d25270e082ebf846b4f73cef76b52d991) ) - ROM_LOAD16_BYTE( "a40_002a.15a", 0x000001, 0x002000, CRC(587ae652) SHA1(ebc5a4c3d64ab9d6dd4d5355f85bc894e7294e17) ) - - ROM_REGION(0x4000, SUBCPU_TAG, 0) - ROM_LOAD( "a41_010b.28b", 0x000000, 0x004000, CRC(35a9714f) SHA1(5697b6c4db5adb5702dc1290ecc98758d5fab221) ) - - ROM_REGION(0x8000, CHARGEN_TAG, 0) - ROM_LOAD( "a42_020a.30b", 0x000000, 0x008000, CRC(33eb5962) SHA1(1157a72089ff77e8db9a9a8fcd0f6c32a1374f56) ) -ROM_END - -ROM_START( fanucspgm ) - ROM_REGION(0x4000, MAINCPU_TAG, 0) - ROM_LOAD16_BYTE( "a25_001a.33e", 0x000000, 0x002000, CRC(81159267) SHA1(f5d53cc6e929f57e8c3747f80fc74d4b1643222d) ) - ROM_LOAD16_BYTE( "a25_002a.35e", 0x000001, 0x002000, CRC(4fb82c4d) SHA1(eb75e9a2d3c8e4ad56a74624ee8c52c785bd0da6) ) - - ROM_REGION(0x4000, SUBCPU_TAG, 0) - ROM_LOAD( "a21_010f.17d", 0x000000, 0x002000, CRC(ef192717) SHA1(7fb3f7ca290d2437ae5956700f88c801018ce1cc) ) - - ROM_REGION(0x8000, CHARGEN_TAG, 0) - ROM_LOAD( "a22_020b.5g", 0x000000, 0x002000, CRC(7b5f8e20) SHA1(9de607e541d8aad2d1ea56321270bb8466b16e3d) ) -ROM_END - -/* Driver */ -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1983, fanucspg, 0, 0, fanucspmg, fanucspmg, fanucspmg_state, fanucspmg, "Fanuc", "System P Model G", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -COMP( 1983, fanucspgm, fanucspg, 0, fanucspmgm, fanucspmg, fanucspmg_state, fanucspmg, "Fanuc", "System P Model G (monochrome)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) |