CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ] [ Datenschutzerklärung ]

CP/M-Forum » Softwareprojekte » 8080-Quelltext in Z80-Mnemonics übersetzen » Threadansicht

Autor Thread - Seiten: -1- [ 2 ]
000
14.01.2007, 17:17 Uhr
proof80



Rainer Kraly hat im Artikel "Weg mit der Sprachbarriere" (c't 5/85, S. 90) ein Turbo-Pascal-Programm vorgestellt, mit dem man 8080-Quellcode in Z80-Mnemonics übersetzen kann.
Weil die damals vorgestellte Version noch nicht mit der Z80-Macro-Bibliothek umgehen konnte und z.B. meine Prof-80-System- und Monitor-Quellen aussen vor waren, habe ich das Programm weiterentwickelt. Es läuft jetzt auch sehr schön und schnell unter der DOS-Version von Turbo-Pascal, so dass ich mich als nächstes daran machen werde, die alten Quellen in eine (zumindest für mich) besser lesbare Form zu bringen.
Vor einer allgemeinen Veröffentlichung wäre noch die rechtliche Seite (copyright) zu klären. Einer privaten Zusendung auf Anfrage steht denke ich aber nichts im Wege.
Hat jemand Interesse an dem Stück? Einfach hier melden!

Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
001
16.01.2007, 07:41 Uhr
hschuetz

Avatar von hschuetz

... haben will....
welches Pascalversion ist denn nötig? Version 3, 5 oder 6?
Gruß
Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
002
16.01.2007, 16:21 Uhr
proof80



Hallo Hans-Werner,
entwickelt und in den 80ern von mir erweitert wurde es unter Turbo Pascal 3.0 für CP/M-80. Dann habe ich es unlängst auf den PC übertragen und jetzt in der DOS-Box mit TP 5.5 übersetzt, wozu nur das Hinzufügen der Zeile "uses Crt;" nötig war. Es müsste daher auch von der 6er-Version geschluckt werden ;-)

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
003
16.01.2007, 20:05 Uhr
Alfred

Avatar von Alfred

Hallo zusammen,

es gibt auch noch eine weitere Möglichkeit:
Das Programmpaket XIZI beinhaltet XIZ.COM und XZI.COM. XIZ.COM wandelt 8080-Mnemonics um in Z80-Mnemonics, XZI.COM macht genau das Gegenteil.
Gibt es z.B. hier: http://www.cirsovius.de/CPM/Projekte/Assembler/Download/xizi.zip

Grüsse
Alfred
--
Das Leben ist verdammt kurz (meine Meinung)!
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
004
17.01.2007, 07:46 Uhr
hschuetz

Avatar von hschuetz

@wolfram
schick mir doch mal dein PASCAL Programm,
Gruß
Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
005
17.01.2007, 08:07 Uhr
proof80



Hallo Alfred,

danke für den Tipp. XIZ werde ich auf jeden Fall mit in meine Tests einbeziehen.
Weißt Du vielleicht, ob es dazu auch noch Quellen gibt? (Man lernt schließlich nie aus ...)

Gruß,
Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
006
17.01.2007, 08:08 Uhr
proof80



@Hans-Werner
Wohin denn?
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
007
17.01.2007, 08:12 Uhr
proof80



Da ich noch keine Antwort von Autor und/oder Verlag habe, kann ich's hier noch nicht veröffentlichen. Aber privat schicken ist wohl ok.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
008
21.01.2007, 17:50 Uhr
proof80



Meine aktuelle Version macht noch etwas Chaos mit tabulierten Kommentaren, ist aber sonst weitgehend lauffähig. Um einen 8080-Quelltext besser verstehen zu können, taugt es allemal.

Interessenten an "meinem" ZSCT können mir per "private Nachricht" die eigene email-Adresse schicken. Ich mail das Programm (wie für Hans-Werner ) dann als Anhang zu.

XIZ ist auch ganz interessant, ich bin aber noch nicht zu genaueren Tests gekommen. Als Prüfstein setze ich die Monitor-Quellen des Prof-80 sowie die BIOS-Teile, die man zum Generieren des CP/M-Plus braucht.
Hat jemand vielleicht zu XIZ bzw. XZI die Quellen? Man kann ja noch dazulernen.

