OpenCores
URL https://opencores.org/ocsvn/atlas_core/atlas_core/trunk

Subversion Repositories atlas_core

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /atlas_core
    from Rev 24 to Rev 25
    Reverse comparison

Rev 24 → Rev 25

/trunk/asm/atlas_asm.exe Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
/trunk/asm/src/main.cpp
826,7 → 826,10
 
int imm = 65535;
int i = 0;
int j = 0;
int offset = 0;
char temp[32];
char num[32];
char input_string[32];
bool extended = false;
 
959,8 → 962,89
}
 
imm = atoi(input_string); // normal immediate
// immediate label-address?
 
// immediate REALTIVE LOW label-address?
if ((input_string[0] == 'R') and (input_string[1] == 'L') and (input_string[2] == 'O') and (input_string[3] == 'W') and (input_string[4] == '[')){
for(i=5; i<31; i++){
if (input_string[i] != ']')
temp[i-5] = input_string[i];
else{
temp[i-5] = '\0';
break;
}
}
// inline math stuff?
offset = 0;
for(i=0; i<31; i++){
if ((temp[i] == '+') or (temp[i] == '-')) {
if (temp[i] == '-')
offset = -1;
else
offset = +1;
temp[i] = '\0'; // terminate here
for (j=0; j<(31-i); j++)
num[j] = temp[i+j+1];
offset = offset * atoi(num);
break;
}
}
if (temp[0] == '#'){ // immediate
for(i=0; i<31; i++)
temp[i] = temp[i+1];
if (extended == true)
imm = ((atoi(temp) + offset - line) >> 16) & 255; // low immediate of 32-bit immediate
else
imm = (atoi(temp) + offset - line) & 255; // low immediate
}
else { // label address
if (extended == true)
imm = (((find_offset(temp, -1)-line-1)*2+offset) >> 16) & 255; // low immediate of 32-bit immediate
else
imm = ((find_offset(temp, -1)-line-1)*2+offset) & 255; // low immediate
}
}
// immediate REALTIVE HIGH label-address?
if ((input_string[0] == 'R') and (input_string[1] == 'H') and (input_string[2] == 'I') and (input_string[3] == 'G') and (input_string[4] == 'H') and (input_string[5] == '[')){
for(i=6; i<31; i++){
if (input_string[i] != ']')
temp[i-6] = input_string[i];
else{
temp[i-6] = '\0';
break;
}
}
// inline math stuff?
offset = 0;
for(i=0; i<31; i++){
if ((temp[i] == '+') or (temp[i] == '-')) {
if (temp[i] == '-')
offset = -1;
else
offset = +1;
temp[i] = '\0'; // terminate here
for (j=0; j<(31-i); j++)
num[j] = temp[i+j+1];
offset = offset * atoi(num);
break;
}
}
if (temp[0] == '#'){ // immediate
for(i=0; i<31; i++)
temp[i] = temp[i+1];
if (extended == true)
imm = ((atoi(temp) + offset - line) >> 24) & 255; // high immediate of 32-bit immediate
else
imm = ((atoi(temp) + offset - line) >> 8) & 255; // high immediate
}
else{ // label address
if (extended == true)
imm = (((find_offset(temp, -1)-line-1)*2+offset) >> 24) & 255; // high immediate of 32-bit immediate
else
imm = (((find_offset(temp, -1)-line-1)*2+offset) >> 8) & 255; // high immediate
}
}
 
