From 349ad02e9cfa5590e3dabd3e178e877a2655581f Mon Sep 17 00:00:00 2001 From: aap Date: Mon, 2 Nov 2015 23:18:50 +0100 Subject: [PATCH] little changes and fixes --- apr.c | 23 +++++++++++++++++++---- mem | 19 +++++++------------ pdp6.h | 9 +++++---- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/apr.c b/apr.c index d622569..090f59d 100644 --- a/apr.c +++ b/apr.c @@ -105,6 +105,19 @@ swap(word *a, word *b) *b = tmp; } +void +ar_add(word w) +{ + int a, b, s; + a = apr.ar>>35 & 1; + b = w>>35 & 1; + apr.ar += w; + s = apr.ar>>35 & 3; + apr.ar &= FW; + apr.ar_cry0 = !!(s & 2); + apr.ar_cry1 = s-a-b; +} + void set_ex_mode_sync(bool value) { @@ -341,7 +354,7 @@ pulse(art3){ pulse(ar_pm1_t1){ printf("AR AR+-1 T1\n"); - apr.ar = apr.ar+1 & FW; + ar_add(1); return apr.art3_ret; } @@ -354,7 +367,7 @@ pulse(ar_negate_t0){ pulse(ar_ast1){ printf("AR AST1,2\n"); // TODO - apr.ar += apr.mb; + ar_add(apr.mb); return art3; } @@ -391,6 +404,8 @@ pulse(et10){ if(apr.hwt_10 || apr.hwt_11 || apr.fwt_10 || apr.fwt_11) apr.mb = apr.ar; + if(apr.fwt && !apr.ar_cry0 && apr.ar_cry1) + apr.ar_ov_flag = 1; // 6-10 return NULL; } @@ -414,7 +429,7 @@ pulse(et4){ hwt_lt = apr.hwt && !(apr.inst & 040); hwt_rt = apr.hwt && apr.inst & 040; - if(hwt_rt && apr.inst & 020 && (!(apr.inst & 010) || apr.mb & SGN)) + if(hwt_rt && apr.inst & 020 && (!(apr.inst & 010) || apr.mb & RSGN)) apr.ar = apr.ar & ~LT | ~apr.ar & LT; if(hwt_lt && apr.inst & 020 && (!(apr.inst & 010) || apr.mb & SGN)) apr.ar = apr.ar & ~RT | ~apr.ar & RT; @@ -500,7 +515,7 @@ pulse(et0a){ if(apr.fwt_00 || apr.fwt_11 || apr.hwt_11) apr.ar = apr.mb; // 6-8 if(apr.fwt_01 || apr.fwt_10) - apr.mb = apr.ar; + apr.mb = apr.ar; // 6-3 if(apr.inst == 0250 || /* EXCH */ apr.hwt_10) swap(&apr.mb, &apr.ar); // 6-3 diff --git a/mem b/mem index 80c213f..5999667 100644 --- a/mem +++ b/mem @@ -11,7 +11,7 @@ 0 0 777 -777777777777 +777777377777 0 0 234100000001 @@ -19,14 +19,9 @@ 204000000014 210000000014 214000000015 -66666 -77777 -10101 -20202 -30303 -40404 -50505 -60606 -70707 -01010 -02020 +500000000015 +510000000015 +520000000015 +530000000015 +534000000015 +525000000015 diff --git a/pdp6.h b/pdp6.h index c7745d7..3da8b59 100644 --- a/pdp6.h +++ b/pdp6.h @@ -12,10 +12,11 @@ typedef uint8_t u8; typedef char bool; enum { - FW = 0777777777777, - RT = 0000000777777, - LT = 0777777000000, - SGN = 0400000000000, + FW = 0777777777777, + RT = 0000000777777, + LT = 0777777000000, + SGN = 0400000000000, + RSGN = 0000000400000, }; typedef void *Pulse(void);