Wer programmiert denn derzeit in Z80-Assembler? Oder in Turbo-Pascal? Wüsste ich doch einfach mal gern.

Gruß, Wolfram

Dieser Post wurde am 21.01.2007 um 17:56 Uhr von proof80 editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
009
21.01.2007, 20:41 Uhr
HD64180CPM



Hallo Wolfram,

wenn ich Zeit habe programmiere ich für CP/M
mit Z80-Assembler, Z180-Assembler, Turbo-Pascal 3, Fortran, Forth,
Cobol und in C.

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
010
21.01.2007, 20:51 Uhr
proof80



Hallo Rolf,

hast Du Deine Quellen alle im Z80-Code, also ohne Altlasten aus 8080-Kompatibilitätszeiten? (müsste vielleicht Com-Debilität heissen )

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
011
18.06.2007, 19:32 Uhr
HD64180CPM



Hallo Wolfram,

Original-Code des RBIOS HD64180 in Assembler-Code MACRO-80 3.4.

RBIOS HD64180 in Assembler-Code für den Aside v1.13 Prozessorfamilie Z80
Prozessor HD64180.

EPROM in Assembler-Code für den Aside v1.13 Prozessorfamilie Z80
Prozessor HD64180.

Gruss
Rolf

Dieser Post wurde am 18.06.2007 um 20:00 Uhr von HD64180CPM editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
012
18.06.2007, 20:45 Uhr
proof80



Hallo Rolf,

Wie sieht HD64180-Code aus im Unterschied zu Z80 bzw. 8080? An welchen Dialekt ist das angelehnt? Hat's da LD rr,rr oder so'n MVI-Zeug?

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
013
18.06.2007, 21:23 Uhr
HD64180CPM



Hallo Wolfram,

hier ein Beispiel-Code.

00000h
00000h COLDBOOT: EQU 0DB18H
00000h BIOS: EQU 0DA00H
00000h
00000h
00000h
00000h 3E00 T0066: LD A,00H
00002h ED39F6 OUT0 (0F6H),A ; Z180 instruction RCR
00005h 2118DB LD HL,COLDBOOT ;ldb18
00008h 2201DA LD (BIOS+1),HL ;0da01h
0000Bh 3E80 LD A,80H ; VCBAR
0000Dh ED39FA OUT0 (0FAH),A ; Z180 instruction CBAR
00010h 3E10 LD A,10H ; VBBR
00012h ED39F9 OUT0 (0F9H),A ; Z180 instruction BBR
00015h 3E00 LD A,00H ; VCBR
00017h ED39F8 OUT0 (0F8H),A ; Z180 instruction CBR
0001Ah

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
014
18.06.2007, 22:16 Uhr
Alfred

Avatar von Alfred

Hi Wolfram,

der HD64180 hat außer denen für die interne I/O noch einige zusätzliche Befehle,
die z.B. für den M80 als Macro eingebunden werden können:

;
; hd64180 definitionen
; 04.03.1987
; filename 64180.mac
;

;
; sio
;
cntla0 equ 0+iobase
cntla1 equ 1+iobase
cntlb0 equ 2+iobase
cntlb1 equ 3+iobase
stat0 equ 4+iobase
stat1 equ 5+iobase
tdr0 equ 6+iobase
tdr1 equ 7+iobase
rdr0 equ 8+iobase
rdr1 equ 9+iobase
cntr equ 0ah+iobase
trdr equ 0bh+iobase

;
; timer
;
tmdr0l equ 0ch+iobase
tmdr0h equ 0dh+iobase
rldr0l equ 0eh+iobase
rldr0h equ 0fh+iobase
tcr equ 10h+iobase

;
; dma
;
sar0l equ 20h+iobase
sar0h equ 21h+iobase
sar0b equ 22h+iobase
dar0l equ 23h+iobase
dar0h equ 24h+iobase
dar0b equ 25h+iobase
bcr0l equ 26h+iobase
bcr0h equ 27h+iobase
mar1l equ 28h+iobase
mar1h equ 29h+iobase
mar1b equ 2ah+iobase
iar1l equ 2bh+iobase
iar1h equ 2ch+iobase
bcr1l equ 2eh+iobase
bcr1h equ 2fh+iobase
dstat equ 30h+iobase
dmode equ 31h+iobase
dcntl equ 32h+iobase

