memcfg.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:24k
源码类别:

DVD

开发平台:

C/C++

  1. //
  2. // FILE
  3. // memcfg.c
  4. //
  5. // DESCRIPTION
  6. // configure memory
  7. //
  8. #include "config.h"
  9. #include "global.h"
  10. #include "regmap.h"
  11. #include "stdlib.h"
  12. #include "kinf.h"
  13. #include "kernel.h"
  14. #include "memmap.h"
  15. #include "memmap0.h"
  16. #include "framebuf.h"
  17. #include "avd.h"
  18. #include "dsp3_if.h"
  19. #include "reset.h"
  20. #include "sdctrl.h"
  21. #include "memcfg.h"
  22. #include "user_init.h"
  23. #include "fsNAV.h"
  24. #include "mem_anchor.h" //terry,2004/1/20 01:13PM
  25. #include "atapi_if.h"
  26. #ifndef DVDRELEASE
  27. #define MEMCFG_DBG    1
  28. #endif
  29. #define memcfg_printf(s...)     ((void)0)
  30. #ifdef MEMCFG_DBG
  31. #include "sio.h"
  32. #include "emuio.h"
  33. #define MONE_CONFIG
  34. #undef  memcfg_printf
  35. #define memcfg_printf           printf_w
  36. #endif
  37. void init_gp_parameter(int w)
  38. {
  39.     mode_aspect = 0;
  40.     vpp_zoom    = 0;
  41.     line_offset = (w+31)/32*32 ;
  42.     set_framebuf_linear_mode_width(line_offset);    
  43.     avd_disp_intp_mode(AVD_DISP_INTP_PROGRESSIVE);  
  44. }
  45. #ifdef NO_BLACK_for_PIC_CD
  46. void copy_ref1_frame_mpg2gp(void)
  47. {
  48.    UINT8 *mpg,*gp;
  49.    UINT16 luma_sz;
  50.    UINT32 sz;
  51.    printf("regs0->ref1_luma:%dn",regs0->ref1_luma);
  52.    printf("regs0->bidir_luma:%dn",regs0->bidir_luma);
  53.    printf("GP_REF1_LUMA:%dn",GP_REF1_LUMA);   
  54.    mpg = (UINT8 *)(SDRAM_BASE_CACHED + regs0->ref1_luma*1024);
  55.    gp = (UINT8 *)(SDRAM_BASE_CACHED + GP_REF1_LUMA*1024);
  56.    sz = (regs0->bidir_luma-regs0->ref1_luma)*1024;
  57.    luma_sz = regs0->vppref1_chroma - regs0->vppref0_luma;
  58.    
  59.    printf("mpg:%x gp:%x sz:%d %dn",mpg,gp,sz/1024,sz);
  60.    memcpy(gp,mpg,sz);
  61.    
  62.    regs0->ref1_luma       = GP_REF1_LUMA;
  63.    regs0->ref1_chroma     = GP_REF1_LUMA + LUMA_SIZE;
  64.    regs0->vppref1_luma    = GP_REF1_LUMA;
  65.    regs0->vppref1_chroma  = GP_REF1_LUMA + LUMA_SIZE;   
  66. }
  67. void init_pic_cd_first_play(void)
  68. {
  69.   copy_ref1_frame_mpg2gp();
  70.   set_disbuf_now(1);
  71.   
  72.   regs0->ref0_luma       = GP_REF0_LUMA;//terry,2004/2/4 07:39PM
  73.   regs0->ref0_chroma     = GP_REF0_CHROMA;
  74.   regs0->vppref0_luma    = GP_REF0_LUMA;
  75.   regs0->vppref0_chroma  = GP_REF0_CHROMA;   
  76.      
  77.   init_gp_parameter(720);
  78.   
  79.   set_fbuf_size( GP_LUMA_SIZE, GP_CHROMA_SIZE ); //terry,2004/2/18 02:40PM
  80.   clrFrameBuffer(FRAME_REF0);    
  81. }
  82. void init_hw_gp_md(void)
  83. {
  84.     memory_config_saved = MEMORY_GRAPH_PAL;
  85.     disable_video();
  86.     memcfg_set_framebuf_anchor(anchor_gp);
  87.     clrFrameBuffer(FRAME_REF1);
  88. #ifdef SDRAM_NO_REORDER 
  89.     setup_vpp_mapping(3,1);
  90. #else
  91.     setup_vpp_mapping(3,0);
  92. #endif
  93.     setvpp_linear_mode_width(736);
  94.     vpp_reset_framebuf_state();
  95.     enable_video();
  96. }
  97. #endif
  98. /*  // 2004/07/02 yltseng mark
  99. #if defined( SUPPORT_JPEG_MIC ) && !defined( MOVE_PAL_AUDYA )//terry,2004/1/14 01:47PM
  100. void set_dsp_codec_addr( int jpeg, int iConfig )
  101.      if(jpeg)
  102.       set_aud_buf(A_MIC_DSP24YA, A_AUDYA, A_MIC_PCM_YA);      
  103.      else
  104.       set_aud_buf(A_DSP24YA, A_AUDYA, A_PCMYA); 
  105. }
  106. #endif 
  107. */
  108. /*// 2004/11/18 yltseng
  109. // 2004/07/02 yltseng
  110. void set_dsp_codec_addr()
  111. {
  112. #ifdef SUPPORT_JPEG_MIC
  113.     if( pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG )
  114.         set_aud_buf( A_MIC_DSP24YA, A_AUDYA, A_MIC_PCM_YA );      
  115.     else
  116. #endif
  117. #ifdef MOVE_PAL_AUDYA
  118.         set_aud_buf( A_DSP24YA, ( regs0->mc_compress != 0 ) ? P_AUDYA : A_AUDYA, A_PCMYA ); 
  119.     if( pFsJpeg->gifsFuncBtn != FS_FUNC_JPEG )
  120.         reset_audio_buf();        
  121. #else
  122.         set_aud_buf( A_DSP24YA, A_AUDYA, A_PCMYA ); 
  123. #endif
  124. }
  125. */
  126. //
  127. // setup other buffer start-address.  
  128. static inline void
  129. SetupOtherBufferPointer( void )
  130.     // DVD DSP DMA Buffer pointer
  131.     regs0->cdwya        = A_CDYA;
  132.     regs0->cdwya_limit  = CDSIZE;
  133.   
  134.     //Audio DSP code,bit-stream,output pcm buffer pointer    
  135.     //set_dsp_codec_addr();   // 2004/11/18 yltseng
  136.     //iop code pointer
  137.     regs0->iopya        = A_IOPYA;
  138.     regs0->iop_memlimit = IOP_SIZE*4;//unit equ. 256 bytes
  139.   
  140.     //de-interlace paramenter
  141.     regs0->dip_ref_base = A_DEINTLACE_YA;
  142. }
  143. //
  144. // FUNCTION 
  145. // config_Lmem(enable)
  146. //
  147. //  +------------------+ row_st
  148. //  |    B     |       |
  149. //  +----------+       |
  150. //  |                  |
  151. //  +------------------+ base
  152. //
  153. static void
  154. config_Lmem(int enable)
  155. {
  156.     if (enable)
  157.     {
  158.         regs0->sdctrl_lmem_base = 0x1; //unit:2MB
  159.         regs0->sdctrl_lmem_row_st = SDCTRL_L_TYPE_W_256|SDCTRL_L_TYPE_EN|(P_REF0_LUMA);
  160. //        regs0->sdctrl_lmem_row_st = SDCTRL_L_TYPE_W_256|SDCTRL_L_TYPE_EN|281;
  161.     }
  162.     else
  163.     {
  164.         regs0->sdctrl_lmem_row_st = SDCTRL_L_TYPE_DIS;
  165.     }   
  166. }
  167. static void
  168. config_mc_compression(int enable)
  169. {
  170.     if (enable)
  171.     {
  172. #ifdef ONLY_B_PIC     
  173.         regs0->mc_compress = 0x100;//picture type B.P.I
  174. #else     
  175.         regs0->mc_compress = 0x111;//picture type B.P.I
  176. #endif    
  177.     }
  178.     else
  179.     {
  180.         regs0->mc_compress = 0;
  181.     }
  182. }
  183. static void
  184. YCbCrGrapeMdCfg(int w,int h)
  185. {
  186.     init_gp_parameter(w);
  187.     
  188.     set_dis_pic_size(w,h);
  189.     setup_display_now();
  190. #ifdef SDRAM_NO_REORDER 
  191.     setup_vpp_mapping(3,1);
  192. #else
  193.     setup_vpp_mapping(3,0);
  194. #endif
  195. }
  196. UINT16  memory_config_w_saved;
  197. UINT16  memory_config_h_saved;
  198. //
  199. // FUNCTION
  200. // reset_mem_cfg
  201. //
  202. // DESCRIPTION
  203. // reset memory configuration so that next time will always setup all
  204. // memory related registers
  205. //
  206. void
  207. reset_mem_cfg(void)
  208. {
  209.     memory_config_saved = 0xff;
  210. }
  211. void
  212. memcfg_set_framebuf_anchor(const UINT16 p[])
  213. {
  214.     // mc luma
  215.     regs0->ref0_luma        = p[0];
  216.     regs0->ref1_luma        = p[1];
  217.     regs0->bidir_luma       = p[2];
  218.     // mc chroma
  219.     regs0->ref0_chroma      = p[3];
  220.     regs0->ref1_chroma      = p[4];
  221.     regs0->bidir_chroma     = p[5];
  222.     // vpp luma
  223.     regs0->vppref0_luma    = p[6];
  224.     regs0->vppref1_luma    = p[7];
  225.     regs0->vppbidir_luma   = p[8];
  226.     // vpp chroma
  227.     regs0->vppref0_chroma  = p[9];
  228.     regs0->vppref1_chroma  = p[10];
  229.     regs0->vppbidir_chroma = p[11];
  230. }
  231. #ifdef  DVD_AUDIO
  232. //terry,2004/2/17 02:13PM
  233. void config_dvd_audio_memmap(void)
  234. {
  235.    if (regs0->dis_pic_id==1) {
  236.     fbuf_copy(0,1);
  237.    }
  238.    memcfg_set_framebuf_anchor(anchor_dvdaudio);
  239.    //printf("nn**** CHANGE ANCHORnn");
  240.    //delay_srv_10ms(100);
  241. }
  242. #endif
  243. // 2004/07/07 yltseng
  244. #if defined( SDRAM_16Mb_Mode ) && defined( SUPPORT_FILE_SYSTEM_MODE )
  245.     void ModifyFsBufAddr()
  246.     {
  247.         extern UINT32   _fs9660_buf;
  248.         UINT32          uiCurFsAddr;
  249.         if( regs0->mc_compress )
  250.             uiCurFsAddr = SDRAM_BASE + P_FS9660YA * 1024;
  251.         else
  252.             uiCurFsAddr = SDRAM_BASE + N_FS9660YA * 1024;
  253.         if( cd_type_loaded == CDROM && uiCurFsAddr != _fs9660_buf )
  254.         {
  255.             memcpyS( (void*)uiCurFsAddr, (void*)_fs9660_buf, FS9660_SIZE * 1024 );
  256.             _fs9660_buf = uiCurFsAddr;
  257.         }
  258.     }
  259. #else
  260.     inline void ModifyFsBufAddr() {}    // 2004/08/26 yltseng
  261. #endif
  262. // 2004/07/21 yltseng
  263. #if defined( USE_NAV_BUF_16M ) || defined( USE_NAV_BUF_16M_DECREASE_SUBPICTURE )
  264.     inline void ModifyNavBufAddr()
  265.     {
  266.         extern UINT32   g_uiNavBufAddr;
  267.         UINT32          uiCurNavBufAddr;
  268.         if( regs0->mc_compress )
  269.             uiCurNavBufAddr = SDRAM_BASE + P_NAVYA * 1024;
  270.         else
  271.             uiCurNavBufAddr = SDRAM_BASE + N_NAVYA * 1024;
  272.         if( g_uiNavBufAddr != uiCurNavBufAddr )
  273.             wb_tag_init();
  274.         
  275.         g_uiNavBufAddr = uiCurNavBufAddr;
  276.     }
  277. #else
  278.     inline void ModifyNavBufAddr() {}
  279. #endif
  280. #ifdef SUPPORT_MP4  // 2004/08/11 yltseng
  281. static void SetEvbyaLimit( UINT32 uiLimit )
  282. {
  283.     if( GetCurrentFileType() == CDROM_MP4 )
  284.         regs0->evbya_limit  = A_AVIEVBSZ;
  285.     else
  286.         regs0->evbya_limit  = uiLimit;
  287. }
  288. #else
  289. static inline void SetEvbyaLimit( UINT32 uiLimit )
  290. {
  291.     regs0->evbya_limit  = uiLimit;
  292. }
  293. #endif
  294. //
  295. // FUNCTION
  296. // config_memory_size
  297. //
  298. // DESCRIPTON
  299. // setup memory configuration, abort if same with previous setting
  300. //
  301. void
  302. config_memory_size(int config, int w, int h, int force)
  303. {
  304.     int         blue;
  305. #ifdef SDRAM_16Mb_Mode//terry,2003/10/21 10:03AM        
  306.     int         osd_enable;//terry,2003/10/20 03:24PM
  307. #endif    
  308.     int         configX;
  309.     unsigned    evbya_old;
  310.     unsigned    osdya_n;
  311.     unsigned    supya_n;
  312. #ifdef NO_BLACK_for_PIC_CD    
  313.     if(pic_cd_first_play) return;
  314. #endif    
  315. #ifdef DVD_AUDIO    
  316.     if (AOB) config = MEMORY_DVD_AUDIO;
  317.     else  pDSV->asv_loaded_addr=0; //terry,2004/2/19 05:02PM
  318. #endif    
  319. #if !defined( SDRAM_16Mb_Mode ) || defined( SUPPORT_FILE_SYSTEM_MODE )//2004/08/11 yltseng
  320.     //config mvc buffer
  321.     regs0->mvcya = MVC_BUF_YA;
  322. #endif
  323.     configX = config;
  324.     if (force)
  325.     {
  326.     if (config==MEMORY_UNKNOWN_PAL) {
  327.         config = MEMORY_DVD_PAL;
  328.         configX = 0xff;         // spepcial marker, force update next time
  329.     } else if (config==MEMORY_UNKNOWN_NTSC) {
  330.         config = MEMORY_DVD_NTSC;
  331.         configX = 0xff;         // spepcial marker, force update next time
  332.     }     
  333.     }
  334.     else
  335. {
  336. if (config==MEMORY_UNKNOWN_PAL) {
  337. if (w==memory_config_w_saved && h==memory_config_h_saved) return;
  338. config = MEMORY_DVD_PAL;
  339.      configX = 0xff;         // spepcial marker, force update next time
  340. } else if (config==MEMORY_UNKNOWN_NTSC) {
  341.      if (w==memory_config_w_saved && h==memory_config_h_saved) return;
  342.      config = MEMORY_DVD_NTSC;
  343.      configX = 0xff;         // spepcial marker, force update next time
  344. } else if (config==memory_config_saved) {
  345. #ifdef  DVD_AUDIO
  346.      if ( (AOB) && ((memory_config_w_saved!=w) || (memory_config_h_saved!=h))) {
  347.          disable_video();
  348.          clrFrameBuffer(FRAME_REF0|FRAME_REF1);        
  349.          setVPP_PictureSize(w,h);
  350.          enable_video();
  351.          memory_config_w_saved = w;
  352. memory_config_h_saved = h;
  353.      }
  354. #endif
  355.     return;            // abort
  356.         }
  357. }
  358. #ifdef MONE_CONFIG
  359.     memcfg_printf("nn===========>config mem %x(%x)n", config, memory_config_saved);
  360. #endif
  361.     //
  362.     // check what color to fill during black
  363.     blue = (config==MEMORY_PREVIEW);
  364.   
  365.     //
  366.     // blank the display
  367.     disable_video();
  368. #ifdef SDRAM_16Mb_Mode//terry,2003/10/21 10:03AM    
  369.     osd_enable = regs0->osd_en;//terry,2003/10/20 03:23PM
  370.     osd_disable();
  371. #endif    
  372.     delay_srv_10ms(1);
  373.     vpp_set_bg_color(0,0x8080); //black color
  374.     // 
  375.     // enable all clocks
  376.     setup_clock_gating(0);
  377.     regs0->clken0 = 0xffff;         // enable
  378.     regs0->clken1 = 0xffff;         // enable
  379.     evbya_old   = regs0->evbya;
  380. #ifdef  MEMCFG_MOVE_OSDSUP
  381.     // 2004/06/12 yltseng
  382.     osdya_n     = MN_OSDYA;
  383.     supya_n     = MN_SUPYA;
  384. #else
  385.     osdya_n     = A_OSDYA;
  386.     supya_n     = A_SUPYA;
  387. #endif
  388. #ifdef MODIFY_OSD_SHOW_NEW_STYLE_WINDOW
  389.     if(full_scrn & MESSAGE)//zhaoyanhua add 2003-12-18 10:12
  390.         DrawNewWindow();
  391. #endif  
  392.     switch(config)
  393.     {
  394.     case MEMORY_GRAPH_NTSC:     // 736x480  
  395.     {
  396.         memcfg_set_framebuf_anchor(anchor_gn);
  397.         set_fbuf_size( GP_LUMA_SIZE, GP_CHROMA_SIZE );
  398.         YCbCrGrapeMdCfg(720,480);
  399.         setvpp_linear_mode_width(736);
  400.     }
  401.     break;
  402.     case MEMORY_GRAPH_PAL:      // 736x576
  403.     {
  404.         memcfg_set_framebuf_anchor(anchor_gp);
  405.         set_fbuf_size( GP_LUMA_SIZE, GP_CHROMA_SIZE);
  406.         YCbCrGrapeMdCfg(720,576);
  407.         setvpp_linear_mode_width(736);
  408.     }
  409.     break;
  410.     case MEMORY_GRAPH_SMALL:    // 352x288
  411.     {
  412.         memcfg_set_framebuf_anchor(anchor_gs);
  413.         set_fbuf_size( GS_LUMA_SIZE, GS_CHROMA_SIZE);
  414.         YCbCrGrapeMdCfg(352,288);
  415.         setvpp_linear_mode_width(352);
  416.     }
  417.     break;
  418. #ifdef SUPPORT_PREVIEW_9FRAMES
  419.     case MEMORY_PREVIEW:
  420.         vpp_set_bg_color(0x40,0xc07c);                  // blue color
  421.         memcfg_set_framebuf_anchor(anchor_preview);
  422.     #ifdef  MEMCFG_COMPACT_MODE
  423.         set_fbuf_size( LUMA_SIZE, CHROMA_SIZE );
  424.         regs0->evbya            = M_EVBYA;
  425.         SetEvbyaLimit( M_EVBSZ );
  426.         // set decode buffer to 480x576
  427.         regs0->mc_mbwidth   = 30;                                       // 480 decode
  428.         set_framebuf_mb_mode_width(30);                                 // 480 source buffers
  429.         regs0->vpp_config1  = (regs0->vpp_config1 & ~0x07) | 0x00;      // 720
  430.     #else   /*!defined(MEMCFG_COMPACT_MODE)*/
  431.         set_fbuf_size( LUMA_SIZE, CHROMA_SIZE );
  432.     
  433.         regs0->evbya            = P_EVBYA;
  434.         SetEvbyaLimit( P_EVBSZ );
  435.     #endif/*!defined(MEMCFG_COMPACT_MODE)*/
  436.     #ifdef SDRAM_NO_REORDER 
  437.         setup_vpp_mapping(3,1);
  438.     #else
  439.         setup_vpp_mapping(3,0);
  440.     #endif
  441.         set_disbuf(2);
  442.         line_offset = (720+31)/32*32 ;    
  443.         set_framebuf_linear_mode_width(line_offset);
  444.         // set linear mode width
  445.         setvpp_linear_mode_width(720);
  446.         break;
  447. #endif
  448.         
  449. #ifdef DVD_AUDIO
  450.     case MEMORY_DVD_AUDIO:
  451.     {
  452.         memcfg_set_framebuf_anchor(anchor_dvdaudio);
  453.         set_fbuf_size( LUMA_SIZE, CHROMA_SIZE );
  454.         regs0->evbya            = P_EVBYA;
  455.         SetEvbyaLimit( P_EVBSZ );
  456.         set_disbuf(0);              
  457.         setup_vpp_mapping(1,0);
  458.         regs0->mc_mbwidth = 45;                                     // 720 mc
  459.         set_framebuf_mb_mode_width(45);                             // 720 source buffer
  460.         regs0->vpp_config1 = (regs0->vpp_config1 & ~0x07) | 0x00;   // 720 display
  461.     }
  462.     break;
  463. #endif
  464. #ifdef  SUPPORT_MIDI
  465.     case MEMORY_MIDI:
  466.     {
  467.         regs0->ref0_luma        = D_REF0_LUMA; 
  468.         regs0->ref0_chroma      = D_REF0_CHROMA;
  469.         regs0->ref1_luma        = D_REF1_LUMA;
  470.         regs0->ref1_chroma      = D_REF1_CHROMA;
  471.         regs0->bidir_luma       = D_BIDIR_LUMA;
  472.         regs0->bidir_chroma     = D_BIDIR_CHROMA;
  473.        
  474.         regs0->vppref0_luma     = regs0->ref0_luma;
  475.         regs0->vppref1_luma     = regs0->ref1_luma;
  476.         regs0->vppref0_chroma   = regs0->ref0_chroma;
  477.         regs0->vppref1_chroma   = regs0->ref1_chroma;
  478.         regs0->vppbidir_luma    = regs0->bidir_luma;
  479.         regs0->vppbidir_chroma  = regs0->bidir_chroma;
  480.         regs0->evbya            = D_EVBYA;
  481.         SetEvbyaLimit( D_EVBSZ );
  482.         set_fbuf_size( D_LUMA_SIZE, D_CHROMA_SIZE );
  483.         set_disbuf(0);              
  484.         setup_vpp_mapping(1,0);
  485.         regs0->mc_mbwidth = 22;                                     // 352 (22)
  486.         set_framebuf_mb_mode_width(22);                             // 352 (22)
  487.         regs0->vpp_config1 = (regs0->vpp_config1 & ~0x07) | 0x02;   // 352 (type 010)
  488.         setVPP_PictureSize(352,288);
  489.     }
  490.     break;
  491. #endif  // SUPPORT_MIDI
  492.     case MEMORY_DVD_NTSC:
  493.     case MEMORY_SVCD_NTSC:
  494.     case MEMORY_CVD_NTSC:
  495.     case MEMORY_VCD_NTSC:   
  496.     case MEMORY_SVCD_PAL:
  497.     case MEMORY_CVD_PAL:
  498.     case MEMORY_VCD_PAL:    
  499. #if defined( SDRAM_16Mb_Mode ) && defined( SUPPORT_FILE_SYSTEM_MODE )
  500.     case 0xff:  // 2004/08/26 yltseng
  501. #endif
  502. #ifdef MEMCFG_COMPACT_MODE
  503.     {
  504.         memcfg_set_framebuf_anchor(anchor_compact);
  505.         set_fbuf_size( N_LUMA_SIZE, N_CHROMA_SIZE );
  506.         regs0->evbya            = N_EVBYA;
  507.         SetEvbyaLimit( N_EVBSZ );
  508.         set_disbuf(0);              
  509.         setup_vpp_mapping(1,0);
  510.         
  511.         if( config != MEMORY_DVD_NTSC ) // 2004/09/13 yltseng
  512.         {
  513.             regs0->mc_mbwidth   = 30;                                       // 480
  514.             set_framebuf_mb_mode_width(30);
  515.             regs0->vpp_config1  = (regs0->vpp_config1 & ~0x07) | 0x03;      // 480
  516.             setVPP_PictureSize(480,480);            
  517.         }
  518.         else
  519.         {
  520.             regs0->mc_mbwidth   = 45;                                       // 720
  521.             set_framebuf_mb_mode_width(45);
  522.             regs0->vpp_config1  = (regs0->vpp_config1 & ~0x07) | 0x00;      // 720
  523.             setVPP_PictureSize(720,480);
  524.         }
  525.     }
  526.     break;
  527. #endif/*defined(MEMCFG_COMPACT_MODE)*/
  528.     // (PAL)
  529.     // for typical decoding, all set to maximum size
  530.     case MEMORY_DVD_PAL:
  531.     default:
  532.     {   
  533.         memcfg_set_framebuf_anchor(anchor_dvdpal);
  534.         
  535.         set_fbuf_size( LUMA_SIZE, CHROMA_SIZE );
  536.         regs0->evbya            = P_EVBYA;
  537.         SetEvbyaLimit( P_EVBSZ );
  538.         set_disbuf(0);              
  539.         setup_vpp_mapping(1,0);
  540.         regs0->mc_mbwidth = 45;                                     // 720 mc
  541.         set_framebuf_mb_mode_width(45);                             // 720 source buffer
  542.         regs0->vpp_config1 = (regs0->vpp_config1 & ~0x07) | 0x00;   // 720 display        
  543.         
  544.         
  545. #ifdef  MEMCFG_MOVE_OSDSUP
  546.         osdya_n                 = P_OSDYA;
  547.         supya_n                 = P_SUPYA;
  548. #endif
  549.     }
  550.     break;
  551.     }
  552. #ifdef  MONE_CONFIG
  553.     if (config==MEMORY_DVD_PAL) io_write_wait("PALn");
  554.     else io_write_wait("OTHERn");
  555. #endif
  556. #ifdef  MB22
  557.     mb22_en = (config==MEMORY_DVD_PAL);    
  558. #else
  559.     mb22_en = 0;
  560. #endif
  561. #ifdef  DTH_CFG_ENABLE
  562.     if (config==MEMORY_DVD_PAL) {
  563.         config_mc_compression(1);
  564.         set_dis_pic_size(720,576);  // force setting display mode
  565.     } else {
  566.         config_mc_compression(0);
  567.     }
  568. #else
  569.     config_mc_compression(0);
  570. #endif
  571. #ifdef  MONE_CONFIG
  572.     if (regs0->mc_compress) memcfg_printf("HAS compressedn");
  573.     else memcfg_printf("NOT compressedn");
  574. #endif
  575.     /*
  576.     ** config L-mem and also move video-bitstream buffer
  577.     */
  578. #define RESTORE_EVB()   memcpyS((void *)(SDRAM_BASE+regs0->evbya*1024), (void *)(SDRAM_BASE+evbya_old*1024),EVBSZ*1024)
  579. #define MOVE_OSD()      memcpyS((void *)(SDRAM_BASE+osdya_n*1024), (void *)(SDRAM_BASE+REG_OSDYA*1024), OSDSIZE*1024)
  580. #define MOVE_SUP()      memcpyS((void *)(SDRAM_BASE+supya_n*1024), (void *)(SDRAM_BASE+regs0->supya*1024), SUPSIZE*1024)
  581. #ifdef  MEMCFG_PAL_LMEM
  582.     // only use Lmem for PAL D1 mode
  583.     if (config==MEMORY_DVD_PAL)
  584.     {
  585.         config_Lmem(1);
  586.     #ifdef MOVE_PAL_AUDYA   // 2005/01/24 yltseng
  587.         if( memory_config_saved != MEMORY_DVD_PAL )
  588.             AUDIF_Reset_DSP();
  589.     #endif               
  590.         RESTORE_EVB();
  591.         
  592.     #ifdef  MEMCFG_MOVE_OSDSUP
  593.         MOVE_OSD();
  594.         MOVE_SUP();
  595.     #endif
  596.         ModifyFsBufAddr();
  597.     }
  598.     else
  599.     {
  600.         RESTORE_EVB();
  601.     #ifdef  MEMCFG_MOVE_OSDSUP
  602.         MOVE_OSD();
  603.         MOVE_SUP();
  604.     #endif
  605.         ModifyFsBufAddr();
  606.     #ifdef MOVE_PAL_AUDYA   // 2005/01/24 yltseng
  607.         if( memory_config_saved == MEMORY_DVD_PAL )
  608.             AUDIF_Reset_DSP();
  609.     #endif
  610.         config_Lmem(0);
  611.     }
  612. #else
  613.     #define RESTORE_EVBX()   memcpyS((void *)(SDRAM_BASE+regs0->evbya*1024), (void *)(SDRAM_BASE+evbya_old*1024),P_EVBSZ*1024)
  614.     if (avd_is_midi() ) { //Jeff 20031028
  615.         if (regs0->evbya!=evbya_old) RESTORE_EVBX();
  616.     }
  617.     config_Lmem(0);
  618. #endif
  619.     
  620.     ModifyNavBufAddr();
  621.     //OSD Display Buffer pointer
  622. #ifdef OSDISP
  623.     static int osd_memcfg_flag=0;
  624.     //when boot and this function first called, memory addr is the same with PROMBASE, cause some bug.
  625.     //so, add the static flag to avoid.    kehw
  626.     if(osd_memcfg_flag)
  627.     {
  628.      REG_OSDYA                   = 0x00480000>>10;//osdya_n;
  629.      REG_OSDYA2                  = 0x00480000>>10;//osdya_n;
  630.     }
  631.     else
  632. #endif
  633.     {
  634. #ifdef OSDISP
  635.      osd_memcfg_flag=1;
  636. #endif
  637.     
  638. #ifdef SUPPORT_16BIT_OSD
  639.         if(OSD_buffer_16bit ==1)
  640.         {
  641.             REG_OSDYA                   = GP_REF1_LUMA + 64;
  642.             REG_OSDYA2                  = GP_REF1_LUMA + 64;//osdya_n;
  643.         }
  644.         else
  645.         {
  646.             REG_OSDYA                   = osdya_n;
  647.             REG_OSDYA2                  = osdya_n;
  648.         }
  649. #else
  650.         REG_OSDYA                   = osdya_n;
  651.         REG_OSDYA2                  = osdya_n;
  652. #endif
  653.     }
  654.     
  655.     //Sub-picture bitstream Buffer pointer
  656.     regs0->sup_buffer_limit     = SUPSIZE*1024;
  657.     regs0->supya                = supya_n;
  658.     regs0->supya_limit          = SUPSIZE;  
  659.     set_sup_hwbuf(supya_n, supya_n+SUPSIZE);
  660.     
  661.     regs0->supya2               = A_SUPYA2;
  662.     regs0->supya2_limit         = SUPSIZE2;
  663.     
  664. #ifdef TWO_SUBTITLE //terry,2004/7/28 01:49PM
  665.     set_sup_hwbuf2(A_SUPYA2, A_SUPYA2+SUPSIZE2);
  666. #endif
  667.     SetupOtherBufferPointer();
  668.     // clearup framebuf status
  669.     vpp_reset_framebuf_state();
  670.     // clearup memory
  671.     if (blue)
  672.     {
  673.         clrFrameBuffer(FRAME_REF0|FRAME_REF1|FRAME_BIDIR|FRAME_FILL_BLUE);
  674.     }
  675.     else
  676.     {
  677.         clrFrameBuffer(FRAME_REF0|FRAME_REF1);        
  678.     }
  679. // 2004/07/02 yltseng, for PAL/NTSC switch
  680. #if defined( SDRAM_16Mb_Mode ) && defined( SUPPORT_FILE_SYSTEM_MODE )
  681.     if( pFsJpeg->gifsFuncBtn == FS_FUNC_OTHER )
  682.         resync_video_bitstream();
  683. #endif
  684.     // re-enable video
  685.     enable_video();
  686.     // re-enable it
  687.     setup_clock_gating(1);
  688. #ifdef SDRAM_16Mb_Mode//terry,2003/10/21 10:03AM        
  689.     regs0->osd_en = osd_enable;//terry,2003/10/20 03:24PM
  690. #endif
  691.     // 2004/06/12 yltseng move here
  692.     memory_config_saved = configX;
  693.     memory_config_w_saved = w;
  694.     memory_config_h_saved = h;
  695. }
  696. //
  697. //
  698. //
  699. #ifdef DVD_SERVO
  700. #include "sinf.h"
  701. UINT8 ServoDVDUserArea[200]; //extent to support DVD multi-session, Jeff 20031208
  702. void
  703. config_servo_buffer(void)
  704. {   // 2004/11/24 yltseng, to make code clear
  705.     unsigned tbya, size;
  706.     extern  UINT8   DiscType;
  707.     if( cd_type_loaded == CDROM )
  708.     {
  709.         //mp3/jpeg/file play
  710.     #ifdef MP3_PLAY_LONG_ESP      //Gordon 20030718
  711.         if (Is_JPEG_STATE()) 
  712.             size = JPEG_SERVO_SIZE;
  713.         else if(Is_MP3_STATE())
  714.             size = JPEG_SERVO_SIZE+GP_LUMA_SIZE+GP_CHROMA_SIZE;
  715.         else 
  716.     #endif  
  717.             size = JPEG_SERVO_SIZE;
  718.         tbya = A_JPEG_SERVO_YA;     // DVD servo track-buffer pointer
  719.         if (DiscType == CDDVD) {
  720.             servo_max_buffer = 16 * ((unsigned)((size*1024) / 43316));    
  721.         } else {
  722.             servo_max_buffer = ((size*1024) / 2496) - 1;
  723.         }
  724.     }
  725.     else
  726.     {
  727.         tbya = A_DVD_SERVO_YA;      // DVD servo track-buffer pointer     
  728.     #ifdef DVD_AUDIO
  729.         size = dAMG_LSN ? DVDA_SERVO_SIZE : DVDV_SERVO_SIZE;
  730.     #else
  731.         size = DVDV_SERVO_SIZE;
  732.     #endif
  733.         servo_max_buffer = 16 * ((unsigned)((size*1024) / 43316));  // 2004/11/29 yltseng
  734.     }
  735.     #ifdef PORTABLE_DVD
  736.     extern int is_iop_call_back(unsigned *,unsigned *,BYTE);//jhuang 2003/12/3
  737.     is_iop_call_back(&tbya,&size,0);
  738.     #endif
  739.     if (is_svo_dvd())
  740.     {
  741.         pServoUserInfo = ServoDVDUserArea;
  742.     }
  743.     else
  744.     {
  745.         // cd
  746.         pServoUserInfo = (UINT8 *)(SDRAM_BASE_CACHED + (tbya)*1024);
  747.         tbya+=1;
  748.     }
  749.     pTrackBuf = (UINT8 *) (SDRAM_BASE_UNCACHED + (tbya)*1024);  
  750.       
  751.     regs0->rf_sdramif_tbya  = tbya;                 // SERVO track buffer
  752.     regs0->cdrya            = tbya;                 // HOST read buffer
  753.     regs0->cdrya_limit      = size-1;
  754.     #ifdef  MONE_CONFIG
  755.     memcfg_printf("config_servo_buffer()n");
  756.     memcfg_printf("tbya $%x cdrya $%x cdrya_limit $%xn", tbya, tbya, size-1);
  757.     memcfg_printf("servo_max_buffer %dn", servo_max_buffer);
  758.     #endif
  759. }
  760. #endif
  761. #ifdef MODIFY_OSD_SHOW_NEW_STYLE_WINDOW
  762. /*
  763.  *Function Description:
  764.  *    to get the config mode is PAl or NTSC
  765.  *
  766.  *   zhaoyanhua add 2003-12-18 10:38
  767.  */
  768. /*
  769. BYTE GetConfigMode(int config)
  770. {
  771.     BYTE mode = 0;
  772.     
  773.     switch(config)
  774.     {
  775.         case MEMORY_GRAPH_NTSC:
  776.         case MEMORY_DVD_NTSC :
  777.         case MEMORY_SVCD_NTSC:
  778.         case MEMORY_CVD_NTSC:
  779.         case MEMORY_VCD_NTSC:
  780.             mode = MODE_NTSC;
  781.             break;
  782.         case MEMORY_GRAPH_PAL:
  783.         case MEMORY_PREVIEW:
  784.         case MEMORY_DVD_PAL:
  785.         case MEMORY_SVCD_PAL:
  786.         case MEMORY_CVD_PAL:
  787.         case MEMORY_VCD_PAL:
  788.         case MEMORY_DVD_AUDIO:
  789.         default:
  790.             mode = MODE_PAL;
  791.     }
  792.     return mode;
  793. }
  794. #endif
  795. */
  796. BYTE GetConfigMode(int config)   //terry edit   fengjl upload it 3-12-24 12:59
  797. {
  798.      BYTE mode = 0;
  799.      //if(tv_format!=MODE_AUTO)
  800.      {
  801.        if(getVPP_TVsystem()==1) mode = MODE_PAL;
  802.        else mode = MODE_NTSC;
  803.      }
  804.      /*
  805.      else
  806.      {
  807.        switch(config)
  808.        {
  809.           case MEMORY_GRAPH_NTSC:
  810.           case MEMORY_DVD_NTSC :
  811.           case MEMORY_SVCD_NTSC:
  812.           case MEMORY_CVD_NTSC:
  813.           case MEMORY_VCD_NTSC:
  814.                mode = MODE_NTSC;
  815.                break;          
  816.           default:
  817.                if(getVPP_TVsystem()==1) mode = MODE_PAL;
  818.                else mode = MODE_NTSC;
  819.        }
  820.      }*/
  821.      return mode;
  822. }
  823. #endif