Initial commit of Command & Conquer Red Alert source code.

This commit is contained in:
LFeenanEA
2025-02-27 16:15:05 +00:00
parent b685cea758
commit 5e733d5dcc
2082 changed files with 797727 additions and 0 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,447 @@
/*
** Command & Conquer Red Alert(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
***************************************************************************
* *
* Project Name : Westwood 32 bit Library *
* *
* File Name : KEYBOARD.H *
* *
* Programmer : Phil W. Gorrow *
* *
* Start Date : July 13, 1994 *
* *
* Last Update : July 13, 1994 [PWG] *
* *
*-------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef KEYBOARD_H
#define KEYBOARD_H
/*=========================================================================*/
/* If we have not already loaded the standard library header, than we can */
/* load it. */
/*=========================================================================*/
#ifndef WWSTD_H
#include "wwstd.h"
#endif
extern "C" {
void Install_Keyboard_Interrupt(void *addr, long size);
void Install_Page_Fault_Handle(void) ;
void *Get_RM_Keyboard_Address(void);
long Get_RM_Keyboard_Size(void);
void Remove_Keyboard_Interrupt(void);
int Check_Key_Num(void);
int Check_Key_Bits(void);
int Check_Key(void);
short Get_Key_Num(void);
short Get_Key_Bits(void);
int Get_Key(void);
int KN_To_KA(int keynum);
int Keyboard_Attributes_On(int key_flags);
int Keyboard_Attributes_Off(int key_flags);
void Clear_KeyBuffer(void);
int Key_Down(int key);
int Key_Satisfied(int key);
void Stuff_Key_WORD(int code);
void Stuff_Key_Num(int key);
int Install_Mouse(int max_width, int max_height, int scr_width, int scr_height);
void Reset_Mouse (void) ;
void Remove_Mouse(void);
int Get_Mouse_State(void);
int Get_Mouse_X(void);
int Get_Mouse_Y(void);
int Get_Mouse_Disabled(void);
void *Set_Mouse_Cursor(int xhotspot, int yhotspot, void *cursor);
void Hide_Mouse(void);
void Show_Mouse(void);
void Conditional_Hide_Mouse(int sx_pixel, int sy_pixel, int dx_pixel, int dy_pixel);
void Conditional_Show_Mouse(void);
void __interrupt far Keyboard_Interrupt(void);
extern int MouseQX;
extern int MouseQY;
}
enum {
REPEATON = 0x0001, /* 1:all makes into buffer, 0:only 1st make */
TRACKEXT = 0x0002, /* 1:Home != keypad Home, 0:Home=keypad Home */
FILTERONLY = 0x0004, /* 1:Normal BIOS operation with filter */
CTRLALTTURBO = 0x0010, /* 1:Allow turbo up and down in application */
NONUMLOCK = 0x0200, /* 1:do NOT remap keypad to numbers */
TASKSWITCHABLE = 0x400, /* 1:allows task switching keys thru ALT-TAB, */
/* ALT-ESC,CTRL-ESC */
PASSBREAKS = 0x0800, // Pass all breaks to the keyboard buffer.
/* The following flags, if turned on, should only be used for
debugging purposes (remember to take out the calls when BETA */
CTRLSON = 0x0008, /* 1:pass scroll lock sequence into BIOS */
CTRLCON = 0x0020, /* 1:pass stop code to BIOS */
SCROLLLOCKON = 0x0040, /* 1:pass scroll lock key into BIOS */
PAUSEON = 0x0080, /* 1:pass the pause key and seq to BIOS */
/* make sure FILTERONLY is set */
BREAKON = 0x0100, /* 1:pass the ctrl break seq to BIOS */
KEYMOUSE = 0x1000, /* 1:keypad translates into mouse moves */
SIMLBUTTON = 0x2000, /* 1:have space and enter keys simulate Left */
/* mouse button when KEYMOUSE is set */
DEBUGINT = 0x4000 /* Use scroll lock to disable keyboard int */
};
/*
** These are the codes for the various key codes that are returned from the
** keyboard input routines Get_Key() and Input_ASCII().
*/
typedef enum {
KA_CTRL_AT = 0,
KA_CTRL_A,
KA_MORE = KA_CTRL_A,
KA_CTRL_B,
KA_SETBKGDCOL = KA_CTRL_B,
KA_CTRL_C,
KA_CTRL_D,
KA_CTRL_E,
KA_CTRL_F,
KA_SETFORECOL = KA_CTRL_F,
KA_CTRL_G,
KA_CTRL_H,
KA_BACKSPACE = KA_CTRL_H,
KA_CTRL_I,
KA_TAB = KA_CTRL_I,
KA_CTRL_J,
KA_CTRL_K,
KA_CTRL_L,
KA_FORMFEED = KA_CTRL_L,
KA_CTRL_M,
KA_RETURN = KA_CTRL_M,
KA_CTRL_N,
KA_CTRL_O,
KA_CTRL_P,
KA_CTRL_Q,
KA_CTRL_R,
KA_CTRL_S,
KA_SPCTAB = KA_CTRL_S,
KA_CTRL_T,
KA_CTRL_U,
KA_CTRL_V,
KA_CTRL_W,
KA_CTRL_X,
KA_SETX = KA_CTRL_X,
KA_CTRL_Y,
KA_SETY = KA_CTRL_Y,
KA_CTRL_Z,
KA_CTRL_LBRACKET,
KA_ESC = KA_CTRL_LBRACKET,
KA_EXTEND = KA_ESC,
KA_CTRL_BACKSLASH,
KA_CTRL_RBRACKET,
KA_LITERAL = KA_CTRL_RBRACKET,
KA_CTRL_CARROT,
KA_CTRL_UNDERLINE,
KA_SPACE, /* */
KA_EXCLAMATION, /* ! */
KA_DQUOTE, /* " */
KA_POUND, /* # */
KA_DOLLAR, /* $ */
KA_PERCENT, /* % */
KA_AMPER, /* & */
KA_SQUOTE, /* ' */
KA_LPAREN, /* ( */
KA_RPAREN, /* ) */
KA_ASTERISK, /* * */
KA_PLUS, /* + */
KA_COMMA, /* , */
KA_MINUS, /* - */
KA_PERIOD, /* . */
KA_SLASH, /* / */
KA_0, KA_1, KA_2, KA_3, KA_4, KA_5, KA_6, KA_7, KA_8, KA_9,
KA_COLON, /* : */
KA_SEMICOLON, /* ; */
KA_LESS_THAN, /* < */
KA_EQUAL, /* = */
KA_GREATER_THAN, /* > */
KA_QUESTION, /* ? */
KA_AT, /* @ */
KA_A, /* A */
KA_B, /* B */
KA_C, /* C */
KA_D, /* D */
KA_E, /* E */
KA_F, /* F */
KA_G, /* G */
KA_H, /* H */
KA_I, /* I */
KA_J, /* J */
KA_K, /* K */
KA_L, /* L */
KA_M, /* M */
KA_N, /* N */
KA_O, /* O */
KA_P, /* P */
KA_Q, /* Q */
KA_R, /* R */
KA_S, /* S */
KA_T, /* T */
KA_U, /* U */
KA_V, /* V */
KA_W, /* W */
KA_X, /* X */
KA_Y, /* Y */
KA_Z, /* Z */
KA_LBRACKET, /* [ */
KA_BACKSLASH, /* \ */
KA_RBRACKET, /* ] */
KA_CARROT, /* ^ */
KA_UNDERLINE, /* _ */
KA_GRAVE, /* ` */
KA_a, /* a */
KA_b, /* b */
KA_c, /* c */
KA_d, /* d */
KA_e, /* e */
KA_f, /* f */
KA_g, /* g */
KA_h, /* h */
KA_i, /* i */
KA_j, /* j */
KA_k, /* k */
KA_l, /* l */
KA_m, /* m */
KA_n, /* n */
KA_o, /* o */
KA_p, /* p */
KA_q, /* q */
KA_r, /* r */
KA_s, /* s */
KA_t, /* t */
KA_u, /* u */
KA_v, /* v */
KA_w, /* w */
KA_x, /* x */
KA_y, /* y */
KA_z, /* z */
KA_LBRACE, /* { */
KA_BAR, /* | */
KA_RBRACE, /* ] */
KA_TILDA, /* ~ */
KA_DEL, /* not used */
KA_ALT_F10 = 143,
KA_ALT_F9, KA_ALT_F8, KA_ALT_F7, KA_ALT_F6, KA_ALT_F5,
KA_ALT_F4, KA_ALT_F3, KA_ALT_F2, KA_ALT_F1,
KA_CTRL_F10, KA_CTRL_F9, KA_CTRL_F8, KA_CTRL_F7, KA_CTRL_F6,
KA_CTRL_F5, KA_CTRL_F4, KA_CTRL_F3, KA_CTRL_F2, KA_CTRL_F1,
KA_SHIFT_F10, KA_SHIFT_F9, KA_SHIFT_F8, KA_SHIFT_F7, KA_SHIFT_F6,
KA_SHIFT_F5, KA_SHIFT_F4, KA_SHIFT_F3, KA_SHIFT_F2, KA_SHIFT_F1,
KA_DELETE, /* <DELETE> */
KA_INSERT, /* <INSERT> */
KA_PGDN, /* <PAGE DOWN> */
KA_DOWNRIGHT = KA_PGDN,
KA_DOWN, /* <DOWN ARROW> */
KA_END, /* <END> */
KA_DOWNLEFT = KA_END,
KA_RESERVED1,
KA_RIGHT, /* <RIGHT ARROW> */
KA_KEYPAD5, /* NUMERIC KEY PAD <5> */
KA_LEFT, /* <LEFT ARROW> */
KA_RESERVED2,
KA_PGUP, /* <PAGE UP> */
KA_UPRIGHT = KA_PGUP,
KA_UP, /* <UP ARROW> */
KA_HOME, /* <HOME> */
KA_UPLEFT = KA_HOME,
KA_RESERVED3,
KA_RESERVED4,
KA_F10, KA_F9, KA_F8, KA_F7, KA_F6, KA_F5, KA_F4, KA_F3, KA_F2, KA_F1,
KA_LMOUSE,
KA_RMOUSE,
KA_JBUTTON1,
KA_JBUTTON2,
KA_J_UP,
KA_J_RIGHT,
KA_J_DOWN,
KA_J_LEFT,
KA_SHIFT_BIT = 0x0100,
KA_CTRL_BIT = 0x0200,
KA_ALT_BIT = 0x0400,
KA_RLSE_BIT = 0x0800,
KA_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
KA_RCOMM_BIT = 0x2000 /* Amiga Right Comm key */
} KeyASCIIType;
/*
** These are the keyboard codes that are returned from the input routines
** Get_Key_Num and Input_Num.
*/
typedef enum {
KN_NONE = 0,
KN_GRAVE = 1, /* ` */
KN_1, KN_2, KN_3, KN_4, KN_5, KN_6, KN_7, KN_8, KN_9, KN_0,
KN_MINUS, /* - */
KN_EQUAL, /* = */
KN_RESERVED1,
KN_BACKSPACE, /* <BACKSPACE> */
KN_TAB, /* <TAB> */
KN_Q, KN_W, KN_E, KN_R, KN_T, KN_Y, KN_U, KN_I, KN_O, KN_P,
KN_LBRACKET, /* [ */
KN_RBRACKET, /* ] */
KN_BACKSLASH, /* \ */
KN_CAPSLOCK, /* <CAPS LOCK> */
KN_A, KN_S, KN_D, KN_F, KN_G, KN_H, KN_J, KN_K, KN_L,
KN_SEMICOLON, /* ; */
KN_SQUOTE, /* ' */
KN_BACKSLASH2,
KN_RETURN, /* <RETURN> or <ENTER> */
KN_LSHIFT, /* <LEFT SHIFT> */
KN_MOUSE_MOVE, // Indicate a mouse move (for playback of
KN_Z, KN_X, KN_C, KN_V, KN_B, KN_N, KN_M,
KN_COMMA, /* , */
KN_PERIOD, /* . */
KN_SLASH, /* / */
KN_RESERVED3,
KN_RSHIFT, /* <RIGHT SHIFT> */
KN_LCTRL, /* <LEFT CTRL> */
KN_LCOMM, /* for AMIGA */
KN_LALT, /* <LEFT ALT> */
KN_SPACE, /* <SPACE BAR> */
KN_RALT, /* <RIGHT ALT> */
KN_RCOMM, /* for AMIGA */
KN_RCTRL, /* <RIGHT CTRL> */
/* the following are forced into key buffer */
KN_LMOUSE,
KN_RMOUSE,
KN_JBUTTON1,
KN_JBUTTON2,
KN_J_UP,
KN_J_RIGHT,
KN_J_DOWN,
KN_J_LEFT,
KN_SPECIAL9,
KN_SPECIAL10,
KN_E_INSERT, /* extended <INSERT> */
KN_E_DELETE, /* extended <DELETE> */
KN_RESERVED4,
KN_RESERVED5,
KN_E_LEFT, /* extended <LEFT ARROW> */
KN_E_HOME, /* extended <HOME> */
KN_E_END, /* extended <END> */
KN_RESERVED6,
KN_E_UP, /* extended <UP ARROW> */
KN_E_DOWN, /* extended <DOWN ARROW> */
KN_E_PGUP, /* extended <PAGE UP> */
KN_E_PGDN, /* extended <PAGE DOWN> */
KN_K_LPAREN, /* for AMIGA */
KN_K_RPAREN, /* for AMIGA */
KN_E_RIGHT, /* extended <RIGHT ARROW> */
KN_NUMLOCK, /* <NUM LOCK> */
KN_HOME, /* num key pad 7 */
KN_UPLEFT = KN_HOME,
KN_LEFT, /* num key pad 4 */
KN_END, /* num key pad 1 */
KN_DOWNLEFT = KN_END,
KN_RESERVED7,
KN_KEYPAD_SLASH, /* num key pad / */
KN_UP, /* num key pad 8 */
KN_CENTER, /* num key pad 5 */
KN_DOWN, /* num key pad 2 */
KN_INSERT, /* num key pad 0 */
KN_KEYPAD_ASTERISK, /* num key pad * */
KN_PGUP, /* num key pad 9 */
KN_UPRIGHT = KN_PGUP,
KN_RIGHT, /* num key pad 6 */
KN_PGDN, /* num key pad 3 */
KN_DOWNRIGHT = KN_PGDN,
KN_DELETE, /* num key pad . */
KN_KEYPAD_MINUS, /* num key pad - */
KN_KEYPAD_PLUS, /* num key pad + */
KN_RESERVED8,
KN_KEYPAD_RETURN, /* num key pad <ENTER> */
KN_RESERVED9,
KN_ESC,
KN_HELP, /* for AMIGA */
KN_F1, KN_F2, KN_F3, KN_F4, KN_F5, KN_F6, KN_F7, KN_F8, KN_F9, KN_F10,
KN_F11,
KN_F12,
KN_PRNTSCRN, /* <PRINT SCRN> */
KN_SCROLLLOCK, /* <SCROLL LOCK> */
KN_PAUSE, /* <PAUSE> */
KN_SHIFT_BIT = 0x0100,
KN_CTRL_BIT = 0x0200,
KN_ALT_BIT = 0x0400,
KN_RLSE_BIT = 0x0800,
KN_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
KN_RCOMM_BIT = 0x2000, /* Amiga Right Comm key */
KN_BUTTON = 0x8000 /* Amiga Right Comm key */
} KeyNumType;
#endif

View File

