рдЬрдм рдореИрдВ рд╕реНрдХреВрд▓ рдореЗрдВ рдерд╛ рдФрд░ рд╕рд┐рдирдХреНрд▓реЗрдпрд░ 48K рдХреЗ рд╕реЛрд╡рд┐рдпрдд рдХреНрд▓реЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ / рдЦреЗрд▓рддрд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ 8086 рдХреЗ рдкрдбрд╝реЛрд╕реА рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦрд╛ред
рдЬрдм 486DX66 рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ Z80 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдкрдирд╛ рджреЗрдЦрд╛ред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рд░реЗрдЯреНрд░реЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрдпрд╛рд░ рдХреЛ рд╡рд░реНрддрдорд╛рди рддрдХ рдкрд╣реБрдБрдЪрд╛рдпрд╛ред рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рдореИрдВ рдЦреБрдж рдХреЛ "рдкреАрд╕реА рдбрд┐рдЬрд╛рдЗрдирд░" рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рдЕрд╡рддрд╛рд░ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреБрд░реНрд▓рдн рдФрд░ рдмрд╣реБрдд рд╕реАрдкреАрдпреВ рдХреЗ рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдЦреБрдж рдХреЛ рдПрдХ рдЖрднрд╛рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рддрдм рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рдирд╣реАрдВ рдерд╛, рдлрд┐рд░ рдХреБрдЫ рдФрд░; рдЕрдзрд┐рдХ рдмрд╛рд░ - рд╕рдордпред рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рдкрдирд╛ рдпреВрд░реЛрдкреАрдп рд╕рдВрдШ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕рд╡реАрдПрдо рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдерд╛, рдФрд░ рдПрд▓реАрдЯ рдЗрд╕реЗ рдЦреБрдж рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХреБрдЫ рдкрд░ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдШрд░ рдиреАрдВрд╡ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рд╕реНрдХреВрд▓ рдореЗрдВ, рдЕрдЧрд╛рдерд╛ рдкрд░, рдШрд░ рдкрд░ рдорд┐рдХреНрд░реЛрд╢, рдлрд┐рд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ред рдбреЗрдврд╝ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдХреБрдЫ рдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рднрд╛рдЧ рдЧрдпрд╛ред рдореИрдВ рд╕реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЬреАрдЯреАрдХреЗ + (3.0) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЬреАрдд рдХреЗ рддрд╣рдд рд▓рд┐рдЦрддрд╛ рд╣реВрдВ - рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдХреГрддрд┐ рд╣реИ)ред рдЬреАрдЯреАрдХреЗ + рдкрд░ рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЙрд╕рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓реЗ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдкреЛрд╕реНрдЯ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдЖрдПрдЧреА рдЬреИрд╕рд╛ рдореИрдВ рдЬреАрдЯреАрдХреЗ рдФрд░ рдПрдореБрд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЕрдиреБрдХрд░рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдХреЛрдИ рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрд┐рдк -8 - рдПрдХ рдЧрд╛рдбрд╝реА рдФрд░ рдПрдХ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ ,
рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЕрдкрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВред рдкрд░рд┐рдгрд╛рдо рдХреА рдЦреБрд╢реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджреНрджреЗрд╢реНрдп рдЖрддреНрдо-рдЕрдзреНрдпрдпрди рдерд╛ред рд╣рдореЗрд╢рд╛ рдкреАрдЫреЗ рдХреЗ рдЬрд╡рд╛рдмреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рд╕реЗ рдпрд╛рдж рдХреА рдХрдореА рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкрд╣рд▓реЗ "рдЦреБрдж рдХреЛ рдкреАрдбрд╝рд╛ рджреЗрдирд╛" рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рдЧреНрд▓реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпрд╛рд╕ рд╣реИ рдФрд░ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрдЧрд▓реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдХреЛрдб рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦрд┐рдбрд╝рдХреА рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЪрд┐рдк -8 рдХрд╛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди 64 * 32 рд╣реИ, рдореИрдВрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 8 * 8 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо GtkDrawingArea рдХреЗ рдЙрдкрдпреБрдХреНрдд рдЧреБрдг рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред


