Robotrontechnik-Forum

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

Robotrontechnik-Forum » Technische Diskussionen » Assembler-Varianten unter CP/M (bzw. MLDOS) » Themenansicht

Autor Thread - Seiten: -1-
000
15.02.2025, 11:11 Uhr
Bert



Hallo Forum,

ich versuche mir gerade einen kleinen Überblick über die vielen Varianten von Assemblern unter CP/M zu verschaffen.
Ziel ist es, mit den verschiedenen Assemblern - zumindest all denen, die auf meiner Platte so rumgeistern - ein lauffähiges Programm zu bekommen.
Ich glaube ich scheitere z.T. an der Bedienung der unterschiedlichen Programme und/oder am ASM-Dialekt.
Bei meiner Recherche bin ich auch über Volkers Seite zum MAC gestolpert [1].
Ich versuch das hier mal zu ergänzen.

Ich fang mal mit dem an, was funktioniert:

1. 8080/ASM/LOAD:

Quellcode:

A1>asm 123
CP/M ASSEMBLER - VER 2.0
0117
000H USE FACTOR
END OF ASSEMBLY

A1>load 123
FIRST ADDRESS 0100
LAST  ADDRESS 0116
BYTES READ    0017
RECORDS WRITTEN 01

A1>123
123

A1>dump 123.com
0000 3E 31 CD 10 01 3E 32 CD 10 01 3E 33 CD 10 01 C9
0010 0E 02 5F CD 05 00 C9 00 00 00 00 00 00 00 00 00




2. 8080/MAC/LOAD:

Quellcode:

A1>mac 123
CP/M MACRO ASSEM 2.0
0117
000H USE FACTOR
END OF ASSEMBLY
...


Der Rest ist wie bei 1.
Aber wer will denn 8080-Code schreiben, wenn ein Z80 im System steckt?
Also weiter mit 123.Z80:


3. Z80/ZMAC/LINK

Quellcode:

A1>zmac 123
ZMAC Relocating Macro Assembler v 1.7, 04/09/93
  Copyright 1988,1989 by A.E. Hawley
     1         = 0005      bdos:   equ 0005h
...
    24                             end

      A1:123.Z80        assembled with   NO ERRORS                      

..To produce:                                                              

A1:123.REL                                                                  

Source Lines      24          Unused Memory   9A89H                          
Labels             3          Total Code Size 0017H                          
Macros  -Read   none                                                        
    -Expanded   none                                                        

               ===  SEGMENT SIZES  ===                                      

ASEG    =empty   CSEG    =0017H   DSEG    =empty   BLANK   =empty          

A1>link 123=123/N/E
SD SYSTEMS LINKER V3.1
SYNTAX ERROR

A1>link 123
SD SYSTEMS LINKER V3.1
OPTIONS?
123     .OBJ

***INPUT FILE DOES NOT EXIST  123     .OBJ


Offensichtlich habe ich keine Ahnung, wie man LINK verwendet bzw. LINK erwartet eine OBJ-Datei.


4. Z80/ZMAC/L80

Quellcode:

A1>zmac 123
ZMAC Relocating Macro Assembler v 1.7, 04/09/93
...
..To produce:                                                              

A1:123.REL    
...

A1>l80 123=123/N/E
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft
?Command Error
*

A1>l80
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft

*123
Data    0103    021A    <  279>

53280 Bytes Free

*123/N/E

Data    0103    021A    <  279>

53280 Bytes Free
[0000   021A        2]

A1>dump 123.com

0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E1
0030 06 08 CD 0D 2B 3E 2E CD 5B 2B 06 03 7E 23 FE 20
0040 28 03 CD 5B 2B 10 F5 C9 D5 E5 ED 43 59 2B 11 0A
0050 00 CD B9 28 7B CD 5D 2A F5 10 F3 ED 4B 59 2B 05
0060 28 1B F1 FE 30 20 0F CB 61 28 06 3E 20 CB 59 20
0070 0A CD 5B 2B 18 05 CD 5B 2B CB A1 10 E5 F1 CD 5B
0080 2B ED 4B 59 2B E1 D1 C9 14 05 CB 41 C4 90 2B CB
0090 49 C4 FA 13 CB 51 C8 FE 08 28 06 FD 77 00 FD 23


