Robotrontechnik-Forum

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

Robotrontechnik-Forum » Technische Diskussionen » Assembler + KC85/4 » Themenansicht

Autor Thread - Seiten: -1-
000
14.09.2018, 22:18 Uhr
EPS



Hallo, ich bin seit kurzem wieder im Retro Fieber und habe meine alten Schätzchen ausgegraben KC85/4, KCc, Schneider CPC464 (zugegeben auch einen KC85 Emulator zum spielen).

Nach 30 Jahren "Abstinenz" wollte ich mal wieder etwas programmieren, vorzugsweise aber nicht wie anno domini in Basic, sondern in Assembler.

In den Jahren dazwischen habe ich dies auf diversen Mikrocontrollern auch gemacht und bin, was Assembler angeht, einigermaßen fit. Aber es steht und fällt natürlich mit dem Hardwareverständnis.

Das mit dem Hardwareaufbau des KC 85/4 ist allerdings doch schon ein paar Monde her, daher die Frage(n) auf die ich nirgends so richtig eine Antwort finde.

Im Systemhandbuch ist ein Beispiel für Basic um die Bilder zu schalten, z.B. Zeige Bild 0 - schreibe Bild 1 etc.pp.

Ebenfalls ist der RAM Aufbau etc. beschrieben und auch das Switchen von Speicherbereichen. Alles soweit verständlich.

Aber mir fehlt ein genaues Beispiel wie ich gezielt z.B. den Pixelram von Bild 0 einschalten und beschreiben kann, respektive den FarbRAM usw., wohlgemerkt in Assembler.

Kann mir da jemand weiter helfen, eine Anleitung, Einweisung, Beispiel o.ä. wäre toll (oder auch ein anderes Forum sollte ich hier falsch sein mit diesem Anliegen).

Vielen Dank im Vorraus.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
16.09.2018, 16:29 Uhr
mwd



Hallo,
das Schalten zwischen Bild 0 und 1 wird über den Ausgabekanal 84H realisiert. Details dazu finden sich im Systemhandbuch im Kapitel 3.3.2. auf Seite 61. Damit der aktuelle Zustand jederzeit verfügbar ist, sollte das an den Kanal 84H ausgegebene Byte auch in der Merkzelle IX+1 (siehe S. 81) gespeichert werden. Z. B.: schaltet folgender Code den Zugriff auf Bild 1, während Bild 0 angezeigt wird.

LD A,IX+1
AND 0FAh ; Bits 1 und 3-7 unberührt lassen
OR 4 ; Anzeige Bild 0, Zugriff auf Bild 1
OUT 84h
LD IX+1,A

Grüße,
Matthias.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
16.09.2018, 16:42 Uhr
EPS



Hey, danke für den Schubser in die richtige Richtung. Ist das die einzige Möglichkeit oder die einzig richtige? Wenn ich es richtig kapiere müsste doch eine "Manipulation" der IRM Arbeitszellen auch funktionieren - oder?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
16.09.2018, 17:12 Uhr
mwd



Keine Ahnung, ob es noch andere Möglichkeiten gibt. Pixel- und Color-RAM der beiden Bilder liegen hintereinander auf der gleichen Adresse. Irgendwie muß die jeweilige Ebene aktiviert werden. Das geht meines Wissens nur über Ausgabekanal 84H. Falls Du das Video-RAM zwischen Adresse AD00h und B700h meinst, das kannst Du direkt beschreiben. Jedoch stehen dort nur die ASCII-Codes des Bildschirminhalts.

Grüße,
Matthias.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
16.09.2018, 17:16 Uhr
EPS



Du hast recht. Da hab ich wohl was durcheinander geschmissen.

Danke nochmals, der KC85 ist in der Hinsicht doch recht speziell.

Jetzt werd ich erst einmal etwas herumexperimentieren um mich (wieder) an den KC85 zu "gewöhnen". 30 Jahre sind echt verdammt lang her...
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
16.09.2018, 17:48 Uhr
Zwangsrentner



Vom KC-Club gab's einen Assembler-Programmierkurs. Liegt bei mir noch irgendwo, weiß aber nicht ob dir das was bringt ca 170 Seiten.
grüsse aussem harz
--
I'm just a truckle, but I don't like to truckle >TIMOTHY TRUCKLE<

Dieser Beitrag wurde am 16.09.2018 um 17:49 Uhr von Zwangsrentner editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
16.09.2018, 21:09 Uhr
maleuma



Hallo EPS,

wenn Du Dich nicht selbst um die richtige Belegung der Ports und IX-Arbeitszellen kümmern willst, kannst Du am KC85/4 auch die ESC-Routinen benutzen. ESC+"1" bis ESC+"4" schaltet zum Beispiel die IRM-Ebenen um. Siehe dazu im Systemhandbuch bei den ESC-Funktionen nach.

