Previous 199869 Revisions Next

r18798 Wednesday 31st October, 2012 at 20:45:33 UTC by Wilbert Pol
tms0980.c: Some small fixes for the tms1100 cpus (nw)
[src/emu/cpu/tms0980]tms0980.c tms0980d.c

trunk/src/emu/cpu/tms0980/tms0980.c
r18797r18798
235235   UINT8   sr;            /* subroutine return register is a 7 bit register */
236236   UINT8   pb;            /* page buffer register is a 4 bit register */
237237   UINT8   a;            /* Accumulator is a 4 bit register (?) */
238   UINT8   x;            /* X-register is a 2 bit register */
238   UINT8   x;            /* X-register is a 2, 3, or 4 bit register */
239239   UINT8   y;            /* Y-register is a 4 bit register */
240240   UINT8   dam;         /* DAM register is a 4 bit register */
241241   UINT8   ca;            /* Chapter address bit */
r18797r18798
265265   UINT16   r_mask;         /* mask to determine the number of R outputs */
266266   UINT8   pc_size;      /* how bits in the PC register */
267267   UINT8   byte_size;      /* 8 or 9 bit bytes */
268   UINT8   m_x_bits;      /* determine the number of bits in the X register */
268269   const UINT32 *decode_table;
269270   const tms0980_config   *config;
270271   address_space *program;
r18797r18798
280281{
281282   0x00, 0x02, 0x01, 0x03
282283};
284static const UINT8 tms0980_c3_value[8] =
285{
286   0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07
287};
283288static const UINT8 tms0980_c4_value[16] =
284289{
285290   0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
r18797r18798
493498ADDRESS_MAP_END
494499
495500
496static void cpu_init_tms_common( legacy_cpu_device *device, const UINT32* decode_table, UINT16 o_mask, UINT16 r_mask, UINT8 pc_size, UINT8 byte_size )
501static void cpu_init_tms_common( legacy_cpu_device *device, const UINT32* decode_table, UINT16 o_mask, UINT16 r_mask, UINT8 pc_size, UINT8 byte_size, UINT8 x_bits )
497502{
498503   tms0980_state *cpustate = get_safe_token( device );
499504
r18797r18798
506511   cpustate->r_mask = r_mask;
507512   cpustate->pc_size = pc_size;
508513   cpustate->byte_size = byte_size;
514   cpustate->m_x_bits = x_bits;
509515
510516   cpustate->program = &device->space( AS_PROGRAM );
511   cpustate->data = &device->space( AS_PROGRAM );
517   cpustate->data = &device->space( AS_DATA );
512518
513519   cpustate->m_read_k.resolve(cpustate->config->read_k, *device);
514520   cpustate->m_write_o.resolve(cpustate->config->write_o, *device);
r18797r18798
552558
553559static CPU_INIT( tms0980 )
554560{
555   cpu_init_tms_common( device, tms0980_decode, 0x00ff, 0x07ff, 7, 9 );
561   cpu_init_tms_common( device, tms0980_decode, 0x00ff, 0x07ff, 7, 9, 4 );
556562}
557563
558564
559565static CPU_INIT( tms1000 )
560566{
561   cpu_init_tms_common( device, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8 );
567   cpu_init_tms_common( device, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2 );
562568}
563569
564570
565571static CPU_INIT( tms1070 )
566572{
567   cpu_init_tms_common( device, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8 );
573   cpu_init_tms_common( device, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2 );
568574}
569575
570576
571577static CPU_INIT( tms1200 )
572578{
573   cpu_init_tms_common( device, tms1000_default_decode, 0x00ff, 0x1fff, 6, 8 );
579   cpu_init_tms_common( device, tms1000_default_decode, 0x00ff, 0x1fff, 6, 8, 2 );
574580}
575581
576582
577583static CPU_INIT( tms1270 )
578584{
579   cpu_init_tms_common( device, tms1000_default_decode, 0x03ff, 0x1fff, 6, 8 );
585   cpu_init_tms_common( device, tms1000_default_decode, 0x03ff, 0x1fff, 6, 8, 2 );
580586}
581587
582588
583589static CPU_INIT( tms1100 )
584590{
585   cpu_init_tms_common( device, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8 );
591   cpu_init_tms_common( device, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8, 3 );
586592}
587593
588594
589595static CPU_INIT( tms1300 )
590596{
591   cpu_init_tms_common( device, tms1100_default_decode, 0x00ff, 0xffff, 6, 8 );
597   cpu_init_tms_common( device, tms1100_default_decode, 0x00ff, 0xffff, 6, 8, 3 );
592598}
593599
594600
r18797r18798
831837      case 1:
832838         /* fetch: rom address 1 */
833839         if ( cpustate->pc_size == 6 )
834            cpustate->rom_address = ( cpustate->pa << 6 ) | tms1000_pc_decode[ cpustate->pc ];
840//            cpustate->rom_address = ( cpustate->pa << 6 ) | tms1000_pc_decode[ cpustate->pc ];
841            cpustate->rom_address = ( cpustate->pa << 6 ) | cpustate->pc;
835842         else
836843            cpustate->rom_address = ( cpustate->pa << 7 ) | cpustate->pc;
837844         /* execute: k input valid */
r18797r18798
979986            }
980987            if ( cpustate->decode & F_LDX )
981988            {
982               cpustate->x = tms0980_c2_value[ cpustate->opcode & 0x03 ];
989               switch( cpustate->m_x_bits )
990               {
991                  case 2:
992                     cpustate->x = tms0980_c2_value[ cpustate->opcode & 0x03 ];
993                     break;
994                  case 3:
995                     cpustate->x = tms0980_c3_value[ cpustate->opcode & 0x07 ];
996                     break;
997                  case 4:
998                     cpustate->x = tms0980_c4_value[ cpustate->opcode & 0x0f ];
999                     break;
1000               }
9831001            }
9841002            if ( cpustate->decode & F_COMX )
9851003            {
r18797r18798
10411059         else
10421060         {
10431061            debugger_instruction_hook( device, cpustate->rom_address );
1044            cpustate->opcode = cpustate->program->read_word( cpustate->rom_address ) & 0xFF;
1062            cpustate->opcode = cpustate->program->read_byte( cpustate->rom_address );
10451063         }
10461064         tms0980_next_pc( cpustate );
10471065         if (LOG)
r18797r18798
12631281      case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM:         info->i = 11; break;
12641282      case CPUINFO_INT_ADDRBUS_WIDTH + AS_DATA:         info->i = 7; break;
12651283      case CPUINFO_INT_PREVIOUSPC:                           info->i = ( cpustate->prev_pa << 6 ) | tms1000_pc_decode[ cpustate->prev_pc ]; break;
1266      case CPUINFO_INT_PC:                                 info->i = ( cpustate->pa << 6 ) | tms1000_pc_decode[ cpustate->pc ]; break;
1284      case CPUINFO_INT_PC:                                 info->i = ( cpustate->pa << 6 ) | cpustate->pc; break;
12671285      case CPUINFO_PTR_INTERNAL_MEMORY_MAP + AS_PROGRAM:               info->internal_map8 = ADDRESS_MAP_NAME( program_11bit_8 ); break;
12681286      case CPUINFO_PTR_INTERNAL_MEMORY_MAP + AS_DATA:                  info->internal_map8 = ADDRESS_MAP_NAME( data_7bit ); break;
12691287      case CPUINFO_FCT_INIT:                                 info->init = CPU_INIT_NAME( tms1100 ); break;
trunk/src/emu/cpu/tms0980/tms0980d.c
r18797r18798
1717enum e_mnemonics {
1818   zA10AAC=0, zA6AAC, zA8AAC, zAC1AC, zACACC, zACNAA, zALEC, zALEM, zAMAAC, zBRANCH, zCALL, zCCLA,
1919   zCLA, zCLO, zCOMC, zCOMX, zCOMX8, zCPAIZ, zCTMDYN, zDAN, zDMAN, zDMEA, zDNAA,
20   zDYN, zIA, zIMAC, zIYC, zKNE, zKNEZ, zLDP, zLDX, zLDX4, zMNEA, zMNEZ,
20   zDYN, zIA, zIMAC, zIYC, zKNE, zKNEZ, zLDP, zLDX, zLDX3, zLDX4, zMNEA, zMNEZ,
2121   zNDMEA, zOFF, zRBIT, zREAC, zRETN, zRSTR, zSAL, zSAMAN, zSBIT,
2222   zSBL, zSEAC, zSETR, zTAM, zTAMACS, zTAMDYN, zTAMIY, zTAMIYC, zTAMZA,
2323   zTAY, zTBIT, zTCMIY, zTCY, zTDO, zTKA, zTKM, zTMA,
r18797r18798
2727
2828
2929enum e_addressing {
30   zB0=0, zB2, zI2, zI4, zB7
30   zB0=0, zB2, zI2, zI3, zI4, zB7
3131};
3232
3333
3434static const char *const s_mnemonic[] = {
3535   "a10aac", "a6aac", "a8aac", "ac1ac", "acacc", "acnaa", "alec", "alem", "amaac", "branch", "call", "ccla",
3636   "cla", "clo", "comc", "comx", "comx8", "cpaiz", "ctmdyn", "dan", "dman", "dmea", "dnaa",
37   "dyn", "ia", "imac", "iyc", "kne", "knez", "ldp", "ldx", "ldx", "mnea", "mnez",
37   "dyn", "ia", "imac", "iyc", "kne", "knez", "ldp", "ldx", "ldx", "ldx", "mnea", "mnez",
3838   "ndmea", "off", "rbit", "reac", "retn", "rstr", "sal", "saman", "sbit",
3939   "sbl", "seac", "setr", "tam", "tamacs", "tamdyn", "tamiy", "tamiyc", "tamza",
4040   "tay", "tbit", "tcmiy", "tcy", "tdo", "tka", "tkm", "tma",
r18797r18798
5858static const UINT8 s_addressing[] = {
5959   zB0, zB0, zB0, zI4, zI4, zI4, zI4, zB0, zB0, zB7, zB7, zB0,
6060   zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0,
61   zB0, zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI4, zB0, zB0,
61   zB0, zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI3, zI4, zB0, zB0,
6262   zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0,
6363   zB0, zB0, zB0, zB0, zI4, zB0, zB0, zB0, zB2,
6464   zB0, zB2, zI4, zI4, zB0, zB0, zB0, zB0,
r18797r18798
201201   zLDP, zLDP, zLDP, zLDP, zLDP, zLDP, zLDP, zLDP,
202202   /* 0x20 */
203203   zTAY, zTMA, zTMY, zTYA, zTAMDYN, zTAMIYC, zTAMZA, zTAM,
204   zLDX, zLDX, zLDX, zLDX, zLDX, zLDX, zLDX, zLDX,
204   zLDX3, zLDX3, zLDX3, zLDX3, zLDX3, zLDX3, zLDX3, zLDX3,
205205   zSBIT, zSBIT, zSBIT, zSBIT, zRBIT, zRBIT, zRBIT, zRBIT,
206206   zTBIT, zTBIT, zTBIT, zTBIT, zSAMAN, zCPAIZ, zIMAC, zMNEZ,
207207   /* 0x40 */
r18797r18798
238238{
239239   0x00, 0x02, 0x01, 0x03
240240};
241static const UINT8 tms0980_i3_value[8] =
242{
243   0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07
244};
241245static const UINT8 tms0980_i4_value[16] =
242246{
243247   0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
r18797r18798
332336   case zI2:
333337      dst += sprintf( dst, "#$%01X", tms0980_i2_value[ op & 0x03 ] );
334338      break;
339   case zI3:
340      dst += sprintf( dst, "#$%01X", tms0980_i3_value[ op & 0x07 ] );
341      break;
335342   case zI4:
336343      dst += sprintf( dst, "#$%01X", tms0980_i4_value[ op & 0x0F ] );
337344      break;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team