CX85 Keyboard Handler#

General Information

Author: Rich Andrews, Lockport, Il
Assembler: Mac65

ac65 version

Dissasembled by Rich Andrews, Lockport, Il.

There was no copyright notice in the original code but one must assume it is public domain and was probably written by Atari Inc. (no one else would have bothered!)

Call thru basic with a X=USR(32512)

once called by Basic do not call again

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>