⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 porting.texi

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 TEXI
📖 第 1 页 / 共 5 页
字号:
intisatty(fd)     int fd;@{  return (1);@}/* * lseek -- move read/write pointer. Since a serial port *          is non-seekable, we return an error. */off_tlseek(fd,  offset, whence)     int fd;     off_t offset;     int whence;@{  errno = ESPIPE;  return ((off_t)-1);@}/* * fstat -- get status of a file. Since we have no file *          system, we just return an error. */intfstat(fd, buf)     int fd;     struct stat *buf;@{  errno = EIO;  return (-1);@}/* * getpid -- only one process, so just return 1. */#define __MYPID 1intgetpid()@{  return __MYPID;@}/* * kill -- go out via exit... */intkill(pid, sig)     int pid;     int sig;@{  if(pid == __MYPID)    _exit(sig);  return 0;@}/* * print -- do a raw print of a string */ intprint(ptr)char *ptr;@{  while (*ptr) @{    outbyte (*ptr++);  @}@}/* * putnum -- print a 32 bit number in hex */intputnum (num)unsigned int num;@{  char  buffer[9];  int   count;  char  *bufptr = buffer;  int   digit;    for (count = 7 ; count >= 0 ; count--) @{    digit = (num >> (count * 4)) & 0xf;        if (digit <= 9)      *bufptr++ = (char) ('0' + digit);    else      *bufptr++ = (char) ('a' - 10 + digit);  @}  *bufptr = (char) 0;  print (buffer);  return;@}@end example@node mvme.S, io.c, glue.c, Code Listings@section I/O assembler code sample@example/* * mvme.S -- board support for m68k */	.title "mvme.S for m68k-coff"/* These are predefined by new versions of GNU cpp.  */#ifndef __USER_LABEL_PREFIX__#define __USER_LABEL_PREFIX__ _#endif#ifndef __REGISTER_PREFIX__#define __REGISTER_PREFIX__#endif/* ANSI concatenation macros.  */#define CONCAT1(a, b) CONCAT2(a, b)#define CONCAT2(a, b) a ## b/* Use the right prefix for global labels.  */#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)/* Use the right prefix for registers.  */#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)#define d0 REG (d0)#define d1 REG (d1)#define d2 REG (d2)#define d3 REG (d3)#define d4 REG (d4)#define d5 REG (d5)#define d6 REG (d6)#define d7 REG (d7)#define a0 REG (a0)#define a1 REG (a1)#define a2 REG (a2)#define a3 REG (a3)#define a4 REG (a4)#define a5 REG (a5)#define a6 REG (a6)#define fp REG (fp)#define sp REG (sp)#define vbr REG (vbr)	.align	2	.text	.global SYM (_exit)	.global SYM (outln)	.global SYM (outbyte)	.global SYM (putDebugChar)	.global SYM (inbyte)	.global SYM (getDebugChar)	.global SYM (havebyte)	.global SYM (exceptionHandler)	.set	vbr_size, 0x400	.comm	SYM (vbr_table), vbr_size/* * inbyte -- get a byte from the serial port *	d0 - contains the byte read in */	.align	2SYM (getDebugChar):		/* symbol name used by m68k-stub */SYM (inbyte):	link	a6, #-8	trap 	#15	.word	inchr	moveb 	sp@@, d0	extbl	d0	unlk	a6	rts/* * outbyte -- sends a byte out the serial port *	d0 - contains the byte to be sent */	.align	2SYM (putDebugChar):		/* symbol name used by m68k-stub */SYM (outbyte):	link	fp, #-4 	moveb	fp@@(11), sp@@	trap 	#15	.word	outchr	unlk	fp	rts/* * outln -- sends a string of bytes out the serial port with a CR/LF *	a0 - contains the address of the string's first byte *	a1 - contains the address of the string's last byte */	.align	2SYM (outln):	link	a6, #-8	moveml	a0/a1, sp@@	trap 	#15	.word 	outln	unlk	a6	rts/* * outstr -- sends a string of bytes out the serial port without a CR/LF *	a0 - contains the address of the string's first byte *	a1 - contains the address of the string's last byte */	.align	2SYM (outstr):	link	a6, #-8	moveml	a0/a1, sp@@	trap 	#15	.word 	outstr	unlk	a6	rts/* * havebyte -- checks to see if there is a byte in the serial port, *	     returns 1 if there is a byte, 0 otherwise. */SYM (havebyte):	trap 	#15	.word	instat	beqs	empty	movel 	#1, d0	rtsempty:	movel	#0, d0	rts/* * These constants are for the MVME-135 board's boot monitor. They * are used with a TRAP #15 call to access the monitor's I/O routines. * they must be in the word following the trap call. */	.set inchr, 0x0	.set instat, 0x1	.set inln, 0x2	.set readstr, 0x3	.set readln, 0x4	.set chkbrk, 0x5	.set outchr, 0x20	.set outstr, 0x21	.set outln, 0x22	.set write, 0x23	.set writeln, 0x24	.set writdln, 0x25	.set pcrlf, 0x26	.set eraseln, 0x27	.set writd, 0x28	.set sndbrk, 0x29	.set tm_ini, 0x40	.set dt_ini, 0x42	.set tm_disp, 0x43	.set tm_rd, 0x44	.set redir, 0x60	.set redir_i, 0x61	.set redir_o, 0x62	.set return, 0x63	.set bindec, 0x64	.set changev, 0x67	.set strcmp, 0x68	.set mulu32, 0x69	.set divu32, 0x6A	.set chk_sum, 0x6B@end example@node io.c, leds.c, mvme.S, Code Listings@section I/O code sample@example#include "w89k.h"/* * outbyte -- shove a byte out the serial port. We wait till the byte  */intoutbyte(byte)     unsigned char byte;@{  while ((inp(RS232REG) & TRANSMIT) == 0x0) @{  @} ;  return (outp(RS232PORT, byte));@}/* * inbyte -- get a byte from the serial port */unsigned charinbyte()@{  while ((inp(RS232REG) & RECEIVE) == 0x0) @{ @};  return (inp(RS232PORT));@}@end example@node leds.c, ,io.c, Code Listings@section Led control sample@example/* * leds.h -- control the led's on a Motorola mc68ec0x0 board. */#ifndef __LEDS_H__#define __LEDS_H__#define LED_ADDR	0xd00003#define LED_0           ~0x1#define LED_1           ~0x2#define LED_2           ~0x4#define LED_3           ~0x8#define LED_4           ~0x10#define LED_5           ~0x20#define LED_6           ~0x40#define LED_7           ~0x80#define LEDS_OFF	0xff#define LEDS_ON		0x0#define FUDGE(x) ((x >= 0xa && x <= 0xf) ? (x + 'a') & 0x7f : (x + '0') & 0x7f)extern void led_putnum( char );#endif		/* __LEDS_H__ *//* * leds.c -- control the led's on a Motorola mc68ec0x0 (IDP)board. */#include "leds.h"void zylons();void led_putnum();/* * led_putnum -- print a hex number on the LED. the value of num must be a char with *              the ascii value. ie... number 0 is '0', a is 'a', ' ' (null) clears *		the led display. *		Setting the bit to 0 turns it on, 1 turns it off. * 		the LED's are controlled by setting the right bit mask in the base * 		address.  *		The bits are: *			[d.p | g | f | e | d | c | b | a ] is the byte. * *		The locations are: *		 *			 a *		       ----- *		    f |     | b *		      |  g  | *		       ----- *                    |     | *                  e |     | c *                     ----- *                       d                . d.p (decimal point) */voidled_putnum ( num )char num;@{    static unsigned char *leds = (unsigned char *)LED_ADDR;    static unsigned char num_bits [18] = @{      0xff,						/* clear all */      0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, /* numbers 0-9 */      0x98, 0x20, 0x3, 0x27, 0x21, 0x4, 0xe 		/* letters a-f */    @};    if (num >= '0' && num <= '9')      num = (num - '0') + 1;    if (num >= 'a' && num <= 'f')      num = (num - 'a') + 12;    if (num == ' ')      num = 0;    *leds = num_bits[num];@}/* * zylons -- draw a rotating pattern. NOTE: this function never returns. */voidzylons()@{  unsigned char *leds 	= (unsigned char *)LED_ADDR;  unsigned char curled = 0xfe;  while (1)    @{      *leds = curled;      curled = (curled >> 1) | (curled << 7);      delay ( 200 );    @}@}@end example@page@contents@c second page break makes sure right-left page alignment works right@c with a one-page toc, even though we don't have setchapternewpage odd.@page@bye

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -