Cursorsteuerung leicht gemacht
Bei professionellen Programmen der PC-Klasse kann der Cursor meist über Eingabegeräte wie die Maus positioniert werden. Daß es auch recht gut mit dem Joystick und dem C 64 funktioniert, beweist dieses Programm.
Haben Sie den kurzen MSE-Lader eingetippt und gestartet, können Sie den Cursor mit einem Joystick in Port 2 steuern. Das Steuerprogramm befindet sich ab Adresse $C000 bis $C066 im Speicher. Die ersten 15 Bytes nimmt eine Initialisierungsroutine in Anspruch, die den Interruptvektor auf $C00F legt und das Steuerprogramm in den Kernalinterrupt einbindet. Die Routine wird mit SYS 49152 aufgerufen. Das Programm benutzt Speicherzelle $02 als Zählregister, da der Joystick nur bei jedem sechsten Interrupt abgefragt wird. In Zeile 300 des Assemblerlistings wird die Zählvariable um 1 erniedrigt. Ist die Variable 0, wird sie auf 6 gesetzt und in die Steuerungsroutine verzweigt. Ab Zeile 360 wird der Tastaturpuffer auf freien Platz überprüft. Sollte der Puffer voll sein, wird sofort in die Interruptroutine des Betriebssystems ($EA31) gesprungen. In Zeile 400 wird der Joystick abgefragt und das entsprechende Cursorsteuerzeichen in den Akku geladen. Ab 800 wird das Zeichen in den Tastaturpuffer geschrieben und der Pufferzeiger erhöht.
(P.Siepen/hm)PROGRAMM : CURSORSTEUERUNG C000 C066 ----------------------------------- C000 : A9 0F 8D 14 03 A9 C0 8D B2 C008 : 15 03 A9 06 85 02 60 C6 41 C010 : 02 F0 03 4C 31 EA A9 06 F2 C018 : 85 02 A6 C6 E0 08 90 03 B7 C020 : 4C 31 EA AD 00 DC 29 01 03 C028 : C9 00 D0 05 A9 91 20 5E 2A C030 : C0 AD 00 DC 29 02 C9 00 2C C038 : D0 05 A9 11 20 5E C0 AD 6B C040 : 00 DC 29 04 C9 00 D0 05 63 C048 : A9 9D 20 5E C0 AD 00 DC C7 C050 : 29 08 C9 00 D0 05 A9 1D 06 C058 : 20 5E C0 4C 31 EA A6 C6 F4 C060 : 9D 77 02 E6 C6 60 A2
10 REM*********************************
20 REM* CURSOR STEUEREUNG *
30 REM* *
65 REM* PETER SIEPEN *
70 REM* *
75 REM* VON-STEPHAN-STR.6 *
80 REM* *
82 REM* 4200 OBERHAUSEN 1 *
84 REM* *
85 REM* TELEFON :(0208)/26555 *
90 REM*********************************
95 :
100 SYS9*4096
110 .OPT P,OO
111 :
112 :
113 :
114 :
120 *= $C000
125 :
130 :
140 :
150 TEST = $02 ;ZAEHLVARIABLE
160 JOY = 56320 ;PORT #2
170 AZITP = $C6 ;ANZAHL ZEICHEN IM PUFFER
174 :
175 :
180 LDA #<BEGINN;INTERUPTVEKTOR
185 STA $314
190 LDA #>BEGINN;AUF NEUE
195 STA $315 ;ADDRESSE SETZEN
200 LDA #$06 ;ZAEHLVARIABLE
205 STA TEST ;HOCHSETZEN
210 RTS ;ZURUECK ZU BASIC
215 :
220 :
225 :
300 BEGINN DEC TEST
320 : BEQ START ;GENUG LEER IRR
330 : JMP $EA31 ;NEIN WEITER MIT IRR
340 START LDA #$06 ;ZAEHLVARIABLE HOCHSETZEN
350 : STA TEST
360 : LDX AZITP ;TASTATURPUFFER
370 : CPX #$08 ;VOLL
380 : BCC WEITER
390 : JMP $EA31 ;JA WEITER MIT INTERUPT
400 WEITER LDA JOY ;WENN JOY NICHT
410 : AND #1 ;NACH OBEN
420 : CMP #0 ;WEITER
430 : BNE NOBEN
440 : LDA #"{up}" ;WENN JA STEUERZEICHEN
450 : JSR AUSG ;AUSGEBEN
460 NOBEN LDA JOY
470 : AND #2
480 : CMP #0
490 : BNE NUNTEN
500 : LDA #"{up}"
510 : JSR AUSG
520 NUNTEN LDA JOY
530 : AND #4
540 : CMP #0
550 : BNE NLINKS
560 : LDA #"{left}"
570 : JSR AUSG
580 NLINKS LDA JOY
590 : AND #8
600 : CMP #0
700 : BNE NRECHTS
710 : LDA #"{right}"
720 : JSR AUSG
730 NRECHTS JMP $EA31
740 :
750 :
760 :
770 :
780 :
790 :
800 AUSG LDX $C6 ;X-REG FUER
810 : STA $277,X ;INDIZIERTE
820 : INC AZITP ;ADDRESSIERUNG
830 : RTS ;LADEN
840 : ;IN TASTPUFFER
850 : ;SCHREIBEN
860 : ;ANZAHL ZEICHEN
870 : ;IM TASTPUFFER
880 : ;ERHOEHEN
890 :
900 :
READY.