Previous 15994 Revisions Next

r9339 Thursday 7th October, 2010 at 13:25:46 UTC by Curt Coder
[POFO] Implemented parallel and serial interfaces.
[src/mess/drivers]portfoli.c
[src/mess/includes]portfoli.h

src/mess/includes/portfoli.h
r9338r9339
2121   /* interrupt state */
2222   UINT8 ip;                  /* interrupt pending */
2323   UINT8 ie;                  /* interrupt enable */
24   UINT8 sivr;                  /* serial interrupt vector register */
2425
2526   /* counter state */
2627   UINT16 counter;
r9338r9339
3132   /* video state */
3233   UINT8 contrast;
3334
34   /* serial state */
35   UINT8 sivr;                  /* serial interrupt vector register */
35   /* peripheral state */
36   UINT8 pid;                  /* peripheral identification */
3637
3738   /* devices */
3839   running_device *hd61830;
src/mess/drivers/portfoli.c
r9338r9339
2929
3030   TODO:
3131
32   - boot is always cold
32   - clock is running too fast
33   - access violation after OFF command
34   - create chargen ROM from tech manual
3335   - memory error interrupt vector
3436   - i/o port 8051
3537   - screen contrast
3638   - system tick frequency selection (1 or 128 Hz)
3739   - speaker
38   - serial interface
39   - parallel interface
4040   - credit card memory (A:/B:)
4141   - software list
4242
r9338r9339
6767   INT_EXTERNAL
6868};
6969
70enum
71{
72   PID_COMMCARD = 0x00,
73   PID_SERIAL,
74   PID_PARALLEL,
75   PID_PRINTER,
76   PID_MODEM,
77   PID_NONE = 0xff
78};
79
7080static UINT8 INTERRUPT_VECTOR[] = { 0x08, 0x09, 0x00 };
7181
7282//**************************************************************************
r9338r9339
101111}
102112
103113//-------------------------------------------------
114//  irq_status_r - interrupt status read
115//-------------------------------------------------
116
117static READ8_HANDLER( irq_status_r )
118{
119   portfolio_state *state = space->machine->driver_data<portfolio_state>();
120
121   return state->ip;
122}
123
124//-------------------------------------------------
104125//  irq_mask_w - interrupt enable mask
105126//-------------------------------------------------
106127
r9338r9339
123144   portfolio_state *state = space->machine->driver_data<portfolio_state>();
124145
125146   state->sivr = data;
147   //logerror("SIVR %02x\n", data);
126148}
127149
128150//-------------------------------------------------
r9338r9339
277299      bit      description
278300
279301      0     
280      1     
302      1      1=power off
281303      2     
282304      3     
283305      4     
r9338r9339
298320{
299321   /*
300322
301      bit      description
323      bit      signal      description
302324
303325      0     
304326      1     
305327      2     
306328      3     
307329      4     
308      5     
309      6      0=battery low
310      7     
330      5      PDET      1=peripheral connected
331      6      BATD?      0=battery low
332      7               1=cold boot
311333
312334   */
313335
314   return 0xc2;
336   portfolio_state *state = space->machine->driver_data<portfolio_state>();
337
338   UINT8 data = 0;
339
340   /* peripheral detect */
341   data |= (state->pid != PID_NONE) << 5;
342
343   /* battery status */
344   data |= BIT(input_port_read(space->machine, "BATTERY"), 0) << 6;
345
346   return data;
315347}
316348
349//-------------------------------------------------
350//  unknown_w - ?
351//-------------------------------------------------
352
353static WRITE8_HANDLER( unknown_w )
354{
355   //logerror("UNKNOWN %02x\n", data);
356}
357
317358//**************************************************************************
318359//   SYSTEM TIMERS
319360//**************************************************************************
r9338r9339
431472
432473   */
433474
434   return 0xff;
475   portfolio_state *state = space->machine->driver_data<portfolio_state>();
476
477   return state->pid;
435478}
436479
437480//**************************************************************************
r9338r9339
461504   AM_RANGE(0x8020, 0x8020) AM_WRITE(speaker_w)
462505   AM_RANGE(0x8030, 0x8030) AM_WRITE(power_w)
463506   AM_RANGE(0x8040, 0x8041) AM_READWRITE(counter_r, counter_w)
464   AM_RANGE(0x8050, 0x8050) AM_WRITE(irq_mask_w)
465   AM_RANGE(0x8051, 0x8051) AM_READ(battery_r)
507   AM_RANGE(0x8050, 0x8050) AM_READWRITE(irq_status_r, irq_mask_w)
508   AM_RANGE(0x8051, 0x8051) AM_READWRITE(battery_r, unknown_w)
466509   AM_RANGE(0x8060, 0x8060) AM_RAM AM_BASE_MEMBER(portfolio_state, contrast)
467510//   AM_RANGE(0x8070, 0x8077) AM_DEVREADWRITE(M82C50A_TAG, ins8250_r, ins8250_w) Serial Interface
468511//   AM_RANGE(0x8078, 0x807b) AM_DEVREADWRITE(M82C55A_TAG, i8255a_r, i8255a_w) Parallel Interface
r9338r9339
566609   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
567610   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
568611   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
612
613   PORT_START("BATTERY")
614   PORT_CONFNAME( 0x01, 0x01, "Battery Status" )
615   PORT_CONFSETTING( 0x01, DEF_STR( Normal ) )
616   PORT_CONFSETTING( 0x00, "Low Battery" )
617
618   PORT_START("PERIPHERAL")
619   PORT_CONFNAME( 0xff, PID_NONE, "Peripheral" )
620   PORT_CONFSETTING( PID_NONE, DEF_STR( None ) )
621   PORT_CONFSETTING( PID_PARALLEL, "Intelligent Parallel Interface (HPC-101)" )
622   PORT_CONFSETTING( PID_SERIAL, "Serial Interface (HPC-102)" )
569623INPUT_PORTS_END
570624
571625//**************************************************************************
r9338r9339
690744
691745static INS8250_INTERRUPT( i8250_intrpt_w )
692746{
693   trigger_interrupt(device->machine, INT_EXTERNAL);
747//   trigger_interrupt(device->machine, INT_EXTERNAL);
694748}
695749
696750const ins8250_interface i8250_intf =
r9338r9339
752806   /* set initial values */
753807   state->keylatch = 0xff;
754808   state->sivr = 0x2a;
809   state->pid = 0xff;
810
811   /* register for state saving */
812   state_save_register_global(machine, state->ip);
813   state_save_register_global(machine, state->ie);
814   state_save_register_global(machine, state->sivr);
815   state_save_register_global(machine, state->counter);
816   state_save_register_global(machine, state->keylatch);
817   state_save_register_global(machine, state->contrast);
818   state_save_register_global(machine, state->pid);
755819}
756820
821//-------------------------------------------------
822//  MACHINE_RESET( portfolio )
823//-------------------------------------------------
824
825static MACHINE_RESET( portfolio )
826{
827   portfolio_state *state = machine->driver_data<portfolio_state>();
828   address_space *io = cputag_get_address_space(machine, M80C88A_TAG, ADDRESS_SPACE_IO);
829
830   /* peripheral */
831   state->pid = input_port_read(machine, "PERIPHERAL");
832
833   switch (state->pid)
834   {
835   case PID_SERIAL:
836      memory_install_readwrite8_device_handler(io, machine->device(M82C50A_TAG), 0x8070, 0x8077, 0, 0, ins8250_r, ins8250_w);
837      break;
838
839   case PID_PARALLEL:
840      memory_install_readwrite8_device_handler(io, machine->device(M82C55A_TAG), 0x8078, 0x807b, 0, 0, i8255a_r, i8255a_w);
841      break;
842   }
843}
844
757845//**************************************************************************
758846//   MACHINE CONFIGURATION
759847//**************************************************************************
r9338r9339
769857    MDRV_CPU_IO_MAP(portfolio_io)
770858   
771859   MDRV_MACHINE_START(portfolio)
860   MDRV_MACHINE_RESET(portfolio)
772861
773862    /* video hardware */
774863   MDRV_SCREEN_ADD(SCREEN_TAG, LCD)
r9338r9339
853942//**************************************************************************
854943
855944/*    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT       INIT    COMPANY     FULLNAME        FLAGS */
856COMP( 1989, pofo,   0,      0,      portfolio,   portfolio,   0,      "Atari",   "Portfolio",   GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
945COMP( 1989, pofo,   0,      0,      portfolio,   portfolio,   0,      "Atari",   "Portfolio",   GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team