Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.sys.apple2.programmer > #1304

LJK Lower Case Character Generator driver

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From D Finnigan <dog_cow@macgui.com>
Newsgroups comp.sys.apple2.programmer
Subject LJK Lower Case Character Generator driver
Date Tue, 2 Sep 2014 02:10:09 +0000 (UTC)
Organization Mac GUI
Lines 182
Message-ID <dog_cow-1409623804@macgui.com> (permalink)
Mime-Version 1.0
Content-Type text/plain; charset=UTF-8
Content-Transfer-Encoding 8bit
Injection-Date Tue, 2 Sep 2014 02:10:09 +0000 (UTC)
Injection-Info mx05.eternal-september.org; posting-host="ac9e0e4d7dd3957fb97803ee6801bab8"; logging-data="14004"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Y9z6QRX9hp0t6vlv1PBwQ"
User-Agent Mac GUI Usenet
Cancel-Lock sha1:AnP8R59B9dRAzzTL+Ied9mCUCvU=
Xref csiph.com comp.sys.apple2.programmer:1304

Show key headers only | View raw


Source code for the LJK Enterprises Lower Case Character Generator. Works
with the single-wire shift key mod. Assembles in Merlin Pro and whatever
other assemblers were around in 1981.

I typed this out of the manual. It assembled with no errors, so that means
there are no typos! ;-)
Typos on lines 14 and 15 were in the original document, so I reproduced
them.

Reference:
http://macgui.com/usenet/?group=1&id=60253&highlight=ljk


---------------------


                1    ************************** 
                2    *  LOWER CASE SOFTWARE   * 
                3    *     VERSION 1.0        * 
                4    *   COPYRIGHT 1981 BY    * 
                5    * LJK ENTERPRISES, INC.  * 
                6    *   COMMERCIAL RIGHTS    * 
                7    *       RESERVED         * 
                8    ************************** 
                9    * 
                10   KSW      EQU   $38        keyhook 
                11   DHOOK    EQU   $3EA       rehook of dos 
                12   BASE     EQU   $28        screen address 
                13   KEYIN    EQU   $FD1B      read keyboard 
                14   CR       EQU   $8D        carraige return 
                15   SP       EQU   $A0        space chareturn 
                16   CH       EQU   $24        cursor horizontal 
                17   RDKEY    EQU   $FD0C      ind read keybd 
                18   CUR1     EQU   $40        default (flash) 
                19   CUR2     EQU   0          lc no flash 
                20   STACK    EQU   $100       6502 stack 
                21   SHIFT    EQU   $C063      paddle shift 
                22   * 
                23            ORG   $300       
                24                             ;OBJ *300 
                25   * 
0300: A9 0B     26   SETHOOK  LDA   #LC        set our hooks 
0302: 85 38     27            STA   KSW        on the input 
0304: A9 03     28            LDA   #>LC       
0306: 85 39     29            STA   KSW+1      
0308: 4C EA 03  30            JMP   DHOOK      rehook dos to save 
                31   * 
030B: 48        32   LC       PHA   resave     character 
030C: C9 E0     33            CMP   #$E0       is it lower? 
030E: 90 02     34            BCC   LC1        ok to put 
0310: 49 20     35            EOR   #$20       set to upper 
0312: 29 3F     36   LC1      AND   #$3F       put to screen 
0314: 0D AA 03  37            ORA   CUR        use cur as or mask 
0317: 91 28     38            STA   (BASE),Y   
0319: 68        39            PLA   keyin      will restore 
031A: 20 1B FD  40            JSR   KEYIN      screen character 
031D: 8D AC 03  41            STA   CHAR       save for now 
0320: 8E AB 03  42            STX   XSAVE      
0323: BA        43            TSX   get        stack 
0324: BD 06 01  44            LDA   STACK+6,X  see if getln 
0327: C9 FD     45            CMP   #$FD       by looking on stack 
0329: D0 0C     46            BNE   DOKEY      will change by 2 
032B: BD 05 01  47            LDA   STACK+5,X  without dos 
032E: C9 77     48            CMP   #$77       if getln change to 
0330: D0 05     49            BNE   DOKEY      addinp to bypass 
0332: A9 83     50            LDA   #$83       conversion to caps 
0334: 9D 05 01  51            STA   STACK+5,X  found it! 
0337: AE AB 03  52   DOKEY    LDX   XSAVE      restore X reg 
033A: AD AC 03  53            LDA   CHAR       and char 
033D: C9 8C     54            CMP   #$8C       ^L shift toggle? 
033F: D0 0B     55            BNE   LC2        no, go on 
0341: AD A9 03  56            LDA   CAPS       invert msb of caps 
0344: 49 FF     57            EOR   #$FF       
0346: 20 9B 03  58            jsr   DOCUR      and place cur right 
0349: 4C 0C FD  59   LC0      JMP   RDKEY      get new key exit 
 
 
                              ===== Page 2 ===== 
 
034C: C9 9A     60   LC2      CMP   #$9A       is it ^Z? 
034E: D0 0E     61            BNE   LC3        
0350: 20 0C FD  62            JSR   RDKEY      recursive 
0353: 29 0F     63            AND   #$F        mask of char 
0355: C9 0C     64            CMP   #12        and see if in range 
0357: B0 F0     65            BCS   LC0        no, so get new key 
0359: A8        66            TAY   else,      read from table 
035A: B9 AD 03  67            LDA   SCHAR,Y    and exit 
035D: 60        68            RTS              
                69   * 
