simh-testsetgenerator/tt2500/tt2500_defs.h
Lars Brinkhoff 44cc9f3f6d TT2500: Turtle Terminal 2500, from General Turtle Inc.
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.
2020-12-02 08:17:47 +01:00

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_ */