Ticket #8311: scummvm-linupy.patch

File scummvm-linupy.patch, 16.0 KB (added by SF/kilobug, 17 years ago)

Patch for Linupy mode

  • scummvm-0.5.

    diff -ru scummvm-0.5.1/Makefile scummvm-0.5.1-linupy/Makefile
    old new  
    4242#CXXFLAGS+= -Wredundant-decls
    4343
    4444# Load the build rules & settings for the chosen backend
    45 -include build.rules
     45include config.mak
    4646
    4747#######################################################################
    4848# Compile options - you can modify these to tweak ScummVM compilation #
    4949#######################################################################
    5050
    5151# Uncomment this to activate the MAD lib for compressed sound files
    52 DEFINES += -DUSE_MAD
    53 LIBS    += -lmad
     52# DEFINES += -DUSE_MAD
     53# LIBS    += -lmad
    5454
    5555# Uncomment this to activate the Ogg Vorbis lib for compressed sound files
    5656# DEFINES += -DUSE_VORBIS
  • backends/sdl/sdl-common.cpp

    diff -ru scummvm-0.5.1/backends/sdl/sdl-common.cpp scummvm-0.5.1-linupy/backends/sdl/sdl-common.cpp
    old new  
    5959        _mode = gfx_mode;
    6060        _full_screen = full_screen;
    6161        _adjustAspectRatio = aspect_ratio;
    62         _mode_flags = 0;
     62        _mode_flags = 0;       
     63        _xyflipped = false;
    6364
    6465        if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK) ==-1) {
    6566                error("Could not initialize SDL: %s.\n", SDL_GetError());
     
    9192OSystem_SDL_Common::OSystem_SDL_Common()
    9293        : _screen(0), _screenWidth(0), _screenHeight(0),
    9394        _tmpscreen(0), _tmpScreenWidth(0), _overlayVisible(false),
    94         _cdrom(0), _dirty_checksums(0),
     95        _cdrom(0), _dirty_checksums(0), 
    9596        _mouseVisible(false), _mouseDrawn(false), _mouseData(0),
    9697        _mouseHotspotX(0), _mouseHotspotY(0),
    9798        _currentShakePos(0), _newShakePos(0),
     
    529530        return key;
    530531}
    531532
     533void OSystem_SDL_Common::mouse_position_wrap(Event *event) {
     534        event->mouse.x /= _scaleFactor;
     535        event->mouse.y /= _scaleFactor;
     536       
     537        if (_adjustAspectRatio)
     538                event->mouse.y = aspect2Real(event->mouse.y);
     539       
     540        if (_xyflipped) {
     541                int tmp = event->mouse.x;
     542                event->mouse.x = event->mouse.y;
     543                event->mouse.y = _screenHeight - tmp - 1;
     544        }
     545}
     546
    532547bool OSystem_SDL_Common::poll_event(Event *event) {
    533548        SDL_Event ev;
    534549        int axis;
     
    539554        while(SDL_PollEvent(&ev)) {
    540555                switch(ev.type) {
    541556                case SDL_KEYDOWN:
     557#ifdef LINUPY
     558                        // Yopy has no ALT key, steal the SHIFT key
     559                        // (which isn't used much anyway)
     560                        if (ev.key.keysym.mod & KMOD_SHIFT)
     561                                b |= KBD_ALT;
     562                        if (ev.key.keysym.mod & KMOD_CTRL)
     563                                b |= KBD_CTRL;
     564#else
    542565                        if (ev.key.keysym.mod & KMOD_SHIFT)
    543566                                b |= KBD_SHIFT;
    544567                        if (ev.key.keysym.mod & KMOD_CTRL)
    545568                                b |= KBD_CTRL;
    546569                        if (ev.key.keysym.mod & KMOD_ALT)
    547570                                b |= KBD_ALT;
     571#endif
    548572                        event->kbd.flags = b;
    549573
    550574                        // Alt-Return toggles full screen mode                         
     
    596620                                break;
    597621                        }
    598622
     623#ifdef LINUPY
     624                        // On Yopy map the End button to quit
     625                        if ((ev.key.keysym.sym==293)) {
     626                                event->event_code = EVENT_QUIT;
     627                                return true;
     628                        }
     629                        // Map menu key to f5 (scumm menu)
     630                        if (ev.key.keysym.sym==306) {
     631                                event->event_code = EVENT_KEYDOWN;
     632                                event->kbd.keycode = SDLK_F5;
     633                                event->kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
     634                                return true;
     635                        }
     636                        // Map action key to action
     637                        if (ev.key.keysym.sym==291) {
     638                                event->event_code = EVENT_KEYDOWN;
     639                                event->kbd.keycode = SDLK_TAB;
     640                                event->kbd.ascii = mapKey(SDLK_TAB, ev.key.keysym.mod, 0);
     641                                return true;
     642                        }
     643                        // Map OK key to skip cinematic
     644                        if (ev.key.keysym.sym==292) {
     645                                event->event_code = EVENT_KEYDOWN;
     646                                event->kbd.keycode = SDLK_ESCAPE;
     647                                event->kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
     648                                return true;
     649                        }
     650#endif
     651
    599652#ifdef QTOPIA
    600653                        // quit on fn+backspace on zaurus
    601654                        if (ev.key.keysym.sym == 127) {
     
    698751                        event->event_code = EVENT_MOUSEMOVE;
    699752                        km.x = event->mouse.x = ev.motion.x;
    700753                        km.y = event->mouse.y = ev.motion.y;
    701 
    702                         event->mouse.x /= _scaleFactor;
    703                         event->mouse.y /= _scaleFactor;
    704 
    705                         if (_adjustAspectRatio)
    706                                 event->mouse.y = aspect2Real(event->mouse.y);
     754                       
     755                        mouse_position_wrap(event);
    707756                        return true;
    708757
    709758                case SDL_MOUSEBUTTONDOWN:
     
    721770                                break;
    722771                        km.x = event->mouse.x = ev.button.x;
    723772                        km.y = event->mouse.y = ev.button.y;
    724                         event->mouse.x /= _scaleFactor;
    725                         event->mouse.y /= _scaleFactor;
    726 
    727                         if (_adjustAspectRatio)
    728                                 event->mouse.y = aspect2Real(event->mouse.y);
    729773
     774                        mouse_position_wrap(event);
    730775                        return true;
    731776
    732777                case SDL_MOUSEBUTTONUP:
     
    738783                                break;
    739784                        event->mouse.x = ev.button.x;
    740785                        event->mouse.y = ev.button.y;
    741                         event->mouse.x /= _scaleFactor;
    742                         event->mouse.y /= _scaleFactor;
    743 
    744                         if (_adjustAspectRatio)
    745                                 event->mouse.y = aspect2Real(event->mouse.y);
    746786
     787                        mouse_position_wrap(event);
    747788                        return true;
    748789
    749790                case SDL_JOYBUTTONDOWN:
     
    846887                        }
    847888                        event->mouse.x = km.x;
    848889                        event->mouse.y = km.y;
    849                         event->mouse.x /= _scaleFactor;
    850                         event->mouse.y /= _scaleFactor;
    851 
    852                         if (_adjustAspectRatio)
    853                                 event->mouse.y = aspect2Real(event->mouse.y);
    854890
     891                        mouse_position_wrap(event);
    855892                        return true;
    856893
    857894                case SDL_VIDEOEXPOSE:
  • backends/sdl/sdl-common.h

    diff -ru scummvm-0.5.1/backends/sdl/sdl-common.h scummvm-0.5.1-linupy/backends/sdl/sdl-common.h
    old new  
    160160        bool _full_screen;
    161161        uint32 _mode_flags;
    162162
     163        bool _xyflipped;
     164        int _realWidth, _realHeight;
     165
    163166        enum {
    164167                NUM_DIRTY_RECT = 100,
    165168
     
    224227        virtual void load_gfx_mode() = 0;
    225228        virtual void unload_gfx_mode() = 0;
    226229
     230        void mouse_position_wrap(Event *event);
     231
    227232        void setup_icon();
    228233        void kbd_mouse();
    229234        void init_joystick() { _joystick = SDL_JoystickOpen(0); }
  • backends/sdl/sdl.cpp

    diff -ru scummvm-0.5.1/backends/sdl/sdl.cpp scummvm-0.5.1-linupy/backends/sdl/sdl.cpp
    old new  
    106106                _scaleFactor = 1;
    107107                _scaler_proc = Normal1x;
    108108                break;
     109
     110        case GFX_XYFLIP:
     111                _scaleFactor = 1;
     112                _scaler_proc = XYFlip;
     113                _xyflipped = true;
     114                break;
    109115        default:
    110116                error("unknown gfx mode %d", _mode);
    111117                _scaleFactor = 1;
     
    122128        //
    123129        // Create the surface that contains the scaled graphics in 16 bit mode
    124130        //
    125 
    126         _hwscreen = SDL_SetVideoMode(_screenWidth * _scaleFactor, (_adjustAspectRatio ? 240 : _screenHeight) * _scaleFactor, 16,
    127                 _full_screen ? (SDL_FULLSCREEN|SDL_SWSURFACE) : SDL_SWSURFACE
    128         );
     131        if (_xyflipped) {
     132                _realWidth = (_adjustAspectRatio ? 240 : _screenHeight) * _scaleFactor;
     133                _realHeight = _screenWidth * _scaleFactor;
     134        } else {
     135                _realWidth = _screenWidth * _scaleFactor;
     136                _realHeight = (_adjustAspectRatio ? 240 : _screenHeight) * _scaleFactor;
     137        }
     138        _hwscreen = SDL_SetVideoMode(_realWidth, _realHeight, 16,
     139                                     _full_screen ? (SDL_FULLSCREEN|SDL_SWSURFACE) : SDL_SWSURFACE);
    129140        if (_hwscreen == NULL)
    130141                error("_hwscreen failed");
    131142
     
    152163                error("_tmpscreen failed");
    153164
    154165        // keyboard cursor control, some other better place for it?
    155         km.x_max = _screenWidth * _scaleFactor - 1;
    156         km.y_max = _screenHeight * _scaleFactor - 1;
     166        km.x_max = _realWidth - 1;
     167        km.y_max = _realHeight - 1;
    157168        km.delay_time = 25;
    158169        km.last_time = 0;
    159170}
     
    214225
    215226        // If the shake position changed, fill the dirty area with blackness
    216227        if (_currentShakePos != _newShakePos) {
    217                 SDL_Rect blackrect = {0, 0, _screenWidth * _scaleFactor, _newShakePos * _scaleFactor};
     228                SDL_Rect blackrect = {0, 0, _realWidth, _newShakePos * _scaleFactor};
    218229
    219230                if (_adjustAspectRatio)
    220231                        blackrect.h = real2Aspect(blackrect.h - 1) + 1;
     
    228239
    229240        // Make sure the mouse is drawn, if it should be drawn.
    230241        draw_mouse();
    231        
     242
    232243        // Check whether the palette was changed in the meantime and update the
    233244        // screen surface accordingly.
    234245        if (_paletteDirtyEnd != 0) {
     
    241252                _forceFull = true;
    242253        }
    243254
     255        if (_xyflipped)
     256                _forceFull = true;
     257
    244258        // Force a full redraw if requested
    245259        if (_forceFull) {
    246260                _num_dirty_rects = 1;
     
    311325                                                (byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h);
    312326                                }
    313327
    314                                 r->x *= _scaleFactor;
    315                                 r->y = dst_y;
    316                                 r->w *= _scaleFactor;
    317                                 r->h = dst_h * _scaleFactor;
     328                                if (_xyflipped) {
     329                                        r->y = r->x * _scaleFactor;
     330                                        r->x = dst_y;
     331                                        r->h = r->w * _scaleFactor;
     332                                        r->w = dst_h * _scaleFactor;
     333                                } else {
     334                                        r->x *= _scaleFactor;
     335                                        r->y = dst_y;
     336                                        r->w *= _scaleFactor;
     337                                        r->h = dst_h * _scaleFactor;
     338                                }
    318339
    319340                                if (_adjustAspectRatio && orig_dst_y / _scaleFactor < _screenHeight)
    320341                                        r->h = stretch200To240((uint8 *) _hwscreen->pixels, dstPitch, r->w, r->h, r->x, r->y, orig_dst_y);
     
    327348                // This is necessary if shaking is active.
    328349                if (_forceFull) {
    329350                        _dirty_rect_list[0].y = 0;
    330                         _dirty_rect_list[0].h = (_adjustAspectRatio ? 240 : _screenHeight) * _scaleFactor;
     351                        _dirty_rect_list[0].h = _realHeight;
    331352                }
    332353
    333354                // Finally, blit all our changes to the screen
  • common/gameDetector.cpp

    Only in scummvm-0.5.1-linupy: build.rules
    diff -ru scummvm-0.5.1/common/gameDetector.cpp scummvm-0.5.1-linupy/common/gameDetector.cpp
    old new  
    5454        "\t-x[<num>]      - load this savegame (default: 0 - autosave)\n"
    5555        "\t-f             - fullscreen mode\n"
    5656        "\t-g<mode>       - graphics mode (normal,2x,3x,2xsai,super2xsai,\n"
    57         "\t                 supereagle,advmame2x,advmame3x,tv2x,dotmatrix)\n"
     57        "\t                 supereagle,advmame2x,advmame3x,tv2x,dotmatrix,\n"
     58        "                   xyflip)\n"
    5859        "\t-e<mode>       - set music engine (see README for details)\n"
    5960        "\t-a             - specify game is amiga version\n"
    6061        "\t-q<lang>       - specify language (en,de,fr,it,pt,es,jp,zh,kr,se,\n"
     
    110111        {"tv2x", "TV2x", GFX_TV2X},
    111112        {"dotmatrix", "DotMatrix", GFX_DOTMATRIX},
    112113        {"opengl", "OpenGL", GFX_BILINEAR},
     114        {"xyflip", "XYFlip", GFX_XYFLIP},
    113115#else
    114116        {"flipping", "Page Flipping", GFX_FLIPPING},
    115117        {"dbuffer", "Double Buffer", GFX_DOUBLEBUFFER},
  • common/scaler.cpp

    diff -ru scummvm-0.5.1/common/scaler.cpp scummvm-0.5.1-linupy/common/scaler.cpp
    old new  
    656656        }
    657657}
    658658
     659/** Flip X and Y axis, for Yopy-like PDAs */
     660void XYFlip(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
     661                                        int width, int height)
     662{
     663        unsigned int nextlineSrc = srcPitch / sizeof(uint16);
     664        const uint16 *p = (const uint16 *)srcPtr;
     665
     666        unsigned int nextlineDst = dstPitch / sizeof(uint16);
     667        uint16 *q = (uint16 *)dstPtr;
     668
     669        for (int j = 0; j < height; ++j) {
     670                for (int i = 0; i < width; ++i) {
     671                        *(q + i * nextlineDst + (height - j - 1)) = *(p + i);
     672                }
     673                p += nextlineSrc;
     674        }
     675}
     676
    659677#define kVeryFastAndUglyAspectMode      0       // No interpolation at all, but super-fast
    660678#define kFastAndNiceAspectMode          1       // Quite good quality with good speed
    661679#define kSlowAndPerfectAspectMode       2       // Accurate but slow code
  • common/scaler.h

    diff -ru scummvm-0.5.1/common/scaler.h scummvm-0.5.1-linupy/common/scaler.h
    old new  
    4040DECLARE_SCALER(Normal3x);
    4141DECLARE_SCALER(TV2x);
    4242DECLARE_SCALER(DotMatrix);
     43DECLARE_SCALER(XYFlip);
    4344
    4445FORCEINLINE int real2Aspect(int y) {
    4546        return y + (y + 1) / 5;
     
    6465        GFX_ADVMAME3X = 7,
    6566        GFX_TV2X = 8,
    6667        GFX_DOTMATRIX = 9,
     68        GFX_XYFLIP = 10,
    6769
    6870        GFX_BILINEAR = 12,    // OpenGL backend
    6971       
  • scummvm-0.5.

    Only in scummvm-0.5.1-linupy: config.h
    Only in scummvm-0.5.1-linupy: config.log
    Only in scummvm-0.5.1-linupy: config.mak
    diff -ru scummvm-0.5.1/configure scummvm-0.5.1-linupy/configure
    old new  
    8080find_sdlconfig()
    8181{
    8282printf "Looking for sdl-config... "
    83 sdlconfigs="$_sdlconfig sdl-config sdl11-config sdl12-config"
    84 for sdlconfig in $sdlconfigs; do
    85   if test "-e $sdlconfig" ; then
    86     _sdlconfig=$sdlconfig
     83if test -n $_sdlconfig; then
    8784    echo $_sdlconfig
    88     break
    89   else
    90     echo "none found!"
    91     exit 1
    92   fi
    93 done
     85else
     86    sdlconfigs="$_sdlconfig sdl-config sdl11-config sdl12-config"
     87    for sdlconfig in $sdlconfigs; do
     88        if test "-e $sdlconfig" ; then
     89            _sdlconfig=$sdlconfig
     90            echo $_sdlconfig
     91            break
     92        else
     93            echo "none found!"
     94            exit 1
     95        fi
     96    done
     97fi
    9498}
    9599
    96100#
     
    156160  -h, --help             display this help and exit
    157161  --backend=BACKEND      backend to build (sdl, sdlgl, x11, morphos, dc, gp32) [sdl]
    158162
     163Special configuration:
     164  --target=TARGET        cross-compile for given target (linupy for Yopy Linux PDA)
     165  --sdl-config=PATH      path to the sdl-config script (for cross-compilations)
     166
    159167Optional Features:
    160168  --disable-scumm        don't build the SCUMM engine
    161169  --disable-simon        don't build the simon engine
     
    182190      --disable-vorbis)         _vorbis=no      ;;
    183191      --enable-mad)             _mad=yes        ;;
    184192      --disable-mad)            _mad=no         ;;
     193      --target=linupy)          _linupy=yes     ;;
    185194
    186195      --backend=*)
    187196        _backend=`echo $ac_option | cut -d '=' -f 2`
    188197        ;;
     198      --sdl-config=*)
     199        _sdlconfig=`echo $ac_option | cut -d '=' -f 2`
     200        ;;
    189201    esac;
    190202done;
    191203
     
    302314                ;;
    303315esac
    304316
    305 #
    306 # Check for endianess
    307 #
    308 printf "Checking endianess... "
    309 cat <<EOF >tmp_endianess_check.cpp
     317if test "$_linupy" = "yes" ; then
     318    echo "Cross-compiling to Linupy:"
     319    echo " - enabling special key bindings."
     320    echo " - forcing memory mode to little endian."
     321    echo " - enabling SCUMM_NEED_ALIGNMENT."
     322    DEFINES="$DEFINES -DLINUPY -DSCUMM_NEED_ALIGNMENT"
     323    _def_endianess='#define SCUMM_LITTLE_ENDIAN'
     324    _def_align='#define SCUMM_NEED_ALIGNMENT'
     325else
     326    #
     327    # Check for endianess
     328    #
     329    printf "Checking endianess... "
     330    cat <<EOF >tmp_endianess_check.cpp
    310331#include <stdio.h>
    311332#include <stdlib.h>
    312333int main(int argc, char **argv)
     
    322343        return 0;
    323344}
    324345EOF
    325 $CXX -o tmp_endianess_check tmp_endianess_check.cpp
    326 endianess=`./tmp_endianess_check`
    327 echo $endianess;
    328 case $endianess in
     346    $CXX -o tmp_endianess_check tmp_endianess_check.cpp
     347    endianess=`./tmp_endianess_check`
     348    echo $endianess;
     349    case $endianess in
    329350        big)
    330                 _def_endianess='#define SCUMM_BIG_ENDIAN'
    331                 ;;
     351            _def_endianess='#define SCUMM_BIG_ENDIAN'
     352            ;;
    332353        little)
    333                 _def_endianess='#define SCUMM_LITTLE_ENDIAN'
    334                 ;;
     354            _def_endianess='#define SCUMM_LITTLE_ENDIAN'
     355            ;;
    335356        *)
    336                 exit 1
    337                 ;;
    338 esac
    339 rm -f tmp_endianess_check tmp_endianess_check.cpp
    340 
    341 #
    342 # Check whether memory alignment is required
    343 #
    344 echo -n "Alignment required... "
    345 cat > $TMPC << EOF
     357            exit 1
     358            ;;
     359    esac
     360    rm -f tmp_endianess_check tmp_endianess_check.cpp
     361
     362    #
     363    # Check whether memory alignment is required
     364    #
     365    echo -n "Alignment required... "
     366    cat > $TMPC << EOF
    346367#include <stdlib.h>
    347368#include <signal.h>
    348369int main(int argc, char **argv)
     
    357378        return 0;
    358379}
    359380EOF
    360 _need_memalign=yes
    361 cc_check && $TMPO && _need_memalign=no
    362 if test "$_need_memalign" = yes ; then
    363   _def_align='#define SCUMM_NEED_ALIGNMENT'
    364 else
    365  _def_align='#undef SCUMM_NEED_ALIGNMENT'
     381    _need_memalign=yes
     382    cc_check && $TMPO && _need_memalign=no
     383    if test "$_need_memalign" = yes ; then
     384        _def_align='#define SCUMM_NEED_ALIGNMENT'
     385        DEFINES="$DEFINES -DSCUMM_NEED_ALIGNMENT"
     386    else
     387        _def_align='#undef SCUMM_NEED_ALIGNMENT'
     388    fi
     389    echo "$_need_memalign"
     390
     391
    366392fi
    367 echo "$_need_memalign"
    368393
    369394#
    370395# Determine data type sizes
     
    519544#endif /* CONFIG_H */
    520545EOF
    521546
     547if test "$_linupy" = "yes" ; then
     548    echo "Use the --sdl-config= option if you have problems with SDL."
     549    CXX=arm-linux-g++
     550    RANLIB=arm-linux-ranlib
     551fi
     552
    522553echo "Creating config.mak"
    523554cat > config.mak << EOF
    524555# -------- Generated by configure -----------
     
    535566DEFINES += $DEFINES
    536567LDFLAGS += $LDFLAGS
    537568EOF
     569