mirror of
https://github.com/aap/pdp6.git
synced 2026-01-13 15:27:46 +00:00
emu: some progress on the 340; fixed normalize return
This commit is contained in:
parent
eacf915bfb
commit
42644740f9
16
emu/apr.c
16
emu/apr.c
@ -613,6 +613,15 @@ setreq(IOBus *bus, int dev, u8 pia)
|
||||
}
|
||||
}
|
||||
}
|
||||
void
|
||||
setreq2(IOBus *bus, int dev, u8 req)
|
||||
{
|
||||
req &= 0177;
|
||||
if(bus && bus->dev[dev].req != req){
|
||||
bus->dev[dev].req = req;
|
||||
recalc_req(bus);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
recalc_cpa_req(Apr *apr)
|
||||
@ -1214,7 +1223,7 @@ defpulse(blt_t0)
|
||||
apr->fsf1 || apr->fpf1 || apr->faf2 ? apr->c.ar>>27 & 0777 : \
|
||||
apr->fpf2 || apr->faf1 ? apr->c.mb>>27 & 0777 : 0)
|
||||
#define SC_PAD apr->sc ^= SC_DATA
|
||||
#define SC_CRY apr->sc += (~apr->sc & SC_DATA) << 1
|
||||
#define SC_CRY apr->sc = (apr->sc + ((~apr->sc & SC_DATA) << 1))&0777
|
||||
// 6-7
|
||||
#define SHC_ASHC (apr->inst == ASHC || apr->nrf2 || apr->faf3)
|
||||
#define SHC_DIV ((IR_DIV || IR_FDV) && !apr->nrf2)
|
||||
@ -1900,7 +1909,8 @@ defpulse(ds_div_t0)
|
||||
|
||||
defpulse(nrt6)
|
||||
{
|
||||
pulse(apr, &et10, 0); // 5-5
|
||||
/* HACK: fake delay so values will settle */
|
||||
pulse(apr, &et10, 1); // 5-5
|
||||
}
|
||||
|
||||
defpulse(nrt5a)
|
||||
@ -1918,7 +1928,7 @@ defpulse(nrt5)
|
||||
|
||||
defpulse(nrt4)
|
||||
{
|
||||
apr->n.ar |= apr->n.ar&0400777777777 | ((word)apr->sc&0377)<<27; // 6-4, 6-9
|
||||
apr->n.ar = apr->n.ar&0400777777777 | ((word)apr->sc&0377)<<27; // 6-4, 6-9
|
||||
pulse(apr, &nrt6, 0); // 6-27
|
||||
}
|
||||
|
||||
|
||||
563
emu/chargen.inc
Normal file
563
emu/chargen.inc
Normal file
@ -0,0 +1,563 @@
|
||||
enum {
|
||||
I = 020,
|
||||
R = 010,
|
||||
L = 014,
|
||||
U = 02,
|
||||
D = 03
|
||||
};
|
||||
|
||||
static int char_na[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, D|I, D|I, D|I, D|I, D|I, D|I,
|
||||
R|I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, D|I, D|I, D|I, D|I, D|I, D|I,
|
||||
R|I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D|R, D|R, D, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_A[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|R|I,
|
||||
R|I, R|I, R|D|I, D|I, L, L, L|D|I,
|
||||
R|I, R|I, R|I, D|I, D|I, D|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_B[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I, R|I,
|
||||
R|I, R|I, R|D|I, D|I, L|D|I, L|I, L|I,
|
||||
D, D, D|I, R|I, R|I, U|R|I, U|I,
|
||||
D|R, D|R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_C[] = {
|
||||
U|I, U|I, U|I, U|I, U|I, U|R|I, R|I, R|I, D|R|I,
|
||||
D|L, D|L, D|L, D, D|I,
|
||||
R|I, R|I, U|R|I, D|R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_D[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, R|I, R|I, R|D|I, D|I, D|I, D|I, D|I,
|
||||
L, L, L|D|I, R|I, R|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_E[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, R|I, R|I, R|I,
|
||||
D|L, D|L, D|L|I,
|
||||
R|I, R|I, R|I,
|
||||
D|L, D|L, D|L|I,
|
||||
R|I, R|I, R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_F[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, R|I, R|I, R|I,
|
||||
D|L, D|L, D|L|I,
|
||||
R|I, R|I, R|I,
|
||||
D|L, D|L, D|L,
|
||||
R, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_G[] = {
|
||||
U|I, U|I, U|I, U|I, U|I,
|
||||
U|R|I, R|I, R|I, D|R|I,
|
||||
D, D|I, L|I, L|I, D|L, D,
|
||||
D|I, R|I, R|I, U|R|I, U|I, D|R, D|R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_H[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D, D|I, R|I, R|I,
|
||||
U, U, U|R|I,
|
||||
D|I, D|I, D|I, D|I, D|I, D|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_I[] = {
|
||||
U, U, U, U, U, U|R|I,
|
||||
R|I, R|I, D|L|I,
|
||||
D|I, D|I, D|I, D|I, D|L|I,
|
||||
R|I, R|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_J[] = {
|
||||
U|I, D|R|I, R|I, R|I,
|
||||
U|R|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D|R, D|R, D, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_K[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R, R, R, R|I,
|
||||
D|L|I, D|L|I, D|L|I,
|
||||
D|R|I, D|R|I, D|R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_L[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D, D, D, D, D|I,
|
||||
R|I, R|I, R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_M[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R|I, D|R|I, U|R|I, U|R|I,
|
||||
D|I, D|I, D|I, D|I, D|I, D|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_N[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R|I, D|R|I, D|R|I,
|
||||
U, U, U|R|I,
|
||||
D|I, D|I, D|I, D|I, D|I, D|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_O[] = {
|
||||
U|I, U|I, U|I, U|I, U|I,
|
||||
U|R|I, R|I, R|I,
|
||||
D|R|I, D|I, D|I, D|I, D|I,
|
||||
L, L, D|L|I, R|I, R|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_P[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, R|I, R|I,
|
||||
D|R|I, D|I,
|
||||
D|L|I, L|I, L|I,
|
||||
D|R, D|R, D|R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Q[] = {
|
||||
U|I, U|I, U|I, U|I, U|I,
|
||||
U|R|I, R|I, R|I,
|
||||
D|R|I, D|I, D|I, D|I,
|
||||
L, L|I, D|L, D|I,
|
||||
R|I, R|I, U|I, R|I, D|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_R[] = {
|
||||
I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, R|I, R|I,
|
||||
D|R|I, D|I,
|
||||
D|L|I, L|I, L|I,
|
||||
D|R|I, D|R|I, D|R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_S[] = {
|
||||
U|I, D|R|I, R|I, R|I, U|R|I, U|I,
|
||||
U|L|I, L|I, L|I, U|L|I, U|I,
|
||||
U|R|I, R|I, R|I, D|R|I, D|R, D|R, D|R, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_T[] = {
|
||||
U, U, U, U, U, U|I,
|
||||
R|I, R|I, R|I, R|I,
|
||||
D|L, L|I,
|
||||
D|I, D|I, D|I, D|I, D|I,
|
||||
R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_U[] = {
|
||||
U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
R, R, R, R|I,
|
||||
D|I, D|I, D|I, D|I, D|I,
|
||||
L, L, L|D|I, R|I, R|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_V[] = {
|
||||
R, R|I, U|L|I, U|L|I, U|I, U|I, U|I, U|I,
|
||||
R, R, R, R|I,
|
||||
D|I, D|I, D|I, D|I, D|L|I, D|L|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_W[] = {
|
||||
I, U|I, R|I, U|R|I, L, L|I, U|I, U|I, U|I, U|I,
|
||||
R, R, R, R|I,
|
||||
D|I, D|I, D|I, D|I, D|I, L|I, D|R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_X[] = {
|
||||
I, U|R|I, U|R|I, U|I, U|I, U|L|I, U|L|I,
|
||||
R, R, R, R|I,
|
||||
D|L|I, D, D, D, D|I, D|R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Y[] = {
|
||||
U, U, U, U, U, U|I,
|
||||
R, R, R, R|I, D|L|I,
|
||||
L, L|I,
|
||||
D|R|I, D|I, D|I, D|I, D|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Z[] = {
|
||||
I, U|I, U|R|I, U|I, L|I,
|
||||
U, U, U|I,
|
||||
R|I, R|I, R|I, R|I,
|
||||
D|I, D|L|I, D|R|I, L|I, L|I,
|
||||
D, D, D|L|I,
|
||||
R|I, R|I, R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_null[] = {
|
||||
U, U|I, U|I, R|I, U|L|I,
|
||||
U|R|I, R|I, D|I, U|R|I,
|
||||
D|R|I, D|I, L|I, D|R|I,
|
||||
L, L|I, D|L|I, R|I, R|I, D|R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_ex[] = {
|
||||
R, R|I, U, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D|R, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_dq[] = {
|
||||
U, U, U, U|R|I, U|I, U|I,
|
||||
R, R|I, D|I, D|I, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_sh[] = {
|
||||
R, R|I, U|I, U|I, L|I, U|R|I, U|I, L|I, U|R|I, U|I,
|
||||
R, R|I, D|I, D|R|I, L|I, L|I, D|R|I, D|R|I,
|
||||
L|I, L|I, D|R|I, D|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_dl[] = {
|
||||
U|I, D|R|I, R|I, U|I, D|R|I, U|R|I, U|I,
|
||||
U|L|I, D|L|I, U|I, U|I, D|L|I, U|L|I, U|I,
|
||||
U|R|I, R|I, D|I, U|R|I, D|R|I, D|R, D|R, D|R, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_pr[] = {
|
||||
I, U|I, U|R|I, U|R|I, U|R|I, U|R|I, U|I,
|
||||
L|I, L|I, L|I, L|I, D|I, R|I,
|
||||
D|R, D|R, D,
|
||||
D|I, R|I, D|L|I, R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_et[] = {
|
||||
R|I, U|L|I, U|I, U|R, U|R|I, U|I, U|L|I,
|
||||
D|L|I, D|I, D|R|I, D|R|I, D|I, D|I, U|R|I, U|R|I,
|
||||
D, D|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_sq[] = {
|
||||
U, U, U, U, U|R|I, U|I,
|
||||
R|I, D|I, D|I, D|R, D|R, D|R, D|R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_lp[] = {
|
||||
R, R|I, U|L|I, U|L|I, U|I, U|I, U|R|I, U|R|I,
|
||||
D|R, D|R, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_rp[] = {
|
||||
U, U, U, U, U|R, U|R|I,
|
||||
D|R|I, D|R|I, D|I, D|I, D|L|I, D|L|I,
|
||||
R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_as[] = {
|
||||
U|I, U|R|I, U|I, L|I, U|R|I, U|L|I, R,
|
||||
R|I, R, R|I, D|L|I, L|I, D|I, R|I, R|I,
|
||||
D|L|I, L|I, D|I, R, R|I, D|R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_pl[] = {
|
||||
U, U, U|I, R|I, U|R|I, U|I,
|
||||
D|R, D|R|I, L|I, L|I, D|I, D|I,
|
||||
D|R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_cm[] = {
|
||||
U|R|I, U|I, R|I, D|I, D|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_mi[] = {
|
||||
U, U, U|I, R|I, R|I, R|I, R|I, D|R, D|R, D|R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_pe[] = {
|
||||
R|I, U|I, R|I, D|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_sl[] = {
|
||||
U|I, U|R|I, U|R|I, U|R|I, U|R|I,
|
||||
D|R, D|R, D|R, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_0[] = {
|
||||
U|I, U|R|I, L|I, U|I, U|I, U|I,
|
||||
U|R|I, R|I, R|I, D|R|I, D|I, L|I, D|L|I,
|
||||
R, R|I, D|I, D|I, D|L|I, L|I, L|I,
|
||||
R, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_1[] = {
|
||||
U, U, U, U, U|R|I, U|R|I, D|I,
|
||||
D|I, D|I, D|I, D|I, D|L|I, R|I, R|I, R,
|
||||
R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_2[] = {
|
||||
U, U, U, U, U|I, U|R|I, R|I, R|I,
|
||||
D|R|I, D|I, D|L|I, L|I, L|I, D|L|I, D|I, D|I,
|
||||
R|I, R|I, R|I, R|I, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_3[] = {
|
||||
U|I, D|R|I, R|I, R|I, U|R|I, U|I, U|L|I,
|
||||
U|R|I, U|I, U|L|I, L|I, L|I, D|L|I,
|
||||
D|R, D|R|I, D|R, D|R, D|R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_4[] = {
|
||||
U, U, U|I, R|I, R|I, U|L|I, U|R|I, U|R|I,
|
||||
D|I, D|I, D|R|I, L|I, D|I, D|I, D|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_5[] = {
|
||||
U|I, D|R|I, R|I, R|I, U|R|I, U|I, U|L|I, L|I, L|I,
|
||||
U|L|I, U|I, U|I, R|I, R|I, R|I, R|I,
|
||||
D|R, D|R, D|R, D, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_6[] = {
|
||||
R|I, U|L|I, U|I, U|R|I, L|I, U|I, U|I,
|
||||
U|R|I, R|I, R|I, D|R|I, D|L, D|L|I, R|I,
|
||||
D|R|I, D|I, L, D|L|I, R|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_7[] = {
|
||||
I, U|I, U|R|I, U|L, U, U|I, U|I,
|
||||
R|I, R|I, R|I, R|I, D|I, D|L|I, D|L|I,
|
||||
D|R, D|R, D|R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_8[] = {
|
||||
R|I, U|L|I, U|I, U|R|I, U|L|I, U|I, U|R|I,
|
||||
R|I, R|I, D|R|I, D|I, L, D|L|I, R|I, D|R|I,
|
||||
D|I, L, D|L|I, R|I, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_9[] = {
|
||||
U|I, D|R|I, R|I, R|I, U|R|I, U|I, U|I, U|I, U|I,
|
||||
U|L|I, L|I, L|I, D|L|I, D|I, D|R|I, R|I, R|I,
|
||||
D|R, D|R, D|R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_cl[] = {
|
||||
U, U, U, U|R|I, R|I, D|I, L|I,
|
||||
D, D|I, R|I, D|L|I, R|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_sm[] = {
|
||||
U, U, U, U, U|R|I, R|I, D|I, L|I,
|
||||
D, D|I, R|I, D|L|I, R|I, D|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_la[] = {
|
||||
R, R, R|I, U|L|I, U|L|I, U|L|I,
|
||||
U|R|I, U|R|I, U|R|I,
|
||||
D|R, D|R, D|R, D|R, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_eq[] = {
|
||||
U, U|I, U, U|I, R|I, D, D|I,
|
||||
R|I, U, U|I, R|I, D, D|I, R|I,
|
||||
U, U|I, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_ra[] = {
|
||||
R|I, U|R|I, U|R|I, U|R|I,
|
||||
U|L|I, U|L|I, U|L|I,
|
||||
D|R, D|R, D|R, D|R, D|R, D|R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_qs[] = {
|
||||
U, U, U, U, U|I, U|R|I, R|I, R|I,
|
||||
D|R|I, D|I, D|L|I, L|I,
|
||||
D|I, D|I, D|I, R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
static int char_bar[] = {
|
||||
R, R|I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D|R, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_bs[] = {
|
||||
U, U, U, U, U|I,
|
||||
D|R|I, D|R|I, D|R|I, D|R|I,
|
||||
D|R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Lb[] = {
|
||||
I, R|I, R|I, U|L, L|I,
|
||||
U|I, U|I, U|I, U|I, U|I,
|
||||
R|I, R|I, D|R, D|R, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Rb[] = {
|
||||
R|U, R|U, U, U, U, U|I, R|I, R|I,
|
||||
D|I, D|I, D|I, D|I, D|L, D|L|I,
|
||||
R|I, R|I, U|I, D|R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_LB[] = {
|
||||
R, R|I, U|L|I, U|I, U|L|I, U|R|I, U|I, U|R|I,
|
||||
D|R, D|R, D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_RB[] = {
|
||||
U|R, U|R, U, U, U, U|I,
|
||||
D|R|I, D|I, D|R|I, D|L|I, D|I, D|L|I,
|
||||
R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Ra[] = {
|
||||
U, U, U|I, R|I, R|I, U, U|I,
|
||||
D|R|I, D|R|I, L|I, D|I, D|L|I,
|
||||
D|R, R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_La[] = {
|
||||
R, U|R|I, L|U|I, L|U|I, R|I, U|I, R|U|I,
|
||||
D, D|I, R|I, R|I, D|R, D|R, D|R,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_Da[] = {
|
||||
U, U|I, D|R|I, D|R|I, U|I, U|I, U|I, U|I, U|I, U|I,
|
||||
D|R, D|R, D, D|I, D|L|I, D|R, R, R, R,
|
||||
0
|
||||
};
|
||||
|
||||
/*
|
||||
static int char_Ua[] = {
|
||||
R, R|I, U|I, U|I, U|I, U|I, R, R|I,
|
||||
U|L|I, L|I, U|I, D|L|I, D|L|I,
|
||||
D, D, D, D,
|
||||
0
|
||||
};
|
||||
*/
|
||||
static int char_Ua[] = {
|
||||
R, R|I, U|I, U|I, U|I, U|I, L, L|I,
|
||||
U|R|I, R|I, U|I, D|R|I, D|R|I,
|
||||
D|R, D|R, D|R, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_tl[] = {
|
||||
U, U, U, U, U|I, U|R|I, D|R|I, D|R|I, U|R|I,
|
||||
D|R, D|R, D|R, D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_tk[] = {
|
||||
U, U, U, U, U, U|R|I, D|R|I, D|R|I,
|
||||
D|L, D|L, D|L, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_dn[] = {
|
||||
D, D,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_up[] = {
|
||||
U, U,
|
||||
0
|
||||
};
|
||||
|
||||
static int char_sp[] = { R, R, R, R, R, R, R, 0 };
|
||||
static int char_lf[] = { D, D, D, D, D, D, D, D, D, D, D, 0 };
|
||||
static int char_cr[] = { 0100, 0 };
|
||||
static int char_esc[] = { 040 };
|
||||
static int char_si[] = { 0200 };
|
||||
static int char_so[] = { 0400 };
|
||||
|
||||
static int *chars[] = {
|
||||
char_null, char_A, char_B, char_C, char_D, char_E, char_F, char_G,
|
||||
char_H, char_I, char_J, char_K, char_L, char_M, char_N, char_O,
|
||||
char_P, char_Q, char_R, char_S, char_T, char_U, char_V, char_W,
|
||||
char_X, char_Y, char_Z, char_lf, char_cr, char_si, char_so, char_esc,
|
||||
char_sp, char_ex, char_dq, char_sh, char_dl, char_pr, char_et, char_sq,
|
||||
char_lp, char_rp, char_as, char_pl, char_cm, char_mi, char_pe, char_sl,
|
||||
char_0, char_1, char_2, char_3, char_4, char_5, char_6, char_7,
|
||||
char_8, char_9, char_cl, char_sm, char_la, char_eq, char_ra, char_qs,
|
||||
|
||||
/* TODO: lower case. some of the unknowns */
|
||||
char_null, char_na, char_na, char_na, char_na, char_na, char_na, char_na,
|
||||
char_na, char_na, char_na, char_na, char_na, char_na, char_na, char_na,
|
||||
char_na, char_na, char_na, char_na, char_na, char_na, char_na, char_na,
|
||||
char_na, char_na, char_na, char_lf, char_cr, char_si, char_so, char_esc,
|
||||
char_sp, char_na, char_na, char_tl, char_na, char_na, char_Ua, char_Ra,
|
||||
char_Da, char_La, char_bs, char_Lb, char_Rb, char_LB, char_RB, char_na,
|
||||
char_na, char_na, char_bar, char_na, char_na, char_na, char_tk, char_Ua,
|
||||
char_na, char_na, char_na, char_dn, char_na, char_na, char_na, char_up,
|
||||
};
|
||||
30
emu/dis340.c
30
emu/dis340.c
@ -1,7 +1,7 @@
|
||||
#include "pdp6.h"
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
#define JUSTTESTING
|
||||
//#define JUSTTESTING
|
||||
|
||||
char *dis_ident = DIS_IDENT;
|
||||
|
||||
@ -67,7 +67,7 @@ static word list[] = {
|
||||
PARAM_W(XYM, 0, 0, 07, 0),
|
||||
XYM_W(1, XYM, 0, 0, 950),
|
||||
XYM_W(0, CM, 0, 0, 0),
|
||||
034<<12 | 034<<6 | 040,
|
||||
036<<12 | 034<<6 | 040,
|
||||
01<<12 | 02<<6 | 03,
|
||||
04<<12 | 05<<6 | 06,
|
||||
07<<12 | 010<<6 | 011,
|
||||
@ -166,6 +166,7 @@ struct Dis340
|
||||
/* 342 char gen */
|
||||
int cgstate; /* 0 - inactive
|
||||
* 1 - drawing character */
|
||||
int shift;
|
||||
int *cp; /* current char pointer */
|
||||
|
||||
/* simulated tube */
|
||||
@ -201,6 +202,8 @@ initiate(Dis340 *dis)
|
||||
dis->intdelay = 0;
|
||||
dis->cgstate = 0;
|
||||
|
||||
dis->shift = 0;
|
||||
|
||||
dis->lp_enable = 0; // TODO: not in schematics?
|
||||
dis->lp_find = 0;
|
||||
dis->lp_flag = 0;
|
||||
@ -215,7 +218,6 @@ read_to_mode(Dis340 *dis)
|
||||
dis->mode = LDB(13, 3, dis->br);
|
||||
if((dis->br & 0010000) == 0010000)
|
||||
dis->lp_enable = !!(dis->br & 04000);
|
||||
//printf("setting mode %o %o\n", dis->mode, dis->lp_enable);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -306,11 +308,11 @@ cg_count(Dis340 *dis)
|
||||
|
||||
if(pnt == 0){
|
||||
/* end of character */
|
||||
end:
|
||||
nextchar(dis);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO shift in/out
|
||||
if(pnt & 040){
|
||||
/* escape from char */
|
||||
dis->cgstate = 0;
|
||||
@ -320,6 +322,14 @@ cg_count(Dis340 *dis)
|
||||
}
|
||||
if(pnt & 0100)
|
||||
dis->x = 0;
|
||||
if(pnt & 0200){
|
||||
dis->shift = 0;
|
||||
goto end;
|
||||
}
|
||||
if(pnt & 0400){
|
||||
dis->shift = 64;
|
||||
goto end;
|
||||
}
|
||||
r = (pnt & 014) == 010;
|
||||
l = (pnt & 014) == 014;
|
||||
u = (pnt & 003) == 002;
|
||||
@ -374,7 +384,7 @@ idp(Dis340 *dis)
|
||||
|
||||
case CM:
|
||||
/* Tell CG to start */
|
||||
dis->cp = chars[LDB(12, 6, dis->chrs)];
|
||||
dis->cp = chars[LDB(12, 6, dis->chrs) + dis->shift];
|
||||
dis->cgstate = 1;
|
||||
break;
|
||||
|
||||
@ -881,14 +891,17 @@ static void
|
||||
recalc_dis_req(Dis340 *dis)
|
||||
{
|
||||
int data, spec;
|
||||
u8 req_data, req_spec;
|
||||
|
||||
// TODO: what about RFD?
|
||||
data = dis->ibc == 0 && dis->rfd;
|
||||
spec = dis->lp_flag ||
|
||||
dis->hef || dis->vef ||
|
||||
dis->stop && dis->br&01000;
|
||||
setreq(dis->bus, DIS, data ? dis->pia_data : 0);
|
||||
setreq(dis->bus, DIS, spec ? dis->pia_spec : 0);
|
||||
req_data = data ? 0200 >> dis->pia_data : 0;
|
||||
req_spec = spec ? 0200 >> dis->pia_spec : 0;
|
||||
|
||||
setreq2(dis->bus, DIS, req_data | req_spec);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -999,9 +1012,10 @@ makedis(int argc, char *argv[])
|
||||
dis->dev.type = dis_ident;
|
||||
|
||||
/* dunno about the frequency here */
|
||||
t = (Task){ nil, discycle, dis, 5, 0 };
|
||||
t = (Task){ nil, discycle, dis, 50, 0 };
|
||||
addtask(t);
|
||||
|
||||
/* There's a race somewhere here */
|
||||
threadcreate(renderthread, dis);
|
||||
|
||||
return &dis->dev;
|
||||
|
||||
@ -298,6 +298,7 @@ struct IOBus
|
||||
Busdev dev[128];
|
||||
};
|
||||
void setreq(IOBus *bus, int dev, u8 pia);
|
||||
void setreq2(IOBus *bus, int dev, u8 req);
|
||||
|
||||
|
||||
/* A pulse modeled as a function, and a name for debugging */
|
||||
|
||||
@ -155,7 +155,12 @@ void
|
||||
decompdbl(double d, int *s, word *e, uint64_t *m)
|
||||
{
|
||||
uint64_t x;
|
||||
x = *(uint64_t*)&d;
|
||||
union {
|
||||
uint64_t i;
|
||||
double d;
|
||||
} u;
|
||||
|
||||
u.d = d; x = u.i;
|
||||
*s = !!(x & 0x8000000000000000);
|
||||
*e = (x >> 52) & 0x7FF;
|
||||
*m = x & 0xFFFFFFFFFFFFF;
|
||||
@ -170,12 +175,17 @@ dtopdp(double d)
|
||||
uint64_t x, e, m;
|
||||
int sign;
|
||||
word f;
|
||||
union {
|
||||
uint64_t i;
|
||||
double d;
|
||||
} u;
|
||||
|
||||
sign = 0;
|
||||
if(d < 0.0){
|
||||
sign = 1;
|
||||
d *= -1.0;
|
||||
}
|
||||
x = *(uint64_t*)&d;
|
||||
u.d = d; x = u.i;
|
||||
/* sign is guaranteed to be 0 now */
|
||||
e = (x >> 52) & 0x7FF;
|
||||
m = x & 0xFFFFFFFFFFFFF;
|
||||
@ -200,6 +210,11 @@ double
|
||||
pdptod(word f)
|
||||
{
|
||||
uint64_t x, s, e, m;
|
||||
union {
|
||||
uint64_t i;
|
||||
double d;
|
||||
} u;
|
||||
|
||||
s = 0;
|
||||
if(f & 0400000000000){
|
||||
f = -f & 0777777777777;
|
||||
@ -219,7 +234,8 @@ pdptod(word f)
|
||||
x = m;
|
||||
x |= (e & 0x7FF) << 52;
|
||||
x |= s << 63;
|
||||
return *(double*)&x;
|
||||
u.i = x;
|
||||
return u.d;
|
||||
}
|
||||
|
||||
/* map ascii to radix50/squoze, also map lower to upper case */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user