Es wird eine COM-Datei erstellt, aber die bringt das System zum Absturz.
Es steht auch irgendwie Zeug drin, was da gar nicht reingehört.


5. Z80/ZMAC/LOAD
Der ZMAC kann auch HEX-Dateien erzeugen:

Quellcode:

A1>zmac 123 /H
ZMAC Relocating Macro Assembler v 1.7, 04/09/93
...
..To produce:                                                              

A1:123.HEX                                                                  
...

A1>load 123
FIRST ADDRESS 0100
LAST  ADDRESS 0116
BYTES READ    0017
RECORDS WRITTEN 01

A1>dump 123.com
0000 3E 31 CD 10 01 3E 32 CD 10 01 3E 33 CD 10 01 C9
0010 0E 02 5F CD 05 00 C9 00 00 00 00 00 00 00 00 00

A1>123
123


Fein. Passt.


6. Z80/ZMAC/ZML

Quellcode:

A1>zmac 123
ZMAC Relocating Macro Assembler v 1.7, 04/09/93
...
..To produce:                                                              

A1:123.REL    
...

A1>zml 123
ZML Linker V2.0- 04/01/93

Output file: A1:123.COM

                 LOAD_ADDR:   RELOC_ADDR:
SEGMENT   SIZE  START  STOP
CSEG      0117  0100   0216          

Memory unused by linker..
FREE      CED1  2E2E   FCFE    

A1>dump 123.com
0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0100 3E 31 CD 10 02 3E 32 CD 10 02 3E 33 CD 10 02 C9
0110 0E 02 5F CD 05 00 C9 00 00 00 00 00 00 00 00 00
    
A1>123
123


Der ZML fügt erstmal 256 NOPs ein, keine Ahnung wie man dem das abgewöhnt, aber das Programm funktioniert.


7. Z80/Z80ASM

Quellcode:

A1>z80asm 123
Z80ASM Copyright (C) 1983-86 by SLR Systems Rel. 1.32 #RunCPM

123
End of file Pass 1
0 Error(s) Detected.
23 Absolute Bytes. 3 Symbols Detected.

A1>123
123

A1>dump 123.com
0000 3E 31 CD 10 01 3E 32 CD 10 01 3E 33 CD 10 01 C9
0010 0E 02 5F CD 05 00 C9 00 00 00 00 00 00 00 00 00


Perfekt. In einem Rutsch und ohne Zusatzoptionen...

So.
Einen hab ich noch:


8. 8080/M80/L80?

Quellcode:

A1>m80 =123.ASM
O 0000'                         bdos:   equ 0005h
O 0000'                         conout: equ 2

2 Fatal error(s)


Der M80 erwartet wohl eigentlich .MAC-Dateien und stört sich schon an der EQU-Syntax.
Ich glaube den können wir ignorieren.

Vor allem hätte ich gedacht, das das mit den REL-Dateien (3. und 4.) reibungslos funktioniert, aber dem ist wohl nicht so.
Vielleicht hat ja hier noch jemand Ideen und Ergänzungen.

Viele Grüße,
Bert

-----------------------------
[1] https://hc-ddr.hucki.net/wiki/doku.php/cpm/mac

-----------------------------
Anhang 1, Testprogramm 123.ASM (8080-Code):

Quellcode:

bdos:   equ 0005h
conout: equ 2

        org 0100h

        mvi a,'1'
        call putc

        mvi a,'2'
        call putc

        mvi a,'3'
        call putc

        ret

putc:
        mvi c,conout
        mov e,a
        call bdos
        ret

        end



-----------------------------
Anhang 2, Testprogramm 123.Z80:

Quellcode:

bdos:   equ 0005h
conout: equ 2

        org 0100h

        ld a,'1'
        call putc

        ld a,'2'
        call putc

        ld a,'3'
        call putc

        ret

putc:
        ld c,conout
        ld e,a

        call bdos
        ret

        end


