Robotrontechnik-Forum

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

Robotrontechnik-Forum » Technische Diskussionen » JU+TE Tiny - Quelltext für 6k gesucht » Themenansicht

Autor Thread - Seiten: -1-
000
05.05.2026, 21:08 Uhr
stone

Avatar von stone

Hallo, ihr Lieben,
ich habe mir vorgenommen, eine Grafikerweiterung für den JU+TE Tiny zu bauen. Vorher möchte ich aber die Schaltung verstehen. Dazu benötige ich jetzt etwas Software. Am liebsten wäre mir der Quellcode für das 6k Betriebssystem. Hat jemand diesen oder kann mir einen Link nennen?

Gehe ich richtig in der Annahme, das zuerst ein Steuerzeichen oder ähnliches in den Bereich 6000h-63FFh geschrieben werden muss, um die richtige RAM-Bank auszuwählen? Danach werden dann die Grafik-Daten in den Bereich 4000h-5FFFh geschrieben?

Liebe Grüße, Eure Jona.

PS: In Garitz hat es mir wieder sehr gefallen. Der Wartburg hat uns sicher nach Hause gebracht.

Dieser Beitrag wurde am 05.05.2026 um 21:55 Uhr von stone editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
05.05.2026, 22:34 Uhr
stone

Avatar von stone

Ich habe es gerade selbst gefunden.
Danke, an Volker!
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
06.05.2026, 08:08 Uhr
Bert




Zitat:
stone schrieb
Gehe ich richtig in der Annahme, das zuerst ein Steuerzeichen oder ähnliches in den Bereich 6000h-63FFh geschrieben werden muss, um die richtige RAM-Bank auszuwählen? Danach werden dann die Grafik-Daten in den Bereich 4000h-5FFFh geschrieben?


Genau.
Auf 6000h trägst Du ein, auf welche Bank (bzw. Farbe) zugegriffen werden soll:

Dabei sind nur die oberen vier Bit relevant:
0Fxh (1111) --> kein Zugriff
07xh (0111) --> rot
0Bxh (1011) --> grün
0Dxh (1101) --> blau
0Exh (1110) --> Intensität
00xh (0000) --> Zugriff auf alle Bänke

Zurücklesen geht auch, aber da muß man dafür sorgen, das nur eine Farbbank aktiv ist, sonst treiben die Ausgänge der Speicher gegeneinander und es gibt Datenmüll.

Wenn man nichts spezielles vor hat, würde ich auf die Routinen vom ES4.0 zurückgreifen (CHAROUT, SCRFUN, DRAW, PLOT)

Ein paar Programmbeispiele für den JU+TE Computer von mir findest Du hier:
https://github.com/boert/JU-TE-Beispiele
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
06.05.2026, 11:31 Uhr
HeikoS



Hallo Jona,

du kannst auch hier mal schauen. In der FGL

https://github.com/haykonus/JU-TE-6K-Demos/blob/main/FGL/FGL.asm

sind viele Routinen, die den Grafik-Speicher ansprechen. Hier ein Bsp. für schnelles Bildschirmlöschen.

https://github.com/haykonus/JU-TE-6K-Demos/blob/b5f08cc89a4ea2b40073e7bfb6c39647c239314b/FGL/FGL.asm#L305

Viele Grüße, Heiko

Dieser Beitrag wurde am 06.05.2026 um 12:21 Uhr von HeikoS editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
06.05.2026, 14:04 Uhr
stone

Avatar von stone


Zitat:
00xh (0000) --> Zugriff auf alle Bänke


Hallo Bert,
wird das auch so benutzt? Das lässt meine Pläne platzen, da ich einen 32k Speicher nehmen wollte. Da kann ich logischer Weise keine 4 Bereiche gleichzeitig auswählen.

Liebe Grüße, Jona.

Dieser Beitrag wurde am 06.05.2026 um 14:04 Uhr von stone editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
06.05.2026, 17:28 Uhr
Bert



Ob das von der Software her genutzt wird (z.B. zum Bildschirm löschen) weiß ich nicht.
Aber von der Hardwareseite wird es genutzt! Die vier Video-RAM-Module werden für den Bildaufbau parallel ausgelesen. Das wird über den 'Videoprozessor' organisiert.

Also einfach die 4x 8kByte durch 1x 32kByte zu ersetzen wird nicht funktionieren.
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
Heute, 10:58 Uhr
KaGa



Zum Verstehen der Videosteuerung eignet sich am besten die Routine "Plot" auf %083A.
Sie ist ziemlich direkt an der Hardware.
Die Routine setzt genau einen Punkt an der Position X,Y mit der Farbe Z.
X,Y,Z entsprechen den Basic Variablen X,Y,Z (Register: X=%4E/%4F, Y=%50/%51 und Z=%52/%53)

