Posts by dg5kr

    Da muß ich einen Freund aktivieren, da meine 1541 defekt ist. Kann etwas dauern, da ic jetzt erstmal 3 Wochen in Urlaub bin :pumpkin:


    Habe ich vor ca. 1 Jahr bei

    einer bekannten Kleinanzeigen Plattform für 20€ erstanden :thumbsup:


    Man beachte die Seriennummer und das beste: eine beigelegte Sicherheitskopie. Übrigens, die Disketten funktionieren noch einwandfrei

    BASIC 4.5: Neues Update.
    Ich habe ein paar kleine korrekturen durchgeführt. Weiter habe ich den MONITOR um einen Befehl 'B' erweitert. Damit läßt sich beim M(emory), H(unt), und D(isassembler) in der Ausgabe zwischen ROM und RAM umschalten.
    Das Handbuch wurde von mir nicht nur aktualisiert, sondern auch um die Änderungen der ZERO-Page und andere wichtige Speicherstellen erweitert. Allein dafür lohnt sich ein erneuter Download.


    Code
    1. ;------------------------------------------------------------------------------
    2. ; 22.08.2022:
    3. ; CHANGE: Umbenennen von INFO in NOTE
    4. ;------------------------------------------------------------------------------
    5. ; 22.08.2022:
    6. ; IMPROVE: Monitor um einen BEFEHL 'B' (BANK) um über $07F8 (0=ROM/80=RAM) zu switchen.
    7. ;------------------------------------------------------------------------------
    8. ; 22.08.2022:
    9. ; TODO: Dokumantation anpassen.
    10. ;------------------------------------------------------------------------------


    Viel Spaß beim BASIC Coden.


    Leider macht mein Apache ein paar Probleme seit dem letzten Linuxupdate. Daher steht der Downloadlink gerade nicht zur Verfügung. Ich arbeite dran. Deshalb habe ich die Files als Anhang dieser Nachricht dran gehangen.


    ---> Problem behoben. Downloadlink geht wieder.

    Hallo Fans von BASIC 4.5. Nach langer Zeit möchte ich euch eine neue Version zum Download bereitstellen.

    Der BASIC Editor (Scrollfunktion mit den Cursortasten) hat mich einiges an "Nerven" gekostet :wand.

    Ich habe den alten Teil von vor 6 Monaten komplett über Board geworfen und von ganz neu begonnen. Manchmal müssen halt alte Zöpfe ab.

    Zum Detail: Neben den gewohnten Befehlserweiterungen läßt sich nun das Listing mit den Cursor Up/Down über den Screen rauf und runter scrollen. Entscheidend ist dabei entweder mal sich des LIST Befehl bedient hat, oder eine BASIC Zeile steht in der ersten oder letzten Zeile (Vorletzte bei 80 Zeichen).

    Das Handbuch ist zum Teil schon überarbeitet, aber noch nicht in der endgültigen Fassung. Dazu werde ich bald eine neue Version hier bereit stellen.


    Viel Spaß beim BASIC Coden mit BASIC 4.5


    Achja, der Downloadlink, falls Ihr meine Signatur ausgebendet habt: Hier gibts das BASIC 4.5

    kurze Frage: kann ich im C64Studio bei einem Breakpoint Register on the fly ändern? Gerne würde ich beim Debuggen damit bestimmte Situationen erzeugen. Gleiches gilt für die Speicheranzeige. Danke für sie Antwort.

    Ui, das hatte ich auch schon mal überlegt. Gibt es aber im C64Studio derzeit nicht.


    Einen Code festlegen ist ja einfach (* = Adresse), aber den Rest drumherum "fliessen" lassen, ist nicht ohne. Wo kann man "sicher" schneiden? Woher weiß ich, dass ein RTS ein sicherer Schnittpunkt ist?

    Wenn ich einen Block im Source mit !START NAME und !ENDE NAME definiere, dann ersetzt !ENDE NAME quasi die Suche nach einem RTS. Der Block soll ja unabhängig vom Programm nur fest im Speicher definiert ein. Wenn es eine Überlappung gibt dann müsste der Assembler ein JMP "zum Ende dieses Blockes" einbauen. Ich gebe zu, das ist eine echte Herausforderung.

    Was wäre der Benefit? Ich habe einige (richtug gute) Programmschnipsel aus früheren Zeiten, in denen noch mit "schmutzigen" Tricks gearbeitet wurde. Zum Beispiel wurde gerne in dem in Bytes zwischen den Befehl gesprungen. Daraus ergab sich dann für die CPU ein ganz anderer Befehl. Auch selbst modifizierende Programme wurden gern genutzt. Das macht die Portierung oder Integration in anderen Programmen mit Crosscompilern sehr schwierig.
    So könnte ich den Source 1:1 stehen lassen. Ist nicht tragisch. Für mich sollte "nur" Zeit sparen.

    Einen Tel Assembler Codes fest im Memory plazieren.

    Hallo zusammen. Eine kurze Frage: wie bekomme ich es in einem Projekt hin, das ein Teil des Sources immer an der gleichen Stellle im Memory liegt und der Rest quasi beim Build sich davor und danch (also drum herum) baut. Geht das überhaupt?

    Auch nicht. PEEK(213) gibt immer den Wert 11 zurück. Diese Register sollten vielleicht zuerst wieder ihre übliche Funktion zurückerhalten.

    Es ist auch die Frage, in welchem Moment die Zeilenlänge gebraucht wird, denn der Cursor könnte sich ja sonst wo befinden.

    Ja das ist richtig. Bevor man sich in das o. g. Beispiel verliert sollte ich nochmal den Grund der Nachfrage erläutern. Denn der Cursor kann tatsächlich sonst wo sein.

    Mein Scrolleditor prüft unter anderem ob in den ersten und letzten Zeilen sich Zeilennummern im Bildschirm befinden. Damit setze ich einen Merker der dann statt den Bildschirminhalt zu scrollen, die BASIC Zeilen je nach CURSOR UP/DOWN von oben nach unten oder von unten nach oben zu listen. Dabei versuche ich die zuletzt gezeigte BASIC Zeile zu nutzen um daraus die Vorherige oder nächste zu holen.

    Das funktioniert prima. Sobald aber eine Zeile >40 ist und dort an Position 0-5 der zweiten physischen Zeile (Bildschirmzeile) eine Zahl steht, wird das als Zeilennummer angenommen, was falsch ist.

    Daher muss ich in meiner Prüfung feststellen, ob die Zeile z. B. in Zeile 23 eine Überlange Zeile ist, damit ich nicht die Zahl aus Zeile 24 dieser logischen Zeile als BASIC Zeilennummer annehme, dann das ist ja bloß eine Zahl eines Argumentes und keine BASIC Zeilennummer.


    Und ja, der Editor in BASIC 4.5 ist kompltt umgebaut worden. Er beherscht unter anderem die Escape Codes des PLUS/4 um im Screen Zeilen zu löschen, einzufügen, scrollen und so weiter. Daher gibt es zum Teil erheblich Abweichungen zum V2.

    Im Beispiel oben, Cursor unterm "READY":

    PRINT"{UP}{UP}{UP}";:IFPEEK(211)>39THENPRINT"LANGE ZEILE"

    In Assembler entsprechend.

    Sorry für die später Antwort. Job, Job, Job.....
    Hmm, die Adresse $D3 (211) steht für
    Position des Cursors innerhalb einer logischen Zeile und sagt nichts über die Zeilenlänge aus.

    Das Beispiel oben (getestet) funktioniert nicht. $D3 gibt imm 0 aus, weil der Cursor in Spalte 0 des Bildschirm steht. Den Cursor in eine gelistet Zeile zu positionieren und $D3 auszulesen bringt nichts, da $D3 nicht aktualisiert wird.

    $D3 wird nur bei Eingabe eines Zeichens aktualisiert. Aber: Sobald RETURN gedrückt wird und der Cursor in die zweite Zeiler einer logischen Zeile kommt, fängt $D3 nicht mit 40 an, sondern wieder bei 0.


    Schade. Aber leider funktioniert die Lösung nicht.

    Hallo C64 Assembler Spezialisten,

    ich habe da wieder mal eine kleine Nuss zu knacken, die aber wahrscheinlich nur eine dünne Schale hat.

    Für meinen Scrolleditor im BASIC 4.5 muss ich feststellen, ob die zu letzt gelistet Zeile > 40 Zeichen ist.

    Das mache ich m. e. am besten in dem ich die lögische Zeilenlänge prüfe.

    Ich finde zwar einige Speicherstellen, die bestimmen ob eine logische Zeile vorliegt. Aber nirgends finde ich eine Information über die Länge der logischen Zeile.

    Gibt es irgendwo eine Information aus wo ich zumindest diese Länge berechnen könnte?

    Wichtig ist dabei die Länge der letzten gelisteten Zeile, nicht der aktuell eingegebenen. Also in etwa so:



    Für die vielen Ideen und Lösungshinweisen schon jetzt einen riesen Dank!!

    Schon wieder eine neue Version. Eine Verbesserung bringt leider auch neue BUGs :D

    Das Rückwärts Scrollen wurde um einiges schneller.

    Es gibt aber immer noch ein paar BUGGs. Siehe History. Weiter habe ich noch einen Fehler im FIND gefunden, der den C64 abstürzen ließ.

    ;------------------------------------------------------------------------------

    ; 18.02.2022:

    ; FIX: FIND "bla",1 ließ den C64 einfrieren. Fehler in der LIST Routine beseitigt.

    ;------------------------------------------------------------------------------

    ; 18.02.2022:

    ; IMPROVE: Rückwärtsscrollen wurde deutlich beschleunigt.

    ; Offene Baustellen sind Cursor blinken geht danach nicht ??

    ; Beim runter scrollen springt der Cursor manchmal auf Zeile 2 ??

    ;------------------------------------------------------------------------------

    Download über den Link in meiner Signatur.

    Hallo, in der Version 7.0.3 gibt es ein Darstellungsproblem ab dem zweiten Memory View Fenster. Im Byte-Teil sind da plötzlich Lücken, bzw. Leerzeichen:


    Stellt man nur ein Memory View da, ist aller klar. Ab dem zweiten gibt es diesen Effekt. ?(

    I'm interested in making a *very simple* change in the original BASIC 3.5 by Michael Schimek. Simply put 14 in 53281 and 1 in 53280 location at the start (change border and screen color). But at the offset 0x432 there is such code

    Code
    1. A2 76 LDX #$76
    2. 8E F6 02 STX $02F6
    3. 8E 20 D0 STX $D020
    4. E8 INX
    5. 8E F2 02 STX $02F2
    6. 8E 21 D0 STX $D021

    The "LDX #76" is large 2 bytes, but "INX" just 1, so I can't put there a "LDX #01" before "STX $02F2 / STX $D021"

    How would you do that?

    Thanks in advance!

    Replace the code above with this code and you are happy:

    Code
    1. LDX #$00 ;black
    2. STX $0286 ;char color in black
    3. LDX #$06 ;blue
    4. STX $D020 ;Frame color in blue
    5. LDX #$03 ;cyan
    6. STX $D021 ;background color in cyan

    KR

    Robert

    BASIC 4.5 ist wieder ein wenig besser geworden. Der SCROLLEDITOR wurde nun deutlich bedienbarer gemacht.

    Ist ein BASIC Listing auf den Bildschirm, so lässt sich mit CURSOR DOWN / SHIFT+CURSOR DOWN ohne CTRL - das habe ich wieder entfernt) das Listing rauf oder runter scrollen.

    Einige Baustellen sind allerdings noch da:

    Cursor blinken geht danach nicht ??

    Beim runter scrollen springt der Cursor manchmal auf Zeile 2 ??

    Zeile 1 wird beim hochscrollen nicht angezeigt ??

    Ich arbeite dran.
    Viel Spaß beim BASIC Coden mit BASIC 4.5.


    Download wie immer mit dem Link im Footer.

    lso so ganz verstehe ich die Aufgabenstellung noch immer nicht. Wenn ich schon lese, dass in einem IRQ-Handler eine "Ausgabe" stattfinden soll, orte ich irgendwie ein konzeptionelles Problem. Die Kernel-Routinen sind nicht generell reentrant. D.h. wenn eine solche Routine von einem IRQ unterbrochen wird und in eben dieser die Routine aufgerufen wird, dann ist der "State" der Routine beim Eintritt nicht konsistent und wird durch den neuerlichen Aufruf korrumpiert und bei der Rückkehr aus dem IRQ muss die unterbrochene Routine mit einem unerwartet modifizierten Zustand weiterarbeiten, was dann zu unerwarteten Nebenwirkungen führen kann.


    Ich muss Jeek hier in allen Punkten recht geben. Es ist ein konzeptioneller Fehler eine ohnehin schon Zeit.- und Zustandskritische IRQ Routine mit zu vielen I/O Abfragen und Ausgaben (z.B. Bildschirm ausgaben) zu überfrachten. Wird der IRQ für eigene Zwecke benötigt, dann darf maximal auf das zu prüfende Ereignis (Tastendruck o.ä) verzweigt werden. Tritt das persönlich gewünschte Ereignis ein, sollte der IRQ Handler wieder in sich "geschlossen" werden und erst dann wird meine Routine verabeitet.
    Was heißt das nun konkret in meinem Fall? Nun, der IRQ wurde "erweitert" um die Taste CURSOR DOWN und SHIFT+CURSOR DOWN abzufragen. Wurde keiner der beiden Tasten gedrückt, läuft der IRQ einfach weiter.

    Wurde eine solche Taste gedrückt, dann setze ich den IRQ Vector wieder auf den "originalen" Wert und ich verarbeite meine eigene Routine unabhängig vom weiter laufenden IRQ. Nach Beendigung meines Programms erweitere ich den IRQ wieder auf "beobachte CURSOR DOWN". Das funktioniert soweit recht ordentlich.

    Muss ich also innerhalb eines IRQ Handlers eine eigene Ausgabe Routine schreiben?

    Eigentlich muss ich den IRQ nur deshalb nutzen um zwei bestimmte Tasten (Cursor down / Shift+Cursor down) abfragen. Danach kann der eigentliche Handler sein Arbeit tun.

    Wäre es nicht sinnvoll folgendes zu tun:

    IRQ auf meine Routine verbiegen (0314) und die beiden Tastenkombinationen abfragen.

    Keine der Tasten gedrückt, dann weiter zum originalen Handler.

    Einer der beiden Tasten gedrückt ——> biege 0314 auf den originalen Handler und füre meine Routine weiter aus.

    Meine Routine ist fertig, dann biege 0314 wieder um damit die Tasten abgefragr werden.


    könnte das klappen?