// *****************************************************************************
// * Config_SIOC ver 1.97 - By Manolo Vélez -
www.opencockpits.com
// *****************************************************************************
// * FileName : MCP_737.txt
// * Date : 3/4/2005
// * Ver : 1.0
// * MCP de Project Magenta de 737, usando 00 fijos para ALT y VSpeed, y - del VS mediante salida
//********************************
// INICIALIZACION
//********************************
Var 2000, Value 0
{
V2501 = 2 // COURSE
V2503 = 1 // HDG
V2504 = 10 // ALT
V2567 = 1 // 00 DEL ALT (el 00 es fijo)
V2250 = SETBIT 23 // Pone MODO IAS
V2257 = V2104 // IAS leidas en IAS temporal
V2258 = V2105 // MATH leidas en MATH temporal
V2502 = V2104 // Pone por IAS en display
}
//********************************
// ENTRADAS DESDE FSUIPC
//********************************
Var 2101, Link FSUIPC_IN, Offset $04E6, Length 2 // VS de entrada
{
L0 = V2101 // En L0 el valor leido
C0 = TESTBIT V2101 ,15 // Comprueba si es Negativo
IF C0
{
V2800 = L0 - 65536 // Si es negativo binario pasa a negativo d
}
ELSE
{
V2800 = L0 // No es negativo, deja igual dejando siemp
}
CALL V2900 // Pone valor en el display
}
Var 2102, Link FSUIPC_IN, Offset $051C, Length 2 // Indicadores MCP
{
C0 = TESTBIT V2102 ,0 // Está apagado el Display del VS ?
IF C0 // SI, entonces
{
V2554 = 0 // Quita el 00 final del display
V2500 = -999999 // Apaga resto de digitos
V2553 = 0 // Me aseguro de apagar el signo -
}
ELSE // NO, entonces
{
V2554 = 1 // Enciende los 00 del display
CALL V2900 // Pone el V/S en el display
}
}
Var 2103, Link FSUIPC_IN, Offset $04F0, Length 2 // LUCES del MCP
{
V2552 = TESTBIT V2103 ,2 // V/S
V2551 = TESTBIT V2103 ,12 // F/D
V2550 = TESTBIT V2103 ,11 // A/T
V2555 = TESTBIT V2103 ,9 // SPEED
V2556 = TESTBIT V2103 ,10 // N1
V2557 = TESTBIT V2103 ,3 // ALT HOLD
V2558 = TESTBIT V2103 ,4 // APP
V2559 = TESTBIT V2103 ,5 // VORLOC
V2560 = TESTBIT V2103 ,6 // LNAV
V2561 = TESTBIT V2103 ,7 // HDG
V2562 = TESTBIT V2103 ,8 // LVL CHG
V2563 = TESTBIT V2103 ,14 // VNAV
V2564 = TESTBIT V2103 ,0 // AP1
V2565 = TESTBIT V2103 ,1 // AP2
C0 = TESTBIT V2103 ,15 // Modo MATH o IAS ?
IF C0 // MATH MODE
{
V2258 = V2105 // Cargo valor en temporal
V2566 = 1 // Enciendo el punto decimal
CALL V2901 // Display del valor
}
ELSE // IAS MODE
{
V2257 = V2104 // Cargo valor en temporal
V2566 = 0 // Apago el punto decimal
CALL V2901 // Display del valor
}
}
Var 2104, Link FSUIPC_IN, Offset $04E0, Length 2 // IAS
{
CALL V2901 // Display del valor
}
Var 2105, Link FSUIPC_IN, Offset $04E8, Length 2 // MATH
{
CALL V2901 // Display del valor
}
//********************************
// SALIDAS A FSUIPC
//********************************
Var 2250, Link FSUIPC_OUT, Offset $5410, Length 4 // Pulsadores-I PM
Var 2251, Link FSUIPC_OUT, Offset $5414, Length 4 // Pulsadores-II PM
Var 2252, Link FSUIPC_OUT, Offset $540C, Length 2 // V/S de salida
Var 2253, Link FSUIPC_OUT, Offset $5414, Length 4 // Botones MCP
Var 2254, Link FSUIPC_OUT, Offset $0C4E, Length 2 // COURSE
Var 2255, Link FSUIPC_OUT, Offset $5408, Length 2 // HDG
Var 2256, Link FSUIPC_OUT, Offset $540A, Length 2 // ALT
Var 2257, Link FSUIPC_OUT, Offset $5406, Length 2 // IAS
Var 2258, Link FSUIPC_OUT, Offset $540E, Length 2 // MATH
//********************************
// INTERRUPTORES Y PULSADORES
//********************************
Var 2300, Link IOCARD_SW, Input 38 // Interruptor A/T
{
IF V2300 = 1 // Si está encendido
{
V2250 = TOGGLE 19 // Hago toggle del bit 19
}
ELSE
{
V2250 = TOGGLE 20 // Si apagado, toggle del bit 20
}
}
Var 2301, Link IOCARD_SW, Input 27 // Interruptor F/D
{
IF V2301 = 1
{
V2251 = TOGGLE 5
}
ELSE
{
V2251 = TOGGLE 6
}
}
Var 2302, Link IOCARD_SW, Input 52, Type P // Boton V/S
{
V2253 = CHANGEBIT 11 ,V2302 // Si pulsador encendido, bit 11 a 1, si ap
}
Var 2303, Link IOCARD_SW, Input 35, Type P // Boton SPEED
{
V2250 = CHANGEBIT 22 ,V2303
}
Var 2304, Link IOCARD_SW, Input 34, Type P // Boton N1
{
V2250 = CHANGEBIT 21 ,V2304
}
Var 2305, Link IOCARD_SW, Input 36, Type P // Boton LVL CHG
{
V2250 = CHANGEBIT 24 ,V2305
}
Var 2306, Link IOCARD_SW, Input 39, Type P // Boton HDG
{
V2250 = CHANGEBIT 25 ,V2306
}
Var 2307, Link IOCARD_SW, Input 44, Type P // Boton ALT HOLD
{
V2250 = CHANGEBIT 30 ,V2307
}
Var 2308, Link IOCARD_SW, Input 37, Type P // Boton APP
{
V2250 = CHANGEBIT 29 ,V2308
}
Var 2309, Link IOCARD_SW, Input 53, Type P // Boton VORLOC
{
V2250 = CHANGEBIT 28 ,V2309
}
Var 2310, Link IOCARD_SW, Input 45, Type P // Boton LNAV
{
V2250 = CHANGEBIT 27 ,V2310
}
Var 2311, Link IOCARD_SW, Input 49, Type P // Boton VNAV
{
V2250 = CHANGEBIT 26 ,V2311
}
Var 2312, Link IOCARD_SW, Input 50, Type P // Boton DISENGAGE
{
IF V2312 = 0
{
V2253 = TOGGLE 8 // Si apago pongo el bit a 0
}
ELSE
{
V2253 = TOGGLE 9 // Si está encendido, pongo el BIT a 1
}
}
Var 2313, Link IOCARD_SW, Input 62, Type P // Boton AP1
{
V2253 = CHANGEBIT 0 ,V2313
}
Var 2314, Link IOCARD_SW, Input 58, Type P // Boton AP2
{
V2253 = CHANGEBIT 1 ,V2314
}
Var 2315, Link IOCARD_SW, Input 40, Type P // Boton MATH
{
V2250 = CHANGEBIT 23 ,V2315
}
//********************************
// ROTARY-ENCODERS
//********************************
Var 2400, Link IOCARD_ENCODER, Input 55, Aceleration 6 // Encoder VS
{
L0 = V2400 * 100 // Incrementa de 100 en 100
V2800 = ROTATE -9000 ,9000 ,L0 // Suma o resta del valor temporal de V/S
IF V2800 < 0 // Si temporal V/S es negativo
{
V2252 = V2800 + 65536 // pasa a binario negativo.
}
ELSE
{
V2252 = V2800 // Si no, deja igual pasando el valor al PM
}
}
Var 2401, Link IOCARD_ENCODER, Input 31, Aceleration 6 // Encoder COURSE
{
V2501 = ROTATE 0 ,359 ,V2401 // Roto el valor del COURSE
}
Var 2402, Link IOCARD_ENCODER, Input 28, Aceleration 6 // Encoder IAS Y MATH
{
C0 = TESTBIT V2103 ,15 // Indicador MATH o IAS ?
IF C0 // MATH MODE
{
V2258 = LIMIT 25 ,95 ,V2402 // Inc o decremento el valor del MATH
}
ELSE
{
V2257 = LIMIT 0 ,340 ,V2402 // Inc o decremento el valor del IAS
}
}
Var 2403, Link IOCARD_ENCODER, Input 41, Aceleration 6 // Encoder HDG
{
V2503 = ROTATE 0 ,359 ,V2403
}
Var 2404, Link IOCARD_ENCODER, Input 46, Aceleration 6 // Encoder ALT
{
V2504 = LIMIT 0 ,500 ,V2404
}
//********************************
// DISPLAYS 7 SEGMENTOS
//********************************
Var 2500, Link IOCARD_DISPLAY, Digit 12, Numbers 2 // VS
Var 2501, Link IOCARD_DISPLAY, Digit 0, Numbers 3 // COURSE
{
V2254 = V2501 // Pasa el valor al PM
}
Var 2502, Link IOCARD_DISPLAY, Digit 3, Numbers 3 // IAS Y MATH
Var 2503, Link IOCARD_DISPLAY, Digit 6, Numbers 3 // HEADING
{
V2255 = V2503 // Pasa el valor al PM
}
Var 2504, Link IOCARD_DISPLAY, Digit 9, Numbers 3 // ALT
{
V2256 = V2504 // Pasa el valor al PM
}
//*************************************
// SALIDAS DE LA MASTER (LEDS Y FIJOS)
//*************************************
Var 2550, Link IOCARD_OUT, Output 29 // Led A/T
Var 2551, Link IOCARD_OUT, Output 19 // Led F/D
Var 2552, Link IOCARD_OUT, Output 38 // Led del boton V/S
Var 2553, Link IOCARD_OUT, Output 36 // Signo - del display V/S
Var 2554, Link IOCARD_OUT, Output 35 // 00 del VS
Var 2555, Link IOCARD_OUT, Output 17 // Led SPEED
Var 2556, Link IOCARD_OUT, Output 18 // Led N1
Var 2557, Link IOCARD_OUT, Output 26 // Led ALT HOLD
Var 2558, Link IOCARD_OUT, Output 25 // Led APP
Var 2559, Link IOCARD_OUT, Output 23 // Led VORLOC
Var 2560, Link IOCARD_OUT, Output 24 // Led LNAV
Var 2561, Link IOCARD_OUT, Output 22 // Led HDG
Var 2562, Link IOCARD_OUT, Output 21 // Led LVL CHG
Var 2563, Link IOCARD_OUT, Output 20 // Led VNAV
Var 2564, Link IOCARD_OUT, Output 34 // Led AP1
Var 2565, Link IOCARD_OUT, Output 30 // Led AP2
Var 2566, Link IOCARD_OUT, Output 28 // Led . DECIMAL
Var 2567, Link IOCARD_OUT, Output 27 // 00 del ALT
//********************************
// VARIABLES IOCP INTERNAS
//********************************
Var 2800 // Valor temporal del V/S
//********************************
// RUTINAS INTERNAS
//********************************
Var 2900, Link SUBRUTINE // Pinta V/S
{
C0 = TESTBIT V2102 ,0 // Comprueba si deben de estar apagados
C0 = NOT C0
IF C0 // Sólo en el caso de estar encendidos
{
IF V2800 < 0 // Si V/S es negativo, pasa a positivo
{
L0 = ABS V2800
V2553 = 1 // Enciendo el signo -
}
ELSE
{
V2553 = 0 // Apago el signo -
L0 = V2800
}
V2500 = L0 / 100 // Manda el valor ajustado de V/S a display
}
}
Var 2901, Link SUBRUTINE // Pinta IAS / MATH
{
C0 = TESTBIT V2103 ,15 // Modo MATH o IAS ?
IF C0 // MATH MODE
{
V2502 = V2105 // Pone valor MATH en el display
}
ELSE
{
V2502 = V2104 // Pone valor IAS en el display
}
}