customDraw() {
        const ctx = simulationArea.context;
        const xx = this.x;
        const yy = this.y;
        const hoverIndex = this.findPos();
        ctx.strokeStyle = colors['stroke'];
        ctx.fillStyle = (colors['fill']);
        ctx.lineWidth = correctWidth(3);
        ctx.beginPath();
        rect2(ctx, -this.leftDimensionX, -this.upDimensionY, this.leftDimensionX + this.rightDimensionX, this.upDimensionY + this.downDimensionY, this.x, this.y, [this.direction, 'RIGHT'][+this.directionFixed]);
        if (hoverIndex === undefined && ((!simulationArea.shiftDown && this.hover) || simulationArea.lastSelected === this || simulationArea.multipleObjectSelections.contains(this))) ctx.fillStyle = colors["hover_select"];
        ctx.fill();
        ctx.stroke();
        ctx.strokeStyle = 'black';
        ctx.fillStyle = '#fafafa';
        ctx.lineWidth = correctWidth(1);
        ctx.beginPath();
        for (let i = 0; i < 16; i += 4) {
            for (let j = i; j < i + 4; j++) {
                rect2(ctx, (j % 4) * 20, i * 4, 20, 16, xx - 35, yy - 35);
            }
        }
        ctx.fill();
        ctx.stroke();
        if (hoverIndex !== undefined) {
            ctx.beginPath();
            ctx.fillStyle = 'yellow';
            rect2(ctx, (hoverIndex % 4) * 20, Math.floor(hoverIndex / 4) * 16, 20, 16, xx - 35, yy - 35);
            ctx.fill();
            ctx.stroke();
        }
        if (this.selectedIndex !== undefined) {
            ctx.beginPath();
            ctx.fillStyle = 'lightgreen';
            rect2(ctx, (this.selectedIndex % 4) * 20, Math.floor(this.selectedIndex / 4) * 16, 20, 16, xx - 35, yy - 35);
            ctx.fill();
            ctx.stroke();
        }
        if (this.memAddr.value !== undefined) {
            ctx.beginPath();
            ctx.fillStyle = colors['input_text'];
            rect2(ctx, (this.memAddr.value % 4) * 20, Math.floor(this.memAddr.value / 4) * 16, 20, 16, xx - 35, yy - 35);
            ctx.fill();
            ctx.stroke();
        }

        ctx.beginPath();
        ctx.fillStyle = 'Black';
        fillText3(ctx, 'A', -65, 5, xx, yy, 16, 'Raleway', 'right');
        fillText3(ctx, 'D', 75, 5, xx, yy, 16, 'Raleway', 'right');
        fillText3(ctx, 'En', 5, 47, xx, yy, 16, 'Raleway', 'right');
        ctx.fill();

        ctx.beginPath();
        ctx.fillStyle = 'Black';
        for (let i = 0; i < 16; i += 4) {
            for (let j = i; j < i + 4; j++) {
                let s = this.data[j].toString(16);
                if (s.length < 2) s = `0${s}`;
                fillText3(ctx, s, (j % 4) * 20, i * 4, xx - 35 + 10, yy - 35 + 12, 14, 'Raleway', 'center');
            }
        }
        ctx.fill();

        ctx.beginPath();
        ctx.fillStyle = 'Black';
        for (let i = 0; i < 16; i += 4) {
            let s = i.toString(16);
            if (s.length < 2) s = `0${s}`;
            fillText3(ctx, s, 0, i * 4, xx - 40, yy - 35 + 12, 14, 'Raleway', 'right');
        }
        ctx.fill();
    }
@memberof Rom
function to draw element