/*---------------------------------------------------------*\ Ficheiro: LOGICROM.C Alteração: 03-05-96 ALterado por: A.Esteves \*---------------------------------------------------------*/ #include "datadef.h" /* OPERAÇÕES LÓGICAS */ void logic_this (void) { /* cy = HOLD */ /* tag = alu_output (cy_out) */ switch (linhas) { case 113 : /* MD0 MD1 UM */ tag[0] = (md1[0] ^ md0[0]) | (md0[0] & md1[0]); tag[1] = (md1[1] ^ md0[1]) | (md0[1] & md1[1]); break; case 114 : /* MD0 MD1 ZERO */ tag[0] = (md0[0] & md1[0]); tag[1] = (md0[1] & md1[1]); break; case 133 : /* MD0 NOT_MD1 UM */ tag[0] = (~md1[0] ^ md0[0]) | (md0[0] & ~md1[0]); tag[1] = (~md1[1] ^ md0[1]) | (md0[1] & ~md1[1]); break; case 134 : /* MD0 NOT_MD1 ZERO */ tag[0] = (md0[0] & ~md1[0]); tag[1] = (md0[1] & ~md1[1]); break; case 153 : /* MD0 NOT_TAG_IN UM */ tag[0] = (~tag[0] ^ md0[0]) | (md0[0] & ~tag[0]); tag[1] = (~tag[1] ^ md0[1]) | (md0[1] & ~tag[1]); break; case 154 : /* MD0 NOT_TAG_IN ZERO */ tag[0] = (md0[0] & ~tag[0]); tag[1] = (md0[1] & ~tag[1]); break; case 313 : /* NOT_MD0 MD1 UM */ tag[0] = (md1[0] ^ ~md0[0]) | (~md0[0] & md1[0]); tag[1] = (md1[1] ^ ~md0[1]) | (~md0[1] & md1[1]); break; case 314 : /* NOT_MD0 MD1 ZERO */ tag[0] = (~md0[0] & md1[0]); tag[1] = (~md0[1] & md1[1]); break; case 333 : /* NOT_MD0 NOT_MD1 UM */ tag[0] = (~md1[0] ^ ~md0[0]) | (~md0[0] & ~md1[0]); tag[1] = (~md1[1] ^ ~md0[1]) | (~md0[1] & ~md1[1]); break; case 334 : /* NOT_MD0 NOT_MD1 ZERO */ tag[0] = (~md0[0] & ~md1[0]); tag[1] = (~md0[1] & ~md1[1]); break; case 343 : /* NOT_MD0 TAG_IN UM */ tag[0] = (tag[0] ^ ~md0[0]) | (~md0[0] & tag[0]); tag[1] = (tag[1] ^ ~md0[1]) | (~md0[1] & tag[1]); break; case 344 : /* NOT_MD0 TAG_IN ZERO */ tag[0] = (~md0[0] & tag[0]); tag[1] = (~md0[1] & tag[1]); break; default : erro("\nErro na funcao logic_this(). \n"); break; } } /*################################################################*/ void logic_above (void) { /* cy = HOLD */ /* tag = alu_output ( cy_out ) */ /* tag_route -> above */ TagAbove(); switch (linhas) { case 153 : /* MD0 NOT_TAG_IN UM */ case 154 : /* MD0 NOT_TAG_IN ZERO */ case 344 : /* NOT_MD0 TAG_IN ZERO */ case 343 : /* NOT_MD0 TAG_IN UM */ logic_this(); break; default : erro("\nErro na funcao logic_above(). \n"); break; } } /*################################################################*/ void logic_below (void) { /* cy = HOLD */ /* tag = alu_output ( cy_out ) */ /* tag_route -> below */ TagBelow(); switch (linhas) { case 153 : /* MD0 NOT_TAG_IN UM */ case 154 : /* MD0 NOT_TAG_IN ZERO */ case 344 : /* NOT_MD0 TAG_IN ZERO */ case 343 : /* NOT_MD0 TAG_IN UM */ logic_this(); break; default : erro("\nErro na funcao logic_below(). \n"); break; } } /*################################################################*/ void logic_image (void) { /* cy = HOLD */ /* tag = alu_output ( cy_out ) */ /* tag_route -> image */ TagImage(); switch (linhas) { case 153 : /* MD0 NOT_TAG_IN UM */ case 154 : /* MD0 NOT_TAG_IN ZERO */ case 344 : /* NOT_MD0 TAG_IN ZERO */ case 343 : /* NOT_MD0 TAG_IN UM */ logic_this(); break; default : erro("\nErro na funcao logic_image(). \n"); break; } } /*################################################################*/ void xor_this (void) { /* cy = HOLD */ /* tag = alu_output ( sum ) */ switch (linhas) { case 113 : /* MD0 MD1 UM */ tag[0] = ~(md0[0] ^ md1[0]); tag[1] = ~(md0[1] ^ md1[1]); break; case 114 : /* MD0 MD1 ZERO */ tag[0] = (md0[0] ^ md1[0]); tag[1] = (md0[1] ^ md1[1]); break; case 313 : /* NOT_MD0 MD1 UM */ tag[0] = ~(~md0[0] ^ md1[0]); tag[1] = ~(~md0[1] ^ md1[1]); break; case 314 : /* NOT_MD0 MD1 ZERO */ tag[0] = (~md0[0] ^ md1[0]); tag[1] = (~md0[1] ^ md1[1]); break; case 331 : /* NOT_MD0 NOT_MD1 CY_IN */ tag[0] = cy[0] ^ (~md0[0] ^ ~md1[0]); tag[1] = cy[1] ^ (~md0[1] ^ ~md1[1]); break; case 333 : /* NOT_MD0 NOT_MD1 UM */ tag[0] = ~(~md0[0] ^ ~md1[0]); tag[1] = ~(~md0[1] ^ ~md1[1]); break; case 334 : /* NOT_MD0 NOT_MD1 ZERO */ tag[0] = (~md0[0] ^ ~md1[0]); tag[1] = (~md0[1] ^ ~md1[1]); break; case 343 : /* NOT_MD0 TAG_IN UM */ tag[0] = ~(~md0[0] ^ tag[0]); tag[1] = ~(~md0[1] ^ tag[1]); break; case 344 : /* NOT_MD0 TAG_IN ZERO */ tag[0] = (~md0[0] ^ tag[0]); tag[1] = (~md0[1] ^ tag[1]); break; default : erro("\nErro na funcao xor_this(). \n"); break; } } /*################################################################*/ void xor_above (void) { /* cy = HOLD */ /* tag = alu_output ( sum ) */ /* tag_route -> above */ TagAbove(); switch (linhas) { case 343 : /* NOT_MD0 TAG_IN UM */ case 344 : /* NOT_MD0 TAG_IN ZERO */ xor_this(); break; default : erro("\nErro na funcao xor_above(). \n"); break; } } /*####################################################################*/ void xor_below (void) { /* cy = HOLD */ /* tag = alu_output ( sum ) */ /* tag_route -> below */ TagBelow(); switch (linhas) { case 343 : /* NOT_MD0 TAG_IN UM */ case 344 : /* NOT_MD0 TAG_IN ZERO */ xor_this(); break; default : erro("\nErro na funcao xor_below(). \n"); break; } } /*################################################################*/ void xor_image (void) { /* cy = HOLD */ /* tag = alu_output ( sum ) */ /* tag_route -> image */ TagImage(); switch (linhas) { case 343 : /* NOT_MD0 TAG_IN UM */ case 344 : /* NOT_MD0 TAG_IN ZERO */ xor_this(); break; default : erro("\nErro na funcao xor_image(). \n"); break; } } /*################################################################*/