Übrigens würde ich das Beispiel von mwd etwas anders schreiben:
LD A,(IX+1) ; aktueller Wert von Port 84h
AND 0FAh ; Bits 1 und 3-7 unberührt lassen
OR 4 ; Anzeige Bild 0, Zugriff auf Bild 1
LD (IX+1),A ; zuerst die Merkzelle aktualisieren
OUT 84h ; dann den Ausgabebefehl senden.

Wenn Du die Reihenfolge der letzten beiden Befehle anders herum schreibst, kann bei einem Interrupt zwischen diesen beiden Befehlen eine falsche Einstellung entstehen.

Um das gleiche mit ESC-Funktionen zu realisieren, programmierst Du:
CALL 0F003H
DB 23H ; OSTR
DB 1BH ; ESC
DB "3" ; Anzeige Bild 0, Zugriff Bild 1
DB 0
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
01.10.2018, 23:21 Uhr
EPS



Ich muß (leider) nochmal darauf zurück kommen. Ich habe jetzt eine ganze Weile experimentiert und komme auf merkwürdige Ergebnisse. Folgendes Testprogramm habe ich der Einfachheit halber mal geschrieben:

CURSO: EQU $B7A0 ;IRM Arbeitszelle: CURSO

; CALL $F003 ;PV I
; DB $23 ;UP: OSTR
; DB $1B ;ESC
; DB "3" ;Anzeige Bild 0, Zugriff Bild 1
; DB $00

LD A, (IX+1)
AND $FA
OR $04
LD (IX+1), A
OUT ($84), A

LD DE, $1D19 ;Start der Ausgabe in Zeile 29, Spalte 25
LD (CURSO), DE

LD A, "E"
CALL $F003
DB 00


CALL $F003 ;PV I
DB $23 ;UP: OSTR
DB $1B ;ESC
DB "2" ;Anzeige Bild 1, Zugriff Bild 1
DB $00

Benutze ich die ESC Code Variante die oben in REM ausgeklammert steht funktioniert die Ausgabe des Buchstaben "E" auf Bild 1 an einer gewünschten Position, kann ich im RAM überprüfen, das "E" ist dann auf Adresse $B1A1.
Starte ich es so wie es hier steht, also über die OUT (84h) Variante, funktioniert es nicht. Genauer gesagt wird der Buchstabe "E" im Bild 0 ausgegeben und landet auf Adresse $B6A1!

Kann ich mir nicht erklären ... bin ich zu blöde, übersehe ich da etwas oder ist das am Ende ein "Fehler" im Emulator (KCEMU v0.5.1 von Torsten Paul) das der womöglich das OUT 84h nicht kapiert?

Wäre für Hilfe sehr dankbar, ich knabber da jetzt schon 2 Tage dran und natürlich würde ich das gerne am Live System testen, aber ich bekomme meinen KC erst Ende Oktober wieder, hab derzeit nur den Emulator.

Dieser Beitrag wurde am 01.10.2018 um 23:22 Uhr von EPS editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
02.10.2018, 12:23 Uhr
PIC18F2550

Avatar von PIC18F2550

Lagen die ASCII Puffer für beide Segmente nicht in Segment 0?
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
02.10.2018, 17:14 Uhr
EPS



Laut Systemhandbuch liegt der Video-RAM
Bild 1 auf AD00 - B1FF und für
Bild 0 auf B200 - B6FF.

wie gesagt, gebe ich ein Zeichen aus und schalte via ESC Steuerzeichen ist das Verhalten wie es sein soll und das ausgegebene Zeichen landet auch wo es soll.

Mache ich es via OUT landet das Zeichen nicht im korrekten Bild und ebenso nicht im entsprechenden Video-RAM und ich hab keine Erklärung dafür.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
03.10.2018, 11:46 Uhr
Bert




Zitat:
EPS schrieb
Kann ich mir nicht erklären ... bin ich zu blöde, übersehe ich da etwas oder ist das am Ende ein "Fehler" im Emulator (KCEMU v0.5.1 von Torsten Paul) das der womöglich das OUT 84h nicht kapiert?


Nein, das ist alles richtig so.
Zum Verständnis nochmal das (super!) Schaubild aus dem Handbuch:


Der Port 084h schaltet direkt die Hardware. Da dort nur Schreiben funktioniert (und nicht das Zurücklesen), gibt es die Speicherzelle IX+1.

Mit dem folgenden kleinen Testprogramm kann man sich den Inhalt von IX+1 ausgeben lassen und die Auswirkung der Tastenkombinationen ESC+1 bis ESC+4 testen:

Quellcode:

    org 200h

PVI     EQU 0F003h
AHEX    EQU 01ch
OSTR    EQU 023h
CRLF    EQU 02ch

CR      EQU 13
LF      EQU 10
    DEFW 7F7FH          ;Standardprolog
    DEFM 'READIX'       ;Menuewort
    DEFB 1 ;Epilog

CHECK:
    CALL PVI
    DEFB OSTR
    DEFB CR
    DEFB LF
    DEFM 'IX+1: '
    DEFB 0

    LD A, (IX+1)
    CALL PVI
    DEFB AHEX

    CALL PVI
    DEFB CRLF
    RET



