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>