Começo de um projeto:GRAPOS/ArtC

A ideia desse projeto e fazer um sistema em c++ e assembly(que odeio pra caset* usa essa merda)ele teria um mouse, softwares, acesso a memoria esterna entre outros

No momento que escrevo isso eu consegui fazer um sistema de mouse que usa setas e o enter para funcionar:

#include "types.h"
bool click_input = false;
int my = 0;
int mx = 0;
typedef void (*constructor)();
extern "C" constructor* start_ctors;
extern "C" constructor* end_ctors;
unsigned char inportb(unsigned short port);
extern "C" void callConstructors()
{
    for (constructor* i = start_ctors; i != end_ctors; i++) {
        (*i)();
    }
}

unsigned char inportb(unsigned short port);

unsigned char inportb(unsigned short port) {
    unsigned char result;
    asm volatile("inb %1, %0" : "=a"(result) : "Nd"(port));
    return result;
}
void printf(int x, int y, const char* str) {
    // Inicia o ponteiro para a memória de vídeo na posição especificada
    unsigned short* VideoMemory = (unsigned short*)(0xb8000 + (y * 80 + x) * 2);

    // Escreve cada caractere da string na memória de vídeo
    for (int i = 0; str[i] != '\0'; ++i) {
        VideoMemory[i] = (VideoMemory[i] & 0xFF00) | str[i]; // Caractere ASCII na parte baixa do byte
    }
}

// Função de delay simples
void delay(int milliseconds) {
    for (volatile int i = 0; i < milliseconds * 1000000; i++) {
        // Apenas aguarda
    }
}

void clearScreen() {
    // Implementação básica: preenche a tela com espaços em branco
    static unsigned short* VideoMemory = (unsigned short*)0xb8000;
    for (int i = 0; i < 80 * 25; i++) {
        VideoMemory[i] = (VideoMemory[i] & 0xFF00) | ' ';
    }
}

extern "C" void kernelMain(void* multiboot_structure, uint32_t magicnumber) {
    char inputBuffer[256];
    int index = 0;

    while(1) {
        if ((inportb(0x64) & 0x01) == 1) {
            // Ler o código da tecla do teclado
            char key = inportb(0x60);

            // Adiciona o código da tecla à buffer de entrada
            inputBuffer[index] = key;
            index++;
            inputBuffer[index] = '\0';  // Adiciona terminador de string

            if(key == 0x48) { // Seta para cima
                my -= 1;
            } else if(key == 0x50) { // Seta para baixo
                my += 1;
            } else if(key == 0x4B) { // Seta para esquerda
                mx -= 1;
            } else if(key == 0x4D) { // Seta para direita
                mx += 1;
            }else if(key == 0x1C) { // Seta para direita
                click_input = true;
            }else{click_input = false;}
        }
        if(click_input == true){
            printf(10,10,"click!");
        }
        printf(mx, my, "<-");
        delay(5);
        clearScreen();
    }
}


É bom o suficiente por agora mais tentarei fazer algo que vc possa calcular(calculadora o imbecil) e um bloco de notas

Comentários