diff --git a/src/bus.c b/src/bus.c index 9e3a470..c9b0aec 100644 --- a/src/bus.c +++ b/src/bus.c @@ -7,17 +7,23 @@ #include "hdw.h" #include "bus.h" +#define SEG_OF( adr ) ( ( adr ) >> 12 ) +#define OFFSET_OF( adr ) ( ( adr ) & 0xFFF ) +#define CAN_READ( adr ) ( read_map[ SEG_OF( adr ) ] != NULL ) +#define CAN_WRITE( adr ) ( write_map[ SEG_OF( adr ) ] != NULL ) +#define MAP_READ( adr ) ( read_map[ SEG_OF( adr ) ] + OFFSET_OF( adr ) ) +#define MAP_WRITE( adr ) ( write_map[ SEG_OF( adr ) ] + OFFSET_OF( adr ) ) + BusInfo bus_info = { // hdw ram sz ram ce1 sz ce1 ce2 sz ce2 nce3 sz nce3 - 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, - 0x00000, // base or size + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // base or size false, false, false, false, false, false, false, false, false, // configured false, false, false, // read only // ce1_bs da19 ben false, false, false, // rom ram ce1 ce2 nce3 - NULL, NULL, NULL, NULL, NULL, // data - 0x00000, 0x00000, 0x00000, 0x00000, 0x00000 // mask + NULL, NULL, NULL, NULL, NULL, // data + 0x0, 0x0, 0x0, 0x0, 0x0, 0 // mask }; static byte* read_map[ 256 ]; @@ -29,7 +35,6 @@ word crc; void bus_init( void ) { rom_init(); - hdw_init(); ram_init(); ports_init(); bus_reset(); @@ -38,9 +43,7 @@ void bus_init( void ) void bus_exit( void ) { rom_exit(); - hdw_exit(); ram_exit(); - ports_exit(); } static inline void update_crc( byte nibble ) { crc = ( crc >> 4 ) ^ ( ( ( crc ^ nibble ) & 0xF ) * 0x1081 ); } diff --git a/src/bus.h b/src/bus.h index eeb92ff..fcb5553 100644 --- a/src/bus.h +++ b/src/bus.h @@ -3,15 +3,6 @@ #include "types.h" -#define SEG_OF( adr ) ( ( adr ) >> 12 ) -#define OFFSET_OF( adr ) ( ( adr ) & 0xFFF ) -#define CAN_READ( adr ) ( read_map[ SEG_OF( adr ) ] != NULL ) -#define CAN_WRITE( adr ) ( write_map[ SEG_OF( adr ) ] != NULL ) -#define MAP_READ( adr ) ( read_map[ SEG_OF( adr ) ] + OFFSET_OF( adr ) ) -#define MAP_WRITE( adr ) ( write_map[ SEG_OF( adr ) ] + OFFSET_OF( adr ) ) - -#define MIN( a, b ) ( ( a ) < ( b ) ? ( a ) : ( b ) ) - typedef struct { address hdw_base; address ram_size; diff --git a/src/color.c b/src/color.c index fd727e3..1e7a309 100644 --- a/src/color.c +++ b/src/color.c @@ -8,10 +8,6 @@ enum LCD_Modes { LCD_MODE_SIMPLE, LCD_MODE_GRAY4, LCD_MODE_GRAY8, LCD_MODE_EXP } int color[ C_COUNT ]; -typedef struct RGB { - unsigned char r, g, b; -} RGB; - static int lcd_0_r, lcd_0_g, lcd_0_b; static int lcd_1_r, lcd_1_g, lcd_1_b; static int lcd_mode; @@ -39,9 +35,7 @@ typedef int ( *lcd_color_func )( int i ); lcd_color_func lcd_color_functions[] = { simple_color, gray4_color, gray8_color, exp_color }; -void build_lcd_palette( void ) {} - -void color_lcd( int r0, int g0, int b0, int r1, int g1, int b1 ) +static inline void color_lcd( int r0, int g0, int b0, int r1, int g1, int b1 ) { lcd_0_r = r0 >> 2; lcd_0_g = g0 >> 2; @@ -49,33 +43,15 @@ void color_lcd( int r0, int g0, int b0, int r1, int g1, int b1 ) lcd_1_r = r1 >> 2; lcd_1_g = g1 >> 2; lcd_1_b = b1 >> 2; - build_lcd_palette(); } -void color_lcd_mode( int mode ) -{ - lcd_mode = mode; - build_lcd_palette(); -} - -void color_set_emu( int i, int r, int g, int b ) {} +static inline void color_lcd_mode( int mode ) { lcd_mode = mode; } void color_init( void ) { for ( int i = 0; i < C_COUNT; i++ ) color[ i ] = RESERVED_LCD + i; - color_set_emu( C_BACKGROUND, 0, 0, 0 ); - color_set_emu( C_PANEL_BACK, 64, 64, 64 ); - color_set_emu( C_PANEL_BORDER, 128, 128, 128 ); - color_set_emu( C_PANEL_TEXT, 255, 255, 255 ); - color_set_emu( C_PANEL_DISABLED, 128, 128, 128 ); - color_set_emu( C_BUTTON_BACK, 64, 64, 64 ); - color_set_emu( C_BUTTON_BORDER, 128, 128, 128 ); - color_set_emu( C_BUTTON_PUSHED, 128, 128, 128 ); - color_set_emu( C_BUTTON_TEXT, 255, 255, 255 ); - color_set_emu( C_BUTTON_DISABLED, 128, 128, 128 ); - color_lcd( 128, 192, 128, 0, 0, 64 ); color_lcd_mode( LCD_MODE_GRAY4 ); } diff --git a/src/cpu.c b/src/cpu.c index deec888..5657eb3 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -10,6 +10,24 @@ Cpu cpu; #define MAX_OPC_LEN 21 +static inline void decode( byte* ptr ) +{ + Opcode* op = opcodes; + int i = 0; + + while ( op[ ptr[ i ] ].next ) { + op = op[ ptr[ i ] ].next; + i++; + } + + if ( op[ ptr[ i ] ].exec ) { + op[ ptr[ i ] ].exec( ptr ); + cpu.pc &= 0xFFFFF; + cpu.inst_cnt++; + } else + emulator_set_state( EMULATOR_STOP ); +} + void cpu_interrupt( void ) { if ( !cpu.inte ) @@ -21,24 +39,6 @@ void cpu_interrupt( void ) cpu.pc = 0x0000F; } -static void decode( byte* ptr ) -{ - Opcode* op = opcodes; - int i = 0; - - while ( op[ ptr[ i ] ].next ) { - op = op[ ptr[ i ] ].next; - i++; - } - if ( op[ ptr[ i ] ].exec ) { - op[ ptr[ i ] ].exec( ptr ); - cpu.pc &= 0xFFFFF; - cpu.inst_cnt++; - } else { - emulator_set_state( EMULATOR_STOP ); - } -} - void execute_instruction( void ) { static byte buffer[ FAST_PEEK_MAX ]; diff --git a/src/display.c b/src/display.c index 033736d..4e2200f 100644 --- a/src/display.c +++ b/src/display.c @@ -40,28 +40,6 @@ extern SDL_Texture* texTarget; extern SDL_Texture* tex2Target; extern SDL_Texture* faceplateTexture; -void clearLCD() -{ - SDL_SetRenderDrawColor( renderer, 48, 68, 90, 0xFF ); // bleu foncé - SDL_RenderClear( renderer ); - - if ( faceplateTexture ) { - SDL_Rect r3 = { 8, 0, 504, 1124 }; - SDL_RenderCopy( renderer, faceplateTexture, NULL, &r3 ); - } -} - -void endLCD() -{ - SDL_Rect r1 = { 0, 0, 131, 64 }; - SDL_Rect r2 = { LCD_X, LCD_Y, 524, 256 }; - SDL_RenderCopyEx( renderer, texTarget, &r1, &r2, 0, NULL, SDL_FLIP_NONE ); - - pcalc_show(); -} - -void renderLCD() {} - static address draw_lcd_line( address adr, int y ) { int x = 0; @@ -73,9 +51,8 @@ static address draw_lcd_line( address adr, int y ) // Horisontal pixel offset if ( !in_menu ) { - if ( display_offset > 3 ) { + if ( display_offset > 3 ) ptr++; - } data = *ptr++; data >>= display_offset & 3; @@ -102,37 +79,29 @@ static address draw_lcd_line( address adr, int y ) byte prev2_pixel = prev2_lcdScreen[ x + y * 131 ]; if ( drawGS == true ) { - if ( prev2_pixel == '\0' && prev_pixel == '\0' && pixel == '\0' ) { + if ( prev2_pixel == '\0' && prev_pixel == '\0' && pixel == '\0' ) pixelGS = '\0'; - } - if ( prev2_pixel == '\3' && prev_pixel == '\3' && pixel == '\3' ) { + if ( prev2_pixel == '\3' && prev_pixel == '\3' && pixel == '\3' ) pixelGS = '\3'; - } - if ( prev2_pixel == '\0' && prev_pixel == '\3' && pixel == '\3' ) { + if ( prev2_pixel == '\0' && prev_pixel == '\3' && pixel == '\3' ) pixelGS = '\2'; - } - if ( prev2_pixel == '\3' && prev_pixel == '\0' && pixel == '\0' ) { + if ( prev2_pixel == '\3' && prev_pixel == '\0' && pixel == '\0' ) pixelGS = '\1'; - } - if ( prev2_pixel == '\3' && prev_pixel == '\3' && pixel == '\0' ) { + if ( prev2_pixel == '\3' && prev_pixel == '\3' && pixel == '\0' ) pixelGS = '\2'; - } - if ( prev2_pixel == '\3' && prev_pixel == '\0' && pixel == '\3' ) { + if ( prev2_pixel == '\3' && prev_pixel == '\0' && pixel == '\3' ) pixelGS = '\2'; - } - if ( prev2_pixel == '\0' && prev_pixel == '\0' && pixel == '\3' ) { + if ( prev2_pixel == '\0' && prev_pixel == '\0' && pixel == '\3' ) pixelGS = '\1'; - } - if ( prev2_pixel == '\0' && prev_pixel == '\3' && pixel == '\0' ) { + if ( prev2_pixel == '\0' && prev_pixel == '\3' && pixel == '\0' ) pixelGS = '\1'; - } lcdScreenGS[ x + y * 131 ] = pixelGS; } @@ -145,10 +114,6 @@ static address draw_lcd_line( address adr, int y ) return ( adr + 0x22 + ( !in_menu && ( display_offset & 4 ) ? 2 : 0 ) ) & 0xFFFFF; } -void display_init( void ) {} - -void display_exit( void ) {} - void display_show() { SDL_SetRenderDrawColor( renderer, 48, 68, 90, 0xFF ); // bleu foncé @@ -167,13 +132,11 @@ void display_show() int access; Uint32 format; - if ( SDL_QueryTexture( texTarget, &format, &access, &w, &h ) != 0 ) { + if ( SDL_QueryTexture( texTarget, &format, &access, &w, &h ) != 0 ) printf( "error\n" ); - } - if ( SDL_LockTexture( texTarget, NULL, ( void** )&pixels, &pitch ) != 0 ) { + if ( SDL_LockTexture( texTarget, NULL, ( void** )&pixels, &pitch ) != 0 ) printf( "SDL_LockTexture: %s.\n", SDL_GetError() ); - } SDL_PixelFormat* pixelFormat = SDL_AllocFormat( format ); @@ -245,12 +208,11 @@ void display_update( void ) } if ( !off_cnt ) { /* Display is on */ - cur_adr = draw_lcd_line( cur_adr, display_line_count ); - if ( !in_menu ) { + if ( !in_menu ) cur_adr += display_line_offset; - } + if ( display_line_count == display_height ) { in_menu = 1; cur_adr = menu_base; @@ -266,19 +228,12 @@ void display_update( void ) shouldRender = true; screen_draw_count++; - if ( screen_draw_count == 3 ) { - + if ( screen_draw_count == 3 ) screen_draw_count = 0; - } } - if ( screen_draw_count == 0 ) { - drawGS = true; - } else { - drawGS = false; - } + drawGS = screen_draw_count == 0; - } else if ( off_cnt <= 7 ) { /* Display is off and still fading */ + } else if ( off_cnt <= 7 ) /* Display is off and still fading */ off_cnt = 8; - } } diff --git a/src/display.h b/src/display.h index 952977f..a7d430f 100644 --- a/src/display.h +++ b/src/display.h @@ -13,8 +13,6 @@ extern byte display_height; extern byte display_offset; extern bool display_enable; -extern void display_init( void ); -extern void display_exit( void ); extern void display_update( void ); extern void display_show( void ); diff --git a/src/emulator.c b/src/emulator.c index 042417f..43d785a 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -46,19 +46,14 @@ void emulator_init( void ) static bool locked = false; bus_init(); - display_init(); if ( !locked ) locked = true; } -void emulator_exit( void ) -{ - display_exit(); - bus_exit(); -} +void emulator_exit( void ) { bus_exit(); } -void throttle( bool is_needed ) +static inline void throttle( bool is_needed ) { if ( !is_needed ) return; diff --git a/src/gui.c b/src/gui.c index 8b531f4..5e2f5b4 100644 --- a/src/gui.c +++ b/src/gui.c @@ -29,7 +29,7 @@ SDL_Texture* textD[ 49 ]; #define PANEL_FLAG_VISIBLE 0x01 -void drawText( int index, int x, int y, int btn_w, int btn_h ) +static inline void drawText( int index, int x, int y, int btn_w, int btn_h ) { SDL_Surface* letterSurface = surfA[ index ]; SDL_Texture* letterTexture = textA[ index ]; @@ -157,86 +157,7 @@ void gui_initKeyboard( Button* calcbuttons ) } } -/* void gui_exit( void ) */ -/* { */ -/* /\* int i; *\/ */ - -/* /\* for ( i = 0; i < PANEL_COUNT; i++ ) { *\/ */ -/* /\* gui_hide_panel( i ); *\/ */ -/* /\* } *\/ */ -/* } */ - -/* static inline int panel_at( int x, int y ) */ -/* { */ -/* int i; */ - -/* for ( i = PANEL_COUNT; i >= 0; i-- ) { */ -/* if ( panels[ i ].flags & PANEL_FLAG_VISIBLE && x >= panels[ i ].x && x < panels[ i ].x + panels[ i ].w && y >= panels[ i ].y && - */ -/* y < panels[ i ].y + panels[ i ].h ) { */ -/* break; */ -/* } */ -/* } */ -/* return i; */ -/* } */ - -/* void gui_update( void ) */ -/* { */ -/* /\* */ -/* static int down_panel = -1; */ -/* static int down_mb = 0; */ -/* int mx, my, mb; */ - -/* mx = mouse_x; */ -/* my = mouse_y; */ -/* mb = mouse_b; */ - -/* if (!down_mb && (mb & 1)) { */ -/* down_panel = panel_at(mx, my); */ -/* if (down_panel >= 0) { */ -/* down_mb = 1; */ -/* panels[down_panel].mouse_down(mx - panels[down_panel].x, my - */ -/* panels[down_panel].y, down_mb); */ -/* } */ -/* } else if (!down_mb && (mb & 2)) { */ -/* down_panel = panel_at(mx, my); */ -/* if (down_panel >= 0) { */ -/* down_mb = 2; */ -/* panels[down_panel].mouse_down(mx - panels[down_panel].x, my - */ -/* panels[down_panel].y, down_mb); */ -/* } */ -/* } else if (down_mb && !(mb & 3)) { */ -/* panels[down_panel].mouse_up(mx - panels[down_panel].x, my - */ -/* panels[down_panel].y, down_mb); down_mb = 0; down_panel = -1; */ -/* } */ -/* *\/ */ -/* } */ - -/* void gui_show_panel( int i ) */ -/* { */ -/* /\* */ -/* if (!(panels[i].flags & PANEL_FLAG_VISIBLE)) { */ -/* panels[i].flags |= PANEL_FLAG_VISIBLE; */ -/* panels[i].bmp = create_sub_bitmap(screen, panels[i].x, panels[i].y, */ -/* panels[i].w, panels[i].h); acquire_screen(); scare_mouse(); rect(screen, */ -/* panels[i].x-1, panels[i].y-1, panels[i].x+panels[i].w, panels[i].y+panels[i].h, */ -/* color[C_PANEL_BORDER]); panels[i].show(panels[i].bmp); unscare_mouse(); */ -/* release_screen(); */ -/* }*\/ */ -/* } */ - -/* void gui_hide_panel( int i ) */ -/* { */ -/* /\* */ -/* if (panels[i].flags & PANEL_FLAG_VISIBLE) { */ -/* panels[i].flags &= ~PANEL_FLAG_VISIBLE; */ -/* panels[i].hide(); */ -/* destroy_bitmap(panels[i].bmp); */ -/* panels[i].bmp = NULL; */ -/* }*\/ */ -/* } */ - -void button_draw( Button* b ) +static inline void button_draw( Button* b ) { SDL_Rect rectToDraw = { b->x * 2, b->y * 2, b->w * 2, b->h * 2 }; @@ -245,9 +166,6 @@ void button_draw( Button* b ) drawText( b->index, b->x * 2, 10 + b->y * 2, b->w * 2, b->h * 2 ); - /* int c = color[ ( b->flags & BUTTON_PUSHED ) ? C_BUTTON_PUSHED : - * C_BUTTON_BACK ]; */ - if ( b->flags & BUTTON_PUSHED ) { SDL_SetRenderDrawColor( renderer, 0xFF, 0x00, 0x00, 0xFF ); SDL_RenderDrawRect( renderer, &rectToDraw ); @@ -256,20 +174,6 @@ void button_draw( Button* b ) SDL_SetRenderDrawColor( renderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderDrawRect( renderer, &rectToDraw ); } - - /* -int c; - -c = color[(b->flags&BUTTON_PUSHED) ? C_BUTTON_PUSHED : C_BUTTON_BACK]; -text_mode(c); -acquire_bitmap(bmp); -scare_mouse(); -rect(bmp, b->x-1, b->y-1, b->x+b->w, b->y+b->h, color[C_BUTTON_BORDER]); -rectfill(bmp, b->x, b->y, b->x+b->w-1, b->y+b->h-1, c); -c = color[(b->flags&BUTTON_DISABLED) ? C_BUTTON_DISABLED : C_BUTTON_TEXT]; -textout_centre(bmp, font, b->text, b->x+b->w/2, b->y+(b->h-text_height -(font))/2, c); unscare_mouse(); release_bitmap(bmp); - */ } void button_draw_all( Button* buttons ) @@ -283,73 +187,70 @@ void button_draw_all( Button* buttons ) static inline Button* find_button( Button* b, int x, int y ) { while ( b->text ) { - // if (x >= b->x && x < b->x+b->w && y >= b->y && y < b->y+b->h) { - if ( x >= b->x * 2 && x < b->x * 2 + b->w * 2 && y >= b->y * 2 && y < b->y * 2 + b->h * 2 ) { + if ( x >= b->x * 2 && x < b->x * 2 + b->w * 2 && y >= b->y * 2 && y < b->y * 2 + b->h * 2 ) return b; - } + b++; } + return NULL; } int button_mouse_down( Button* buttons, int mx, int my, int mb ) { Button* b = find_button( buttons, mx, my ); - if ( !b ) { + if ( !b ) return 0; - } - printf( "Press %s\n", b->text ); if ( !( b->flags & BUTTON_DISABLED ) ) { if ( ( mb == 2 && ( b->flags & BUTTON_B2TOGGLE ) ) || ( mb == 1 && ( b->flags & BUTTON_B1TOGGLE ) ) ) { if ( b->flags & BUTTON_PUSHED ) { b->flags &= ~BUTTON_PUSHED; - // button_draw(bmp, b); + if ( b->up ) - b->up( true ); + b->up(); } else { b->flags |= BUTTON_PUSHED; - // button_draw(bmp, b); + if ( b->down ) b->down(); } } else if ( mb == 1 && !( b->flags & BUTTON_PUSHED ) ) { b->flags |= BUTTON_PUSHED; - // button_draw(bmp, b); + if ( b->down ) b->down(); } } + return 1; } -int button_mouse_up( /*BITMAP *bmp,*/ Button* buttons, int mx, int my, int mb ) +int button_mouse_up( Button* buttons, int mx, int my, int mb ) { Button* b = find_button( buttons, mx, my ); int ret = ( b != NULL ); - if ( b ) { - printf( "Release %s\n", b->text ); - } if ( b && !( b->flags & BUTTON_DISABLED ) ) { if ( mb == 1 && ( b->flags & BUTTON_PUSHED ) && !( b->flags & BUTTON_B1TOGGLE ) ) { b->flags &= ~BUTTON_PUSHED; - // button_draw(bmp, b); + if ( b->up ) - b->up( true ); + b->up(); } } if ( mb == 1 ) { for ( b = buttons; b->text; b++ ) { if ( ( b->flags & ( BUTTON_B1RELEASE | BUTTON_PUSHED ) ) == ( BUTTON_B1RELEASE | BUTTON_PUSHED ) ) { b->flags &= ~BUTTON_PUSHED; - // button_draw(bmp, b); + if ( b->up ) - b->up( false ); + b->up(); ret = 1; } } } + return ret; } diff --git a/src/gui.h b/src/gui.h index 80ba4a9..126840c 100644 --- a/src/gui.h +++ b/src/gui.h @@ -15,7 +15,7 @@ typedef struct { char* textC; char* textD; void ( *down )( void ); - void ( *up )( bool action ); + void ( *up )( void ); } Button; /* Button flags: diff --git a/src/hdw.c b/src/hdw.c index 45d8062..e293996 100644 --- a/src/hdw.c +++ b/src/hdw.c @@ -7,14 +7,9 @@ static byte hdw_ram[ 64 ]; -void hdw_init( void ) {} - -void hdw_exit( void ) {} - byte hdw_read_nibble( address adr ) { switch ( adr ) { - case 0x00: return display_offset | ( display_enable ? 0x8 : 0x0 ); @@ -66,8 +61,6 @@ byte hdw_read_nibble( address adr ) void hdw_write_nibble( byte data, address adr ) { - int tmp; - switch ( adr ) { case 0x00: @@ -139,7 +132,7 @@ void hdw_write_nibble( byte data, address adr ) display_height &= 0x0F; display_height |= ( data & 3 ) << 4; hdw_ram[ 0x29 ] = data & 0x4; - tmp = bus_info.da19; + int tmp = bus_info.da19; bus_info.da19 = ( data & 0x8 ) ? true : false; if ( tmp != bus_info.da19 ) { bus_remap(); diff --git a/src/hdw.h b/src/hdw.h index 26c8222..63c1355 100644 --- a/src/hdw.h +++ b/src/hdw.h @@ -3,9 +3,6 @@ #include "types.h" -extern void hdw_init( void ); -extern void hdw_exit( void ); - extern byte hdw_read_nibble( address adr ); extern void hdw_write_nibble( byte data, address adr ); diff --git a/src/pcalc.c b/src/pcalc.c index d1e53af..51efb2d 100644 --- a/src/pcalc.c +++ b/src/pcalc.c @@ -8,107 +8,106 @@ #include "pfiles.h" static void dn00( void ) { kbd_key_pressed( 0, 0 ); } -static void up00( bool action ) { kbd_key_released( 0, 0 ); } +static void up00( void ) { kbd_key_released( 0, 0 ); } static void dn01( void ) { kbd_key_pressed( 0, 1 ); } -static void up01( bool action ) { kbd_key_released( 0, 1 ); } +static void up01( void ) { kbd_key_released( 0, 1 ); } static void dn02( void ) { kbd_key_pressed( 0, 2 ); } -static void up02( bool action ) { kbd_key_released( 0, 2 ); } +static void up02( void ) { kbd_key_released( 0, 2 ); } static void dn03( void ) { kbd_key_pressed( 0, 3 ); } -static void up03( bool action ) { kbd_key_released( 0, 3 ); } +static void up03( void ) { kbd_key_released( 0, 3 ); } static void dn04( void ) { kbd_key_pressed( 0, 4 ); } -static void up04( bool action ) { kbd_key_released( 0, 4 ); } +static void up04( void ) { kbd_key_released( 0, 4 ); } static void dn10( void ) { kbd_key_pressed( 1, 0 ); } -static void up10( bool action ) { kbd_key_released( 1, 0 ); } +static void up10( void ) { kbd_key_released( 1, 0 ); } static void dn11( void ) { kbd_key_pressed( 1, 1 ); } -static void up11( bool action ) { kbd_key_released( 1, 1 ); } +static void up11( void ) { kbd_key_released( 1, 1 ); } static void dn12( void ) { kbd_key_pressed( 1, 2 ); } -static void up12( bool action ) { kbd_key_released( 1, 2 ); } +static void up12( void ) { kbd_key_released( 1, 2 ); } static void dn13( void ) { kbd_key_pressed( 1, 3 ); } -static void up13( bool action ) { kbd_key_released( 1, 3 ); } +static void up13( void ) { kbd_key_released( 1, 3 ); } static void dn14( void ) { kbd_key_pressed( 1, 4 ); } -static void up14( bool action ) { kbd_key_released( 1, 4 ); } +static void up14( void ) { kbd_key_released( 1, 4 ); } static void dn15( void ) { kbd_key_pressed( 1, 5 ); } -static void up15( bool action ) { kbd_key_released( 1, 5 ); } +static void up15( void ) { kbd_key_released( 1, 5 ); } static void dn20( void ) { kbd_key_pressed( 2, 0 ); } -static void up20( bool action ) { kbd_key_released( 2, 0 ); } +static void up20( void ) { kbd_key_released( 2, 0 ); } static void dn21( void ) { kbd_key_pressed( 2, 1 ); } -static void up21( bool action ) { kbd_key_released( 2, 1 ); } +static void up21( void ) { kbd_key_released( 2, 1 ); } static void dn22( void ) { kbd_key_pressed( 2, 2 ); } -static void up22( bool action ) { kbd_key_released( 2, 2 ); } +static void up22( void ) { kbd_key_released( 2, 2 ); } static void dn23( void ) { kbd_key_pressed( 2, 3 ); } -static void up23( bool action ) { kbd_key_released( 2, 3 ); } +static void up23( void ) { kbd_key_released( 2, 3 ); } static void dn24( void ) { kbd_key_pressed( 2, 4 ); } -static void up24( bool action ) { kbd_key_released( 2, 4 ); } +static void up24( void ) { kbd_key_released( 2, 4 ); } static void dn25( void ) { kbd_key_pressed( 2, 5 ); } -static void up25( bool action ) { kbd_key_released( 2, 5 ); } +static void up25( void ) { kbd_key_released( 2, 5 ); } static void dn30( void ) { kbd_key_pressed( 3, 0 ); } -static void up30( bool action ) { kbd_key_released( 3, 0 ); } +static void up30( void ) { kbd_key_released( 3, 0 ); } static void dn31( void ) { kbd_key_pressed( 3, 1 ); } -static void up31( bool action ) { kbd_key_released( 3, 1 ); } +static void up31( void ) { kbd_key_released( 3, 1 ); } static void dn32( void ) { kbd_key_pressed( 3, 2 ); } -static void up32( bool action ) { kbd_key_released( 3, 2 ); } +static void up32( void ) { kbd_key_released( 3, 2 ); } static void dn33( void ) { kbd_key_pressed( 3, 3 ); } -static void up33( bool action ) { kbd_key_released( 3, 3 ); } +static void up33( void ) { kbd_key_released( 3, 3 ); } static void dn34( void ) { kbd_key_pressed( 3, 4 ); } -static void up34( bool action ) { kbd_key_released( 3, 4 ); } +static void up34( void ) { kbd_key_released( 3, 4 ); } static void dn35( void ) { kbd_key_pressed( 3, 5 ); } -static void up35( bool action ) { kbd_key_released( 3, 5 ); } +static void up35( void ) { kbd_key_released( 3, 5 ); } static void dn40( void ) { kbd_key_pressed( 4, 0 ); } -static void up40( bool action ) { kbd_key_released( 4, 0 ); } +static void up40( void ) { kbd_key_released( 4, 0 ); } static void dn41( void ) { kbd_key_pressed( 4, 1 ); } -static void up41( bool action ) { kbd_key_released( 4, 1 ); } +static void up41( void ) { kbd_key_released( 4, 1 ); } static void dn42( void ) { kbd_key_pressed( 4, 2 ); } -static void up42( bool action ) { kbd_key_released( 4, 2 ); } +static void up42( void ) { kbd_key_released( 4, 2 ); } static void dn43( void ) { kbd_key_pressed( 4, 3 ); } -static void up43( bool action ) { kbd_key_released( 4, 3 ); } +static void up43( void ) { kbd_key_released( 4, 3 ); } static void dn44( void ) { kbd_key_pressed( 4, 4 ); } -static void up44( bool action ) { kbd_key_released( 4, 4 ); } +static void up44( void ) { kbd_key_released( 4, 4 ); } static void dn50( void ) { kbd_key_pressed( 5, 0 ); } -static void up50( bool action ) { kbd_key_released( 5, 0 ); } +static void up50( void ) { kbd_key_released( 5, 0 ); } static void dn51( void ) { kbd_key_pressed( 5, 1 ); } -static void up51( bool action ) { kbd_key_released( 5, 1 ); } +static void up51( void ) { kbd_key_released( 5, 1 ); } static void dn52( void ) { kbd_key_pressed( 5, 2 ); } -static void up52( bool action ) { kbd_key_released( 5, 2 ); } +static void up52( void ) { kbd_key_released( 5, 2 ); } static void dn53( void ) { kbd_key_pressed( 5, 3 ); } -static void up53( bool action ) { kbd_key_released( 5, 3 ); } +static void up53( void ) { kbd_key_released( 5, 3 ); } static void dn54( void ) { kbd_key_pressed( 5, 4 ); } -static void up54( bool action ) { kbd_key_released( 5, 4 ); } +static void up54( void ) { kbd_key_released( 5, 4 ); } static void dn60( void ) { kbd_key_pressed( 6, 0 ); } -static void up60( bool action ) { kbd_key_released( 6, 0 ); } +static void up60( void ) { kbd_key_released( 6, 0 ); } static void dn61( void ) { kbd_key_pressed( 6, 1 ); } -static void up61( bool action ) { kbd_key_released( 6, 1 ); } +static void up61( void ) { kbd_key_released( 6, 1 ); } static void dn62( void ) { kbd_key_pressed( 6, 2 ); } -static void up62( bool action ) { kbd_key_released( 6, 2 ); } +static void up62( void ) { kbd_key_released( 6, 2 ); } static void dn63( void ) { kbd_key_pressed( 6, 3 ); } -static void up63( bool action ) { kbd_key_released( 6, 3 ); } +static void up63( void ) { kbd_key_released( 6, 3 ); } static void dn64( void ) { kbd_key_pressed( 6, 4 ); } -static void up64( bool action ) { kbd_key_released( 6, 4 ); } +static void up64( void ) { kbd_key_released( 6, 4 ); } static void dn70( void ) { kbd_key_pressed( 7, 0 ); } -static void up70( bool action ) { kbd_key_released( 7, 0 ); } +static void up70( void ) { kbd_key_released( 7, 0 ); } static void dn71( void ) { kbd_key_pressed( 7, 1 ); } -static void up71( bool action ) { kbd_key_released( 7, 1 ); } +static void up71( void ) { kbd_key_released( 7, 1 ); } static void dn72( void ) { kbd_key_pressed( 7, 2 ); } -static void up72( bool action ) { kbd_key_released( 7, 2 ); } +static void up72( void ) { kbd_key_released( 7, 2 ); } static void dn73( void ) { kbd_key_pressed( 7, 3 ); } -static void up73( bool action ) { kbd_key_released( 7, 3 ); } +static void up73( void ) { kbd_key_released( 7, 3 ); } static void dn74( void ) { kbd_key_pressed( 7, 4 ); } -static void up74( bool action ) { kbd_key_released( 7, 4 ); } +static void up74( void ) { kbd_key_released( 7, 4 ); } static void dn80( void ) { kbd_key_pressed( 8, 0 ); } -static void up80( bool action ) { kbd_key_released( 8, 0 ); } +static void up80( void ) { kbd_key_released( 8, 0 ); } static void dn81( void ) { kbd_key_pressed( 8, 1 ); } -static void up81( bool action ) { kbd_key_released( 8, 1 ); } +static void up81( void ) { kbd_key_released( 8, 1 ); } static void dn82( void ) { kbd_key_pressed( 8, 2 ); } -static void up82( bool action ) { kbd_key_released( 8, 2 ); } +static void up82( void ) { kbd_key_released( 8, 2 ); } static void dn83( void ) { kbd_key_pressed( 8, 3 ); } -static void up83( bool action ) { kbd_key_released( 8, 3 ); } +static void up83( void ) { kbd_key_released( 8, 3 ); } static void dn84( void ) { kbd_key_pressed( 8, 4 ); } -static void up84( bool action ) { kbd_key_released( 8, 4 ); } +static void up84( void ) { kbd_key_released( 8, 4 ); } static void dnON( void ) { kbd_on_pressed(); } -static void upON( bool action ) { kbd_on_released(); } +static void upON( void ) { kbd_on_released(); } static void dnZelda( void ) {} -static void upZelda( bool action ) { load_file( "zeldahp.dir" ); } -// static void upZelda(bool action) { load_file("Arkalite.lib"); } +static void upZelda( void ) { load_file( "zeldahp.dir" ); } const int pox = 2; const int poy = 55; @@ -137,117 +136,116 @@ static KBMapping kb_sdl_mapping[] = { }; static Button calc_buttons[] = { + {0, pox + xstart + ( xspacing * 0 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "A", + dn14, up14}, + { 1, pox + xstart + ( xspacing * 1 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "B", + dn84, up84}, + { 2, pox + xstart + ( xspacing * 2 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "C", + dn83, up83}, + { 3, pox + xstart + ( xspacing * 3 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "D", + dn82, up82}, + { 4, pox + xstart + ( xspacing * 4 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "E", + dn81, up81}, + { 5, pox + xstart + ( xspacing * 5 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "F", + dn80, up80}, - { 0, pox + xstart + ( xspacing * 0 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "A", - dn14, up14 }, - { 1, pox + xstart + ( xspacing * 1 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "B", - dn84, up84 }, - { 2, pox + xstart + ( xspacing * 2 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "C", - dn83, up83 }, - { 3, pox + xstart + ( xspacing * 3 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "D", - dn82, up82 }, - { 4, pox + xstart + ( xspacing * 4 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "E", - dn81, up81 }, - { 5, pox + xstart + ( xspacing * 5 ), ystart + ( 0 * yspacing ) + poy, pow1, poh1, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", "", "F", - dn80, up80 }, + { 6, pox + xstart + ( xspacing * 0 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "MTH", + "RAD", "POLAR", "G", dn24, up24}, + { 7, pox + xstart + ( xspacing * 1 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "PRG", "", + "CHARS", "H", dn74, up74}, + { 8, pox + xstart + ( xspacing * 2 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "CST", "", + "MODES", "I", dn73, up73}, + { 9, pox + xstart + ( xspacing * 3 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "VAR", "", + "MEMORY", "J", dn72, up72}, + { 10, pox + xstart + ( xspacing * 4 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "^", "", + "STACK", "K", dn71, up71}, + { 11, pox + xstart + ( xspacing * 5 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "NXT", + "PREV", "MENU", "L", dn70, up70}, - { 6, pox + xstart + ( xspacing * 0 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "MTH", - "RAD", "POLAR", "G", dn24, up24 }, - { 7, pox + xstart + ( xspacing * 1 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "PRG", "", - "CHARS", "H", dn74, up74 }, - { 8, pox + xstart + ( xspacing * 2 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "CST", "", - "MODES", "I", dn73, up73 }, - { 9, pox + xstart + ( xspacing * 3 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "VAR", "", - "MEMORY", "J", dn72, up72 }, - { 10, pox + xstart + ( xspacing * 4 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "^", "", - "STACK", "K", dn71, up71 }, - { 11, pox + xstart + ( xspacing * 5 ), ystart + ( 1 * yspacing ) + poy + 10, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "NXT", - "PREV", "MENU", "L", dn70, up70 }, + { 12, pox + xstart + ( xspacing * 0 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "'", "UP", + "HOME", "M", dn04, up04}, + { 13, pox + xstart + ( xspacing * 1 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "STO", + "REF", "RCL", "N", dn64, up64}, + { 14, pox + xstart + ( xspacing * 2 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "EVAL", + "->NUM", "UNDO", "O", dn63, up63}, + { 15, pox + xstart + ( xspacing * 3 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "<", + "PICTURE", "", "P", dn62, up62}, + { 16, pox + xstart + ( xspacing * 4 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "v", + "VIEW", "", "Q", dn61, up61}, + { 17, pox + xstart + ( xspacing * 5 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, ">", + "SWAP", "", "R", dn60, up60}, - { 12, pox + xstart + ( xspacing * 0 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "'", "UP", - "HOME", "M", dn04, up04 }, - { 13, pox + xstart + ( xspacing * 1 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "STO", - "REF", "RCL", "N", dn64, up64 }, - { 14, pox + xstart + ( xspacing * 2 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "EVAL", - "->NUM", "UNDO", "O", dn63, up63 }, - { 15, pox + xstart + ( xspacing * 3 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "<", - "PICTURE", "", "P", dn62, up62 }, - { 16, pox + xstart + ( xspacing * 4 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "v", - "VIEW", "", "Q", dn61, up61 }, - { 17, pox + xstart + ( xspacing * 5 ), ystart + ( 2 * yspacing ) + poy + 20, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, ">", - "SWAP", "", "R", dn60, up60 }, + { 18, pox + xstart + ( xspacing * 0 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "SIN", + "ASIN", "tet", "S", dn34, up34}, + { 19, pox + xstart + ( xspacing * 1 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "COS", + "ACOS", "", "T", dn54, up54}, + { 20, pox + xstart + ( xspacing * 2 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "TAN", + "ATAN", "Sig", "U", dn53, up53}, + { 21, pox + xstart + ( xspacing * 3 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "SQ x", + "xx", "x SQ y", "V", dn52, up52}, + { 22, pox + xstart + ( xspacing * 4 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "yx", + "10x", "LOG", "W", dn51, up51}, + { 23, pox + xstart + ( xspacing * 5 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "1/x", + "ex", "LN", "X", dn50, up50}, - { 18, pox + xstart + ( xspacing * 0 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "SIN", - "ASIN", "tet", "S", dn34, up34 }, - { 19, pox + xstart + ( xspacing * 1 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "COS", - "ACOS", "", "T", dn54, up54 }, - { 20, pox + xstart + ( xspacing * 2 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "TAN", - "ATAN", "Sig", "U", dn53, up53 }, - { 21, pox + xstart + ( xspacing * 3 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "SQ x", - "xx", "x SQ y", "V", dn52, up52 }, - { 22, pox + xstart + ( xspacing * 4 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "yx", - "10x", "LOG", "W", dn51, up51 }, - { 23, pox + xstart + ( xspacing * 5 ), ystart + ( 3 * yspacing ) + poy + 30, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "1/x", - "ex", "LN", "X", dn50, up50 }, + { 24, pox + xstart + ( xspacing * 0 ), ystart + ( 4 * yspacing ) + poy + 40, enter_w, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "ENTER", + "EQUATION", "MATRIX", "", dn44, up44}, + { 25, enter_w - pow1 + pox + xstart + ( xspacing * 1 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, + BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "+/-", "EDIT", "CMD", "Y", dn43, up43}, + { 26, enter_w - pow1 + pox + xstart + ( xspacing * 2 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, + BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "EEX", "PURG", "ARG", "Z", dn42, up42}, + { 27, enter_w - pow1 + pox + xstart + ( xspacing * 3 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, + BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "DEL", "CLEAR", "", "", dn41, up41}, + { 28, enter_w - pow1 + pox + xstart + ( xspacing * 4 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, + BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "<-", "DROP", "", "", dn40, up40}, - { 24, pox + xstart + ( xspacing * 0 ), ystart + ( 4 * yspacing ) + poy + 40, enter_w, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "ENTER", - "EQUATION", "MATRIX", "", dn44, up44 }, - { 25, enter_w - pow1 + pox + xstart + ( xspacing * 1 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, - BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "+/-", "EDIT", "CMD", "Y", dn43, up43 }, - { 26, enter_w - pow1 + pox + xstart + ( xspacing * 2 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, - BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "EEX", "PURG", "ARG", "Z", dn42, up42 }, - { 27, enter_w - pow1 + pox + xstart + ( xspacing * 3 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, - BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "DEL", "CLEAR", "", "", dn41, up41 }, - { 28, enter_w - pow1 + pox + xstart + ( xspacing * 4 ), ystart + ( 4 * yspacing ) + poy + 40, pow1, poh2, - BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "<-", "DROP", "", "", dn40, up40 }, + { 29, pox + xstart + ( xspacing * 0 ), ystart + ( 5 * yspacing ) + poy + 50, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "alpha", + "USER", "ENTRY", "", dn35, up35}, + { 30, pox + xstart + ( xspacing2 * 1 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "7", "", + "SOLVE", "", dn33, up33}, + { 31, pox + xstart + ( xspacing2 * 2 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "8", "", + "PLOT", "", dn32, up32}, + { 32, pox + xstart + ( xspacing2 * 3 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "9", "", + "SYMBOLIC", "", dn31, up31}, + { 33, pox + xstart + ( xspacing2 * 4 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "/", + "( )", "#", "", dn30, up30}, - { 29, pox + xstart + ( xspacing * 0 ), ystart + ( 5 * yspacing ) + poy + 50, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "alpha", - "USER", "ENTRY", "", dn35, up35 }, - { 30, pox + xstart + ( xspacing2 * 1 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "7", "", - "SOLVE", "", dn33, up33 }, - { 31, pox + xstart + ( xspacing2 * 2 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "8", "", - "PLOT", "", dn32, up32 }, - { 32, pox + xstart + ( xspacing2 * 3 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "9", "", - "SYMBOLIC", "", dn31, up31 }, - { 33, pox + xstart + ( xspacing2 * 4 ), ystart + ( 5 * yspacing ) + poy + 50, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "/", - "( )", "#", "", dn30, up30 }, + { 34, pox + xstart + ( xspacing * 0 ), ystart + ( 6 * yspacing ) + poy + 60, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "red", + "", "", dn25, up25}, + { 35, pox + xstart + ( xspacing2 * 1 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "4", "", + "TIME", "", dn23, up23}, + { 36, pox + xstart + ( xspacing2 * 2 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "5", "", + "STAT", "", dn22, up22}, + { 37, pox + xstart + ( xspacing2 * 3 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "6", "", + "UNITS", "", dn21, up21}, + { 38, pox + xstart + ( xspacing2 * 4 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "X", + "[ ]", "_", "", dn20, up20}, - { 34, pox + xstart + ( xspacing * 0 ), ystart + ( 6 * yspacing ) + poy + 60, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "red", - "", "", dn25, up25 }, - { 35, pox + xstart + ( xspacing2 * 1 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "4", "", - "TIME", "", dn23, up23 }, - { 36, pox + xstart + ( xspacing2 * 2 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "5", "", - "STAT", "", dn22, up22 }, - { 37, pox + xstart + ( xspacing2 * 3 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "6", "", - "UNITS", "", dn21, up21 }, - { 38, pox + xstart + ( xspacing2 * 4 ), ystart + ( 6 * yspacing ) + poy + 60, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "X", - "[ ]", "_", "", dn20, up20 }, + { 39, pox + xstart + ( xspacing * 0 ), ystart + ( 7 * yspacing ) + poy + 70, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", + "green", "", dn15, up15}, + { 40, pox + xstart + ( xspacing2 * 1 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "1", "", + "I/O", "", dn13, up13}, + { 41, pox + xstart + ( xspacing2 * 2 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "2", "", + "LIBRARY", "", dn12, up12}, + { 42, pox + xstart + ( xspacing2 * 3 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "3", "", + "EQ LIB", "", dn11, up11}, + { 43, pox + xstart + ( xspacing2 * 4 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "-", + "<< >>", "\" \"", "", dn10, up10}, - { 39, pox + xstart + ( xspacing * 0 ), ystart + ( 7 * yspacing ) + poy + 70, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "", "", - "green", "", dn15, up15 }, - { 40, pox + xstart + ( xspacing2 * 1 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "1", "", - "I/O", "", dn13, up13 }, - { 41, pox + xstart + ( xspacing2 * 2 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "2", "", - "LIBRARY", "", dn12, up12 }, - { 42, pox + xstart + ( xspacing2 * 3 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "3", "", - "EQ LIB", "", dn11, up11 }, - { 43, pox + xstart + ( xspacing2 * 4 ), ystart + ( 7 * yspacing ) + poy + 70, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "-", - "<< >>", "\" \"", "", dn10, up10 }, + { 44, pox + xstart + ( xspacing * 0 ), ystart + ( 8 * yspacing ) + poy + 80, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "ON", + "CONT", "OFF", "CANCEL", dnON, upON}, + { 45, pox + xstart + ( xspacing2 * 1 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "0", "=", + "->", "", dn03, up03}, + { 46, pox + xstart + ( xspacing2 * 2 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, ".", ",", + "back", "", dn02, up02}, + { 47, pox + xstart + ( xspacing2 * 3 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "SPC", + "pi", "rad", "", dn01, up01}, + { 48, pox + xstart + ( xspacing2 * 4 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "+", "{}", + ": :", "", dn00, up00}, - { 44, pox + xstart + ( xspacing * 0 ), ystart + ( 8 * yspacing ) + poy + 80, pow1, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "ON", - "CONT", "OFF", "CANCEL", dnON, upON }, - { 45, pox + xstart + ( xspacing2 * 1 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "0", "=", - "->", "", dn03, up03 }, - { 46, pox + xstart + ( xspacing2 * 2 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, ".", ",", - "back", "", dn02, up02 }, - { 47, pox + xstart + ( xspacing2 * 3 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "SPC", - "pi", "rad", "", dn01, up01 }, - { 48, pox + xstart + ( xspacing2 * 4 ), ystart + ( 8 * yspacing ) + poy + 80, pow2, poh2, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "+", "{}", - ": :", "", dn00, up00 }, - - { 49, pox + xstart, ystart + ( 9 * yspacing ) + poy + 90, 130, 20, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "Game", "", "", "", dnZelda, - upZelda }, - { 50, pox + xstart, poy, 0, 0, 0, NULL, NULL, NULL, NULL, NULL } + { 49, pox + xstart, ystart + ( 9 * yspacing ) + poy + 90, 130, 20, BUTTON_B1RELEASE | BUTTON_B2TOGGLE, "Game", "", "", "", dnZelda, + upZelda }, + { 50, pox + xstart, poy, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL} }; void pcalc_init() { gui_initKeyboard( calc_buttons ); } @@ -264,8 +262,8 @@ void pcalc_up( int mx, int my, int mb ) { button_mouse_up( calc_buttons, mx, my, void pcalc_kb_down( SDL_Keycode sdl_event ) { - /* printf( "%d\n", SDLK_0 ); */ KBMapping* mapping = kb_sdl_mapping; + while ( mapping->SDL_event_id ) { if ( sdl_event == mapping->SDL_event_id ) { mapping->down(); @@ -278,9 +276,10 @@ void pcalc_kb_down( SDL_Keycode sdl_event ) void pcalc_kb_up( SDL_Keycode sdl_event ) { KBMapping* mapping = kb_sdl_mapping; + while ( mapping->SDL_event_id ) { if ( sdl_event == mapping->SDL_event_id ) { - mapping->up( true ); + mapping->up(); break; } mapping++; diff --git a/src/pcalc.h b/src/pcalc.h index b4d10c2..8142450 100644 --- a/src/pcalc.h +++ b/src/pcalc.h @@ -8,7 +8,7 @@ typedef struct { SDL_Keycode SDL_event_id; void ( *down )( void ); - void ( *up )( bool action ); + void ( *up )( void ); } KBMapping; extern void pcalc_init(); diff --git a/src/pfiles.c b/src/pfiles.c index 908f58d..bb043ff 100644 --- a/src/pfiles.c +++ b/src/pfiles.c @@ -19,7 +19,6 @@ void getExePath() memset( programPath, 0, sizeof( programPath ) ); memset( temp, 0, sizeof( temp ) ); - // setWorkingPath(programPath); char result[ PATH_MAX ]; ssize_t count = readlink( "/proc/self/exe", result, PATH_MAX ); const char* path; @@ -70,20 +69,17 @@ void load_file( char* name ) if ( !buf ) return; - // f = pack_fopen(name, "r"); f = fopen( name, "r" ); if ( !f ) { free( buf ); return; } int res = ( int )fread( buf, sizeof( char ), fsize, f ); - if ( res != fsize ) { // pack_fread + if ( res != fsize ) { free( buf ); - // pack_fclose(f); fclose( f ); return; } - // pack_fclose(f); fclose( f ); if ( memcmp( buf, "HPHP48-", 7 ) ) { diff --git a/src/ports.c b/src/ports.c index f95a6a5..1c2cf4d 100644 --- a/src/ports.c +++ b/src/ports.c @@ -4,6 +4,9 @@ #include "bus.h" #include "ports.h" +#define PORT1_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */ +#define PORT2_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */ + static byte current_bank; static byte* port2; static address port2mask; @@ -32,8 +35,6 @@ void ports_init( void ) current_bank = 0; } -void ports_exit( void ) {} - void ports_switch_bank( address adr ) { bool need_remap = false; @@ -42,20 +43,19 @@ void ports_switch_bank( address adr ) current_bank = ( ( byte )adr >> 1 ) & 0x1F; if ( port2 ) { bus_info.nce3_data = port2 + ( ( current_bank << 18 ) & port2mask ); - if ( bus_info.nce3_cfg ) { + + if ( bus_info.nce3_cfg ) need_remap = true; - } } } if ( !bus_info.ben != !( adr & 0x40 ) ) { bus_info.ben = ( adr & 0x40 ) ? true : false; - if ( bus_info.nce3_cfg ) { + + if ( bus_info.nce3_cfg ) need_remap = true; - } } - if ( need_remap ) { + if ( need_remap ) bus_remap(); - } } byte ports_card_detect( void ) @@ -69,5 +69,6 @@ byte ports_card_detect( void ) x |= 0x4; if ( !bus_info.ce2_r_o ) x |= 0x8; + return x; } diff --git a/src/ports.h b/src/ports.h index 7e82463..3ee5615 100644 --- a/src/ports.h +++ b/src/ports.h @@ -3,11 +3,7 @@ #include "types.h" -#define PORT1_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */ -#define PORT2_SIZE ( 256 * 1024 ) /* 128Kio in nibbles */ - extern void ports_init( void ); -extern void ports_exit( void ); extern void ports_switch_bank( address adr ); extern byte ports_card_detect( void ); diff --git a/src/ram.c b/src/ram.c index 7b2bf86..16e556c 100644 --- a/src/ram.c +++ b/src/ram.c @@ -9,12 +9,10 @@ static address ram_size = 256 * 1024; // in nibbles, not bytes! void ram_init( void ) { - byte* buf; - - buf = malloc( ram_size ); - if ( !buf ) { + byte* buf = malloc( ram_size ); + if ( !buf ) exit( 0x20 ); - } + memset( buf, 0, ram_size ); bus_info.ram_data = buf; bus_info.ram_mask = ram_size - 1; diff --git a/src/timers.c b/src/timers.c index b002815..36a6b3e 100644 --- a/src/timers.c +++ b/src/timers.c @@ -19,52 +19,50 @@ dword timer2_value; void timer1_update( void ) { - if ( timer2_control & TIMER_RUN ) { - timer1_value--; - timer1_value &= 0xF; + if ( !( timer2_control & TIMER_RUN ) ) + return; - if ( timer1_value & 0x8 ) { - if ( timer1_control & TIMER1_WAKE ) { - timer1_control |= TIMER1_SRQ; + timer1_value--; + timer1_value &= 0xF; - if ( cpu.shutdown ) { - cpu.shutdown = false; - timer1_control &= ~TIMER1_WAKE; - } + if ( timer1_value & 0x8 ) { + if ( timer1_control & TIMER1_WAKE ) { + timer1_control |= TIMER1_SRQ; + + if ( cpu.shutdown ) { + cpu.shutdown = false; + timer1_control &= ~TIMER1_WAKE; } - if ( timer1_control & TIMER1_INT ) { - timer1_control |= TIMER1_SRQ; - - if ( !cpu.shutdown ) { - cpu_interrupt(); - } - } - } else { - timer1_control &= ~TIMER1_SRQ; } - } + if ( timer1_control & TIMER1_INT ) { + timer1_control |= TIMER1_SRQ; + + if ( !cpu.shutdown ) + cpu_interrupt(); + } + } else + timer1_control &= ~TIMER1_SRQ; } void timer2_update( void ) { - if ( timer2_control & TIMER_RUN ) { - timer2_value--; - if ( timer2_value & 0x80000000 ) { - if ( timer2_control & TIMER2_WAKE ) { - timer2_control |= TIMER2_SRQ; - if ( cpu.shutdown ) { - cpu.shutdown = 0; - timer2_control &= ~TIMER2_WAKE; - } + if ( !( timer2_control & TIMER_RUN ) ) + return; + + timer2_value--; + if ( timer2_value & 0x80000000 ) { + if ( timer2_control & TIMER2_WAKE ) { + timer2_control |= TIMER2_SRQ; + if ( cpu.shutdown ) { + cpu.shutdown = 0; + timer2_control &= ~TIMER2_WAKE; } - if ( timer2_control & TIMER2_INT ) { - timer2_control |= TIMER2_SRQ; - if ( !cpu.shutdown ) { - cpu_interrupt(); - } - } - } else { - timer2_control &= ~TIMER2_SRQ; } - } + if ( timer2_control & TIMER2_INT ) { + timer2_control |= TIMER2_SRQ; + if ( !cpu.shutdown ) + cpu_interrupt(); + } + } else + timer2_control &= ~TIMER2_SRQ; } diff --git a/src/types.h b/src/types.h index c6efa39..daa2965 100644 --- a/src/types.h +++ b/src/types.h @@ -3,6 +3,8 @@ #include +#define MIN( a, b ) ( ( a ) < ( b ) ? ( a ) : ( b ) ) + typedef unsigned char byte; typedef unsigned short word; typedef unsigned int dword;