035E: C9 95     70   LC3      CMP   #$95       since we skip capstst 
0360: D0 06     71            BNE   LC4        we must do screen read 
0362: B1 28     72            LDA   (BASE),Y   ourselves 
0364: 09 80     73            ORA   #$80       make upper case 
0366: 30 0C     74            BMI   KADJ       adj for lc addition 
0368: C9 8D     75   LC4      CMP   #CR        if a cr set to caps lock 
036A: D0 08     76            BNE   KADJ       
036C: A9 FF     77            LDA   #$FF       
036E: 20 9B 03  78            JSR   DOCUR      
0371: A9 8D     79            LDA   #CR        
0373: 60        80            RTS              
0374: C9 C0     81   KADJ     CMP   #"@        handle p,m,n special 
0376: D0 04     82            BNE   KADJ2      
0378: 49 10     83   KADJ1    EOR   #$10       by eor with $10 
037A: D0 08     84            BNE   KADJ3      
037C: C9 DD     85   KADJ2    CMP   #$DD       shift m 
037E: 90 04     86            BCC   KADJ3      
0380: C9 DF     87            CMP   #$DF       shift n+1 
0382: 90 F4     88            BCC   KADJ1      
0384: C9 C1     89   KADJ3    CMP   #"A        alpha test for caps 
0386: 90 20     90            BCC   RTS1       if leff than no adj 
0388: C5 DB     91            CMP   "Z+1 if >Z no adj 
038A: B0 1C     92            BCS   RTS1       
038C: 2C A9 03  93            BIT   CAPS       do we adj to lc 
038F: 30 02     94            BMI   KADJ4      no, go on 
0391: 09 20     95            ORA   #$20       adjust to lc 
0393: 2C 63 C0  96   KADJ4    BIT   SHIFT      is shift key hit? 
0396: 30 10     97            BMI   RTS1       no, exit 
0398: 49 20     98            EOR   #$20       yes, invert cap order 
039A: 60        99            RTS              
                100  * 
039B: 8D A9 03  101  DOCUR    STA   CAPS       do default case 
039E: 10 03     102           BPL   DOCUR1      not default, load lc 
03A0: A9 40     103           LDA   #CUR1      load upper cursor 
03A2: 2C        104           DFB   $2C        skip next lda 
03A3: A9 00     105  DOCUR1   LDA   #CUR2      
03A5: 8D AA 03  106           STA   CUR        save mask 
03A8: 60        107  RTS1     RTS   and        exit 
                108  * 
03A9: FF        109  CAPS     DFB   $FF        set for default 
03AA: 40        110  CUR      DFB   $40        to up at startup 
03AB: 00        111  XSAVE    BRK              
03AC: 00        112  CHAR     BRK              
03AD: C0 DB DC  113  SCHAR    HEX   C0DBDCDDDEDFE0FBFCFDFEFF 
03B0: DD DE DF E0 FB FC FD FE 
03B8: FF 
                114  * 
 
 
                              ===== Page 3 ===== 
 
--End assembly, 185 bytes, Errors: 0 
Symbol table - alphabetical order: 
   BASE    =$28        CAPS    =$03A9   ?  CH      =$24        CHAR   
   =$03AC
   CR      =$8D        CUR     =$03AA      CUR1    =$40        CUR2    =$00 
   DHOOK   =$03EA      DOCUR   =$039B      DOCUR1  =$03A3      DOKEY  
   =$0337
   KADJ    =$0374      KADJ1   =$0378      KADJ2   =$037C      KADJ3  
   =$0384
   KADJ4   =$0393      KEYIN   =$FD1B      KSW     =$38        LC     
   =$030B
   LC0     =$0349      LC1     =$0312      LC2     =$034C      LC3    
   =$035E
   LC4     =$0368      RDKEY   =$FD0C      RTS1    =$03A8      SCHAR  
   =$03AD
?  SETHOOK =$0300      SHIFT   =$C063   ?  SP      =$A0        STACK  
=$0100 
   XSAVE   =$03AB   
Symbol table - numerical order: 
   CUR2    =$00     ?  CH      =$24        BASE    =$28        KSW     =$38 
   CUR1    =$40        CR      =$8D     ?  SP      =$A0        STACK  
   =$0100
?  SETHOOK =$0300      LC      =$030B      LC1     =$0312      DOKEY  
=$0337 
   LC0     =$0349      LC2     =$034C      LC3     =$035E      LC4    
   =$0368
   KADJ    =$0374      KADJ1   =$0378      KADJ2   =$037C      KADJ3  
   =$0384
   KADJ4   =$0393      DOCUR   =$039B      DOCUR1  =$03A3      RTS1   
   =$03A8
   CAPS    =$03A9      CUR     =$03AA      XSAVE   =$03AB      CHAR   
   =$03AC
   SCHAR   =$03AD      DHOOK   =$03EA      SHIFT   =$C063      RDKEY  
   =$FD0C
   KEYIN   =$FD1B   

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

Back to comp.sys.apple2.programmer | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

LJK Lower Case Character Generator driver D Finnigan <dog_cow@macgui.com> - 2014-09-02 02:10 +0000
  LJK Lower Case Character Generator driver Antoine Vignau <antoine.vignau@laposte.net> - 2014-09-05 09:27 -0700

csiph-web