Input Routine?
Input Routine?
von Heaven_tqa » Do 7. Sep 2006, 22:35
so... jetzt will ich gerade meinem rollenspiel beibringen, wie ich texte eingeben kann, z.b. für Namen des Charakters...
welche OS Routine benutzt ihr? oder wie mache ich das am besten in Assembler?
(bitte mit source code...)
merci.
von Bernd » Do 7. Sep 2006, 23:47
Hallo Heaven_tqa,
bislang habe ich immer versucht das OS zu umgehen. Hier meine Lösung:
In $2FA steht, wenn keine Taste betätigt wurde, $FF. Wird eine Taste gedrückt verändert sich der Wert in $2FA. Jetzt vergleiche ich den Inhalt mit der Tabelle und bekomme im X Register die Zahl entsprechend dem Alphabet A=0 B=1 C=2 usw.
Wichtig - nach dem Vergleich muss $FF in $2FA geschrieben werden sonst hängt das System.
LDA #$FF
STA $02FC ;CH
LDX #9 ; 10 Tabelleneinträge
LDA $02FC ;CH
weiter CMP Tabelle,X
BEQ gefunden
DEX
BPL weiter
CMP #$21 ; Space gedrückt?
BEQ Ende
Tabelle .byte 3F 15 12 3A 2A 38 3D 39 0D 01 05 00 25 23 08 0A
Bernd
von Heaven_tqa » Fr 8. Sep 2006, 23:52
warum das rad neu erfinden? ich brauche natürlich auch die üblichen editiermöglichkeiten, wie z.B. del usw...
von Bernd » Sa 9. Sep 2006, 15:02
Heaven_tqa hat geschrieben:warum das rad neu erfinden? ich brauche natürlich auch die üblichen editiermöglichkeiten, wie z.B. del usw...
Es ist zwar nicht das Rad jedoch gibt es mehrere Vorzüge. Die 128 Byte Eingabebegrenzung entfallen und man braucht auf die Entertaste zur Übernahme nicht zu warten.
Nachteile: Für die Bildschirmausgabe ist man selbst verantwortlich und für eine Editiermöglichkeit muss selbst gesorgt werden.
Wie soll denn die Eingabemaske für dein Spiel aussehen?
Wenn nur ein kleines Feld zur Verfügung steht wirst du mit den Biosroutienen nicht zum Erfolg kommen.
Bernd
von HiassofT » Sa 9. Sep 2006, 17:22
Die "Input-String" Funktion des Editors würde ich nicht verwenden, aber Du kannst einfach auf die "Get" Funktion des Keyboard-Handlers im OS zurückgreifen und Deine eigenen Edit-Funktionen selber implementieren. Ist etwas Aufwand, wenn Du auch Cursor Links/Rechts etc verwenden willst, ohne dem (also nur Ziffern/Buchstaben-Input, Del und Return) ist es recht simpel.
Wenn Du Code brauchst, schaue einfach mal im Freezer-Source-Code nach. Im CartEmu Menü (setbank.src, beginnend beim Label "LOOP") habe ich eine kleine Routine um die Bank einzugeben, in der eigentlichen Freezer-Software (MONITOR.M65, beginnend beim Label "DEBU5") gibt's eine komplexere Edit-Funktion.
so long,
Hias