Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » KC85/4 Hintergrundmusik spielen während andere Aktionen möglich sind » Themenansicht

Autor Thread - Seiten: -1-
000
01.08.2026, 19:07 Uhr
mariodonick



Seit ich ein Kind war (Anfang der 90er) war ich von den wenigen KC85-Spielen fasziniert, bei denen Musik läuft, während das Spiel weiterhin bedienbar bleibt. Also nicht wie der Sound-Befehl, wo alles stoppt, während die Töne ablaufen.

Mit JKCEMU und unter Turbo Pascal unter MicroDOS programmier ich mir gerade ein kleines Rollenspiel (im JRPG-Stil, so eine Art Final Fantasy oder Phantasy Star) und da nutze ich ebenfalls den Sound-Befehl. Das klingt auch gar nicht schlecht, aber stoppt halt das Spiel - gut für die Titelmusik oder Zwischensequenzen/Cut Scenes, aber nicht für die Bewegung durch die Spielwelt.

Durch Suchen und einige Rechercheversuche mit LLMs (wie Gemini) habe ich den Eindruck, man kann dafür die CTC und PIO nutzen - was also hardwarenah ist und mir viel Angst macht, weil ich davon nix verstehe. (Gemini haut da auch 'selbstbewusst' irgendwelche Programmentwürfe raus, bei denen Ports mit Werten belegt werden, mit denen dann angeblich Töne erzeugt werden, und die lassen sich sogar kompilieren und ausführen, aber man hört halt nix).

Gibt es irgendwo eine Anleitung, ein Tutorial oder Beispiel-Quelltext, wo ich sehen kann, OB und ggf. wie ich mit dem Port-Befehl unter Turbo Pascal 3 sowas erreichen könnte?

Oder geht sowas letztlich nur in reinem Assembler?

Dieser Beitrag wurde am 01.08.2026 um 19:15 Uhr von mariodonick editiert.
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
02.08.2026, 05:58 Uhr
ralle



In Assembler gab es Dudel.KCC, was im Hintergrund spielte.
-> http://kc85.info/index.php/kc-news/267-kc-news-4-1995.html?start=3
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700

Dieser Beitrag wurde am 02.08.2026 um 08:48 Uhr von ralle editiert.
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
06.08.2026, 19:45 Uhr
mariodonick



Ein kleines Update:

Ich habe eine annehmbare Lösung gefunden. Wenn ich die Tondauer der Einzeltöne sehr kurz halte (Wert 5), dann kann ich zwischendurch trotzdem noch halbwegs flüssig die Tastatur abfragen. Da es kein Action-Spiel wird, sondern man auf der Weltkarte nur rumlaufen muss und alles andere über Menüs und rundenbasiert läuft, ist die kleine Verzögerung zu vernachlässigen.

Bei Tönen, die länger gehalten werden sollen, muss der Einzelton einfach mehrfach wiederholt werden.

(Das jeweilige Lied liegt in einem Array und in jedem Zyklus der Hauptschleife mit Tastaturabfrage wird ein Ton des Arrays abgespielt, bis alles durchlaufen sind, danach wieder von vorne).
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
06.08.2026, 21:11 Uhr
Klaus



Leider habe ich vom KC85 und auch von Turbo-Pascal keine Ahnung.
Aber es gibt ja das Sound Modul M066, wofür auch Player existieren.
Da läuft die Ausgabe, wie bei der K1520-Soundkarte sicher auch im Hintergrund über Interrupt. D.h. es stört die Bildausgabe gegenüber Polling nur minimal bis gar nicht.

Evtl. ist ja ein Programmierexperte hier, der Dir eine Interrupt-Routine (geht sicher nur in Assembler) schreiben kann, die Töne auf die von Dir genannte Art (also mit den im KC85 eingebauten Mitteln) ausgibt und die Du in Dein Pascal Programm einbauen kannst.