;
; int, trap, refresh
;
il equ 33h+iobase
itc equ 34h+iobase
rcr equ 36h+iobase

;
; mmu
;
cbr equ 38h+iobase
bbr equ 39h+iobase
cbar equ 3ah+iobase

;
; i/o control
;
icr equ 3fh+iobase

;
; macros
;
?a equ 7
?b equ 0
?c equ 1
?d equ 2
?e equ 3
?h equ 4
?l equ 5
??bc equ 0
??de equ 1
??hl equ 2
??sp equ 3
;
slp macro
defb 11101101b
defb 01110110b
endm
;
mlt macro ?r
defb 11101101b
defb 01001100b+(??&r and 3) shl 4
endm
;
in0 macro ?r,?p
defb 11101101b
defb 00000000b+(?&?r and 7) shl 3
defb ?p
endm
;
out0 macro ?p,?r
defb 11101101b
defb 00000001b+(?&?r and 7) shl 3
defb ?p
endm
;
otim macro
defb 11101101b
defb 10000011b
endm
;
otimr macro
defb 11101101b
defb 10010011b
endm
;
otdm macro
defb 11101101b
defb 10001011b
endm
;
otdmr macro
defb 11101101b
defb 10011011b
endm
;
tstio macro
defb 11101101b
defb 01110100b
defb ?f
endm
;
tstr macro ?r
defb 11101101b
defb 00000100b+(?&?r and 7) shl 3
endm
;
tstd macro ?p
defb 11101101b
defb 01100100b
defb ?p
endm
;
tstp macro
defb 11101101b
defb 00110100b
endm
;
tst macro
defb 11101101b
ifidn <'&?r'>,<'(hl)'>
defb 00110100b
else
ifdef ?&?r
defb 00000100b+(?&?r and 7) shl 3
else
defb 01100100b
defb ?r
endif
endif
endm

Viele Grüsse
Alfred
--
Das Leben ist verdammt kurz (meine Meinung)!
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
015
18.06.2007, 22:22 Uhr
HD64180CPM



Hallo Wolfram,

hier ein Beispiel-Code auf meiner Homepage

http://www.hd64180-cpm.de/

sieht besser aus.

DEMO Assembler ASide v1.13

http://www.hd64180-cpm.de/resources/NONAME1.ASM

http://www.hd64180-cpm.de/resources/NONAME1.LST

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
016
18.06.2007, 23:20 Uhr
proof80



Danke erst mal Euch beiden für den interesannten Einblick. Ich sehe aber schon, dass die HD64180 wegen ihrer integrierten Peripherie noch'n Stück anders angefasst werden will als die Z80.
Was das BDOS angeht dürften aber wohl beide gleichauf liegen, oder?

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
017
21.06.2007, 21:15 Uhr
Alfred

Avatar von Alfred

Hi Wolfram,

allein vom BDOS bei gleicher Taktfrequenz betrachtet, ist der Unterschied sicher gering.
Wenn das BIOS entsprechend angepasst ist und auch DMA/MMU/Pipelining und die max.
mögliche Taktfrequenz nutzt und der Rechner vielleicht auch noch Batteriebetrieben ist,
dann ist der 64180 klar im Vorteil. Aber wer macht das schon?

Viele Grüsse
Alfred
--
Das Leben ist verdammt kurz (meine Meinung)!
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
018
21.06.2007, 21:44 Uhr
proof80



Hallo Alfred,

was hat der Batteriebetrieb für'n Einfluss - oder meintest Du, dass der 64180 auf Batterie sparsamer läuft als 'ne Z80?
Es gab ja mal eine Diskussion um eine neuere Variante des Z80, so in SMD-Technik etc. Im Elektronikladen ist z.B. der Z80mini zu bekommen. Wär doch mal interessant, ob man auf dem Maschinchen ein CP/M zum Laufen brächte! Ist aber ein anderes Thema und gehört mehr in die hardware-Sparte ...

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
019
07.07.2007, 20:47 Uhr
timetube

