Annotation of hatari/src/convert/high640x8.c, revision 1.1.1.1

1.1       root        1: // Screen Conversion, High Res to 640x8Bit
                      2: 
                      3: void ConvertHighRes_640x8Bit_YLoop(void);
                      4: void Line_ConvertHighRes_640x8Bit(void);
                      5: 
                      6: void ConvertHighRes_640x8Bit(void)
                      7: {
                      8: //fprintf(stderr,"FIXME: Screen Conversion, High Res to 640x8Bit\n");
                      9:  unsigned char *src=pSTScreen;
                     10:  unsigned char *dst=pPCScreenDest;
                     11:  int i;
                     12:  for(i=0; i<640*400/8; i++, src++)
                     13:   {
                     14:    if( *src & 128 ) *dst++ = 0;  else  *dst++ = 1;
                     15:    if( *src & 64 )  *dst++ = 0;  else  *dst++ = 1;
                     16:    if( *src & 32 )  *dst++ = 0;  else  *dst++ = 1;
                     17:    if( *src & 16 )  *dst++ = 0;  else  *dst++ = 1;
                     18:    if( *src & 8 )   *dst++ = 0;  else  *dst++ = 1;
                     19:    if( *src & 4 )   *dst++ = 0;  else  *dst++ = 1;
                     20:    if( *src & 2 )   *dst++ = 0;  else  *dst++ = 1;
                     21:    if( *src & 1 )   *dst++ = 0;  else  *dst++ = 1;
                     22:   }
                     23:  bScreenContentsChanged = TRUE;
                     24: /* FIXME */
                     25: /*
                     26:   __asm {
                     27:     push  ebp
                     28:     push  edi
                     29:     push  esi
                     30:     push  ebx
                     31: 
                     32:     mov    edi,[pSTScreen]      // ST format screen 4-plane 16 colours
                     33:     mov    ebp,[pSTScreenCopy]    // Previous ST format screen
                     34:     mov    esi,[pPCScreenDest]    // PC format screen, byte per pixel 256 colours
                     35:     xor    edx,edx        // Clear index for loop
                     36: 
                     37:     mov    eax,[STScreenStartHorizLine]
                     38:     mov    [ScrY],eax      // 200 lines
                     39:     jmp    ConvertHighRes_640x8Bit_YLoop
                     40:   }
                     41: */
                     42: }
                     43: 
                     44: /*
                     45: NAKED void ConvertHighRes_640x8Bit_YLoop(void)
                     46: {
                     47:   __asm {
                     48:     // NOTE 'ScrUpdateFlag' is already set(to full update or check, no palettes)
                     49:     jmp    Line_ConvertHighRes_640x8Bit      // 0 palette same, can do check tests
                     50:   }
                     51: }
                     52: NAKED void Line_ConvertHighRes_640x8Bit(void)
                     53: {
                     54:   __asm {
                     55:     mov    [ScrX],40
                     56: x_loop:
                     57:     // Do 16 pixels at one time
                     58:     mov    bx,[edi]
                     59:     // Full update? or just test changes?
                     60:     test  [ScrUpdateFlag],0xe0000000
                     61:     jne    copy_word                // Force
                     62:     // Does differ?
                     63:     cmp    bx,[ebp]
                     64:     je    next_word                // Pixels are same as last frame, so ignore
                     65: 
                     66: copy_word:
                     67:     mov    [bScreenContentsChanged],TRUE
                     68: 
                     69:     // Plot in 'wrong-order', as ebx is 68000 endian
                     70:     HIGH_BUILD_PIXELS_0                // Generate 'ecx' as pixels [4,5,6,7]
                     71:     PLOT_HIGH_640_8BIT(4)
                     72:     HIGH_BUILD_PIXELS_1                // Generate 'ecx' as pixels [0,1,2,3]
                     73:     PLOT_HIGH_640_8BIT(0)
                     74:     HIGH_BUILD_PIXELS_2                // Generate 'ecx' as pixels [12,13,14,15]
                     75:     PLOT_HIGH_640_8BIT(12)
                     76:     HIGH_BUILD_PIXELS_3                // Generate 'ecx' as pixels [8,9,10,11]
                     77:     PLOT_HIGH_640_8BIT(8)
                     78: 
                     79: next_word:
                     80:     add    esi,16                  // Next PC pixels
                     81:     add    edi,2                  // Next ST pixels
                     82:     add    ebp,2                  // Next ST copy pixels
                     83: 
                     84:     dec    [ScrX]
                     85:     jne    x_loop                  // Loop on X
                     86: 
                     87:     sub    esi,(40*16)                // Back to start of line
                     88:     add    esi,[PCScreenBytesPerLine]        // Offset to next line
                     89: 
                     90:     inc    [ScrY]
                     91:     mov    eax,[STScreenEndHorizLine]
                     92:     cmp    [ScrY],eax
                     93:     jne    ConvertHighRes_640x8Bit_YLoop      // And on Y
                     94: 
                     95:     pop    ebx
                     96:     pop    esi
                     97:     pop    edi
                     98:     pop    ebp
                     99: 
                    100:     ret
                    101:   }
                    102: }
                    103: */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.