fixed linker and syscall

git-svn-id: svn://kolibrios.org@9063 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
pavelyakov 2021-07-13 16:16:46 +00:00
parent 9212ac1784
commit d2c9bf489c
3 changed files with 177 additions and 31 deletions

View File

@ -9,40 +9,67 @@ const (
BtnExit=1; BtnExit=1;
) )
func RedrawAll(bar_pos int){ type Button struct { // structure gui button
os.Redraw(1) label string
os.Window(500,250,420,200, "Test Golang") x int
os.DrawLine(32, 80, 150, 80, colors.Green) y int
os.CreateButton(32, 128, 80, 30, Btn1, colors.Blue); id int
os.CreateButton(300, 128, 80, 30, Btn2, colors.Blue);
os.WriteText(32,128, 0x11000000 | colors.White," <- ")
os.WriteText(320,128, 0x11000000 | colors.White," -> ")
os.DrawBar(bar_pos, 90, 100, 30, colors.Red);
} }
func Load() { func NewButton() Button {
object := Button{"Text",0,0,Btn1} // default data
return object
}
func (button *Button) make() {
os.CreateButton(button.x, button.y, len(button.label)*15, 30, button.id, colors.Blue);
os.WriteText(button.x,button.y, 0x11000000 | colors.White, button.label)
}
func RedrawAll(bar_pos int){
os.Redraw(1)
os.Window(500,250,420,200, "Example GoLang")
os.DrawLine(32, 80, 150, 80, colors.Green)
os.DrawBar(bar_pos, 90, 100, 30, colors.Red);
b1 := NewButton()
b1.label = " <- "
b1.x = 32
b1.y = 128
b1.id = Btn1
b1.make()
b2 := NewButton()
b2.label = " -> "
b2.x = 310
b2.y = 128
b2.id = Btn2
b2.make()
}
func Main() {
var pos = 160;
//time := os.GetTime() //time := os.GetTime()
//os.DebugOutStr("Time: ") //os.DebugOutStr("Time: ")
//os.DebugOutHex(time) //os.DebugOutHex(time)
var pos=32;
for true { for true {
switch os.Event() { switch os.Event() {
case os.EVENT_REDRAW: case os.EVENT_REDRAW:
RedrawAll(pos) RedrawAll(pos)
break break
case os.EVENT_BUTTON: case os.EVENT_BUTTON:
switch os.GetButtonID() { switch os.GetButtonID() {
case Btn1: case Btn1:
pos-=32 pos-=32
RedrawAll(pos) RedrawAll(pos)
break break
case Btn2: case Btn2:
pos+=32 pos+=32
RedrawAll(pos); RedrawAll(pos);
break break
case BtnExit: case BtnExit:
os.Exit() os.Exit()
} }
} }
} }
} }

View File

@ -12,18 +12,23 @@ const (
EVENT_DEBUG = 9 /* Debug subsystem event */ EVENT_DEBUG = 9 /* Debug subsystem event */
EVENT_IRQBEGIN = 16 EVENT_IRQBEGIN = 16
) )
func Sleep(uint32) func Sleep(uint32)
func GetTime()(time uint32) func GetTime()(time uint32)
func Event()(uint32) func Event()(int)
func GetButtonID()(id int) func GetButtonID()(id int)
func CreateButton(x uint32, y uint32, xsize uint32, ysize uint32, id uint32, color uint32) func CreateButton(x int, y int, xsize int, ysize int, id int, color uint32)
func Exit() func Exit()
func Redraw(uint32) func Redraw(int)
func Window(y uint32, x uint32, w uint32,h uint32, title string) func Window(y int, x int, w int,h int, title string)
func WriteText(x uint32 ,y uint32 , color uint32, text string) func WriteText(x int ,y int , color uint32, text string)
func WriteText2(uint32 ,string ,uint32, uint32,uint32) func WriteText2(int ,int ,int, uint32,uint32)
func DrawLine(x1 uint32, y1 uint32, x2 uint32, y2 uint32, color uint32)(uint32) func DrawLine(x1 int, y1 int, x2 int, y2 int, color uint32)(uint32)
func DrawBar(x int, y int, xsize int, ysize int, color uint32) func DrawBar(x int, y int, xsize int, ysize int, color uint32)
func DebugOutHex(uint32) func DebugOutHex(uint32)
func DebugOutChar(byte) func DebugOutChar(byte)
func DebugOutStr(string) func DebugOutStr(string)
func Pointer2byteSlice(ptr uint32) *[]byte __asm__("__unsafe_get_addr")
//func Pointer2uint32(ptr interface{}) uint32 __asm__("__unsafe_get_addr")

View File

@ -17,6 +17,116 @@ global go.os.DebugOutChar
global go.os.DebugOutStr global go.os.DebugOutStr
global go.os.WriteText2 global go.os.WriteText2
global runtime.memequal32..f
runtime.memequal32..f:
ret
global runtime.memequal8..f
runtime.memequal8..f:
ret
global runtime.memequal
runtime.memequal:
ret
global go.os.SetByteString
go.os.SetByteString:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov ebx, [ebp+12]
mov ecx, [ebp+16]
mov dh, [ebp+20]
mov byte[eax+ecx], dh
mov esp, ebp
pop ebp
ret
global __go_runtime_error
global __go_register_gc_roots
global __unsafe_get_addr
__unsafe_get_addr:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov esp, ebp
pop ebp
ret
__go_register_gc_roots:
__go_runtime_error:
ret
global runtime.writeBarrier
global runtime.gcWriteBarrier
runtime.writeBarrier:
mov eax, [esp+8]
mov ebx, [esp+12]
mov dword[eax], ebx
ret
global runtime.strequal..f
runtime.strequal..f:
mov eax,[esp+8]
mov ebx,[esp+16]
mov ecx,0
strcmp_loop:
mov byte dl,[eax+ecx]
mov byte dh,[ebx+ecx]
inc ecx
cmp dl,0
je strcmp_end_0
cmp byte dl,dh
je strcmp_loop
jl strcmp_end_1
jg strcmp_end_2
strcmp_end_0:
cmp dh,0
jne strcmp_end_1
xor ecx,ecx
ret
strcmp_end_1:
mov ecx,1
ret
strcmp_end_2:
mov ecx,-1
ret
runtime.gcWriteBarrier:
mov eax, [esp+8]
mov ebx, [esp+12]
mov dword[eax], ebx
ret
global runtime.goPanicIndex
runtime.goPanicIndex:
ret
global runtime.registerGCRoots
runtime.registerGCRoots:
ret
global memcmp
memcmp:
push ebp
mov ebp,esp
mov esi, [ebp+8] ; Move first pointer to esi
mov edi, [ebp+12] ; Move second pointer to edi
mov ecx, [ebp+16] ; Move length to ecx
cld ; Clear DF, the direction flag, so comparisons happen
; at increasing addresses
cmp ecx, ecx ; Special case: If length parameter to memcmp is
; zero, don't compare any bytes.
repe cmpsb ; Compare bytes at DS:ESI and ES:EDI, setting flags
; Repeat this while equal ZF is set
setz al
mov esp,ebp
pop ebp
ret
go.os.Sleep: go.os.Sleep:
push ebp push ebp
mov ebp,esp mov ebp,esp
@ -211,3 +321,7 @@ go.os.CreateButton:
SECTION .data SECTION .data
__hexdigits: __hexdigits:
db '0123456789ABCDEF' db '0123456789ABCDEF'
__test:
dd __hexdigits
dd 15