@@ -0,0 +1,129 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Westwood 32 bit Library *
;* *
;* File Name : KEYBOARD.INC *
;* *
;* Programmer : Phil W. Gorrow *
;* *
;* Start Date : July 12, 1994 *
;* *
;* Last Update : July 12, 1994 [PWG] *
;* *
;*-------------------------------------------------------------------------*
;* Contains all the defines used by the keyboard interrupt for assembly *
;* includes. *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
TRUE EQU 1 ; numerical true
FALSE EQU 0 ; numerical false
DEBUG EQU 1
MAX_X_PIXEL EQU 319
MAX_Y_PIXEL EQU 199
KN_RESERVED1 EQU 14
KN_RESERVED2 EQU 45
KN_RESERVED3 EQU 56
; these two are reserved for AMIGA open and close.
KN_LCOMM EQU 59
KN_RCOMM EQU 63
KN_LMOUSE EQU 65
KN_RMOUSE EQU 66
KN_JBUTTON1 EQU 67
KN_JBUTTON2 EQU 68
KN_J_UP EQU 69
KN_J_RIGHT EQU 70
KN_J_DOWN EQU 71
KN_J_LEFT EQU 72
KN_LEFT EQU 92
KN_UPLEFT EQU 91
KN_UP EQU 96
KN_UPRIGHT EQU 101
KN_RIGHT EQU 102
KN_DOWNRIGHT EQU 103
KN_DOWN EQU 98
KN_DOWNLEFT EQU 93
KN_CENTER EQU 97
KN_INSERT EQU 99
KN_DELETE EQU 104
KN_RETURN EQU 43
KN_SPACE EQU 61
KN_KEYPAD_RETURN EQU 108
; these two are reserved for AMIGA K left and right paren
KN_KLPAREN EQU 87
KN_KRPAREN EQU 88
KN_NUMLOCK EQU 90
KN_SCROLLOCK EQU 125 ; key ignored by the logging system
KN_MOUSE_MOVE EQU 45 ; Indicate a mouse move (for playback of logged data)
; ----------------------------------------------------------------
; flags used in Keyflags to customize keystroke interrupt.
REPEATON EQU 0001H ; 1:all makes into buffer, 0:only 1st make
TRACKEXT EQU 0002H ; 1:Home != keypad Home, 0:Home=keypad Home
FILTERONLY EQU 0004H ; 1:Normal BIOS operation with filter
CTRLSON EQU 0008H ; 1:pass scroll lock sequence into BIOS
CTRLALTTURBO EQU 0010H ; 1:Allow turbo up and down in application
CTRLCON EQU 0020H ; 1:pass stop code to BIOS
SCROLLLOCKON EQU 0040H ; 1:pass scroll lock key into BIOS
PAUSEON EQU 0080H ; 1:pass the pause key and seq to BIOS
BREAKON EQU 0100H ; 1:pass the ctrl break seq to BIOS
NONUMLOCK EQU 0200H ; 1:do NOT remap keypad to numbers
TASKSWITCHABLE EQU 0400H ; 1:allows task switching keys thru ALT-TAB,
; ALT-ESC,CTRL-ESC
PASSBREAKS EQU 0800H ; 1:Pass all break codes to keyboard buffer.
KEYMOUSE EQU 1000H ; 1:Numeric keypad moves mouse
SIMLBUTTON EQU 2000H ; 1:have space and enter keys simulate Left
DEBUGINT EQU 4000H ; mouse button when KEYMOUSE is set
SHIFTPRESS EQU 001H ; bit 0 for shift key pressed
CTRLPRESS EQU 002H ; bit 1 for ctrl key pressed
ALTPRESS EQU 004H ; bit 2 for alt key pressed
KEYRELEASE EQU 008H ; bit 3 for key released
NOTKEYRELEASE EQU 0F7H ; not of key released
CAPSLOCK EQU 00001H ; bit 0 for caps locked
NUMLOCK EQU 00002H ; bit 1 for num locked
CLEARISR EQU 020H ; value to clear In Service Register
DOS EQU 021H
INTCHIP0 EQU 020H ; 8259 interrupt chip controller 0
KEYCTRL EQU 061H ; control bits for KB sense data
KEYDATA EQU 060H ; keyboard scan code port

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,429 @@
DB 001h,000h,001h,000h,011h,000h,000h,000h,000h,000h,0FFh,000h,001h,0F0h,000h
DB 010h,0A0h,000h,000h,000h,03Fh,001h,000h,000h,03Fh,001h,045h,000h,03Fh,001h
DB 089h,000h,0A0h,000h,089h,000h,000h,000h,089h,000h,000h,000h,045h,000h,000h
DB 000h,000h,000h,0A0h,000h,045h,000h,001h,002h,004h,008h,010h,020h,040h,080h
DB 020h,002h,020h,003h,00Ch,006h,00Dh,007h,06Ah,006h,069h,006h,030h,002h,030h
DB 003h,07Dh,000h,07Dh,001h,05Ah,002h,05Ah,003h,000h,002h,010h,004h,06Eh,004h
DB 06Eh,002h,07Ch,000h,008h,000h,008h,000h,010h,000h,010h,000h,010h,000h,010h
DB 000h,020h,000h,020h,000h,040h,000h,040h,000h,080h,000h,080h,000h,000h,001h
DB 000h,004h,000h,004h,000h,004h,000h,001h,000h,000h,000h,000h,038h,01Dh,052h
DB 053h,04Bh,047h,04Fh,048h,050h,049h,051h,04Dh,035h,01Ch,037h,046h,03Eh,040h
DB 04Bh,04Ch,04Fh,050h,051h,053h,054h,055h,056h,059h,05Fh,06Ch,07Ch,000h,03Ch
DB 03Ah,063h,068h,05Ch,05Bh,05Dh,060h,062h,065h,067h,066h,037h,02Bh,07Ch,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,07Fh,06Eh
DB 002h,003h,004h,005h,006h,007h,008h,009h,00Ah,00Bh,00Ch,00Dh,00Fh,010h,011h
DB 012h,013h,014h,015h,016h,017h,018h,019h,01Ah,01Bh,01Ch,02Bh,03Ah,01Fh,020h
DB 021h,022h,023h,024h,025h,026h,027h,028h,029h,001h,02Ch,01Dh,02Eh,02Fh,030h
DB 031h,032h,033h,034h,035h,036h,037h,039h,064h,03Ch,03Dh,01Eh,070h,071h,072h
DB 073h,074h,075h,076h,077h,078h,079h,05Ah,07Dh,05Bh,060h,065h,069h,05Ch,061h
DB 066h,06Ah,05Dh,062h,067h,063h,068h,07Fh,07Fh,07Fh,07Ah,07Bh,000h,000h,0FEh
DB 087h,0FFh,0C0h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,038h,0EFh,001h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,01Eh,02Ch,039h,03Ah,03Ch,03Eh,040h,05Ah
DB 080h,080h,080h,000h,000h,000h,000h,000h,0FFh,0FFh,0FFh,000h,0FFh,001h,000h
DB 000h,000h,000h,000h,0FFh,000h,000h,000h,001h,000h,000h,000h,000h,001h,0FFh
DB 001h,000h,001h,001h,008h,000h,002h,000h,008h,000h,006h,000h,004h,000h,003h
DB 000h,008h,000h,005h,000h,008h,000h,008h,000h,008h,000h,008h,000h,000h,000h
DB 001h,000h,008h,000h,007h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,02Dh,00Eh,006h,011h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0F5h
DB 010h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,001h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0F8h
DB 011h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0B2h,014h
DB 05Eh,013h,063h,017h,0EAh,015h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,090h,000h,000h,000h,000h,0ADh,0DEh,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0ADh,0DEh,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,0C8h,000h,000h,000h,051h,057h,006h,01Eh,08Ch
DB 0C8h,08Eh,0D8h,08Eh,0C0h,08Bh,046h,006h,0F7h,006h,004h,000h,002h,000h,075h
DB 013h,0B9h,010h,000h,0BFh,094h,000h,0F2h,0AEh,0E3h,009h,0BFh,0B4h,000h,04Fh
DB 02Bh,0F9h,026h,08Ah,005h,01Fh,007h,05Fh,059h,0C9h,0CBh,0C8h,000h,000h,000h
DB 056h,053h,01Eh,08Ch,0C8h,08Eh,0D8h,0A1h,0BAh,001h,08Bh,0F0h,005h,002h,000h
DB 025h,0FFh,000h,039h,006h,0B6h,001h,074h,011h,08Bh,05Eh,006h,089h,09Ch,0B6h
DB 000h,0A3h,0BAh,001h,033h,0C0h,01Fh,05Bh,05Eh,0C9h,0CBh,0B8h,001h,000h,01Fh
DB 05Bh,05Eh,0C9h,0CBh,0C8h,004h,000h,000h,053h,051h,052h,057h,056h,01Eh,09Ch
DB 0FAh,08Ch,0C8h,08Eh,0D8h,0A1h,0ABh,002h,0A3h,0AFh,002h,0A1h,0B1h,002h,0A3h
DB 0B5h,002h,08Bh,046h,006h,00Bh,0C0h,075h,003h,0E9h,0F7h,001h,0F7h,006h,004h
DB 000h,000h,010h,00Fh,084h,03Ah,001h,0F6h,0C4h,004h,00Fh,085h,033h,001h,0F7h
DB 006h,004h,000h,000h,020h,074h,00Ch,03Ch,02Bh,074h,00Ch,03Ch,03Dh,074h,008h
DB 03Ch,06Ch,074h,004h,03Ch,063h,075h,016h,0B0h,041h,080h,00Eh,0F6h,002h,001h
DB 0F6h,0C4h,008h,00Fh,084h,00Ah,001h,080h,026h,0F6h,002h,0FEh,0E9h,002h,001h
DB 03Ch,068h,075h,016h,0B0h,042h,080h,00Eh,0F6h,002h,002h,0F6h,0C4h,008h,00Fh
DB 084h,0F0h,000h,080h,026h,0F6h,002h,0FDh,0E9h,0E8h,000h,0F6h,0C4h,008h,00Fh
DB 085h,0E4h,000h,03Ch,061h,074h,01Eh,03Ch,05Bh,00Fh,082h,0DAh,000h,03Ch,067h
DB 00Fh,087h,0D4h,000h,03Ch,05Dh,076h,00Eh,03Ch,065h,073h,00Ah,03Ch,060h,074h
DB 006h,03Ch,062h,00Fh,085h,0C2h,000h,08Ah,0ECh,032h,0E4h,02Ch,05Bh,08Bh,0D8h
DB 0D1h,0E3h,081h,0C3h,06Fh,002h,08Bh,007h,08Ah,0DCh,098h,093h,098h,093h,0F6h
DB 0C5h,002h,075h,021h,0BAh,001h,000h,0F6h,0C5h,001h,074h,003h,083h,0C2h,003h
DB 003h,0DAh,08Ah,09Fh,00Ah,000h,093h,098h,093h,087h,0DAh,003h,0D8h,08Ah,087h
DB 00Ah,000h,098h,087h,0DAh,0EBh,034h,083h,0E3h,003h,025h,003h,000h,083h,0E3h
DB 003h,025h,003h,000h,0D1h,0E3h,0D1h,0E3h,00Bh,0D8h,0D1h,0E3h,08Bh,09Fh,089h
DB 002h,0D1h,0E3h,0D1h,0E3h,08Bh,087h,010h,000h,08Bh,09Fh,012h,000h,0A3h,0AFh
DB 002h,089h,01Eh,0B5h,002h,0A1h,0AFh,002h,08Bh,01Eh,0B5h,002h,0EBh,02Fh,001h
DB 006h,0AFh,002h,079h,005h,033h,0C0h,0A3h,0AFh,002h,001h,01Eh,0B5h,002h,079h
DB 006h,033h,0DBh,089h,01Eh,0B5h,002h,0A1h,0AFh,002h,08Bh,01Eh,0B5h,002h,03Dh
DB 03Fh,001h,07Eh,003h,0B8h,03Fh,001h,081h,0FBh,0C7h,000h,07Eh,003h,0BBh,0C7h
DB 000h,0A3h,0AFh,002h,089h,01Eh,0B5h,002h,0A3h,0ABh,002h,089h,01Eh,0B1h,002h
DB 083h,03Eh,0A9h,002h,000h,075h,008h,00Eh,0E8h,0A5h,003h,00Eh,0E8h,0D4h,003h
DB 0B8h,02Dh,000h,089h,046h,006h,08Bh,036h,0BAh,001h,089h,076h,0FEh,08Bh,03Eh
DB 0B6h,001h,050h,00Eh,0E8h,051h,0FEh,083h,0C4h,002h,00Bh,0C0h,075h,011h,08Bh
DB 046h,006h,03Ch,02Dh,074h,00Dh,03Ch,041h,074h,009h,03Ch,042h,074h,005h,0EBh
DB 029h,0E9h,080h,000h,0FFh,036h,0AFh,002h,00Eh,0E8h,02Eh,0FEh,083h,0C4h,002h
DB 00Bh,0C0h,075h,0EEh,083h,046h,0FCh,002h,0FFh,036h,0B5h,002h,00Eh,0E8h,01Bh
DB 0FEh,083h,0C4h,002h,00Bh,0C0h,075h,0DBh,083h,046h,0FCh,002h,0BBh,001h,001h
DB 08Bh,046h,006h,03Ch,02Dh,074h,01Bh,03Ch,07Fh,074h,017h,0F6h,0C4h,008h,074h
DB 016h,032h,0DBh,0F7h,006h,004h,000h,000h,008h,075h,00Ch,03Ch,041h,074h,008h
DB 03Ch,042h,074h,004h,089h,036h,0BAh,001h,08Bh,0F8h,083h,0E7h,07Fh,0B1h,003h
DB 0D3h,0EFh,08Ah,0C8h,080h,0E1h,007h,0D3h,0E3h,0F6h,0D7h,084h,09Dh,039h,002h
DB 074h,00Ch,0F7h,006h,004h,000h,001h,000h,075h,004h,089h,036h,0BAh,001h,020h
DB 0BDh,039h,002h,008h,09Dh,039h,002h,0B8h,001h,000h,0EBh,008h,08Bh,046h,0FEh
DB 0A3h,0BAh,001h,033h,0C0h,09Dh,01Fh,05Eh,05Fh,05Ah,059h,05Bh,0C9h,0CBh,050h
DB 053h,051h,057h,01Eh,052h,006h,056h,0FCh,08Ch,0C8h,08Eh,0D8h,08Ch,0D1h,089h
DB 026h,08Ah,003h,089h,00Eh,08Ch,003h,0BAh,090h,007h,083h,0E2h,0FEh,0FAh,08Eh
DB 0D0h,08Bh,0E2h,0FBh,083h,03Eh,0CEh,002h,000h,0C7h,006h,0CEh,002h,000h,000h
DB 00Fh,085h,003h,002h,08Bh,016h,004h,000h,083h,026h,0BEh,001h,0FCh,0B8h,040h
DB 000h,08Eh,0C0h,026h,0F6h,006h,017h,000h,040h,074h,005h,083h,00Eh,0BEh,001h
DB 001h,026h,0F6h,006h,017h,000h,020h,074h,005h,083h,00Eh,0BEh,001h,002h,0C6h
DB 006h,0B5h,000h,001h,026h,0F6h,006h,096h,000h,010h,075h,005h,0C6h,006h,0B5h
DB 000h,000h,08Ch,0C8h,08Eh,0C0h,0FCh,032h,0E4h,0BBh,001h,001h,0E4h,060h,08Bh
DB 01Eh,05Bh,002h,088h,087h,049h,002h,043h,083h,0E3h,00Fh,089h,01Eh,05Bh,002h
DB 0BBh,001h,001h,03Ch,0E1h,075h,005h,0C6h,006h,05Eh,002h,003h,080h,03Eh,05Eh
DB 002h,000h,074h,00Fh,0FEh,00Eh,05Eh,002h,0F7h,0C2h,080h,000h,00Fh,085h,08Eh
DB 001h,0E9h,0CBh,001h,03Ch,0E0h,075h,008h,0C6h,006h,05Dh,002h,001h,0E9h,07Fh
DB 001h,0A8h,080h,074h,007h,032h,0DBh,024h,07Fh,080h,0CCh,008h,080h,03Eh,05Dh
DB 002h,000h,074h,023h,0C6h,006h,05Dh,002h,000h,0C6h,006h,0B7h,002h,001h,0BFh
DB 084h,000h,0B9h,010h,000h,0F2h,0AEh,0E3h,002h,0EBh,003h,0E9h,094h,001h,08Ah
DB 045h,00Fh,0C6h,006h,0B7h,002h,000h,0EBh,011h,03Ch,07Ah,075h,004h,0B0h,080h
DB 0EBh,009h,08Bh,0F8h,083h,0E7h,07Fh,08Ah,085h,0C0h,001h,0F6h,006h,041h,002h
DB 001h,075h,01Bh,0F6h,006h,040h,002h,004h,074h,017h,03Ch,05Ah,075h,010h,080h
DB 03Eh,0B5h,000h,001h,074h,009h,0F7h,0C2h,080h,000h,075h,003h,0E9h,057h,001h
DB 080h,0CCh,002h,0F6h,006h,040h,002h,050h,074h,003h,080h,0CCh,004h,050h,00Eh
DB 0E8h,043h,0FCh,083h,0C4h,002h,0F6h,006h,03Eh,002h,010h,075h,007h,0F6h,006h
DB 040h,002h,002h,074h,003h,080h,0CCh,001h,08Bh,0F8h,083h,0E7h,07Fh,0D1h,0EFh
DB 0D1h,0EFh,0D1h,0EFh,08Bh,0D8h,083h,0E3h,07Fh,080h,0E3h,007h,08Ah,0AFh,034h
DB 000h,0F7h,006h,0BEh,001h,001h,000h,074h,009h,084h,0ADh,019h,002h,074h,003h
DB 080h,0F4h,001h,0F7h,006h,0BEh,001h,002h,000h,074h,009h,084h,0ADh,029h,002h
DB 074h,003h,080h,0F4h,001h,088h,026h,06Ah,002h,0F7h,0C2h,000h,040h,074h,034h
DB 066h,083h,03Eh,0EAh,002h,001h,075h,01Bh,03Dh,073h,000h,074h,00Ah,03Dh,076h
DB 000h,072h,00Eh,03Dh,078h,000h,077h,009h,066h,0C7h,006h,0EAh,002h,000h,000h
DB 000h,000h,0E9h,08Bh,000h,03Dh,07Dh,000h,075h,00Ch,066h,0C7h,006h,0EAh,002h
DB 001h,000h,000h,000h,0E9h,0BAh,000h,03Dh,068h,006h,074h,075h,03Dh,04Ch,006h
DB 074h,070h,03Dh,030h,002h,074h,005h,03Dh,07Eh,002h,075h,006h,0C7h,006h,008h
DB 000h,001h,000h,03Dh,020h,004h,075h,00Ch,050h,0A1h,000h,000h,035h,001h,000h
DB 050h,083h,0C4h,002h,058h,03Dh,034h,004h,075h,00Ch,050h,0A1h,002h,000h,035h
DB 001h,000h,050h,083h,0C4h,002h,058h,050h,00Eh,0E8h,0DEh,0FBh,058h,03Ch,06Eh
DB 075h,00Dh,083h,03Eh,082h,000h,000h,074h,006h,050h,0FFh,01Eh,080h,000h,058h
DB 0BFh,05Fh,002h,0B9h,00Ah,000h,0F2h,0AEh,00Bh,0C9h,075h,01Bh,0BFh,03Ch,000h
DB 0B9h,022h,000h,0D1h,0E9h,0F2h,0AFh,0E3h,009h,08Bh,05Dh,020h,023h,0DAh,074h
DB 002h,0EBh,006h,0F7h,0C2h,004h,000h,074h,040h,02Eh,0FFh,006h,059h,002h,081h
DB 03Eh,08Eh,003h,0ADh,0DEh,074h,017h,051h,057h,050h,006h,0B8h,000h,0A0h,08Eh
DB 0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h,000h,0F3h,0AAh,007h,058h,05Fh,059h
DB 0FAh,08Bh,016h,08Ch,003h,08Eh,0D2h,08Bh,026h,08Ah,003h,0FBh,0BAh,0ECh,010h
DB 09Ch,00Eh,052h,09Ch,0FFh,036h,0BCh,002h,0FFh,036h,0BAh,002h,0CFh,0E4h,061h
DB 08Ah,0E0h,00Ch,080h,0E6h,061h,086h,0E0h,0E6h,061h,0B8h,040h,000h,08Eh,0C0h
DB 026h,0A0h,096h,000h,024h,0FDh,026h,0A2h,096h,000h,0B0h,020h,0E6h,020h,081h
DB 03Eh,08Eh,003h,0ADh,0DEh,074h,017h,051h,057h,050h,006h,0B8h,000h,0A0h,08Eh
DB 0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h,000h,0F3h,0AAh,007h,058h,05Fh,059h
DB 08Bh,016h,08Ch,003h,0FAh,08Eh,0D2h,08Bh,026h,08Ah,003h,0FBh,05Eh,007h,05Ah
DB 01Fh,05Fh,059h,05Bh,058h,0CFh,09Ch,050h,006h,0B8h,000h,0B0h,08Eh,0C0h,026h
DB 0FEh,006h,000h,000h,007h,058h,09Dh,0CFh,09Ch,00Eh,0E8h,022h,0FDh,0CBh,050h
DB 053h,051h,052h,01Eh,08Ch,0C8h,08Eh,0D8h,080h,03Eh,0F7h,002h,000h,075h,01Dh
DB 083h,03Eh,003h,003h,000h,075h,00Ch,0B8h,000h,000h,050h,00Eh,0FFh,016h,051h
DB 003h,083h,0C4h,002h,083h,006h,003h,003h,001h,083h,016h,003h,003h,000h,01Fh
DB 05Ah,059h,05Bh,058h,0CBh,0C8h,004h,000h,000h,050h,053h,051h,052h,056h,057h
DB 01Eh,006h,08Ch,0C8h,08Eh,0D8h,080h,03Eh,0F7h,002h,000h,075h,050h,083h,03Eh
DB 003h,003h,000h,074h,049h,0FFh,00Eh,003h,003h,083h,03Eh,003h,003h,000h,075h
DB 03Eh,08Bh,00Eh,03Fh,003h,08Bh,016h,043h,003h,0A1h,0ABh,002h,089h,046h,0FEh
DB 08Bh,01Eh,0B1h,002h,089h,05Eh,0FCh,0A3h,02Fh,003h,089h,01Eh,033h,003h,089h
DB 00Eh,037h,003h,089h,016h,03Bh,003h,0B8h,001h,000h,050h,00Eh,0FFh,016h,051h
DB 003h,083h,0C4h,002h,0FFh,076h,0FCh,0FFh,076h,0FEh,00Eh,0FFh,016h,053h,003h
DB 083h,0C4h,004h,007h,01Fh,05Fh,05Eh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,002h
DB 000h,000h,053h,08Ch,0C8h,08Eh,0D8h,0C7h,046h,0FEh,02Dh,000h,08Bh,05Eh,006h
DB 08Bh,0C3h,032h,01Eh,0F6h,002h,074h,029h,0A2h,0F6h,002h,0F6h,0C3h,002h,074h
DB 00Eh,0C7h,046h,0FEh,042h,000h,0A8h,002h,075h,005h,081h,04Eh,0FEh,000h,008h
DB 0F6h,0C3h,001h,074h,00Eh,0C7h,046h,0FEh,041h,000h,0A8h,001h,075h,005h,081h
DB 04Eh,0FEh,000h,008h,08Bh,046h,0FEh,05Bh,0C9h,0CBh,0C8h,004h,000h,000h,050h
DB 053h,051h,052h,01Eh,056h,006h,057h,02Eh,089h,01Eh,092h,007h,02Eh,0A3h,094h
DB 007h,08Ch,0C8h,08Eh,0D8h,08Ch,0D3h,089h,026h,096h,007h,089h,01Eh,098h,007h
DB 0BBh,09Ch,00Bh,083h,0E3h,0FEh,0FAh,08Eh,0D0h,08Bh,0E3h,0FBh,080h,03Eh,0F7h
DB 002h,000h,00Fh,085h,0FAh,000h,080h,03Eh,0F8h,002h,000h,00Fh,084h,0F1h,000h
DB 0A1h,094h,007h,025h,01Eh,000h,075h,009h,083h,03Eh,0A9h,002h,000h,00Fh,085h
DB 0E0h,000h,083h,03Eh,0F9h,002h,001h,075h,002h,0D1h,0E9h,03Bh,00Eh,049h,003h
DB 072h,005h,08Bh,00Eh,049h,003h,049h,03Bh,016h,04Dh,003h,072h,005h,08Bh,016h
DB 04Dh,003h,04Ah,089h,00Eh,0ABh,002h,089h,016h,0B1h,002h,066h,0F7h,006h,004h
DB 000h,000h,010h,000h,000h,075h,013h,0FFh,036h,092h,007h,00Eh,0E8h,02Ch,0FFh
DB 083h,0C4h,002h,050h,00Eh,0E8h,07Bh,0F9h,083h,0C4h,002h,083h,03Eh,0A9h,002h
DB 000h,00Fh,085h,092h,000h,083h,03Eh,0FBh,002h,000h,074h,019h,08Bh,0C1h,08Bh
DB 0CAh,02Bh,006h,0FFh,002h,08Bh,01Eh,0FBh,002h,099h,0F7h,0FBh,0F7h,0EBh,003h
DB 006h,0FFh,002h,08Bh,0D1h,08Bh,0C8h,083h,03Eh,0FDh,002h,000h,074h,015h,08Bh
DB 0C2h,02Bh,006h,001h,003h,08Bh,01Eh,0FDh,002h,099h,0F7h,0FBh,0F7h,0EBh,003h
DB 006h,001h,003h,08Bh,0D0h,083h,03Eh,003h,003h,000h,075h,047h,039h,00Eh,007h
DB 003h,075h,006h,039h,016h,009h,003h,074h,03Bh,0A1h,00Bh,003h,025h,000h,0C0h
DB 03Dh,000h,0C0h,074h,00Ch,00Eh,0E8h,016h,0FEh,0F7h,006h,00Bh,003h,000h,080h
DB 074h,020h,03Bh,00Eh,00Dh,003h,072h,01Ah,03Bh,00Eh,015h,003h,077h,014h,03Bh
DB 016h,011h,003h,072h,00Eh,03Bh,016h,019h,003h,077h,008h,081h,00Eh,00Bh,003h
DB 000h,040h,0EBh,004h,00Eh,0E8h,01Dh,0FEh,089h,00Eh,007h,003h,089h,016h,009h
DB 003h,081h,03Eh,09Ah,007h,0ADh,0DEh,074h,017h,051h,057h,050h,006h,0B8h,000h
DB 0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h,000h,0F3h,0AAh,007h,058h
DB 05Fh,059h,0A1h,098h,007h,0FAh,08Eh,0D0h,08Bh,026h,096h,007h,0FBh,05Fh,007h
DB 05Eh,01Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Ch,000h,000h,050h,053h,051h
DB 052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,0FCh,0A1h,02Fh,003h,08Bh,01Eh
DB 033h,003h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h,089h,046h,0FEh,089h,05Eh
DB 0FCh,003h,006h,037h,003h,003h,01Eh,03Bh,003h,089h,046h,0FAh,089h,05Eh,0F8h
DB 0C7h,046h,0F6h,000h,000h,0A1h,023h,003h,089h,046h,0F4h,033h,0C0h,033h,0D2h
DB 08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh
DB 04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh,01Eh,049h,003h,049h,04Bh
DB 003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,003h
DB 0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,02Bh,00Eh
DB 04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h
DB 0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h,00Fh,085h,0AEh,000h,00Ah
DB 0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh,0FEh,0F7h,0DBh,089h,05Eh
DB 0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h,074h,013h,052h,08Bh,046h,0FCh
DB 0F7h,0D8h,0F7h,026h,037h,003h,001h,046h,0F4h,0C7h,046h,0FCh,000h,000h,05Ah
DB 0F6h,0C2h,004h,074h,006h,0A1h,049h,003h,089h,046h,0FAh,0F6h,0C2h,001h,074h
DB 006h,0A1h,04Dh,003h,089h,046h,0F8h,0B8h,000h,0A0h,08Eh,0C0h,08Bh,046h,0FCh
DB 0F7h,026h,049h,003h,08Bh,016h,049h,003h,08Bh,0F8h,003h,07Eh,0FEh,08Bh,01Eh
DB 03Fh,003h,0C5h,036h,023h,003h,08Bh,076h,0F4h,003h,076h,0F6h,08Bh,046h,0FAh
DB 08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh,03Ch,02Bh,04Eh,0FCh,07Eh,037h,02Bh,0D0h
DB 02Bh,0D8h,055h,083h,07Eh,006h,000h,075h,018h,08Bh,0E9h,08Bh,0C8h,0F3h,0A4h
DB 003h,0F3h,003h,0FAh,04Dh,075h,0F5h,05Dh,007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh
DB 058h,0C9h,0CBh,087h,0F7h,08Bh,0E9h,006h,01Eh,007h,01Fh,08Bh,0C8h,0F3h,0A4h
DB 003h,0F2h,003h,0FBh,04Dh,075h,0F5h,05Dh,007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh
DB 058h,0C9h,0CBh,0C8h,00Ch,000h,000h,050h,053h,051h,052h,057h,056h,01Eh,006h
DB 08Ch,0C8h,08Eh,0D8h,08Bh,046h,006h,08Bh,05Eh,008h,02Bh,006h,027h,003h,02Bh
DB 01Eh,02Bh,003h,089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,03Fh,003h,003h,01Eh
DB 043h,003h,089h,046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0C4h,006h
DB 01Dh,003h,089h,046h,0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh
DB 003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh
DB 00Eh,049h,003h,02Bh,01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh
DB 013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h
DB 0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h
DB 049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h
DB 08Ah,0E0h,084h,0D0h,00Fh,085h,093h,000h,00Ah,0C2h,074h,042h,0F6h,0C4h,008h
DB 074h,00Dh,08Bh,05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h
DB 0F6h,0C4h,002h,074h,013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,03Fh,003h
DB 001h,046h,0F4h,0C7h,046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,007h,08Bh
DB 01Eh,049h,003h,089h,05Eh,0FAh,0F6h,0C2h,001h,074h,007h,08Bh,01Eh,04Dh,003h
DB 089h,05Eh,0F8h,08Bh,046h,0FCh,0F7h,026h,049h,003h,08Bh,016h,049h,003h,08Bh
DB 0F8h,003h,07Eh,0FEh,08Bh,01Eh,03Fh,003h,08Bh,076h,0F4h,003h,076h,0F6h,0B8h
DB 000h,0A0h,08Eh,0D8h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh,023h
DB 02Bh,04Eh,0FCh,07Eh,01Eh,02Bh,0D0h,02Bh,0D8h,08Ah,0E0h,026h,08Ah,02Ch,066h
DB 046h,00Ah,0EDh,074h,002h,088h,02Dh,047h,0FEh,0CCh,075h,0F0h,003h,0F3h,003h
DB 0FAh,0FEh,0C9h,075h,0E6h,007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh
DB 0C8h,00Ch,000h,000h,050h,053h,051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh
DB 0D8h,0E8h,0B7h,002h,089h,056h,0F2h,0FCh,0A1h,02Fh,003h,08Bh,01Eh,033h,003h
DB 02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h,089h,046h,0FEh,089h,05Eh,0FCh,003h
DB 006h,037h,003h,003h,01Eh,03Bh,003h,089h,046h,0FAh,089h,05Eh,0F8h,0C7h,046h
DB 0F6h,000h,000h,0A1h,023h,003h,089h,046h,0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh
DB 0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh
DB 08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh,01Eh,049h,003h,049h,04Bh,003h,0C9h
DB 013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h
DB 0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h
DB 02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,034h
DB 005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h,00Fh,085h,0C7h,000h,00Ah,0C2h,074h
DB 040h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h
DB 046h,0FEh,000h,000h,0F6h,0C4h,002h,074h,013h,052h,08Bh,046h,0FCh,0F7h,0D8h
DB 0F7h,026h,037h,003h,001h,046h,0F4h,0C7h,046h,0FCh,000h,000h,05Ah,0F6h,0C2h
DB 004h,074h,006h,0A1h,049h,003h,089h,046h,0FAh,0F6h,0C2h,001h,074h,006h,0A1h
DB 04Dh,003h,089h,046h,0F8h,0B8h,000h,0A0h,08Eh,0C0h,08Bh,046h,0FCh,0F7h,026h
DB 049h,003h,003h,046h,0FEh,083h,0D2h,000h,08Bh,0F8h,0E8h,0F1h,001h,08Bh,016h
DB 049h,003h,08Bh,01Eh,03Fh,003h,0C5h,036h,023h,003h,08Bh,076h,0F4h,003h,076h
DB 0F6h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh,04Fh,02Bh,04Eh,0FCh
DB 07Eh,04Ah,02Bh,0D0h,02Bh,0D8h,083h,07Eh,006h,000h,075h,021h,08Ah,0E0h,08Ah
DB 02Ch,026h,088h,02Dh,046h,047h,075h,003h,0E8h,0D9h,001h,0FEh,0CCh,075h,0F0h
DB 003h,0F3h,003h,0FAh,073h,003h,0E8h,0CCh,001h,0FEh,0C9h,075h,0E1h,0EBh,01Fh
DB 08Ah,0E0h,026h,08Ah,02Dh,088h,02Ch,046h,047h,075h,003h,0E8h,0B8h,001h,0FEh
DB 0CCh,075h,0F0h,003h,0F3h,003h,0FAh,073h,003h,0E8h,0ABh,001h,0FEh,0C9h,075h
DB 0E1h,08Bh,056h,0F2h,0E8h,06Ch,001h,007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h
DB 0C9h,0CBh,0C8h,00Eh,000h,000h,050h,053h,051h,052h,057h,056h,01Eh,006h,08Ch
DB 0C8h,08Eh,0D8h,0E8h,03Eh,001h,089h,056h,0F2h,08Bh,046h,006h,08Bh,05Eh,008h
DB 02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h,089h,046h,0FEh,089h,05Eh,0FCh,003h
DB 006h,03Fh,003h,003h,01Eh,043h,003h,089h,046h,0FAh,089h,05Eh,0F8h,0C7h,046h
DB 0F6h,000h,000h,0C4h,006h,01Dh,003h,089h,046h,0F4h,033h,0C0h,033h,0D2h,08Bh
DB 04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh
DB 0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh,01Eh,049h,003h,049h,04Bh,003h
DB 0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h
DB 013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh
DB 003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h
DB 034h,005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h,00Fh,085h,0A0h,000h,00Ah,0C2h
DB 074h,040h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h
DB 0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h,074h,013h,052h,08Bh,046h,0FCh,0F7h
DB 0D8h,0F7h,026h,03Fh,003h,001h,046h,0F4h,0C7h,046h,0FCh,000h,000h,05Ah,0F6h
DB 0C2h,004h,074h,006h,0A1h,049h,003h,089h,046h,0FAh,0F6h,0C2h,001h,074h,006h
DB 0A1h,04Dh,003h,089h,046h,0F8h,08Bh,046h,0FCh,0F7h,026h,049h,003h,003h,046h
DB 0FEh,083h,0D2h,000h,08Bh,0F8h,0E8h,07Eh,000h,08Bh,016h,049h,003h,08Bh,01Eh
DB 03Fh,003h,08Bh,076h,0F4h,003h,076h,0F6h,0B8h,000h,0A0h,08Eh,0D8h,08Bh,046h
DB 0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh,02Ch,02Bh,04Eh,0FCh,07Eh,027h,02Bh
DB 0D0h,02Bh,0D8h,08Ah,0E0h,026h,08Ah,02Ch,046h,00Ah,0EDh,074h,002h,088h,02Dh
DB 047h,075h,003h,0E8h,067h,000h,0FEh,0CCh,075h,0ECh,003h,0F3h,003h,0FAh,073h
DB 003h,0E8h,05Ah,000h,0FEh,0C9h,075h,0DDh,08Bh,056h,0F2h,0E8h,01Bh,000h,007h
DB 01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,050h,053h,0B8h,005h,04Fh,0B7h
DB 001h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Bh,058h,0C3h,050h,053h,052h,0B8h
DB 005h,04Fh,0B7h,000h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Ah,05Bh,058h,0C3h
DB 050h,053h,052h,08Bh,0DAh,0C1h,0E3h,002h,02Eh,089h,01Eh,09Eh,00Bh,02Eh,08Bh
DB 097h,061h,003h,0B8h,005h,04Fh,0B7h,000h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h
DB 05Ah,05Bh,058h,0C3h,050h,053h,052h,02Eh,08Bh,01Eh,09Eh,00Bh,083h,0C3h,004h
DB 02Eh,089h,01Eh,09Eh,00Bh,02Eh,08Bh,097h,061h,003h,0B8h,005h,04Fh,0B7h,000h
DB 0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Ah,05Bh,058h,0C3h

