|
|
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.