mirror of
https://gitlab.os-k.eu/os-k-team/kvisc.git
synced 2023-08-25 14:05:46 +02:00
204 lines
2.7 KiB
Plaintext
204 lines
2.7 KiB
Plaintext
; The OS/K Team licenses this file to you under the MIT license.
|
|
; See the LICENSE file in the project root for more information.
|
|
|
|
;
|
|
; Main function
|
|
;
|
|
main:
|
|
call cpudev_test
|
|
ret
|
|
|
|
cpudev_test:
|
|
call RFS.GetLeastAvail
|
|
mov rbx, rax
|
|
|
|
call RFS.GetCurIdx
|
|
mov rcx, rax
|
|
|
|
call RFS.GetMaxIdx
|
|
mov rdx, rax
|
|
|
|
mov ax0, 1
|
|
call RFS.ActivateFrame
|
|
|
|
mov ax0, 1
|
|
mov ax1, $rip
|
|
mov ax2, trap0_test
|
|
call RFS.StoreReg
|
|
|
|
mov ax0, 256
|
|
mov ax1, 1
|
|
call IDT.AddHandler
|
|
|
|
trap 0
|
|
trap 0
|
|
trap 2
|
|
|
|
ret
|
|
|
|
trap0_test:
|
|
mov rsp, 0x300000
|
|
mov nx7, rax
|
|
|
|
mov ax0, .msg
|
|
call print
|
|
|
|
mov ax0, nx7
|
|
call IDT.DoneHandling
|
|
|
|
iret
|
|
|
|
.msg = "Handling TRAP #0 !\n"
|
|
|
|
showoff:
|
|
call ramdev_test
|
|
call bswap_test
|
|
call itoa_test
|
|
prn 10
|
|
call str_test
|
|
call movzx_test
|
|
prn 10
|
|
call printf_test
|
|
ret
|
|
|
|
printf_test:
|
|
mov ax0, .fmt
|
|
sub rsp, 128
|
|
mov q[rsp+40], 0x7FE
|
|
mov q[rsp+32], -2
|
|
mov q[rsp+24], 666
|
|
mov q[rsp+16], 0x112233DDAA6677BB
|
|
mov q[rsp+8], 'K'
|
|
mov q[rsp], .str
|
|
call printf
|
|
add rsp, 128
|
|
ret
|
|
|
|
.fmt = "%% Hello World %s - %c - %p - %d - %d - %b"
|
|
.str = "(cc)"
|
|
|
|
strchr_test:
|
|
mov rax, 0
|
|
mov ax0, .str
|
|
mov ax1, 33
|
|
call strchr
|
|
prn b[rax]
|
|
ret
|
|
|
|
.str = "Hello World!"
|
|
|
|
bswap_test:
|
|
mov rdx, 0x1122334455667788
|
|
bswap rax, rdx
|
|
|
|
mov rdi, 0x1111222233334444
|
|
wswap rsx, rdi
|
|
|
|
mov ax3, 0x1111111122222222
|
|
dswap ax0, ax3
|
|
|
|
ret
|
|
|
|
ramdev_test:
|
|
call MEM.GetMemOff
|
|
mov rdx, rax
|
|
|
|
call MEM.GetMemSize
|
|
ret
|
|
|
|
movzx_test:
|
|
enter 1
|
|
|
|
mov q[rsp], 0xFABC1234CCCCDDDD
|
|
|
|
mov rax, b[rsp]
|
|
mov rbx, w[rsp]
|
|
mov rcx, l[rsp]
|
|
mov rdx, q[rsp]
|
|
|
|
movzx rsx, b[rsp]
|
|
movzx rbi, w[rsp]
|
|
movzx rsi, l[rsp]
|
|
movzx rdi, q[rsp]
|
|
|
|
leave
|
|
ret
|
|
|
|
itoa_test:
|
|
mov ax0, .buf
|
|
mov ax1, LONG_MIN
|
|
mov ax2, 10
|
|
call itoa
|
|
|
|
mov ax0, rax
|
|
call print
|
|
|
|
prn 10
|
|
mov ax0, .buf
|
|
mov ax1, 0xfff85ffffffffff4
|
|
mov ax2, 16
|
|
call itoa
|
|
|
|
mov ax0, rax
|
|
call print
|
|
|
|
ret
|
|
|
|
.buf = [32]
|
|
|
|
devtest:
|
|
mov ax0, .buf
|
|
devctl 0, 1
|
|
|
|
mov ax0, .buf
|
|
call print
|
|
|
|
iocall 0, 0
|
|
|
|
ret
|
|
|
|
.buf = [32]
|
|
|
|
str_test:
|
|
mov ax0, .msg
|
|
call print
|
|
|
|
mov ax0, .buf1
|
|
mov ax1, .msg
|
|
call strcpy
|
|
|
|
prn 10
|
|
mov ax0, .buf1
|
|
call print
|
|
|
|
mov ax0, .buf2
|
|
mov ax1, .msg
|
|
mov ax2, 8
|
|
call strnzcpy
|
|
|
|
prn 10
|
|
mov ax0, .buf2
|
|
mov ax1, 12
|
|
call print_n
|
|
|
|
mov ax0, .msg
|
|
mov ax1, .buf1
|
|
call strcmp
|
|
mov rbx, rax
|
|
|
|
mov ax0, .buf2
|
|
mov ax1, .msg
|
|
call strcmp
|
|
mov rsx, rax
|
|
|
|
mov ax0, .buf2
|
|
call strlen
|
|
|
|
ret
|
|
|
|
.msg = "Hello World :)"
|
|
|
|
.buf1 = [32]
|
|
.buf2 = "!!!!!!!!!!!!!"
|
|
|