View File

@@ -0,0 +1,162 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Westwood 32 bit Library *
;* *
;* File Name : KEYSTRUC.INC *
;* *
;* Programmer : Phil W. Gorrow *
;* *
;* Start Date : July 13, 1994 *
;* *
;* Last Update : July 13, 1994 [PWG] *
;* *
;*-------------------------------------------------------------------------*
;* Functions: *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
STRUC KeyboardType
SoundOn DW ? ; toggled by alt S
MusicOn DW ? ; toggled by alt M
KeyFlags DD ? ; all but repeat for now
Break DW ?
KeyMouseMove DB 6 DUP(?)
ScreenEdge DW 18 DUP (?)
Bits DB 8 DUP (?)
CondPassKey DW 17 DUP (?)
CondPassCond DW 17 DUP (?)
EscRoutine DD ?
ExtCodes DB 16 DUP (?)
ExtNums DB 16 DUP (?)
ExtRemap DB 16 DUP (?)
ExtRemapEnd DB ?
ExtKeyboard DB ?
KeyBuffer DW 128 DUP(?) ; set to empty
KeyBufferHead DD ? ; set to first entry
KeyBufferTail DD ? ; set to head for empty buffer
KeyLock DW ? ; num and caps lock bits
KeyNums DB 89 DUP (?)
KeysCapsLock DB 16 DUP (?)
KeysNumLock DB 16 DUP (?)
KeysUpDown DB 16 DUP (?)
KeyStream DB 16 DUP (?)
PassCount DW ?
KeyStreamIndex DW ?
LastKeyE0 DB ?
LastKeyE1 DB ?
PassAlways DB 10 DUP (?)
PassAlwaysEnd DB ? ; invalid code to END PassAlways
CtrlFlags DB ?
Buffer DW ?
Time DW ?
XYAdjust DB 26 DUP (?)
EdgeConv DW 16 DUP (?)
MouseUpdate DW ?
MouseX DD ?
LocalMouseX DW ?
MouseY DD ?
LocalMouseY DW ?
IsExtKey DB ?
ExtIndex DW ?
KeyOldRMI DD ? ; The origianl RM interrupt seg:off.
KeyOldPMIOffset DD ? ; The origianl PM interrupt offset
KeyOldPMISelector DD ? ; The original PM interrupt segment.
KeyCodeOffset DW ? ; Offset of the code in the RM stuff.
CallKeyRMIntOffset DW ? ; Offset of function to call DOS timer interrupt.
CallKeyRMIntAddr DD ? ; PM address of CallRealIntOffset for speed.
PMIssuedKeyInt DD ? ; did Protected mode pass this through?
BrkOldRMI DD ? ; The origianl RM interrupt seg:off.
BrkOldPMIOffset DD ? ; The origianl PM interrupt offset
BrkOldPMISelector DD ? ; The original PM interrupt segment.
BrkCodeOffset DW ? ; Offset of the code in the RM stuff.
CallBrkRMIntOffset DW ? ; Offset of function to call DOS timer interrupt.
CallBrkRMIntAddr DD ? ; PM address of CallRealIntOffset for speed.
PMIssuedBrkInt DD ? ; did Protected mode pass this through?
KeyIntDisabled DD ?
DbgOldPMIOffset DD ? ; The origianl PM interrupt offset
DbgOldPMISelector DD ? ; The original PM interrupt segment.
;---------------------------------------------------------------------------
; Begin definition of Mouse Specific Variables for real mode
;---------------------------------------------------------------------------
Button DB ? ; current value of the mouse button
MDisabled DB ? ; Is the mouse driver disabled
MInput DB ? ; Defaults to mouse input allowed.
Adjust DW ? ; flag to adjust coordinates if necessary
MouseStepX DW ? ; step values if the mouse moves at
MouseStepY DW ? ; more than one pixel at a time
MouseOffsetX DW ? ; Fractional step values used if a mouse
MouseOffsetY DW ? ; moves at less than one pixel at a time
MState DD ? ; Tracks if mouse is hidden (TRUE) or not (FALSE)
MouseXOld DW ? ; Holds last MouseX and MouseY to determine if
MouseYOld DW ? ; mouse needs to be redrawn
MCState DW ? ; Tracks if mouse conditional hidden (TRUE) or not
MouseCXLeft DD ? ; Conditional hide mouse left x position
MouseCYUpper DD ? ; Conditional hide mouse top y position
MouseCXRight DD ? ; Conditional hide mouse right x position
MouseCYLower DD ? ; Conditional hide mouse lower y position
MouseCursor DD ? ; Pointer to the mouse cursor to draw
MouseCursorSize DW ? ; Size of mouse cursor draw area
MouseBuffer DD ? ; Pointer to buffer mouse is saved in
MouseXHot DD ? ; Offset to mouse's x hot spot
MouseYHot DD ? ; Offset to mouse's y hot spot
MouseBuffX DD ? ; X position background was saved at
MouseBuffY DD ? ; Y position background was saved at
MouseBuffW DD ? ; Width of the region saved for mouse
MouseBuffH DD ? ; Height of the region saved for mouse
MouseWidth DD ? ; Mouse cursor theoretical width
MouseHeight DD ? ; Mouse cursor theoretical height
MouseCodeOffset DW ? ; Offset to the real mode code offset
MouseRight DD ? ; Right hand side of the screen
MouseBottom DD ? ; Bottom of the screen
ShadowPtr dw ?
DrawMousePtr dw ?
VGAMouseDraw dw ?
VGAMouseShadow dw ?
VESAMouseDraw dw ?
VESAMouseShadow dw ?
VesaPtr dd ?
VesaBankTable DD 8 dup (?)
Adjust_XPos dd ?
Adjust_YPos dd ?
ENDS
; InitFlags that are set to have a fully functional interrupt.
IF_ALLOC_RM equ 1 ; Allocation of RM was successful.
IF_SET_VECTORS equ 2 ; Vectors have been set.
IF_LOCKED_PM_CODE equ 4 ; Locked PM code for DPMI.
IF_LOCKED_PM_DATA equ 8 ; Locked PM code for DPMI.
IF_RATE_CHANGE equ 10 ; Timer rate was changed.
IF_FUNCTIONAL equ 20 ; Timer is in and functional.
IF_LOCKED_RM_CODE equ 40

200
WWFLAT32/KEYBOARD/MAKEFILE Normal file
View File

@@ -0,0 +1,200 @@
#
# Command & Conquer Red Alert(tm)
# Copyright 2025 Electronic Arts Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#***************************************************************************
#** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
#***************************************************************************
#* *
#* Project Name : Westwood Library .LIB makefile *
#* *
#* File Name : MAKEFILE *
#* *
#* Programmer : Julio R. Jerez *
#* *
#* Start Date : Jan 25, 1994 *
#* *
#* *
#*-------------------------------------------------------------------------*
#* *
#* Required environment variables: *
#* WWFLAT = your root WWFLAT path *
#* WWVCS = root directory for wwlib version control archive *
#* WATCOM = your Watcom installation path *
#* *
#* Required changes to makefile: *
#* PROJ_NAME = name of the library you're building *
#* OBJECTS = list of objects in your library *
#* *
#* Optional changes to makefile: *
#* PROJ_DIR = full pathname of your working directory *
#* .path.xxx = full pathname where various file types live *
#* *
#***************************************************************************
#---------------------------------------------------------------------------
# Verify user's environment
#---------------------------------------------------------------------------
!ifndef %WWFLAT
!error WWFLAT Environment var not configured.
!endif
!ifndef %WWVCS
!error WWVCS Environment var not configured.
!endif
!ifndef %WATCOM
!error WATCOM Environment var not configured.
!endif
#===========================================================================
# User-defined section: the user should tailor this section for each project
#===========================================================================
PROJ_NAME = keyboard
PROJ_DIR = $(%WWFLAT)\$(PROJ_NAME)
LIB_DIR = $(%WWFLAT)\lib
!include $(%WWFLAT)\project.cfg
#---------------------------------------------------------------------------
# Project-dependent variables
#---------------------------------------------------------------------------
OBJECTS = &
keyboard.obj &
mouse.obj &
pagfault.obj
#---------------------------------------------------------------------------
# Path macros: one path for each file type.
# These paths are used to tell make where to find/put each file type.
#---------------------------------------------------------------------------
.asm: $(PROJ_DIR)
.c: $(PROJ_DIR)
.cpp: $(PROJ_DIR)
.h: $(PROJ_DIR)
.obj: $(PROJ_DIR)
.lib: $(WWLIB)\lib
.exe: $(PROJ_DIR)
#===========================================================================
# Pre-defined section: there should be little need to modify this section.
#===========================================================================
#---------------------------------------------------------------------------
# Tools/commands
#---------------------------------------------------------------------------
C_CMD = wcc386
CPP_CMD = wpp386
LIB_CMD = wlib
LINK_CMD = wlink
ASM_CMD = tasm32
#---------------------------------------------------------------------------
# Include & library paths
# If LIB & INCLUDE are already defined, they are used in addition to the
# WWLIB32 lib & include; otherwise, they're constructed from
# BCDIR & TNTDIR
#---------------------------------------------------------------------------
LIBPATH = $(%WWFLAT)\LIB;$(%WATCOM)\LIB
INCLUDEPATH = $(%WWFLAT)\INCLUDE;$(%WATCOM)\H
#---------------------------------------------------------------------------
# Implicit rules
# Compiler:
# ($< = full dependent with path)
# Assembler:
# output obj's are constructed from .obj: & the $& macro
# ($< = full dependent with path)
# tasm's cfg file is not invoked as a response file.
#---------------------------------------------------------------------------
.c.obj: $(%WWFLAT)\project.cfg .AUTODEPEND
$(C_CMD) $(CC_CFG) $<
.cpp.obj: $(%WWFLAT)\project.cfg .AUTODEPEND
$(CPP_CMD) $(CC_CFG) $<
.asm.obj: $(%WWFLAT)\project.cfg
$(ASM_CMD) $(ASM_CFG) $<
#---------------------------------------------------------------------------
# Default target: configuration files & library (in that order)
#---------------------------------------------------------------------------
all: $(LIB_DIR)\$(PROJ_NAME).lib .SYMBOLIC
#---------------------------------------------------------------------------
# Build the library
# The original library is deleted by the librarian
# Lib objects & -+ commands are constructed by substituting within the
# $^@ macro (which expands to all target dependents, separated with
# spaces)
# Tlib's cfg file is not invoked as a response file.
# All headers & source files are copied into WWFLAT\SRCDEBUG, for debugging
#---------------------------------------------------------------------------
$(LIB_DIR)\$(PROJ_NAME).lib: $(OBJECTS) objects.lbc
copy *.h $(%WWFLAT)\include
copy *.inc $(%WWFLAT)\include
copy *.cpp $(%WWFLAT)\srcdebug
copy *.asm $(%WWFLAT)\srcdebug
$(LIB_CMD) $(LIB_CFG) $^@ @objects.lbc
#---------------------------------------------------------------------------
# Objects now have a link file which is NOT generated everytime. Instead
# it just has its own dependacy rule.
#---------------------------------------------------------------------------
objects.lbc : $(OBJECTS)
%create $^@
for %index in ($(OBJECTS)) do %append $^@ +%index
#---------------------------------------------------------------------------
# The keyboard object files is also dependant on an IBN file which is
# generated from KEYIREAL.ASM
#---------------------------------------------------------------------------
keyireal.ibn: keyireal.obj
%create $^*.rsp
%append $^*.rsp $^&.obj
%append $^*.rsp $^&.exe
%append $^*.rsp $^&.map
tlink @$^*.rsp
tdstrip keyireal.exe
ebn keyireal.exe
keyireal.obj: keyireal.asm
tasm /zn /la /ml /m2 keyireal.asm
keyboard.obj: keyireal.ibn keyboard.asm
#---------------------------------------------------------------------------
# Create the test directory and make it.
#---------------------------------------------------------------------------
test:
mkdir test
cd test
copy $(%WWVCS)\$(PROJ_NAME)\test\vcs.cfg
update
wmake
cd ..
#**************************** End of makefile ******************************

2226
WWFLAT32/KEYBOARD/MOUSE.ASM Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,447 @@
/*
** Command & Conquer Red Alert(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
***************************************************************************
* *
* Project Name : Westwood 32 bit Library *
* *
* File Name : KEYBOARD.H *
* *
* Programmer : Phil W. Gorrow *
* *
* Start Date : July 13, 1994 *
* *
* Last Update : July 13, 1994 [PWG] *
* *
*-------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef KEYBOARD_H
#define KEYBOARD_H
/*=========================================================================*/
/* If we have not already loaded the standard library header, than we can */
/* load it. */
/*=========================================================================*/
#ifndef WWSTD_H
#include "wwstd.h"
#endif
extern "C" {
void Install_Keyboard_Interrupt(void *addr, long size);
void Install_Page_Fault_Handle(void) ;
void *Get_RM_Keyboard_Address(void);
long Get_RM_Keyboard_Size(void);
void Remove_Keyboard_Interrupt(void);
int Check_Key_Num(void);
int Check_Key_Bits(void);
int Check_Key(void);
short Get_Key_Num(void);
short Get_Key_Bits(void);
int Get_Key(void);
int KN_To_KA(int keynum);
int Keyboard_Attributes_On(int key_flags);
int Keyboard_Attributes_Off(int key_flags);
void Clear_KeyBuffer(void);
int Key_Down(int key);
int Key_Satisfied(int key);
void Stuff_Key_WORD(int code);
void Stuff_Key_Num(int key);
int Install_Mouse(int max_width, int max_height, int scr_width, int scr_height);
void Reset_Mouse (void) ;
void Remove_Mouse(void);
int Get_Mouse_State(void);
int Get_Mouse_X(void);
int Get_Mouse_Y(void);
int Get_Mouse_Disabled(void);
void *Set_Mouse_Cursor(int xhotspot, int yhotspot, void *cursor);
void Hide_Mouse(void);
void Show_Mouse(void);
void Conditional_Hide_Mouse(int sx_pixel, int sy_pixel, int dx_pixel, int dy_pixel);
void Conditional_Show_Mouse(void);
void __interrupt far Keyboard_Interrupt(void);
extern int MouseQX;
extern int MouseQY;
}
enum {
REPEATON = 0x0001, /* 1:all makes into buffer, 0:only 1st make */
TRACKEXT = 0x0002, /* 1:Home != keypad Home, 0:Home=keypad Home */
FILTERONLY = 0x0004, /* 1:Normal BIOS operation with filter */
CTRLALTTURBO = 0x0010, /* 1:Allow turbo up and down in application */
NONUMLOCK = 0x0200, /* 1:do NOT remap keypad to numbers */
TASKSWITCHABLE = 0x400, /* 1:allows task switching keys thru ALT-TAB, */
/* ALT-ESC,CTRL-ESC */
PASSBREAKS = 0x0800, // Pass all breaks to the keyboard buffer.
/* The following flags, if turned on, should only be used for
debugging purposes (remember to take out the calls when BETA */
CTRLSON = 0x0008, /* 1:pass scroll lock sequence into BIOS */
CTRLCON = 0x0020, /* 1:pass stop code to BIOS */
SCROLLLOCKON = 0x0040, /* 1:pass scroll lock key into BIOS */
PAUSEON = 0x0080, /* 1:pass the pause key and seq to BIOS */
/* make sure FILTERONLY is set */
BREAKON = 0x0100, /* 1:pass the ctrl break seq to BIOS */
KEYMOUSE = 0x1000, /* 1:keypad translates into mouse moves */
SIMLBUTTON = 0x2000, /* 1:have space and enter keys simulate Left */
/* mouse button when KEYMOUSE is set */
DEBUGINT = 0x4000 /* Use scroll lock to disable keyboard int */
};
/*
** These are the codes for the various key codes that are returned from the
** keyboard input routines Get_Key() and Input_ASCII().
*/
typedef enum {
KA_CTRL_AT = 0,
KA_CTRL_A,
KA_MORE = KA_CTRL_A,
KA_CTRL_B,
KA_SETBKGDCOL = KA_CTRL_B,
KA_CTRL_C,
KA_CTRL_D,
KA_CTRL_E,
KA_CTRL_F,
KA_SETFORECOL = KA_CTRL_F,
KA_CTRL_G,
KA_CTRL_H,
KA_BACKSPACE = KA_CTRL_H,
KA_CTRL_I,
KA_TAB = KA_CTRL_I,
KA_CTRL_J,
KA_CTRL_K,
KA_CTRL_L,
KA_FORMFEED = KA_CTRL_L,
KA_CTRL_M,
KA_RETURN = KA_CTRL_M,
KA_CTRL_N,
KA_CTRL_O,
KA_CTRL_P,
KA_CTRL_Q,
KA_CTRL_R,
KA_CTRL_S,
KA_SPCTAB = KA_CTRL_S,
KA_CTRL_T,
KA_CTRL_U,
KA_CTRL_V,
KA_CTRL_W,
KA_CTRL_X,
KA_SETX = KA_CTRL_X,
KA_CTRL_Y,
KA_SETY = KA_CTRL_Y,
KA_CTRL_Z,
KA_CTRL_LBRACKET,
KA_ESC = KA_CTRL_LBRACKET,
KA_EXTEND = KA_ESC,
KA_CTRL_BACKSLASH,
KA_CTRL_RBRACKET,
KA_LITERAL = KA_CTRL_RBRACKET,
KA_CTRL_CARROT,
KA_CTRL_UNDERLINE,
KA_SPACE, /* */
KA_EXCLAMATION, /* ! */
KA_DQUOTE, /* " */
KA_POUND, /* # */
KA_DOLLAR, /* $ */
KA_PERCENT, /* % */
KA_AMPER, /* & */
KA_SQUOTE, /* ' */
KA_LPAREN, /* ( */
KA_RPAREN, /* ) */
KA_ASTERISK, /* * */
KA_PLUS, /* + */
KA_COMMA, /* , */
KA_MINUS, /* - */
KA_PERIOD, /* . */
KA_SLASH, /* / */
KA_0, KA_1, KA_2, KA_3, KA_4, KA_5, KA_6, KA_7, KA_8, KA_9,
KA_COLON, /* : */
KA_SEMICOLON, /* ; */
KA_LESS_THAN, /* < */
KA_EQUAL, /* = */
KA_GREATER_THAN, /* > */
KA_QUESTION, /* ? */
KA_AT, /* @ */
KA_A, /* A */
KA_B, /* B */
KA_C, /* C */
KA_D, /* D */
KA_E, /* E */
KA_F, /* F */
KA_G, /* G */
KA_H, /* H */
KA_I, /* I */
KA_J, /* J */
KA_K, /* K */
KA_L, /* L */
KA_M, /* M */
KA_N, /* N */
KA_O, /* O */
KA_P, /* P */
KA_Q, /* Q */
KA_R, /* R */
KA_S, /* S */
KA_T, /* T */
KA_U, /* U */
KA_V, /* V */
KA_W, /* W */
KA_X, /* X */
KA_Y, /* Y */
KA_Z, /* Z */
KA_LBRACKET, /* [ */
KA_BACKSLASH, /* \ */
KA_RBRACKET, /* ] */
KA_CARROT, /* ^ */
KA_UNDERLINE, /* _ */
KA_GRAVE, /* ` */
KA_a, /* a */
KA_b, /* b */
KA_c, /* c */
KA_d, /* d */
KA_e, /* e */
KA_f, /* f */
KA_g, /* g */
KA_h, /* h */
KA_i, /* i */
KA_j, /* j */
KA_k, /* k */
KA_l, /* l */
KA_m, /* m */
KA_n, /* n */
KA_o, /* o */
KA_p, /* p */
KA_q, /* q */
KA_r, /* r */
KA_s, /* s */
KA_t, /* t */
KA_u, /* u */
KA_v, /* v */
KA_w, /* w */
KA_x, /* x */
KA_y, /* y */
KA_z, /* z */
KA_LBRACE, /* { */
KA_BAR, /* | */
KA_RBRACE, /* ] */
KA_TILDA, /* ~ */
KA_DEL, /* not used */
KA_ALT_F10 = 143,
KA_ALT_F9, KA_ALT_F8, KA_ALT_F7, KA_ALT_F6, KA_ALT_F5,
KA_ALT_F4, KA_ALT_F3, KA_ALT_F2, KA_ALT_F1,
KA_CTRL_F10, KA_CTRL_F9, KA_CTRL_F8, KA_CTRL_F7, KA_CTRL_F6,
KA_CTRL_F5, KA_CTRL_F4, KA_CTRL_F3, KA_CTRL_F2, KA_CTRL_F1,
KA_SHIFT_F10, KA_SHIFT_F9, KA_SHIFT_F8, KA_SHIFT_F7, KA_SHIFT_F6,
KA_SHIFT_F5, KA_SHIFT_F4, KA_SHIFT_F3, KA_SHIFT_F2, KA_SHIFT_F1,
KA_DELETE, /* <DELETE> */
KA_INSERT, /* <INSERT> */
KA_PGDN, /* <PAGE DOWN> */
KA_DOWNRIGHT = KA_PGDN,
KA_DOWN, /* <DOWN ARROW> */
KA_END, /* <END> */
KA_DOWNLEFT = KA_END,
KA_RESERVED1,
KA_RIGHT, /* <RIGHT ARROW> */
KA_KEYPAD5, /* NUMERIC KEY PAD <5> */
KA_LEFT, /* <LEFT ARROW> */
KA_RESERVED2,
KA_PGUP, /* <PAGE UP> */
KA_UPRIGHT = KA_PGUP,
KA_UP, /* <UP ARROW> */
KA_HOME, /* <HOME> */
KA_UPLEFT = KA_HOME,
KA_RESERVED3,
KA_RESERVED4,
KA_F10, KA_F9, KA_F8, KA_F7, KA_F6, KA_F5, KA_F4, KA_F3, KA_F2, KA_F1,
KA_LMOUSE,
KA_RMOUSE,
KA_JBUTTON1,
KA_JBUTTON2,
KA_J_UP,
KA_J_RIGHT,
KA_J_DOWN,
KA_J_LEFT,
KA_SHIFT_BIT = 0x0100,
KA_CTRL_BIT = 0x0200,
KA_ALT_BIT = 0x0400,
KA_RLSE_BIT = 0x0800,
KA_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
KA_RCOMM_BIT = 0x2000 /* Amiga Right Comm key */
} KeyASCIIType;
/*
** These are the keyboard codes that are returned from the input routines
** Get_Key_Num and Input_Num.
*/
typedef enum {
KN_NONE = 0,
KN_GRAVE = 1, /* ` */
KN_1, KN_2, KN_3, KN_4, KN_5, KN_6, KN_7, KN_8, KN_9, KN_0,
KN_MINUS, /* - */
KN_EQUAL, /* = */
KN_RESERVED1,
KN_BACKSPACE, /* <BACKSPACE> */
KN_TAB, /* <TAB> */
KN_Q, KN_W, KN_E, KN_R, KN_T, KN_Y, KN_U, KN_I, KN_O, KN_P,
KN_LBRACKET, /* [ */
KN_RBRACKET, /* ] */
KN_BACKSLASH, /* \ */
KN_CAPSLOCK, /* <CAPS LOCK> */
KN_A, KN_S, KN_D, KN_F, KN_G, KN_H, KN_J, KN_K, KN_L,
KN_SEMICOLON, /* ; */
KN_SQUOTE, /* ' */
KN_BACKSLASH2,
KN_RETURN, /* <RETURN> or <ENTER> */
KN_LSHIFT, /* <LEFT SHIFT> */
KN_MOUSE_MOVE, // Indicate a mouse move (for playback of
KN_Z, KN_X, KN_C, KN_V, KN_B, KN_N, KN_M,
KN_COMMA, /* , */
KN_PERIOD, /* . */
KN_SLASH, /* / */
KN_RESERVED3,
KN_RSHIFT, /* <RIGHT SHIFT> */
KN_LCTRL, /* <LEFT CTRL> */
KN_LCOMM, /* for AMIGA */
KN_LALT, /* <LEFT ALT> */
KN_SPACE, /* <SPACE BAR> */
KN_RALT, /* <RIGHT ALT> */
KN_RCOMM, /* for AMIGA */
KN_RCTRL, /* <RIGHT CTRL> */
/* the following are forced into key buffer */
KN_LMOUSE,
KN_RMOUSE,
KN_JBUTTON1,
KN_JBUTTON2,
KN_J_UP,
KN_J_RIGHT,
KN_J_DOWN,
KN_J_LEFT,
KN_SPECIAL9,
KN_SPECIAL10,
KN_E_INSERT, /* extended <INSERT> */
KN_E_DELETE, /* extended <DELETE> */
KN_RESERVED4,
KN_RESERVED5,
KN_E_LEFT, /* extended <LEFT ARROW> */
KN_E_HOME, /* extended <HOME> */
KN_E_END, /* extended <END> */
KN_RESERVED6,
KN_E_UP, /* extended <UP ARROW> */
KN_E_DOWN, /* extended <DOWN ARROW> */
KN_E_PGUP, /* extended <PAGE UP> */
KN_E_PGDN, /* extended <PAGE DOWN> */
KN_K_LPAREN, /* for AMIGA */
KN_K_RPAREN, /* for AMIGA */
KN_E_RIGHT, /* extended <RIGHT ARROW> */
KN_NUMLOCK, /* <NUM LOCK> */
KN_HOME, /* num key pad 7 */
KN_UPLEFT = KN_HOME,
KN_LEFT, /* num key pad 4 */
KN_END, /* num key pad 1 */
KN_DOWNLEFT = KN_END,
KN_RESERVED7,
KN_KEYPAD_SLASH, /* num key pad / */
KN_UP, /* num key pad 8 */
KN_CENTER, /* num key pad 5 */
KN_DOWN, /* num key pad 2 */
KN_INSERT, /* num key pad 0 */
KN_KEYPAD_ASTERISK, /* num key pad * */
KN_PGUP, /* num key pad 9 */
KN_UPRIGHT = KN_PGUP,
KN_RIGHT, /* num key pad 6 */
KN_PGDN, /* num key pad 3 */
KN_DOWNRIGHT = KN_PGDN,
KN_DELETE, /* num key pad . */
KN_KEYPAD_MINUS, /* num key pad - */
KN_KEYPAD_PLUS, /* num key pad + */
KN_RESERVED8,
KN_KEYPAD_RETURN, /* num key pad <ENTER> */
KN_RESERVED9,
KN_ESC,
KN_HELP, /* for AMIGA */
KN_F1, KN_F2, KN_F3, KN_F4, KN_F5, KN_F6, KN_F7, KN_F8, KN_F9, KN_F10,
KN_F11,
KN_F12,
KN_PRNTSCRN, /* <PRINT SCRN> */
KN_SCROLLLOCK, /* <SCROLL LOCK> */
KN_PAUSE, /* <PAUSE> */
KN_SHIFT_BIT = 0x0100,
KN_CTRL_BIT = 0x0200,
KN_ALT_BIT = 0x0400,
KN_RLSE_BIT = 0x0800,
KN_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
KN_RCOMM_BIT = 0x2000, /* Amiga Right Comm key */
KN_BUTTON = 0x8000 /* Amiga Right Comm key */
} KeyNumType;
#endif

