1
0
mirror of https://github.com/aap/pdp6.git synced 2026-01-13 23:37:09 +00:00
aap.pdp6/pdp6.h
2015-11-04 11:21:36 +01:00

137 lines
3.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define nelem(a) (sizeof(a)/sizeof(a[0]))
typedef uint64_t word;
typedef uint32_t hword;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
typedef char bool;
enum {
FW = 0777777777777,
RT = 0000000777777,
LT = 0777777000000,
SGN = 0400000000000,
RSGN = 0000000400000,
};
typedef void *Pulse(void);
#define pulse(p) void *p(void)
typedef struct Apr Apr;
struct Apr {
hword ir;
word mi;
word data;
hword pc;
hword ma;
hword mas;
word mb;
word ar;
word mq;
u16 sc, fe;
u8 pr, rlr, rla;
bool run;
bool sw_addr_stop, sw_repeat, sw_mem_disable, sw_power;
bool sw_rim_maint;
/* keys */
bool key_start, key_readin;
bool key_mem_cont, key_inst_cont;
bool key_mem_stop, key_inst_stop;
bool key_io_reset, key_execute;
bool key_dep, key_dep_next;
bool key_ex, key_ex_next;
bool key_rd_off, key_rd_on;
bool key_pt_rd, key_pt_wr;
/* PI */
u8 pio, pir, pih, pi_req;
bool pi_active;
bool pi_ov, pi_cyc;
/* flip-flops */
bool ex_mode_sync, ex_uuo_sync, ex_pi_sync, ex_ill_op, ex_user;
bool pc_chg_flag, ar_ov_flag, ar_cry0_flag, ar_cry1_flag;
bool ar_cry0, ar_cry1;
bool key_ex_st, key_ex_sync;
bool key_dep_st, key_dep_sync;
bool key_rd_wr, key_rim_sbr;
bool mc_rd, mc_wr, mc_rq, mc_stop, mc_stop_sync, mc_split_cyc_sync;
bool cpa_iot_user, cpa_illeg_op, cpa_non_exist_mem,
cpa_clock_en, cpa_clock_flag, cpa_pc_chg_en, cpa_pdl_ov,
cpa_arov_en, cpa_pia33, cpa_pia34, cpa_pia35;
bool cry0_cry1;
/* ?? */
bool mq36;
bool iot_go, a_long, uuo_f1;
/* sbr flip-flops */
bool if1a;
bool af0, af3, af3a;
bool f1a, f4a, f6a;
bool et4_ar_pse;
bool chf5, chf7;
/* temporaries */
bool ex_inh_rel;
bool pi_hold;
int inst;
/* decoded instructions */
bool ch_inc, ch_inc_op, ch_n_inc_op, ch_load, ch_dep;
bool ex_ir_uuo, ir_iot, ir_jrst;
bool fac2, fc_c_acrt, fc_c_aclt;
bool ir_boole;
int ir_boole_op;
bool boole_as_00, boole_as_01, boole_as_10, boole_as_11;
bool ir_fwt, ir_fwt_swap;
bool fwt_00, fwt_01, fwt_10, fwt_11;
bool ir_hwt;
bool hwt_00, hwt_01, hwt_10, hwt_11;
bool ir_memac, ir_memac_mem;
bool iot_blk, iot_dataio;
/* needed for the emulation */
int extpulse;
Pulse *nextpulse;
Pulse *mc_rst1_ret, *art3_ret;
};
extern Apr apr;
void *aprmain(void *p);
void initmem(void);
void wakemem(void);
// 7-2, 7-10
enum {
MEMBUS_MA21 = 0000000000001,
MEMBUS_WR_RQ = 0000000000004,
MEMBUS_RD_RQ = 0000000000010,
MEMBUS_MA_FMC_SEL0 = 0000001000000,
MEMBUS_MA_FMC_SEL1 = 0000002000000,
MEMBUS_MA35_0 = 0000004000000,
MEMBUS_MA35_1 = 0000010000000,
MEMBUS_MA21_0 = 0000020000000,
MEMBUS_MA21_1 = 0000040000000,
MEMBUS_MA20_0 = 0000100000000,
MEMBUS_MA20_1 = 0000200000000,
MEMBUS_MA19_0 = 0000400000000,
MEMBUS_MA19_1 = 0001000000000,
MEMBUS_MA18_0 = 0002000000000,
MEMBUS_MA18_1 = 0004000000000,
MEMBUS_RQ_CYC = 0020000000000,
MEMBUS_MAI_WR_RS = 0100000000000,
MEMBUS_MAI_RD_RS = 0200000000000,
MEMBUS_MAI_ADDR_ACK = 0400000000000,
};
extern word membus0, membus1;
extern word iobus0, iobus1;