HP-GL Interpreter

Software-Entwicklung, Compiler, Interpreter, ...
kurt
Beiträge: 163
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt »

Moin Bernd,
versuchs mal hier:
https://retrobrewcomputers.org/doku.php ... lerk:start

Unten auf der Seite sind die Download-Links

Gleitkomma-Rechnung:
An soetwas wie "Bruch-Rechnung" hatte ich gedacht. Da fallen mir gleich meine Sünden aus der Grundschule ein...,man war das schwer ;-)
Ich will die Hoffnung nicht gleich aufgeben, den sobald Bezug auf Gleitpunktrechnung genomen wird, bauen die Compiler immer gleich alles mögliche aus ihren Bibliotheken in den Code mit ein. Was meist im Ergebnis ein dickes Runtime-Modul und damit ein großes Programm bedeutet. Der von mir verwendete C-Compiler ist recht gut im einbinden von Assembler-Code. Vielleicht kann ich auf dem Wege die Sache klein halten. Das sehe ich aber erst, wenn ich mir dein Programm genauer ansehe. Da ich mein aktuelleas Hardware-Projekt soweit abgeschlossen habe, ist wieder Zeit für was anderes...

Gruß
Kurt
kurt
Beiträge: 163
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt »

Moin,
ich habe mir den PASCAL-Code einmal genauer angesehen. Es werden global nur 2 Variablen als REAL benutzt. An anderer Stelle kommen noch welche als locale REAL's vor. Vom Zahlenwert her wird sicherlich nie +/-2^31 ueberschritten. Wenn dem so ist, wuerden 32-Bit Variablen ausreichen. Ich vermute einmal (ich habe nicht nachgesehen), dass das verwendetet Pascal keine 32-bit INTEGER kennt, deshalb die REAL's. Fuer die Portierung sind also nur einige zusaetzliche Math-Funktionen zu schreiben, welche die 4 Grundrechenarten in 32-Bit ausfuehren koennen plus convertieren 16-Bit <--> 32-Bit. Den entsprechenden Code habe ich bereits in meiner xgraph-Bibliotek vorliegen - die Elipse geht nur mit 32-Bit Rechnung. Das reduziert alles auf Fleißarbeit plus Copy-und-Paste. Eingedenk der Tatsache, das die Ueberraschung meist im Detail liegt, denke ich, das es machbar ist.


Gruß
Kurt
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

HP-GL Interpreter V2.4

Beitrag von bbock »

Die Version 2.4 kommt mit folgenden Änderungen:
  • Schreiben einer Konfigurationsdatei mit den Daten des ersten Durchlaufs, damit der erste Durchlauf bei erneutem Aufruf derselben Datei übersprungen werden kann. Die Konfigurationsdatei hat denselben Namen wie die HP-GL-Datei, nur mit der Endung ".cfg", also z.B. GIRL2.PLT -> GIRL2.CFG
    Fehlt die Konfigurationsdatei, dann erfolgt ein normaler erster Durchlauf und die Datei wird erstellt.
  • Schöneres Layout mit Rahmen
  • Bessere Fehlerbehandlung, u.a. eigene Eingaberoutine für den Dateinamen
  • Mehr Sourcecode-Kommentierung
HPGL24_com.zip
Ausführbare COM-Datei
(10.16 KiB) 809-mal heruntergeladen
HPGL24_src.zip
Sourcecode
(9.02 KiB) 787-mal heruntergeladen
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: HP-GL Interpreter

Beitrag von bbock »

kurt hat geschrieben: 14.11.2019, 13:53 ...Vom Zahlenwert her wird sicherlich nie +/-2^31 ueberschritten. Wenn dem so ist, wuerden 32-Bit Variablen ausreichen. Ich vermute einmal (ich habe nicht nachgesehen), dass das verwendetet Pascal keine 32-bit INTEGER kennt, deshalb die REAL's. Fuer die Portierung sind also nur einige zusaetzliche Math-Funktionen zu schreiben, welche die 4 Grundrechenarten in 32-Bit ausfuehren koennen plus convertieren 16-Bit <--> 32-Bit. Den entsprechenden Code habe ich bereits in meiner xgraph-Bibliotek vorliegen - die Elipse geht nur mit 32-Bit Rechnung. Das reduziert alles auf Fleißarbeit plus Copy-und-Paste. Eingedenk der Tatsache, das die Ueberraschung meist im Detail liegt, denke ich, das es machbar ist.
...
Mit 32 Bit müsste man auskommen, ja. Die HP-GL-Parameter liegen normalerweise zwischen -10.000 und +10.000; ich habe noch nicht gesehen, dass sie 16 Bit überschreiten. Turbo Pascal auf der Joyce kennt tatsächlich keine 32-Bit-Integer; allerdings ist die Verwendung von Real-Werten wegen für die Berechnung der Skalierung bzw. Koordinatentransformation naheliegend. Für die Optimierung via Ganzzahlarithmetik gibt es verschiedene Ansätze. Ich erinnere mich noch an das Programm "Fractint" aus DOS-Zeiten, das mit Ganzzahlarithmetik sehr schnell Apfelmännchen berechnen konnte. Ich bin mal gespannt auf deine Lösung!

