Annotation of hatari/src/blitter.c, revision 1.1.1.2

1.1.1.2 ! root        1: /*
1.1       root        2:  * Hatari - Blitter emulation.
1.1.1.2 ! root        3:  *
        !             4:  * This file is distributed under the GNU Public License, version 2 or at
        !             5:  * your option any later version. Read the file gpl.txt for details.
        !             6:  *
1.1       root        7:  * This file has been taken from STonX.
                      8:  *
                      9:  * Original information text follows:
                     10:  *
                     11:  *
                     12:  * This file is part of STonX, the Atari ST Emulator for Unix/X
                     13:  * ============================================================
                     14:  * STonX is free software and comes with NO WARRANTY - read the file
                     15:  * COPYING for details
                     16:  *
                     17:  *  Blitter Emulator,
                     18:  *  Martin Griffiths, 1995/96.
                     19:  *  
                     20:  *  Here lies the Atari Blitter Emulator - The 'Blitter' chip is found in  
                     21:  *  the STE/MegaSTE and provides a very fast BitBlit in hardware.
                     22:  *
                     23:  *  The hardware registers for this chip lie at addresses $ff8a00 - $ff8a3c,
                     24:  *  There seems to be a mirror for $ff8a30 used in TOS 1.02 at $ff7f30.
                     25:  *  
                     26:  */
1.1.1.2 ! root       27: char Blitter_rcsid[] = "Hatari $Id: blitter.c,v 1.4 2004/04/19 08:53:32 thothy Exp $";
1.1       root       28: 
                     29: #include <SDL_types.h>
                     30: #include <stdio.h>
                     31: #include <stdlib.h>
                     32: 
1.1.1.2 ! root       33: #include "main.h"
1.1       root       34: #include "blitter.h"
                     35: #include "hatari-glue.h"
1.1.1.2 ! root       36: #include "memorySnapShot.h"
1.1       root       37: #include "stMemory.h"
                     38: 
                     39: 
                     40: /* The following typedefs are needed for STonX's code */
                     41: typedef Uint16 UW;
                     42: typedef Uint8  UB;
                     43: 
                     44: /* The following functions are needed for STonX's code: */
                     45: #define MEM(a) (a)
                     46: #define ADDR(a) (a)
                     47: 
                     48: #define LM_W(a) ((short)STMemory_ReadWord(a))
                     49: #define LM_UW(a) STMemory_ReadWord(a)
                     50: #define LM_UL(a) STMemory_ReadLong(a)
                     51: 
                     52: #define SM_B(a,v) STMemory_WriteByte(a,v)
                     53: #define SM_UW(a,v) STMemory_WriteWord(a,v)
                     54: #define SM_UL(a,v) STMemory_WriteLong(a,v)
                     55: 
                     56: #if 0
                     57: #define SHOWPARAMS  \
                     58: {  \
                     59:   fprintf(stderr,"Source Address:%X\n",source_addr);  \
                     60:   fprintf(stderr,"  Dest Address:%X\n",dest_addr);  \
                     61:   fprintf(stderr,"       X count:%X\n",x_count);  \
                     62:   fprintf(stderr,"       Y count:%X\n",y_count);  \
                     63:   fprintf(stderr,"  Source X inc:%X\n",source_x_inc);  \
                     64:   fprintf(stderr,"    Dest X inc:%X\n",dest_x_inc);  \
                     65:   fprintf(stderr,"  Source Y inc:%X\n",source_y_inc);  \
                     66:   fprintf(stderr,"    Dest Y inc:%X\n",dest_y_inc);  \
                     67:   fprintf(stderr,"HOP:%2X    OP:%X\n",hop,op);  \
                     68:   fprintf(stderr,"   source SKEW:%X\n",skewreg);  \
                     69:   fprintf(stderr,"     endmask 1:%X\n",end_mask_1); \
                     70:   fprintf(stderr,"     endmask 2:%X\n",end_mask_2); \
                     71:   fprintf(stderr,"     endmask 3:%X\n",end_mask_3); \
                     72:   fprintf(stderr,"       linenum:%X\n",line_num);  \
                     73:   if (NFSR) fprintf(stderr,"NFSR is Set!\n");  \
                     74:   if (FXSR) fprintf(stderr,"FXSR is Set!\n");  \
                     75: }
                     76: #endif
                     77: 
                     78: 
                     79: static UW halftone_ram[16];
                     80: static UW end_mask_1,end_mask_2,end_mask_3;
                     81: static UB NFSR,FXSR; 
                     82: static UW x_count,y_count;
                     83: static UB hop,op,line_num,skewreg;
                     84: static unsigned int dest_addr_reg=0;
                     85: static int halftone_curroffset,halftone_direction;
                     86: static int source_x_inc, source_y_inc, dest_x_inc, dest_y_inc;
                     87: static int blit_flag = FALSE;
                     88: 
                     89: 
