1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-26 12:49:21 +00:00

Added additional screensize operations to allow better optimization.

This commit is contained in:
jespergravgaard 2020-04-13 08:19:39 +02:00
parent c604e16630
commit cf4d25b5f6
3 changed files with 72 additions and 51 deletions

View File

@ -1,6 +1,9 @@
// Provides provide console input/output // Provides provide console input/output
// Implements similar functions as conio.h from CC65 for compatibility // Implements similar functions as conio.h from CC65 for compatibility
// See https://github.com/cc65/cc65/blob/master/include/conio.h // See https://github.com/cc65/cc65/blob/master/include/conio.h
//
// Currently only the C64 platform is supported
// clears the screen and moves the cursor to the upper left-hand corner of the screen. // clears the screen and moves the cursor to the upper left-hand corner of the screen.
void clrscr(void); void clrscr(void);
@ -17,6 +20,12 @@ unsigned char wherey(void);
// Return the current screen size. // Return the current screen size.
void screensize(unsigned char* x, unsigned char* y); void screensize(unsigned char* x, unsigned char* y);
// Return the current screen size X width.
char screensizex();
// Return the current screen size Y height.
char screensizey();
// Output one character at the current cursor position // Output one character at the current cursor position
void cputc(char c); void cputc(char c);
@ -58,7 +67,6 @@ unsigned char kbhit (void);
// The function returns the old cursor setting. // The function returns the old cursor setting.
unsigned char cursor(unsigned char onoff); unsigned char cursor(unsigned char onoff);
// The horizontal line character // The horizontal line character
const char CH_HLINE = 0x40; const char CH_HLINE = 0x40;
// The vertical line character // The vertical line character

View File

