1/* 2 * iocs.h 3 * X680x0 IOCS call interface 4 * 5 * written by ITOH Yasufumi 6 * (based on PD libc 1.1.32 by PROJECT C Library) 7 * public domain 8 * 9 * $NetBSD: iocs.h,v 1.7 2009/03/17 18:58:27 he Exp $ 10 */ 11/* 12 * PROJECT C Library, X68000 PROGRAMMING INTERFACE DEFINITION 13 * -------------------------------------------------------------------- 14 * This file is written by the Project C Library Group, and completely 15 * in public domain. You can freely use, copy, modify, and redistribute 16 * the whole contents, without this notice. 17 * -------------------------------------------------------------------- 18 * Id: iocs.h,v 1.1.1.1 1993/04/18 16:14:27 mura Exp 19 * Id: iocs_p.h,v 1.5 1993/10/06 16:46:12 mura Exp 20 * Id: scsi.h,v 1.3 1994/07/31 17:21:50 mura Exp 21 */ 22 23#ifndef __X68K_IOCS_H__ 24#define __X68K_IOCS_H__ 25 26#include <sys/cdefs.h> 27 28struct iocs_boxptr { 29 short x1; 30 short y1; 31 short x2; 32 short y2; 33 unsigned short color; 34 unsigned short linestyle; 35}; 36 37struct iocs_circleptr { 38 short x; 39 short y; 40 unsigned short radius; 41 unsigned short color; 42 short start; 43 short end; 44 unsigned short ratio; 45}; 46 47struct iocs_fillptr { 48 short x1; 49 short y1; 50 short x2; 51 short y2; 52 unsigned short color; 53}; 54 55struct iocs_fntbuf { 56 short xl; 57 short yl; 58 unsigned char buffer[72]; 59}; 60 61struct iocs_getptr { 62 short x1; 63 short y1; 64 short x2; 65 short y2; 66 void *buf_start; 67 void *buf_end; 68}; 69 70struct iocs_lineptr { 71 short x1; 72 short y1; 73 short x2; 74 short y2; 75 unsigned short color; 76 unsigned short linestyle; 77}; 78 79struct iocs_paintptr { 80 short x; 81 short y; 82 unsigned short color; 83 void *buf_start; 84 void *buf_end; 85} __attribute__((__packed__)); 86 87struct iocs_pointptr { 88 short x; 89 short y; 90 unsigned short color; 91}; 92 93struct iocs_psetptr { 94 short x; 95 short y; 96 unsigned short color; 97}; 98 99struct iocs_putptr { 100 short x1; 101 short y1; 102 short x2; 103 short y2; 104 const void *buf_start; 105 const void *buf_end; 106}; 107 108struct iocs_symbolptr { 109 short x1; 110 short y1; 111 unsigned char *string_address; 112 unsigned char mag_x; 113 unsigned char mag_y; 114 unsigned short color; 115 unsigned char font_type; 116 unsigned char angle; 117} __attribute__((__packed__)); 118 119struct iocs_regs { 120 int d0; 121 int d1; 122 int d2; 123 int d3; 124 int d4; 125 int d5; 126 int d6; 127 int d7; 128 int a1; 129 int a2; 130 int a3; 131 int a4; 132 int a5; 133 int a6; 134}; 135 136struct iocs_chain { 137 void *addr; 138 unsigned short len; 139} __attribute__((__packed__)); 140 141struct iocs_chain2 { 142 void *addr; 143 unsigned short len; 144 const struct iocs_chain2 *next; 145} __attribute__((__packed__)); 146 147struct iocs_clipxy { 148 short xs; 149 short ys; 150 short xe; 151 short ye; 152}; 153 154struct iocs_patst { 155 short offsetx; 156 short offsety; 157 short shadow[16]; 158 short pattern[16]; 159}; 160 161struct iocs_tboxptr { 162 unsigned short vram_page; 163 short x; 164 short y; 165 short x1; 166 short y1; 167 unsigned short line_style; 168}; 169 170struct iocs_txfillptr { 171 unsigned short vram_page; 172 short x; 173 short y; 174 short x1; 175 short y1; 176 unsigned short fill_patn; 177}; 178 179struct iocs_trevptr { 180 unsigned short vram_page; 181 short x; 182 short y; 183 short x1; 184 short y1; 185}; 186 187struct iocs_xlineptr { 188 unsigned short vram_page; 189 short x; 190 short y; 191 short x1; 192 unsigned short line_style; 193}; 194 195struct iocs_ylineptr { 196 unsigned short vram_page; 197 short x; 198 short y; 199 short y1; 200 unsigned short line_style; 201}; 202 203struct iocs_tlineptr { 204 unsigned short vram_page; 205 short x; 206 short y; 207 short x1; 208 short y1; 209 unsigned short line_style; 210}; 211 212/* 213 * for SCSI calls 214 */ 215 216struct iocs_readcap { 217 unsigned long block; 218 unsigned long size; 219}; 220 221struct iocs_inquiry { 222 unsigned char unit; 223 unsigned char info; 224 unsigned char ver; 225 unsigned char reserve; 226 unsigned char size; 227 unsigned char buff[0]; /* actually longer */ 228}; 229 230/* 231 * arguments: 232 * dn 32bit arg -> 32bit data reg (input) 233 * an 32bit arg -> 32bit addr reg (input) 234 * odn 32bit arg -> 32bit addr (location to store dn value) 235 * dn=(num) (no C arg) -> load immediate value to the data register 236 * dn=ww two 32bit args -> (LSWord #1) << 16 | (LSWord #2) 237 * dn=bb two 32bit args -> (LSByte #1) << 8 | (LSByte #2) 238 * dn=hsv three args (H S V) -> encode HSV values in dn 239 * opts: 240 * retd2 return value is d2 of IOCS call 241 * err_d0 nonzero d0 is an error -- skip storing values 242 * noret the IOCS call never returns 243 * c_md special for IOCS_CACHE_MD 244 * b_super special for IOCS_B_SUPER 245 * sp_regst special for IOCS_SP_REGST 246 * b_curmod special for IOCS_B_CURMOD 247 * b_curpat special for IOCS_B_CURPAT 248 * b_scroll special for IOCS_B_SCROLL 249 * trap15 special for IOCS_TRAP15 250 */ 251 252/* (none) ; trap15 */ int IOCS_TRAP15(const struct iocs_regs *, struct iocs_regs *); 253/* 00 */ int IOCS_B_KEYINP (void); 254/* 01 */ int IOCS_B_KEYSNS (void); 255/* 02 */ int IOCS_B_SFTSNS (void); 256/* 04 d1 */ int IOCS_BITSNS (int); 257/* 05 d1 */ void IOCS_SKEYSET (int); 258/* 0c d1 */ void IOCS_TVCTRL (int); 259/* 0d d1 d2 */ void IOCS_LEDMOD (int, int); 260/* 0e d1 d2 */ int IOCS_TGUSEMD (int, int); 261/* 0f d1=ww a1 */ int IOCS_DEFCHR (int, int, const void *); 262/* 10 d1 */ int IOCS_CRTMOD (int); 263/* 11 d1 */ int IOCS_CONTRAST (int); 264/* 12 d1=hsv */ int __pure IOCS_HSVTORGB (int, int, int) __attribute__((const)); 265/* 13 d1 d2 */ int IOCS_TPALET (int, int); 266/* 14 d1 d2 */ int IOCS_TPALET2 (int, int); 267/* 15 d1 */ void IOCS_TCOLOR (int); 268/* 19 d1=ww a1 */ int IOCS_FNTGET (int, int, struct iocs_fntbuf *); 269/* 1a d1 d2 a1 */ void IOCS_TEXTGET (int, int, struct iocs_fntbuf *); 270/* 1b d1 d2 a1 */ void IOCS_TEXTPUT (int, int, const struct iocs_fntbuf *); 271/* 1c d1 d2 a1 a2 */ void IOCS_CLIPPUT (int, int, const struct iocs_fntbuf *, const struct iocs_clipxy *); 272/* 1d d1 d2 d3 */ void IOCS_SCROLL (int, int, int); 273/* 1e */ void IOCS_B_CURON (void); 274/* 1f */ void IOCS_B_CUROFF (void); 275/* 20 d1 */ int IOCS_B_PUTC (int); 276/* 21 a1 */ int IOCS_B_PRINT (const char *); 277/* 22 d1 */ int IOCS_B_COLOR (int); 278/* 23 d1 d2 */ int IOCS_B_LOCATE (int, int); 279/* 24 */ void IOCS_B_DOWN_S (void); 280/* 25 */ void IOCS_B_UP_S (void); 281/* 26 d1 */ void IOCS_B_UP (int); 282/* 27 d1 */ void IOCS_B_DOWN (int); 283/* 28 d1 */ void IOCS_B_RIGHT (int); 284/* 29 d1 */ void IOCS_B_LEFT (int); 285/* 2a d1=0 */ void IOCS_B_CLR_ED (void); 286/* 2a d1=1 */ void IOCS_B_CLR_ST (void); 287/* 2a d1=2 */ void IOCS_B_CLR_AL (void); 288/* 2b d1=0 */ void IOCS_B_ERA_ED (void); 289/* 2b d1=1 */ void IOCS_B_ERA_ST (void); 290/* 2b d1=2 */ void IOCS_B_ERA_AL (void); 291/* 2c d1 */ void IOCS_B_INS (int); 292/* 2d d1 */ void IOCS_B_DEL (int); 293/* 2e d1=ww d2=ww ; retd2 */ int IOCS_B_CONSOL (int, int, int, int); 294/* 2f d1 d2 d3 d4 a1 ; retd2 */ int IOCS_B_PUTMES (int, int, int, int, const char *); 295/* 30 d1 */ int IOCS_SET232C (int); 296/* 31 */ int IOCS_LOF232C (void); 297/* 32 */ int IOCS_INP232C (void); 298/* 33 */ int IOCS_ISNS232C (void); 299/* 34 */ int IOCS_OSNS232C (void); 300/* 35 d1 */ void IOCS_OUT232C (int); 301/* 3b d1 */ int IOCS_JOYGET (int); 302/* 3c d1=bb */ int IOCS_INIT_PRN (int, int); 303/* 3d */ int IOCS_SNSPRN (void); 304/* 3e d1 */ void IOCS_OUTLPT (int); 305/* 3f d1 */ void IOCS_OUTPRN (int); 306/* 40 d1 d2 */ int IOCS_B_SEEK (int, int); 307/* 41 d1 d2 d3 a1 */ int IOCS_B_VERIFY (int, int, int, const void *); 308/* 42 d1 d2 d3 a1 */ int IOCS_B_READDI (int, int, int, void *); 309/* 43 d1 a1 d2 */ int IOCS_B_DSKINI (int, const void *, int); 310/* 44 d1 */ int IOCS_B_DRVSNS (int); 311/* 45 d1 d2 d3 a1 */ int IOCS_B_WRITE (int, int, int, const void *); 312/* 46 d1 d2 d3 a1 */ int IOCS_B_READ (int, int, int, void *); 313/* 47 d1 */ int IOCS_B_RECALI (int); 314/* 48 d1 d2 d3 a1 */ int IOCS_B_ASSIGN (int, int, int, const void *); 315/* 49 d1 d2 d3 a1 */ int IOCS_B_WRITED (int, int, int, const void *); 316/* 4a d1 d2 od2 */ int IOCS_B_READID (int, int, void *); 317/* 4b d1 d2 d3 */ int IOCS_B_BADFMT (int, int, int); 318/* 4c d1 d2 d3 a1 */ int IOCS_B_READDL (int, int, int, void *); 319/* 4d d1 d2 d3 a1 */ int IOCS_B_FORMAT (int, int, int, const void *); 320/* 4e d1 d2 */ int IOCS_B_DRVCHK (int, int); 321/* 4f d1 */ int IOCS_B_EJECT (int); 322/* 50 d1 */ int IOCS_BINDATEBCD (int); 323/* 51 d1 */ void IOCS_BINDATESET (int); 324/* 52 d1 */ int IOCS_TIMEBCD (int); 325/* 53 d1 */ void IOCS_TIMESET (int); 326/* 54 */ int IOCS_BINDATEGET (void); 327/* 55 d1 */ int IOCS_DATEBIN (int); 328/* 56 */ int IOCS_TIMEGET (void); 329/* 57 d1 */ int IOCS_TIMEBIN (int); 330/* 58 a1 */ int IOCS_DATECNV (const char *); 331/* 59 a1 */ int IOCS_TIMECNV (const char *); 332/* 5a d1 a1 */ int IOCS_DATEASC (int, char *); 333/* 5b d1 a1 */ int IOCS_TIMEASC (int, char *); 334/* 5c d1 a1 */ void IOCS_DAYASC (int, char *); 335/* 5d d1 */ int IOCS_ALARMMOD (int); 336/* 5e d1 d2 a1 */ int IOCS_ALARMSET (int, int, int); 337/* 5f od1 od2 od0 */ int IOCS_ALARMGET (int *, int *, int *); 338/* 60 a1 d1 d2 */ void IOCS_ADPCMOUT (const void *, int, int); 339/* 61 a1 d1 d2 */ void IOCS_ADPCMINP (void *, int, int); 340/* 62 a1 d1 d2 */ void IOCS_ADPCMAOT (const struct iocs_chain *, int, int); 341/* 63 a1 d1 d2 */ void IOCS_ADPCMAIN (const struct iocs_chain *, int, int); 342/* 64 a1 d1 */ void IOCS_ADPCMLOT (const struct iocs_chain2 *, int); 343/* 65 a1 d1 */ void IOCS_ADPCMLIN (const struct iocs_chain2 *, int); 344/* 66 */ int IOCS_ADPCMSNS (void); 345/* 67 d1 */ void IOCS_ADPCMMOD (int); 346/* 68 d1 d2 */ void IOCS_OPMSET (int, int); 347/* 69 */ int IOCS_OPMSNS (void); 348/* 6a a1 */ int IOCS_OPMINTST (const void *); 349/* 6b a1 d1=bb */ int IOCS_TIMERDST (const void *, int, int); 350/* 6c a1 d1=bb */ int IOCS_VDISPST (const void *, int, int); 351/* 6d a1 d1 */ int IOCS_CRTCRAS (const void *, int); 352/* 6e a1 */ int IOCS_HSYNCST (const void *); 353/* 6f a1 */ int IOCS_PRNINTST (const void *); 354/* 70 */ void IOCS_MS_INIT (void); 355/* 71 */ void IOCS_MS_CURON (void); 356/* 72 */ void IOCS_MS_CUROF (void); 357/* 73 */ int IOCS_MS_STAT (void); 358/* 74 */ int IOCS_MS_GETDT (void); 359/* 75 */ int IOCS_MS_CURGT (void); 360/* 76 d1=ww */ int IOCS_MS_CURST (int, int); 361/* 77 d1=ww d2=ww */ int IOCS_MS_LIMIT (int, int, int, int); 362/* 78 d1 d2 */ int IOCS_MS_OFFTM (int, int); 363/* 79 d1 d2 */ int IOCS_MS_ONTM (int, int); 364/* 7a d1 a1 */ void IOCS_MS_PATST (int, const struct iocs_patst *); 365/* 7b d1 */ void IOCS_MS_SEL (int); 366/* 7c a1 */ void IOCS_MS_SEL2 (const short *); 367/* 7d d1 d2=ww */ int IOCS_SKEY_MOD (int, int, int); 368/* 7e */ void IOCS_DENSNS (void); 369/* 7f */ int IOCS_ONTIME (void); 370/* 80 d1 a1 */ int IOCS_B_INTVCS (int, int); 371/* 81 ; b_super */ int IOCS_B_SUPER (int); 372/* 82 a1 */ int IOCS_B_BPEEK (const void *); 373/* 83 a1 */ int IOCS_B_WPEEK (const void *); 374/* 84 a1 */ int IOCS_B_LPEEK (const void *); 375/* 85 a1 a2 d1 */ void IOCS_B_MEMSTR (const void *, void *, int); 376/* 86 a1 d1 */ void IOCS_B_BPOKE (void *, int); 377/* 87 a1 d1 */ void IOCS_B_WPOKE (void *, int); 378/* 88 a1 d1 */ void IOCS_B_LPOKE (void *, int); 379/* 89 a1 a2 d1 */ void IOCS_B_MEMSET (void *, const void *, int); 380/* 8a a1 a2 d1 d2 */ void IOCS_DMAMOVE (void *, void *, int, int); 381/* 8b a1 a2 d1 d2 */ void IOCS_DMAMOV_A (const struct iocs_chain *, void *, int, int); 382/* 8c a1 a2 d1 */ void IOCS_DMAMOV_L (const struct iocs_chain2 *, void *, int); 383/* 8d */ int IOCS_DMAMODE (void); 384/* 8e */ int __pure IOCS_BOOTINF (void) __attribute__((const)); 385/* 8f */ int __pure IOCS_ROMVER (void) __attribute__((const)); 386/* 90 */ void IOCS_G_CLR_ON (void); 387/* 94 d1 d2 */ int IOCS_GPALET (int, int); 388/* a0 d1 */ int __pure IOCS_SFTJIS (int) __attribute__((const)); 389/* a1 d1 */ int __pure IOCS_JISSFT (int) __attribute__((const)); 390/* a2 d1=ww */ int __pure IOCS_AKCONV (int, int) __attribute__((const)); 391/* a3 d1 a1 a2 */ int IOCS_RMACNV (int, char *, char *); 392/* a4 a1 */ int IOCS_DAKJOB (char *); 393/* a5 a1 */ int IOCS_HANJOB (char *); 394/* ac d1=0 */ int IOCS_MPU_STAT (void); /* ROM 1.3 only */ 395/* ac d1=1 */ int IOCS_CACHE_ST (void); /* ROM 1.3 only */ 396/* ac d1=3 d2 ; c_md */ int IOCS_CACHE_MD (int); /* ROM 1.3 only */ 397/* ad d1 ; b_curmod */ void IOCS_B_CURMOD (int); /*1.3/IOCS.X*/ 398/* ad d1=2 d2 ; b_curpat */ void IOCS_B_CURPAT (int); /*1.3/IOCS.X*/ 399/* ad d1=2 d2=0 */ void IOCS_B_CURPAT1 (void); /*1.3/IOCS.X*/ 400/* ad d1=3 d2 */ void IOCS_B_CURDEF (void *); /*1.3/IOCS.X*/ 401/* ad d1=16 d2 ; b_scroll */ void IOCS_B_SCROLL (int); /*1.3/IOCS.X*/ 402/* ae */ void IOCS_OS_CURON (void); 403/* af */ void IOCS_OS_CUROF (void); 404/* b0 d1 */ int IOCS_DRAWMODE (int); /* ROM 1.3, IOCS.X */ 405/* b1 d1 */ int IOCS_APAGE (int); 406/* b2 d1 */ int IOCS_VPAGE (int); 407/* b3 d1 d2 d3 */ int IOCS_HOME (int, int, int); 408/* b4 d1 d2 d3 d4 */ int IOCS_WINDOW (int, int, int, int); 409/* b5 */ int IOCS_WIPE (void); 410/* b6 a1 */ int IOCS_PSET (const struct iocs_psetptr *); 411/* b7 a1 */ int IOCS_POINT (const struct iocs_pointptr *); 412/* b8 a1 */ int IOCS_LINE (const struct iocs_lineptr *); 413/* b9 a1 */ int IOCS_BOX (const struct iocs_boxptr *); 414/* ba a1 */ int IOCS_FILL (const struct iocs_fillptr *); 415/* bb a1 */ int IOCS_CIRCLE (const struct iocs_circleptr *); 416/* bc a1 */ int IOCS_PAINT (struct iocs_paintptr *); 417/* bd a1 */ int IOCS_SYMBOL (const struct iocs_symbolptr *); 418/* be a1 */ int IOCS_GETGRM (struct iocs_getptr *); 419/* bf a1 */ int IOCS_PUTGRM (const struct iocs_putptr *); 420/* c0 */ int IOCS_SP_INIT (void); 421/* c1 */ int IOCS_SP_ON (void); 422/* c2 */ void IOCS_SP_OFF (void); 423/* c3 d1 */ int IOCS_SP_CGCLR (int); 424/* c4 d1 d2 a1 */ int IOCS_SP_DEFCG (int, int, const void *); 425/* c5 d1 d2 a1 */ int IOCS_SP_GTPCG (int, int, void *); 426 427/* 428 * XXX SP_REGST in XC iocslib: args: int, int, int, int, int 429 * (c6 d1 d2 d3 d4 d5) 430 * XC manual and PD libc: args: int, int, int, int, int, int 431 * (c6 d0 d1 d2 d3 d4 d5 ; sp_regst) 432 * we use the latter interface... 433 */ 434/* c6 d0 d1 d2 d3 d4 d5 ; sp_regst */ int IOCS_SP_REGST (int, int, int, int, int, int); 435/* c7 d1 od2 od3 od4 od5 ; err_d0 */ int IOCS_SP_REGGT (int, int *, int *, int *, int *); 436/* c8 d1 d2 d3 */ int IOCS_BGSCRLST (int, int, int); 437/* c9 d1 od2 od3 ; err_d0 */ int IOCS_BGSCRLGT (int, int *, int *); 438/* ca d1 d2 d3 */ int IOCS_BGCTRLST (int, int, int); 439/* cb d1 */ int IOCS_BGCTRLGT (int); 440/* cc d1 d2 */ int IOCS_BGTEXTCL (int, int); 441/* cd d1 d2 d3 d4 */ int IOCS_BGTEXTST (int, int, int, int); 442/* ce d1 d2 d3 */ int IOCS_BGTEXTGT (int, int, int); 443/* cf d1 d2 d3 */ int IOCS_SPALET (int, int, int); 444/* d3 a1 */ void IOCS_TXXLINE (const struct iocs_xlineptr *); 445/* d4 a1 */ void IOCS_TXYLINE (const struct iocs_ylineptr *); 446/* d5 a1 */ void IOCS_TXLINE (struct iocs_tlineptr); /* 1.3, IOCS.X */ 447/* d6 a1 */ void IOCS_TXBOX (const struct iocs_tboxptr *); 448/* d7 a1 */ void IOCS_TXFILL (const struct iocs_txfillptr *); 449/* d8 a1 */ void IOCS_TXREV (const struct iocs_trevptr *); 450/* df d1 d2 d3 */ void IOCS_TXRASCPY (int, int, int); 451/* fd */ void IOCS_ABORTRST (void); 452/* fe ; noret */ __dead void IOCS_IPLERR (void); 453/* ff ; noret */ __dead void IOCS_ABORTJOB (void); 454 455/* SCSI calls */ 456/* f5 d1=0 */ void IOCS_S_RESET (void); 457/* f5 d1=1 d4 */ int IOCS_S_SELECT (int); 458/* f5 d1=3 d3 a1 */ int IOCS_S_CMDOUT (int, void *); 459/* f5 d1=4 d3 a1 */ int IOCS_S_DATAIN (int, void *); 460/* f5 d1=5 d3 a1 */ int IOCS_S_DATAOUT (int, void *); 461/* f5 d1=6 a1 */ int IOCS_S_STSIN (void *); 462/* f5 d1=7 a1 */ int IOCS_S_MSGIN (void *); 463/* f5 d1=8 a1 */ int IOCS_S_MSGOUT (void *); 464/* f5 d1=9 */ int IOCS_S_PHASE (void); 465/* f5 d1=32 d3 d4 a1 */ int IOCS_S_INQUIRY (int, int, struct iocs_inquiry *); 466/* f5 d1=33 d2 d3 d4 d5 a1 */ int IOCS_S_READ (int, int, int, int, void *); 467/* f5 d1=34 d2 d3 d4 d5 a1 */ int IOCS_S_WRITE (int, int, int, int, void *); 468/* f5 d1=35 d3 d4 */ int IOCS_S_FORMAT (int, int); 469/* f5 d1=36 d4 */ int IOCS_S_TESTUNIT (int); 470/* f5 d1=37 d4 a1 */ int IOCS_S_READCAP (int, struct iocs_readcap *); 471/* f5 d1=38 d2 d3 d4 d5 a1 */ int IOCS_S_READEXT (int, int, int, int, void *); 472/* f5 d1=39 d2 d3 d4 d5 a1 */ int IOCS_S_WRITEEXT (int, int, int, int, void *); 473/* f5 d1=43 d4 */ int IOCS_S_REZEROUNIT (int); 474/* f5 d1=44 d3 d4 a1 */ int IOCS_S_REQUEST (int, int, void *); 475/* f5 d1=45 d2 d4 */ int IOCS_S_SEEK (int, int); 476/* f5 d1=47 d3 d4 */ int IOCS_S_STARTSTOP (int, int); 477/* f5 d1=49 d3 d4 a1 */ int IOCS_S_REASSIGN (int, int, void *); 478/* f5 d1=50 d3 d4 */ int IOCS_S_PAMEDIUM (int, int); 479 480#endif /* __X68K_IOCS_H__ */ 481