From cae54f03408c4b1d133ec3858d3b486d58463ea5 Mon Sep 17 00:00:00 2001 From: jonnosan Date: Thu, 16 Apr 2009 09:59:18 +0000 Subject: [PATCH] git-svn-id: http://svn.code.sf.net/p/netboot65/code@113 93682198-c243-4bdb-bd91-e943c89aac3b --- client/inc/nb65_constants.i | 24 +++++++++++++++--------- doc/nb65_api_technical_reference.doc | Bin 103424 -> 106496 bytes 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/client/inc/nb65_constants.i b/client/inc/nb65_constants.i index afeae16..883d8c2 100644 --- a/client/inc/nb65_constants.i +++ b/client/inc/nb65_constants.i @@ -25,16 +25,22 @@ NB65_RAM_STUB_ACTIVATE EQU $C004 NB65_INITIALIZE EQU $01 ;no inputs or outputs - initializes IP stack, also sets IRQ chain to call NB65_VBL_VECTOR at @ 60hz NB65_GET_IP_CONFIG EQU $02 ;no inputs, outputs AX=pointer to IP configuration structure -NB65_TFTP_DIRECTORY_LISTING EQU $03 ;inputs: AX points to a TFTP parameter structure, outputs: none -NB65_TFTP_DOWNLOAD EQU $04 ;inputs: AX points to a TFTP parameter structure, outputs: TFTP param structure updated with - ;NB65_TFTP_POINTER updated to reflect actual load address (if load address $0000 originally passed in) -NB65_DNS_RESOLVE EQU $05 ;inputs: AX points to a DNS parameter structure, outputs: DNS param structure updated with +NB65_DEACTIVATE EQU $0F ;inputs: none, outputs: none (removes call to NB65_VBL_VECTOR on IRQ chain) + +NB65_UDP_ADD_LISTENER EQU $10 ;inputs: AX points to a UDP listener parameter structure, outputs: none +NB65_GET_INPUT_PACKET_INFO EQU $11 ;inputs: AX points to a UDP packet parameter structure, outputs: UDP packet structure filled in +NB65_SEND_UDP_PACKET EQU $12 ;inputs: AX points to a UDP packet parameter structure, outputs: none packet is sent + +NB65_TFTP_DIRECTORY_LISTING EQU $20 ;inputs: AX points to a TFTP parameter structure, outputs: none +NB65_TFTP_DOWNLOAD EQU $21 ;inputs: AX points to a TFTP parameter structure, outputs: TFTP param structure updated with + ;NB65_TFTP_POINTER updated to reflect actual load address (if load address $0000 originally passed in) +NB65_TFTP_CALLBACK_DOWNLOAD EQU $22 ;inputs: AX points to a TFTP parameter structure, outputs: none +NB65_TFTP_CALLBACK_UPLOAD EQU $23 ;upload: AX points to a TFTP parameter structure, outputs: none + +NB65_DNS_RESOLVE EQU $30 ;inputs: AX points to a DNS parameter structure, outputs: DNS param structure updated with ;NB65_DNS_HOSTNAME_IP updated with IP address corresponding to hostname. -NB65_UDP_ADD_LISTENER EQU $06 ;inputs: AX points to a UDP listener parameter structure, outputs: none -NB65_GET_INPUT_PACKET_INFO EQU $07 ;inputs: AX points to a UDP packet parameter structure, outputs: UDP packet structure filled in -NB65_SEND_UDP_PACKET EQU $08 ;inputs: AX points to a UDP packet parameter structure, outputs: none packet is sent -NB65_DEACTIVATE EQU $09 ;inputs: none, outputs: none (removes call to NB65_VBL_VECTOR on IRQ chain) -NB65_TFTP_CALLBACK_DOWNLOAD EQU $0A ;inputs: AX points to a TFTP parameter structure, outputs: none + + NB65_PRINT_ASCIIZ EQU $80 ;inputs: AX=pointer to null terminated string to be printed to screen, outputs: none NB65_PRINT_HEX EQU $81 ;inputs: A=byte digit to be displayed on screen as (zero padded) hex digit, outputs: none NB65_PRINT_DOTTED_QUAD EQU $82 ;inputs: AX=pointer to 4 bytes that will be displayed as a decimal dotted quad (e.g. 192.168.1.1) diff --git a/doc/nb65_api_technical_reference.doc b/doc/nb65_api_technical_reference.doc index d937267869b1267375c82edec039d6faa3ea7235..17e63feef1d3bd02088e26510ef051c752a39cd7 100644 GIT binary patch delta 13777 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