Keine Ahnung, ob so etwas geht…. Ob die KI so etwas hinbekommt… hmmm … ich bin da immer noch sehr misstrauisch, obwohl es schon einige positive Meldungen hier im Forum gibt, wo die KI prima Ergebnisse abgeliefert hat.

Viele Grüße,
Klaus
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
06.08.2026, 22:41 Uhr
Bert




Zitat:
mariodonick schrieb
Durch Suchen und einige Rechercheversuche mit LLMs (wie Gemini) habe ich den Eindruck, man kann dafür die CTC und PIO nutzen - was also hardwarenah ist und mir viel Angst macht, weil ich davon nix verstehe.


Nunja, ich würde lieber das CAOS-Handbuch (und ggf. den Schaltplan) konsultieren als ein KI.
Aber grundlegend stimmt das, beim KC85 wird die Tonausgabe über die CTC realisiert. Der eine PIO-Port ist für die Lautstärke zuständig.

Keine Angst: von all den IO-Baugruppen für den Z80-Bus ist die CTC noch relativ harmlos.
Und es kann auch nichts kaputtgehen, wenn mal ein Bit falsch ist.


Zitat:

Gibt es irgendwo eine Anleitung, ein Tutorial oder Beispiel-Quelltext, wo ich sehen kann, OB und ggf. wie ich mit dem Port-Befehl unter Turbo Pascal 3 sowas erreichen könnte?


Ich habe hier mal einen kleinen Ton-Test in C (und in Assembler) abgelegt:
https://github.com/boert/KC85-Programme_in_C/tree/main/Ton-Test

Und ja, für alle Programmiersprachen, mit denen Portzugriffe möglich sind, kann man das Beispiel anpassen (BASIC, Pascal, Assembler, Forth, C,...).
--
Viele Grüße,
Bert
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
06.08.2026, 23:18 Uhr
kaiOr

Avatar von kaiOr


Zitat:
mariodonick schrieb
unter Turbo Pascal unter MicroDOS programmier ich mir gerade ein kleines Rollenspiel


Das klingt für mich nach einem CP/M-Spiel. Da fängt man wohl an ein neueres ZAS nachzuladen und durchs Schlüsselloch (Koppel-Schnittselle) via ESC-Codes ein Schnipsel Maschinencode ins Basis-Device zu schleusen, das dort die Soundausgabe bewerkstelligt und sich idealerweise über die User-Bereiche der Koppelschnittstelle mit weiteren Daten füttern und dirigieren lässt. Oder denke ich zu kompliziert?

Gruß,
Kai
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
07.08.2026, 09:48 Uhr
Bert



Stimmt. Den Punkt mit MicroDOS bzw. CP/M hatte ich übersehen.
Den direkten Zugriff auf die CTC und die PIO vom Grundgerät hat man damit nicht.

Man könnte mit Hilfe der ESC-Funktionen ein Hilfsprogramm im Grundgerät ablegen und dieses aufrufen.
Hier eine Übersicht über die ESC-Funktionen unter MicroDOS (Anlage 3, Seite 74):
https://www.mpm-kc85.de/dokupack/D004_HB_Progr.pdf

Aber das ist nicht mal eben so nebenbei gemacht. Und auch die KI kann da wahrscheinlich (noch) nicht helfen...
--
Viele Grüße,
Bert
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
07.08.2026, 10:46 Uhr
mariodonick



Danke für eure Antworten! Bert, dein Beispiel schaue ich mir auf jeden Fall mal an.

Es gibt in Turbo Pascal einen Port-Befehl, aber bin unsicher, ob der unter MicroDOS wirklich auf das Grundgerät zugreift.

Ziel ist, dass das Spiel mit den Mitteln, die ich selbst nach 1990 hätte haben können, läuft. Daher würde ich erst später entwickelte Module wie das Klangmodul außen vor lassen.

