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 |