--- trunk/src/devices/dev_lpt.c 2007/10/08 16:19:16 19 +++ trunk/src/devices/dev_lpt.c 2007/10/08 16:19:23 20 @@ -25,11 +25,9 @@ * SUCH DAMAGE. * * - * $Id: dev_lpt.c,v 1.2 2005/10/26 14:37:04 debug Exp $ + * $Id: dev_lpt.c,v 1.5 2005/11/13 00:14:09 debug Exp $ * * LPT (parallel printer) controller. - * - * TODO: This is just a dummy. */ #include @@ -43,10 +41,12 @@ #include "memory.h" #include "misc.h" +#include "lptreg.h" + -#define debug fatal +/* #define debug fatal */ -#define TICK_SHIFT 15 +#define TICK_SHIFT 18 #define DEV_LPT_LENGTH 3 struct lpt_data { @@ -56,6 +56,7 @@ int console_handle; unsigned char data; + unsigned char control; }; @@ -85,21 +86,29 @@ switch (relative_addr) { - case 0: if (writeflag == MEM_READ) + case LPT_DATA: + if (writeflag == MEM_READ) odata = d->data; else d->data = idata; break; - default: - if (writeflag == MEM_READ) { - debug("[ lpt (%s): read from %i: UNIMPLEMENTED ]\n", - d->name, (int)relative_addr); - } else { - debug("[ lpt (%s): write to %i, data = 0x%llx: " - "UNIMPLEMENTED ]\n", d->name, (int)relative_addr, - (long long)idata); + case LPT_STATUS: + odata = LPS_NBSY | LPS_NACK | LPS_SELECT | LPS_NERR; + break; + + case LPT_CONTROL: + if (writeflag == MEM_WRITE) { + if (idata != d->control) { + if (idata & LPC_STROBE) { + /* data strobe */ + console_putchar(d->console_handle, + d->data); + } + } + d->control = idata; } + break; } if (writeflag == MEM_READ) @@ -143,7 +152,7 @@ snprintf(name, nlen, "%s", devinit->name); memory_device_register(devinit->machine->memory, name, devinit->addr, - DEV_LPT_LENGTH, dev_lpt_access, d, MEM_DEFAULT, NULL); + DEV_LPT_LENGTH, dev_lpt_access, d, DM_DEFAULT, NULL); machine_add_tickfunction(devinit->machine, dev_lpt_tick, d, TICK_SHIFT); /*