test.cpp
1 #include <string.h> 2 #include <Arduino.h> 3 #include "emuapi.h" 4 #include "emu.h" 5 #include "ps2.h" 6 7 #ifdef HAS_T41 8 EXTMEM static unsigned char MemPool[8*1024*1024]; 9 #else 10 static uint8_t LOMEM[NATIVE_RAM]; 11 #endif 12 13 14 uint8_t * RAM; 15 uint8_t * LORAM; 16 17 #define PALMULT8(x) ((x)<<5) 18 #define RGBVAL16(r,g,b) ( (((r>>3)&0x1f)<<11) | (((g>>2)&0x3f)<<5) | (((b>>3)&0x1f)<<0) ) 19 20 struct i8253_s { 21 uint16_t chandata[3]; 22 uint8_t accessmode[3]; 23 uint8_t bytetoggle[3]; 24 uint32_t effectivedata[3]; 25 float chanfreq[3]; 26 uint8_t active[3]; 27 uint16_t counter[3]; 28 }; 29 30 extern struct i8253_s i8253; 31 32 void doirq(uint8_t irqnum); 33 void write86(uint32_t addr32, uint8_t value); 34 uint8_t read86(uint32_t addr32); 35 36 uint8_t curkey = 0; 37 38 39 40 uint8_t VRAM[16384]; 41 42 43 uint32_t updateaddrs[64]; 44 uint8_t updatepos = 0; 45 46 void VRAM_write(uint32_t addr32, uint8_t value) { 47 48 if (addr32 < 16384) { 49 VRAM[addr32] = value; 50 51 //printf("%d %d\n",addr32,value); 52 } 53 } 54 55 uint8_t VRAM_read(uint32_t addr32) { 56 57 if (addr32 < 16384) return VRAM[addr32]; 58 return 0; 59 } 60 61 uint8_t ansicolor[16] = { 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7 }; 62 uint16_t palettecga[16], palettevga[256]; 63 64 65 void installPalette(void) { 66 palettecga[0] = RGBVAL16(0, 0, 0); 67 palettecga[1] = RGBVAL16(0, 0, 0xAA); 68 palettecga[2] = RGBVAL16(0, 0xAA, 0); 69 palettecga[3] = RGBVAL16(0, 0xAA, 0xAA); 70 palettecga[4] = RGBVAL16(0xAA, 0, 0); 71 palettecga[5] = RGBVAL16(0xAA, 0, 0xAA); 72 palettecga[6] = RGBVAL16(0xAA, 0x55, 0); 73 palettecga[7] = RGBVAL16(0xAA, 0xAA, 0xAA); 74 palettecga[8] = RGBVAL16(0x55, 0x55, 0x55); 75 palettecga[9] = RGBVAL16(0x55, 0x55, 0xFF); 76 palettecga[10] = RGBVAL16(0x55, 0xFF, 0x55); 77 palettecga[11] = RGBVAL16(0x55, 0xFF, 0xFF); 78 palettecga[12] = RGBVAL16(0xFF, 0x55, 0x55); 79 palettecga[13] = RGBVAL16(0xFF, 0x55, 0xFF); 80 palettecga[14] = RGBVAL16(0xFF, 0xFF, 0x55); 81 palettecga[15] = RGBVAL16(0xFF, 0xFF, 0xFF); 82 palettevga[0] = RGBVAL16(0, 0, 0); 83 palettevga[1] = RGBVAL16(0, 0, 169); 84 palettevga[2] = RGBVAL16(0, 169, 0); 85 palettevga[3] = RGBVAL16(0, 169, 169); 86 palettevga[4] = RGBVAL16(169, 0, 0); 87 palettevga[5] = RGBVAL16(169, 0, 169); 88 palettevga[6] = RGBVAL16(169, 169, 0); 89 palettevga[7] = RGBVAL16(169, 169, 169); 90 palettevga[8] = RGBVAL16(0, 0, 84); 91 palettevga[9] = RGBVAL16(0, 0, 255); 92 palettevga[10] = RGBVAL16(0, 169, 84); 93 palettevga[11] = RGBVAL16(0, 169, 255); 94 palettevga[12] = RGBVAL16(169, 0, 84); 95 palettevga[13] = RGBVAL16(169, 0, 255); 96 palettevga[14] = RGBVAL16(169, 169, 84); 97 palettevga[15] = RGBVAL16(169, 169, 255); 98 palettevga[16] = RGBVAL16(0, 84, 0); 99 palettevga[17] = RGBVAL16(0, 84, 169); 100 palettevga[18] = RGBVAL16(0, 255, 0); 101 palettevga[19] = RGBVAL16(0, 255, 169); 102 palettevga[20] = RGBVAL16(169, 84, 0); 103 palettevga[21] = RGBVAL16(169, 84, 169); 104 palettevga[22] = RGBVAL16(169, 255, 0); 105 palettevga[23] = RGBVAL16(169, 255, 169); 106 palettevga[24] = RGBVAL16(0, 84, 84); 107 palettevga[25] = RGBVAL16(0, 84, 255); 108 palettevga[26] = RGBVAL16(0, 255, 84); 109 palettevga[27] = RGBVAL16(0, 255, 255); 110 palettevga[28] = RGBVAL16(169, 84, 84); 111 palettevga[29] = RGBVAL16(169, 84, 255); 112 palettevga[30] = RGBVAL16(169, 255, 84); 113 palettevga[31] = RGBVAL16(169, 255, 255); 114 palettevga[32] = RGBVAL16(84, 0, 0); 115 palettevga[33] = RGBVAL16(84, 0, 169); 116 palettevga[34] = RGBVAL16(84, 169, 0); 117 palettevga[35] = RGBVAL16(84, 169, 169); 118 palettevga[36] = RGBVAL16(255, 0, 0); 119 palettevga[37] = RGBVAL16(255, 0, 169); 120 palettevga[38] = RGBVAL16(255, 169, 0); 121 palettevga[39] = RGBVAL16(255, 169, 169); 122 palettevga[40] = RGBVAL16(84, 0, 84); 123 palettevga[41] = RGBVAL16(84, 0, 255); 124 palettevga[42] = RGBVAL16(84, 169, 84); 125 palettevga[43] = RGBVAL16(84, 169, 255); 126 palettevga[44] = RGBVAL16(255, 0, 84); 127 palettevga[45] = RGBVAL16(255, 0, 255); 128 palettevga[46] = RGBVAL16(255, 169, 84); 129 palettevga[47] = RGBVAL16(255, 169, 255); 130 palettevga[48] = RGBVAL16(84, 84, 0); 131 palettevga[49] = RGBVAL16(84, 84, 169); 132 palettevga[50] = RGBVAL16(84, 255, 0); 133 palettevga[51] = RGBVAL16(84, 255, 169); 134 palettevga[52] = RGBVAL16(255, 84, 0); 135 palettevga[53] = RGBVAL16(255, 84, 169); 136 palettevga[54] = RGBVAL16(255, 255, 0); 137 palettevga[55] = RGBVAL16(255, 255, 169); 138 palettevga[56] = RGBVAL16(84, 84, 84); 139 palettevga[57] = RGBVAL16(84, 84, 255); 140 palettevga[58] = RGBVAL16(84, 255, 84); 141 palettevga[59] = RGBVAL16(84, 255, 255); 142 palettevga[60] = RGBVAL16(255, 84, 84); 143 palettevga[61] = RGBVAL16(255, 84, 255); 144 palettevga[62] = RGBVAL16(255, 255, 84); 145 palettevga[63] = RGBVAL16(255, 255, 255); 146 palettevga[64] = RGBVAL16(255, 125, 125); 147 palettevga[65] = RGBVAL16(255, 157, 125); 148 palettevga[66] = RGBVAL16(255, 190, 125); 149 palettevga[67] = RGBVAL16(255, 222, 125); 150 palettevga[68] = RGBVAL16(255, 255, 125); 151 palettevga[69] = RGBVAL16(222, 255, 125); 152 palettevga[70] = RGBVAL16(190, 255, 125); 153 palettevga[71] = RGBVAL16(157, 255, 125); 154 palettevga[72] = RGBVAL16(125, 255, 125); 155 palettevga[73] = RGBVAL16(125, 255, 157); 156 palettevga[74] = RGBVAL16(125, 255, 190); 157 palettevga[75] = RGBVAL16(125, 255, 222); 158 palettevga[76] = RGBVAL16(125, 255, 255); 159 palettevga[77] = RGBVAL16(125, 222, 255); 160 palettevga[78] = RGBVAL16(125, 190, 255); 161 palettevga[79] = RGBVAL16(125, 157, 255); 162 palettevga[80] = RGBVAL16(182, 182, 255); 163 palettevga[81] = RGBVAL16(198, 182, 255); 164 palettevga[82] = RGBVAL16(218, 182, 255); 165 palettevga[83] = RGBVAL16(234, 182, 255); 166 palettevga[84] = RGBVAL16(255, 182, 255); 167 palettevga[85] = RGBVAL16(255, 182, 234); 168 palettevga[86] = RGBVAL16(255, 182, 218); 169 palettevga[87] = RGBVAL16(255, 182, 198); 170 palettevga[88] = RGBVAL16(255, 182, 182); 171 palettevga[89] = RGBVAL16(255, 198, 182); 172 palettevga[90] = RGBVAL16(255, 218, 182); 173 palettevga[91] = RGBVAL16(255, 234, 182); 174 palettevga[92] = RGBVAL16(255, 255, 182); 175 palettevga[93] = RGBVAL16(234, 255, 182); 176 palettevga[94] = RGBVAL16(218, 255, 182); 177 palettevga[95] = RGBVAL16(198, 255, 182); 178 palettevga[96] = RGBVAL16(182, 255, 182); 179 palettevga[97] = RGBVAL16(182, 255, 198); 180 palettevga[98] = RGBVAL16(182, 255, 218); 181 palettevga[99] = RGBVAL16(182, 255, 234); 182 palettevga[100] = RGBVAL16(182, 255, 255); 183 palettevga[101] = RGBVAL16(182, 234, 255); 184 palettevga[102] = RGBVAL16(182, 218, 255); 185 palettevga[103] = RGBVAL16(182, 198, 255); 186 palettevga[104] = RGBVAL16(0, 0, 113); 187 palettevga[105] = RGBVAL16(28, 0, 113); 188 palettevga[106] = RGBVAL16(56, 0, 113); 189 palettevga[107] = RGBVAL16(84, 0, 113); 190 palettevga[108] = RGBVAL16(113, 0, 113); 191 palettevga[109] = RGBVAL16(113, 0, 84); 192 palettevga[110] = RGBVAL16(113, 0, 56); 193 palettevga[111] = RGBVAL16(113, 0, 28); 194 palettevga[112] = RGBVAL16(113, 0, 0); 195 palettevga[113] = RGBVAL16(113, 28, 0); 196 palettevga[114] = RGBVAL16(113, 56, 0); 197 palettevga[115] = RGBVAL16(113, 84, 0); 198 palettevga[116] = RGBVAL16(113, 113, 0); 199 palettevga[117] = RGBVAL16(84, 113, 0); 200 palettevga[118] = RGBVAL16(56, 113, 0); 201 palettevga[119] = RGBVAL16(28, 113, 0); 202 palettevga[120] = RGBVAL16(0, 113, 0); 203 palettevga[121] = RGBVAL16(0, 113, 28); 204 palettevga[122] = RGBVAL16(0, 113, 56); 205 palettevga[123] = RGBVAL16(0, 113, 84); 206 palettevga[124] = RGBVAL16(0, 113, 113); 207 palettevga[125] = RGBVAL16(0, 84, 113); 208 palettevga[126] = RGBVAL16(0, 56, 113); 209 palettevga[127] = RGBVAL16(0, 28, 113); 210 palettevga[128] = RGBVAL16(56, 56, 113); 211 palettevga[129] = RGBVAL16(68, 56, 113); 212 palettevga[130] = RGBVAL16(84, 56, 113); 213 palettevga[131] = RGBVAL16(97, 56, 113); 214 palettevga[132] = RGBVAL16(113, 56, 113); 215 palettevga[133] = RGBVAL16(113, 56, 97); 216 palettevga[134] = RGBVAL16(113, 56, 84); 217 palettevga[135] = RGBVAL16(113, 56, 68); 218 palettevga[136] = RGBVAL16(113, 56, 56); 219 palettevga[137] = RGBVAL16(113, 68, 56); 220 palettevga[138] = RGBVAL16(113, 84, 56); 221 palettevga[139] = RGBVAL16(113, 97, 56); 222 palettevga[140] = RGBVAL16(113, 113, 56); 223 palettevga[141] = RGBVAL16(97, 113, 56); 224 palettevga[142] = RGBVAL16(84, 113, 56); 225 palettevga[143] = RGBVAL16(68, 113, 56); 226 palettevga[144] = RGBVAL16(56, 113, 56); 227 palettevga[145] = RGBVAL16(56, 113, 68); 228 palettevga[146] = RGBVAL16(56, 113, 84); 229 palettevga[147] = RGBVAL16(56, 113, 97); 230 palettevga[148] = RGBVAL16(56, 113, 113); 231 palettevga[149] = RGBVAL16(56, 97, 113); 232 palettevga[150] = RGBVAL16(56, 84, 113); 233 palettevga[151] = RGBVAL16(56, 68, 113); 234 palettevga[152] = RGBVAL16(80, 80, 113); 235 palettevga[153] = RGBVAL16(89, 80, 113); 236 palettevga[154] = RGBVAL16(97, 80, 113); 237 palettevga[155] = RGBVAL16(105, 80, 113); 238 palettevga[156] = RGBVAL16(113, 80, 113); 239 palettevga[157] = RGBVAL16(113, 80, 105); 240 palettevga[158] = RGBVAL16(113, 80, 97); 241 palettevga[159] = RGBVAL16(113, 80, 89); 242 palettevga[160] = RGBVAL16(113, 80, 80); 243 palettevga[161] = RGBVAL16(113, 89, 80); 244 palettevga[162] = RGBVAL16(113, 97, 80); 245 palettevga[163] = RGBVAL16(113, 105, 80); 246 palettevga[164] = RGBVAL16(113, 113, 80); 247 palettevga[165] = RGBVAL16(105, 113, 80); 248 palettevga[166] = RGBVAL16(97, 113, 80); 249 palettevga[167] = RGBVAL16(89, 113, 80); 250 palettevga[168] = RGBVAL16(80, 113, 80); 251 palettevga[169] = RGBVAL16(80, 113, 89); 252 palettevga[170] = RGBVAL16(80, 113, 97); 253 palettevga[171] = RGBVAL16(80, 113, 105); 254 palettevga[172] = RGBVAL16(80, 113, 113); 255 palettevga[173] = RGBVAL16(80, 105, 113); 256 palettevga[174] = RGBVAL16(80, 97, 113); 257 palettevga[175] = RGBVAL16(80, 89, 113); 258 palettevga[176] = RGBVAL16(0, 0, 64); 259 palettevga[177] = RGBVAL16(16, 0, 64); 260 palettevga[178] = RGBVAL16(32, 0, 64); 261 palettevga[179] = RGBVAL16(48, 0, 64); 262 palettevga[180] = RGBVAL16(64, 0, 64); 263 palettevga[181] = RGBVAL16(64, 0, 48); 264 palettevga[182] = RGBVAL16(64, 0, 32); 265 palettevga[183] = RGBVAL16(64, 0, 16); 266 palettevga[184] = RGBVAL16(64, 0, 0); 267 palettevga[185] = RGBVAL16(64, 16, 0); 268 palettevga[186] = RGBVAL16(64, 32, 0); 269 palettevga[187] = RGBVAL16(64, 48, 0); 270 palettevga[188] = RGBVAL16(64, 64, 0); 271 palettevga[189] = RGBVAL16(48, 64, 0); 272 palettevga[190] = RGBVAL16(32, 64, 0); 273 palettevga[191] = RGBVAL16(16, 64, 0); 274 palettevga[192] = RGBVAL16(0, 64, 0); 275 palettevga[193] = RGBVAL16(0, 64, 16); 276 palettevga[194] = RGBVAL16(0, 64, 32); 277 palettevga[195] = RGBVAL16(0, 64, 48); 278 palettevga[196] = RGBVAL16(0, 64, 64); 279 palettevga[197] = RGBVAL16(0, 48, 64); 280 palettevga[198] = RGBVAL16(0, 32, 64); 281 palettevga[199] = RGBVAL16(0, 16, 64); 282 palettevga[200] = RGBVAL16(32, 32, 64); 283 palettevga[201] = RGBVAL16(40, 32, 64); 284 palettevga[202] = RGBVAL16(48, 32, 64); 285 palettevga[203] = RGBVAL16(56, 32, 64); 286 palettevga[204] = RGBVAL16(64, 32, 64); 287 palettevga[205] = RGBVAL16(64, 32, 56); 288 palettevga[206] = RGBVAL16(64, 32, 48); 289 palettevga[207] = RGBVAL16(64, 32, 40); 290 palettevga[208] = RGBVAL16(64, 32, 32); 291 palettevga[209] = RGBVAL16(64, 40, 32); 292 palettevga[210] = RGBVAL16(64, 48, 32); 293 palettevga[211] = RGBVAL16(64, 56, 32); 294 palettevga[212] = RGBVAL16(64, 64, 32); 295 palettevga[213] = RGBVAL16(56, 64, 32); 296 palettevga[214] = RGBVAL16(48, 64, 32); 297 palettevga[215] = RGBVAL16(40, 64, 32); 298 palettevga[216] = RGBVAL16(32, 64, 32); 299 palettevga[217] = RGBVAL16(32, 64, 40); 300 palettevga[218] = RGBVAL16(32, 64, 48); 301 palettevga[219] = RGBVAL16(32, 64, 56); 302 palettevga[220] = RGBVAL16(32, 64, 64); 303 palettevga[221] = RGBVAL16(32, 56, 64); 304 palettevga[222] = RGBVAL16(32, 48, 64); 305 palettevga[223] = RGBVAL16(32, 40, 64); 306 palettevga[224] = RGBVAL16(44, 44, 64); 307 palettevga[225] = RGBVAL16(48, 44, 64); 308 palettevga[226] = RGBVAL16(52, 44, 64); 309 palettevga[227] = RGBVAL16(60, 44, 64); 310 palettevga[228] = RGBVAL16(64, 44, 64); 311 palettevga[229] = RGBVAL16(64, 44, 60); 312 palettevga[230] = RGBVAL16(64, 44, 52); 313 palettevga[231] = RGBVAL16(64, 44, 48); 314 palettevga[232] = RGBVAL16(64, 44, 44); 315 palettevga[233] = RGBVAL16(64, 48, 44); 316 palettevga[234] = RGBVAL16(64, 52, 44); 317 palettevga[235] = RGBVAL16(64, 60, 44); 318 palettevga[236] = RGBVAL16(64, 64, 44); 319 palettevga[237] = RGBVAL16(60, 64, 44); 320 palettevga[238] = RGBVAL16(52, 64, 44); 321 palettevga[239] = RGBVAL16(48, 64, 44); 322 palettevga[240] = RGBVAL16(44, 64, 44); 323 palettevga[241] = RGBVAL16(44, 64, 48); 324 palettevga[242] = RGBVAL16(44, 64, 52); 325 palettevga[243] = RGBVAL16(44, 64, 60); 326 palettevga[244] = RGBVAL16(44, 64, 64); 327 palettevga[245] = RGBVAL16(44, 60, 64); 328 palettevga[246] = RGBVAL16(44, 52, 64); 329 palettevga[247] = RGBVAL16(44, 48, 64); 330 palettevga[248] = RGBVAL16(0, 0, 0); 331 palettevga[249] = RGBVAL16(0, 0, 0); 332 palettevga[250] = RGBVAL16(0, 0, 0); 333 palettevga[251] = RGBVAL16(0, 0, 0); 334 palettevga[252] = RGBVAL16(0, 0, 0); 335 palettevga[253] = RGBVAL16(0, 0, 0); 336 palettevga[254] = RGBVAL16(0, 0, 0); 337 palettevga[255] = RGBVAL16(0, 0, 0); 338 } 339 340 extern uint8_t vidmode, portram[0x400]; 341 342 #define XRES_MAX 640 343 #define XRES_HI 640 344 #define XRES_LO 320 345 #define YRES 200 346 347 #include "font.h" 348 349 350 static unsigned short line[XRES_MAX]; 351 352 void drawscreentext80(void) { 353 uint16_t row, col, y, x, xpos; 354 uint16_t fontdata; 355 356 for (y=0; y<(25*8); y++) 357 { 358 row = y>>3; 359 uint8_t * vrampt=&VRAM[160*row]; 360 xpos = 0; 361 for (col=0; col<80; col++) 362 { 363 uint8_t bold, attrib, cc, bg, fg; 364 cc = *vrampt++; 365 attrib = *vrampt++; 366 bg = (attrib >> 4) & 7; 367 fg = attrib & 0x0F; 368 //if (y == 0) {printf("0x%02X",cc);} 369 fontdata = ROM_READ(font, ((uint32_t)cc << 3) + (y&0x7)); 370 for (x=0; x<8; x++) 371 //for (x=0; x<4; x++) 372 { 373 if (fontdata & 1) { 374 line[xpos++] = palettecga[fg]; 375 } else { 376 line[xpos++] = palettecga[bg]; 377 } 378 fontdata >>= 1; 379 //fontdata >>= 2; 380 } 381 } 382 emu_DrawLine16(&line[0], XRES_HI, YRES, y); 383 } 384 } 385 386 void drawscreenlorescga(void) { 387 uint16_t y, x, xpos; 388 uint8_t intensity, usepal; 389 uint16_t color; 390 usepal = (portram[0x3D9]>>5) & 1; 391 intensity = ( (portram[0x3D9]>>4) & 1) << 3; 392 393 for (y=0; y<(25*8); y++) 394 { 395 xpos = 0; 396 for (x=0; x<XRES_LO; x++) 397 { 398 int ychar = y;// >> 1; 399 int xchar = x;// >> 1; 400 uint8_t curchar = VRAM[((ychar & 1) * 8192 + (ychar >> 1) * 80 + (xchar >> 2))]; 401 switch (xchar & 3) { 402 case 3: color = curchar & 3; break; 403 case 2: color = (curchar >> 2) & 3; break; 404 case 1: color = (curchar >> 4) & 3; break; 405 case 0: color = (curchar >> 6) & 3; break; 406 } 407 color = (color << 1) + usepal + intensity; 408 if (color == (usepal + intensity)) color = 0; 409 line[xpos++] = palettecga[color]; 410 } 411 emu_DrawLine16(&line[0], XRES_LO, YRES, y); 412 } 413 } 414 415 416 void drawscreenhirescga(void) { 417 uint16_t y, x, xpos; 418 uint16_t color; 419 for (y=0; y<(25*8); y++) 420 { 421 xpos = 0; 422 for (x=0; x<XRES_HI; x++) 423 { 424 int ychar = y >> 1; 425 int xchar = x; 426 uint8_t curchar = VRAM[((ychar & 1) * 8192 + (ychar >> 1) * 80 + (xchar >> 3))]; 427 color = ((curchar >> (7-(x&7))) & 1) ? 15 : 0; 428 line[xpos++] = palettecga[color]; 429 } 430 emu_DrawLine16(&line[0], XRES_HI, YRES, y); 431 } 432 } 433 434 435 void updatescreen() { 436 switch (vidmode & 0x7F) { 437 case 0: 438 case 1: 439 //drawtext40(origaddr, value); 440 break; 441 case 2: 442 case 3: 443 //case 7: 444 drawscreentext80(); 445 break; 446 case 4: 447 drawscreenlorescga(); 448 break; 449 case 5: 450 drawscreenlorescga(); //change to BW function later 451 break; 452 case 6: 453 drawscreenhirescga(); 454 break; 455 } 456 //printf("%d\n",vidmode & 0x7F); 457 } 458 459 static uint8_t nbkeys=0; 460 static uint8_t kcnt=0; 461 static int toggle=1; 462 463 static char * seq; 464 static char * seq1="PRINCE.BAT\r"; 465 static char * seq2="CAT.EXE\r"; 466 static char * seq3="DIR\r"; 467 468 static int mouse_x = 160; 469 static int mouse_y = 100; 470 static int prev_key = 0; 471 static int prev_j = 0; 472 static int prev_mouseb = 0; 473 static bool isMouse = true; 474 static int joynum = 1; 475 static int hk = 0; 476 static int prev_hk = 0; 477 static int k = 0; 478 479 static void keyevent(int keysym, int isdown) 480 { 481 uint8_t scancode = translatescancode(keysym); 482 if (scancode != 0xFF) { 483 portram[0x60] = scancode; 484 if (!isdown) portram[0x60] |= 0x80; 485 portram[0x64] |= 2; 486 doirq(1); 487 } 488 } 489 490 extern void apc_Input(int bClick) { 491 hk = emu_ReadI2CKeyboard(); 492 k = emu_ReadKeys(); 493 494 if (nbkeys == 0) { 495 if (bClick & MASK_JOY2_BTN) { 496 nbkeys = strlen(seq1); 497 seq=seq1; 498 kcnt=0; 499 } 500 if (bClick & MASK_KEY_USER1) { 501 nbkeys = strlen(seq2); 502 seq=seq2; 503 kcnt=0; 504 } 505 } 506 else { 507 char k = seq[kcnt]; 508 if (k == 13) keyevent(0xFF0D,toggle); 509 else keyevent(k,toggle); 510 //setKey(ascii2scan[k],toggle); 511 if (!toggle) { 512 kcnt++; 513 nbkeys--; 514 toggle = true; 515 } 516 else { 517 toggle = false; 518 } 519 } 520 } 521 522 static void do_events(void) 523 { 524 if (hk != prev_hk) { 525 prev_hk == hk; 526 if ( (hk != 0) && (hk != prev_key) ) { 527 prev_key = hk; 528 keyevent ( hk, 0 ); 529 if (hk == 68) { 530 if (isMouse) isMouse = false; 531 else isMouse = true; 532 } 533 } 534 } 535 if ( (hk == 0) && (prev_key) ) { 536 keyevent ( prev_key, 1 ); 537 prev_key = 0; 538 } 539 540 541 if (!isMouse) 542 { 543 int j = 0; 544 if (( k & MASK_JOY1_RIGHT) || ( k & MASK_JOY2_RIGHT)) { 545 j |= 0x08; 546 } 547 if (( k & MASK_JOY1_LEFT) || ( k & MASK_JOY2_LEFT)) { 548 j |= 0x04; 549 } 550 if (( k & MASK_JOY1_UP) || ( k & MASK_JOY2_UP)) { 551 j |= 0x01; 552 } 553 if (( k & MASK_JOY1_DOWN) || ( k & MASK_JOY2_DOWN)) { 554 j |= 0x02; 555 } 556 if ( k & MASK_JOY2_BTN) { 557 j |= 0x80; 558 } 559 if (j != prev_j) { 560 //IkbdJoystickChange(joynum,j); 561 prev_j = j; 562 } 563 } 564 else { 565 if (( k & MASK_JOY1_RIGHT) || ( k & MASK_JOY2_RIGHT)) { 566 if ( mouse_x < XRES_HI ) { 567 mouse_x += 1; 568 } 569 } 570 else if (( k & MASK_JOY1_LEFT) || ( k & MASK_JOY2_LEFT)) { 571 if ( mouse_x > 1 ) { 572 mouse_x -= 1; 573 } 574 } 575 else if (( k & MASK_JOY1_UP) || ( k & MASK_JOY2_UP)) { 576 if ( mouse_y > 1 ) { 577 mouse_y -= 1; 578 } 579 } 580 else if (( k & MASK_JOY1_DOWN) || ( k & MASK_JOY2_DOWN)) { 581 if ( mouse_y < YRES ) { 582 mouse_y += 1; 583 } 584 } 585 586 int mouseb=0; 587 if ( ( k & MASK_JOY2_BTN) ){ 588 mouseb=1; 589 } 590 if ( (mouseb != prev_mouseb) ){ 591 prev_mouseb = mouseb; 592 } 593 } 594 } 595 596 void emu_KeyboardOnDown(int keymodifer, int key) { 597 } 598 599 void emu_KeyboardOnUp(int keymodifer, int key) { 600 } 601 602 void apc_Step(void) 603 { 604 exec86(8000); 605 updatescreen(); 606 do_events(); 607 emu_DrawVsync(); 608 } 609 610 611 612 void apc_Init(void) 613 { 614 #ifdef HAS_T41 615 LORAM = MemPool; 616 RAM = MemPool + NATIVE_RAM; 617 #else 618 RAM = (uint8_t*) malloc(RAM_SIZE); 619 if (!RAM) emu_printf("RAM malloc failed"); 620 LORAM = &LOMEM[0]; 621 //LORAM = (uint8_t*)malloc(NATIVE_RAM); 622 //if (!LORAM) emu_printf("LORAM malloc failed"); 623 624 #endif 625 626 installPalette(); 627 init8253(); 628 reset86(); 629 init8259(); 630 } 631 632 void apc_Start(char * filename) 633 { 634 emu_printf("init started"); 635 initDisk(filename); 636 emu_printf("init done"); 637 }