Jetzt sehe ich warum du uns allen in Bezug auf COMAL voraus bist! ![]()
Das erklärt einiges! ![]()
Please login to see this attachment.
Jetzt sehe ich warum du uns allen in Bezug auf COMAL voraus bist! ![]()
Das erklärt einiges! ![]()
Please login to see this attachment.
Display MoreAlso man kann von 96K oder etwas mehr mit SuperChipII auf stolze 512KB gehen.
Da lässt sich einiges unterbringen.
Das hat nicht mit SuperChipII zu tun, SuperChipII ist nur eine Erweiterung von Paketen, basieerend auf dem original Suoer-Chip, welches von Comal Today herausgegeben wurde.
Am Schluss werde ich mich doch dazu zwingen zu lernen wie man Pakete erstellt.
Schade ist es nicht so wie beim AMIGA COMAL wo man mit COMAL COMAL Pakete erstellen kann!
Das ist gar nicht so schwer.
Man muss wissen, was man möchte.
Man sollte 6510 Assembler können.Und man sollte die Comal-Einsprungadressen, und deren Funktion kennen.
$8000 - $BFFF, 16KB werden vom COMAL verschlingt!
Wäre es in der Praxis möglich, diese 16KB auszulagern >>> COMAL >>> REU damit C64er zu mehr Arbeitsspeicher kommt?
Ich kann mich vorstellen, dass man einiges anpassen müsste.
Auch weil dann die neuen Pakete nicht mehr so ab $8009 möglich wären und das COMAL Modul selber hat ein paar Bytes ab $8000-$8009 abgespeichert.
Wenn der Aufwand nicht in die Kategorie UNMÖGLICH hinausläuft, wären das 16KB mehr Arbeitsspeicher für den C64, also ganze 50% mehr als jetzt oder 47KB Speicher für COMAL Programme!
Ich kenne mich mit den RAM-Erweiterungen für den C64 nicht aus, aber ich denke es wäre sehr schwer bis fast unmöglich.
Übrigens, wäre PCBWay nicht in der Lage COMAL-Module zu produzieren?
Oder ist das jetzt neuerdings COMMODORE Eigentum?
Meine Module lasse ich immer von JLCPCB machen
Der Modul-Code ist mMn kein Eigentum von Commodore.
Guten Morgen aus China
Claus
Guten Morgen aus Kroatien!
Stunden später...
Ich weiß nicht, worüber ihr euch in den letzten Posts so unterhaltet.
Aber wenn etwas mit einem Standard-COMAL-Modul "Out-of-the-Box" nicht funktioniert, dann halte ich das für eher grenzwertig.
Nur meine Meinung.
Zusammengefasst, geht es darum ob man mehr aus dem COMAL herausholen kann {Modul und Sprache selbst}
So wie es bis jetzt steht, geht das sehr wohl und sogar bis 512KB liegen drin.
Dann habe ich rein zufällig herausgefunden, dass COMAL-80 V2.01 auch Sprites auf dem Textbildschirm unterstützt.
Dass man Laufschrift verwirklichen kann, dass auch Mehrfarben-Zeichensatz auch kein Problem darstellt.
Nur, es gibt keine COMAL Befehle dafür. Da hat UniComal geschlafen. {Auch C128 COMAL V2.02 hat da gar nichts!}
Genauso wie früher Commodore {Microsoft} geschlafen hat bei BASIC 2.0 und auch bei BASIC 7.0
Wäre doch schön wenn man dafür ein Paket hätte. Dieses dann ins COMAL Modul integriert und auch {irgendwie} .crt aus dem Ganzen macht damit auch Emulatoren in den Genuss von extra COMAL-Funktionalität kommen können.
Bis vor wenigen Stunden hatte ich keine Ahnung, dass all das mit dem COMAL überhaupt möglich ist bzw. zur Verfügung steht!
Noch eine Angelegenheit war das COMAL Modul zu zwingen in die REU-RAM umzuziehen, sprich, dass alles dort abgewickelt wird anstelle von $8000 - $BFFF {Commodore C64 RAM, 16KB Block}.
Wenn das möglich wäre, ohne dass ein Land zugrunde geht, warum nicht?
Das würde dem COMAL ganze 47KB Arbeitsspeicher gönnen auf dem C64! >>> $801-$BFFF
Auf jeden Fall, ein Teilerfolg wäre ein Erfolg!
Natürlich, wenn COMAL "out-of-the-box" mit aktuellem stand bleiben soll und damit die Welt neu zu gestalten, dann muss keiner schwitzen und sich auch nicht besonderen Anstrengungen unterziehen! Auch gut... ![]()
Display MoreMeine Idee war eher dass man diese 16KB dann dem Commodore zur Verfügung stellt und anstelle von 16KB, 32KB ausserhalb des Commodores 64 KB {oder 4x16KB Banks} RAM einblendet. Also in diesem, laut Commodore, "...mehr RAM" Bereich!
Aber anscheinend ist mehr RAM eigentlich gar nicht mehr RAM als RAM, sondern mehr RAM als REU-RAM etc.
Irgendwie verwirrst du mich.
Meinst du jetzt mehr ROM, oder mehr RAM
Egal, mit entsprechender Hardwareänderung am Modul, bzw. ein 'neues' Modul geht beides. Man kann sowohl mehr ROM, als auch mehr RAM zur Verfügung stellen.
Beides wird aber als 16kb Pages im Bereich $8000 - $BFFF verwaltet, und könnte auch mit SETPAGE entsprechend umgeschaltet werden, bzw. direkt in MS angesprochen werden.
Hardwaremässig muss man die Auswahl entsprechend erweitern. Bisher werden nur die Bits 0 bis 2 zur Dekodierung benutzt.
Nimmt man noch Bit 3 bis 5 hinzu, so kann man z.B. Bit 5 zum Umschalten von ROM auf RAM nehmen, und die Bits 3 und 4 zu Erweitern der Bänke.
Bisher Bit 0 - 2 = 8 Bänke,
Nachher Bit 0 - 4 = 32 Bänke
So habe ich es im Moment bei meiner Platine, und es funktioniert.Möchte man die Änderung mit einem .crt machen, dann muss der Code zur Erkennung und Bereitstellung des Moduls für den entsprechenden Emulator angepasst werden.
Bzw. es muss der Code für ein 'neues' COMAL-Modul geschrieben und integriert werden.
Zu den Registern:
Es hätte mich schon sehr gewundert, wenn COMAL da irgendwas hätte machen können.Aber nun scheint es ja zu funktionieren, das ist die Hauptsache.
Gute Nacht
Claus
Ich meinte mehr RAM also mehr freien Arbeitsspeicher für Commodore C64 in dem COMAL nicht mehr $8000 - $BFFF verwendet, sondern alles IN REU Bereiche auslagert!
Übrigens, wäre PCBWay nicht in der Lage COMAL-Module zu produzieren?
Oder ist das jetzt neuerdings COMMODORE Eigentum?
Ja, auch eine gute Nacht... ![]()
Display MoreMit einem Patch im COAML-System, kann man diese Beschränkung umgehen, und sollte in der Lage sein bis zu 32 Pages a 32kb anzusprechen. (1MB)
Das stimmt so natürlich nicht ganz.
Richtig wäre: "und sollte in der Lage sein bis zu 32 Pages a 16kb anzusprechen. (512kb)
Ich habe das auch schon mit meinem Spezial-Modul ausprobiert.
Es hat natürlich geklappt.Ich habe dazu ein MX29F040 Eprom genommen.
Dort habe ich die ersten 4 x 16kb mit dem original COMAL80 geflasht.
Die nächsten 4 x 16kb mit dem SC-II.
Dann habe ich den Rest jeweils 16 kb mit den Werten $08 bist $1F beschrieben.
Das habe ich dann mit dem SMON für COMAl kontrolliert, indem ich jede Bank einzeln eingeblendet habe, und mir den Inhalt ansehen konnte.
Damit COMAL auch diese Pages nach Paketen durchsuchen kann, und diese dort ausführen kann, muss COMAL80 entsprechend gepatcht werden:
Code Display More;$A3F7 !if PATCH = 0 { ; check for additional extensions on Pages ; here only the pages 83,84, and 85 are checked for extensions LDA #$83 ; check PAGE4 (belongs to COMAL main part) JSR .lA302 LDA #$84 ; check PAGE5 (1st 16kb) JSR .lA302 LDA #$85 ; check PAGE6 (2nd 16kb) JSR .lA302 } ; with the patch, it is possible to check as much we need. :) !if PATCH = 1 { ; patch page limit ; a possible patch could be as following: ; replace the upper part with the following LDA #$83 ; first page to check - PHA ; save page JSR .lA302 ; check page for extension PLA ; get page back CLC ADC #$01 ; increase page counter CMP #$87 ; cmp with max. page (in the original module there is a hardware limit) ; the value can be changed to check more pages BCC - ; next page NOP ; fillbyte ; patch end }
Natürlich hat es geklappt! ![]()
Also man kann von 96K oder etwas mehr mit SuperChipII auf stolze 512KB gehen.
Da lässt sich einiges unterbringen.
Am Schluss werde ich mich doch dazu zwingen zu lernen wie man Pakete erstellt.
Schade ist es nicht so wie beim AMIGA COMAL wo man mit COMAL COMAL Pakete erstellen kann!
MultiColorCharacter Mode ist gar nicht abgedeckt vom COMAL {oder ich sehe es wieder nicht}.
Da muss man sich kaputt POKEN damit man was auf die Beine stellt.
$8000 - $BFFF, 16KB werden vom COMAL verschlingt!
Wäre es in der Praxis möglich, diese 16KB auszulagern >>> COMAL >>> REU damit C64er zu mehr Arbeitsspeicher kommt?
Ich kann mich vorstellen, dass man einiges anpassen müsste.
Auch weil dann die neuen Pakete nicht mehr so ab $8009 möglich wären und das COMAL Modul selber hat ein paar Bytes ab $8000-$8009 abgespeichert.
Wenn der Aufwand nicht in die Kategorie UNMÖGLICH hinausläuft, wären das 16KB mehr Arbeitsspeicher für den C64, also ganze 50% mehr als jetzt oder 47KB Speicher für COMAL Programme!
ClausS {Please login to see this link.}
Meine Idee war eher dass man diese 16KB dann dem Commodore zur Verfügung stellt und anstelle von 16KB, 32KB ausserhalb des Commodores 64 KB {oder 4x16KB Banks} RAM einblendet. Also in diesem, laut Commodore, "...mehr RAM" Bereich!
Aber anscheinend ist mehr RAM eigentlich gar nicht mehr RAM als RAM, sondern mehr RAM als REU-RAM etc.
Mit $d000 geht nicht, meinte ich so was: {Code unten}
{das ist jetzt kein COMAL Code, sondern C64 damit ich Feinscrolling schnell demonstriere}
Mit dem COMAL kann ich auf den Register gar nicht zugreifen.
Entweder mache ich was falsch oder es geht wirklich nicht.
UPDATE!
Okay, jetzt habe ich selber gefunden was ich falsch mache bzw. gemacht habe.
Ich habe nicht POKE 53265,16 direkt eingegeben, sondern zuerst USE System, dann SETPAGE(0) und dann erst POKE 53265,16!
Das hat dann nicht funktioniert.
Jetzt habe ich das wiederholt und es ging wieder nicht, auch nicht wenn ich SETPAGE(1,2,3,8) aktivierte...
Allerdings hat dann SETPAGE($80) gewirkt und nun geht alles.
{interessant ist, dass es direkt geht, also ohne SETPAGE umzustellen, aber habe das gar nicht so probiert, wie erwähnt!
Wenigstens weiss ich jetzt wie ich zurück gehen kann wenn ich vorher SETPAGE ändern muss}
Es hat mich gewundert, dass $d400, also Audio geht, aber $d000 nicht.
Okay, jetzt bin ich schlauer geworden ![]()
Da muss sicher noch was ge-poked werden damit es ruhiger geht, aber es funktioniert...
UND MICH HAUT ES JETZT DOPPELT UM!!! HAHA...
{Ich habe die TEXTBILDSCHIRM SPRITES beim C64 nie zum laufen gebracht weil ich SETPAGE verwendete {für Grafik und SPRITES auf dem Grafikbildschirm}... Nach dem ich heute SETPAGE($80) entdeckte, sieht die Welt wieder normal aus!
Das da ein Zusammenhang besteht, wäre mir nicht mal im Traum eingefallen!
WUNDERBAR!
Please login to see this attachment.
0 REM C64 BASIC 2.0!!!
5 print chr$(147)
6 poke 1024,0
7 for y=0 to 10
10 for a=0 to 7
20 poke 53265,16+a
30 for b=0 to 50:next
40 next
50 poke 1024+c,32
60 c=c+40
70 poke 1024+c,0
80 next y
ready.
list
0001 c:=0
0005 PRINT CHR$(147)
0006 PRINT AT 1,1: "commodore c64!"
0007 FOR y:=0 TO 10 DO
0010 FOR a:=0 TO 7 DO
0020 POKE 53265,16+a
0030 FOR b:=0 TO 50 DO
0035 ENDFOR b
0040 ENDFOR a
0050 PRINT AT 1+c,1: " "
0060 c:=c+1
0070 PRINT AT 1+c,1: "commodore c64!"
0080 ENDFOR y
Display More
Display MoreDisplay MoreMan hätte sicherlich den Grundwortschatz von COMAL um die Befehle ENGLISH und DANSK erweitern können, dann wären hier keine 'Pakete' notwendig gewesen.
Aber das macht mMn. doch auch keinen grossen Unterschied.
Möchte man z.B. ein anderes Sprachpaket nachladen, dann muss dass ja sehr wohl als Paket geschehen.
Ich denke nicht, dass man die Anzahl der Pakete bei COMAL80 hier in den Vordergrund gestellt hatte, sondern vorgebeugt hatte, dass, wenn man eine Sprache wählt, ein einheitlicher Weg gegangen werden sollte.
Aber das ist nur meine Meinung.
Ja, lauft alles als Paket bei COMAL, egal ob ein Befehl, kein oder 50 drin sind.
Wenn wir schon bei 50 sind, gelesen habe ich, dass man anstelle von 16KB EPROMS, 32KB EPROMS verwenden kann.
Der neue Commodore C64 kommt mit wesentlich mehr Speicher.
Es wäre doch ideal diese grössere EPROMS zu verwenden und diese dann beim C64 dort einbinden wo C64 Adressbereiche nicht gestört werden. Somit könnte man dann die COMAL Funktionalität und Möglichkeiten erheblich erweitern.
{Memory Map müsste natürlich entsprechend angepasst werden. Es ist schon mal gemacht worden und unmöglich ist es also nicht}
Als Beispiel nenne ich hier mal den Feinscrolling-Register! Der ist jetzt mit SPRITE-DATEN belegt.
Ich habe alle SETPAGES probiert, aber dieser Register gibt kein Lebenszeichen von sich. Das ist eigentlich nur ein Register.
Dort sind aber "tausende" Register für COMAL gestorben, ab $d000 {damit 32 Sprites untergebracht werden können}
In ComalToday fand ich soweit keine Angaben ob dieser Register an andere Stellen verschoben worden sind?
Die sind irgendwo weil Soundregister sind auch betroffen $d400.
Mit grösseren EPROMs, könnte dann ein sehr gescheites Köpfchen, COMAL Befehlsumfang erheblich erweitern.
Somit wäre es dann möglich eigenen Farbbereich für den Grafikbildschirm zu realisieren, alle Register ab $d000 wären verfügbar und damit hätte man ein USE Fun&Cool {
} Paket erstellen können {leider machen meine alten grauen Zellen nicht mit bei dem Plan}. TextBildschirm-Sprites, Mehrfarben-Zeichensatz, Feinscrolling in alle Richtungen und und...
Also COMAL-80 {C64} hat noch extrem viel Potenzial!
Der neue C64U kommt mitnichten mit mehr HAUPTspeicher!
Du bekommst, bei Bedarf, eine REU dazu. Das ist aber auch alles.
Wird heissen, das hier "...more RAM & 48Mhz Turbo mode" ist zwar eine Banane, aber keine Chiquita!
Also ist das in etwa so genau, als wenn ich sagen würde: mein C128 hat 256KB RAM und kommt mit 4MHz!
Einer ist auf dem Tisch und der andere im Schrank.
Denke Commodore sollte schon ganz genau schreiben was mehr RAM bedeutet und auch was und wo diese 48MHz was machen und was und wo diese 48MHz was nicht machen.
Eventuell darf COMAL trotzdem profitieren!
Man hätte sicherlich den Grundwortschatz von COMAL um die Befehle ENGLISH und DANSK erweitern können, dann wären hier keine 'Pakete' notwendig gewesen.
Aber das macht mMn. doch auch keinen grossen Unterschied.
Möchte man z.B. ein anderes Sprachpaket nachladen, dann muss dass ja sehr wohl als Paket geschehen.
Ich denke nicht, dass man die Anzahl der Pakete bei COMAL80 hier in den Vordergrund gestellt hatte, sondern vorgebeugt hatte, dass, wenn man eine Sprache wählt, ein einheitlicher Weg gegangen werden sollte.
Aber das ist nur meine Meinung.
Ja, lauft alles als Paket bei COMAL, egal ob ein Befehl, kein oder 50 drin sind.
Wenn wir schon bei 50 sind, gelesen habe ich, dass man anstelle von 16KB EPROMS, 32KB EPROMS verwenden kann.
Der neue Commodore C64 kommt mit wesentlich mehr Speicher.
Es wäre doch ideal diese grössere EPROMS zu verwenden und diese dann beim C64 dort einbinden wo C64 Adressbereiche nicht gestört werden. Somit könnte man dann die COMAL Funktionalität und Möglichkeiten erheblich erweitern.
{Memory Map müsste natürlich entsprechend angepasst werden. Es ist schon mal gemacht worden und unmöglich ist es also nicht}
Als Beispiel nenne ich hier mal den Feinscrolling-Register! Der ist jetzt mit SPRITE-DATEN belegt.
Ich habe alle SETPAGES probiert, aber dieser Register gibt kein Lebenszeichen von sich. Das ist eigentlich nur ein Register.
Dort sind aber "tausende" Register für COMAL gestorben, ab $d000 {damit 32 Sprites untergebracht werden können}
In ComalToday fand ich soweit keine Angaben ob dieser Register an andere Stellen verschoben worden sind?
Die sind irgendwo weil Soundregister sind auch betroffen $d400.
Mit grösseren EPROMs, könnte dann ein sehr gescheites Köpfchen, COMAL Befehlsumfang erheblich erweitern.
Somit wäre es dann möglich eigenen Farbbereich für den Grafikbildschirm zu realisieren, alle Register ab $d000 wären verfügbar und damit hätte man ein USE Fun&Cool {
} Paket erstellen können {leider machen meine alten grauen Zellen nicht mit bei dem Plan}. TextBildschirm-Sprites, Mehrfarben-Zeichensatz, Feinscrolling in alle Richtungen und und...
Also COMAL-80 {C64} hat noch extrem viel Potenzial!
Display MoreDisplay MoreDisplay MoreDisplay MoreDisplay MoreAn alle COMAL-80 begeisterte Mitglieder!
Wer das hier im COMAL-80 ohne POKE & PEEK schafft, bekommt 0.75 Schljiwowica direkt nach Hause geschickt {aus Kroatien!}
Also keine billig Variante, sondern COMAL-80-Qualitäts-Schljiwowica!
{Ich selber werde es auch probieren!
}
Code Display More0010 USE system 0020 USE graphics 0030 textbackground(0); textborder(0) 0040 PAGE 0050 a$:="commodore c64 - last true 8-bit pc!"; textcolor(0) 0060 PRINT AT 2,21-(LEN(a$)/2): ""18""+""142""+a$ 0070 DIM code(11) 0080 RESTORE colors 0090 FOR a:=1 TO 11 DO 0100 READ palette 0110 code(a):=palette 0120 ENDFOR a 0130 colors: 0140 DATA 0,6,14,11,12,4,4,12,11,14,6 0150 LOOP 0160 FOR a:=0 TO 47 DO 0170 FOR b:=1 TO 11 DO POKE 55328+b+a,code(b) 0180 TIME 0 // wer moechte 0190 WHILE TIME<0 DO NULL 0200 ENDFOR a 0210 ENDLOOPIch habe eben etwas mit deinem Code herum probiert. Dabei ist mir folgendes aufgefallen:
Die Zeilen 80 und 130 sind unnötig; READ beginnt so oder so mit dem 1. DATA Statement.
Man benötigt nicht beide Packages.
- Entweder USE graphics und dann, wie in Zeilen 30 und 50 textbackground(0), textborder(0) und textcolor(0)
- oder USE system und in Zeile 30 einmal textcolors(0,0,0)
Ich verwende textcolors so gut wie nie {programmiere meistens mit dem C128, 80-Zeichen Bildschirm und habe dann auch noch textmode(0) drin damit es zum 40-Zeichenbildschirm umschaltet}
Mit individuellen Befehlen habe ich das irgendwie besser unter Kontrolle.
READ und DATA ... Ja, da bin ich der Macht der Gewohnheit zum Opfer gefallen
Aber, danke! Ich dachte schon keiner schaut sich meine Bemühungen an.
Hier noch eine Version, als PROZEDUR:
Das kann man einfach in eigene Programme einbinden. Keine verschachtelte Schleife mehr reagiert schneller auf key$ abfragen.
{Start-Variable ist mehr als Null wenn ich Z. Bsp. eine 40 Zeichen Textzeile habe und nicht will, dass die Farben einfach aus dem Nichts auf dem Text erscheinen, sondern, so wie jetzt, drüber fahren. Dann muss ich achten, dass insgesamt drei Zeilen dafür verwendet werden. Beispiel : 40 Zeichen Text, 10 Farben ergibt Start = 10 {mehr geht auch wenn man so eine Art Verzögerung
haben möchte. Der Text muss also einen Abstand von min. einer {leeren} Zeile haben, oben und unten!}
Code Display More0010 USE system 0020 USE graphics 0030 textbackground(0); textborder(0); xa#:=0 0040 PAGE 0050 b$:="!hier werden sie geholfen!"; textcolor(0) 0060 PRINT AT 12,21-(LEN(b$)/2): ""18""+""142""+b$ 0070 dim code(11) 0080 for a:=1 to 7 do 0090 read palette 0100 code(a):=palette 0110 endfor a 0120 data 0,6,11,12,12,11,6 0130 loop 0140 regenbogen(11,0,1) 0150 endloop 0160 proc regenbogen(zeile,start,delay) 0170 if zeile=0 and start<>0 then 0180 print ""28"start > 0 ab zeile 1[2] moeglich!" 0190 end 0200 endif 0210 if zeile=24 and start<>0 then 0220 print ""28"start > 0 ab zeile 23[24] moeglich!" 0230 end 0240 endif 0250 xa#:=xa#+1 0260 if xa#>39+start then xa#:=1 0270 for b:=1 to 7 do poke (55296+40*zeile)+b+xa#-start,code(b) 0280 time 0 // wer moechte 0290 while time<delay do null 0300 endproc regenbogenDamit du nicht meinst, dass hier niemand deine Bemühungen zu schätzen weißt:
USE system ist in dem neuen Programm wieder unnötig.
Zeile 250 kann man comal-mäßig so schreiben:
Haha... Macht der Gewohnheit {immer wieder}
Ich gebe am Anfang immer USE SYSTEM und USE GRAPHICS ein weil ich stark davon ausgehe, dass ich irgendwann ein Befehl aus diesen Paketen eingeben werde und dann ist es besser wenn es sofort geht.
Damit vermeide ich auch die magische Wortwahl: Schei** Paket, nie da wenn man es braucht!
![]()
Das ist besonders dann der Fall wenn ich eine CLOSED Procedure mache.
Am Anfang habe ich gar nicht gecheckt, dass dort dann nochmals alles rein muss bzw. andere Prozeduren und Funktionen importiert werden müssen.
Zeile 250!
Einverstanden, aber meine Gehirnzellen kämpfen noch dagegen an
Wenn ich so was in den Beispielen antreffe, mache ich sofort eine c#:=c#+1 Variante draus.
Wenn wir schon bei der Zeile 250 gewesen sind, Zeile 270 kann man auch ansprechen!
Die hab' ich auch ohne Schleife realisiert, aber die Ausführung war so schlecht {sehr langsam}, dass ich mich gewundert habe,
weil ich dachte ohne der Schleifenverzögerung müsste das eigentlich schneller laufen.
Allerdings, das Gegenteil war der Fall
Schnecken-Tempo-Beispiel {ohne Schleifen}
Code Display More0010 // USE system 0020 USE graphics 0030 textbackground(0); textborder(0); xa#:=0; xb#:=0 0040 PAGE 0050 b$:="!hier werden sie geholfen!"; textcolor(0) 0060 PRINT AT 12,21-(LEN(b$)/2): ""18""+""142""+b$ 0070 DIM code(11) 0080 FOR a:=1 TO 7 DO 0090 READ palette 0100 code(a):=palette 0110 ENDFOR a 0120 DATA 0,6,11,12,12,11,6 0130 LOOP 0140 regenbogen(11,0,0) 0150 ENDLOOP 0160 PROC regenbogen(zeile#,start#,delay#) 0170 xb#:=xb#+1 0175 IF xb#>7 THEN xb#:=1; xa#:=xa#+1 0190 IF xa#>39+start# THEN xa#:=0 0200 POKE (55296+40*zeile#)+xb#+xa#-start#,code(xb#) 0210 TIME 0 // wer moechte 0220 WHILE TIME<delay# DO NULL 0230 ENDPROC regenbogenAuch wäre es bei dieser Programmversion besser, das PRINT AT Statement in Zeile 60 in die Procedure zu verlegen.
Ich habe mich eben erst gefragt, warum ich gar nichts sehe, wenn ich den Parameter 'zeile' im Prozeduraufruf verändere... 🤦
Das war der Plan für die nächste Ausgabe ![]()
Damit wäre dann diese 'Belästigung' von Zeilendifferenz bei POKE und PRINT AT auch nur eine blasse Erinnerung.
Man(n) müsste einfach die Text-Variable b$ anpassen und 'regenbogen" abrufen.
also:
b$;="das funktioniert aber..."; regenbogen (10,0,5)
Somit könnte man dann auch bei bedarf verschieden Texte einblenden bzw. verwenden...
Es müsste allerdings so gemacht werden, damit der PRINT AT nicht 40x oder > geprintet wird, denn das wäre dann Schnecken-rennen.
Zu den Packages ein Auszug aus dem englischen Handbuch:
Please login to see this attachment.
Please login to see this attachment.
Das fehlt noch:
{Die Frage ist, wer kam auf die Idee, Sprachpakete ohne Befehle als Pakete zu verpacken damit der Paketen-Welt bei COMAL mächtig aussieht. Das erinnert mich jetzt nicht an die Kühe aus den Western-Filmen, sondern an die kleine Tiere die sich viel grösser machen als sie es eigentlich sind um grössere Raubtiere zu erschrecken!
}
Also rechnerisch macht das zusammen 12 Pakete und plus RAMFILES {COMAL C128} = 13
Oder genau genommen 10 echte Kerle und 3 Mädchen beim C128
Und beim C64 sind es {aktuell} 9 echte Kerle und 3 Mädchen
Display MoreDisplay MoreDisplay MoreAn alle COMAL-80 begeisterte Mitglieder!
Wer das hier im COMAL-80 ohne POKE & PEEK schafft, bekommt 0.75 Schljiwowica direkt nach Hause geschickt {aus Kroatien!}
Also keine billig Variante, sondern COMAL-80-Qualitäts-Schljiwowica!
{Ich selber werde es auch probieren!
}
Code Display More0010 USE system 0020 USE graphics 0030 textbackground(0); textborder(0) 0040 PAGE 0050 a$:="commodore c64 - last true 8-bit pc!"; textcolor(0) 0060 PRINT AT 2,21-(LEN(a$)/2): ""18""+""142""+a$ 0070 DIM code(11) 0080 RESTORE colors 0090 FOR a:=1 TO 11 DO 0100 READ palette 0110 code(a):=palette 0120 ENDFOR a 0130 colors: 0140 DATA 0,6,14,11,12,4,4,12,11,14,6 0150 LOOP 0160 FOR a:=0 TO 47 DO 0170 FOR b:=1 TO 11 DO POKE 55328+b+a,code(b) 0180 TIME 0 // wer moechte 0190 WHILE TIME<0 DO NULL 0200 ENDFOR a 0210 ENDLOOPIch habe eben etwas mit deinem Code herum probiert. Dabei ist mir folgendes aufgefallen:
Die Zeilen 80 und 130 sind unnötig; READ beginnt so oder so mit dem 1. DATA Statement.
Man benötigt nicht beide Packages.
- Entweder USE graphics und dann, wie in Zeilen 30 und 50 textbackground(0), textborder(0) und textcolor(0)
- oder USE system und in Zeile 30 einmal textcolors(0,0,0)
Ich verwende textcolors so gut wie nie {programmiere meistens mit dem C128, 80-Zeichen Bildschirm und habe dann auch noch textmode(0) drin damit es zum 40-Zeichenbildschirm umschaltet}
Mit individuellen Befehlen habe ich das irgendwie besser unter Kontrolle.
READ und DATA ... Ja, da bin ich der Macht der Gewohnheit zum Opfer gefallen
Aber, danke! Ich dachte schon keiner schaut sich meine Bemühungen an.
Hier noch eine Version, als PROZEDUR:
Das kann man einfach in eigene Programme einbinden. Keine verschachtelte Schleife mehr reagiert schneller auf key$ abfragen.
{Start-Variable ist mehr als Null wenn ich Z. Bsp. eine 40 Zeichen Textzeile habe und nicht will, dass die Farben einfach aus dem Nichts auf dem Text erscheinen, sondern, so wie jetzt, drüber fahren. Dann muss ich achten, dass insgesamt drei Zeilen dafür verwendet werden. Beispiel : 40 Zeichen Text, 10 Farben ergibt Start = 10 {mehr geht auch wenn man so eine Art Verzögerung
haben möchte. Der Text muss also einen Abstand von min. einer {leeren} Zeile haben, oben und unten!}
Code Display More0010 USE system 0020 USE graphics 0030 textbackground(0); textborder(0); xa#:=0 0040 PAGE 0050 b$:="!hier werden sie geholfen!"; textcolor(0) 0060 PRINT AT 12,21-(LEN(b$)/2): ""18""+""142""+b$ 0070 dim code(11) 0080 for a:=1 to 7 do 0090 read palette 0100 code(a):=palette 0110 endfor a 0120 data 0,6,11,12,12,11,6 0130 loop 0140 regenbogen(11,0,1) 0150 endloop 0160 proc regenbogen(zeile,start,delay) 0170 if zeile=0 and start<>0 then 0180 print ""28"start > 0 ab zeile 1[2] moeglich!" 0190 end 0200 endif 0210 if zeile=24 and start<>0 then 0220 print ""28"start > 0 ab zeile 23[24] moeglich!" 0230 end 0240 endif 0250 xa#:=xa#+1 0260 if xa#>39+start then xa#:=1 0270 for b:=1 to 7 do poke (55296+40*zeile)+b+xa#-start,code(b) 0280 time 0 // wer moechte 0290 while time<delay do null 0300 endproc regenbogenDamit du nicht meinst, dass hier niemand deine Bemühungen zu schätzen weißt:
USE system ist in dem neuen Programm wieder unnötig.
Zeile 250 kann man comal-mäßig so schreiben:
Haha... Macht der Gewohnheit {immer wieder}
Ich gebe am Anfang immer USE SYSTEM und USE GRAPHICS ein weil ich stark davon ausgehe, dass ich irgendwann ein Befehl aus diesen Paketen eingeben werde und dann ist es besser wenn es sofort geht.
Damit vermeide ich auch die magische Wortwahl: Schei** Paket, nie da wenn man es braucht!
![]()
Das ist besonders dann der Fall wenn ich eine CLOSED Procedure mache.
Am Anfang habe ich gar nicht gecheckt, dass dort dann nochmals alles rein muss bzw. andere Prozeduren und Funktionen importiert werden müssen.
Zeile 250!
Einverstanden, aber meine Gehirnzellen kämpfen noch dagegen an ![]()
Wenn ich so was in den Beispielen antreffe, mache ich sofort eine c#:=c#+1 Variante draus.
Wenn wir schon bei der Zeile 250 gewesen sind, Zeile 270 kann man auch ansprechen!
Die hab' ich auch ohne Schleife realisiert, aber die Ausführung war so schlecht {sehr langsam}, dass ich mich gewundert habe,
weil ich dachte ohne der Schleifenverzögerung müsste das eigentlich schneller laufen.
Allerdings, das Gegenteil war der Fall ![]()
Schnecken-Tempo-Beispiel {ohne Schleifen}
0010 // USE system
0020 USE graphics
0030 textbackground(0); textborder(0); xa#:=0; xb#:=0
0040 PAGE
0050 b$:="!hier werden sie geholfen!"; textcolor(0)
0060 PRINT AT 12,21-(LEN(b$)/2): ""18""+""142""+b$
0070 DIM code(11)
0080 FOR a:=1 TO 7 DO
0090 READ palette
0100 code(a):=palette
0110 ENDFOR a
0120 DATA 0,6,11,12,12,11,6
0130 LOOP
0140 regenbogen(11,0,0)
0150 ENDLOOP
0160 PROC regenbogen(zeile#,start#,delay#)
0170 xb#:=xb#+1
0175 IF xb#>7 THEN xb#:=1; xa#:=xa#+1
0190 IF xa#>39+start# THEN xa#:=0
0200 POKE (55296+40*zeile#)+xb#+xa#-start#,code(xb#)
0210 TIME 0 // wer moechte
0220 WHILE TIME<delay# DO NULL
0230 ENDPROC regenbogen
Display More
Display MoreNa dann will ich mal das Raetsel um die fehlenden 'packages' aufloessen.
Es sind: English, Dansk, System
System wurde ja schon genannt.
In der Version 0.14 fuer den C64 mussste(konnte) man die Texte fuer die Fehlermeldungen nachladen, und waren kein fester Bestandteil des Systems.
Mit der Modulversion hat sich das dann geaendert, die Texte fuer die Fehlermeldungen wurden als 'package' mit in das Modul aufgenommen.
Und da dann immer noch genug Platz war, hat man auch gleich die Texte fuer Daenisch mit aufgenommen.
Umschalten kann man die Sprache mit z.B. USE dansk(english).Zaehlt man die von mir erwaehnten 8 'packages', und diese 3 zusammen, dann kommt man auf die genannten 11 'packages'.
Auf der 'Cartridge Demo Disk 3" findet sich das Programm 'showlibs', mit dem man sich die enthaltenen 'packages' auflisten lassen kann.
Edit:
Ich habe das Programm mal angepasst, damit es auch auf dem C128 mit COMAL80 2.02 funktioniert. hier der Beitrag:Please login to see this link.
LG aus dem fernen China
Claus
Danke für die Aufklärung!
Also man kann sagen, dass gesuchte elfte Kind ist gar kein 'Kind' bzw. Kinder demzufolge, sondern nur die Bekleidung!
Oder gar keine Pakete, sondern nur die Schachteln ohne Inhalt.
Auch wenn jetzt alles sonnenklar zu sein scheint, es juckt mich noch ein kleines Detail!
"..complete with syntax and example" steht es dort!
USE Dansk, USE English, USE Deutsch könnte man jetzt noch als Paket durchgehen lassen, weil die als PACKAGES bereits am Anfang aufgelistet sind und mit diesen Zusammen, komme ich sogar auf 13 Pakete bei COMAL-80-V2.02.
Allerdings beinhalten diese Pakete gar keine Befehle und somit kann es hier keine Syntax oder Example geben.
Das erinnert mit an alte Western Filme wo man die Kühe schnell an den Fluss gebracht hat {vor dem Verkauf, natürlich
}
Also oben sehe ich nur 8 Pakete aufgelistet! Wo ist der Rest geblieben und was war das genau!?
Nach meiner Zählung gibt es bei COMAL80 V2.01 sieben Pakete.
So wie bei die Sieben Weltwunder, Schneewittchen und die sieben Zwerge, sieben Tage der Woche, sieben Farben im Regenbogen und die sieben Todsünden.
Please login to see this attachment.
Also langsam sind wir auf 10 Packages gekommen! {Da sind wohl benachbarte Zwerge dazu gekommen}
Hier sind die von C128...
Aber bis 11 fehlt noch was {rein mathematisch
}
Immer mehr habe ich das Gefühl, das die Jungs bei UniCOMAL die COMAL 8-Bit Welt links liegen gelassen haben,
und sich hungrig auf die COMAL Amiga 2.03 gestürzt haben, damals 1989. Sogar der Hauptprogrammierer {COMAL CP/M 2.1} war dabei und auch Borge Christensen! So waren halt die Zeiten...
Aber das elfte Paket muss doch irgendwo sein?!
COMAL 2/0 kam irgendwo 1984/85 raus?... Und die Rede von 11 Packages war Ende 1988!
Also da ist irgendwo noch was versteckt oder das COMAL-Modul mit 11 Paketen ist einfach noch nicht aufgetaucht?
Please login to see this attachment.
Display MoreAn alle COMAL-80 begeisterte Mitglieder!
Wer das hier im COMAL-80 ohne POKE & PEEK schafft, bekommt 0.75 Schljiwowica direkt nach Hause geschickt {aus Kroatien!}
Also keine billig Variante, sondern COMAL-80-Qualitäts-Schljiwowica!
{Ich selber werde es auch probieren!
}
Code Display More0010 USE system 0020 USE graphics 0030 textbackground(0); textborder(0) 0040 PAGE 0050 a$:="commodore c64 - last true 8-bit pc!"; textcolor(0) 0060 PRINT AT 2,21-(LEN(a$)/2): ""18""+""142""+a$ 0070 DIM code(11) 0080 RESTORE colors 0090 FOR a:=1 TO 11 DO 0100 READ palette 0110 code(a):=palette 0120 ENDFOR a 0130 colors: 0140 DATA 0,6,14,11,12,4,4,12,11,14,6 0150 LOOP 0160 FOR a:=0 TO 47 DO 0170 FOR b:=1 TO 11 DO POKE 55328+b+a,code(b) 0180 TIME 0 // wer moechte 0190 WHILE TIME<0 DO NULL 0200 ENDFOR a 0210 ENDLOOPIch habe eben etwas mit deinem Code herum probiert. Dabei ist mir folgendes aufgefallen:
Die Zeilen 80 und 130 sind unnötig; READ beginnt so oder so mit dem 1. DATA Statement.
Man benötigt nicht beide Packages.
- Entweder USE graphics und dann, wie in Zeilen 30 und 50 textbackground(0), textborder(0) und textcolor(0)
- oder USE system und in Zeile 30 einmal textcolors(0,0,0)
Ich verwende textcolors so gut wie nie {programmiere meistens mit dem C128, 80-Zeichen Bildschirm und habe dann auch noch textmode(0) drin damit es zum 40-Zeichenbildschirm umschaltet}
Mit individuellen Befehlen habe ich das irgendwie besser unter Kontrolle.
READ und DATA ... Ja, da bin ich der Macht der Gewohnheit zum Opfer gefallen ![]()
Aber, danke! Ich dachte schon keiner schaut sich meine Bemühungen an. ![]()
Hier noch eine Version, als PROZEDUR:
Das kann man einfach in eigene Programme einbinden. Keine verschachtelte Schleife mehr reagiert schneller auf key$ abfragen.
{Start-Variable ist mehr als Null wenn ich Z. Bsp. eine 40 Zeichen Textzeile habe und nicht will, dass die Farben einfach aus dem Nichts auf dem Text erscheinen, sondern, so wie jetzt, drüber fahren. Dann muss ich achten, dass insgesamt drei Zeilen dafür verwendet werden. Beispiel : 40 Zeichen Text, 10 Farben ergibt Start = 10 {mehr geht auch wenn man so eine Art Verzögerung
haben möchte. Der Text muss also einen Abstand von min. einer {leeren} Zeile haben, oben und unten!}
0010 USE system
0020 USE graphics
0030 textbackground(0); textborder(0); xa#:=0
0040 PAGE
0050 b$:="!hier werden sie geholfen!"; textcolor(0)
0060 PRINT AT 12,21-(LEN(b$)/2): ""18""+""142""+b$
0070 dim code(11)
0080 for a:=1 to 7 do
0090 read palette
0100 code(a):=palette
0110 endfor a
0120 data 0,6,11,12,12,11,6
0130 loop
0140 regenbogen(11,0,1)
0150 endloop
0160 proc regenbogen(zeile,start,delay)
0170 if zeile=0 and start<>0 then
0180 print ""28"start > 0 ab zeile 1[2] moeglich!"
0190 end
0200 endif
0210 if zeile=24 and start<>0 then
0220 print ""28"start > 0 ab zeile 23[24] moeglich!"
0230 end
0240 endif
0250 xa#:=xa#+1
0260 if xa#>39+start then xa#:=1
0270 for b:=1 to 7 do poke (55296+40*zeile)+b+xa#-start,code(b)
0280 time 0 // wer moechte
0290 while time<delay do null
0300 endproc regenbogen
Display More
"Blättere" wieder die alten ComalToday Zeitungen durch und da hat meine Nase folgendes entdeckt:
Und 'back to the roots'!
Das hier ist auch interessant:
$2.95 >>> C64 COMAL 2.0 Keywords!
Lists all the keywords built into the cartridge! (including all 11 built-in packages) in alphabetic order complete with syntax and example"
Also oben sehe ich nur 8 Pakete aufgelistet! Wo ist der Rest geblieben und was war das genau!?
Könnte es sein, dass diese Dinger {3 Pakete} noch im Modul sitzen und keiner weiß es mehr nach Jahrzehnten?
Nun, COMAL V2.02 {C128} hat noch RAMFILES und demzufolge werden noch 2 Pakete vermisst {oder doch noch 3}??
Möglich auch, das UniCOMAL das stillschweigend abgespeckt hat oder sich damit gar nicht mehr beschäftigen wollte weil die sich dem AMIGA {V2.03} und IBM gewidmet haben?
Wer das hier im COMAL-80 ohne POKE & PEEK schafft, bekommt 0.75 Schljiwowica direkt nach Hause geschickt {aus Kroatien!}
Cooler Effekt!
Da muss ich leider passen. Solche raffinierten Programme bekomme ich weder ohne- noch mit POKE hin. Das ist nur etwas für erfahrene C64-Programmierer. Den Sliwowitz werde ich also leider nicht bekommen. - Wo hast du sowas gelernt?
Das ist mir vorgestern eingefallen weil man das oft bei den Intros sieht und die sind bekanntlich alle im Assembler geschrieben.
Dachte mir es kann sicher nicht so schwer sein, so was auch mit COMAL {ansehnlich} auf die Beine zu stellen.
Code unten {so habe ich alles angefangen}... und Please login to see this link. war dann das Endresultat.
Keine Ahnung ob man das lernen kann?
Ich bekomme eine Idee und dann beginnt der Prozess im Kopf wie ich das machen könnte, dann bringe ich das aufs 'Papier' {dafür verwende ich Windows Notepad, also öfters 'programmiere' ich zuerst dort und später kopiere dann alles in den Emulator {VICE}}
Das mache ich auch so wenn ich kleine Assembler-Routinen erstelle {Monate später wundere ich mich selber wie das erstanden ist}
Unterwegs fallen mir dann viele Verbesserungsmöglichkeiten ein und aus A wird dann am Schluss ein Z und das macht dann das gleiche Zeug wie A aber anders!
Übrigens, dieser Code hier unten ist schneller als FOR...ENDFOR Schleifen. Da müsste die Handbremse einspringen!
Sieht aber nicht so COMAL-Ideal aus {Ja, da denkt bestimmt jemand sofort an BASIC 2.0,
}
0010 USE system
0020 USE graphics
0030 textbackground(0); textborder(0)
0040 PAGE
0050 a$:="commodore c64 - last true 8-bit pc!"
0060 textcolor(0)
0070 PRINT AT 2,21-(LEN(a$)/2): ""18""+a$
0080 LOOP
0090 FOR a:=1 TO 48 DO
0100 POKE 55296+32+a,0
0110 POKE 55297+32+a,6
0120 POKE 55298+32+a,14
0130 POKE 55299+32+a,11
0140 POKE 55300+32+a,12
0150 POKE 55301+32+a,4
0160 POKE 55302+32+a,4
0170 POKE 55303+32+a,12
0180 POKE 55304+32+a,11
0190 POKE 55305+32+a,14
0200 POKE 55306+32+a,6
0210 TIME 0
0220 WHILE TIME<3 DO NULL
0230 ENDFOR a
0240 ENDLOOP
Display More
{Ich selber werde es auch probieren!
}
Was, den Schljiwowica???
Ich bin zwar ein Antialkoholiker, aber Schljiwowica ist kein Alkohol, sondern die beste Medizin ![]()
An alle COMAL-80 begeisterte Mitglieder!
Wer das hier im COMAL-80 ohne POKE & PEEK schafft, bekommt 0.75 Schljiwowica direkt nach Hause geschickt {aus Kroatien!}
Also keine billig Variante, sondern COMAL-80-Qualitäts-Schljiwowica! ![]()
![]()
{Ich selber werde es auch probieren!
}
0010 USE system
0020 USE graphics
0030 textbackground(0); textborder(0)
0040 PAGE
0050 a$:="commodore c64 - last true 8-bit pc!"; textcolor(0)
0060 PRINT AT 2,21-(LEN(a$)/2): ""18""+""142""+a$
0070 DIM code(11)
0080 RESTORE colors
0090 FOR a:=1 TO 11 DO
0100 READ palette
0110 code(a):=palette
0120 ENDFOR a
0130 colors:
0140 DATA 0,6,14,11,12,4,4,12,11,14,6
0150 LOOP
0160 FOR a:=0 TO 47 DO
0170 FOR b:=1 TO 11 DO POKE 55328+b+a,code(b)
0180 TIME 0 // wer moechte
0190 WHILE TIME<0 DO NULL
0200 ENDFOR a
0210 ENDLOOP
Display More
Wer in COMAL poket oder peekt, der ist eh schon so rettungslos verloren, dass er auch gleich in BASIC2 programmieren kann!
Dann sind wohl auch alle die USE {PACKAGE} im COMAL aktivieren und verwenden auch rettungslos verloren, denn auch dort funktioniert nix ohne PEEK und POKE! Es heißt einfach LDA {PEEK} und STA {POKE}.
Ob USE-Anwender sich jetzt unwissend strafbar machen!? ![]()
![]()
Aber: Was wolltest du denn, um Gottes Willen, mit der Taste/dem Character?!? Ich hätte das gar nicht vermisst!
Ich bastele gerade an einem Texteditor in COMAL. Und da muss ich mir überlegen, welche Zeichen man eintippen darf. Diese werden im Programm als "zulässige Zeichen" definiert. Also z.B. auch ,.!?#@%&-+[]<>() usw. Und ich dachte, es könnte nicht schaden, wenn man den Pfeil-nach-Links auch eingeben darf. - Aber das hat sich jetzt wohl erledigt.
UniCOMAL fängt da die Abfrage der Tastatur-Matrix ab und macht dann halt was eigenes draus = Unterstrich!
Aber man kann im Programm selber die Tastatur-Matrix abfangen und auf die entsprechende Taste umleiten = Pfeil nach rechts!
Ist ganz einfach...
Natürlich kann man in diesem IF - ENDIF Bereich alles rein schmeißen was man will sobald die Pfeil nach rechts Taste gedrückt wird!
{Ja, irgendwann werden wir doch alle notgedrungen Kriminell
}