View File

@@ -0,0 +1,129 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Westwood 32 bit Library *
;* *
;* File Name : KEYBOARD.INC *
;* *
;* Programmer : Phil W. Gorrow *
;* *
;* Start Date : July 12, 1994 *
;* *
;* Last Update : July 12, 1994 [PWG] *
;* *
;*-------------------------------------------------------------------------*
;* Contains all the defines used by the keyboard interrupt for assembly *
;* includes. *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
TRUE EQU 1 ; numerical true
FALSE EQU 0 ; numerical false
DEBUG EQU 1
MAX_X_PIXEL EQU 319
MAX_Y_PIXEL EQU 199
KN_RESERVED1 EQU 14
KN_RESERVED2 EQU 45
KN_RESERVED3 EQU 56
; these two are reserved for AMIGA open and close.
KN_LCOMM EQU 59
KN_RCOMM EQU 63
KN_LMOUSE EQU 65
KN_RMOUSE EQU 66
KN_JBUTTON1 EQU 67
KN_JBUTTON2 EQU 68
KN_J_UP EQU 69
KN_J_RIGHT EQU 70
KN_J_DOWN EQU 71
KN_J_LEFT EQU 72
KN_LEFT EQU 92
KN_UPLEFT EQU 91
KN_UP EQU 96
KN_UPRIGHT EQU 101
KN_RIGHT EQU 102
KN_DOWNRIGHT EQU 103
KN_DOWN EQU 98
KN_DOWNLEFT EQU 93
KN_CENTER EQU 97
KN_INSERT EQU 99
KN_DELETE EQU 104
KN_RETURN EQU 43
KN_SPACE EQU 61
KN_KEYPAD_RETURN EQU 108
; these two are reserved for AMIGA K left and right paren
KN_KLPAREN EQU 87
KN_KRPAREN EQU 88
KN_NUMLOCK EQU 90
KN_SCROLLOCK EQU 125 ; key ignored by the logging system
KN_MOUSE_MOVE EQU 45 ; Indicate a mouse move (for playback of logged data)
; ----------------------------------------------------------------
; flags used in Keyflags to customize keystroke interrupt.
REPEATON EQU 0001H ; 1:all makes into buffer, 0:only 1st make
TRACKEXT EQU 0002H ; 1:Home != keypad Home, 0:Home=keypad Home
FILTERONLY EQU 0004H ; 1:Normal BIOS operation with filter
CTRLSON EQU 0008H ; 1:pass scroll lock sequence into BIOS
CTRLALTTURBO EQU 0010H ; 1:Allow turbo up and down in application
CTRLCON EQU 0020H ; 1:pass stop code to BIOS
SCROLLLOCKON EQU 0040H ; 1:pass scroll lock key into BIOS
PAUSEON EQU 0080H ; 1:pass the pause key and seq to BIOS
BREAKON EQU 0100H ; 1:pass the ctrl break seq to BIOS
NONUMLOCK EQU 0200H ; 1:do NOT remap keypad to numbers
TASKSWITCHABLE EQU 0400H ; 1:allows task switching keys thru ALT-TAB,
; ALT-ESC,CTRL-ESC
PASSBREAKS EQU 0800H ; 1:Pass all break codes to keyboard buffer.
KEYMOUSE EQU 1000H ; 1:Numeric keypad moves mouse
SIMLBUTTON EQU 2000H ; 1:have space and enter keys simulate Left
DEBUGINT EQU 4000H ; mouse button when KEYMOUSE is set
SHIFTPRESS EQU 001H ; bit 0 for shift key pressed
CTRLPRESS EQU 002H ; bit 1 for ctrl key pressed
ALTPRESS EQU 004H ; bit 2 for alt key pressed
KEYRELEASE EQU 008H ; bit 3 for key released
NOTKEYRELEASE EQU 0F7H ; not of key released
CAPSLOCK EQU 00001H ; bit 0 for caps locked
NUMLOCK EQU 00002H ; bit 1 for num locked
CLEARISR EQU 020H ; value to clear In Service Register
DOS EQU 021H
INTCHIP0 EQU 020H ; 8259 interrupt chip controller 0
KEYCTRL EQU 061H ; control bits for KB sense data
KEYDATA EQU 060H ; keyboard scan code port

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,361 @@
DB 001h,000h,001h,000h,011h,000h,000h,000h,000h,000h,0FFh,000h,001h,0F0h,000h
DB 010h,0A0h,000h,000h,000h,03Fh,001h,000h,000h,03Fh,001h,045h,000h,03Fh,001h
DB 089h,000h,0A0h,000h,089h,000h,000h,000h,089h,000h,000h,000h,045h,000h,000h
DB 000h,000h,000h,0A0h,000h,045h,000h,001h,002h,004h,008h,010h,020h,040h,080h
DB 020h,002h,020h,003h,00Ch,006h,00Dh,007h,06Ah,006h,069h,006h,030h,002h,030h
DB 003h,07Dh,000h,07Dh,001h,05Ah,002h,05Ah,003h,000h,002h,010h,004h,06Eh,004h
DB 06Eh,002h,07Ch,000h,008h,000h,008h,000h,010h,000h,010h,000h,010h,000h,010h
DB 000h,020h,000h,020h,000h,040h,000h,040h,000h,080h,000h,080h,000h,000h,001h
DB 000h,004h,000h,004h,000h,004h,000h,001h,000h,000h,000h,000h,038h,01Dh,052h
DB 053h,04Bh,047h,04Fh,048h,050h,049h,051h,04Dh,035h,01Ch,037h,046h,03Eh,040h
DB 04Bh,04Ch,04Fh,050h,051h,053h,054h,055h,056h,059h,05Fh,06Ch,07Ch,000h,03Ch
DB 03Ah,063h,068h,05Ch,05Bh,05Dh,060h,062h,065h,067h,066h,037h,02Bh,07Ch,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,07Fh,06Eh
DB 002h,003h,004h,005h,006h,007h,008h,009h,00Ah,00Bh,00Ch,00Dh,00Fh,010h,011h
DB 012h,013h,014h,015h,016h,017h,018h,019h,01Ah,01Bh,01Ch,02Bh,03Ah,01Fh,020h
DB 021h,022h,023h,024h,025h,026h,027h,028h,029h,001h,02Ch,01Dh,02Eh,02Fh,030h
DB 031h,032h,033h,034h,035h,036h,037h,039h,064h,03Ch,03Dh,01Eh,070h,071h,072h
DB 073h,074h,075h,076h,077h,078h,079h,05Ah,07Dh,05Bh,060h,065h,069h,05Ch,061h
DB 066h,06Ah,05Dh,062h,067h,063h,068h,07Fh,07Fh,07Fh,07Ah,07Bh,000h,000h,0FEh
DB 087h,0FFh,0C0h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,038h,0EFh,001h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,01Eh,02Ch,039h,03Ah,03Ch,03Eh,040h,05Ah
DB 080h,080h,080h,000h,000h,000h,000h,000h,0FFh,0FFh,0FFh,000h,0FFh,001h,000h
DB 000h,000h,000h,000h,0FFh,000h,000h,000h,001h,000h,000h,000h,000h,001h,0FFh
DB 001h,000h,001h,001h,008h,000h,002h,000h,008h,000h,006h,000h,004h,000h,003h
DB 000h,008h,000h,005h,000h,008h,000h,008h,000h,008h,000h,008h,000h,000h,000h
DB 001h,000h,008h,000h,007h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,029h,00Ah,002h,00Dh,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0F1h
DB 00Ch,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,001h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0F4h
DB 00Dh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0AEh,010h
DB 05Ah,00Fh,05Fh,013h,0E6h,011h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,090h,000h,000h,000h,000h,0ADh,0DEh,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,0ADh,0DEh,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0C8h,000h
DB 000h,000h,051h,057h,006h,01Eh,08Ch,0C8h,08Eh,0D8h,08Eh,0C0h,08Bh,046h,006h
DB 0F7h,006h,004h,000h,002h,000h,075h,013h,0B9h,010h,000h,0BFh,094h,000h,0F2h
DB 0AEh,0E3h,009h,0BFh,0B4h,000h,04Fh,02Bh,0F9h,026h,08Ah,005h,01Fh,007h,05Fh
DB 059h,0C9h,0CBh,0C8h,000h,000h,000h,056h,053h,01Eh,08Ch,0C8h,08Eh,0D8h,0A1h
DB 0BAh,001h,08Bh,0F0h,005h,002h,000h,025h,0FFh,000h,039h,006h,0B6h,001h,074h
DB 011h,08Bh,05Eh,006h,089h,09Ch,0B6h,000h,0A3h,0BAh,001h,033h,0C0h,01Fh,05Bh
DB 05Eh,0C9h,0CBh,0B8h,001h,000h,01Fh,05Bh,05Eh,0C9h,0CBh,0C8h,004h,000h,000h
DB 053h,051h,052h,057h,056h,01Eh,09Ch,0FAh,08Ch,0C8h,08Eh,0D8h,0A1h,0ABh,002h
DB 0A3h,0AFh,002h,0A1h,0B1h,002h,0A3h,0B5h,002h,08Bh,046h,006h,00Bh,0C0h,075h
DB 003h,0E9h,0F7h,001h,0F7h,006h,004h,000h,000h,010h,00Fh,084h,03Ah,001h,0F6h
DB 0C4h,004h,00Fh,085h,033h,001h,0F7h,006h,004h,000h,000h,020h,074h,00Ch,03Ch
DB 02Bh,074h,00Ch,03Ch,03Dh,074h,008h,03Ch,06Ch,074h,004h,03Ch,063h,075h,016h
DB 0B0h,041h,080h,00Eh,0F6h,002h,001h,0F6h,0C4h,008h,00Fh,084h,00Ah,001h,080h
DB 026h,0F6h,002h,0FEh,0E9h,002h,001h,03Ch,068h,075h,016h,0B0h,042h,080h,00Eh
DB 0F6h,002h,002h,0F6h,0C4h,008h,00Fh,084h,0F0h,000h,080h,026h,0F6h,002h,0FDh
DB 0E9h,0E8h,000h,0F6h,0C4h,008h,00Fh,085h,0E4h,000h,03Ch,061h,074h,01Eh,03Ch
DB 05Bh,00Fh,082h,0DAh,000h,03Ch,067h,00Fh,087h,0D4h,000h,03Ch,05Dh,076h,00Eh
DB 03Ch,065h,073h,00Ah,03Ch,060h,074h,006h,03Ch,062h,00Fh,085h,0C2h,000h,08Ah
DB 0ECh,032h,0E4h,02Ch,05Bh,08Bh,0D8h,0D1h,0E3h,081h,0C3h,06Fh,002h,08Bh,007h
DB 08Ah,0DCh,098h,093h,098h,093h,0F6h,0C5h,002h,075h,021h,0BAh,001h,000h,0F6h
DB 0C5h,001h,074h,003h,083h,0C2h,003h,003h,0DAh,08Ah,09Fh,00Ah,000h,093h,098h
DB 093h,087h,0DAh,003h,0D8h,08Ah,087h,00Ah,000h,098h,087h,0DAh,0EBh,034h,083h
DB 0E3h,003h,025h,003h,000h,083h,0E3h,003h,025h,003h,000h,0D1h,0E3h,0D1h,0E3h
DB 00Bh,0D8h,0D1h,0E3h,08Bh,09Fh,089h,002h,0D1h,0E3h,0D1h,0E3h,08Bh,087h,010h
DB 000h,08Bh,09Fh,012h,000h,0A3h,0AFh,002h,089h,01Eh,0B5h,002h,0A1h,0AFh,002h
DB 08Bh,01Eh,0B5h,002h,0EBh,02Fh,001h,006h,0AFh,002h,079h,005h,033h,0C0h,0A3h
DB 0AFh,002h,001h,01Eh,0B5h,002h,079h,006h,033h,0DBh,089h,01Eh,0B5h,002h,0A1h
DB 0AFh,002h,08Bh,01Eh,0B5h,002h,03Dh,03Fh,001h,07Eh,003h,0B8h,03Fh,001h,081h
DB 0FBh,0C7h,000h,07Eh,003h,0BBh,0C7h,000h,0A3h,0AFh,002h,089h,01Eh,0B5h,002h
DB 0A3h,0ABh,002h,089h,01Eh,0B1h,002h,083h,03Eh,0A9h,002h,000h,075h,008h,00Eh
DB 0E8h,0A5h,003h,00Eh,0E8h,0D4h,003h,0B8h,02Dh,000h,089h,046h,006h,08Bh,036h
DB 0BAh,001h,089h,076h,0FEh,08Bh,03Eh,0B6h,001h,050h,00Eh,0E8h,051h,0FEh,083h
DB 0C4h,002h,00Bh,0C0h,075h,011h,08Bh,046h,006h,03Ch,02Dh,074h,00Dh,03Ch,041h
DB 074h,009h,03Ch,042h,074h,005h,0EBh,029h,0E9h,080h,000h,0FFh,036h,0AFh,002h
DB 00Eh,0E8h,02Eh,0FEh,083h,0C4h,002h,00Bh,0C0h,075h,0EEh,083h,046h,0FCh,002h
DB 0FFh,036h,0B5h,002h,00Eh,0E8h,01Bh,0FEh,083h,0C4h,002h,00Bh,0C0h,075h,0DBh
DB 083h,046h,0FCh,002h,0BBh,001h,001h,08Bh,046h,006h,03Ch,02Dh,074h,01Bh,03Ch
DB 07Fh,074h,017h,0F6h,0C4h,008h,074h,016h,032h,0DBh,0F7h,006h,004h,000h,000h
DB 008h,075h,00Ch,03Ch,041h,074h,008h,03Ch,042h,074h,004h,089h,036h,0BAh,001h
DB 08Bh,0F8h,083h,0E7h,07Fh,0B1h,003h,0D3h,0EFh,08Ah,0C8h,080h,0E1h,007h,0D3h
DB 0E3h,0F6h,0D7h,084h,09Dh,039h,002h,074h,00Ch,0F7h,006h,004h,000h,001h,000h
DB 075h,004h,089h,036h,0BAh,001h,020h,0BDh,039h,002h,008h,09Dh,039h,002h,0B8h
DB 001h,000h,0EBh,008h,08Bh,046h,0FEh,0A3h,0BAh,001h,033h,0C0h,09Dh,01Fh,05Eh
DB 05Fh,05Ah,059h,05Bh,0C9h,0CBh,050h,053h,051h,057h,01Eh,052h,006h,056h,0FCh
DB 08Ch,0C8h,08Eh,0D8h,08Ch,0D1h,089h,026h,08Ah,003h,089h,00Eh,08Ch,003h,0BAh
DB 08Eh,005h,083h,0E2h,0FEh,0FAh,08Eh,0D0h,08Bh,0E2h,0FBh,083h,03Eh,0CEh,002h
DB 000h,0C7h,006h,0CEh,002h,000h,000h,00Fh,085h,003h,002h,08Bh,016h,004h,000h
DB 083h,026h,0BEh,001h,0FCh,0B8h,040h,000h,08Eh,0C0h,026h,0F6h,006h,017h,000h
DB 040h,074h,005h,083h,00Eh,0BEh,001h,001h,026h,0F6h,006h,017h,000h,020h,074h
DB 005h,083h,00Eh,0BEh,001h,002h,0C6h,006h,0B5h,000h,001h,026h,0F6h,006h,096h
DB 000h,010h,075h,005h,0C6h,006h,0B5h,000h,000h,08Ch,0C8h,08Eh,0C0h,0FCh,032h
DB 0E4h,0BBh,001h,001h,0E4h,060h,08Bh,01Eh,05Bh,002h,088h,087h,049h,002h,043h
DB 083h,0E3h,00Fh,089h,01Eh,05Bh,002h,0BBh,001h,001h,03Ch,0E1h,075h,005h,0C6h
DB 006h,05Eh,002h,003h,080h,03Eh,05Eh,002h,000h,074h,00Fh,0FEh,00Eh,05Eh,002h
DB 0F7h,0C2h,080h,000h,00Fh,085h,08Eh,001h,0E9h,0CBh,001h,03Ch,0E0h,075h,008h
DB 0C6h,006h,05Dh,002h,001h,0E9h,07Fh,001h,0A8h,080h,074h,007h,032h,0DBh,024h
DB 07Fh,080h,0CCh,008h,080h,03Eh,05Dh,002h,000h,074h,023h,0C6h,006h,05Dh,002h
DB 000h,0C6h,006h,0B7h,002h,001h,0BFh,084h,000h,0B9h,010h,000h,0F2h,0AEh,0E3h
DB 002h,0EBh,003h,0E9h,094h,001h,08Ah,045h,00Fh,0C6h,006h,0B7h,002h,000h,0EBh
DB 011h,03Ch,07Ah,075h,004h,0B0h,080h,0EBh,009h,08Bh,0F8h,083h,0E7h,07Fh,08Ah
DB 085h,0C0h,001h,0F6h,006h,041h,002h,001h,075h,01Bh,0F6h,006h,040h,002h,004h
DB 074h,017h,03Ch,05Ah,075h,010h,080h,03Eh,0B5h,000h,001h,074h,009h,0F7h,0C2h
DB 080h,000h,075h,003h,0E9h,057h,001h,080h,0CCh,002h,0F6h,006h,040h,002h,050h
DB 074h,003h,080h,0CCh,004h,050h,00Eh,0E8h,043h,0FCh,083h,0C4h,002h,0F6h,006h
DB 03Eh,002h,010h,075h,007h,0F6h,006h,040h,002h,002h,074h,003h,080h,0CCh,001h
DB 08Bh,0F8h,083h,0E7h,07Fh,0D1h,0EFh,0D1h,0EFh,0D1h,0EFh,08Bh,0D8h,083h,0E3h
DB 07Fh,080h,0E3h,007h,08Ah,0AFh,034h,000h,0F7h,006h,0BEh,001h,001h,000h,074h
DB 009h,084h,0ADh,019h,002h,074h,003h,080h,0F4h,001h,0F7h,006h,0BEh,001h,002h
DB 000h,074h,009h,084h,0ADh,029h,002h,074h,003h,080h,0F4h,001h,088h,026h,06Ah
DB 002h,0F7h,0C2h,000h,040h,074h,034h,066h,083h,03Eh,0EAh,002h,001h,075h,01Bh
DB 03Dh,073h,000h,074h,00Ah,03Dh,076h,000h,072h,00Eh,03Dh,078h,000h,077h,009h
DB 066h,0C7h,006h,0EAh,002h,000h,000h,000h,000h,0E9h,08Bh,000h,03Dh,07Dh,000h
DB 075h,00Ch,066h,0C7h,006h,0EAh,002h,001h,000h,000h,000h,0E9h,0BAh,000h,03Dh
DB 068h,006h,074h,075h,03Dh,04Ch,006h,074h,070h,03Dh,030h,002h,074h,005h,03Dh
DB 07Eh,002h,075h,006h,0C7h,006h,008h,000h,001h,000h,03Dh,020h,004h,075h,00Ch
DB 050h,0A1h,000h,000h,035h,001h,000h,050h,083h,0C4h,002h,058h,03Dh,034h,004h
DB 075h,00Ch,050h,0A1h,002h,000h,035h,001h,000h,050h,083h,0C4h,002h,058h,050h
DB 00Eh,0E8h,0DEh,0FBh,058h,03Ch,06Eh,075h,00Dh,083h,03Eh,082h,000h,000h,074h
DB 006h,050h,0FFh,01Eh,080h,000h,058h,0BFh,05Fh,002h,0B9h,00Ah,000h,0F2h,0AEh
DB 00Bh,0C9h,075h,01Bh,0BFh,03Ch,000h,0B9h,022h,000h,0D1h,0E9h,0F2h,0AFh,0E3h
DB 009h,08Bh,05Dh,020h,023h,0DAh,074h,002h,0EBh,006h,0F7h,0C2h,004h,000h,074h
DB 040h,02Eh,0FFh,006h,059h,002h,081h,03Eh,08Eh,003h,0ADh,0DEh,074h,017h,051h
DB 057h,050h,006h,0B8h,000h,0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h
DB 000h,0F3h,0AAh,007h,058h,05Fh,059h,0FAh,08Bh,016h,08Ch,003h,08Eh,0D2h,08Bh
DB 026h,08Ah,003h,0FBh,0BAh,0E8h,00Ch,09Ch,00Eh,052h,09Ch,0FFh,036h,0BCh,002h
DB 0FFh,036h,0BAh,002h,0CFh,0E4h,061h,08Ah,0E0h,00Ch,080h,0E6h,061h,086h,0E0h
DB 0E6h,061h,0B8h,040h,000h,08Eh,0C0h,026h,0A0h,096h,000h,024h,0FDh,026h,0A2h
DB 096h,000h,0B0h,020h,0E6h,020h,081h,03Eh,08Eh,003h,0ADh,0DEh,074h,017h,051h
DB 057h,050h,006h,0B8h,000h,0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h
DB 000h,0F3h,0AAh,007h,058h,05Fh,059h,08Bh,016h,08Ch,003h,0FAh,08Eh,0D2h,08Bh
DB 026h,08Ah,003h,0FBh,05Eh,007h,05Ah,01Fh,05Fh,059h,05Bh,058h,0CFh,09Ch,050h
DB 006h,0B8h,000h,0B0h,08Eh,0C0h,026h,0FEh,006h,000h,000h,007h,058h,09Dh,0CFh
DB 09Ch,00Eh,0E8h,022h,0FDh,0CBh,050h,053h,051h,052h,01Eh,08Ch,0C8h,08Eh,0D8h
DB 080h,03Eh,0F7h,002h,000h,075h,01Dh,083h,03Eh,003h,003h,000h,075h,00Ch,0B8h
DB 000h,000h,050h,00Eh,0FFh,016h,051h,003h,083h,0C4h,002h,083h,006h,003h,003h
DB 001h,083h,016h,003h,003h,000h,01Fh,05Ah,059h,05Bh,058h,0CBh,0C8h,004h,000h
DB 000h,050h,053h,051h,052h,056h,057h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,080h,03Eh
DB 0F7h,002h,000h,075h,050h,083h,03Eh,003h,003h,000h,074h,049h,0FFh,00Eh,003h
DB 003h,083h,03Eh,003h,003h,000h,075h,03Eh,08Bh,00Eh,03Fh,003h,08Bh,016h,043h
DB 003h,0A1h,0ABh,002h,089h,046h,0FEh,08Bh,01Eh,0B1h,002h,089h,05Eh,0FCh,0A3h
DB 02Fh,003h,089h,01Eh,033h,003h,089h,00Eh,037h,003h,089h,016h,03Bh,003h,0B8h
DB 001h,000h,050h,00Eh,0FFh,016h,051h,003h,083h,0C4h,002h,0FFh,076h,0FCh,0FFh
DB 076h,0FEh,00Eh,0FFh,016h,053h,003h,083h,0C4h,004h,007h,01Fh,05Fh,05Eh,05Ah
DB 059h,05Bh,058h,0C9h,0CBh,0C8h,002h,000h,000h,053h,08Ch,0C8h,08Eh,0D8h,0C7h
DB 046h,0FEh,02Dh,000h,08Bh,05Eh,006h,08Bh,0C3h,032h,01Eh,0F6h,002h,074h,029h
DB 0A2h,0F6h,002h,0F6h,0C3h,002h,074h,00Eh,0C7h,046h,0FEh,042h,000h,0A8h,002h
DB 075h,005h,081h,04Eh,0FEh,000h,008h,0F6h,0C3h,001h,074h,00Eh,0C7h,046h,0FEh
DB 041h,000h,0A8h,001h,075h,005h,081h,04Eh,0FEh,000h,008h,08Bh,046h,0FEh,05Bh
DB 0C9h,0CBh,0C8h,004h,000h,000h,050h,053h,051h,052h,01Eh,056h,006h,057h,02Eh
DB 089h,01Eh,090h,005h,02Eh,0A3h,092h,005h,08Ch,0C8h,08Eh,0D8h,08Ch,0D3h,089h
DB 026h,094h,005h,089h,01Eh,096h,005h,0BBh,098h,007h,083h,0E3h,0FEh,0FAh,08Eh
DB 0D0h,08Bh,0E3h,0FBh,080h,03Eh,0F7h,002h,000h,00Fh,085h,0FAh,000h,080h,03Eh
DB 0F8h,002h,000h,00Fh,084h,0F1h,000h,0A1h,092h,005h,025h,01Eh,000h,075h,009h
DB 083h,03Eh,0A9h,002h,000h,00Fh,085h,0E0h,000h,083h,03Eh,0F9h,002h,001h,075h
DB 002h,0D1h,0E9h,03Bh,00Eh,049h,003h,072h,005h,08Bh,00Eh,049h,003h,049h,03Bh
DB 016h,04Dh,003h,072h,005h,08Bh,016h,04Dh,003h,04Ah,089h,00Eh,0ABh,002h,089h
DB 016h,0B1h,002h,066h,0F7h,006h,004h,000h,000h,010h,000h,000h,075h,013h,0FFh
DB 036h,090h,005h,00Eh,0E8h,02Ch,0FFh,083h,0C4h,002h,050h,00Eh,0E8h,07Bh,0F9h
DB 083h,0C4h,002h,083h,03Eh,0A9h,002h,000h,00Fh,085h,092h,000h,083h,03Eh,0FBh
DB 002h,000h,074h,019h,08Bh,0C1h,08Bh,0CAh,02Bh,006h,0FFh,002h,08Bh,01Eh,0FBh
DB 002h,099h,0F7h,0FBh,0F7h,0EBh,003h,006h,0FFh,002h,08Bh,0D1h,08Bh,0C8h,083h
DB 03Eh,0FDh,002h,000h,074h,015h,08Bh,0C2h,02Bh,006h,001h,003h,08Bh,01Eh,0FDh
DB 002h,099h,0F7h,0FBh,0F7h,0EBh,003h,006h,001h,003h,08Bh,0D0h,083h,03Eh,003h
DB 003h,000h,075h,047h,039h,00Eh,007h,003h,075h,006h,039h,016h,009h,003h,074h
DB 03Bh,0A1h,00Bh,003h,025h,000h,0C0h,03Dh,000h,0C0h,074h,00Ch,00Eh,0E8h,016h
DB 0FEh,0F7h,006h,00Bh,003h,000h,080h,074h,020h,03Bh,00Eh,00Dh,003h,072h,01Ah
DB 03Bh,00Eh,015h,003h,077h,014h,03Bh,016h,011h,003h,072h,00Eh,03Bh,016h,019h
DB 003h,077h,008h,081h,00Eh,00Bh,003h,000h,040h,0EBh,004h,00Eh,0E8h,01Dh,0FEh
DB 089h,00Eh,007h,003h,089h,016h,009h,003h,081h,03Eh,098h,005h,0ADh,0DEh,074h
DB 017h,051h,057h,050h,006h,0B8h,000h,0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh
DB 0B8h,001h,000h,0F3h,0AAh,007h,058h,05Fh,059h,0A1h,096h,005h,0FAh,08Eh,0D0h
DB 08Bh,026h,094h,005h,0FBh,05Fh,007h,05Eh,01Fh,05Ah,059h,05Bh,058h,0C9h,0CBh
DB 0C8h,00Ch,000h,000h,050h,053h,051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh
DB 0D8h,0FCh,0A1h,02Fh,003h,08Bh,01Eh,033h,003h,02Bh,006h,027h,003h,02Bh,01Eh
DB 02Bh,003h,089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,037h,003h,003h,01Eh,03Bh
DB 003h,089h,046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0A1h,023h,003h
DB 089h,046h,0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h
DB 013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h
DB 003h,02Bh,01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h
DB 08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh
DB 04Eh,0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh
DB 003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h
DB 084h,0D0h,00Fh,085h,0AEh,000h,00Ah,0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh
DB 08Bh,05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h
DB 002h,074h,013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,037h,003h,001h,046h
DB 0F4h,0C7h,046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,006h,0A1h,049h,003h
DB 089h,046h,0FAh,0F6h,0C2h,001h,074h,006h,0A1h,04Dh,003h,089h,046h,0F8h,0B8h
DB 000h,0A0h,08Eh,0C0h,08Bh,046h,0FCh,0F7h,026h,049h,003h,08Bh,016h,049h,003h
DB 08Bh,0F8h,003h,07Eh,0FEh,08Bh,01Eh,03Fh,003h,0C5h,036h,023h,003h,08Bh,076h
DB 0F4h,003h,076h,0F6h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh,03Ch
DB 02Bh,04Eh,0FCh,07Eh,037h,02Bh,0D0h,02Bh,0D8h,055h,083h,07Eh,006h,000h,075h
DB 018h,08Bh,0E9h,08Bh,0C8h,0F3h,0A4h,003h,0F3h,003h,0FAh,04Dh,075h,0F5h,05Dh
DB 007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,087h,0F7h,08Bh,0E9h,006h
DB 01Eh,007h,01Fh,08Bh,0C8h,0F3h,0A4h,003h,0F2h,003h,0FBh,04Dh,075h,0F5h,05Dh
DB 007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Ch,000h,000h,050h
DB 053h,051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,08Bh,046h,006h,08Bh
DB 05Eh,008h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h,089h,046h,0FEh,089h,05Eh
DB 0FCh,003h,006h,03Fh,003h,003h,01Eh,043h,003h,089h,046h,0FAh,089h,05Eh,0F8h
DB 0C7h,046h,0F6h,000h,000h,0C4h,006h,01Dh,003h,089h,046h,0F4h,033h,0C0h,033h
DB 0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h
DB 08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh,01Eh,049h,003h,049h
DB 04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h
DB 003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,02Bh
DB 00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh
DB 013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h,00Fh,085h,093h,000h
DB 00Ah,0C2h,074h,042h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh,0FEh,0F7h,0DBh,089h
DB 05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h,074h,013h,052h,08Bh,046h
DB 0FCh,0F7h,0D8h,0F7h,026h,03Fh,003h,001h,046h,0F4h,0C7h,046h,0FCh,000h,000h
DB 05Ah,0F6h,0C2h,004h,074h,007h,08Bh,01Eh,049h,003h,089h,05Eh,0FAh,0F6h,0C2h
DB 001h,074h,007h,08Bh,01Eh,04Dh,003h,089h,05Eh,0F8h,08Bh,046h,0FCh,0F7h,026h
DB 049h,003h,08Bh,016h,049h,003h,08Bh,0F8h,003h,07Eh,0FEh,08Bh,01Eh,03Fh,003h
DB 08Bh,076h,0F4h,003h,076h,0F6h,0B8h,000h,0A0h,08Eh,0D8h,08Bh,046h,0FAh,08Bh
DB 04Eh,0F8h,02Bh,046h,0FEh,07Eh,023h,02Bh,04Eh,0FCh,07Eh,01Eh,02Bh,0D0h,02Bh
DB 0D8h,08Ah,0E0h,026h,08Ah,02Ch,066h,046h,00Ah,0EDh,074h,002h,088h,02Dh,047h
DB 0FEh,0CCh,075h,0F0h,003h,0F3h,003h,0FAh,0FEh,0C9h,075h,0E6h,007h,01Fh,05Eh
DB 05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Ch,000h,000h,050h,053h,051h,052h
DB 057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,0E8h,0B7h,002h,089h,056h,0F2h,0FCh
DB 0A1h,02Fh,003h,08Bh,01Eh,033h,003h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h
DB 089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,037h,003h,003h,01Eh,03Bh,003h,089h
DB 046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0A1h,023h,003h,089h,046h
DB 0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h
DB 003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh
DB 01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh
DB 0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh
DB 08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h
DB 013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h
DB 00Fh,085h,0C7h,000h,00Ah,0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh
DB 0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h,074h
DB 013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,037h,003h,001h,046h,0F4h,0C7h
DB 046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,006h,0A1h,049h,003h,089h,046h
DB 0FAh,0F6h,0C2h,001h,074h,006h,0A1h,04Dh,003h,089h,046h,0F8h,0B8h,000h,0A0h
DB 08Eh,0C0h,08Bh,046h,0FCh,0F7h,026h,049h,003h,003h,046h,0FEh,083h,0D2h,000h
DB 08Bh,0F8h,0E8h,0F1h,001h,08Bh,016h,049h,003h,08Bh,01Eh,03Fh,003h,0C5h,036h
DB 023h,003h,08Bh,076h,0F4h,003h,076h,0F6h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh
DB 046h,0FEh,07Eh,04Fh,02Bh,04Eh,0FCh,07Eh,04Ah,02Bh,0D0h,02Bh,0D8h,083h,07Eh
DB 006h,000h,075h,021h,08Ah,0E0h,08Ah,02Ch,026h,088h,02Dh,046h,047h,075h,003h
DB 0E8h,0D9h,001h,0FEh,0CCh,075h,0F0h,003h,0F3h,003h,0FAh,073h,003h,0E8h,0CCh
DB 001h,0FEh,0C9h,075h,0E1h,0EBh,01Fh,08Ah,0E0h,026h,08Ah,02Dh,088h,02Ch,046h
DB 047h,075h,003h,0E8h,0B8h,001h,0FEh,0CCh,075h,0F0h,003h,0F3h,003h,0FAh,073h
DB 003h,0E8h,0ABh,001h,0FEh,0C9h,075h,0E1h,08Bh,056h,0F2h,0E8h,06Ch,001h,007h
DB 01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Eh,000h,000h,050h,053h
DB 051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,0E8h,03Eh,001h,089h,056h
DB 0F2h,08Bh,046h,006h,08Bh,05Eh,008h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h
DB 089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,03Fh,003h,003h,01Eh,043h,003h,089h
DB 046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0C4h,006h,01Dh,003h,089h
DB 046h,0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h
DB 0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h
DB 02Bh,01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh
DB 04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh
DB 0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h
DB 0C9h,013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h
DB 0D0h,00Fh,085h,0A0h,000h,00Ah,0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh,08Bh
DB 05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h
DB 074h,013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,03Fh,003h,001h,046h,0F4h
DB 0C7h,046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,006h,0A1h,049h,003h,089h
DB 046h,0FAh,0F6h,0C2h,001h,074h,006h,0A1h,04Dh,003h,089h,046h,0F8h,08Bh,046h
DB 0FCh,0F7h,026h,049h,003h,003h,046h,0FEh,083h,0D2h,000h,08Bh,0F8h,0E8h,07Eh
DB 000h,08Bh,016h,049h,003h,08Bh,01Eh,03Fh,003h,08Bh,076h,0F4h,003h,076h,0F6h
DB 0B8h,000h,0A0h,08Eh,0D8h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh
DB 02Ch,02Bh,04Eh,0FCh,07Eh,027h,02Bh,0D0h,02Bh,0D8h,08Ah,0E0h,026h,08Ah,02Ch
DB 046h,00Ah,0EDh,074h,002h,088h,02Dh,047h,075h,003h,0E8h,067h,000h,0FEh,0CCh
DB 075h,0ECh,003h,0F3h,003h,0FAh,073h,003h,0E8h,05Ah,000h,0FEh,0C9h,075h,0DDh
DB 08Bh,056h,0F2h,0E8h,01Bh,000h,007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h
DB 0CBh,050h,053h,0B8h,005h,04Fh,0B7h,001h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h
DB 05Bh,058h,0C3h,050h,053h,052h,0B8h,005h,04Fh,0B7h,000h,0B3h,000h,02Eh,0FFh
DB 01Eh,05Dh,003h,05Ah,05Bh,058h,0C3h,050h,053h,052h,08Bh,0DAh,0C1h,0E3h,002h
DB 02Eh,089h,01Eh,09Ah,007h,02Eh,08Bh,097h,061h,003h,0B8h,005h,04Fh,0B7h,000h
DB 0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Ah,05Bh,058h,0C3h,050h,053h,052h,02Eh
DB 08Bh,01Eh,09Ah,007h,083h,0C3h,004h,02Eh,089h,01Eh,09Ah,007h,02Eh,08Bh,097h
DB 061h,003h,0B8h,005h,04Fh,0B7h,000h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Ah
DB 05Bh,058h,0C3h