Grüße
Bernd
kurt
Beiträge: 163
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt »

Moin,
32-bit Integer wird genuegen - also lag ich mit meiner Vermutung richtig. Das erleichtert mir die Arbeit. Ich bearbeite gerade den MCode-Block am Anfang von KERNEL.INC. Dast Du den Assembler-Code zur Hand ? Anhand des Hex-Codes die Befehle zu suchen ist doch etwas frickelig...

Wie mir aufgefallen ist, ist der Code "leicht" selbst modifizierend. Ich hoffe das vermeiden zu koennen, da der C-Compiler eventuelle Variablennamen im Assembler-Code akzeptiert und ungekehrt der Assembler diese richtig aufloest. Diese speziellen Klimmzuege waeren also nicht notwendig.

Gruß
Kurt
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: HP-GL Interpreter

Beitrag von bbock »

Hallo Kurt,

auf joyce.de habe ich den Sourcecode der Plot-Routine gefunden; ich glaube, das müsste die sein, die auch in KERNEL.INC als Hex-Werte enthalten ist:

http://joyce.de/software/turbo/trubo-06/GRAFINC-MAC.txt

Code: Alles auswählen

;************************
;  PLOT / SYMBOL - MCode
;  Turbo Pascal Version
;  1987 by M.A. & E. W.
;  Vers. 10/8/87
;    (incl. DotColor)
;    (incl. Scr_Access)
;************************
;
	.Z80
	ASEG
	ORG 100h
;
START   EQU 0F400h
XBIOS   EQU 0FC5Ah
RUN_SCR EQU 00E9h
;
	.PHASE START
;
_PLOT:
;
	LD	DE,(_X)
	LD	HL,(_YM)
;
	LD	BC,PLOT
	CALL	XBIOS
	DW	RUN_SCR
	RET
;
;
_X:  DS 2
_YM: DS 2
;
;
PLOT:
	LD	A,03
	AND	D
	LD	D,A
	PUSH	HL
	LD	H,00
	ADD	HL,HL
	LD	BC,0B600h
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	LD	A,C
	AND	0F8h
	LD	L,A
	LD	H,B
	ADD	HL,HL
	ADD	HL,DE
	LD	 A,L
	AND	0F8h
	LD	L,A
	LD	A,C
	AND	07
	OR	L
	LD	L,A
	LD	A,E
	AND	07
	INC	A
	LD	B,A
	XOR	A
	SCF
LOOP:
	RRA
	DJNZ	LOOP
	POP	BC
	LD	C,A
	LD	A,B
	CP	00
	JR	NZ,CLEAR
	LD	A,C
	OR	(HL)
	LD	(HL),A
	RET
CLEAR:
	CP	01
	JR	NZ,REVERSE
	LD	A,C
	CPL
	AND	(HL)
	LD	(HL),A
	RET
REVERSE:
	CP	02
	JR	NZ,STATUS
	LD	A,C
	XOR	(HL)
	LD	(HL),A
	RET
STATUS:
	CP	03
	RET	NZ
	LD	A,C
	AND	(HL)
	LD	(_YM+1),A
	RET
;
;
_SYMB:
;
	LD	BC,SYMBOL
	CALL	XBIOS
	DW	RUN_SCR
	RET
;
SYMBOL:
	LD	HL,_TABLE
	LD	BC,0008H
	LD	DE,0000H
	LDIR
	RET
;
_TABLE:	DS	8
;
;
_GET:
;
	LD	BC,GETMAT
	CALL	XBIOS
	DW	RUN_SCR
	RET
;
GETMAT:
	LD	HL,0000H
	LD	BC,0008H
	LD	DE,_TABLE
	LDIR
	RET
;
;
_SCRACC:
	LD	BC,ACCESS
	CALL	XBIOS
	DW	RUN_SCR
	RET
