Hmm .. das ist dann ein Henne ... Ei Problem. Die Funktion mdcart2 mit das nachladen aus dem Modul realisiert ist, liegt jetzt bei mir an $cc00 ... muss ich mal schauen ob ich das irgendwie lösen kann.
Beiträge von TD1334
-
-
Irgendwo in TSB wird Renumber deaktiviert. Ist das so wenn man einen eigenen Font nutzt und der Screen bei $cc00 liegt?
Wie schaltet man das wieder zurück, so dass Renumber wieder aktiviert wird?
Da fällt mir ein, dann müsste Monitor oder Graphics auch abstürzen, denn an $ccxx liegt auch die Routine die die Daten aus dem Modul kopiert.
-
Ich habe an der Funktionalität nichts geändert. Ich habe die Routine nur soweit umgebaut, dass sie teilweise im ROM (Modul) abläuft um Platz zu sparen.
EDIT:
Problem nach dem Renumber ist die letzte Datazeile. Da stehen zweil Zeilennummern drin, die das Programm für einen Reset benutzt und die natürlich mit angepasst werden
Code- 3540 reset4400:fori=1toan:readdt$(i),ln%
- (i,0),ln%(i,1):next
- 3550 end proc
- 4060 data 0,14,14,14,14,13,2,13,13,13,13
- ,13,13,8,8,9,8,8,14,8,8,8,8,8,8,8,8,9
- 4070 data 8,14,14,6,6,255
- 4280 data 9, 5, 1,1,1,1, 0,12,1,1, 1,2
- 5,1,1, 0,34,1,1, 2,4,1,1, 3,19,1,1
- 4290 data 5,13,1,1, 18,0,26,1, 1
- 8,32,4,1
- 4300 data 1, 8, 11,25,1,1
- 4310 data 1,10, 20,0,36,1
- 4320 data 1, 9, 22,0,36,1
- 4330 data 1,14, 22,36,4,1, 0
- 4400 data kirby,4060,4280
-
Ich denke, das könnte am RENUMBER selber liegen ... aber ich will nicht noch mehr eintauchen in den Code, dafür haben wir am Ende ja Arndt
-
Allgemein sollte auch der Befehl monitor funktionieren. renumber bitte auch testen, da ich hier Platz geschaffen habe.
RENUMBER stürzt komplett ab. Die Demos für den MAP-Befehl landen (nachdem ich MONITOR erfolgreich ausprobiert hatte) im Monitor mit der Einsprungadresse $c9d0, ohne vorheriges MONITOR gibt's nur einen NMI.
War witzig. Mein Test mit renumber sah wie folgt aus
Das hatte funktioniert. Bin aber den Code nochmal durchgegangen weil ich geladene Demoprogramme auch nicht mit renumber laufen lassen konnte. Dabei habe ich einen Fehler im Bankswitching gefunden.
Jetzt funktionierte das Renumber. Ich konnte z.B. "map.dmo" renumbern. Aber nach dem starten kommt ein Error, der kommt aber auch mit der originalen Diskversion und dem dortigen renumber.
"map.dmo" geladen, monitor gestartet, mit x verlasen und mit run gestartet, lief jetzt auch.
Im Anhang die neue Version.
-
Kannst du mir sagen wo die entsprechenden Stellen sind (local/gloab/memhook).
Ich habe da schon wieder eine Idee ... ist der Quellcode von TSB online aktuell?
Der Quellcode ist *immer* aktuell! (Ähem…
) Such da nach dem Label „cartridge“. Quellcode auf Github, siehe Signatur.
Sieht gut aus ... local/global + monitor funktioniert. Muss jetzt nur noch dein Renumber auseinandernehmen, dann denke ich gibt es eine CRT die wie die Disk Version funktioniert.
Ich glaube ich habe es geschafft.
Teste doch nochmal mit local / global
Allgemein sollte auch der Befehl monitor funktionieren. renumber bitte auch testen, da ich hier Platz geschaffen habe.
Wenn alles passt, lasse ich dir den geänderten Quellcode mit Anmerkungen von mir zukommen.
-
Hier ein Auszug aus dem TSB-Handbuch...
Wenn du das für strukturierte Funktionen hältst, dann wundert mich nichts mehr. He he he!
Komm doch mit Argumenten ....
-
Deine Erwartungshaltung kommt von Software auf aktueller Hardware.,
Nein.
Jedem seine Meinung.
Dann beziehe dich bitte auch nur auf die Prozeduren und spreche TSB als ganzes nicht ab, das es Funktionen zum strukturierten arbeiten enthält.
Welche Funktionen zum strukturierten Arbeiten hat TSB?
Hier ein Auszug aus dem TSB-Handbuch
Und natürlich darf man den : und das nicht vergessen
Eigentlich wollte xionum hier was ganz anderes besprechen.
Korrekt, ich werde eine Mod bitten das auszulagern.
-
Kannst du mir sagen wo die entsprechenden Stellen sind (local/gloab/memhook).
Ich habe da schon wieder eine Idee ... ist der Quellcode von TSB online aktuell?
Der Quellcode ist *immer* aktuell! (Ähem…
) Such da nach dem Label „cartridge“. Quellcode auf Github, siehe Signatur.
Sieht gut aus ... local/global + monitor funktioniert. Muss jetzt nur noch dein Renumber auseinandernehmen, dann denke ich gibt es eine CRT die wie die Disk Version funktioniert.
-
Könntest du nicht den Bereich von $ff40-$ffff nutzen, natürlich nur in der CRT Version.
Benutzt du den für irgendwas anderes?
Das nicht, aber ich kann mir mehrere Szenarien vorstellen, wo der Bereich einfach übergebügelt wird, z.B. verwenden Omega s Programme diesen Platz als Sprite-Speicher. Auch mein Demo-Programm mit den (möglichen) vier Textbildschirmen ("screens.dmo" auf der TSB-Disk) würde bei vier Screens diesen Platz überschreiben.
Arndt
Kannst du mir sagen wo die entsprechenden Stellen sind (local/gloab/memhook).
Ich habe da schon wieder eine Idee ... ist der Quellcode von TSB online aktuell?
Ich würde da gerne mal etwas ausprobieren ....
-
Du legst zu viel Wert auf diesen einzelnen Aspekt und verteufelst zu Unrecht TSB.
Ich verteufele überhaupt nichts - das liegt mir fern. Wenn man sich zum ersten Mal mit Simons Basic oder TSB beschäftigt und die Befehle überfliegt, entsteht durchaus der Eindruck, es handle sich um eine BASIC-Erweiterung mit strukturierten Programmieransätzen: Es gibt PROC, ENDPROC, LOCAL, GLOBAL – Begriffe, die aus anderen Sprachen vertraut sind und dort bestimmte Erwartungen wecken. Nur: Diese Erwartungen erfüllt TSB eben nicht.
Deine Erwartungshaltung kommt von Software auf aktueller Hardware., Das ist für mich die falsche Sichtweise. Die Befehle in TSB unterliegen gewissen Beschränkungen, das wird aber, so wie ich das mitbekommen habe, sehr gut in der Dokumentation erklärt. Wer diese liest und dann etwas anderes erwartet hat ein falsches Verständnis vom Programmieren und da spielt es keine Rolle ob auf dem C64 oder einem Supercomputer.
Ich verstehe dein Dilemma mit den Prozeduren und der nicht perfekten Abkapselung, jedoch ist das kein Grund TSB abzusprechen, dass man hier nicht strukturiert arbeiten kann.
Hätte GoDot soviel Speicher zur Verfügung wie in deinem aktuellen Favoriten (CRT), so könnte er dort auch ganz ganz viele schöne Sachen unterbringen. Er hat sich für einen anderen Weg entschieden, Basis ist die Diskettenversion und der Speicher im C64.
Das muss man nicht schlimm finden - solange einem bewusst ist, worauf man sich einlässt. Wer mit diesen Einschränkungen leben kann oder sie gar als kreative Herausforderung sieht, dem möchte ich keinesfalls den Spaß daran nehmen. Ich versuche lediglich, xionum (oder anderen, die hier mitlesen) unverbindlich darauf hinzuweisen, dass TSB strukturell deutlich hinter dem bleibt, was die Begriffe suggerieren.
Dann beziehe dich bitte auch nur auf die Prozeduren und spreche TSB als ganzes nicht ab, das es Funktionen zum strukturierten arbeiten enthält.
Aber wie TD1334 und Lynx sagen, wir reden hier über den C64 mit kleinem Speicher.
Es gibt auf dem C64 durchaus richtige strukturierte Programmiersprachen.
Yep, wie man an meine Signatur erkennen kann ..
-
Ich hätte eine Idee. Könntest du nicht den Bereich von $ff40-$ffff nutzen, natürlich nur in der CRT Version.
Benutzt du den für irgendwas anderes?
Das wären 192 Bytes auch wenn man die Grafik nutzen würde.
-
Das musst du mit dem Herrn von TSB ausmachen ..
-
Ich glaube Local/Global gibt es seit der Januar Version von TSB nicht mehr, zumindest in der CRT Version.
Ich habe mit GoDot Anfang Januar etwas in Richtung CRT und Erweiterungen wie SMON gemacht und er meinte das Local/Global eh nicht gut umgesetzt waren in Simons Basic und die wohl nie einer genutzt hatte. So flogen die wohl raus und erzeugen jetzt ein "Bad Mode Error"
-
Das heißt nicht, dass man mit TSB nichts Sinnvolles machen kann - aber wer glaubt, damit strukturiert programmieren zu können, wird früher oder später feststellen, dass einem die BASIC-Erweiterung dabei nicht unterstützt.
Strukturiert programmieren beinhaltet mehr als nur Prozeduren. Du legst zu viel Wert auf diesen einzelnen Aspekt und verteufelst zu Unrecht TSB. Wir bewegen uns immer noch auf einem C64 mit sehr eng gesteckten Grenzen was Leistung und Speicher angeht.
Wie Lynx schon erwähnte, man sollte sich einen Plan machen wenn man gewisse Grenzen hat, sonst ist nicht die Software das Problem sondern die Person vorm Bildschirm.
-
TD1334 und berni Kann man Eure Geschwindigkeitsmesser irgendwo bekommen? Womöglich mit Quellcode? Wollte so was selbst mal machen, für den Kassettenpuffer, SYS X für Start und SYS Y für Stopp, und mit einem Parameter, der angibt, ob dabei Interrupt und/oder VIC abgeschaltet werden sollen. Ich weiß ja nicht, wie Ihr das gemacht habt.
Ich nehme an, dass dich der Quellcode interessiert.
Ich will erst noch etwas Feintuning machen. Aber meine Sache passt aktuell nicht in den Kassettenpuffer. Ich glaube aktuell brauche ich 13xx Bytes an Speicher und dann benutze ich ab $e000 den Speicher für maximal 1023 Basic Zeilen, Ich nutze 8 Byte pro Zeile, 2 Byte für Zeilennummer, 2Byte für den Zäher und 4 Byte für den 32 Bitwert der Taktyklen, das reicht für Über eine Stunde für eine Zeile.
Ich denke 1023 Zeilen reichen, weil mein Speedo ja dafür gedacht ist um Testroutine auf ihre Geschwindigkeit zu überprüfen und nicht fertige Mega-Projekte zu analysieren.
Gib mir noch ein paar Tage, dann kannst du den Code von mir haben. Entweder hier oder ich schieb ihn hoch auf meine Github Seite.
-
Eigentlich bräuchte man ein Gegenstück zur CHR$-Funktion, mit dem man nicht den ASCII-Code sondern den Bildschirmcode PRINTen kann. Das würde so manches vereinfachen.
Also sowas wie =BHR$(Bildschirmcode). Das würde die BASIC-Programmierung revolutionieren.
Am allerbesten wäre es noch, wenn man gleich mehrere Bildschirmcodes hintereinander angeben könnte.
Z.B. PRINT BHR$(161,162,163,164).
Ja, das wäre was. Dann hätte man auch einen sauberen, gut lesbaren (und druckbaren) Code ohne diese dümmlichen PETSCII-Hieroglyphen im Listing.
Danke für diese Idee. Ich habe die gleichmal in mein PABasic umgesetzt. Sowohl der CHR$( als auch der neue SCRCHR$( verstehen nun mehrere Parameterangaben)
-
Einer von euch muss das Ping Pong Spiel unterbrechen ...
Ich kann mich nur wiederholen und das gilt im Grunde für euch beide.
Ansonsten wird irgendwann ein MOD kommen und ganz böse schimpfen
Gibt es den Sourcecode irgendwo öffentlich zum runterladen?
-
ist es besser
IFPEEK(J)=J0THEN
oder
IFJ0=PEEK(J)THEN
?
Ich hab's ausgemessen: Zweiteres ist 15 Taktzyklen schneller; warum auch immer.
War auch mein Eindruck. Hatte dann aber öfter mal, dass es langsamer war. Ich weiß aber nicht warum ? Ob es an der Größe der Zahl lag oder Postition im
Variablenspeicher.
Danke für deine Messung
ich habe das mal mit meinem Speedo Analyzer ausprobiert und ich konnte keine Unterschiede in den Taktzyklen erkennen.
Muss das nochmal mit der V1.1 testen. Liege aber schon im Bett vorm TV (Klub WM), also erst morgen 😌
-
Nein, IRQ und auch das Bild werden abgeschaltet (Starttimer).
Cool. Allerdings, soweit ich das beurteilen kann, wartest du nicht, bis der Bildschirm wirklich aus ist. Im ersten Bildschirm-Durchlauf hast du dann noch DMA drin.
Doch, wenn ich den Timer starte mache ich folgendes
Das wartet bis man unten im Rand ist und dann lösche ich das entsprechende BIT.
Der Timer wird immer bei einer neuen Zeile gestartet. Nach dem Runbefehl ist irgendwann in $3a das $FF weg und die richtige Zeilennummer steht drin von der ersten Zeile. Erst ab da läuft die Zeit.
Im Anhang mal eine aufgeräumte Code Version 1.1.