PC-9801エミュレータ(T98-Next)でMS-DOSプログラミング #5

5名無しさん@Next2ch:2021/08/04(水) 17:02:52.42 ID:MAOnCu96

/*
* FAR ポインターからセグメント、オフセットを取り出す
* unsigned short FP_SEG( ???? far *p )
* unsigned short FP_OFF( ???? far *p )
*/
#ifndef FP_SEG
#define FP_SEG(p) ((WORD)((DWORD)((void far *)(p))>>16))
#endif
#ifndef FP_OFF
#define FP_OFF(p) ((WORD)(p))
#endif

/*
* PEEK POKE
* s:segment o:offset c:char or unsigned int
*/
#define M_poke(s,o,c) (*((WORD far *)MK_FP((s),(o))) = (WORD)(c))
#define M_pokeb(s,o,c) (*((BYTE far *)MK_FP((s),(o))) = (BYTE)(c))
#define M_peek(s,o) (*((WORD far *)MK_FP((s),(o))))
#define M_peekb(s,o) (*((BYTE far *)MK_FP((s),(o))))

/*
* Bit test
* b:bit(0‾?) c:char or short or long s:segment o:offset
*/
#define M_isBITon(b,c) ( ((c)&(0x01<<(b))))
#define M_isBIToff(b,c) (!((c)&(0x01<<(b))))
#define M_isBITAon(b,s,o) (M_isBITon( (b),M_peekb((s),(o))))
#define M_isBITAoff(b,s,o) (M_isBIToff((b),M_peekb((s),(o))))

/*
* Bit set
* b:bit(0‾7) s:segment o:offset
*/
#define M_setBITon(b,c) ((c) = ((c)|(0x01<<(b))))
#define M_setBIToff(b,c) ((c) = (‾(‾(c)|(0x01<<(b)))))
#define M_setBITAon(b,s,o) (M_pokeb((s),(o),M_peekb((s),(o))|(0x01<<(b))))
#define M_setBITAoff(b,s,o) (M_pokeb((s),(o),‾(‾M_peekb((s),(o))|(0x01<<(b)))))

/*
* メモリーモデル識別
* S,Tiny,Small = 0 D,Compact = 1 P,Medium = 2 L,Large,Huge = 3
*/
#define MEMORY_MODEL ( sizeof( void (*)() ) == 2 ? ¥
( sizeof( void * ) == 2 ? 0 : 1 ) : ¥
( sizeof( void * ) == 2 ? 2 : 3 ) )

/*
* C++ の new, delete もどき
*
*/
#define NEW(p) ((p) = malloc(sizeof *(p)))
#define DELETE(p) (free(p))
#define FARNEW(p) ((p) = farmalloc((unsigned long)(sizeof *(p))))
#define FARDELETE(p) (farfree(p))


#endif



スパムを通報

このレスがスパム・荒らしである場合は以下のボタンをクリックして通報してください。
(同意できない意見などに反対票を投じる機能ではありません)
通報

このスレッドを全て表示


レスを書き込む