Skip to content

MOS executable format

envenomator edited this page May 20, 2023 · 3 revisions

MOS header

When a user executes the MOS run function, either by using 'RUN' as a command, or typing the name of a corresponding program in the /mos/ directory and hitting enter, MOS performs the following checks on the loaded program in memory:

  1. Are the ASCII characters 'M', 'O' and 'S' present from index location 40 hex / 64 decimal?
  2. Future check of MOS header version byte at location 43 hex / 67 decimal
  3. Check of ADL mode at location 44 hex / 68 decimal - (0: Z80, 1: ADL) to determine the program's memory mode

Assembly example implementation

Assembler programs achieve startup by using alignment to 40h / 64 and jumping to the user code after the header like:

   .assume adl=1 ; program starts in ADL mode
   .org $40000   ; program will be assembled to / loaded from first AgonLight RAM address

   jp start      ; skip over header

   .align 64
   .db "MOS"     ; MOS header 'magic' characters
   .db 00h       ; MOS header version 0 - the only in existence currently
   .db 01h       ; Flag for run mode (0: Z80, 1: ADL) - We start up in ADL mode here

start:
   ; actual user code here
Clone this wiki locally