home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Transactor
/
Transactor_10_1986_Transactor_Publishing.d64
/
superkey.pal
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
2KB
|
74 lines
100 sys700 ;pal 64 assembler
110 ; superkey driver program
120 *=$c000
130 .opt oo
140 ;
150 bufnum = 198
160 bufmax = 649
170 datapt = $dc00
180 ddr = $dc02
190 keybuf = 631
200 irqvec = 788
210 cntr = $fd
220 pkey = $fe
230 delay = 20
240 rpt = 4
250 lkey = 16
260 ;
270 jmp setup ;connect
280 sei ;disconnect
290 lda oldirq+1
300 sta irqvec
310 lda oldirq+2
320 sta irqvec+1
330 cli
340 rts
350 ;
360 setup sei
370 lda irqvec
380 sta oldirq+1
390 lda irqvec+1
400 sta oldirq+2
410 lda #<start
420 sta irqvec
430 lda #>start
440 sta irqvec+1
450 lda #lkey
460 sta pkey
470 cli
480 rts
490 ;
500 start lda bufmax
510 cmp bufnum ;check if keybuffer full
520 beq oldirq ;branch if yes
530 lda #%00001111
540 sta ddr ;set up data direction register
550 ldy #$00 ;start key count at zero
560 kread sty datapt ;store count in port 2
570 lda datapt
580 and #%00010000 ;check if key pressed
590 bne nokey ;branch if not pressed
600 cpy pkey ;is current key same as last
610 bne not ;branch if not the same
620 dec cntr ;decrement count until repeat
630 bne reset ;branch if not time for repeat
640 lda #rpt
650 bne store
660 not lda #delay
670 store sta cntr ;set up counter for next repeat
680 lda table,y ;lda with character from table
690 ldx bufnum ;current key in keybuffer
700 sta keybuf,x ;store char
710 inc bufnum ;add 1 to # of chars in buffer
720 bne end ;branch always!
730 nokey iny ;add 1 to current key number
740 cpy #lkey ;is loop doneprint
750 bne kread ;branch if not done
760 end sty pkey ;save y in previous key pressed
770 reset lda #%11111111
780 sta ddr ;restore data direction registr
790 oldirq jmp $ea31 ;(NULL) to old irq routine
800 table .asc "0123456789abcdef"
810 ;table of characters for keys
820 .end