View File

@@ -0,0 +1,162 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Westwood 32 bit Library *
;* *
;* File Name : KEYSTRUC.INC *
;* *
;* Programmer : Phil W. Gorrow *
;* *
;* Start Date : July 13, 1994 *
;* *
;* Last Update : July 13, 1994 [PWG] *
;* *
;*-------------------------------------------------------------------------*
;* Functions: *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
STRUC KeyboardType
SoundOn DW ? ; toggled by alt S
MusicOn DW ? ; toggled by alt M
KeyFlags DD ? ; all but repeat for now
Break DW ?
KeyMouseMove DB 6 DUP(?)
ScreenEdge DW 18 DUP (?)
Bits DB 8 DUP (?)
CondPassKey DW 17 DUP (?)
CondPassCond DW 17 DUP (?)
EscRoutine DD ?
ExtCodes DB 16 DUP (?)
ExtNums DB 16 DUP (?)
ExtRemap DB 16 DUP (?)
ExtRemapEnd DB ?
ExtKeyboard DB ?
KeyBuffer DW 128 DUP(?) ; set to empty
KeyBufferHead DD ? ; set to first entry
KeyBufferTail DD ? ; set to head for empty buffer
KeyLock DW ? ; num and caps lock bits
KeyNums DB 89 DUP (?)
KeysCapsLock DB 16 DUP (?)
KeysNumLock DB 16 DUP (?)
KeysUpDown DB 16 DUP (?)
KeyStream DB 16 DUP (?)
PassCount DW ?
KeyStreamIndex DW ?
LastKeyE0 DB ?
LastKeyE1 DB ?
PassAlways DB 10 DUP (?)
PassAlwaysEnd DB ? ; invalid code to END PassAlways
CtrlFlags DB ?
Buffer DW ?
Time DW ?
XYAdjust DB 26 DUP (?)
EdgeConv DW 16 DUP (?)
MouseUpdate DW ?
MouseX DD ?
LocalMouseX DW ?
MouseY DD ?
LocalMouseY DW ?
IsExtKey DB ?
ExtIndex DW ?
KeyOldRMI DD ? ; The origianl RM interrupt seg:off.
KeyOldPMIOffset DD ? ; The origianl PM interrupt offset
KeyOldPMISelector DD ? ; The original PM interrupt segment.
KeyCodeOffset DW ? ; Offset of the code in the RM stuff.
CallKeyRMIntOffset DW ? ; Offset of function to call DOS timer interrupt.
CallKeyRMIntAddr DD ? ; PM address of CallRealIntOffset for speed.
PMIssuedKeyInt DD ? ; did Protected mode pass this through?
BrkOldRMI DD ? ; The origianl RM interrupt seg:off.
BrkOldPMIOffset DD ? ; The origianl PM interrupt offset
BrkOldPMISelector DD ? ; The original PM interrupt segment.
BrkCodeOffset DW ? ; Offset of the code in the RM stuff.
CallBrkRMIntOffset DW ? ; Offset of function to call DOS timer interrupt.
CallBrkRMIntAddr DD ? ; PM address of CallRealIntOffset for speed.
PMIssuedBrkInt DD ? ; did Protected mode pass this through?
KeyIntDisabled DD ?
DbgOldPMIOffset DD ? ; The origianl PM interrupt offset
DbgOldPMISelector DD ? ; The original PM interrupt segment.
;---------------------------------------------------------------------------
; Begin definition of Mouse Specific Variables for real mode
;---------------------------------------------------------------------------
Button DB ? ; current value of the mouse button
MDisabled DB ? ; Is the mouse driver disabled
MInput DB ? ; Defaults to mouse input allowed.
Adjust DW ? ; flag to adjust coordinates if necessary
MouseStepX DW ? ; step values if the mouse moves at
MouseStepY DW ? ; more than one pixel at a time
MouseOffsetX DW ? ; Fractional step values used if a mouse
MouseOffsetY DW ? ; moves at less than one pixel at a time
MState DD ? ; Tracks if mouse is hidden (TRUE) or not (FALSE)
MouseXOld DW ? ; Holds last MouseX and MouseY to determine if
MouseYOld DW ? ; mouse needs to be redrawn
MCState DW ? ; Tracks if mouse conditional hidden (TRUE) or not
MouseCXLeft DD ? ; Conditional hide mouse left x position
MouseCYUpper DD ? ; Conditional hide mouse top y position
MouseCXRight DD ? ; Conditional hide mouse right x position
MouseCYLower DD ? ; Conditional hide mouse lower y position
MouseCursor DD ? ; Pointer to the mouse cursor to draw
MouseCursorSize DW ? ; Size of mouse cursor draw area
MouseBuffer DD ? ; Pointer to buffer mouse is saved in
MouseXHot DD ? ; Offset to mouse's x hot spot
MouseYHot DD ? ; Offset to mouse's y hot spot
MouseBuffX DD ? ; X position background was saved at
MouseBuffY DD ? ; Y position background was saved at
MouseBuffW DD ? ; Width of the region saved for mouse
MouseBuffH DD ? ; Height of the region saved for mouse
MouseWidth DD ? ; Mouse cursor theoretical width
MouseHeight DD ? ; Mouse cursor theoretical height
MouseCodeOffset DW ? ; Offset to the real mode code offset
MouseRight DD ? ; Right hand side of the screen
MouseBottom DD ? ; Bottom of the screen
ShadowPtr dw ?
DrawMousePtr dw ?
VGAMouseDraw dw ?
VGAMouseShadow dw ?
VESAMouseDraw dw ?
VESAMouseShadow dw ?
VesaPtr dd ?
VesaBankTable DD 8 dup (?)
Adjust_XPos dd ?
Adjust_YPos dd ?
ENDS
; InitFlags that are set to have a fully functional interrupt.
IF_ALLOC_RM equ 1 ; Allocation of RM was successful.
IF_SET_VECTORS equ 2 ; Vectors have been set.
IF_LOCKED_PM_CODE equ 4 ; Locked PM code for DPMI.
IF_LOCKED_PM_DATA equ 8 ; Locked PM code for DPMI.
IF_RATE_CHANGE equ 10 ; Timer rate was changed.
IF_FUNCTIONAL equ 20 ; Timer is in and functional.
IF_LOCKED_RM_CODE equ 40

View File

@@ -0,0 +1,200 @@
#
# Command & Conquer Red Alert(tm)
# Copyright 2025 Electronic Arts Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#***************************************************************************
#** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
#***************************************************************************
#* *
#* Project Name : Westwood Library .LIB makefile *
#* *
#* File Name : MAKEFILE *
#* *
#* Programmer : Julio R. Jerez *
#* *
#* Start Date : Jan 25, 1994 *
#* *
#* *
#*-------------------------------------------------------------------------*
#* *
#* Required environment variables: *
#* WWFLAT = your root WWFLAT path *
#* WWVCS = root directory for wwlib version control archive *
#* WATCOM = your Watcom installation path *
#* *
#* Required changes to makefile: *
#* PROJ_NAME = name of the library you're building *
#* OBJECTS = list of objects in your library *
#* *
#* Optional changes to makefile: *
#* PROJ_DIR = full pathname of your working directory *
#* .path.xxx = full pathname where various file types live *
#* *
#***************************************************************************
#---------------------------------------------------------------------------
# Verify user's environment
#---------------------------------------------------------------------------
!ifndef %WWFLAT
!error WWFLAT Environment var not configured.
!endif
!ifndef %WWVCS
!error WWVCS Environment var not configured.
!endif
!ifndef %WATCOM
!error WATCOM Environment var not configured.
!endif
#===========================================================================
# User-defined section: the user should tailor this section for each project
#===========================================================================
PROJ_NAME = keyboard
PROJ_DIR = $(%WWFLAT)\$(PROJ_NAME)
LIB_DIR = $(%WWFLAT)\lib
!include $(%WWFLAT)\project.cfg
#---------------------------------------------------------------------------
# Project-dependent variables
#---------------------------------------------------------------------------
OBJECTS = &
keyboard.obj &
mouse.obj &
pagfault.obj
#---------------------------------------------------------------------------
# Path macros: one path for each file type.
# These paths are used to tell make where to find/put each file type.
#---------------------------------------------------------------------------
.asm: $(PROJ_DIR)
.c: $(PROJ_DIR)
.cpp: $(PROJ_DIR)
.h: $(PROJ_DIR)
.obj: $(PROJ_DIR)
.lib: $(WWLIB)\lib
.exe: $(PROJ_DIR)
#===========================================================================
# Pre-defined section: there should be little need to modify this section.
#===========================================================================
#---------------------------------------------------------------------------
# Tools/commands
#---------------------------------------------------------------------------
C_CMD = wcc386
CPP_CMD = wpp386
LIB_CMD = wlib
LINK_CMD = wlink
ASM_CMD = tasm32
#---------------------------------------------------------------------------
# Include & library paths
# If LIB & INCLUDE are already defined, they are used in addition to the
# WWLIB32 lib & include; otherwise, they're constructed from
# BCDIR & TNTDIR
#---------------------------------------------------------------------------
LIBPATH = $(%WWFLAT)\LIB;$(%WATCOM)\LIB
INCLUDEPATH = $(%WWFLAT)\INCLUDE;$(%WATCOM)\H
#---------------------------------------------------------------------------
# Implicit rules
# Compiler:
# ($< = full dependent with path)
# Assembler:
# output obj's are constructed from .obj: & the $& macro
# ($< = full dependent with path)
# tasm's cfg file is not invoked as a response file.
#---------------------------------------------------------------------------
.c.obj: $(%WWFLAT)\project.cfg .AUTODEPEND
$(C_CMD) $(CC_CFG) $<
.cpp.obj: $(%WWFLAT)\project.cfg .AUTODEPEND
$(CPP_CMD) $(CC_CFG) $<
.asm.obj: $(%WWFLAT)\project.cfg
$(ASM_CMD) $(ASM_CFG) $<
#---------------------------------------------------------------------------
# Default target: configuration files & library (in that order)
#---------------------------------------------------------------------------
all: $(LIB_DIR)\$(PROJ_NAME).lib .SYMBOLIC
#---------------------------------------------------------------------------
# Build the library
# The original library is deleted by the librarian
# Lib objects & -+ commands are constructed by substituting within the
# $^@ macro (which expands to all target dependents, separated with
# spaces)
# Tlib's cfg file is not invoked as a response file.
# All headers & source files are copied into WWFLAT\SRCDEBUG, for debugging
#---------------------------------------------------------------------------
$(LIB_DIR)\$(PROJ_NAME).lib: $(OBJECTS) objects.lbc
copy *.h $(%WWFLAT)\include
copy *.inc $(%WWFLAT)\include
copy *.cpp $(%WWFLAT)\srcdebug
copy *.asm $(%WWFLAT)\srcdebug
$(LIB_CMD) $(LIB_CFG) $^@ @objects.lbc
#---------------------------------------------------------------------------
# Objects now have a link file which is NOT generated everytime. Instead
# it just has its own dependacy rule.
#---------------------------------------------------------------------------
objects.lbc : $(OBJECTS)
%create $^@
for %index in ($(OBJECTS)) do %append $^@ +%index
#---------------------------------------------------------------------------
# The keyboard object files is also dependant on an IBN file which is
# generated from KEYIREAL.ASM
#---------------------------------------------------------------------------
keyireal.ibn: keyireal.obj
%create $^*.rsp
%append $^*.rsp $^&.obj
%append $^*.rsp $^&.exe
%append $^*.rsp $^&.map
tlink @$^*.rsp
tdstrip keyireal.exe
ebn keyireal.exe
keyireal.obj: keyireal.asm
tasm /zn /la /ml /m2 keyireal.asm
keyboard.obj: keyireal.ibn keyboard.asm
#---------------------------------------------------------------------------
# Create the test directory and make it.
#---------------------------------------------------------------------------
test:
mkdir test
cd test
copy $(%WWVCS)\$(PROJ_NAME)\test\vcs.cfg
update
wmake
cd ..
#**************************** End of makefile ******************************

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,153 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Library *
;* *
;* File Name : PAGFAULT.ASM *
;* *
;* Programmer : Julio R Jerez *
;* *
;* Date : April 25,1995 *
;* *
;*-------------------------------------------------------------------------*
;* Functions: *
;
; Here are prototypes for the routines defined within this module:
; VOID Install_Page_Fault_Handle (void) ;
;
; ----------------------------------------------------------------
IDEAL ; the product runs in ideal mode
P386 ; use 386 real mode instructions
MODEL USE32 FLAT
LOCALS ?? ; ?? is the symbol for a local
WARN ; generate all warnings we can
JUMPS ; optimize jumps if possible
;---------------------------------------------------------------------------
; Make some general equates for easy compatability
;---------------------------------------------------------------------------
DPMI_INTR EQU 31h
PAGE_FAULT equ 0eh
RESET_VIDEO_MODE equ -1
GLOBAL Install_Page_Fault_Handle : NEAR
GLOBAL Set_Video_Mode : NEAR
GLOBAL Remove_Mouse : NEAR
GLOBAL Remove_Keyboard_Interrupt : NEAR
GLOBAL Remove_Timer_Interrupt : NEAR
DATASEG
Old_Page_Fault_handle DF ?
Page_Fault_SS DD ?
Page_Fault_ESP DD ?
CODESEG
;***************************************************************************
;* INSTALL_PAGE_FAULT_HANDLE -- Installs new page fault handle *
;* This function will install a new page fault handle *
;* so in the event that we have a program crash thi handle will *
;* remove all interrupts and then will chain to the default Page *
;* Fault handle *
;* *
;* INPUT: none *
;* *
;* *
;* OUTPUT: none *
;* *
;* PROTO: VOID Install_Page_Fault_Handle( void); *
;* *
;* HISTORY: 04/25/96 Created *
;*=========================================================================*
PROC Install_Page_Fault_Handle C NEAR
USES eax,ebx,ecx,edx,esi,edi
mov eax,0202h ; get address of exception handle
mov bl,PAGE_FAULT
int DPMI_INTR
jc ??exit ; not action is taken
; save addrees of default handle
mov [dword ptr Old_Page_Fault_handle],edx
mov [word ptr Old_Page_Fault_handle+4],cx
; redirect default handle to a new Page Fault Handle
mov eax,0203h
mov bl,PAGE_FAULT
mov cx,cs
lea edx,[Page_Fault_Handle]
int DPMI_INTR
??exit:
ret
ENDP Install_Page_Fault_Handle
;***************************************************************************
;* PAGE_FAULT_HANDLE -- This *
;* *
;* *
;* *
;* HISTORY: 04/25/96 Created *
;*=========================================================================*
PROC Page_Fault_Handle far
; preserve used registers
push eax
push ebx
; save Page Fault satck frame
mov ax,ss
mov [Page_Fault_SS],eax
mov [Page_Fault_ESP],esp
; retrieve application original stack frame
mov eax , [ esp + ( 6 + 2 ) * 4 ]
mov ebx , [ esp + ( 7 + 2 ) * 4 ]
mov ss , bx
mov esp , eax
; set video mode to standard text mode
push RESET_VIDEO_MODE
call Set_Video_Mode
pop eax
call Remove_Mouse
call Remove_Keyboard_Interrupt
call Remove_Timer_Interrupt
; restore Page Fault stack frame
mov eax,[Page_Fault_SS]
mov ss , ax
mov esp, [Page_Fault_ESP]
; restore used registers and chain to default Page Fault Handle
pop ebx
pop eax
jmp [fword Old_Page_Fault_handle]
ENDP Page_Fault_Handle
;***************************************************************************
;* End of File. *
;***************************************************************************
END