// immediate LOW label-address?
if ((input_string[0] == 'L') and (input_string[1] == 'O') and (input_string[2] == 'W') and (input_string[3] == '[')){
for(i=4; i<31; i++){
if (input_string[i] != ']')
970,21 → 1054,37
break;
}
}
// inline math stuff?
offset = 0;
for(i=0; i<31; i++){
if ((temp[i] == '+') or (temp[i] == '-')) {
if (temp[i] == '-')
offset = -1;
else
offset = +1;
temp[i] = '\0'; // terminate here
for (j=0; j<(31-i); j++)
num[j] = temp[i+j+1];
offset = offset * atoi(num);
break;
}
}
if (temp[0] == '#'){ // immediate
for(i=0; i<31; i++)
temp[i] = temp[i+1];
if (extended == true)
imm = (atoi(temp) >> 16) & 255; // low immediate of 32-bit immediate
imm = ((atoi(temp) + offset) >> 16) & 255; // low immediate of 32-bit immediate
else
imm = atoi(temp) & 255; // low immediate
imm = (atoi(temp) + offset) & 255; // low immediate
}
else {
else { // label address
if (extended == true)
imm = (((find_offset(temp, -1)-2)*2) >> 16) & 255; // low immediate of 32-bit immediate
imm = (((find_offset(temp, -1)-2)*2+offset) >> 16) & 255; // low immediate of 32-bit immediate
else
imm = ((find_offset(temp, -1)-2)*2) & 255; // low immediate
imm = ((find_offset(temp, -1)-2)*2+offset) & 255; // low immediate
}
}
// immediate HIGH label-address?
if ((input_string[0] == 'H') and (input_string[1] == 'I') and (input_string[2] == 'G') and (input_string[3] == 'H') and (input_string[4] == '[')){
for(i=5; i<31; i++){
if (input_string[i] != ']')
994,19 → 1094,34
break;
}
}
// inline math stuff?
offset = 0;
for(i=0; i<31; i++){
if ((temp[i] == '+') or (temp[i] == '-')) {
if (temp[i] == '-')
offset = -1;
else
offset = +1;
temp[i] = '\0'; // terminate here
for (j=0; j<(31-i); j++)
num[j] = temp[i+j+1];
offset = offset * atoi(num);
break;
}
}
if (temp[0] == '#'){ // immediate
for(i=0; i<31; i++)
temp[i] = temp[i+1];
if (extended == true)
imm = (atoi(temp) >> 24) & 255; // high immediate of 32-bit immediate
imm = ((atoi(temp) + offset) >> 24) & 255; // high immediate of 32-bit immediate
else
imm = (atoi(temp) >> 8) & 255; // high immediate
imm = ((atoi(temp) + offset) >> 8) & 255; // high immediate
}
else{
else{ // label address
if (extended == true)
imm = (((find_offset(temp, -1)-2)*2) >> 24) & 255; // high immediate of 32-bit immediate
imm = (((find_offset(temp, -1)-2)*2+offset) >> 24) & 255; // high immediate of 32-bit immediate
else
imm = (((find_offset(temp, -1)-2)*2) >> 8) & 255; // high immediate
imm = (((find_offset(temp, -1)-2)*2+offset) >> 8) & 255; // high immediate
}
}
 
1755,7 → 1870,7
int p_size = 0;
int i = 0;
 
printf("ATLAS 2k Assembler, Version 2014.03.24\n");
printf("ATLAS 2k Assembler, Version 2014.03.28\n");
printf("by Stephan Nolting (stnolting@gmail.com), Hanover, Germany\n");
printf("www.opencores.org/project,atlas_core\n\n");
 
/trunk/doc/Atlas 2k Processor Documentary.pdf Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
/trunk/software/examples/blink_demo/demo.asm
0,0 → 1,48
; **************************************************************************************************************
; DEMO - Simple blink test
; **************************************************************************************************************
 
.equ lr r7 ; link register
 
.equ sys0_core c0
.equ sys1_core c1
.equ com0_core c2
 
 
; **************************************************************************************************************
; Exception Vector Table
; **************************************************************************************************************
 
reset_vec: b reset
x_int0_vec: b x_int0_vec ; freeze
x_int1_vec: b x_int1_vec ; freeze
cmd_err_vec: b cmd_err_vec ; freeze
swi_vec: b swi_vec ; freeze
 
 
; **************************************************************************************************************
; Main Program
; **************************************************************************************************************
reset: clr r0
mcr #1, com0_core, r0, #7 ; clear system output
forever:
ldil r5, #50
bl delay ; wait some time
 
mcr #1, com0_core, r0, #7 ; read system output
sft r0, r0, #swp ; swap bytes
inc r0, r0, #1 ; increment
ldil r1, #0x0F
and r0, r0, r1 ; apply 4-bit mask
sft r0, r0, #swp ; swap bytes again
mcr #1, com0_core, r0, #7 ; set system output
 
b forever ; repeat forever
 
