Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/coolboy-multirom-builder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-17 19:48:27 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-17 19:48:27 +0300
commitb03de3e3eaf063dce942de66bbb3ebef21619a38 (patch)
tree82d3000b6841209c285ea8c9e0df74a544719cb1 /buttons.asm
parentb3c6426a170f0b1912eecc5ca342fec4deb9d90b (diff)
Spaces
Diffstat (limited to 'buttons.asm')
-rw-r--r--buttons.asm540
1 files changed, 270 insertions, 270 deletions
diff --git a/buttons.asm b/buttons.asm
index 4d0c92f..05a2953 100644
--- a/buttons.asm
+++ b/buttons.asm
@@ -3,324 +3,324 @@ BUTTONS_TMP .rs 1 ; temporary variable for buttons
BUTTONS_HOLD_TIME .rs 1 ; up/down/left/right buttons hold time
KONAMI_CODE_STATE .rs 1 ; Konami Code state
- ; controller reading, two times
+ ; controller reading, two times
read_controller:
- pha
- tya
- pha
- txa
- pha
- jsr .real ; first read
- ldx <BUTTONS_TMP
- jsr .real ; second read
- cpx <BUTTONS_TMP ; lets compare values
- bne .end ; ignore it if not equal
- stx <BUTTONS ; storing value
- txa
- and #%11110000 ; up/down/left/right
- beq .no_up_down ; is pressed?
- inc <BUTTONS_HOLD_TIME ; increasing hold time
- lda <BUTTONS_HOLD_TIME
- cmp #60 ; is it holding long enought?
- bcc .end ; no
- lda #0 ; yes, it's long enought, so lets "release" buttons
- sta <BUTTONS
- lda #50 ; autorepeat time
- sta <BUTTONS_HOLD_TIME
- jmp .end
+ pha
+ tya
+ pha
+ txa
+ pha
+ jsr .real ; first read
+ ldx <BUTTONS_TMP
+ jsr .real ; second read
+ cpx <BUTTONS_TMP ; lets compare values
+ bne .end ; ignore it if not equal
+ stx <BUTTONS ; storing value
+ txa
+ and #%11110000 ; up/down/left/right
+ beq .no_up_down ; is pressed?
+ inc <BUTTONS_HOLD_TIME ; increasing hold time
+ lda <BUTTONS_HOLD_TIME
+ cmp #60 ; is it holding long enought?
+ bcc .end ; no
+ lda #0 ; yes, it's long enought, so lets "release" buttons
+ sta <BUTTONS
+ lda #50 ; autorepeat time
+ sta <BUTTONS_HOLD_TIME
+ jmp .end
.no_up_down:
- lda #0 ; reset hold time
- sta <BUTTONS_HOLD_TIME
+ lda #0 ; reset hold time
+ sta <BUTTONS_HOLD_TIME
.end:
- pla
- tax
- pla
- tay
- pla
- rts
-
- ; real controller read, stores buttons to BUTTONS_TMP
+ pla
+ tax
+ pla
+ tay
+ pla
+ rts
+
+ ; real controller read, stores buttons to BUTTONS_TMP
.real:
- ;php
- lda #1
- sta $4016
- lda #0
- sta $4016
- ldy #8
+ ;php
+ lda #1
+ sta $4016
+ lda #0
+ sta $4016
+ ldy #8
.read_button:
- lda $4016
- and #$03
- cmp #$01
- ror <BUTTONS_TMP
- dey
- bne .read_button
- rts
+ lda $4016
+ and #$03
+ cmp #$01
+ ror <BUTTONS_TMP
+ dey
+ bne .read_button
+ rts
; check buttons state and do some action
buttons_check:
- ; if buttons are not pressed at all return immediately
- lda <BUTTONS
- cmp #$00
- bne .start_check
- rts
+ ; if buttons are not pressed at all return immediately
+ lda <BUTTONS
+ cmp #$00
+ bne .start_check
+ rts
.start_check:
- jsr konami_code_check
+ jsr konami_code_check
.button_a:
- lda <BUTTONS
- and #%00000001
- beq .button_b
- jsr start_sound
- jmp start_game
-
+ lda <BUTTONS
+ and #%00000001
+ beq .button_b
+ jsr start_sound
+ jmp start_game
+
.button_b:
- lda <BUTTONS
- and #%00000010
- beq .button_start
- ; nothing to do
- jmp .button_end
-
+ lda <BUTTONS
+ and #%00000010
+ beq .button_start
+ ; nothing to do
+ jmp .button_end
+
.button_start:
- lda <BUTTONS
- and #%00001000
- beq .button_up
- jsr start_sound
- jmp start_game
+ lda <BUTTONS
+ and #%00001000
+ beq .button_up
+ jsr start_sound
+ jmp start_game
.button_up:
- lda <BUTTONS
- and #%00010000
- beq .button_down
- jsr bleep
- lda <SELECTED_GAME
- sec
- sbc #1
- sta <SELECTED_GAME
- lda <SELECTED_GAME+1
- sbc #0
- sta <SELECTED_GAME+1
- bmi .button_up_ovf
- jsr .check_separator_up
- jmp .button_end
+ lda <BUTTONS
+ and #%00010000
+ beq .button_down
+ jsr bleep
+ lda <SELECTED_GAME
+ sec
+ sbc #1
+ sta <SELECTED_GAME
+ lda <SELECTED_GAME+1
+ sbc #0
+ sta <SELECTED_GAME+1
+ bmi .button_up_ovf
+ jsr .check_separator_up
+ jmp .button_end
.button_up_ovf:
- lda games_count
- sec
- sbc #1
- sta <SELECTED_GAME
- lda games_count+1
- sbc #0
- sta <SELECTED_GAME+1
- jmp .button_end
+ lda games_count
+ sec
+ sbc #1
+ sta <SELECTED_GAME
+ lda games_count+1
+ sbc #0
+ sta <SELECTED_GAME+1
+ jmp .button_end
.button_down:
- lda <BUTTONS
- and #%00100000
- beq .button_left
- jsr bleep
- lda <SELECTED_GAME
- clc
- adc #1
- sta <SELECTED_GAME
- lda <SELECTED_GAME+1
- adc #0
- sta <SELECTED_GAME+1
- cmp games_count+1
- bne .button_down_not_ovf
- lda <SELECTED_GAME
- cmp games_count
- beq .button_down_ovf
+ lda <BUTTONS
+ and #%00100000
+ beq .button_left
+ jsr bleep
+ lda <SELECTED_GAME
+ clc
+ adc #1
+ sta <SELECTED_GAME
+ lda <SELECTED_GAME+1
+ adc #0
+ sta <SELECTED_GAME+1
+ cmp games_count+1
+ bne .button_down_not_ovf
+ lda <SELECTED_GAME
+ cmp games_count
+ beq .button_down_ovf
.button_down_not_ovf:
- jsr .check_separator_down
- jmp .button_end
+ jsr .check_separator_down
+ jmp .button_end
.button_down_ovf:
- lda #0
- sta <SELECTED_GAME
- sta <SELECTED_GAME+1
- jmp .button_end
-
+ lda #0
+ sta <SELECTED_GAME
+ sta <SELECTED_GAME+1
+ jmp .button_end
+
.button_left:
- lda <BUTTONS
- and #%01000000
- beq .button_right
- lda <SELECTED_GAME
- bne .button_left_bleep
- lda <SELECTED_GAME+1
- bne .button_left_bleep
- jmp .button_right
+ lda <BUTTONS
+ and #%01000000
+ beq .button_right
+ lda <SELECTED_GAME
+ bne .button_left_bleep
+ lda <SELECTED_GAME+1
+ bne .button_left_bleep
+ jmp .button_right
.button_left_bleep:
- jsr bleep
- lda <SCROLL_LINES_TARGET
- sec
- sbc #10
- sta <SCROLL_LINES_TARGET
- lda <SCROLL_LINES_TARGET+1
- sbc #0
- sta <SCROLL_LINES_TARGET+1
- bmi .button_left_ovf
- jmp .button_left2
+ jsr bleep
+ lda <SCROLL_LINES_TARGET
+ sec
+ sbc #10
+ sta <SCROLL_LINES_TARGET
+ lda <SCROLL_LINES_TARGET+1
+ sbc #0
+ sta <SCROLL_LINES_TARGET+1
+ bmi .button_left_ovf
+ jmp .button_left2
.button_left_ovf:
- lda #0
- sta <SCROLL_LINES_TARGET
- sta <SCROLL_LINES_TARGET+1
+ lda #0
+ sta <SCROLL_LINES_TARGET
+ sta <SCROLL_LINES_TARGET+1
.button_left2:
- lda <SELECTED_GAME
- sec
- sbc #10
- sta <SELECTED_GAME
- lda <SELECTED_GAME+1
- sbc #0
- sta <SELECTED_GAME+1
- bmi .button_left_ovf2
- jsr .check_separator_up
- jmp .button_end
+ lda <SELECTED_GAME
+ sec
+ sbc #10
+ sta <SELECTED_GAME
+ lda <SELECTED_GAME+1
+ sbc #0
+ sta <SELECTED_GAME+1
+ bmi .button_left_ovf2
+ jsr .check_separator_up
+ jmp .button_end
.button_left_ovf2:
- lda #0
- sta <SELECTED_GAME
- sta <SELECTED_GAME+1
- jmp .button_end
+ lda #0
+ sta <SELECTED_GAME
+ sta <SELECTED_GAME+1
+ jmp .button_end
.button_right:
- lda <BUTTONS
- and #%10000000
- bne .button_right_check
- jmp .button_end
+ lda <BUTTONS
+ and #%10000000
+ bne .button_right_check
+ jmp .button_end
.button_right_check:
- ; need to bleep if it's not last game
- lda <SELECTED_GAME
- clc
- adc #1
- cmp games_count
- bne .button_right_bleep
- lda <SELECTED_GAME
- clc
- adc #1
- lda <SELECTED_GAME+1
- adc #0
- cmp games_count+1
- bne .button_right_bleep
- jmp .button_end
+ ; need to bleep if it's not last game
+ lda <SELECTED_GAME
+ clc
+ adc #1
+ cmp games_count
+ bne .button_right_bleep
+ lda <SELECTED_GAME
+ clc
+ adc #1
+ lda <SELECTED_GAME+1
+ adc #0
+ cmp games_count+1
+ bne .button_right_bleep
+ jmp .button_end
.button_right_bleep:
- jsr bleep
- lda <SCROLL_LINES_TARGET
- clc
- adc #10
- sta <SCROLL_LINES_TARGET
- lda <SCROLL_LINES_TARGET+1
- adc #0
- sta <SCROLL_LINES_TARGET+1
- ; scrolling overflow test
- lda <SCROLL_LINES_TARGET
- sec
- sbc maximum_scroll
- lda <SCROLL_LINES_TARGET+1
- sbc maximum_scroll+1
- bcs .button_right_ovf
+ jsr bleep
+ lda <SCROLL_LINES_TARGET
+ clc
+ adc #10
+ sta <SCROLL_LINES_TARGET
+ lda <SCROLL_LINES_TARGET+1
+ adc #0
+ sta <SCROLL_LINES_TARGET+1
+ ; scrolling overflow test
+ lda <SCROLL_LINES_TARGET
+ sec
+ sbc maximum_scroll
+ lda <SCROLL_LINES_TARGET+1
+ sbc maximum_scroll+1
+ bcs .button_right_ovf
.button_right_not_ovf:
- jmp .button_right2
+ jmp .button_right2
.button_right_ovf:
- lda maximum_scroll
- sta <SCROLL_LINES_TARGET
- lda maximum_scroll+1
- sta <SCROLL_LINES_TARGET+1
+ lda maximum_scroll
+ sta <SCROLL_LINES_TARGET
+ lda maximum_scroll+1
+ sta <SCROLL_LINES_TARGET+1
.button_right2:
- lda <SELECTED_GAME
- clc
- adc #10
- sta <SELECTED_GAME
- lda <SELECTED_GAME+1
- adc #0
- sta <SELECTED_GAME+1
- ; selected game overflow test
- lda <SELECTED_GAME
- sec
- sbc games_count
- lda <SELECTED_GAME+1
- sbc games_count+1
- bcs .button_right_ovf2
+ lda <SELECTED_GAME
+ clc
+ adc #10
+ sta <SELECTED_GAME
+ lda <SELECTED_GAME+1
+ adc #0
+ sta <SELECTED_GAME+1
+ ; selected game overflow test
+ lda <SELECTED_GAME
+ sec
+ sbc games_count
+ lda <SELECTED_GAME+1
+ sbc games_count+1
+ bcs .button_right_ovf2
.button_right_not_ovf2:
- jsr .check_separator_down
- jmp .button_end
+ jsr .check_separator_down
+ jmp .button_end
.button_right_ovf2:
- lda games_count
- sec
- sbc #1
- sta <SELECTED_GAME
- lda games_count+1
- sbc #0
- sta <SELECTED_GAME+1
- jmp .button_end
+ lda games_count
+ sec
+ sbc #1
+ sta <SELECTED_GAME
+ lda games_count+1
+ sbc #0
+ sta <SELECTED_GAME+1
+ jmp .button_end
.button_none:
- ; this code shouldn't never ever be executed
- rts
-
+ ; this code shouldn't never ever be executed
+ rts
+
.button_end:
- jsr set_cursor_targets ; updating cursor targets
- jsr wait_buttons_not_pressed
- rts
+ jsr set_cursor_targets ; updating cursor targets
+ jsr wait_buttons_not_pressed
+ rts
; need to skip separator when scrolling upwards
.check_separator_down:
- lda <SELECTED_GAME+1
- jsr select_bank
- ldx <SELECTED_GAME
- lda loader_data_game_type, x
- and #$80
- beq .check_separator_down_end
- lda <SELECTED_GAME
- clc
- adc #1
- sta <SELECTED_GAME
- lda <SELECTED_GAME+1
- adc #0
- sta <SELECTED_GAME+1
- jmp .check_separator_down
+ lda <SELECTED_GAME+1
+ jsr select_bank
+ ldx <SELECTED_GAME
+ lda loader_data_game_type, x
+ and #$80
+ beq .check_separator_down_end
+ lda <SELECTED_GAME
+ clc
+ adc #1
+ sta <SELECTED_GAME
+ lda <SELECTED_GAME+1
+ adc #0
+ sta <SELECTED_GAME+1
+ jmp .check_separator_down
.check_separator_down_end:
- rts
+ rts
; need to skip separator when scrolling downwards
.check_separator_up:
- lda <SELECTED_GAME+1
- jsr select_bank
- ldx <SELECTED_GAME
- lda loader_data_game_type, x
- and #$80
- beq .check_separator_up_end
- lda <SELECTED_GAME
- sec
- sbc #1
- sta <SELECTED_GAME
- lda <SELECTED_GAME+1
- sbc #0
- sta <SELECTED_GAME+1
- jmp .check_separator_up
+ lda <SELECTED_GAME+1
+ jsr select_bank
+ ldx <SELECTED_GAME
+ lda loader_data_game_type, x
+ and #$80
+ beq .check_separator_up_end
+ lda <SELECTED_GAME
+ sec
+ sbc #1
+ sta <SELECTED_GAME
+ lda <SELECTED_GAME+1
+ sbc #0
+ sta <SELECTED_GAME+1
+ jmp .check_separator_up
.check_separator_up_end:
- rts
-
- ; waiting for button release
+ rts
+
+ ; waiting for button release
wait_buttons_not_pressed:
- jsr waitblank ; waiting for v-blank
- lda <BUTTONS
- bne wait_buttons_not_pressed
- rts
-
+ jsr waitblank ; waiting for v-blank
+ lda <BUTTONS
+ bne wait_buttons_not_pressed
+ rts
+
konami_code_check:
- ldy <KONAMI_CODE_STATE
- lda konami_code, y
- cmp <BUTTONS
- bne konami_code_check_fail
- iny
- jmp konami_code_check_end
+ ldy <KONAMI_CODE_STATE
+ lda konami_code, y
+ cmp <BUTTONS
+ bne konami_code_check_fail
+ iny
+ jmp konami_code_check_end
konami_code_check_fail:
- ldy #0
- lda konami_code ; in case when newpressed button is first button of code
- cmp <BUTTONS
- bne konami_code_check_end
- iny
+ ldy #0
+ lda konami_code ; in case when newpressed button is first button of code
+ cmp <BUTTONS
+ bne konami_code_check_end
+ iny
konami_code_check_end:
- sty <KONAMI_CODE_STATE
- rts
+ sty <KONAMI_CODE_STATE
+ rts
konami_code:
- .db $10, $10, $20, $20, $40, $80, $40, $80, $02, $01
+ .db $10, $10, $20, $20, $40, $80, $40, $80, $02, $01
konami_code_length:
- .db 10
+ .db 10