View File

@@ -0,0 +1,153 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Library *
;* *
;* File Name : PAGFAULT.ASM *
;* *
;* Programmer : Julio R Jerez *
;* *
;* Date : April 25,1995 *
;* *
;*-------------------------------------------------------------------------*
;* Functions: *
;
; Here are prototypes for the routines defined within this module:
; VOID Install_Page_Fault_Handle (void) ;
;
; ----------------------------------------------------------------
IDEAL ; the product runs in ideal mode
P386 ; use 386 real mode instructions
MODEL USE32 FLAT
LOCALS ?? ; ?? is the symbol for a local
WARN ; generate all warnings we can
JUMPS ; optimize jumps if possible
;---------------------------------------------------------------------------
; Make some general equates for easy compatability
;---------------------------------------------------------------------------
DPMI_INTR EQU 31h
PAGE_FAULT equ 0eh
RESET_VIDEO_MODE equ -1
GLOBAL Install_Page_Fault_Handle : NEAR
GLOBAL Set_Video_Mode : NEAR
GLOBAL Remove_Mouse : NEAR
GLOBAL Remove_Keyboard_Interrupt : NEAR
GLOBAL Remove_Timer_Interrupt : NEAR
DATASEG
Old_Page_Fault_handle DF ?
Page_Fault_SS DD ?
Page_Fault_ESP DD ?
CODESEG
;***************************************************************************
;* INSTALL_PAGE_FAULT_HANDLE -- Installs new page fault handle *
;* This function will install a new page fault handle *
;* so in the event that we have a program crash thi handle will *
;* remove all interrupts and then will chain to the default Page *
;* Fault handle *
;* *
;* INPUT: none *
;* *
;* *
;* OUTPUT: none *
;* *
;* PROTO: VOID Install_Page_Fault_Handle( void); *
;* *
;* HISTORY: 04/25/96 Created *
;*=========================================================================*
PROC Install_Page_Fault_Handle C NEAR
USES eax,ebx,ecx,edx,esi,edi
mov eax,0202h ; get address of exception handle
mov bl,PAGE_FAULT
int DPMI_INTR
jc ??exit ; not action is taken
; save addrees of default handle
mov [dword ptr Old_Page_Fault_handle],edx
mov [word ptr Old_Page_Fault_handle+4],cx
; redirect default handle to a new Page Fault Handle
mov eax,0203h
mov bl,PAGE_FAULT
mov cx,cs
lea edx,[Page_Fault_Handle]
int DPMI_INTR
??exit:
ret
ENDP Install_Page_Fault_Handle
;***************************************************************************
;* PAGE_FAULT_HANDLE -- This *
;* *
;* *
;* *
;* HISTORY: 04/25/96 Created *
;*=========================================================================*
PROC Page_Fault_Handle far
; preserve used registers
push eax
push ebx
; save Page Fault satck frame
mov ax,ss
mov [Page_Fault_SS],eax
mov [Page_Fault_ESP],esp
; retrieve application original stack frame
mov eax , [ esp + ( 6 + 2 ) * 4 ]
mov ebx , [ esp + ( 7 + 2 ) * 4 ]
mov ss , bx
mov esp , eax
; set video mode to standard text mode
push RESET_VIDEO_MODE
call Set_Video_Mode
pop eax
call Remove_Mouse
call Remove_Keyboard_Interrupt
call Remove_Timer_Interrupt
; restore Page Fault stack frame
mov eax,[Page_Fault_SS]
mov ss , ax
mov esp, [Page_Fault_ESP]
; restore used registers and chain to default Page Fault Handle
pop ebx
pop eax
jmp [fword Old_Page_Fault_handle]
ENDP Page_Fault_Handle
;***************************************************************************
;* End of File. *
;***************************************************************************
END

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,447 @@
/*
** Command & Conquer Red Alert(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
***************************************************************************
* *
* Project Name : Westwood 32 bit Library *
* *
* File Name : KEYBOARD.H *
* *
* Programmer : Phil W. Gorrow *
* *
* Start Date : July 13, 1994 *
* *
* Last Update : July 13, 1994 [PWG] *
* *
*-------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef KEYBOARD_H
#define KEYBOARD_H
/*=========================================================================*/
/* If we have not already loaded the standard library header, than we can */
/* load it. */
/*=========================================================================*/
#ifndef WWSTD_H
#include "wwstd.h"
#endif
extern "C" {
void Install_Keyboard_Interrupt(void *addr, long size);
void Install_Page_Fault_Handle(void) ;
void *Get_RM_Keyboard_Address(void);
long Get_RM_Keyboard_Size(void);
void Remove_Keyboard_Interrupt(void);
int Check_Key_Num(void);
int Check_Key_Bits(void);
int Check_Key(void);
short Get_Key_Num(void);
short Get_Key_Bits(void);
int Get_Key(void);
int KN_To_KA(int keynum);
int Keyboard_Attributes_On(int key_flags);
int Keyboard_Attributes_Off(int key_flags);
void Clear_KeyBuffer(void);
int Key_Down(int key);
int Key_Satisfied(int key);
void Stuff_Key_WORD(int code);
void Stuff_Key_Num(int key);
int Install_Mouse(int max_width, int max_height, int scr_width, int scr_height);
void Reset_Mouse (void) ;
void Remove_Mouse(void);
int Get_Mouse_State(void);
int Get_Mouse_X(void);
int Get_Mouse_Y(void);
int Get_Mouse_Disabled(void);
void *Set_Mouse_Cursor(int xhotspot, int yhotspot, void *cursor);
void Hide_Mouse(void);
void Show_Mouse(void);
void Conditional_Hide_Mouse(int sx_pixel, int sy_pixel, int dx_pixel, int dy_pixel);
void Conditional_Show_Mouse(void);
void __interrupt far Keyboard_Interrupt(void);
extern int MouseQX;
extern int MouseQY;
}
enum {
REPEATON = 0x0001, /* 1:all makes into buffer, 0:only 1st make */
TRACKEXT = 0x0002, /* 1:Home != keypad Home, 0:Home=keypad Home */
FILTERONLY = 0x0004, /* 1:Normal BIOS operation with filter */
CTRLALTTURBO = 0x0010, /* 1:Allow turbo up and down in application */
NONUMLOCK = 0x0200, /* 1:do NOT remap keypad to numbers */
TASKSWITCHABLE = 0x400, /* 1:allows task switching keys thru ALT-TAB, */
/* ALT-ESC,CTRL-ESC */
PASSBREAKS = 0x0800, // Pass all breaks to the keyboard buffer.
/* The following flags, if turned on, should only be used for
debugging purposes (remember to take out the calls when BETA */
CTRLSON = 0x0008, /* 1:pass scroll lock sequence into BIOS */
CTRLCON = 0x0020, /* 1:pass stop code to BIOS */
SCROLLLOCKON = 0x0040, /* 1:pass scroll lock key into BIOS */
PAUSEON = 0x0080, /* 1:pass the pause key and seq to BIOS */
/* make sure FILTERONLY is set */
BREAKON = 0x0100, /* 1:pass the ctrl break seq to BIOS */
KEYMOUSE = 0x1000, /* 1:keypad translates into mouse moves */
SIMLBUTTON = 0x2000, /* 1:have space and enter keys simulate Left */
/* mouse button when KEYMOUSE is set */
DEBUGINT = 0x4000 /* Use scroll lock to disable keyboard int */
};
/*
** These are the codes for the various key codes that are returned from the
** keyboard input routines Get_Key() and Input_ASCII().
*/
typedef enum {
KA_CTRL_AT = 0,
KA_CTRL_A,
KA_MORE = KA_CTRL_A,
KA_CTRL_B,
KA_SETBKGDCOL = KA_CTRL_B,
KA_CTRL_C,
KA_CTRL_D,
KA_CTRL_E,
KA_CTRL_F,
KA_SETFORECOL = KA_CTRL_F,
KA_CTRL_G,
KA_CTRL_H,
KA_BACKSPACE = KA_CTRL_H,
KA_CTRL_I,
KA_TAB = KA_CTRL_I,
KA_CTRL_J,
KA_CTRL_K,
KA_CTRL_L,
KA_FORMFEED = KA_CTRL_L,
KA_CTRL_M,
KA_RETURN = KA_CTRL_M,
KA_CTRL_N,
KA_CTRL_O,
KA_CTRL_P,
KA_CTRL_Q,
KA_CTRL_R,
KA_CTRL_S,
KA_SPCTAB = KA_CTRL_S,
KA_CTRL_T,
KA_CTRL_U,
KA_CTRL_V,
KA_CTRL_W,
KA_CTRL_X,
KA_SETX = KA_CTRL_X,
KA_CTRL_Y,
KA_SETY = KA_CTRL_Y,
KA_CTRL_Z,
KA_CTRL_LBRACKET,
KA_ESC = KA_CTRL_LBRACKET,
KA_EXTEND = KA_ESC,
KA_CTRL_BACKSLASH,
KA_CTRL_RBRACKET,
KA_LITERAL = KA_CTRL_RBRACKET,
KA_CTRL_CARROT,
KA_CTRL_UNDERLINE,
KA_SPACE, /* */
KA_EXCLAMATION, /* ! */
KA_DQUOTE, /* " */
KA_POUND, /* # */
KA_DOLLAR, /* $ */
KA_PERCENT, /* % */
KA_AMPER, /* & */
KA_SQUOTE, /* ' */
KA_LPAREN, /* ( */
KA_RPAREN, /* ) */
KA_ASTERISK, /* * */
KA_PLUS, /* + */
KA_COMMA, /* , */
KA_MINUS, /* - */
KA_PERIOD, /* . */
KA_SLASH, /* / */
KA_0, KA_1, KA_2, KA_3, KA_4, KA_5, KA_6, KA_7, KA_8, KA_9,
KA_COLON, /* : */
KA_SEMICOLON, /* ; */
KA_LESS_THAN, /* < */
KA_EQUAL, /* = */
KA_GREATER_THAN, /* > */
KA_QUESTION, /* ? */
KA_AT, /* @ */
KA_A, /* A */
KA_B, /* B */
KA_C, /* C */
KA_D, /* D */
KA_E, /* E */
KA_F, /* F */
KA_G, /* G */
KA_H, /* H */
KA_I, /* I */
KA_J, /* J */
KA_K, /* K */
KA_L, /* L */
KA_M, /* M */
KA_N, /* N */
KA_O, /* O */
KA_P, /* P */
KA_Q, /* Q */
KA_R, /* R */
KA_S, /* S */
KA_T, /* T */
KA_U, /* U */
KA_V, /* V */
KA_W, /* W */
KA_X, /* X */
KA_Y, /* Y */
KA_Z, /* Z */
KA_LBRACKET, /* [ */
KA_BACKSLASH, /* \ */
KA_RBRACKET, /* ] */
KA_CARROT, /* ^ */
KA_UNDERLINE, /* _ */
KA_GRAVE, /* ` */
KA_a, /* a */
KA_b, /* b */
KA_c, /* c */
KA_d, /* d */
KA_e, /* e */
KA_f, /* f */
KA_g, /* g */
KA_h, /* h */
KA_i, /* i */
KA_j, /* j */
KA_k, /* k */
KA_l, /* l */
KA_m, /* m */
KA_n, /* n */
KA_o, /* o */
KA_p, /* p */
KA_q, /* q */
KA_r, /* r */
KA_s, /* s */
KA_t, /* t */
KA_u, /* u */
KA_v, /* v */
KA_w, /* w */
KA_x, /* x */
KA_y, /* y */
KA_z, /* z */
KA_LBRACE, /* { */
KA_BAR, /* | */
KA_RBRACE, /* ] */
KA_TILDA, /* ~ */
KA_DEL, /* not used */
KA_ALT_F10 = 143,
KA_ALT_F9, KA_ALT_F8, KA_ALT_F7, KA_ALT_F6, KA_ALT_F5,
KA_ALT_F4, KA_ALT_F3, KA_ALT_F2, KA_ALT_F1,
KA_CTRL_F10, KA_CTRL_F9, KA_CTRL_F8, KA_CTRL_F7, KA_CTRL_F6,
KA_CTRL_F5, KA_CTRL_F4, KA_CTRL_F3, KA_CTRL_F2, KA_CTRL_F1,
KA_SHIFT_F10, KA_SHIFT_F9, KA_SHIFT_F8, KA_SHIFT_F7, KA_SHIFT_F6,
KA_SHIFT_F5, KA_SHIFT_F4, KA_SHIFT_F3, KA_SHIFT_F2, KA_SHIFT_F1,
KA_DELETE, /* <DELETE> */
KA_INSERT, /* <INSERT> */
KA_PGDN, /* <PAGE DOWN> */
KA_DOWNRIGHT = KA_PGDN,
KA_DOWN, /* <DOWN ARROW> */
KA_END, /* <END> */
KA_DOWNLEFT = KA_END,
KA_RESERVED1,
KA_RIGHT, /* <RIGHT ARROW> */
KA_KEYPAD5, /* NUMERIC KEY PAD <5> */
KA_LEFT, /* <LEFT ARROW> */
KA_RESERVED2,
KA_PGUP, /* <PAGE UP> */
KA_UPRIGHT = KA_PGUP,
KA_UP, /* <UP ARROW> */
KA_HOME, /* <HOME> */
KA_UPLEFT = KA_HOME,
KA_RESERVED3,
KA_RESERVED4,
KA_F10, KA_F9, KA_F8, KA_F7, KA_F6, KA_F5, KA_F4, KA_F3, KA_F2, KA_F1,
KA_LMOUSE,
KA_RMOUSE,
KA_JBUTTON1,
KA_JBUTTON2,
KA_J_UP,
KA_J_RIGHT,
KA_J_DOWN,
KA_J_LEFT,
KA_SHIFT_BIT = 0x0100,
KA_CTRL_BIT = 0x0200,
KA_ALT_BIT = 0x0400,
KA_RLSE_BIT = 0x0800,
KA_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
KA_RCOMM_BIT = 0x2000 /* Amiga Right Comm key */
} KeyASCIIType;
/*
** These are the keyboard codes that are returned from the input routines
** Get_Key_Num and Input_Num.
*/
typedef enum {
KN_NONE = 0,
KN_GRAVE = 1, /* ` */
KN_1, KN_2, KN_3, KN_4, KN_5, KN_6, KN_7, KN_8, KN_9, KN_0,
KN_MINUS, /* - */
KN_EQUAL, /* = */
KN_RESERVED1,
KN_BACKSPACE, /* <BACKSPACE> */
KN_TAB, /* <TAB> */
KN_Q, KN_W, KN_E, KN_R, KN_T, KN_Y, KN_U, KN_I, KN_O, KN_P,
KN_LBRACKET, /* [ */
KN_RBRACKET, /* ] */
KN_BACKSLASH, /* \ */
KN_CAPSLOCK, /* <CAPS LOCK> */
KN_A, KN_S, KN_D, KN_F, KN_G, KN_H, KN_J, KN_K, KN_L,
KN_SEMICOLON, /* ; */
KN_SQUOTE, /* ' */
KN_BACKSLASH2,
KN_RETURN, /* <RETURN> or <ENTER> */
KN_LSHIFT, /* <LEFT SHIFT> */
KN_MOUSE_MOVE, // Indicate a mouse move (for playback of
KN_Z, KN_X, KN_C, KN_V, KN_B, KN_N, KN_M,
KN_COMMA, /* , */
KN_PERIOD, /* . */
KN_SLASH, /* / */
KN_RESERVED3,
KN_RSHIFT, /* <RIGHT SHIFT> */
KN_LCTRL, /* <LEFT CTRL> */
KN_LCOMM, /* for AMIGA */
KN_LALT, /* <LEFT ALT> */
KN_SPACE, /* <SPACE BAR> */
KN_RALT, /* <RIGHT ALT> */
KN_RCOMM, /* for AMIGA */
KN_RCTRL, /* <RIGHT CTRL> */
/* the following are forced into key buffer */
KN_LMOUSE,
KN_RMOUSE,
KN_JBUTTON1,
KN_JBUTTON2,
KN_J_UP,
KN_J_RIGHT,
KN_J_DOWN,
KN_J_LEFT,
KN_SPECIAL9,
KN_SPECIAL10,
KN_E_INSERT, /* extended <INSERT> */
KN_E_DELETE, /* extended <DELETE> */
KN_RESERVED4,
KN_RESERVED5,
KN_E_LEFT, /* extended <LEFT ARROW> */
KN_E_HOME, /* extended <HOME> */
KN_E_END, /* extended <END> */
KN_RESERVED6,
KN_E_UP, /* extended <UP ARROW> */
KN_E_DOWN, /* extended <DOWN ARROW> */
KN_E_PGUP, /* extended <PAGE UP> */
KN_E_PGDN, /* extended <PAGE DOWN> */
KN_K_LPAREN, /* for AMIGA */
KN_K_RPAREN, /* for AMIGA */
KN_E_RIGHT, /* extended <RIGHT ARROW> */
KN_NUMLOCK, /* <NUM LOCK> */
KN_HOME, /* num key pad 7 */
KN_UPLEFT = KN_HOME,
KN_LEFT, /* num key pad 4 */
KN_END, /* num key pad 1 */
KN_DOWNLEFT = KN_END,
KN_RESERVED7,
KN_KEYPAD_SLASH, /* num key pad / */
KN_UP, /* num key pad 8 */
KN_CENTER, /* num key pad 5 */
KN_DOWN, /* num key pad 2 */
KN_INSERT, /* num key pad 0 */
KN_KEYPAD_ASTERISK, /* num key pad * */
KN_PGUP, /* num key pad 9 */
KN_UPRIGHT = KN_PGUP,
KN_RIGHT, /* num key pad 6 */
KN_PGDN, /* num key pad 3 */
KN_DOWNRIGHT = KN_PGDN,
KN_DELETE, /* num key pad . */
KN_KEYPAD_MINUS, /* num key pad - */
KN_KEYPAD_PLUS, /* num key pad + */
KN_RESERVED8,
KN_KEYPAD_RETURN, /* num key pad <ENTER> */
KN_RESERVED9,
KN_ESC,
KN_HELP, /* for AMIGA */
KN_F1, KN_F2, KN_F3, KN_F4, KN_F5, KN_F6, KN_F7, KN_F8, KN_F9, KN_F10,
KN_F11,
KN_F12,
KN_PRNTSCRN, /* <PRINT SCRN> */
KN_SCROLLLOCK, /* <SCROLL LOCK> */
KN_PAUSE, /* <PAUSE> */
KN_SHIFT_BIT = 0x0100,
KN_CTRL_BIT = 0x0200,
KN_ALT_BIT = 0x0400,
KN_RLSE_BIT = 0x0800,
KN_LCOMM_BIT = 0x1000, /* Amiga Left Comm key */
KN_RCOMM_BIT = 0x2000, /* Amiga Right Comm key */
KN_BUTTON = 0x8000 /* Amiga Right Comm key */
} KeyNumType;
#endif

View File

