HP-GL Interpreter

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

Re: HP-GL Interpreter

Beitrag von kurt » 13.11.2019, 22:41

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: 4
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt » 14.11.2019, 13:53

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: 62
Registriert: 08.02.2015, 15:31

HP-GL Interpreter V2.4

Beitrag von bbock » 16.11.2019, 16:59

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) 10-mal heruntergeladen
HPGL24_src.zip
Sourcecode
(9.02 KiB) 11-mal heruntergeladen

Benutzeravatar
bbock
Beiträge: 62
Registriert: 08.02.2015, 15:31

Re: HP-GL Interpreter

Beitrag von bbock » 16.11.2019, 17:06

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: 4
Registriert: 26.10.2019, 20:11

Re: HP-GL Interpreter

Beitrag von kurt » 21.11.2019, 20:05

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: 62
Registriert: 08.02.2015, 15:31

Re: HP-GL Interpreter

Beitrag von bbock » 03.12.2019, 17:55

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

Antworten