;
ACCESS:
	LD	E,0		; (<- Column)
	LD	A,0		; (<- Row)
	LD	D,0
	RLCA
	RLA
	RLA
	RLA
	LD	L,A
	LD	A,D
	ADC	A,0B6H
	LD	H,A
	LD	A,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,A
	EX	DE,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,DE
	ADD	HL,HL
	LD	BC,0008H
	LD	A,0		; (<- Access Mode)
	CP	0		; (   = READ?)
	JR	NZ,WRITE
	LD	DE,_TABLE
	LDIR
	RET
WRITE:
	EX	DE,HL
	LD	HL,_TABLE
	LDIR
	RET
;
	.DEPHASE
	END
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

HP-GL Interpreter 3.0

Beitrag von bbock »

Die neue Version 3.0 des HP-GL Interpreters kann die erzeugte Grafik als PBM-Datei speichern, wenn man einen entsprechenden Dateinamen eingibt:
HPGL30.png
(7.82 KiB) 9295-mal heruntergeladen
Wenn man keinen Dateienamen bei "Enter PBM output filename" angibt, dann wird auch keine PBM-Datei erzeugt. Die Dateiendung ".pbm" muss mit eingegeben werden; sie wird nicht automatisch angehängt.

Die beiden ZIP-Dateien enthalten den Source Code bzw. die ausführbare COM-Datei.
HPGL30_src.zip
HP-GL Interpreter V3.0 Source Code
(11.46 KiB) 744-mal heruntergeladen
HPGL30_com.zip
HP-GL Interpreter V3.0 COM-Datei
(10.79 KiB) 676-mal heruntergeladen
Das nächste kleine Projekt ist auch bereits geplant: Ein Programm zum Anzeigen von PBM-Dateien auf der Joyce.
kurt
Beiträge: 163
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt »

Moin Bernd,
Du bringst mich in Zugzwang bezüglich des HPGL-Interpreters. Die Treiber für die seriellen Schnittstellen & den I2C-Bus (am Multicomp) samt Doku haben mich bis vor einer Woche reichlich beschäftigt. Dafür kann ich aber jetzt diese Punkte als "benutzbar" abhaken. Insbesondere die Sache mit der (I2c-) RT-Clock war mir so wichtig, dass ich das Interpreter-Projekt als Nachfolgeprojekt zurückgestelt habe. Mein Plan ist, den Interpreter zum "Bitte 8-Bit"-Treffen (wenn es denn hoffentlich stattfinden kann) fertig portiert zu haben. Mir fehlt einfach Software, mit der ich die Pixelgrafik beschäftigen kann, unter CPM gibt es nichts gescheites...

Schau'n mer mal..

Kurt
kurt
Beiträge: 163
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt »

Ich antworte mir mal selbst, hab' zu schnell auf 'Senden' gedrückt.

Da die Sache auf Deiner Seite immer umfangreicher wird, erscheint es mir sinnvoll, mein ursprüngliches Konzept dahingehend abzuändern, dass ich versuche die C Header-Dateien als Pascal INC-Dateien zu verfassen und damit loslege. So weit daneben liegen meine Grafik-Calls verglichen zum Joyce nun doch nicht. Das könnte vorerst sinnvoller sein, außerdem ergibt so ein 2tes Standbein. Mal sehen, auf was für Probleme ich stoße, wenn ich Turbo-Pascal installiere, von der Benutzung ganz zu schweigen :D

Gruß
Kurt
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

PBM Reader

Beitrag von bbock »

Weil die neue Version des HP-GL Interpreters jetzt auch die Grafiken als PBM-Dateien speichern kann, ist ein Programm zum Anzeigen ebendieser Dateien natürlich recht nützlich. Mein Programm pbmread kann interaktiv oder über die Kommandozeile benutzt werden:
  • Für den interaktiven Betrieb startet man das Programm einfach mit pbmread ohne weitere Parameter. Es wird ein Dialog zur Eingabe des PBM-Dateinamens angezeigt; nach Eingabe des Dateinamens wird die Datei gelesen und angezeigt.
  • Man kann die anzuzeigende PBM-Datei auch direkt auf der Kommandozeile angeben, z.B. pbmread girl2.pbm
pbmread_src.zip
Source Code von pbmread V1.0
(8.54 KiB) 702-mal heruntergeladen
PBMREAD_com.zip
COM-Datei pbmread
(9.52 KiB) 735-mal heruntergeladen
Antworten