@@ -0,0 +1,129 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Westwood 32 bit Library *
;* *
;* File Name : KEYBOARD.INC *
;* *
;* Programmer : Phil W. Gorrow *
;* *
;* Start Date : July 12, 1994 *
;* *
;* Last Update : July 12, 1994 [PWG] *
;* *
;*-------------------------------------------------------------------------*
;* Contains all the defines used by the keyboard interrupt for assembly *
;* includes. *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
TRUE EQU 1 ; numerical true
FALSE EQU 0 ; numerical false
DEBUG EQU 1
MAX_X_PIXEL EQU 319
MAX_Y_PIXEL EQU 199
KN_RESERVED1 EQU 14
KN_RESERVED2 EQU 45
KN_RESERVED3 EQU 56
; these two are reserved for AMIGA open and close.
KN_LCOMM EQU 59
KN_RCOMM EQU 63
KN_LMOUSE EQU 65
KN_RMOUSE EQU 66
KN_JBUTTON1 EQU 67
KN_JBUTTON2 EQU 68
KN_J_UP EQU 69
KN_J_RIGHT EQU 70
KN_J_DOWN EQU 71
KN_J_LEFT EQU 72
KN_LEFT EQU 92
KN_UPLEFT EQU 91
KN_UP EQU 96
KN_UPRIGHT EQU 101
KN_RIGHT EQU 102
KN_DOWNRIGHT EQU 103
KN_DOWN EQU 98
KN_DOWNLEFT EQU 93
KN_CENTER EQU 97
KN_INSERT EQU 99
KN_DELETE EQU 104
KN_RETURN EQU 43
KN_SPACE EQU 61
KN_KEYPAD_RETURN EQU 108
; these two are reserved for AMIGA K left and right paren
KN_KLPAREN EQU 87
KN_KRPAREN EQU 88
KN_NUMLOCK EQU 90
KN_SCROLLOCK EQU 125 ; key ignored by the logging system
KN_MOUSE_MOVE EQU 45 ; Indicate a mouse move (for playback of logged data)
; ----------------------------------------------------------------
; flags used in Keyflags to customize keystroke interrupt.
REPEATON EQU 0001H ; 1:all makes into buffer, 0:only 1st make
TRACKEXT EQU 0002H ; 1:Home != keypad Home, 0:Home=keypad Home
FILTERONLY EQU 0004H ; 1:Normal BIOS operation with filter
CTRLSON EQU 0008H ; 1:pass scroll lock sequence into BIOS
CTRLALTTURBO EQU 0010H ; 1:Allow turbo up and down in application
CTRLCON EQU 0020H ; 1:pass stop code to BIOS
SCROLLLOCKON EQU 0040H ; 1:pass scroll lock key into BIOS
PAUSEON EQU 0080H ; 1:pass the pause key and seq to BIOS
BREAKON EQU 0100H ; 1:pass the ctrl break seq to BIOS
NONUMLOCK EQU 0200H ; 1:do NOT remap keypad to numbers
TASKSWITCHABLE EQU 0400H ; 1:allows task switching keys thru ALT-TAB,
; ALT-ESC,CTRL-ESC
PASSBREAKS EQU 0800H ; 1:Pass all break codes to keyboard buffer.
KEYMOUSE EQU 1000H ; 1:Numeric keypad moves mouse
SIMLBUTTON EQU 2000H ; 1:have space and enter keys simulate Left
DEBUGINT EQU 4000H ; mouse button when KEYMOUSE is set
SHIFTPRESS EQU 001H ; bit 0 for shift key pressed
CTRLPRESS EQU 002H ; bit 1 for ctrl key pressed
ALTPRESS EQU 004H ; bit 2 for alt key pressed
KEYRELEASE EQU 008H ; bit 3 for key released
NOTKEYRELEASE EQU 0F7H ; not of key released
CAPSLOCK EQU 00001H ; bit 0 for caps locked
NUMLOCK EQU 00002H ; bit 1 for num locked
CLEARISR EQU 020H ; value to clear In Service Register
DOS EQU 021H
INTCHIP0 EQU 020H ; 8259 interrupt chip controller 0
KEYCTRL EQU 061H ; control bits for KB sense data
KEYDATA EQU 060H ; keyboard scan code port

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,361 @@
DB 001h,000h,001h,000h,011h,000h,000h,000h,000h,000h,0FFh,000h,001h,0F0h,000h
DB 010h,0A0h,000h,000h,000h,03Fh,001h,000h,000h,03Fh,001h,045h,000h,03Fh,001h
DB 089h,000h,0A0h,000h,089h,000h,000h,000h,089h,000h,000h,000h,045h,000h,000h
DB 000h,000h,000h,0A0h,000h,045h,000h,001h,002h,004h,008h,010h,020h,040h,080h
DB 020h,002h,020h,003h,00Ch,006h,00Dh,007h,06Ah,006h,069h,006h,030h,002h,030h
DB 003h,07Dh,000h,07Dh,001h,05Ah,002h,05Ah,003h,000h,002h,010h,004h,06Eh,004h
DB 06Eh,002h,07Ch,000h,008h,000h,008h,000h,010h,000h,010h,000h,010h,000h,010h
DB 000h,020h,000h,020h,000h,040h,000h,040h,000h,080h,000h,080h,000h,000h,001h
DB 000h,004h,000h,004h,000h,004h,000h,001h,000h,000h,000h,000h,038h,01Dh,052h
DB 053h,04Bh,047h,04Fh,048h,050h,049h,051h,04Dh,035h,01Ch,037h,046h,03Eh,040h
DB 04Bh,04Ch,04Fh,050h,051h,053h,054h,055h,056h,059h,05Fh,06Ch,07Ch,000h,03Ch
DB 03Ah,063h,068h,05Ch,05Bh,05Dh,060h,062h,065h,067h,066h,037h,02Bh,07Ch,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,07Fh,06Eh
DB 002h,003h,004h,005h,006h,007h,008h,009h,00Ah,00Bh,00Ch,00Dh,00Fh,010h,011h
DB 012h,013h,014h,015h,016h,017h,018h,019h,01Ah,01Bh,01Ch,02Bh,03Ah,01Fh,020h
DB 021h,022h,023h,024h,025h,026h,027h,028h,029h,001h,02Ch,01Dh,02Eh,02Fh,030h
DB 031h,032h,033h,034h,035h,036h,037h,039h,064h,03Ch,03Dh,01Eh,070h,071h,072h
DB 073h,074h,075h,076h,077h,078h,079h,05Ah,07Dh,05Bh,060h,065h,069h,05Ch,061h
DB 066h,06Ah,05Dh,062h,067h,063h,068h,07Fh,07Fh,07Fh,07Ah,07Bh,000h,000h,0FEh
DB 087h,0FFh,0C0h,01Fh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,038h,0EFh,001h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,01Eh,02Ch,039h,03Ah,03Ch,03Eh,040h,05Ah
DB 080h,080h,080h,000h,000h,000h,000h,000h,0FFh,0FFh,0FFh,000h,0FFh,001h,000h
DB 000h,000h,000h,000h,0FFh,000h,000h,000h,001h,000h,000h,000h,000h,001h,0FFh
DB 001h,000h,001h,001h,008h,000h,002h,000h,008h,000h,006h,000h,004h,000h,003h
DB 000h,008h,000h,005h,000h,008h,000h,008h,000h,008h,000h,008h,000h,000h,000h
DB 001h,000h,008h,000h,007h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,029h,00Ah,002h,00Dh,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0F1h
DB 00Ch,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,001h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0F4h
DB 00Dh,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0AEh,010h
DB 05Ah,00Fh,05Fh,013h,0E6h,011h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,090h,000h,000h,000h,000h,0ADh,0DEh,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,0ADh,0DEh,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0C8h,000h
DB 000h,000h,051h,057h,006h,01Eh,08Ch,0C8h,08Eh,0D8h,08Eh,0C0h,08Bh,046h,006h
DB 0F7h,006h,004h,000h,002h,000h,075h,013h,0B9h,010h,000h,0BFh,094h,000h,0F2h
DB 0AEh,0E3h,009h,0BFh,0B4h,000h,04Fh,02Bh,0F9h,026h,08Ah,005h,01Fh,007h,05Fh
DB 059h,0C9h,0CBh,0C8h,000h,000h,000h,056h,053h,01Eh,08Ch,0C8h,08Eh,0D8h,0A1h
DB 0BAh,001h,08Bh,0F0h,005h,002h,000h,025h,0FFh,000h,039h,006h,0B6h,001h,074h
DB 011h,08Bh,05Eh,006h,089h,09Ch,0B6h,000h,0A3h,0BAh,001h,033h,0C0h,01Fh,05Bh
DB 05Eh,0C9h,0CBh,0B8h,001h,000h,01Fh,05Bh,05Eh,0C9h,0CBh,0C8h,004h,000h,000h
DB 053h,051h,052h,057h,056h,01Eh,09Ch,0FAh,08Ch,0C8h,08Eh,0D8h,0A1h,0ABh,002h
DB 0A3h,0AFh,002h,0A1h,0B1h,002h,0A3h,0B5h,002h,08Bh,046h,006h,00Bh,0C0h,075h
DB 003h,0E9h,0F7h,001h,0F7h,006h,004h,000h,000h,010h,00Fh,084h,03Ah,001h,0F6h
DB 0C4h,004h,00Fh,085h,033h,001h,0F7h,006h,004h,000h,000h,020h,074h,00Ch,03Ch
DB 02Bh,074h,00Ch,03Ch,03Dh,074h,008h,03Ch,06Ch,074h,004h,03Ch,063h,075h,016h
DB 0B0h,041h,080h,00Eh,0F6h,002h,001h,0F6h,0C4h,008h,00Fh,084h,00Ah,001h,080h
DB 026h,0F6h,002h,0FEh,0E9h,002h,001h,03Ch,068h,075h,016h,0B0h,042h,080h,00Eh
DB 0F6h,002h,002h,0F6h,0C4h,008h,00Fh,084h,0F0h,000h,080h,026h,0F6h,002h,0FDh
DB 0E9h,0E8h,000h,0F6h,0C4h,008h,00Fh,085h,0E4h,000h,03Ch,061h,074h,01Eh,03Ch
DB 05Bh,00Fh,082h,0DAh,000h,03Ch,067h,00Fh,087h,0D4h,000h,03Ch,05Dh,076h,00Eh
DB 03Ch,065h,073h,00Ah,03Ch,060h,074h,006h,03Ch,062h,00Fh,085h,0C2h,000h,08Ah
DB 0ECh,032h,0E4h,02Ch,05Bh,08Bh,0D8h,0D1h,0E3h,081h,0C3h,06Fh,002h,08Bh,007h
DB 08Ah,0DCh,098h,093h,098h,093h,0F6h,0C5h,002h,075h,021h,0BAh,001h,000h,0F6h
DB 0C5h,001h,074h,003h,083h,0C2h,003h,003h,0DAh,08Ah,09Fh,00Ah,000h,093h,098h
DB 093h,087h,0DAh,003h,0D8h,08Ah,087h,00Ah,000h,098h,087h,0DAh,0EBh,034h,083h
DB 0E3h,003h,025h,003h,000h,083h,0E3h,003h,025h,003h,000h,0D1h,0E3h,0D1h,0E3h
DB 00Bh,0D8h,0D1h,0E3h,08Bh,09Fh,089h,002h,0D1h,0E3h,0D1h,0E3h,08Bh,087h,010h
DB 000h,08Bh,09Fh,012h,000h,0A3h,0AFh,002h,089h,01Eh,0B5h,002h,0A1h,0AFh,002h
DB 08Bh,01Eh,0B5h,002h,0EBh,02Fh,001h,006h,0AFh,002h,079h,005h,033h,0C0h,0A3h
DB 0AFh,002h,001h,01Eh,0B5h,002h,079h,006h,033h,0DBh,089h,01Eh,0B5h,002h,0A1h
DB 0AFh,002h,08Bh,01Eh,0B5h,002h,03Dh,03Fh,001h,07Eh,003h,0B8h,03Fh,001h,081h
DB 0FBh,0C7h,000h,07Eh,003h,0BBh,0C7h,000h,0A3h,0AFh,002h,089h,01Eh,0B5h,002h
DB 0A3h,0ABh,002h,089h,01Eh,0B1h,002h,083h,03Eh,0A9h,002h,000h,075h,008h,00Eh
DB 0E8h,0A5h,003h,00Eh,0E8h,0D4h,003h,0B8h,02Dh,000h,089h,046h,006h,08Bh,036h
DB 0BAh,001h,089h,076h,0FEh,08Bh,03Eh,0B6h,001h,050h,00Eh,0E8h,051h,0FEh,083h
DB 0C4h,002h,00Bh,0C0h,075h,011h,08Bh,046h,006h,03Ch,02Dh,074h,00Dh,03Ch,041h
DB 074h,009h,03Ch,042h,074h,005h,0EBh,029h,0E9h,080h,000h,0FFh,036h,0AFh,002h
DB 00Eh,0E8h,02Eh,0FEh,083h,0C4h,002h,00Bh,0C0h,075h,0EEh,083h,046h,0FCh,002h
DB 0FFh,036h,0B5h,002h,00Eh,0E8h,01Bh,0FEh,083h,0C4h,002h,00Bh,0C0h,075h,0DBh
DB 083h,046h,0FCh,002h,0BBh,001h,001h,08Bh,046h,006h,03Ch,02Dh,074h,01Bh,03Ch
DB 07Fh,074h,017h,0F6h,0C4h,008h,074h,016h,032h,0DBh,0F7h,006h,004h,000h,000h
DB 008h,075h,00Ch,03Ch,041h,074h,008h,03Ch,042h,074h,004h,089h,036h,0BAh,001h
DB 08Bh,0F8h,083h,0E7h,07Fh,0B1h,003h,0D3h,0EFh,08Ah,0C8h,080h,0E1h,007h,0D3h
DB 0E3h,0F6h,0D7h,084h,09Dh,039h,002h,074h,00Ch,0F7h,006h,004h,000h,001h,000h
DB 075h,004h,089h,036h,0BAh,001h,020h,0BDh,039h,002h,008h,09Dh,039h,002h,0B8h
DB 001h,000h,0EBh,008h,08Bh,046h,0FEh,0A3h,0BAh,001h,033h,0C0h,09Dh,01Fh,05Eh
DB 05Fh,05Ah,059h,05Bh,0C9h,0CBh,050h,053h,051h,057h,01Eh,052h,006h,056h,0FCh
DB 08Ch,0C8h,08Eh,0D8h,08Ch,0D1h,089h,026h,08Ah,003h,089h,00Eh,08Ch,003h,0BAh
DB 08Eh,005h,083h,0E2h,0FEh,0FAh,08Eh,0D0h,08Bh,0E2h,0FBh,083h,03Eh,0CEh,002h
DB 000h,0C7h,006h,0CEh,002h,000h,000h,00Fh,085h,003h,002h,08Bh,016h,004h,000h
DB 083h,026h,0BEh,001h,0FCh,0B8h,040h,000h,08Eh,0C0h,026h,0F6h,006h,017h,000h
DB 040h,074h,005h,083h,00Eh,0BEh,001h,001h,026h,0F6h,006h,017h,000h,020h,074h
DB 005h,083h,00Eh,0BEh,001h,002h,0C6h,006h,0B5h,000h,001h,026h,0F6h,006h,096h
DB 000h,010h,075h,005h,0C6h,006h,0B5h,000h,000h,08Ch,0C8h,08Eh,0C0h,0FCh,032h
DB 0E4h,0BBh,001h,001h,0E4h,060h,08Bh,01Eh,05Bh,002h,088h,087h,049h,002h,043h
DB 083h,0E3h,00Fh,089h,01Eh,05Bh,002h,0BBh,001h,001h,03Ch,0E1h,075h,005h,0C6h
DB 006h,05Eh,002h,003h,080h,03Eh,05Eh,002h,000h,074h,00Fh,0FEh,00Eh,05Eh,002h
DB 0F7h,0C2h,080h,000h,00Fh,085h,08Eh,001h,0E9h,0CBh,001h,03Ch,0E0h,075h,008h
DB 0C6h,006h,05Dh,002h,001h,0E9h,07Fh,001h,0A8h,080h,074h,007h,032h,0DBh,024h
DB 07Fh,080h,0CCh,008h,080h,03Eh,05Dh,002h,000h,074h,023h,0C6h,006h,05Dh,002h
DB 000h,0C6h,006h,0B7h,002h,001h,0BFh,084h,000h,0B9h,010h,000h,0F2h,0AEh,0E3h
DB 002h,0EBh,003h,0E9h,094h,001h,08Ah,045h,00Fh,0C6h,006h,0B7h,002h,000h,0EBh
DB 011h,03Ch,07Ah,075h,004h,0B0h,080h,0EBh,009h,08Bh,0F8h,083h,0E7h,07Fh,08Ah
DB 085h,0C0h,001h,0F6h,006h,041h,002h,001h,075h,01Bh,0F6h,006h,040h,002h,004h
DB 074h,017h,03Ch,05Ah,075h,010h,080h,03Eh,0B5h,000h,001h,074h,009h,0F7h,0C2h
DB 080h,000h,075h,003h,0E9h,057h,001h,080h,0CCh,002h,0F6h,006h,040h,002h,050h
DB 074h,003h,080h,0CCh,004h,050h,00Eh,0E8h,043h,0FCh,083h,0C4h,002h,0F6h,006h
DB 03Eh,002h,010h,075h,007h,0F6h,006h,040h,002h,002h,074h,003h,080h,0CCh,001h
DB 08Bh,0F8h,083h,0E7h,07Fh,0D1h,0EFh,0D1h,0EFh,0D1h,0EFh,08Bh,0D8h,083h,0E3h
DB 07Fh,080h,0E3h,007h,08Ah,0AFh,034h,000h,0F7h,006h,0BEh,001h,001h,000h,074h
DB 009h,084h,0ADh,019h,002h,074h,003h,080h,0F4h,001h,0F7h,006h,0BEh,001h,002h
DB 000h,074h,009h,084h,0ADh,029h,002h,074h,003h,080h,0F4h,001h,088h,026h,06Ah
DB 002h,0F7h,0C2h,000h,040h,074h,034h,066h,083h,03Eh,0EAh,002h,001h,075h,01Bh
DB 03Dh,073h,000h,074h,00Ah,03Dh,076h,000h,072h,00Eh,03Dh,078h,000h,077h,009h
DB 066h,0C7h,006h,0EAh,002h,000h,000h,000h,000h,0E9h,08Bh,000h,03Dh,07Dh,000h
DB 075h,00Ch,066h,0C7h,006h,0EAh,002h,001h,000h,000h,000h,0E9h,0BAh,000h,03Dh
DB 068h,006h,074h,075h,03Dh,04Ch,006h,074h,070h,03Dh,030h,002h,074h,005h,03Dh
DB 07Eh,002h,075h,006h,0C7h,006h,008h,000h,001h,000h,03Dh,020h,004h,075h,00Ch
DB 050h,0A1h,000h,000h,035h,001h,000h,050h,083h,0C4h,002h,058h,03Dh,034h,004h
DB 075h,00Ch,050h,0A1h,002h,000h,035h,001h,000h,050h,083h,0C4h,002h,058h,050h
DB 00Eh,0E8h,0DEh,0FBh,058h,03Ch,06Eh,075h,00Dh,083h,03Eh,082h,000h,000h,074h
DB 006h,050h,0FFh,01Eh,080h,000h,058h,0BFh,05Fh,002h,0B9h,00Ah,000h,0F2h,0AEh
DB 00Bh,0C9h,075h,01Bh,0BFh,03Ch,000h,0B9h,022h,000h,0D1h,0E9h,0F2h,0AFh,0E3h
DB 009h,08Bh,05Dh,020h,023h,0DAh,074h,002h,0EBh,006h,0F7h,0C2h,004h,000h,074h
DB 040h,02Eh,0FFh,006h,059h,002h,081h,03Eh,08Eh,003h,0ADh,0DEh,074h,017h,051h
DB 057h,050h,006h,0B8h,000h,0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h
DB 000h,0F3h,0AAh,007h,058h,05Fh,059h,0FAh,08Bh,016h,08Ch,003h,08Eh,0D2h,08Bh
DB 026h,08Ah,003h,0FBh,0BAh,0E8h,00Ch,09Ch,00Eh,052h,09Ch,0FFh,036h,0BCh,002h
DB 0FFh,036h,0BAh,002h,0CFh,0E4h,061h,08Ah,0E0h,00Ch,080h,0E6h,061h,086h,0E0h
DB 0E6h,061h,0B8h,040h,000h,08Eh,0C0h,026h,0A0h,096h,000h,024h,0FDh,026h,0A2h
DB 096h,000h,0B0h,020h,0E6h,020h,081h,03Eh,08Eh,003h,0ADh,0DEh,074h,017h,051h
DB 057h,050h,006h,0B8h,000h,0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh,0B8h,001h
DB 000h,0F3h,0AAh,007h,058h,05Fh,059h,08Bh,016h,08Ch,003h,0FAh,08Eh,0D2h,08Bh
DB 026h,08Ah,003h,0FBh,05Eh,007h,05Ah,01Fh,05Fh,059h,05Bh,058h,0CFh,09Ch,050h
DB 006h,0B8h,000h,0B0h,08Eh,0C0h,026h,0FEh,006h,000h,000h,007h,058h,09Dh,0CFh
DB 09Ch,00Eh,0E8h,022h,0FDh,0CBh,050h,053h,051h,052h,01Eh,08Ch,0C8h,08Eh,0D8h
DB 080h,03Eh,0F7h,002h,000h,075h,01Dh,083h,03Eh,003h,003h,000h,075h,00Ch,0B8h
DB 000h,000h,050h,00Eh,0FFh,016h,051h,003h,083h,0C4h,002h,083h,006h,003h,003h
DB 001h,083h,016h,003h,003h,000h,01Fh,05Ah,059h,05Bh,058h,0CBh,0C8h,004h,000h
DB 000h,050h,053h,051h,052h,056h,057h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,080h,03Eh
DB 0F7h,002h,000h,075h,050h,083h,03Eh,003h,003h,000h,074h,049h,0FFh,00Eh,003h
DB 003h,083h,03Eh,003h,003h,000h,075h,03Eh,08Bh,00Eh,03Fh,003h,08Bh,016h,043h
DB 003h,0A1h,0ABh,002h,089h,046h,0FEh,08Bh,01Eh,0B1h,002h,089h,05Eh,0FCh,0A3h
DB 02Fh,003h,089h,01Eh,033h,003h,089h,00Eh,037h,003h,089h,016h,03Bh,003h,0B8h
DB 001h,000h,050h,00Eh,0FFh,016h,051h,003h,083h,0C4h,002h,0FFh,076h,0FCh,0FFh
DB 076h,0FEh,00Eh,0FFh,016h,053h,003h,083h,0C4h,004h,007h,01Fh,05Fh,05Eh,05Ah
DB 059h,05Bh,058h,0C9h,0CBh,0C8h,002h,000h,000h,053h,08Ch,0C8h,08Eh,0D8h,0C7h
DB 046h,0FEh,02Dh,000h,08Bh,05Eh,006h,08Bh,0C3h,032h,01Eh,0F6h,002h,074h,029h
DB 0A2h,0F6h,002h,0F6h,0C3h,002h,074h,00Eh,0C7h,046h,0FEh,042h,000h,0A8h,002h
DB 075h,005h,081h,04Eh,0FEh,000h,008h,0F6h,0C3h,001h,074h,00Eh,0C7h,046h,0FEh
DB 041h,000h,0A8h,001h,075h,005h,081h,04Eh,0FEh,000h,008h,08Bh,046h,0FEh,05Bh
DB 0C9h,0CBh,0C8h,004h,000h,000h,050h,053h,051h,052h,01Eh,056h,006h,057h,02Eh
DB 089h,01Eh,090h,005h,02Eh,0A3h,092h,005h,08Ch,0C8h,08Eh,0D8h,08Ch,0D3h,089h
DB 026h,094h,005h,089h,01Eh,096h,005h,0BBh,098h,007h,083h,0E3h,0FEh,0FAh,08Eh
DB 0D0h,08Bh,0E3h,0FBh,080h,03Eh,0F7h,002h,000h,00Fh,085h,0FAh,000h,080h,03Eh
DB 0F8h,002h,000h,00Fh,084h,0F1h,000h,0A1h,092h,005h,025h,01Eh,000h,075h,009h
DB 083h,03Eh,0A9h,002h,000h,00Fh,085h,0E0h,000h,083h,03Eh,0F9h,002h,001h,075h
DB 002h,0D1h,0E9h,03Bh,00Eh,049h,003h,072h,005h,08Bh,00Eh,049h,003h,049h,03Bh
DB 016h,04Dh,003h,072h,005h,08Bh,016h,04Dh,003h,04Ah,089h,00Eh,0ABh,002h,089h
DB 016h,0B1h,002h,066h,0F7h,006h,004h,000h,000h,010h,000h,000h,075h,013h,0FFh
DB 036h,090h,005h,00Eh,0E8h,02Ch,0FFh,083h,0C4h,002h,050h,00Eh,0E8h,07Bh,0F9h
DB 083h,0C4h,002h,083h,03Eh,0A9h,002h,000h,00Fh,085h,092h,000h,083h,03Eh,0FBh
DB 002h,000h,074h,019h,08Bh,0C1h,08Bh,0CAh,02Bh,006h,0FFh,002h,08Bh,01Eh,0FBh
DB 002h,099h,0F7h,0FBh,0F7h,0EBh,003h,006h,0FFh,002h,08Bh,0D1h,08Bh,0C8h,083h
DB 03Eh,0FDh,002h,000h,074h,015h,08Bh,0C2h,02Bh,006h,001h,003h,08Bh,01Eh,0FDh
DB 002h,099h,0F7h,0FBh,0F7h,0EBh,003h,006h,001h,003h,08Bh,0D0h,083h,03Eh,003h
DB 003h,000h,075h,047h,039h,00Eh,007h,003h,075h,006h,039h,016h,009h,003h,074h
DB 03Bh,0A1h,00Bh,003h,025h,000h,0C0h,03Dh,000h,0C0h,074h,00Ch,00Eh,0E8h,016h
DB 0FEh,0F7h,006h,00Bh,003h,000h,080h,074h,020h,03Bh,00Eh,00Dh,003h,072h,01Ah
DB 03Bh,00Eh,015h,003h,077h,014h,03Bh,016h,011h,003h,072h,00Eh,03Bh,016h,019h
DB 003h,077h,008h,081h,00Eh,00Bh,003h,000h,040h,0EBh,004h,00Eh,0E8h,01Dh,0FEh
DB 089h,00Eh,007h,003h,089h,016h,009h,003h,081h,03Eh,098h,005h,0ADh,0DEh,074h
DB 017h,051h,057h,050h,006h,0B8h,000h,0A0h,08Eh,0C0h,033h,0FFh,0B9h,000h,0FAh
DB 0B8h,001h,000h,0F3h,0AAh,007h,058h,05Fh,059h,0A1h,096h,005h,0FAh,08Eh,0D0h
DB 08Bh,026h,094h,005h,0FBh,05Fh,007h,05Eh,01Fh,05Ah,059h,05Bh,058h,0C9h,0CBh
DB 0C8h,00Ch,000h,000h,050h,053h,051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh
DB 0D8h,0FCh,0A1h,02Fh,003h,08Bh,01Eh,033h,003h,02Bh,006h,027h,003h,02Bh,01Eh
DB 02Bh,003h,089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,037h,003h,003h,01Eh,03Bh
DB 003h,089h,046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0A1h,023h,003h
DB 089h,046h,0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h
DB 013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h
DB 003h,02Bh,01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h
DB 08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh
DB 04Eh,0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh
DB 003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h
DB 084h,0D0h,00Fh,085h,0AEh,000h,00Ah,0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh
DB 08Bh,05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h
DB 002h,074h,013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,037h,003h,001h,046h
DB 0F4h,0C7h,046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,006h,0A1h,049h,003h
DB 089h,046h,0FAh,0F6h,0C2h,001h,074h,006h,0A1h,04Dh,003h,089h,046h,0F8h,0B8h
DB 000h,0A0h,08Eh,0C0h,08Bh,046h,0FCh,0F7h,026h,049h,003h,08Bh,016h,049h,003h
DB 08Bh,0F8h,003h,07Eh,0FEh,08Bh,01Eh,03Fh,003h,0C5h,036h,023h,003h,08Bh,076h
DB 0F4h,003h,076h,0F6h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh,03Ch
DB 02Bh,04Eh,0FCh,07Eh,037h,02Bh,0D0h,02Bh,0D8h,055h,083h,07Eh,006h,000h,075h
DB 018h,08Bh,0E9h,08Bh,0C8h,0F3h,0A4h,003h,0F3h,003h,0FAh,04Dh,075h,0F5h,05Dh
DB 007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,087h,0F7h,08Bh,0E9h,006h
DB 01Eh,007h,01Fh,08Bh,0C8h,0F3h,0A4h,003h,0F2h,003h,0FBh,04Dh,075h,0F5h,05Dh
DB 007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Ch,000h,000h,050h
DB 053h,051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,08Bh,046h,006h,08Bh
DB 05Eh,008h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h,089h,046h,0FEh,089h,05Eh
DB 0FCh,003h,006h,03Fh,003h,003h,01Eh,043h,003h,089h,046h,0FAh,089h,05Eh,0F8h
DB 0C7h,046h,0F6h,000h,000h,0C4h,006h,01Dh,003h,089h,046h,0F4h,033h,0C0h,033h
DB 0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h
DB 08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh,01Eh,049h,003h,049h
DB 04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h
DB 003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh,08Bh,05Eh,0F8h,02Bh
DB 00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh
DB 013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h,00Fh,085h,093h,000h
DB 00Ah,0C2h,074h,042h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh,0FEh,0F7h,0DBh,089h
DB 05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h,074h,013h,052h,08Bh,046h
DB 0FCh,0F7h,0D8h,0F7h,026h,03Fh,003h,001h,046h,0F4h,0C7h,046h,0FCh,000h,000h
DB 05Ah,0F6h,0C2h,004h,074h,007h,08Bh,01Eh,049h,003h,089h,05Eh,0FAh,0F6h,0C2h
DB 001h,074h,007h,08Bh,01Eh,04Dh,003h,089h,05Eh,0F8h,08Bh,046h,0FCh,0F7h,026h
DB 049h,003h,08Bh,016h,049h,003h,08Bh,0F8h,003h,07Eh,0FEh,08Bh,01Eh,03Fh,003h
DB 08Bh,076h,0F4h,003h,076h,0F6h,0B8h,000h,0A0h,08Eh,0D8h,08Bh,046h,0FAh,08Bh
DB 04Eh,0F8h,02Bh,046h,0FEh,07Eh,023h,02Bh,04Eh,0FCh,07Eh,01Eh,02Bh,0D0h,02Bh
DB 0D8h,08Ah,0E0h,026h,08Ah,02Ch,066h,046h,00Ah,0EDh,074h,002h,088h,02Dh,047h
DB 0FEh,0CCh,075h,0F0h,003h,0F3h,003h,0FAh,0FEh,0C9h,075h,0E6h,007h,01Fh,05Eh
DB 05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Ch,000h,000h,050h,053h,051h,052h
DB 057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,0E8h,0B7h,002h,089h,056h,0F2h,0FCh
DB 0A1h,02Fh,003h,08Bh,01Eh,033h,003h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h
DB 089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,037h,003h,003h,01Eh,03Bh,003h,089h
DB 046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0A1h,023h,003h,089h,046h
DB 0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h,0C0h
DB 003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h,02Bh
DB 01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh
DB 0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FCh
DB 08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h,0C9h
DB 013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h,0D0h
DB 00Fh,085h,0C7h,000h,00Ah,0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh,08Bh,05Eh
DB 0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h,074h
DB 013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,037h,003h,001h,046h,0F4h,0C7h
DB 046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,006h,0A1h,049h,003h,089h,046h
DB 0FAh,0F6h,0C2h,001h,074h,006h,0A1h,04Dh,003h,089h,046h,0F8h,0B8h,000h,0A0h
DB 08Eh,0C0h,08Bh,046h,0FCh,0F7h,026h,049h,003h,003h,046h,0FEh,083h,0D2h,000h
DB 08Bh,0F8h,0E8h,0F1h,001h,08Bh,016h,049h,003h,08Bh,01Eh,03Fh,003h,0C5h,036h
DB 023h,003h,08Bh,076h,0F4h,003h,076h,0F6h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh
DB 046h,0FEh,07Eh,04Fh,02Bh,04Eh,0FCh,07Eh,04Ah,02Bh,0D0h,02Bh,0D8h,083h,07Eh
DB 006h,000h,075h,021h,08Ah,0E0h,08Ah,02Ch,026h,088h,02Dh,046h,047h,075h,003h
DB 0E8h,0D9h,001h,0FEh,0CCh,075h,0F0h,003h,0F3h,003h,0FAh,073h,003h,0E8h,0CCh
DB 001h,0FEh,0C9h,075h,0E1h,0EBh,01Fh,08Ah,0E0h,026h,08Ah,02Dh,088h,02Ch,046h
DB 047h,075h,003h,0E8h,0B8h,001h,0FEh,0CCh,075h,0F0h,003h,0F3h,003h,0FAh,073h
DB 003h,0E8h,0ABh,001h,0FEh,0C9h,075h,0E1h,08Bh,056h,0F2h,0E8h,06Ch,001h,007h
DB 01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h,0CBh,0C8h,00Eh,000h,000h,050h,053h
DB 051h,052h,057h,056h,01Eh,006h,08Ch,0C8h,08Eh,0D8h,0E8h,03Eh,001h,089h,056h
DB 0F2h,08Bh,046h,006h,08Bh,05Eh,008h,02Bh,006h,027h,003h,02Bh,01Eh,02Bh,003h
DB 089h,046h,0FEh,089h,05Eh,0FCh,003h,006h,03Fh,003h,003h,01Eh,043h,003h,089h
DB 046h,0FAh,089h,05Eh,0F8h,0C7h,046h,0F6h,000h,000h,0C4h,006h,01Dh,003h,089h
DB 046h,0F4h,033h,0C0h,033h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,003h,0C9h,013h
DB 0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh,0FEh,08Bh,05Eh,0FAh,02Bh,00Eh,049h,003h
DB 02Bh,01Eh,049h,003h,049h,04Bh,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh
DB 04Eh,0FCh,08Bh,05Eh,0F8h,003h,0C9h,013h,0C0h,003h,0DBh,013h,0D2h,08Bh,04Eh
DB 0FCh,08Bh,05Eh,0F8h,02Bh,00Eh,04Dh,003h,02Bh,01Eh,04Dh,003h,049h,04Bh,003h
DB 0C9h,013h,0C0h,003h,0DBh,013h,0D2h,034h,005h,080h,0F2h,005h,08Ah,0E0h,084h
DB 0D0h,00Fh,085h,0A0h,000h,00Ah,0C2h,074h,040h,0F6h,0C4h,008h,074h,00Dh,08Bh
DB 05Eh,0FEh,0F7h,0DBh,089h,05Eh,0F6h,0C7h,046h,0FEh,000h,000h,0F6h,0C4h,002h
DB 074h,013h,052h,08Bh,046h,0FCh,0F7h,0D8h,0F7h,026h,03Fh,003h,001h,046h,0F4h
DB 0C7h,046h,0FCh,000h,000h,05Ah,0F6h,0C2h,004h,074h,006h,0A1h,049h,003h,089h
DB 046h,0FAh,0F6h,0C2h,001h,074h,006h,0A1h,04Dh,003h,089h,046h,0F8h,08Bh,046h
DB 0FCh,0F7h,026h,049h,003h,003h,046h,0FEh,083h,0D2h,000h,08Bh,0F8h,0E8h,07Eh
DB 000h,08Bh,016h,049h,003h,08Bh,01Eh,03Fh,003h,08Bh,076h,0F4h,003h,076h,0F6h
DB 0B8h,000h,0A0h,08Eh,0D8h,08Bh,046h,0FAh,08Bh,04Eh,0F8h,02Bh,046h,0FEh,07Eh
DB 02Ch,02Bh,04Eh,0FCh,07Eh,027h,02Bh,0D0h,02Bh,0D8h,08Ah,0E0h,026h,08Ah,02Ch
DB 046h,00Ah,0EDh,074h,002h,088h,02Dh,047h,075h,003h,0E8h,067h,000h,0FEh,0CCh
DB 075h,0ECh,003h,0F3h,003h,0FAh,073h,003h,0E8h,05Ah,000h,0FEh,0C9h,075h,0DDh
DB 08Bh,056h,0F2h,0E8h,01Bh,000h,007h,01Fh,05Eh,05Fh,05Ah,059h,05Bh,058h,0C9h
DB 0CBh,050h,053h,0B8h,005h,04Fh,0B7h,001h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h
DB 05Bh,058h,0C3h,050h,053h,052h,0B8h,005h,04Fh,0B7h,000h,0B3h,000h,02Eh,0FFh
DB 01Eh,05Dh,003h,05Ah,05Bh,058h,0C3h,050h,053h,052h,08Bh,0DAh,0C1h,0E3h,002h
DB 02Eh,089h,01Eh,09Ah,007h,02Eh,08Bh,097h,061h,003h,0B8h,005h,04Fh,0B7h,000h
DB 0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Ah,05Bh,058h,0C3h,050h,053h,052h,02Eh
DB 08Bh,01Eh,09Ah,007h,083h,0C3h,004h,02Eh,089h,01Eh,09Ah,007h,02Eh,08Bh,097h
DB 061h,003h,0B8h,005h,04Fh,0B7h,000h,0B3h,000h,02Eh,0FFh,01Eh,05Dh,003h,05Ah
DB 05Bh,058h,0C3h

