mirror of
https://github.com/aap/pdp6.git
synced 2026-03-28 02:43:28 +00:00
added stand alone panel for FPGA communication
This commit is contained in:
13
panel/Makefile
Normal file
13
panel/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
SRC=panel6.c
|
||||
# clang
|
||||
#CFLAGS= -Wno-shift-op-parentheses -Wno-logical-op-parentheses \
|
||||
# -Wno-bitwise-op-parentheses
|
||||
CFLAGS= -g -fno-diagnostics-show-caret \
|
||||
`sdl-config --cflags` `pkg-config SDL_image --cflags`
|
||||
|
||||
LIBS= `sdl-config --libs` `pkg-config SDL_image --libs` -lpthread
|
||||
|
||||
|
||||
panel6: $(SRC)
|
||||
$(CC) $(CFLAGS) $(SRC) $(LIBS) -o panel6
|
||||
|
||||
56
panel/coreread.c
Normal file
56
panel/coreread.c
Normal file
@@ -0,0 +1,56 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/i2c-dev.h>
|
||||
|
||||
typedef uint64_t word;
|
||||
typedef unsigned char uchar;
|
||||
|
||||
void
|
||||
err(char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
fprintf(stderr, "error: ");
|
||||
vfprintf(stderr, fmt, ap);
|
||||
fprintf(stderr, "\n");
|
||||
va_end(ap);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
uchar*
|
||||
puthalfword(uchar *p, word w)
|
||||
{
|
||||
p[2] = w & 077;
|
||||
p[1] = (w >> 6) & 077;
|
||||
p[0] = (w >> 12) & 077;
|
||||
return p+3;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
uchar msg[3+8*6], *p;
|
||||
int fd;
|
||||
if(fd = open("/dev/i2c-1", O_RDWR), fd < 0)
|
||||
err("couldn't open file");
|
||||
if(ioctl(fd, I2C_SLAVE, 0x21) < 0)
|
||||
err("couldn't select device");
|
||||
|
||||
puthalfword(msg, 0000000);
|
||||
write(fd, msg, 3);
|
||||
|
||||
read(fd, msg, 48+2);
|
||||
|
||||
for(i = 0; i < 48; i++)
|
||||
printf("%03o ", msg[i+2]);
|
||||
printf("\n");
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
76
panel/corewrite.c
Normal file
76
panel/corewrite.c
Normal file
@@ -0,0 +1,76 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/i2c-dev.h>
|
||||
|
||||
typedef uint64_t word;
|
||||
typedef unsigned char uchar;
|
||||
|
||||
void
|
||||
err(char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
fprintf(stderr, "error: ");
|
||||
vfprintf(stderr, fmt, ap);
|
||||
fprintf(stderr, "\n");
|
||||
va_end(ap);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
uchar*
|
||||
puthalfword(uchar *p, word w)
|
||||
{
|
||||
p[2] = w & 077;
|
||||
p[1] = (w >> 6) & 077;
|
||||
p[0] = (w >> 12) & 077;
|
||||
return p+3;
|
||||
}
|
||||
|
||||
uchar*
|
||||
putword(uchar *p, word w)
|
||||
{
|
||||
p[5] = w & 077;
|
||||
p[4] = (w >> 6) & 077;
|
||||
p[3] = (w >> 12) & 077;
|
||||
p[2] = (w >> 18) & 077;
|
||||
p[1] = (w >> 24) & 077;
|
||||
p[0] = (w >> 30) & 077;
|
||||
return p+6;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
uchar msg[3+8*6], *p;
|
||||
int fd;
|
||||
if(fd = open("/dev/i2c-1", O_RDWR), fd < 0)
|
||||
err("couldn't open file");
|
||||
if(ioctl(fd, I2C_SLAVE, 0x21) < 0)
|
||||
err("couldn't select device");
|
||||
|
||||
p = msg;
|
||||
p = puthalfword(p, 0000000);
|
||||
p = putword(p, 0111222333444);
|
||||
p = putword(p, 0111111111111);
|
||||
p = putword(p, 0222222222222);
|
||||
p = putword(p, 0333333333333);
|
||||
p = putword(p, 0444444444444);
|
||||
p = putword(p, 0555555555555);
|
||||
p = putword(p, 0666666666666);
|
||||
p = putword(p, 0777777777777);
|
||||
printf("%d\n", p-msg);
|
||||
write(fd, msg, p-msg);
|
||||
|
||||
for(i = 0; i < p-msg; i++)
|
||||
printf("%03o ", msg[i]);
|
||||
printf("\n");
|
||||
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
667
panel/elements.inc
Normal file
667
panel/elements.inc
Normal file
@@ -0,0 +1,667 @@
|
||||
Element keys[] = {
|
||||
/* keys */
|
||||
{ keysurf, &opgrid2, { 0, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 2.75, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 5.5, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 8.25, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 11, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 13.75, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 16.5, 2 }, 0, 0 },
|
||||
{ keysurf, &opgrid2, { 19.25, 2 }, 0, 0 },
|
||||
};
|
||||
|
||||
Element switches[] = {
|
||||
/* data switches */
|
||||
{ switchsurf, &opgrid1, { 5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 6, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 7, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 8, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 9, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 10, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 11, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 12, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 13, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 14, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 15, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 16, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 17, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 18, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 19, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 20, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 21, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 22, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 23, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 24, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 25, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 26, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 27, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 28, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 29, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 30, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 31, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 32, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 33, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 34, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 35, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 36, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 37, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 38, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 39, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 40, 5 }, 0, 0 },
|
||||
|
||||
/* address switches */
|
||||
{ switchsurf, &opgrid1, { 44.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 45.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 46.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 47.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 48.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 49.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 50.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 51.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 52.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 53.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 54.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 55.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 56.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 57.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 58.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 59.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 60.5, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 61.5, 5 }, 0, 0 },
|
||||
|
||||
/* repeat, addr stop, power, disable mem */
|
||||
{ switchsurf, &opgrid1, { 78, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 78, 7 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 83, 5 }, 0, 0 },
|
||||
{ switchsurf, &opgrid1, { 83, 7 }, 0, 0 },
|
||||
|
||||
/* maint. switches */
|
||||
{ switchsurf, &extragrid, { 2, 10 }, 0, 0 },
|
||||
{ switchsurf, &extragrid, { 2, 9 }, 0, 0 },
|
||||
{ switchsurf, &extragrid, { 2, 8 }, 0, 0 },
|
||||
{ switchsurf, &extragrid, { 2, 7 }, 0, 0 },
|
||||
{ switchsurf, &extragrid, { 2, 6 }, 0, 0 },
|
||||
};
|
||||
|
||||
Element lamps[] = {
|
||||
/* memory indicator */
|
||||
{ lampsurf, &opgrid1, { 5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 6, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 7, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 8, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 9, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 10, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 11, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 12, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 13, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 14, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 15, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 16, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 17, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 18, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 19, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 20, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 21, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 22, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 23, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 24, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 25, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 26, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 27, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 28, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 29, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 30, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 31, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 32, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 33, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 34, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 35, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 36, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 37, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 38, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 39, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 40, 7 }, 0, 0 },
|
||||
|
||||
/* IR */
|
||||
{ lampsurf, &opgrid1, { 5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 6, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 7, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 8, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 9, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 10, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 11, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 12, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 13, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 14, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 15, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 16, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 17, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 18, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 19, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 20, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 21, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 22, 9 }, 0, 0 },
|
||||
|
||||
/* address indicator */
|
||||
{ lampsurf, &opgrid1, { 44.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 45.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 46.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 47.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 48.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 49.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 50.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 51.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 52.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 53.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 54.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 55.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 56.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 57.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 58.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 59.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 60.5, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 61.5, 7 }, 0, 0 },
|
||||
|
||||
/* PC */
|
||||
{ lampsurf, &opgrid1, { 44.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 45.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 46.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 47.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 48.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 49.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 50.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 51.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 52.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 53.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 54.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 55.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 56.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 57.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 58.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 59.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 60.5, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 61.5, 9 }, 0, 0 },
|
||||
|
||||
/* pi active */
|
||||
{ lampsurf, &opgrid1, { 68, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 69, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 70, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 71, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 72, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 73, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 74, 5 }, 0, 0 },
|
||||
|
||||
/* pi request */
|
||||
{ lampsurf, &opgrid1, { 68, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 69, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 70, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 71, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 72, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 73, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 74, 7 }, 0, 0 },
|
||||
|
||||
/* pi in progress */
|
||||
{ lampsurf, &opgrid1, { 68, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 69, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 70, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 71, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 72, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 73, 9 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 74, 9 }, 0, 0 },
|
||||
|
||||
/* run, mem stop, pi on */
|
||||
{ lampsurf, &opgrid1, { 66, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 66, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 66, 9 }, 0, 0 },
|
||||
|
||||
/* repeat, addr stop, power, disable mem */
|
||||
{ lampsurf, &opgrid1, { 79, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 79, 7 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 84, 5 }, 0, 0 },
|
||||
{ lampsurf, &opgrid1, { 84, 7 }, 0, 0 },
|
||||
|
||||
/* Flip flops */
|
||||
|
||||
/* MB */
|
||||
{ lampsurf, &indgrid2, { 4, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 5, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 6, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 7, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 8, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 9, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 10, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 11, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 12, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 13, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 14, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 15, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 16, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 17, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 18, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 19, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 20, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 21, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 22, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 23, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 24, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 25, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 26, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 27, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 28, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 29, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 30, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 31, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 32, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 33, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 34, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 35, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 36, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 37, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 38, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 39, 8 }, 0, 0 },
|
||||
|
||||
/* AR */
|
||||
{ lampsurf, &indgrid2, { 4, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 5, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 6, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 7, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 8, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 9, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 10, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 11, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 12, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 13, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 14, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 15, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 16, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 17, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 18, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 19, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 20, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 21, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 22, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 23, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 24, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 25, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 26, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 27, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 28, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 29, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 30, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 31, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 32, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 33, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 34, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 35, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 36, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 37, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 38, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 39, 6 }, 0, 0 },
|
||||
|
||||
/* MQ */
|
||||
{ lampsurf, &indgrid2, { 4, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 5, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 6, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 7, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 8, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 9, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 10, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 11, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 12, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 13, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 14, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 15, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 16, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 17, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 18, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 19, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 20, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 21, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 22, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 23, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 24, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 25, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 26, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 27, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 28, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 29, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 30, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 31, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 32, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 33, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 34, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 35, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 36, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 37, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 38, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid2, { 39, 4 }, 0, 0 },
|
||||
|
||||
/* Flip flops */
|
||||
/* column 1 */
|
||||
{ lampsurf, &indgrid1, { 1, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 1, 3 }, 0, 0 },
|
||||
/* column 2 */
|
||||
{ lampsurf, &indgrid1, { 2, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 2, 3 }, 0, 0 },
|
||||
/* column 3 */
|
||||
{ lampsurf, &indgrid1, { 3, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 3, 3 }, 0, 0 },
|
||||
/* column 4 */
|
||||
{ lampsurf, &indgrid1, { 4, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 4, 3 }, 0, 0 },
|
||||
/* column 5 */
|
||||
{ lampsurf, &indgrid1, { 5, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 5, 3 }, 0, 0 },
|
||||
/* column 6 */
|
||||
{ lampsurf, &indgrid1, { 6, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 6, 3 }, 0, 0 },
|
||||
/* column 7 */
|
||||
{ lampsurf, &indgrid1, { 7, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 7, 3 }, 0, 0 },
|
||||
/* column 8 */
|
||||
{ lampsurf, &indgrid1, { 8, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 8, 3 }, 0, 0 },
|
||||
/* column 9 */
|
||||
{ lampsurf, &indgrid1, { 9, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 9, 3 }, 0, 0 },
|
||||
/* column 10 */
|
||||
{ lampsurf, &indgrid1, { 10, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 10, 3 }, 0, 0 },
|
||||
/* column 11 */
|
||||
{ lampsurf, &indgrid1, { 11, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 11, 3 }, 0, 0 },
|
||||
/* column 12 */
|
||||
{ lampsurf, &indgrid1, { 12, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 12, 3 }, 0, 0 },
|
||||
/* column 13 */
|
||||
{ lampsurf, &indgrid1, { 13, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 13, 3 }, 0, 0 },
|
||||
/* column 14 */
|
||||
{ lampsurf, &indgrid1, { 14, 10 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 9 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 8 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 7 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 6 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 5 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 4 }, 0, 0 },
|
||||
{ lampsurf, &indgrid1, { 14, 3 }, 0, 0 },
|
||||
|
||||
/* IO bus */
|
||||
{ lampsurf, &iogrid, { 4, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 10, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 11, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 12, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 13, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 14, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 15, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 16, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 17, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 18, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 19, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 20, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 21, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 22, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 23, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 24, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 25, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 26, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 27, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 28, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 29, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 30, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 31, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 32, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 33, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 34, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 35, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 36, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 37, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 38, 13 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 39, 13 }, 0, 0 },
|
||||
|
||||
/* card reader */
|
||||
{ lampsurf, &iogrid, { 4, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 10, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 11, 15 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 12, 15 }, 0, 0 },
|
||||
|
||||
/* card reader buffer */
|
||||
{ lampsurf, &iogrid, { 4, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 10, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 11, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 12, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 13, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 14, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 15, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 16, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 17, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 18, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 19, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 20, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 21, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 22, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 23, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 24, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 25, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 26, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 27, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 28, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 29, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 30, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 31, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 32, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 33, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 34, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 35, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 36, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 37, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 38, 17 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 39, 17 }, 0, 0 },
|
||||
|
||||
/* paper tape reader */
|
||||
{ lampsurf, &iogrid, { 4, 19 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 19 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 19 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 19 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 19 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 19 }, 0, 0 },
|
||||
|
||||
/* paper tape reader buffer */
|
||||
{ lampsurf, &iogrid, { 4, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 10, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 11, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 12, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 13, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 14, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 15, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 16, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 17, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 18, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 19, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 20, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 21, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 22, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 23, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 24, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 25, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 26, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 27, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 28, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 29, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 30, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 31, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 32, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 33, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 34, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 35, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 36, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 37, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 38, 21 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 39, 21 }, 0, 0 },
|
||||
|
||||
/* paper tape punch */
|
||||
{ lampsurf, &iogrid, { 4, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 23 }, 0, 0 },
|
||||
/* data */
|
||||
{ lampsurf, &iogrid, { 12, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 13, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 14, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 15, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 16, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 17, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 18, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 19, 23 }, 0, 0 },
|
||||
|
||||
/* teleprinter */
|
||||
{ lampsurf, &iogrid, { 24, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 25, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 26, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 27, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 28, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 29, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 30, 23 }, 0, 0 },
|
||||
/* tti data */
|
||||
{ lampsurf, &iogrid, { 32, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 33, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 34, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 35, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 36, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 37, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 38, 23 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 39, 23 }, 0, 0 },
|
||||
|
||||
/* memory protection */
|
||||
{ lampsurf, &iogrid, { 4, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 5, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 6, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 7, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 8, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 9, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 10, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 11, 25 }, 0, 0 },
|
||||
|
||||
/* memory relocation */
|
||||
{ lampsurf, &iogrid, { 18, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 19, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 20, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 21, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 22, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 23, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 24, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 25, 25 }, 0, 0 },
|
||||
|
||||
/* relocated address */
|
||||
{ lampsurf, &iogrid, { 32, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 33, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 34, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 35, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 36, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 37, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 38, 25 }, 0, 0 },
|
||||
{ lampsurf, &iogrid, { 39, 25 }, 0, 0 },
|
||||
|
||||
/* extra lights */
|
||||
{ lampsurf, &extragrid, { 4, 10 }, 0, 0 },
|
||||
};
|
||||
545
panel/panel6.c
Normal file
545
panel/panel6.c
Normal file
@@ -0,0 +1,545 @@
|
||||
#include <stdarg.h>
|
||||
#include <fcntl.h>
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include <pthread.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c-dev.h>
|
||||
|
||||
#define nelem(a) (sizeof(a)/sizeof(a[0]))
|
||||
#define nil NULL
|
||||
|
||||
typedef uint64_t word;
|
||||
typedef uint32_t hword;
|
||||
typedef uint32_t u32;
|
||||
typedef uint16_t u16;
|
||||
typedef int8_t i8;
|
||||
typedef uint8_t u8;
|
||||
typedef unsigned char uchar;
|
||||
typedef uchar bool;
|
||||
|
||||
typedef struct Point Point;
|
||||
struct Point
|
||||
{
|
||||
float x, y;
|
||||
};
|
||||
|
||||
typedef struct Panel Panel;
|
||||
struct Panel
|
||||
{
|
||||
SDL_Surface *surf;
|
||||
SDL_Rect pos;
|
||||
};
|
||||
|
||||
typedef struct Grid Grid;
|
||||
struct Grid
|
||||
{
|
||||
float xoff, yoff;
|
||||
float xscl, yscl;
|
||||
Panel *panel;
|
||||
};
|
||||
|
||||
typedef struct Element Element;
|
||||
struct Element
|
||||
{
|
||||
SDL_Surface **surf;
|
||||
Grid *grid;
|
||||
Point pos;
|
||||
int state;
|
||||
int active;
|
||||
};
|
||||
|
||||
void
|
||||
err(char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
fprintf(stderr, "error: ");
|
||||
vfprintf(stderr, fmt, ap);
|
||||
fprintf(stderr, "\n");
|
||||
va_end(ap);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
SDL_Surface*
|
||||
mustloadimg(const char *path)
|
||||
{
|
||||
SDL_Surface *s;
|
||||
s = IMG_Load(path);
|
||||
if(s == nil)
|
||||
err("Couldn't load %s", path);
|
||||
return s;
|
||||
}
|
||||
|
||||
SDL_Surface *lampsurf[2];
|
||||
SDL_Surface *switchsurf[2];
|
||||
SDL_Surface *keysurf[3];
|
||||
|
||||
Panel oppanel;
|
||||
Grid opgrid1; /* the smaller base grid */
|
||||
Grid opgrid2; /* the key grid */
|
||||
|
||||
Panel iopanel;
|
||||
Grid iogrid;
|
||||
|
||||
Panel indpanel1, indpanel2;
|
||||
Grid indgrid1;
|
||||
Grid indgrid2;
|
||||
|
||||
Panel extrapanel;
|
||||
Grid extragrid;
|
||||
|
||||
/* operator panel */
|
||||
Element *data_sw, *ma_sw, *misc_sw;
|
||||
Element *ir_l, *mi_l, *pc_l, *ma_l,
|
||||
*pih_l, *pir_l, *pio_l, *misc_l;
|
||||
|
||||
/* bay indicator panel */
|
||||
Element *mb_l, *ar_l, *mq_l;
|
||||
Element *ff_l; /* flip flops */
|
||||
|
||||
/* io panel */
|
||||
Element *iobus_l, *cr_l, *crbuf_l, *ptr_l, *ptrbuf_l,
|
||||
*ptp_l, *ptpbuf_l, *tty_l, *ttibuf_l,
|
||||
*pr_l, *rlr_l, *rla_l;
|
||||
|
||||
/* extra panel */
|
||||
Element *extra_sw;
|
||||
Element *extra_l;
|
||||
|
||||
#include "elements.inc"
|
||||
|
||||
void
|
||||
setlights(uchar b, Element *l, int n)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < n; i++)
|
||||
l[i].state = !!(b & 1 << 7-i);
|
||||
}
|
||||
|
||||
void
|
||||
set18lights(uchar *b, Element *l)
|
||||
{
|
||||
setlights(b[0], l, 8);
|
||||
setlights(b[1], l+8, 8);
|
||||
setlights(b[2], l+16, 2);
|
||||
}
|
||||
|
||||
void
|
||||
set36lights(uchar *b, Element *l)
|
||||
{
|
||||
setlights(b[0], l, 8);
|
||||
setlights(b[1], l+8, 8);
|
||||
setlights(b[2], l+16, 8);
|
||||
setlights(b[3], l+24, 8);
|
||||
setlights(b[4], l+32, 4);
|
||||
}
|
||||
|
||||
uchar
|
||||
getswitches(Element *sw, int n, int state)
|
||||
{
|
||||
uchar b;
|
||||
int i;
|
||||
b = 0;
|
||||
for(i = 0; i < n; i++)
|
||||
b |= (uchar)(sw[i].state == state) << 7-i;
|
||||
return b;
|
||||
}
|
||||
|
||||
uchar
|
||||
get18switches(uchar *b, Element *sw)
|
||||
{
|
||||
b[0] = getswitches(sw, 8, 1);
|
||||
b[1] = getswitches(sw+8, 8, 1);
|
||||
b[2] = getswitches(sw+16, 2, 1);
|
||||
}
|
||||
|
||||
uchar
|
||||
get36switches(uchar *b, Element *sw)
|
||||
{
|
||||
b[0] = getswitches(sw, 8, 1);
|
||||
b[1] = getswitches(sw+8, 8, 1);
|
||||
b[2] = getswitches(sw+16, 8, 1);
|
||||
b[3] = getswitches(sw+24, 8, 1);
|
||||
b[4] = getswitches(sw+32, 4, 1);
|
||||
}
|
||||
|
||||
void
|
||||
putpixel(SDL_Surface *screen, int x, int y, Uint32 col)
|
||||
{
|
||||
Uint32 *p = (Uint32*)screen->pixels;
|
||||
if(x < 0 || x >= screen->w ||
|
||||
y < 0 || y >= screen->h)
|
||||
return;
|
||||
p += y*screen->w+x;
|
||||
*p = SDL_MapRGBA(screen->format,
|
||||
col&0xFF, (col>>8)&0xFF, (col>>16)&0xFF, (col>>24)&0xFF);
|
||||
}
|
||||
|
||||
void
|
||||
drawhline(SDL_Surface *screen, int y, int x1, int x2, Uint32 col)
|
||||
{
|
||||
for(; x1 < x2; x1++)
|
||||
putpixel(screen, x1, y, col);
|
||||
}
|
||||
|
||||
void
|
||||
drawvline(SDL_Surface *screen, int x, int y1, int y2, Uint32 col)
|
||||
{
|
||||
for(; y1 < y2; y1++)
|
||||
putpixel(screen, x, y1, col);
|
||||
}
|
||||
|
||||
Point
|
||||
xform(Grid *g, Point p)
|
||||
{
|
||||
p.x = g->panel->pos.x + g->xoff + p.x*g->xscl;
|
||||
p.y = g->panel->pos.y + (g->panel->surf->h - (g->yoff + p.y*g->yscl));
|
||||
return p;
|
||||
}
|
||||
|
||||
int
|
||||
ismouseover(Element *e, int x, int y)
|
||||
{
|
||||
Point p;
|
||||
|
||||
p = xform(e->grid, e->pos);
|
||||
return x >= p.x && x <= p.x + e->surf[e->state]->w &&
|
||||
y >= p.y && y <= p.y + e->surf[e->state]->h;
|
||||
}
|
||||
|
||||
void
|
||||
drawgrid(Grid *g, SDL_Surface *s, Uint32 col)
|
||||
{
|
||||
SDL_Surface *ps;
|
||||
int x, y;
|
||||
int xmax, ymax;
|
||||
Point p;
|
||||
|
||||
ps = g->panel->surf;
|
||||
xmax = ps->w/g->xscl;
|
||||
ymax = ps->h/g->yscl;
|
||||
for(x = 0; x < xmax; x++){
|
||||
p = xform(g, (Point){ x, 0 });
|
||||
drawvline(s, p.x,
|
||||
p.y - ps->h, p.y, col);
|
||||
}
|
||||
for(y = 0; y < ymax; y++){
|
||||
p = xform(g, (Point){ 0, y });
|
||||
drawhline(s, p.y,
|
||||
p.x, p.x + ps->w, col);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
drawelement(SDL_Surface *screen, Element *elt, int power)
|
||||
{
|
||||
SDL_Rect r;
|
||||
Point p;
|
||||
int s;
|
||||
|
||||
p = xform(elt->grid, elt->pos);
|
||||
r.x = p.x+0.5;
|
||||
r.y = p.y+0.5;
|
||||
if(elt->surf == lampsurf)
|
||||
s = elt->state && power;
|
||||
else
|
||||
s = elt->state;
|
||||
SDL_BlitSurface(elt->surf[s], nil, screen, &r);
|
||||
}
|
||||
|
||||
void
|
||||
mouse(int button, int state, int x, int y)
|
||||
{
|
||||
static int buttonstate;
|
||||
Element *e;
|
||||
int i;
|
||||
|
||||
if(button){
|
||||
if(state == 1)
|
||||
buttonstate |= 1 << button-1;
|
||||
else
|
||||
buttonstate &= ~(1 << button-1);
|
||||
}
|
||||
|
||||
/* keys */
|
||||
for(i = 0; i < nelem(keys); i++){
|
||||
e = &keys[i];
|
||||
/* e->active means latched on/off for keys */
|
||||
if(buttonstate == 0 || !ismouseover(e, x, y)){
|
||||
if(!e->active)
|
||||
e->state = 0;
|
||||
continue;
|
||||
}
|
||||
if((buttonstate & 5) == 5) /* left and right -> latched on/off */
|
||||
e->active = !e->active;
|
||||
else if(buttonstate & 1) /* left button -> down */
|
||||
e->state = 1;
|
||||
else if(buttonstate & 4) /* right button -> up */
|
||||
e->state = 2;
|
||||
}
|
||||
|
||||
/* switches */
|
||||
for(i = 0; i < nelem(switches); i++){
|
||||
e = &switches[i];
|
||||
if(buttonstate == 0 || !ismouseover(e, x, y)){
|
||||
e->active = 0;
|
||||
continue;
|
||||
}
|
||||
if(!e->active){
|
||||
e->active = 1;
|
||||
if(buttonstate & 1) /* left button, toggle */
|
||||
e->state = !e->state;
|
||||
else if(buttonstate & 2) /* middle button, on */
|
||||
e->state = 1;
|
||||
else if(buttonstate & 4) /* right button, off */
|
||||
e->state = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
findlayout(int *w, int *h)
|
||||
{
|
||||
float gap;
|
||||
|
||||
gap = (oppanel.surf->w - indpanel1.surf->w - indpanel2.surf->w)/4.0f;
|
||||
|
||||
indpanel1.pos = (SDL_Rect){ 0, 0, 0, 0 };
|
||||
indpanel1.pos.x += gap;
|
||||
|
||||
indpanel2.pos = indpanel1.pos;
|
||||
indpanel2.pos.x += indpanel1.surf->w + 2*gap;
|
||||
|
||||
iopanel.pos = indpanel2.pos;
|
||||
iopanel.pos.y += indpanel2.surf->h;
|
||||
|
||||
oppanel.pos = (SDL_Rect){ 0, 0, 0, 0 };
|
||||
oppanel.pos.y += indpanel1.surf->h*2.7;
|
||||
|
||||
extrapanel.pos = indpanel1.pos;
|
||||
extrapanel.pos.y = oppanel.pos.y - extrapanel.surf->h;
|
||||
|
||||
*w = oppanel.surf->w;
|
||||
*h = oppanel.pos.y + oppanel.surf->h;
|
||||
}
|
||||
|
||||
void*
|
||||
talki2c(void *x)
|
||||
{
|
||||
int fd;
|
||||
int i;
|
||||
int n;
|
||||
uchar msg[128], *p;
|
||||
|
||||
fd = open("/dev/i2c-1", O_RDWR);
|
||||
if(fd < 0)
|
||||
err("Couldn't open I2C connection");
|
||||
if(ioctl(fd, I2C_SLAVE, 0x26) < 0)
|
||||
err("Couldn't select device");
|
||||
|
||||
while(1){
|
||||
n = 0;
|
||||
msg[n++] = 0; // address
|
||||
get18switches(&msg[n], ma_sw); n += 3;
|
||||
get36switches(&msg[n], data_sw); n += 5;
|
||||
msg[n++] = getswitches(misc_sw, 4, 1);
|
||||
msg[n++] = getswitches(extra_sw, 6, 1);
|
||||
msg[n++] = getswitches(keys, 8, 1);
|
||||
msg[n++] = getswitches(keys, 8, 2);
|
||||
write(fd, msg, n);
|
||||
|
||||
p = msg;
|
||||
*p++ = 0;
|
||||
write(fd, msg, 1);
|
||||
p = msg;
|
||||
read(fd, p, 0x12);
|
||||
p += 0x12;
|
||||
|
||||
read(fd, p, 0xF);
|
||||
p += 0xF;
|
||||
|
||||
read(fd, p, 0xE);
|
||||
p += 0xE;
|
||||
|
||||
n = 0;
|
||||
set18lights(&msg[n], ir_l); n += 3;
|
||||
set18lights(&msg[n], pc_l); n += 3;
|
||||
set36lights(&msg[n], mi_l); n += 5;
|
||||
set18lights(&msg[n], ma_l); n += 3;
|
||||
setlights(msg[n+0]<<1, pih_l, 7);
|
||||
setlights(msg[n+1]<<1, pir_l, 7);
|
||||
setlights(msg[n+2]<<1, pio_l, 7);
|
||||
misc_l[0].state = !!(msg[n+2] & 0x80);
|
||||
misc_l[1].state = !!(msg[n+1] & 0x80);
|
||||
misc_l[2].state = !!(msg[n+0] & 0x80);
|
||||
misc_l[3].state = !!(msg[n+3] & 0x80);
|
||||
misc_l[4].state = !!(msg[n+3] & 0x40);
|
||||
misc_l[5].state = !!(msg[n+3] & 0x20);
|
||||
misc_l[6].state = !!(msg[n+3] & 0x10);
|
||||
n += 4;
|
||||
set36lights(&msg[n], mb_l); n += 5;
|
||||
set36lights(&msg[n], ar_l); n += 5;
|
||||
set36lights(&msg[n], mq_l); n += 5;
|
||||
|
||||
setlights(msg[n++], &ff_l[0], 8);
|
||||
setlights(msg[n++], &ff_l[8], 8);
|
||||
setlights(msg[n++], &ff_l[16], 8);
|
||||
setlights(msg[n++], &ff_l[24], 8);
|
||||
setlights(msg[n++], &ff_l[32], 8);
|
||||
setlights(msg[n++], &ff_l[40], 8);
|
||||
setlights(msg[n++], &ff_l[48], 8);
|
||||
setlights(msg[n++], &ff_l[56], 8);
|
||||
setlights(msg[n++], &ff_l[64], 8);
|
||||
setlights(msg[n++], &ff_l[72], 8);
|
||||
setlights(msg[n++], &ff_l[80], 8);
|
||||
setlights(msg[n++], &ff_l[88], 8);
|
||||
setlights(msg[n++], &ff_l[96], 8);
|
||||
setlights(msg[n++], &ff_l[104], 8);
|
||||
|
||||
for(i = 0; i < n; i++)
|
||||
printf("%02X ", msg[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
SDL_Surface *screen;
|
||||
SDL_Event ev;
|
||||
SDL_MouseButtonEvent *mbev;
|
||||
SDL_MouseMotionEvent *mmev;
|
||||
Element *e;
|
||||
int i;
|
||||
int w, h;
|
||||
pthread_t comthread;
|
||||
|
||||
if(SDL_Init(SDL_INIT_VIDEO) < 0)
|
||||
err("%s", SDL_GetError());
|
||||
|
||||
lampsurf[0] = mustloadimg("../art/lamp_off.png");
|
||||
lampsurf[1] = mustloadimg("../art/lamp_on.png");
|
||||
|
||||
switchsurf[0] = mustloadimg("../art/switch_d.png");
|
||||
switchsurf[1] = mustloadimg("../art/switch_u.png");
|
||||
|
||||
keysurf[0] = mustloadimg("../art/key_n.png");
|
||||
keysurf[1] = mustloadimg("../art/key_d.png");
|
||||
keysurf[2] = mustloadimg("../art/key_u.png");
|
||||
|
||||
oppanel.surf = mustloadimg("../art/op_panel.png");
|
||||
|
||||
opgrid1.panel = &oppanel;
|
||||
opgrid1.xscl = opgrid1.panel->surf->w/90.0f;
|
||||
opgrid1.yscl = opgrid1.panel->surf->h/11.0f;
|
||||
opgrid1.yoff = opgrid1.yscl/2.0f;
|
||||
|
||||
opgrid2.panel = &oppanel;
|
||||
opgrid2.xscl = opgrid1.xscl*1.76f;
|
||||
opgrid2.yscl = opgrid2.xscl;
|
||||
opgrid2.xoff = opgrid1.xscl*44.5f;
|
||||
opgrid2.yoff = opgrid1.panel->surf->h*2.4f/143.0f;
|
||||
|
||||
iopanel.surf = mustloadimg("../art/io_panel.png");
|
||||
iogrid.panel = &iopanel;
|
||||
iogrid.xscl = iogrid.panel->surf->w/44.0f;
|
||||
iogrid.yscl = iogrid.panel->surf->h/28.0f;
|
||||
|
||||
indpanel1.surf = mustloadimg("../art/ind_panel1.png");
|
||||
indgrid1.panel = &indpanel1;
|
||||
indgrid1.xscl = indgrid1.panel->surf->w*5.0f/77.0f;
|
||||
indgrid1.yscl = indgrid1.panel->surf->h/12.0f;
|
||||
|
||||
indpanel2.surf = mustloadimg("../art/ind_panel2.png");
|
||||
indgrid2.panel = &indpanel2;
|
||||
indgrid2.xscl = indgrid2.panel->surf->w/44.0f;
|
||||
indgrid2.yscl = indgrid2.panel->surf->h/11.0f;
|
||||
|
||||
extrapanel.surf = mustloadimg("../art/extra_panel.png");
|
||||
extragrid = indgrid1;
|
||||
extragrid.panel = &extrapanel;
|
||||
|
||||
findlayout(&w, &h);
|
||||
|
||||
screen = SDL_SetVideoMode(w, h, 32, SDL_DOUBLEBUF);
|
||||
if(screen == nil)
|
||||
err("%s", SDL_GetError());
|
||||
|
||||
e = switches;
|
||||
data_sw = e; e += 36;
|
||||
ma_sw = e; e += 18;
|
||||
misc_sw = e; e += 4;
|
||||
|
||||
extra_sw = e; e += 5;
|
||||
|
||||
e = lamps;
|
||||
mi_l = e; e += 36;
|
||||
ir_l = e; e += 18;
|
||||
ma_l = e; e += 18;
|
||||
pc_l = e; e += 18;
|
||||
pio_l = e; e += 7;
|
||||
pir_l = e; e += 7;
|
||||
pih_l = e; e += 7;
|
||||
misc_l = e; e += 7;
|
||||
|
||||
mb_l = e; e += 36;
|
||||
ar_l = e; e += 36;
|
||||
mq_l = e; e += 36;
|
||||
ff_l = e; e += 14*8;
|
||||
|
||||
iobus_l = e; e += 36;
|
||||
cr_l = e; e += 9;
|
||||
crbuf_l = e; e += 36;
|
||||
ptr_l = e; e += 6;
|
||||
ptrbuf_l = e; e += 36;
|
||||
ptp_l = e; e += 6;
|
||||
ptpbuf_l = e; e += 8;
|
||||
tty_l = e; e += 7;
|
||||
ttibuf_l = e; e += 8;
|
||||
pr_l = e; e += 8;
|
||||
rlr_l = e; e += 8;
|
||||
rla_l = e; e += 8;
|
||||
|
||||
extra_l = e; e += 1;
|
||||
|
||||
pthread_create(&comthread, nil, talki2c, nil);
|
||||
|
||||
for(;;){
|
||||
while(SDL_PollEvent(&ev))
|
||||
switch(ev.type){
|
||||
case SDL_MOUSEMOTION:
|
||||
mmev = (SDL_MouseMotionEvent*)&ev;
|
||||
mouse(0, mmev->state, mmev->x, mmev->y);
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
mbev = (SDL_MouseButtonEvent*)&ev;
|
||||
mouse(mbev->button, mbev->state, mbev->x, mbev->y);
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
SDL_FillRect(screen, nil, SDL_MapRGBA(screen->format, 0xe6, 0xe6, 0xe6, 0xff));
|
||||
SDL_BlitSurface(indpanel1.surf, nil, screen, &indpanel1.pos);
|
||||
SDL_BlitSurface(indpanel2.surf, nil, screen, &indpanel2.pos);
|
||||
SDL_BlitSurface(extrapanel.surf, nil, screen, &extrapanel.pos);
|
||||
SDL_BlitSurface(iopanel.surf, nil, screen, &iopanel.pos);
|
||||
SDL_BlitSurface(oppanel.surf, nil, screen, &oppanel.pos);
|
||||
|
||||
for(i = 0, e = lamps; i < nelem(lamps); i++, e++)
|
||||
drawelement(screen, e, 1);
|
||||
for(i = 0, e = keys; i < nelem(keys); i++, e++)
|
||||
drawelement(screen, e, 1);
|
||||
for(i = 0, e = switches; i < nelem(switches); i++, e++)
|
||||
drawelement(screen, e, 1);
|
||||
|
||||
|
||||
SDL_Flip(screen);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user