Avatar von timetube


Zitat:
proof80 postete
Hallo Rolf,

Wie sieht HD64180-Code aus im Unterschied zu Z80 bzw. 8080? An welchen Dialekt ist das angelehnt? Hat's da LD rr,rr oder so'n MVI-Zeug?

Gruß, Wolfram

8080 to Z80 ist recht einfach zu machen.
Guggste http://www.nadhh.hanse.de/tmp/Z80Translater.zip
ein kleines lex-script das es schon ganz gut kann und das schon im letztem Jahrtausend

tt.

%{
/************************************************************
8080 to Z80 Mnemonic Converter
(c) 89 by J.Sivers cplhh.Hanse.de
(c) 07 by J.Sievers nadhh.Hanse.de
Use: Z80Translater 8080InputFile > Z80 Output File

Finally, main is defined in the programs section since the
one in the library calls yyparse instead.
************************************************************/
#include <errno.h>
#include <string.h>
int wc = 0; /* word count */
%}

%start WORD // the word start state

%%

// Scip comment
;[^\n]*\n { printf("%s",yytext); }
\.[A-Za-z][^ \t]+ { printf("%s",yytext);}
DW|DB|DS|
EQU|ORG { printf(".%s",yytext);} // Put a dot in front of these statemends.
,M { printf(",(HL)");}
M, { printf("(HL),");}
[ \t]+M[ \t]+ { printf(" A,(HL) ");}
LDAX[ \t]+[BD] { printf("LD A,(%c%c)",yytext[yyleng-1], *(char*)(strchr("BCDE",yytext[yyleng-1])+1));}
STAX[ \t]+[BD] { printf("LD (%c%c),A",yytext[yyleng-1], *(char*)(strchr("BCDE",yytext[yyleng-1])+1));}
LDA[ \t]+[^ \t]+ { printf("LD A,(%s)",yytext+4);}
STA[ \t]+[^ \t]+ { printf("LD (%s),A",yytext+4);}

INX[ \t]+[BDHS]P? { if(yytext[yyleng-1]=='P') yyleng--; printf("INC %c%c",yytext[yyleng-1], *(char*)(strchr("BCDEHLSP",yytext[yyleng-1])+1));}
DCX[ \t]+[BDHS]P? { if(yytext[yyleng-1]=='P') yyleng--; printf("DEC %c%c",yytext[yyleng-1], *(char*)(strchr("BCDEHLSP",yytext[yyleng-1])+1));}

DAD[ \t]+[BDH] { printf("ADD HL,%c%c",yytext[yyleng-1], *(char*)(strchr("BCDEHL",yytext[yyleng-1])+1));}
DAD { printf("LD HL,");}
LXI[ \t]+[BDH] { printf("LD %c%c",yytext[yyleng-1], *(char*)(strchr("BCDEHL",yytext[yyleng-1])+1));}
LXI { printf("LD");}
LHLD[ \t]+[^ \t]+ { printf("LD HL,(%s)",yytext+5);}
SHLD[ \t]+[^ \t]+ { printf("LD (%s),HL",yytext+5);}
IN[ \t]+[^ \t]+ { printf("IN A,(%s)",yytext+3);}
OUT[ \t]+[^ \t]+ { printf("OUT (%s),A",yytext+4);}
MOV { printf("LD");}
MVI { printf("LD");}
JMP { printf("JP");}
XCHG { printf("EX DE,HL");}
XTHL { printf("EX (SP),HL");}
SPHL { printf("LD SP,HL");}
SUI { printf("SUB A,");}
SBB { printf("SBC");}
SBI { printf("SBC A,");}
ACI { printf("ADC A,");}
INR { printf("INC");}
DCR { printf("DEC");}
CMA { printf("CPL");}
STC { printf("SCF");}
CMC { printf("CCF");}
RLC { printf("RLCA");}
RRC { printf("RRCA");}
RAL { printf("RLA");}
RAR { printf("RRA");}
ANA { printf("AND");}
ANI { printf("AND");}
XRA { printf("XOR");}
XRI { printf("XOR");}
ORA { printf("OR");}
ORI { printf("OR");}
CMP { printf("CP");}
CMI { printf("CP");}
JNZ { printf("JP nz,");}
JZ { printf("JP z,");}
JNC { printf("JP nc,");}
JC { printf("JP c,");}
JPO { printf("JP po,");}
JPE { printf("JP pe,");}
JP { printf("JP p,");}
JM { printf("JP m,");}
PCHL { printf("JP (HL)");}
CNZ { printf("CALL nz,");}
CZ { printf("CALL z,");}
CNC { printf("CALL nc,");}
CC { printf("CALL c,");}
CPO { printf("CALL po,");}
CPE { printf("CALL pe,");}
CP { printf("CALL p,");}
CM { printf("CALL m,");}
RNZ { printf("RET nz,");}
RZ { printf("RET z,");}
RNC { printf("RET nc,");}
RC { printf("RET c,");}
RPO { printf("RET po,");}
RPE { printf("RET pe,");}
RP { printf("RET p,");}
RM { printf("RET m,");}
ADD { printf("ADD A,");}
ADC { printf("ADC A,");}
PSW { printf("AF");}