Ich hatte damals von einem Verwandten einen nicht mehr benötigten KC85/3 mit D004 und 64 K RAM-Modul erhalten, aber war auf HC-BASIC beschränkt. In der Schule lernte ich später Turbo Pascal und hab dann auch 2006-2018 relativ viel mit FreePascal programmiert (unter Windows und Linux). Später merkte ich dann, dass es Turbo Pascal für den KC85 unter D004 gab, inklusive der Grafik- und Sound-Includedatei Box3.inc bzw. Box4.inc.

Für mein Spiel jetzt tue ich im JKCEMU aber so, als hätte ich damals den KC85/4 statt /3 gehabt. Das macht mir gerade echt viel Spaß.

Ach und was "KI" angeht... da bin aus prinzipiellen (auch politischen) Gründen sehr skeptisch und extrem vorsichtig. Mal was fragen oder testen, aber nie was einfach glauben, und nie was übernehmen, was ich nicht nachrecherchiert und selbst verstanden habe.


Zurzeit komme ich mit meiner pragmatischen Lösung gut zurecht, und es klingt gar nicht schlecht. Ich werde am Wochenende mal einen Entwicklungs-Tagebuch-Thread aufmachen und ein bisschen über das Spiel erzählen.

Dieser Beitrag wurde am 07.08.2026 um 10:48 Uhr von mariodonick editiert.
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
07.08.2026, 12:49 Uhr
Bert




Zitat:
mariodonick schrieb
Es gibt in Turbo Pascal einen Port-Befehl, aber bin unsicher, ob der unter MicroDOS wirklich auf das Grundgerät zugreift.


Nein. Das TP-Programm läuft auf der CPU im D004. Und damit sind die Portzugriffe auch im Adressraum der D004.
Da wären dann so Peripherie wie der Floppy-Controller und ggf. das GIDE mit RTC erreichbar.
--
Viele Grüße,
Bert
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
07.08.2026, 17:08 Uhr
ralle



Das ist das Problem daran. Mario hatte schon mit ZAS die Möglichkeit, überhaupt musikalische Aneinanderreihungen von Tönen richtig ermöglicht. In ZAS-Demo.com demonstriert.

Das muss man sich so vorstellen: Der KC85/2-5 fungiert als Terminal und die D004 als Server/Hauptrechner. Besonders unter CPM. Unter CAOS läuft ein Diskettenerweiterungsprogramm, was die Verbindung zur D004 bringt. Im CAOS werden FLOAD und SERVICE in den Arbeitsspeicher der D001 geladen und DEP läuft oben unter einem CPM, nur das dieses nicht direkt in Erscheinung tritt. Im Grunde werden alle Consolenbefehle durchgereicht, die auf der D001 möglich sind. Also Bild, Tastatur, Printer, Punscher (jetzt USB). In der D004 bleiben nur noch die Diskettenbefehle.
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
07.08.2026, 21:49 Uhr
FL



Das CAOS-UP TON, das letztlich für die Tonausgabe zuständig ist, funktioniert im Prinzip so:
Als erstes wird über Bit1 von (IX+8) gefragt ob noch eine Tonausgabe läuft. Wenn ja wird gewartet.
Danach werden die CTC-Kanäle 0 und 1 mit der Tonhöhe und CTC-Kanal 2 mit der Tonlänge programmiert.
Der Kanalinterrupt von CTC2 wird eingeschalten. Es wird noch Bit1 von (IX+8) gesetzt um anzuzeigen,
daß die Tonausgabe läuft und dann das UP beendet. Dein Programm läuft ganz normal weiter.
Irgendwann löst CTC2 den Interrupt aus. Die CTC-Kanäle werden angehalten und Bit1 von (IX+8) gelöscht.
Wenn aber dein Programm TON aufruft, bevor der Ton zu Ende gespielt ist, wartet das UP auf dessen Ende.
Mit den von dir beobachteten Effekten.

Ich habe gesehen, es gibt eine Prozedure READ1.
Eine Möglichkeit währe damit (IX+8) abzufragen, um festzustellen ob die Tonausgabe noch läuft.

Gruß
Frank.
 
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek