|
|
1.1 ! root 1: // Screen Conversion, Low Res to 640x8Bit ! 2: ! 3: void ConvertLowRes_640x8Bit_YLoop(void); ! 4: void Line_ConvertLowRes_640x8Bit(void); ! 5: ! 6: void ConvertLowRes_640x8Bit(void) ! 7: { ! 8: fprintf(stderr,"FIXME: Screen Conversion, Low Res to 640x8Bit\n"); ! 9: /* FIXME */ ! 10: /* ! 11: __asm { ! 12: push ebp ! 13: push edi ! 14: push esi ! 15: push ebx ! 16: ! 17: xor edx,edx // Clear index for loop ! 18: ! 19: call Convert_StartFrame // Start frame, track palettes ! 20: mov eax,[STScreenStartHorizLine] ! 21: mov [ScrY],eax // Starting line in ST screen ! 22: jmp ConvertLowRes_640x8Bit_YLoop ! 23: } ! 24: */ ! 25: } ! 26: /* ! 27: NAKED void ConvertLowRes_640x8Bit_YLoop(void) ! 28: { ! 29: ! 30: __asm { ! 31: // Get screen addresses, 'edi'-ST screen, 'ebp'-Previous ST screen, 'esi'-PC screen ! 32: mov eax,[ScrY] ! 33: mov eax,STScreenLineOffset[eax*4] // Offset for this line ! 34: add eax,[STScreenLeftSkipBytes] // Amount to skip on left hand side ! 35: mov edi,[pSTScreen] // ST format screen 4-plane 16 colours ! 36: add edi,eax ! 37: mov ebp,[pSTScreenCopy] // Previous ST format screen ! 38: add ebp,eax ! 39: mov esi,[pPCScreenDest] // PC format screen, byte per pixel 256 colours ! 40: ! 41: call AdjustLinePaletteRemap // Change palette table, DO NOT corrupt edx,edi,esi or ebp! ! 42: test eax,0x00030000 ! 43: jne Line_ConvertMediumRes_640x8Bit // resolution change(MUST be first) ! 44: jmp Line_ConvertLowRes_640x8Bit // 0 palette same, can do check tests ! 45: } ! 46: } ! 47: NAKED void Line_ConvertLowRes_640x8Bit(void) ! 48: { ! 49: __asm { ! 50: mov eax,[STScreenWidthBytes] // Amount to draw across ! 51: shr eax,3 // in 16-pixels(8 bytes) ! 52: mov [ScrX],eax ! 53: x_loop: ! 54: #ifdef TEST_SCREEN_UPDATE ! 55: mov WORD PTR [esi+0],0 ! 56: mov WORD PTR [esi+4],0 ! 57: mov WORD PTR [esi+8],0 ! 58: mov WORD PTR [esi+12],0 ! 59: mov WORD PTR [esi+16],0 ! 60: mov WORD PTR [esi+20],0 ! 61: mov WORD PTR [esi+24],0 ! 62: mov WORD PTR [esi+28],0 ! 63: #endif //TEST_SCREEN_UPDATE ! 64: ! 65: // Do 16 pixels at one time ! 66: mov ebx,[edi] ! 67: mov ecx,4[edi] ! 68: // Full update? or just test changes? ! 69: test [ScrUpdateFlag],0xe0000000 ! 70: jne copy_word // Force ! 71: // Does differ? ! 72: cmp ebx,[ebp] ! 73: jne copy_word ! 74: cmp ecx,4[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: cmp [bScrDoubleY],TRUE // Double on Y? ! 82: je double_y ! 83: ! 84: // Plot pixels ! 85: push ebp ! 86: LOW_BUILD_PIXELS_0 // Generate 'ecx' as pixels [4,5,6,7] ! 87: PLOT_LOW_640_8BIT(8) ! 88: LOW_BUILD_PIXELS_1 // Generate 'ecx' as pixels [12,13,14,15] ! 89: PLOT_LOW_640_8BIT(24) ! 90: LOW_BUILD_PIXELS_2 // Generate 'ecx' as pixels [0,1,2,3] ! 91: PLOT_LOW_640_8BIT(0) ! 92: LOW_BUILD_PIXELS_3 // Generate 'ecx' as pixels [8,9,10,11] ! 93: PLOT_LOW_640_8BIT(16) ! 94: pop ebp ! 95: ! 96: jmp done_word ! 97: ! 98: double_y: ! 99: push ebp ! 100: // Plot pixels ! 101: LOW_BUILD_PIXELS_0 // Generate 'ecx' as pixels [4,5,6,7] ! 102: PLOT_LOW_640_8BIT_DOUBLE_Y(8) ! 103: LOW_BUILD_PIXELS_1 // Generate 'ecx' as pixels [12,13,14,15] ! 104: PLOT_LOW_640_8BIT_DOUBLE_Y(24) ! 105: LOW_BUILD_PIXELS_2 // Generate 'ecx' as pixels [0,1,2,3] ! 106: PLOT_LOW_640_8BIT_DOUBLE_Y(0) ! 107: LOW_BUILD_PIXELS_3 // Generate 'ecx' as pixels [8,9,10,11] ! 108: PLOT_LOW_640_8BIT_DOUBLE_Y(16) ! 109: pop ebp ! 110: done_word: ! 111: ! 112: next_word: ! 113: add esi,16*2 // Next PC pixels ! 114: add edi,8 // Next ST pixels ! 115: add ebp,8 // Next ST copy pixels ! 116: ! 117: dec [ScrX] ! 118: jne x_loop // Loop on X ! 119: ! 120: mov eax,[pPCScreenDest] ! 121: add eax,[PCScreenBytesPerLine] // Offset to next line ! 122: add eax,[PCScreenBytesPerLine] ! 123: mov [pPCScreenDest],eax ! 124: ! 125: inc [ScrY] ! 126: mov eax,[STScreenEndHorizLine] ! 127: cmp [ScrY],eax ! 128: jne ConvertLowRes_640x8Bit_YLoop // And on Y ! 129: ! 130: pop ebx ! 131: pop esi ! 132: pop edi ! 133: pop ebp ! 134: ! 135: ret ! 136: } ! 137: } ! 138: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.