45 Commits
Author SHA1 Message Date
ShatteredMINT b7621187e6 mention globabls.asm 2026-09-03 20:40:37 +02:00
ShatteredMINT 560855f6ac fix path to stdlib.asm 2026-09-03 20:40:37 +02:00
ShatteredMINT 0ad8cf639c add examples directory 2026-09-03 20:40:29 +02:00
ShatteredMINT 51c7869ce4 add tests folder 2026-09-03 20:40:29 +02:00
ShatteredMINT 443623c945 move assembly files into src directory 2026-09-03 20:40:29 +02:00
Michał Isalski a91895b8ac Fixed at-address 2026-09-03 20:40:29 +02:00
Michal Isalski ef80825f40 Added a shift conversion LUT and finished read_line (except Writeback) 2026-09-03 20:40:29 +02:00
Michał Isalski d0afb22568 Added storing shift status 2026-09-03 20:40:23 +02:00
Michal Isalski a4ecadfad5 Made read_line compliant to new doc guidelines 2026-09-03 20:40:23 +02:00
Michal Isalski 6e5d0acfeb One instruction less by using another register 2026-09-03 20:40:23 +02:00
Michal Isalski 1508c22fc7 Added handling for skipping non-renderable characters
Added handling for backspace character
2026-09-03 20:40:23 +02:00
Michał Isalski 2b85e5a851 Added read_line function 2026-09-03 20:40:23 +02:00
ShatteredMINT cbdcec77b5 clean up confusion about function template 2026-09-03 20:40:19 +02:00
Michał Isalski 6686bc54fc Changed docs of math functions to conform to new guidelines 2026-09-03 20:40:19 +02:00
Michal Isalski eb9dbfb8ad Fixed swapped pop instructions 2026-09-03 20:40:19 +02:00
Michal Isalski 75da3d730f Made find_index conform to new doc guidelines 2026-09-03 20:40:19 +02:00
Michał Isalski 267dcba57d pleegwat's code review fixes 2026-09-03 20:40:19 +02:00
Michał Isalski 0894cdca40 Added comment about predicate context 2026-09-03 20:40:19 +02:00
Michał Isalski a3f74a1f05 Tested and fixed stride->shift conversion missing 2026-09-03 20:40:19 +02:00
Michal Isalski f91c56deb1 Reduced operations to get -1 in register 2026-09-03 20:40:19 +02:00
Michal Isalski 63e9d43440 Fixed the predicate return address 2026-09-03 20:40:19 +02:00
Michal Isalski 8a463207ae Added find_index array function 2026-09-03 20:40:19 +02:00
Michał Isalski 98ecc3619c Added comment about predicate context 2026-09-03 20:39:59 +02:00
Michał Isalski 6be5e520bc Tested and fixed stride->shift conversion missing 2026-09-03 20:39:59 +02:00
Michal Isalski bb4095b8fc Reduced operations to get -1 in register 2026-09-03 20:39:59 +02:00
Michal Isalski bda60bd486 Fixed the predicate return address 2026-09-03 20:39:59 +02:00
Michal Isalski 46e8fad974 Added find_index array function 2026-09-03 20:39:59 +02:00
ShatteredMINT 993bbb797d mention globabls.asm 2026-09-02 11:41:27 +02:00
ShatteredMINT 7a9f2da1c0 create teaching directory 2026-09-02 11:40:39 +02:00
ShatteredMINT db8462a2fe change stack start 2026-09-02 11:40:39 +02:00
ShatteredMINT aa5cc1dbe0 remove mention of non existent file 2026-09-02 11:40:39 +02:00
ShatteredMINT f7d3ca2ec5 relax r7 requirement for result stack 2026-09-02 11:40:39 +02:00
ShatteredMINT da811fd65d remove duplicate documentation from stdlib.asm 2026-09-02 11:40:39 +02:00
ShatteredMINT 49767b61df clarify stack arguments 2026-09-02 11:40:39 +02:00
ShatteredMINT 6eb91f3433 explain inline comment 2026-09-02 11:40:39 +02:00
ShatteredMINT 9220e3dc28 basic contribution guidelines 2026-09-02 11:40:39 +02:00
ShatteredMINT 25ecd155e1 add arrays to readme 2026-09-02 11:40:39 +02:00
ShatteredMINT c071a00746 format calling convention 2026-09-02 11:40:39 +02:00
ShatteredMINT 5400da0157 fix remaining links 2026-09-02 11:40:39 +02:00
ShatteredMINT f19dfd3611 link test 2026-09-02 11:40:39 +02:00
ShatteredMINT a9fa16a241 start readme 2026-09-02 11:40:39 +02:00
ShatteredMINT de9ac7fe72 create globals.asm with placeholder globals 2026-09-02 11:37:26 +02:00
ShatteredMINT 1fc4515f6b include LUTs in memory map 2026-09-02 11:15:43 +02:00
ShatteredMINT f4ae43bbc1 update memory overview 2026-09-02 11:13:48 +02:00
ShatteredMINT f27715b5b3 start memory documentation 2026-09-01 13:45:23 +02:00
5 changed files with 47 additions and 47 deletions
+21
View File
@@ -0,0 +1,21 @@
# Memory Map
To not have to allocate a ton of things at run time the Standard Library uses a static memory map for some purposes
## Overview
| Start | Use |
| ---- | ---- |
| `0x0` | Reset Vector |
| `0x16` | Zero Page |
| `0x100` | User Code |
| `?` | Library Code |
| `0x1_0000` | LUTs |
| `?` | heap |
| `0xXXF0_0000` | Stack |
| `0xXXFF_0000` | quick access |
## Zero Page
Some values are needed not often enough to get their own special register, but often enough that it makes sense to keep them at a quickly accessible location.
This is what the zero page is for. its position in memory allows us to load them into a register with a single instruction.
+2 -1
View File
@@ -3,7 +3,8 @@
This is a standard library for symphony.
It is both intended as a practical toolkit to develop more complex software as well as a teaching resource.
If you just want to use the standard library [[src/stdlib.asm]] is your main header, include it after your code.
If you just want to use the standard library [[stdlib.asm]] is your main header, include it after your code.
You also need to include [[globals.asm]] as the first line in your assembly file.
If you are using it as a learning resource have a look at the [teaching folder](teaching).
+10
View File
@@ -0,0 +1,10 @@
jmp 0x100
@0x10
screen:
frambuffer_ptr: U32 0x0
size: U32 0x0
position_xy: U32 0x0
mode: U32 0x0
@0x100
+13 -44
View File
@@ -4,53 +4,22 @@
; r2 - The second value
; Result:
; r1 - The lower 32 bits of the result
; Clobbers: r2, r3, r4, r5, r6
; Clobbers: r2, r3, r4, r5
pub mul_low:
cmp r1, r2
jbe mul_low_noswap
xor r1, r2, r1
xor r2, r1, r2
xor r1, r2, r1
; Passthrough
mov r3, 0 ; result
mov r4, 31 ; loop counter
; Multiplies r1 and r2, returning the lower part of the result
; This method assumes r1 is smaller than r2, which results in faster execution
; Arguments:
; r1 - The first value
; r2 - The second value
; Result:
; r1 - The lower 32 bits of the result
; Clobbers: r2, r3, r4, r5, r6
pub mul_low_noswap:
mov r4, 0 ; r4 has the result
mov r6, mul_loop_end
add r3, r2, r2
mul_low_loop:
asr r5, r2, 31
and r5, r5, r1
lsl r5, r5, r4
add r3, r3, r5
lsl r2, r2, 1
sub r4, r4, 1
cmp r4, 0
jge mul_low_loop
mov r1, r3
mul_loop:
and r5, r1, 14 ; Taking the first four bits, discarding the odd
lsl r5, r5, 1 ; 0000 - 0, 0001 - 2, 0010 - 4, 0011 - 8, etc.
sub r5, r6, r5
jmp r5
add r4, r4, r3
add r4, r4, r3
add r4, r4, r3
add r4, r4, r3
add r4, r4, r3
add r4, r4, r3
add r4, r4, r3
mul_loop_end:
mov flags, r1
jne mul_skip_one
add r4, r4, r2
mul_skip_one:
lsl r2, r2, 4
lsl r3, r3, 4
lsr r1, r1, 4
cmp r1, zr
jne mul_loop
mov r1, r4
jmp r13
; Calculates the absolute value of the value provided in the r1 register
-1
View File
@@ -1,6 +1,5 @@
pub include bit
pub include imath
pub include array
pub include console
; Needs to be last!