Gute Punkte, floats gibt es auch so halb, kommt auf die Liste
C64 Studio - Features Wunschliste
-
syshack -
April 29, 2018 at 5:19 AM -
Thread is Resolved
There are 410 replies in this Thread which has previously been viewed 69,308 times. The latest Post (
-
-
Lieber Endurion!
Ich arbeite ja mit diesen Strukturmacros.
Für das Erstellen des "Preprocessed File" würde ich mir einen Listingschalter wie zB "!liston" und "!listoff" wünschen.
Er sollte das Listen des Listings im "Preprocessed File" unterdrücken.
Der Sinn wäre, dass die ganzen hunderten Macrodefinitionen nicht im dem Listing im "Preprocessed File" stehen würden und das Programm bis zur Unkenntlichkeit entstellen würde. Weiter könnte man auch die Macro-Expansion auf die beiden !macro ... !end Zeilen beschränken, wenn man diese Befehel in der Macrodefinition gebrauchen würde.Ein Schalter wie "!showmacrolineon" und "...off" sollte einen Comment über/unter der Expansion machen mit dem Originalemakroaufruf.
Code355 $080D !macro MOV16i LOOP+1, 1024 <--- echter Aufruf aus dem Source Code 356 $080D A9 00 lda #<1024 357 $080F 8D 1A 08 sta ╚LOOP+1╝ 358 $0812 A9 04 lda #>1024 359 $0814 8D 1B 08 sta ╚LOOP+1╝ +1 360 $0817 A2 41 ldx #65 361 $0818 !end <--- Echtes letztes Byte $0818Ganz lieben Dank
Gruß, Thomas Please login to see this picture.
P.S. Was meinst du in "floats gibt es auch so halb" mit "so halb"?
-
Mit so halb meine ich, dass es für die Value-Tables Routinen gibt, die mit floats rechnen, die aber im Assembler selbst nicht verwendet werden. D.h. das müsste man da dann noch mit rüberbringen. Und vor allem sicherstellen, dass man dann keine Seiteneffekte hat durch Rundungsfehler.
Den !liston bzw. !listoff verstehe ich nicht ganz. Es soll das Auflösen der Macros im "preprocessed file" unterdrückt werden?
-
!liston und !listoff soll grundsätzlich verhindern, dass, was auch immer im Source steht, in das preprocessed file kommt.
Steht dort eine Macro-Definition, dann sieht man sie nicht im prep file.
Code
Display More; verhindert die Anzeige der Definition !listoff !macro mov16i target_address, source_immediate lda #<source_immediate sta target_address lda #>source_immediate sta target_address+1 !end !liston
Überhaupt wäre es besser, wenn im prep file beim Macro-Expandieren auch nur der wirklich expandierte Code angezeigt wird.
Momentan ist es ja so:Code
Display More460 $080D ; 16-bit unsigned comparision 461 $080D ; 462 $080D AD 26 08 lda ╚var1╝ 463 $0810 CD 28 08 cmp var2 464 $0813 AD 27 08 lda ╚var1╝+1 465 $0816 ED 29 08 sbc var2+1 466 $0819 467 $0819 ; Act on comparisions 468 $0819 ; 469 $0819 !if ╚IS_NOT_EQUAL╝=IS_EQUAL { 470 $0819 +jne $ffff 471 $0819 } 472 $0819 !if ╚IS_NOT_EQUAL╝=IS_NOT_EQUAL { 473 $0819 474 $0819 D0 03 bne +c64_local_labeljeq_211_473_ 475 $081B 4C FF FF jmp $ffff 476 $081E +c64_local_labeljeq_211_473_ 477 $081E } 478 $081E !if ╚IS_NOT_EQUAL╝=IS_LOWER { 479 $081E +jcs $ffff 480 $081E } 481 $081E !if ╚IS_NOT_EQUAL╝=IS_GREATER_EQUAL { 482 $081E +jcc $ffff 483 $081E } 484 $081E 485 $081E ; push current instruction pointer (to ==> __MacroHLA__STACK0) 486 $081E ; 487 $081E 488 $081E __MacroHLA__STACK40=__MacroHLA__STACK39 489 $081E __MacroHLA__STACK39=__MacroHLA__STACK38 490 $081E __MacroHLA__STACK38=__MacroHLA__STACK37 491 $081E __MacroHLA__STACK37=__MacroHLA__STACK36 492 $081E __MacroHLA__STACK36=__MacroHLA__STACK35 493 $081E __MacroHLA__STACK35=__MacroHLA__STACK34 494 $081E __MacroHLA__STACK34=__MacroHLA__STACK33 495 $081E __MacroHLA__STACK33=__MacroHLA__STACK32 496 $081E __MacroHLA__STACK32=__MacroHLA__STACK31 497 $081E __MacroHLA__STACK31=__MacroHLA__STACK30 498 $081E __MacroHLA__STACK30=__MacroHLA__STACK29 499 $081E __MacroHLA__STACK29=__MacroHLA__STACK28 500 $081E __MacroHLA__STACK28=__MacroHLA__STACK27 501 $081E __MacroHLA__STACK27=__MacroHLA__STACK26 502 $081E __MacroHLA__STACK26=__MacroHLA__STACK25 503 $081E __MacroHLA__STACK25=__MacroHLA__STACK24 504 $081E __MacroHLA__STACK24=__MacroHLA__STACK23 505 $081E __MacroHLA__STACK23=__MacroHLA__STACK22 506 $081E __MacroHLA__STACK22=__MacroHLA__STACK21 507 $081E __MacroHLA__STACK21=__MacroHLA__STACK20 508 $081E __MacroHLA__STACK20=__MacroHLA__STACK19 509 $081E __MacroHLA__STACK19=__MacroHLA__STACK18 510 $081E __MacroHLA__STACK18=__MacroHLA__STACK17 511 $081E __MacroHLA__STACK17=__MacroHLA__STACK16 512 $081E __MacroHLA__STACK16=__MacroHLA__STACK15 513 $081E __MacroHLA__STACK15=__MacroHLA__STACK14 514 $081E __MacroHLA__STACK14=__MacroHLA__STACK13 515 $081E __MacroHLA__STACK13=__MacroHLA__STACK12 516 $081E __MacroHLA__STACK12=__MacroHLA__STACK11 517 $081E __MacroHLA__STACK11=__MacroHLA__STACK10 518 $081E __MacroHLA__STACK10=__MacroHLA__STACK9 519 $081E __MacroHLA__STACK9=__MacroHLA__STACK8 520 $081E __MacroHLA__STACK8=__MacroHLA__STACK7 521 $081E __MacroHLA__STACK7=__MacroHLA__STACK6 522 $081E __MacroHLA__STACK6=__MacroHLA__STACK5 523 $081E __MacroHLA__STACK5=__MacroHLA__STACK4 524 $081E __MacroHLA__STACK4=__MacroHLA__STACK3 525 $081E __MacroHLA__STACK3=__MacroHLA__STACK2 526 $081E __MacroHLA__STACK2=__MacroHLA__STACK1 527 $081E __MacroHLA__STACK1=__MacroHLA__STACK0 528 $081E __MacroHLA__STACK0 = __MacroHLA__FAR 529 $081E 530 $081E __MacroHLA__STACK40=__MacroHLA__STACK39 531 $081E __MacroHLA__STACK39=__MacroHLA__STACK38 532 $081E __MacroHLA__STACK38=__MacroHLA__STACK37 533 $081E __MacroHLA__STACK37=__MacroHLA__STACK36 534 $081E __MacroHLA__STACK36=__MacroHLA__STACK35 535 $081E __MacroHLA__STACK35=__MacroHLA__STACK34 536 $081E __MacroHLA__STACK34=__MacroHLA__STACK33 537 $081E __MacroHLA__STACK33=__MacroHLA__STACK32 538 $081E __MacroHLA__STACK32=__MacroHLA__STACK31 539 $081E __MacroHLA__STACK31=__MacroHLA__STACK30 540 $081E __MacroHLA__STACK30=__MacroHLA__STACK29 541 $081E __MacroHLA__STACK29=__MacroHLA__STACK28 542 $081E __MacroHLA__STACK28=__MacroHLA__STACK27 543 $081E __MacroHLA__STACK27=__MacroHLA__STACK26 544 $081E __MacroHLA__STACK26=__MacroHLA__STACK25 545 $081E __MacroHLA__STACK25=__MacroHLA__STACK24 546 $081E __MacroHLA__STACK24=__MacroHLA__STACK23 547 $081E __MacroHLA__STACK23=__MacroHLA__STACK22 548 $081E __MacroHLA__STACK22=__MacroHLA__STACK21 549 $081E __MacroHLA__STACK21=__MacroHLA__STACK20 550 $081E __MacroHLA__STACK20=__MacroHLA__STACK19 551 $081E __MacroHLA__STACK19=__MacroHLA__STACK18 552 $081E __MacroHLA__STACK18=__MacroHLA__STACK17 553 $081E __MacroHLA__STACK17=__MacroHLA__STACK16 554 $081E __MacroHLA__STACK16=__MacroHLA__STACK15 555 $081E __MacroHLA__STACK15=__MacroHLA__STACK14 556 $081E __MacroHLA__STACK14=__MacroHLA__STACK13 557 $081E __MacroHLA__STACK13=__MacroHLA__STACK12 558 $081E __MacroHLA__STACK12=__MacroHLA__STACK11 559 $081E __MacroHLA__STACK11=__MacroHLA__STACK10 560 $081E __MacroHLA__STACK10=__MacroHLA__STACK9 561 $081E __MacroHLA__STACK9=__MacroHLA__STACK8 562 $081E __MacroHLA__STACK8=__MacroHLA__STACK7 563 $081E __MacroHLA__STACK7=__MacroHLA__STACK6 564 $081E __MacroHLA__STACK6=__MacroHLA__STACK5 565 $081E __MacroHLA__STACK5=__MacroHLA__STACK4 566 $081E __MacroHLA__STACK4=__MacroHLA__STACK3 567 $081E __MacroHLA__STACK3=__MacroHLA__STACK2 568 $081E __MacroHLA__STACK2=__MacroHLA__STACK1 569 $081E __MacroHLA__STACK1=__MacroHLA__STACK0 570 $081E __MacroHLA__STACK0 = * 571 $081E 572 $081E !if __MacroHLA__DEBUG=1 { 573 $081E !message "Stack: ",__MacroHLA__STACK0,", ",__MacroHLA__STACK1,", ",__MacroHLA__STACK2,", ",__MacroHLA__STACK3,", ",__MacroHLA__STACK4,", ",__MacroHLA__STACK5,", ",__MacroHLA__STACK6,", ",__MacroHLA__STACK7,", ",__MacroHLA__STACK8,", ",__MacroHLA__STACK9,", ",__MacroHLA__STACK10,", ",__MacroHLA__STACK11,", ",__MacroHLA__STACK12,", ",__MacroHLA__STACK13,", ",__MacroHLA__STACK14,", ",__MacroHLA__STACK15,", ",__MacroHLA__STACK16,", ",__MacroHLA__STACK17,", ",__MacroHLA__STACK18,", ",__MacroHLA__STACK19,", ",__MacroHLA__STACK20,", ",__MacroHLA__STACK21,", ",__MacroHLA__STACK22,", ",__MacroHLA__STACK23,", ",__MacroHLA__STACK24,", ",__MacroHLA__STACK25,", ",__MacroHLA__STACK26,", ",__MacroHLA__STACK27,", ",__MacroHLA__STACK28,", ",__MacroHLA__STACK29,", ",__MacroHLA__STACK30,", ",__MacroHLA__STACK31,", ",__MacroHLA__STACK32,", ",__MacroHLA__STACK33,", ",__MacroHLA__STACK34,", ",__MacroHLA__STACK35,", ",__MacroHLA__STACK36,", ",__MacroHLA__STACK37,", ",__MacroHLA__STACK38,", ",__MacroHLA__STACK39,", ",__MacroHLA__STACK40," (","IF" ,")" 574 $081E } 575 $081E 576 $081E 577 $081E 578 $081E A9 2A lda #<txt ; Load lo-byte of string adress 579 $0820 A0 08 ldy #>txt ; Load hi-byte of string adress 580 $0822 20 1E AB jsr $AB1E ; Print stringEr zeigt also wirklich ALLES an, auch die nichtexpandierten Pfade der Defintion. Und diese ganzen Stack-Moves würde ich mit !listoff auch gerne unterdrücken können, selbst wenn sie expandiert werden.
Woher habe ich die Idee?
Der ursprüngliche Autor der Idee von den Struktur-Macros hat so einen Befehl in seiner Macro-Lib verwendet. Ich glaube - bin mir aber nicht sicher - es ist der Kowalski-Assembler?Beispiel:
Code
Display MoreLIST "OFF" STK_LVL_1: SETL STK_LVL_2 ; When you're done with STK_LVL_1 and want to STK_LVL_2: SETL STK_LVL_3 ; drop it, pull 2 down over it, 3 down over 2, STK_LVL_3: SETL STK_LVL_4 ; etc.. 20 gets left with the old value, but STK_LVL_4: SETL STK_LVL_5 ; that's ok since the used part of the stack STK_LVL_5: SETL STK_LVL_6 ; space doesn't go up that far now after a drop STK_LVL_6: SETL STK_LVL_7 ; anyway. STK_LVL_7: SETL STK_LVL_8 STK_LVL_8: SETL STK_LVL_9 STK_LVL_9: SETL STK_LVL_10 STK_LVL_10: SETL STK_LVL_11 STK_LVL_11: SETL STK_LVL_12 STK_LVL_12: SETL STK_LVL_13 STK_LVL_13: SETL STK_LVL_14 STK_LVL_14: SETL STK_LVL_15 STK_LVL_15: SETL STK_LVL_16 STK_LVL_16: SETL STK_LVL_17 STK_LVL_17: SETL STK_LVL_18 STK_LVL_18: SETL STK_LVL_19 STK_LVL_19: SETL STK_LVL_20 LIST "ON"Das hier ist aus seinem "StackPop"
Somit sieht man das alles nicht im prep file.
-
Ah, verstanden. Danke!
-
In der Todo-Liste von V5.9 steht noch "• Syntax-Coloring -> Preview im Setting Editor mit FastColoredTextBox".
Das ist doch erledigt, so wie es jetzt ist, oder? Das Zusammenspiel sieht man ja dank Instant Refresh daneben in geöffneten Dateien.Ich hatte ja neulich für den BASIC-Editor mit Font-Kombinationen experimentiert und war zum Schluss gekommen, dass der C64-Pro-Mono-Font eigtl. der einzig brauchbare ist. Für diesen kommen hauptsächlich drei bis vier Größen in Betracht. Die beiden Extrema 6pt und 12pt bilden das Original perfekt ab. Die Default-Größe 9pt liegt eben genau in der Mitte, ist leicht verzerrt, aber problemlos brauchbar. 11pt ist auch noch ok, 7pt nicht mehr so, 8pt und 10pt schlecht.
6pt ist zwar klein, aber dafür scharf und damit wunderbar geeignet für umfangreichere Programme, bei denen man mehr Übersicht braucht. Allerdings fiel mir auf, dass das auf die Anzahl sichtbarer Zeilen noch keinen Einfluss hat, da die Zeilenhöhe unabhängig von der tatsächlichen Zeichenhöhe auf 18px festgesetzt war. Ich hab jetzt mal die Zeilenhöhe freigegeben und durch Originalzeichenhöhe plus Zeilenabstand ersetzt. Ein Zeilenabstand von mindestens 2px ist notwendig, um Überlappungen zu vermeiden. Bei 3px Zeilenabstand und dem 12pt-Font ist es genau wie zuvor mit der festen 18px-Zeilenhöhe. 4px (als Default gewählt) ist ratsam für die kleineren Fonts. Bei 9px Abstand und dem 6pt-Font entspricht die vertikale Übersicht der vom Visual Studio. Man könnte zwar auch einfach einen festen Zeilenabstand programmieren, aber da das wahrscheinlich jeder anders haben möchte, sollte man sich das vielleicht besser selbst einstellen können.(?)
Hier mal kurz gezeigt:
Please login to see this media element. -
Danke für die Gegenüberstellung, ich nehme das mal mit auf die Liste!
Der TODO-Punkt betrifft eigentlich die kleine Preview-Box im Dialog, man hat ja nicht immer gerade die passende Kombination an Fenstern im Hintergrund

-
Ich fände es gut, wenn es die Funktionen "Alle Zones zuklappen" und "Alle Zones aufklappen" gäbe.
-
Das mit den Variablen für BASIC (wenigstens V2) wäre tatsächlich sehr hilfreich. Bitte auf die "1. Liste" übertragen.

-
Schön wäre die Möglichkeit, das C64 Studio auch unter Linux kompilieren zu können. Unter Wine, also im 32Bit-Modus, läuft es nämlich leider nicht.
-
Hmm, bei mir tut es das.
Ich hab mir bei Ubuntu in der VM mit PlayOnLinux beholfen. Dazu muss da drüber auch .NET Framework 3.5 installiert werden (da gibt's noch so ein paar XP-Benutzer), das ist da aber nur ein Häkchen zu setzen. .NET Framework ist ja nicht von Haus aus verfügbar.
Ich würde ja zu gerne zumindest auf .NET Core portieren, das dürfte da auch deutlich zukunftsfähiger sein.
-
Entschuldigt, wenn ich es überlesen habe, aber ich habe weder hier noch in der Doku das passende gefunden.
Ich würde gerne etwas setzen, wie das hier: screen = $0400, um etwas wie sta screen zu verwenden.
Ist das möglich?
-
Ich würde gerne etwas setzen, wie das hier: screen = $0400, um etwas wie sta screen zu verwenden.
Ist das möglich?
Ja - geht ohne Probleme so.
-
Hm...
Ich könnte schwören, dass das bei mir nicht geklappt hat.Habe Deinen Source jetzt mal abgetippt und funktioniert natürlich. Keine Ahnung, was ich falsch gemacht hatte

Danke!
-
- Official Post
Eine Unterstützung von Please login to see this link. fänd ich toll.
Das ist eigentlich kein echtes Basic, sondern von der Programmierung her nur daran angelehnt. Der Code wird nicht interpretiert, sondern es wird durch XC=BASIC Assemblercode generiert, der dann mit DASM compiliert werden muss.
Es fehlt aktuell aber eine gescheite Entwicklungsumgebung.
-
Hmmm, das ist ja wie du sagst, kein echtes BASIC. Da wäre bestenfalls eine Code-Vervollständigung drin?
Alles andere macht dann ja der XC=BASIC-Compiler. Letzteres ist über einen Custom-Build-Step möglich.
-
- Official Post
D.h. ich kann über XC BASIC kompilieren?
Wie siehts mit dem Syntax Highlightning aus? Kann ich dafür eine eigene txt erstellen?
Wo stelle ich das ein?
-
Kompilieren müsste gehen, wenn C64Studio das wie ein Assembler-File betrachtet.
Syntax Highlighting hingegen ist nochmal ein ganz anders Ding. Das ist nicht wirklich konfigurierbar, als Ersatz für einen Texteditor ist es ja nicht gedacht. Das ist extrem auf reguläres BASIC sowie diverse Assembler-Varianten zugeschnitten.
Ich könnte das wohl wie Assembler behandeln, dann wären die Schlüsselworte eingefärbt. Das ist aber nicht mal eben. Die paar Kennworte schon, aber dem C64Studio das XC=Basic beizubringen ist aber schon eher aufwändig (dummerweise ist die Extension .bas mit BASIC verdrahtet, von der Steuerung wäre es aber eher wie Assembler)
-
Der BIT-Befehl wird gerne benutzt, um eine Einsprungstelle zu tarnen. Der Disassembler von C64 Studio erzeugt in solchen Fällen im Moment keinen assemblierbaren Code.
Bsp, aus:
wird im Disassembler:
... mit einem Sprung zu einem nicht-existierenden Label.
Ist das so gewollt? Damit man wenigstens den Sprung sieht, auch wenn es das Label gar nicht gibt?
Oder wäre es nicht sinnvoller, wenn ein Sprung direkt hinter einen BIT-Befehl zeigt, diesen dann nur als !byte-Wert anzuzeigen, so wie ganz oben..?
P.S. Wo finde ich diese todo.txt-Datei? Möchte natürlich keine ollen Kamellen bringen.
-
Oohh, der ist aber böse

Das ist ein ziemlicher Spezialfall, aber packe ich mal mit auf die Liste.
Vor allem ein Label, dass dann nicht eingesetzt wird, ist doof. Oberstes Ziel vom Disassembly, das soll erstmal ohne Handgriff zu dem exakt gleichen Binary führen.
-