1.1.1.2 ! root       90: static void load_halftone_ram(void)
1.1       root       91: {
                     92:   halftone_ram[0] = LM_UW(MEM(0xff8a00)); 
                     93:   halftone_ram[1] = LM_UW(MEM(0xff8a02)); 
                     94:   halftone_ram[2] = LM_UW(MEM(0xff8a04)); 
                     95:   halftone_ram[3] = LM_UW(MEM(0xff8a06)); 
                     96:   halftone_ram[4] = LM_UW(MEM(0xff8a08)); 
                     97:   halftone_ram[5] = LM_UW(MEM(0xff8a0a)); 
                     98:   halftone_ram[6] = LM_UW(MEM(0xff8a0c)); 
                     99:   halftone_ram[7] = LM_UW(MEM(0xff8a0e)); 
                    100:   halftone_ram[8] = LM_UW(MEM(0xff8a10)); 
                    101:   halftone_ram[9] = LM_UW(MEM(0xff8a12)); 
                    102:   halftone_ram[10] = LM_UW(MEM(0xff8a14));  
                    103:   halftone_ram[11] = LM_UW(MEM(0xff8a16));  
                    104:   halftone_ram[12] = LM_UW(MEM(0xff8a18));  
                    105:   halftone_ram[13] = LM_UW(MEM(0xff8a1a));  
                    106:   halftone_ram[14] = LM_UW(MEM(0xff8a1c));  
                    107:   halftone_ram[15] = LM_UW(MEM(0xff8a1e));  
                    108:   if (line_num & 0x20)          
                    109:     halftone_curroffset = skewreg & 15;     
                    110:   else              
                    111:     halftone_curroffset = line_num & 15;    
                    112:   if (dest_y_inc >= 0)          
                    113:     halftone_direction = 1;       
                    114:   else              
                    115:     halftone_direction = -1;      
                    116: 
                    117: }
                    118: 
                    119: 
                    120: #define HOP_OPS(_fn_name,_op,_do_source_shift,_get_source_data,_shifted_hopd_data, _do_halftone_inc) \
                    121: static void _fn_name (void)  \
                    122: {  \
                    123:   register int source_addr  = LM_UL(MEM(0xff8a24));   \
                    124:   register int dest_addr = dest_addr_reg;  \
                    125:   register unsigned int skew = (unsigned int) skewreg & 15;  \
                    126:   register unsigned int source_buffer=0;  \
                    127:   /*if(address_space_24)*/  \
                    128:     { source_addr&=0x0fffffe; dest_addr&=0x0fffffe; }  \
                    129:   source_x_inc = (int) LM_W(MEM(0xff8a20));  \
                    130:   source_y_inc = (int) LM_W(MEM(0xff8a22));  \
                    131:   dest_x_inc = (int) LM_W(MEM(0xff8a2e));  \
                    132:   dest_y_inc = (int) LM_W(MEM(0xff8a30));  \
                    133:   if (hop & 1) load_halftone_ram();  \
                    134:   do  \
                    135:   {  \
                    136:     register UW x,dst_data,opd_data;  \
                    137:     if (FXSR)  \
                    138:     {  \
                    139:       _do_source_shift;  \
                    140:       _get_source_data;  \
                    141:       source_addr += source_x_inc;  \
                    142:     }  \
                    143:     _do_source_shift;  \
                    144:     _get_source_data;  \
                    145:     dst_data = LM_UW(ADDR(dest_addr));  \
                    146:     opd_data =  _shifted_hopd_data;  \
                    147:     SM_UW(ADDR(dest_addr),(dst_data & ~end_mask_1) | (_op & end_mask_1));  \
                    148:     for(x=0 ; x<x_count-2 ; x++)  \
                    149:     {  \
                    150:       source_addr += source_x_inc;  \
                    151:       dest_addr += dest_x_inc;  \
                    152:       _do_source_shift;  \
                    153:       _get_source_data;  \
                    154:       dst_data = LM_UW(ADDR(dest_addr));  \
                    155:       opd_data = _shifted_hopd_data;  \
                    156:       SM_UW(ADDR(dest_addr),(dst_data & ~end_mask_2) | (_op & end_mask_2));  \
                    157:     }  \
                    158:     if (x_count >= 2)  \
                    159:     {  \
                    160:       dest_addr += dest_x_inc;  \
                    161:       _do_source_shift;  \
                    162:       if ( (!NFSR) || ((~(0xffff>>skew)) > end_mask_3) )  \
                    163:       {  \
                    164:         source_addr += source_x_inc;  \
                    165:         _get_source_data;  \
                    166:       }  \
                    167:       dst_data = LM_UW(ADDR(dest_addr));  \
                    168:       opd_data = _shifted_hopd_data;  \
                    169:       SM_UW(ADDR(dest_addr),(((UW)dst_data) & ~end_mask_3) | (_op & end_mask_3));  \
                    170:     }  \
                    171:     source_addr += source_y_inc;  \
                    172:     dest_addr += dest_y_inc;  \
                    173:     _do_halftone_inc;  \
                    174:   } while (--y_count > 0);  \
                    175:   SM_UL(MEM(0xff8a24), source_addr);  \
                    176:   dest_addr_reg = dest_addr;  \
                    177: }
                    178: 
                    179: 
                    180: HOP_OPS(_HOP_0_OP_00_N,(0), source_buffer >>=16,;, 0xffff, ;)
                    181: HOP_OPS(_HOP_0_OP_01_N,(opd_data & dst_data) ,source_buffer >>=16,; , 0xffff, ;)
                    182: HOP_OPS(_HOP_0_OP_02_N,(opd_data & ~dst_data) ,source_buffer >>=16,; , 0xffff,;)   
                    183: HOP_OPS(_HOP_0_OP_03_N,(opd_data) ,source_buffer >>=16,; , 0xffff,;)
                    184: HOP_OPS(_HOP_0_OP_04_N,(~opd_data & dst_data) ,source_buffer >>=16,;, 0xffff,;)
                    185: HOP_OPS(_HOP_0_OP_05_N,(dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    186: HOP_OPS(_HOP_0_OP_06_N,(opd_data ^ dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    187: HOP_OPS(_HOP_0_OP_07_N,(opd_data | dst_data) ,source_buffer >>=16,; , 0xffff, ;)
                    188: HOP_OPS(_HOP_0_OP_08_N,(~opd_data & ~dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    189: HOP_OPS(_HOP_0_OP_09_N,(~opd_data ^ dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    190: HOP_OPS(_HOP_0_OP_10_N,(~dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    191: HOP_OPS(_HOP_0_OP_11_N,(opd_data | ~dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    192: HOP_OPS(_HOP_0_OP_12_N,(~opd_data) ,source_buffer >>=16,;, 0xffff, ;)
                    193: HOP_OPS(_HOP_0_OP_13_N,(~opd_data | dst_data) ,source_buffer >>=16,;, 0xffff, ;)   
                    194: HOP_OPS(_HOP_0_OP_14_N,(~opd_data | ~dst_data) ,source_buffer >>=16,;, 0xffff, ;)
                    195: HOP_OPS(_HOP_0_OP_15_N,(0xffff) ,source_buffer >>=16,;, 0xffff, ;)
                    196: 
                    197: HOP_OPS(_HOP_1_OP_00_N,(0) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    198: HOP_OPS(_HOP_1_OP_01_N,(opd_data & dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    199: HOP_OPS(_HOP_1_OP_02_N,(opd_data & ~dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    200: HOP_OPS(_HOP_1_OP_03_N,(opd_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    201: HOP_OPS(_HOP_1_OP_04_N,(~opd_data & dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    202: HOP_OPS(_HOP_1_OP_05_N,(dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    203: HOP_OPS(_HOP_1_OP_06_N,(opd_data ^ dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    204: HOP_OPS(_HOP_1_OP_07_N,(opd_data | dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    205: HOP_OPS(_HOP_1_OP_08_N,(~opd_data & ~dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    206: HOP_OPS(_HOP_1_OP_09_N,(~opd_data ^ dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    207: HOP_OPS(_HOP_1_OP_10_N,(~dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    208: HOP_OPS(_HOP_1_OP_11_N,(opd_data | ~dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    209: HOP_OPS(_HOP_1_OP_12_N,(~opd_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    210: HOP_OPS(_HOP_1_OP_13_N,(~opd_data | dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    211: HOP_OPS(_HOP_1_OP_14_N,(~opd_data | ~dst_data) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    212: HOP_OPS(_HOP_1_OP_15_N,(0xffff) ,source_buffer >>=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    213: 
                    214: HOP_OPS(_HOP_2_OP_00_N,(0) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    215: HOP_OPS(_HOP_2_OP_01_N,(opd_data & dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    216: HOP_OPS(_HOP_2_OP_02_N,(opd_data & ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    217: HOP_OPS(_HOP_2_OP_03_N,(opd_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    218: HOP_OPS(_HOP_2_OP_04_N,(~opd_data & dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    219: HOP_OPS(_HOP_2_OP_05_N,(dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    220: HOP_OPS(_HOP_2_OP_06_N,(opd_data ^ dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    221: HOP_OPS(_HOP_2_OP_07_N,(opd_data | dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    222: HOP_OPS(_HOP_2_OP_08_N,(~opd_data & ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    223: HOP_OPS(_HOP_2_OP_09_N,(~opd_data ^ dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    224: HOP_OPS(_HOP_2_OP_10_N,(~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    225: HOP_OPS(_HOP_2_OP_11_N,(opd_data | ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    226: HOP_OPS(_HOP_2_OP_12_N,(~opd_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    227: HOP_OPS(_HOP_2_OP_13_N,(~opd_data | dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    228: HOP_OPS(_HOP_2_OP_14_N,(~opd_data | ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    229: HOP_OPS(_HOP_2_OP_15_N,(0xffff) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew),;)
                    230: 
                    231: HOP_OPS(_HOP_3_OP_00_N,(0) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    232: HOP_OPS(_HOP_3_OP_01_N,(opd_data & dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    233: HOP_OPS(_HOP_3_OP_02_N,(opd_data & ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    234: HOP_OPS(_HOP_3_OP_03_N,(opd_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    235: HOP_OPS(_HOP_3_OP_04_N,(~opd_data & dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    236: HOP_OPS(_HOP_3_OP_05_N,(dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    237: HOP_OPS(_HOP_3_OP_06_N,(opd_data ^ dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    238: HOP_OPS(_HOP_3_OP_07_N,(opd_data | dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    239: HOP_OPS(_HOP_3_OP_08_N,(~opd_data & ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    240: HOP_OPS(_HOP_3_OP_09_N,(~opd_data ^ dst_data) , source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    241: HOP_OPS(_HOP_3_OP_10_N,(~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    242: HOP_OPS(_HOP_3_OP_11_N,(opd_data | ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    243: HOP_OPS(_HOP_3_OP_12_N,(~opd_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    244: HOP_OPS(_HOP_3_OP_13_N,(~opd_data | dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    245: HOP_OPS(_HOP_3_OP_14_N,(~opd_data | ~dst_data) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15) 
                    246: HOP_OPS(_HOP_3_OP_15_N,(0xffff) ,source_buffer >>=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) << 16) ,(source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15)
                    247: 
                    248: 
                    249: HOP_OPS(_HOP_0_OP_00_P,(0) ,source_buffer <<=16,;, 0xffff,;)
                    250: HOP_OPS(_HOP_0_OP_01_P,(opd_data & dst_data) ,source_buffer <<=16,;, 0xffff,;)  
                    251: HOP_OPS(_HOP_0_OP_02_P,(opd_data & ~dst_data) ,source_buffer <<=16,;, 0xffff,;) 
                    252: HOP_OPS(_HOP_0_OP_03_P,(opd_data) ,source_buffer <<=16,;, 0xffff,;) 
                    253: HOP_OPS(_HOP_0_OP_04_P,(~opd_data & dst_data) ,source_buffer <<=16,;, 0xffff,;) 
                    254: HOP_OPS(_HOP_0_OP_05_P,(dst_data) ,source_buffer <<=16,;, 0xffff,;) 
                    255: HOP_OPS(_HOP_0_OP_06_P,(opd_data ^ dst_data) ,source_buffer <<=16,;, 0xffff,;)  
                    256: HOP_OPS(_HOP_0_OP_07_P,(opd_data | dst_data) ,source_buffer <<=16,;, 0xffff,;)  
                    257: HOP_OPS(_HOP_0_OP_08_P,(~opd_data & ~dst_data) ,source_buffer <<=16,;, 0xffff,;)  
                    258: HOP_OPS(_HOP_0_OP_09_P,(~opd_data ^ dst_data) ,source_buffer <<=16,;, 0xffff,;) 
                    259: HOP_OPS(_HOP_0_OP_10_P,(~dst_data) ,source_buffer <<=16,;, 0xffff,;)  
                    260: HOP_OPS(_HOP_0_OP_11_P,(opd_data | ~dst_data) ,source_buffer <<=16,;, 0xffff,;) 
                    261: HOP_OPS(_HOP_0_OP_12_P,(~opd_data) ,source_buffer <<=16,;, 0xffff,;)  
                    262: HOP_OPS(_HOP_0_OP_13_P,(~opd_data | dst_data) ,source_buffer <<=16,;, 0xffff,;) 
                    263: HOP_OPS(_HOP_0_OP_14_P,(~opd_data | ~dst_data) ,source_buffer <<=16,;, 0xffff,;)  
                    264: HOP_OPS(_HOP_0_OP_15_P,(0xffff) ,source_buffer <<=16,;, 0xffff,;) 
                    265: 
                    266: HOP_OPS(_HOP_1_OP_00_P,(0) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    267: HOP_OPS(_HOP_1_OP_01_P,(opd_data & dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    268: HOP_OPS(_HOP_1_OP_02_P,(opd_data & ~dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    269: HOP_OPS(_HOP_1_OP_03_P,(opd_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    270: HOP_OPS(_HOP_1_OP_04_P,(~opd_data & dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    271: HOP_OPS(_HOP_1_OP_05_P,(dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    272: HOP_OPS(_HOP_1_OP_06_P,(opd_data ^ dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    273: HOP_OPS(_HOP_1_OP_07_P,(opd_data | dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    274: HOP_OPS(_HOP_1_OP_08_P,(~opd_data & ~dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )\
                    275: HOP_OPS(_HOP_1_OP_09_P,(~opd_data ^ dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    276: HOP_OPS(_HOP_1_OP_10_P,(~dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    277: HOP_OPS(_HOP_1_OP_11_P,(opd_data | ~dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    278: HOP_OPS(_HOP_1_OP_12_P,(~opd_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    279: HOP_OPS(_HOP_1_OP_13_P,(~opd_data | dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    280: HOP_OPS(_HOP_1_OP_14_P,(~opd_data | ~dst_data) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    281: HOP_OPS(_HOP_1_OP_15_P,(0xffff) ,source_buffer <<=16,;,halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 )
                    282: 
                    283: HOP_OPS(_HOP_2_OP_00_P,(0) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    284: HOP_OPS(_HOP_2_OP_01_P,(opd_data & dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    285: HOP_OPS(_HOP_2_OP_02_P,(opd_data & ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    286: HOP_OPS(_HOP_2_OP_03_P,(opd_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    287: HOP_OPS(_HOP_2_OP_04_P,(~opd_data & dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    288: HOP_OPS(_HOP_2_OP_05_P,(dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    289: HOP_OPS(_HOP_2_OP_06_P,(opd_data ^ dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    290: HOP_OPS(_HOP_2_OP_07_P,(opd_data | dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    291: HOP_OPS(_HOP_2_OP_08_P,(~opd_data & ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    292: HOP_OPS(_HOP_2_OP_09_P,(~opd_data ^ dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    293: HOP_OPS(_HOP_2_OP_10_P,(~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    294: HOP_OPS(_HOP_2_OP_11_P,(opd_data | ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    295: 
                    296: HOP_OPS(_HOP_2_OP_12_P,(~opd_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    297: HOP_OPS(_HOP_2_OP_13_P,(~opd_data | dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    298: HOP_OPS(_HOP_2_OP_14_P,(~opd_data | ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    299: HOP_OPS(_HOP_2_OP_15_P,(0xffff) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ) , (source_buffer >> skew),;)
                    300: 
                    301: HOP_OPS(_HOP_3_OP_00_P,(0) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    302: HOP_OPS(_HOP_3_OP_01_P,(opd_data & dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    303: HOP_OPS(_HOP_3_OP_02_P,(opd_data & ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    304: HOP_OPS(_HOP_3_OP_03_P,(opd_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    305: HOP_OPS(_HOP_3_OP_04_P,(~opd_data & dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    306: HOP_OPS(_HOP_3_OP_05_P,(dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    307: HOP_OPS(_HOP_3_OP_06_P,(opd_data ^ dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    308: HOP_OPS(_HOP_3_OP_07_P,(opd_data | dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    309: HOP_OPS(_HOP_3_OP_08_P,(~opd_data & ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    310: HOP_OPS(_HOP_3_OP_09_P,(~opd_data ^ dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    311: HOP_OPS(_HOP_3_OP_10_P,(~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    312: HOP_OPS(_HOP_3_OP_11_P,(opd_data | ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    313: HOP_OPS(_HOP_3_OP_12_P,(~opd_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    314: HOP_OPS(_HOP_3_OP_13_P,(~opd_data | dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    315: HOP_OPS(_HOP_3_OP_14_P,(~opd_data | ~dst_data) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    316: HOP_OPS(_HOP_3_OP_15_P,(0xffff) ,source_buffer <<=16,source_buffer |= ((unsigned int) LM_UW(ADDR(source_addr)) ), (source_buffer >> skew) & halftone_ram[halftone_curroffset],halftone_curroffset=(halftone_curroffset+halftone_direction) & 15 ) 
                    317: 
                    318: static void (*do_hop_op_N[4][16])(void) =
                    319: {
                    320:   { _HOP_0_OP_00_N, _HOP_0_OP_01_N, _HOP_0_OP_02_N, _HOP_0_OP_03_N, _HOP_0_OP_04_N, _HOP_0_OP_05_N, _HOP_0_OP_06_N, _HOP_0_OP_07_N, _HOP_0_OP_08_N, _HOP_0_OP_09_N, _HOP_0_OP_10_N, _HOP_0_OP_11_N, _HOP_0_OP_12_N, _HOP_0_OP_13_N, _HOP_0_OP_14_N, _HOP_0_OP_15_N,},
                    321:   { _HOP_1_OP_00_N, _HOP_1_OP_01_N, _HOP_1_OP_02_N, _HOP_1_OP_03_N, _HOP_1_OP_04_N, _HOP_1_OP_05_N, _HOP_1_OP_06_N, _HOP_1_OP_07_N, _HOP_1_OP_08_N, _HOP_1_OP_09_N, _HOP_1_OP_10_N, _HOP_1_OP_11_N, _HOP_1_OP_12_N, _HOP_1_OP_13_N, _HOP_1_OP_14_N, _HOP_1_OP_15_N,},
                    322:   { _HOP_2_OP_00_N, _HOP_2_OP_01_N, _HOP_2_OP_02_N, _HOP_2_OP_03_N, _HOP_2_OP_04_N, _HOP_2_OP_05_N, _HOP_2_OP_06_N, _HOP_2_OP_07_N, _HOP_2_OP_08_N, _HOP_2_OP_09_N, _HOP_2_OP_10_N, _HOP_2_OP_11_N, _HOP_2_OP_12_N, _HOP_2_OP_13_N, _HOP_2_OP_14_N, _HOP_2_OP_15_N,},
                    323:   { _HOP_3_OP_00_N, _HOP_3_OP_01_N, _HOP_3_OP_02_N, _HOP_3_OP_03_N, _HOP_3_OP_04_N, _HOP_3_OP_05_N, _HOP_3_OP_06_N, _HOP_3_OP_07_N, _HOP_3_OP_08_N, _HOP_3_OP_09_N, _HOP_3_OP_10_N, _HOP_3_OP_11_N, _HOP_3_OP_12_N, _HOP_3_OP_13_N, _HOP_3_OP_14_N, _HOP_3_OP_15_N,}
                    324: };
                    325: 
                    326: static void (*do_hop_op_P[4][16])(void) =
                    327: {
                    328:   { _HOP_0_OP_00_P, _HOP_0_OP_01_P, _HOP_0_OP_02_P, _HOP_0_OP_03_P, _HOP_0_OP_04_P, _HOP_0_OP_05_P, _HOP_0_OP_06_P, _HOP_0_OP_07_P, _HOP_0_OP_08_P, _HOP_0_OP_09_P, _HOP_0_OP_10_P, _HOP_0_OP_11_P, _HOP_0_OP_12_P, _HOP_0_OP_13_P, _HOP_0_OP_14_P, _HOP_0_OP_15_P,},
                    329:   { _HOP_1_OP_00_P, _HOP_1_OP_01_P, _HOP_1_OP_02_P, _HOP_1_OP_03_P, _HOP_1_OP_04_P, _HOP_1_OP_05_P, _HOP_1_OP_06_P, _HOP_1_OP_07_P, _HOP_1_OP_08_P, _HOP_1_OP_09_P, _HOP_1_OP_10_P, _HOP_1_OP_11_P, _HOP_1_OP_12_P, _HOP_1_OP_13_P, _HOP_1_OP_14_P, _HOP_1_OP_15_P,},
                    330:   { _HOP_2_OP_00_P, _HOP_2_OP_01_P, _HOP_2_OP_02_P, _HOP_2_OP_03_P, _HOP_2_OP_04_P, _HOP_2_OP_05_P, _HOP_2_OP_06_P, _HOP_2_OP_07_P, _HOP_2_OP_08_P, _HOP_2_OP_09_P, _HOP_2_OP_10_P, _HOP_2_OP_11_P, _HOP_2_OP_12_P, _HOP_2_OP_13_P, _HOP_2_OP_14_P, _HOP_2_OP_15_P,},
                    331:   { _HOP_3_OP_00_P, _HOP_3_OP_01_P, _HOP_3_OP_02_P, _HOP_3_OP_03_P, _HOP_3_OP_04_P, _HOP_3_OP_05_P, _HOP_3_OP_06_P, _HOP_3_OP_07_P, _HOP_3_OP_08_P, _HOP_3_OP_09_P, _HOP_3_OP_10_P, _HOP_3_OP_11_P, _HOP_3_OP_12_P, _HOP_3_OP_13_P, _HOP_3_OP_14_P, _HOP_3_OP_15_P,}
                    332: };
                    333: 
                    334: 
                    335: 
                    336: Uint16 LOAD_W_ff8a28(void)
                    337: {
                    338:   return end_mask_1;
                    339: }
                    340: 
                    341: Uint16 LOAD_W_ff8a2a(void)
                    342: {
                    343:   return end_mask_2;
                    344: }
                    345: 
                    346: Uint16 LOAD_W_ff8a2c(void)
                    347: {
                    348:   return end_mask_3;
                    349: }
                    350: 
                    351: Uint32 LOAD_L_ff8a32(void)
                    352: {
                    353:   return dest_addr_reg;
                    354: }
                    355: 
                    356: Uint16 LOAD_W_ff8a36(void)
                    357: {
                    358:   return x_count;
                    359: }
                    360: 
                    361: Uint16 LOAD_W_ff8a38(void)
                    362: {
                    363:   return y_count;
                    364: }
                    365: 
                    366: Uint8 LOAD_B_ff8a3a(void)
                    367: {
                    368:   return (Uint8)hop;
                    369: }
                    370: 
                    371: Uint8 LOAD_B_ff8a3b(void)
                    372: {
                    373:   return (Uint8)op;
                    374: }
                    375: 
                    376: Uint8 LOAD_B_ff8a3c(void)
                    377: {
                    378:   if (blit_flag)
                    379:   {
                    380:     Do_Blit();
                    381:     blit_flag = FALSE;
                    382:   }
                    383: 
                    384:   return (Uint8)(line_num & 0x3f);
                    385: }
                    386: 
                    387: Uint8 LOAD_B_ff8a3d(void)
                    388: {
                    389:   return (Uint8)skewreg;
                    390: }
                    391: 
                    392: 
                    393: void STORE_W_ff8a28(Uint16 v)
                    394: {
                    395:   end_mask_1 = v;
                    396: }
                    397: 
                    398: void STORE_W_ff8a2a(Uint16 v)
                    399: {
                    400:   end_mask_2 = v;
                    401: }
                    402: 
                    403: void STORE_W_ff8a2c(Uint16 v)
                    404: {
                    405:   end_mask_3 = v;
                    406: }
                    407: 
                    408: 
                    409: void STORE_L_ff8a32(Uint32 v)
                    410: { 
                    411:   dest_addr_reg = (v & 0x0fffffe);
                    412: }
                    413: 
                    414: 
                    415: void STORE_W_ff8a36(Uint16 v)
                    416: {
                    417:   x_count = v;
                    418: }
                    419: 
                    420: void STORE_W_ff8a38(Uint16 v)
                    421: {
                    422:   y_count = v;
                    423: }
                    424: 
                    425: void STORE_B_ff8a3a(Uint8 v)
                    426: {
                    427:   hop = v & 3;                  /* h/ware reg masks out the top 6 bits! */
                    428: }
                    429: 
                    430: void STORE_B_ff8a3b(Uint8 v)
                    431: {
                    432:   op = v & 15;                  /* h/ware reg masks out the top 4 bits! */  
                    433: }
                    434: 
                    435: void STORE_B_ff8a3c(Uint8 v)
                    436: { 
                    437:   if((y_count !=0) && (v & 0x80))   /* Busy bit set and lines to blit? */
                    438:     blit_flag = TRUE; 
                    439:   line_num   = (UB) v;  
                    440: }
                    441: 
                    442: void STORE_B_ff8a3d(Uint8 v)
                    443: { 
                    444:   NFSR = (v & 0x40) != 0;         
                    445:   FXSR = (v & 0x80) != 0;         
                    446:   skewreg = (unsigned char) v & 0xcf;   /* h/ware reg mask %11001111 !*/  
                    447: }
                    448: 
                    449: 
                    450: void Do_Blit(void)
                    451: {   
                    452:   if (LM_W(MEM(0xff8a20)) < 0)          /* source_x_inc < 0 */
                    453:     do_hop_op_N[hop][op]();
                    454:   else
                    455:     do_hop_op_P[hop][op]();
                    456: }
1.1.1.2 ! root      457: 
        !           458: 
        !           459: /*-----------------------------------------------------------------------*/
        !           460: /*
        !           461:   Save/Restore snapshot of Blitter variables.
        !           462: */
        !           463: void Blitter_MemorySnapShot_Capture(BOOL bSave)
        !           464: {
        !           465:   /* Save/Restore details */
        !           466:   MemorySnapShot_Store(halftone_ram, sizeof(halftone_ram));
        !           467:   MemorySnapShot_Store(&end_mask_1, sizeof(end_mask_1));
        !           468:   MemorySnapShot_Store(&end_mask_2, sizeof(end_mask_2));
        !           469:   MemorySnapShot_Store(&end_mask_3, sizeof(end_mask_3));
        !           470:   MemorySnapShot_Store(&NFSR, sizeof(NFSR));
        !           471:   MemorySnapShot_Store(&FXSR, sizeof(FXSR));
        !           472:   MemorySnapShot_Store(&x_count, sizeof(y_count));
        !           473:   MemorySnapShot_Store(&hop, sizeof(hop));
        !           474:   MemorySnapShot_Store(&op, sizeof(op));
        !           475:   MemorySnapShot_Store(&line_num, sizeof(line_num));
        !           476:   MemorySnapShot_Store(&skewreg, sizeof(skewreg));
        !           477:   MemorySnapShot_Store(&dest_addr_reg, sizeof(dest_addr_reg));
        !           478:   MemorySnapShot_Store(&halftone_curroffset, sizeof(halftone_curroffset));
        !           479:   MemorySnapShot_Store(&halftone_direction, sizeof(halftone_direction));
        !           480:   MemorySnapShot_Store(&source_x_inc, sizeof(source_x_inc));
        !           481:   MemorySnapShot_Store(&source_y_inc, sizeof(source_y_inc));
        !           482:   MemorySnapShot_Store(&dest_x_inc, sizeof(dest_x_inc));
        !           483:   MemorySnapShot_Store(&dest_y_inc, sizeof(dest_y_inc));
        !           484:   MemorySnapShot_Store(&blit_flag, sizeof(blit_flag));
        !           485: }

unix.superglobalmegacorp.com

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