рд╡рд░реНрдЪреБрдЕрд▓ рд╕реАрдкреАрдпреВ рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ
typedef struct { uint64_t last_cycle; uint64_t vsync; gboolean pressed; uint8_t last_key; gboolean run; uint8_t delay_timer; uint8_t sound_timer; uint8_t cycle; uint8_t keypad[16]; uint8_t V[16]; uint16_t opcode; uint16_t stack[16]; uint16_t sp; uint16_t I; uint16_t pc; uint8_t video[SCREEN_X][SCREEN_Y]; uint8_t video_mirrored[SCREEN_X][SCREEN_Y]; uint8_t memory[RAM_SIZE]; }_CHIP8; extern _CHIP8 SYS;
рд╢рд╛рдпрдж рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА "рдмрд╣реБрдд рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ" рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдореИрдВ рдЗрд╕реЗ 128 * 64 рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгрд╛ / рднрд╛рдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдлрд┐рд░ рдпрд╣ рдмрдиреА рд░рд╣реАред
Disassembling ROMs рд╕рд░рд▓ рдФрд░ рдЖрджрд┐рдо рд╣реИред
SYS.opcode = SYS.memory[SYS.pc] << 8 | SYS.memory[SYS.pc + 1];
рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реНрд╡рд┐рдЪ / рдХреЗрд╕ рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝реЗ рдлрдВрдХреНрд╢рди рдореЗрдВ "рдмрд╛рдЗрдирд░реА рдореИрдЬрд┐рдХ" рдЖрддрд╛ рд╣реИред
рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рд╕рд╛рде рдбреНрд░рд╛рдЗрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрд╛рдЗрдирд░реА рдЕрдВрдХрдЧрдгрд┐рдд рдПрдХ рд╕рдордЭрджрд╛рд░ рд╡рд┐рд╖рдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдХрд╛ рдЕрдзрд┐рдХ рдерд╛ред рдПрдХ рдпрд╛ рджреЛ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдЬрд▓рд╛ рджрд┐рдпрд╛ "рд╕рдмрдХреЛрд░реНрдЯреЗрдХреНрд╕ рдореЗрдВ" рдЬреЛ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреБрдЫ рдСрдкрдХреЛрдб рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИред рдорд╢реАрди рдХреЛрдб рдЦреБрдж рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ AND рдФрд░ OR рдХреЛ рд╕рдордЭрдирд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдпрд╣ рднреА рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Chip-8 рдПрдХ рдмрдбрд╝реА рдПрдВрдбрд┐рдпрди рдорд╢реАрди рд╣реИред
рдореБрдЦреНрдп рд▓реВрдк рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдШреВрдорддрд╛ рд╣реИ, 24 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреАрдЯреАрдХреЗ рдХреЛ рдореБрдЦреНрдп рд▓реВрдк рд╕реЗ рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ 1/24 рд╕реЗрдХрдВрдб рдореЗрдВ, рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдХреЛ рдорд┐рд░рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ g_idle_add рдХреЗ рд╕рд╛рде рд╣рдо рдореБрдЦреНрдп рд▓реВрдк рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд░рд┐рдлреНрд░реЗрд╢_рд╕реНрдХреНрд░реАрди рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реА рдлрдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рд╕реЗ рдбреНрд░рд╛рдЗрдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдЪрд┐рддреНрд░рд┐рдд рдпрд╛ рдордЬрд╛рдХрд┐рдпрд╛ рди рд╣реЛ рдФрд░ рдмрд╣реБрдд рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ / рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рди рд╣реЛред
void *chip8_vcpu_pipeline(void *data) { [тАж...........] g_idle_add((GSourceFunc) refresh_screen, NULL); [тАж............] return (0); }
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ GtkDrawingArea рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреЙрд▓рдмреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рдбреНрд░рд╛рдЗрдВрдЧ рд╣реЛрдВрдЧреЗред
gboolean draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data) { cr = gdk_cairo_create( gtk_widget_get_window (widget)); cairo_set_source_rgb(cr, 0, 0, 0); cairo_paint(cr); for ( int x = 0; x < SCREEN_X; x++ ) { for ( int y = 0; y < SCREEN_Y; y++ ) { SYS.video_mirrored[x][y] ? set_dot(cr, x, y) : clear_dot(cr, x, y); } } cairo_destroy(cr); return FALSE; }
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди: рдПрдХ рдмрд┐рдВрджреБ рдбрд╛рд▓реЗрдВ / рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ
void set_dot(cairo_t *cr, int32_t cx, int32_t cy) { cairo_set_source_rgb(cr, 255, 255, 255); cairo_set_line_width(cr, 2); cairo_rectangle(cr, cx * 8, cy * 8, 8, 8); cairo_fill(cr); cairo_stroke(cr); } void clear_dot(cairo_t *cr, int32_t cx, int32_t cy) { cairo_set_source_rgb(cr, 0, 0, 0); cairo_set_line_width(cr, 2); cairo_rectangle(cr, cx * 8, cy * 8, 8, 8); cairo_fill(cr); cairo_stroke(cr); }
GtkDrawingArea рдХреЗ рдбреНрд░рд╛ рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╣рдо draw_cb рдлрдВрдХреНрд╢рди рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдм рдПрдХ рдлреНрд░реЗрдо рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдпрд╣ рд░рд┐рдлреНрд░реЗрд╢_рд╕реНрдХреНрд░реАрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ GUI.screen GtkDrawingArea рд╣реИред
gboolean refresh_screen(void) { gtk_widget_queue_draw_area(GTK_WIDGET(GUI.screen), 0, 0, 512, 256); return FALSE; }
рдЪреВрдВрдХрд┐ рд╣рдордиреЗ g_idle_add рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо FALSE рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдПрдХрд▓ рд╣реЛред
рдЕрдм рдХреАрдмреЛрд░реНрдб рд╣реИред рджреЛ рдХрд╛рд░реНрдп рд▓рд┐рдЦрдирд╛
gboolean on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { switch(event->keyval) { case GDK_KEY_1: SYS.keypad[1]=1; SYS.last_key = 1; break; case GDK_KEY_2: SYS.keypad[2]=1; SYS.last_key = 2; break; тАж........
рдФрд░ on_key_release рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ рдХреА-рдкреНрд░реЗрд╕-рдЗрд╡реЗрдВрдЯ рдФрд░ рдХреА-рд░рд┐рд▓реАрдЬрд╝-рдЗрд╡реЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рд╛ - рдЪрд┐рдк -8 рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдЧрддрд┐ рдХреНрдпрд╛ рд╣реИ, рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рдЖрдВрдЦ рд╕реЗ рдЪрдХреНрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдЪреБрдирд╛ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд▓рддреА рддрд╕реНрд╡реАрд░, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд┐рдВрдЧ рдкреЛрдВрдЧ рдЦреЗрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░, рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
