trunk/3rdparty/bgfx/examples/common/imgui/fs_imgui_latlong.bin.h
| r244652 | r244653 | |
| 1 | | static const uint8_t fs_imgui_latlong_glsl[646] = |
| 1 | static const uint8_t fs_imgui_latlong_glsl[649] = |
| 2 | 2 | { |
| 3 | 3 | 0x46, 0x53, 0x48, 0x03, 0x6f, 0x1e, 0x3e, 0x3c, 0x02, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima |
| 4 | 4 | 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x07, 0x01, 0x00, 0x00, // geLodEnabled.... |
| 5 | 5 | 0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, // ...s_texColor... |
| 6 | | 0x00, 0x01, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // ...N...varying h |
| 6 | 0x00, 0x01, 0x00, 0x51, 0x02, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // ...Q...varying h |
| 7 | 7 | 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ighp vec2 v_texc |
| 8 | 8 | 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, // oord0;.uniform h |
| 9 | 9 | 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, // ighp vec4 u_imag |
| r244652 | r244653 | |
| 21 | 21 | 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x5f, // tmpvar_3 = (v_ |
| 22 | 22 | 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2e, 0x79, 0x20, 0x2a, 0x20, 0x33, 0x2e, // texcoord0.y * 3. |
| 23 | 23 | 0x31, 0x34, 0x31, 0x35, 0x39, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, // 14159);. result |
| 24 | | 0x5f, 0x31, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, // _1.x = (sin(tmpv |
| 25 | | 0x61, 0x72, 0x5f, 0x33, 0x29, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x74, 0x6d, 0x70, 0x76, // ar_3) * cos(tmpv |
| 26 | | 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, // ar_2));. result |
| 27 | | 0x5f, 0x31, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // _1.y = cos(tmpva |
| 28 | | 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, // r_3);. result_1 |
| 29 | | 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, 0x76, // .z = (-(sin(tmpv |
| 30 | | 0x61, 0x72, 0x5f, 0x33, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, 0x70, // ar_3)) * sin(tmp |
| 31 | | 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, // var_2));. lowp |
| 32 | | 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, // vec4 tmpvar_4;. |
| 33 | | 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_4.xyz = |
| 34 | | 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, 0x64, 0x20, 0x20, // textureCubeLod |
| 35 | | 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x72, // (s_texColor, r |
| 36 | | 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2c, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, // esult_1, u_image |
| 37 | | 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x2e, 0x78, 0x79, // LodEnabled.x).xy |
| 38 | | 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x77, 0x20, // z;. tmpvar_4.w |
| 39 | | 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, // = (0.2 + (0.8 * |
| 40 | | 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, // u_imageLodEnable |
| 41 | | 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, // d.y));. gl_Frag |
| 42 | | 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, // Color = tmpvar_4 |
| 43 | | 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // ;.}... |
| 24 | 0x5f, 0x31, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x6d, // _1.x = (-(sin(tm |
| 25 | 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x74, // pvar_3)) * sin(t |
| 26 | 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x73, // mpvar_2));. res |
| 27 | 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x74, 0x6d, // ult_1.y = cos(tm |
| 28 | 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, // pvar_3);. resul |
| 29 | 0x74, 0x5f, 0x31, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x74, // t_1.z = (-(sin(t |
| 30 | 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x73, 0x28, // mpvar_3)) * cos( |
| 31 | 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, // tmpvar_2));. lo |
| 32 | 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, // wp vec4 tmpvar_4 |
| 33 | 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x79, 0x7a, // ;. tmpvar_4.xyz |
| 34 | 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x6f, // = textureCubeLo |
| 35 | 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, // d (s_texColor |
| 36 | 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x31, 0x2c, 0x20, 0x75, 0x5f, 0x69, 0x6d, // , result_1, u_im |
| 37 | 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, // ageLodEnabled.x) |
| 38 | 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, // .xyz;. tmpvar_4 |
| 39 | 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, // .w = (0.2 + (0.8 |
| 40 | 0x20, 0x2a, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, // * u_imageLodEna |
| 41 | 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // bled.y));. gl_F |
| 42 | 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ragColor = tmpva |
| 43 | 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r_4;.}... |
| 44 | 44 | }; |
| 45 | | static const uint8_t fs_imgui_latlong_dx9[553] = |
| 45 | static const uint8_t fs_imgui_latlong_dx9[537] = |
| 46 | 46 | { |
| 47 | 47 | 0x46, 0x53, 0x48, 0x03, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima |
| 48 | 48 | 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x15, 0x01, 0x00, 0x00, // geLodEnabled.... |
| 49 | | 0x01, 0x00, 0x04, 0x02, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x30, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........0.CTAB |
| 49 | 0x01, 0x00, 0xf4, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, 0xff, 0x30, 0x00, 0x43, 0x54, 0x41, 0x42, // ..........0.CTAB |
| 50 | 50 | 0x1c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, // ................ |
| 51 | 51 | 0x1c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, // ............D... |
| 52 | 52 | 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P....... |
| r244652 | r244653 | |
| 71 | 71 | 0x01, 0x00, 0x00, 0xa0, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, // ................ |
| 72 | 72 | 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x55, 0xa0, // ..............U. |
| 73 | 73 | 0x01, 0x00, 0xaa, 0xa0, 0x25, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x80, // ....%........... |
| 74 | | 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, 0x02, 0x00, 0x55, 0x80, // ..............U. |
| 75 | | 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x55, 0x80, 0x02, 0x00, 0x55, 0x81, // ..........U...U. |
| 74 | 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x05, 0x80, 0x01, 0x00, 0xc5, 0x80, 0x02, 0x00, 0x55, 0x81, // ..............U. |
| 76 | 75 | 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x02, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, // ................ |
| 77 | 76 | 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, // ........_....... |
| 78 | 77 | 0x00, 0x00, 0xe4, 0x80, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x07, 0x80, // ................ |
| r244652 | r244653 | |
| 84 | 83 | { |
| 85 | 84 | 0x46, 0x53, 0x48, 0x03, 0x6f, 0x1e, 0x3e, 0x3c, 0x01, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima |
| 86 | 85 | 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x15, 0x00, 0x30, 0x0a, // geLodEnabled..0. |
| 87 | | 0x01, 0x00, 0x30, 0x02, 0x44, 0x58, 0x42, 0x43, 0x89, 0x11, 0x25, 0xa6, 0xf5, 0x66, 0x12, 0x3f, // ..0.DXBC..%..f.? |
| 88 | | 0xc0, 0x1f, 0x67, 0x9b, 0x6e, 0x4e, 0xac, 0x03, 0x01, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, // ..g.nN......0... |
| 86 | 0x01, 0x00, 0x30, 0x02, 0x44, 0x58, 0x42, 0x43, 0xbb, 0x3e, 0xd7, 0x3a, 0x63, 0xc9, 0x70, 0x0b, // ..0.DXBC.>.:c.p. |
| 87 | 0xa5, 0x2c, 0x7d, 0xb2, 0x3c, 0x0c, 0x75, 0x44, 0x01, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, // .,}.<.uD....0... |
| 89 | 88 | 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, // ....,........... |
| 90 | 89 | 0x49, 0x53, 0x47, 0x4e, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // ISGNP........... |
| 91 | 90 | 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // 8............... |
| r244652 | r244653 | |
| 101 | 100 | 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x30, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, // .`......X0...p.. |
| 102 | 101 | 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, // ....UU..b...2... |
| 103 | 102 | 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....e.... ...... |
| 104 | | 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, // h.......8...2... |
| 105 | | 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, // ....F........@.. |
| 106 | | 0xdb, 0x0f, 0xc9, 0x40, 0xdb, 0x0f, 0x49, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...@..I@........ |
| 107 | | 0x4d, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, // M...B........... |
| 108 | | 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x06, // ....A.......M... |
| 109 | | 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x16, 0x05, 0x10, 0x00, // 2............... |
| 103 | 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, // h.......8...2... |
| 104 | 0x00, 0x00, 0x00, 0x00, 0x16, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, // .............@.. |
| 105 | 0xdb, 0x0f, 0x49, 0x40, 0xdb, 0x0f, 0xc9, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ..I@...@........ |
| 106 | 0x4d, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, // M...B........... |
| 107 | 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, // ........M....... |
| 108 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, // ............A... |
| 110 | 109 | 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x06, 0x00, 0xd0, 0x00, 0x00, 0x62, 0x00, 0x10, 0x00, // ....M.......b... |
| 111 | | 0x02, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // ............8... |
| 112 | | 0x82, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........*....... |
| 113 | | 0x1a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, // ........8....... |
| 114 | | 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, // ................ |
| 115 | | 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....H........... |
| 116 | | 0x86, 0x03, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........F~...... |
| 110 | 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // ............8... |
| 111 | 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ........*....... |
| 112 | 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, // :.......8....... |
| 113 | 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, // ....:.......*... |
| 114 | 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0c, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....H........... |
| 115 | 0x46, 0x03, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // F.......F~...... |
| 117 | 116 | 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // .`........ ..... |
| 118 | 117 | 0xa3, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....6...r ...... |
| 119 | 118 | 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x82, 0x20, 0x10, 0x00, // F.......2.... .. |
trunk/3rdparty/bgfx/src/bgfx.cpp
| r244652 | r244653 | |
| 19 | 19 | # define BGFX_CHECK_RENDER_THREAD() |
| 20 | 20 | #endif // BGFX_CONFIG_MULTITHREADED && !BX_PLATFORM_OSX && !BX_PLATFORM_IOS |
| 21 | 21 | |
| 22 | #define BGFX_CHECK_HANDLE(_handle, _max) \ |
| 23 | BX_CHECK(isValid(_handle) \ |
| 24 | && _handle.idx < _max \ |
| 25 | , "Invalid handle. %d (< %d " #_max ")" \ |
| 26 | , _handle.idx \ |
| 27 | , _max \ |
| 28 | ); |
| 29 | |
| 22 | 30 | #if BX_PLATFORM_ANDROID |
| 23 | 31 | ::ANativeWindow* g_bgfxAndroidWindow = NULL; |
| 24 | 32 | |
| r244652 | r244653 | |
| 797 | 805 | |
| 798 | 806 | void Frame::sort() |
| 799 | 807 | { |
| 808 | for (uint32_t ii = 0, num = m_num; ii < num; ++ii) |
| 809 | { |
| 810 | m_sortKeys[ii] = SortKey::remapView(m_sortKeys[ii], m_viewRemap); |
| 811 | } |
| 800 | 812 | bx::radixSort64(m_sortKeys, s_ctx->m_tempKeys, m_sortValues, s_ctx->m_tempValues, m_num); |
| 801 | 813 | } |
| 802 | 814 | |
| r244652 | r244653 | |
| 951 | 963 | BX_TRACE("Multithreaded renderer is disabled."); |
| 952 | 964 | #endif // BGFX_CONFIG_MULTITHREADED |
| 953 | 965 | |
| 966 | for (uint32_t ii = 0; ii < BX_COUNTOF(m_viewRemap); ++ii) |
| 967 | { |
| 968 | m_viewRemap[ii] = ii; |
| 969 | } |
| 970 | |
| 954 | 971 | memset(m_fb, 0xff, sizeof(m_fb) ); |
| 955 | 972 | memset(m_clear, 0, sizeof(m_clear) ); |
| 956 | 973 | memset(m_rect, 0, sizeof(m_rect) ); |
| r244652 | r244653 | |
| 1156 | 1173 | freeDynamicBuffers(); |
| 1157 | 1174 | m_submit->m_resolution = m_resolution; |
| 1158 | 1175 | m_submit->m_debug = m_debug; |
| 1176 | |
| 1177 | memcpy(m_submit->m_viewRemap, m_viewRemap, sizeof(m_viewRemap) ); |
| 1159 | 1178 | memcpy(m_submit->m_fb, m_fb, sizeof(m_fb) ); |
| 1160 | 1179 | memcpy(m_submit->m_clear, m_clear, sizeof(m_clear) ); |
| 1161 | 1180 | memcpy(m_submit->m_rect, m_rect, sizeof(m_rect) ); |
| r244652 | r244653 | |
| 1961 | 1980 | g_caps.supported = 0 |
| 1962 | 1981 | | (BGFX_CONFIG_MULTITHREADED ? BGFX_CAPS_RENDERER_MULTITHREADED : 0) |
| 1963 | 1982 | ; |
| 1983 | g_caps.maxViews = BGFX_CONFIG_MAX_VIEWS; |
| 1964 | 1984 | g_caps.maxDrawCalls = BGFX_CONFIG_MAX_DRAW_CALLS; |
| 1965 | 1985 | g_caps.maxFBAttachments = 1; |
| 1966 | 1986 | |
| r244652 | r244653 | |
| 2617 | 2637 | s_ctx->setClearColor(_index, _rgba); |
| 2618 | 2638 | } |
| 2619 | 2639 | |
| 2640 | bool checkView(uint8_t _id) |
| 2641 | { |
| 2642 | // workaround GCC 4.9 type-limit check. |
| 2643 | const uint32_t id = _id; |
| 2644 | return id < BGFX_CONFIG_MAX_VIEWS; |
| 2645 | } |
| 2646 | |
| 2620 | 2647 | void setViewName(uint8_t _id, const char* _name) |
| 2621 | 2648 | { |
| 2622 | 2649 | BGFX_CHECK_MAIN_THREAD(); |
| 2623 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2650 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2624 | 2651 | s_ctx->setViewName(_id, _name); |
| 2625 | 2652 | } |
| 2626 | 2653 | |
| 2627 | 2654 | void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) |
| 2628 | 2655 | { |
| 2629 | 2656 | BGFX_CHECK_MAIN_THREAD(); |
| 2630 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2657 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2631 | 2658 | s_ctx->setViewRect(_id, _x, _y, _width, _height); |
| 2632 | 2659 | } |
| 2633 | 2660 | |
| 2634 | 2661 | void setViewScissor(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height) |
| 2635 | 2662 | { |
| 2636 | 2663 | BGFX_CHECK_MAIN_THREAD(); |
| 2637 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2664 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2638 | 2665 | s_ctx->setViewScissor(_id, _x, _y, _width, _height); |
| 2639 | 2666 | } |
| 2640 | 2667 | |
| 2641 | 2668 | void setViewClear(uint8_t _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil) |
| 2642 | 2669 | { |
| 2643 | 2670 | BGFX_CHECK_MAIN_THREAD(); |
| 2644 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2671 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2645 | 2672 | s_ctx->setViewClear(_id, _flags, _rgba, _depth, _stencil); |
| 2646 | 2673 | } |
| 2647 | 2674 | |
| 2648 | 2675 | void setViewClear(uint8_t _id, uint16_t _flags, float _depth, uint8_t _stencil, uint8_t _0, uint8_t _1, uint8_t _2, uint8_t _3, uint8_t _4, uint8_t _5, uint8_t _6, uint8_t _7) |
| 2649 | 2676 | { |
| 2650 | 2677 | BGFX_CHECK_MAIN_THREAD(); |
| 2651 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2678 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2652 | 2679 | s_ctx->setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7); |
| 2653 | 2680 | } |
| 2654 | 2681 | |
| 2655 | 2682 | void setViewSeq(uint8_t _id, bool _enabled) |
| 2656 | 2683 | { |
| 2657 | 2684 | BGFX_CHECK_MAIN_THREAD(); |
| 2658 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2685 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2659 | 2686 | s_ctx->setViewSeq(_id, _enabled); |
| 2660 | 2687 | } |
| 2661 | 2688 | |
| 2662 | 2689 | void setViewFrameBuffer(uint8_t _id, FrameBufferHandle _handle) |
| 2663 | 2690 | { |
| 2664 | 2691 | BGFX_CHECK_MAIN_THREAD(); |
| 2665 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2692 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2666 | 2693 | s_ctx->setViewFrameBuffer(_id, _handle); |
| 2667 | 2694 | } |
| 2668 | 2695 | |
| 2669 | 2696 | void setViewTransform(uint8_t _id, const void* _view, const void* _projL, uint8_t _flags, const void* _projR) |
| 2670 | 2697 | { |
| 2671 | 2698 | BGFX_CHECK_MAIN_THREAD(); |
| 2672 | | BX_CHECK(_id < BGFX_CONFIG_MAX_VIEWS, "Invalid view id: %d", _id); |
| 2699 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2673 | 2700 | s_ctx->setViewTransform(_id, _view, _projL, _flags, _projR); |
| 2674 | 2701 | } |
| 2675 | 2702 | |
| 2703 | void setViewRemap(uint8_t _id, uint8_t _num, const void* _remap) |
| 2704 | { |
| 2705 | BGFX_CHECK_MAIN_THREAD(); |
| 2706 | BX_CHECK(checkView(_id), "Invalid view id: %d", _id); |
| 2707 | s_ctx->setViewRemap(_id, _num, _remap); |
| 2708 | } |
| 2709 | |
| 2676 | 2710 | void setMarker(const char* _marker) |
| 2677 | 2711 | { |
| 2678 | 2712 | BGFX_CHECK_MAIN_THREAD(); |
| r244652 | r244653 | |
| 2724 | 2758 | void setUniform(UniformHandle _handle, const void* _value, uint16_t _num) |
| 2725 | 2759 | { |
| 2726 | 2760 | BGFX_CHECK_MAIN_THREAD(); |
| 2761 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_UNIFORMS); |
| 2727 | 2762 | s_ctx->setUniform(_handle, _value, _num); |
| 2728 | 2763 | } |
| 2729 | 2764 | |
| 2730 | 2765 | void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices) |
| 2731 | 2766 | { |
| 2732 | 2767 | BGFX_CHECK_MAIN_THREAD(); |
| 2768 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_INDEX_BUFFERS); |
| 2733 | 2769 | s_ctx->setIndexBuffer(_handle, _firstIndex, _numIndices); |
| 2734 | 2770 | } |
| 2735 | 2771 | |
| 2736 | 2772 | void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices) |
| 2737 | 2773 | { |
| 2738 | 2774 | BGFX_CHECK_MAIN_THREAD(); |
| 2775 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS); |
| 2739 | 2776 | s_ctx->setIndexBuffer(_handle, _firstIndex, _numIndices); |
| 2740 | 2777 | } |
| 2741 | 2778 | |
| r244652 | r244653 | |
| 2760 | 2797 | void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices) |
| 2761 | 2798 | { |
| 2762 | 2799 | BGFX_CHECK_MAIN_THREAD(); |
| 2800 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_VERTEX_BUFFERS); |
| 2763 | 2801 | s_ctx->setVertexBuffer(_handle, _startVertex, _numVertices); |
| 2764 | 2802 | } |
| 2765 | 2803 | |
| 2766 | 2804 | void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices) |
| 2767 | 2805 | { |
| 2768 | 2806 | BGFX_CHECK_MAIN_THREAD(); |
| 2807 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS); |
| 2769 | 2808 | s_ctx->setVertexBuffer(_handle, _numVertices); |
| 2770 | 2809 | } |
| 2771 | 2810 | |
| r244652 | r244653 | |
| 2784 | 2823 | void setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint32_t _num) |
| 2785 | 2824 | { |
| 2786 | 2825 | BGFX_CHECK_MAIN_THREAD(); |
| 2826 | BX_CHECK(NULL != _idb, "_idb can't be NULL"); |
| 2787 | 2827 | s_ctx->setInstanceDataBuffer(_idb, _num); |
| 2788 | 2828 | } |
| 2789 | 2829 | |
| 2790 | 2830 | void setInstanceDataBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num) |
| 2791 | 2831 | { |
| 2792 | 2832 | BGFX_CHECK_MAIN_THREAD(); |
| 2833 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_VERTEX_BUFFERS); |
| 2793 | 2834 | s_ctx->setInstanceDataBuffer(_handle, _startVertex, _num); |
| 2794 | 2835 | } |
| 2795 | 2836 | |
| 2796 | 2837 | void setInstanceDataBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _num) |
| 2797 | 2838 | { |
| 2798 | 2839 | BGFX_CHECK_MAIN_THREAD(); |
| 2840 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS); |
| 2799 | 2841 | s_ctx->setInstanceDataBuffer(_handle, _startVertex, _num); |
| 2800 | 2842 | } |
| 2801 | 2843 | |
| 2802 | 2844 | void setProgram(ProgramHandle _handle) |
| 2803 | 2845 | { |
| 2804 | 2846 | BGFX_CHECK_MAIN_THREAD(); |
| 2847 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_PROGRAMS); |
| 2805 | 2848 | s_ctx->setProgram(_handle); |
| 2806 | 2849 | } |
| 2807 | 2850 | |
| r244652 | r244653 | |
| 2826 | 2869 | void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access) |
| 2827 | 2870 | { |
| 2828 | 2871 | BGFX_CHECK_MAIN_THREAD(); |
| 2872 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_INDEX_BUFFERS); |
| 2829 | 2873 | s_ctx->setBuffer(_stage, _handle, _access); |
| 2830 | 2874 | } |
| 2831 | 2875 | |
| 2832 | 2876 | void setBuffer(uint8_t _stage, VertexBufferHandle _handle, Access::Enum _access) |
| 2833 | 2877 | { |
| 2834 | 2878 | BGFX_CHECK_MAIN_THREAD(); |
| 2879 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_VERTEX_BUFFERS); |
| 2835 | 2880 | s_ctx->setBuffer(_stage, _handle, _access); |
| 2836 | 2881 | } |
| 2837 | 2882 | |
| 2838 | 2883 | void setBuffer(uint8_t _stage, DynamicIndexBufferHandle _handle, Access::Enum _access) |
| 2839 | 2884 | { |
| 2840 | 2885 | BGFX_CHECK_MAIN_THREAD(); |
| 2886 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS); |
| 2841 | 2887 | s_ctx->setBuffer(_stage, _handle, _access); |
| 2842 | 2888 | } |
| 2843 | 2889 | |
| 2844 | 2890 | void setBuffer(uint8_t _stage, DynamicVertexBufferHandle _handle, Access::Enum _access) |
| 2845 | 2891 | { |
| 2846 | 2892 | BGFX_CHECK_MAIN_THREAD(); |
| 2893 | BGFX_CHECK_HANDLE(_handle, BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS); |
| 2847 | 2894 | s_ctx->setBuffer(_stage, _handle, _access); |
| 2848 | 2895 | } |
| 2849 | 2896 | |
| 2850 | | void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access) |
| 2897 | void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format) |
| 2851 | 2898 | { |
| 2852 | 2899 | BGFX_CHECK_MAIN_THREAD(); |
| 2853 | | s_ctx->setImage(_stage, _sampler, _handle, _mip, _format, _access); |
| 2900 | s_ctx->setImage(_stage, _sampler, _handle, _mip, _access, _format); |
| 2854 | 2901 | } |
| 2855 | 2902 | |
| 2856 | | void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, TextureFormat::Enum _format, Access::Enum _access) |
| 2903 | void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format) |
| 2857 | 2904 | { |
| 2858 | 2905 | BGFX_CHECK_MAIN_THREAD(); |
| 2859 | | s_ctx->setImage(_stage, _sampler, _handle, _attachment, _format, _access); |
| 2906 | s_ctx->setImage(_stage, _sampler, _handle, _attachment, _access, _format); |
| 2860 | 2907 | } |
| 2861 | 2908 | |
| 2862 | 2909 | void dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) |
| r244652 | r244653 | |
| 3466 | 3513 | return bgfx::submit(_id, _depth); |
| 3467 | 3514 | } |
| 3468 | 3515 | |
| 3469 | | BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_texture_format_t _format, bgfx_access_t _access) |
| 3516 | BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format) |
| 3470 | 3517 | { |
| 3471 | 3518 | union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler }; |
| 3472 | 3519 | union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle }; |
| 3473 | | bgfx::setImage(_stage, sampler.cpp, handle.cpp, _mip, bgfx::TextureFormat::Enum(_format), bgfx::Access::Enum(_access) ); |
| 3520 | bgfx::setImage(_stage, sampler.cpp, handle.cpp, _mip, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) ); |
| 3474 | 3521 | } |
| 3475 | 3522 | |
| 3476 | | BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_texture_format_t _format, bgfx_access_t _access) |
| 3523 | BGFX_C_API void bgfx_set_image_from_frame_buffer(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_access_t _access, bgfx_texture_format_t _format) |
| 3477 | 3524 | { |
| 3478 | 3525 | union { bgfx_uniform_handle_t c; bgfx::UniformHandle cpp; } sampler = { _sampler }; |
| 3479 | 3526 | union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle }; |
| 3480 | | bgfx::setImage(_stage, sampler.cpp, handle.cpp, _attachment, bgfx::TextureFormat::Enum(_format), bgfx::Access::Enum(_access) ); |
| 3527 | bgfx::setImage(_stage, sampler.cpp, handle.cpp, _attachment, bgfx::Access::Enum(_access), bgfx::TextureFormat::Enum(_format) ); |
| 3481 | 3528 | } |
| 3482 | 3529 | |
| 3483 | 3530 | BGFX_C_API void bgfx_dispatch(uint8_t _id, bgfx_program_handle_t _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) |
trunk/3rdparty/bgfx/src/bgfx_p.h
| r244652 | r244653 | |
| 679 | 679 | }; |
| 680 | 680 | |
| 681 | 681 | #define SORT_KEY_RENDER_DRAW (UINT64_C(1)<<0x2b) |
| 682 | #define SORT_KEY_VIEW_SHIFT UINT8_C(0x37) |
| 683 | #define SORT_KEY_VIEW_MASK ( (uint64_t(BGFX_CONFIG_MAX_VIEWS-1) )<<SORT_KEY_VIEW_SHIFT) |
| 682 | 684 | |
| 683 | | BX_STATIC_ASSERT(BGFX_CONFIG_MAX_VIEWS <= 32); |
| 685 | BX_STATIC_ASSERT(BGFX_CONFIG_MAX_VIEWS <= 256); |
| 684 | 686 | BX_STATIC_ASSERT( (BGFX_CONFIG_MAX_PROGRAMS & (BGFX_CONFIG_MAX_PROGRAMS-1) ) == 0); // must be power of 2 |
| 685 | 687 | |
| 686 | 688 | struct SortKey |
| r244652 | r244653 | |
| 689 | 691 | { |
| 690 | 692 | // | 3 2 1 0| |
| 691 | 693 | // |fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210| |
| 692 | | // | vvvvvsssssssssssdttpppppppppdddddddddddddddddddddddddddddddd| |
| 694 | // | vvvvvvvvsssssssssssdttpppppppppdddddddddddddddddddddddddddddddd| |
| 693 | 695 | // | ^ ^^ ^ ^ ^| |
| 694 | 696 | // | | || | | || |
| 695 | 697 | // | view-+ seq-+| +-trans +-program depth-+| |
| r244652 | r244653 | |
| 699 | 701 | const uint64_t program = uint64_t(m_program)<<0x20; |
| 700 | 702 | const uint64_t trans = uint64_t(m_trans )<<0x29; |
| 701 | 703 | const uint64_t seq = uint64_t(m_seq )<<0x2c; |
| 702 | | const uint64_t view = uint64_t(m_view )<<0x37; |
| 704 | const uint64_t view = uint64_t(m_view )<<SORT_KEY_VIEW_SHIFT; |
| 703 | 705 | const uint64_t key = depth|program|trans|SORT_KEY_RENDER_DRAW|seq|view; |
| 704 | 706 | return key; |
| 705 | 707 | } |
| r244652 | r244653 | |
| 708 | 710 | { |
| 709 | 711 | // | 3 2 1 0| |
| 710 | 712 | // |fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210| |
| 711 | | // | vvvvvsssssssssssdppppppppp | |
| 713 | // | vvvvvvvvsssssssssssdppppppppp | |
| 712 | 714 | // | ^ ^^ ^ | |
| 713 | 715 | // | | || | | |
| 714 | 716 | // | view-+ seq-+| +-program | |
| r244652 | r244653 | |
| 716 | 718 | |
| 717 | 719 | const uint64_t program = uint64_t(m_program)<<0x22; |
| 718 | 720 | const uint64_t seq = uint64_t(m_seq )<<0x2c; |
| 719 | | const uint64_t view = uint64_t(m_view )<<0x37; |
| 721 | const uint64_t view = uint64_t(m_view )<<SORT_KEY_VIEW_SHIFT; |
| 720 | 722 | const uint64_t key = program|seq|view; |
| 721 | 723 | return key; |
| 722 | 724 | } |
| r244652 | r244653 | |
| 725 | 727 | bool decode(uint64_t _key) |
| 726 | 728 | { |
| 727 | 729 | m_seq = (_key>>0x2c)& 0x7ff; |
| 728 | | m_view = (_key>>0x37)&(BGFX_CONFIG_MAX_VIEWS-1); |
| 730 | m_view = uint8_t( (_key&SORT_KEY_VIEW_MASK)>>SORT_KEY_VIEW_SHIFT); |
| 729 | 731 | if (_key & SORT_KEY_RENDER_DRAW) |
| 730 | 732 | { |
| 731 | 733 | m_depth = _key & 0xffffffff; |
| r244652 | r244653 | |
| 738 | 740 | return true; // compute |
| 739 | 741 | } |
| 740 | 742 | |
| 743 | bool decode(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) |
| 744 | { |
| 745 | bool compute = decode(_key); |
| 746 | m_view = _viewRemap[m_view]; |
| 747 | return compute; |
| 748 | } |
| 749 | |
| 750 | static uint64_t remapView(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) |
| 751 | { |
| 752 | const uint8_t oldView = uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT); |
| 753 | const uint64_t view = uint64_t(_viewRemap[oldView]) << SORT_KEY_VIEW_SHIFT; |
| 754 | const uint64_t key = (_key & ~SORT_KEY_VIEW_MASK) | view; |
| 755 | return key; |
| 756 | } |
| 757 | |
| 741 | 758 | void reset() |
| 742 | 759 | { |
| 743 | 760 | m_depth = 0; |
| r244652 | r244653 | |
| 1353 | 1370 | |
| 1354 | 1371 | void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices) |
| 1355 | 1372 | { |
| 1356 | | BX_CHECK(_handle.idx < BGFX_CONFIG_MAX_VERTEX_BUFFERS, "Invalid vertex buffer handle. %d (< %d)", _handle.idx, BGFX_CONFIG_MAX_VERTEX_BUFFERS); |
| 1357 | 1373 | m_draw.m_startVertex = _startVertex; |
| 1358 | 1374 | m_draw.m_numVertices = _numVertices; |
| 1359 | 1375 | m_draw.m_vertexBuffer = _handle; |
| r244652 | r244653 | |
| 1394 | 1410 | |
| 1395 | 1411 | void setProgram(ProgramHandle _handle) |
| 1396 | 1412 | { |
| 1397 | | BX_CHECK(isValid(_handle), "Can't set program with invalid handle."); |
| 1398 | 1413 | m_key.m_program = _handle.idx; |
| 1399 | 1414 | } |
| 1400 | 1415 | |
| r244652 | r244653 | |
| 1432 | 1447 | bind.m_un.m_compute.m_mip = 0; |
| 1433 | 1448 | } |
| 1434 | 1449 | |
| 1435 | | void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access) |
| 1450 | void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format) |
| 1436 | 1451 | { |
| 1437 | 1452 | Binding& bind = m_compute.m_bind[_stage]; |
| 1438 | 1453 | bind.m_idx = _handle.idx; |
| r244652 | r244653 | |
| 1564 | 1579 | |
| 1565 | 1580 | SortKey m_key; |
| 1566 | 1581 | |
| 1582 | uint8_t m_viewRemap[BGFX_CONFIG_MAX_VIEWS]; |
| 1567 | 1583 | FrameBufferHandle m_fb[BGFX_CONFIG_MAX_VIEWS]; |
| 1568 | 1584 | Clear m_clear[BGFX_CONFIG_MAX_VIEWS]; |
| 1569 | 1585 | float m_clearColor[BGFX_CONFIG_MAX_CLEAR_COLOR_PALETTE][4]; |
| r244652 | r244653 | |
| 1720 | 1736 | m_free.push_back(Free(_ptr, _size) ); |
| 1721 | 1737 | } |
| 1722 | 1738 | |
| 1739 | uint64_t remove() |
| 1740 | { |
| 1741 | BX_CHECK(0 == m_used.size(), ""); |
| 1742 | |
| 1743 | if (0 < m_free.size() ) |
| 1744 | { |
| 1745 | Free free = m_free.front(); |
| 1746 | m_free.pop_front(); |
| 1747 | return free.m_ptr; |
| 1748 | } |
| 1749 | |
| 1750 | return 0; |
| 1751 | } |
| 1752 | |
| 1723 | 1753 | uint64_t alloc(uint32_t _size) |
| 1724 | 1754 | { |
| 1725 | 1755 | for (FreeList::iterator it = m_free.begin(), itEnd = m_free.end(); it != itEnd; ++it) |
| r244652 | r244653 | |
| 1758 | 1788 | } |
| 1759 | 1789 | } |
| 1760 | 1790 | |
| 1761 | | void compact() |
| 1791 | bool compact() |
| 1762 | 1792 | { |
| 1763 | 1793 | m_free.sort(); |
| 1764 | 1794 | |
| r244652 | r244653 | |
| 1775 | 1805 | ++next; |
| 1776 | 1806 | } |
| 1777 | 1807 | } |
| 1808 | |
| 1809 | return 0 == m_used.size(); |
| 1778 | 1810 | } |
| 1779 | 1811 | |
| 1780 | 1812 | private: |
| r244652 | r244653 | |
| 2147 | 2179 | else |
| 2148 | 2180 | { |
| 2149 | 2181 | m_dynIndexBufferAllocator.free(uint64_t(dib.m_handle.idx)<<32 | dib.m_offset); |
| 2150 | | m_dynIndexBufferAllocator.compact(); |
| 2182 | if (m_dynIndexBufferAllocator.compact() ) |
| 2183 | { |
| 2184 | for (uint64_t ptr = m_dynIndexBufferAllocator.remove(); 0 != ptr; ptr = m_dynIndexBufferAllocator.remove() ) |
| 2185 | { |
| 2186 | IndexBufferHandle handle = { uint16_t(ptr>>32) }; |
| 2187 | destroyIndexBuffer(handle); |
| 2188 | } |
| 2189 | } |
| 2151 | 2190 | } |
| 2152 | 2191 | |
| 2153 | 2192 | m_dynamicIndexBufferHandle.free(_handle.idx); |
| r244652 | r244653 | |
| 2292 | 2331 | else |
| 2293 | 2332 | { |
| 2294 | 2333 | m_dynVertexBufferAllocator.free(uint64_t(dvb.m_handle.idx)<<32 | dvb.m_offset); |
| 2295 | | m_dynVertexBufferAllocator.compact(); |
| 2334 | if (m_dynVertexBufferAllocator.compact() ) |
| 2335 | { |
| 2336 | for (uint64_t ptr = m_dynVertexBufferAllocator.remove(); 0 != ptr; ptr = m_dynVertexBufferAllocator.remove() ) |
| 2337 | { |
| 2338 | VertexBufferHandle handle = { uint16_t(ptr>>32) }; |
| 2339 | destroyVertexBuffer(handle); |
| 2340 | } |
| 2341 | } |
| 2296 | 2342 | } |
| 2297 | 2343 | |
| 2298 | 2344 | m_dynamicVertexBufferHandle.free(_handle.idx); |
| r244652 | r244653 | |
| 2672 | 2718 | |
| 2673 | 2719 | BGFX_API_FUNC(TextureHandle createTexture(const Memory* _mem, uint32_t _flags, uint8_t _skip, TextureInfo* _info) ) |
| 2674 | 2720 | { |
| 2675 | | if (NULL != _info) |
| 2721 | TextureInfo ti; |
| 2722 | if (NULL == _info) |
| 2676 | 2723 | { |
| 2677 | | ImageContainer imageContainer; |
| 2678 | | if (imageParse(imageContainer, _mem->data, _mem->size) ) |
| 2679 | | { |
| 2680 | | calcTextureSize(*_info |
| 2681 | | , (uint16_t)imageContainer.m_width |
| 2682 | | , (uint16_t)imageContainer.m_height |
| 2683 | | , (uint16_t)imageContainer.m_depth |
| 2684 | | , imageContainer.m_cubeMap |
| 2685 | | , imageContainer.m_numMips |
| 2686 | | , TextureFormat::Enum(imageContainer.m_format) |
| 2687 | | ); |
| 2688 | | } |
| 2689 | | else |
| 2690 | | { |
| 2691 | | _info->format = TextureFormat::Unknown; |
| 2692 | | _info->storageSize = 0; |
| 2693 | | _info->width = 0; |
| 2694 | | _info->height = 0; |
| 2695 | | _info->depth = 0; |
| 2696 | | _info->numMips = 0; |
| 2697 | | _info->bitsPerPixel = 0; |
| 2698 | | _info->cubeMap = false; |
| 2699 | | } |
| 2724 | _info = &ti; |
| 2700 | 2725 | } |
| 2701 | 2726 | |
| 2727 | ImageContainer imageContainer; |
| 2728 | if (imageParse(imageContainer, _mem->data, _mem->size) ) |
| 2729 | { |
| 2730 | calcTextureSize(*_info |
| 2731 | , (uint16_t)imageContainer.m_width |
| 2732 | , (uint16_t)imageContainer.m_height |
| 2733 | , (uint16_t)imageContainer.m_depth |
| 2734 | , imageContainer.m_cubeMap |
| 2735 | , imageContainer.m_numMips |
| 2736 | , TextureFormat::Enum(imageContainer.m_format) |
| 2737 | ); |
| 2738 | } |
| 2739 | else |
| 2740 | { |
| 2741 | _info->format = TextureFormat::Unknown; |
| 2742 | _info->storageSize = 0; |
| 2743 | _info->width = 0; |
| 2744 | _info->height = 0; |
| 2745 | _info->depth = 0; |
| 2746 | _info->numMips = 0; |
| 2747 | _info->bitsPerPixel = 0; |
| 2748 | _info->cubeMap = false; |
| 2749 | } |
| 2750 | |
| 2702 | 2751 | TextureHandle handle = { m_textureHandle.alloc() }; |
| 2703 | 2752 | BX_WARN(isValid(handle), "Failed to allocate texture handle."); |
| 2704 | 2753 | if (isValid(handle) ) |
| 2705 | 2754 | { |
| 2706 | 2755 | TextureRef& ref = m_textureRef[handle.idx]; |
| 2707 | 2756 | ref.m_refCount = 1; |
| 2757 | ref.m_format = uint8_t(_info->format); |
| 2708 | 2758 | |
| 2709 | 2759 | CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateTexture); |
| 2710 | 2760 | cmdbuf.write(handle); |
| r244652 | r244653 | |
| 3038 | 3088 | } |
| 3039 | 3089 | } |
| 3040 | 3090 | |
| 3091 | BGFX_API_FUNC(void setViewRemap(uint8_t _id, uint8_t _num, const void* _remap) ) |
| 3092 | { |
| 3093 | const uint32_t num = bx::uint32_min( (BGFX_CONFIG_MAX_VIEWS - _id) + _num, BGFX_CONFIG_MAX_VIEWS) - _id; |
| 3094 | if (NULL == _remap) |
| 3095 | { |
| 3096 | for (uint32_t ii = 0; ii < num; ++ii) |
| 3097 | { |
| 3098 | uint8_t id = uint8_t(ii+_id); |
| 3099 | m_viewRemap[id] = id; |
| 3100 | } |
| 3101 | } |
| 3102 | else |
| 3103 | { |
| 3104 | memcpy(&m_viewRemap[_id], _remap, num); |
| 3105 | } |
| 3106 | } |
| 3107 | |
| 3041 | 3108 | BGFX_API_FUNC(void setMarker(const char* _marker) ) |
| 3042 | 3109 | { |
| 3043 | 3110 | m_submit->setMarker(_marker); |
| r244652 | r244653 | |
| 3190 | 3257 | m_submit->setBuffer(_stage, dvb.m_handle, _access); |
| 3191 | 3258 | } |
| 3192 | 3259 | |
| 3193 | | BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, TextureFormat::Enum _format, Access::Enum _access) ) |
| 3260 | BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint8_t _mip, Access::Enum _access, TextureFormat::Enum _format) ) |
| 3194 | 3261 | { |
| 3195 | | m_submit->setImage(_stage, _sampler, _handle, _mip, _format, _access); |
| 3262 | _format = TextureFormat::Count == _format ? TextureFormat::Enum(m_textureRef[_handle.idx].m_format) : _format; |
| 3263 | m_submit->setImage(_stage, _sampler, _handle, _mip, _access, _format); |
| 3196 | 3264 | } |
| 3197 | 3265 | |
| 3198 | | BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, TextureFormat::Enum _format, Access::Enum _access) ) |
| 3266 | BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format) ) |
| 3199 | 3267 | { |
| 3200 | 3268 | BX_CHECK(_attachment < g_caps.maxFBAttachments, "Frame buffer attachment index %d is invalid.", _attachment); |
| 3201 | 3269 | TextureHandle textureHandle = BGFX_INVALID_HANDLE; |
| r244652 | r244653 | |
| 3207 | 3275 | BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); |
| 3208 | 3276 | } |
| 3209 | 3277 | |
| 3210 | | setImage(_stage, _sampler, textureHandle, 0, _format, _access); |
| 3278 | setImage(_stage, _sampler, textureHandle, 0, _access, _format); |
| 3211 | 3279 | } |
| 3212 | 3280 | |
| 3213 | 3281 | BGFX_API_FUNC(uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) ) |
| r244652 | r244653 | |
| 3337 | 3405 | struct TextureRef |
| 3338 | 3406 | { |
| 3339 | 3407 | int16_t m_refCount; |
| 3408 | uint8_t m_format; |
| 3340 | 3409 | }; |
| 3341 | 3410 | |
| 3342 | 3411 | struct FrameBufferRef |
| r244652 | r244653 | |
| 3358 | 3427 | FrameBufferRef m_frameBufferRef[BGFX_CONFIG_MAX_FRAME_BUFFERS]; |
| 3359 | 3428 | VertexDeclRef m_declRef; |
| 3360 | 3429 | |
| 3430 | uint8_t m_viewRemap[BGFX_CONFIG_MAX_VIEWS]; |
| 3361 | 3431 | FrameBufferHandle m_fb[BGFX_CONFIG_MAX_VIEWS]; |
| 3362 | 3432 | Clear m_clear[BGFX_CONFIG_MAX_VIEWS]; |
| 3363 | 3433 | |
trunk/3rdparty/bx/scripts/toolchain.lua
| r244652 | r244653 | |
| 3 | 3 | -- License: https://github.com/bkaradzic/bx#license-bsd-2-clause |
| 4 | 4 | -- |
| 5 | 5 | |
| 6 | | local bxDir = (path.getabsolute("..") .. "/") |
| 6 | local bxDir = path.getabsolute("..") |
| 7 | 7 | local naclToolchain = "" |
| 8 | 8 | |
| 9 | 9 | function toolchain(_buildDir, _libDir) |
| r244652 | r244653 | |
| 71 | 71 | -- Avoid error when invoking genie --help. |
| 72 | 72 | if (_ACTION == nil) then return false end |
| 73 | 73 | |
| 74 | | location (_buildDir .. "projects/" .. _ACTION) |
| 74 | location (path.join(_buildDir, "projects", _ACTION)) |
| 75 | 75 | |
| 76 | 76 | if _ACTION == "clean" then |
| 77 | 77 | os.rmdir(BUILD_DIR) |
| r244652 | r244653 | |
| 107 | 107 | premake.gcc.cc = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-gcc" |
| 108 | 108 | premake.gcc.cxx = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-g++" |
| 109 | 109 | premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar" |
| 110 | | location (_buildDir .. "projects/" .. _ACTION .. "-android-arm") |
| 110 | location (path.join(_buildDir, "projects", _ACTION .. "-android-arm")) |
| 111 | 111 | end |
| 112 | 112 | |
| 113 | 113 | if "android-mips" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 119 | 119 | premake.gcc.cc = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-gcc" |
| 120 | 120 | premake.gcc.cxx = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-g++" |
| 121 | 121 | premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar" |
| 122 | | location (_buildDir .. "projects/" .. _ACTION .. "-android-mips") |
| 122 | location (path.join(_buildDir, "projects", _ACTION .. "-android-mips")) |
| 123 | 123 | end |
| 124 | 124 | |
| 125 | 125 | if "android-x86" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 131 | 131 | premake.gcc.cc = "$(ANDROID_NDK_X86)/bin/i686-linux-android-gcc" |
| 132 | 132 | premake.gcc.cxx = "$(ANDROID_NDK_X86)/bin/i686-linux-android-g++" |
| 133 | 133 | premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar" |
| 134 | | location (_buildDir .. "projects/" .. _ACTION .. "-android-x86") |
| 134 | location (path.join(_buildDir, "projects", _ACTION .. "-android-x86")) |
| 135 | 135 | end |
| 136 | 136 | |
| 137 | 137 | if "asmjs" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 144 | 144 | premake.gcc.cxx = "$(EMSCRIPTEN)/em++" |
| 145 | 145 | premake.gcc.ar = "$(EMSCRIPTEN)/emar" |
| 146 | 146 | premake.gcc.llvm = true |
| 147 | | location (_buildDir .. "projects/" .. _ACTION .. "-asmjs") |
| 147 | location (path.join(_buildDir, "projects", _ACTION .. "-asmjs")) |
| 148 | 148 | end |
| 149 | 149 | |
| 150 | 150 | if "freebsd" == _OPTIONS["gcc"] then |
| 151 | | location (_buildDir .. "projects/" .. _ACTION .. "-freebsd") |
| 151 | location (path.join(_buildDir, "projects", _ACTION .. "-freebsd")) |
| 152 | 152 | end |
| 153 | 153 | |
| 154 | 154 | if "ios-arm" == _OPTIONS["gcc"] then |
| 155 | 155 | premake.gcc.cc = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" |
| 156 | 156 | premake.gcc.cxx = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++" |
| 157 | 157 | premake.gcc.ar = "ar" |
| 158 | | location (_buildDir .. "projects/" .. _ACTION .. "-ios-arm") |
| 158 | location (path.join(_buildDir, "projects", _ACTION .. "-ios-arm")) |
| 159 | 159 | end |
| 160 | 160 | |
| 161 | 161 | if "ios-simulator" == _OPTIONS["gcc"] then |
| 162 | 162 | premake.gcc.cc = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" |
| 163 | 163 | premake.gcc.cxx = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++" |
| 164 | 164 | premake.gcc.ar = "ar" |
| 165 | | location (_buildDir .. "projects/" .. _ACTION .. "-ios-simulator") |
| 165 | location (path.join(_buildDir, "projects", _ACTION .. "-ios-simulator")) |
| 166 | 166 | end |
| 167 | 167 | |
| 168 | 168 | if "linux-gcc" == _OPTIONS["gcc"] then |
| 169 | | location (_buildDir .. "projects/" .. _ACTION .. "-linux") |
| 169 | location (path.join(_buildDir, "projects", _ACTION .. "-linux")) |
| 170 | 170 | end |
| 171 | 171 | |
| 172 | 172 | if "linux-clang" == _OPTIONS["gcc"] then |
| 173 | 173 | premake.gcc.cc = "clang" |
| 174 | 174 | premake.gcc.cxx = "clang++" |
| 175 | 175 | premake.gcc.ar = "ar" |
| 176 | | location (_buildDir .. "projects/" .. _ACTION .. "-linux-clang") |
| 176 | location (path.join(_buildDir, "projects", _ACTION .. "-linux-clang")) |
| 177 | 177 | end |
| 178 | 178 | |
| 179 | 179 | if "mingw-gcc" == _OPTIONS["gcc"] then |
| 180 | 180 | premake.gcc.cc = "$(MINGW)/bin/x86_64-w64-mingw32-gcc" |
| 181 | 181 | premake.gcc.cxx = "$(MINGW)/bin/x86_64-w64-mingw32-g++" |
| 182 | 182 | premake.gcc.ar = "$(MINGW)/bin/ar" |
| 183 | | location (_buildDir .. "projects/" .. _ACTION .. "-mingw-gcc") |
| 183 | location (path.join(_buildDir, "projects", _ACTION .. "-mingw-gcc")) |
| 184 | 184 | end |
| 185 | 185 | |
| 186 | 186 | if "mingw-clang" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 189 | 189 | premake.gcc.ar = "$(MINGW)/bin/ar" |
| 190 | 190 | -- premake.gcc.ar = "$(CLANG)/bin/llvm-ar" |
| 191 | 191 | -- premake.gcc.llvm = true |
| 192 | | location (_buildDir .. "projects/" .. _ACTION .. "-mingw-clang") |
| 192 | location (path.join(_buildDir, "projects", _ACTION .. "-mingw-clang")) |
| 193 | 193 | end |
| 194 | 194 | |
| 195 | 195 | if "nacl" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 208 | 208 | premake.gcc.cc = naclToolchain .. "gcc" |
| 209 | 209 | premake.gcc.cxx = naclToolchain .. "g++" |
| 210 | 210 | premake.gcc.ar = naclToolchain .. "ar" |
| 211 | | location (_buildDir .. "projects/" .. _ACTION .. "-nacl") |
| 211 | location (path.join(_buildDir, "projects", _ACTION .. "-nacl")) |
| 212 | 212 | end |
| 213 | 213 | |
| 214 | 214 | if "nacl-arm" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 227 | 227 | premake.gcc.cc = naclToolchain .. "gcc" |
| 228 | 228 | premake.gcc.cxx = naclToolchain .. "g++" |
| 229 | 229 | premake.gcc.ar = naclToolchain .. "ar" |
| 230 | | location (_buildDir .. "projects/" .. _ACTION .. "-nacl-arm") |
| 230 | location (path.join(_buildDir, "projects", _ACTION .. "-nacl-arm")) |
| 231 | 231 | end |
| 232 | 232 | |
| 233 | 233 | if "osx" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 237 | 237 | premake.gcc.cxx = osxToolchain .. "clang++" |
| 238 | 238 | premake.gcc.ar = osxToolchain .. "ar" |
| 239 | 239 | end |
| 240 | | location (_buildDir .. "projects/" .. _ACTION .. "-osx") |
| 240 | location (path.join(_buildDir, "projects", _ACTION .. "-osx")) |
| 241 | 241 | end |
| 242 | 242 | |
| 243 | 243 | if "pnacl" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 256 | 256 | premake.gcc.cc = naclToolchain .. "clang" |
| 257 | 257 | premake.gcc.cxx = naclToolchain .. "clang++" |
| 258 | 258 | premake.gcc.ar = naclToolchain .. "ar" |
| 259 | | location (_buildDir .. "projects/" .. _ACTION .. "-pnacl") |
| 259 | location (path.join(_buildDir, "projects", _ACTION .. "-pnacl")) |
| 260 | 260 | end |
| 261 | 261 | |
| 262 | 262 | if "qnx-arm" == _OPTIONS["gcc"] then |
| r244652 | r244653 | |
| 268 | 268 | premake.gcc.cc = "$(QNX_HOST)/usr/bin/arm-unknown-nto-qnx8.0.0eabi-gcc" |
| 269 | 269 | premake.gcc.cxx = "$(QNX_HOST)/usr/bin/arm-unknown-nto-qnx8.0.0eabi-g++" |
| 270 | 270 | premake.gcc.ar = "$(QNX_HOST)/usr/bin/arm-unknown-nto-qnx8.0.0eabi-ar" |
| 271 | | location (_buildDir .. "projects/" .. _ACTION .. "-qnx-arm") |
| 271 | location (path.join(_buildDir, "projects", _ACTION .. "-qnx-arm")) |
| 272 | 272 | end |
| 273 | 273 | |
| 274 | 274 | if "rpi" == _OPTIONS["gcc"] then |
| 275 | | location (_buildDir .. "projects/" .. _ACTION .. "-rpi") |
| 275 | location (path.join(_buildDir, "projects", _ACTION .. "-rpi")) |
| 276 | 276 | end |
| 277 | 277 | elseif _ACTION == "vs2012" or _ACTION == "vs2013" or _ACTION == "vs2015" then |
| 278 | 278 | |
| 279 | 279 | if (_ACTION .. "-clang") == _OPTIONS["vs"] then |
| 280 | 280 | premake.vstudio.toolset = ("LLVM-" .. _ACTION) |
| 281 | | location (_buildDir .. "projects/" .. _ACTION .. "-clang") |
| 281 | location (path.join(_buildDir, "projects", _ACTION .. "-clang")) |
| 282 | 282 | end |
| 283 | 283 | |
| 284 | 284 | if "winphone8" == _OPTIONS["vs"] then |
| 285 | 285 | premake.vstudio.toolset = "v110_wp80" |
| 286 | | location (_buildDir .. "projects/" .. _ACTION .. "-winphone8") |
| 286 | location (path.join(_buildDir, "projects", _ACTION .. "-winphone8")) |
| 287 | 287 | end |
| 288 | 288 | |
| 289 | 289 | if "winphone81" == _OPTIONS["vs"] then |
| 290 | 290 | premake.vstudio.toolset = "v120_wp81" |
| 291 | 291 | platforms { "ARM" } |
| 292 | | location (_buildDir .. "projects/" .. _ACTION .. "-winphone81") |
| 292 | location (path.join(_buildDir, "projects", _ACTION .. "-winphone81")) |
| 293 | 293 | end |
| 294 | 294 | elseif _ACTION == "xcode4" then |
| 295 | 295 | |
| 296 | 296 | if "osx" == _OPTIONS["xcode"] then |
| 297 | 297 | premake.xcode.toolset = "macosx" |
| 298 | | location (_buildDir .. "projects/" .. _ACTION .. "-osx") |
| 298 | location (path.join(_buildDir, "projects", _ACTION .. "-osx")) |
| 299 | 299 | end |
| 300 | 300 | if "ios" == _OPTIONS["xcode"] then |
| 301 | 301 | premake.xcode.toolset = "iphoneos" |
| 302 | | location (_buildDir .. "projects/" .. _ACTION .. "-ios") |
| 302 | location (path.join(_buildDir, "projects", _ACTION .. "-ios")) |
| 303 | 303 | end |
| 304 | 304 | end |
| 305 | 305 | |
| r244652 | r244653 | |
| 334 | 334 | } |
| 335 | 335 | |
| 336 | 336 | configuration { "vs*" } |
| 337 | | includedirs { bxDir .. "include/compat/msvc" } |
| 337 | includedirs { path.join(bxDir, "include/compat/msvc") } |
| 338 | 338 | defines { |
| 339 | 339 | "WIN32", |
| 340 | 340 | "_WIN32", |
| r244652 | r244653 | |
| 355 | 355 | } |
| 356 | 356 | |
| 357 | 357 | configuration { "vs2008" } |
| 358 | | includedirs { bxDir .. "include/compat/msvc/pre1600" } |
| 358 | includedirs { path.join(bxDir .. "include/compat/msvc/pre1600") } |
| 359 | 359 | |
| 360 | 360 | configuration { "x32", "vs*" } |
| 361 | | targetdir (_buildDir .. "win32_" .. _ACTION .. "/bin") |
| 362 | | objdir (_buildDir .. "win32_" .. _ACTION .. "/obj") |
| 361 | targetdir (path.join(_buildDir, "win32_" .. _ACTION, "bin")) |
| 362 | objdir (path.join(_buildDir, "win32_" .. _ACTION, "obj")) |
| 363 | 363 | libdirs { |
| 364 | | _libDir .. "lib/win32_" .. _ACTION, |
| 364 | path.join(_libDir, "lib/win32_" .. _ACTION), |
| 365 | 365 | "$(DXSDK_DIR)/lib/x86", |
| 366 | 366 | } |
| 367 | 367 | |
| 368 | 368 | configuration { "x64", "vs*" } |
| 369 | 369 | defines { "_WIN64" } |
| 370 | | targetdir (_buildDir .. "win64_" .. _ACTION .. "/bin") |
| 371 | | objdir (_buildDir .. "win64_" .. _ACTION .. "/obj") |
| 370 | targetdir (path.join(_buildDir, "win64_" .. _ACTION, "bin")) |
| 371 | objdir (path.join(_buildDir, "win64_" .. _ACTION, "obj")) |
| 372 | 372 | libdirs { |
| 373 | | _libDir .. "lib/win64_" .. _ACTION, |
| 373 | path.join(_libDir, "lib/win64_" .. _ACTION), |
| 374 | 374 | "$(DXSDK_DIR)/lib/x64", |
| 375 | 375 | } |
| 376 | 376 | |
| 377 | 377 | configuration { "ARM", "vs*" } |
| 378 | | targetdir (_buildDir .. "arm_" .. _ACTION .. "/bin") |
| 379 | | objdir (_buildDir .. "arm_" .. _ACTION .. "/obj") |
| 378 | targetdir (path.join(_buildDir, "arm_" .. _ACTION, "bin")) |
| 379 | objdir (path.join(_buildDir, "arm_" .. _ACTION, "obj")) |
| 380 | 380 | |
| 381 | 381 | configuration { "vs*-clang" } |
| 382 | 382 | buildoptions { |
| r244652 | r244653 | |
| 384 | 384 | } |
| 385 | 385 | |
| 386 | 386 | configuration { "x32", "vs*-clang" } |
| 387 | | targetdir (_buildDir .. "win32_" .. _ACTION .. "-clang/bin") |
| 388 | | objdir (_buildDir .. "win32_" .. _ACTION .. "-clang/obj") |
| 387 | targetdir (path.join(_buildDir, "win32_" .. _ACTION .. "-clang/bin")) |
| 388 | objdir (path.join(_buildDir, "win32_" .. _ACTION .. "-clang/obj")) |
| 389 | 389 | |
| 390 | 390 | configuration { "x64", "vs*-clang" } |
| 391 | | targetdir (_buildDir .. "win64_" .. _ACTION .. "-clang/bin") |
| 392 | | objdir (_buildDir .. "win64_" .. _ACTION .. "-clang/obj") |
| 391 | targetdir (path.join(_buildDir, "win64_" .. _ACTION .. "-clang/bin")) |
| 392 | objdir (path.join(_buildDir, "win64_" .. _ACTION .. "-clang/obj")) |
| 393 | 393 | |
| 394 | 394 | configuration { "winphone8*" } |
| 395 | 395 | removeflags { |
| r244652 | r244653 | |
| 399 | 399 | |
| 400 | 400 | configuration { "mingw-*" } |
| 401 | 401 | defines { "WIN32" } |
| 402 | | includedirs { bxDir .. "include/compat/mingw" } |
| 402 | includedirs { path.join(bxDir, "include/compat/mingw") } |
| 403 | 403 | buildoptions { |
| 404 | 404 | "-std=c++11", |
| 405 | 405 | "-Wunused-value", |
| r244652 | r244653 | |
| 416 | 416 | } |
| 417 | 417 | |
| 418 | 418 | configuration { "x32", "mingw-gcc" } |
| 419 | | targetdir (_buildDir .. "win32_mingw-gcc" .. "/bin") |
| 420 | | objdir (_buildDir .. "win32_mingw-gcc" .. "/obj") |
| 419 | targetdir (path.join(_buildDir, "win32_mingw-gcc/bin")) |
| 420 | objdir (path.join(_buildDir, "win32_mingw-gcc/obj")) |
| 421 | 421 | libdirs { |
| 422 | | _libDir .. "lib/win32_mingw-gcc", |
| 422 | path.join(_libDir, "lib/win32_mingw-gcc"), |
| 423 | 423 | "$(DXSDK_DIR)/lib/x86", |
| 424 | 424 | } |
| 425 | 425 | buildoptions { "-m32" } |
| 426 | 426 | |
| 427 | 427 | configuration { "x64", "mingw-gcc" } |
| 428 | | targetdir (_buildDir .. "win64_mingw-gcc" .. "/bin") |
| 429 | | objdir (_buildDir .. "win64_mingw-gcc" .. "/obj") |
| 428 | targetdir (path.join(_buildDir, "win64_mingw-gcc/bin")) |
| 429 | objdir (path.join(_buildDir, "win64_mingw-gcc/obj")) |
| 430 | 430 | libdirs { |
| 431 | | _libDir .. "lib/win64_mingw-gcc", |
| 431 | path.join(_libDir, "lib/win64_mingw-gcc"), |
| 432 | 432 | "$(DXSDK_DIR)/lib/x64", |
| 433 | 433 | "$(GLES_X64_DIR)", |
| 434 | 434 | } |
| r244652 | r244653 | |
| 446 | 446 | } |
| 447 | 447 | |
| 448 | 448 | configuration { "x32", "mingw-clang" } |
| 449 | | targetdir (_buildDir .. "win32_mingw-clang" .. "/bin") |
| 450 | | objdir (_buildDir .. "win32_mingw-clang" .. "/obj") |
| 449 | targetdir (path.join(_buildDir, "win32_mingw-clang/bin")) |
| 450 | objdir (path.join(_buildDir, "win32_mingw-clang/obj")) |
| 451 | 451 | libdirs { |
| 452 | | _libDir .. "lib/win32_mingw-clang", |
| 452 | path.join(_libDir, "lib/win32_mingw-clang"), |
| 453 | 453 | "$(DXSDK_DIR)/lib/x86", |
| 454 | 454 | } |
| 455 | 455 | buildoptions { "-m32" } |
| 456 | 456 | |
| 457 | 457 | configuration { "x64", "mingw-clang" } |
| 458 | | targetdir (_buildDir .. "win64_mingw-clang" .. "/bin") |
| 459 | | objdir (_buildDir .. "win64_mingw-clang" .. "/obj") |
| 458 | targetdir (path.join(_buildDir, "win64_mingw-clang/bin")) |
| 459 | objdir (path.join(_buildDir, "win64_mingw-clang/obj")) |
| 460 | 460 | libdirs { |
| 461 | | _libDir .. "lib/win64_mingw-clang", |
| 461 | path.join(_libDir, "lib/win64_mingw-clang"), |
| 462 | 462 | "$(DXSDK_DIR)/lib/x64", |
| 463 | 463 | "$(GLES_X64_DIR)", |
| 464 | 464 | } |
| r244652 | r244653 | |
| 487 | 487 | } |
| 488 | 488 | |
| 489 | 489 | configuration { "linux-gcc", "x32" } |
| 490 | | targetdir (_buildDir .. "linux32_gcc" .. "/bin") |
| 491 | | objdir (_buildDir .. "linux32_gcc" .. "/obj") |
| 492 | | libdirs { _libDir .. "lib/linux32_gcc" } |
| 490 | targetdir (path.join(_buildDir, "linux32_gcc/bin")) |
| 491 | objdir (path.join(_buildDir, "linux32_gcc/obj")) |
| 492 | libdirs { path.join(_libDir, "lib/linux32_gcc") } |
| 493 | 493 | buildoptions { |
| 494 | 494 | "-m32", |
| 495 | 495 | } |
| 496 | 496 | |
| 497 | 497 | configuration { "linux-gcc", "x64" } |
| 498 | | targetdir (_buildDir .. "linux64_gcc" .. "/bin") |
| 499 | | objdir (_buildDir .. "linux64_gcc" .. "/obj") |
| 500 | | libdirs { _libDir .. "lib/linux64_gcc" } |
| 498 | targetdir (path.join(_buildDir, "linux64_gcc/bin")) |
| 499 | objdir (path.join(_buildDir, "linux64_gcc/obj")) |
| 500 | libdirs { path.join(_libDir, "lib/linux64_gcc") } |
| 501 | 501 | buildoptions { |
| 502 | 502 | "-m64", |
| 503 | 503 | } |
| 504 | 504 | |
| 505 | 505 | configuration { "linux-clang", "x32" } |
| 506 | | targetdir (_buildDir .. "linux32_clang" .. "/bin") |
| 507 | | objdir (_buildDir .. "linux32_clang" .. "/obj") |
| 508 | | libdirs { _libDir .. "lib/linux32_clang" } |
| 506 | targetdir (path.join(_buildDir, "linux32_clang/bin")) |
| 507 | objdir (path.join(_buildDir, "linux32_clang/obj")) |
| 508 | libdirs { path.join(_libDir, "lib/linux32_clang") } |
| 509 | 509 | buildoptions { |
| 510 | 510 | "-m32", |
| 511 | 511 | } |
| 512 | 512 | |
| 513 | 513 | configuration { "linux-clang", "x64" } |
| 514 | | targetdir (_buildDir .. "linux64_clang" .. "/bin") |
| 515 | | objdir (_buildDir .. "linux64_clang" .. "/obj") |
| 516 | | libdirs { _libDir .. "lib/linux64_clang" } |
| 514 | targetdir (path.join(_buildDir, "linux64_clang/bin")) |
| 515 | objdir (path.join(_buildDir, "linux64_clang/obj")) |
| 516 | libdirs { path.join(_libDir, "lib/linux64_clang") } |
| 517 | 517 | buildoptions { |
| 518 | 518 | "-m64", |
| 519 | 519 | } |
| r244652 | r244653 | |
| 559 | 559 | } |
| 560 | 560 | |
| 561 | 561 | configuration { "android-arm" } |
| 562 | | targetdir (_buildDir .. "android-arm" .. "/bin") |
| 563 | | objdir (_buildDir .. "android-arm" .. "/obj") |
| 562 | targetdir (path.join(_buildDir, "android-arm/bin")) |
| 563 | objdir (path.join(_buildDir, "android-arm/obj")) |
| 564 | 564 | libdirs { |
| 565 | | _libDir .. "lib/android-arm", |
| 565 | path.join(_libDir, "lib/android-arm"), |
| 566 | 566 | "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a", |
| 567 | 567 | } |
| 568 | 568 | includedirs { |
| 569 | 569 | "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include", |
| 570 | 570 | } |
| 571 | 571 | buildoptions { |
| 572 | | "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm", |
| 572 | "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm"), |
| 573 | 573 | "-mthumb", |
| 574 | 574 | "-march=armv7-a", |
| 575 | 575 | "-mfloat-abi=softfp", |
| r244652 | r244653 | |
| 578 | 578 | "-Wundef", |
| 579 | 579 | } |
| 580 | 580 | linkoptions { |
| 581 | | "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm", |
| 582 | | "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib/crtbegin_so.o", |
| 583 | | "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib/crtend_so.o", |
| 581 | "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm"), |
| 582 | path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm/usr/lib/crtbegin_so.o"), |
| 583 | path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-arm/usr/lib/crtend_so.o"), |
| 584 | 584 | "-march=armv7-a", |
| 585 | 585 | "-Wl,--fix-cortex-a8", |
| 586 | 586 | } |
| 587 | 587 | |
| 588 | 588 | configuration { "android-mips" } |
| 589 | | targetdir (_buildDir .. "android-mips" .. "/bin") |
| 590 | | objdir (_buildDir .. "android-mips" .. "/obj") |
| 589 | targetdir (path.join(_buildDir, "android-mips/bin")) |
| 590 | objdir (path.join(_buildDir, "android-mips/obj")) |
| 591 | 591 | libdirs { |
| 592 | | _libDir .. "lib/android-mips", |
| 592 | path.join(_libDir, "lib/android-mips"), |
| 593 | 593 | "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/mips", |
| 594 | 594 | } |
| 595 | 595 | includedirs { |
| 596 | 596 | "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/mips/include", |
| 597 | 597 | } |
| 598 | 598 | buildoptions { |
| 599 | | "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips", |
| 599 | "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips"), |
| 600 | 600 | "-Wunused-value", |
| 601 | 601 | "-Wundef", |
| 602 | 602 | } |
| 603 | 603 | linkoptions { |
| 604 | | "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips", |
| 605 | | "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips/usr/lib/crtbegin_so.o", |
| 606 | | "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips/usr/lib/crtend_so.o", |
| 604 | "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips"), |
| 605 | path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips/usr/lib/crtbegin_so.o"), |
| 606 | path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-mips/usr/lib/crtend_so.o"), |
| 607 | 607 | } |
| 608 | 608 | |
| 609 | 609 | configuration { "android-x86" } |
| 610 | | targetdir (_buildDir .. "android-x86" .. "/bin") |
| 611 | | objdir (_buildDir .. "android-x86" .. "/obj") |
| 610 | targetdir (path.join(_buildDir, "android-x86/bin")) |
| 611 | objdir (path.join(_buildDir, "android-x86/obj")) |
| 612 | 612 | libdirs { |
| 613 | | _libDir .. "lib/android-x86", |
| 613 | path.join(_libDir, "lib/android-x86"), |
| 614 | 614 | "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/x86", |
| 615 | 615 | } |
| 616 | 616 | includedirs { |
| 617 | 617 | "$(ANDROID_NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/x86/include", |
| 618 | 618 | } |
| 619 | 619 | buildoptions { |
| 620 | | "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86", |
| 620 | "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86"), |
| 621 | 621 | "-march=i686", |
| 622 | 622 | "-mtune=atom", |
| 623 | 623 | "-mstackrealign", |
| r244652 | r244653 | |
| 627 | 627 | "-Wundef", |
| 628 | 628 | } |
| 629 | 629 | linkoptions { |
| 630 | | "--sysroot=$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86", |
| 631 | | "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib/crtbegin_so.o", |
| 632 | | "$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib/crtend_so.o", |
| 630 | "--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86"), |
| 631 | path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86/usr/lib/crtbegin_so.o"), |
| 632 | path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "/arch-x86/usr/lib/crtend_so.o"), |
| 633 | 633 | } |
| 634 | 634 | |
| 635 | 635 | configuration { "asmjs" } |
| 636 | | targetdir (_buildDir .. "asmjs" .. "/bin") |
| 637 | | objdir (_buildDir .. "asmjs" .. "/obj") |
| 638 | | libdirs { _libDir .. "lib/asmjs" } |
| 636 | targetdir (path.join(_buildDir, "asmjs/bin")) |
| 637 | objdir (path.join(_buildDir, "asmjs/obj")) |
| 638 | libdirs { path.join(_libDir, "lib/asmjs") } |
| 639 | 639 | buildoptions { |
| 640 | 640 | "-isystem$(EMSCRIPTEN)/system/include", |
| 641 | 641 | "-isystem$(EMSCRIPTEN)/system/include/libc", |
| r244652 | r244653 | |
| 644 | 644 | } |
| 645 | 645 | |
| 646 | 646 | configuration { "freebsd" } |
| 647 | | targetdir (_buildDir .. "freebsd" .. "/bin") |
| 648 | | objdir (_buildDir .. "freebsd" .. "/obj") |
| 649 | | libdirs { _libDir .. "lib/freebsd" } |
| 647 | targetdir (path.join(_buildDir, "freebsd/bin")) |
| 648 | objdir (path.join(_buildDir, "freebsd/obj")) |
| 649 | libdirs { path.join(_libDir, "lib/freebsd") } |
| 650 | 650 | includedirs { |
| 651 | | bxDir .. "include/compat/freebsd", |
| 651 | path.join(bxDir, "include/compat/freebsd"), |
| 652 | 652 | } |
| 653 | 653 | |
| 654 | 654 | configuration { "nacl or nacl-arm or pnacl" } |
| r244652 | r244653 | |
| 664 | 664 | } |
| 665 | 665 | includedirs { |
| 666 | 666 | "$(NACL_SDK_ROOT)/include", |
| 667 | | bxDir .. "include/compat/nacl", |
| 667 | path.join(bxDir, "include/compat/nacl"), |
| 668 | 668 | } |
| 669 | 669 | |
| 670 | 670 | configuration { "nacl" } |
| r244652 | r244653 | |
| 678 | 678 | } |
| 679 | 679 | |
| 680 | 680 | configuration { "x32", "nacl" } |
| 681 | | targetdir (_buildDir .. "nacl-x86" .. "/bin") |
| 682 | | objdir (_buildDir .. "nacl-x86" .. "/obj") |
| 683 | | libdirs { _libDir .. "lib/nacl-x86" } |
| 681 | targetdir (path.join(_buildDir, "nacl-x86/bin")) |
| 682 | objdir (path.join(_buildDir, "nacl-x86/obj")) |
| 683 | libdirs { path.join(_libDir, "lib/nacl-x86") } |
| 684 | 684 | linkoptions { "-melf32_nacl" } |
| 685 | 685 | |
| 686 | 686 | configuration { "x32", "nacl", "Debug" } |
| r244652 | r244653 | |
| 690 | 690 | libdirs { "$(NACL_SDK_ROOT)/lib/newlib_x86_32/Release" } |
| 691 | 691 | |
| 692 | 692 | configuration { "x64", "nacl" } |
| 693 | | targetdir (_buildDir .. "nacl-x64" .. "/bin") |
| 694 | | objdir (_buildDir .. "nacl-x64" .. "/obj") |
| 695 | | libdirs { _libDir .. "lib/nacl-x64" } |
| 693 | targetdir (path.join(_buildDir, "nacl-x64/bin")) |
| 694 | objdir (path.join(_buildDir, "nacl-x64/obj")) |
| 695 | libdirs { path.join(_libDir, "lib/nacl-x64") } |
| 696 | 696 | linkoptions { "-melf64_nacl" } |
| 697 | 697 | |
| 698 | 698 | configuration { "x64", "nacl", "Debug" } |
| r244652 | r244653 | |
| 705 | 705 | buildoptions { |
| 706 | 706 | "-Wno-psabi", -- note: the mangling of 'va_list' has changed in GCC 4.4.0 |
| 707 | 707 | } |
| 708 | | targetdir (_buildDir .. "nacl-arm" .. "/bin") |
| 709 | | objdir (_buildDir .. "nacl-arm" .. "/obj") |
| 710 | | libdirs { _libDir .. "lib/nacl-arm" } |
| 708 | targetdir (path.join(_buildDir, "nacl-arm/bin")) |
| 709 | objdir (path.join(_buildDir, "nacl-arm/obj")) |
| 710 | libdirs { path.join(_libDir, "lib/nacl-arm") } |
| 711 | 711 | |
| 712 | 712 | configuration { "nacl-arm", "Debug" } |
| 713 | 713 | libdirs { "$(NACL_SDK_ROOT)/lib/newlib_arm/Debug" } |
| r244652 | r244653 | |
| 716 | 716 | libdirs { "$(NACL_SDK_ROOT)/lib/newlib_arm/Release" } |
| 717 | 717 | |
| 718 | 718 | configuration { "pnacl" } |
| 719 | | targetdir (_buildDir .. "pnacl" .. "/bin") |
| 720 | | objdir (_buildDir .. "pnacl" .. "/obj") |
| 721 | | libdirs { _libDir .. "lib/pnacl" } |
| 719 | targetdir (path.join(_buildDir, "pnacl/bin")) |
| 720 | objdir (path.join(_buildDir, "pnacl/obj")) |
| 721 | libdirs { path.join(_libDir, "lib/pnacl") } |
| 722 | 722 | |
| 723 | 723 | configuration { "pnacl", "Debug" } |
| 724 | 724 | libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Debug" } |
| r244652 | r244653 | |
| 727 | 727 | libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Release" } |
| 728 | 728 | |
| 729 | 729 | configuration { "Xbox360" } |
| 730 | | targetdir (_buildDir .. "xbox360" .. "/bin") |
| 731 | | objdir (_buildDir .. "xbox360" .. "/obj") |
| 732 | | includedirs { bxDir .. "include/compat/msvc" } |
| 733 | | libdirs { _libDir .. "lib/xbox360" } |
| 730 | targetdir (path.join(_buildDir, "xbox360/bin")) |
| 731 | objdir (path.join(_buildDir, "xbox360/obj")) |
| 732 | includedirs { path.join(bxDir, "include/compat/msvc") } |
| 733 | libdirs { path.join(_libDir, "lib/xbox360") } |
| 734 | 734 | defines { |
| 735 | 735 | "NOMINMAX", |
| 736 | 736 | "_XBOX", |
| 737 | 737 | } |
| 738 | 738 | |
| 739 | 739 | configuration { "osx", "x32" } |
| 740 | | targetdir (_buildDir .. "osx32_clang" .. "/bin") |
| 741 | | objdir (_buildDir .. "osx32_clang" .. "/obj") |
| 742 | | libdirs { _libDir .. "lib/osx32_clang" } |
| 740 | targetdir (path.join(_buildDir, "osx32_clang/bin")) |
| 741 | objdir (path.join(_buildDir, "osx32_clang/obj")) |
| 742 | libdirs { path.join(_libDir, "lib/osx32_clang") } |
| 743 | 743 | buildoptions { |
| 744 | 744 | "-m32", |
| 745 | 745 | } |
| 746 | 746 | |
| 747 | 747 | configuration { "osx", "x64" } |
| 748 | | targetdir (_buildDir .. "osx64_clang" .. "/bin") |
| 749 | | objdir (_buildDir .. "osx64_clang" .. "/obj") |
| 750 | | libdirs { _libDir .. "lib/osx64_clang" } |
| 748 | targetdir (path.join(_buildDir, "osx64_clang/bin")) |
| 749 | objdir (path.join(_buildDir, "osx64_clang/obj")) |
| 750 | libdirs { path.join(_libDir, "lib/osx64_clang") } |
| 751 | 751 | buildoptions { |
| 752 | 752 | "-m64", |
| 753 | 753 | } |
| r244652 | r244653 | |
| 759 | 759 | "-Wunused-value", |
| 760 | 760 | "-Wundef", |
| 761 | 761 | } |
| 762 | | includedirs { bxDir .. "include/compat/osx" } |
| 762 | includedirs { path.join(bxDir, "include/compat/osx") } |
| 763 | 763 | |
| 764 | 764 | configuration { "ios*" } |
| 765 | 765 | linkoptions { |
| r244652 | r244653 | |
| 770 | 770 | "-Wunused-value", |
| 771 | 771 | "-Wundef", |
| 772 | 772 | } |
| 773 | | includedirs { bxDir .. "include/compat/ios" } |
| 773 | includedirs { path.join(bxDir, "include/compat/ios") } |
| 774 | 774 | |
| 775 | 775 | configuration { "ios-arm" } |
| 776 | | targetdir (_buildDir .. "ios-arm" .. "/bin") |
| 777 | | objdir (_buildDir .. "ios-arm" .. "/obj") |
| 778 | | libdirs { _libDir .. "lib/ios-arm" } |
| 776 | targetdir (path.join(_buildDir, "ios-arm/bin")) |
| 777 | objdir (path.join(_buildDir, "ios-arm/obj")) |
| 778 | libdirs { path.join(_libDir, "lib/ios-arm") } |
| 779 | 779 | linkoptions { |
| 780 | 780 | "-miphoneos-version-min=7.0", |
| 781 | 781 | "-arch armv7", |
| r244652 | r244653 | |
| 791 | 791 | } |
| 792 | 792 | |
| 793 | 793 | configuration { "ios-simulator" } |
| 794 | | targetdir (_buildDir .. "ios-simulator" .. "/bin") |
| 795 | | objdir (_buildDir .. "ios-simulator" .. "/obj") |
| 796 | | libdirs { _libDir .. "lib/ios-simulator" } |
| 794 | targetdir (path.join(_buildDir, "ios-simulator/bin")) |
| 795 | objdir (path.join(_buildDir, "ios-simulator/obj")) |
| 796 | libdirs { path.join(_libDir, "lib/ios-simulator") } |
| 797 | 797 | linkoptions { |
| 798 | 798 | "-mios-simulator-version-min=7.0", |
| 799 | 799 | "-arch i386", |
| r244652 | r244653 | |
| 809 | 809 | } |
| 810 | 810 | |
| 811 | 811 | configuration { "qnx-arm" } |
| 812 | | targetdir (_buildDir .. "qnx-arm" .. "/bin") |
| 813 | | objdir (_buildDir .. "qnx-arm" .. "/obj") |
| 814 | | libdirs { _libDir .. "lib/qnx-arm" } |
| 815 | | -- includedirs { bxDir .. "include/compat/qnx" } |
| 812 | targetdir (path.join(_buildDir, "qnx-arm/bin")) |
| 813 | objdir (path.join(_buildDir, "qnx-arm/obj")) |
| 814 | libdirs { path.join(_libDir, "lib/qnx-arm") } |
| 815 | -- includedirs { path.join(bxDir, "include/compat/qnx") } |
| 816 | 816 | buildoptions { |
| 817 | 817 | "-std=c++0x", |
| 818 | 818 | "-Wno-psabi", -- note: the mangling of 'va_list' has changed in GCC 4.4.0 |
| r244652 | r244653 | |
| 821 | 821 | } |
| 822 | 822 | |
| 823 | 823 | configuration { "rpi" } |
| 824 | | targetdir (_buildDir .. "rpi" .. "/bin") |
| 825 | | objdir (_buildDir .. "rpi" .. "/obj") |
| 824 | targetdir (path.join(_buildDir, "rpi/bin")) |
| 825 | objdir (path.join(_buildDir, "rpi/obj")) |
| 826 | 826 | libdirs { |
| 827 | | _libDir .. "lib/rpi", |
| 827 | path.join(_libDir, "lib/rpi"), |
| 828 | 828 | "/opt/vc/lib", |
| 829 | 829 | } |
| 830 | 830 | defines { |
trunk/3rdparty/genie/src/host/scripts.c
| r244652 | r244653 | |
| 69 | 69 | "m)\ntbl[item] = item\nend\nend\nend\nreturn tbl\nend\nlocal function removevalues(tbl, removes)\nfor i=#tbl,1,-1 do\n for _, pattern in ipairs(removes) do\n if pattern == tbl[i] then\n table.remove(tbl, i)\n break\n end\n end\n end\nend\nlocal function mergeobject(dest, src)\nif not src then \nreturn \nend\nfor fieldname, value in pairs(src) do\nif not nocopy[fieldname] then\nlocal field = premake.fields[fieldname]\nif field then\nif type(value) == \"table\" then\ndest[fieldname] = mergefield(field.kind, dest[fieldname], value)\nif src.removes then\nremoves = src.removes[fieldname]\nif removes then\nremovevalues(dest[fieldname], removes)\nend\nend\nelse\ndest[fieldname] = value\nend\nelse\ndest[fieldname] = value\nend\nend\nend\nend\nlocal function merge(dest, obj, basis, terms, cfgname, pltname)\nlocal key = cfgname or \"\"\npltname = pltname or \"Native\"\nif pltname ~= \"Native\" then\nkey = key .. pltname\nend" |
| 70 | 70 | "\nterms.config = (cfgname or \"\"):lower()\nterms.platform = pltname:lower()\nlocal cfg = {}\nmergeobject(cfg, basis[key])\nadjustpaths(obj.location, cfg)\nmergeobject(cfg, obj)\nif (cfg.kind) then \nterms['kind']=cfg.kind:lower()\nend\nfor _, blk in ipairs(obj.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, terms))then\nmergeobject(cfg, blk)\nif (cfg.kind and not cfg.terms.kind) then \ncfg.terms['kind'] = cfg.kind:lower()\nterms['kind'] = cfg.kind:lower()\nend\nend\nend\ncfg.name = cfgname\ncfg.platform = pltname\nfor k,v in pairs(terms) do\ncfg.terms[k] =v\nend\ndest[key] = cfg\nend\nlocal function collapse(obj, basis)\nlocal result = {}\nbasis = basis or {}\nlocal sln = obj.solution or obj\nlocal terms = premake.getactiveterms()\nmerge(result, obj, basis, terms)--this adjusts terms\nfor _, cfgname in ipairs(sln.configurations) do\nlocal terms_local = {}\nfor k,v in pairs(terms)do terms_local[k]=v end\nmerge(result, obj, basis, terms_local, cfgname, \"Native\")--terms cam also be adjusted here\nf" |
| 71 | 71 | "or _, pltname in ipairs(sln.platforms or {}) do\nif pltname ~= \"Native\" then\nmerge(result, obj, basis,terms_local, cfgname, pltname)--terms also here\nend\nend\nend\nreturn result\nend\nlocal function builduniquedirs()\nlocal num_variations = 4\nlocal cfg_dirs = {}\nlocal hit_counts = {}\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal dirs = { }\ndirs[1] = path.getabsolute(path.join(cfg.location, cfg.objdir or cfg.project.objdir or \"obj\"))\ndirs[2] = path.join(dirs[1], iif(cfg.platform == \"Native\", \"\", cfg.platform))\ndirs[3] = path.join(dirs[2], cfg.name)\ndirs[4] = path.join(dirs[3], cfg.project.name)\ncfg_dirs[cfg] = dirs\nlocal start = iif(cfg.name, 2, 1)\nfor v = start, num_variations do\nlocal d = dirs[v]\nhit_counts[d] = (hit_counts[d] or 0) + 1\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal dir\nlocal start = iif(cfg.name, " |
| 72 | | "2, 1)\nfor v = start, num_variations do\ndir = cfg_dirs[cfg][v]\nif hit_counts[dir] == 1 then break end\nend\ncfg.objectsdir = path.getrelative(cfg.location, dir)\nend\nend\nend\nend\nlocal function buildtargets()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal pathstyle = premake.getpathstyle(cfg)\nlocal namestyle = premake.getnamestyle(cfg)\ncfg.buildtarget = premake.gettarget(cfg, \"build\", pathstyle, namestyle, cfg.system)\ncfg.linktarget = premake.gettarget(cfg, \"link\", pathstyle, namestyle, cfg.system)\nif pathstyle == \"windows\" then\ncfg.objectsdir = path.translate(cfg.objectsdir, \"\\\\\")\nend\nend\nend\nend\nend\n local function getCfgKind(cfg)\n if(cfg.kind) then\n return cfg.kind;\n end\n \n if(cfg.project.__configs[\"\"] and cfg.project.__configs[\"\"].kind) then\n return cfg.project.__configs[\"\"].kind;\n end\n \n return nil\n end\n \n local function getprojrec(dstArray, foundList, cfg, cfgname, searc" |
| 73 | | "hField, bLinkage)\n if(not cfg) then return end\n \n local foundUsePrjs = {};\n for _, useName in ipairs(cfg[searchField]) do\n local testName = useName:lower();\n if((not foundList[testName])) then\n local theProj = nil;\n local theUseProj = nil;\n for _, prj in ipairs(cfg.project.solution.projects) do\n if (prj.name:lower() == testName) then\n if(prj.usage) then\n theUseProj = prj;\n else\n theProj = prj;\n end\n end\n end\n \n --Must connect to a usage project.\n if(theUseProj) then\n foundList[testName] = true;\n local prjEntry = {\n name = testName,\n proj = theProj,\n usageProj = theUseProj,\n bLinkageOnly = bLinkage,\n };\n dstArray[testName] = prjEntry;\n table.insert(foundUsePrjs, theUseProj);\n end\n end\n end\n \n for _, usePrj in ipairs(foundUsePrjs) do\n --Links can only recurse through static libraries.\n if((searchField ~= \"links\") or\n (getCfgKind(usePrj.__configs[cfgname]) == \"StaticLib\")) then\n getprojrec(dstArray, foundList, usePrj.__configs[cfgname" |
| 74 | | "],\n cfgname, searchField, bLinkage);\n end\n end\n end\n \n --\n -- This function will recursively get all projects that the given configuration has in its \"uses\"\n -- field. The return values are a list of tables. Each table in that list contains the following:\n --name = The lowercase name of the project.\n --proj = The project. Can be nil if it is usage-only.\n --usageProj = The usage project. Can't be nil, as using a project that has no\n -- usage project is not put into the list.\n --bLinkageOnly = If this is true, then only the linkage information should be copied.\n -- The recursion will only look at the \"uses\" field on *usage* projects.\n -- This function will also add projects to the list that are mentioned in the \"links\"\n -- field of usage projects. These will only copy linker information, but they will recurse.\n -- through other \"links\" fields.\n --\n local function getprojectsconnections(cfg, cfgname)\n local dstArray = {};\n local foundList = {};\n foundList[cfg.pr" |
| 75 | | "oject.name:lower()] = true;\n \n --First, follow the uses recursively.\n getprojrec(dstArray, foundList, cfg, cfgname, \"uses\", false);\n \n --Next, go through all of the usage projects and recursively get their links.\n --But only if they're not already there. Get the links as linkage-only.\n local linkArray = {};\n for prjName, prjEntry in pairs(dstArray) do\n getprojrec(linkArray, foundList, prjEntry.usageProj.__configs[cfgname], cfgname, \n \"links\", true);\n end\n \n --Copy from linkArray into dstArray.\n for prjName, prjEntry in pairs(linkArray) do\n dstArray[prjName] = prjEntry;\n end\n \n return dstArray;\n end\n \n \n local function isnameofproj(cfg, strName)\n local sln = cfg.project.solution;\n local strTest = strName:lower();\n for prjIx, prj in ipairs(sln.projects) do\n if (prj.name:lower() == strTest) then\n return true;\n end\n end\n \n return false;\n end\n --\n -- Copies the field from dstCfg to srcCfg.\n --\n local function copydependentfield(srcCfg, dstC" |
| 76 | | "fg, strSrcField)\n local srcField = premake.fields[strSrcField];\n local strDstField = strSrcField;\n \n if type(srcCfg[strSrcField]) == \"table\" then\n --handle paths.\n if (srcField.kind == \"dirlist\" or srcField.kind == \"filelist\") and\n (not keeprelative[strSrcField]) then\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField],\n path.rebase(p, srcCfg.project.location, dstCfg.project.location))\n end\n else\n if(strSrcField == \"links\") then\n for i,p in ipairs(srcCfg[strSrcField]) do\n if(not isnameofproj(dstCfg, p)) then\n table.insert(dstCfg[strDstField], p)\n else\n printf(\"Failed to copy '%s' from proj '%s'.\",\n p, srcCfg.project.name);\n end\n end\n else\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField], p)\n end\n end\n end\n else\n if(srcField.kind == \"path\" and (not keeprelative[strSrcField])) then\n dstCfg[strDstField] = path.rebase(srcCfg[strSrcField],\n prj.location, dstCfg.project.location);\n else\n " |
| 77 | | " dstCfg[strDstField] = srcCfg[strSrcField];\n end\n end\n end\n \n --\n -- This function will take the list of project entries and apply their usage project data\n -- to the given configuration. It will copy compiling information for the projects that are\n -- not listed as linkage-only. It will copy the linking information for projects only if\n -- the source project is not a static library. It won't copy linking information\n -- if the project is in this solution; instead it will add that project to the configuration's\n -- links field, expecting that Premake will handle the rest.\n --\n local function copyusagedata(cfg, cfgname, linkToProjs)\n local myPrj = cfg.project;\n local bIsStaticLib = (getCfgKind(cfg) == \"StaticLib\");\n \n for prjName, prjEntry in pairs(linkToProjs) do\n local srcPrj = prjEntry.usageProj;\n local srcCfg = srcPrj.__configs[cfgname];\n \n for name, field in pairs(premake.fields) do\n if(srcCfg[name]) then\n if(field.usagecopy) then\n if(not prjEntry.bLinkageO" |
| 78 | | "nly) then\n copydependentfield(srcCfg, cfg, name)\n end\n elseif(field.linkagecopy) then\n --Copy the linkage data if we're building a non-static thing\n --and this is a pure usage project. If it's not pure-usage, then\n --we will simply put the project's name in the links field later.\n if((not bIsStaticLib) and (not prjEntry.proj)) then\n copydependentfield(srcCfg, cfg, name)\n end\n end\n end\n end\n \n if((not bIsStaticLib) and prjEntry.proj) then\n table.insert(cfg.links, prjEntry.proj.name);\n end\n end\n end\nfunction premake.bake.buildconfigs()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nprj.location = prj.location or sln.location or prj.basedir\nadjustpaths(prj.location, prj)\nfor _, blk in ipairs(prj.blocks) do\nadjustpaths(prj.location, blk)\nend\nend\nsln.location = sln.location or sln.basedir\nend\nfor sln in premake.solution.each() do\nlocal basis = collapse(sln)\nfor _, prj in ipairs(sln.projects) do\nprj.__configs = collapse(prj, basis)\nfor " |
| 79 | | "_, cfg in pairs(prj.__configs) do\nbake.postprocess(prj, cfg)\nend\nend\nend\nfor sln in premake.solution.each() do\nfor prjIx, prj in ipairs(sln.projects) do\nif(not prj.usage) then\nfor cfgname, cfg in pairs(prj.__configs) do\nlocal usesPrjs = getprojectsconnections(cfg, cfgname);\ncopyusagedata(cfg, cfgname, usesPrjs)\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nlocal removeList = {};\nfor index, prj in ipairs(sln.projects) do\nif(prj.usage) then\ntable.insert(removeList, 1, index); --Add in reverse order.\nend\nend\nfor _, index in ipairs(removeList) do\ntable.remove(sln.projects, index);\nend\nend\nbuilduniquedirs()\nbuildtargets(cfg)\nend\nfunction premake.bake.postprocess(prj, cfg)\ncfg.project = prj\ncfg.shortname = premake.getconfigname(cfg.name, cfg.platform, true)\ncfg.longname = premake.getconfigname(cfg.name, cfg.platform)\ncfg.location = cfg.location or cfg.basedir\nlocal platform = premake.platforms[cfg.platform]\nif platform.iscrosscompiler then\ncfg.system = cfg.platform\nels" |
| 80 | | "e\ncfg.system = os.get()\nend\nif cfg.kind == \"SharedLib\" and platform.nosharedlibs then\ncfg.kind = \"StaticLib\"\nend\nlocal files = { }\nfor _, fname in ipairs(cfg.files) do\nlocal excluded = false\nfor _, exclude in ipairs(cfg.excludes) do\nexcluded = (fname == exclude)\nif (excluded) then break end\nend\nif (not excluded) then\ntable.insert(files, fname)\nend\nend\ncfg.files = files\nfor name, field in pairs(premake.fields) do\nif field.isflags then\nlocal values = cfg[name]\nfor _, flag in ipairs(values) do values[flag] = true end\nend\nend\ncfg.__fileconfigs = { }\nfor _, fname in ipairs(cfg.files) do\ncfg.terms.required = fname:lower()\nlocal fcfg = {}\nfor _, blk in ipairs(cfg.project.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, cfg.terms)) then\nmergeobject(fcfg, blk)\nend\nend\nfcfg.name = fname\ncfg.__fileconfigs[fname] = fcfg\ntable.insert(cfg.__fileconfigs, fcfg)\nend\nend\n", |
| 72 | "2, 1)\nfor v = start, num_variations do\ndir = cfg_dirs[cfg][v]\nif hit_counts[dir] == 1 then break end\nend\nif (cfg.flags.SingleOutputDir) then\ncfg.objectsdir = cfg.objdir or cfg.project.objdir or \"obj\"\nelse\ncfg.objectsdir = path.getrelative(cfg.location, dir)\nend\nend\nend\nend\nend\nlocal function buildtargets()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal pathstyle = premake.getpathstyle(cfg)\nlocal namestyle = premake.getnamestyle(cfg)\ncfg.buildtarget = premake.gettarget(cfg, \"build\", pathstyle, namestyle, cfg.system)\ncfg.linktarget = premake.gettarget(cfg, \"link\", pathstyle, namestyle, cfg.system)\nif pathstyle == \"windows\" then\ncfg.objectsdir = path.translate(cfg.objectsdir, \"\\\\\")\nend\nend\nend\nend\nend\n local function getCfgKind(cfg)\n if(cfg.kind) then\n return cfg.kind;\n end\n \n if(cfg.project.__configs[\"\"] and cfg.project.__configs[\"\"].kind) then\n return cfg.project.__configs[\"\"].k" |
| 73 | "ind;\n end\n \n return nil\n end\n \n local function getprojrec(dstArray, foundList, cfg, cfgname, searchField, bLinkage)\n if(not cfg) then return end\n \n local foundUsePrjs = {};\n for _, useName in ipairs(cfg[searchField]) do\n local testName = useName:lower();\n if((not foundList[testName])) then\n local theProj = nil;\n local theUseProj = nil;\n for _, prj in ipairs(cfg.project.solution.projects) do\n if (prj.name:lower() == testName) then\n if(prj.usage) then\n theUseProj = prj;\n else\n theProj = prj;\n end\n end\n end\n \n --Must connect to a usage project.\n if(theUseProj) then\n foundList[testName] = true;\n local prjEntry = {\n name = testName,\n proj = theProj,\n usageProj = theUseProj,\n bLinkageOnly = bLinkage,\n };\n dstArray[testName] = prjEntry;\n table.insert(foundUsePrjs, theUseProj);\n end\n end\n end\n \n for _, usePrj in ipairs(foundUsePrjs) do\n --Links can only recurse through static libraries.\n if((searchField ~= \"links\") or\n (getCfgKind(" |
| 74 | "usePrj.__configs[cfgname]) == \"StaticLib\")) then\n getprojrec(dstArray, foundList, usePrj.__configs[cfgname],\n cfgname, searchField, bLinkage);\n end\n end\n end\n \n --\n -- This function will recursively get all projects that the given configuration has in its \"uses\"\n -- field. The return values are a list of tables. Each table in that list contains the following:\n --name = The lowercase name of the project.\n --proj = The project. Can be nil if it is usage-only.\n --usageProj = The usage project. Can't be nil, as using a project that has no\n -- usage project is not put into the list.\n --bLinkageOnly = If this is true, then only the linkage information should be copied.\n -- The recursion will only look at the \"uses\" field on *usage* projects.\n -- This function will also add projects to the list that are mentioned in the \"links\"\n -- field of usage projects. These will only copy linker information, but they will recurse.\n -- through other \"links\" fields.\n --\n local func" |
| 75 | "tion getprojectsconnections(cfg, cfgname)\n local dstArray = {};\n local foundList = {};\n foundList[cfg.project.name:lower()] = true;\n \n --First, follow the uses recursively.\n getprojrec(dstArray, foundList, cfg, cfgname, \"uses\", false);\n \n --Next, go through all of the usage projects and recursively get their links.\n --But only if they're not already there. Get the links as linkage-only.\n local linkArray = {};\n for prjName, prjEntry in pairs(dstArray) do\n getprojrec(linkArray, foundList, prjEntry.usageProj.__configs[cfgname], cfgname, \n \"links\", true);\n end\n \n --Copy from linkArray into dstArray.\n for prjName, prjEntry in pairs(linkArray) do\n dstArray[prjName] = prjEntry;\n end\n \n return dstArray;\n end\n \n \n local function isnameofproj(cfg, strName)\n local sln = cfg.project.solution;\n local strTest = strName:lower();\n for prjIx, prj in ipairs(sln.projects) do\n if (prj.name:lower() == strTest) then\n return true;\n end\n end\n \n return false;\n e" |
| 76 | "nd\n --\n -- Copies the field from dstCfg to srcCfg.\n --\n local function copydependentfield(srcCfg, dstCfg, strSrcField)\n local srcField = premake.fields[strSrcField];\n local strDstField = strSrcField;\n \n if type(srcCfg[strSrcField]) == \"table\" then\n --handle paths.\n if (srcField.kind == \"dirlist\" or srcField.kind == \"filelist\") and\n (not keeprelative[strSrcField]) then\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField],\n path.rebase(p, srcCfg.project.location, dstCfg.project.location))\n end\n else\n if(strSrcField == \"links\") then\n for i,p in ipairs(srcCfg[strSrcField]) do\n if(not isnameofproj(dstCfg, p)) then\n table.insert(dstCfg[strDstField], p)\n else\n printf(\"Failed to copy '%s' from proj '%s'.\",\n p, srcCfg.project.name);\n end\n end\n else\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField], p)\n end\n end\n end\n else\n if(srcField.kind == \"path\" and (not keeprelative[strSrcField])) then\n" |
| 77 | " dstCfg[strDstField] = path.rebase(srcCfg[strSrcField],\n prj.location, dstCfg.project.location);\n else\n dstCfg[strDstField] = srcCfg[strSrcField];\n end\n end\n end\n \n --\n -- This function will take the list of project entries and apply their usage project data\n -- to the given configuration. It will copy compiling information for the projects that are\n -- not listed as linkage-only. It will copy the linking information for projects only if\n -- the source project is not a static library. It won't copy linking information\n -- if the project is in this solution; instead it will add that project to the configuration's\n -- links field, expecting that Premake will handle the rest.\n --\n local function copyusagedata(cfg, cfgname, linkToProjs)\n local myPrj = cfg.project;\n local bIsStaticLib = (getCfgKind(cfg) == \"StaticLib\");\n \n for prjName, prjEntry in pairs(linkToProjs) do\n local srcPrj = prjEntry.usageProj;\n local srcCfg = srcPrj.__configs[cfgname];\n \n for name, field" |
| 78 | " in pairs(premake.fields) do\n if(srcCfg[name]) then\n if(field.usagecopy) then\n if(not prjEntry.bLinkageOnly) then\n copydependentfield(srcCfg, cfg, name)\n end\n elseif(field.linkagecopy) then\n --Copy the linkage data if we're building a non-static thing\n --and this is a pure usage project. If it's not pure-usage, then\n --we will simply put the project's name in the links field later.\n if((not bIsStaticLib) and (not prjEntry.proj)) then\n copydependentfield(srcCfg, cfg, name)\n end\n end\n end\n end\n \n if((not bIsStaticLib) and prjEntry.proj) then\n table.insert(cfg.links, prjEntry.proj.name);\n end\n end\n end\nfunction premake.bake.buildconfigs()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nprj.location = prj.location or sln.location or prj.basedir\nadjustpaths(prj.location, prj)\nfor _, blk in ipairs(prj.blocks) do\nadjustpaths(prj.location, blk)\nend\nend\nsln.location = sln.location or sln.basedir\nend\nfor sln in premake.solution.each() do\n" |
| 79 | "local basis = collapse(sln)\nfor _, prj in ipairs(sln.projects) do\nprj.__configs = collapse(prj, basis)\nfor _, cfg in pairs(prj.__configs) do\nbake.postprocess(prj, cfg)\nend\nend\nend\nfor sln in premake.solution.each() do\nfor prjIx, prj in ipairs(sln.projects) do\nif(not prj.usage) then\nfor cfgname, cfg in pairs(prj.__configs) do\nlocal usesPrjs = getprojectsconnections(cfg, cfgname);\ncopyusagedata(cfg, cfgname, usesPrjs)\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nlocal removeList = {};\nfor index, prj in ipairs(sln.projects) do\nif(prj.usage) then\ntable.insert(removeList, 1, index); --Add in reverse order.\nend\nend\nfor _, index in ipairs(removeList) do\ntable.remove(sln.projects, index);\nend\nend\nbuilduniquedirs()\nbuildtargets(cfg)\nend\nfunction premake.bake.postprocess(prj, cfg)\ncfg.project = prj\ncfg.shortname = premake.getconfigname(cfg.name, cfg.platform, true)\ncfg.longname = premake.getconfigname(cfg.name, cfg.platform)\ncfg.location = cfg.location or cfg.basedir\nloca" |
| 80 | "l platform = premake.platforms[cfg.platform]\nif platform.iscrosscompiler then\ncfg.system = cfg.platform\nelse\ncfg.system = os.get()\nend\nif cfg.kind == \"SharedLib\" and platform.nosharedlibs then\ncfg.kind = \"StaticLib\"\nend\nlocal files = { }\nfor _, fname in ipairs(cfg.files) do\nlocal excluded = false\nfor _, exclude in ipairs(cfg.excludes) do\nexcluded = (fname == exclude)\nif (excluded) then break end\nend\nif (not excluded) then\ntable.insert(files, fname)\nend\nend\ncfg.files = files\nfor name, field in pairs(premake.fields) do\nif field.isflags then\nlocal values = cfg[name]\nfor _, flag in ipairs(values) do values[flag] = true end\nend\nend\ncfg.__fileconfigs = { }\nfor _, fname in ipairs(cfg.files) do\ncfg.terms.required = fname:lower()\nlocal fcfg = {}\nfor _, blk in ipairs(cfg.project.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, cfg.terms)) then\nmergeobject(fcfg, blk)\nend\nend\nfcfg.name = fname\ncfg.__fileconfigs[fname] = fcfg\ntable.insert(cfg.__fileconfigs, fcfg)\nend\nend\n", |
| 81 | 81 | |
| 82 | 82 | /* base/api.lua */ |
| 83 | | "premake.fields =\n{\narchivesplit_size =\n{\nkind = \"string\",\nscope = \"config\",\n},\nbasedir =\n{\nkind = \"path\",\nscope = \"container\",\n},\nbuildaction =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"Compile\",\n\"Copy\",\n\"Embed\",\n\"None\"\n}\n},\nbuildoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_cpp =\n{\nkind = \"list\",\nscope = \"config\",\n},\nconfigurations =\n{\nkind = \"list\",\nscope = \"solution\",\n},\ndebugargs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndebugdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ndebugenvs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndeploymentoptions =\n{\nkind = \"list\",\nscope = \"config\",\nusagecopy = true,\n},\nexcludes =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nfiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nflags =\n{\nkind = \"list\",\nscope = \"config\",\nisflags = true,\nusagecopy = true,\nallowed = functi" |
| 84 | | "on(value)\nlocal allowed_flags = {\nATL = 1,\nDebugEnvsDontMerge = 1,\nDebugEnvsInherit = 1,\nEnableMinimalRebuild = 1,\nEnableSSE = 1,\nEnableSSE2 = 1,\nExtraWarnings = 1,\nFatalWarnings = 1,\nFloatFast = 1,\nFloatStrict = 1,\nManaged = 1,\nMFC = 1,\nNativeWChar = 1,\nNo64BitChecks = 1,\nNoEditAndContinue = 1,\nNoExceptions = 1,\nNoFramePointer = 1,\nNoImportLib = 1,\nNoIncrementalLink = 1,\nNoManifest = 1,\nNoMultiProcessorCompilation = 1,\nNoNativeWChar = 1,\nNoPCH = 1,\nNoRTTI = 1,\nOptimize = 1,\nOptimizeSize = 1,\nOptimizeSpeed = 1,\nSEH = 1,\nStaticATL = 1,\nStaticRuntime = 1,\nSymbols = 1,\nUnicode = 1,\nUnsafe = 1,\nUnsignedChar = 1,\nWinMain = 1,\n}\nlocal englishToAmericanSpelling =\n{\noptimise = 'optimize',\noptimisesize = 'optimizesize',\noptimisespeed = 'optimizespeed',\n}\nlocal lowervalue = value:lower()\nlowervalue = englishToAmericanSpelling[lowervalue] or lowervalue\nfor v, _ in pairs(allowed_flags) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid flag\"\nend," |
| 85 | | "\n},\nframework =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"1.0\",\n\"1.1\",\n\"2.0\",\n\"3.0\",\n\"3.5\",\n\"4.0\",\n\"4.5\",\n}\n},\nforcedincludes = \n{\nkind = \"absolutefilelist\",\nscope = \"config\",\n},\nimagepath =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimageoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimplibdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimplibextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibname =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nkind =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"StaticLib\",\n\"SharedLib\"\n}\n},\nlanguage =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"C\",\n\"C++\",\n\"C#\"\n}\n},\nlibdirs =\n{\nkind " |
| 86 | | " = \"dirlist\",\nscope = \"config\",\nlinkagecopy = true,\n},\nlinkoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinks =\n{\nkind = \"list\",\nscope = \"config\",\nallowed = function(value)\nif value:find('/', nil, true) then\nvalue = path.getabsolute(value)\nend\nreturn value\nend,\nlinkagecopy = true,\n},\nlocation =\n{\nkind = \"path\",\nscope = \"container\",\n},\nmakesettings =\n{\nkind = \"list\",\nscope = \"config\",\n},\nmessageskip =\n{\nkind = \"list\",\nscope = \"solution\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_messages = {\nSkipCreatingMessage = 1,\nSkipBuildingMessage = 1,\nSkipCleaningMessage = 1,\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_messages) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid message to skip\"\nend,\n},\nmsgarchiving =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgresource =\n{\nkind = \"string\",\ns" |
| 87 | | "cope = \"config\",\n},\nmsglinking =\n{\nkind = \"string\",\nscope = \"config\",\n},\nobjdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\noptions =\n{\nkind = \"list\",\nscope = \"container\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_options = {\nForceCPP = 1,\nArchiveSplit = 1\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_options) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid option\"\nend,\n},\npchheader =\n{\nkind = \"string\",\nscope = \"config\",\n},\npchsource =\n{\nkind = \"path\",\nscope = \"config\",\n},\nplatforms =\n{\nkind = \"list\",\nscope = \"solution\",\nallowed = table.keys(premake.platforms),\n},\npostbuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprebuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprelinkcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresdefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresincludedirs =\n{\nkind = \"dirlist\"," |
| 88 | | "\nscope = \"config\",\n},\nresoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nstartproject =\n{\nkind = \"string\",\nscope = \"solution\",\n},\ntargetdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ntargetsubdir =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetname =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntrimpaths =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nuuid =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = function(value)\nlocal ok = true\nif (#value ~= 36) then ok = false end\nfor i=1,36 do\nlocal ch = value:sub(i,i)\nif (not ch:find(\"[ABCDEFabcdef0123456789-]\")) then ok = false end\nend\nif (value:sub(9,9) ~= \"-\") then ok = false end\nif (value:sub(14,14) ~= \"-\") then ok = false end\nif (value:sub(19,19) ~= \"-\") then ok = false end\nif (value:s" |
| 89 | | "ub(24,24) ~= \"-\") then ok = false end\nif (not ok) then\nreturn nil, \"invalid UUID\"\nend\nreturn value:upper()\nend\n},\nuses =\n{\nkind = \"list\",\nscope = \"config\",\n},\nvpaths =\n{\nkind = \"keypath\",\nscope = \"container\",\n},\n}\nfunction premake.checkvalue(value, allowed)\nif (allowed) then\nif (type(allowed) == \"function\") then\nreturn allowed(value)\nelse\nfor _,v in ipairs(allowed) do\nif (value:lower() == v:lower()) then\nreturn v\nend\nend\nreturn nil, \"invalid value '\" .. value .. \"'\"\nend\nelse\nreturn value\nend\nend\nfunction premake.getobject(t)\nlocal container\nif (t == \"container\" or t == \"solution\") then\ncontainer = premake.CurrentContainer\nelse\ncontainer = premake.CurrentConfiguration\nend\nif t == \"solution\" then\nif type(container) == \"project\" then\ncontainer = container.solution\nend\nif type(container) ~= \"solution\" then\ncontainer = nil\nend\nend\nlocal msg\nif (not container) then\nif (t == \"container\") then\nmsg = \"no active solution or project\"\nel" |
| 90 | | "seif (t == \"solution\") then\nmsg = \"no active solution\"\nelse\nmsg = \"no active solution, project, or configuration\"\nend\nend\nreturn container, msg\nend\nfunction premake.setarray(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\nlocal function add(value, depth)\nif type(value) == \"table\" then\nfor _,v in ipairs(value) do\nadd(v, depth + 1)\nend\nelse\nvalue, err = premake.checkvalue(value, allowed)\nif not value then\nerror(err, depth)\nend\ntable.insert(obj[fieldname], value)\nend\nend\nif value then\nadd(value, 5)\nend\nreturn obj[fieldname]\nend\nlocal function domatchedarray(ctype, fieldname, value, matchfunc)\nlocal result = { }\nfunction makeabsolute(value, depth)\nif (type(value) == \"table\") then\nfor _, item in ipairs(value) do\nmakeabsolute(item, depth + 1)\nend\nelseif type(value) == \"string\" then\nif value:find(\"*\") then\nmakeabsolute(matchfunc(value), depth + 1)\nelse\ntable.insert(result, path.getabsolute(value))\nend\nelse\nerror(\"Invalid value in list: exp" |
| 91 | | "ected string, got \" .. type(value), depth)\nend\nend\nmakeabsolute(value, 3)\nreturn premake.setarray(ctype, fieldname, result)\nend\nfunction premake.setdirarray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchdirs)\nend\nfunction premake.setfilearray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchfiles)\nend\nfunction premake.setkeyvalue(ctype, fieldname, values)\nlocal container, err = premake.getobject(ctype)\nif not container then\nerror(err, 4)\nend\nif not container[fieldname] then\ncontainer[fieldname] = {}\nend\nif type(values) ~= \"table\" then\nerror(\"invalid value; table expected\", 4)\nend\nlocal field = container[fieldname]\nfor key,value in pairs(values) do\nif not field[key] then\nfield[key] = {}\nend\ntable.insertflat(field[key], value)\nend\nreturn field\nend\nfunction premake.setstring(ctype, fieldname, value, allowed)\nlocal container, err = premake.getobject(ctype)\nif (not container) then\nerror(err, 4)\nend\nif (value) " |
| 92 | | "then\nvalue, err = premake.checkvalue(value, allowed)\nif (not value) then\nerror(err, 4)\nend\ncontainer[fieldname] = value\nend\nreturn container[fieldname]\nend\nfunction premake.remove(fieldname, value)\nlocal cfg = premake.CurrentConfiguration\ncfg.removes = cfg.removes or {}\ncfg.removes[fieldname] = premake.setarray(cfg.removes, fieldname, value)\nend\nlocal function accessor(name, value)\nlocal kind = premake.fields[name].kind\nlocal scope = premake.fields[name].scope\nlocal allowed = premake.fields[name].allowed\nif (kind == \"string\" or kind == \"path\") and value then\nif type(value) ~= \"string\" then\nerror(\"string value expected\", 3)\nend\nend\nlocal container, err = premake.getobject(scope)\nif (not container) then\nerror(err, 3)\nend\nif kind == \"string\" then\nreturn premake.setstring(scope, name, value, allowed)\nelseif kind == \"path\" then\nif value then value = path.getabsolute(value) end\nreturn premake.setstring(scope, name, value)\nelseif kind == \"list\" then\nreturn premake.s" |
| 93 | | "etarray(container, name, value, allowed)\nelseif kind == \"dirlist\" then\nreturn premake.setdirarray(container, name, value)\nelseif kind == \"filelist\" or kind == \"absolutefilelist\" then\nreturn premake.setfilearray(container, name, value)\nelseif kind == \"keyvalue\" or kind == \"keypath\" then\nreturn premake.setkeyvalue(scope, name, value)\nend\nend\nfor name, info in pairs(premake.fields) do\n_G[name] = function(value)\nreturn accessor(name, value)\nend\nif info.kind == \"list\" or \n info.kind == \"dirlist\" or \n info.kind == \"filelist\" or\n info.kind == \"absolutefilelist\" \nthen\n_G[\"remove\"..name] = function(value)\npremake.remove(name, value)\nend\nend\nend\nfunction configuration(terms)\nif not terms then\nreturn premake.CurrentConfiguration\nend\nlocal container, err = premake.getobject(\"container\")\nif (not container) then\nerror(err, 2)\nend\nlocal cfg = { }\ncfg.terms = table.flatten({terms})\ntable.insert(container.blocks, cfg)\npremake.CurrentConfiguration = cfg\ncfg.keywords" |
| 94 | | " = { }\nfor _, word in ipairs(cfg.terms) do\ntable.insert(cfg.keywords, path.wildcards(word):lower())\nend\nfor name, field in pairs(premake.fields) do\nif (field.kind ~= \"string\" and field.kind ~= \"path\") then\ncfg[name] = { }\nend\nend\nreturn cfg\nend\nlocal function creategroup(name, sln, parent, inpath)\nlocal group = {}\nsetmetatable(group, {\n__type = \"group\"\n})\ntable.insert(sln.groups, group)\nsln.groups[inpath] = group\ngroup.solution = sln\ngroup.name = name\ngroup.uuid = os.uuid(group.name)\ngroup.parent = parent\nreturn group\nend\nlocal function creategroupsfrompath(inpath, sln)\nif inpath == nil then return nil end\ninpath = path.translate(inpath, \"/\")\nlocal groups = string.explode(inpath, \"/\")\nlocal curpath = \"\"\nlocal lastgroup = nil\nfor i, v in ipairs(groups) do\ncurpath = curpath .. \"/\" .. v:lower()\nlocal group = sln.groups[curpath]\nif group == nil then\ngroup = creategroup(v, sln, lastgroup, curpath)\nend\nlastgroup = group\nend\nreturn lastgroup\nend\nlocal function cre" |
| 95 | | "ateproject(name, sln, isUsage)\nlocal prj = {}\nsetmetatable(prj, {\n__type = \"project\",\n})\ntable.insert(sln.projects, prj)\nif(isUsage) then\nif(sln.projects[name]) then\nsln.projects[name].usageProj = prj;\nelse\nsln.projects[name] = prj\nend\nelse\nif(sln.projects[name]) then\nprj.usageProj = sln.projects[name];\nend\nsln.projects[name] = prj\nend\nlocal group = creategroupsfrompath(premake.CurrentGroup, sln)\nprj.solution = sln\nprj.name = name\nprj.basedir = os.getcwd()\nprj.uuid = os.uuid(prj.name)\nprj.blocks = { }\nprj.usage = isUsage\nprj.group = group\nreturn prj;\nend\nfunction usage(name)\nif (not name) then\nif(type(premake.CurrentContainer) ~= \"project\") then return nil end\nif(not premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (type(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (type(sln) ~= \"" |
| 96 | | "solution\") then\nerror(\"no active solution\", 2)\nend\n -- if this is a new project, or the project in that slot doesn't have a usage, create it\n if((not sln.projects[name]) or\n ((not sln.projects[name].usage) and (not sln.projects[name].usageProj))) then\n premake.CurrentContainer = createproject(name, sln, true)\n else\n premake.CurrentContainer = iff(sln.projects[name].usage,\n sln.projects[name], sln.projects[name].usageProj)\n end\n -- add an empty, global configuration to the project\n configuration { }\n return premake.CurrentContainer\n end\n function project(name)\n if (not name) then\n --Only return non-usage projects\n if(type(premake.CurrentContainer) ~= \"project\") then return nil end\n if(premake.CurrentContainer.usage) then return nil end\n return premake.CurrentContainer\nend\n -- identify the parent solution\n local sln\n if (type(premake.CurrentContainer) == \"project\") then\n sln = premake.CurrentContainer.solution\n else\n sln = premake.CurrentContainer\n end" |
| 97 | | "\n if (type(sln) ~= \"solution\") then\n error(\"no active solution\", 2)\n end\n -- if this is a new project, or the old project is a usage project, create it\n if((not sln.projects[name]) or sln.projects[name].usage) then\n premake.CurrentContainer = createproject(name, sln)\n else\n premake.CurrentContainer = sln.projects[name];\n end\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction solution(name)\nif not name then\nif type(premake.CurrentContainer) == \"project\" then\nreturn premake.CurrentContainer.solution\nelse\nreturn premake.CurrentContainer\nend\nend\npremake.CurrentContainer = premake.solution.get(name)\nif (not premake.CurrentContainer) then\npremake.CurrentContainer = premake.solution.new(name)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction group(name)\nif not name then \nreturn premake.CurrentGroup\nend\npremake.CurrentGroup = name\nreturn premake.CurrentGroup\nend\nfunction newaction(a)\npremake.action.add(a)\nend\nfunction newoption(opt)\npre" |
| 98 | | "make.option.add(opt)\nend\n", |
| 83 | "premake.fields =\n{\narchivesplit_size =\n{\nkind = \"string\",\nscope = \"config\",\n},\nbasedir =\n{\nkind = \"path\",\nscope = \"container\",\n},\nbuildaction =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"Compile\",\n\"Copy\",\n\"Embed\",\n\"None\"\n}\n},\nbuildoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_c =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_cpp =\n{\nkind = \"list\",\nscope = \"config\",\n},\nconfigurations =\n{\nkind = \"list\",\nscope = \"solution\",\n},\ndebugargs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndebugdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ndebugenvs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndeploymentoptions =\n{\nkind = \"list\",\nscope = \"config\",\nusagecopy = true,\n},\nexcludes =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nfiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nflags =\n{\nkind = \"list\",\nscope = " |
| 84 | "\"config\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_flags = {\nATL = 1,\nDebugEnvsDontMerge = 1,\nDebugEnvsInherit = 1,\nEnableMinimalRebuild = 1,\nEnableSSE = 1,\nEnableSSE2 = 1,\nExtraWarnings = 1,\nFatalWarnings = 1,\nFloatFast = 1,\nFloatStrict = 1,\nManaged = 1,\nMFC = 1,\nNativeWChar = 1,\nNo64BitChecks = 1,\nNoEditAndContinue = 1,\nNoExceptions = 1,\nNoFramePointer = 1,\nNoImportLib = 1,\nNoIncrementalLink = 1,\nNoManifest = 1,\nNoMultiProcessorCompilation = 1,\nNoNativeWChar = 1,\nNoPCH = 1,\nNoRTTI = 1,\nSingleOutputDir = 1,\nOptimize = 1,\nOptimizeSize = 1,\nOptimizeSpeed = 1,\nSEH = 1,\nStaticATL = 1,\nStaticRuntime = 1,\nSymbols = 1,\nUnicode = 1,\nUnsafe = 1,\nUnsignedChar = 1,\nWinMain = 1,\n}\nlocal englishToAmericanSpelling =\n{\noptimise = 'optimize',\noptimisesize = 'optimizesize',\noptimisespeed = 'optimizespeed',\n}\nlocal lowervalue = value:lower()\nlowervalue = englishToAmericanSpelling[lowervalue] or lowervalue\nfor v, _ in pairs(allowed_flags) do\ni" |
| 85 | "f v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid flag\"\nend,\n},\nframework =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"1.0\",\n\"1.1\",\n\"2.0\",\n\"3.0\",\n\"3.5\",\n\"4.0\",\n\"4.5\",\n}\n},\nforcedincludes = \n{\nkind = \"absolutefilelist\",\nscope = \"config\",\n},\nimagepath =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimageoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimplibdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimplibextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibname =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nkind =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"StaticLib\",\n\"SharedLib\"\n}\n},\nlanguage =\n{\nkind = \"string\",\nsco" |
| 86 | "pe = \"container\",\nallowed = {\n\"C\",\n\"C++\",\n\"C#\"\n}\n},\nlibdirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nlinkagecopy = true,\n},\nlinkoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinks =\n{\nkind = \"list\",\nscope = \"config\",\nallowed = function(value)\nif value:find('/', nil, true) then\nvalue = path.getabsolute(value)\nend\nreturn value\nend,\nlinkagecopy = true,\n},\nlocation =\n{\nkind = \"path\",\nscope = \"container\",\n},\nmakesettings =\n{\nkind = \"list\",\nscope = \"config\",\n},\nmessageskip =\n{\nkind = \"list\",\nscope = \"solution\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_messages = {\nSkipCreatingMessage = 1,\nSkipBuildingMessage = 1,\nSkipCleaningMessage = 1,\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_messages) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid message to skip\"\nend,\n},\nmsgarchiving =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile =\n{\n" |
| 87 | "kind = \"string\",\nscope = \"config\",\n},\nmsgresource =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsglinking =\n{\nkind = \"string\",\nscope = \"config\",\n},\nobjdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\noptions =\n{\nkind = \"list\",\nscope = \"container\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_options = {\nForceCPP = 1,\nArchiveSplit = 1\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_options) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid option\"\nend,\n},\npchheader =\n{\nkind = \"string\",\nscope = \"config\",\n},\npchsource =\n{\nkind = \"path\",\nscope = \"config\",\n},\nplatforms =\n{\nkind = \"list\",\nscope = \"solution\",\nallowed = table.keys(premake.platforms),\n},\npostbuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprebuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprelinkcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresdefines =\n{\n" |
| 88 | "kind = \"list\",\nscope = \"config\",\n},\nresincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nresoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nstartproject =\n{\nkind = \"string\",\nscope = \"solution\",\n},\ntargetdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ntargetsubdir =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetname =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntrimpaths =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nuuid =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = function(value)\nlocal ok = true\nif (#value ~= 36) then ok = false end\nfor i=1,36 do\nlocal ch = value:sub(i,i)\nif (not ch:find(\"[ABCDEFabcdef0123456789-]\")) then ok = false end\nend\nif (value:sub(9,9) ~= \"-\") then ok = false end\nif (value:sub(14,14) ~= \"-\")" |
| 89 | " then ok = false end\nif (value:sub(19,19) ~= \"-\") then ok = false end\nif (value:sub(24,24) ~= \"-\") then ok = false end\nif (not ok) then\nreturn nil, \"invalid UUID\"\nend\nreturn value:upper()\nend\n},\nuses =\n{\nkind = \"list\",\nscope = \"config\",\n},\nvpaths =\n{\nkind = \"keypath\",\nscope = \"container\",\n},\n}\nfunction premake.checkvalue(value, allowed)\nif (allowed) then\nif (type(allowed) == \"function\") then\nreturn allowed(value)\nelse\nfor _,v in ipairs(allowed) do\nif (value:lower() == v:lower()) then\nreturn v\nend\nend\nreturn nil, \"invalid value '\" .. value .. \"'\"\nend\nelse\nreturn value\nend\nend\nfunction premake.getobject(t)\nlocal container\nif (t == \"container\" or t == \"solution\") then\ncontainer = premake.CurrentContainer\nelse\ncontainer = premake.CurrentConfiguration\nend\nif t == \"solution\" then\nif type(container) == \"project\" then\ncontainer = container.solution\nend\nif type(container) ~= \"solution\" then\ncontainer = nil\nend\nend\nlocal msg\nif (not conta" |
| 90 | "iner) then\nif (t == \"container\") then\nmsg = \"no active solution or project\"\nelseif (t == \"solution\") then\nmsg = \"no active solution\"\nelse\nmsg = \"no active solution, project, or configuration\"\nend\nend\nreturn container, msg\nend\nfunction premake.setarray(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\nlocal function add(value, depth)\nif type(value) == \"table\" then\nfor _,v in ipairs(value) do\nadd(v, depth + 1)\nend\nelse\nvalue, err = premake.checkvalue(value, allowed)\nif not value then\nerror(err, depth)\nend\ntable.insert(obj[fieldname], value)\nend\nend\nif value then\nadd(value, 5)\nend\nreturn obj[fieldname]\nend\nlocal function domatchedarray(ctype, fieldname, value, matchfunc)\nlocal result = { }\nfunction makeabsolute(value, depth)\nif (type(value) == \"table\") then\nfor _, item in ipairs(value) do\nmakeabsolute(item, depth + 1)\nend\nelseif type(value) == \"string\" then\nif value:find(\"*\") then\nmakeabsolute(matchfunc(value), depth + 1)\nelse\ntable.i" |
| 91 | "nsert(result, path.getabsolute(value))\nend\nelse\nerror(\"Invalid value in list: expected string, got \" .. type(value), depth)\nend\nend\nmakeabsolute(value, 3)\nreturn premake.setarray(ctype, fieldname, result)\nend\nfunction premake.setdirarray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchdirs)\nend\nfunction premake.setfilearray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchfiles)\nend\nfunction premake.setkeyvalue(ctype, fieldname, values)\nlocal container, err = premake.getobject(ctype)\nif not container then\nerror(err, 4)\nend\nif not container[fieldname] then\ncontainer[fieldname] = {}\nend\nif type(values) ~= \"table\" then\nerror(\"invalid value; table expected\", 4)\nend\nlocal field = container[fieldname]\nfor key,value in pairs(values) do\nif not field[key] then\nfield[key] = {}\nend\ntable.insertflat(field[key], value)\nend\nreturn field\nend\nfunction premake.setstring(ctype, fieldname, value, allowed)\nlocal container, err" |
| 92 | " = premake.getobject(ctype)\nif (not container) then\nerror(err, 4)\nend\nif (value) then\nvalue, err = premake.checkvalue(value, allowed)\nif (not value) then\nerror(err, 4)\nend\ncontainer[fieldname] = value\nend\nreturn container[fieldname]\nend\nfunction premake.remove(fieldname, value)\nlocal cfg = premake.CurrentConfiguration\ncfg.removes = cfg.removes or {}\ncfg.removes[fieldname] = premake.setarray(cfg.removes, fieldname, value)\nend\nlocal function accessor(name, value)\nlocal kind = premake.fields[name].kind\nlocal scope = premake.fields[name].scope\nlocal allowed = premake.fields[name].allowed\nif (kind == \"string\" or kind == \"path\") and value then\nif type(value) ~= \"string\" then\nerror(\"string value expected\", 3)\nend\nend\nlocal container, err = premake.getobject(scope)\nif (not container) then\nerror(err, 3)\nend\nif kind == \"string\" then\nreturn premake.setstring(scope, name, value, allowed)\nelseif kind == \"path\" then\nif value then value = path.getabsolute(value) end\nreturn " |
| 93 | "premake.setstring(scope, name, value)\nelseif kind == \"list\" then\nreturn premake.setarray(container, name, value, allowed)\nelseif kind == \"dirlist\" then\nreturn premake.setdirarray(container, name, value)\nelseif kind == \"filelist\" or kind == \"absolutefilelist\" then\nreturn premake.setfilearray(container, name, value)\nelseif kind == \"keyvalue\" or kind == \"keypath\" then\nreturn premake.setkeyvalue(scope, name, value)\nend\nend\nfor name, info in pairs(premake.fields) do\n_G[name] = function(value)\nreturn accessor(name, value)\nend\nif info.kind == \"list\" or \n info.kind == \"dirlist\" or \n info.kind == \"filelist\" or\n info.kind == \"absolutefilelist\" \nthen\n_G[\"remove\"..name] = function(value)\npremake.remove(name, value)\nend\nend\nend\nfunction configuration(terms)\nif not terms then\nreturn premake.CurrentConfiguration\nend\nlocal container, err = premake.getobject(\"container\")\nif (not container) then\nerror(err, 2)\nend\nlocal cfg = { }\ncfg.terms = table.flatten({terms})\n" |
| 94 | "table.insert(container.blocks, cfg)\npremake.CurrentConfiguration = cfg\ncfg.keywords = { }\nfor _, word in ipairs(cfg.terms) do\ntable.insert(cfg.keywords, path.wildcards(word):lower())\nend\nfor name, field in pairs(premake.fields) do\nif (field.kind ~= \"string\" and field.kind ~= \"path\") then\ncfg[name] = { }\nend\nend\nreturn cfg\nend\nlocal function creategroup(name, sln, parent, inpath)\nlocal group = {}\nsetmetatable(group, {\n__type = \"group\"\n})\ntable.insert(sln.groups, group)\nsln.groups[inpath] = group\ngroup.solution = sln\ngroup.name = name\ngroup.uuid = os.uuid(group.name)\ngroup.parent = parent\nreturn group\nend\nlocal function creategroupsfrompath(inpath, sln)\nif inpath == nil then return nil end\ninpath = path.translate(inpath, \"/\")\nlocal groups = string.explode(inpath, \"/\")\nlocal curpath = \"\"\nlocal lastgroup = nil\nfor i, v in ipairs(groups) do\ncurpath = curpath .. \"/\" .. v:lower()\nlocal group = sln.groups[curpath]\nif group == nil then\ngroup = creategroup(v, sln, lastgr" |
| 95 | "oup, curpath)\nend\nlastgroup = group\nend\nreturn lastgroup\nend\nlocal function createproject(name, sln, isUsage)\nlocal prj = {}\nsetmetatable(prj, {\n__type = \"project\",\n})\ntable.insert(sln.projects, prj)\nif(isUsage) then\nif(sln.projects[name]) then\nsln.projects[name].usageProj = prj;\nelse\nsln.projects[name] = prj\nend\nelse\nif(sln.projects[name]) then\nprj.usageProj = sln.projects[name];\nend\nsln.projects[name] = prj\nend\nlocal group = creategroupsfrompath(premake.CurrentGroup, sln)\nprj.solution = sln\nprj.name = name\nprj.basedir = os.getcwd()\nprj.uuid = os.uuid(prj.name)\nprj.blocks = { }\nprj.usage = isUsage\nprj.group = group\nreturn prj;\nend\nfunction usage(name)\nif (not name) then\nif(type(premake.CurrentContainer) ~= \"project\") then return nil end\nif(not premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (type(premake.CurrentContainer) == \"project\") then\nsln = premake.Curr" |
| 96 | "entContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (type(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\n -- if this is a new project, or the project in that slot doesn't have a usage, create it\n if((not sln.projects[name]) or\n ((not sln.projects[name].usage) and (not sln.projects[name].usageProj))) then\n premake.CurrentContainer = createproject(name, sln, true)\n else\n premake.CurrentContainer = iff(sln.projects[name].usage,\n sln.projects[name], sln.projects[name].usageProj)\n end\n -- add an empty, global configuration to the project\n configuration { }\n return premake.CurrentContainer\n end\n function project(name)\n if (not name) then\n --Only return non-usage projects\n if(type(premake.CurrentContainer) ~= \"project\") then return nil end\n if(premake.CurrentContainer.usage) then return nil end\n return premake.CurrentContainer\nend\n -- identify the parent solution\n local sln\n if (type(premake.CurrentContainer) == \"project\") then\n sln " |
| 97 | "= premake.CurrentContainer.solution\n else\n sln = premake.CurrentContainer\n end\n if (type(sln) ~= \"solution\") then\n error(\"no active solution\", 2)\n end\n -- if this is a new project, or the old project is a usage project, create it\n if((not sln.projects[name]) or sln.projects[name].usage) then\n premake.CurrentContainer = createproject(name, sln)\n else\n premake.CurrentContainer = sln.projects[name];\n end\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction solution(name)\nif not name then\nif type(premake.CurrentContainer) == \"project\" then\nreturn premake.CurrentContainer.solution\nelse\nreturn premake.CurrentContainer\nend\nend\npremake.CurrentContainer = premake.solution.get(name)\nif (not premake.CurrentContainer) then\npremake.CurrentContainer = premake.solution.new(name)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction group(name)\nif not name then \nreturn premake.CurrentGroup\nend\npremake.CurrentGroup = name\nreturn premake.CurrentGroup\n" |
| 98 | "end\nfunction newaction(a)\npremake.action.add(a)\nend\nfunction newoption(opt)\npremake.option.add(opt)\nend\n", |
| 99 | 99 | |
| 100 | 100 | /* base/cmdline.lua */ |
| 101 | 101 | "newoption \n{\ntrigger = \"cc\",\nvalue = \"VALUE\",\ndescription = \"Choose a C/C++ compiler set\",\nallowed = {\n{ \"gcc\", \"GNU GCC (gcc/g++)\" },\n{ \"ow\", \"OpenWatcom\" },\n}\n}\nnewoption\n{\ntrigger = \"dotnet\",\nvalue = \"VALUE\",\ndescription = \"Choose a .NET compiler set\",\nallowed = {\n{ \"msnet\", \"Microsoft .NET (csc)\" },\n{ \"mono\", \"Novell Mono (mcs)\" },\n{ \"pnet\", \"Portable.NET (cscc)\" },\n}\n}\nnewoption\n{\ntrigger = \"file\",\nvalue = \"FILE\",\ndescription = \"Read FILE as a Premake script; default is 'premake4.lua'\"\n}\nnewoption\n{\ntrigger = \"help\",\ndescription = \"Display this information\"\n}\nnewoption\n{\ntrigger = \"os\",\nvalue = \"VALUE\",\ndescription = \"Generate files for a different operating system\",\nallowed = {\n{ \"bsd\", \"OpenBSD, NetBSD, or FreeBSD\" },\n{ \"linux\", \"Linux\" },\n{ \"macosx\", \"Apple Mac OS X\" },\n{ \"windows\", \"Microsoft Windows\" },\n}\n}\nnewoption\n{" |
| r244652 | r244653 | |
| 185 | 185 | "$(SILENT) if exist $(subst /,\\\\\\\\,$(OBJDIR)) rmdir /s /q $(subst /,\\\\\\\\,$(OBJDIR))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\ncpp.pchrules(prj)\ncpp.fileRules(prj)\n_p('-include $(OBJECTS:%%.o=%%.d)')\n_p('ifneq (,$(PCH))')\n_p(' -include $(OBJDIR)/$(notdir $(PCH)).d')\n_p('endif')\nend\nfunction premake.gmake_cpp_header(prj, cc, platforms)\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(" |
| 186 | 186 | "SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p('endif')\n_p('')\n_p('CC = %s', cc.cc)\n_p('CXX = %s', cc.cxx)\n_p('AR = %s', cc.ar)\n_p('')\n_p('ifndef RESCOMP')\n_p(' ifdef WINDRES')\n_p(' RESCOMP = $(WINDRES)')\n_p(' else')\n_p(' RESCOMP = windres')\n_p(' endif')\n_p('endif')\n_p('')\nend\nfunction premake.gmake_cpp_config(prj, cfg, cc)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\ncpp.platformtools(cfg, cc)\n_p(' OBJDIR = %s', _MAKE.esc(cfg.objectsdir))\n_p(' TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(cc.getdefines(cfg.defines)))\n_p(' INCLUDES +=%s', make.list(cc.getincludedirs(cfg.includedirs)))\ncpp.pchconfig(cfg)\ncpp.flags(cfg, cc)\ncpp.linker(cfg, cc)\n_p(' OBJECTS := \\\\')\nfor _, fi" |
| 187 | 187 | "le in ipairs(prj.files) do\nif path.iscppfile(file) then\nlocal excluded = false\nfor _, exclude in ipairs(cfg.excludes) do\nexcluded = (exclude == file)\nif (excluded) then break end\nend\nif excluded == false then\n_p('\\t$(OBJDIR)/%s.o \\\\'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n)\nend\nend\nend\n_p('')\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\nmake.settings(cfg, cc)\n_p('endif')\n_p('')\nend\nfunction cpp.platformtools(cfg, cc)\nlocal platfor" |
| 188 | | "m = cc.platforms[cfg.platform]\nif platform.cc then\n_p(' CC = %s', platform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cfg, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\nend\nif #cfg.forcedincludes > 0 then\n_p(' FORCE_INCLUDE += -include %s'\n,premake.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CFLAGS)%s', make.list(table.join(cc.getcxxflags(cfg), cfg.buildoptions_cpp)))\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resdefines),\n cc.getincludedir" |
| 189 | | "s(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\nif cfg.kind == \"StaticLib\" then\nif cfg.platform:startswith(\"Universal\") then\n_p(' LINKCMD = libtool -o $(TARGET)')\nelse\nif cc.llvm then\n_p(' LINKCMD = $(AR) rcs $(TARGET)')\nelse\n_p(' LINKCMD = $(AR) -rcs $(TARGET)')\nend\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPCH then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = path.getabsolute(path.join(cfg.project.location, incdir))\n" |
| 190 | | "local testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH)')\n_p('\\t@echo $(notdir $<)')\nlocal cmd = iif(prj.language == \"C\", \"$(CC) -x c-header $(ALL_CFLAGS)\", \"$(CXX) -x c++-header $(ALL_CXXFLAGS)\")\n_p('\\t$(SILENT) %s -MMD -MP $(DEFINES) $(INCLUDES) -o \"$@\" -MF \"$(@:%%.gch=%%.d)\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cpp.fileRules(prj)\nfor _, file in ipairs(prj.files or {}) do\nif path.iscppfile(file) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OB" |
| 191 | | "JDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -MF $(@:%%.%s=%%.d) -c \"$<\"', flags, objext)\nend\n", |
| 188 | "m = cc.platforms[cfg.platform]\nif platform.cc then\n_p(' CC = %s', platform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cfg, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\nend\nif #cfg.forcedincludes > 0 then\n_p(' FORCE_INCLUDE += -include %s'\n,premake.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resd" |
| 189 | "efines),\n cc.getincludedirs(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\nif cfg.kind == \"StaticLib\" then\nif cfg.platform:startswith(\"Universal\") then\n_p(' LINKCMD = libtool -o $(TARGET)')\nelse\nif cc.llvm then\n_p(' LINKCMD = $(AR) rcs $(TARGET)')\nelse\n_p(' LINKCMD = $(AR) -rcs $(TARGET)')\nend\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPCH then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = p" |
| 190 | "ath.getabsolute(path.join(cfg.project.location, incdir))\nlocal testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH)')\n_p('\\t@echo $(notdir $<)')\nlocal cmd = iif(prj.language == \"C\", \"$(CC) -x c-header $(ALL_CFLAGS)\", \"$(CXX) -x c++-header $(ALL_CXXFLAGS)\")\n_p('\\t$(SILENT) %s -MMD -MP $(DEFINES) $(INCLUDES) -o \"$@\" -MF \"$(@:%%.gch=%%.d)\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cpp.fileRules(prj)\nfor _, file in ipairs(prj.files or {}) do\nif path.iscppfile(file) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\n_p('')\n" |
| 191 | "elseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -MF $(@:%%.%s=%%.d) -c \"$<\"', flags, objext)\nend\n", |
| 192 | 192 | |
| 193 | 193 | /* actions/make/make_csharp.lua */ |
| 194 | 194 | "local function getresourcefilename(cfg, fname)\nif path.getextension(fname) == \".resx\" then\n local name = cfg.buildtarget.basename .. \".\"\n local dir = path.getdirectory(fname)\n if dir ~= \".\" then \nname = name .. path.translate(dir, \".\") .. \".\"\nend\nreturn \"$(OBJDIR)/\" .. _MAKE.esc(name .. path.getbasename(fname)) .. \".resources\"\nelse\nreturn fname\nend\nend\nfunction premake.make_csharp(prj)\nlocal csc = premake.dotnet\nlocal cfglibs = { }\nlocal cfgpairs = { }\nlocal anycfg\nfor cfg in premake.eachconfig(prj) do\nanycfg = cfg\ncfglibs[cfg] = premake.getlinks(cfg, \"siblings\", \"fullpath\")\ncfgpairs[cfg] = { }\nfor _, fname in ipairs(cfglibs[cfg]) do\nif path.getdirectory(fname) ~= cfg.buildtarget.directory then\ncfgpairs[cfg][\"$(TARGETDIR)/\" .. _MAKE.esc(path.getname(fname))] = _MAKE.esc(fname)\nend\nend\nend\nlocal sources = {}\nlocal embedded = { }\nlocal copypairs = { }\nfor fcfg in premake.project.eachfile(prj) do\nlocal action = csc.getbuildaction(fcfg)\nif action == \"Co" |
trunk/src/emu/bus/a2bus/ezcgi.c
| r0 | r244653 | |
| 1 | /********************************************************************* |
| 2 | |
| 3 | ezcgi.c |
| 4 | |
| 5 | "E-Z Color Graphics Interface" by Steve Ciarcia |
| 6 | from BYTE Magazine, August, 1982 |
| 7 | https://archive.org/details/byte-magazine-1982-08-rescan |
| 8 | |
| 9 | *********************************************************************/ |
| 10 | |
| 11 | #include "emu.h" |
| 12 | #include "ezcgi.h" |
| 13 | |
| 14 | |
| 15 | /*************************************************************************** |
| 16 | PARAMETERS |
| 17 | ***************************************************************************/ |
| 18 | |
| 19 | #define TMS_TAG "ezcgi_tms" |
| 20 | #define SCREEN_TAG "screen" |
| 21 | |
| 22 | //************************************************************************** |
| 23 | // GLOBAL VARIABLES |
| 24 | //************************************************************************** |
| 25 | |
| 26 | const device_type A2BUS_EZCGI = &device_creator<a2bus_ezcgi_device>; |
| 27 | const device_type A2BUS_EZCGI_9938 = &device_creator<a2bus_ezcgi_9938_device>; |
| 28 | const device_type A2BUS_EZCGI_9958 = &device_creator<a2bus_ezcgi_9958_device>; |
| 29 | |
| 30 | MACHINE_CONFIG_FRAGMENT( ezcgi ) |
| 31 | MCFG_DEVICE_ADD( TMS_TAG, TMS9918A, XTAL_10_738635MHz / 2 ) |
| 32 | MCFG_TMS9928A_VRAM_SIZE(0x4000) // 16k of VRAM |
| 33 | MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(a2bus_ezcgi_device, tms_irq_w)) |
| 34 | MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG ) |
| 35 | MCFG_SCREEN_UPDATE_DEVICE( TMS_TAG, tms9918a_device, screen_update ) |
| 36 | MACHINE_CONFIG_END |
| 37 | |
| 38 | #define MSX2_XBORDER_PIXELS 16 |
| 39 | #define MSX2_YBORDER_PIXELS 28 |
| 40 | #define MSX2_TOTAL_XRES_PIXELS 256 * 2 + (MSX2_XBORDER_PIXELS * 2) |
| 41 | #define MSX2_TOTAL_YRES_PIXELS 212 * 2 + (MSX2_YBORDER_PIXELS * 2) |
| 42 | #define MSX2_VISIBLE_XBORDER_PIXELS 8 * 2 |
| 43 | #define MSX2_VISIBLE_YBORDER_PIXELS 14 * 2 |
| 44 | |
| 45 | MACHINE_CONFIG_FRAGMENT( ezcgi9938 ) |
| 46 | MCFG_V9938_ADD(TMS_TAG, SCREEN_TAG, 0x30000) // 192K of VRAM |
| 47 | MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(a2bus_ezcgi_9938_device, tms_irq_w)) |
| 48 | |
| 49 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 50 | MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| 51 | MCFG_SCREEN_REFRESH_RATE(60) |
| 52 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 53 | MCFG_SCREEN_UPDATE_DEVICE(TMS_TAG, v9938_device, screen_update) |
| 54 | MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2) |
| 55 | MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1) |
| 56 | MCFG_SCREEN_PALETTE("ezcgi_tms:palette") |
| 57 | MACHINE_CONFIG_END |
| 58 | |
| 59 | MACHINE_CONFIG_FRAGMENT( ezcgi9958 ) |
| 60 | MCFG_V9958_ADD(TMS_TAG, SCREEN_TAG, 0x30000) // 192K of VRAM |
| 61 | MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(a2bus_ezcgi_9958_device, tms_irq_w)) |
| 62 | |
| 63 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 64 | MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| 65 | MCFG_SCREEN_REFRESH_RATE(60) |
| 66 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 67 | MCFG_SCREEN_UPDATE_DEVICE(TMS_TAG, v9938_device, screen_update) |
| 68 | MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2) |
| 69 | MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1) |
| 70 | MCFG_SCREEN_PALETTE("ezcgi_tms:palette") |
| 71 | MACHINE_CONFIG_END |
| 72 | |
| 73 | //------------------------------------------------- |
| 74 | // machine_config_additions - device-specific |
| 75 | // machine configurations |
| 76 | //------------------------------------------------- |
| 77 | |
| 78 | machine_config_constructor a2bus_ezcgi_device::device_mconfig_additions() const |
| 79 | { |
| 80 | return MACHINE_CONFIG_NAME( ezcgi ); |
| 81 | } |
| 82 | |
| 83 | machine_config_constructor a2bus_ezcgi_9938_device::device_mconfig_additions() const |
| 84 | { |
| 85 | return MACHINE_CONFIG_NAME( ezcgi9938 ); |
| 86 | } |
| 87 | |
| 88 | machine_config_constructor a2bus_ezcgi_9958_device::device_mconfig_additions() const |
| 89 | { |
| 90 | return MACHINE_CONFIG_NAME( ezcgi9958 ); |
| 91 | } |
| 92 | |
| 93 | //************************************************************************** |
| 94 | // LIVE DEVICE |
| 95 | //************************************************************************** |
| 96 | |
| 97 | a2bus_ezcgi_device::a2bus_ezcgi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 98 | device_t(mconfig, A2BUS_EZCGI, "E-Z Color Graphics Interface", tag, owner, clock, "a2ezcgi", __FILE__), |
| 99 | device_a2bus_card_interface(mconfig, *this), |
| 100 | m_tms(*this, TMS_TAG) |
| 101 | { |
| 102 | } |
| 103 | |
| 104 | a2bus_ezcgi_device::a2bus_ezcgi_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : |
| 105 | device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
| 106 | device_a2bus_card_interface(mconfig, *this), |
| 107 | m_tms(*this, TMS_TAG) |
| 108 | { |
| 109 | } |
| 110 | |
| 111 | a2bus_ezcgi_9938_device::a2bus_ezcgi_9938_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 112 | device_t(mconfig, A2BUS_EZCGI_9938, "E-Z Color Graphics Interface (TMS9938)", tag, owner, clock, "a2ezcgi3", __FILE__), |
| 113 | device_a2bus_card_interface(mconfig, *this), |
| 114 | m_tms(*this, TMS_TAG) |
| 115 | { |
| 116 | } |
| 117 | |
| 118 | a2bus_ezcgi_9938_device::a2bus_ezcgi_9938_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : |
| 119 | device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
| 120 | device_a2bus_card_interface(mconfig, *this), |
| 121 | m_tms(*this, TMS_TAG) |
| 122 | { |
| 123 | } |
| 124 | |
| 125 | a2bus_ezcgi_9958_device::a2bus_ezcgi_9958_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 126 | device_t(mconfig, A2BUS_EZCGI_9958, "E-Z Color Graphics Interface (TMS9958)", tag, owner, clock, "a2ezcgi5", __FILE__), |
| 127 | device_a2bus_card_interface(mconfig, *this), |
| 128 | m_tms(*this, TMS_TAG) |
| 129 | { |
| 130 | } |
| 131 | |
| 132 | a2bus_ezcgi_9958_device::a2bus_ezcgi_9958_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : |
| 133 | device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
| 134 | device_a2bus_card_interface(mconfig, *this), |
| 135 | m_tms(*this, TMS_TAG) |
| 136 | { |
| 137 | } |
| 138 | |
| 139 | //------------------------------------------------- |
| 140 | // device_start - device-specific startup |
| 141 | //------------------------------------------------- |
| 142 | |
| 143 | void a2bus_ezcgi_device::device_start() |
| 144 | { |
| 145 | // set_a2bus_device makes m_slot valid |
| 146 | set_a2bus_device(); |
| 147 | } |
| 148 | |
| 149 | void a2bus_ezcgi_device::device_reset() |
| 150 | { |
| 151 | } |
| 152 | |
| 153 | void a2bus_ezcgi_9938_device::device_start() |
| 154 | { |
| 155 | // set_a2bus_device makes m_slot valid |
| 156 | set_a2bus_device(); |
| 157 | } |
| 158 | |
| 159 | void a2bus_ezcgi_9938_device::device_reset() |
| 160 | { |
| 161 | } |
| 162 | |
| 163 | void a2bus_ezcgi_9958_device::device_start() |
| 164 | { |
| 165 | // set_a2bus_device makes m_slot valid |
| 166 | set_a2bus_device(); |
| 167 | } |
| 168 | |
| 169 | void a2bus_ezcgi_9958_device::device_reset() |
| 170 | { |
| 171 | } |
| 172 | |
| 173 | /* |
| 174 | C0nx map: |
| 175 | 0 - TMS read |
| 176 | 1 - TMS write |
| 177 | */ |
| 178 | |
| 179 | UINT8 a2bus_ezcgi_device::read_c0nx(address_space &space, UINT8 offset) |
| 180 | { |
| 181 | switch (offset) |
| 182 | { |
| 183 | case 0: |
| 184 | return m_tms->vram_read(space, 0); |
| 185 | |
| 186 | case 1: |
| 187 | return m_tms->register_read(space, 0); |
| 188 | } |
| 189 | |
| 190 | return 0xff; |
| 191 | } |
| 192 | |
| 193 | void a2bus_ezcgi_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data) |
| 194 | { |
| 195 | switch (offset) |
| 196 | { |
| 197 | case 0: |
| 198 | m_tms->vram_write(space, 0, data); |
| 199 | break; |
| 200 | |
| 201 | case 1: |
| 202 | m_tms->register_write(space, 0, data); |
| 203 | break; |
| 204 | } |
| 205 | } |
| 206 | |
| 207 | UINT8 a2bus_ezcgi_9938_device::read_c0nx(address_space &space, UINT8 offset) |
| 208 | { |
| 209 | switch (offset) |
| 210 | { |
| 211 | case 0: |
| 212 | return m_tms->vram_r(); |
| 213 | |
| 214 | case 1: |
| 215 | return m_tms->status_r(); |
| 216 | } |
| 217 | |
| 218 | return 0xff; |
| 219 | } |
| 220 | |
| 221 | void a2bus_ezcgi_9938_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data) |
| 222 | { |
| 223 | switch (offset) |
| 224 | { |
| 225 | case 0: |
| 226 | m_tms->vram_w(data); |
| 227 | break; |
| 228 | |
| 229 | case 1: |
| 230 | m_tms->command_w(data); |
| 231 | break; |
| 232 | |
| 233 | case 2: |
| 234 | m_tms->palette_w(data); |
| 235 | break; |
| 236 | |
| 237 | case 3: |
| 238 | m_tms->register_w(data); |
| 239 | break; |
| 240 | } |
| 241 | } |
| 242 | |
| 243 | UINT8 a2bus_ezcgi_9958_device::read_c0nx(address_space &space, UINT8 offset) |
| 244 | { |
| 245 | switch (offset) |
| 246 | { |
| 247 | case 0: |
| 248 | return m_tms->vram_r(); |
| 249 | |
| 250 | case 1: |
| 251 | return m_tms->status_r(); |
| 252 | } |
| 253 | |
| 254 | return 0xff; |
| 255 | } |
| 256 | |
| 257 | void a2bus_ezcgi_9958_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data) |
| 258 | { |
| 259 | switch (offset) |
| 260 | { |
| 261 | case 0: |
| 262 | m_tms->vram_w(data); |
| 263 | break; |
| 264 | |
| 265 | case 1: |
| 266 | m_tms->command_w(data); |
| 267 | break; |
| 268 | |
| 269 | case 2: |
| 270 | m_tms->palette_w(data); |
| 271 | break; |
| 272 | |
| 273 | case 3: |
| 274 | m_tms->register_w(data); |
| 275 | break; |
| 276 | } |
| 277 | } |
| 278 | |
| 279 | WRITE_LINE_MEMBER( a2bus_ezcgi_device::tms_irq_w ) |
| 280 | { |
| 281 | if (state) |
| 282 | { |
| 283 | raise_slot_irq(); |
| 284 | } |
| 285 | else |
| 286 | { |
| 287 | lower_slot_irq(); |
| 288 | } |
| 289 | } |
| 290 | |
| 291 | WRITE_LINE_MEMBER( a2bus_ezcgi_9938_device::tms_irq_w ) |
| 292 | { |
| 293 | if (state) |
| 294 | { |
| 295 | raise_slot_irq(); |
| 296 | } |
| 297 | else |
| 298 | { |
| 299 | lower_slot_irq(); |
| 300 | } |
| 301 | } |
| 302 | |
| 303 | WRITE_LINE_MEMBER( a2bus_ezcgi_9958_device::tms_irq_w ) |
| 304 | { |
| 305 | if (state) |
| 306 | { |
| 307 | raise_slot_irq(); |
| 308 | } |
| 309 | else |
| 310 | { |
| 311 | lower_slot_irq(); |
| 312 | } |
| 313 | } |
| 314 | |
trunk/src/mame/drivers/argus.c
| r244652 | r244653 | |
| 107 | 107 | =============== |
| 108 | 108 | - Half transparent color (50% alpha blending) is not emulated. |
| 109 | 109 | - Sprite priority switch of Butasan is shown in test mode. What will be |
| 110 | | happened when set it ? JFF is not implemented this mistery switch too. |
| 110 | happened when set it ? JFF is not implemented this mystery switch too. |
| 111 | 111 | - Data proms of Butasan does exist. But I don't know what is used for. |
| 112 | 112 | - Though clock speed of Argus is actually 4 MHz, major sprite problems |
| 113 | 113 | are broken out in the middle of slowdown. So, it is set 5 MHz now. |
| r244652 | r244653 | |
| 123 | 123 | #include "includes/argus.h" |
| 124 | 124 | |
| 125 | 125 | |
| 126 | void argus_state::machine_start() |
| 127 | { |
| 128 | membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); |
| 129 | } |
| 130 | |
| 126 | 131 | /*************************************************************************** |
| 127 | 132 | |
| 128 | 133 | Interrupt(s) |
| 129 | 134 | |
| 130 | 135 | ***************************************************************************/ |
| 131 | 136 | |
| 132 | | TIMER_DEVICE_CALLBACK_MEMBER(argus_state::argus_scanline) |
| 137 | TIMER_DEVICE_CALLBACK_MEMBER(argus_state::scanline) |
| 133 | 138 | { |
| 134 | 139 | int scanline = param; |
| 135 | 140 | |
| r244652 | r244653 | |
| 151 | 156 | m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xcf); /* RST 08h */ |
| 152 | 157 | } |
| 153 | 158 | |
| 154 | | /* Handler called by the YM2203 emulator when the internal timers cause an IRQ */ |
| 155 | | WRITE_LINE_MEMBER(argus_state::irqhandler) |
| 156 | | { |
| 157 | | m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); |
| 158 | | } |
| 159 | 159 | |
| 160 | 160 | /*************************************************************************** |
| 161 | 161 | |
| r244652 | r244653 | |
| 163 | 163 | |
| 164 | 164 | ***************************************************************************/ |
| 165 | 165 | |
| 166 | | WRITE8_MEMBER(argus_state::argus_bankselect_w) |
| 166 | WRITE8_MEMBER(argus_state::bankselect_w) |
| 167 | 167 | { |
| 168 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 169 | | int bankaddress; |
| 170 | | |
| 171 | | bankaddress = 0x10000 + ((data & 7) * 0x4000); |
| 172 | | membank("bank1")->set_base(&RAM[bankaddress]); /* Select 8 banks of 16k */ |
| 168 | membank("mainbank")->set_entry(data & 7); /* Select 8 banks of 16k */ |
| 173 | 169 | } |
| 174 | 170 | |
| 175 | 171 | |
| r244652 | r244653 | |
| 181 | 177 | |
| 182 | 178 | static ADDRESS_MAP_START( argus_map, AS_PROGRAM, 8, argus_state ) |
| 183 | 179 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 184 | | AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank1") |
| 180 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") |
| 185 | 181 | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("SYSTEM") |
| 186 | 182 | AM_RANGE(0xc001, 0xc001) AM_READ_PORT("P1") |
| 187 | 183 | AM_RANGE(0xc002, 0xc002) AM_READ_PORT("P2") |
| 188 | 184 | AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DSW1") |
| 189 | 185 | AM_RANGE(0xc004, 0xc004) AM_READ_PORT("DSW2") |
| 190 | 186 | AM_RANGE(0xc200, 0xc200) AM_WRITE(soundlatch_byte_w) |
| 191 | | AM_RANGE(0xc201, 0xc201) AM_WRITE(argus_flipscreen_w) |
| 192 | | AM_RANGE(0xc202, 0xc202) AM_WRITE(argus_bankselect_w) |
| 187 | AM_RANGE(0xc201, 0xc201) AM_WRITE(flipscreen_w) |
| 188 | AM_RANGE(0xc202, 0xc202) AM_WRITE(bankselect_w) |
| 193 | 189 | AM_RANGE(0xc300, 0xc301) AM_RAM AM_SHARE("bg0_scrollx") |
| 194 | 190 | AM_RANGE(0xc302, 0xc303) AM_RAM AM_SHARE("bg0_scrolly") |
| 195 | 191 | AM_RANGE(0xc308, 0xc309) AM_RAM AM_SHARE("bg1_scrollx") |
| 196 | 192 | AM_RANGE(0xc30a, 0xc30b) AM_RAM AM_SHARE("bg1_scrolly") |
| 197 | 193 | AM_RANGE(0xc30c, 0xc30c) AM_WRITE(argus_bg_status_w) |
| 198 | | AM_RANGE(0xc400, 0xcfff) AM_READWRITE(argus_paletteram_r, argus_paletteram_w) AM_SHARE("paletteram") |
| 199 | | AM_RANGE(0xd000, 0xd7ff) AM_READWRITE(argus_txram_r, argus_txram_w) AM_SHARE("txram") |
| 200 | | AM_RANGE(0xd800, 0xdfff) AM_READWRITE(argus_bg1ram_r, argus_bg1ram_w) AM_SHARE("bg1ram") |
| 194 | AM_RANGE(0xc400, 0xcfff) AM_RAM_WRITE(argus_paletteram_w) AM_SHARE("paletteram") |
| 195 | AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(txram_w) AM_SHARE("txram") |
| 196 | AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(bg1ram_w) AM_SHARE("bg1ram") |
| 201 | 197 | AM_RANGE(0xe000, 0xf1ff) AM_RAM |
| 202 | 198 | AM_RANGE(0xf200, 0xf7ff) AM_RAM AM_SHARE("spriteram") |
| 203 | 199 | AM_RANGE(0xf800, 0xffff) AM_RAM |
| r244652 | r244653 | |
| 205 | 201 | |
| 206 | 202 | static ADDRESS_MAP_START( valtric_map, AS_PROGRAM, 8, argus_state ) |
| 207 | 203 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 208 | | AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank1") |
| 204 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") |
| 209 | 205 | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("SYSTEM") |
| 210 | 206 | AM_RANGE(0xc001, 0xc001) AM_READ_PORT("P1") |
| 211 | 207 | AM_RANGE(0xc002, 0xc002) AM_READ_PORT("P2") |
| 212 | 208 | AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DSW1") |
| 213 | 209 | AM_RANGE(0xc004, 0xc004) AM_READ_PORT("DSW2") |
| 214 | 210 | AM_RANGE(0xc200, 0xc200) AM_WRITE(soundlatch_byte_w) |
| 215 | | AM_RANGE(0xc201, 0xc201) AM_WRITE(argus_flipscreen_w) |
| 216 | | AM_RANGE(0xc202, 0xc202) AM_WRITE(argus_bankselect_w) |
| 211 | AM_RANGE(0xc201, 0xc201) AM_WRITE(flipscreen_w) |
| 212 | AM_RANGE(0xc202, 0xc202) AM_WRITE(bankselect_w) |
| 217 | 213 | AM_RANGE(0xc300, 0xc300) AM_WRITE(valtric_unknown_w) |
| 218 | 214 | AM_RANGE(0xc308, 0xc309) AM_RAM AM_SHARE("bg1_scrollx") |
| 219 | 215 | AM_RANGE(0xc30a, 0xc30b) AM_RAM AM_SHARE("bg1_scrolly") |
| 220 | 216 | AM_RANGE(0xc30c, 0xc30c) AM_WRITE(valtric_bg_status_w) |
| 221 | 217 | AM_RANGE(0xc30d, 0xc30d) AM_WRITE(valtric_mosaic_w) |
| 222 | | AM_RANGE(0xc400, 0xcfff) AM_READWRITE(argus_paletteram_r, valtric_paletteram_w) AM_SHARE("paletteram") |
| 223 | | AM_RANGE(0xd000, 0xd7ff) AM_READWRITE(argus_txram_r, argus_txram_w) AM_SHARE("txram") |
| 224 | | AM_RANGE(0xd800, 0xdfff) AM_READWRITE(argus_bg1ram_r, argus_bg1ram_w) AM_SHARE("bg1ram") |
| 218 | AM_RANGE(0xc400, 0xcfff) AM_RAM_WRITE(valtric_paletteram_w) AM_SHARE("paletteram") |
| 219 | AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(txram_w) AM_SHARE("txram") |
| 220 | AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(bg1ram_w) AM_SHARE("bg1ram") |
| 225 | 221 | AM_RANGE(0xe000, 0xf1ff) AM_RAM |
| 226 | 222 | AM_RANGE(0xf200, 0xf7ff) AM_RAM AM_SHARE("spriteram") |
| 227 | 223 | AM_RANGE(0xf800, 0xffff) AM_RAM |
| r244652 | r244653 | |
| 229 | 225 | |
| 230 | 226 | static ADDRESS_MAP_START( butasan_map, AS_PROGRAM, 8, argus_state ) |
| 231 | 227 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 232 | | AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank1") |
| 228 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") |
| 233 | 229 | AM_RANGE(0xc000, 0xc000) AM_READ_PORT("SYSTEM") |
| 234 | 230 | AM_RANGE(0xc001, 0xc001) AM_READ_PORT("P1") |
| 235 | 231 | AM_RANGE(0xc002, 0xc002) AM_READ_PORT("P2") |
| r244652 | r244653 | |
| 237 | 233 | AM_RANGE(0xc004, 0xc004) AM_READ_PORT("DSW2") |
| 238 | 234 | AM_RANGE(0xc100, 0xc100) AM_WRITE(butasan_unknown_w) |
| 239 | 235 | AM_RANGE(0xc200, 0xc200) AM_WRITE(soundlatch_byte_w) |
| 240 | | AM_RANGE(0xc201, 0xc201) AM_WRITE(argus_flipscreen_w) |
| 241 | | AM_RANGE(0xc202, 0xc202) AM_WRITE(argus_bankselect_w) |
| 236 | AM_RANGE(0xc201, 0xc201) AM_WRITE(flipscreen_w) |
| 237 | AM_RANGE(0xc202, 0xc202) AM_WRITE(bankselect_w) |
| 242 | 238 | AM_RANGE(0xc203, 0xc203) AM_WRITE(butasan_pageselect_w) |
| 243 | 239 | AM_RANGE(0xc300, 0xc301) AM_RAM AM_SHARE("bg0_scrollx") |
| 244 | 240 | AM_RANGE(0xc302, 0xc303) AM_RAM AM_SHARE("bg0_scrolly") |
| r244652 | r244653 | |
| 246 | 242 | AM_RANGE(0xc308, 0xc309) AM_RAM AM_SHARE("bg1_scrollx") |
| 247 | 243 | AM_RANGE(0xc30a, 0xc30b) AM_RAM AM_SHARE("bg1_scrolly") |
| 248 | 244 | AM_RANGE(0xc30c, 0xc30c) AM_WRITE(butasan_bg1_status_w) |
| 249 | | AM_RANGE(0xc400, 0xc7ff) AM_READWRITE(butasan_bg1ram_r, butasan_bg1ram_w) AM_SHARE("butasan_bg1ram") |
| 250 | | AM_RANGE(0xc800, 0xcfff) AM_READWRITE(argus_paletteram_r, butasan_paletteram_w) AM_SHARE("paletteram") |
| 245 | AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(butasan_bg1ram_w) AM_SHARE("butasan_bg1ram") |
| 246 | AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(butasan_paletteram_w) AM_SHARE("paletteram") |
| 251 | 247 | AM_RANGE(0xd000, 0xdfff) AM_READWRITE(butasan_pagedram_r, butasan_pagedram_w) |
| 252 | 248 | AM_RANGE(0xe000, 0xefff) AM_RAM |
| 253 | 249 | AM_RANGE(0xf000, 0xf67f) AM_RAM AM_SHARE("spriteram") |
| r244652 | r244653 | |
| 534 | 530 | /* basic machine hardware */ |
| 535 | 531 | MCFG_CPU_ADD("maincpu", Z80, 5000000) /* 4 MHz */ |
| 536 | 532 | MCFG_CPU_PROGRAM_MAP(argus_map) |
| 537 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", argus_state, argus_scanline, "screen", 0, 1) |
| 533 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", argus_state, scanline, "screen", 0, 1) |
| 538 | 534 | |
| 539 | 535 | MCFG_CPU_ADD("audiocpu", Z80, 5000000) |
| 540 | 536 | MCFG_CPU_PROGRAM_MAP(sound_map_a) |
| r244652 | r244653 | |
| 560 | 556 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 561 | 557 | |
| 562 | 558 | MCFG_SOUND_ADD("ym1", YM2203, 6000000 / 4) |
| 563 | | MCFG_YM2203_IRQ_HANDLER(WRITELINE(argus_state, irqhandler)) |
| 559 | MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) |
| 564 | 560 | MCFG_SOUND_ROUTE(0, "mono", 0.15) |
| 565 | 561 | MCFG_SOUND_ROUTE(1, "mono", 0.15) |
| 566 | 562 | MCFG_SOUND_ROUTE(2, "mono", 0.15) |
| r244652 | r244653 | |
| 578 | 574 | /* basic machine hardware */ |
| 579 | 575 | MCFG_CPU_ADD("maincpu", Z80, 5000000) /* 5 MHz */ |
| 580 | 576 | MCFG_CPU_PROGRAM_MAP(valtric_map) |
| 581 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", argus_state, argus_scanline, "screen", 0, 1) |
| 577 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", argus_state, scanline, "screen", 0, 1) |
| 582 | 578 | |
| 583 | 579 | MCFG_CPU_ADD("audiocpu", Z80, 5000000) |
| 584 | 580 | MCFG_CPU_PROGRAM_MAP(sound_map_a) |
| r244652 | r244653 | |
| 604 | 600 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 605 | 601 | |
| 606 | 602 | MCFG_SOUND_ADD("ym1", YM2203, 6000000 / 4) |
| 607 | | MCFG_YM2203_IRQ_HANDLER(WRITELINE(argus_state, irqhandler)) |
| 603 | MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) |
| 608 | 604 | MCFG_SOUND_ROUTE(0, "mono", 0.15) |
| 609 | 605 | MCFG_SOUND_ROUTE(1, "mono", 0.15) |
| 610 | 606 | MCFG_SOUND_ROUTE(2, "mono", 0.15) |
| r244652 | r244653 | |
| 648 | 644 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 649 | 645 | |
| 650 | 646 | MCFG_SOUND_ADD("ym1", YM2203, 6000000 / 4) |
| 651 | | MCFG_YM2203_IRQ_HANDLER(WRITELINE(argus_state, irqhandler)) |
| 647 | MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) |
| 652 | 648 | MCFG_SOUND_ROUTE(0, "mono", 0.30) |
| 653 | 649 | MCFG_SOUND_ROUTE(1, "mono", 0.30) |
| 654 | 650 | MCFG_SOUND_ROUTE(2, "mono", 0.30) |
| r244652 | r244653 | |
| 796 | 792 | |
| 797 | 793 | |
| 798 | 794 | /* ( YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME ) */ |
| 799 | | GAME( 1986, argus, 0, argus, argus, driver_device, 0, ROT270, "NMK (Jaleco license)", "Argus", GAME_IMPERFECT_GRAPHICS ) |
| 800 | | GAME( 1986, valtric, 0, valtric, valtric, driver_device, 0, ROT270, "NMK (Jaleco license)", "Valtric", GAME_IMPERFECT_GRAPHICS ) |
| 801 | | GAME( 1987, butasan, 0, butasan, butasan, driver_device, 0, ROT0, "NMK (Jaleco license)", "Butasan - Pig's & Bomber's (Japan, English)", GAME_IMPERFECT_GRAPHICS ) |
| 802 | | GAME( 1987, butasanj, butasan,butasan, butasan, driver_device, 0, ROT0, "NMK (Jaleco license)", "Butasan (Japan, Japanese)", GAME_IMPERFECT_GRAPHICS ) |
| 795 | GAME( 1986, argus, 0, argus, argus, driver_device, 0, ROT270, "NMK (Jaleco license)", "Argus", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 796 | GAME( 1986, valtric, 0, valtric, valtric, driver_device, 0, ROT270, "NMK (Jaleco license)", "Valtric", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 797 | GAME( 1987, butasan, 0, butasan, butasan, driver_device, 0, ROT0, "NMK (Jaleco license)", "Butasan - Pig's & Bomber's (Japan, English)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 798 | GAME( 1987, butasanj, butasan,butasan, butasan, driver_device, 0, ROT0, "NMK (Jaleco license)", "Butasan (Japan, Japanese)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/capbowl.c
| r244652 | r244653 | |
| 103 | 103 | * |
| 104 | 104 | *************************************/ |
| 105 | 105 | |
| 106 | | INTERRUPT_GEN_MEMBER(capbowl_state::capbowl_interrupt) |
| 106 | INTERRUPT_GEN_MEMBER(capbowl_state::interrupt) |
| 107 | 107 | { |
| 108 | 108 | if (ioport("SERVICE")->read() & 1) /* get status of the F2 key */ |
| 109 | 109 | device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); /* trigger self test */ |
| r244652 | r244653 | |
| 121 | 121 | { |
| 122 | 122 | switch (id) |
| 123 | 123 | { |
| 124 | | case TIMER_CAPBOWL_UPDATE: |
| 125 | | capbowl_update(ptr, param); |
| 124 | case TIMER_UPDATE: |
| 125 | update(ptr, param); |
| 126 | 126 | break; |
| 127 | 127 | default: |
| 128 | 128 | assert_always(FALSE, "Unknown id in capbowl_state::device_timer"); |
| r244652 | r244653 | |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | |
| 133 | | TIMER_CALLBACK_MEMBER(capbowl_state::capbowl_update) |
| 133 | TIMER_CALLBACK_MEMBER(capbowl_state::update) |
| 134 | 134 | { |
| 135 | 135 | int scanline = param; |
| 136 | 136 | |
| 137 | 137 | m_screen->update_partial(scanline - 1); |
| 138 | 138 | scanline += 32; |
| 139 | 139 | if (scanline > 240) scanline = 32; |
| 140 | | timer_set(m_screen->time_until_pos(scanline), TIMER_CAPBOWL_UPDATE, scanline); |
| 140 | m_update_timer->adjust(m_screen->time_until_pos(scanline), scanline); |
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | |
| r244652 | r244653 | |
| 190 | 190 | * |
| 191 | 191 | *************************************/ |
| 192 | 192 | |
| 193 | | WRITE8_MEMBER(capbowl_state::capbowl_sndcmd_w) |
| 193 | WRITE8_MEMBER(capbowl_state::sndcmd_w) |
| 194 | 194 | { |
| 195 | 195 | m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); |
| 196 | 196 | soundlatch_byte_w(space, offset, data); |
| 197 | 197 | } |
| 198 | 198 | |
| 199 | 199 | |
| 200 | | |
| 201 | 200 | /************************************* |
| 202 | 201 | * |
| 203 | | * Handler called by the 2203 emulator |
| 204 | | * when the internal timers cause an IRQ |
| 205 | | * |
| 206 | | *************************************/ |
| 207 | | |
| 208 | | WRITE_LINE_MEMBER(capbowl_state::firqhandler) |
| 209 | | { |
| 210 | | m_audiocpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); |
| 211 | | } |
| 212 | | |
| 213 | | |
| 214 | | |
| 215 | | /************************************* |
| 216 | | * |
| 217 | 202 | * Main CPU memory handlers |
| 218 | 203 | * |
| 219 | 204 | *************************************/ |
| r244652 | r244653 | |
| 223 | 208 | AM_RANGE(0x4000, 0x4000) AM_WRITEONLY AM_SHARE("rowaddress") |
| 224 | 209 | AM_RANGE(0x4800, 0x4800) AM_WRITE(capbowl_rom_select_w) |
| 225 | 210 | AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("nvram") |
| 226 | | AM_RANGE(0x5800, 0x5fff) AM_READWRITE(capbowl_tms34061_r, capbowl_tms34061_w) |
| 227 | | AM_RANGE(0x6000, 0x6000) AM_WRITE(capbowl_sndcmd_w) |
| 211 | AM_RANGE(0x5800, 0x5fff) AM_READWRITE(tms34061_r, tms34061_w) |
| 212 | AM_RANGE(0x6000, 0x6000) AM_WRITE(sndcmd_w) |
| 228 | 213 | AM_RANGE(0x6800, 0x6800) AM_WRITE(track_reset_w) AM_READNOP /* + watchdog */ |
| 229 | 214 | AM_RANGE(0x7000, 0x7000) AM_READ(track_0_r) /* + other inputs */ |
| 230 | 215 | AM_RANGE(0x7800, 0x7800) AM_READ(track_1_r) /* + other inputs */ |
| r244652 | r244653 | |
| 236 | 221 | AM_RANGE(0x0000, 0x001f) AM_READWRITE(bowlrama_blitter_r, bowlrama_blitter_w) |
| 237 | 222 | AM_RANGE(0x4000, 0x4000) AM_WRITEONLY AM_SHARE("rowaddress") |
| 238 | 223 | AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("nvram") |
| 239 | | AM_RANGE(0x5800, 0x5fff) AM_READWRITE(capbowl_tms34061_r, capbowl_tms34061_w) |
| 240 | | AM_RANGE(0x6000, 0x6000) AM_WRITE(capbowl_sndcmd_w) |
| 224 | AM_RANGE(0x5800, 0x5fff) AM_READWRITE(tms34061_r, tms34061_w) |
| 225 | AM_RANGE(0x6000, 0x6000) AM_WRITE(sndcmd_w) |
| 241 | 226 | AM_RANGE(0x6800, 0x6800) AM_WRITE(track_reset_w) AM_READNOP /* + watchdog */ |
| 242 | 227 | AM_RANGE(0x7000, 0x7000) AM_READ(track_0_r) /* + other inputs */ |
| 243 | 228 | AM_RANGE(0x7800, 0x7800) AM_READ(track_1_r) /* + other inputs */ |
| r244652 | r244653 | |
| 301 | 286 | |
| 302 | 287 | /************************************* |
| 303 | 288 | * |
| 304 | | * TMS34061 interfacing |
| 305 | | * |
| 306 | | *************************************/ |
| 307 | | |
| 308 | | WRITE_LINE_MEMBER(capbowl_state::generate_tms34061_interrupt) |
| 309 | | { |
| 310 | | m_maincpu->set_input_line(M6809_FIRQ_LINE, state); |
| 311 | | } |
| 312 | | |
| 313 | | /************************************* |
| 314 | | * |
| 315 | 289 | * Machine driver |
| 316 | 290 | * |
| 317 | 291 | *************************************/ |
| 318 | 292 | |
| 319 | 293 | void capbowl_state::machine_start() |
| 320 | 294 | { |
| 295 | m_update_timer = timer_alloc(TIMER_UPDATE); |
| 296 | |
| 321 | 297 | save_item(NAME(m_blitter_addr)); |
| 322 | | save_item(NAME(m_last_trackball_val[0])); |
| 323 | | save_item(NAME(m_last_trackball_val[1])); |
| 298 | save_item(NAME(m_last_trackball_val)); |
| 324 | 299 | } |
| 325 | 300 | |
| 326 | 301 | void capbowl_state::machine_reset() |
| 327 | 302 | { |
| 328 | | timer_set(m_screen->time_until_pos(32), TIMER_CAPBOWL_UPDATE, 32); |
| 303 | m_update_timer->adjust(m_screen->time_until_pos(32), 32); |
| 329 | 304 | |
| 330 | 305 | m_blitter_addr = 0; |
| 331 | 306 | m_last_trackball_val[0] = 0; |
| r244652 | r244653 | |
| 338 | 313 | /* basic machine hardware */ |
| 339 | 314 | MCFG_CPU_ADD("maincpu", M6809E, MASTER_CLOCK) |
| 340 | 315 | MCFG_CPU_PROGRAM_MAP(capbowl_map) |
| 341 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", capbowl_state, capbowl_interrupt) |
| 316 | MCFG_CPU_VBLANK_INT_DRIVER("screen", capbowl_state, interrupt) |
| 342 | 317 | MCFG_WATCHDOG_TIME_INIT(PERIOD_OF_555_ASTABLE(100000.0, 100000.0, 0.1e-6) * 15.5) // ~0.3s |
| 343 | 318 | |
| 344 | 319 | MCFG_CPU_ADD("audiocpu", M6809E, MASTER_CLOCK) |
| r244652 | r244653 | |
| 354 | 329 | MCFG_SCREEN_SIZE(360, 256) |
| 355 | 330 | MCFG_SCREEN_VISIBLE_AREA(0, 359, 0, 244) |
| 356 | 331 | MCFG_SCREEN_REFRESH_RATE(57) |
| 357 | | MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update_capbowl) |
| 332 | MCFG_SCREEN_UPDATE_DRIVER(capbowl_state, screen_update) |
| 358 | 333 | |
| 359 | 334 | MCFG_DEVICE_ADD("tms34061", TMS34061, 0) |
| 360 | 335 | MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */ |
| 361 | 336 | MCFG_TMS34061_VRAM_SIZE(0x10000) /* size of video RAM */ |
| 362 | | MCFG_TMS34061_INTERRUPT_CB(WRITELINE(capbowl_state, generate_tms34061_interrupt)) /* interrupt gen callback */ |
| 337 | MCFG_TMS34061_INTERRUPT_CB(INPUTLINE("maincpu", M6809_FIRQ_LINE)) /* interrupt gen callback */ |
| 363 | 338 | |
| 364 | 339 | /* sound hardware */ |
| 365 | 340 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 366 | 341 | |
| 367 | 342 | MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK/2) |
| 368 | | MCFG_YM2203_IRQ_HANDLER(WRITELINE(capbowl_state, firqhandler)) |
| 343 | MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE)) |
| 369 | 344 | MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("ticket", ticket_dispenser_device, read)) |
| 370 | 345 | MCFG_AY8910_PORT_B_WRITE_CB(DEVWRITE8("ticket", ticket_dispenser_device, write)) /* Also a status LED. See memory map above */ |
| 371 | 346 | MCFG_SOUND_ROUTE(0, "mono", 0.07) |
| r244652 | r244653 | |
| 492 | 467 | * |
| 493 | 468 | *************************************/ |
| 494 | 469 | |
| 495 | | GAME( 1988, capbowl, 0, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 1)", 0 ) |
| 496 | | GAME( 1988, capbowl2, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 2)", 0 ) |
| 497 | | GAME( 1988, capbowl3, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 3)", 0 ) |
| 498 | | GAME( 1988, capbowl4, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 4)", 0 ) |
| 499 | | GAME( 1989, clbowl, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Coors Light Bowling", 0 ) |
| 500 | | GAME( 1991, bowlrama, 0, bowlrama, capbowl, driver_device, 0, ROT270, "P&P Marketing", "Bowl-O-Rama", 0 ) |
| 470 | GAME( 1988, capbowl, 0, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 1)", GAME_SUPPORTS_SAVE ) |
| 471 | GAME( 1988, capbowl2, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 2)", GAME_SUPPORTS_SAVE ) |
| 472 | GAME( 1988, capbowl3, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 3)", GAME_SUPPORTS_SAVE ) |
| 473 | GAME( 1988, capbowl4, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Capcom Bowling (set 4)", GAME_SUPPORTS_SAVE ) |
| 474 | GAME( 1989, clbowl, capbowl, capbowl, capbowl, capbowl_state, capbowl, ROT270, "Incredible Technologies / Capcom", "Coors Light Bowling", GAME_SUPPORTS_SAVE ) |
| 475 | GAME( 1991, bowlrama, 0, bowlrama, capbowl, driver_device, 0, ROT270, "P&P Marketing", "Bowl-O-Rama", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/ssv.c
| r244652 | r244653 | |
| 179 | 179 | m_maincpu->set_input_line(0, (m_requested_int & m_irq_enable)? ASSERT_LINE : CLEAR_LINE); |
| 180 | 180 | } |
| 181 | 181 | |
| 182 | | IRQ_CALLBACK_MEMBER(ssv_state::ssv_irq_callback) |
| 182 | IRQ_CALLBACK_MEMBER(ssv_state::irq_callback) |
| 183 | 183 | { |
| 184 | 184 | int i; |
| 185 | 185 | for ( i = 0; i <= 7; i++ ) |
| r244652 | r244653 | |
| 193 | 193 | return 0; |
| 194 | 194 | } |
| 195 | 195 | |
| 196 | | WRITE16_MEMBER(ssv_state::ssv_irq_ack_w) |
| 196 | WRITE16_MEMBER(ssv_state::irq_ack_w) |
| 197 | 197 | { |
| 198 | 198 | int level = ((offset * 2) & 0x70) >> 4; |
| 199 | 199 | |
| r244652 | r244653 | |
| 220 | 220 | ultrax: 40,00 at the start then 42,4a |
| 221 | 221 | twineag2: 40,00 at the start then 42,4a |
| 222 | 222 | */ |
| 223 | | WRITE16_MEMBER(ssv_state::ssv_irq_enable_w) |
| 223 | WRITE16_MEMBER(ssv_state::irq_enable_w) |
| 224 | 224 | { |
| 225 | 225 | COMBINE_DATA(&m_irq_enable); |
| 226 | 226 | } |
| 227 | 227 | |
| 228 | | TIMER_DEVICE_CALLBACK_MEMBER(ssv_state::ssv_interrupt) |
| 228 | TIMER_DEVICE_CALLBACK_MEMBER(ssv_state::interrupt) |
| 229 | 229 | { |
| 230 | 230 | int scanline = param; |
| 231 | 231 | |
| r244652 | r244653 | |
| 283 | 283 | survarts: 83 |
| 284 | 284 | sxyreact: 80 |
| 285 | 285 | */ |
| 286 | | WRITE16_MEMBER(ssv_state::ssv_lockout_w) |
| 286 | WRITE16_MEMBER(ssv_state::lockout_w) |
| 287 | 287 | { |
| 288 | 288 | // popmessage("%02X",data & 0xff); |
| 289 | 289 | if (ACCESSING_BITS_0_7) |
| r244652 | r244653 | |
| 293 | 293 | coin_counter_w(machine(), 1, data & 0x04); |
| 294 | 294 | coin_counter_w(machine(), 0, data & 0x08); |
| 295 | 295 | // data & 0x40? |
| 296 | | ssv_enable_video(data & 0x80); |
| 296 | enable_video(data & 0x80); |
| 297 | 297 | } |
| 298 | 298 | } |
| 299 | 299 | |
| 300 | 300 | /* Same as above but with inverted lockout lines */ |
| 301 | | WRITE16_MEMBER(ssv_state::ssv_lockout_inv_w) |
| 301 | WRITE16_MEMBER(ssv_state::lockout_inv_w) |
| 302 | 302 | { |
| 303 | 303 | // popmessage("%02X",data & 0xff); |
| 304 | 304 | if (ACCESSING_BITS_0_7) |
| r244652 | r244653 | |
| 308 | 308 | coin_counter_w(machine(), 1, data & 0x04); |
| 309 | 309 | coin_counter_w(machine(), 0, data & 0x08); |
| 310 | 310 | // data & 0x40? |
| 311 | | ssv_enable_video(data & 0x80); |
| 311 | enable_video(data & 0x80); |
| 312 | 312 | } |
| 313 | 313 | } |
| 314 | 314 | |
| r244652 | r244653 | |
| 396 | 396 | AM_RANGE(0x100000, 0x13ffff) AM_RAM AM_SHARE("spriteram") /* Sprites */ \ |
| 397 | 397 | AM_RANGE(0x140000, 0x15ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") /* Palette */\ |
| 398 | 398 | AM_RANGE(0x160000, 0x17ffff) AM_RAM /* */ \ |
| 399 | | AM_RANGE(0x1c0000, 0x1c0001) AM_READ(ssv_vblank_r ) /* Vblank? */ \ |
| 399 | AM_RANGE(0x1c0000, 0x1c0001) AM_READ(vblank_r ) /* Vblank? */ \ |
| 400 | 400 | /**/AM_RANGE(0x1c0002, 0x1c007f) AM_READONLY /* Scroll */ \ |
| 401 | | AM_RANGE(0x1c0000, 0x1c007f) AM_WRITE(ssv_scroll_w) AM_SHARE("scroll") /* Scroll */ \ |
| 401 | AM_RANGE(0x1c0000, 0x1c007f) AM_WRITE(scroll_w) AM_SHARE("scroll") /* Scroll */ \ |
| 402 | 402 | AM_RANGE(0x210002, 0x210003) AM_READ_PORT("DSW1") \ |
| 403 | 403 | AM_RANGE(0x210004, 0x210005) AM_READ_PORT("DSW2") \ |
| 404 | 404 | AM_RANGE(0x210008, 0x210009) AM_READ_PORT("P1") \ |
| 405 | 405 | AM_RANGE(0x21000a, 0x21000b) AM_READ_PORT("P2") \ |
| 406 | 406 | AM_RANGE(0x21000c, 0x21000d) AM_READ_PORT("SYSTEM") \ |
| 407 | | AM_RANGE(0x21000e, 0x21000f) AM_READNOP AM_WRITE(ssv_lockout_w) /* Lockout */ \ |
| 407 | AM_RANGE(0x21000e, 0x21000f) AM_READNOP AM_WRITE(lockout_w) /* Lockout */ \ |
| 408 | 408 | AM_RANGE(0x210010, 0x210011) AM_WRITENOP \ |
| 409 | 409 | AM_RANGE(0x230000, 0x230071) AM_WRITEONLY AM_SHARE("irq_vectors") /* IRQ Vec */ \ |
| 410 | | AM_RANGE(0x240000, 0x240071) AM_WRITE(ssv_irq_ack_w ) /* IRQ Ack */ \ |
| 411 | | AM_RANGE(0x260000, 0x260001) AM_WRITE(ssv_irq_enable_w) /* IRQ En */ \ |
| 410 | AM_RANGE(0x240000, 0x240071) AM_WRITE(irq_ack_w ) /* IRQ Ack */ \ |
| 411 | AM_RANGE(0x260000, 0x260001) AM_WRITE(irq_enable_w) /* IRQ En */ \ |
| 412 | 412 | AM_RANGE(0x300000, 0x30007f) AM_DEVREADWRITE8("ensoniq", es5506_device, read, write, 0x00ff) /* Sound */ \ |
| 413 | 413 | AM_RANGE(_ROM, 0xffffff) AM_ROM AM_REGION("maincpu", 0) /* ROM */ |
| 414 | 414 | /*************************************************************************** |
| r244652 | r244653 | |
| 513 | 513 | static ADDRESS_MAP_START( hypreact_map, AS_PROGRAM, 16, ssv_state ) |
| 514 | 514 | AM_RANGE(0x210000, 0x210001) AM_READ(watchdog_reset16_r) // Watchdog |
| 515 | 515 | // AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 5 at the start |
| 516 | | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(ssv_lockout_inv_w) // Inverted lockout lines |
| 516 | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(lockout_inv_w) // Inverted lockout lines |
| 517 | 517 | // AM_RANGE(0x280000, 0x280001) AM_READNOP // ? read at the start, value not used |
| 518 | 518 | AM_RANGE(0xc00000, 0xc00001) AM_READ(hypreact_input_r) // Inputs |
| 519 | 519 | AM_RANGE(0xc00006, 0xc00007) AM_RAM AM_SHARE("input_sel") // |
| r244652 | r244653 | |
| 529 | 529 | static ADDRESS_MAP_START( hypreac2_map, AS_PROGRAM, 16, ssv_state ) |
| 530 | 530 | AM_RANGE(0x210000, 0x210001) AM_READ(watchdog_reset16_r) // Watchdog |
| 531 | 531 | // AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 5 at the start |
| 532 | | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(ssv_lockout_inv_w) // Inverted lockout lines |
| 532 | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(lockout_inv_w) // Inverted lockout lines |
| 533 | 533 | // AM_RANGE(0x280000, 0x280001) AM_READNOP // ? read at the start, value not used |
| 534 | 534 | AM_RANGE(0x500000, 0x500001) AM_READ(hypreact_input_r) // Inputs |
| 535 | 535 | AM_RANGE(0x500002, 0x500003) AM_READ(hypreact_input_r) // (again?) |
| r244652 | r244653 | |
| 587 | 587 | |
| 588 | 588 | /* Monster Slider needs the RAM mirrored for the gameplay logic to work correctly */ |
| 589 | 589 | |
| 590 | | READ16_MEMBER(ssv_state::ssv_mainram_r) |
| 590 | READ16_MEMBER(ssv_state::mainram_r) |
| 591 | 591 | { |
| 592 | 592 | return m_mainram[offset]; |
| 593 | 593 | } |
| 594 | 594 | |
| 595 | | WRITE16_MEMBER(ssv_state::ssv_mainram_w) |
| 595 | WRITE16_MEMBER(ssv_state::mainram_w) |
| 596 | 596 | { |
| 597 | 597 | COMBINE_DATA(&m_mainram[offset]); |
| 598 | 598 | } |
| 599 | 599 | |
| 600 | 600 | static ADDRESS_MAP_START( mslider_map, AS_PROGRAM, 16, ssv_state ) |
| 601 | | AM_RANGE(0x010000, 0x01ffff) AM_READWRITE(ssv_mainram_r, ssv_mainram_w) // RAM Mirror |
| 601 | AM_RANGE(0x010000, 0x01ffff) AM_READWRITE(mainram_r, mainram_w) // RAM Mirror |
| 602 | 602 | // AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start |
| 603 | 603 | AM_RANGE(0x400000, 0x47ffff) AM_WRITEONLY // ? |
| 604 | 604 | // AM_RANGE(0x500000, 0x500001) AM_WRITENOP // ? ff at the start |
| r244652 | r244653 | |
| 684 | 684 | AM_RANGE(0x010000, 0x050faf) AM_RAM // More RAM |
| 685 | 685 | AM_RANGE(0x210000, 0x210001) AM_READ(watchdog_reset16_r) // Watchdog |
| 686 | 686 | // AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 0,4 at the start |
| 687 | | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(ssv_lockout_inv_w) // Coin Counters / Lockouts |
| 687 | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(lockout_inv_w) // Coin Counters / Lockouts |
| 688 | 688 | AM_RANGE(0x300076, 0x300077) AM_READ(srmp7_irqv_r) // Sound |
| 689 | 689 | // 0x540000, 0x540003, related to lev 5 irq? |
| 690 | 690 | AM_RANGE(0x580000, 0x580001) AM_WRITE(srmp7_sound_bank_w) // Sound Bank |
| r244652 | r244653 | |
| 751 | 751 | } |
| 752 | 752 | |
| 753 | 753 | static ADDRESS_MAP_START( sxyreact_map, AS_PROGRAM, 16, ssv_state ) |
| 754 | | // AM_RANGE(0x020000, 0x03ffff) AM_READWRITE(ssv_mainram_r, ssv_mainram_w) // sxyreac2 reads / writes here, why? |
| 754 | // AM_RANGE(0x020000, 0x03ffff) AM_READWRITE(mainram_r, mainram_w) // sxyreac2 reads / writes here, why? |
| 755 | 755 | AM_RANGE(0x210000, 0x210001) AM_READ(watchdog_reset16_r) // Watchdog |
| 756 | 756 | // AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 1 at the start |
| 757 | | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(ssv_lockout_inv_w) // Inverted lockout lines |
| 757 | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(lockout_inv_w) // Inverted lockout lines |
| 758 | 758 | AM_RANGE(0x500002, 0x500003) AM_READ(sxyreact_ballswitch_r) // ? |
| 759 | 759 | AM_RANGE(0x500004, 0x500005) AM_READWRITE(sxyreact_dial_r, sxyreact_motor_w) // Dial Value (serial) |
| 760 | 760 | AM_RANGE(0x520000, 0x520001) AM_WRITE(sxyreact_dial_w) // Dial Value (advance 1 bit) |
| r244652 | r244653 | |
| 828 | 828 | } |
| 829 | 829 | |
| 830 | 830 | static ADDRESS_MAP_START( jsk_map, AS_PROGRAM, 16, ssv_state ) |
| 831 | | AM_RANGE(0x050000, 0x05ffff) AM_READWRITE(ssv_mainram_r, ssv_mainram_w) // RAM Mirror? |
| 831 | AM_RANGE(0x050000, 0x05ffff) AM_READWRITE(mainram_r, mainram_w) // RAM Mirror? |
| 832 | 832 | AM_RANGE(0x210000, 0x210001) AM_WRITE(watchdog_reset16_w) // Watchdog |
| 833 | 833 | AM_RANGE(0x400000, 0x47ffff) AM_RAM // RAM? |
| 834 | 834 | AM_RANGE(0x900000, 0x900007) AM_READWRITE(latch16_r, latch16_w) |
| r244652 | r244653 | |
| 898 | 898 | AM_RANGE(0x180000, 0x1bffff) AM_READWRITE(eaglshot_gfxram_r, eaglshot_gfxram_w) |
| 899 | 899 | AM_RANGE(0x210000, 0x210001) AM_READNOP /*AM_READ(watchdog_reset16_r)*/ // Watchdog |
| 900 | 900 | // AM_RANGE(0x210002, 0x210003) AM_WRITENOP // ? 0,4 at the start |
| 901 | | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(ssv_lockout_inv_w) // Inverted lockout lines |
| 901 | AM_RANGE(0x21000e, 0x21000f) AM_WRITE(lockout_inv_w) // Inverted lockout lines |
| 902 | 902 | AM_RANGE(0x800000, 0x800001) AM_WRITE(eaglshot_gfxrom_bank_w) |
| 903 | 903 | AM_RANGE(0x900000, 0x900001) AM_WRITE(eaglshot_trackball_w) |
| 904 | 904 | AM_RANGE(0xa00000, 0xbfffff) AM_ROMBANK("gfxrom") |
| r244652 | r244653 | |
| 2481 | 2481 | |
| 2482 | 2482 | ***************************************************************************/ |
| 2483 | 2483 | |
| 2484 | | void ssv_state::init_ssv(int interrupt_ultrax) |
| 2484 | void ssv_state::init(int interrupt_ultrax) |
| 2485 | 2485 | { |
| 2486 | 2486 | int i; |
| 2487 | 2487 | for (i = 0; i < 16; i++) |
| r244652 | r244653 | |
| 2489 | 2489 | ( (i & 4) ? (2 << 16) : 0 ) + |
| 2490 | 2490 | ( (i & 2) ? (4 << 16) : 0 ) + |
| 2491 | 2491 | ( (i & 1) ? (8 << 16) : 0 ) ; |
| 2492 | | ssv_enable_video(1); |
| 2492 | enable_video(1); |
| 2493 | 2493 | m_interrupt_ultrax = interrupt_ultrax; |
| 2494 | |
| 2495 | save_item(NAME(m_requested_int)); |
| 2496 | save_item(NAME(m_irq_enable)); |
| 2494 | 2497 | } |
| 2495 | 2498 | |
| 2496 | 2499 | void ssv_state::init_hypreac2_common() |
| r244652 | r244653 | |
| 2528 | 2531 | } |
| 2529 | 2532 | } |
| 2530 | 2533 | |
| 2531 | | DRIVER_INIT_MEMBER(ssv_state,drifto94) { init_ssv(0); init_st010(); } |
| 2532 | | DRIVER_INIT_MEMBER(ssv_state,eaglshot) { init_ssv(0); init_eaglshot_banking(); } |
| 2533 | | DRIVER_INIT_MEMBER(ssv_state,gdfs) { init_ssv(0); } |
| 2534 | | DRIVER_INIT_MEMBER(ssv_state,hypreact) { init_ssv(0); } |
| 2535 | | DRIVER_INIT_MEMBER(ssv_state,hypreac2) { init_ssv(0); init_hypreac2_common(); } |
| 2536 | | DRIVER_INIT_MEMBER(ssv_state,janjans1) { init_ssv(0); } |
| 2537 | | DRIVER_INIT_MEMBER(ssv_state,keithlcy) { init_ssv(0); } |
| 2538 | | DRIVER_INIT_MEMBER(ssv_state,meosism) { init_ssv(0); } |
| 2539 | | DRIVER_INIT_MEMBER(ssv_state,mslider) { init_ssv(0); } |
| 2540 | | DRIVER_INIT_MEMBER(ssv_state,ryorioh) { init_ssv(0); } |
| 2541 | | DRIVER_INIT_MEMBER(ssv_state,srmp4) { init_ssv(0); |
| 2534 | DRIVER_INIT_MEMBER(ssv_state,drifto94) { init(0); init_st010(); } |
| 2535 | DRIVER_INIT_MEMBER(ssv_state,eaglshot) { init(0); init_eaglshot_banking(); save_item(NAME(m_trackball_select)); } |
| 2536 | DRIVER_INIT_MEMBER(ssv_state,gdfs) { init(0); save_item(NAME(m_gdfs_lightgun_select)); save_item(NAME(m_gdfs_eeprom_old)); } |
| 2537 | DRIVER_INIT_MEMBER(ssv_state,hypreact) { init(0); } |
| 2538 | DRIVER_INIT_MEMBER(ssv_state,hypreac2) { init(0); init_hypreac2_common(); } |
| 2539 | DRIVER_INIT_MEMBER(ssv_state,janjans1) { init(0); } |
| 2540 | DRIVER_INIT_MEMBER(ssv_state,keithlcy) { init(0); } |
| 2541 | DRIVER_INIT_MEMBER(ssv_state,meosism) { init(0); } |
| 2542 | DRIVER_INIT_MEMBER(ssv_state,mslider) { init(0); } |
| 2543 | DRIVER_INIT_MEMBER(ssv_state,ryorioh) { init(0); } |
| 2544 | DRIVER_INIT_MEMBER(ssv_state,srmp4) { init(0); |
| 2542 | 2545 | // ((UINT16 *)memregion("maincpu")->base())[0x2b38/2] = 0x037a; /* patch to see gal test mode */ |
| 2543 | 2546 | } |
| 2544 | | DRIVER_INIT_MEMBER(ssv_state,srmp7) { init_ssv(0); } |
| 2545 | | DRIVER_INIT_MEMBER(ssv_state,stmblade) { init_ssv(0); init_st010(); } |
| 2546 | | DRIVER_INIT_MEMBER(ssv_state,survarts) { init_ssv(0); } |
| 2547 | | DRIVER_INIT_MEMBER(ssv_state,dynagear) { init_ssv(0); } |
| 2548 | | DRIVER_INIT_MEMBER(ssv_state,sxyreact) { init_ssv(0); init_hypreac2_common(); } |
| 2549 | | DRIVER_INIT_MEMBER(ssv_state,cairblad) { init_ssv(0); init_hypreac2_common(); } |
| 2550 | | DRIVER_INIT_MEMBER(ssv_state,sxyreac2) { init_ssv(0); init_hypreac2_common(); } |
| 2551 | | DRIVER_INIT_MEMBER(ssv_state,twineag2) { init_ssv(1); init_st010(); } |
| 2552 | | DRIVER_INIT_MEMBER(ssv_state,ultrax) { init_ssv(1); } |
| 2553 | | DRIVER_INIT_MEMBER(ssv_state,vasara) { init_ssv(0); } |
| 2554 | | DRIVER_INIT_MEMBER(ssv_state,jsk) { init_ssv(0); } |
| 2547 | DRIVER_INIT_MEMBER(ssv_state,srmp7) { init(0); } |
| 2548 | DRIVER_INIT_MEMBER(ssv_state,stmblade) { init(0); init_st010(); } |
| 2549 | DRIVER_INIT_MEMBER(ssv_state,survarts) { init(0); } |
| 2550 | DRIVER_INIT_MEMBER(ssv_state,dynagear) { init(0); } |
| 2551 | DRIVER_INIT_MEMBER(ssv_state,sxyreact) { init(0); init_hypreac2_common(); save_item(NAME(m_sxyreact_serial)); save_item(NAME(m_sxyreact_dial)); } |
| 2552 | DRIVER_INIT_MEMBER(ssv_state,cairblad) { init(0); init_hypreac2_common(); } |
| 2553 | DRIVER_INIT_MEMBER(ssv_state,sxyreac2) { init(0); init_hypreac2_common(); save_item(NAME(m_sxyreact_serial)); save_item(NAME(m_sxyreact_dial)); } |
| 2554 | DRIVER_INIT_MEMBER(ssv_state,twineag2) { init(1); init_st010(); } |
| 2555 | DRIVER_INIT_MEMBER(ssv_state,ultrax) { init(1); } |
| 2556 | DRIVER_INIT_MEMBER(ssv_state,vasara) { init(0); } |
| 2557 | DRIVER_INIT_MEMBER(ssv_state,jsk) { init(0); save_item(NAME(m_latches)); } |
| 2555 | 2558 | |
| 2556 | 2559 | #define SSV_MASTER_CLOCK XTAL_48MHz/3 |
| 2557 | 2560 | |
| r244652 | r244653 | |
| 2567 | 2570 | |
| 2568 | 2571 | /* basic machine hardware */ |
| 2569 | 2572 | MCFG_CPU_ADD("maincpu", V60, SSV_MASTER_CLOCK) /* Based on STA-0001 & STA-0001B System boards */ |
| 2570 | | MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(ssv_state,ssv_irq_callback) |
| 2573 | MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(ssv_state,irq_callback) |
| 2571 | 2574 | |
| 2572 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ssv_state, ssv_interrupt, "screen", 0, 1) |
| 2575 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ssv_state, interrupt, "screen", 0, 1) |
| 2573 | 2576 | |
| 2574 | 2577 | /* video hardware */ |
| 2575 | 2578 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2576 | 2579 | MCFG_SCREEN_RAW_PARAMS(SSV_PIXEL_CLOCK,SSV_HTOTAL,SSV_HBEND,SSV_HBSTART,SSV_VTOTAL,SSV_VBEND,SSV_VBSTART) |
| 2577 | | MCFG_SCREEN_UPDATE_DRIVER(ssv_state, screen_update_ssv) |
| 2580 | MCFG_SCREEN_UPDATE_DRIVER(ssv_state, screen_update) |
| 2578 | 2581 | MCFG_SCREEN_PALETTE("palette") |
| 2579 | 2582 | |
| 2580 | 2583 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", ssv) |
| r244652 | r244653 | |
| 4706 | 4709 | |
| 4707 | 4710 | // year rom clone machine inputs init monitor manufacturer title flags |
| 4708 | 4711 | |
| 4709 | | GAME( 1993, dynagear, 0, dynagear, dynagear, ssv_state, dynagear, ROT0, "Sammy", "Dyna Gear", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) |
| 4712 | GAME( 1993, dynagear, 0, dynagear, dynagear, ssv_state, dynagear, ROT0, "Sammy", "Dyna Gear", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 4710 | 4713 | |
| 4711 | | GAME( 1993, keithlcy, 0, keithlcy, keithlcy, ssv_state, keithlcy, ROT0, "Visco", "Dramatic Adventure Quiz Keith & Lucy (Japan)", GAME_NO_COCKTAIL ) |
| 4714 | GAME( 1993, keithlcy, 0, keithlcy, keithlcy, ssv_state, keithlcy, ROT0, "Visco", "Dramatic Adventure Quiz Keith & Lucy (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4712 | 4715 | |
| 4713 | | GAME( 1993, srmp4, 0, srmp4, srmp4, ssv_state, srmp4, ROT0, "Seta", "Super Real Mahjong PIV (Japan)", GAME_NO_COCKTAIL ) |
| 4714 | | GAME( 1993, srmp4o, srmp4, srmp4, srmp4, ssv_state, srmp4, ROT0, "Seta", "Super Real Mahjong PIV (Japan, older set)", GAME_NO_COCKTAIL ) // by the numbering of the program roms this should be older |
| 4716 | GAME( 1993, srmp4, 0, srmp4, srmp4, ssv_state, srmp4, ROT0, "Seta", "Super Real Mahjong PIV (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4717 | GAME( 1993, srmp4o, srmp4, srmp4, srmp4, ssv_state, srmp4, ROT0, "Seta", "Super Real Mahjong PIV (Japan, older set)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // by the numbering of the program roms this should be older |
| 4715 | 4718 | |
| 4716 | | GAME( 1993, survarts, 0, survarts, survarts, ssv_state, survarts, ROT0, "Sammy", "Survival Arts (World)", GAME_NO_COCKTAIL ) |
| 4717 | | GAME( 1993, survartsu, survarts, survarts, survarts, ssv_state, survarts, ROT0, "American Sammy", "Survival Arts (USA)", GAME_NO_COCKTAIL ) |
| 4718 | | GAME( 1993, survartsj, survarts, survarts, survarts, ssv_state, survarts, ROT0, "Sammy", "Survival Arts (Japan)", GAME_NO_COCKTAIL ) |
| 4719 | GAME( 1993, survarts, 0, survarts, survarts, ssv_state, survarts, ROT0, "Sammy", "Survival Arts (World)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4720 | GAME( 1993, survartsu, survarts, survarts, survarts, ssv_state, survarts, ROT0, "American Sammy", "Survival Arts (USA)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4721 | GAME( 1993, survartsj, survarts, survarts, survarts, ssv_state, survarts, ROT0, "Sammy", "Survival Arts (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4719 | 4722 | |
| 4720 | | GAME( 1994, drifto94, 0, drifto94, drifto94, ssv_state, drifto94, ROT0, "Visco", "Drift Out '94 - The Hard Order (Japan)", GAME_NO_COCKTAIL ) |
| 4723 | GAME( 1994, drifto94, 0, drifto94, drifto94, ssv_state, drifto94, ROT0, "Visco", "Drift Out '94 - The Hard Order (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4721 | 4724 | |
| 4722 | | GAME( 1994, eaglshot, 0, eaglshot, eaglshot, ssv_state, eaglshot, ROT0, "Sammy", "Eagle Shot Golf", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) |
| 4725 | GAME( 1994, eaglshot, 0, eaglshot, eaglshot, ssv_state, eaglshot, ROT0, "Sammy", "Eagle Shot Golf", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 4723 | 4726 | |
| 4724 | | GAME( 1995, hypreact, 0, hypreact, hypreact, ssv_state, hypreact, ROT0, "Sammy", "Mahjong Hyper Reaction (Japan)", GAME_NO_COCKTAIL ) |
| 4727 | GAME( 1995, hypreact, 0, hypreact, hypreact, ssv_state, hypreact, ROT0, "Sammy", "Mahjong Hyper Reaction (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4725 | 4728 | |
| 4726 | | GAME( 1994, twineag2, 0, twineag2, twineag2, ssv_state, twineag2, ROT270, "Seta", "Twin Eagle II - The Rescue Mission", GAME_NO_COCKTAIL ) |
| 4729 | GAME( 1994, twineag2, 0, twineag2, twineag2, ssv_state, twineag2, ROT270, "Seta", "Twin Eagle II - The Rescue Mission", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4727 | 4730 | |
| 4728 | | GAME( 1995, gdfs, 0, gdfs, gdfs, ssv_state, gdfs, ROT0, "Banpresto", "Mobil Suit Gundam Final Shooting (Japan)", GAME_NO_COCKTAIL ) |
| 4731 | GAME( 1995, gdfs, 0, gdfs, gdfs, ssv_state, gdfs, ROT0, "Banpresto", "Mobil Suit Gundam Final Shooting (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4729 | 4732 | |
| 4730 | | GAME( 1995, ultrax, 0, ultrax, ultrax, ssv_state, ultrax, ROT270, "Banpresto / Tsuburaya Productions", "Ultra X Weapons / Ultra Keibitai", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) // 95-01-30 13:27:15 on startup |
| 4731 | | GAME( 1995, ultraxg, ultrax, ultrax, ultrax, ssv_state, ultrax, ROT270, "Banpresto / Tsuburaya Productions", "Ultra X Weapons / Ultra Keibitai (GAMEST review build)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) // 95-02-16 15:30:24 on startup (newer, but could have pause functionality due to being a review build so left as clone) |
| 4733 | GAME( 1995, ultrax, 0, ultrax, ultrax, ssv_state, ultrax, ROT270, "Banpresto / Tsuburaya Productions", "Ultra X Weapons / Ultra Keibitai", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // 95-01-30 13:27:15 on startup |
| 4734 | GAME( 1995, ultraxg, ultrax, ultrax, ultrax, ssv_state, ultrax, ROT270, "Banpresto / Tsuburaya Productions", "Ultra X Weapons / Ultra Keibitai (GAMEST review build)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // 95-02-16 15:30:24 on startup (newer, but could have pause functionality due to being a review build so left as clone) |
| 4732 | 4735 | |
| 4733 | | GAME( 1996, janjans1, 0, janjans1, janjans1, ssv_state, janjans1, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) |
| 4736 | GAME( 1996, janjans1, 0, janjans1, janjans1, ssv_state, janjans1, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 4734 | 4737 | |
| 4735 | | GAME( 1996?, meosism, 0, meosism, meosism, ssv_state, meosism, ROT0, "Sammy", "Meosis Magic (Japan)", GAME_NO_COCKTAIL ) |
| 4738 | GAME( 1996?, meosism, 0, meosism, meosism, ssv_state, meosism, ROT0, "Sammy", "Meosis Magic (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4736 | 4739 | |
| 4737 | | GAME( 1996, stmblade, 0, stmblade, stmblade, ssv_state, stmblade, ROT270, "Visco", "Storm Blade (US)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) |
| 4738 | | GAME( 1996, stmbladej, stmblade, stmblade, stmblade, ssv_state, stmblade, ROT270, "Visco", "Storm Blade (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) |
| 4740 | GAME( 1996, stmblade, 0, stmblade, stmblade, ssv_state, stmblade, ROT270, "Visco", "Storm Blade (US)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 4741 | GAME( 1996, stmbladej, stmblade, stmblade, stmblade, ssv_state, stmblade, ROT270, "Visco", "Storm Blade (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 4739 | 4742 | |
| 4740 | | GAME( 1997, hypreac2, 0, hypreac2, hypreac2, ssv_state, hypreac2, ROT0, "Sammy", "Mahjong Hyper Reaction 2 (Japan)", GAME_NO_COCKTAIL ) |
| 4743 | GAME( 1997, hypreac2, 0, hypreac2, hypreac2, ssv_state, hypreac2, ROT0, "Sammy", "Mahjong Hyper Reaction 2 (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4741 | 4744 | |
| 4742 | | GAME( 1997, jsk, 0, jsk, jsk, ssv_state, jsk, ROT0, "Visco", "Joryuu Syougi Kyoushitsu (Japan)", GAME_NO_COCKTAIL ) |
| 4745 | GAME( 1997, jsk, 0, jsk, jsk, ssv_state, jsk, ROT0, "Visco", "Joryuu Syougi Kyoushitsu (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4743 | 4746 | |
| 4744 | | GAME( 1997, koikois2, 0, janjans1, koikois2, ssv_state, janjans1, ROT0, "Visco", "Koi Koi Shimasho 2 - Super Real Hanafuda (Japan)", GAME_NO_COCKTAIL ) |
| 4747 | GAME( 1997, koikois2, 0, janjans1, koikois2, ssv_state, janjans1, ROT0, "Visco", "Koi Koi Shimasho 2 - Super Real Hanafuda (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4745 | 4748 | |
| 4746 | | GAME( 1997, mslider, 0, mslider, mslider, ssv_state, mslider, ROT0, "Visco / Datt Japan", "Monster Slider (Japan)", GAME_NO_COCKTAIL ) |
| 4749 | GAME( 1997, mslider, 0, mslider, mslider, ssv_state, mslider, ROT0, "Visco / Datt Japan", "Monster Slider (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4747 | 4750 | |
| 4748 | | GAME( 1997, srmp7, 0, srmp7, srmp7, ssv_state, srmp7, ROT0, "Seta", "Super Real Mahjong P7 (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND ) |
| 4751 | GAME( 1997, srmp7, 0, srmp7, srmp7, ssv_state, srmp7, ROT0, "Seta", "Super Real Mahjong P7 (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
| 4749 | 4752 | |
| 4750 | | GAME( 1998, ryorioh, 0, ryorioh, ryorioh, ssv_state, ryorioh, ROT0, "Visco", "Gourmet Battle Quiz Ryohrioh CooKing (Japan)", GAME_NO_COCKTAIL ) |
| 4753 | GAME( 1998, ryorioh, 0, ryorioh, ryorioh, ssv_state, ryorioh, ROT0, "Visco", "Gourmet Battle Quiz Ryohrioh CooKing (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4751 | 4754 | |
| 4752 | | GAME( 1998, sxyreact, 0, sxyreact, sxyreact, ssv_state, sxyreact, ROT0, "Sammy", "Pachinko Sexy Reaction (Japan)", GAME_NO_COCKTAIL ) |
| 4755 | GAME( 1998, sxyreact, 0, sxyreact, sxyreact, ssv_state, sxyreact, ROT0, "Sammy", "Pachinko Sexy Reaction (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4753 | 4756 | |
| 4754 | | GAME( 1999, sxyreac2, 0, sxyreac2, sxyreact, ssv_state, sxyreac2, ROT0, "Sammy", "Pachinko Sexy Reaction 2 (Japan)", GAME_NO_COCKTAIL ) |
| 4757 | GAME( 1999, sxyreac2, 0, sxyreac2, sxyreact, ssv_state, sxyreac2, ROT0, "Sammy", "Pachinko Sexy Reaction 2 (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4755 | 4758 | |
| 4756 | | GAME( 1999, cairblad, 0, cairblad, cairblad, ssv_state, cairblad, ROT270, "Sammy", "Change Air Blade (Japan)", GAME_NO_COCKTAIL ) |
| 4759 | GAME( 1999, cairblad, 0, cairblad, cairblad, ssv_state, cairblad, ROT270, "Sammy", "Change Air Blade (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4757 | 4760 | |
| 4758 | | GAME( 2000, janjans2, 0, janjans1, janjans2, ssv_state, janjans1, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho 2 (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS ) |
| 4761 | GAME( 2000, janjans2, 0, janjans1, janjans2, ssv_state, janjans1, ROT0, "Visco", "Lovely Pop Mahjong JangJang Shimasho 2 (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 4759 | 4762 | |
| 4760 | | GAME( 2000, vasara, 0, vasara, vasara, ssv_state, vasara, ROT270, "Visco", "Vasara", GAME_NO_COCKTAIL ) |
| 4763 | GAME( 2000, vasara, 0, vasara, vasara, ssv_state, vasara, ROT270, "Visco", "Vasara", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4761 | 4764 | |
| 4762 | | GAME( 2001, vasara2, 0, vasara, vasara2, ssv_state, vasara, ROT270, "Visco", "Vasara 2 (set 1)", GAME_NO_COCKTAIL ) |
| 4763 | | GAME( 2001, vasara2a, vasara2, vasara, vasara2, ssv_state, vasara, ROT270, "Visco", "Vasara 2 (set 2)", GAME_NO_COCKTAIL ) |
| 4765 | GAME( 2001, vasara2, 0, vasara, vasara2, ssv_state, vasara, ROT270, "Visco", "Vasara 2 (set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 4766 | GAME( 2001, vasara2a, vasara2, vasara, vasara2, ssv_state, vasara, ROT270, "Visco", "Vasara 2 (set 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/tugboat.c
| r244652 | r244653 | |
| 11 | 11 | but the current implementation is a big kludge, and it still looks wrong. |
| 12 | 12 | - colors might not be entirely accurate |
| 13 | 13 | Suspect berenstn is using the wrong color PROM. |
| 14 | - convert to use the H46505 device. |
| 14 | 15 | |
| 15 | 16 | the problem which caused the controls not to work |
| 16 | 17 | --- |
| r244652 | r244653 | |
| 39 | 40 | tugboat_state(const machine_config &mconfig, device_type type, const char *tag) |
| 40 | 41 | : driver_device(mconfig, type, tag), |
| 41 | 42 | m_maincpu(*this, "maincpu"), |
| 42 | | m_ram(*this, "ram"), |
| 43 | 43 | m_gfxdecode(*this, "gfxdecode"), |
| 44 | 44 | m_screen(*this, "screen"), |
| 45 | | m_palette(*this, "palette") { } |
| 45 | m_palette(*this, "palette"), |
| 46 | m_ram(*this, "ram") { } |
| 46 | 47 | |
| 47 | 48 | required_device<cpu_device> m_maincpu; |
| 48 | | required_shared_ptr<UINT8> m_ram; |
| 49 | 49 | required_device<gfxdecode_device> m_gfxdecode; |
| 50 | 50 | required_device<screen_device> m_screen; |
| 51 | 51 | required_device<palette_device> m_palette; |
| 52 | |
| 53 | required_shared_ptr<UINT8> m_ram; |
| 52 | 54 | |
| 53 | 55 | UINT8 m_hd46505_0_reg[18]; |
| 54 | 56 | UINT8 m_hd46505_1_reg[18]; |
| 55 | 57 | int m_reg0; |
| 56 | 58 | int m_reg1; |
| 57 | 59 | int m_ctrl; |
| 58 | | DECLARE_WRITE8_MEMBER(tugboat_hd46505_0_w); |
| 59 | | DECLARE_WRITE8_MEMBER(tugboat_hd46505_1_w); |
| 60 | | DECLARE_WRITE8_MEMBER(tugboat_score_w); |
| 61 | | DECLARE_READ8_MEMBER(tugboat_input_r); |
| 62 | | DECLARE_WRITE8_MEMBER(tugboat_ctrl_w); |
| 60 | emu_timer *m_interrupt_timer; |
| 61 | |
| 62 | DECLARE_WRITE8_MEMBER(hd46505_0_w); |
| 63 | DECLARE_WRITE8_MEMBER(hd46505_1_w); |
| 64 | DECLARE_WRITE8_MEMBER(score_w); |
| 65 | DECLARE_READ8_MEMBER(input_r); |
| 66 | DECLARE_WRITE8_MEMBER(ctrl_w); |
| 67 | |
| 63 | 68 | virtual void machine_start(); |
| 64 | 69 | virtual void video_start(); |
| 65 | 70 | virtual void machine_reset(); |
| 66 | 71 | DECLARE_PALETTE_INIT(tugboat); |
| 67 | | UINT32 screen_update_tugboat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 72 | |
| 73 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 68 | 74 | void draw_tilemap(bitmap_ind16 &bitmap,const rectangle &cliprect, |
| 69 | 75 | int addr,int gfx0,int gfx1,int transparency); |
| 70 | 76 | |
| r244652 | r244653 | |
| 75 | 81 | |
| 76 | 82 | void tugboat_state::machine_start() |
| 77 | 83 | { |
| 78 | | /*save_item(NAME(m_hd46505_0_reg)); |
| 84 | m_interrupt_timer = timer_alloc(TIMER_INTERRUPT); |
| 85 | |
| 79 | 86 | save_item(NAME(m_hd46505_0_reg)); |
| 87 | save_item(NAME(m_hd46505_1_reg)); |
| 80 | 88 | save_item(NAME(m_reg0)); |
| 81 | 89 | save_item(NAME(m_reg1)); |
| 82 | | save_item(NAME(m_ctrl));*/ |
| 90 | save_item(NAME(m_ctrl)); |
| 83 | 91 | } |
| 84 | 92 | |
| 85 | 93 | void tugboat_state::video_start() |
| r244652 | r244653 | |
| 113 | 121 | |
| 114 | 122 | /* see mc6845.c. That file is only a placeholder, I process the writes here |
| 115 | 123 | because I need the start_addr register to handle scrolling */ |
| 116 | | WRITE8_MEMBER(tugboat_state::tugboat_hd46505_0_w) |
| 124 | WRITE8_MEMBER(tugboat_state::hd46505_0_w) |
| 117 | 125 | { |
| 118 | 126 | if (offset == 0) m_reg0 = data & 0x0f; |
| 119 | 127 | else if (m_reg0 < 18) m_hd46505_0_reg[m_reg0] = data; |
| 120 | 128 | } |
| 121 | | WRITE8_MEMBER(tugboat_state::tugboat_hd46505_1_w) |
| 129 | WRITE8_MEMBER(tugboat_state::hd46505_1_w) |
| 122 | 130 | { |
| 123 | 131 | if (offset == 0) m_reg1 = data & 0x0f; |
| 124 | 132 | else if (m_reg1 < 18) m_hd46505_1_reg[m_reg1] = data; |
| 125 | 133 | } |
| 126 | 134 | |
| 127 | 135 | |
| 128 | | WRITE8_MEMBER(tugboat_state::tugboat_score_w) |
| 136 | WRITE8_MEMBER(tugboat_state::score_w) |
| 129 | 137 | { |
| 130 | 138 | if (offset>=0x8) m_ram[0x291d + 32*offset + 32*(1-8)] = data ^ 0x0f; |
| 131 | 139 | if (offset<0x8 ) m_ram[0x291d + 32*offset + 32*9] = data ^ 0x0f; |
| r244652 | r244653 | |
| 168 | 176 | } |
| 169 | 177 | } |
| 170 | 178 | |
| 171 | | UINT32 tugboat_state::screen_update_tugboat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 179 | UINT32 tugboat_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 172 | 180 | { |
| 173 | 181 | int startaddr0 = m_hd46505_0_reg[0x0c]*256 + m_hd46505_0_reg[0x0d]; |
| 174 | 182 | int startaddr1 = m_hd46505_1_reg[0x0c]*256 + m_hd46505_1_reg[0x0d]; |
| r244652 | r244653 | |
| 181 | 189 | |
| 182 | 190 | |
| 183 | 191 | |
| 184 | | READ8_MEMBER(tugboat_state::tugboat_input_r) |
| 192 | READ8_MEMBER(tugboat_state::input_r) |
| 185 | 193 | { |
| 186 | 194 | if (~m_ctrl & 0x80) |
| 187 | 195 | return ioport("IN0")->read(); |
| r244652 | r244653 | |
| 195 | 203 | return ioport("IN4")->read(); |
| 196 | 204 | } |
| 197 | 205 | |
| 198 | | WRITE8_MEMBER(tugboat_state::tugboat_ctrl_w) |
| 206 | WRITE8_MEMBER(tugboat_state::ctrl_w) |
| 199 | 207 | { |
| 200 | 208 | m_ctrl = data; |
| 201 | 209 | } |
| r244652 | r244653 | |
| 206 | 214 | { |
| 207 | 215 | case TIMER_INTERRUPT: |
| 208 | 216 | m_maincpu->set_input_line(0, HOLD_LINE); |
| 209 | | timer_set(m_screen->frame_period(), TIMER_INTERRUPT); |
| 217 | m_interrupt_timer->adjust(m_screen->frame_period()); |
| 210 | 218 | break; |
| 211 | 219 | default: |
| 212 | 220 | assert_always(FALSE, "Unknown id in tugboat_state::device_timer"); |
| r244652 | r244653 | |
| 215 | 223 | |
| 216 | 224 | void tugboat_state::machine_reset() |
| 217 | 225 | { |
| 218 | | timer_set(m_screen->time_until_pos(0), TIMER_INTERRUPT); |
| 226 | m_interrupt_timer->adjust(m_screen->time_until_pos(0)); |
| 219 | 227 | } |
| 220 | 228 | |
| 221 | 229 | |
| r244652 | r244653 | |
| 223 | 231 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 224 | 232 | AM_RANGE(0x0000, 0x01ff) AM_RAM AM_SHARE("ram") |
| 225 | 233 | AM_RANGE(0x1060, 0x1061) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) |
| 226 | | AM_RANGE(0x10a0, 0x10a1) AM_WRITE(tugboat_hd46505_0_w) /* scrolling is performed changing the start_addr register (0C/0D) */ |
| 227 | | AM_RANGE(0x10c0, 0x10c1) AM_WRITE(tugboat_hd46505_1_w) |
| 234 | AM_RANGE(0x10a0, 0x10a1) AM_WRITE(hd46505_0_w) /* scrolling is performed changing the start_addr register (0C/0D) */ |
| 235 | AM_RANGE(0x10c0, 0x10c1) AM_WRITE(hd46505_1_w) |
| 228 | 236 | AM_RANGE(0x11e4, 0x11e7) AM_DEVREADWRITE("pia0", pia6821_device, read, write) |
| 229 | 237 | AM_RANGE(0x11e8, 0x11eb) AM_DEVREADWRITE("pia1", pia6821_device, read, write) |
| 230 | 238 | //AM_RANGE(0x1700, 0x1fff) AM_RAM |
| 231 | | AM_RANGE(0x18e0, 0x18ef) AM_WRITE(tugboat_score_w) |
| 239 | AM_RANGE(0x18e0, 0x18ef) AM_WRITE(score_w) |
| 232 | 240 | AM_RANGE(0x2000, 0x2fff) AM_RAM /* tilemap RAM */ |
| 233 | 241 | AM_RANGE(0x4000, 0x7fff) AM_ROM |
| 234 | 242 | ADDRESS_MAP_END |
| r244652 | r244653 | |
| 352 | 360 | MCFG_CPU_VBLANK_INT_DRIVER("screen", tugboat_state, nmi_line_pulse) |
| 353 | 361 | |
| 354 | 362 | MCFG_DEVICE_ADD("pia0", PIA6821, 0) |
| 355 | | MCFG_PIA_READPA_HANDLER(READ8(tugboat_state,tugboat_input_r)) |
| 363 | MCFG_PIA_READPA_HANDLER(READ8(tugboat_state,input_r)) |
| 356 | 364 | |
| 357 | 365 | MCFG_DEVICE_ADD("pia1", PIA6821, 0) |
| 358 | 366 | MCFG_PIA_READPA_HANDLER(IOPORT("DSW")) |
| 359 | | MCFG_PIA_WRITEPB_HANDLER(WRITE8(tugboat_state, tugboat_ctrl_w)) |
| 367 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(tugboat_state, ctrl_w)) |
| 360 | 368 | |
| 361 | 369 | MCFG_SCREEN_ADD("screen", RASTER) |
| 362 | 370 | MCFG_SCREEN_REFRESH_RATE(60) |
| 363 | 371 | MCFG_SCREEN_SIZE(32*8,32*8) |
| 364 | 372 | MCFG_SCREEN_VISIBLE_AREA(1*8,31*8-1,2*8,30*8-1) |
| 365 | | MCFG_SCREEN_UPDATE_DRIVER(tugboat_state, screen_update_tugboat) |
| 373 | MCFG_SCREEN_UPDATE_DRIVER(tugboat_state, screen_update) |
| 366 | 374 | MCFG_SCREEN_PALETTE("palette") |
| 367 | 375 | |
| 368 | 376 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", tugboat) |
| r244652 | r244653 | |
| 460 | 468 | ROM_END |
| 461 | 469 | |
| 462 | 470 | |
| 463 | | GAME( 1982, tugboat, 0, tugboat, tugboat, driver_device, 0, ROT90, "Enter-Tech, Ltd.", "Tugboat", GAME_IMPERFECT_GRAPHICS ) |
| 464 | | GAME( 1983, noahsark, 0, tugboat, noahsark, driver_device, 0, ROT90, "Enter-Tech, Ltd.", "Noah's Ark", GAME_IMPERFECT_GRAPHICS ) |
| 465 | | GAME( 1984, berenstn, 0, tugboat, noahsark, driver_device, 0, ROT90, "Enter-Tech, Ltd.", "The Berenstain Bears in Big Paw's Cave", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS ) |
| 471 | GAME( 1982, tugboat, 0, tugboat, tugboat, driver_device, 0, ROT90, "Enter-Tech, Ltd.", "Tugboat", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 472 | GAME( 1983, noahsark, 0, tugboat, noahsark, driver_device, 0, ROT90, "Enter-Tech, Ltd.", "Noah's Ark", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 473 | GAME( 1984, berenstn, 0, tugboat, noahsark, driver_device, 0, ROT90, "Enter-Tech, Ltd.", "The Berenstain Bears in Big Paw's Cave", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/video/argus.c
| r244652 | r244653 | |
| 89 | 89 | ----------------------------------------------------------------------------- |
| 90 | 90 | +0 |
| 91 | 91 | ---- ---x = BG enable bit |
| 92 | | ---- --x- = gray scale effect or tile bank select. |
| 92 | ---- --x- = grey scale effect or tile bank select. |
| 93 | 93 | |
| 94 | 94 | |
| 95 | 95 | Flip screen controller |
| r244652 | r244653 | |
| 109 | 109 | (*) Things which are not emulated. |
| 110 | 110 | - Color $000 - 00f, $01e, $02e ... are half transparent color. |
| 111 | 111 | - Sprite priority bit may be present in Butasan. But I don't know |
| 112 | | what is happened when it is set. |
| 112 | what happens when it is set. |
| 113 | 113 | |
| 114 | 114 | ***************************************************************************/ |
| 115 | 115 | |
| r244652 | r244653 | |
| 272 | 272 | m_dummy_bg0ram = auto_alloc_array(machine(), UINT8, 0x800); |
| 273 | 273 | |
| 274 | 274 | jal_blend_init(machine(), 1); |
| 275 | |
| 276 | save_item(NAME(m_bg_status)); |
| 277 | save_item(NAME(m_flipscreen)); |
| 278 | save_item(NAME(m_palette_intensity)); |
| 279 | save_pointer(NAME(m_dummy_bg0ram), 0x800); |
| 280 | save_item(NAME(m_lowbitscroll)); |
| 281 | save_item(NAME(m_prvscrollx)); |
| 275 | 282 | } |
| 276 | 283 | |
| 277 | 284 | VIDEO_RESET_MEMBER(argus_state,argus) |
| r244652 | r244653 | |
| 295 | 302 | m_screen->register_screen_bitmap(m_mosaicbitmap); |
| 296 | 303 | |
| 297 | 304 | jal_blend_init(machine(), 1); |
| 305 | |
| 306 | save_item(NAME(m_bg_status)); |
| 307 | save_item(NAME(m_flipscreen)); |
| 308 | save_item(NAME(m_palette_intensity)); |
| 309 | save_item(NAME(m_valtric_mosaic)); |
| 310 | save_item(NAME(m_valtric_unknown)); |
| 311 | save_item(NAME(m_mosaic)); |
| 298 | 312 | } |
| 299 | 313 | |
| 300 | 314 | VIDEO_RESET_MEMBER(argus_state,valtric) |
| r244652 | r244653 | |
| 322 | 336 | m_butasan_txbackram = &m_butasan_pagedram[1][0x800]; |
| 323 | 337 | |
| 324 | 338 | jal_blend_init(machine(), 1); |
| 339 | |
| 340 | save_item(NAME(m_bg_status)); |
| 341 | save_item(NAME(m_flipscreen)); |
| 342 | save_item(NAME(m_palette_intensity)); |
| 343 | save_pointer(NAME(m_butasan_pagedram[0]), 0x1000); |
| 344 | save_pointer(NAME(m_butasan_pagedram[1]), 0x1000); |
| 345 | save_item(NAME(m_butasan_page_latch)); |
| 346 | save_item(NAME(m_butasan_bg1_status)); |
| 347 | save_item(NAME(m_butasan_unknown)); |
| 325 | 348 | } |
| 326 | 349 | |
| 327 | 350 | VIDEO_RESET_MEMBER(argus_state,butasan) |
| r244652 | r244653 | |
| 363 | 386 | } |
| 364 | 387 | } |
| 365 | 388 | |
| 366 | | void argus_state::argus_change_palette(int color, int lo_offs, int hi_offs) |
| 389 | void argus_state::change_palette(int color, int lo_offs, int hi_offs) |
| 367 | 390 | { |
| 368 | 391 | UINT8 lo = m_paletteram[lo_offs]; |
| 369 | 392 | UINT8 hi = m_paletteram[hi_offs]; |
| r244652 | r244653 | |
| 371 | 394 | m_palette->set_pen_color(color, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4)); |
| 372 | 395 | } |
| 373 | 396 | |
| 374 | | void argus_state::argus_change_bg_palette(int color, int lo_offs, int hi_offs) |
| 397 | void argus_state::change_bg_palette(int color, int lo_offs, int hi_offs) |
| 375 | 398 | { |
| 376 | 399 | UINT8 r,g,b,lo,hi,ir,ig,ib,ix; |
| 377 | 400 | rgb_t rgb,irgb; |
| r244652 | r244653 | |
| 418 | 441 | m_valtric_mosaic = data; |
| 419 | 442 | } |
| 420 | 443 | |
| 421 | | READ8_MEMBER(argus_state::argus_txram_r) |
| 444 | WRITE8_MEMBER(argus_state::txram_w) |
| 422 | 445 | { |
| 423 | | return m_txram[offset]; |
| 424 | | } |
| 425 | | |
| 426 | | WRITE8_MEMBER(argus_state::argus_txram_w) |
| 427 | | { |
| 428 | 446 | m_txram[offset] = data; |
| 429 | 447 | m_tx_tilemap->mark_tile_dirty(offset >> 1); |
| 430 | 448 | } |
| 431 | 449 | |
| 432 | | READ8_MEMBER(argus_state::argus_bg1ram_r) |
| 450 | WRITE8_MEMBER(argus_state::bg1ram_w) |
| 433 | 451 | { |
| 434 | | return m_bg1ram[offset]; |
| 435 | | } |
| 436 | | |
| 437 | | WRITE8_MEMBER(argus_state::argus_bg1ram_w) |
| 438 | | { |
| 439 | 452 | m_bg1ram[offset] = data; |
| 440 | 453 | m_bg1_tilemap->mark_tile_dirty(offset >> 1); |
| 441 | 454 | } |
| r244652 | r244653 | |
| 453 | 466 | |
| 454 | 467 | for (offs = 0x400; offs < 0x500; offs++) |
| 455 | 468 | { |
| 456 | | argus_change_bg_palette((offs - 0x400) + 0x080, offs, offs + 0x400); |
| 469 | change_bg_palette((offs - 0x400) + 0x080, offs, offs + 0x400); |
| 457 | 470 | } |
| 458 | 471 | } |
| 459 | 472 | } |
| r244652 | r244653 | |
| 472 | 485 | |
| 473 | 486 | for (offs = 0x400; offs < 0x600; offs += 2) |
| 474 | 487 | { |
| 475 | | argus_change_bg_palette(((offs - 0x400) >> 1) + 0x100, offs & ~1, offs | 1); |
| 488 | change_bg_palette(((offs - 0x400) >> 1) + 0x100, offs & ~1, offs | 1); |
| 476 | 489 | } |
| 477 | 490 | } |
| 478 | 491 | } |
| r244652 | r244653 | |
| 494 | 507 | } |
| 495 | 508 | } |
| 496 | 509 | |
| 497 | | WRITE8_MEMBER(argus_state::argus_flipscreen_w) |
| 510 | WRITE8_MEMBER(argus_state::flipscreen_w) |
| 498 | 511 | { |
| 499 | 512 | m_flipscreen = data & 0x80; |
| 500 | 513 | } |
| 501 | 514 | |
| 502 | | READ8_MEMBER(argus_state::argus_paletteram_r) |
| 503 | | { |
| 504 | | return m_paletteram[offset]; |
| 505 | | } |
| 506 | | |
| 507 | 515 | WRITE8_MEMBER(argus_state::argus_paletteram_w) |
| 508 | 516 | { |
| 509 | 517 | int offs; |
| r244652 | r244653 | |
| 514 | 522 | { |
| 515 | 523 | offset &= 0x07f; |
| 516 | 524 | |
| 517 | | argus_change_palette(offset, offset, offset + 0x080); |
| 525 | change_palette(offset, offset, offset + 0x080); |
| 518 | 526 | |
| 519 | 527 | if (offset == 0x07f || offset == 0x0ff) |
| 520 | 528 | { |
| 521 | 529 | m_palette_intensity = m_paletteram[0x0ff] | (m_paletteram[0x07f] << 8); |
| 522 | 530 | |
| 523 | 531 | for (offs = 0x400; offs < 0x500; offs++) |
| 524 | | argus_change_bg_palette((offs & 0xff) + 0x080, offs, offs + 0x400); |
| 532 | change_bg_palette((offs & 0xff) + 0x080, offs, offs + 0x400); |
| 525 | 533 | } |
| 526 | 534 | } |
| 527 | 535 | else if ((offset >= 0x400 && offset <= 0x4ff) || |
| r244652 | r244653 | |
| 530 | 538 | offs = offset & 0xff; |
| 531 | 539 | offset = offs | 0x400; |
| 532 | 540 | |
| 533 | | argus_change_bg_palette(offs + 0x080, offset, offset + 0x400); |
| 541 | change_bg_palette(offs + 0x080, offset, offset + 0x400); |
| 534 | 542 | } |
| 535 | 543 | else if ((offset >= 0x500 && offset <= 0x5ff) || |
| 536 | 544 | (offset >= 0x900 && offset <= 0x9ff)) /* BG1 color */ |
| r244652 | r244653 | |
| 538 | 546 | offs = offset & 0xff; |
| 539 | 547 | offset = offs | 0x500; |
| 540 | 548 | |
| 541 | | argus_change_palette(offs + 0x180, offset, offset + 0x400); |
| 549 | change_palette(offs + 0x180, offset, offset + 0x400); |
| 542 | 550 | } |
| 543 | 551 | else if ((offset >= 0x700 && offset <= 0x7ff) || |
| 544 | 552 | (offset >= 0xb00 && offset <= 0xbff)) /* text color */ |
| r244652 | r244653 | |
| 546 | 554 | offs = offset & 0xff; |
| 547 | 555 | offset = offs | 0x700; |
| 548 | 556 | |
| 549 | | argus_change_palette(offs + 0x280, offset, offset + 0x400); |
| 557 | change_palette(offs + 0x280, offset, offset + 0x400); |
| 550 | 558 | } |
| 551 | 559 | } |
| 552 | 560 | |
| r244652 | r244653 | |
| 556 | 564 | |
| 557 | 565 | if (offset <= 0x1ff) /* Sprite color */ |
| 558 | 566 | { |
| 559 | | argus_change_palette(offset >> 1, offset & ~1, offset | 1); |
| 567 | change_palette(offset >> 1, offset & ~1, offset | 1); |
| 560 | 568 | |
| 561 | 569 | if (offset == 0x1fe || offset == 0x1ff) |
| 562 | 570 | { |
| r244652 | r244653 | |
| 565 | 573 | m_palette_intensity = m_paletteram[0x1ff] | (m_paletteram[0x1fe] << 8); |
| 566 | 574 | |
| 567 | 575 | for (offs = 0x400; offs < 0x600; offs += 2) |
| 568 | | argus_change_bg_palette(((offs & 0x1ff) >> 1) + 0x100, offs & ~1, offs | 1); |
| 576 | change_bg_palette(((offs & 0x1ff) >> 1) + 0x100, offs & ~1, offs | 1); |
| 569 | 577 | } |
| 570 | 578 | } |
| 571 | 579 | else if (offset >= 0x400 && offset <= 0x5ff) /* BG color */ |
| 572 | 580 | { |
| 573 | | argus_change_bg_palette(((offset & 0x1ff) >> 1) + 0x100, offset & ~1, offset | 1); |
| 581 | change_bg_palette(((offset & 0x1ff) >> 1) + 0x100, offset & ~1, offset | 1); |
| 574 | 582 | } |
| 575 | 583 | else if (offset >= 0x600 && offset <= 0x7ff) /* Text color */ |
| 576 | 584 | { |
| 577 | | argus_change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1); |
| 585 | change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1); |
| 578 | 586 | } |
| 579 | 587 | } |
| 580 | 588 | |
| r244652 | r244653 | |
| 584 | 592 | |
| 585 | 593 | if (offset <= 0x1ff) /* BG0 color */ |
| 586 | 594 | { |
| 587 | | argus_change_palette((offset >> 1) + 0x100, offset & ~1, offset | 1); |
| 595 | change_palette((offset >> 1) + 0x100, offset & ~1, offset | 1); |
| 588 | 596 | } |
| 589 | 597 | else if (offset <= 0x23f) /* BG1 color */ |
| 590 | 598 | { |
| 591 | | argus_change_palette(((offset & 0x3f) >> 1) + 0x0c0, offset & ~1, offset | 1); |
| 599 | change_palette(((offset & 0x3f) >> 1) + 0x0c0, offset & ~1, offset | 1); |
| 592 | 600 | } |
| 593 | 601 | else if (offset >= 0x400 && offset <= 0x47f) /* Sprite color */ |
| 594 | 602 | { /* 16 colors */ |
| 595 | | argus_change_palette((offset & 0x7f) >> 1, offset & ~1, offset | 1); |
| 603 | change_palette((offset & 0x7f) >> 1, offset & ~1, offset | 1); |
| 596 | 604 | } |
| 597 | 605 | else if (offset >= 0x480 && offset <= 0x4ff) /* Sprite color */ |
| 598 | 606 | { /* 8 colors */ |
| 599 | 607 | int offs = (offset & 0x070) | ((offset & 0x00f) >> 1); |
| 600 | 608 | |
| 601 | | argus_change_palette(offs + 0x040, offset & ~1, offset | 1); |
| 602 | | argus_change_palette(offs + 0x048, offset & ~1, offset | 1); |
| 609 | change_palette(offs + 0x040, offset & ~1, offset | 1); |
| 610 | change_palette(offs + 0x048, offset & ~1, offset | 1); |
| 603 | 611 | } |
| 604 | 612 | else if (offset >= 0x600 && offset <= 0x7ff) /* Text color */ |
| 605 | 613 | { |
| 606 | | argus_change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1); |
| 614 | change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1); |
| 607 | 615 | } |
| 608 | 616 | else if (offset >= 0x240 && offset <= 0x25f) // dummy |
| 609 | | argus_change_palette(((offset & 0x1f) >> 1) + 0xe0, offset & ~1, offset | 1); |
| 617 | change_palette(((offset & 0x1f) >> 1) + 0xe0, offset & ~1, offset | 1); |
| 610 | 618 | else if (offset >= 0x500 && offset <= 0x51f) // dummy |
| 611 | | argus_change_palette(((offset & 0x1f) >> 1) + 0xf0, offset & ~1, offset | 1); |
| 619 | change_palette(((offset & 0x1f) >> 1) + 0xf0, offset & ~1, offset | 1); |
| 612 | 620 | } |
| 613 | 621 | |
| 614 | | READ8_MEMBER(argus_state::butasan_bg1ram_r) |
| 615 | | { |
| 616 | | return m_butasan_bg1ram[offset]; |
| 617 | | } |
| 618 | | |
| 619 | 622 | WRITE8_MEMBER(argus_state::butasan_bg1ram_w) |
| 620 | 623 | { |
| 621 | 624 | int idx; |
| r244652 | r244653 | |
| 804 | 807 | |
| 805 | 808 | void argus_state::argus_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority) |
| 806 | 809 | { |
| 807 | | UINT8 *spriteram = m_spriteram; |
| 808 | | int offs; |
| 809 | | |
| 810 | 810 | /* Draw the sprites */ |
| 811 | | for (offs = 0; offs < m_spriteram.bytes(); offs += 16) |
| 811 | for (int offs = 0; offs < m_spriteram.bytes(); offs += 16) |
| 812 | 812 | { |
| 813 | | if (!(spriteram[offs+15] == 0 && spriteram[offs+11] == 0xf0)) |
| 813 | if (!(m_spriteram[offs+15] == 0 && m_spriteram[offs+11] == 0xf0)) |
| 814 | 814 | { |
| 815 | 815 | int sx, sy, tile, flipx, flipy, color, pri; |
| 816 | 816 | |
| 817 | | sx = spriteram[offs+12]; if (spriteram[offs+13] & 0x01) sx -= 256; |
| 818 | | sy = spriteram[offs+11]; if (!(spriteram[offs+13] & 0x02)) sy -= 256; |
| 817 | sx = m_spriteram[offs+12]; if (m_spriteram[offs+13] & 0x01) sx -= 256; |
| 818 | sy = m_spriteram[offs+11]; if (!(m_spriteram[offs+13] & 0x02)) sy -= 256; |
| 819 | 819 | |
| 820 | | tile = spriteram[offs+14] | ((spriteram[offs+13] & 0xc0) << 2); |
| 821 | | flipx = spriteram[offs+13] & 0x10; |
| 822 | | flipy = spriteram[offs+13] & 0x20; |
| 823 | | color = spriteram[offs+15] & 0x07; |
| 824 | | pri = (spriteram[offs+15] & 0x08) >> 3; |
| 820 | tile = m_spriteram[offs+14] | ((m_spriteram[offs+13] & 0xc0) << 2); |
| 821 | flipx = m_spriteram[offs+13] & 0x10; |
| 822 | flipy = m_spriteram[offs+13] & 0x20; |
| 823 | color = m_spriteram[offs+15] & 0x07; |
| 824 | pri = (m_spriteram[offs+15] & 0x08) >> 3; |
| 825 | 825 | |
| 826 | 826 | if (m_flipscreen) |
| 827 | 827 | { |
| r244652 | r244653 | |
| 933 | 933 | |
| 934 | 934 | void argus_state::valtric_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 935 | 935 | { |
| 936 | | UINT8 *spriteram = m_spriteram; |
| 937 | | int offs; |
| 938 | | |
| 939 | 936 | /* Draw the sprites */ |
| 940 | | for (offs = 0; offs < m_spriteram.bytes(); offs += 16) |
| 937 | for (int offs = 0; offs < m_spriteram.bytes(); offs += 16) |
| 941 | 938 | { |
| 942 | | if (!(spriteram[offs+15] == 0 && spriteram[offs+11] == 0xf0)) |
| 939 | if (!(m_spriteram[offs+15] == 0 && m_spriteram[offs+11] == 0xf0)) |
| 943 | 940 | { |
| 944 | 941 | int sx, sy, tile, flipx, flipy, color; |
| 945 | 942 | |
| 946 | | sx = spriteram[offs+12]; if (spriteram[offs+13] & 0x01) sx -= 256; |
| 947 | | sy = spriteram[offs+11]; if (!(spriteram[offs+13] & 0x02)) sy -= 256; |
| 943 | sx = m_spriteram[offs+12]; if (m_spriteram[offs+13] & 0x01) sx -= 256; |
| 944 | sy = m_spriteram[offs+11]; if (!(m_spriteram[offs+13] & 0x02)) sy -= 256; |
| 948 | 945 | |
| 949 | | tile = spriteram[offs+14] | ((spriteram[offs+13] & 0xc0) << 2); |
| 950 | | flipx = spriteram[offs+13] & 0x10; |
| 951 | | flipy = spriteram[offs+13] & 0x20; |
| 952 | | color = spriteram[offs+15] & 0x0f; |
| 946 | tile = m_spriteram[offs+14] | ((m_spriteram[offs+13] & 0xc0) << 2); |
| 947 | flipx = m_spriteram[offs+13] & 0x10; |
| 948 | flipy = m_spriteram[offs+13] & 0x20; |
| 949 | color = m_spriteram[offs+15] & 0x0f; |
| 953 | 950 | |
| 954 | 951 | if (m_flipscreen) |
| 955 | 952 | { |
| r244652 | r244653 | |
| 972 | 969 | |
| 973 | 970 | void argus_state::butasan_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 974 | 971 | { |
| 975 | | UINT8 *spriteram = m_spriteram; |
| 976 | | int offs; |
| 977 | | |
| 978 | 972 | /* Draw the sprites */ |
| 979 | | for (offs = 0; offs < m_spriteram.bytes(); offs += 16) |
| 973 | for (int offs = 0; offs < m_spriteram.bytes(); offs += 16) |
| 980 | 974 | { |
| 981 | 975 | int sx, sy, tile, flipx, flipy, color; |
| 982 | 976 | int fx, fy; |
| 983 | 977 | |
| 984 | | tile = spriteram[offs+14] | ((spriteram[offs+15] & 0x0f) << 8); |
| 985 | | flipx = spriteram[offs+8] & 0x01; |
| 986 | | flipy = spriteram[offs+8] & 0x04; |
| 987 | | color = spriteram[offs+9] & 0x0f; |
| 978 | tile = m_spriteram[offs+14] | ((m_spriteram[offs+15] & 0x0f) << 8); |
| 979 | flipx = m_spriteram[offs+8] & 0x01; |
| 980 | flipy = m_spriteram[offs+8] & 0x04; |
| 981 | color = m_spriteram[offs+9] & 0x0f; |
| 988 | 982 | |
| 989 | | sx = spriteram[offs+10]; |
| 990 | | sy = spriteram[offs+12]; |
| 983 | sx = m_spriteram[offs+10]; |
| 984 | sy = m_spriteram[offs+12]; |
| 991 | 985 | |
| 992 | | if (spriteram[offs+11] & 0x01) sx-=256; |
| 993 | | if (spriteram[offs+13] & 0x01) sy-=256; |
| 986 | if (m_spriteram[offs+11] & 0x01) sx-=256; |
| 987 | if (m_spriteram[offs+13] & 0x01) sy-=256; |
| 994 | 988 | |
| 995 | 989 | sy = 240 - sy; |
| 996 | 990 | |
trunk/src/mess/drivers/hh_tms1k.c
| r244652 | r244653 | |
| 5 | 5 | This driver is a collection of simple dedicated handheld and tabletop |
| 6 | 6 | toys based around the TMS1000 MCU series. Anything more complex or clearly |
| 7 | 7 | part of a series is (or will be) in its own driver. |
| 8 | |
| 9 | Let's use this driver for a list of known devices and their serials, |
| 10 | excluding TI's own products (see for example ticalc1x.c, tispeak.c) |
| 8 | 11 | |
| 12 | serial device etc. |
| 13 | -------------------------------------------------------------------- |
| 14 | @MP0904A TMS0970 1977, Milton Bradley Comp IV |
| 15 | @MP0905B TMS0970 1977, Parker Brothers Codename Sector |
| 16 | @MP0914 TMS1000 1979, Entex Baseball |
| 17 | @MP1030 TMS1100 1980, APF Mathemagician |
| 18 | @MP3226 TMS1000 1978, Milton Bradley Simon |
| 19 | @MP3403 TMS1100 1978, unknown |
| 20 | @MP3404 TMS1100 1978, Parker Brothers Merlin |
| 21 | @MP3405 TMS1100 1979, Coleco Amaze-A-Tron |
| 22 | @MP3438A TMS1100 1979, Kenner Star Wars Electronic Battle Command |
| 23 | MP3450A TMS1100 1979, MicroVision cartridge: Blockbuster |
| 24 | MP3454 TMS1100 1979, MicroVision cartridge: Star Trek Phaser Strike |
| 25 | MP3455 TMS1100 1980, MicroVision cartridge: Pinball |
| 26 | MP3457 TMS1100 1979, MicroVision cartridge: Mindbuster |
| 27 | MP3474 TMS1100 1979, MicroVision cartridge: Vegas Slots |
| 28 | MP3475 TMS1100 1979, MicroVision cartridge: Bowling |
| 29 | MP3479 TMS1100 1980, MicroVision cartridge: Baseball |
| 30 | MP3481 TMS1100 1979, MicroVision cartridge: Connect Four |
| 31 | MP3496 TMS1100 1980, MicroVision cartridge: Sea Duel |
| 32 | @MP6100A TMS0980 1979, Ideal Electronic Detective |
| 33 | @MP6101B TMS0980 1979, Parker Brothers Stop Thief |
| 34 | @MP7313 TMS1400 1980, Parker Brothers Bank Shot |
| 35 | @MP7314 TMS1400 1980, Parker Brothers Split Second |
| 36 | *MP7332 TMS1400 1981, Milton Bradley Dark Tower |
| 37 | @MP7334 TMS1400 1981, Coleco Total Control 4 |
| 9 | 38 | |
| 39 | inconsistent: |
| 40 | |
| 41 | M34009 TMS1100 1981, MicroVision cartridge: Alien Raiders |
| 42 | M34017 TMS1100 1981, MicroVision cartridge: Cosmic Hunter |
| 43 | M34047 TMS1100 1982, MicroVision cartridge: Super Blockbuster |
| 44 | |
| 45 | CD7282SL TMS1100 1981, Tandy-12 (serial is similar to TI Speak & Spell series?) |
| 46 | |
| 47 | (* denotes not yet emulated by MESS, @ denotes it's in this driver) |
| 48 | |
| 10 | 49 | ***************************************************************************/ |
| 11 | 50 | |
| 12 | 51 | #include "emu.h" |
| 13 | 52 | #include "cpu/tms0980/tms0980.h" |
| 14 | 53 | #include "sound/speaker.h" |
| 15 | 54 | |
| 55 | // internal artwork |
| 16 | 56 | #include "amaztron.lh" |
| 17 | 57 | #include "bankshot.lh" |
| 18 | 58 | #include "cnsector.lh" |
| 19 | | #include "ebball.lh" |
| 20 | 59 | #include "elecdet.lh" |
| 21 | 60 | #include "comp4.lh" |
| 22 | 61 | #include "mathmagi.lh" |
| 23 | | #include "merlin.lh" |
| 24 | | #include "simon.lh" |
| 62 | #include "merlin.lh" // clickable |
| 63 | #include "simon.lh" // clickable |
| 25 | 64 | #include "splitsec.lh" |
| 26 | 65 | #include "starwbc.lh" |
| 27 | 66 | #include "stopthie.lh" |
| 28 | | #include "tandy12.lh" |
| 67 | #include "tandy12.lh" // clickable |
| 29 | 68 | #include "tc4.lh" |
| 30 | 69 | |
| 70 | // test-layouts - use external artwork |
| 71 | #include "ebball.lh" |
| 31 | 72 | |
| 73 | |
| 32 | 74 | class hh_tms1k_state : public driver_device |
| 33 | 75 | { |
| 34 | 76 | public: |
| r244652 | r244653 | |
| 72 | 114 | |
| 73 | 115 | TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); |
| 74 | 116 | void display_update(); |
| 117 | void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety); |
| 75 | 118 | |
| 76 | 119 | // game-specific handlers |
| 77 | 120 | void mathmagi_display(); |
| r244652 | r244653 | |
| 89 | 132 | DECLARE_WRITE16_MEMBER(tc4_write_r); |
| 90 | 133 | DECLARE_WRITE16_MEMBER(tc4_write_o); |
| 91 | 134 | |
| 135 | void ebball_display(); |
| 136 | DECLARE_READ8_MEMBER(ebball_read_k); |
| 137 | DECLARE_WRITE16_MEMBER(ebball_write_r); |
| 138 | DECLARE_WRITE16_MEMBER(ebball_write_o); |
| 139 | |
| 92 | 140 | DECLARE_READ8_MEMBER(elecdet_read_k); |
| 93 | 141 | DECLARE_WRITE16_MEMBER(elecdet_write_r); |
| 94 | 142 | DECLARE_WRITE16_MEMBER(elecdet_write_o); |
| r244652 | r244653 | |
| 118 | 166 | DECLARE_WRITE16_MEMBER(stopthief_write_r); |
| 119 | 167 | DECLARE_WRITE16_MEMBER(stopthief_write_o); |
| 120 | 168 | |
| 121 | | void bankshot_display(); |
| 122 | 169 | DECLARE_READ8_MEMBER(bankshot_read_k); |
| 123 | 170 | DECLARE_WRITE16_MEMBER(bankshot_write_r); |
| 124 | 171 | DECLARE_WRITE16_MEMBER(bankshot_write_o); |
| 125 | 172 | |
| 126 | | void splitsec_display(); |
| 127 | 173 | DECLARE_READ8_MEMBER(splitsec_read_k); |
| 128 | 174 | DECLARE_WRITE16_MEMBER(splitsec_write_r); |
| 129 | 175 | DECLARE_WRITE16_MEMBER(splitsec_write_o); |
| r244652 | r244653 | |
| 139 | 185 | }; |
| 140 | 186 | |
| 141 | 187 | |
| 188 | // machine_start/reset |
| 189 | |
| 142 | 190 | void hh_tms1k_state::machine_start() |
| 143 | 191 | { |
| 144 | 192 | // zerofill |
| r244652 | r244653 | |
| 168 | 216 | save_item(NAME(m_power_on)); |
| 169 | 217 | } |
| 170 | 218 | |
| 171 | | |
| 172 | 219 | void hh_tms1k_state::machine_reset() |
| 173 | 220 | { |
| 174 | 221 | m_power_on = true; |
| 175 | 222 | } |
| 176 | 223 | |
| 224 | |
| 225 | |
| 177 | 226 | /*************************************************************************** |
| 178 | 227 | |
| 179 | 228 | Helper Functions |
| r244652 | r244653 | |
| 243 | 292 | display_update(); |
| 244 | 293 | } |
| 245 | 294 | |
| 295 | void hh_tms1k_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety) |
| 296 | { |
| 297 | m_display_maxx = maxx; |
| 298 | m_display_maxy = maxy; |
| 246 | 299 | |
| 300 | // update current state |
| 301 | for (int y = 0; y < maxy; y++) |
| 302 | m_display_state[y] = (sety >> y & 1) ? setx : 0; |
| 303 | |
| 304 | display_update(); |
| 305 | } |
| 306 | |
| 307 | |
| 247 | 308 | UINT8 hh_tms1k_state::read_inputs(int columns) |
| 248 | 309 | { |
| 249 | | UINT8 k = 0; |
| 310 | UINT8 ret = 0; |
| 250 | 311 | |
| 251 | 312 | // read selected input rows |
| 252 | 313 | for (int i = 0; i < columns; i++) |
| 253 | 314 | if (m_inp_mux >> i & 1) |
| 254 | | k |= m_inp_matrix[i]->read(); |
| 315 | ret |= m_inp_matrix[i]->read(); |
| 255 | 316 | |
| 256 | | return k; |
| 317 | return ret; |
| 257 | 318 | } |
| 258 | 319 | |
| 259 | | INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button) |
| 260 | | { |
| 261 | | m_power_on = (bool)(FPTR)param; |
| 262 | | m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); |
| 263 | | } |
| 264 | 320 | |
| 321 | // devices with a TMS0980 can auto power-off |
| 322 | |
| 265 | 323 | WRITE_LINE_MEMBER(hh_tms1k_state::tms0980_auto_power_off) |
| 266 | 324 | { |
| 267 | | // TMS0980 auto power-off opcode |
| 268 | 325 | if (state) |
| 269 | 326 | { |
| 270 | 327 | m_power_on = false; |
| r244652 | r244653 | |
| 272 | 329 | } |
| 273 | 330 | } |
| 274 | 331 | |
| 332 | INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button) |
| 333 | { |
| 334 | m_power_on = (bool)(FPTR)param; |
| 335 | m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); |
| 336 | } |
| 337 | |
| 338 | |
| 339 | |
| 275 | 340 | /*************************************************************************** |
| 276 | 341 | |
| 277 | 342 | Minidrivers (I/O, Inputs, Machine Config) |
| r244652 | r244653 | |
| 331 | 396 | return read_inputs(6); |
| 332 | 397 | } |
| 333 | 398 | |
| 334 | | |
| 335 | 399 | WRITE16_MEMBER(hh_tms1k_state::mathmagi_write_r) |
| 336 | 400 | { |
| 337 | 401 | // R3,R5-R7,R9,R10: input mux |
| r244652 | r244653 | |
| 350 | 414 | m_o = data; |
| 351 | 415 | } |
| 352 | 416 | |
| 417 | |
| 353 | 418 | /* physical button layout and labels is like this: |
| 354 | 419 | |
| 355 | 420 | ON ONE [SEL] [NXT] [?] [/] |
| r244652 | r244653 | |
| 399 | 464 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 400 | 465 | INPUT_PORTS_END |
| 401 | 466 | |
| 467 | // output PLA is not dumped |
| 402 | 468 | static const UINT16 mathmagi_output_pla[0x20] = |
| 403 | 469 | { |
| 404 | 470 | lA+lB+lC+lD+lE+lF, // 0 |
| r244652 | r244653 | |
| 435 | 501 | lA+lF+lE+lD+lC // G |
| 436 | 502 | }; |
| 437 | 503 | |
| 438 | | |
| 439 | 504 | static MACHINE_CONFIG_START( mathmagi, hh_tms1k_state ) |
| 440 | 505 | |
| 441 | 506 | /* basic machine hardware */ |
| r244652 | r244653 | |
| 626 | 691 | void hh_tms1k_state::tc4_display() |
| 627 | 692 | { |
| 628 | 693 | m_display_wait = 50; |
| 629 | | m_display_maxy = 10; |
| 630 | | m_display_maxx = 9; |
| 631 | 694 | |
| 632 | 695 | // R5,7,8,9 are 7segs |
| 633 | | for (int y = 0; y < m_display_maxy; y++) |
| 696 | for (int y = 0; y < 10; y++) |
| 634 | 697 | if (y >= 5 && y <= 9 && y != 6) |
| 635 | 698 | m_7seg_mask[y] = 0x7f; |
| 636 | 699 | |
| 637 | 700 | // update current state (note: R6 as extra column!) |
| 638 | | for (int y = 0; y < m_display_maxy; y++) |
| 639 | | m_display_state[y] = (m_r >> y & 1) ? (m_o | (m_r << 2 & 0x100)) : 0; |
| 640 | | |
| 641 | | display_update(); |
| 701 | display_matrix(9, 10, (m_o | (m_r << 2 & 0x100)), m_r); |
| 642 | 702 | } |
| 643 | 703 | |
| 644 | 704 | READ8_MEMBER(hh_tms1k_state::tc4_read_k) |
| r244652 | r244653 | |
| 662 | 722 | m_inp_mux = data & 0x23f; |
| 663 | 723 | |
| 664 | 724 | // R6: led column 8 |
| 665 | | // +other: select leds |
| 725 | // +other columns |
| 666 | 726 | m_r = data; |
| 667 | 727 | tc4_display(); |
| 668 | 728 | } |
| 669 | 729 | |
| 670 | 730 | WRITE16_MEMBER(hh_tms1k_state::tc4_write_o) |
| 671 | 731 | { |
| 672 | | // O0-O7: leds/7segment |
| 732 | // O0-O7: led row |
| 673 | 733 | m_o = data; |
| 674 | 734 | tc4_display(); |
| 675 | 735 | } |
| r244652 | r244653 | |
| 745 | 805 | Entex Baseball |
| 746 | 806 | * TMS1000NLP MP0914 (die labeled MP0914A) |
| 747 | 807 | |
| 808 | NOTE!: MESS external artwork is recommended |
| 809 | |
| 810 | lamp translation table: led LDzz from game PCB = MESS lampyx: |
| 811 | |
| 812 | LD0 = - LD10 = lamp12 LD20 = lamp42 LD30 = lamp60 |
| 813 | LD1 = lamp23 LD11 = lamp4 LD21 = lamp41 LD31 = lamp61 |
| 814 | LD2 = lamp0 LD12 = lamp15 LD22 = lamp40 LD32 = lamp62 |
| 815 | LD3 = lamp1 LD13 = lamp22 LD23 = lamp43 LD33 = lamp70 |
| 816 | LD4 = lamp2 LD14 = lamp33 LD24 = lamp53 LD34 = lamp71 |
| 817 | LD5 = lamp10 LD15 = lamp32 LD25 = lamp52 |
| 818 | LD6 = lamp13 LD16 = lamp21 LD26 = lamp51 |
| 819 | LD7 = lamp11 LD17 = lamp31 LD27 = lamp50 |
| 820 | LD8 = lamp3 LD18 = lamp30 LD28 = lamp72 |
| 821 | LD9 = lamp14 LD19 = lamp20 LD29 = lamp73 |
| 822 | |
| 748 | 823 | ***************************************************************************/ |
| 749 | 824 | |
| 750 | | // inputs |
| 825 | void hh_tms1k_state::ebball_display() |
| 826 | { |
| 827 | // R8 is a 7seg |
| 828 | m_7seg_mask[8] = 0x7f; |
| 829 | |
| 830 | display_matrix(7, 9, m_o, m_r); |
| 831 | } |
| 832 | |
| 833 | READ8_MEMBER(hh_tms1k_state::ebball_read_k) |
| 834 | { |
| 835 | // note: K8(Vss row) is always on |
| 836 | return m_inp_matrix[5]->read() | read_inputs(5); |
| 837 | } |
| 838 | |
| 839 | WRITE16_MEMBER(hh_tms1k_state::ebball_write_r) |
| 840 | { |
| 841 | // R1-R5: input mux |
| 842 | m_inp_mux = data >> 1 & 0x1f; |
| 843 | |
| 844 | // R9: speaker out |
| 845 | m_speaker->level_w(data >> 9 & 1); |
| 846 | |
| 847 | // R0-R8: led columns |
| 848 | m_r = data; |
| 849 | ebball_display(); |
| 850 | } |
| 851 | |
| 852 | WRITE16_MEMBER(hh_tms1k_state::ebball_write_o) |
| 853 | { |
| 854 | // O0-O6: led row |
| 855 | // O7: N/C |
| 856 | m_o = data; |
| 857 | ebball_display(); |
| 858 | } |
| 859 | |
| 751 | 860 | static INPUT_PORTS_START( ebball ) |
| 861 | PORT_START("IN.0") // R1 |
| 862 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 863 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) |
| 864 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) |
| 865 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 866 | |
| 867 | PORT_START("IN.1") // R2 |
| 868 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) |
| 869 | PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 870 | |
| 871 | PORT_START("IN.2") // R3 |
| 872 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) |
| 873 | PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 874 | |
| 875 | PORT_START("IN.3") // R4 |
| 876 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON6 ) |
| 877 | PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 878 | |
| 879 | PORT_START("IN.4") // R5 |
| 880 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON7 ) |
| 881 | PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 882 | |
| 883 | PORT_START("IN.5") // Vss! |
| 884 | PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 885 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) |
| 752 | 886 | INPUT_PORTS_END |
| 753 | 887 | |
| 754 | | // machine config |
| 755 | 888 | static MACHINE_CONFIG_START( ebball, hh_tms1k_state ) |
| 756 | 889 | |
| 757 | 890 | /* basic machine hardware */ |
| 758 | 891 | MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz |
| 892 | MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, ebball_read_k)) |
| 893 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, ebball_write_r)) |
| 894 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, ebball_write_o)) |
| 759 | 895 | |
| 896 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 760 | 897 | MCFG_DEFAULT_LAYOUT(layout_ebball) |
| 761 | 898 | |
| 762 | 899 | /* no video! */ |
| r244652 | r244653 | |
| 795 | 932 | |
| 796 | 933 | WRITE16_MEMBER(hh_tms1k_state::elecdet_write_r) |
| 797 | 934 | { |
| 798 | | m_display_maxy = 7; |
| 799 | | m_display_maxx = 7; |
| 935 | // R7,R8: speaker on |
| 936 | m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0); |
| 800 | 937 | |
| 801 | 938 | // R0-R6: select digit |
| 802 | | UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3); |
| 803 | | for (int y = 0; y < m_display_maxy; y++) |
| 804 | | { |
| 939 | for (int y = 0; y < 7; y++) |
| 805 | 940 | m_7seg_mask[y] = 0x7f; |
| 806 | | m_display_state[y] = (data >> y & 1) ? o : 0; |
| 807 | | } |
| 808 | 941 | |
| 809 | | display_update(); |
| 810 | | |
| 811 | | // R7,R8: speaker on |
| 812 | | m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0); |
| 942 | display_matrix(7, 7, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data); |
| 813 | 943 | } |
| 814 | 944 | |
| 815 | 945 | WRITE16_MEMBER(hh_tms1k_state::elecdet_write_o) |
| r244652 | r244653 | |
| 833 | 963 | */ |
| 834 | 964 | |
| 835 | 965 | static INPUT_PORTS_START( elecdet ) |
| 836 | | PORT_START("IN.0") // O0 pin18 |
| 966 | PORT_START("IN.0") // O0 |
| 837 | 967 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 838 | 968 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 839 | 969 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 840 | 970 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Private Question") |
| 841 | 971 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") |
| 842 | 972 | |
| 843 | | PORT_START("IN.1") // O1 pin17 |
| 973 | PORT_START("IN.1") // O1 |
| 844 | 974 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 845 | 975 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 846 | 976 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") |
| 847 | 977 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") |
| 848 | 978 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 849 | 979 | |
| 850 | | PORT_START("IN.2") // O4 pin14 |
| 980 | PORT_START("IN.2") // O4 |
| 851 | 981 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") |
| 852 | 982 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 853 | 983 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") |
| 854 | 984 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("I Accuse") |
| 855 | 985 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") |
| 856 | 986 | |
| 857 | | PORT_START("IN.3") // O6 pin12 |
| 987 | PORT_START("IN.3") // O6 |
| 858 | 988 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 859 | 989 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 860 | 990 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| r244652 | r244653 | |
| 908 | 1038 | |
| 909 | 1039 | void hh_tms1k_state::starwbc_display() |
| 910 | 1040 | { |
| 911 | | m_display_maxy = 10; |
| 912 | | m_display_maxx = 8; |
| 913 | | |
| 914 | | UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f); |
| 915 | | for (int y = 0; y < m_display_maxy; y+=2) |
| 916 | | { |
| 917 | | m_display_state[y] = (m_r >> y & 1) ? o : 0; |
| 918 | | |
| 919 | | // R6,R8 are 7segs |
| 920 | | if (y == 6 || y == 8) |
| 921 | | m_7seg_mask[y] = 0x7f; |
| 922 | | } |
| 923 | | |
| 924 | | display_update(); |
| 1041 | // R6,R8 are 7segs |
| 1042 | m_7seg_mask[6] = m_7seg_mask[8] = 0x7f; |
| 1043 | |
| 1044 | display_matrix(8, 10, m_o, m_r); |
| 925 | 1045 | } |
| 926 | 1046 | |
| 927 | 1047 | READ8_MEMBER(hh_tms1k_state::starwbc_read_k) |
| r244652 | r244653 | |
| 934 | 1054 | // R0,R1,R3,R5,R7: input mux |
| 935 | 1055 | m_inp_mux = (data & 3) | (data >> 1 & 4) | (data >> 2 & 8) | (data >> 3 & 0x10); |
| 936 | 1056 | |
| 937 | | // R9: piezo speaker |
| 1057 | // R9: speaker out |
| 938 | 1058 | m_speaker->level_w(data >> 9 & 1); |
| 939 | 1059 | |
| 940 | | // R0,R2,R4,R6,R8: leds |
| 941 | | m_r = data; |
| 1060 | // R0,R2,R4,R6,R8: led columns |
| 1061 | m_r = data & 0x155; |
| 942 | 1062 | starwbc_display(); |
| 943 | 1063 | } |
| 944 | 1064 | |
| 945 | 1065 | WRITE16_MEMBER(hh_tms1k_state::starwbc_write_o) |
| 946 | 1066 | { |
| 947 | | // O0-O7: leds state |
| 948 | | m_o = data; |
| 1067 | // O0-O7: led row |
| 1068 | m_o = (data << 4 & 0xf0) | (data >> 4 & 0x0f); |
| 949 | 1069 | starwbc_display(); |
| 950 | 1070 | } |
| 951 | 1071 | |
| 952 | 1072 | |
| 953 | | |
| 954 | 1073 | /* physical button layout and labels is like this: |
| 955 | 1074 | |
| 956 | 1075 | (reconnnaissance=yellow) (tactical reaction=green) |
| r244652 | r244653 | |
| 996 | 1115 | static MACHINE_CONFIG_START( starwbc, hh_tms1k_state ) |
| 997 | 1116 | |
| 998 | 1117 | /* basic machine hardware */ |
| 999 | | MCFG_CPU_ADD("maincpu", TMS1100, 300000) // RC osc. R=51K, C=47pf -> ~300kHz |
| 1118 | MCFG_CPU_ADD("maincpu", TMS1100, 325000) // RC osc. R=51K, C=47pf -> ~325kHz |
| 1000 | 1119 | MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, starwbc_read_k)) |
| 1001 | 1120 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, starwbc_write_r)) |
| 1002 | 1121 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, starwbc_write_o)) |
| r244652 | r244653 | |
| 1029 | 1148 | Refer to the official manual for more information. |
| 1030 | 1149 | |
| 1031 | 1150 | |
| 1032 | | TODO: |
| 1033 | | - MCU clock is unknown |
| 1034 | | |
| 1035 | 1151 | ***************************************************************************/ |
| 1036 | 1152 | |
| 1037 | 1153 | READ8_MEMBER(hh_tms1k_state::comp4_read_k) |
| r244652 | r244653 | |
| 1047 | 1163 | // R2 R7 |
| 1048 | 1164 | // R1 R6 |
| 1049 | 1165 | // R0 R5 |
| 1050 | | m_display_maxx = 11; |
| 1051 | | m_display_state[0] = data; |
| 1052 | | display_update(); |
| 1166 | m_r = data; |
| 1167 | display_matrix(11, 1, m_r, m_o); |
| 1053 | 1168 | } |
| 1054 | 1169 | |
| 1055 | 1170 | WRITE16_MEMBER(hh_tms1k_state::comp4_write_o) |
| 1056 | 1171 | { |
| 1057 | | // O0: leds common (always writes 1) |
| 1058 | 1172 | // O1-O3: input mux |
| 1173 | m_inp_mux = data >> 1 & 7; |
| 1174 | |
| 1175 | // O0: leds common |
| 1059 | 1176 | // other bits: N/C |
| 1060 | | m_inp_mux = data >> 1 & 7; |
| 1177 | m_o = data; |
| 1178 | display_matrix(11, 1, m_r, m_o); |
| 1061 | 1179 | } |
| 1062 | 1180 | |
| 1063 | 1181 | |
| r244652 | r244653 | |
| 1105 | 1223 | Milton Bradley Simon, created by Ralph Baer |
| 1106 | 1224 | |
| 1107 | 1225 | Revision A hardware: |
| 1108 | | * TMS1000 (has internal ROM), DS75494 lamp driver |
| 1226 | * TMS1000 (die labeled MP3226), DS75494 lamp driver |
| 1109 | 1227 | |
| 1110 | 1228 | Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000. |
| 1111 | 1229 | This one has been decapped too, but we couldn't find an internal ROM. |
| r244652 | r244653 | |
| 1129 | 1247 | // R5 -> 75494 IN3 -> red lamp |
| 1130 | 1248 | // R6 -> 75494 IN5 -> yellow lamp |
| 1131 | 1249 | // R7 -> 75494 IN2 -> blue lamp |
| 1132 | | m_display_maxx = 4; |
| 1133 | | m_display_state[0] = data >> 4 & 0xf; |
| 1134 | | display_update(); |
| 1250 | display_matrix(4, 1, data >> 4, 1); |
| 1135 | 1251 | |
| 1136 | 1252 | // R8 -> 75494 IN0 -> speaker |
| 1137 | 1253 | m_speaker->level_w(data >> 8 & 1); |
| r244652 | r244653 | |
| 1338 | 1454 | R7 R8 R9 |
| 1339 | 1455 | R10 |
| 1340 | 1456 | */ |
| 1341 | | m_display_maxx = 11; |
| 1342 | | m_display_state[0] = data; |
| 1343 | | display_update(); |
| 1457 | display_matrix(11, 1, data, 1); |
| 1344 | 1458 | } |
| 1345 | 1459 | |
| 1346 | 1460 | WRITE16_MEMBER(hh_tms1k_state::merlin_write_o) |
| r244652 | r244653 | |
| 1537 | 1651 | |
| 1538 | 1652 | ***************************************************************************/ |
| 1539 | 1653 | |
| 1540 | | void hh_tms1k_state::bankshot_display() |
| 1541 | | { |
| 1542 | | m_display_maxy = 11; |
| 1543 | | m_display_maxx = 7; |
| 1544 | | |
| 1545 | | // update current state |
| 1546 | | for (int y = 0; y < m_display_maxy; y++) |
| 1547 | | m_display_state[y] = (m_r >> y & 1) ? m_o : 0; |
| 1548 | | |
| 1549 | | display_update(); |
| 1550 | | } |
| 1551 | | |
| 1552 | 1654 | READ8_MEMBER(hh_tms1k_state::bankshot_read_k) |
| 1553 | 1655 | { |
| 1554 | 1656 | return read_inputs(2); |
| 1555 | 1657 | } |
| 1556 | 1658 | |
| 1557 | | |
| 1558 | 1659 | WRITE16_MEMBER(hh_tms1k_state::bankshot_write_r) |
| 1559 | 1660 | { |
| 1560 | 1661 | // R0: speaker out |
| r244652 | r244653 | |
| 1563 | 1664 | // R2,R3: input mux |
| 1564 | 1665 | m_inp_mux = data >> 2 & 3; |
| 1565 | 1666 | |
| 1566 | | // R2-R10: led rows |
| 1667 | // R2-R10: led columns |
| 1567 | 1668 | m_r = data & ~3; |
| 1568 | | bankshot_display(); |
| 1669 | display_matrix(7, 11, m_o, m_r); |
| 1569 | 1670 | } |
| 1570 | 1671 | |
| 1571 | 1672 | WRITE16_MEMBER(hh_tms1k_state::bankshot_write_o) |
| 1572 | 1673 | { |
| 1573 | | // O0-O6: led columns |
| 1674 | // O0-O6: led row |
| 1574 | 1675 | // O7: N/C |
| 1575 | 1676 | m_o = data; |
| 1576 | | bankshot_display(); |
| 1677 | display_matrix(7, 11, m_o, m_r); |
| 1577 | 1678 | } |
| 1578 | 1679 | |
| 1579 | 1680 | |
| r244652 | r244653 | |
| 1643 | 1744 | |
| 1644 | 1745 | *: higher number indicates higher difficulty |
| 1645 | 1746 | |
| 1646 | | ***************************************************************************/ |
| 1747 | display layout, where number xy is lamp R(x),O(y) |
| 1647 | 1748 | |
| 1648 | | |
| 1649 | | /* display layout, where number xy is lamp R(x),O(y) |
| 1650 | | |
| 1651 | 1749 | 00 02 04 |
| 1652 | 1750 | 10 01 12 03 14 05 16 |
| 1653 | 1751 | 11 13 15 |
| r244652 | r244653 | |
| 1659 | 1757 | 71 73 75 |
| 1660 | 1758 | 50 60 52 62 54 64 56 |
| 1661 | 1759 | 70 72 74 |
| 1662 | | */ |
| 1663 | 1760 | |
| 1664 | | void hh_tms1k_state::splitsec_display() |
| 1665 | | { |
| 1666 | | m_display_maxy = 8; |
| 1667 | | m_display_maxx = 7; |
| 1668 | | |
| 1669 | | // update current state |
| 1670 | | for (int y = 0; y < m_display_maxy; y++) |
| 1671 | | m_display_state[y] = (m_r >> y & 1) ? m_o : 0; |
| 1672 | | |
| 1673 | | display_update(); |
| 1674 | | } |
| 1761 | ***************************************************************************/ |
| 1675 | 1762 | |
| 1676 | 1763 | READ8_MEMBER(hh_tms1k_state::splitsec_read_k) |
| 1677 | 1764 | { |
| r244652 | r244653 | |
| 1686 | 1773 | // R9,R10: input mux |
| 1687 | 1774 | m_inp_mux = data >> 9 & 3; |
| 1688 | 1775 | |
| 1689 | | // R0-R7: led rows |
| 1776 | // R0-R7: led columns |
| 1690 | 1777 | m_r = data; |
| 1691 | | display_update(); |
| 1778 | display_matrix(7, 8, m_o, m_r); |
| 1692 | 1779 | } |
| 1693 | 1780 | |
| 1694 | 1781 | WRITE16_MEMBER(hh_tms1k_state::splitsec_write_o) |
| 1695 | 1782 | { |
| 1696 | | // O0-O6: led columns |
| 1783 | // O0-O6: led row |
| 1697 | 1784 | // O7: N/C |
| 1698 | 1785 | m_o = data; |
| 1699 | | splitsec_display(); |
| 1786 | display_matrix(7, 8, m_o, m_r); |
| 1700 | 1787 | } |
| 1701 | 1788 | |
| 1702 | 1789 | static INPUT_PORTS_START( splitsec ) |
| r244652 | r244653 | |
| 1708 | 1795 | |
| 1709 | 1796 | PORT_START("IN.1") // R10 |
| 1710 | 1797 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY |
| 1711 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select") |
| 1712 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start") |
| 1798 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SELECT ) |
| 1799 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START ) |
| 1713 | 1800 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 1714 | 1801 | INPUT_PORTS_END |
| 1715 | 1802 | |
| r244652 | r244653 | |
| 1766 | 1853 | |
| 1767 | 1854 | void hh_tms1k_state::tandy12_display() |
| 1768 | 1855 | { |
| 1769 | | m_display_maxx = 13; |
| 1770 | | |
| 1771 | 1856 | // O0-O7: button lamps 1-8, R0-R3: button lamps 9-12 |
| 1772 | | m_display_state[0] = (m_o << 1 & 0x1fe) | (m_r << 9 & 0x1e00); |
| 1773 | | display_update(); |
| 1857 | display_matrix(13, 1, (m_o << 1 & 0x1fe) | (m_r << 9 & 0x1e00), 1); |
| 1774 | 1858 | } |
| 1775 | 1859 | |
| 1776 | 1860 | READ8_MEMBER(hh_tms1k_state::tandy12_read_k) |
| r244652 | r244653 | |
| 1997 | 2081 | |
| 1998 | 2082 | ROM_START( amaztron ) |
| 1999 | 2083 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 2000 | | ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) ) |
| 2084 | ROM_LOAD( "mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) ) |
| 2001 | 2085 | |
| 2002 | 2086 | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 2003 | 2087 | ROM_LOAD( "tms1100_amaztron_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) |
| r244652 | r244653 | |
| 2010 | 2094 | |
| 2011 | 2095 | ROM_START( tc4 ) |
| 2012 | 2096 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 2013 | | ROM_LOAD( "tms1400nll_mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) ) |
| 2097 | ROM_LOAD( "mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) ) |
| 2014 | 2098 | |
| 2015 | 2099 | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 2016 | 2100 | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) |
| r244652 | r244653 | |
| 2032 | 2116 | |
| 2033 | 2117 | ROM_START( elecdet ) |
| 2034 | 2118 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 2035 | | ROM_LOAD( "tms0980nll_mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) ) |
| 2119 | ROM_LOAD( "mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) ) |
| 2036 | 2120 | |
| 2037 | 2121 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 2038 | 2122 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| r244652 | r244653 | |
| 2120 | 2204 | |
| 2121 | 2205 | ROM_START( stopthie ) |
| 2122 | 2206 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 2123 | | ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) ) |
| 2207 | ROM_LOAD( "mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) ) |
| 2124 | 2208 | |
| 2125 | 2209 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 2126 | 2210 | ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| r244652 | r244653 | |
| 2148 | 2232 | |
| 2149 | 2233 | ROM_START( bankshot ) |
| 2150 | 2234 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 2151 | | ROM_LOAD( "tms1400nll_mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) ) |
| 2235 | ROM_LOAD( "mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) ) |
| 2152 | 2236 | |
| 2153 | 2237 | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 2154 | 2238 | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) |
| r244652 | r244653 | |
| 2159 | 2243 | |
| 2160 | 2244 | ROM_START( splitsec ) |
| 2161 | 2245 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 2162 | | ROM_LOAD( "tms1400nll_mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) ) |
| 2246 | ROM_LOAD( "mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) ) |
| 2163 | 2247 | |
| 2164 | 2248 | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 2165 | 2249 | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) |
| r244652 | r244653 | |
| 2180 | 2264 | |
| 2181 | 2265 | ROM_START( unk3403 ) |
| 2182 | 2266 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 2183 | | ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) |
| 2267 | ROM_LOAD( "mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) |
| 2184 | 2268 | |
| 2185 | 2269 | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 2186 | 2270 | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified |
trunk/src/mess/drivers/hh_ucom4.c
| r244652 | r244653 | |
| 5 | 5 | NEC uCOM4 MCU handhelds |
| 6 | 6 | |
| 7 | 7 | |
| 8 | |
| 9 | serial device etc |
| 10 | ------------------------------------------ |
| 11 | @048 uPD552 1980, Tomy Tennis |
| 12 | *085 uPD650 1980, Roland TR-808 |
| 13 | 102 uPD553 1981, Bandai Block Out |
| 14 | *128 uPD650 1982, Roland TR-606 |
| 15 | 133 uPD650 1982, Roland TB-303 |
| 16 | @160 uPD553 1982, Tomy Pac Man |
| 17 | @206 uPD553 1982, Epoch Dracula |
| 18 | @258 uPD553 1984, Tomy Alien Chase |
| 19 | |
| 20 | (* denotes not yet emulated by MESS, @ denotes it's in this driver) |
| 21 | |
| 8 | 22 | ***************************************************************************/ |
| 9 | 23 | |
| 10 | 24 | #include "emu.h" |
| 11 | 25 | #include "cpu/ucom4/ucom4.h" |
| 12 | 26 | #include "sound/speaker.h" |
| 13 | 27 | |
| 28 | // test-layouts - use external artwork |
| 29 | #include "alnchase.lh" |
| 30 | #include "edracula.lh" |
| 14 | 31 | #include "tmpacman.lh" |
| 32 | #include "tmtennis.lh" |
| 15 | 33 | |
| 16 | 34 | |
| 17 | 35 | class hh_ucom4_state : public driver_device |
| r244652 | r244653 | |
| 29 | 47 | |
| 30 | 48 | // devices |
| 31 | 49 | required_device<cpu_device> m_maincpu; |
| 32 | | optional_ioport_array<4> m_inp_matrix; // max 4 |
| 50 | optional_ioport_array<3> m_inp_matrix; // max 3 |
| 33 | 51 | optional_device<speaker_sound_device> m_speaker; |
| 34 | 52 | |
| 35 | 53 | // misc common |
| 36 | 54 | UINT16 m_inp_mux; |
| 37 | 55 | |
| 56 | UINT8 read_inputs(int columns); |
| 57 | |
| 38 | 58 | virtual void machine_start(); |
| 39 | | virtual void machine_reset(); |
| 40 | 59 | |
| 41 | 60 | // display common |
| 42 | 61 | int m_display_wait; |
| r244652 | r244653 | |
| 53 | 72 | |
| 54 | 73 | TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); |
| 55 | 74 | void display_update(); |
| 75 | void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety); |
| 56 | 76 | |
| 57 | 77 | // game-specific handlers |
| 78 | DECLARE_WRITE8_MEMBER(edracula_grid_w); |
| 79 | DECLARE_WRITE8_MEMBER(edracula_plate_w); |
| 80 | DECLARE_WRITE8_MEMBER(edracula_port_i_w); |
| 58 | 81 | |
| 82 | DECLARE_READ8_MEMBER(tmtennis_input_r); |
| 83 | DECLARE_WRITE8_MEMBER(tmtennis_grid_w); |
| 84 | DECLARE_WRITE8_MEMBER(tmtennis_plate_w); |
| 85 | DECLARE_WRITE8_MEMBER(tmtennis_port_e_w); |
| 86 | void tmtennis_set_clock(); |
| 87 | DECLARE_INPUT_CHANGED_MEMBER(tmtennis_difficulty_switch); |
| 88 | DECLARE_MACHINE_RESET(tmtennis); |
| 89 | |
| 90 | DECLARE_READ8_MEMBER(alnchase_input_r); |
| 91 | DECLARE_WRITE8_MEMBER(alnchase_display_w); |
| 92 | DECLARE_WRITE8_MEMBER(alnchase_port_e_w); |
| 59 | 93 | }; |
| 60 | 94 | |
| 61 | 95 | |
| r244652 | r244653 | |
| 87 | 121 | } |
| 88 | 122 | |
| 89 | 123 | |
| 90 | | void hh_ucom4_state::machine_reset() |
| 91 | | { |
| 92 | | } |
| 93 | 124 | |
| 94 | 125 | /*************************************************************************** |
| 95 | 126 | |
| r244652 | r244653 | |
| 97 | 128 | |
| 98 | 129 | ***************************************************************************/ |
| 99 | 130 | |
| 100 | | // LED segments |
| 101 | | #if 0 |
| 102 | | enum |
| 103 | | { |
| 104 | | lA = 0x01, |
| 105 | | lB = 0x02, |
| 106 | | lC = 0x04, |
| 107 | | lD = 0x08, |
| 108 | | lE = 0x10, |
| 109 | | lF = 0x20, |
| 110 | | lG = 0x40, |
| 111 | | lDP = 0x80 |
| 112 | | }; |
| 113 | | #endif |
| 114 | 131 | |
| 132 | |
| 115 | 133 | // The device strobes the outputs very fast, it is unnoticeable to the user. |
| 116 | 134 | // To prevent flickering here, we need to simulate a decay. |
| 117 | 135 | |
| r244652 | r244653 | |
| 162 | 180 | display_update(); |
| 163 | 181 | } |
| 164 | 182 | |
| 183 | void hh_ucom4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety) |
| 184 | { |
| 185 | m_display_maxx = maxx; |
| 186 | m_display_maxy = maxy; |
| 165 | 187 | |
| 188 | // update current state |
| 189 | for (int y = 0; y < maxy; y++) |
| 190 | m_display_state[y] = (sety >> y & 1) ? setx : 0; |
| 191 | |
| 192 | display_update(); |
| 193 | } |
| 166 | 194 | |
| 195 | |
| 196 | UINT8 hh_ucom4_state::read_inputs(int columns) |
| 197 | { |
| 198 | UINT8 ret = 0; |
| 199 | |
| 200 | // read selected input rows |
| 201 | for (int i = 0; i < columns; i++) |
| 202 | if (m_inp_mux >> i & 1) |
| 203 | ret |= m_inp_matrix[i]->read(); |
| 204 | |
| 205 | return ret; |
| 206 | } |
| 207 | |
| 208 | |
| 167 | 209 | /*************************************************************************** |
| 168 | 210 | |
| 169 | 211 | Minidrivers (I/O, Inputs, Machine Config) |
| r244652 | r244653 | |
| 172 | 214 | |
| 173 | 215 | /*************************************************************************** |
| 174 | 216 | |
| 175 | | Tomytronic Pac-Man (manufactured in Japan) |
| 217 | Epoch Dracula (manufactured in Japan) |
| 218 | * PCB label 96121 |
| 219 | * NEC uCOM-43 MCU, labeled D553C 206 |
| 220 | * cyan/red/green VFD display NEC FIP8BM20T (FIP=fluorescent indicator panel) |
| 221 | |
| 222 | known releases: |
| 223 | - Japan: Dracula House, yellow case |
| 224 | - USA: Dracula, red case |
| 225 | - Other: Dracula, yellow case, published by Hales |
| 226 | |
| 227 | NOTE!: MESS external artwork is recommended |
| 228 | |
| 229 | |
| 230 | ***************************************************************************/ |
| 231 | |
| 232 | WRITE8_MEMBER(hh_ucom4_state::edracula_grid_w) |
| 233 | { |
| 234 | // port C/D: vfd matrix grid |
| 235 | int shift = (offset - NEC_UCOM4_PORTC) * 4; |
| 236 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 237 | |
| 238 | display_matrix(18, 8, m_plate, m_grid); |
| 239 | } |
| 240 | |
| 241 | WRITE8_MEMBER(hh_ucom4_state::edracula_plate_w) |
| 242 | { |
| 243 | // port E/F/G/H/I01: vfd matrix plate |
| 244 | int shift = (offset - NEC_UCOM4_PORTE) * 4; |
| 245 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 246 | |
| 247 | display_matrix(18, 8, m_plate, m_grid); |
| 248 | } |
| 249 | |
| 250 | WRITE8_MEMBER(hh_ucom4_state::edracula_port_i_w) |
| 251 | { |
| 252 | edracula_plate_w(space, offset, data & 3); |
| 253 | |
| 254 | // I2: speaker out |
| 255 | m_speaker->level_w(data >> 2 & 1); |
| 256 | } |
| 257 | |
| 258 | |
| 259 | static INPUT_PORTS_START( edracula ) |
| 260 | PORT_START("IN.0") |
| 261 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) |
| 262 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START ) |
| 263 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 264 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 265 | |
| 266 | PORT_START("IN.1") |
| 267 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) |
| 268 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) |
| 269 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) |
| 270 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) |
| 271 | INPUT_PORTS_END |
| 272 | |
| 273 | |
| 274 | static MACHINE_CONFIG_START( edracula, hh_ucom4_state ) |
| 275 | |
| 276 | /* basic machine hardware */ |
| 277 | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 278 | MCFG_UCOM4_READ_A_CB(IOPORT("IN.0")) |
| 279 | MCFG_UCOM4_READ_B_CB(IOPORT("IN.1")) |
| 280 | MCFG_UCOM4_WRITE_C_CB(WRITE8(hh_ucom4_state, edracula_grid_w)) |
| 281 | MCFG_UCOM4_WRITE_D_CB(WRITE8(hh_ucom4_state, edracula_grid_w)) |
| 282 | MCFG_UCOM4_WRITE_E_CB(WRITE8(hh_ucom4_state, edracula_plate_w)) |
| 283 | MCFG_UCOM4_WRITE_F_CB(WRITE8(hh_ucom4_state, edracula_plate_w)) |
| 284 | MCFG_UCOM4_WRITE_G_CB(WRITE8(hh_ucom4_state, edracula_plate_w)) |
| 285 | MCFG_UCOM4_WRITE_H_CB(WRITE8(hh_ucom4_state, edracula_plate_w)) |
| 286 | MCFG_UCOM4_WRITE_I_CB(WRITE8(hh_ucom4_state, edracula_port_i_w)) |
| 287 | |
| 288 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 289 | MCFG_DEFAULT_LAYOUT(layout_edracula) |
| 290 | |
| 291 | /* no video! */ |
| 292 | |
| 293 | /* sound hardware */ |
| 294 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 295 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 296 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 297 | MACHINE_CONFIG_END |
| 298 | |
| 299 | |
| 300 | |
| 301 | |
| 302 | /*************************************************************************** |
| 303 | |
| 304 | Tomy(tronic) Tennis (manufactured in Japan) |
| 305 | * board labeled TOMY TN-04 TENNIS |
| 306 | * NEC uCOM-44 MCU, labeled D552C 048 |
| 307 | * VFD display NEC FIP11AM15T |
| 308 | |
| 309 | The initial release of this game was in 1979, known as Pro-Tennis, |
| 310 | it has a D553 instead of D552, with just a little over 50% ROM used. |
| 311 | |
| 312 | This is an early VFD simple electronic tennis game. Player 1 is on the right |
| 313 | side, player 2 or CPU on the left. Each player has six possible positions |
| 314 | where to hit the ball. A backdrop behind the VFD shows a tennis court. |
| 315 | |
| 316 | NOTE!: MESS external artwork is recommended |
| 317 | |
| 318 | ***************************************************************************/ |
| 319 | |
| 320 | |
| 321 | READ8_MEMBER(hh_ucom4_state::tmtennis_input_r) |
| 322 | { |
| 323 | // port A/B: buttons |
| 324 | return ~read_inputs(2) >> (offset*4); |
| 325 | } |
| 326 | |
| 327 | WRITE8_MEMBER(hh_ucom4_state::tmtennis_port_e_w) |
| 328 | { |
| 329 | // E0/E1: input mux |
| 330 | // E2: speaker out |
| 331 | // E3: N/C |
| 332 | m_inp_mux = data & 3; |
| 333 | m_speaker->level_w(data >> 2 & 1); |
| 334 | } |
| 335 | |
| 336 | WRITE8_MEMBER(hh_ucom4_state::tmtennis_plate_w) |
| 337 | { |
| 338 | // port C/D/F: vfd matrix plate |
| 339 | if (offset == NEC_UCOM4_PORTF) offset--; |
| 340 | int shift = (offset - NEC_UCOM4_PORTC) * 4; |
| 341 | m_plate = (m_plate & ~(0xf << shift)) | (data << shift); |
| 342 | |
| 343 | display_matrix(12, 12, m_plate, m_grid); |
| 344 | } |
| 345 | |
| 346 | WRITE8_MEMBER(hh_ucom4_state::tmtennis_grid_w) |
| 347 | { |
| 348 | // port G/H/I: vfd matrix grid |
| 349 | int shift = (offset - NEC_UCOM4_PORTG) * 4; |
| 350 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 351 | |
| 352 | display_matrix(12, 12, m_plate, m_grid); |
| 353 | } |
| 354 | |
| 355 | |
| 356 | |
| 357 | /* Pro-Tennis physical button layout and labels is like this: |
| 358 | |
| 359 | [SERVE] [1] [2] [3] [3] [2] [1] [SERVE] |
| 360 | [4] [5] [6] [6] [5] [4] |
| 361 | |
| 362 | PRACTICE<--PRO1-->PRO2 1PLAYER<--OFF-->2PLAYER |
| 363 | */ |
| 364 | |
| 365 | static INPUT_PORTS_START( tmtennis ) |
| 366 | PORT_START("IN.0") // E0 port A/B |
| 367 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("P1 Serve") |
| 368 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("P2 Serve") |
| 369 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 370 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) |
| 371 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) |
| 372 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) |
| 373 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) |
| 374 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON6 ) |
| 375 | |
| 376 | PORT_START("IN.1") // E1 port A/B |
| 377 | PORT_CONFNAME( 0x101, 0x100, DEF_STR( Difficulty ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_ucom4_state, tmtennis_difficulty_switch, NULL) |
| 378 | PORT_CONFSETTING( 0x001, "Practice" ) |
| 379 | PORT_CONFSETTING( 0x100, "Pro 1" ) // -> tmtennis_difficulty_switch |
| 380 | PORT_CONFSETTING( 0x000, "Pro 2" ) |
| 381 | PORT_CONFNAME( 0x02, 0x00, "Players" ) |
| 382 | PORT_CONFSETTING( 0x00, "1" ) |
| 383 | PORT_CONFSETTING( 0x02, "2" ) |
| 384 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 385 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2) |
| 386 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 387 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(2) |
| 388 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 389 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(2) |
| 390 | INPUT_PORTS_END |
| 391 | |
| 392 | void hh_ucom4_state::tmtennis_set_clock() |
| 393 | { |
| 394 | // MCU clock is from an LC circuit oscillating by default at ~360kHz, |
| 395 | // but on PRO1, the difficulty switch puts a capacitor across the LC circuit |
| 396 | // to slow it down to ~260kHz. |
| 397 | m_maincpu->set_unscaled_clock(m_inp_matrix[1]->read() & 0x100 ? 260000 : 360000); |
| 398 | } |
| 399 | |
| 400 | INPUT_CHANGED_MEMBER(hh_ucom4_state::tmtennis_difficulty_switch) |
| 401 | { |
| 402 | tmtennis_set_clock(); |
| 403 | } |
| 404 | |
| 405 | MACHINE_RESET_MEMBER(hh_ucom4_state, tmtennis) |
| 406 | { |
| 407 | tmtennis_set_clock(); |
| 408 | } |
| 409 | |
| 410 | |
| 411 | static MACHINE_CONFIG_START( tmtennis, hh_ucom4_state ) |
| 412 | |
| 413 | /* basic machine hardware */ |
| 414 | MCFG_CPU_ADD("maincpu", NEC_D552, 360000) // see tmtennis_set_clock |
| 415 | MCFG_UCOM4_READ_A_CB(READ8(hh_ucom4_state, tmtennis_input_r)) |
| 416 | MCFG_UCOM4_READ_B_CB(READ8(hh_ucom4_state, tmtennis_input_r)) |
| 417 | MCFG_UCOM4_WRITE_C_CB(WRITE8(hh_ucom4_state, tmtennis_plate_w)) |
| 418 | MCFG_UCOM4_WRITE_D_CB(WRITE8(hh_ucom4_state, tmtennis_plate_w)) |
| 419 | MCFG_UCOM4_WRITE_E_CB(WRITE8(hh_ucom4_state, tmtennis_port_e_w)) |
| 420 | MCFG_UCOM4_WRITE_F_CB(WRITE8(hh_ucom4_state, tmtennis_plate_w)) |
| 421 | MCFG_UCOM4_WRITE_G_CB(WRITE8(hh_ucom4_state, tmtennis_grid_w)) |
| 422 | MCFG_UCOM4_WRITE_H_CB(WRITE8(hh_ucom4_state, tmtennis_grid_w)) |
| 423 | MCFG_UCOM4_WRITE_I_CB(WRITE8(hh_ucom4_state, tmtennis_grid_w)) |
| 424 | |
| 425 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 426 | MCFG_DEFAULT_LAYOUT(layout_tmtennis) |
| 427 | |
| 428 | MCFG_MACHINE_RESET_OVERRIDE(hh_ucom4_state, tmtennis) |
| 429 | |
| 430 | /* no video! */ |
| 431 | |
| 432 | /* sound hardware */ |
| 433 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 434 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 435 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 436 | MACHINE_CONFIG_END |
| 437 | |
| 438 | /*************************************************************************** |
| 439 | |
| 440 | Tomy(tronic) Pac-Man (manufactured in Japan) |
| 176 | 441 | * boards are labeled TN-08 2E108E01 |
| 177 | 442 | * NEC uCOM-43 MCU, labeled D553C 160 |
| 178 | 443 | * cyan/red/green VFD display NEC FIP8AM18T |
| r244652 | r244653 | |
| 184 | 449 | - UK: Puckman (Tomy), and also as Munchman, published by Grandstand |
| 185 | 450 | - Australia: Pac Man-1, published by Futuretronics |
| 186 | 451 | |
| 452 | NOTE!: MESS external artwork is recommended |
| 453 | |
| 187 | 454 | ***************************************************************************/ |
| 188 | 455 | |
| 189 | 456 | static INPUT_PORTS_START( tmpacman ) |
| r244652 | r244653 | |
| 207 | 474 | |
| 208 | 475 | |
| 209 | 476 | |
| 477 | /*************************************************************************** |
| 210 | 478 | |
| 479 | Tomy Alien Chase (manufactured in Japan) |
| 480 | * boards are labeled TN-16 2E121B01 |
| 481 | * NEC uCOM-43 MCU, labeled D553C 258 |
| 482 | * red/green VFD display NEC FIP9AM24T with color overlay, 2-sided* |
| 211 | 483 | |
| 484 | *Player one views the VFD from the front (grid+filament side) while the |
| 485 | opposite player views it from the back side (through the conductive traces), |
| 486 | basically a mirror-image. |
| 212 | 487 | |
| 488 | This is a space-themed tabletop VFD electronic game. To start, simply |
| 489 | press [UP]. Hold a joystick direction to move around. |
| 213 | 490 | |
| 491 | NOTE!: MESS external artwork is recommended |
| 492 | |
| 493 | ***************************************************************************/ |
| 494 | |
| 495 | |
| 496 | |
| 497 | READ8_MEMBER(hh_ucom4_state::alnchase_input_r) |
| 498 | { |
| 499 | // port A: buttons |
| 500 | return read_inputs(2); |
| 501 | } |
| 502 | |
| 503 | WRITE8_MEMBER(hh_ucom4_state::alnchase_display_w) |
| 504 | { |
| 505 | if (offset <= NEC_UCOM4_PORTE) |
| 506 | { |
| 507 | // C/D/E0: vfd matrix grid |
| 508 | int shift = (offset - NEC_UCOM4_PORTC) * 4; |
| 509 | m_grid = (m_grid & ~(0xf << shift)) | (data << shift); |
| 510 | |
| 511 | // C0(grid 0): input enable PL1 |
| 512 | // D0(grid 4): input enable PL2 |
| 513 | m_inp_mux = (m_grid & 1) | (m_grid >> 3 & 2); |
| 514 | } |
| 515 | |
| 516 | if (offset >= NEC_UCOM4_PORTE) |
| 517 | { |
| 518 | // E23/F/G/H/I: vfd matrix plate |
| 519 | int shift = (offset - NEC_UCOM4_PORTE) * 4; |
| 520 | m_plate = ((m_plate << 2 & ~(0xf << shift)) | (data << shift)) >> 2; |
| 521 | } |
| 522 | |
| 523 | display_matrix(17, 9, m_plate, m_grid); |
| 524 | } |
| 525 | |
| 526 | WRITE8_MEMBER(hh_ucom4_state::alnchase_port_e_w) |
| 527 | { |
| 528 | alnchase_display_w(space, offset, data); |
| 529 | |
| 530 | // E1: speaker out |
| 531 | m_speaker->level_w(data >> 1 & 1); |
| 532 | } |
| 533 | |
| 534 | /* physical button layout and labels is like this: |
| 535 | |
| 536 | POWER SOUND LEVEL PLAYER |
| 537 | ON ON PRO TWO START |
| 538 | o o | | |
| 539 | | | | | [joystick] |
| 540 | | | o o |
| 541 | OFF OFF AMA ONE GAME 0,1,2,3 |
| 542 | |
| 543 | 1 PLAYER SIDE |
| 544 | |
| 545 | other player side only has a joystick |
| 546 | */ |
| 547 | |
| 548 | static INPUT_PORTS_START( alnchase ) |
| 549 | PORT_START("IN.0") // C0 port A |
| 550 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) |
| 551 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) |
| 552 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) |
| 553 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) |
| 554 | |
| 555 | PORT_START("IN.1") // D0 port A |
| 556 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) // on non-mirrored view, swap P2 left/right |
| 557 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) // " |
| 558 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) |
| 559 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) |
| 560 | |
| 561 | PORT_START("IN.2") // port B |
| 562 | PORT_CONFNAME( 0x01, 0x01, "Players" ) |
| 563 | PORT_CONFSETTING( 0x01, "1" ) |
| 564 | PORT_CONFSETTING( 0x00, "2" ) |
| 565 | PORT_CONFNAME( 0x02, 0x00, DEF_STR( Difficulty ) ) |
| 566 | PORT_CONFSETTING( 0x00, "Amateur" ) |
| 567 | PORT_CONFSETTING( 0x02, "Professional" ) |
| 568 | PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 569 | INPUT_PORTS_END |
| 570 | |
| 571 | static MACHINE_CONFIG_START( alnchase, hh_ucom4_state ) |
| 572 | |
| 573 | /* basic machine hardware */ |
| 574 | MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz) |
| 575 | MCFG_UCOM4_READ_A_CB(READ8(hh_ucom4_state, alnchase_input_r)) |
| 576 | MCFG_UCOM4_READ_B_CB(IOPORT("IN.2")) |
| 577 | MCFG_UCOM4_WRITE_C_CB(WRITE8(hh_ucom4_state, alnchase_display_w)) |
| 578 | MCFG_UCOM4_WRITE_D_CB(WRITE8(hh_ucom4_state, alnchase_display_w)) |
| 579 | MCFG_UCOM4_WRITE_E_CB(WRITE8(hh_ucom4_state, alnchase_port_e_w)) |
| 580 | MCFG_UCOM4_WRITE_F_CB(WRITE8(hh_ucom4_state, alnchase_display_w)) |
| 581 | MCFG_UCOM4_WRITE_G_CB(WRITE8(hh_ucom4_state, alnchase_display_w)) |
| 582 | MCFG_UCOM4_WRITE_H_CB(WRITE8(hh_ucom4_state, alnchase_display_w)) |
| 583 | MCFG_UCOM4_WRITE_I_CB(WRITE8(hh_ucom4_state, alnchase_display_w)) |
| 584 | |
| 585 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) |
| 586 | MCFG_DEFAULT_LAYOUT(layout_alnchase) |
| 587 | |
| 588 | /* no video! */ |
| 589 | |
| 590 | /* sound hardware */ |
| 591 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 592 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 593 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 594 | MACHINE_CONFIG_END |
| 595 | |
| 596 | |
| 597 | |
| 598 | |
| 599 | |
| 214 | 600 | /*************************************************************************** |
| 215 | 601 | |
| 216 | 602 | Game driver(s) |
| 217 | 603 | |
| 218 | 604 | ***************************************************************************/ |
| 219 | 605 | |
| 606 | ROM_START( edracula ) |
| 607 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 608 | ROM_LOAD( "d553c-206", 0x0000, 0x0800, CRC(b524857b) SHA1(c1c89ed5dd4bb1e6e98462dc8fa5af2aa48d8ede) ) |
| 609 | ROM_END |
| 610 | |
| 611 | |
| 612 | ROM_START( tmtennis ) |
| 613 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 614 | ROM_LOAD( "d552c-048", 0x0000, 0x0400, CRC(78702003) SHA1(4d427d4dbeed901770c682338867f58c7b54eee3) ) |
| 615 | ROM_END |
| 616 | |
| 617 | |
| 618 | |
| 220 | 619 | ROM_START( tmpacman ) |
| 221 | 620 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 222 | 621 | ROM_LOAD( "d553c-160", 0x0000, 0x0800, CRC(b21a8af7) SHA1(e3122be1873ce76a4067386bf250802776f0c2f9) ) |
| 223 | 622 | ROM_END |
| 224 | 623 | |
| 225 | 624 | |
| 226 | | CONS( 1981, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING ) |
| 625 | ROM_START( alnchase ) |
| 626 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 627 | ROM_LOAD( "d553c-258", 0x0000, 0x0800, CRC(c5284ff5) SHA1(6a20aaacc9748f0e0335958f3cea482e36153704) ) |
| 628 | ROM_END |
| 629 | |
| 630 | |
| 631 | |
| 632 | CONS( 1982, edracula, 0, 0, edracula, edracula, driver_device, 0, "Epoch", "Dracula (Epoch)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 633 | |
| 634 | CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
| 635 | CONS( 1982, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING ) |
| 636 | CONS( 1984, alnchase, 0, 0, alnchase, alnchase, driver_device, 0, "Tomy", "Alien Chase", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK ) |
trunk/src/mess/drivers/mbee.c
| r244652 | r244653 | |
| 88 | 88 | 3. At the Basic prompt, type in EDASM press enter. At the memory size |
| 89 | 89 | prompt press enter. Now, make sure the keyboard works properly. |
| 90 | 90 | |
| 91 | How to use the config switch for PIO B7: |
| 92 | - Teleterm: Must use RTC. Anything else makes teleterm go crazy. |
| 93 | - 256TC, 128, 128p: Doesn't seem to matter, leave at the default. |
| 94 | - Standard: Has no effect, best left at "Tied High" |
| 95 | - Other rom-based models: "VS" to make the Telcom clock work, or "Tied high". |
| 96 | - 56k: not sure yet, leave as "Tied high" until more is known. |
| 97 | |
| 98 | How to use programs that need functions keys on models that use the old |
| 99 | keyboard (for example, to run Simply Write on a 128k model). |
| 100 | Press Ctrl+Shift+number, eg for F1 press hold down Ctrl Shift, press 1. |
| 101 | |
| 91 | 102 | *************************************************************************** |
| 92 | 103 | |
| 93 | 104 | TODO/not working: |
| r244652 | r244653 | |
| 108 | 119 | crashes due to a bug in z80pio emulation. |
| 109 | 120 | |
| 110 | 121 | - 256tc: Keyboard ROM U60 needs to be dumped. |
| 111 | | - 128k: GOLD PAL needs to be dumped for the bankswitching. |
| 112 | | - 64k: RED PAL needs to be dumped for the bankswitching. |
| 122 | - 128k, 64k: PALs need to be dumped for the bankswitching. |
| 113 | 123 | |
| 114 | | - Teleterm: keyboard has multiple severe problems. Also, the schematic shows |
| 115 | | it using the old-style keyboard, however this must be wrong since |
| 116 | | the computer has function keys, which are only available on the |
| 117 | | new keyboard. |
| 124 | - Teleterm: keyboard has problems. The schematic shows it using the old-style keyboard, |
| 125 | however it actually uses the new keyboard with interrupts. |
| 118 | 126 | |
| 119 | 127 | - Mouse: a few programs support the use of a serial mouse which interfaced |
| 120 | 128 | directly to the Z80PIO. However there's little info to be found. |
| r244652 | r244653 | |
| 135 | 143 | |
| 136 | 144 | static ADDRESS_MAP_START(mbee_mem, AS_PROGRAM, 8, mbee_state) |
| 137 | 145 | ADDRESS_MAP_UNMAP_HIGH |
| 138 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 139 | | AM_RANGE(0x1000, 0x3fff) AM_RAM |
| 140 | | AM_RANGE(0x4000, 0x7fff) AM_WRITENOP // Needed because quickload to here will crash MESS |
| 146 | AM_RANGE(0x0000, 0x3fff) AM_RAM |
| 141 | 147 | AM_RANGE(0x8000, 0xefff) AM_ROM |
| 142 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w) |
| 143 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbee_high_r, mbee_high_w) |
| 148 | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(video_low_r, video_low_w) |
| 149 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(video_high_r, video_high_w) |
| 144 | 150 | ADDRESS_MAP_END |
| 145 | 151 | |
| 146 | 152 | static ADDRESS_MAP_START(mbeeic_mem, AS_PROGRAM, 8, mbee_state) |
| 147 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 148 | | AM_RANGE(0x1000, 0x7fff) AM_RAM |
| 153 | AM_RANGE(0x0000, 0x7fff) AM_RAM |
| 149 | 154 | AM_RANGE(0x8000, 0xbfff) AM_ROM |
| 150 | 155 | AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("pak") |
| 151 | 156 | AM_RANGE(0xe000, 0xefff) AM_ROM |
| 152 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w) |
| 153 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeic_high_r, mbeeic_high_w) |
| 157 | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(video_low_r, video_low_w) |
| 158 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(video_high_r, video_high_w) |
| 154 | 159 | ADDRESS_MAP_END |
| 155 | 160 | |
| 156 | 161 | static ADDRESS_MAP_START(mbeepc_mem, AS_PROGRAM, 8, mbee_state) |
| 157 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 158 | | AM_RANGE(0x1000, 0x7fff) AM_RAM |
| 162 | AM_RANGE(0x0000, 0x7fff) AM_RAM |
| 159 | 163 | AM_RANGE(0x8000, 0xbfff) AM_ROM |
| 160 | 164 | AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("pak") |
| 161 | 165 | AM_RANGE(0xe000, 0xefff) AM_ROMBANK("telcom") |
| 162 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w) |
| 163 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeic_high_r, mbeeic_high_w) |
| 166 | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(video_low_r, video_low_w) |
| 167 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(video_high_r, video_high_w) |
| 164 | 168 | ADDRESS_MAP_END |
| 165 | 169 | |
| 166 | | static ADDRESS_MAP_START(mbeepc85_mem, AS_PROGRAM, 8, mbee_state) |
| 167 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 168 | | AM_RANGE(0x1000, 0x7fff) AM_RAM |
| 169 | | AM_RANGE(0x8000, 0xbfff) AM_ROM |
| 170 | | AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("pak") |
| 171 | | AM_RANGE(0xe000, 0xefff) AM_ROMBANK("telcom") |
| 172 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w) |
| 173 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeic_high_r, mbeeic_high_w) |
| 174 | | ADDRESS_MAP_END |
| 175 | | |
| 176 | 170 | static ADDRESS_MAP_START(mbeeppc_mem, AS_PROGRAM, 8, mbee_state) |
| 177 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 178 | | AM_RANGE(0x1000, 0x7fff) AM_RAM |
| 171 | AM_RANGE(0x0000, 0x7fff) AM_RAM |
| 179 | 172 | AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("basic") |
| 180 | 173 | AM_RANGE(0xa000, 0xbfff) AM_ROM |
| 181 | 174 | AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("pak") |
| 182 | 175 | AM_RANGE(0xe000, 0xefff) AM_ROMBANK("telcom") |
| 183 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbeeppc_low_r, mbeeppc_low_w) |
| 184 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeppc_high_r, mbeeppc_high_w) |
| 176 | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(video_low_r, video_low_w) |
| 177 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(video_high_r, video_high_w) |
| 185 | 178 | ADDRESS_MAP_END |
| 186 | 179 | |
| 187 | 180 | static ADDRESS_MAP_START(mbee56_mem, AS_PROGRAM, 8, mbee_state) |
| 188 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 189 | | AM_RANGE(0x1000, 0xdfff) AM_RAM |
| 181 | AM_RANGE(0x0000, 0xdfff) AM_RAM |
| 190 | 182 | AM_RANGE(0xe000, 0xefff) AM_ROM |
| 191 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w) |
| 192 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeic_high_r, mbeeic_high_w) |
| 183 | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(video_low_r, video_low_w) |
| 184 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(video_high_r, video_high_w) |
| 193 | 185 | ADDRESS_MAP_END |
| 194 | 186 | |
| 195 | 187 | static ADDRESS_MAP_START(mbee256_mem, AS_PROGRAM, 8, mbee_state) |
| r244652 | r244653 | |
| 212 | 204 | ADDRESS_MAP_END |
| 213 | 205 | |
| 214 | 206 | static ADDRESS_MAP_START(mbeett_mem, AS_PROGRAM, 8, mbee_state) |
| 215 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 216 | | AM_RANGE(0x1000, 0x7fff) AM_RAM |
| 207 | AM_RANGE(0x0000, 0x7fff) AM_RAM |
| 217 | 208 | AM_RANGE(0x8000, 0x9fff) AM_ROM |
| 218 | 209 | AM_RANGE(0xa000, 0xbfff) AM_RAM |
| 219 | 210 | AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("pak") |
| 220 | 211 | AM_RANGE(0xe000, 0xefff) AM_ROMBANK("telcom") |
| 221 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbeeppc_low_r, mbeeppc_low_w) |
| 222 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeppc_high_r, mbeeppc_high_w) |
| 212 | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(video_low_r, video_low_w) |
| 213 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(video_high_r, video_high_w) |
| 223 | 214 | ADDRESS_MAP_END |
| 224 | 215 | |
| 225 | 216 | static ADDRESS_MAP_START(mbee_io, AS_IO, 8, mbee_state) |
| 226 | 217 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 227 | 218 | ADDRESS_MAP_UNMAP_HIGH |
| 228 | 219 | AM_RANGE(0x00, 0x03) AM_MIRROR(0x10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 229 | | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 220 | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_WRITE(port0b_w) |
| 230 | 221 | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 231 | 222 | AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 232 | 223 | ADDRESS_MAP_END |
| r244652 | r244653 | |
| 235 | 226 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 236 | 227 | ADDRESS_MAP_UNMAP_HIGH |
| 237 | 228 | AM_RANGE(0x00, 0x03) AM_MIRROR(0x10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 238 | | AM_RANGE(0x08, 0x08) AM_MIRROR(0x10) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 239 | | AM_RANGE(0x09, 0x09) AM_MIRROR(0x10) AM_NOP /* Listed as "Colour Wait Off" or "USART 2651" but doesn't appear in the schematics */ |
| 240 | | AM_RANGE(0x0a, 0x0a) AM_MIRROR(0x10) AM_READWRITE(mbeeic_0a_r, mbeeic_0a_w) |
| 241 | | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 229 | AM_RANGE(0x08, 0x08) AM_MIRROR(0x10) AM_READWRITE(port08_r, port08_w) |
| 230 | AM_RANGE(0x09, 0x09) AM_WRITENOP /* Listed as "Colour Wait Off" or "USART 2651" but doesn't appear in the schematics */ |
| 231 | AM_RANGE(0x0a, 0x0a) AM_MIRROR(0x10) AM_WRITE(port0a_w) |
| 232 | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_WRITE(port0b_w) |
| 242 | 233 | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 243 | 234 | AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 244 | 235 | ADDRESS_MAP_END |
| r244652 | r244653 | |
| 246 | 237 | static ADDRESS_MAP_START(mbeepc_io, AS_IO, 8, mbee_state) |
| 247 | 238 | ADDRESS_MAP_UNMAP_HIGH |
| 248 | 239 | AM_RANGE(0x0000, 0x0003) AM_MIRROR(0xff10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 249 | | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 250 | | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_low_r, mbeeic_0a_w) |
| 251 | | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 240 | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(port08_r, port08_w) |
| 241 | AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITENOP |
| 242 | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_WRITE(port0b_w) |
| 252 | 243 | AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff10) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 253 | 244 | AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 254 | | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_high_r, mbeeic_0a_w) |
| 245 | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_low_r, port0a_w) |
| 246 | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_high_r, port0a_w) |
| 255 | 247 | ADDRESS_MAP_END |
| 256 | 248 | |
| 257 | | static ADDRESS_MAP_START(mbeepc85_io, AS_IO, 8, mbee_state) |
| 249 | static ADDRESS_MAP_START(mbeeppc_io, AS_IO, 8, mbee_state) |
| 258 | 250 | ADDRESS_MAP_UNMAP_HIGH |
| 259 | 251 | AM_RANGE(0x0000, 0x0003) AM_MIRROR(0xff10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 260 | | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 261 | | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_low_r, mbeeic_0a_w) |
| 262 | | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 263 | | AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff10) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 252 | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(port08_r, port08_w) |
| 253 | AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITENOP |
| 254 | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_WRITE(port0b_w) |
| 255 | AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 264 | 256 | AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 265 | | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_high_r, mbeeic_0a_w) |
| 257 | AM_RANGE(0x001c, 0x001c) AM_MIRROR(0xff00) AM_READWRITE(port1c_r, port1c_w) |
| 258 | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_low_r, port0a_w) |
| 259 | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_high_r, port0a_w) |
| 266 | 260 | ADDRESS_MAP_END |
| 267 | 261 | |
| 268 | | static ADDRESS_MAP_START(mbeeppc_io, AS_IO, 8, mbee_state) |
| 262 | static ADDRESS_MAP_START(mbeett_io, AS_IO, 8, mbee_state) |
| 269 | 263 | ADDRESS_MAP_UNMAP_HIGH |
| 270 | | AM_RANGE(0x0000, 0x0003) AM_MIRROR(0xff10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 271 | | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 272 | | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_low_r, mbeeic_0a_w) |
| 273 | | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 264 | AM_RANGE(0x0000, 0x0003) AM_MIRROR(0xff00) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 265 | AM_RANGE(0x0004, 0x0004) AM_MIRROR(0xff00) AM_WRITE(port04_w) |
| 266 | AM_RANGE(0x0006, 0x0006) AM_MIRROR(0xff00) AM_WRITE(port06_w) |
| 267 | AM_RANGE(0x0007, 0x0007) AM_MIRROR(0xff00) AM_READ(port07_r) |
| 268 | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_READWRITE(port08_r, port08_w) |
| 269 | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff00) AM_WRITE(port0b_w) |
| 274 | 270 | AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 275 | | AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 276 | | AM_RANGE(0x001c, 0x001c) AM_MIRROR(0xff00) AM_READWRITE(mbeeppc_1c_r, mbeeppc_1c_w) |
| 277 | | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_high_r, mbeeic_0a_w) |
| 271 | AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 272 | AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_READ(port18_r) |
| 273 | AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_READWRITE(port1c_r, port1c_w) |
| 274 | AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xfe00) AM_READ(speed_low_r) |
| 275 | AM_RANGE(0x0109, 0x0109) AM_MIRROR(0xfe00) AM_READ(speed_high_r) |
| 276 | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe00) AM_READWRITE(telcom_low_r, port0a_w) |
| 277 | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe00) AM_READWRITE(telcom_high_r, port0a_w) |
| 278 | AM_RANGE(0x0068, 0x006f) AM_MIRROR(0xff00) AM_DEVREADWRITE("scc", scc8530_t, reg_r, reg_w) |
| 278 | 279 | ADDRESS_MAP_END |
| 279 | 280 | |
| 280 | 281 | static ADDRESS_MAP_START(mbee56_io, AS_IO, 8, mbee_state) |
| 281 | 282 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 282 | 283 | ADDRESS_MAP_UNMAP_HIGH |
| 283 | | AM_RANGE(0x00, 0x03) AM_MIRROR(0x10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 284 | | AM_RANGE(0x08, 0x08) AM_MIRROR(0x10) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 285 | | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 286 | | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 287 | | AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 284 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 285 | AM_RANGE(0x08, 0x08) AM_READWRITE(port08_r, port08_w) |
| 286 | AM_RANGE(0x09, 0x09) AM_WRITENOP |
| 287 | AM_RANGE(0x0b, 0x0b) AM_WRITE(port0b_w) |
| 288 | AM_RANGE(0x0c, 0x0c) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 289 | AM_RANGE(0x0d, 0x0d) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 288 | 290 | AM_RANGE(0x44, 0x47) AM_DEVREADWRITE("fdc", wd2793_t, read, write) |
| 289 | 291 | AM_RANGE(0x48, 0x4f) AM_READWRITE(fdc_status_r, fdc_motor_w) |
| 290 | 292 | ADDRESS_MAP_END |
| r244652 | r244653 | |
| 293 | 295 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 294 | 296 | ADDRESS_MAP_UNMAP_HIGH |
| 295 | 297 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 296 | | AM_RANGE(0x04, 0x04) AM_WRITE(mbee_04_w) |
| 297 | | AM_RANGE(0x06, 0x06) AM_WRITE(mbee_06_w) |
| 298 | | AM_RANGE(0x07, 0x07) AM_READ(mbee_07_r) |
| 299 | | AM_RANGE(0x08, 0x08) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 300 | | AM_RANGE(0x0b, 0x0b) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 298 | AM_RANGE(0x04, 0x04) AM_WRITE(port04_w) |
| 299 | AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) |
| 300 | AM_RANGE(0x07, 0x07) AM_READ(port07_r) |
| 301 | AM_RANGE(0x08, 0x08) AM_READWRITE(port08_r, port08_w) |
| 302 | AM_RANGE(0x09, 0x09) AM_WRITENOP |
| 303 | AM_RANGE(0x0b, 0x0b) AM_WRITE(port0b_w) |
| 301 | 304 | AM_RANGE(0x0c, 0x0c) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 302 | 305 | AM_RANGE(0x0d, 0x0d) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 303 | | AM_RANGE(0x1c, 0x1f) AM_READWRITE(mbeeppc_1c_r, mbee256_1c_w) |
| 306 | AM_RANGE(0x1c, 0x1f) AM_READWRITE(port1c_r, port1c_w) |
| 304 | 307 | AM_RANGE(0x44, 0x47) AM_DEVREADWRITE("fdc", wd2793_t, read, write) |
| 305 | 308 | AM_RANGE(0x48, 0x4f) AM_READWRITE(fdc_status_r, fdc_motor_w) |
| 306 | 309 | AM_RANGE(0x50, 0x57) AM_WRITE(mbee128_50_w) |
| r244652 | r244653 | |
| 309 | 312 | static ADDRESS_MAP_START(mbee256_io, AS_IO, 8, mbee_state) |
| 310 | 313 | ADDRESS_MAP_UNMAP_HIGH |
| 311 | 314 | AM_RANGE(0x0000, 0x0003) AM_MIRROR(0xff00) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 312 | | AM_RANGE(0x0004, 0x0004) AM_MIRROR(0xff00) AM_WRITE(mbee_04_w) |
| 313 | | AM_RANGE(0x0006, 0x0006) AM_MIRROR(0xff00) AM_WRITE(mbee_06_w) |
| 314 | | AM_RANGE(0x0007, 0x0007) AM_MIRROR(0xff00) AM_READ(mbee_07_r) |
| 315 | | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 316 | | AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xfd00) AM_READ(mbee256_speed_low_r) |
| 317 | | AM_RANGE(0x0209, 0x0209) AM_MIRROR(0xfd00) AM_READ(mbee256_speed_high_r) |
| 318 | | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff00) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 315 | AM_RANGE(0x0004, 0x0004) AM_MIRROR(0xff00) AM_WRITE(port04_w) |
| 316 | AM_RANGE(0x0006, 0x0006) AM_MIRROR(0xff00) AM_WRITE(port06_w) |
| 317 | AM_RANGE(0x0007, 0x0007) AM_MIRROR(0xff00) AM_READ(port07_r) |
| 318 | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_READWRITE(port08_r, port08_w) |
| 319 | AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xfd00) AM_READ(speed_low_r) |
| 320 | AM_RANGE(0x0209, 0x0209) AM_MIRROR(0xfd00) AM_READ(speed_high_r) |
| 321 | AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITENOP |
| 322 | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff00) AM_WRITE(port0b_w) |
| 319 | 323 | AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 320 | 324 | AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 321 | 325 | // AM_RANGE(0x0010, 0x0013) AM_MIRROR(0xff00) Optional SN76489AN audio chip |
| 322 | | AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_READ(mbee256_18_r) |
| 323 | | AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_READWRITE(mbeeppc_1c_r, mbee256_1c_w) |
| 326 | AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_READ(port18_r) |
| 327 | AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_READWRITE(port1c_r, port1c_w) |
| 324 | 328 | AM_RANGE(0x0044, 0x0047) AM_MIRROR(0xff00) AM_DEVREADWRITE("fdc", wd2793_t, read, write) |
| 325 | 329 | AM_RANGE(0x0048, 0x004f) AM_MIRROR(0xff00) AM_READWRITE(fdc_status_r, fdc_motor_w) |
| 326 | 330 | AM_RANGE(0x0050, 0x0057) AM_MIRROR(0xff00) AM_WRITE(mbee256_50_w) |
| r244652 | r244653 | |
| 329 | 333 | // AM_RANGE(0x0068, 0x006f) AM_MIRROR(0xff00) Reserved for 8530 SCC (unused) |
| 330 | 334 | ADDRESS_MAP_END |
| 331 | 335 | |
| 332 | | static ADDRESS_MAP_START(mbeett_io, AS_IO, 8, mbee_state) |
| 333 | | ADDRESS_MAP_UNMAP_HIGH |
| 334 | | AM_RANGE(0x0000, 0x0003) AM_MIRROR(0xff00) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 335 | | AM_RANGE(0x0004, 0x0004) AM_MIRROR(0xff00) AM_WRITE(mbee_04_w) |
| 336 | | AM_RANGE(0x0006, 0x0006) AM_MIRROR(0xff00) AM_WRITE(mbee_06_w) |
| 337 | | AM_RANGE(0x0007, 0x0007) AM_MIRROR(0xff00) AM_READ(mbee_07_r) |
| 338 | | AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 339 | | AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff00) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 340 | | AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 341 | | AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 342 | | AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_READ(mbee256_18_r) |
| 343 | | AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_READWRITE(mbeeppc_1c_r,mbee256_1c_w) |
| 344 | | AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_low_r, mbeeic_0a_w) |
| 345 | | AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(mbeepc_telcom_high_r, mbeeic_0a_w) |
| 346 | | // AM_RANGE(0x0068, 0x006f) AM_MIRROR(0xff00) 8530 SCC |
| 347 | | ADDRESS_MAP_END |
| 348 | | |
| 349 | 336 | static INPUT_PORTS_START( mbee ) |
| 350 | 337 | PORT_START("X.0") /* IN0 KEY ROW 0 [000] */ |
| 351 | 338 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('@') PORT_CHAR('`') |
| r244652 | r244653 | |
| 419 | 406 | |
| 420 | 407 | PORT_START("X.7") /* IN7 KEY ROW 7 [380] */ |
| 421 | 408 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Up)") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 422 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) |
| 409 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) |
| 423 | 410 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Down)") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 424 | 411 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Left)") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 425 | 412 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| r244652 | r244653 | |
| 444 | 431 | PORT_CONFNAME( 0xc0, 0x80, "PIO B7") |
| 445 | 432 | PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock |
| 446 | 433 | PORT_CONFSETTING( 0x40, "RTC") // optional board usually not fitted |
| 447 | | PORT_CONFSETTING( 0x80, "Not used") // default resistor to vcc |
| 448 | | PORT_CONFSETTING( 0xc0, "Centronics") // busy line |
| 434 | PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc |
| 435 | PORT_CONFSETTING( 0xc0, "Reserved for net") |
| 449 | 436 | INPUT_PORTS_END |
| 450 | 437 | |
| 451 | 438 | static INPUT_PORTS_START( mbee256 ) |
| r244652 | r244653 | |
| 576 | 563 | PORT_CONFSETTING( 0x00, DEF_STR(No)) |
| 577 | 564 | PORT_CONFSETTING( 0x01, DEF_STR(Yes)) |
| 578 | 565 | // Wire links on motherboard |
| 579 | | PORT_CONFNAME( 0xc0, 0x80, "PIO B7") // default - do nothing |
| 566 | PORT_CONFNAME( 0xc0, 0x40, "PIO B7") |
| 580 | 567 | PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock |
| 581 | | PORT_CONFSETTING( 0x40, "RTC") // optional board usually not fitted |
| 582 | | PORT_CONFSETTING( 0x80, "Not used") // default resistor to vcc |
| 583 | | PORT_CONFSETTING( 0xc0, "Centronics") // busy line |
| 568 | PORT_CONFSETTING( 0x40, "RTC") // RTC IRQ must be used on teleterm |
| 569 | PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc |
| 570 | PORT_CONFSETTING( 0xc0, "Reserved for net") |
| 584 | 571 | INPUT_PORTS_END |
| 585 | 572 | |
| 586 | 573 | static const z80_daisy_config mbee_daisy_chain[] = |
| r244652 | r244653 | |
| 744 | 731 | MCFG_CPU_IO_MAP(mbeepc_io) |
| 745 | 732 | MACHINE_CONFIG_END |
| 746 | 733 | |
| 747 | | static MACHINE_CONFIG_DERIVED( mbeepc85, mbeeic ) |
| 748 | | MCFG_CPU_MODIFY( "maincpu" ) |
| 749 | | MCFG_CPU_PROGRAM_MAP(mbeepc85_mem) |
| 750 | | MCFG_CPU_IO_MAP(mbeepc85_io) |
| 751 | | MACHINE_CONFIG_END |
| 752 | | |
| 753 | | static MACHINE_CONFIG_DERIVED( mbeepc85b, mbeepc85 ) |
| 734 | static MACHINE_CONFIG_DERIVED( mbeepc85b, mbeepc ) |
| 754 | 735 | MCFG_PALETTE_MODIFY("palette") |
| 755 | 736 | MCFG_PALETTE_INIT_OWNER(mbee_state, mbeepc85b) |
| 756 | 737 | MACHINE_CONFIG_END |
| r244652 | r244653 | |
| 764 | 745 | MCFG_PALETTE_MODIFY("palette") |
| 765 | 746 | MCFG_PALETTE_ENTRIES(16) |
| 766 | 747 | MCFG_PALETTE_INIT_OWNER(mbee_state, premium) |
| 748 | MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz ) |
| 749 | MCFG_MC146818_IRQ_HANDLER(WRITELINE(mbee_state, rtc_irq_w)) |
| 767 | 750 | MACHINE_CONFIG_END |
| 768 | 751 | |
| 769 | 752 | static MACHINE_CONFIG_DERIVED( mbee56, mbeeic ) |
| r244652 | r244653 | |
| 784 | 767 | MCFG_CPU_IO_MAP(mbee128_io) |
| 785 | 768 | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128) |
| 786 | 769 | MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz ) |
| 770 | MCFG_MC146818_IRQ_HANDLER(WRITELINE(mbee_state, rtc_irq_w)) |
| 787 | 771 | MACHINE_CONFIG_END |
| 788 | 772 | |
| 789 | 773 | static MACHINE_CONFIG_DERIVED( mbee128p, mbeeppc ) |
| r244652 | r244653 | |
| 791 | 775 | MCFG_CPU_PROGRAM_MAP(mbee256_mem) |
| 792 | 776 | MCFG_CPU_IO_MAP(mbee128_io) |
| 793 | 777 | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128) |
| 794 | | MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz ) |
| 795 | 778 | MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4) |
| 796 | 779 | MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(mbee_state, fdc_intrq_w)) |
| 797 | 780 | MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(mbee_state, fdc_drq_w)) |
| r244652 | r244653 | |
| 816 | 799 | MCFG_CPU_PROGRAM_MAP(mbeett_mem) |
| 817 | 800 | MCFG_CPU_IO_MAP(mbeett_io) |
| 818 | 801 | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbeett) |
| 819 | | MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz ) |
| 802 | MCFG_DEVICE_REMOVE("quickload") |
| 803 | MCFG_DEVICE_REMOVE("quickload2") |
| 804 | MCFG_DEVICE_ADD("scc", SCC8530, 4000000) // clock unknown |
| 820 | 805 | MACHINE_CONFIG_END |
| 821 | 806 | |
| 822 | 807 | /* Unused roms: |
| r244652 | r244653 | |
| 1152 | 1137 | COMP( 1982, mbee, 0, 0, mbee, mbee, mbee_state, mbee, "Applied Technology", "Microbee 16 Standard" , 0 ) |
| 1153 | 1138 | COMP( 1982, mbeeic, mbee, 0, mbeeic, mbee, mbee_state, mbeeic, "Applied Technology", "Microbee 32 IC" , 0 ) |
| 1154 | 1139 | COMP( 1982, mbeepc, mbee, 0, mbeepc, mbee, mbee_state, mbeepc, "Applied Technology", "Microbee Personal Communicator" , 0 ) |
| 1155 | | COMP( 1985, mbeepc85, mbee, 0, mbeepc85, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85" , 0 ) |
| 1140 | COMP( 1985, mbeepc85, mbee, 0, mbeepc, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85" , 0 ) |
| 1156 | 1141 | COMP( 1985, mbeepc85b,mbee, 0, mbeepc85b,mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85 (New version)" , 0 ) |
| 1157 | | COMP( 1985, mbeepc85s,mbee, 0, mbeepc85, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85 (Swedish)" , 0 ) |
| 1142 | COMP( 1985, mbeepc85s,mbee, 0, mbeepc, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85 (Swedish)" , 0 ) |
| 1158 | 1143 | COMP( 1986, mbeeppc, mbee, 0, mbeeppc, mbee, mbee_state, mbeeppc, "Applied Technology", "Microbee Premium PC85" , 0 ) |
| 1159 | 1144 | COMP( 1986, mbeett, mbee, 0, mbeett, mbee256, mbee_state, mbeett, "Applied Technology", "Microbee Teleterm" , GAME_NOT_WORKING ) |
| 1160 | 1145 | COMP( 1986, mbee56, mbee, 0, mbee56, mbee, mbee_state, mbee56, "Applied Technology", "Microbee 56k" , GAME_NOT_WORKING ) |
trunk/src/mess/machine/mbee.c
| r244652 | r244653 | |
| 20 | 20 | case TIMER_MBEE_NEWKB: |
| 21 | 21 | timer_newkb(ptr, param); |
| 22 | 22 | break; |
| 23 | | case TIMER_MBEE_RTC_IRQ: |
| 24 | | timer_rtc_irq(ptr, param); |
| 25 | | break; |
| 26 | | case TIMER_MBEE_BOOT: |
| 27 | | timer_boot(ptr, param); |
| 28 | | break; |
| 29 | 23 | default: |
| 30 | 24 | assert_always(FALSE, "Unknown id in mbee_state::device_timer"); |
| 31 | 25 | } |
| r244652 | r244653 | |
| 46 | 40 | WRITE8_MEMBER( mbee_state::pio_port_b_w ) |
| 47 | 41 | { |
| 48 | 42 | /* PIO port B - d5..d2 not emulated |
| 49 | | d7 network interrupt (microbee network for classrooms) |
| 43 | d7 interrupt from network or rtc or vsync or not used (see config switch) |
| 50 | 44 | d6 speaker |
| 51 | 45 | d5 rs232 output (1=mark) |
| 52 | 46 | d4 rs232 input (0=mark) |
| 53 | 47 | d3 rs232 CTS (0=clear to send) |
| 54 | 48 | d2 rs232 clock or DTR |
| 55 | | d1 cass out and (on 256tc) keyboard irq |
| 49 | d1 cass out and (on new keyboard) keyboard irq |
| 56 | 50 | d0 cass in */ |
| 57 | 51 | |
| 58 | | m_cassette->output((data & 0x02) ? -1.0 : +1.0); |
| 59 | | |
| 52 | m_cassette->output(BIT(data, 1) ? -1.0 : +1.0); |
| 60 | 53 | m_speaker->level_w(BIT(data, 6)); |
| 61 | 54 | }; |
| 62 | 55 | |
| r244652 | r244653 | |
| 64 | 57 | { |
| 65 | 58 | UINT8 data = 0; |
| 66 | 59 | |
| 67 | | if (m_cassette->input() > 0.03) data |= 1; |
| 60 | if (m_cassette->input() > 0.03) |
| 61 | data |= 1; |
| 68 | 62 | |
| 69 | 63 | data |= 8; // CTS held high via resistor. If low, the disk-based models think a mouse is plugged in. |
| 70 | 64 | |
| 71 | | if (m_is_mbeett) |
| 65 | switch (m_io_config->read() & 0xc0) |
| 72 | 66 | { |
| 73 | | if (m_b2) |
| 74 | | data |= 0x82; |
| 75 | | else |
| 67 | case 0x00: |
| 68 | data |= (UINT8)m_b7_vs << 7; |
| 69 | break; |
| 70 | case 0x40: |
| 71 | data |= (UINT8)m_b7_rtc << 7; |
| 72 | break; |
| 73 | case 0x80: |
| 76 | 74 | data |= 0x80; |
| 75 | break; |
| 77 | 76 | } |
| 78 | | else |
| 79 | | { |
| 80 | | switch (m_io_config->read() & 0xc0) |
| 81 | | { |
| 82 | | case 0x00: |
| 83 | | data |= (UINT8)m_b7_vs << 7; |
| 84 | | break; |
| 85 | | case 0x40: |
| 86 | | data |= (UINT8)m_b7_rtc << 7; |
| 87 | | break; |
| 88 | | case 0x80: |
| 89 | | data |= 0x80; |
| 90 | | break; |
| 91 | | case 0xc0: |
| 92 | | data |= 0x80; // centronics busy line - FIXME |
| 93 | | break; |
| 94 | | } |
| 95 | | data |= (UINT8)m_b2 << 1; // key pressed on new keyboard |
| 96 | | } |
| 77 | data |= (UINT8)m_b2 << 1; // key pressed on new keyboard |
| 97 | 78 | |
| 98 | 79 | return data; |
| 99 | 80 | } |
| r244652 | r244653 | |
| 194 | 175 | |
| 195 | 176 | // if anything queued, cause an interrupt |
| 196 | 177 | if (m_mbee256_q_pos) |
| 197 | | { |
| 198 | 178 | m_b2 = 1; // set irq |
| 199 | | //breaks keyboard m_pio->port_b_write(pio_port_b_r(generic_space(),0,0xff)); |
| 200 | | } |
| 201 | 179 | |
| 202 | | timer_set(attotime::from_hz(25), TIMER_MBEE_NEWKB); |
| 180 | if (m_b2) |
| 181 | m_pio->port_b_write(pio_port_b_r(generic_space(),0,0xff)); |
| 182 | |
| 183 | timer_set(attotime::from_hz(10), TIMER_MBEE_NEWKB); |
| 203 | 184 | } |
| 204 | 185 | |
| 205 | | READ8_MEMBER( mbee_state::mbee256_18_r ) |
| 186 | READ8_MEMBER( mbee_state::port18_r ) |
| 206 | 187 | { |
| 207 | 188 | UINT8 i, data = m_mbee256_q[0]; // get oldest key |
| 208 | 189 | |
| r244652 | r244653 | |
| 223 | 204 | |
| 224 | 205 | ************************************************************/ |
| 225 | 206 | |
| 226 | | READ8_MEMBER( mbee_state::mbee256_speed_low_r ) |
| 207 | READ8_MEMBER( mbee_state::speed_low_r ) |
| 227 | 208 | { |
| 228 | 209 | m_maincpu->set_unscaled_clock(3375000); |
| 229 | 210 | return 0xff; |
| 230 | 211 | } |
| 231 | 212 | |
| 232 | | READ8_MEMBER( mbee_state::mbee256_speed_high_r ) |
| 213 | READ8_MEMBER( mbee_state::speed_high_r ) |
| 233 | 214 | { |
| 234 | 215 | m_maincpu->set_unscaled_clock(6750000); |
| 235 | 216 | return 0xff; |
| r244652 | r244653 | |
| 243 | 224 | |
| 244 | 225 | ************************************************************/ |
| 245 | 226 | |
| 246 | | WRITE8_MEMBER( mbee_state::mbee_04_w ) // address |
| 227 | WRITE8_MEMBER( mbee_state::port04_w ) // address |
| 247 | 228 | { |
| 248 | 229 | m_rtc->write(space, 0, data); |
| 249 | 230 | } |
| 250 | 231 | |
| 251 | | WRITE8_MEMBER( mbee_state::mbee_06_w ) // write |
| 232 | WRITE8_MEMBER( mbee_state::port06_w ) // write |
| 252 | 233 | { |
| 253 | 234 | m_rtc->write(space, 1, data); |
| 254 | 235 | } |
| 255 | 236 | |
| 256 | | READ8_MEMBER( mbee_state::mbee_07_r ) // read |
| 237 | READ8_MEMBER( mbee_state::port07_r ) // read |
| 257 | 238 | { |
| 258 | 239 | return m_rtc->read(space, 1); |
| 259 | 240 | } |
| 260 | 241 | |
| 261 | | // This doesn't seem to do anything; the time works without it. |
| 262 | | TIMER_CALLBACK_MEMBER( mbee_state::timer_rtc_irq ) |
| 242 | // See it work: Run mbeett, choose RTC in the config switches, run the F3 test, press Esc. |
| 243 | WRITE_LINE_MEMBER( mbee_state::rtc_irq_w ) |
| 263 | 244 | { |
| 264 | | if (!m_rtc) |
| 265 | | return; |
| 245 | m_b7_rtc = (state) ? 0 : 1; // inverted by IC15 (pins 8,9,10) |
| 266 | 246 | |
| 267 | | UINT8 data = m_rtc->read(m_maincpu->space(AS_IO), 12); |
| 268 | | m_b7_rtc = (data) ? 1 : 0; |
| 269 | | |
| 270 | 247 | if ((m_io_config->read() & 0xc0) == 0x40) // RTC selected in config menu |
| 271 | 248 | m_pio->port_b_write(pio_port_b_r(generic_space(),0,0xff)); |
| 272 | | |
| 273 | | timer_set(attotime::from_hz(10), TIMER_MBEE_RTC_IRQ); |
| 274 | 249 | } |
| 275 | 250 | |
| 276 | 251 | |
| r244652 | r244653 | |
| 327 | 302 | if (!BIT(b_byte, 4)) |
| 328 | 303 | { |
| 329 | 304 | // select video |
| 330 | | if (m_is_premium) |
| 331 | | { |
| 332 | | mem.install_read_handler (b_vid, b_vid + 0x7ff, read8_delegate(FUNC(mbee_state::mbeeppc_low_r), this)); |
| 333 | | mem.install_read_handler (b_vid + 0x800, b_vid + 0xfff, read8_delegate(FUNC(mbee_state::mbeeppc_high_r), this)); |
| 334 | | } |
| 335 | | else |
| 336 | | { |
| 337 | | mem.install_read_handler (b_vid, b_vid + 0x7ff, read8_delegate(FUNC(mbee_state::mbee_low_r), this)); |
| 338 | | mem.install_read_handler (b_vid + 0x800, b_vid + 0xfff, read8_delegate(FUNC(mbee_state::mbeeic_high_r), this)); |
| 339 | | } |
| 305 | mem.install_read_handler (b_vid, b_vid + 0x7ff, read8_delegate(FUNC(mbee_state::video_low_r), this)); |
| 306 | mem.install_read_handler (b_vid + 0x800, b_vid + 0xfff, read8_delegate(FUNC(mbee_state::video_high_r), this)); |
| 340 | 307 | } |
| 341 | 308 | else |
| 342 | 309 | { |
| r244652 | r244653 | |
| 367 | 334 | if (!BIT(b_byte, 4)) |
| 368 | 335 | { |
| 369 | 336 | // select video |
| 370 | | if (m_is_premium) |
| 371 | | { |
| 372 | | mem.install_write_handler (b_vid, b_vid + 0x7ff, write8_delegate(FUNC(mbee_state::mbeeppc_low_w), this)); |
| 373 | | mem.install_write_handler (b_vid + 0x800, b_vid + 0xfff, write8_delegate(FUNC(mbee_state::mbeeppc_high_w), this)); |
| 374 | | } |
| 375 | | else |
| 376 | | { |
| 377 | | mem.install_write_handler (b_vid, b_vid + 0x7ff, write8_delegate(FUNC(mbee_state::mbee_low_w), this)); |
| 378 | | mem.install_write_handler (b_vid + 0x800, b_vid + 0xfff, write8_delegate(FUNC(mbee_state::mbeeic_high_w), this)); |
| 379 | | } |
| 337 | mem.install_write_handler (b_vid, b_vid + 0x7ff, write8_delegate(FUNC(mbee_state::video_low_w), this)); |
| 338 | mem.install_write_handler (b_vid + 0x800, b_vid + 0xfff, write8_delegate(FUNC(mbee_state::video_high_w), this)); |
| 380 | 339 | } |
| 381 | 340 | else |
| 382 | 341 | { |
| r244652 | r244653 | |
| 433 | 392 | |
| 434 | 393 | ************************************************************/ |
| 435 | 394 | |
| 436 | | READ8_MEMBER( mbee_state::mbeeic_0a_r ) |
| 395 | WRITE8_MEMBER( mbee_state::port0a_w ) |
| 437 | 396 | { |
| 438 | | return m_0a; |
| 439 | | } |
| 440 | | |
| 441 | | WRITE8_MEMBER( mbee_state::mbeeic_0a_w ) |
| 442 | | { |
| 443 | 397 | m_0a = data; |
| 444 | | m_pak->set_entry(data & 15); |
| 398 | |
| 399 | if (m_pak) |
| 400 | m_pak->set_entry(data & 15); |
| 445 | 401 | } |
| 446 | 402 | |
| 447 | | READ8_MEMBER( mbee_state::mbeepc_telcom_low_r ) |
| 403 | READ8_MEMBER( mbee_state::telcom_low_r ) |
| 448 | 404 | { |
| 449 | 405 | /* Read of port 0A - set Telcom rom to first half */ |
| 450 | | m_telcom->set_entry(0); |
| 406 | if (m_telcom) |
| 407 | m_telcom->set_entry(0); |
| 408 | |
| 451 | 409 | return m_0a; |
| 452 | 410 | } |
| 453 | 411 | |
| 454 | | READ8_MEMBER( mbee_state::mbeepc_telcom_high_r ) |
| 412 | READ8_MEMBER( mbee_state::telcom_high_r ) |
| 455 | 413 | { |
| 456 | 414 | /* Read of port 10A - set Telcom rom to 2nd half */ |
| 457 | | m_telcom->set_entry(1); |
| 415 | if (m_telcom) |
| 416 | m_telcom->set_entry(1); |
| 417 | |
| 458 | 418 | return m_0a; |
| 459 | 419 | } |
| 460 | 420 | |
| r244652 | r244653 | |
| 471 | 431 | */ |
| 472 | 432 | |
| 473 | 433 | |
| 474 | | /* after the first 4 bytes have been read from ROM, switch the ram back in */ |
| 475 | | TIMER_CALLBACK_MEMBER( mbee_state::timer_boot ) |
| 434 | void mbee_state::machine_reset_common() |
| 476 | 435 | { |
| 477 | | m_boot->set_entry(0); |
| 478 | | } |
| 479 | | |
| 480 | | void mbee_state::machine_reset_common_disk() |
| 481 | | { |
| 482 | 436 | m_fdc_rq = 0; |
| 437 | m_08 = 0; |
| 438 | m_0a = 0; |
| 439 | m_0b = 0; |
| 440 | m_1c = 0; |
| 441 | |
| 442 | if (m_basic) |
| 443 | m_basic->set_entry(0); |
| 444 | |
| 445 | if (m_telcom) |
| 446 | m_telcom->set_entry(0); |
| 483 | 447 | } |
| 484 | 448 | |
| 485 | 449 | MACHINE_RESET_MEMBER( mbee_state, mbee ) |
| 486 | 450 | { |
| 487 | | m_boot->set_entry(1); |
| 488 | | timer_set(attotime::from_usec(4), TIMER_MBEE_BOOT); |
| 451 | machine_reset_common(); |
| 452 | m_maincpu->set_pc(0x8000); |
| 489 | 453 | } |
| 490 | 454 | |
| 491 | 455 | MACHINE_RESET_MEMBER( mbee_state, mbee56 ) |
| 492 | 456 | { |
| 493 | | machine_reset_common_disk(); |
| 494 | | m_boot->set_entry(1); |
| 495 | | timer_set(attotime::from_usec(4), TIMER_MBEE_BOOT); |
| 457 | machine_reset_common(); |
| 458 | m_maincpu->set_pc(0xE000); |
| 496 | 459 | } |
| 497 | 460 | |
| 498 | 461 | MACHINE_RESET_MEMBER( mbee_state, mbee128 ) |
| 499 | 462 | { |
| 500 | | machine_reset_common_disk(); |
| 463 | machine_reset_common(); |
| 501 | 464 | setup_banks(0, 1, 3); // set banks to default |
| 502 | 465 | m_maincpu->set_pc(0x8000); |
| 503 | 466 | } |
| 504 | 467 | |
| 505 | 468 | MACHINE_RESET_MEMBER( mbee_state, mbee256 ) |
| 506 | 469 | { |
| 507 | | UINT8 i; |
| 508 | | for (i = 0; i < 15; i++) m_mbee256_was_pressed[i] = 0; |
| 509 | 470 | m_mbee256_q_pos = 0; |
| 510 | | machine_reset_common_disk(); |
| 471 | machine_reset_common(); |
| 511 | 472 | setup_banks(0, 1, 7); // set banks to default |
| 512 | 473 | m_maincpu->set_pc(0x8000); |
| 513 | 474 | } |
| 514 | 475 | |
| 515 | 476 | MACHINE_RESET_MEMBER( mbee_state, mbeett ) |
| 516 | 477 | { |
| 517 | | UINT8 i; |
| 518 | | for (i = 0; i < 15; i++) m_mbee256_was_pressed[i] = 0; |
| 519 | 478 | m_mbee256_q_pos = 0; |
| 520 | | m_boot->set_entry(1); |
| 521 | | timer_set(attotime::from_usec(4), TIMER_MBEE_BOOT); |
| 479 | machine_reset_common(); |
| 480 | m_maincpu->set_pc(0x8000); |
| 522 | 481 | } |
| 523 | 482 | |
| 524 | 483 | DRIVER_INIT_MEMBER( mbee_state, mbee ) |
| 525 | 484 | { |
| 526 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 527 | | m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000); |
| 528 | 485 | m_size = 0x4000; |
| 529 | 486 | m_has_oldkb = 1; |
| 530 | 487 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 532 | 489 | |
| 533 | 490 | DRIVER_INIT_MEMBER( mbee_state, mbeeic ) |
| 534 | 491 | { |
| 535 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 536 | | m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000); |
| 537 | | |
| 538 | | RAM = memregion("pakrom")->base(); |
| 492 | UINT8 *RAM = memregion("pakrom")->base(); |
| 539 | 493 | m_pak->configure_entries(0, 16, &RAM[0x0000], 0x2000); |
| 540 | | |
| 541 | 494 | m_pak->set_entry(0); |
| 495 | |
| 542 | 496 | m_size = 0x8000; |
| 543 | 497 | m_has_oldkb = 1; |
| 544 | 498 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 546 | 500 | |
| 547 | 501 | DRIVER_INIT_MEMBER( mbee_state, mbeepc ) |
| 548 | 502 | { |
| 549 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 550 | | m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000); |
| 551 | | |
| 552 | | RAM = memregion("telcomrom")->base(); |
| 503 | UINT8 *RAM = memregion("telcomrom")->base(); |
| 553 | 504 | m_telcom->configure_entries(0, 2, &RAM[0x0000], 0x1000); |
| 554 | 505 | |
| 555 | 506 | RAM = memregion("pakrom")->base(); |
| 556 | 507 | m_pak->configure_entries(0, 16, &RAM[0x0000], 0x2000); |
| 557 | | |
| 558 | 508 | m_pak->set_entry(0); |
| 559 | | m_telcom->set_entry(0); |
| 509 | |
| 560 | 510 | m_size = 0x8000; |
| 561 | 511 | m_has_oldkb = 1; |
| 562 | 512 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 564 | 514 | |
| 565 | 515 | DRIVER_INIT_MEMBER( mbee_state, mbeepc85 ) |
| 566 | 516 | { |
| 567 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 568 | | m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000); |
| 569 | | |
| 570 | | RAM = memregion("telcomrom")->base(); |
| 517 | UINT8 *RAM = memregion("telcomrom")->base(); |
| 571 | 518 | m_telcom->configure_entries(0, 2, &RAM[0x0000], 0x1000); |
| 572 | 519 | |
| 573 | 520 | RAM = memregion("pakrom")->base(); |
| 574 | 521 | m_pak->configure_entries(0, 16, &RAM[0x0000], 0x2000); |
| 575 | | |
| 576 | 522 | m_pak->set_entry(5); |
| 577 | | m_telcom->set_entry(0); |
| 523 | |
| 578 | 524 | m_size = 0x8000; |
| 579 | 525 | m_has_oldkb = 1; |
| 580 | 526 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 582 | 528 | |
| 583 | 529 | DRIVER_INIT_MEMBER( mbee_state, mbeeppc ) |
| 584 | 530 | { |
| 585 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 586 | | m_boot->configure_entry(0, &RAM[0x0000]); |
| 587 | | |
| 588 | | RAM = memregion("basicrom")->base(); |
| 531 | UINT8 *RAM = memregion("basicrom")->base(); |
| 589 | 532 | m_basic->configure_entries(0, 2, &RAM[0x0000], 0x2000); |
| 590 | | m_boot->configure_entry(1, &RAM[0x0000]); |
| 591 | 533 | |
| 592 | 534 | RAM = memregion("telcomrom")->base(); |
| 593 | 535 | m_telcom->configure_entries(0, 2, &RAM[0x0000], 0x1000); |
| 594 | 536 | |
| 595 | 537 | RAM = memregion("pakrom")->base(); |
| 596 | 538 | m_pak->configure_entries(0, 16, &RAM[0x0000], 0x2000); |
| 597 | | |
| 598 | 539 | m_pak->set_entry(5); |
| 599 | | m_telcom->set_entry(0); |
| 600 | | m_basic->set_entry(0); |
| 540 | |
| 601 | 541 | m_size = 0x8000; |
| 602 | 542 | m_has_oldkb = 1; |
| 603 | 543 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 605 | 545 | |
| 606 | 546 | DRIVER_INIT_MEMBER( mbee_state, mbee56 ) |
| 607 | 547 | { |
| 608 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 609 | | m_boot->configure_entries(0, 2, &RAM[0x0000], 0xe000); |
| 610 | 548 | m_size = 0xe000; |
| 611 | 549 | m_has_oldkb = 1; |
| 612 | 550 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 629 | 567 | membank(banktag)->configure_entries(64, 1, &ROM[0x4000], 0x1000); // dummy rom |
| 630 | 568 | } |
| 631 | 569 | |
| 632 | | timer_set(attotime::from_hz(1), TIMER_MBEE_RTC_IRQ); /* timer for rtc */ |
| 633 | | |
| 634 | 570 | m_size = 0x8000; |
| 635 | 571 | m_has_oldkb = 1; |
| 636 | 572 | m_is_mbeett = 0; |
| r244652 | r244653 | |
| 653 | 589 | membank(banktag)->configure_entries(64, 1, &ROM[0x4000], 0x1000); // dummy rom |
| 654 | 590 | } |
| 655 | 591 | |
| 656 | | timer_set(attotime::from_hz(1), TIMER_MBEE_RTC_IRQ); /* timer for rtc */ |
| 657 | | timer_set(attotime::from_hz(25), TIMER_MBEE_NEWKB); /* timer for kbd */ |
| 592 | timer_set(attotime::from_hz(1), TIMER_MBEE_NEWKB); /* kick-start timer for kbd */ |
| 658 | 593 | |
| 659 | 594 | m_size = 0x8000; |
| 660 | 595 | m_has_oldkb = 0; |
| r244652 | r244653 | |
| 663 | 598 | |
| 664 | 599 | DRIVER_INIT_MEMBER( mbee_state, mbeett ) |
| 665 | 600 | { |
| 666 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 667 | | m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000); |
| 668 | | |
| 669 | | RAM = memregion("telcomrom")->base(); |
| 601 | UINT8 *RAM = memregion("telcomrom")->base(); |
| 670 | 602 | m_telcom->configure_entries(0, 2, &RAM[0x0000], 0x1000); |
| 671 | 603 | |
| 672 | 604 | RAM = memregion("pakrom")->base(); |
| 673 | 605 | m_pak->configure_entries(0, 16, &RAM[0x0000], 0x2000); |
| 674 | | |
| 675 | 606 | m_pak->set_entry(5); |
| 676 | | m_telcom->set_entry(0); |
| 677 | 607 | |
| 678 | | timer_set(attotime::from_hz(1), TIMER_MBEE_RTC_IRQ); /* timer for rtc */ |
| 679 | | timer_set(attotime::from_hz(25), TIMER_MBEE_NEWKB); /* timer for kbd */ |
| 608 | timer_set(attotime::from_hz(1), TIMER_MBEE_NEWKB); /* kick-start timer for kbd */ |
| 680 | 609 | |
| 681 | 610 | m_size = 0x8000; |
| 682 | 611 | m_has_oldkb = 0; |