Skip to content

Instantly share code, notes, and snippets.

@n1chre
Last active January 8, 2017 23:16
Show Gist options
  • Save n1chre/2bf3de2d8a2e9edfbf345089d0573088 to your computer and use it in GitHub Desktop.
Save n1chre/2bf3de2d8a2e9edfbf345089d0573088 to your computer and use it in GitHub Desktop.
Assignment for lab exercise, students had to solve it
<?php
function _die($msg)
{
echo "<html><body><h1>$msg</h1><a href='/'>Početna stranica</a></body></html>";
die;
}
if (!isset($_SERVER['REQUEST_METHOD'])) {
_die('Nece ici');
}
$method = strtoupper($_SERVER['REQUEST_METHOD']);
if ($method == 'GET') {
?>
<html>
<body>
<form method='post' action='/'>
<table>
<tr>
<td>JMBAG</td>
<td><input type='text' name='jmbag'/></td>
</tr>
<tr>
<td>Šifra</td>
<td><input type='text' name='sifra'/></td>
</tr>
<tr>
<td/>
<td>
<button>Go</button>
</td>
</tr>
</table>
</body>
</html>
<?php
die;
}
if ($method != 'POST') {
_die('Nece ici');
}
if (!isset($_POST['jmbag']) or !isset($_POST['sifra'])) {
_die('Fale podaci');
}
$jmbag = $_POST['jmbag'];
$sifra = $_POST['sifra'];
if (!is_string($jmbag) or strlen($jmbag) != 10 or !preg_match("/^\\d+$/", $jmbag)) {
_die('Pogresan jmbag');
}
$cookie_name = 'hrenic-diglog-cookie';
if (!isset($_COOKIE[$cookie_name])) {
$t = time();
$cookie = hash('sha256', $t . $jmbag);
setcookie($cookie_name, $cookie, $t + 3 * 60 * 60);
} else {
$cookie = $_COOKIE[$cookie_name];
}
$h = hash('sha256', $jmbag . $sifra . $cookie);
function char_to_num($c)
{
$x = ord($c);
if ($x >= ord(0) and $x <= ord(9)) {
return $x - ord(0);
}
if ($x >= ord('a') and $x <= ord('f')) {
return $x - ord('a') + 10;
}
if ($x >= ord('A') and $x <= ord('F')) {
return $x - ord('A') + 10;
}
return 0;
}
$curr = 0;
$idx = 0;
$rnd = function ($mod = 10) use (&$x, &$idx, $h) {
$x = ($x + char_to_num($h[$idx++])) % $mod;
return $x;
};
$ops = ['sub', 'nor', 'or', 'xor', 'add', 'srl', 'and', 'mul'];
$regs = [1, 2, 3];
// shuffle ops
for ($i = 0; $i < 8; $i++) {
$x = $rnd(8 - $i);
$t = $ops[$i];
$ops[$i] = $ops[$i + $x];
$ops[$i + $x] = $t;
}
$output = [];
$output[] = 'R1 = ' . $rnd();
$output[] = 'R2 = ' . $rnd();
$output[] = 'R3 = ' . $rnd();
for ($i = 0; $i < 8; $i++) {
$r1 = 'R' . $regs[$rnd(3)];
$r2 = 'R' . $regs[$rnd(3)];
if ($rnd(4) != 0) { // 75% sanse da bude reg
$val = 'R' . $regs[$rnd(3)];
} else {
$val = $rnd();
}
$output[] = "$r1 = $r2 " . $ops[$i] . " $val";
}
?>
<html>
<head>
<head>
<meta charset="utf-8"/>
<!--<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0" />-->
<title>Lab 4</title>
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="wraper" class="pure-g">
<article class="pure-u-1">
<h1>4. laboratorij iz digitalne logike</h1>
<h2>JMBAG: <?php echo $jmbag; ?> &nbsp; &nbsp; &nbsp; Šifra: <?php echo $sifra; ?></h2>
<p>Ako iznad ne piše Vaš jmbag ili zadana šifra, vratite se na <a href="/">početnu stranicu</a> i ponovite login
</p>
<hr>
<h2>1. zadatak (0.5 boda)</h2>
<p>Popunite zadanu tablicu tako da je u svakom retku formula zadana s <code>W = A f B</code>, gdje je f neka
operacija. <br> Ako A ili B nisu potrebni,stavite Addr = 00
</p>
<p>Ovaj zadatak <b>NIJE</b> isti kao tablica u pripremi jer AddrA nije isti kao i AddrW.<br>
To znači da je moguće u istoj operaciji koristiti 2 različita registra, a zapisati rezultat u 3. registar
</p>
<p>
<b>Napomena</b>: A(t) je vrijednost registra A, B(t) je registra B, W(t+1) je vrijednost registra W nakon
operacije
</p>
<table border="1">
<thead>
<tr>
<td align="center">ALUOp</td>
<td align="center">Operacija</td>
</tr>
<?php
for ($i = 0; $i < 8; $i++) {
printf("<tr><td align='center'>%03b</td><td align='center'>%s</td></tr>", $i, $ops[$i]);
}
?>
</thead>
</table>
<p><b>NIJE</b> ideja da ovo napravite na pločici jer je u većini slučajeva to nemoguće. (Zašto?)<br>
Pretpostavite da su svi registri na početku postavljeni na 0000.<br>
U sve ćelije je omogućen unos pa možete popunjavati u browseru ili na papiru.</p>
<table border="1">
<thead>
<tr>
<td align="center">Operacija</td>
<td align="center">AddrA</td>
<td align="center">AddrB</td>
<td align="center">AddrW</td>
<td align="center">ALUOp</td>
<td align="center">A(t)</td>
<td align="center">B(t)</td>
<td align="center">sw</td>
<td align="center">W(t+1)</td>
</tr>
</thead>
<tbody>
<?php
foreach ($output as $o) {
$x = "<tr><td>$o</td>";
for ($i = 0; $i < 8; $i++) {
$x .= "<td><input type='text' size='10'/></td>";
}
echo $x . '</td>';
}
?>
</tbody>
</table>
<hr>
<h2>2. zadatak (1.5 bod)</h2>
<p>
Potrebno je u zadatak koji je bio u sklopu pripreme dodati sklop <a
href="http://www.nxlab.fer.hr/dl/lab2/serial_tx.vhd">serial_tx</a> iz predhodne vježbe.
Zadatak je napraviti sklop <i>pretvarac</i>, koji će pretvarati izlaz signala <code>Z</code> i ispisivati to
kao hex ASCII znak u terminal. Oba sklopa (<code>pretvarac</code> i <code>serial_tx</code>) treba dodati u
<code>datapath</code> modul.
</p>
<p>
<b>Napomena</b>: koji izlaz treba dodati u port map <code>datapath</code> sklopa?
</p>
<img src="dl.png"/>
<hr>
<h2>3. zadatak (1 bod)</h2>
<p>
Potrebno je promjeniti sklop pretvarac iz prošlog zadatka tako da se promjeni njegova funkcionalnost.
Ovisno o parnosti <code>A</code> i <code>B</code> ostvarite:
</p>
<ul>
<li><b>A paran i B paran</b> - hex ASCII od Z</li>
<li><b>A paran i B neparan</b> - hex ASCII od dvojnog komplementa od Z</li>
<li><b>A neparan i B paran</b> - Z-to slovo abecede u lower caseu (ex. Z=1, ispiše se 'b')</li>
<li><b>A neparan i B neparan</b> - Z-to slovo abecede u upper caseu (ex. Z=1, ispiše se 'Y')</li>
</ul>
<p>
<b>Napomena</b>: Slova abecede su numerirana od 0, odnosno za Z=0 se ispisuje 'a', odnosno 'Z'
<br>
<b>Napomena</b>: Ako radite ovaj zadatak, nije potrebno napraviti posebno 2. i 3. nego napravite samo 3.
zadatak.
</p>
</article>
</div>
</body>
</html>
body {
border-left: 5px solid #d9292f;
margin: 0;
}
html, button, input, select, textarea, .pure-g [class *= "pure-u"] {
font-family: Tahoma, Arial;
}
#wraper {
margin: 0 auto;
max-width: 960px;
overflow: hidden;
padding: 0 15px;
}
#center {
margin: 0 auto;
display: block;
padding: 15px 0 0;
}
header {
font-size: 25px;
font-family: Tahoma, Arial;
font-weight: bold;
letter-spacing: -1px;
color: #222;
padding: 3px;
float: left;
} header span {
font-family: Arial;
font-size: 10px;
display: block;
text-shadow: none;
margin-left: 60px;
color: #888;
-webkit-mask: none;
letter-spacing: normal;
font-weight: normal;
} header hr {
margin: 0;
width: 130px;
border: 0;
border-top: 1px dotted #ccc;
} nav {
float: left;
font-family: Arial;
font-size: 10px;
margin: 0 15px;
} nav ul {
list-style: none;
padding: 0 15px;
margin: 10px 0;
} nav ul li {
float: left;
margin: 15px 10px;
} nav ul li a {
color: #d9292f;
} nav ul li a:hover {
text-decoration: underline;
}
h1 {
font-size: 42px;
letter-spacing: -1px;
color: #4a4a4a;
line-height: 38px;
}
h2, h3, h4 {
color: #444;
}
h3 {
font-size: 22px;
}
h4 {
margin: 15px 0 5px;
}
#main section, #main #date {
font-size: 14px;
color: #555;
line-height: 14px;
margin-top: 5px;
width: 500px;
} #main #date {
font-size: 10px;
font-family: Arial;
text-transform: none;
text-shadow: none;
color: #d99396;
line-height: 11px;
display: block;
}
footer {
margin: 20px auto 0;
padding: 8px 8px 50px 8px;
font-size: 10px;
font-family: Arial;
color: #aaa;
border-top: 1px dashed #ddd;
line-height: 1.5;
} a {
color: #d9292f;
text-decoration: none;
} a:hover {
text-decoration: underline;
}
article {
margin: 14px 0;
font-size: 14px;
color: #888;
line-height: 21px;
} article p {
margin: 5px 0;
} article b, article strong {
font-weight: normal;
color: #000;
} i, em {
font-style: italic;
}
article i, article em {
font-style: italic;
color: #666;
} article sub {
font-size: 10px;
text-shadow: none;
height: 0;
line-height: 1;
vertical-align: bottom;
} article sup {
font-size: 10px;
text-shadow: none;
height: 0;
line-height: 1;
vertical-align: super;
} article pre {
padding: 5px 8px;
margin: 10px 10px;
color: #333;
line-height: 1.1;
border: 1px dashed #ccc;
border-width: 1px 0;
font-family: Consolas, "Curier New", monospace;
font-size: 13px;
text-shadow: none;
} article pre:hover {
border-color: #888;
cursor: text;
} article pre i {
color: #d9292f;
} article hr {
margin: 3px -2px;
border: 0;
border-top: 1px dotted #aaa;
} .links hr {
width: 250px;
margin-top: 15px;
} article .links span {
font-size: 11px;
display: block;
line-height: 1.5;
} article pre b {
color: #d9292f;
font-weight: bold;
} footer b {
font-weight: bold;
color: #666;
} #printy {
float: right;
}
@media screen and (min-width: 120px) and (max-width: 480px) {
nav {
margin: 0;
width: 100%;
text-align: center;
border-bottom: 1px dotted #ccc;
text-align: center;
} nav ul li {
margin: 3px 2px 2px;
padding: 5px 13px;
border: 1px solid #ddd;
background: #f5f5f5;
} nav ul li a {
color: #333;
} #printy {
float: none;
display: block;
margin-top: 3px;
}
}
article pre u {
color: #999;
text-decoration: none;
} pre {
overflow: auto;
word-wrap: normal;
white-space: pre;
} .img-description {
font-size: 10px;
margin: 20px 0 0;
text-align: center;
} img {
margin: auto;
}
article .warn {
padding: 5px 8px;
margin: 10px 10px;
line-height: 1.4;
border: 1px dashed #d99396;
color: #d9292f;
font-size: 11px;
border-width: 1px 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment