src/mess/machine/vtech1.c
| r2180 | r2181 | |
| 53 | 53 | #include "devices/printer.h" |
| 54 | 54 | #include "cpu/z80/z80.h" |
| 55 | 55 | #include "sound/speaker.h" |
| 56 | #include "ui.h" |
| 56 | 57 | |
| 57 | 58 | |
| 58 | 59 | #define LOG_VTECH1_LATCH 0 |
| r2180 | r2181 | |
| 177 | 178 | |
| 178 | 179 | SNAPSHOT_LOAD(vtech1) |
| 179 | 180 | { |
| 180 | | UINT8 header[24]; |
| 181 | | UINT16 start, end; |
| 181 | UINT8 i, header[24]; |
| 182 | UINT16 start, end, size; |
| 183 | char * pgmname; |
| 184 | pgmname = (char *) malloc(18); |
| 182 | 185 | |
| 183 | 186 | /* get the header */ |
| 184 | 187 | image_fread(image, &header, sizeof(header)); |
| 188 | for (i = 0; i < 16; i++) pgmname[i] = header[i+4]; |
| 189 | pgmname[16] = 0; |
| 185 | 190 | |
| 186 | 191 | /* get start and end addresses */ |
| 187 | 192 | start = pick_integer_le(header, 22, 2); |
| 188 | 193 | end = start + snapshot_size - sizeof(header); |
| 194 | size = end - start; |
| 189 | 195 | |
| 190 | 196 | /* check if we have enough ram */ |
| 191 | | if (mess_ram_size < end - start) |
| 197 | if (mess_ram_size < size) |
| 198 | { |
| 199 | ui_popup_time(10,"SNAPLOAD: %s\nInsufficient RAM - need %04X",pgmname,size); |
| 200 | free(pgmname); |
| 192 | 201 | return INIT_FAIL; |
| 202 | } |
| 193 | 203 | |
| 194 | 204 | /* write it to ram */ |
| 195 | | image_fread(image, &mess_ram[start - 0x7800], end - start); |
| 205 | image_fread(image, &mess_ram[start - 0x7800], size); |
| 196 | 206 | |
| 197 | 207 | /* patch variables depending on snapshot type */ |
| 198 | 208 | switch (header[21]) |
| 199 | 209 | { |
| 200 | | case VZ_BASIC: |
| 210 | case VZ_BASIC: /* 0xF0 */ |
| 201 | 211 | program_write_byte_8(0x78a4, start % 256); /* start of basic program */ |
| 202 | 212 | program_write_byte_8(0x78a5, start / 256); |
| 203 | 213 | program_write_byte_8(0x78f9, end % 256); /* end of basic program */ |
| r2180 | r2181 | |
| 206 | 216 | program_write_byte_8(0x78fc, end / 256); |
| 207 | 217 | program_write_byte_8(0x78fd, end % 256); /* start free mem, end variable table */ |
| 208 | 218 | program_write_byte_8(0x78fe, end / 256); |
| 219 | popmessage("%s (B)\nsize=%04X : start=%04X : end=%04X",pgmname,size,start,end); |
| 220 | free(pgmname); |
| 209 | 221 | break; |
| 210 | 222 | |
| 211 | | case VZ_MCODE: |
| 223 | case VZ_MCODE: /* 0xF1 */ |
| 212 | 224 | program_write_byte_8(0x788e, start % 256); /* usr subroutine address */ |
| 213 | 225 | program_write_byte_8(0x788f, start / 256); |
| 226 | popmessage("%s (M)\nsize=%04X : start=%04X : end=%04X",pgmname,size,start,end); |
| 227 | free(pgmname); |
| 228 | cpunum_set_reg(0, REG_PC, start); /* start program */ |
| 214 | 229 | break; |
| 215 | 230 | |
| 216 | 231 | default: |
| 217 | 232 | image_seterror(image, IMAGE_ERROR_UNSUPPORTED, "Snapshot format not supported."); |
| 233 | free(pgmname); |
| 218 | 234 | return INIT_FAIL; |
| 219 | 235 | break; |
| 220 | 236 | } |
src/mess/drivers/vtech1.c
| r2180 | r2181 | |
| 575 | 575 | COMP( 1983, las110de, laser110, 0, laser110, vtech1, 0, laser110, "Sanyo", "Laser 110 (Germany)", 0 ) |
| 576 | 576 | |
| 577 | 577 | COMP( 1983, laser200, 0, 0, laser200, vtech1, 0, laser110, "Video Technology", "Laser 200", 0 ) |
| 578 | | COMP( 1983, vz200de, laser200, 0, laser200, vtech1, 0, laser110, "Video Technology", "VZ-200 (Germany & Netherlands)", 0 ) |
| 578 | COMP( 1983, vz200de, laser200, 0, laser200, vtech1, 0, laser110, "Video Technology", "VZ-200 (Germany & Netherlands)", GAME_NOT_WORKING ) |
| 579 | 579 | COMP( 1983, fellow, laser200, 0, laser200, vtech1, 0, laser110, "Salora", "Fellow (Finland)", 0 ) |
| 580 | 580 | COMP( 1983, tx8000, laser200, 0, laser200, vtech1, 0, laser110, "Texet", "TX-8000 (UK)", 0 ) |
| 581 | 581 | |