APRS Digipeatersoftware DIGI_NED
Bookmark This site

Developers Information


The communication with AX25_MAC is done using a software-interrupt. There are several sub-functions which are selected by the value in register AH. Parameters are passed in the AL and ES:DI registers when needed. On return register AX will hold the result or 0xFFFF when an unknown sub-function was selected. All input characters have to be read before the output can be send again.

Frame data

The layout of the "Frame data" moved between the application and AX25_MAC is as follows:

offset type
byte port-number

  • data-length: number of bytes in "data" for this AX.25 frame excluding the 16 bit CRC (low-byte first)
  • port-number: port on which this frame was received or has to be transmitted, WARNING: zero based (0 = first port)
  • data: the raw AX.25 frame without CRC which was received or shall be transmitted


Sub functions:

AH = 1 Check, whether an AX.25 frame is available on the input
Returns :
  • AX = 0 No AX.25 frame available on the input
  • AX = 1 AX.25 frame available on the input
AH = 2 AX.25 frame read (call only if sub function 1 reported the availability of an AX.25 frame on the input)
  • ES:DI Pointer to a storage area to put the the "Frame data" in.
  • AL = 0 Frame copied to storage area
  • AL = -1 Error
AH = 3 Output an AX.25 frame
  • ES:DI Pointer to a storage area which contains the "Frame data" to transmit
  • AL = 0 Frame read and queued for transmission
  • AL = -1 Error
AH = 0xFB Request number of Ports
  • AL Number of used ports (0 to 8)
Eight bytes behind the entry of the AX25_MAC interrupt routine a recognition string 'AX25_MAC'is available, which can be used to find out which interrupt is used by AX25_MAC.

Other functions may do something but are used for debugging and may be removed in the future. That's why I regard these additions as 'undocumented features'. Look in the source to find out what these functions currently do.

powered by cmsimple.dk | cmsimple-styles.com template modified by PE1MEW