1 |
/* |
/* |
2 |
* Copyright (C) 2004-2005 Anders Gavare. All rights reserved. |
* Copyright (C) 2004-2006 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: dev_pmagja.c,v 1.13 2005/02/11 09:53:48 debug Exp $ |
* $Id: dev_pmagja.c,v 1.19 2006/01/01 13:17:16 debug Exp $ |
29 |
* |
* |
30 |
* TURBOchannel PMAG-JA graphics device. |
* TURBOchannel PMAG-JA graphics device. |
31 |
* |
* |
67 |
/* |
/* |
68 |
* dev_pmagja_access(): |
* dev_pmagja_access(): |
69 |
*/ |
*/ |
70 |
int dev_pmagja_access(struct cpu *cpu, struct memory *mem, |
DEVICE_ACCESS(pmagja) |
|
uint64_t relative_addr, unsigned char *data, size_t len, |
|
|
int writeflag, void *extra) |
|
71 |
{ |
{ |
72 |
uint64_t idata = 0, odata = 0; |
uint64_t idata = 0, odata = 0; |
73 |
struct pmagja_data *d = extra; |
struct pmagja_data *d = extra; |
74 |
int i, res = 1; |
size_t i, res = 1; |
75 |
|
|
76 |
relative_addr += PMAGJA_FIRSTOFFSET; |
if (writeflag == MEM_WRITE) |
77 |
|
idata = memory_readmax64(cpu, data, len); |
78 |
|
|
79 |
idata = memory_readmax64(cpu, data, len); |
relative_addr += PMAGJA_FIRSTOFFSET; |
80 |
|
|
81 |
#ifdef JA_DEBUG |
#ifdef JA_DEBUG |
82 |
{ |
{ |
83 |
int i; |
size_t i; |
84 |
for (i=0; i<len; i++) |
for (i=0; i<len; i++) |
85 |
if (data[i] != 0 && data[i] != 1 && data[i]!=0xff) |
if (data[i] != 0 && data[i] != 1 && data[i]!=0xff) |
86 |
if (writeflag) |
if (writeflag) |
215 |
|
|
216 |
d->irq_nr = irq_nr; |
d->irq_nr = irq_nr; |
217 |
|
|
218 |
d->fb_mem = memory_new(XSIZE * YSIZE * 3); |
d->fb_mem = memory_new(XSIZE * YSIZE * 3, machine->arch); |
219 |
if (d->fb_mem == NULL) { |
if (d->fb_mem == NULL) { |
220 |
fprintf(stderr, "dev_pmagja_init(): out of memory (1)\n"); |
fprintf(stderr, "dev_pmagja_init(): out of memory (1)\n"); |
221 |
exit(1); |
exit(1); |
222 |
} |
} |
223 |
d->vfb_data = dev_fb_init(machine, d->fb_mem, 0, VFB_GENERIC, |
d->vfb_data = dev_fb_init(machine, d->fb_mem, 0, VFB_GENERIC, |
224 |
XSIZE, YSIZE, XSIZE, YSIZE, 24, "PMAG-JA", 1); |
XSIZE, YSIZE, XSIZE, YSIZE, 24, "PMAG-JA"); |
225 |
if (d->vfb_data == NULL) { |
if (d->vfb_data == NULL) { |
226 |
fprintf(stderr, "dev_pmagja_init(): out of memory (2)\n"); |
fprintf(stderr, "dev_pmagja_init(): out of memory (2)\n"); |
227 |
exit(2); |
exit(2); |
234 |
|
|
235 |
memory_device_register(mem, "pmagja", baseaddr + PMAGJA_FIRSTOFFSET, |
memory_device_register(mem, "pmagja", baseaddr + PMAGJA_FIRSTOFFSET, |
236 |
DEV_PMAGJA_LENGTH - PMAGJA_FIRSTOFFSET, dev_pmagja_access, d, |
DEV_PMAGJA_LENGTH - PMAGJA_FIRSTOFFSET, dev_pmagja_access, d, |
237 |
MEM_DEFAULT, NULL); |
DM_DEFAULT, NULL); |
238 |
} |
} |
239 |
|
|