Custom TTL design by Marvin Minsky. There are two displays: one raster scan for bitmapped characters, and another random scan for vector graphics. There is also a keyboard, and a UART for talking to a host computer. The computer is normally booted off a ROM which reads and starts a secondary loader from the UART. The loader is responsible for reading the payload, which comes in checksummed blocks. The LOAD command accepts files in same format.
104 lines
3.4 KiB
C
104 lines
3.4 KiB
C
/* tt2500_defs.h: TT2500 simulator definitions
|
|
|
|
Copyright (c) 2020, Lars Brinkhoff
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
copy of this software and associated documentation files (the "Software"),
|
|
to deal in the Software without restriction, including without limitation
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
and/or sell copies of the Software, and to permit persons to whom the
|
|
Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
LARS BRINKHOFF BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
Except as contained in this notice, the name of Lars Brinkhoff shall not be
|
|
used in advertising or otherwise to promote the sale, use or other dealings
|
|
in this Software without prior written authorization from Lars Brinkhoff.
|
|
|
|
24-Sep-20 LB New simulator.
|
|
*/
|
|
|
|
#ifndef TT2500_DEFS_H_
|
|
#define TT2500_DEFS_H_ 0
|
|
|
|
#include "sim_defs.h"
|
|
|
|
#define STOP_HALT 1
|
|
#define STOP_IBKPT 2
|
|
#define STOP_ACCESS 3
|
|
|
|
#define FLAG_KB 001
|
|
#define FLAG_RSD 002
|
|
#define INT_2KHZ (001 << 4)
|
|
#define INT_RRD (002 << 4)
|
|
#define INT_60HZ (004 << 4)
|
|
#define STAR_WRAP (001 << 8)
|
|
#define STAR_MINUS1 (002 << 8)
|
|
|
|
/* ALU operations. */
|
|
#define ALU_A 00000
|
|
#define ALU_ANDN 00020
|
|
#define ALU_AND 00040
|
|
#define ALU_NOR 00060
|
|
#define ALU_IOR 02000
|
|
#define ALU_XOR 02020
|
|
#define ALU_MROT 02040
|
|
#define ALU_ROT 04000
|
|
#define ALU_DEC 04020
|
|
#define ALU_XADD 04040
|
|
#define ALU_ADD 04060
|
|
#define ALU_SUB 06000
|
|
#define ALU_XSUB 06020
|
|
#define ALU_INC 06040
|
|
#define ALU_ARS 06060
|
|
|
|
/* Register. */
|
|
#define REG_ALATCH 010
|
|
#define REG_YCOR 020
|
|
#define REG_XCOR 021
|
|
#define REG_SCROLL 022
|
|
#define REG_XR 023
|
|
#define REG_UART 024
|
|
#define REG_DSR 025
|
|
#define REG_KEY 026
|
|
|
|
/* DSR TV on bit. */
|
|
#define DSR_TVON 0010000
|
|
|
|
typedef struct {
|
|
uint16 reg[4];
|
|
uint16 (*read)(uint16 reg);
|
|
void (*write)(uint16 reg, uint16 data);
|
|
} TTDEV;
|
|
|
|
extern t_bool build_dev_tab (void);
|
|
extern void flag_on (uint16 flag);
|
|
extern void flag_off (uint16 flag);
|
|
extern uint16 cpu_alu (uint16 insn, uint16 op, uint16 adata, uint16 bdata);
|
|
extern void dpy_magic (uint16 data, uint16 *r2, uint16 *r3, uint16 r4, uint16 r5);
|
|
extern void dpy_chartv (uint16 data);
|
|
extern void dpy_quit_callback (void);
|
|
extern void crt_line (uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint16 i);
|
|
extern void tv_line (int row, uint8 *data, uint8 *chars);
|
|
extern void tv_refresh (void);
|
|
|
|
extern REG cpu_reg[];
|
|
extern uint16 MEM[], CRM[];
|
|
extern uint16 DSR;
|
|
extern uint8 FONT[];
|
|
extern DEVICE cpu_dev, dpy_dev, crt_dev, tv_dev, key_dev, uart_dev;
|
|
extern TTDEV *dev_tab[];
|
|
extern int C, V, N, Z;
|
|
extern int dpy_quit;
|
|
|
|
extern uint16 tt2500_rom[];
|
|
|
|
#endif /* TT2500_DEFS_H_ */
|