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.