@ -1,6 +1,8 @@
// Provides provide console input/output // Provides provide console input/output
// Implements similar functions as conio.h from CC65 for compatibility // Implements similar functions as conio.h from CC65 for compatibility
// See https://github.com/cc65/cc65/blob/master/include/conio.h // See https://github.com/cc65/cc65/blob/master/include/conio.h
//
// Currently only the C64 platform is supported
#include <conio.h> #include <conio.h>
// The text screen address // The text screen address
@ -71,6 +73,16 @@ void screensize(unsigned char* x, unsigned char* y) {
*y = CONIO_HEIGHT; *y = CONIO_HEIGHT;
} }
// Return the current screen size X width.
inline char screensizex() {
return CONIO_WIDTH;
}
// Return the current screen size Y height.
inline char screensizey() {
return CONIO_HEIGHT;
}
// Return the X position of the cursor // Return the X position of the cursor
inline unsigned char wherex(void) { inline unsigned char wherex(void) {
return conio_cursor_x; return conio_cursor_x;
@ -159,8 +171,7 @@ unsigned char bgcolor(unsigned char color) {
} }
// Set the color for the border. The old color setting is returned. // Set the color for the border. The old color setting is returned.
unsigned char bordercolor(unsigned char color) unsigned char bordercolor(unsigned char color) {
{
char old = *CONIO_BORDERCOLOR; char old = *CONIO_BORDERCOLOR;
*CONIO_BORDERCOLOR = color; *CONIO_BORDERCOLOR = color;
return old; return old;

View File

@ -22,43 +22,45 @@ Culled Empty Block (label) @2
Culled Empty Block (label) @3 Culled Empty Block (label) @3
Culled Empty Block (label) @4 Culled Empty Block (label) @4
Culled Empty Block (label) @5 Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) cputc::@6 Culled Empty Block (label) cputc::@6
Culled Empty Block (label) cputc::@7 Culled Empty Block (label) cputc::@7
Culled Empty Block (label) cputc::@2 Culled Empty Block (label) cputc::@2
Culled Empty Block (label) cputc::@8 Culled Empty Block (label) cputc::@8
Culled Empty Block (label) @6 Culled Empty Block (label) @8
Culled Empty Block (label) @7 Culled Empty Block (label) @9
Culled Empty Block (label) cputs::@4 Culled Empty Block (label) cputs::@4
Culled Empty Block (label) cputs::@3 Culled Empty Block (label) cputs::@3
Culled Empty Block (label) cputs::@5 Culled Empty Block (label) cputs::@5
Culled Empty Block (label) cputs::@6 Culled Empty Block (label) cputs::@6
Culled Empty Block (label) @8 Culled Empty Block (label) @10
Culled Empty Block (label) @9 Culled Empty Block (label) @11
Culled Empty Block (label) chline::@4 Culled Empty Block (label) chline::@4
Culled Empty Block (label) chline::@3 Culled Empty Block (label) chline::@3
Culled Empty Block (label) chline::@5 Culled Empty Block (label) chline::@5
Culled Empty Block (label) chline::@6 Culled Empty Block (label) chline::@6
Culled Empty Block (label) @10 Culled Empty Block (label) @12
Culled Empty Block (label) cvline::@4 Culled Empty Block (label) cvline::@4
Culled Empty Block (label) cvline::@3 Culled Empty Block (label) cvline::@3
Culled Empty Block (label) cvline::@5 Culled Empty Block (label) cvline::@5
Culled Empty Block (label) cvline::@6 Culled Empty Block (label) cvline::@6
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) textcolor::@1
Culled Empty Block (label) @13 Culled Empty Block (label) @13
Culled Empty Block (label) bgcolor::@1
Culled Empty Block (label) @14 Culled Empty Block (label) @14
Culled Empty Block (label) bordercolor::@1 Culled Empty Block (label) textcolor::@1
Culled Empty Block (label) @15 Culled Empty Block (label) @15
Culled Empty Block (label) kbhit::@1 Culled Empty Block (label) bgcolor::@1
Culled Empty Block (label) @16 Culled Empty Block (label) @16
Culled Empty Block (label) cursor::@1 Culled Empty Block (label) bordercolor::@1
Culled Empty Block (label) @17 Culled Empty Block (label) @17
Culled Empty Block (label) kbhit::@1
Culled Empty Block (label) @18 Culled Empty Block (label) @18
Culled Empty Block (label) cursor::@1
Culled Empty Block (label) @19 Culled Empty Block (label) @19
Culled Empty Block (label) @20 Culled Empty Block (label) @20
Culled Empty Block (label) @21 Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) strlen::@4 Culled Empty Block (label) strlen::@4
Culled Empty Block (label) strlen::@5 Culled Empty Block (label) strlen::@5
Culled Empty Block (label) strlen::@6 Culled Empty Block (label) strlen::@6
@ -67,8 +69,8 @@ Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@6
Culled Empty Block (label) @23 Culled Empty Block (label) @25
Culled Empty Block (label) @24 Culled Empty Block (label) @26
Culled Empty Block (label) MakeNiceScreen::@4 Culled Empty Block (label) MakeNiceScreen::@4
Culled Empty Block (label) MakeNiceScreen::@3 Culled Empty Block (label) MakeNiceScreen::@3
Culled Empty Block (label) MakeNiceScreen::@5 Culled Empty Block (label) MakeNiceScreen::@5
@ -82,7 +84,7 @@ CONTROL FLOW GRAPH SSA
(byte*) conio_cursor_color#0 ← (const nomodify byte*) CONIO_SCREEN_COLORS (byte*) conio_cursor_color#0 ← (const nomodify byte*) CONIO_SCREEN_COLORS
(byte) conio_textcolor#0 ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT (byte) conio_textcolor#0 ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT
(byte) conio_display_cursor#0 ← (byte) 0 (byte) conio_display_cursor#0 ← (byte) 0
to:@22 to:@24
(void()) clrscr() (void()) clrscr()
clrscr: scope:[clrscr] from MakeNiceScreen::@9 main::@3 clrscr: scope:[clrscr] from MakeNiceScreen::@9 main::@3
@ -747,7 +749,7 @@ strlen::@return: scope:[strlen] from strlen::@3
(word) strlen::return#1 ← (word) strlen::return#3 (word) strlen::return#1 ← (word) strlen::return#3
return return
to:@return to:@return
@22: scope:[] from @begin @24: scope:[] from @begin
(byte) conio_display_cursor#25 ← phi( @begin/(byte) conio_display_cursor#0 ) (byte) conio_display_cursor#25 ← phi( @begin/(byte) conio_display_cursor#0 )
(byte*) conio_cursor_color#117 ← phi( @begin/(byte*) conio_cursor_color#0 ) (byte*) conio_cursor_color#117 ← phi( @begin/(byte*) conio_cursor_color#0 )
(byte*) conio_cursor_text#117 ← phi( @begin/(byte*) conio_cursor_text#0 ) (byte*) conio_cursor_text#117 ← phi( @begin/(byte*) conio_cursor_text#0 )
@ -756,16 +758,16 @@ strlen::@return: scope:[strlen] from strlen::@3
(byte) conio_textcolor#37 ← phi( @begin/(byte) conio_textcolor#0 ) (byte) conio_textcolor#37 ← phi( @begin/(byte) conio_textcolor#0 )
(volatile byte) XSize ← (byte) 0 (volatile byte) XSize ← (byte) 0
(volatile byte) YSize ← (byte) 0 (volatile byte) YSize ← (byte) 0
to:@25 to:@27
(void()) main() (void()) main()
main: scope:[main] from @25 main: scope:[main] from @27
(byte) conio_display_cursor#20 ← phi( @25/(byte) conio_display_cursor#19 ) (byte) conio_display_cursor#20 ← phi( @27/(byte) conio_display_cursor#19 )
(byte*) conio_cursor_color#113 ← phi( @25/(byte*) conio_cursor_color#109 ) (byte*) conio_cursor_color#113 ← phi( @27/(byte*) conio_cursor_color#109 )
(byte*) conio_cursor_text#113 ← phi( @25/(byte*) conio_cursor_text#109 ) (byte*) conio_cursor_text#113 ← phi( @27/(byte*) conio_cursor_text#109 )
(byte) conio_cursor_y#113 ← phi( @25/(byte) conio_cursor_y#110 ) (byte) conio_cursor_y#113 ← phi( @27/(byte) conio_cursor_y#110 )
(byte) conio_cursor_x#113 ← phi( @25/(byte) conio_cursor_x#110 ) (byte) conio_cursor_x#113 ← phi( @27/(byte) conio_cursor_x#110 )
(byte) conio_textcolor#33 ← phi( @25/(byte) conio_textcolor#23 ) (byte) conio_textcolor#33 ← phi( @27/(byte) conio_textcolor#23 )
*((const nomodify byte*) VIC_MEMORY) ← (number) $17 *((const nomodify byte*) VIC_MEMORY) ← (number) $17
(byte*) screensize::x#0 ← &(volatile byte) XSize (byte*) screensize::x#0 ← &(volatile byte) XSize
(byte*) screensize::y#0 ← &(volatile byte) YSize (byte*) screensize::y#0 ← &(volatile byte) YSize
@ -1219,22 +1221,22 @@ MakeNiceScreen::@return: scope:[MakeNiceScreen] from MakeNiceScreen::@1
(byte) conio_display_cursor#6 ← (byte) conio_display_cursor#13 (byte) conio_display_cursor#6 ← (byte) conio_display_cursor#13
return return
to:@return to:@return
@25: scope:[] from @22 @27: scope:[] from @24
(byte) conio_display_cursor#19 ← phi( @22/(byte) conio_display_cursor#25 ) (byte) conio_display_cursor#19 ← phi( @24/(byte) conio_display_cursor#25 )
(byte*) conio_cursor_color#109 ← phi( @22/(byte*) conio_cursor_color#117 ) (byte*) conio_cursor_color#109 ← phi( @24/(byte*) conio_cursor_color#117 )
(byte*) conio_cursor_text#109 ← phi( @22/(byte*) conio_cursor_text#117 ) (byte*) conio_cursor_text#109 ← phi( @24/(byte*) conio_cursor_text#117 )
(byte) conio_cursor_y#110 ← phi( @22/(byte) conio_cursor_y#117 ) (byte) conio_cursor_y#110 ← phi( @24/(byte) conio_cursor_y#117 )
(byte) conio_cursor_x#110 ← phi( @22/(byte) conio_cursor_x#117 ) (byte) conio_cursor_x#110 ← phi( @24/(byte) conio_cursor_x#117 )
(byte) conio_textcolor#23 ← phi( @22/(byte) conio_textcolor#37 ) (byte) conio_textcolor#23 ← phi( @24/(byte) conio_textcolor#37 )
call main call main
to:@26 to:@28
@26: scope:[] from @25 @28: scope:[] from @27
(byte) conio_display_cursor#14 ← phi( @25/(byte) conio_display_cursor#4 ) (byte) conio_display_cursor#14 ← phi( @27/(byte) conio_display_cursor#4 )
(byte*) conio_cursor_color#88 ← phi( @25/(byte*) conio_cursor_color#27 ) (byte*) conio_cursor_color#88 ← phi( @27/(byte*) conio_cursor_color#27 )
(byte*) conio_cursor_text#88 ← phi( @25/(byte*) conio_cursor_text#27 ) (byte*) conio_cursor_text#88 ← phi( @27/(byte*) conio_cursor_text#27 )
(byte) conio_cursor_y#90 ← phi( @25/(byte) conio_cursor_y#27 ) (byte) conio_cursor_y#90 ← phi( @27/(byte) conio_cursor_y#27 )
(byte) conio_cursor_x#90 ← phi( @25/(byte) conio_cursor_x#28 ) (byte) conio_cursor_x#90 ← phi( @27/(byte) conio_cursor_x#28 )
(byte) conio_textcolor#16 ← phi( @25/(byte) conio_textcolor#4 ) (byte) conio_textcolor#16 ← phi( @27/(byte) conio_textcolor#4 )
(byte) conio_textcolor#7 ← (byte) conio_textcolor#16 (byte) conio_textcolor#7 ← (byte) conio_textcolor#16
(byte) conio_cursor_x#46 ← (byte) conio_cursor_x#90 (byte) conio_cursor_x#46 ← (byte) conio_cursor_x#90
(byte) conio_cursor_y#45 ← (byte) conio_cursor_y#90 (byte) conio_cursor_y#45 ← (byte) conio_cursor_y#90
@ -1242,14 +1244,14 @@ MakeNiceScreen::@return: scope:[MakeNiceScreen] from MakeNiceScreen::@1
(byte*) conio_cursor_color#45 ← (byte*) conio_cursor_color#88 (byte*) conio_cursor_color#45 ← (byte*) conio_cursor_color#88
(byte) conio_display_cursor#7 ← (byte) conio_display_cursor#14 (byte) conio_display_cursor#7 ← (byte) conio_display_cursor#14
to:@end to:@end
@end: scope:[] from @26 @end: scope:[] from @28
SYMBOL TABLE SSA SYMBOL TABLE SSA
(const byte*) $0::Msg[(number) $28] = { fill( $28, 0) } (const byte*) $0::Msg[(number) $28] = { fill( $28, 0) }
(byte) $0::Y (byte) $0::Y
(label) @22 (label) @24
(label) @25 (label) @27
(label) @26 (label) @28
(label) @begin (label) @begin
(label) @end (label) @end
(const nomodify byte) CH_HLINE = (byte) $40 (const nomodify byte) CH_HLINE = (byte) $40
@ -3107,8 +3109,8 @@ Added new block during phi lifting cputc::@11(between cputc::@3 and cputc::@retu
Added new block during phi lifting cputc::@12(between cputc::@4 and cputc::@return) Added new block during phi lifting cputc::@12(between cputc::@4 and cputc::@return)
Fixing phi predecessor for conio_cursor_x#52 to new block ( cputc::@4 -> cputc::@12 ) during phi lifting. Fixing phi predecessor for conio_cursor_x#52 to new block ( cputc::@4 -> cputc::@12 ) during phi lifting.
Adding NOP phi() at start of @begin Adding NOP phi() at start of @begin
Adding NOP phi() at start of @25 Adding NOP phi() at start of @27
Adding NOP phi() at start of @26 Adding NOP phi() at start of @28
Adding NOP phi() at start of @end Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@7 Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@8 Adding NOP phi() at start of main::@8
@ -3242,7 +3244,7 @@ Coalesced [255] gotoxy::y#14 ← gotoxy::y#5
Coalesced [258] cvline::i#6 ← cvline::i#1 Coalesced [258] cvline::i#6 ← cvline::i#1
Coalesced [259] cvline::y#7 ← cvline::y#1 Coalesced [259] cvline::y#7 ← cvline::y#1
Coalesced down to 24 phi equivalence classes Coalesced down to 24 phi equivalence classes
Culled Empty Block (label) @26 Culled Empty Block (label) @28
Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@8
Culled Empty Block (label) main::@10 Culled Empty Block (label) main::@10
Culled Empty Block (label) clrscr::@3 Culled Empty Block (label) clrscr::@3
@ -3260,8 +3262,8 @@ Culled Empty Block (label) strlen::@3
Culled Empty Block (label) MakeTeeLine::@3 Culled Empty Block (label) MakeTeeLine::@3
Culled Empty Block (label) cputcxy::@2 Culled Empty Block (label) cputcxy::@2
Culled Empty Block (label) cvlinexy::@2 Culled Empty Block (label) cvlinexy::@2
Renumbering block @22 to @1 Renumbering block @24 to @1
Renumbering block @25 to @2 Renumbering block @27 to @2
Renumbering block clrscr::@4 to clrscr::@2 Renumbering block clrscr::@4 to clrscr::@2
Renumbering block clrscr::@5 to clrscr::@3 Renumbering block clrscr::@5 to clrscr::@3
Renumbering block clrscr::@6 to clrscr::@4 Renumbering block clrscr::@6 to clrscr::@4