Previous 15994 Revisions Next

r3231 Thursday 11th September, 2008 at 20:53:43 UTC by Curt Coder
[QL] Added quickload, more memory options, and floppy configuration.
[src/mess/drivers]ql.c

src/mess/drivers/ql.c
r3230r3231
1010
1111    TODO:
1212
13   - several disk interfaces (720K/1.44MB/3.2MB)
14   - Trump Card missing extra 256K RAM
15   - Gold Card (68000 @ 16MHz, 2MB RAM)
16   - Super Gold Card (68020 @ 24MHz, 4MB RAM)
17   - QLToolkit II ROM
18   - GST 68kOS ROM
1319   - natural keyboard SHIFT does not work, it causes characters to be skipped altogether
1420   - get modified Danish version to boot (e.g. MD_DESEL was patched to jump to 0x1cd5e)
21   - ICL One Per Desk / British Telecom Merlin Tonto / Telecom Australia Computerphone / Mega OPD (US)
22   - Sandy Q-XT 640 (original motherboard, Super QBoard 512KB, Centronics, Super Toolkit II, FDC, 1 or 2 3.5" 1MB drives, 3 expansion slots)
23   - CST Thor PC 1F (720K 3.5")
24   - CST Thor PC 2F (2x 720k 3.5")
25   - CST Thor PC 2FW (20MB Winchester + 720K 3.5")
26   - CST Thor 20 (68020)
27   - CST Thor 21 (68020+68881)
28    - CST Thor XVI CF    (Workstation, 68000 @ 8 MHz, M6802, 68682 DUART)
29    - CST Thor XVI IF    (Single Floppy)
30    - CST Thor XVI FF    (Dual Floppy)
31    - CST Thor XVI W20F  (20MB Winchester, 1 Floppy)
32    - CST Thor XVI W20FF (20MB Winchester, 2 Floppies)
33    - CST Thor XVI W40F  (40MB Winchester, 1 Floppy)
34    - CST Thor XVI W40FF (40MB Winchester, 2 Floppies)
1535
1636*/
1737
1838#include "driver.h"
1939#include "cpu/mcs48/mcs48.h"
2040#include "cpu/m68000/m68000.h"
41#include "devices/basicdsk.h"
2142#include "devices/cartslot.h"
2243#include "devices/microdrv.h"
44#include "devices/snapquik.h"
2345#include "includes/serial.h"
2446#include "sound/speaker.h"
2547#include "video/zx8301.h"
r3230r3231
3658#define X3 XTAL_4_436MHz
3759#define X4 XTAL_11MHz
3860
61static QUICKLOAD_LOAD( ql );
62
3963/* Intelligent Peripheral Controller (IPC) */
4064
4165static struct IPC
r3230r3231
205229/* Memory Maps */
206230
207231static ADDRESS_MAP_START( ql_map, ADDRESS_SPACE_PROGRAM, 8 )
208   AM_RANGE(0x000000, 0x00bfff) AM_ROM   // System ROM
209   AM_RANGE(0x00c000, 0x00ffff) AM_ROM // Cartridge ROM
210   AM_RANGE(0x010000, 0x017fff) AM_NOP // expansion I/O
232   AM_RANGE(0x000000, 0x00bfff) AM_ROM   // 48K System ROM
233   AM_RANGE(0x00c000, 0x00ffff) AM_ROM // 16K Cartridge ROM
234   AM_RANGE(0x010000, 0x017fff) AM_NOP // 32K Expansion I/O
211235   AM_RANGE(0x018000, 0x018003) AM_DEVREAD(ZX8302, ZX8302_TAG, zx8302_rtc_r)
212236   AM_RANGE(0x018000, 0x018001) AM_DEVWRITE(ZX8302, ZX8302_TAG, zx8302_rtc_w)
213237   AM_RANGE(0x018002, 0x018002) AM_DEVWRITE(ZX8302, ZX8302_TAG, zx8302_control_w)
r3230r3231
217241   AM_RANGE(0x018022, 0x018022) AM_DEVREADWRITE(ZX8302, ZX8302_TAG, zx8302_mdv_track_r, zx8302_data_w)
218242   AM_RANGE(0x018023, 0x018023) AM_DEVREAD(ZX8302, ZX8302_TAG, zx8302_mdv_track_r) AM_WRITENOP
219243   AM_RANGE(0x018063, 0x018063) AM_DEVWRITE(ZX8301, ZX8301_TAG, zx8301_control_w)
220   AM_RANGE(0x01c000, 0x01ffff) AM_ROM // expansion I/O
244   AM_RANGE(0x01c000, 0x01ffff) AM_ROM // 16K Expansion I/O
221245   AM_RANGE(0x020000, 0x03ffff) AM_DEVREADWRITE(ZX8301, ZX8301_TAG, zx8301_ram_r, zx8301_ram_w)
222   AM_RANGE(0x040000, 0x0bffff) AM_RAMBANK(1) // 512KB expansion RAM
246   AM_RANGE(0x040000, 0x0bffff) AM_RAMBANK(1) // 512KB Expansion RAM
223247   AM_RANGE(0x0c0000, 0x0dffff) AM_NOP // 8x16KB device slots
224   AM_RANGE(0x0e0000, 0x0fffff) AM_NOP // expansion I/O
248   AM_RANGE(0x0e0000, 0x0fffff) AM_NOP // 128K Expansion I/O
225249ADDRESS_MAP_END
226250
227251static ADDRESS_MAP_START( ipc_map, ADDRESS_SPACE_PROGRAM, 8 )
r3230r3231
540564      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x040000, 0x0bffff, 0, 0, SMH_UNMAP, SMH_UNMAP);
541565      break;
542566
567   case 192*1024:
568      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x040000, 0x04ffff, 0, 0, SMH_BANK1, SMH_BANK1);
569      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x050000, 0x0bffff, 0, 0, SMH_UNMAP, SMH_UNMAP);
570      memory_configure_bank(1, 0, 1, mess_ram + (128 * 1024), 0);
571      memory_set_bank(1, 0);
572      break;
573
574   case 256*1024:
575      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x040000, 0x05ffff, 0, 0, SMH_BANK1, SMH_BANK1);
576      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x060000, 0x0bffff, 0, 0, SMH_UNMAP, SMH_UNMAP);
577      memory_configure_bank(1, 0, 1, mess_ram + (128 * 1024), 0);
578      memory_set_bank(1, 0);
579      break;
580
581   case 384*1024:
582      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x040000, 0x07ffff, 0, 0, SMH_BANK1, SMH_BANK1);
583      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x080000, 0x0bffff, 0, 0, SMH_UNMAP, SMH_UNMAP);
584      memory_configure_bank(1, 0, 1, mess_ram + (128 * 1024), 0);
585      memory_set_bank(1, 0);
586      break;
587
543588   case 640*1024:
544589      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x040000, 0x0bffff, 0, 0, SMH_BANK1, SMH_BANK1);
545590      memory_configure_bank(1, 0, 1, mess_ram + (128 * 1024), 0);
546591      memory_set_bank(1, 0);
547592      break;
593
594   case 896*1024:
595      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x040000, 0x0bffff, 0, 0, SMH_BANK1, SMH_BANK1);
596      memory_configure_bank(1, 0, 1, mess_ram + (128 * 1024), 0);
597      memory_set_bank(1, 0);
598      break;
548599   }
549600
550601   // IPC
r3230r3231
599650   MDRV_SPEAKER_STANDARD_MONO("mono")
600651   MDRV_SOUND_ADD("speaker", SPEAKER, 0)
601652   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
653
654   /* quickload */
655   MDRV_QUICKLOAD_ADD(ql, "bas", 0)
602656MACHINE_DRIVER_END
603657
604658static MACHINE_DRIVER_START( ql_ntsc )
r3230r3231
639693    ROMX_LOAD( "fb.ic34", 0x008000, 0x004000, NO_DUMP, ROM_BIOS(6) )
640694
641695   ROM_SYSTEM_BIOS( 6, "tyche", "v2.05 (Tyche)" )
642    ROMX_LOAD( "tyche.rom", 0x000000, 0x010000, BAD_DUMP CRC(8724b495) SHA1(5f33a1bc3f23fd09c31844b65bc3aca7616f180a), ROM_BIOS(7) )
696    ROMX_LOAD( "tyche.rom", 0x000000, 0x010000, CRC(8724b495) SHA1(5f33a1bc3f23fd09c31844b65bc3aca7616f180a), ROM_BIOS(7) )
643697
644698   ROM_SYSTEM_BIOS( 7, "min189", "Minerva v1.89" )
645    ROMX_LOAD( "minerva.rom", 0x000000, 0x00c000, CRC(930befe3) SHA1(84a99c4df13b97f90baf1ec8cb6c2e52e3e1bb4d), ROM_BIOS(8) )
699    ROMX_LOAD( "minerva.rom", 0x000000, 0x00c000, BAD_DUMP CRC(930befe3) SHA1(84a99c4df13b97f90baf1ec8cb6c2e52e3e1bb4d), ROM_BIOS(8) )
646700
647701   ROM_REGION( 0x800, "ipc", 0 )
648702   ROM_LOAD( "ipc8049.ic24", 0x0000, 0x0800, CRC(6a0d1f20) SHA1(fcb1c97ee7c66e5b6d8fbb57c06fd2f6509f2e1b) )
r3230r3231
735789
736790/* System Configuration */
737791
792static QUICKLOAD_LOAD( ql )
793{
794   image_fread(image, mess_ram, 128*1024);
795
796   return INIT_PASS;
797}
798
738799static DEVICE_IMAGE_LOAD( ql_serial )
739800{
740801   /* filename specified */
r3230r3231
808869   }
809870}
810871
872static DEVICE_IMAGE_LOAD( ql_floppy )
873{
874   if (image_has_been_created(image))
875      return INIT_FAIL;
876
877   switch (image_length(image))
878   {
879   case 40*1*9*512: // 184320 (SSSD)
880      basicdsk_set_geometry(image, 40, 1, 9, 512, 1, 0, FALSE);
881      return INIT_PASS;
882
883   case 40*2*9*512: // 368640 (DSSD)
884      basicdsk_set_geometry(image, 40, 2, 9, 512, 1, 0, FALSE);
885      return INIT_PASS;
886
887   case 80*2*9*512: // 737280 (DSDD)
888      basicdsk_set_geometry(image, 80, 2, 9, 512, 1, 0, FALSE);
889      return INIT_PASS;
890
891   case 80*2*18*512: // 1474560 (HD)
892      basicdsk_set_geometry(image, 80, 2, 18, 512, 1, 0, FALSE);
893      return INIT_PASS;
894
895   case 80*2*40*512: // 3276800 (ED)
896      basicdsk_set_geometry(image, 80, 2, 40, 512, 1, 0, FALSE);
897      return INIT_PASS;
898   }
899
900   return INIT_FAIL;
901}
902
903static void ql_floppy_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info)
904{
905   /* floppy */
906   switch(state)
907   {
908      /* --- the following bits of info are returned as 64-bit signed integers --- */
909      case MESS_DEVINFO_INT_COUNT:               info->i = 2; break;
910
911      /* --- the following bits of info are returned as pointers to data or functions --- */
912      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(ql_floppy); break;
913
914      /* --- the following bits of info are returned as NULL-terminated strings --- */
915      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "dsk"); break;
916
917      default:                              legacybasicdsk_device_getinfo(devclass, state, info); break;
918   }
919}
920
811921static SYSTEM_CONFIG_START( ql )
812922   CONFIG_RAM_DEFAULT   (128 * 1024)
813   CONFIG_RAM         (640 * 1024)
923   CONFIG_RAM         (192 * 1024) // 64K expansion
924   CONFIG_RAM         (256 * 1024) // 128K expansion
925   CONFIG_RAM         (384 * 1024) // 256K expansion
926   CONFIG_RAM         (640 * 1024) // 512K expansion
927   CONFIG_RAM         (896 * 1024) // Trump Card
814928   CONFIG_DEVICE(ql_serial_getinfo)
815929   CONFIG_DEVICE(ql_cartslot_getinfo)
930   CONFIG_DEVICE(ql_floppy_getinfo)
816931SYSTEM_CONFIG_END
817932
818933/* Computer Drivers */

Previous 15994 Revisions Next


© 1998-2018 The MESS Team