--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
15.02.2025, 13:06 Uhr
Heiko_P



Hallo Bert,


Zitat:

8. 8080/M80/L80?

Quellcode:

A1>m80 =123.ASM
O 0000' bdos: equ 0005h
O 0000' conout: equ 2

2 Fatal error(s)


Der M80 erwartet wohl eigentlich .MAC-Dateien und stört sich schon an der EQU-Syntax.
Ich glaube den können wir ignorieren.

Vor allem hätte ich gedacht, das das mit den REL-Dateien (3. und 4.) reibungslos funktioniert, aber dem ist wohl nicht so.
Vielleicht hat ja hier noch jemand Ideen und Ergänzungen.



Der m80 stört sich am Doppelpunkt nach der equ-Anweisung.
Man kann problemlos .ASM-Dateien nutzen, die von dir verwendete Syntax ist richtig.
Wo genau liegt das Problem mit den .REL-Dateien?

Gruß
Heiko
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
15.02.2025, 16:25 Uhr
maleuma



Also ich nutze fast nur noch den SLR-Assembler. Mit dem kann man aus einem Quelltext direkt eine ausführbare Datei machen.

Das .REL-Format (bzw. auch .ZRL beim SLR-Assembler) ist dagegen besser geeignet, wenn man mit Bibliotheken arbeiten möchte und daraus diverse Routinen in seinem Quelltext nutzt. Gern nehme ich da die SYSLIBs, DSLIBs, VLIBs und Z3LIBs. Ich habe mir aber für meine eigenen Quellen auch schon einmal eine KCLIB erstellt.

Das Problem mit den 256x NOP könnte von einer falschen Basisadresse her rühren. Mit ZMAC/ZML habe ich mich allerdings noch nicht beschäftigt. Jeder Assembler/Linker hat so seine Eigenheiten. Da muss man meist in der Doku nachlesen, was welche Schalter bzw. Optionen bewirken.
Manche Assembler verstehen M statt (HL), ein Doppelpunkt in der EQU-Anweisung ist eher unüblich.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
15.02.2025, 17:01 Uhr
Bert



Hab dem M80 noch eine MAC-Datei mit equ ohne Doppelpunkt gegönnt:

Quellcode:

A1>m80 =123

No Fatal error(s)

A1>l80
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft
*123
Data    0103    021A    <  279>

53280 Bytes Free

*123/N/E

Data    0103    021A    <  279>

53280 Bytes Free
[0000   021A        2]

A1>dump 123.com
0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CD
0030 29 0B FE 29 C4 9D 04 C3 40 0B 3E 01 32 2F 3D C3
0040 59 2B AF 32 2F 3D C3 59 2B AF 32 2D 3D C3 59 2B
0050 CD 55 0B C2 47 2B 0C 0D CA 47 2B F5 CD 0E 0C C4
...


Der Linker macht trotzdem noch Käse.
Kann man irgendwie die REL-Datei kontrollieren?

Noch ein Test mit einem anderen Linker:

Quellcode:

A1>link131 123.COM=123
LINK 1.31

ABSOLUTE     0000
CODE SIZE    0117 (0100-0216)
DATA SIZE    0000
COMMON SIZE  0000
USE FACTOR     00

A1>123
123


Bis auf die NOPs am Anfang ist das Ergebnis ok.
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
15.02.2025, 17:28 Uhr
maleuma



Ich habe gerade einmal in dern Anleitung von LINK.COM (SCPX-Version) nachgelesen. Der sollte meiner Meinung nach identisch mit L80 sein.
"Die Grundregel ist dabei, dass die Programme in der Reihenfolge geladen werden, in der sie aufgeführt sind, beginnend ab der Startadresse 0103H. Selbst wenn die Programme in der eingegebenen Reihenfolge geladen werden, braucht man sie nicht in der
Folge der Abarbeitung angeben, denn LINK erzeugt an der Stelle 0100H-0102H einen unbedingten Sprung an den logischen Programmanfang."
Ich glaube, schon deshalb habe ich diesen Linker nicht mehr verwendet.
Ich denke, Du darfst in dem Fall auch keine ORG-Anweisung in den Quelltext schreiben, da der Linker die eigentliche Bindung auf die Zieladresse macht.
Ansonsten musst Du noch beachten, dass der Linker zwischen COMMON, DSEG und CSEG unterscheidet.