View File

@@ -0,0 +1,162 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Westwood 32 bit Library *
;* *
;* File Name : KEYSTRUC.INC *
;* *
;* Programmer : Phil W. Gorrow *
;* *
;* Start Date : July 13, 1994 *
;* *
;* Last Update : July 13, 1994 [PWG] *
;* *
;*-------------------------------------------------------------------------*
;* Functions: *
;* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
STRUC KeyboardType
SoundOn DW ? ; toggled by alt S
MusicOn DW ? ; toggled by alt M
KeyFlags DD ? ; all but repeat for now
Break DW ?
KeyMouseMove DB 6 DUP(?)
ScreenEdge DW 18 DUP (?)
Bits DB 8 DUP (?)
CondPassKey DW 17 DUP (?)
CondPassCond DW 17 DUP (?)
EscRoutine DD ?
ExtCodes DB 16 DUP (?)
ExtNums DB 16 DUP (?)
ExtRemap DB 16 DUP (?)
ExtRemapEnd DB ?
ExtKeyboard DB ?
KeyBuffer DW 128 DUP(?) ; set to empty
KeyBufferHead DD ? ; set to first entry
KeyBufferTail DD ? ; set to head for empty buffer
KeyLock DW ? ; num and caps lock bits
KeyNums DB 89 DUP (?)
KeysCapsLock DB 16 DUP (?)
KeysNumLock DB 16 DUP (?)
KeysUpDown DB 16 DUP (?)
KeyStream DB 16 DUP (?)
PassCount DW ?
KeyStreamIndex DW ?
LastKeyE0 DB ?
LastKeyE1 DB ?
PassAlways DB 10 DUP (?)
PassAlwaysEnd DB ? ; invalid code to END PassAlways
CtrlFlags DB ?
Buffer DW ?
Time DW ?
XYAdjust DB 26 DUP (?)
EdgeConv DW 16 DUP (?)
MouseUpdate DW ?
MouseX DD ?
LocalMouseX DW ?
MouseY DD ?
LocalMouseY DW ?
IsExtKey DB ?
ExtIndex DW ?
KeyOldRMI DD ? ; The origianl RM interrupt seg:off.
KeyOldPMIOffset DD ? ; The origianl PM interrupt offset
KeyOldPMISelector DD ? ; The original PM interrupt segment.
KeyCodeOffset DW ? ; Offset of the code in the RM stuff.
CallKeyRMIntOffset DW ? ; Offset of function to call DOS timer interrupt.
CallKeyRMIntAddr DD ? ; PM address of CallRealIntOffset for speed.
PMIssuedKeyInt DD ? ; did Protected mode pass this through?
BrkOldRMI DD ? ; The origianl RM interrupt seg:off.
BrkOldPMIOffset DD ? ; The origianl PM interrupt offset
BrkOldPMISelector DD ? ; The original PM interrupt segment.
BrkCodeOffset DW ? ; Offset of the code in the RM stuff.
CallBrkRMIntOffset DW ? ; Offset of function to call DOS timer interrupt.
CallBrkRMIntAddr DD ? ; PM address of CallRealIntOffset for speed.
PMIssuedBrkInt DD ? ; did Protected mode pass this through?
KeyIntDisabled DD ?
DbgOldPMIOffset DD ? ; The origianl PM interrupt offset
DbgOldPMISelector DD ? ; The original PM interrupt segment.
;---------------------------------------------------------------------------
; Begin definition of Mouse Specific Variables for real mode
;---------------------------------------------------------------------------
Button DB ? ; current value of the mouse button
MDisabled DB ? ; Is the mouse driver disabled
MInput DB ? ; Defaults to mouse input allowed.
Adjust DW ? ; flag to adjust coordinates if necessary
MouseStepX DW ? ; step values if the mouse moves at
MouseStepY DW ? ; more than one pixel at a time
MouseOffsetX DW ? ; Fractional step values used if a mouse
MouseOffsetY DW ? ; moves at less than one pixel at a time
MState DD ? ; Tracks if mouse is hidden (TRUE) or not (FALSE)
MouseXOld DW ? ; Holds last MouseX and MouseY to determine if
MouseYOld DW ? ; mouse needs to be redrawn
MCState DW ? ; Tracks if mouse conditional hidden (TRUE) or not
MouseCXLeft DD ? ; Conditional hide mouse left x position
MouseCYUpper DD ? ; Conditional hide mouse top y position
MouseCXRight DD ? ; Conditional hide mouse right x position
MouseCYLower DD ? ; Conditional hide mouse lower y position
MouseCursor DD ? ; Pointer to the mouse cursor to draw
MouseCursorSize DW ? ; Size of mouse cursor draw area
MouseBuffer DD ? ; Pointer to buffer mouse is saved in
MouseXHot DD ? ; Offset to mouse's x hot spot
MouseYHot DD ? ; Offset to mouse's y hot spot
MouseBuffX DD ? ; X position background was saved at
MouseBuffY DD ? ; Y position background was saved at
MouseBuffW DD ? ; Width of the region saved for mouse
MouseBuffH DD ? ; Height of the region saved for mouse
MouseWidth DD ? ; Mouse cursor theoretical width
MouseHeight DD ? ; Mouse cursor theoretical height
MouseCodeOffset DW ? ; Offset to the real mode code offset
MouseRight DD ? ; Right hand side of the screen
MouseBottom DD ? ; Bottom of the screen
ShadowPtr dw ?
DrawMousePtr dw ?
VGAMouseDraw dw ?
VGAMouseShadow dw ?
VESAMouseDraw dw ?
VESAMouseShadow dw ?
VesaPtr dd ?
VesaBankTable DD 8 dup (?)
Adjust_XPos dd ?
Adjust_YPos dd ?
ENDS
; InitFlags that are set to have a fully functional interrupt.
IF_ALLOC_RM equ 1 ; Allocation of RM was successful.
IF_SET_VECTORS equ 2 ; Vectors have been set.
IF_LOCKED_PM_CODE equ 4 ; Locked PM code for DPMI.
IF_LOCKED_PM_DATA equ 8 ; Locked PM code for DPMI.
IF_RATE_CHANGE equ 10 ; Timer rate was changed.
IF_FUNCTIONAL equ 20 ; Timer is in and functional.
IF_LOCKED_RM_CODE equ 40

View File

@@ -0,0 +1,200 @@
#
# Command & Conquer Red Alert(tm)
# Copyright 2025 Electronic Arts Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#***************************************************************************
#** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
#***************************************************************************
#* *
#* Project Name : Westwood Library .LIB makefile *
#* *
#* File Name : MAKEFILE *
#* *
#* Programmer : Julio R. Jerez *
#* *
#* Start Date : Jan 25, 1994 *
#* *
#* *
#*-------------------------------------------------------------------------*
#* *
#* Required environment variables: *
#* WWFLAT = your root WWFLAT path *
#* WWVCS = root directory for wwlib version control archive *
#* WATCOM = your Watcom installation path *
#* *
#* Required changes to makefile: *
#* PROJ_NAME = name of the library you're building *
#* OBJECTS = list of objects in your library *
#* *
#* Optional changes to makefile: *
#* PROJ_DIR = full pathname of your working directory *
#* .path.xxx = full pathname where various file types live *
#* *
#***************************************************************************
#---------------------------------------------------------------------------
# Verify user's environment
#---------------------------------------------------------------------------
!ifndef %WWFLAT
!error WWFLAT Environment var not configured.
!endif
!ifndef %WWVCS
!error WWVCS Environment var not configured.
!endif
!ifndef %WATCOM
!error WATCOM Environment var not configured.
!endif
#===========================================================================
# User-defined section: the user should tailor this section for each project
#===========================================================================
PROJ_NAME = keyboard
PROJ_DIR = $(%WWFLAT)\$(PROJ_NAME)
LIB_DIR = $(%WWFLAT)\lib
!include $(%WWFLAT)\project.cfg
#---------------------------------------------------------------------------
# Project-dependent variables
#---------------------------------------------------------------------------
OBJECTS = &
keyboard.obj &
mouse.obj &
pagfault.obj
#---------------------------------------------------------------------------
# Path macros: one path for each file type.
# These paths are used to tell make where to find/put each file type.
#---------------------------------------------------------------------------
.asm: $(PROJ_DIR)
.c: $(PROJ_DIR)
.cpp: $(PROJ_DIR)
.h: $(PROJ_DIR)
.obj: $(PROJ_DIR)
.lib: $(WWLIB)\lib
.exe: $(PROJ_DIR)
#===========================================================================
# Pre-defined section: there should be little need to modify this section.
#===========================================================================
#---------------------------------------------------------------------------
# Tools/commands
#---------------------------------------------------------------------------
C_CMD = wcc386
CPP_CMD = wpp386
LIB_CMD = wlib
LINK_CMD = wlink
ASM_CMD = tasm32
#---------------------------------------------------------------------------
# Include & library paths
# If LIB & INCLUDE are already defined, they are used in addition to the
# WWLIB32 lib & include; otherwise, they're constructed from
# BCDIR & TNTDIR
#---------------------------------------------------------------------------
LIBPATH = $(%WWFLAT)\LIB;$(%WATCOM)\LIB
INCLUDEPATH = $(%WWFLAT)\INCLUDE;$(%WATCOM)\H
#---------------------------------------------------------------------------
# Implicit rules
# Compiler:
# ($< = full dependent with path)
# Assembler:
# output obj's are constructed from .obj: & the $& macro
# ($< = full dependent with path)
# tasm's cfg file is not invoked as a response file.
#---------------------------------------------------------------------------
.c.obj: $(%WWFLAT)\project.cfg .AUTODEPEND
$(C_CMD) $(CC_CFG) $<
.cpp.obj: $(%WWFLAT)\project.cfg .AUTODEPEND
$(CPP_CMD) $(CC_CFG) $<
.asm.obj: $(%WWFLAT)\project.cfg
$(ASM_CMD) $(ASM_CFG) $<
#---------------------------------------------------------------------------
# Default target: configuration files & library (in that order)
#---------------------------------------------------------------------------
all: $(LIB_DIR)\$(PROJ_NAME).lib .SYMBOLIC
#---------------------------------------------------------------------------
# Build the library
# The original library is deleted by the librarian
# Lib objects & -+ commands are constructed by substituting within the
# $^@ macro (which expands to all target dependents, separated with
# spaces)
# Tlib's cfg file is not invoked as a response file.
# All headers & source files are copied into WWFLAT\SRCDEBUG, for debugging
#---------------------------------------------------------------------------
$(LIB_DIR)\$(PROJ_NAME).lib: $(OBJECTS) objects.lbc
copy *.h $(%WWFLAT)\include
copy *.inc $(%WWFLAT)\include
copy *.cpp $(%WWFLAT)\srcdebug
copy *.asm $(%WWFLAT)\srcdebug
$(LIB_CMD) $(LIB_CFG) $^@ @objects.lbc
#---------------------------------------------------------------------------
# Objects now have a link file which is NOT generated everytime. Instead
# it just has its own dependacy rule.
#---------------------------------------------------------------------------
objects.lbc : $(OBJECTS)
%create $^@
for %index in ($(OBJECTS)) do %append $^@ +%index
#---------------------------------------------------------------------------
# The keyboard object files is also dependant on an IBN file which is
# generated from KEYIREAL.ASM
#---------------------------------------------------------------------------
keyireal.ibn: keyireal.obj
%create $^*.rsp
%append $^*.rsp $^&.obj
%append $^*.rsp $^&.exe
%append $^*.rsp $^&.map
tlink @$^*.rsp
tdstrip keyireal.exe
ebn keyireal.exe
keyireal.obj: keyireal.asm
tasm /zn /la /ml /m2 keyireal.asm
keyboard.obj: keyireal.ibn keyboard.asm
#---------------------------------------------------------------------------
# Create the test directory and make it.
#---------------------------------------------------------------------------
test:
mkdir test
cd test
copy $(%WWVCS)\$(PROJ_NAME)\test\vcs.cfg
update
wmake
cd ..
#**************************** End of makefile ******************************

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,153 @@
;
; Command & Conquer Red Alert(tm)
; Copyright 2025 Electronic Arts Inc.
;
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program. If not, see <http://www.gnu.org/licenses/>.
;
;***************************************************************************
;** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
;***************************************************************************
;* *
;* Project Name : Library *
;* *
;* File Name : PAGFAULT.ASM *
;* *
;* Programmer : Julio R Jerez *
;* *
;* Date : April 25,1995 *
;* *
;*-------------------------------------------------------------------------*
;* Functions: *
;
; Here are prototypes for the routines defined within this module:
; VOID Install_Page_Fault_Handle (void) ;
;
; ----------------------------------------------------------------
IDEAL ; the product runs in ideal mode
P386 ; use 386 real mode instructions
MODEL USE32 FLAT
LOCALS ?? ; ?? is the symbol for a local
WARN ; generate all warnings we can
JUMPS ; optimize jumps if possible
;---------------------------------------------------------------------------
; Make some general equates for easy compatability
;---------------------------------------------------------------------------
DPMI_INTR EQU 31h
PAGE_FAULT equ 0eh
RESET_VIDEO_MODE equ -1
GLOBAL Install_Page_Fault_Handle : NEAR
GLOBAL Set_Video_Mode : NEAR
GLOBAL Remove_Mouse : NEAR
GLOBAL Remove_Keyboard_Interrupt : NEAR
GLOBAL Remove_Timer_Interrupt : NEAR
DATASEG
Old_Page_Fault_handle DF ?
Page_Fault_SS DD ?
Page_Fault_ESP DD ?
CODESEG
;***************************************************************************
;* INSTALL_PAGE_FAULT_HANDLE -- Installs new page fault handle *
;* This function will install a new page fault handle *
;* so in the event that we have a program crash thi handle will *
;* remove all interrupts and then will chain to the default Page *
;* Fault handle *
;* *
;* INPUT: none *
;* *
;* *
;* OUTPUT: none *
;* *
;* PROTO: VOID Install_Page_Fault_Handle( void); *
;* *
;* HISTORY: 04/25/96 Created *
;*=========================================================================*
PROC Install_Page_Fault_Handle C NEAR
USES eax,ebx,ecx,edx,esi,edi
mov eax,0202h ; get address of exception handle
mov bl,PAGE_FAULT
int DPMI_INTR
jc ??exit ; not action is taken
; save addrees of default handle
mov [dword ptr Old_Page_Fault_handle],edx
mov [word ptr Old_Page_Fault_handle+4],cx
; redirect default handle to a new Page Fault Handle
mov eax,0203h
mov bl,PAGE_FAULT
mov cx,cs
lea edx,[Page_Fault_Handle]
int DPMI_INTR
??exit:
ret
ENDP Install_Page_Fault_Handle
;***************************************************************************
;* PAGE_FAULT_HANDLE -- This *
;* *
;* *
;* *
;* HISTORY: 04/25/96 Created *
;*=========================================================================*
PROC Page_Fault_Handle far
; preserve used registers
push eax
push ebx
; save Page Fault satck frame
mov ax,ss
mov [Page_Fault_SS],eax
mov [Page_Fault_ESP],esp
; retrieve application original stack frame
mov eax , [ esp + ( 6 + 2 ) * 4 ]
mov ebx , [ esp + ( 7 + 2 ) * 4 ]
mov ss , bx
mov esp , eax
; set video mode to standard text mode
push RESET_VIDEO_MODE
call Set_Video_Mode
pop eax
call Remove_Mouse
call Remove_Keyboard_Interrupt
call Remove_Timer_Interrupt
; restore Page Fault stack frame
mov eax,[Page_Fault_SS]
mov ss , ax
mov esp, [Page_Fault_ESP]
; restore used registers and chain to default Page Fault Handle
pop ebx
pop eax
jmp [fword Old_Page_Fault_handle]
ENDP Page_Fault_Handle
;***************************************************************************
;* End of File. *
;***************************************************************************
END