Um die RAM Zelle im Video RAM zu ermitteln wird auch von Plot die Routine auf %0FBB genutzt.
Diese Routine bedient sich einer Tabelle auf %0B00..%0BC0 (%C0=192=Anzahl der Bildschirmzeilen)
Auch %0BC1..%0BFF gehört aber noch zu dieser Tabelle.
Es erfolgt die Umrechnung der XY Punktkoordinaten in eine Adresse und Bitmaske im Video RAM

Eingabe
%4E/%4F = X 320 (0..319)
%51 = Y 192 (0..191)

Ausgabe
%60/%61 Adresse, Zeiger auf das Byte im Video RAM (%4000..
%63 Bitmaske auf Bit in diesem Byte

In der Routine "Plot" auf %083A wird dann nacheinander (RL r5) die jeweilige Bank (V/H, R,G,B) selektiert (Low-aktiv)
und das Bit gemäß Maske in Register %63 in der Speicherzelle %60/%61 gesetzt.

;----------------------------------------------------------------------------
PLOT: PUSH %FD ;70 FD Registerpointer sichern
SRP #%60 ;31 60 Registersatz %60
CALL BWS ;D6 0F BB liefert Video RAM Adresse(%60/%61)und Bitmaske(%63)
LD r10,%53 ;A8 53 "Z" (Farbe) nach Arbeitsreg 10 (%6A)
LD r6,#%FF ;6C FF
XOR r6,r3 ;B2 63 alle Bits in der Bitmaske(%63) aus BWS "umdrehen"
LD r2,#%00 ;2C 00
LD r4,#%60 ;4C 60 Zeiger auf %60EF (rr4)
LD r5,#%EF ;5C EF Steuerregister Video RAM: %6000..%63FF
LD %F8,#%B2 ;E6 F8 B2 P01M %10110010 Adress/Datenbus,Stack extern,Timing erweitert

;Freigabe durch die Video CPU abwarten
PLOT1: TM %03,#%04 ;76 03 04 Port3 Bit2 "VIDEO CPU BUSY" gesetzt ?
JR NZ,PLOT1 ;EB FB ja -> warten, keine Bildstörung verursachen

;Pixel im Video RAM setzen
PLOT2: LDE @rr4,r5 ;92 54 %EF (1110 1111) nach %60EF schreiben: Auswahl der Bank "V/H"

LD r8,#%31 ;8C 31 (0011 0001)
RRC r10 ;C0 EA 0F->07->83->C1-E0
RLC r8 ;10 E8 31->63 00110001 -> 01100011

LDE r9,@rr0 ;82 90 Byte aus dem Video RAM (Zeiger) lesen
AND r9,r6 ;52 96 mit Bitmaske verknüpfen
OR r9,@r8 ;43 98 r9 OR r%31/r%63
LDE @rr0,r9 ;92 90 Byte im Video RAM (Zeiger) schreiben
RL r5 ;90 E5 nächste Bank -> 1110 1111 wird zu 1101 1111 Bank "BLAU" C=1
; nächste Bank -> 1101 1111 wird zu 1011 1111 Bank "GRÜN" C=1
; nächste Bank -> 1011 1111 wird zu 0111 1111 Bank "ROT" C=1
; nächste Bank -> 0111 1111 wird zu 1111 1110 Bank "NONE" C=0 !
JR C,PLOT2 ;7B EC Bit 7 wurde ins Carry geschoben, fertig wenn C=0

;Rücksprung vorbereiten
LD %F8,#%92 ;E6 F8 92 P01M %10010010 Adress/Datenbus,Stack extern,Timing normal
POP %FD ;50 FD Registerpointer wiederherstellen
RET ;AF Rücksprung zum Aufrufer

;----------------------------------------------------------------------------
;Umrechnung der XY Punktkoordinaten in eine Adresse und Bitmaske im Video RAM
;ein: %4E/%4F = X 320 0000 0001 / 0100 0000 (1/64)
; %51 = Y 192
;aus: %60/%61 Adresse auf das Byte im Video RAM
; %63 Bitmaske auf Bit in diesem Byte
;Registerpointer steht auf %60

; Adresse %0FBB

BWS: CP %51,#%C0 ;A6 51 C0 ist Y (Zeile) >=192 ?
JR NC,BWS2 ;FB 40 ja -> Bereichsüberschreitung (Code: Byte0 im org. Zeichengen.)
OR %4E,%4E ;44 4E 4E ist X Highbyte %4E = 0 ?
JR Z,BWS1 ;6B 05 ja -> alles OK, max 255 im Lowbyte und weiter
CP %4F,#%40 ;A6 4F 40 nein, ist X Lowbyte bei Highbyte>0 selbst >=64
JR NC,BWS2 ;FB 36 ja -> Bereichsüberschreitung

BWS1: LD r11,%51 ;B8 51 Zeiger (%6A/%6B) auf BWSTAB (%0B00)
LD r10,#%0B ;AC 0B zuzüglich dem Offset aus Y, Reg %61 (Zeile) setzen
LDC r0,@rr10 ;C2 0A r0 (%60) mit Wert aus BWSTAB via Zeiger (%6A/%6B) laden


LD r3,#%E0 ;3C E0 Zeiger rr2 (%62/%63) vorbereiten
AND r3,r0 ;52 30
SWAP r3 ;F0 E3
RR r3 ;E0 E3

ADD r3,#%C0 ;06 E3 C0 Offset %C0(192) aufaddieren -> BWSTAB2
LD r2,#%0B ;2C 0B Zeiger rr2 (%62/%63) zeigt auf BWSTAB2 (%0BCx)
LDC r1,@rr2 ;C2 12 Reg %61 mit Wert aus %0BCx via Zeiger rr2 laden

LD r2,%4E ;28 4E X Highbyte -> Zeiger rr2 (%62/%63) vorbereiten
LD r3,#%19 ;3C 19
LD r10,%4F ;A8 4F X Lowbyte
RRC r2 ;C0 E2 X 32 Bit (Highbyte+Lowbyte) /2
RRC r10 ;C0 EA Übertrag in das Lowbyte
RLC r3 ;10 E3
RRC r10 ;C0 EA X Lowbyte
RLC r3 ;10 E3
RRC r10 ;C0 EA X Lowbyte
RLC r3 ;10 E3

ADD r1,r10 ;02 1A Rückgabewert Reg %61 Zeiger auf Video RAM Low-Teil
LD r2,#%0B ;2C 0B Zeiger rr2 auf %0Bxx
LDC r3,@rr2 ;C2 32 Rückgabewert Reg %63 Bitmaske (1 aus 8)
AND r0,#%1F ;56 E0 1F
ADD r0,#%40 ;06 E0 40 Rückgabewert Reg %60 Zeiger auf Video RAM High-Teil
RET ;AF Rücksprung zum Aufrufer
;----------------------------------------------------------------------------
;BWS Rückgabe einer unsichtbaren Adresse falls X oder Y außer Bereich waren
;%50/%51 = %40/%79 und %53 = %01 Video RAM %4079 mit Bitmaske %01
;das erste der ungenutzten 8 Bytes zwischen Ende Zeile 3 und Anfang Zeile 4

;Adresse %1000 (eigentlich schon der Zeichensatz, Zeichen 0)

BWS2: ;LD R0,#%40 ;0C 40 ;diese Befehle stehen als ASCII %00
;LD R1,#%79 ;1C 79 ;im Zeichengenerator (8 Byte)
;LD R3,#1 ;3C 01 ;der eigentliche Zeichengenerator fängt 8 Bytes
;RET ;AF ;später mit ASCII %01 an
;NOP ;FF

;----------------------------------------------------------------------------

Da die Banken V/H,R,G,B sozusagen auf %4000.. "übereinander" liegen und auch gemeinsam beschrieben werden können (00xxh)
dürfte 4 * 8KByte zu 32KByte machen nicht mit ES40 machbar sein.

Auch der Videoprozessor spricht die 8K Bänke gleichzeitig an.
Er ist eigentlich kein richtiger Videoprozessor, sondern mehr eine Takt- und Ablaufsteuerung.
Auf den Inhalt der Video RAMs hat er keinen Zugriff. Er adressiert die RAMs nur und löst eine Übertragung
der Daten in Schieberegister aus. Außerdem erzeugt er die Zeilen und Bildsyncronimpulse.

Da der Videoprozessor im special bootstrap mode betrieben wird um seinen internen ROM durch einen externen ROM ersetzen zu können
werden leider die meisten PortPins zur Ansteuerung des externen Speichers benötigt.
Die verbleibenden Ports reichen nicht um hier noch einen Video RAM separat anzusteuern.
Daher adressiert der Videoprozessor die unteren Adressen des Video RAM (128 Bit) identisch mit seinem Programm ROM.
Da aber eine Zeile 320 Punkte hat, was 320/8=40 Byte bedeutet und 3 Zeilen 120 Byte benötigen, werden nach jeder 3.Zeile 8 Byte
übersprungen.
Darum wird bei der Zuordnung X/Y Koordinate zu Adresse im Video RAM auch der Aufwand mit der Tabelle gemacht.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
Heute, 13:56 Uhr
stone

Avatar von stone

Vielen Dank an euch!
Das bringt mein Verständnis schon ein ganzes Stück weiter. Vieles hatte ich mir schon selbst erarbeitet. Zur Verifizierung war es aber klasse.

Liebe Grüße, Eure Jona.
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