home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
manboetc
/
lr50c.c
< prev
next >
Wrap
Text File
|
1990-06-14
|
3KB
|
124 lines
#include <stdio.h>
#include <dos.h>
#define ga3_addr 0x0440
#define ga3_data 0x0442
#define ga4_addr 0x0448
#define ga4_data 0x044a
#define ga6_addr 0x0458
#define ga6_data 0x045a
#define PALETTE_ADDR 0x0fd90
#define PALETTE_B_DATA 0x0fd92
#define PALETTE_R_DATA 0x0fd94
#define PALETTE_G_DATA 0x0fd96
int ga3[]= { 0x0040,0x0320,0x0000,0x0000,0x035F,0x0000,0x0010,0x0000,
0x036F,0x009C,0x031C,0x009C,0x031C,0x0040,0x0360,0x0040,
0x0360,0x0000,0x009C,0x0000,0x0050,0x0000,0x009C,0x0000,
0x0080,0x004A,0x0001,0x0000,0x001F,0x0003,0x0000,0x0150 } ;
char ga4[]= { 0x15,0x08 } ;
unsigned char palette[16][3]= {
0, 0, 0,
176, 0, 0,
0,176, 0,
176,176, 0,
0, 0,176,
176, 0,176,
0,176,176,
176,176,176,
64, 64, 64,
255, 0, 0,
0,255, 0,
255,255, 0,
0, 0,255,
255, 0,255,
0,255,255,
255,255,255
} ;
void main()
{
extern void FM_write(int, int) ;
int i ;
long j ;
char far *addr ;
FP_SEG(addr) = 0xc000 ;
FP_OFF(addr) = 0xff81 ;
*addr = 0xf ;
outp(0xfda0,0xf) ;
FP_OFF(addr) = 0x0000 ;
*addr = 0 ;
movedata(0xc000, 0, 0xc000, 1, 0x7fff) ;
FP_OFF(addr) = 0xff82 ;
*addr = 0x27 ;
/* マスク解除 */
outp(ga6_addr,0) ;
outp(ga6_data,0xff) ;
outp(ga6_data+1,0xff) ;
outp(ga6_addr,1) ;
outp(ga6_data,0xff) ;
outp(ga6_data+1,0xff) ;
/* ga/4設定 */
outp(ga4_addr,0) ;
outp(ga4_data,ga4[0]) ;
outp(ga4_addr,1) ;
outp(ga4_data,ga4[1] | 0x20) ;
/* ga/3設定 */
outp(ga3_addr,0x1c) ;
outp(ga3_data+1,0) ;
while (inp(ga3_data+1) & 0x80) ;
for (i = 0 ; i < 32 ; i++)
{
outp(ga3_addr,i) ;
outp(ga3_data ,(ga3[i] & 0xff)) ;
outp(ga3_data+1,(ga3[i] >> 8)) ;
}
outp(ga3_addr,0x1c) ;
outp(ga3_data+1,((ga3[0x1c] >> 8) | 0x80)) ;
/* パレット設定 */
for (i =0 ; i < 16 ; i++)
{
outp(PALETTE_ADDR,i) ;
outp(PALETTE_B_DATA,palette[i][0]) ;
outp(PALETTE_R_DATA,palette[i][1]) ;
outp(PALETTE_G_DATA,palette[i][2]) ;
}
outp(ga4_addr,1) ;
outp(ga4_data,ga4[1]) ;
/* FM音源のタイマBを始動 */
FM_write(0x21, 0x00) ;
FM_write(0x2c, 0x80) ;
FM_write(0x2b, 0x00) ;
FM_write(0x27, 0x30) ;
FM_write(0x26, 0xdd) ;
FM_write(0x27, 0x2a) ;
}
void FM_write(addr, data)
int addr,data ;
{
int i ;
while (inp(0x04d8) & 0x80) ;
outp(0x04d8, addr) ;
for (i = 0 ; i < 4 ; i += 1) ;
while (inp(0x04d8) & 0x80) ;
outp(0x04da, data) ;
}