[net.micro.atari8] CX-85 keypad handler source code

cabbie@chinet.UUCP (Richard Andrews) (10/04/86)

	Well, here is is folks.  The original keypad handler as distributed
by Atari.  Redefine any of the keys any way that you like.  This version
is for port 2 and is easily modified for port 1.  If you need to have it 
in port one then replace the calls and remove some of the shifts.


1000     .TITLE "CX85 NUMERIC KEYPAD HANDLER - Mac65 version"
1010     .PAGE "Dissasembled by Rich Andrews, Lockport, Il."
1020 ;
1030 ;There was no copyright notice in the original
1040 ; code but one must assume it is public domain
1050 ;and was probably written by Atari Inc.
1060 ;(no one else would have bothered!)
1070 ;once called by Basic do not call again
1080 ;Call thru basic with a X=USR(32512)
1090 ;
1100     .PAGE "CX-85 EQUATES"
1110 ;******************************
1120 ;System equates used
1130 ;******************************
1140 ATRACT = $4D
1150 VVBLKD = $0224
1160 STRIG0 = $0284
1170 STRIG1 = $0285
1180 CH  =   $02FC
1190 ALLPOT = $D208
1200 PORTA = $D300
1210 SETVBV = $E45C
1220 XITVBV = $E462
1230 ;
1240 ;*****************************
1250 ;End of system equates
1260 ;*****************************
1270 ;The following is the keycode
1280 ;equates which are from CH. As
1290 ;per the Atari hardware manual.
1300 ;*****************************
1310 ;
1320 ;
1330 ESC =   $1C
1340 SPC =   $21
1350 DEL =   $34
1360 Y   =   $2B
1370 ZERO =  $32
1380 ONE =   $1F
1390 TWO =   $1E
1400 THREE = $1A
1410 FOUR =  $18
1420 FIVE =  $1D
1430 SIX =   $1B
1440 SEVEN = $33
1450 EIGHT = $35
1460 NINE =  $30
1470 PERIOD = $22
1480 MINUS = $0E
1490 CR  =   $0C
1500 ;
1510     .PAGE "CX-85 HANDLER INSTALLATION ROUTINE"
1520 ;******************************
1530 ;This is the start of the installation routine
1540 ;******************************
1550 ;
1560 ;
1570     .ORG $7F00  ;Start code just below GR.0 screen.
1580     PLA         ;This routine is to be called by basic hence the PLA
1590 ;Remove the PLA instruction for a stand alone file
1600     LDA VVBLKD  ;Call with X=USR(32512)
1610 ;The installation routine could also be a M/L string with the rest
1620 ;of the code previously loaded in via DOS.
1630     STA EXIT+1
1640     LDA VVBLKD+1
1650     STA EXIT+2
1660     LDY # <VBICODE
1670     LDX # >VBICODE
1680     LDA #$07    ;Command to reset vbi pointers.
1690     JSR SETVBV  ;Install vbi routine into interrupt chain.
1700     RTS         ;Return to caller.
1710     .PAGE "CX85 HANDLER LOOKUP TABLE"
1720 ;******************************
1730 LOOKUP ;        This is the lookup table.  This portion can be located
1740 ;in a different area in memory than the Main routine or the
1750 ;installation routine.
1760 ;******************************
1770     .BYTE $0C,ESC
1780     .BYTE $14,SPC,$10,DEL,$18,Y
1790     .BYTE $1C,ZERO,$19,ONE,$1A,TWO
1800     .BYTE $1B,THREE,$11,FOUR,$12
1810     .BYTE FIVE,$13,SIX,$15,SEVEN
1820     .BYTE $16,EIGHT,$17,NINE,$1D
1830     .BYTE PERIOD,$1F,MINUS,$1E
1840     .BYTE CR
1850     BRK         ;End of table delimiter
1860 ;*****************************
1870 ;By changing the table one could define
1880 ;the keys on the CX85 to mean anything!
1890 ;How about some new functions to be accessed
1900 ;through a wedge of some sort?  Terminal
1910 ;program phone dialer?  Maybe a bookkeeping
1920 ;program? As long as it is a printable
1930 ;character it will work. Rich A.
1940     .PAGE "CX-85 HANDLER MAIN VBI ROUTINE"
1950 ;*****************************
1960 ;The vbi routine starts here.
1970 ;*****************************
1980 ;This portion can be located anywhere in memory.
1990 ;*****************************
2000 VBICODE
2010     LDA STRIG1  ;trigger pressed?
2020     BNE SET2BYE ;no-go clr buffer #2+exit.
2030     LDA #$00
2040     STA ATRACT  ;kill attract mode
2050     LDA PORTA   ;lets get some bits
2060     LSR A       ;divide by 2
2070     LSR A       ;divide it again
2080     LSR A       ;ditto
2090     LSR A       ;one more time (Sam?)
2100     STA BUFR1   ;now stuff it in buffer 1
2110     LDA ALLPOT  ;read all the pot lines
2120     AND #$08    ;if it is >=8,then make it 0
2130     EOR #$08    ;if it is <8 then make it 8
2140     ASL A       ;times 2
2150     ORA BUFR1
2160     LDY #$00
2170 ;*******************************
2180 FINDIT
2190     CMP LOOKUP,Y
2200     BEQ FOUND   ;found the code
2210     INY 
2220     INY 
2230     LDX LOOKUP,Y
2240     BEQ EXIT
2250     BNE FINDIT
2260 ;******************************
2270 FOUND
2280     TAX 
2290     INY 
2300     LDA LOOKUP,Y
2310     CMP BUFR2
2320     BEQ PUTCHR
2330     STA BUFR2
2340     STA CH
2350     LDA #$30
2360     STA BUFR3
2370     BNE EXIT    ;always exit
2380 ;******************************
2390 SET2BYE
2400     LDA #$C0    ;when trig1 is not pressed
2410     STA BUFR2   ;read will come back with $C0
2420     BNE EXIT    ;always exit
2430 ;******************************
2440 PUTCHR
2450     LDX BUFR3
2460     DEX 
2470     BNE SET3BYE
2480     STA CH
2490     LDA #$06
2500     STA BUFR3
2510     BNE EXIT
2520 ;*********************
2530 SET3BYE
2540     STX BUFR3
2550 ;*********************
2560 EXIT
2570     JMP XITVBV  ;see you next vbi
2580 ;*********************
2590 BUFR1
2600     .DS 1       ;reserve 1 byte
2610 ;*********************
2620 BUFR2
2630     .DS 1       ;reserve 1 byte
2640 ;*********************
2650 BUFR3
2660     .DS 1       ;reserve 1 byte
2670 ;*********************
2680     .END 
2690 ;The original key layout is as
2700 ;follows
2710 ;-----------------------
2720 ; esc                  |
2730 ;       7 8 9    -     |
2740 ;  N    4 5 6    r     |
2750 ;<del>  1 2 3    e     |
2760 ;  Y     0  .    t     |
2770 ;                      |
2780 ;-----------------------
2790 ; <eof>

enjoy...

186,000 miles per second.......
		It's not just a good idea. It's the law!

						Rich Andrews
						...ihnp4!chinet!cabbie



standard disclaimer...
Any opinions expressed in the above article are mine.  If anyone has any
flames please send them to ....null!device!local.