Zur Arbeit mit den REL-Dateien gibt es noch die Bibliotheksprogramme, z.B. LIB.COM.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
15.02.2025, 17:37 Uhr
susowa



Hier mal ein Beispiel aus der Netzwerksoftware, am Anfang steht kein ORG-, sondern ein PHASE-Befehl:

;destination
.PHASE 00100H
;CPU
.Z80

Kann man dann mit M80/L80:

m80 CPMNET16.REL=CPMNET16
l80 /P:100,CPMNET16,SYSLIB/S,CPMNET16/N/E

bzw. mit M80/LINK131 übersetzen:

m80 CPMNET16.REL=CPMNET16
link131 CPMNET16.COM=CPMNET16,SYSLIB[s]


Hatte ich damals mit Hilfe der Doku's so ermittelt und funktioniert so auch mit dem gleichen Ergebnis im COM-File.


MfG susowa
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
15.02.2025, 21:00 Uhr
Bert



Jepp, das Gespann M80/L80 benötigt die .PHASE-Anweisung:

Quellcode:

bdos    equ 0005h
conout  equ 2

        .phase 0100h

        mvi a,'1'
        call putc

        mvi a,'2'
        call putc

        mvi a,'3'
        call putc

        ret

putc:
        mvi c,conout
        mov e,a
        call bdos
        ret

        end




Quellcode:

A1>m80 =123
No Fatal error(s)

A1>l80 123,123/N/E  
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft
Data    0103    011A    <   23>
53536 Bytes Free
[0000   011A        1]

A1>123
123

A1>dump 123.com
0000 00 00 00 3E 31 CD 10 01 3E 32 CD 10 01 3E 33 CD
0010 10 01 C9 0E 02 5F CD 05 00 C9 00 2C 90 70 08 BE
0020 CD 02 80 19 33 80 00 00 9E 1A 00 00 00 00 00 00


Und ja, vorne sind drei NOPs davor und hintendran sind Müllbytes.
Komischer Linker.

Bei der Kombination ZMAC und L80 hilft .PHASE trotzdem nicht:

Quellcode:

A1>zmac 123
ZMAC Relocating Macro Assembler v 1.7, 04/09/93
  Copyright 1988,1989 by A.E. Hawley
     1         = 0005      bdos:   equ 0005h
     2         = 0002      conout: equ 2

     4                             org 0100h
     5                             .phase 0100h
...
.To produce:                                                              

A1:123.REL                                                                  


A1>l80 123,123/N/E
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft

Data    0103    0103    <    0>

53559 Bytes Free
[0000   0103        1]

A1>dump 123.com
0000 00 00 00 8C E5 00 00 13 50 00 09 68 00 08 F8 62
0010 CD 08 00 47 C3 26 68 40 02 3E 19 B3 42 00 16 48
0020 38 04 5F 66 81 40 0C 99 C0 00 00 9E 00 00 00 00



Nagut. Wichtig ist ja, daß man eine Kombination findet, mit der man arbeiten kann.
Nochmal vielen Dank für Eure Hinweise!
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
15.02.2025, 22:26 Uhr
susowa




Zitat:
Bert schrieb
... Und ja, vorne sind drei NOPs davor ...



Die bekommst Du mit dem "/P:100" auch noch weg. Die Müllbytes könnten ev. auch aus dem RAM kommen, wenn er den ganzen Sektor auf die Disk schreibt, die stören aber auch nicht.

ZMAC ist interessant wegen der HEX-Ausgabe, wie Du schon geschrieben hast. Das ist mir bei der Analyse der CDROM-Software von Hal Bower das erste Mal praktisch begegnet.

Ich zitiere mal, weil es so "schön" ist:

