From 56fac176262f250fe536ad0118ce00f873816122 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Tue, 29 Jan 2019 19:35:48 -0500 Subject: [PATCH] Serial port debug output --- game.exe | Bin 66544 -> 67440 bytes game.prj | Bin 4416 -> 4651 bytes serial.c | 32 +++++++++++++++++++++++++++++++ serial.h | 24 ++++++++++++++++++++++++ testbed.c | 53 +++++++++++++++++++++++++++++++++------------------- testbed.exe | Bin 65976 -> 0 bytes 6 files changed, 90 insertions(+), 19 deletions(-) create mode 100755 serial.c create mode 100755 serial.h delete mode 100755 testbed.exe diff --git a/game.exe b/game.exe index 93502fbf4d15f6776f90cb19c7681782a054473d..25249a6a8764075daebb93ed818820758e579b55 100755 GIT binary patch delta 11159 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 delta 172 zcmZ3jazJT=IvexiH5Qw-*uvOYzc4W{Fiif)lg`L8Ig&SAjv-2kT08&dGcJo zY)&QykdlRKEG7%`Co{55F6GbHpTZ~x6jNgS|G$DU8%X*x>H*3B|C1PU8N|RWPDVY3 z6AXVCDj23P=xy#4$YeCoV&DU6(qzzJP-jqMP-ReIP-akKP-IYGkY|tsLS*p&KLY~* DfxasP diff --git a/serial.c b/serial.c new file mode 100755 index 0000000..5c2050f --- /dev/null +++ b/serial.c @@ -0,0 +1,32 @@ +#include +#include "serial.h" + +int comport = 0; + +#define SER_LATCH_LO 0 +#define SER_LATCH_HI 1 +#define SER_TX 0 +#define SER_LCR 3 +#define SER_LSR 5 + +void ser_init(int port, int baudrate, int protocol) { + int far *comport_addr = MK_FP(0x0040, 0x0000); + int lcr; + comport = comport_addr[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); +} + +void ser_write_byte(char byte) { + while (!(inp(comport + SER_LSR) & 0x20)) {} + outp(comport + SER_TX, byte); +} + +void ser_write(char *str) { + for (; *str; str ++) { + ser_write_byte(*str); + } +} diff --git a/serial.h b/serial.h new file mode 100755 index 0000000..1bf917a --- /dev/null +++ b/serial.h @@ -0,0 +1,24 @@ +#define SER_COM1 0 +#define SER_COM2 1 +#define SER_COM3 2 +#define SER_COM4 3 + +#define SER_8N1 0x03 + +#define BAUD_50 0x0900 +#define BAUD_110 0x0417 +#define BAUD_220 0x020c +#define BAUD_300 0x0180 +#define BAUD_600 0x00c0 +#define BAUD_1200 0x0060 +#define BAUD_2400 0x0030 +#define BAUD_4800 0x0018 +#define BAUD_9600 0x000c +#define BAUD_19200 0x0006 +#define BAUD_38400 0x0003 +#define BAUD_57600 0x0002 +#define BAUD_115200 0x0001 + +void ser_init(int port, int baudrate, int protocol); +void ser_write_byte(char byte); +void ser_write(char *str); diff --git a/testbed.c b/testbed.c index aed83c2..5d032f0 100755 --- a/testbed.c +++ b/testbed.c @@ -7,6 +7,7 @@ #include "mouse.h" #include "tiff.h" #include "tiles.h" +#include "serial.h" /*** S C R A T C H ***/ @@ -117,32 +118,46 @@ void game_init() { scroll(0, 0); } +void showDialog() { + game.state = STATE_DIALOG; + game.footer.dy = 1; +} + +void dialogThink() { + if (keyWasPressed(K_SPACE)) { + game.footer.dy = -1; + } + game.footer.y += game.footer.dy; + if (game.footer.dy > 0 && game.footer.y > 24) { + game.footer.y = 24; + game.footer.dy = 0; + } else if (game.footer.dy < 0 && game.footer.y < 0) { + game.footer.y = 0; + game.footer.dy = 0; + game.state = STATE_MAP; + } + setSplitScreen(399 - (game.footer.y << 1)); +} + +void overworldThink() { + if (keyWasPressed(K_SPACE)) { + showDialog(); + } + playerThink(&game.player); + scroll(game.player.x - 152, game.player.y - 92); +} + int main() { game_init(); + ser_init(SER_COM2, BAUD_19200, SER_8N1); + ser_write("JORTS QUEST DEBUG OUTPUT\r\n"); while (!keyIsDown(K_ESC)) { kbd_debounce(); if (game.state == STATE_MAP) { - if (keyWasPressed(K_SPACE)) { - game.state = STATE_DIALOG; - game.footer.dy = 1; - } - playerThink(&game.player); - scroll(game.player.x - 152, game.player.y - 92); + overworldThink(); } else if (game.state == STATE_DIALOG) { - if (keyWasPressed(K_SPACE)) { - game.footer.dy = -1; - } - game.footer.y += game.footer.dy; - if (game.footer.dy > 0 && game.footer.y > 24) { - game.footer.y = 24; - game.footer.dy = 0; - } else if (game.footer.dy < 0 && game.footer.y < 0) { - game.footer.y = 0; - game.footer.dy = 0; - game.state = STATE_MAP; - } - setSplitScreen(399 - (game.footer.y << 1)); + dialogThink(); } drawEntity(&game.player); drawScreen(); diff --git a/testbed.exe b/testbed.exe deleted file mode 100755 index 9708cc39bfd61abfc0a0f6627742f1c1befc80b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65976 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