Previous 15994 Revisions Next

r2015 Tuesday 18th March, 2008 at 10:59:06 UTC by Nathan Woods
[SVI318] Cleaned up driver. [Tomas Karlsson]
[docs]messnew.txt
[src/mess/drivers]svi318.c
[src/mess/includes]svi318.h
[src/mess/machine]svi318.c

src/mess/includes/svi318.h
r2014r2015
11/*****************************************************************************
22 *
3 * includes/svi328.h
3 * includes/svi318.h
44 *
55 * Spectravideo SVI-318 and SVI-328
66 *
77 ****************************************************************************/
88
9#ifndef SVI328_H_
10#define SVI328_H_
9#ifndef SVI318_H_
10#define SVI318_H_
1111
12
1312/*----------- defined in machine/svi318.c -----------*/
1413
1514DRIVER_INIT( svi318 );
r2014r2015
2928WRITE8_HANDLER( svi318_writemem3 );
3029WRITE8_HANDLER( svi318_writemem4 );
3130
32READ8_HANDLER( svi318_printer_r );
33WRITE8_HANDLER( svi318_printer_w );
31READ8_HANDLER( svi318_io_ext_r );
32WRITE8_HANDLER( svi318_io_ext_w );
3433
3534READ8_HANDLER( svi318_ppi_r );
3635WRITE8_HANDLER( svi318_ppi_w );
r2014r2015
4039
4140int svi318_cassette_present(int id);
4241
43READ8_HANDLER( svi318_fdc_irqdrq_r );
44WRITE8_HANDLER( svi318_fdc_drive_motor_w );
45WRITE8_HANDLER( svi318_fdc_density_side_w );
4642DEVICE_LOAD( svi318_floppy );
4743
4844MC6845_UPDATE_ROW( svi806_crtc6845_update_row );
49WRITE8_HANDLER( svi806_ram_enable_w );
5045VIDEO_START( svi328_806 );
5146VIDEO_UPDATE( svi328_806 );
5247MACHINE_RESET( svi328_806 );
5348
54
55#endif /* SVI328_H_ */
49#endif /* SVI318_H_ */
src/mess/machine/svi318.c
r2014r2015
2424#include "sound/dac.h"
2525#include "sound/ay8910.h"
2626
27
2827enum {
2928   SVI_INTERNAL   = 0,
3029   SVI_CART      = 1,
r2014r2015
3433
3534typedef struct {
3635   /* general */
37   UINT8   svi318;               /* Are we dealing with an SVI-318 or a SVI-328 model. 0 = 328, 1 = 318 */
36   UINT8   svi318;      /* Are we dealing with an SVI-318 or a SVI-328 model. 0 = 328, 1 = 318 */
3837   /* memory */
3938   UINT8   *empty_bank;
4039   UINT8   bank_switch;
41   UINT8   bank1;
42   UINT8   bank2;
43   UINT8   *bank1_ptr;
44   UINT8   bank1_read_only;
45   UINT8   *bank2_ptr;
46   UINT8   bank2_read_only;
47   UINT8   *bank3_ptr;
48   UINT8   bank3_read_only;
40   UINT8   bankLow;
41   UINT8   bankHigh1;
42   UINT8   *bankLow_ptr;
43   UINT8   bankLow_read_only;
44   UINT8   *bankHigh1_ptr;
45   UINT8   bankHigh1_read_only;
46   UINT8   *bankHigh2_ptr;
47   UINT8   bankHigh2_read_only;
4948   /* printer */
5049   UINT8   prn_data;
5150   UINT8   prn_strobe;
r2014r2015
6665
6766static void svi318_uart8250_interrupt(int nr, int state)
6867{
69   cpunum_set_input_line(Machine, 0, 0, (state ? HOLD_LINE : CLEAR_LINE));
68   if (svi.bankLow != SVI_CART) {
69      cpunum_set_input_line(Machine, 0, 0, (state ? HOLD_LINE : CLEAR_LINE));
70   }
7071}
7172
72static const uart8250_interface svi318_uart8250_interface[1] =
73static void svi318_com_refresh_connected(int serial_port_id)
7374{
75   switch (serial_port_id)
7476   {
77   case 0:   /* Motorola MC14412 modem */
78      uart8250_handshake_in(0, UART8250_HANDSHAKE_IN_CTS|UART8250_HANDSHAKE_IN_DSR|UART8250_INPUTS_RING_INDICATOR|UART8250_INPUTS_DATA_CARRIER_DETECT);
79      break;
80   }
81}
82
83static const uart8250_interface svi318_uart8250_interface[2]=
84{
85   {
7586      TYPE8250,
87      1000000,
88      svi318_uart8250_interrupt,
89      NULL,
90      NULL,
91      svi318_com_refresh_connected
92   },
93   {
94      TYPE8250,
7695      3072000,
7796      svi318_uart8250_interrupt,
7897      NULL,
7998      NULL,
8099      NULL
81   },
100   }
82101};
83102
84103/* Cartridge */
r2014r2015
92111      return IMAGE_VERIFY_FAIL;
93112}
94113
95DEVICE_INIT( svi318_cart ) {
114DEVICE_INIT( svi318_cart )
115{
96116   pcart = NULL;
97117   pcart_rom_size = 0;
98118
r2014r2015
247267
248268/* Printer port */
249269
250WRITE8_HANDLER( svi318_printer_w )
270static WRITE8_HANDLER( svi318_printer_w )
251271{
252272   if (!offset)
253273      svi.prn_data = data;
r2014r2015
260280   }
261281}
262282
263READ8_HANDLER( svi318_printer_r )
283static READ8_HANDLER( svi318_printer_r )
264284{
265285   if (printer_status(image_from_devtype_and_index(IO_PRINTER, 0), 0) )
266286      return 0xfe;
r2014r2015
343363   }
344364}
345365
346WRITE8_HANDLER( svi318_fdc_drive_motor_w )
366static WRITE8_HANDLER( svi318_fdc_drive_motor_w )
347367{
348368   switch (data & 3)
349369   {
r2014r2015
358378   }
359379}
360380
361WRITE8_HANDLER( svi318_fdc_density_side_w )
381static WRITE8_HANDLER( svi318_fdc_density_side_w )
362382{
363383   mess_image *image;
364384
r2014r2015
377397   }
378398}
379399
380READ8_HANDLER( svi318_fdc_irqdrq_r )
400static READ8_HANDLER( svi318_fdc_irqdrq_r )
381401{
382402   return svi318_fdc.irq_drq;
383403}
r2014r2015
398418DEVICE_LOAD( svi318_floppy )
399419{
400420   int size;
421   int dsktype;
401422   int id = image_index_in_device(image);
402423
403424   if (!image_has_been_created(image))
r2014r2015
406427
407428      switch (size)
408429      {
409      case 172032: /* Single sided */
430      case 172032:   /* SVI-328 SSDD */
410431         svi318_fdc.heads[id] = 1;
432         dsktype = 0;
411433         break;
412      case 346112: /* Double sided */
434      case 346112:   /* SVI-328 DSDD */
413435         svi318_fdc.heads[id] = 2;
436         dsktype = 0;
414437         break;
438      case 348160:   /* SVI-728 DSDD CP/M */
439         svi318_fdc.heads[id] = 2;
440         dsktype = 1;
441         break;
415442      default:
416443         return INIT_FAIL;
417444      }
r2014r2015
423450      return INIT_FAIL;
424451
425452   basicdsk_set_geometry(image, 40, svi318_fdc.heads[id], 17, 256, 1, 0, FALSE);
426   basicdsk_set_calcoffset(image, svi318_calcoffset);
453   if (dsktype == 0) {
454      basicdsk_set_calcoffset(image, svi318_calcoffset);
455   }
427456
428457   return INIT_PASS;
429458}
r2014r2015
493522   timer_set( attotime_zero, NULL, 0, svi318_80col_init_registers );
494523}
495524
496WRITE8_HANDLER( svi806_ram_enable_w )
525static WRITE8_HANDLER( svi806_ram_enable_w )
497526{
498527   svi.svi806_ram_enabled = ( data & 0x01 );
499528   svi318_set_banks();
r2014r2015
601630
602631   /* serial */
603632   uart8250_init(0, svi318_uart8250_interface);
633   uart8250_init(1, svi318_uart8250_interface+1);
604634}
605635
606636static const TMS9928a_interface svi318_tms9928a_interface =
r2014r2015
645675   wd17xx_reset();
646676
647677   uart8250_reset(0);
678   uart8250_reset(1);
648679}
649680
650681INTERRUPT_GEN( svi318_interrupt )
r2014r2015
660691
661692WRITE8_HANDLER( svi318_writemem1 )
662693{
663   if ( svi.bank1_read_only )
694   if ( svi.bankLow_read_only )
664695      return;
665696
666   svi.bank1_ptr[offset] = data;
697   svi.bankLow_ptr[offset] = data;
667698}
668699
669700WRITE8_HANDLER( svi318_writemem2 )
670701{
671   if ( svi.bank2_read_only)
702   if ( svi.bankHigh1_read_only)
672703      return;
673704
674   svi.bank2_ptr[offset] = data;
705   svi.bankHigh1_ptr[offset] = data;
675706}
676707
677708WRITE8_HANDLER( svi318_writemem3 )
678709{
679   if ( svi.bank3_read_only)
710   if ( svi.bankHigh2_read_only)
680711      return;
681712
682   svi.bank3_ptr[offset] = data;
713   svi.bankHigh2_ptr[offset] = data;
683714}
684715
685716WRITE8_HANDLER( svi318_writemem4 )
r2014r2015
689720         svi.svi806_ram[ offset ] = data;
690721      }
691722   } else {
692      if ( svi.bank3_read_only )
723      if ( svi.bankHigh2_read_only )
693724         return;
694725
695      svi.bank3_ptr[ 0x3000 + offset] = data;
726      svi.bankHigh2_ptr[ 0x3000 + offset] = data;
696727   }
697728}
698729
r2014r2015
700731{
701732   const UINT8 v = svi.bank_switch;
702733
703   svi.bank1 = ( v & 1 ) ? ( ( v & 2 ) ? ( ( v & 8 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2 ) : SVI_CART;
704   svi.bank2 = ( v & 4 ) ? ( ( v & 16 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2;
734   svi.bankLow = ( v & 1 ) ? ( ( v & 2 ) ? ( ( v & 8 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2 ) : SVI_CART;
735   svi.bankHigh1 = ( v & 4 ) ? ( ( v & 16 ) ? SVI_INTERNAL : SVI_EXPRAM3 ) : SVI_EXPRAM2;
705736
706   svi.bank1_ptr = svi.empty_bank;
707   svi.bank1_read_only = 1;
737   svi.bankLow_ptr = svi.empty_bank;
738   svi.bankLow_read_only = 1;
708739
709   switch( svi.bank1 ) {
740   switch( svi.bankLow ) {
710741   case SVI_INTERNAL:
711      svi.bank1_ptr = memory_region(REGION_CPU1);
742      svi.bankLow_ptr = memory_region(REGION_CPU1);
712743      break;
713744   case SVI_CART:
714745      if ( pcart ) {
715         svi.bank1_ptr = pcart;
746         svi.bankLow_ptr = pcart;
716747      }
717748      break;
718749   case SVI_EXPRAM2:
719750      if ( mess_ram_size >= 64 * 1024 ) {
720         svi.bank1_ptr = mess_ram + mess_ram_size - 64 * 1024;
721         svi.bank1_read_only = 0;
751         svi.bankLow_ptr = mess_ram + mess_ram_size - 64 * 1024;
752         svi.bankLow_read_only = 0;
722753      }
723754      break;
724755   case SVI_EXPRAM3:
725756      if ( mess_ram_size > 128 * 1024 ) {
726         svi.bank1_ptr = mess_ram + mess_ram_size - 128 * 1024;
727         svi.bank1_read_only = 0;
757         svi.bankLow_ptr = mess_ram + mess_ram_size - 128 * 1024;
758         svi.bankLow_read_only = 0;
728759      }
729760      break;
730761   }
731762
732   svi.bank2_ptr = svi.bank3_ptr = svi.empty_bank;
733   svi.bank2_read_only = svi.bank3_read_only = 1;
763   svi.bankHigh1_ptr = svi.bankHigh2_ptr = svi.empty_bank;
764   svi.bankHigh1_read_only = svi.bankHigh2_read_only = 1;
734765
735   switch( svi.bank2 ) {
766   switch( svi.bankHigh1 ) {
736767   case SVI_INTERNAL:
737768      if ( mess_ram_size == 16 * 1024 ) {
738         svi.bank3_ptr = mess_ram;
739         svi.bank3_read_only = 0;
769         svi.bankHigh2_ptr = mess_ram;
770         svi.bankHigh2_read_only = 0;
740771      } else {
741         svi.bank2_ptr = mess_ram;
742         svi.bank2_read_only = 0;
743         svi.bank3_ptr = mess_ram + 0x4000;
744         svi.bank3_read_only = 0;
772         svi.bankHigh1_ptr = mess_ram;
773         svi.bankHigh1_read_only = 0;
774         svi.bankHigh2_ptr = mess_ram + 0x4000;
775         svi.bankHigh2_read_only = 0;
745776      }
746777      break;
747778   case SVI_EXPRAM2:
748779      if ( mess_ram_size > 64 * 1024 ) {
749         svi.bank2_ptr = mess_ram + mess_ram_size - 64 * 1024 + 32 * 1024;
750         svi.bank2_read_only = 0;
751         svi.bank3_ptr = mess_ram + mess_ram_size - 64 * 1024 + 48 * 1024;
752         svi.bank3_read_only = 0;
780         svi.bankHigh1_ptr = mess_ram + mess_ram_size - 64 * 1024 + 32 * 1024;
781         svi.bankHigh1_read_only = 0;
782         svi.bankHigh2_ptr = mess_ram + mess_ram_size - 64 * 1024 + 48 * 1024;
783         svi.bankHigh2_read_only = 0;
753784      }
754785      break;
755786   case SVI_EXPRAM3:
756787      if ( mess_ram_size > 128 * 1024 ) {
757         svi.bank2_ptr = mess_ram + mess_ram_size - 128 * 1024 + 32 * 1024;
758         svi.bank2_read_only = 0;
759         svi.bank3_ptr = mess_ram + mess_ram_size - 128 * 1024 + 48 * 1024;
760         svi.bank3_read_only = 0;
788         svi.bankHigh1_ptr = mess_ram + mess_ram_size - 128 * 1024 + 32 * 1024;
789         svi.bankHigh1_read_only = 0;
790         svi.bankHigh2_ptr = mess_ram + mess_ram_size - 128 * 1024 + 48 * 1024;
791         svi.bankHigh2_read_only = 0;
761792      }
762793      break;
763794   }
764795
765796   /* Check for special CART based banking */
766   if ( svi.bank1 == SVI_CART && ( v & 0xc0 ) != 0xc0 ) {
767      svi.bank2_ptr = svi.empty_bank;
768      svi.bank2_read_only = 1;
769      svi.bank3_ptr = svi.empty_bank;
770      svi.bank3_read_only = 1;
797   if ( svi.bankLow == SVI_CART && ( v & 0xc0 ) != 0xc0 ) {
798      svi.bankHigh1_ptr = svi.empty_bank;
799      svi.bankHigh1_read_only = 1;
800      svi.bankHigh2_ptr = svi.empty_bank;
801      svi.bankHigh2_read_only = 1;
771802      if ( pcart && ! ( v & 0x80 ) ) {
772         svi.bank3_ptr = pcart + 0x4000;
803         svi.bankHigh2_ptr = pcart + 0x4000;
773804      }
774805      if ( pcart && ! ( v & 0x40 ) ) {
775         svi.bank2_ptr = pcart;
806         svi.bankHigh1_ptr = pcart;
776807      }
777808   }
778809
779   memory_set_bankptr( 1, svi.bank1_ptr );
780   memory_set_bankptr( 2, svi.bank2_ptr );
781   memory_set_bankptr( 3, svi.bank3_ptr );
810   memory_set_bankptr( 1, svi.bankLow_ptr );
811   memory_set_bankptr( 2, svi.bankHigh1_ptr );
812   memory_set_bankptr( 3, svi.bankHigh2_ptr );
782813
783814   /* SVI-806 80 column card specific banking */
784815   if ( svi.svi806_present ) {
785816      if ( svi.svi806_ram_enabled ) {
786817         memory_set_bankptr( 4, svi.svi806_ram );
787818      } else {
788         memory_set_bankptr( 4, svi.bank3_ptr + 0x3000 );
819         memory_set_bankptr( 4, svi.bankHigh2_ptr + 0x3000 );
789820      }
790821   }
791822}
r2014r2015
796827{
797828   return image_exists(image_from_devtype_and_index(IO_CASSETTE, id));
798829}
830
831/* External I/O */
832
833READ8_HANDLER( svi318_io_ext_r )
834{
835   UINT8 data = 0xff;
836
837   if (svi.bankLow == SVI_CART) {
838      return 0xff;
839   }
840
841   switch( offset ) {
842   case 0x12:
843      data = svi318_printer_r(machine, 0);
844      break;
845/* some UART status is not working
846   case 0x20:
847   case 0x21:
848   case 0x22:
849   case 0x23:
850   case 0x24:
851   case 0x25:
852   case 0x26:
853   case 0x27:
854      data = uart8250_0_r(machine, offset & 7);
855      break;
856*/
857   case 0x28:
858   case 0x29:
859   case 0x2A:
860   case 0x2B:
861   case 0x2C:
862   case 0x2D:
863   case 0x2E:
864   case 0x2F:
865      data = uart8250_1_r(machine, offset & 7);
866      break;
867   case 0x30:
868      data = wd17xx_status_r(machine, 0);
869      break;
870   case 0x31:
871      data = wd17xx_track_r(machine, 0);
872      break;
873   case 0x32:
874      data = wd17xx_sector_r(machine, 0);
875      break;
876   case 0x33:
877      data = wd17xx_data_r(machine, 0);
878      break;
879   case 0x34:
880      data = svi318_fdc_irqdrq_r(machine, 0);
881      break;
882   case 0x51: {
883      device_config *devconf = (device_config *) device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
884      data = mc6845_register_r(devconf, 0);
885      }
886      break;
887   }
888
889   return data;
890}
891
892WRITE8_HANDLER( svi318_io_ext_w )
893{
894   if (svi.bankLow == SVI_CART) {
895      return;
896   }
897
898   switch( offset ) {
899   case 0x10:
900   case 0x11:
901      svi318_printer_w(machine, offset & 1, data);
902      break;
903   case 0x20:
904   case 0x21:
905   case 0x22:
906   case 0x23:
907   case 0x24:
908   case 0x25:
909   case 0x26:
910   case 0x27:
911      uart8250_0_w(machine, offset & 7, data);
912      break;
913   case 0x28:
914   case 0x29:
915   case 0x2A:
916   case 0x2B:
917   case 0x2C:
918   case 0x2D:
919   case 0x2E:
920   case 0x2F:
921      uart8250_1_w(machine, offset & 7, data);
922      break;
923   case 0x30:
924      wd17xx_command_w(machine, 0, data);
925      break;
926   case 0x31:
927      wd17xx_track_w(machine, 0, data);
928      break;
929   case 0x32:
930      wd17xx_sector_w(machine, 0, data);
931      break;
932   case 0x33:
933      wd17xx_data_w(machine, 0, data);
934      break;
935   case 0x34:
936      svi318_fdc_drive_motor_w(machine, 0, data);
937      break;
938   case 0x38:
939      svi318_fdc_density_side_w(machine, 0, data);
940      break;
941   case 0x50: {
942      device_config *devconf = (device_config *) device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
943      mc6845_address_w(devconf, 0, data);
944      }
945      break;
946   case 0x51: {
947      device_config *devconf = (device_config *) device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
948      mc6845_register_w(devconf, 0, data);
949      }
950      break;
951   case 0x58:
952      svi806_ram_enable_w(machine, 0, data);
953      break;
954   }
955}
src/mess/drivers/svi318.c
r2014r2015
1414#include "includes/svi318.h"
1515#include "video/tms9928a.h"
1616#include "machine/8255ppi.h"
17#include "machine/uart8250.h"
18#include "machine/wd17xx.h"
1917#include "devices/basicdsk.h"
2018#include "devices/printer.h"
2119#include "devices/cartslot.h"
r2014r2015
4139static ADDRESS_MAP_START( svi318_io, ADDRESS_SPACE_IO, 8 )
4240   ADDRESS_MAP_UNMAP_HIGH
4341   ADDRESS_MAP_GLOBAL_MASK(0xff)
44   AM_RANGE( 0x10, 0x11) AM_WRITE( svi318_printer_w )
45   AM_RANGE( 0x12, 0x12) AM_READ( svi318_printer_r )
46   AM_RANGE( 0x28, 0x2f) AM_READWRITE( uart8250_0_r, uart8250_0_w )
47   AM_RANGE( 0x30, 0x30) AM_READWRITE( wd17xx_status_r, wd17xx_command_w )
48   AM_RANGE( 0x31, 0x31) AM_READWRITE( wd17xx_track_r, wd17xx_track_w )
49   AM_RANGE( 0x32, 0x32) AM_READWRITE( wd17xx_sector_r, wd17xx_sector_w )
50   AM_RANGE( 0x33, 0x33) AM_READWRITE( wd17xx_data_r, wd17xx_data_w )
51   AM_RANGE( 0x34, 0x34) AM_READWRITE( svi318_fdc_irqdrq_r, svi318_fdc_drive_motor_w )
52   AM_RANGE( 0x38, 0x38) AM_WRITE( svi318_fdc_density_side_w )
42   AM_RANGE( 0x00, 0x38) AM_READWRITE( svi318_io_ext_r, svi318_io_ext_w )
5343   AM_RANGE( 0x80, 0x80) AM_WRITE( TMS9928A_vram_w )
5444   AM_RANGE( 0x81, 0x81) AM_WRITE( TMS9928A_register_w )
5545   AM_RANGE( 0x84, 0x84) AM_READ( TMS9928A_vram_r )
r2014r2015
6151   AM_RANGE( 0x98, 0x9a) AM_READ( svi318_ppi_r )
6252ADDRESS_MAP_END
6353
64static ADDRESS_MAP_START( svi318_io2, ADDRESS_SPACE_IO, 8 )
54static ADDRESS_MAP_START( svi328_806_io, ADDRESS_SPACE_IO, 8 )
6555   ADDRESS_MAP_UNMAP_HIGH
6656   ADDRESS_MAP_GLOBAL_MASK(0xff)
67   AM_RANGE( 0x10, 0x11) AM_WRITE( svi318_printer_w )
68   AM_RANGE( 0x12, 0x12) AM_READ( svi318_printer_r )
69   AM_RANGE( 0x30, 0x30) AM_READWRITE( wd17xx_status_r, wd17xx_command_w )
70   AM_RANGE( 0x31, 0x31) AM_READWRITE( wd17xx_track_r, wd17xx_track_w )
71   AM_RANGE( 0x32, 0x32) AM_READWRITE( wd17xx_sector_r, wd17xx_sector_w )
72   AM_RANGE( 0x33, 0x33) AM_READWRITE( wd17xx_data_r, wd17xx_data_w )
73   AM_RANGE( 0x34, 0x34) AM_READWRITE( svi318_fdc_irqdrq_r, svi318_fdc_drive_motor_w )
74   AM_RANGE( 0x38, 0x38) AM_WRITE( svi318_fdc_density_side_w )
75   AM_RANGE( 0x50, 0x50) AM_DEVREADWRITE( MC6845, "crtc", mc6845_register_r, mc6845_address_w )
76   AM_RANGE( 0x51, 0x51) AM_DEVREADWRITE( MC6845, "crtc", mc6845_register_r, mc6845_register_w )
77   AM_RANGE( 0x58, 0x58) AM_WRITE( svi806_ram_enable_w )
57   AM_RANGE( 0x00, 0x58) AM_READWRITE( svi318_io_ext_r, svi318_io_ext_w )
7858   AM_RANGE( 0x80, 0x80) AM_WRITE( TMS9928A_vram_w )
7959   AM_RANGE( 0x81, 0x81) AM_WRITE( TMS9928A_register_w )
8060   AM_RANGE( 0x84, 0x84) AM_READ( TMS9928A_vram_r )
r2014r2015
8868
8969/*
9070  Keyboard status table
91
9271       Bit#:|  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
9372            |     |     |     |     |     |     |     |     |
9473  Line:     |     |     |     |     |     |     |     |     |
r2014r2015
357336static const mc6845_interface svi806_crtc6845_interface =
358337{
359338   "svi806",
360   XTAL_12MHz / 4,
339   XTAL_12MHz / 8,
361340   8 /*?*/,
362341   NULL,
363342   svi806_crtc6845_update_row,
r2014r2015
371350   /* Basic machine hardware */
372351   MDRV_CPU_ADD_TAG( "main", Z80, 3579545 )   /* 3.579545 Mhz */
373352   MDRV_CPU_PROGRAM_MAP( svi328_806_mem, 0 )
374   MDRV_CPU_IO_MAP( svi318_io2, 0 )
353   MDRV_CPU_IO_MAP( svi328_806_io, 0 )
375354   MDRV_CPU_VBLANK_INT("main", svi318_interrupt)
376355   MDRV_INTERLEAVE(1)
377356
r2014r2015
389368
390369   MDRV_SCREEN_ADD("svi806", RASTER)
391370   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
392   MDRV_SCREEN_REFRESH_RATE(60)
371   MDRV_SCREEN_REFRESH_RATE(50)
393372   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
394373   MDRV_SCREEN_SIZE(640, 400)
395   MDRV_SCREEN_VISIBLE_AREA(0,640-1, 0, 400-1)
374   MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
396375
397376   MDRV_DEVICE_ADD("crtc", MC6845)
398377   MDRV_DEVICE_CONFIG( svi806_crtc6845_interface )
r2014r2015
470449   ROM_REGION (0x10000, REGION_CPU1,0)
471450   ROM_LOAD ("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89))
472451   ROM_REGION( 0x1000, REGION_GFX1, 0)
473   ROM_SYSTEM_BIOS(0, "english", "English Character Cartridge")
452   ROM_SYSTEM_BIOS(0, "english", "English Character Set")
474453   ROMX_LOAD ("svi806.rom",   0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
475   ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Cartridge")
454   ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
476455   ROMX_LOAD ("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
477456ROM_END
478457
r2014r2015
480459   ROM_REGION (0x10000, REGION_CPU1,0)
481460   ROM_LOAD ("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89))
482461   ROM_REGION( 0x1000, REGION_GFX1, 0)
483   ROM_SYSTEM_BIOS(0, "english", "English Character Cartridge")
462   ROM_SYSTEM_BIOS(0, "english", "English Character Set")
484463   ROMX_LOAD ("svi806.rom",   0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
485   ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Cartridge")
464   ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
486465   ROMX_LOAD ("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
487466ROM_END
488467
r2014r2015
591570SYSTEM_CONFIG_START( svi318 )
592571   CONFIG_IMPORT_FROM(svi318_common)
593572   CONFIG_RAM_DEFAULT(16 * 1024)
594   CONFIG_RAM( 80 * 1024 )
595   CONFIG_RAM( 144 * 1024 )
573   CONFIG_RAM( 32 * 1024 )
574   CONFIG_RAM( 96 * 1024 )
575   CONFIG_RAM( 160 * 1024 )
596576SYSTEM_CONFIG_END
597577
598578SYSTEM_CONFIG_START( svi328 )
599579   CONFIG_IMPORT_FROM(svi318_common)
600580   CONFIG_RAM_DEFAULT(64 * 1024)
601   CONFIG_RAM( 128 * 1024 )
602   CONFIG_RAM( 192 * 1024 )
581   CONFIG_RAM( 96 * 1024 )
582   CONFIG_RAM( 160 * 1024 )
603583SYSTEM_CONFIG_END
604584
605585/*    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT   INIT    CONFIG  COMPANY         FULLNAME                    FLAGS */
r2014r2015
608588COMP( 1983, svi328,     svi318, 0,      svi318,     svi328, svi318, svi328, "Spectravideo", "SVI-328 (PAL)",            0 )
609589COMP( 1983, svi328n,    svi318, 0,      svi318n,    svi328, svi318, svi328, "Spectravideo", "SVI-328 (NTSC)",           0 )
610590COMP( 1983, sv328p80,   svi318, 0,      svi328_806,    svi328, svi318, svi328, "Spectravideo", "SVI-328 (PAL) + SVI-806 80 column card", 0 )
611COMP( 1983, sv328n80,   svi318, 0,      svi328n_806,    svi328, svi318, svi328, "Spectravideo", "SVI-328 (NTSC) + SVI-806 80 column card", 0 )
612
591COMP( 1983, sv328n80,   svi318, 0,      svi328n_806,   svi328, svi318, svi328, "Spectravideo", "SVI-328 (NTSC) + SVI-806 80 column card", 0 )
docs/messnew.txt
r2014r2015
3535
3636- [QL] System boots up again. (bug #1495) [Curt Coder]
3737
38- [SVI318] Cleaned up driver.  [Tomas Karlsson]
39
3840- [TRS80] Fixed an issue with I/O ports. Fixed 32 character display. Decoded
3941  LNW-80 characters. [Robbbert]
4042

Previous 15994 Revisions Next


© 1998-2018 The MESS Team