"All source code in this package is designed for assembly with Al Hawley's
ZMAC Z80/Z180 assembler (or SLR's Z80ASM/SLR180 family) and linker (ZML).
Other tools needed include my MYLOAD Hex overlay/loader utility, and Version
4.5 (or later) of SYSLIB, Z3LIB, VLIB and DSLIB. These packages are widely
available on Z-Nodes and other archive locations.

Assembly and linking of the basic program consisting of the main CDZSWP.Z80
file and two included files; CDZSWP0.INC and CDZSWP1.INC, is done in the
following two steps:

ZMAC CDZSWP <-- Assembles the files to CDZSWP.REL
ZML CDZSWP,DSLIB/,Z3LIB/,VLIB/,SYSLIB/ <-- links main program with
needed library routines
to form CDZSWP.COM

The Driver files are separately-assembled, and must not be linked with
other routines. The overall size must be 2048 bytes or less, combined data
and code, in the present configuration. Overlays are loaded at 0180H into
the CDZSWP.COM program and must be ORG'd at that address. For flexibility,
it is easiest to assemble the file to a .HEX output, then either overlay the
stub default area in the main program to produce a stand-alone .COM file for
a specific configuration, or load it to a binary driver file for explicit or
default loading by CDZSWP when it is executed. Assemble as:

ZMAC <name>.SRC /H <-- Assemble to <name>.HEX

This file may be overlayed on CDZSWP.COM to produce a new executable (I
suggest with a new name) as:

MYLOAD <newname>.COM=CDZSWP,<overlayname> <-- Add <overlayname.HEX>
to CDZSWP.COM producing
<newname>.COM

To produce a standalone driver module for later loading:

MYLOAD <name>.DRV=<name> <-- load <name>.HEX to <name>.DRV
"

Das war mir dann auch echt zuviel für eine GIDE ONLY Variante ! Ich hatte die Original Quellen dann so geändert, dass sie mit M80/LINK131 in das COM-File übersetzt werden konnten. Mit M80/L80 habe ich das auch nicht (mehr) hinbekommen.


MfG susowa
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
16.02.2025, 13:40 Uhr
Klaus



Hallo Bert,

versuch mal bei M80/L80 (siehe 006) im Quellcode statt

.phase 0100h

aseg (EDIT: sorry hatte versehentlich aset geschrieben)
org 0100h

Hab zwar keine Ahnung, was das aseg genau macht, aber bei mir sind die 3 Null-Byte am Anfang damit nicht drin.

Übersetzen dann wie angegeben
M80 =123 für Zilog oder m80 =123 /I für Intel
L80 123,123/N/E

Viele Grüße,
Klaus

Dieser Beitrag wurde am 16.02.2025 um 14:00 Uhr von Klaus editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
16.02.2025, 13:55 Uhr
Besserwisser

Avatar von Besserwisser

Ausführbare CP/M-Programme (xxx.com) beginnen und starten immer bei #0100.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
16.02.2025, 16:34 Uhr
MarioG77

Avatar von MarioG77

Oh, ich erinnere mich an das Hello World, was ich Garitz letztes Jahr programmieren wollte - das hat ewig gedauert, bis ich was hatte.
Leider kann ich gerade nichts sinnvolles beitragen. Mein 1715 ist gerade Mal in die Ecke gestellt...
--
Gruss Mario

Betriebsbereit: KC85/3, 2x [KC85/4, D004+Floppy, D008], PPC512, PC1512, 2xEC1834, Soemtron 286, 3x PC1715, picoAC1
Zu restaurieren: 1x A5120 und hin und wieder was von oben
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
16.02.2025, 17:42 Uhr
Bert



aseg hilft tatsächlich:

Zitat:
... instructs the assembler to use the absolute location counter until otherwise directed.



Das führt zwar noch zu einer Nachfrage beim Linker:

Quellcode:

A1>l80 123,123/N/E
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft

Data    0000    0103    <  259>

53300 Bytes Free
[0000   0103        1]
Origin below loader memory, move anyway(Y or N)?N


(Wenn ich die Frage mit Y beantworte, läuft der Linker Amok...)

Und das Ergebnis sieht gut aus:

Quellcode:

A1>dump 123.com
0000 3E 31 CD 10 01 3E 32 CD 10 01 3E 33 CD 10 01 C9
0010 0E 02 5F CD 05 00 C9 00 00 00 00 00 00 00 00 00





Zitat:
Besserwisser schrieb
Ausführbare CP/M-Programme (xxx.com) beginnen und starten immer bei #0100.


Das hat niemand bestritten. Ich erwarte trotzdem das die COM-Datei direkt mit ausführbarem Code beginnt und nicht erst noch 256 NOPs enthält.
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
16.02.2025, 17:51 Uhr
Bert



Mit aseg + org fragt auch der Linker nicht mehr nach:

Quellcode:

A1>m80 =123

No Fatal error(s)

A1>l80 123,123/N/E
Link-80  3.43  14-Apr-81  Copyright (c) 1981 Microsoft

Data    0100    0117    <   23>

53536 Bytes Free
[0000   0117        1]

A1>dump 123.com
0000 3E 31 CD 10 01 3E 32 CD 10 01 3E 33 CD 10 01 C9
0010 0E 02 5F CD 05 00 C9 33 66 84 00 2C 90 70 08 BE


Ist trotzdem irgendwie alles andere als intuitiv...
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
16.02.2025, 18:26 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

die Tools M80 und L80 von Microsoft sind recht mächtig, aber auch aus heutiger Sicht bzgl. Parametern sehr gewöhnungsbedürftig. Man kommt nicht ums Lesen der Handbücher herum. Die DDR-Bezeichnungen ASM und LINK für diese beiden Tools tragen nicht gerade zur Übersichtlichkeit bei. L80 ist umständlich in der Bedienung, bei normalen Aufgaben/Programmen ist man mit LINKMT.COM besser bedient. Beide Linker verstehen dasselbe REL-Format.

Der Linker von DR (LINK.COM, oft auch LINK131.COM benannt zur Unterscheidung) kommt auch damit klar.

Auf meiner Seite https://hc-ddr.hucki.net/wiki/doku.php/cpm/m80 habe ich das auch mit Beispiel beschrieben.

M80 =DEMO/L
L80 /P:0100,DEMO,DEMO/N/E

oder

M80 =DEMO/L
LINK DEMO

erzeugt beides dieselbe Binär-Datei.

"Wird der Linker ohne /P: aufgerufen, wird am Codeanfang ein Sprung zum Programmbeginn eingefügt, der Code wird also um 3 Byte länger! Deshalb wird oftmals ein anderer Linker wie LINK 1.31 von Digital Research oder der in der DDR verbreitete Link/MT+ Release 5.5 genutzt."

Zum Thema Segmente und M80: Standard (wenn man nix anderes angibt), ist CSEG.
Hier ist eine ORG-Anweisung in relativer Offset zur aktuellen Adresse (die mit der Adresse vom P-Schalter beim Linker startet). Das führt dann zu 100h freien Bytes, wenn man beides angibt. Bei ASEG passiert das nicht.

Das Handbuch ist nicht umsonst 200 Seiten dick
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)

Dieser Beitrag wurde am 16.02.2025 um 18:30 Uhr von volkerp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
16.02.2025, 18:33 Uhr
Klaus




Zitat:
Bert schrieb
Ist trotzdem irgendwie alles andere als intuitiv...


Ja... da hast Du Recht.

Ich erstelle die Programme sowieso am PC (W10 64bit) und nutze da den kleinen CPM Emulator für M80/L80 bzw. LINKMT. Der Übersetzungsaufruf geht dann über eine kleine Batch-Datei. Gerade beim MAC Dateien von alten DDR Quellen (CP/A z.B.) geht es ganz gut.

Für andere Z80 Spielereien nehme ich sehr gern den kleinen ASIDE-Assembler. Der ist auch sehr einfach zu bedienen... kann aber vielleicht nicht alles so, wie die Großen.
Leider sind die nie alle kompatibel, was den Syntax betrifft.
Mal geht es mit DB, mal muss DEFB hin, mal mit Doppelpunkt.... u.s.w.

Naja... ich bin ja auch kein Programmierer. Garantiert gibt es heute bessere Tools.

Viele Grüße,
Klaus
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