From 2261144ea2d0089080d77752e63313d940db6da4 Mon Sep 17 00:00:00 2001 From: Warren Toomey Date: Fri, 4 Mar 2016 08:31:15 +1000 Subject: [PATCH] Fixed up the llss code in a7out, so now the octal printing code in ds.s works. --- tools/a7out | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/a7out b/tools/a7out index 18401f8..3ba7dff 100755 --- a/tools/a7out +++ b/tools/a7out @@ -485,21 +485,24 @@ sub eae { $PC++; return; } - if ( $maskedinstr == 0660700 ) { # alss: long left shift, signed - # We don't fill the lsb with LINK yet + if ( $maskedinstr == 0660700 ) { # alss: AC left shift, signed dprintf( "alss AC %06o step %d\n", $AC, $step ); $AC = ( $AC << $step ) & MAXINT; + $LINK = ( $AC << 1 ) & LINKMASK; $PC++; return; } if ( $maskedinstr == 0660600 ) { # llss: long left shift, signed - # We don't use MQ yet! dprintf( "llss AC %06o step %d\n", $AC, $step ); - $AC = ( $AC << $step ) & MAXINT; + foreach my $i (1 .. $step) { + my $MQmsb= ($MQ & SIGN) ? 1 : 0; + $AC= (($AC << 1) | $MQmsb) & MAXINT; + $MQ= (($MQ << 1) | (($LINK) ? 1 : 0)) & MAXINT; + } $PC++; return; } - if ( $maskedinstr == 0640700 ) { # als: long left shift + if ( $maskedinstr == 0640700 ) { # als: AC left shift dprintf( "als AC %06o step %d\n", $AC, $step ); $AC = ( $AC << $step ) & MAXINT; $PC++;