From ca25a4578e78a3f9a75d85f5472f0e8137472949 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Tue, 5 Feb 2019 21:07:30 -0500 Subject: [PATCH] Serial read support, add embedded Forp repl over serial port to game --- defs.frp | 8 ------ game.exe | Bin 101334 -> 104152 bytes game.frp | 7 ++++++ game.prj | Bin 4930 -> 4850 bytes serial.c | 57 +++++++++++++++++++++++++++++++++++++++++- serial.h | 4 +++ testbed.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 7 files changed, 136 insertions(+), 12 deletions(-) create mode 100755 game.frp diff --git a/defs.frp b/defs.frp index e38ff3b..47b8bf5 100755 --- a/defs.frp +++ b/defs.frp @@ -69,11 +69,3 @@ key const sp begin dup @ not while suspend repeat ( wait for mail ) dup @ 0 rot ! ; - -: start-repl activate - stdout - ' log-emit task-echo ! - begin receive loadstring again ; -task const REPL - -REPL start-repl \ No newline at end of file diff --git a/game.exe b/game.exe index 2fb1c446483def12424426881c28b0cc19ca8f27..309ff68825534f832207c7af5e6b175d983a9323 100755 GIT binary patch delta 15544 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 delta 13561 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 diff --git a/game.frp b/game.frp new file mode 100755 index 0000000..89c3051 --- /dev/null +++ b/game.frp @@ -0,0 +1,7 @@ +: start-repl activate + ' seremit task-emit ! + ' log-emit task-echo ! + begin receive loadstring again ; +task const REPL + +REPL start-repl diff --git a/game.prj b/game.prj index e87f25757207b60bf9191efb57b1449490473c60..71e7b9835e6aafb6cff98faf5053fc5623defa5c 100755 GIT binary patch delta 257 zcmX@4_DOYvIvew@6|S4L*kagtA1!nBixg&Hc<#u+z%qF z43V4v^HegiGBE5|;X1jN|8ji{lPm)R!z;!m3=T}jOdAmzcEZ;Ji_R}7{mA<2zr2GGZ<_b3V@h_frEjM;TzCWb_NBG7%>(w$;GgEsjJ`r z|NI)QAO;r$&NLYLZ}3TJ8)~?#yt<>OY9-<{uQG=fUtF cqz1&E>?~*{2+F5KJ0$RDbPjCw(03zB_KmY&$ delta 348 zcmeyQdPr@9IvewkWiFew*kagtKP+?cixg&Hc<#u+z&d#{Pb|MA1J7D(zjg)&1|}d@ z+WeoVl8IHC;oCBo$+i5K>(?;J0)?%ZzA#K+YGz_&Ol5Lo;$zfetYU0s)MK(>{QqB( z$&K*=qX^Rk#x;yK3{x2nFx+4`!{EuVgu#a4zwc5DzYtF!*I+#lpfNlQ;tUlf&VK9+ z3LG(F9AJ_KOtLblEwu3CW~g3c;m6D%v&6!WiJ=)t){8NKjNoEOUt{ej!JxF<+3){< zhIMzX{)5a3aSaY}a&^&j2Aa*nAjNP6=sSqnFs056^-BLiy4?JO0)TG#4^jeVL-g=5 va07i0aRbDX|Nnh}=KTjb!Ph@@@;?E6L6F_Su0fuTJ|Gi-8aCSrZeauf>@i^y diff --git a/serial.c b/serial.c index 5c2050f..d40ce44 100755 --- a/serial.c +++ b/serial.c @@ -1,3 +1,4 @@ +#include #include #include "serial.h" @@ -6,18 +7,72 @@ int comport = 0; #define SER_LATCH_LO 0 #define SER_LATCH_HI 1 #define SER_TX 0 +#define SER_RX 0 +#define SER_IER 1 #define SER_LCR 3 +#define SER_MCR 4 #define SER_LSR 5 +#define PIC1 0x20 +#define OCW1 0x21 +#define PIC_EOI 0x20 + +// COM1 - IRQ4, COM2 - IRQ3, COM3 - IRQ4, COM4 - IRQ3 +#define SER_IRQ(port) (4 - (port % 2)) +#define SER_VECTOR(irq) (0x08 + (irq)) + +static char readbuf[SER_READ_BUFFER_SIZE]; +static int ireadbufStart = 0; +static volatile int ireadbufLim = 0; +static int irq = 0; + +static void interrupt (*oldSerISR)() = NULL; + +static void interrupt ser_isr() { + while (inp(comport + SER_LSR) & 0x01) { + readbuf[ireadbufLim] = inp(comport + SER_RX); + ireadbufLim = (ireadbufLim + 1) % SER_READ_BUFFER_SIZE; + } + outp(PIC1, PIC_EOI); +} + +static void ser_cleanup() { + if (irq) { + int ocw = inp(OCW1) | (1 << irq); + outp(OCW1, ocw); + setvect(SER_VECTOR(irq), oldSerISR); + irq = 0; + } +} + void ser_init(int port, int baudrate, int protocol) { int far *comport_addr = MK_FP(0x0040, 0x0000); - int lcr; + int lcr, ocw; comport = comport_addr[port]; + irq = SER_IRQ(port); outp(comport + SER_LCR, 0x80); outp(comport + SER_LATCH_HI, baudrate >> 8); outp(comport + SER_LATCH_LO, baudrate & 0xff); outp(comport + SER_LCR, protocol); + outp(comport + SER_MCR, 0x0b); + + oldSerISR = getvect(SER_VECTOR(irq)); + setvect(SER_VECTOR(irq), ser_isr); + ocw = inp(OCW1) & ~(1 << irq); + outp(OCW1, ocw); + outp(comport + SER_IER, 0x01); + + atexit(ser_cleanup); +} + +int ser_poll() { + int result = SER_NODATA; + if (ireadbufStart != ireadbufLim) { + result = readbuf[ireadbufStart]; + ireadbufStart = (ireadbufStart + 1) % SER_READ_BUFFER_SIZE; + } + return result; } void ser_write_byte(char byte) { diff --git a/serial.h b/serial.h index 1bf917a..361cb38 100755 --- a/serial.h +++ b/serial.h @@ -19,6 +19,10 @@ #define BAUD_57600 0x0002 #define BAUD_115200 0x0001 +#define SER_READ_BUFFER_SIZE 0x200 +#define SER_NODATA -1 + void ser_init(int port, int baudrate, int protocol); +int ser_poll(); void ser_write_byte(char byte); void ser_write(char *str); diff --git a/testbed.c b/testbed.c index f511b93..e0e4b13 100755 --- a/testbed.c +++ b/testbed.c @@ -148,17 +148,83 @@ void overworldThink() { scroll(game.player.x - 152, game.player.y - 92); } -int main() { +int main3() { f_init(); f_repl(); + return 0; } -int main2() { + +void f_seremit() { + ser_write_byte(TOP().i); + if (TOP().i == '\n') { + ser_write_byte('\r'); + } + DROP(1); +} + +void f_keyWasPressed() { + TOP().i = keyWasPressed(TOP().i); +} +void f_keyIsDown() { + TOP().i = keyIsDown(TOP().i); +} +void f_drawSprite() { // ( x y sprite -- ) + drawSprite(&sprites[TOP().i * SPRITE_STRIDE], ST2().i, ST1().i); + DROP(3); +} +void f_scroll() { // ( x y -- ) + scroll(ST1().i, TOP().i); +} + +void game_f_init() { + f_init(); + CDEF("seremit", f_seremit); + CDEF("key-pressed", f_keyWasPressed); + CDEF("key-down", f_keyIsDown); + CDEF("sprite", f_drawSprite); + CDEF("scroll", f_scroll); + CDEF("draw", drawScreen); + + f_loadfile("game.frp"); +} + +void f_poll() { + static char line[256] = { 0 }; + + int i = strlen(line); + int value; + for (value = ser_poll(); value != SER_NODATA; value = ser_poll()) { + if (value == '\b' || value == 127) { + i --; + } else { + line[i] = value; + i ++; + } + line[i] = '\0'; + ser_write_byte(value); // echo + + if (value == '\r') { + line[i - 1] = '\n'; + ser_write_byte('\n'); + PUSHS(line); + f_runstring("REPL send"); + f_taskloop(); + i = 0; + line[i] = '\0'; + } + } +} + +int main() { game_init(); + game_f_init(); + ser_init(SER_COM2, BAUD_19200, SER_8N1); - ser_write("JORTS QUEST DEBUG OUTPUT\r\n"); while (!keyIsDown(K_ESC)) { kbd_debounce(); + f_poll(); + if (game.state == STATE_MAP) { overworldThink(); } else if (game.state == STATE_DIALOG) {