1 --- display.c.orig Tue Jan 28 08:43:52 2003
2 +++ display.c Tue Jan 28 14:52:42 2003
5 static WORD display_get_addr(int x, int y)
7 - switch( scld_screenmode )
10 - return display_line_start[y]+x;
12 - case ALTDFILE: /* Same as standard, but base at 0x6000 */
13 - return display_line_start[y]+x+ALTDFILE_OFFSET;
16 - default: /* Standard Speccy screen */
17 - return display_line_start[y]+x;
21 + if (scld_altdfile) {
22 + return display_line_start[y]+x+ALTDFILE_OFFSET;
23 + } else return display_line_start[y]+x;
24 ui_error( UI_ERROR_ERROR, "Impossible screenmode `%d'", scld_screenmode );
30 int x, screen_y, redraw, colour;
31 - BYTE data, ink, paper;
32 + BYTE data, data2, ink, paper;
37 display_is_dirty[screen_y] >>= 1, x++ ) {
39 /* Skip to next 8 pixel chunk if this chunk is clean */
40 - if( ! ( display_is_dirty[screen_y] & 0x01 ) ) continue;
42 - data = read_screen_memory( display_get_addr( x, screen_y ) );
43 - display_get_attr( x, screen_y, &ink, &paper );
44 + if( ! ( display_is_dirty[screen_y] & 0x01 ) ) continue;
47 - hires_data = (data<<8) +
48 - read_screen_memory( display_get_addr( x, screen_y ) +
52 - display_plot16( x<<1, screen_y, hires_data, ink, paper );
54 - display_plot8( x<<1, screen_y, data, ink, paper );
55 + display_get_attr( x, screen_y, &ink, &paper );
56 + data = read_screen_memory( display_get_addr( x, screen_y ) );
58 + switch (scld_screenmode) {
60 + data2 = read_screen_memory( display_attr_start[screen_y] + x);
63 + data2 = read_screen_memory( display_attr_start[screen_y] + x + ALTDFILE_OFFSET);
66 + data2 = read_screen_memory( display_get_addr( x, screen_y ) + ALTDFILE_OFFSET);
74 + hires_data = (data << 8) + data2;
75 + display_plot16( x<<1, screen_y, hires_data, ink, paper );
77 + display_plot8( x<<1, screen_y, data, ink, paper );
81 /* Need to redraw this line */
83 `address'; 0x4000 <= address < 0x5b00 */
84 void display_dirty( WORD address )
86 - switch( scld_screenmode )
88 - case ALTDFILE: /* Same as standard, but base at 0x6000 */
89 + switch (scld_screenmode) {
90 + case 0: /* standard Speccy screen */
91 + case 4: /* strange mode */
94 + if(address<0x5800) { /* 0x5800 = first attributes byte */
95 + display_dirty8(address);
97 + display_dirty64(address);
100 + case 1: /* second screen */
101 + case 5: /* strange mode using second screen */
102 if( address >= 0x7b00 )
104 - if( address < 0x7800 ) { /* 0x7800 = first attributes byte */
105 + if( address >= 0x6000 && address < 0x7800 ) { /* 0x7800 = first attributes byte */
106 display_dirty8(address-ALTDFILE_OFFSET);
108 display_dirty64(address-ALTDFILE_OFFSET);
114 + case 2: /* extended colours */
115 + case 6: /* hires mode */
116 if((address>=0x7800) || ((address>=0x5800) && (address<0x6000)))
118 if(address>=0x6000) address-=ALTDFILE_OFFSET;
119 display_dirty8(address);
122 - default: /* Standard Speccy screen */
123 - if(address>=0x5b00)
125 - if(address<0x5800) { /* 0x5800 = first attributes byte */
126 - display_dirty8(address);
128 - display_dirty64(address);
129 + case 3: /* extended colours, but attributes and data taken from second screen */
130 + case 7: /* hires mode, but data taken only from second screen */
131 + if( address >= 0x6000 && address < 0x7800 ) { /* 0x7800 = first attributes byte */
132 + display_dirty8(address-ALTDFILE_OFFSET);
140 @@ -408,23 +417,16 @@
144 - switch( scld_screenmode )
146 - case ALTDFILE: /* Same as standard, but base at 0x6000 */
147 - attr=read_screen_memory(display_attr_start[y]+x+ALTDFILE_OFFSET);
150 - attr=read_screen_memory(display_line_start[y]+x+ALTDFILE_OFFSET);
153 - case (HIRES|EXTCOLOUR):
154 - attr=hires_get_attr();
156 - default: /* Standard Speccy screen */
157 - attr=read_screen_memory(display_attr_start[y]+x);
161 + attr = hires_get_attr();
163 + if (scld_extcolour) {
164 + attr = read_screen_memory(display_line_start[y]+x+ALTDFILE_OFFSET);
165 + } else if (scld_altdfile) {
166 + attr = read_screen_memory(display_attr_start[y]+x+ALTDFILE_OFFSET);
167 + } else attr = read_screen_memory(display_attr_start[y]+x);
170 display_parse_attr(attr,ink,paper);
173 @@ -571,32 +573,27 @@
174 static void display_dirty_flashing(void)
176 int offset; BYTE attr;
178 - switch (scld_screenmode)
180 - case ALTDFILE: /* Same as standard, but base at 0x6000 */
181 - for(offset=0x3800;offset<0x3b00;offset++) {
182 - attr=read_screen_memory(offset);
184 - display_dirty64(offset+ALTDFILE_OFFSET);
190 + if (scld_extcolour) {
191 for(offset=ALTDFILE_OFFSET;offset<0x3800;offset++) {
192 attr=read_screen_memory(offset);
194 - display_dirty8(offset-ALTDFILE_OFFSET);
195 + display_dirty8(offset+ALTDFILE_OFFSET);
200 - default: /* Standard Speccy screen */
201 - for(offset=0x1800;offset<0x1b00;offset++) {
202 - attr=read_screen_memory(offset);
204 - display_dirty64(offset+0x4000);
205 + } else if (scld_altdfile) {
206 + for(offset=0x3800;offset<0x3b00;offset++) {
207 + attr=read_screen_memory(offset);
209 + display_dirty64(offset+ALTDFILE_OFFSET);
211 + } else { /* Standard Speccy screen */
212 + for(offset=0x1800;offset<0x1b00;offset++) {
213 + attr=read_screen_memory(offset);
215 + display_dirty64(offset+0x4000);
225 for(y=0;y<DISPLAY_HEIGHT;y++) {
226 - for(x=0;x<DISPLAY_WIDTH_COLS;x++) {
227 - display_get_attr(x,y,&ink,&paper);
229 - hires_data = (read_screen_memory( display_get_addr(x,y) ) << 8 ) +
230 - read_screen_memory( display_get_addr( x, y ) + ALTDFILE_OFFSET );
231 - display_plot16( x<<1, y, hires_data, ink, paper );
233 - display_plot8( x<<1, y, read_screen_memory( display_get_addr(x,y) ),
236 display_is_dirty[y] = display_all_dirty; /* Marks all pixels as dirty */