Commit 0a6352e1 authored by Flaxo's avatar Flaxo

examples for joystick action.

parent 5868f6fd
# Scroller
Textscroller oder Laufschriften sind einer der essenziellen Effekte in
......@@ -6,6 +9,6 @@ nach links laufendem text bis hin zu sogenannten SIN- (Sinus)
Scrollern, bei denen die Buchstaben ein einer Bewegungsrichtung hin
und her tanzen.
Eine schöne Einführung gibt es bei der ["Codebase
64"](https://codebase64.org/doku.php?id=base:text_scroll)
Eine schöne Einführung gibt es bei der [Codebase
64](https://codebase64.org/doku.php?id=base:text_scroll)
# Joystick
Die eingaben des Joysticks abfangen und auswerten. Im Prinzip wie
alles beim C64er ganz einfach: Man muss nur das Register $dc00 für
Port-1 und $dc01 für Port-2 auslesen... Aber dann hat man leider
erstmal nur einen recht unschönen 'POC' zum entprellen der Schalter
und für sanfte bewegungen braucht es dann doch noch etwas mehr
Engagement.
Wieder eine Einführung bei der [Codebase
64](https://codebase64.org/doku.php?id=base:joystick_input_handling)
und im
[Referenzhandbuch](https://gitli.stratum0.org/c64/cbm-c64prg_epub/blob/master/CBMC64PRG_06.md#06-4)
**Pro-Tip**: Wenn irgend etwas nicht auf Anhieb funktioniert liegt es
meist daran, dass der Joystick am falschen Port ist, bzw. das
Programm am falschen Port guckt.
1 rem
2 rem https://www.c64brain.com/devices/joystick-controller-for-commodore/
3 rem
5 print chr$(147)
8 x1=12 :y1=4 :co=0
10 fi=(peek(56320)and 16)/16
15 jo=not peek(56320)and 15
20 if jo=1 then gosub 210
25 if jo>0 then poke 53280,jo+(fi+2)
30 if jo=2 then gosub 240
40 if jo=4 then gosub 270
50 if jo=8 then gosub 300
60 :
70 poke 214,y1 :print :poke 211,x1 :poke 646,co :print chr$(65+int(co));
80 if fi<1 then co=1+rnd(0)*15
100 goto 10
200 rem move up
210 y1=y1-1:ify1<1theny1=19
220 return
230 rem move down
240 y1=y1+1:ify1>19theny1=1
250 return
260 rem move left
270 x1=x1-1:ifx1<1thenx1=39
280 return
290 rem move right
300 x1=x1+1:ifx1>39thenx1=1
310 return
;;
;; Assembly Language for Kids - Page 243
;;
;; The program draws low resolution lines on the screen. To keep it
;; simple and a little more flexible, we'll use the joystick LEFT to serve
;; as an eraser. Therefore, if you move the joystick UP, DOWN or
;; RIGHT, a line will be drawn. Move it left, and anything the cursor
;; hits will be erased.
;; ACME Assembler
!to "crudedraw.prg", cbm ; name of output, type of assembly
!cpu 6510 ; type of cpu
* = $c000
clear = $E544
jstick = $DC00
offset = $C200
fire = $C202
invrse = $C204
normal = $C206
mark = $C208
chrout = $FFD2
jsr clear
lda #$FF
sta offset
lda #$10
sta fire
lda #$20
sta mark
lda #$12
sta invrse
lda #$92
sta normal
start: lda jstick
eor offset
cmp #$01
beq up
cmp #$02 ; Joystick down?
beq down
cmp #$04 ; Joystick left?
beq left
cmp #$08 ; Joystick right?
beq right
cmp fire ; Fire button pressed?
beq end ; If so then end
cursor: lda mark ; Load the space
jsr chrout ; Print the space
lda #$9D ; Load the left cursor
jsr chrout ; Back up
lda normal
jsr chrout ; Set normal
lda mark
jsr chrout
lda #$9D
jsr chrout
lda invrse
jsr chrout
ldx #$00 ; Begin pause loop
pause: inx
cpx #$FE
bne pause ; End pause loop
jmp start
up: jsr back
lda #$91
jmp print
down: jsr back
lda #$11
jmp print
left: lda #$9D
jsr chrout
jmp print
right: lda #$1D
print: jsr chrout
lda mark
jsr chrout
jmp cursor
back: lda #$9D ; Subroutine
jsr chrout
rts
end: rts
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment