asm2
asm2 is a native 1802 Elf-OS assembler updated for Elf-OS 0.4.0
The source file extension must be .asm but the file extension is not used when invoking the assembler. For example, asm2 test compiles the source file test.asm
Up completion of assembly, asm2 produces a .obj file. link2 is required to convert the .obj file to a binary file with the default file name being a.out
Assembler Line Format:
----------------------
label: OPCODE ARGUMENTS ; Comments
Labels and comments are optional, and not all opcodes have arguments. In
addition to the 1802 instruction set, Edt/Asm provides 5 pseudo-opcodes:
ORG addr Specify address for assembly
DB b1,b2,...bn Define a list of bytes in memory
DB 'c1','c2'...'cn' Define a list of chars in memory (for example, 'A')
DW w1,w2,...wn Define a list of words in memory
DS n Define storage without assigning a value
END start End of assembly, also specifies a start address
LABEL: EQU n Value of n is in decimal or hex
Where addr,bn,wn can be a hex value such as 8000h or a decimal value such as 256.
A colon (:) is used to delimit a label.
Example Elf-OS restart program
F_MSG: EQU 034Bh ; ELF-OS message vector
F_WARM: EQU 0CF00h ; BIOS warm start vector
ORG 2000h ; start of program load address
BR START ; branch around header
DB 88h ; 8th month-upper bit indicates extended hdr
DB 14 ; the 14th day of the month
DW 2021 ; the year
DW 7 ; indicate that this is build 7 of the program
DB 'BJM' ; text for the Elf OS version command
DB 0 ; indicate end of ASCIIZ text string
START: SEP R4 ; call to output msg to terminal
DW F_MSG ; elf OS output msg address
DB 'Rebooting Elf-OS ...',0
LBR F_WARM ; branch to entry point of EPROM
END START ; indicate the entry point for the y point for the program
asm2 currently only supports simple arguments, arithmetic expressions
cannot be used. When specifying registers, the register number may (but need
not) begin with R, for example: LDN R8
The high byte of a value can be obtained by addeing .1 to the end of a label,
for example: LDI STACK.1 will load the high byte of the address of
STACK. .0 will obtain the low byte of a value, for example: LDI STACK.0
Source: cosmacelf@groups.io