Gute Punkte, floats gibt es auch so halb, kommt auf die Liste
C64 Studio - Features Wunschliste
- syshack
- Thread is marked as Resolved.
-
-
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.
Ganz lieben Dank
Gruß, Thomas
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
Ü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- 460 $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 string
Er 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- LIST "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:
[External Media: https://www.youtube.com/watch?v=kiVu7CaMn1g] -
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!
-
Eine Unterstützung von XC=BASIC 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.
-
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.