playground:playground
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
playground:playground [2016-02-07 23:34] – matt | playground:playground [2022-03-11 22:24] – erhan | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ;I have slight modified | + | ====== Scanning |
- | ;this routine converts 5 digits decimal number (range 0-65535) to equivalent hex number. | + | |
+ | Converts keycode ($00-$3F) to $DC00-$DC01 values and scans without interfering from joysticks at port 1 or 2. Also keeps history, to detect key press & hold. | ||
- | !to " | + | < |
- | *=$0810 | + | ;64tass format |
- | lda #0 | + | ;with default |
- | sta lores ;result byteLo | + | ;taken from Platoon game, shortened and key history integrated. |
- | sta hires ;result byteHi | + | ;code to key conversion table below, from c64-wiki.com |
- | lda numA ;load units and tens byte | + | |
- | and #$0f ;store | + | |
- | sta lores ;units nibble | + | |
- | lda numA ;tens nibble | + | |
- | lsr | + | |
- | lsr | + | |
- | | + | |
- | lsr | + | |
- | sta addr1+1 ; | + | |
- | lda #$0a ;put 10 after adc opcode in adder subroutine | + | |
- | sta addr2+1 | + | |
- | lda #$0 ;2 byte addition | + | |
- | sta addr3+1 | + | |
- | jsr addr1 | + | |
- | lda numB ;load handreds | + | |
- | pha | + | |
- | and #$0f | + | |
- | sta addr1+1 ; | + | |
- | lda #$64 ;put 100 ($64) after adc opcode... | + | |
- | sta addr2+1 | + | |
- | lda #$0 | + | |
- | sta addr3+1 | + | |
- | jsr addr1 | + | |
- | pla | + | |
- | lsr | + | |
- | lsr | + | |
- | lsr | + | |
- | lsr | + | |
- | sta addr1+1 | + | |
- | lda #$e8 ;add 1000, first add lobyte $e8 | + | |
- | sta addr2+1 | + | |
- | lda #$03 ;...after add hibyte $03 | + | |
- | sta addr3+1 | + | |
- | jsr addr1 | + | |
- | lda numC ;load tens of thousands | + | |
- | and #$0f | + | |
- | sta addr1+1 ; | + | |
- | lda #$10 | + | |
- | sta addr2+1 | + | |
- | lda #$27 | + | |
- | sta addr3+1 | + | |
- | jsr addr1 | + | |
- | rts | + | |
- | ;adder subroutine | + | |
- | addr1 ldx # | + | |
- | clc | + | |
- | loop lda lores | + | |
- | addr2 adc #00 ;$a, $64; $e8, $10 | + | |
- | sta lores | + | |
- | lda hires | + | |
- | addr3 adc #00 ;$0, $03, $27 | + | |
- | sta hires | + | |
- | dex | + | |
- | bne loop | + | |
- | rts | + | |
- | ;for 65535 | + | |
- | numA !byte 00 ;numA=35 | + | |
- | numB !byte 00 ; | + | |
- | numC !byte 00 ; | + | |
- | lores !byte 00 | + | |
- | hires !byte 00 | + | |
+ | ;to use inside irq, below code is enough : | ||
+ | ; lda #$keycode | ||
+ | ; jsr keyscan | ||
+ | ; bcc + | ||
+ | ; inc $d020 | ||
+ | ; | ||
+ | |||
+ | ; | ||
+ | ; | ||
+ | ;$02 Crsr ←→ $12 D $22 J $32 ] | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ;$07 Crsr ↑↓ $17 X $27 N $37 ? | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | |||
+ | |||
+ | * = $1000 | ||
+ | |||
+ | lda #$3e ;scan for key " | ||
+ | jsr keyscan | ||
+ | bcc + | ||
+ | inc $d020 ; | ||
+ | + | ||
+ | - lda $d011 | ||
+ | bpl - | ||
+ | - lda $d011 | ||
+ | bmi - | ||
+ | |||
+ | jmp $1000 | ||
+ | |||
+ | keyscan | ||
+ | ; sty backy+1 ; | ||
+ | pha | ||
+ | lsr | ||
+ | lsr | ||
+ | lsr | ||
+ | tay | ||
+ | lda row,y | ||
+ | sta $dc00 | ||
+ | pla | ||
+ | and #$07 | ||
+ | tay | ||
+ | lda $dc01 | ||
+ | and column,y | ||
+ | bne nokey | ||
+ | lda #$ff ;key is checked 2nd time, to be sure of | ||
+ | sta $dc00 ;joy #1 and #2 are not interfering | ||
+ | lda $dc01 | ||
+ | and column,y | ||
+ | beq nokey | ||
+ | |||
+ | cmp histv ; | ||
+ | bne + | ||
+ | clc | ||
+ | bcc backy | ||
+ | |||
+ | nokey asl ; | ||
+ | clc | ||
+ | .byte $24 | ||
+ | + sec ; | ||
+ | sta histv | ||
+ | |||
+ | backy | ||
+ | ; ldy # | ||
+ | lda #$ff | ||
+ | sta $dc00 ;set default value | ||
+ | lda #$7f | ||
+ | sta $dc01 ;set default value | ||
+ | rts | ||
+ | |||
+ | |||
+ | row .byte $fe, | ||
+ | column .byte $01, | ||
+ | histv .byte $00 | ||
+ | |||
+ | </ |
playground/playground.txt · Last modified: 2024-03-15 23:51 by ftc