diff --git a/game.exe b/game.exe index 93502fb..25249a6 100755 Binary files a/game.exe and b/game.exe differ diff --git a/game.prj b/game.prj index b40dde2..3135e19 100755 Binary files a/game.prj and b/game.prj differ 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 9708cc3..0000000 Binary files a/testbed.exe and /dev/null differ