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 |