; wait subroutine
delay: ldil r6, #0xff
decs r6, r6, #1
bne #-1
decs r5, r5, #1
bne delay
ret lr
/trunk/software/examples/blink_demo/init.vhd
0,0 → 1,24
000000 => x"bc05", -- B
000001 => x"bc00", -- B
000002 => x"bc00", -- B
000003 => x"bc00", -- B
000004 => x"bc00", -- B
000005 => x"2800", -- CLR
000006 => x"ed0f", -- MCR
000007 => x"c2b2", -- LDIL
000008 => x"be09", -- BL
000009 => x"ed0f", -- MCR
000010 => x"3c00", -- SFT
000011 => x"0001", -- INC
000012 => x"c08f", -- LDIL
000013 => x"2001", -- AND
000014 => x"3c00", -- SFT
000015 => x"ed0f", -- MCR
000016 => x"bdf7", -- B
000017 => x"c77f", -- LDIL
000018 => x"0769", -- DECS
000019 => x"85ff", -- BNE
000020 => x"06d9", -- DECS
000021 => x"85fc", -- BNE
000022 => x"3470", -- RET
others => x"0000" -- NOP
/trunk/software/examples/blink_demo/out.bin Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/software/examples/blink_demo/out.bin Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/software/examples/random_numbers/init.vhd =================================================================== --- trunk/software/examples/random_numbers/init.vhd (nonexistent) +++ trunk/software/examples/random_numbers/init.vhd (revision 25) @@ -0,0 +1,191 @@ +000000 => x"bc0b", -- B +000001 => x"bc04", -- B +000002 => x"bc03", -- B +000003 => x"bc02", -- B +000004 => x"bc01", -- B +000005 => x"be31", -- BL +000006 => x"c110", -- LDIL +000007 => x"c901", -- LDIH +000008 => x"be21", -- BL +000009 => x"be2d", -- BL +000010 => x"bc00", -- B +000011 => x"c12c", -- LDIL +000012 => x"c901", -- LDIH +000013 => x"be19", -- BL +000014 => x"c144", -- LDIL +000015 => x"c901", -- LDIH +000016 => x"be19", -- BL +000017 => x"be34", -- BL +000018 => x"ec4d", -- MCR +000019 => x"be23", -- BL +000020 => x"c160", -- LDIL +000021 => x"c901", -- LDIH +000022 => x"be13", -- BL +000023 => x"be2e", -- BL +000024 => x"d24f", -- CBR +000025 => x"ec4e", -- MCR +000026 => x"be1c", -- BL +000027 => x"c0b0", -- LDIL +000028 => x"be1f", -- BL +000029 => x"c0f8", -- LDIL +000030 => x"be1d", -- BL +000031 => x"ee05", -- MRC +000032 => x"be4a", -- BL +000033 => x"be15", -- BL +000034 => x"ec20", -- MRC +000035 => x"dc0f", -- STB +000036 => x"b9ea", -- BTS +000037 => x"bdf6", -- B +000038 => x"c5ff", -- LDIL +000039 => x"0270", -- MOV +000040 => x"bc03", -- B +000041 => x"29b3", -- CLR +000042 => x"0270", -- MOV +000043 => x"7829", -- LDR +000044 => x"c080", -- LDIL +000045 => x"ccff", -- LDIH +000046 => x"2081", -- AND +000047 => x"3c98", -- SFTS +000048 => x"8003", -- BEQ +000049 => x"be0a", -- BL +000050 => x"bdf9", -- B +000051 => x"03c0", -- MOV +000052 => x"343b", -- TEQ +000053 => x"f707", -- RBAEQ +000054 => x"0170", -- MOV +000055 => x"c08d", -- LDIL +000056 => x"be03", -- BL +000057 => x"c08a", -- LDIL +000058 => x"03a0", -- MOV +000059 => x"ec22", -- MRC +000060 => x"dc05", -- STB +000061 => x"b9fe", -- BTS +000062 => x"ed18", -- MCR +000063 => x"3470", -- RET +000064 => x"ec20", -- MRC +000065 => x"dc8f", -- STBI +000066 => x"b9fe", -- BTS +000067 => x"c800", -- LDIH +000068 => x"3470", -- RET +000069 => x"0170", -- MOV +000070 => x"c200", -- LDIL +000071 => x"c184", -- LDIL +000072 => x"bff8", -- BL +000073 => x"c0c6", -- LDIL +000074 => x"1809", -- CMP +000075 => x"9003", -- BMI +000076 => x"c0a0", -- LDIL +000077 => x"1001", -- SUB +000078 => x"c0b0", -- LDIL +000079 => x"1809", -- CMP +000080 => x"91f8", -- BMI +000081 => x"c0c6", -- LDIL +000082 => x"1818", -- CMP +000083 => x"91f5", -- BMI +000084 => x"c0b9", -- LDIL +000085 => x"1818", -- CMP +000086 => x"a404", -- BLS +000087 => x"c0c1", -- LDIL +000088 => x"1809", -- CMP +000089 => x"a1ef", -- BHI +000090 => x"0080", -- MOV +000091 => x"bfe0", -- BL +000092 => x"c030", -- LDIL +000093 => x"1090", -- SUB +000094 => x"c009", -- LDIL +000095 => x"1809", -- CMP +000096 => x"a402", -- BLS +000097 => x"0497", -- DEC +000098 => x"3e42", -- SFT +000099 => x"3e42", -- SFT +000100 => x"3e42", -- SFT +000101 => x"3e42", -- SFT +000102 => x"2641", -- ORR +000103 => x"05b9", -- DECS +000104 => x"85e0", -- BNE +000105 => x"3420", -- RET +000106 => x"0370", -- MOV +000107 => x"3d42", -- SFT +000108 => x"3d22", -- SFT +000109 => x"3d22", -- SFT +000110 => x"3d22", -- SFT +000111 => x"be0f", -- BL +000112 => x"bfcb", -- BL +000113 => x"3d40", -- SFT +000114 => x"be0c", -- BL +000115 => x"bfc8", -- BL +000116 => x"3d45", -- SFT +000117 => x"3d25", -- SFT +000118 => x"3d25", -- SFT +000119 => x"3d25", -- SFT +000120 => x"be06", -- BL +000121 => x"bfc2", -- BL +000122 => x"0140", -- MOV +000123 => x"be03", -- BL +000124 => x"bfbf", -- BL +000125 => x"3460", -- RET +000126 => x"c08f", -- LDIL +000127 => x"2121", -- AND +000128 => x"c089", -- LDIL +000129 => x"181a", -- CMP +000130 => x"8803", -- BCS +000131 => x"c0b0", -- LDIL +000132 => x"bc02", -- B +000133 => x"c0b7", -- LDIL +000134 => x"0892", -- ADD +000135 => x"3470", -- RET +000136 => x"4578", -- .DW +000137 => x"6365", -- .DW +000138 => x"7074", -- .DW +000139 => x"696f", -- .DW +000140 => x"6e2f", -- .DW +000141 => x"696e", -- .DW +000142 => x"7465", -- .DW +000143 => x"7272", -- .DW +000144 => x"7570", -- .DW +000145 => x"7420", -- .DW +000146 => x"6572", -- .DW +000147 => x"726f", -- .DW +000148 => x"7221", -- .DW +000149 => x"0000", -- .DW +000150 => x"5261", -- .DW +000151 => x"6e64", -- .DW +000152 => x"6f6d", -- .DW +000153 => x"204e", -- .DW +000154 => x"756d", -- .DW +000155 => x"6265", -- .DW +000156 => x"7220", -- .DW +000157 => x"4765", -- .DW +000158 => x"6e65", -- .DW +000159 => x"7261", -- .DW +000160 => x"746f", -- .DW +000161 => x"7200", -- .DW +000162 => x"456e", -- .DW +000163 => x"7465", -- .DW +000164 => x"7220", -- .DW +000165 => x"4c46", -- .DW +000166 => x"5352", -- .DW +000167 => x"2073", -- .DW +000168 => x"6565", -- .DW +000169 => x"6420", -- .DW +000170 => x"2834", -- .DW +000171 => x"6865", -- .DW +000172 => x"7829", -- .DW +000173 => x"3a20", -- .DW +000174 => x"3078", -- .DW +000175 => x"0000", -- .DW +000176 => x"456e", -- .DW +000177 => x"7465", -- .DW +000178 => x"7220", -- .DW +000179 => x"4c46", -- .DW +000180 => x"5352", -- .DW +000181 => x"2074", -- .DW +000182 => x"6170", -- .DW +000183 => x"7320", -- .DW +000184 => x"2834", -- .DW +000185 => x"6865", -- .DW +000186 => x"7829", -- .DW +000187 => x"3a20", -- .DW +000188 => x"3078", -- .DW +000189 => x"0000", -- .DW +others => x"0000" -- NOP \ No newline at end of file Index: trunk/software/examples/random_numbers/random_numbers.asm =================================================================== --- trunk/software/examples/random_numbers/random_numbers.asm (nonexistent) +++ trunk/software/examples/random_numbers/random_numbers.asm (revision 25) @@ -0,0 +1,301 @@ +; ************************************************************************************************************** +; Print Random Numbers - LFSR Test +; +; Print random hex numbers from the LFSR via UART +; Uses BAUD rate from bootloader config!!! +; ************************************************************************************************************** + + +; ************************************************************************************************************** +; Defintions +; ************************************************************************************************************** + +.equ sys0_core c0 +.equ com0_core c2 +.equ lr r7 ; link register + + +; ************************************************************************************************************** +; Exception Vector Table +; ************************************************************************************************************** + +reset_vec: b reset +x_int0_vec: b err_handler +x_int1_vec: b err_handler +cmd_err_vec: b err_handler +swi_vec: b err_handler + + +; ************************************************************************************************************** +; IRQ/SWI/CMD_ERR: Terminate +; ************************************************************************************************************** + +err_handler: bl uart_linebreak + ldil r2, low[err_string] + ldih r2, high[err_string] + bl uart_print + bl uart_linebreak + b #+0 ; freeze + + +; ************************************************************************************************************** +; Main Program +; ************************************************************************************************************** + +reset: ; print intro + ldil r2, low[string_intro] + ldih r2, high[string_intro] + bl uart_print_br + +restart: ; get seed + ldil r2, low[string_seed] + ldih r2, high[string_seed] + bl uart_print + bl receive_hex_word + mcr #1, sys0_core, r4, #5 ; set lfsr data register + bl uart_linebreak + + ; get taps + ldil r2, low[string_taps] + ldih r2, high[string_taps] + bl uart_print + bl receive_hex_word + cbr r4, r4, #15 ; new value after read access + mcr #1, sys0_core, r4, #6 ; set lfsr polynomial register + bl uart_linebreak + + ; read and print hex random numbers +forever: ldil r1, #'0' + bl uart_sendbyte + ldil r1, #'x' + bl uart_sendbyte + + ; get and print + mrc #1, r4, sys0_core, #5 ; get lfsr data + bl print_hex_string + bl uart_linebreak + + ; user console interrupt? + mrc #1, r0, com0_core, #0 ; get uart RTX register + stb r0, #15 ; copy uart rx_ready flag to T-flag + bts restart + + ; repeat forever + b forever + + +; ************************************************************************************************************** +; Communication Subroutines +; ************************************************************************************************************** + + +; -------------------------------------------------------------------------------------------------------- +; Print char-string (bytes) via CP0.COM_0.UART and send linebreak +; Arguments: r2 = address of string (string must be zero-terminated!) +; Results: - +; Used registers: r0, r1, r2, r3, r4, lr +uart_print_br: +; -------------------------------------------------------------------------------------------------------- + ldil r3, #0xFF + mov r4, lr + b uart_print_loop + + +; -------------------------------------------------------------------------------------------------------- +; Print char-string (bytes) via CP0.COM_0.UART +; Arguments: r2 = address of string (string must be zero-terminated!) +; Results: - +; Used registers: r0, r1, r2, r3, r4, lr +uart_print: +; -------------------------------------------------------------------------------------------------------- + clr r3 + mov r4, lr + +uart_print_loop: + ldr r0, r2, +#1, post, ! ; get one string byte + ldil r1, #0x00 ; upper byte mask + ldih r1, #0xFF + and r1, r0, r1 + sfts r1, r1, #swp ; swap bytes and test if zero + beq uart_print_loop_end + bl uart_sendbyte + b uart_print_loop + +uart_print_loop_end: + mov lr, r4 + teq r3, r3 ; do linebreak? + rbaeq lr +; b uart_linebreak + + +; -------------------------------------------------------------------------------------------------------- +; Print linebreak +; Arguments: - +; Results: - +; Used registers: r0, r1, r2, lr +uart_linebreak: +; -------------------------------------------------------------------------------------------------------- + mov r2, lr + ldil r1, #0x0D ; carriage return + bl uart_sendbyte + ldil r1, #0x0A ; line feed + mov lr, r2 +; b uart_sendbyte + + +; -------------------------------------------------------------------------------------------------------- +; Print char (byte) via CP0.COM_0.UART +; Arguments: r1 = char (low byte) +; Results: - +; Used registers: r0, r1 +uart_sendbyte: +; -------------------------------------------------------------------------------------------------------- + mrc #1, r0, com0_core, #2 ; get com control register + stb r0, #5 ; copy uart tx_busy flag to T-flag + bts uart_sendbyte ; still set, keep on waiting + mcr #1, com0_core, r1, #0 ; send data + ret lr + + +; -------------------------------------------------------------------------------------------------------- +; Receive a byte via CP0.COM_0.UART +; Arguments: - +; Results: r0 (low byte) +; Used registers: r0 +uart_receivebyte: +; -------------------------------------------------------------------------------------------------------- + mrc #1, r0, com0_core, #0 ; get uart status/data register + stbi r0, #15 ; copy inverted uart rx_ready flag to T-flag + bts uart_receivebyte ; nothing received, keep on waiting + ldih r0, #0x00 ; clear upper byte + ret lr + + +; -------------------------------------------------------------------------------------------------------- +; Reads 16 bit data as 4x hex chars via UART (+ECHO) +; Arguments: - +; Results: +; r4 = data +; Used registers: r0, r1, r2, r3, r4, lr +receive_hex_word: +; -------------------------------------------------------------------------------------------------------- + mov r2, lr ; backup link regsiter + ldil r4, #0 ; clear data register + ldil r3, #4 ; number of chars + +receive_hex_word_loop: + bl uart_receivebyte ; get one char + + ; convert to higher case + ldil r1, #'F' + cmp r0, r1 + bmi #+3 ; skip decrement + ldil r1, #32 ; -> to lower case + sub r0, r0, r1 + + ; is valid? + ldil r1, #'0' + cmp r0, r1 + bmi receive_hex_word_loop ; if less than '0' + + ldil r1, #'F' + cmp r1, r0 + bmi receive_hex_word_loop ; if higher than 'F' + + ldil r1, #'9' + cmp r1, r0 + bls receive_hex_word_echo ; if less than '9' + + ldil r1, #'A' + cmp r0, r1 + bhi receive_hex_word_loop ; if less than 'A' + + ; echo char +receive_hex_word_echo: + mov r1, r0 + bl uart_sendbyte + + ; do conversion + ldil r0, #'0' + sub r1, r1, r0 + ldil r0, #9 + cmp r0, r1 + bls #+2 ; 0..9 -> ok + dec r1, r1, #7 ; 'A' - '0' - 10 = 7 -> A..F -> ok + + ; save conversion data + sft r4, r4, #rol + sft r4, r4, #rol + sft r4, r4, #rol + sft r4, r4, #rol + orr r4, r4, r1 + + ; loop controller + decs r3, r3, #1 + bne receive_hex_word_loop + + ret r2 ; return + + +; -------------------------------------------------------------------------------------------------------- +; Prints 16bit data as 4x char hex value +; Arguments: +; r4 = data +; Results: - +; Used registers: r0, r1, r2, r3, r4, r6, lr +print_hex_string: +; -------------------------------------------------------------------------------------------------------- + mov r6, lr ; backup link regiiter + + ; char 3 + sft r2, r4, #rol + sft r2, r2, #rol + sft r2, r2, #rol + sft r2, r2, #rol + bl conv_hex_comp + bl uart_sendbyte + + ; char 2 + sft r2, r4, #swp + bl conv_hex_comp + bl uart_sendbyte + + ; char 1 + sft r2, r4, #lsr + sft r2, r2, #lsr + sft r2, r2, #lsr + sft r2, r2, #lsr + bl conv_hex_comp + bl uart_sendbyte + + ; char 0 + mov r2, r4 + bl conv_hex_comp + bl uart_sendbyte + + ret r6 + +; compute hex-char from 4-bit value of r2, result in r1 +conv_hex_comp: ldil r1, #0x0f ; mask for lowest 4 bit + and r2, r2, r1 + + ldil r1, #9 + cmp r1, r2 + bcs #+3 + + ldil r1, #48 ; this is a '0' + b #+2 + ldil r1, #55 ; this is an 'A'-10 + add r1, r1, r2 ; resulting char in lower byte + ret lr + + +; ************************************************************************************************************** +; Constants +; ************************************************************************************************************** + +; -- strings -- +err_string: .stringz "Exception/interrupt error!" +string_intro: .stringz "Random Number Generator" +string_seed: .stringz "Enter LFSR seed (4hex): 0x" +string_taps: .stringz "Enter LFSR taps (4hex): 0x" Index: trunk/software/examples/random_numbers/out.bin =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/software/examples/random_numbers/out.bin =================================================================== --- trunk/software/examples/random_numbers/out.bin (nonexistent) +++ trunk/software/examples/random_numbers/out.bin (revision 25)
trunk/software/examples/random_numbers/out.bin Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.