Damit sehe ich folgende Werte:

Quellcode:

ESC+1      IX+1=28     Anzeige 0 + Eingabe 0
ESC+2      IX+1=2D     Anzeige 1 + Eingabe 1
ESC+3      IX+1=2C     Anzeige 0 + Eingabe 1
ESC+4      IX+1=29     Anzeige 1 + Eingabe 0



Nun zum eigentlichen Problem:
Der ASCII-Speicher ist genauso ein Hilfsspeicher, wie IX+1.
Dort werden Textausgaben die über das Betriebsystem gehen hinterlegt, um sie rücklesen zu können. Im Pixel-RAM stehen ja nur die Pixel.

Der Unterschied zwischen ESC+3 und dem direkten modifizieren von IX+1 und 084h liegt in der Speicherstelle VRAM (0B7CBh).
Dort wird bei den ESC-Umschaltungen die richtige Startadresse für den ASCII-Speicher eingetragen.

Die Frage ist, was Du wirklich machen willst:
1. Spiele oder
2. Anwendungssoftware

Für ersteres würde ich die Hardware direkt manipulieren und die CAOS-Funktionen links liegen lassen. Normalerweise enden Spiele in einer Endlosschleife, die mit RESET beendet wird. Also muß man auch nicht wirklich aufräumen.

Für Anwendungssoftware würde ich komplett über die CAOS-Funktionen gehen. Ein Mischmasch bringt da nur irgendwas durcheinander.

Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
03.10.2018, 12:20 Uhr
EPS



Ich habe mittlerweile meinen Fehler gefunden. Der Emulator arbeitet korrekt, ich hab bei einer Abfrage nur was falsch gemacht...weil ich ein Dödel bin.

Dennoch, Vielen Dank für Deine Antwort,

ich möchte ein Spiel machen. Für eine Anwendung würde ich mir den Aufwand in der Tat nicht antun

Grundsätzlich ist das "Problem" folgendes:

Ich möchte Zeichen (z.B. die Spielfigur), auf dem richtigen Bild ausgeben aber nicht einfach nur 2 farbig (als VG und HG), sondern mit mehreren Farben. Logischerweise nur Zeilenweise eingefärbt da ja Spaltenweise beim KC85 nur 2 Farben gehen.

Nehme ich die Ausgabe über PV-1 Unterprogramm 00h wird das Zeichen natürlich ausgegeben, auf dem eingestellten Bild mit der eingestellten Farben. Danach müsste ich den ColorRAM "manipulieren" um meine gewünschte Farbe(n) hinzubekommen.

Klappt auch alles soweit, hab ich programmiert, läuft.

Ist aber leider nicht wirklich optimal, da ich im Prinzip das Zeichen, zumindest dessen Farbe, 2 x ausgebe und zudem sind die PV Routinen sicher nicht gerade auf Speed optimiert

Möchte ich nun aber eine eigene Routine programmieren muß ich natürlich auch ALLES selbst machen, also sowohl den Eintrag des Zeichens in den korrekten VideoRAM (ASCII), die Pixel im PixelRAM und die Farbe(n) im ColorRAM.

Und dabei bin ich über obiges Problem gestolpert ... aber nun kommme ich ja weiter.

------------------

Kleiner Nachtrag:
Eine Merkwürdigkeit ist mir dennoch aufgefallen und ich hab extra nochmal in das originale Systemhandbuch vom 85/4 geschaut.

Bit 1 im IX+1 enthält die Angabe ob auf "Pixel = 1 oder Farbe = 0" zugegriffen wird.

Wenn ich meinen KC starte steht im IX+1 eine 28h, bedeutet Bit 1,2,3 sind 0.

Schalte ich auf FarbRAM schalte (ESC+9) steht in Bit 1 eine 1! Ist also genau andersrum wie im Systemhandbuch beschrieben. Druckfehler?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
11.10.2018, 02:39 Uhr
Crawler

Avatar von Crawler


Zitat:
EPS schrieb
Eine Merkwürdigkeit ist mir dennoch aufgefallen und ich hab extra nochmal in das originale Systemhandbuch vom 85/4 geschaut.

Bit 1 im IX+1 enthält die Angabe ob auf "Pixel = 1 oder Farbe = 0" zugegriffen wird.

Wenn ich meinen KC starte steht im IX+1 eine 28h, bedeutet Bit 1,2,3 sind 0.

Schalte ich auf FarbRAM schalte (ESC+9) steht in Bit 1 eine 1! Ist also genau andersrum wie im Systemhandbuch beschrieben. Druckfehler?



Exakt! Das ist ein Fehler in der Dokumentation, der im CAOS 4.5 Handbuch bereits behoben wurde.

Dieser Beitrag wurde am 11.10.2018 um 02:40 Uhr von Crawler editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
11.10.2018, 05:40 Uhr
ralle



Neues BoulderDash? Da ist der Frosch mehrfarbig.
--
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
Seitenanfang Seitenende
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