|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 6537 (0x1989)
Types: TextFile
Names: »cmdmacro.h«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦3b20aab50⟧ »EurOpenD3/network/snmp/kip-snmp.91.tar.Z«
└─⟦b503a39fe⟧
└─⟦this⟧ »kip/fp/cmdmacro.h«
└─⟦this⟧ »kip/fp3.0/cmdmacro.h«
/*
** Copyright (C) 1987 Kinetics, Inc. All Rights Reserved.
** This program contains proprietary confidential information
** and trade secrets of Kinetics, Inc. Reverse engineering
** of object code is prohibited. Use of copyright notice
** is precautionary and does not imply publication.
**
**
** The PROM loader guarantees the following to be true when the
** downloaded program begins executing:
**
** - CPU is in supervisor state,
** - Interrupt service is at level 7
** - 'sp' contains the address of the boot prom 'jump_table'
** defined below
*/
#include "fp3.0/cmdidx.h" /* use the position dependent command
** indices for the X_nnn constants
*/
#define NUM_STACK 20
#define NUM_ADDRS 64
#define NUM_JUMPS 64
struct fp_table {
struct {
unsigned short opcode;
unsigned long dst_addr;
} jump_table[NUM_JUMPS];
int (*subr_table[NUM_ADDRS])();
};
extern struct fp_table *table_ptr;
#define K_VERSION(a) table_ptr->subr_table[X_VERSION](a)
#define K_EXECUTE() table_ptr->subr_table[X_EXECUTE]()
#define K_ACK() table_ptr->subr_table[X_ACK]()
#define K_REBOOT() table_ptr->subr_table[X_REBOOT]()
#define K_SET68() table_ptr->subr_table[X_SET68]()
#define K_SET86(a) table_ptr->subr_table[X_SET86](a)
#define K_ATINIT(a) table_ptr->subr_table[X_ATINIT](a)
#define K_ATWRITE(a) table_ptr->subr_table[X_ATWRITE](a)
#define K_WAIT(a) table_ptr->subr_table[X_WAIT](a)
#define K_WHEREIS(a) table_ptr->subr_table[X_WHEREIS](a)
#define K_GETMEM(a) table_ptr->subr_table[X_GETMEM](a)
#define K_PROTECT(a) table_ptr->subr_table[X_PROTECT](a)
#define K_COPYMEM(a) table_ptr->subr_table[X_COPYMEM](a)
#define K_CLRMEM(a) table_ptr->subr_table[X_CLRMEM](a)
#define K_PROMRAM(a) table_ptr->subr_table[X_PROMRAM](a)
#define K_RESET() table_ptr->subr_table[X_RESET]()
#define K_USER0(a) table_ptr->subr_table[X_USER0](a)
#define K_USER1(a) table_ptr->subr_table[X_USER1](a)
#define K_USER2(a) table_ptr->subr_table[X_USER2](a)
#define K_USER3(a) table_ptr->subr_table[X_USER3](a)
#define K_USER4(a) table_ptr->subr_table[X_USER4](a)
#define K_USER5(a) table_ptr->subr_table[X_USER5](a)
#define K_USER6(a) table_ptr->subr_table[X_USER6](a)
#define K_USER7(a) table_ptr->subr_table[X_USER7](a)
#define K_BUFINIT(a) table_ptr->subr_table[X_BUFINIT](a)
#define K_BUFGET(a) table_ptr->subr_table[X_BUFGET](a)
#define K_BUFFREE(a) table_ptr->subr_table[X_BUFFREE](a)
#define K_BUFENQ(a) table_ptr->subr_table[X_BUFENQ](a)
#define K_BUFDEQ(a) table_ptr->subr_table[X_BUFDEQ](a)
#define K_ERR() table_ptr->subr_table[X_ERR]()
#define K_IDLE() table_ptr->subr_table[X_IDLE]()
#define K_KLAP(a) table_ptr->subr_table[X_KLAP](a)
#define K_WHO() table_ptr->subr_table[X_WHO]()
#define K_CA86() table_ptr->subr_table[X_CA86]()
#define K_RES86() table_ptr->subr_table[X_RES86]()
#define K_CLRINT() table_ptr->subr_table[X_CLRINT]()
#define K_RCSID(a) table_ptr->subr_table[X_RCSID](a)
#define K_EXPROM() table_ptr->subr_table[X_EXPROM]()
#define K_INIPROM() table_ptr->subr_table[X_INIPROM]()
#define K_RES8530() table_ptr->subr_table[X_RES8530]()
#define K_DMTSERV() table_ptr->subr_table[X_DMTSERV]()
#define K_SREC(a) table_ptr->subr_table[X_SREC](a)
#define K_SPL(a) table_ptr->subr_table[X_SPL](a)
#define K_LED(a) table_ptr->subr_table[X_LED](a)
#define K_RAND(a) table_ptr->subr_table[X_RAND](a)
#define K_CMPMEM(a) table_ptr->subr_table[X_CMPMEM](a)
#define K_SENDF(a) table_ptr->subr_table[X_SENDF](a)
#define K_MEMSEG(a) table_ptr->subr_table[X_MEMSEG](a)
#define K_MALLOC(a) table_ptr->subr_table[X_MALLOC](a)
#define K_FREE(a) table_ptr->subr_table[X_FREE](a)
#define K_NOTIMP() table_ptr->subr_table[X_NOTIMP]()
/* macros for memory operations */
#define K_BCOPY(addr1,addr2,cnt) { \
struct fp_copy ab; \
ab.fpc_from = (char *)(addr1); \
ab.fpc_to = (char *)(addr2); \
ab.fpc_count = (unsigned short)(cnt); \
K_COPYMEM(&ab); \
}
#define K_BZERO(addr,cnt) { \
struct fp_mem ab; \
ab.fpm_count = (unsigned short)(cnt); \
ab.fpm_memp = (char *)(addr); \
K_CLRMEM(&ab); \
}
#define K_BCMP(rv,addr1,addr2,cnt) { \
struct fp_copy ab; \
ab.fpc_from = (char *)(addr1); \
ab.fpc_to = (char *)(addr2); \
ab.fpc_count = (unsigned short)(cnt); \
K_CMPMEM(&ab); \
(rv) = (int)ab.fpc_count; \
}
/* macros for buffer operations */
#define K_PGET(type,buf) { \
struct fp_bget bg; \
bg.fpg_type = (type); \
K_BUFGET(&bg); \
(buf) = bg.fpg_buf; \
}
#define K_PFREE(buf) { \
struct fp_bfree bf; \
bf.fpf_buf = (buf); \
K_BUFFREE(&bf); \
}
#define K_PFREEN(buf,nxt) { \
struct fp_bfree bf; \
bf.fpf_buf = (buf); \
K_BUFFREE(&bf); \
(nxt) = bf.fpf_nxt; \
}
#define K_PENQ(level,head,buf) { \
struct fp_bqueue bq; \
short pr; \
bq.fpq_q = (head); \
bq.fpq_buf = (buf); \
pr = (level); \
K_SPL(&pr); \
K_BUFENQ(&bq); \
K_SPLX(&pr); \
}
#define K_PENQNP(head,buf) { \
struct fp_bqueue bq; \
bq.fpq_q = (head); \
bq.fpq_buf = (buf); \
K_BUFENQ(&bq); \
}
#define K_PDEQ(level,head,buf) { \
struct fp_bqueue bq; \
short pr; \
bq.fpq_q = (head); \
pr = (level); \
K_SPL(&pr); \
K_BUFDEQ(&bq); \
K_SPL(&pr); \
(buf) = bq.fpq_buf; \
}
#define K_PDEQNP(head,buf) { \
struct fp_bqueue bq; \
bq.fpq_q = (head); \
K_BUFDEQ(&bq); \
(buf) = bq.fpq_buf; \
}
/* macros for various spl options */
#define SPL0 0x2000
#define SPLIE 0x2200
#define SPLABUS 0x2500
#define SPLIMP 0x2700
#define K_SPL0(a) { \
*(a) = SPL0; \
K_SPL(a); \
}
#define K_SPLIE(a) { \
*(a) = SPLIE; \
K_SPL(a); \
}
#define K_SPLABUS(a) { \
*(a) = SPLABUS; \
K_SPL(a); \
}
#define K_SPLIMP(a) { \
*(a) = SPLIMP; \
K_SPL(a); \
}
#define K_SPLX(a) { \
K_SPL(a); \
}
/* macros for led calls */
#define K_LEDON() { \
struct fp_led fpl; \
fpl.fpl_leds = 0; /* currently not used (only one led) */ \
fpl.fpl_state = LED_ON; \
K_LED(&fpl); \
}
#define K_LEDOFF() { \
struct fp_led fpl; \
fpl.fpl_leds = 0; /* currently not used (only one led) */ \
fpl.fpl_state = LED_OFF; \
K_LED(&fpl); \
}
#define K_LEDTOGGLE() { \
struct fp_led fpl; \
fpl.fpl_leds = 0; /* currently not used (only one led) */ \
fpl.fpl_state = LED_TOGGLE; \
K_LED(&fpl); \
}
#define MEMSEG(cast_type,kcp,kss) { \
struct fp_malloc xyz0; \
xyz0.fpo_parm.fpo_size = (kss); \
K_MEMSEG(&xyz0); \
(kcp) = (cast_type)xyz0.fpo_parm.fpo_area; \
}
#define MALLOC(cast_type,kcp,kss) { \
struct fp_malloc xyz0; \
xyz0.fpo_parm.fpo_size = (kss); \
K_MALLOC(&xyz0); \
(kcp) = (cast_type)xyz0.fpo_parm.fpo_area; \
}
#define FREE(kcp) { \
struct fp_malloc xyz0; \
xyz0.fpo_parm.fpo_area = (unsigned char *)(kcp); \
K_FREE(&xyz0); \
}