|
|
1.1 ! root 1: // Screen Conversion, VDI Res to 2Colour(1-Bit and 8-Bit) ! 2: ! 3: void ConvertVDIRes_2Colour_1Bit(void) ! 4: { ! 5: fprintf(stderr,"FIXME: Screen Conversion, VDI Res to 2Colour(1-Bit and 8-Bit)\n"); ! 6: // Copy palette to bitmap (2 colours) ! 7: /* FIXME */ ! 8: /* ! 9: if (HBLPalettes[0]==0x777) { ! 10: ScreenBMP.Colours[0].rgbRed = ScreenBMP.Colours[0].rgbGreen = ScreenBMP.Colours[0].rgbBlue = 0xff; ! 11: ScreenBMP.Colours[1].rgbRed = ScreenBMP.Colours[1].rgbGreen = ScreenBMP.Colours[1].rgbBlue = 0x00; ! 12: } ! 13: else { ! 14: ScreenBMP.Colours[0].rgbRed = ScreenBMP.Colours[0].rgbGreen = ScreenBMP.Colours[0].rgbBlue = 0x00; ! 15: ScreenBMP.Colours[1].rgbRed = ScreenBMP.Colours[1].rgbGreen = ScreenBMP.Colours[1].rgbBlue = 0xff; ! 16: } ! 17: */ ! 18: // Simply copy ST screen, as same format! ! 19: memcpy(pPCScreenDest,pSTScreen,(VDIWidth/8)*VDIHeight); ! 20: ! 21: bScreenContentsChanged = TRUE; ! 22: } ! 23: ! 24: void ConvertVDIRes_2Colour_YLoop(void); ! 25: void Line_ConvertVDIRes_2Colour(void); ! 26: ! 27: void ConvertVDIRes_2Colour(void) ! 28: { ! 29: fprintf(stderr,"FIXME: Screen Conversion, VDI Res to 2Colour(1-Bit and 8-Bit)\n");/* FIXME */ ! 30: /* ! 31: __asm { ! 32: push ebp ! 33: push edi ! 34: push esi ! 35: push ebx ! 36: ! 37: xor edx,edx // Clear index for loop ! 38: ! 39: mov eax,0 ! 40: mov [ScrY],eax // Starting line in ST screen ! 41: ! 42: // Get screen addresses, 'edi'-ST screen, 'ebp'-Previous ST screen, 'esi'-PC screen ! 43: mov edi,[pSTScreen] // ST format screen 4-plane 16 colours ! 44: mov ebp,[pSTScreenCopy] // Previous ST format screen ! 45: mov esi,[pPCScreenDest] // PC format screen, byte per pixel 256 colours ! 46: ! 47: jmp ConvertVDIRes_2Colour_YLoop ! 48: } ! 49: */ ! 50: } ! 51: /* ! 52: NAKED void ConvertVDIRes_2Colour_YLoop(void) ! 53: { ! 54: __asm { ! 55: // Get screen addresses, 'edi'-ST screen, 'ebp'-Previous ST screen, 'esi'-PC screen ! 56: mov esi,[pPCScreenDest] // PC format screen, byte per pixel 256 colours ! 57: ! 58: jmp Line_ConvertVDIRes_2Colour // 0 palette same, can do check tests ! 59: } ! 60: } ! 61: NAKED void Line_ConvertVDIRes_2Colour(void) ! 62: { ! 63: __asm { ! 64: mov eax,[VDIWidth] // Amount to draw across ! 65: shr eax,4 // in 16-pixels(4 bytes) ! 66: mov [ScrX],eax ! 67: x_loop: ! 68: // Do 16 pixels at one time ! 69: mov bx,[edi] ! 70: // Full update? or just test changes? ! 71: test [ScrUpdateFlag],0xe0000000 ! 72: jne copy_word // Force ! 73: // Does differ? ! 74: cmp bx,[ebp] ! 75: je next_word // Pixels are same as last frame, so ignore ! 76: ! 77: copy_word: ! 78: mov [bScreenContentsChanged],TRUE ! 79: ! 80: // Plot in 'wrong-order', as ebx is 68000 endian ! 81: HIGH_BUILD_PIXELS_0 // Generate 'ecx' as pixels [4,5,6,7] ! 82: PLOT_HIGH_640_8BIT(4) ! 83: HIGH_BUILD_PIXELS_1 // Generate 'ecx' as pixels [0,1,2,3] ! 84: PLOT_HIGH_640_8BIT(0) ! 85: HIGH_BUILD_PIXELS_2 // Generate 'ecx' as pixels [12,13,14,15] ! 86: PLOT_HIGH_640_8BIT(12) ! 87: HIGH_BUILD_PIXELS_3 // Generate 'ecx' as pixels [8,9,10,11] ! 88: PLOT_HIGH_640_8BIT(8) ! 89: ! 90: next_word: ! 91: add esi,16 // Next PC pixels ! 92: add edi,2 // Next ST pixels ! 93: add ebp,2 // Next ST copy pixels ! 94: ! 95: dec [ScrX] ! 96: jne x_loop // Loop on X ! 97: ! 98: mov eax,[pPCScreenDest] ! 99: add eax,[PCScreenBytesPerLine] // Offset to next line ! 100: mov [pPCScreenDest],eax ! 101: ! 102: inc [ScrY] ! 103: mov eax,[VDIHeight] ! 104: cmp [ScrY],eax ! 105: jne ConvertVDIRes_2Colour_YLoop // And on Y ! 106: ! 107: pop ebx ! 108: pop esi ! 109: pop edi ! 110: pop ebp ! 111: ! 112: ret ! 113: } ! 114: } ! 115: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.