From 6a1464ce1c36ad89844de59a906c52f26ed61475 Mon Sep 17 00:00:00 2001 From: shadlyd15 Date: Sun, 8 May 2022 04:28:09 +0200 Subject: [PATCH] Keyboard direct read from port 60h --- NesUEFI/Makefile | 2 + NesUEFI/NesUEFI.img | Bin 48000000 -> 48000000 bytes NesUEFI/driver/graphics.c | 3 +- NesUEFI/driver/keyboard.c | 48 +++++++++++++-------- NesUEFI/driver/keyboard.h | 3 +- NesUEFI/hal/nes.h | 20 ++++----- NesUEFI/hal/nes_gfx_hal.c | 8 ++-- NesUEFI/hal/nes_key_hal.c | 86 ++++++++++--------------------------- NesUEFI/hal/nes_key_hal.h | 18 +------- NesUEFI/main.c | 6 +-- NesUEFI/main.efi | Bin 11815936 -> 11570176 bytes NesUEFI/ui/ui_gfx.c | 7 ++- OVMF/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes README.md | 8 ++-- 14 files changed, 79 insertions(+), 130 deletions(-) diff --git a/NesUEFI/Makefile b/NesUEFI/Makefile index 145a4af..5c5d8c2 100644 --- a/NesUEFI/Makefile +++ b/NesUEFI/Makefile @@ -40,6 +40,8 @@ OVMF_DIR = ../OVMF CC = gcc OBJCOPY = objcopy +BUILDDIR = bin + %.efi: %.so $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ -j .rela -j .reloc -S --target=$(FORMAT) $*.so $@ diff --git a/NesUEFI/NesUEFI.img b/NesUEFI/NesUEFI.img index 2f12648e294660e7781f83295f68362226cfffa3..6f7ad4cd818664fbaf53ca2865edb43cb8abf670 100644 GIT binary patch delta 57006 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