Annotation of uae/src/od-dos/joystick.c, revision 1.1

1.1     ! root        1:  /*
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   *
        !             4:   * Joystick emulation for DOS
        !             5:   *
        !             6:   * Copyright 1996, 1997 Gustavo Goedert
        !             7:   */
        !             8: 
        !             9: #include "sysconfig.h"
        !            10: #include "sysdeps.h"
        !            11: 
        !            12: #include <dos.h>
        !            13: 
        !            14: #include "config.h"
        !            15: #include "options.h"
        !            16: #include "memory.h"
        !            17: #include "custom.h"
        !            18: #include "joystick.h"
        !            19: 
        !            20: int HasJoy0 = 0, HasJoy1 = 0;
        !            21: int minx0, maxx0, miny0, maxy0;
        !            22: int minx1, maxx1, miny1, maxy1;
        !            23: 
        !            24: void read_joystick(int nr, unsigned int *dir, int *button) {
        !            25:     int *minx, *maxx, *miny, *maxy;
        !            26:     int left = 0, right = 0, top = 0, bot = 0;
        !            27:     char JoyPort;
        !            28:     int laps, JoyX, JoyY, XCenter, YCenter, XDelta, YDelta;
        !            29: 
        !            30:     *dir = 0;
        !            31:     *button = 0;
        !            32:     if (((nr == 0) && (HasJoy0 == 0)) || ((nr == 1) && (HasJoy1 == 0)))
        !            33:        return;
        !            34: 
        !            35:     JoyX = 0;
        !            36:     JoyY = 0;
        !            37:     laps = 0;
        !            38:     outportb(0x201, 0xff);
        !            39:     if (nr == 0) {
        !            40:        disable();
        !            41:        do {
        !            42:            JoyPort = inportb(0x201);
        !            43:            if (JoyPort & 1)
        !            44:                JoyX++;
        !            45:            if (JoyPort & 2)
        !            46:                JoyY++;
        !            47:            laps++;
        !            48:        } while(((JoyPort & 3) != 0) && (laps != 65535));
        !            49:        enable();
        !            50:        if (laps == 65535) {
        !            51:            HasJoy0 = 0;
        !            52:            return;
        !            53:        }
        !            54:        minx = &minx0;
        !            55:        maxx = &maxx0;
        !            56:        miny = &miny0;
        !            57:        maxy = &maxy0;
        !            58:     } else {
        !            59:        disable();
        !            60:        do {
        !            61:            JoyPort = inportb(0x201);
        !            62:            if (JoyPort & 4)
        !            63:                JoyX++;
        !            64:            if (JoyPort & 8)
        !            65:                JoyY++;
        !            66:            laps++;
        !            67:        } while(((JoyPort & 12) != 0) && (laps != 65535));
        !            68:        enable();
        !            69:        if (laps == 65535) {
        !            70:            HasJoy1 = 0;
        !            71:            return;
        !            72:        }
        !            73:        minx = &minx1;
        !            74:        maxx = &maxx1;
        !            75:        miny = &miny1;
        !            76:        maxy = &maxy1;
        !            77:     }
        !            78: 
        !            79:     if (JoyX < (*minx)) *minx = JoyX;
        !            80:     if (JoyY < (*miny)) *miny = JoyY;
        !            81:     if (JoyX > (*maxx)) *maxx = JoyX;
        !            82:     if (JoyY > (*maxy)) *maxy = JoyY;
        !            83: 
        !            84:     XCenter = ((*maxx)+(*minx))/2;
        !            85:     YCenter = ((*maxy)+(*miny))/2;
        !            86:     XDelta = ((*maxx)-(*minx))/3;
        !            87:     YDelta = ((*maxy)-(*miny))/3;
        !            88: 
        !            89:     if (JoyX < (XCenter-XDelta))
        !            90:        left = 1;
        !            91:     if (JoyX > (XCenter+XDelta))
        !            92:        right = 1;
        !            93: 
        !            94:     if (JoyY < (YCenter-YDelta))
        !            95:        top = 1;
        !            96:     if (JoyY > (YCenter+YDelta))
        !            97:        bot = 1;
        !            98: 
        !            99:     if (left) top = !top;
        !           100:     if (right) bot = !bot;
        !           101:     *dir = bot | (right << 1) | (top << 8) | (left << 9);
        !           102: 
        !           103:     JoyPort = ~JoyPort;
        !           104:     if (nr == 0) {
        !           105:        if (JoyPort & 16) *button += 1;
        !           106:        if (JoyPort & 32) *button += 2;
        !           107:     } else {
        !           108:        if (JoyPort & 64) *button += 1;
        !           109:        if (JoyPort & 128) *button += 2;
        !           110:     }
        !           111:     if ((*button) == 3) *button = 4;
        !           112: }
        !           113: 
        !           114: void init_joystick(void) {
        !           115:     int laps, JoyX, JoyY;
        !           116:     char JoyPort;
        !           117: 
        !           118:     JoyX = 0;
        !           119:     JoyY = 0;
        !           120:     laps = 0;
        !           121:     disable();
        !           122:     outportb(0x201, 0xff);
        !           123:     do {
        !           124:        JoyPort = inportb(0x201);
        !           125:        if (JoyPort & 1)
        !           126:            JoyX++;
        !           127:        if (JoyPort & 2)
        !           128:            JoyY++;
        !           129:        laps++;
        !           130:     } while(((JoyPort & 3) != 0) && (laps != 65535));
        !           131:     enable();
        !           132:     if (laps != 65535) {
        !           133:        HasJoy0 = 1;
        !           134:        minx0 = JoyX - 2*JoyX/3;
        !           135:        maxx0 = JoyX + 2*JoyX/3;
        !           136:        miny0 = JoyY - 2*JoyY/3;
        !           137:        maxy0 = JoyY + 2*JoyY/3;
        !           138:     }
        !           139: 
        !           140:     JoyX = 0;
        !           141:     JoyY = 0;
        !           142:     laps = 0;
        !           143:     disable();
        !           144:     outportb(0x201, 0xff);
        !           145:     do {
        !           146:        JoyPort = inportb(0x201);
        !           147:        if (JoyPort & 4)
        !           148:            JoyX++;
        !           149:        if (JoyPort & 8)
        !           150:            JoyY++;
        !           151:        laps++;
        !           152:     } while(((JoyPort & 12) != 0) && (laps != 65535));
        !           153:     enable();
        !           154:     if (laps != 65535) {
        !           155:        HasJoy1 = 1;
        !           156:        minx1 = JoyX - 2*JoyX/3;
        !           157:        maxx1 = JoyX + 2*JoyX/3;
        !           158:        miny1 = JoyY - 2*JoyY/3;
        !           159:        maxy1 = JoyY + 2*JoyY/3;
        !           160:     }
        !           161: }
        !           162: 
        !           163: void close_joystick(void) {
        !           164: }

unix.superglobalmegacorp.com

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