From 446a1f7c5aac1b110439c429d24c69261af49f95 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Tue, 13 Sep 2022 02:28:07 -0700 Subject: [PATCH] Fix the build --- examples/{hello4.c => vga.c} | 31 +++++++++++++++++++++++++++---- libc/calls/readv-metal.c | 7 +++---- 2 files changed, 30 insertions(+), 8 deletions(-) rename examples/{hello4.c => vga.c} (68%) diff --git a/examples/hello4.c b/examples/vga.c similarity index 68% rename from examples/hello4.c rename to examples/vga.c index 497d5ab36..262dc2a30 100644 --- a/examples/hello4.c +++ b/examples/vga.c @@ -7,20 +7,37 @@ │ • http://creativecommons.org/publicdomain/zero/1.0/ │ ╚─────────────────────────────────────────────────────────────────*/ #endif -#include "libc/math.h" +#include "libc/calls/calls.h" #include "libc/calls/termios.h" #include "libc/isystem/unistd.h" -#include "libc/str/str.h" +#include "libc/math.h" #include "libc/stdio/stdio.h" +#include "libc/str/str.h" #include "libc/sysv/consts/termios.h" +/** + * @fileoverview Bare Metal VGA TTY demo. + * + * This program can boot as an operating system. Try it out: + * + * make -j8 o//examples/vga.com + * qemu-system-x86_64 -hda o//examples/vga.com -serial stdio + * + * Please note that, by default, APE binaries only use the serial port + * for stdio. To get the VGA console as an added bonus: + * + * STATIC_YOINK("vga_console"); + * + * Should be added to the top of your main() program source file. + */ + STATIC_YOINK("vga_console"); int main(int argc, char *argv[]) { volatile long double x = -.5; volatile long double y = 1.5; struct termios tio; - char buf[4]; + char buf[16]; ssize_t res; if (tcgetattr(0, &tio) != -1) { tio.c_lflag &= ~(ECHO | ICANON); @@ -33,5 +50,11 @@ int main(int argc, char *argv[]) { return -1; } printf("Hello World! %.19Lg\n", atan2l(x, y)); - return 0; + + // read/print loop so machine doesn't reset on metal + for (;;) { + if ((res = readansi(0, buf, 16)) > 0) { + printf("got %`'.*s\r\n", res, buf); + } + } } diff --git a/libc/calls/readv-metal.c b/libc/calls/readv-metal.c index 378167a08..d7476f9bb 100644 --- a/libc/calls/readv-metal.c +++ b/libc/calls/readv-metal.c @@ -37,10 +37,9 @@ ssize_t sys_readv_metal(struct Fd *fd, const struct iovec *iov, int iovlen) { * escape sequences, in response to requests sent to it via write(). * Read & return these if they are available. */ - if (weaken(sys_readv_vga)) { - ssize_t res = weaken(sys_readv_vga)(fd, iov, iovlen); - if (res > 0) - return res; + if (_weaken(sys_readv_vga)) { + ssize_t res = _weaken(sys_readv_vga)(fd, iov, iovlen); + if (res > 0) return res; } /* fall through */ case kFdSerial: