00001 *************************
00002 *
00003 * KEYBD.ASM
00004 * MDJ 09-25-90
00005 *
00006 * WAITS FOR A KEYPRESS OR
00007 * KEYPRESS COMBINATION &
00008 * LEAVES THE TRANSLATED
00009 * KEYCODE (8-BIT, 0-255)
00010 * ON THE U-STACK
00011 *
00012 *************************
00013 *
00014 * U AND S STACKS MUST
00015 * ALREADY BE INITIALIZED
00016 *
00017 * NO ENTRY CONDITIONS
00018 *
00019 * ON RETURN, THE KEYCODE
00020 * IS ON THE TOP OF THE
00021 * U-STACK
00022 *
00023 *************************
00024 *
00025 XCURS   EQU     $F3     CURSOR X LOCATION
00026 YCURS   EQU     $F5     CURSOR Y LOCATION
00027 POLCAT  EQU     $3F9B   KEYBOARD POLLING ROUTINE
00028 PPOINT  EQU     $3E9C   SEE GPKG.ASM
00029 PRESET  EQU     $3E7A   SEE GPKG.ASM
00030 PSET    EQU     $3E7F   SEE GPKG.ASM
00031         ORG     $3FAA
00032 KEYBD   PSHS    A,X     ENTRY POINT TO BLINK CURSOR AND
00033 *                         GET A KEYPRESS
00034         LDX     #GETKEY
00035         BRA     KBS
00036 KBNC    PSHS    A,X     ENTRY POINT TO GET A KEYPRESS
00037 *                         WITHOUT BLINKING THE CURSOR
00038         LDX     #GKNC
00039 KBS     JSR     ,X      GO GET KEYPRESS
00040         PULU    A       PULL RAW KEYCODE
00041         CMPA    #1      COCO III SH-CTRL KEY?
00042         BEQ     KBS     IGNORE IF YES
00043         CMPA    #4      COCO III F2 KEY?
00044         BEQ     KBS     IGNORE IF YES
00045         CMPA    #12     CLEAR KEY?
00046         BEQ     KCLR    GO IF YES
00047         CMPA    #19     SHIFT @ KEY?
00048         BEQ     KSHAT   GO IF YES
00049         CMPA    #91     SHIFT DOWN ARROW KEY?
00050         BEQ     KSHDN   GO IF YES
00051         CMPA    #92     SHIFT CLEAR KEY?
00052         BEQ     KSHCLR  GO IF YES
00053         CMPA    #93     SHIFT RIGHT ARROW KEY?
00054         BEQ     KSHRA   GO IF YES
00055         CMPA    #94     ^ KEY?
00056         BEQ     KUP     GO IF YES
00057         CMPA    #95     SHIFT ^ KEY?
00058         BEQ     KSHUP   GO IF YES
 
 
 
 
 
 
 
 
00059         CMPA    #122    COCO III CTRL OR SH-F2 KEY?
00060         BHI     KBS     IGNORE IF YES
00061         LBRA    KEXIT   EXIT
00062 KSHAT   LDA     #95     SH-@ TRANSLATION
00063         LBRA    KEXIT
00064 KSHDN   LDA     #23     SHIFT DOWN ARROW TRANSLATION
00065         LBRA    KEXIT
00066 KSHCLR  LDA     #124    SH-CLEAR TRANSLATION
00067         LBRA    KEXIT
00068 KSHRA   LDA     #22     SHIFT RIGHT ARROW TRANSLATION
00069         LBRA    KEXIT
00070 KUP     LDA     #11     ^ TRANSLATION
00071         LBRA    KEXIT
00072 KSHUP   LDA     #24     SH-^ TRANSLATION
00073         LBRA    KEXIT
00074 KCLR    JSR     ,X      CLEAR KEY COMBINATION
00075         PULU    A
00076         CMPA    #3      BREAK KEY?
00077         BLO     KCLR    IGNORE IF COCO III SH-CTRL KEY
00078         BEQ     KCBRK   GO IF BREAK KEY
00079         CMPA    #8      LEFT ARROW KEY?
00080         BLO     KCLR    IGNORE IF COCO III F2 KEY
00081         BEQ     KCLA    GO IF LEFT ARROW KEY
00082         CMPA    #12     CLEAR KEY?
00083         BLO     KCLA    GO IF RIGHT ARROW OR DOWN ARROW
00084         BEQ     KCLR    IGNORE IF SECOND CLEAR KEY
00085         CMPA    #13     ENTER KEY?
00086         BEQ     KCENT   GO IF YES
00087         CMPA    #32     SPACEBAR?
00088         BLO     KCLR    IGNORE IF LESS THAN ASCII 32
00089         BEQ     KCSPA   GO IF SPACEBAR
00090         CMPA    #42     SH-* KEY?
00091         BLO     KC95    GO IF LESS THAN ASCII 42
00092         BEQ     KCASTK  GO IF SH-* KEY
00093         CMPA    #43     SH + KEY?
00094         BEQ     KCPLUS  GO IF YES
00095         CMPA    #44     , KEY?
00096         BEQ     KCCOM   GO IF YES
00097         CMPA    #45     - (MINUS) KEY?
00098         BEQ     KCMIN   GO IF YES
00099         CMPA    #46     . KEY?
00100         BEQ     KCPER   GO IF YES
00101         CMPA    #47     / KEY?
00102         BEQ     KCSLSH  GO IF YES
00103         CMPA    #55     7 KEY?
00104         BLO     KC95    GO IF LESS THAN ASCII 55
00105         BEQ     KC7     GO IF 7 KEY
00106         CMPA    #56     8 KEY?
00107         BEQ     KC8     GO IF YES
00108         CMPA    #57     9 KEY?
00109         BEQ     KC9     GO IF YES
00110         CMPA    #58     : KEY?
00111         BEQ     KCCOLN  GO IF YES
00112         CMPA    #64     @ KEY?
00113         BLO     KC95    GO IF LESS THAN ASCII 64
00114         BEQ     KAT     GO IF @ KEY
00115         CMPA    #91     SHIFT DOWN ARROW KEY?
00116         BLO     KC95    GO IF LESS THAN ASCII 91
 
 
 
 
 
 
 
 
00117         CMPA    #94     ^ KEY?
00118         BLO     KCLR    IGNORE IF LESS THAN ASCII 94
00119         BEQ     KCUP    GO IF ^ KEY
00120         CMPA    #95     SH-^ KEY?
00121         BEQ     KCLR    IGNORE IF YES
00122         CMPA    #122    COCO III CTRL OR SH-F2 KEY?
00123         BHI     KCLR    IGNORE IF YES
00124 KC95    ADDA    #95     ALPHA-CLEAR OFFSET
00125         LBRA    KEXIT
00126 KCBRK   LDA     #12     BREAK TRANSLATION
00127         LBRA    KEXIT
00128 KCLA    SUBA    #4      LEFT ARROW, RIGHT ARROW, AND DOWN
00129 *                         ARROW TRANSLATION
00130         LBRA    KEXIT
00131 KCENT   LDA     #2      ENTER TRANSLATION
00132         LBRA    KEXIT
00133 KCSPA   LDA     #1      SPACEBAR TRANSLATION
00134         LBRA    KEXIT
00135 KCASTK  LDA     #126    ASTERISK TRANSLATION
00136         LBRA    KEXIT
00137 KCPLUS  LDA     #138    + TRANSLATION
00138         LBRA    KEXIT
00139 KCCOM   LDA     #123    , TRANSLATION
00140         LBRA    KEXIT
00141 KCMIN   LDA     #127    - (MINUS) TRANSLATION
00142         LBRA    KEXIT
00143 KCPER   LDA     #125    . TRANSLATION
00144         LBRA    KEXIT
00145 KCSLSH  LDA     #92     / TRANSLATION
00146         LBRA    KEXIT
00147 KC7     LDA     #96     7 KEY TRANSLATION
00148         LBRA    KEXIT
00149 KC8     LDA     #91     8 KEY TRANSLATION
00150         LBRA    KEXIT
00151 KC9     LDA     #93     9 KEY TRANSLATION
00152         LBRA    KEXIT
00153 KCCOLN  LDA     #94     : TRANSLATION
00154         LBRA    KEXIT
00155 KCUP    LDA     #7      ^ TRANSLATION
00156         LBRA    KEXIT
00157 KAT     JSR     ,X      CLEAR-@ KEYS COMBINATION
00158         PULU    A
00159         CMPA    #33     ! KEY?
00160         BLO     KAT     IGNORE IF LESS THAN ASCII 33
00161         CMPA    #38     & KEY?
00162         BLO     KA218   GO IF LESS THAN ASCII 38
00163         CMPA    #43     + KEY?
00164         BEQ     KAPLUS  GO IF YES
00165         CMPA    #44     , KEY?
00166         BEQ     KACOM   GO IF YES
00167         CMPA    #48     0 KEY?
00168         BLO     KAT     IGNORE IF LESS THAN ASCII 48
00169         BEQ     KA0     GO IF 0 KEY
00170         CMPA    #56     8 KEY?
00171         BLO     KA35    GO IF LESS THAN ASCII 56
00172         BEQ     KA31    GO IF 8 KEY
00173         CMPA    #57     9 KEY?
00174         BEQ     KA31    GO IF YES
 
 
 
 
 
 
 
 
00175         CMPA    #65     A KEY?
00176         BLO     KAT     IGNORE IF LESS THAN ASCII 65
00177         CMPA    #91     SHIFT DOWN ARROW KEY?
00178         BLO     KA153   GO IF LESS THAN ASCII 91
00179         CMPA    #97     a KEY?
00180         BLO     KAT     IGNORE IF LESS THAN ASCII 97
00181         CMPA    #102    f KEY?
00182         BLO     KA70    GO IF LESS THAN ASCII 102
00183         CMPA    #106    j KEY?
00184         BLO     KA37    GO IF LESS THAN ASCII 106
00185         CMPA    #110    n KEY?
00186         BLO     KA44    GO IF LESS THAN ASCII 110
00187         CMPA    #116    t KEY?
00188         BLO     KA76    GO IF LESS THAN ASCII 116
00189         CMPA    #122    COCO III CTRL OR SH-F2 KEY?
00190         BHI     KAT     IGNORE IF YES
00191 KA128   ADDA    #128    +128 OFFSET
00192         BRA     KEXIT
00193 KA218   ADDA    #218    +218 OFFSET
00194         BRA     KEXIT
00195 KAPLUS  LDA     #137    + TRANSLATION
00196         BRA     KEXIT
00197 KACOM   LDA     #159    , TRANSLATION
00198         BRA     KEXIT
00199 KA0     CLRA            O KEY TRANSLATION
00200         BRA     KEXIT
00201 KA35    SUBA    #35     -35 OFFSET
00202         BRA     KEXIT
00203 KA31    SUBA    #31     -31 OFFSET
00204         BRA     KEXIT
00205 KA153   ADDA    #153    +153 OFFSET
00206         BRA     KEXIT
00207 KA70    SUBA    #70     -70 OFFSET
00208         BRA     KEXIT
00209 KA37    ADDA    #37     +37 OFFSET
00210         BRA     KEXIT
00211 KA44    ADDA    #44     +44 OFFSET
00212         BRA     KEXIT
00213 KA76    ADDA    #76     +76 OFFSET
00214 KEXIT   PSHU    A       PUSH FINAL KEYCODE
00215         PULS    A,X
00216         RTS
00217 GETKEY  PSHS    X       BLINK CURSOR & GET KEY
00218         PSHS    A,B,Y,U,DP,CC
00219         TFR     U,X
00220 WAIT    JSR     POLCAT
00221         PSHS    CC
00222         JSR     BLCURS  GO BLINK CURSOR
00223         PULS    CC
00224         BEQ     WAIT
00225         BRA     GKNCE
00226 GKNC    PSHS    X       GET KEY W/O BLINKING CURSOR
00227         PSHS    A,B,Y,U,DP,CC
00228         TFR     U,X
00229 WAITNC  JSR     POLCAT
00230         BEQ     WAITNC
00231 GKNCE   LEAX    -1,X    PSHU A EQUIVALENT
00232         STA     ,X
 
 
 
 
 
 
 
 
00233         PULS    A,B,Y,U,DP,CC
00234         TFR     X,U
00235         PULS    X
00236         RTS
00237 BLCURS  PSHS    A,B,X,Y CURSOR BLINK ROUTINE
00238         JSR     BLCUR1
00239         JSR     BLCUR1
00240         PULS    A,B,X,Y
00241         RTS
00242 BLCUR1  LDB     #7
00243         LDX     YCURS   CURSOR Y LOCATION
00244         ABX
00245         TFR     X,Y
00246 BC1     LDB     #2
00247         LDX     XCURS   CURSOR X LOCATION
00248         ABX
00249 BC2     PSHU    Y
00250         PSHU    X
00251         JSR     PPOINT
00252         PULU    A,B
00253         CMPD    #0
00254         BEQ     BLC1
00255         PSHU    Y
00256         PSHU    X
00257         JSR     PSET
00258         BRA     BLC2
00259 BLC1    PSHU    Y
00260         PSHU    X
00261         JSR     PRESET
00262 BLC2    CMPX    XCURS   CURSOR X LOCATION
00263         BEQ     ZEND
00264         LEAX    -1,X
00265         BRA     BC2
00266 ZEND    RTS
00267         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
