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

1.1       root        1: // Screen Conversion, VDI Res to 16Colour
                      2: 
                      3: void ConvertVDIRes_16Colour_YLoop(void);
                      4: void Line_ConvertVDIRes_16Colour(void);
                      5: 
                      6: void ConvertVDIRes_16Colour(void)
                      7: {
                      8: fprintf(stderr,"FIXME: Screen Conversion, VDI Res to 16Colour\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:     mov    eax,0
                     20:     mov    [ScrY],eax                // Starting line in ST screen
                     21: 
                     22:     // Get screen addresses, 'edi'-ST screen, 'ebp'-Previous ST screen, 'esi'-PC screen
                     23:     mov    edi,[pSTScreen]              // ST format screen 4-plane 16 colours
                     24:     mov    ebp,[pSTScreenCopy]            // Previous ST format screen
                     25:     mov    esi,[pPCScreenDest]            // PC format screen, byte per pixel 256 colours
                     26: 
                     27:     jmp    ConvertVDIRes_16Colour_YLoop
                     28:   }
                     29: */
                     30: }
                     31: /*
                     32: NAKED void ConvertVDIRes_16Colour_YLoop(void)
                     33: {
                     34:   __asm {
                     35:     // Get screen addresses, 'edi'-ST screen, 'ebp'-Previous ST screen, 'esi'-PC screen
                     36:     mov    esi,[pPCScreenDest]            // PC format screen, byte per pixel 256 colours
                     37: 
                     38:     jmp    Line_ConvertVDIRes_16Colour
                     39:   }
                     40: }
                     41: NAKED void Line_ConvertVDIRes_16Colour(void)
                     42: {
                     43:   __asm {
                     44:     mov    eax,[VDIWidth]              // Amount to draw across
                     45:     shr    eax,4                  // in 16-pixels(8 bytes)
                     46:     mov    [ScrX],eax
                     47: x_loop:
                     48: #ifdef TEST_SCREEN_UPDATE
                     49:     mov    WORD PTR [esi+0],0
                     50:     mov    WORD PTR [esi+4],0
                     51:     mov    WORD PTR [esi+8],0
                     52:     mov    WORD PTR [esi+12],0
                     53:     mov    WORD PTR [esi+16],0
                     54:     mov    WORD PTR [esi+20],0
                     55:     mov    WORD PTR [esi+24],0
                     56:     mov    WORD PTR [esi+28],0
                     57: #endif  //TEST_SCREEN_UPDATE
                     58: 
                     59:     // Do 16 pixels at one time
                     60:     mov    ebx,[edi]
                     61:     mov    ecx,4[edi]
                     62:     // Full update? or just test changes?
                     63:     test  [ScrUpdateFlag],0xe0000000
                     64:     jne    copy_word                // Force
                     65:     // Does differ?
                     66:     cmp    ebx,[ebp]
                     67:     jne    copy_word
                     68:     cmp    ecx,4[ebp]
                     69:     je    next_word                // Pixels are same as last frame, so ignore
                     70: 
                     71: copy_word:
                     72:     mov    [bScreenContentsChanged],TRUE
                     73: 
                     74:     // Plot pixels
                     75:     LOW_BUILD_PIXELS_0                // Generate 'ecx' as pixels [4,5,6,7]
                     76:     PLOT_LOW_320_8BIT(4)
                     77:     LOW_BUILD_PIXELS_1                // Generate 'ecx' as pixels [12,13,14,15]
                     78:     PLOT_LOW_320_8BIT(12)
                     79:     LOW_BUILD_PIXELS_2                // Generate 'ecx' as pixels [0,1,2,3]
                     80:     PLOT_LOW_320_8BIT(0)
                     81:     LOW_BUILD_PIXELS_3                // Generate 'ecx' as pixels [8,9,10,11]
                     82:     PLOT_LOW_320_8BIT(8)
                     83: 
                     84: next_word:
                     85:     add    esi,16                  // Next PC pixels
                     86:     add    edi,8                  // Next ST pixels
                     87:     add    ebp,8                  // Next ST copy pixels
                     88: 
                     89:     dec    [ScrX]
                     90:     jne    x_loop                  // Loop on X
                     91: 
                     92:     mov    eax,[pPCScreenDest]
                     93:     add    eax,[PCScreenBytesPerLine]        // Offset to next line
                     94:     mov    [pPCScreenDest],eax
                     95:     
                     96:     inc    [ScrY]
                     97:     mov    eax,[VDIHeight]
                     98:     cmp    [ScrY],eax
                     99:     jne    ConvertVDIRes_16Colour_YLoop    // And on Y
                    100: 
                    101:     pop    ebx
                    102:     pop    esi
                    103:     pop    edi
                    104:     pop    ebp
                    105: 
                    106:     ret
                    107:   }
                    108: }
                    109: */

unix.superglobalmegacorp.com

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