[ \t]+M[ \t]+ { printf(" (HL) ");}
^[A-Za-z][^ \t]+ { printf("%s",yytext);}
.|\n { putchar(*yytext); }

%%
int main(int argc, char** argv)
{
int res;

yyin = fopen(argv[1], "r");
if (yyin != NULL)
res= yylex();
else
{
res = errno;
perror("Input");
}
// getchar();
return res;
}

int yywrap(void)
{
printf("word count: %d\n", wc);
return 1;
}
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
020
07.07.2007, 20:59 Uhr
proof80



Hallo tt,

danke für das Skript. Ich war schon an Regulären Ausdrücken, aber mit lex kann ich (noch) nichts anfangen.

Dein Beispielcode hilft mir aber weiter, die Makros zu übersetzen. Der erste Teil läuft durch XIZ.COM schon recht gut.

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
021
08.07.2007, 12:10 Uhr
timetube

Avatar von timetube


Zitat:
proof80 postete
Hallo tt,

danke für das Skript. Ich war schon an Regulären Ausdrücken, aber mit lex kann ich (noch) nichts anfangen.

Dein Beispielcode hilft mir aber weiter, die Makros zu übersetzen. Der erste Teil läuft durch XIZ.COM schon recht gut.

Gruß, Wolfram

Keine Ursacher, das Script geht auch nur bedingt, für bestimmte Eingabeformate.
J.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
022
08.07.2007, 12:25 Uhr
proof80



Was braucht man denn für LEX und unter welchen Systemen kann man es einsetzen (MSDOS, Win2k, Linux, CP/M)?

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
023
08.07.2007, 17:27 Uhr
timetube

Avatar von timetube


Zitat:
proof80 postete
Was braucht man denn für LEX und unter welchen Systemen kann man es einsetzen (MSDOS, Win2k, Linux, CP/M)?
Gruß, Wolfram

1. Geduld beim Erlernen des Umgangs damit. Macht sich aber zigmal bezahlt bei der professionellen Anwendung.

2. Das gibt es schon sehr lange, ist eigentlich ein Standard Entwicklertool, jedenfalls bei nicht Windows Entwicklern, wir awk, make, sed, grep usw. ja auch. Die Windows Entwickler gebrauchen diese Tools anscheinend nicht, wie so vieles was mir unentbehrlich hilfreich ist.

Aber zurück zu deiner Frage. LEX & YACC kommt aus der UNIX-Welt und ist heute für jedes OS, sogar für Windows, frei verfügbar.

AT&T Lex&Yacc, Berkeley Yacc, Gnu Bison, Flex, MKS Les&Yacc, Abraxas Lex&Yacc, POSIX Lex&Yacc, Alex&Ayacc usw. sind gute googel Startingpoints.

tt.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
024
08.07.2007, 17:30 Uhr
proof80



Ich habe mir die Unix-Tools für Windows geholt. Da ist flex drin, also kann der Spaß bald losgehen.

(Anscheinend gibt es doch ein paar Windows-Entwickler, die den Blick über den Tellerrand riskiert haben )

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: -1- [ 2 ]     [ Softwareprojekte ]  



gaby.de

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