Tipps & Tricks rund um's Basic

Es gibt 46 Antworten in diesem Thema, welches 11.356 mal aufgerufen wurde. Der letzte Beitrag (30. Juli 2023 um 06:47) ist von atomcode.

  • Ich hab hier mal eben was kleines geschrieben.
    Ist eine Verschieberoutine in Assembler.
    Ziemlich klein und laesst alle ZeroPageAdressen im alten Zustand.
    Aufruf per

    Code
    SYS 828, von_msb, von_lsb, bis_msb, bis_lsb, nach_msb, nach_lsb

    lsb ist das niedrigere Byte einer vollen Adresse.
    Mal ein Beispiel:
    Bildschirmteil von $0400 bis $0500 nach $0600 kopieren:

    Code
    SYS 828,4,0,5,0,6,0

    Alles klar? nach $c000 verschieben waere:

    Code
    SYS 828,4,0,5,0,192,0

    Wer sowas braucht weiss sicher eh wie er/sie zu lsb und msb kommt (?).
    Etwas das man immer gebrauchen kann:
    Kompletten Bildschirm nach $c000 (49152) verschieben

    Code
    SYS 828,4,0,7,232,192,0

    und zurueck:

    Code
    SYS 828,192,0,195,232,4,0

    basic.prg ist dieses Programm.
    asm.prg ist das eigentlich assemblerprogramm das direkt nach 828 ($033c) = Tape-Puffer laedt.

  • Wer's lieber andersrum mag, also bei $0400 erst 00 dann 04 hat hier ne noch kleinere Version parat:
    73 Byte :wink:
    laden, NEW
    sys828,0,4,0,5,0,6 um von 0400-0500 nach 0600... zu kopieren.

    Da ich das hier eben fix verbrochen habe, sollte man es evtl. mal testen : D

  • Wer's lieber andersrum mag, also bei $0400 erst 00 dann 04 hat hier ne noch kleinere Version parat:
    73 Byte :wink:
    laden, NEW
    sys828,0,4,0,5,0,6 um von 0400-0500 nach 0600... zu kopieren.

    Da ich das hier eben fix verbrochen habe, sollte man es evtl. mal testen : D

    Coole Sache. Aber es scheint nur einmal zu funktionieren, jeder weitere Aufruf erzeugt einen Syntax Error.

    Dunkel war's und die Milch ward sauer,
    Da legte sich die Wurst auf die Lauer,
    Und schubste den Käse von der Mauer.

  • Nun aber, allerdings doch 80 Bytes...
    DAS hier also die funktionierende version mit MSB zu erst.
    auch Big-Endian genannt...

    Code
    sys828,0,4,0,5,0,6
  • eine kleine Minianwendung fuer das asm.prg mit 80 byte (big endian):

    Code
    10 sys828,0,4,232,7,0,192
    20 a=1024:f=49152:u=256
    30 read y:if y=1 then restore
    40 b=a+y*40:d=int((b-1)/u):e=b-d*u:
    46 i=abs(232-e):h=198-d-1
    50 sys828,0,192,i,h,e,d
    60 goto 30
    70 data 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
    80 data 21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

  • Mich würde ja mal interessieren was da rum kommt wenn man als Comporegeln sagt, 20(15?) Zeilen BASIC und 256 Byte Assembler...
    Das würde dann mal richtige Kreativität voraussetzen. :D

    Übrigens, es ist schneller per PRINT Befehl und Steuercodes den Cursor zu bewegen als wie mit dem "Cursor setzen"-POKESYS.

    Blog: Bitte melde dich an, um diesen Link zu sehen. - The Seventies Board: Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ein Terminal und ein Z80 :D

  • Vorweg empfehle ich dringendst
    Emu-Ecke
    Dort findet man massig POKEs und weitere Tipps&Tricks rund um BASIC V2.0.


    Ist übrigens ENDLICH wieder ONLINE:
    Bitte melde dich an, um diesen Link zu sehen.

    Danke an Donald!

  • Code
    wait198,1

    wartet auf Tastendruck (198 ist der Tastaturpuffer)


    Nimm lieber:

    Code
    wait198,255

    Das funktioniert immer, mit 1 geht's manchmal schief.

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • das ist beides quatsch ohne poke198,0 vorher. und dann geht auch wait 198,1 , und zwar immer :)

  • Zitat

    Ohne READY.
    Um die READY-Meldung im Basic zu ändern tippt man folgendes:

    Code
    A$=“TEXT.“ : FOR I = 1 TO 6 : POKE 41847+I, ASC (MID$ (A$, I, 1)): NEXT

    Anstelle des Wortes 'TEXT' setzt man das gewünschte Ersatzwort ein, dies darf aber nur höchstens 6 Zeichen haben.

    Hab das gerade von Donalds Seite. Funktioniert das bei wem? Hab es eben sowohl aufm Cevie als auch im CCS probiert, beides klappte ungefähr gar nicht.

    12345678901234567890123456789012345678901234567890
    12345678901234567890123456789012345678901234567890
    12345678901234567890123456789012345678901234567890

  • So, dann auch was von Mir! :winke:


    Characters and the Screen

    Code
    POKE 53272,21 .................... switch to uppercase mode
    POKE 53272,23 .................... switch to lowercase mode
    POKE 53280,C ..................... change border color (C=0-15)
    POKE 53281,C ..................... change screen color (C=0-15)
    POKE 646,C ....................... change cursor color (C=0-15)
    POKE 53265,PEEK(53265) AND 23 .... turn off screen display
    POKE 53265,PEEK(53265) OR 16 ..... turn on screen display


    The Keyboard


    Miscellaneous


    Speciality Commands

  • das ist beides quatsch ohne poke198,0 vorher. und dann geht auch wait 198,1 , und zwar immer :)


    Hehe, probier's doch einfach aus! WAIT 198,255 geht immer, auch OHNE poke 198,0. Erzähl du mir was von Quatsch... ;)

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Hehe, probier's doch einfach aus! WAIT 198,255 geht immer, auch OHNE poke 198,0. Erzähl du mir was von Quatsch...


    ach komm, denk doch mal ein stück weiter. ohne den tastaturpuffer vorher zu löschen wartet beides NICHT "auf tastendruck". stell dir zb mal ein spiel vor bei dem joystick port 1 benutzt wird, und bei game-over (oder sonstwas) kommt ne meldung nach der dann auf ne taste gewartet werden soll. an der stelle ist der tastaturpuffer voll mit grütze, und die abfrage rutscht einfach durch.

    (lustigerweise passiert das in vice nicht wie ich grad festgestellt hab... schon wieder ein bug .... =P) falsch, mein fehler :)

  • Hi Leute,

    hier mal ein OLD in Basic V2.0, man muss nur beachten das man nach einem NEW
    keine anderen eingaben macht ausser diese 4 zeilen und diese auch so eintippt wie
    sie da stehen. (natuerlich ohne die rem zeile)

    Code
    rem OLD aus Das Grosse Commodore 64 Buch von Data Becker
    pO(pE(43)+256*(pE(44)),1
    sys 42291:pO252,pE(35):pO251,pE(781)
    pO46,(pE(251)+256*pE(252)+2)/256
    pO45,(pE(251)+256*pE(252)+2)-pE(46)*256:clr

    und hier aus dem selben buch ein renumber welches aber keine spruenge
    sondern nur die zeilen nummern aendert.

    Code
    63900 ba=pE(43)+256*pE(44)
    63910 input "Startnummer";sa:input "Schrittweite";sw
    63920 hi=sa/256:lo=sa-hi*256
    63930 a=pE(ba+2)+256*pE(ba+3)
    63940 if a>=63900 then print "OK!":end
    63950 pO ba+2,lo:pO ba+3,hi
    63960 ba*pE(ba)+256*pE(ba+1):sa=sa+sw
    63970 ? sa "=" a:goto63920
    63980 rem einfach an das umzunummerrierende program mergen oder eintippen
    63990 rem und starten mit run 63900

    ich hoffe ihr koennt damit was anfangen ;)

    salute Haubitze

  • Ist da in Zeile 63960 ein Tipper drin? Müsste das nicht ba= PEEK( BA) ... sein?

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • pE (p und shift-e) und pO (p und shift+o) sind die Kurzformen für Peek und Poke.

    LIFE IS SHORT - Break the rules, do more, need less, smile often, be brave, stay true, dream big, forgive quickley, kiss slowly, love truly, laugh uncontrollably and never regret anything that made you smile.

  • Ja, nee, das ist mir klar. Ich meine, er hat da ba* irgendwas vorne drinstehen. Das tut ja so nichts, das sollte ja doch eine Zuweisung sein.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Oh, stimmt. Ich denke ein "=" könnte an der Stelle Sinn machen, also ba=pE(ba)+256*pE(ba+1):sa=sa+sw

    LIFE IS SHORT - Break the rules, do more, need less, smile often, be brave, stay true, dream big, forgive quickley, kiss slowly, love truly, laugh uncontrollably and never regret anything that made you smile.

  • oh ja das ist ein tippfehler. tschuldigt bitte hatte eigendlich nochma drueber
    gegugt aber den hab ich nich gesehn. und nun isses zu spaet zum editen :/
    ( also die zeile wie Draco korrigiert hatt eingeben )

    naja ihr wist ja ein paar kleine fehler muessen sein damit ihr nich einrostet ;)

    Salute

  • oh ja das ist ein tippfehler. tschuldigt bitte hatte eigendlich nochma drueber
    gegugt aber den hab ich nich gesehn. und nun isses zu spaet zum editen :/
    ( also die zeile wie Draco korrigiert hatt eingeben )

    Tse, es war doch aus einem Data Becker Buch, da sind von Haus aus mehr Fehler drinn als man durch normales Vertippen erzeugen kann. Eigentlich kann man durch Tippfehler nur eine Verbesserung des Codes erreichen. :bgdev

    Gruß WTE

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.