+TODO
+- Probe what memory banks are present up to the full 640K that might be present
+- Support for the retro adapters (CF2+ etc)
+- Autodetect silicon ramdisk
+- Figure out the DPB and how to get images onto the CF for ROM CP/M to run
+- Floppy features support
+
The following MTX512 features are supported
- 6845 based colour text display attributes yet) as /dev/tty1
- VDP based graphics display (equivalent to MSX1 but on ports 1 and 2) with
(and add -diag-whatever as needed)
This flips the box into pure RAM mode, loads the image at 0x100 and runs it
-fro there with the root floppy as mfloppy/ref.fs which needs to be a
+from there with the root floppy as mfloppy/ref.fs which needs to be a
suitable image. I'm currently using an 80 track image, but 40 will work
fine (40 in 80 won't yet). It's quicker than booting CP/M and loading
the image.
* We only support normal block I/O not swap.
*/
-static int fd_transfer(uint8_t minor, bool is_read, uint8_t rawflag)
+static int fd_transfer(uint_fast8_t minor, bool is_read, uint_fast8_t rawflag)
{
uint16_t nb = 0;
int tries;
return -1;
}
-int fd_open(uint8_t minor, uint16_t flag)
+int fd_open(uint_fast8_t minor, uint16_t flag)
{
flag;
if(minor >= MAX_FD) {
return 0;
}
-int fd_read(uint8_t minor, uint8_t rawflag, uint8_t flag)
+int fd_read(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag)
{
flag;
return fd_transfer(minor, true, rawflag);
}
-int fd_write(uint8_t minor, uint8_t rawflag, uint8_t flag)
+int fd_write(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag)
{
flag;
return fd_transfer(minor, false, rawflag);
#define __DEVFD_DOT_H__
/* public interface */
-int fd_read(uint8_t minor, uint8_t rawflag, uint8_t flag);
-int fd_write(uint8_t minor, uint8_t rawflag, uint8_t flag);
-int fd_open(uint8_t minor, uint16_t flag);
+int fd_read(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag);
+int fd_write(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag);
+int fd_open(uint_fast8_t minor, uint16_t flag);
void fd_motor_timer(void);
/* low level interface */
__sfr __at 0x00 lpstrobel;
__sfr __at 0x04 lpdata; /* Data on write, status+strobe clr on read */
-int lpr_open(uint8_t minor, uint16_t flag)
+int lpr_open(uint_fast8_t minor, uint16_t flag)
{
minor;
flag; // shut up compiler
return 0;
}
-int lpr_close(uint8_t minor)
+int lpr_close(uint_fast8_t minor)
{
minor; // shut up compiler
return 0;
}
-int lpr_write(uint8_t minor, uint8_t rawflag, uint8_t flag)
+int lpr_write(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag)
{
int c = udata.u_count;
char *p = udata.u_base;
#ifndef __DEVLPR_DOT_H__
#define __DEVLPR_DOT_H__
-int lpr_open(uint8_t minor, uint16_t flag);
-int lpr_close(uint8_t minor);
-int lpr_write(uint8_t minor, uint8_t rawflag, uint8_t flag);
+int lpr_open(uint_fast8_t minor, uint16_t flag);
+int lpr_close(uint_fast8_t minor);
+int lpr_write(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag);
#endif
#define NUM_SIL 4
-static int sil_transfer(uint8_t minor, bool is_read, uint8_t rawflag)
+static int sil_transfer(uint_fast8_t minor, bool is_read, uint_fast8_t rawflag)
{
int ct = 0;
int map = 0;
return ct << BLKSHIFT;
}
-int sil_open(uint8_t minor, uint16_t flag)
+int sil_open(uint_fast8_t minor, uint16_t flag)
{
flag;
if(minor >= NUM_SIL) {
return 0;
}
-int sil_read(uint8_t minor, uint8_t rawflag, uint8_t flag)
+int sil_read(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag)
{
flag;minor;
return sil_transfer(minor, true, rawflag);
}
-int sil_write(uint8_t minor, uint8_t rawflag, uint8_t flag)
+int sil_write(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag)
{
flag;minor;
return sil_transfer(minor, false, rawflag);
#define __DEVSIL_DOT_H__
/* public interface */
-int sil_read(uint8_t minor, uint8_t rawflag, uint8_t flag);
-int sil_write(uint8_t minor, uint8_t rawflag, uint8_t flag);
-int sil_open(uint8_t minor, uint16_t flag);
+int sil_read(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag);
+int sil_write(uint_fast8_t minor, uint_fast8_t rawflag, uint_fast8_t flag);
+int sil_open(uint_fast8_t minor, uint16_t flag);
/* asm banking helper */
void sil_memcpy(uint8_t isread, uint8_t map, uint16_t dptr, uint16_t block, uint16_t dev);
struct vt_repeat keyrepeat;
static uint8_t kbd_timer;
-static char tbuf1[TTYSIZ];
-static char tbuf2[TTYSIZ];
-static char tbuf3[TTYSIZ];
-static char tbuf4[TTYSIZ];
+static uint8_t tbuf1[TTYSIZ];
+static uint8_t tbuf2[TTYSIZ];
+static uint8_t tbuf3[TTYSIZ];
+static uint8_t tbuf4[TTYSIZ];
static uint8_t sleeping;
/* tty1 is the screen tty2 is vdp screen */
/* Output for the system console (kprintf etc) */
-void kputchar(char c)
+void kputchar(uint_fast8_t c)
{
if (c == '\n')
tty_putc(1, '\r');
tty_putc(1, c);
}
-ttyready_t tty_writeready(uint8_t minor)
+ttyready_t tty_writeready(uint_fast8_t minor)
{
uint8_t reg = 0xFF;
if (minor == 3)
return (reg & 4) ? TTY_READY_NOW : TTY_READY_SOON;
}
-void tty_putc(uint8_t minor, unsigned char c)
+void tty_putc(uint_fast8_t minor, uint_fast8_t c)
{
irqflags_t irq;
serialBd = c;
}
-int tty_carrier(uint8_t minor)
+int tty_carrier(uint_fast8_t minor)
{
uint8_t reg = 0xFF;
if (minor == 3)
return (reg & 8) ? 1 : 0;
}
-void tty_sleeping(uint8_t minor)
+void tty_sleeping(uint_fast8_t minor)
{
sleeping |= (1 << minor);
}
-void tty_data_consumed(uint8_t minor)
+void tty_data_consumed(uint_fast8_t minor)
{
/* FIXME:we can now implement flow control stuff */
}
};
/* FIXME: Can we do CSTOPB - need to look into that */
-void tty_setup(uint8_t minor, uint8_t flagbits)
+void tty_setup(uint_fast8_t minor, uint_fast8_t flagbits)
{
irqflags_t flags;
int i;
irqrestore(flags);
}
-int mtxtty_close(uint8_t minor)
+int mtxtty_close(uint_fast8_t minor)
{
irqflags_t flags;
int err = tty_close(minor);
extern void kbd_interrupt(void);
extern void tty_interrupt(void);
-extern int mtxtty_close(uint8_t);
+extern int mtxtty_close(uint_fast8_t);
extern signed char vt_twidth[2];
extern signed char vt_tright[2];