Previous 199869 Revisions Next

r18778 Tuesday 30th October, 2012 at 10:46:04 UTC by Ryan Holtz
-avr8.c: Added FMUL, FMULS, and FMULSU opcodes. [MooglyGuy]

-avr8.c: Fixed incorrect N flag calculation in ROR opcode. [MooglyGuy]

-avr8.c: Fixed incorrect bit testing in SBIC/SBIS opcodes. [MooglyGuy]

-craft.c: Added port D readback, fixes on-screen VU level. [MooglyGuy]

-craft.c: Sync video with Vsync output, fixes rolling image. [MooglyGuy]

-craft.c: Fixed visible area and promoted to working. [MooglyGuy]
[src/emu/cpu/avr8]avr8.c avr8dasm.c
[src/mess/drivers]craft.c

trunk/src/emu/cpu/avr8/avr8dasm.c
r18777r18778
2121#define QCONST6(op)     ((((op) >> 8) & 0x0020) | (((op) >> 7) & 0x0018) | ((op) & 0x0007))
2222#define ACONST5(op)     (((op) >> 3) & 0x001f)
2323#define ACONST6(op)     ((((op) >> 5) & 0x0030) | ((op) & 0x000f))
24#define MULCONST2(op)   ((((op) >> 6) & 0x0002) | (((op) >> 3) & 0x0001))
2425
2526CPU_DISASSEMBLE( avr8 )
2627{
r18777r18778
4445                    output += sprintf( output, "MULS    R%d, R%d", 16+RD4(op), 16+RR4(op) );
4546                    break;
4647                case 0x0300:
47                    output += sprintf( output, "MULSU   R%d, R%d", 16+RD4(op), 16+RR4(op) );
48                   switch(MULCONST2(op))
49                   {
50                  case 0:
51                          output += sprintf( output, "MULSU   R%d, R%d", 16+RD3(op), 16+RR3(op) );
52                          break;
53                  case 1:
54                          output += sprintf( output, "FMUL    R%d, R%d", 16+RD3(op), 16+RR3(op) );
55                          break;
56                  case 2:
57                          output += sprintf( output, "FMULS   R%d, R%d", 16+RD3(op), 16+RR3(op) );
58                          break;
59                  case 3:
60                          output += sprintf( output, "FMULSU  R%d, R%d", 16+RD3(op), 16+RR3(op) );
61                          break;
62               }
4863                    break;
4964                case 0x0400:
5065                case 0x0500:
trunk/src/emu/cpu/avr8/avr8.c
r18777r18778
109109#define QCONST6(op)     ((((op) >> 8) & 0x0020) | (((op) >> 7) & 0x0018) | ((op) & 0x0007))
110110#define ACONST5(op)     (((op) >> 3) & 0x001f)
111111#define ACONST6(op)     ((((op) >> 5) & 0x0030) | ((op) & 0x000f))
112#define MULCONST2(op)   ((((op) >> 6) & 0x0002) | (((op) >> 3) & 0x0001))
112113
113114// Register Defines
114115#define XREG            ((cpustate->r[27] << 8) | cpustate->r[26])
r18777r18778
10091010
10101011      case AVR8_REGIDX_SPL:
10111012      case AVR8_REGIDX_SPH:
1013         cpustate->r[offset] = data;
1014         return true;
1015
10121016      case AVR8_REGIDX_GPIOR0:
1017         verboselog(cpustate->pc, 0, "AVR8: GPIOR0 Write: %02x\n", data);
10131018         cpustate->r[offset] = data;
10141019         return true;
10151020
r18777r18778
10181023         return true;
10191024
10201025        default:
1021            verboselog(cpustate->pc, 0, "AVR8: Unrecognized register write: %02x = %02x\n", offset, data );
10221026            return false;
10231027    }
10241028    return false;
r18777r18778
10321036      case AVR8_REGIDX_SPH:
10331037      case AVR8_REGIDX_TCNT1L:
10341038      case AVR8_REGIDX_TCNT1H:
1035      case AVR8_REGIDX_GPIOR0:
10361039      case AVR8_REGIDX_TCNT2:
10371040         *data = cpustate->r[offset];
10381041         return true;
10391042
1043      case AVR8_REGIDX_GPIOR0:
1044         *data = cpustate->r[offset];
1045         verboselog(cpustate->pc, 0, "AVR8: GPIOR0 Read: %02x\n", *data);
1046         return true;
1047
10401048      case AVR8_REGIDX_SREG:
10411049         *data = cpustate->status;
10421050         return true;
10431051
10441052        default:
1045            verboselog(cpustate->pc, 0, "AVR8: Unrecognized register read: %02x\n", offset );
10461053            return false;
10471054    }
10481055
r18777r18778
11601167                        SREG_W(AVR8_SREG_Z, (sd == 0) ? 1 : 0);
11611168                        opcycles = 2;
11621169                        break;
1163                    case 0x0300:    // MULSU Rd,Rr
1164                        sd = (INT8)cpustate->r[16 + RD3(op)] * (UINT8)cpustate->r[16 + RR3(op)];
1165                        cpustate->r[1] = (sd >> 8) & 0x00ff;
1166                        cpustate->r[0] = sd & 0x00ff;
1167                        SREG_W(AVR8_SREG_C, (sd & 0x8000) ? 1 : 0);
1168                        SREG_W(AVR8_SREG_Z, (sd == 0) ? 1 : 0);
1169                        opcycles = 2;
1170                    case 0x0300:    // Multiplicatn
1171                       switch(MULCONST2(op))
1172                       {
1173                     case 0x0000: // MULSU Rd,Rr
1174                        sd = (INT8)cpustate->r[16 + RD3(op)] * (UINT8)cpustate->r[16 + RR3(op)];
1175                        cpustate->r[1] = (sd >> 8) & 0x00ff;
1176                        cpustate->r[0] = sd & 0x00ff;
1177                        SREG_W(AVR8_SREG_C, (sd & 0x8000) ? 1 : 0);
1178                        SREG_W(AVR8_SREG_Z, (sd == 0) ? 1 : 0);
1179                        opcycles = 2;
1180                        break;
1181                     case 0x0001: // FMUL Rd,Rr
1182                        sd = (UINT8)cpustate->r[16 + RD3(op)] * (UINT8)cpustate->r[16 + RR3(op)];
1183                        sd <<= 1;
1184                        cpustate->r[1] = (sd >> 8) & 0x00ff;
1185                        cpustate->r[0] = sd & 0x00ff;
1186                        SREG_W(AVR8_SREG_C, (sd & 0x8000) ? 1 : 0);
1187                        SREG_W(AVR8_SREG_Z, (sd == 0) ? 1 : 0);
1188                        opcycles = 2;
1189                        break;
1190                     case 0x0002: // FMULS Rd,Rr
1191                        sd = (INT8)cpustate->r[16 + RD3(op)] * (INT8)cpustate->r[16 + RR3(op)];
1192                        sd <<= 1;
1193                        cpustate->r[1] = (sd >> 8) & 0x00ff;
1194                        cpustate->r[0] = sd & 0x00ff;
1195                        SREG_W(AVR8_SREG_C, (sd & 0x8000) ? 1 : 0);
1196                        SREG_W(AVR8_SREG_Z, (sd == 0) ? 1 : 0);
1197                        opcycles = 2;
1198                        break;
1199                     case 0x0003: // FMULSU Rd,Rr
1200                        sd = (INT8)cpustate->r[16 + RD3(op)] * (UINT8)cpustate->r[16 + RR3(op)];
1201                        sd <<= 1;
1202                        cpustate->r[1] = (sd >> 8) & 0x00ff;
1203                        cpustate->r[0] = sd & 0x00ff;
1204                        SREG_W(AVR8_SREG_C, (sd & 0x8000) ? 1 : 0);
1205                        SREG_W(AVR8_SREG_Z, (sd == 0) ? 1 : 0);
1206                        opcycles = 2;
1207                        break;
1208                  }
11701209                        break;
11711210                    case 0x0400:
11721211                    case 0x0500:
r18777r18778
12661305                        rr = cpustate->r[RR5(op)];
12671306                        rd &= rr;
12681307                        SREG_W(AVR8_SREG_V, 0);
1269                        SREG_W(AVR8_SREG_N, rd & 0x80);
1308                        SREG_W(AVR8_SREG_N, BIT(rd,7));
12701309                        SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
12711310                        SREG_W(AVR8_SREG_Z, (rd == 0) ? 1 : 0);
12721311                        cpustate->r[RD5(op)] = rd;
r18777r18778
12761315                        rr = cpustate->r[RR5(op)];
12771316                        rd ^= rr;
12781317                        SREG_W(AVR8_SREG_V, 0);
1279                        SREG_W(AVR8_SREG_N, rd & 0x80);
1318                        SREG_W(AVR8_SREG_N, BIT(rd,7));
12801319                        SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
12811320                        SREG_W(AVR8_SREG_Z, (rd == 0) ? 1 : 0);
12821321                        cpustate->r[RD5(op)] = rd;
r18777r18778
12861325                        rr = cpustate->r[RR5(op)];
12871326                        rd |= rr;
12881327                        SREG_W(AVR8_SREG_V, 0);
1289                        SREG_W(AVR8_SREG_N, rd & 0x80);
1328                        SREG_W(AVR8_SREG_N, BIT(rd,7));
12901329                        SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
12911330                        SREG_W(AVR8_SREG_Z, (rd == 0) ? 1 : 0);
12921331                        cpustate->r[RD5(op)] = rd;
r18777r18778
13361375                rr = KCONST8(op);
13371376                rd |= rr;
13381377                SREG_W(AVR8_SREG_V, 0);
1339                SREG_W(AVR8_SREG_N, rd & 0x80);
1378                SREG_W(AVR8_SREG_N, BIT(rd,7));
13401379                SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
13411380                SREG_W(AVR8_SREG_Z, (rd == 0) ? 1 : 0);
13421381                cpustate->r[16 + RD4(op)] = rd;
r18777r18778
13461385                rr = KCONST8(op);
13471386                rd &= rr;
13481387                SREG_W(AVR8_SREG_V, 0);
1349                SREG_W(AVR8_SREG_N, rd & 0x80);
1388                SREG_W(AVR8_SREG_N, BIT(rd,7));
13501389                SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
13511390                SREG_W(AVR8_SREG_Z, (rd == 0) ? 1 : 0);
13521391                cpustate->r[16 + RD4(op)] = rd;
r18777r18778
15601599                            case 0x0005:    // ASR Rd
15611600                                rd = cpustate->r[RD5(op)];
15621601                                res = (rd & 0x80) | (rd >> 1);
1563                                SREG_W(AVR8_SREG_C, rd & 0x01);
1602                                SREG_W(AVR8_SREG_C, BIT(rd,0));
15641603                                SREG_W(AVR8_SREG_Z, (res == 0) ? 1 : 0);
1565                                SREG_W(AVR8_SREG_N, (rd & 0x80) ? 1 : 0);
1604                                SREG_W(AVR8_SREG_N, BIT(rd,7));
15661605                                SREG_W(AVR8_SREG_V, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_C));
15671606                                SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
15681607                                cpustate->r[RD5(op)] = res;
r18777r18778
15701609                            case 0x0006:    // LSR Rd
15711610                                rd = cpustate->r[RD5(op)];
15721611                                res = rd >> 1;
1573                                SREG_W(AVR8_SREG_C, rd & 0x01);
1612                                SREG_W(AVR8_SREG_C, BIT(rd,0));
15741613                                SREG_W(AVR8_SREG_Z, (res == 0) ? 1 :0);
15751614                                SREG_W(AVR8_SREG_N, 0);
15761615                                SREG_W(AVR8_SREG_V, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_C));
r18777r18778
15811620                               rd = cpustate->r[RD5(op)];
15821621                               res = rd >> 1;
15831622                               res |= (SREG_R(AVR8_SREG_C) << 7);
1584                                SREG_W(AVR8_SREG_C, rd & 0x01);
1623                                SREG_W(AVR8_SREG_C, BIT(rd,0));
15851624                                SREG_W(AVR8_SREG_Z, (res == 0) ? 1 :0);
1586                                SREG_W(AVR8_SREG_N, res & 7);
1625                                SREG_W(AVR8_SREG_N, BIT(res,7));
15871626                                SREG_W(AVR8_SREG_V, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_C));
15881627                                SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
15891628                                cpustate->r[RD5(op)] = res;
r18777r18778
17051744                            case 0x0005:    // ASR Rd
17061745                                rd = cpustate->r[RD5(op)];
17071746                                res = (rd & 0x80) | (rd >> 1);
1708                                SREG_W(AVR8_SREG_C, rd & 0x01);
1747                                SREG_W(AVR8_SREG_C, BIT(rd,0));
17091748                                SREG_W(AVR8_SREG_Z, (res == 0) ? 1 : 0);
1710                                SREG_W(AVR8_SREG_N, (rd & 0x80) ? 1 : 0);
1749                                SREG_W(AVR8_SREG_N, BIT(rd,7));
17111750                                SREG_W(AVR8_SREG_V, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_C));
17121751                                SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
17131752                                cpustate->r[RD5(op)] = res;
r18777r18778
17151754                            case 0x0006:    // LSR Rd
17161755                                rd = cpustate->r[RD5(op)];
17171756                                res = rd >> 1;
1718                                SREG_W(AVR8_SREG_C, rd & 0x01);
1757                                SREG_W(AVR8_SREG_C, BIT(rd,0));
17191758                                SREG_W(AVR8_SREG_Z, (res == 0) ? 1 :0);
17201759                                SREG_W(AVR8_SREG_N, 0);
17211760                                SREG_W(AVR8_SREG_V, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_C));
r18777r18778
17261765                               rd = cpustate->r[RD5(op)];
17271766                               res = rd >> 1;
17281767                               res |= (SREG_R(AVR8_SREG_C) << 7);
1729                                SREG_W(AVR8_SREG_C, rd & 0x01);
1768                                SREG_W(AVR8_SREG_C, BIT(rd,0));
17301769                                SREG_W(AVR8_SREG_Z, (res == 0) ? 1 :0);
1731                                SREG_W(AVR8_SREG_N, res & 7);
1770                                SREG_W(AVR8_SREG_N, BIT(res,7));
17321771                                SREG_W(AVR8_SREG_V, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_C));
17331772                                SREG_W(AVR8_SREG_S, SREG_R(AVR8_SREG_N) ^ SREG_R(AVR8_SREG_V));
17341773                                cpustate->r[RD5(op)] = res;
r18777r18778
18601899                        opcycles = 2;
18611900                        break;
18621901                    case 0x0900:    // SBIC A,b
1863                      if(NOT(BIT(READ_IO_8(cpustate, 32 + ACONST5(op)), (1 << RR3(op)))))
1902                      if(NOT(BIT(READ_IO_8(cpustate, 32 + ACONST5(op)), RR3(op))))
18641903                      {
1904                            op = (UINT32)READ_PRG_16(cpustate, cpustate->pc + 1);
18651905                     opcycles = avr8_is_long_opcode(op) ? 3 : 2;
18661906                            cpustate->pc += avr8_is_long_opcode(op) ? 2 : 1;
18671907                  }
r18777r18778
18711911                        opcycles = 2;
18721912                        break;
18731913                    case 0x0b00:    // SBIS A,b
1874                      if(BIT(READ_IO_8(cpustate, 32 + ACONST5(op)), (1 << RR3(op))))
1914                      if(BIT(READ_IO_8(cpustate, 32 + ACONST5(op)), RR3(op)))
18751915                      {
1916                            op = (UINT32)READ_PRG_16(cpustate, cpustate->pc + 1);
18761917                     opcycles = avr8_is_long_opcode(op) ? 3 : 2;
18771918                            cpustate->pc += avr8_is_long_opcode(op) ? 2 : 1;
18781919                  }
trunk/src/mess/drivers/craft.c
r18777r18778
4444* I/O defines                                        *
4545\****************************************************/
4646
47#define AVR8_PORTD            (state->m_regs[AVR8_REGIDX_PORTD])
4748#define AVR8_DDRD            (state->m_regs[AVR8_REGIDX_DDRD])
4849#define AVR8_PORTC            (state->m_regs[AVR8_REGIDX_PORTC])
4950#define AVR8_DDRC            (state->m_regs[AVR8_REGIDX_DDRC])
r18777r18778
8283
8384   UINT8 m_regs[0x100];
8485    UINT8* m_eeprom;
85    UINT32 last_cycles;
86    UINT32 m_last_cycles;
8687
87    bool spi_pending;
88    UINT32 spi_start_cycle;
88    bool m_spi_pending;
89    UINT64 m_spi_start_cycle;
8990
90    UINT8 m_pixels[PIXELS_PER_FRAME + LINE_CYCLES]; // Allocate one extra line for wrapping in the video update
91    UINT64 m_frame_start_cycle;
9192
93    UINT8 m_pixels[PIXELS_PER_FRAME];
94
9295    required_device<cpu_device> m_maincpu;
9396
9497   DECLARE_READ8_MEMBER(avr8_read);
r18777r18778
110113    switch( offset )
111114    {
112115      case AVR8_REGIDX_EEDR:
116      case AVR8_REGIDX_PORTC:
117      case AVR8_REGIDX_PORTD:
113118         return m_regs[offset];
114119
115120        default:
r18777r18778
162167    craft_state *state = machine.driver_data<craft_state>();
163168
164169   UINT64 cycles = avr8_get_elapsed_cycles(state->m_maincpu);
165   UINT32 frame_cycles = (UINT32)(cycles % CYCLES_PER_FRAME);
170   UINT32 frame_cycles = (UINT32)(cycles - state->m_frame_start_cycle);
166171
167   if (state->last_cycles < frame_cycles)
172   if (state->m_last_cycles < frame_cycles)
168173   {
169      for (UINT32 pixidx = state->last_cycles; pixidx < frame_cycles; pixidx++)
174      for (UINT32 pixidx = state->m_last_cycles; pixidx < frame_cycles; pixidx++)
170175      {
171176         UINT8 value = AVR8_PORTC & 0x3f;
172         if (state->spi_pending)
177         if (state->m_spi_pending)
173178         {
174            if (pixidx >= state->spi_start_cycle && pixidx < (state->spi_start_cycle + 16))
179            if (pixidx >= state->m_spi_start_cycle && pixidx < (state->m_spi_start_cycle + 16))
175180            {
176               UINT8 bitidx = 7 - ((pixidx - state->spi_start_cycle) >> 1);
181               UINT8 bitidx = 7 - ((pixidx - state->m_spi_start_cycle) >> 1);
177182               value = ((state->m_regs[AVR8_REGIDX_SPDR] & (1 << bitidx)) ? value : 0x3f);
178               if (pixidx == (state->spi_start_cycle + 15))
183               if (pixidx == (state->m_spi_start_cycle + 15))
179184               {
180                  state->spi_pending = false;
185                  state->m_spi_pending = false;
181186                  state->m_regs[AVR8_REGIDX_SPDR] = 0;
182187               }
183188            }
r18777r18778
185190         state->m_pixels[pixidx] = value;
186191      }
187192   }
193   else
194   {
195      memset(state->m_pixels + state->m_last_cycles, 0, sizeof(state->m_pixels) - state->m_last_cycles);
196      memset(state->m_pixels, 0, frame_cycles);
197   }
188198
189   state->last_cycles = frame_cycles;
199   state->m_last_cycles = frame_cycles;
190200}
191201
192202static void avr8_change_port(running_machine &machine, int reg, UINT8 data)
r18777r18778
204214      //verboselog(machine, 0, "avr8_change_port: PORT%c lines %02x changed\n", avr8_reg_name[reg], changed);
205215   }
206216
207   if (reg == AVR8_REG_C)
217   switch(reg)
208218   {
209      avr8_video_update(machine);
219      case AVR8_REG_A:
220         // Unhandled
221         break;
210222
211      /*if (frame_cycles >= state->spi_start_cycle && frame_cycles < (state->spi_start_cycle + 16))
212        {
213            UINT8 bitidx = 7 - ((frame_cycles - state->spi_start_cycle) >> 1);
214            state->m_pixels[frame_cycles] = ((state->m_regs[AVR8_REGIDX_SPDR] & (1 << bitidx)) ? 0x3f : (data & 0x3f));
215        }
216        else
217        {
218            state->m_pixels[frame_cycles] = data & 0x3f;
219        }*/
223      case AVR8_REG_B:
224         AVR8_PORTB = data;
225         if(newport & changed & 0x02)
226         {
227            state->m_frame_start_cycle = avr8_get_elapsed_cycles(state->m_maincpu);
228         }
229         break;
220230
221      AVR8_PORTC = data;
222   }
231      case AVR8_REG_C:
232         avr8_video_update(machine);
233         AVR8_PORTC = data;
234         break;
223235
224   if (reg == AVR8_REG_D)
225   {
226      UINT8 audio_sample = (data & 0x02) | ((data & 0xf4) >> 2);
227
228      state->dac->write_unsigned8(audio_sample << 2);
236      case AVR8_REG_D:
237      {
238         UINT8 audio_sample = (data & 0x02) | ((data & 0xf4) >> 2);
239         state->dac->write_unsigned8(audio_sample << 2);
240         AVR8_PORTD = data;
241         break;
242      }
229243   }
230244}
231245
r18777r18778
357371      case AVR8_REGIDX_SPDR:
358372         avr8_video_update(machine());
359373         m_regs[offset] = data;
360         spi_pending = true;
361         spi_start_cycle = (UINT32)(avr8_get_elapsed_cycles(m_maincpu) % CYCLES_PER_FRAME);
374         m_spi_pending = true;
375         m_spi_start_cycle = avr8_get_elapsed_cycles(m_maincpu) - m_frame_start_cycle;
362376         break;
363377
364378      case AVR8_REGIDX_EECR:
r18777r18778
437451      UINT32 *line = &bitmap.pix32(y);
438452      for(int x = 0; x < LINE_CYCLES; x++)
439453      {
440         UINT8 pixel = m_pixels[y * LINE_CYCLES + (x + HSYNC_CYCLES)];
454         UINT8 pixel = m_pixels[y * LINE_CYCLES + x];
441455         UINT8 r = 0x55 * ((pixel & 0x30) >> 4);
442456         UINT8 g = 0x55 * ((pixel & 0x0c) >> 2);
443457         UINT8 b = 0x55 * (pixel & 0x03);
444458         line[x] = 0xff000000 | (r << 16) | (g << 8) | b;
445
446         // Clear behind us
447         m_pixels[y * LINE_CYCLES + (x + HSYNC_CYCLES)] = 0;
448459      }
449460   }
450461    return 0;
r18777r18778
467478    state->dac->write_unsigned8(0x00);
468479
469480    state->m_eeprom = memregion("eeprom")->base();
481
482    state->m_frame_start_cycle = 0;
483    state->m_last_cycles = 0;
484
485    state->m_spi_pending = false;
486
487    state->m_spi_start_cycle = 0;
470488}
471489
472490static MACHINE_CONFIG_START( craft, craft_state )
r18777r18778
482500    MCFG_SCREEN_REFRESH_RATE(59.99)
483501    MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1429)) /* accurate */
484502    MCFG_SCREEN_SIZE(635, 525)
485    MCFG_SCREEN_VISIBLE_AREA(0, 634, 0, 524)
503    MCFG_SCREEN_VISIBLE_AREA(47, 526, 36, 515)
486504   MCFG_SCREEN_UPDATE_DRIVER(craft_state, screen_update_craft)
487505    MCFG_PALETTE_LENGTH(0x1000)
488506
r18777r18778
500518ROM_END
501519
502520/*   YEAR  NAME      PARENT    COMPAT    MACHINE   INPUT     INIT      COMPANY          FULLNAME */
503CONS(2008, craft,    0,        0,        craft,    craft, craft_state,    craft,    "Linus Akesson", "Craft", GAME_NO_SOUND | GAME_NOT_WORKING)
521CONS(2008, craft,    0,        0,        craft,    craft, craft_state,    craft,    "Linus Akesson", "Craft", GAME_IMPERFECT_GRAPHICS)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team