00001 *************************
00002 *
00003 * KBDCNT.ASM
00004 * MDJ 09-26-90
00005 *
00006 * KEYBOARD INPUT CONTROL
00007 * ROUTINES PACKAGE
00008 *
00009 *************************
00010 *
00011 * REQUIRES: GPKG
00012 *           DCHAR
00013 *           SCROLL
00014 *           CURSP
00015 *
00016 * EXCEPT PCHAR, FOR THE
00017 * ROUTINES IN THIS PKG:
00018 *  NO ENTRY CONDITIONS
00019 *  & NOTHING RETURNED
00020 *
00021 *************************
00022 *
00023 ADVCOD  EQU     $F7     ADVANCE CODE
00024 BAKCOD  EQU     $F8     BACKUP CODE
00025 CURSP   EQU     $3F6B   CURSOR ADVANCE ROUTINE
00026 DCHAR   EQU     $3F00   DISPLAY CHARACTER ROUTINE
00027 PRESET  EQU     $3E7A   POINT RESET ROUTINE
00028 SCROLL  EQU     $3F33   SCREEN SCROLL ROUTINE
00029 XCURS   EQU     $F3     CURSOR X LOCATION
00030 YCURS   EQU     $F5     CURSOR Y LOCATION
00031         ORG     $4196
00032 *
00033 *************************
00034 *
00035 * BEGLIN MOVES THE CURSOR
00036 * TO THE BEGINNING OF THE
00037 * CURRENT LINE
00038 *
00039 *************************
00040 *
00041 BEGLIN  PSHS    X
00042         LDX     #0
00043         STX     XCURS   RESET THE CURSOR X LOCATION
00044         PULS    X
00045         RTS
00046 *
00047 *************************
00048 *
00049 * BKSP BACKSPACES THE
00050 * CURSOR
00051 *
00052 *************************
00053 *
00054 BKSP    PSHS    A,B
00055         LDD     XCURS   GET CURSOR X LOCATION
00056         CMPD    #0      START OF LINE?
00057         BEQ     BKSP1   GO IF YES
00058         SUBD    #4      X DECREMENT
 
 
 
 
 
 
 
 
00059         STD     XCURS   NEW CURSOR X LOCATION
00060         BRA     BKSP3
00061 BKSP1   LDD     #252
00062         STD     XCURS   RESET CURSOR X LOCATION
00063         LDD     YCURS   GET CURSOR Y LOCATION
00064         CMPD    #0      START OF SCREEN?
00065         BEQ     BKSP2   GO IF YES
00066         SUBD    #8      Y DECREMENT
00067         STD     YCURS   NEW CURSOR Y LOCATION
00068         BRA     BKSP3
00069 BKSP2   LDD     #0
00070         STD     XCURS   RESET CURSOR X LOCATION
00071         LDA     #1
00072         STA     BAKCOD  SET BACKUP CODE
00073 BKSP3   PULS    A,B
00074         RTS
00075 *
00076 *************************
00077 *
00078 * CLRCHR CLEARS THE
00079 * CHARACTER AT THE
00080 * CURRENT CURSOR LOCATION
00081 *
00082 *************************
00083 *
00084 CLRCHR  PSHS    A,B,X,Y
00085         LDB     #7
00086         LDX     YCURS   GET CURSOR Y LOCATION
00087         ABX             POINT TO BOTTOM OF CHARACTER
00088         TFR     X,Y
00089 CC1     LDB     #2
00090         LDX     XCURS   GET CURSOR X LOCATION
00091         ABX             POINT TO RIGHT EDGE OF CHARACTER
00092 CC2     PSHU    Y
00093         PSHU    X
00094         JSR     PRESET  GO CLEAR POINT
00095         CMPX    XCURS   CHARACTER LINE CLEARED?
00096         BEQ     CC3     GO IF YES
00097         LEAX    -1,X
00098         BRA     CC2     RETURN FOR NEXT POINT
00099 CC3     CMPY    YCURS   CHARACTER CLEARED?
00100         BEQ     CC4     GO IF YES
00101         LEAY    -1,Y
00102         BRA     CC1     RETURN FOR NEXT LINE
00103 CC4     PULS    A,B,X,Y
00104         RTS
00105 *
00106 *************************
00107 *
00108 * CRLF PERFORMS A
00109 * CARRIAGE RETURN/
00110 *  LINE FEED
00111 *
00112 *************************
00113 *
00114 CRLF    PSHS    A
00115         JSR     DNLN    DOWN ONE LINE
00116         LDA     ADVCOD  GET ADVANCE CODE
 
 
 
 
 
 
 
 
00117         CMPA    #0      IS IT CLEAR?
00118         BNE     CRLF1   GO IF SET
00119         JSR     BEGLIN  CURSOR TO BEGINNING OF LINE
00120 CRLF1   PULS    A
00121         RTS
00122 *
00123 *************************
00124 *
00125 * CURSCR ADVANCES THE
00126 * CURSOR AND SCROLLS IF
00127 * REQUIRED
00128 *
00129 *************************
00130 *
00131 CURSCR  PSHS    A
00132         JSR     CURSP   ADVANCE CURSOR
00133         LDA     ADVCOD  GET ADVANCE CODE
00134         CMPA    #1      IS IT SET
00135         BNE     CRSR1   GO IF NO
00136         JSR     SCROLL  GO SCROLL SCREEN IF YES
00137 CRSR1   PULS    A
00138         RTS
00139 *
00140 *************************
00141 *
00142 * DNLN MOVES THE CURSOR
00143 * DOWN ONE LINE
00144 *
00145 *************************
00146 *
00147 DNLN    PSHS    A,B,Y
00148         LDD     YCURS   GET CURSOR Y LOCATION
00149         ADDD    #8      Y INCREMENT
00150         TFR     D,Y
00151         CMPY    #192    PAST END OF SCREEN?
00152         BLO     DNLN1   GO IF NO
00153         LDY     #184    RESET CURSOR Y LOCATION
00154         LDA     #1
00155         STA     ADVCOD  SET ADVANCE CODE
00156 DNLN1   STY     YCURS   NEW CURSOR Y LOCATION
00157         PULS    A,B,Y
00158         RTS
00159 *
00160 *************************
00161 *
00162 * PCHAR DISPLAYS A
00163 * CHARACTER AFTER 
00164 * CLEARING THE CURSOR
00165 * LOCATION
00166 *
00167 * ON ENTRY, THE CHARACTER
00168 * NUMBER (8-BIT, ASCII 33
00169 * MINIMUM, ASCII 126
00170 * MAXIMUM) MUST BE ON TOP
00171 * OF THE U-STACK, THE
00172 * X-CURSOR LOCATION MUST
00173 * BE IN XCURS, AND THE
00174 * Y-CURSOR LOCATION MUST
 
 
 
 
 
 
 
 
00175 * BE IN YCURS - XCURS &
00176 * YCURS ARE BOTH 16-BIT
00177 *
00178 * NOTHING RETURNED
00179 *
00180 *************************
00181 PCHAR   JSR     CLRCHR  GO CLEAR CHARACTER
00182         JMP     DCHAR   GO DISPLAY CHARACTER
00183 ZEXTV   RMB     1       EXTERNAL TEMPORARY VARIABLE
00184         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
