1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/* xscreensaver, Copyright (c) 1998-2004 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation. No representations are made about the suitability of this
* software for any purpose. It is provided "as is" without express or
* implied warranty.
*
* Apple ][ CRT simulator, by Trevor Blackwell <tlb@tlb.org>
* with additional work by Jamie Zawinski <jwz@jwz.org>
*/
#ifndef __XSCREENSAVER_APPLE_II__
#define __XSCREENSAVER_APPLE_II__
#include "analogtv.h"
typedef struct apple2_state {
unsigned char hireslines[192][40];
unsigned char textlines[24][40];
int gr_text;
enum {
A2_GR_FULL=1,
A2_GR_LORES=2,
A2_GR_HIRES=4
} gr_mode;
int cursx;
int cursy;
int blink;
} apple2_state_t;
typedef struct apple2_sim_s apple2_sim_t;
struct apple2_sim_s {
void *controller_data;
apple2_state_t *st;
analogtv *dec;
analogtv_input *inp;
analogtv_reception reception;
const char *typing;
char typing_buf[1024];
double typing_rate;
char *printing;
char printing_buf[1024];
char prompt;
Display *dpy;
Window window;
XWindowAttributes xgwa;
XImage *text_im;
struct timeval basetime_tv;
double curtime;
double delay;
int stepno;
double next_actiontime;
void (*controller)(apple2_sim_t *sim,
int *stepno,
double *next_actiontime);
};
enum {
A2_HCOLOR_BLACK=0,
A2_HCOLOR_GREEN=1,
A2_HCOLOR_PURPLE=2,
A2_HCOLOR_WHITE=3,
A2_HCOLOR_ALTBLACK=4,
A2_HCOLOR_RED=5,
A2_HCOLOR_BLUE=6,
A2_HCOLOR_ALTWHITE=7
};
enum {
A2CONTROLLER_DONE=-1,
A2CONTROLLER_FREE=-2
};
extern apple2_sim_t * apple2_start (Display *, Window, int delay,
void (*)(apple2_sim_t *, int *stepno,
double *next_actiontime));
extern int apple2_one_frame (apple2_sim_t *);
void a2_poke(apple2_state_t *st, int addr, int val);
void a2_goto(apple2_state_t *st, int r, int c);
void a2_cls(apple2_state_t *st);
void a2_invalidate(apple2_state_t *st);
void a2_add_disk_item(apple2_state_t *st, char *name, unsigned char *data,
int len, char type);
void a2_scroll(apple2_state_t *st);
void a2_printc(apple2_state_t *st, char c);
void a2_printc_noscroll(apple2_state_t *st, char c);
void a2_prints(apple2_state_t *st, char *s);
void a2_goto(apple2_state_t *st, int r, int c);
void a2_cls(apple2_state_t *st);
void a2_clear_hgr(apple2_state_t *st);
void a2_clear_gr(apple2_state_t *st);
void a2_invalidate(apple2_state_t *st);
void a2_poke(apple2_state_t *st, int addr, int val);
void a2_display_image_loading(apple2_state_t *st, unsigned char *image,
int lineno);
void a2_init_memory_active(apple2_sim_t *sim);
void a2_hplot(apple2_state_t *st, int hcolor, int x, int y);
void a2_hline(apple2_state_t *st, int hcolor, int x1, int y1, int x2, int y2);
void a2_plot(apple2_state_t *st, int color, int x, int y);
#endif /* __XSCREENSAVER_APPLE_II__ */
|