Page 1 of 1

console program

Posted: Fri Aug 20, 2010 10:50 pm
by angel
Hi!

I'm working on a small program and I have the following problem while working with con_set_cursor_pos

Code: Select all

push 10
push 10
call [con_set_cursor_pos]
aHelloword push
call [con_write_ascii]
I want to write "hello world" at position 10.10

The program does not compile, does anyone could help me?

Thank you very much

Re: console program

Posted: Fri Aug 20, 2010 10:57 pm
by SoUrcerer
Is it full source of program?
If yes, you should include Kolibri-header and some code for "console.obj" loading

and, what is

Code: Select all

aHelloword push
?

Re: console program

Posted: Fri Aug 20, 2010 11:25 pm
by angel
It is a modification of one of the examples, specifically testcon.asm. The full code is this:

Code: Select all

use32
        db      'MENUET01'
        dd      1
        dd      start
        dd      i_end
        dd      mem
        dd      mem
        dd      0
        dd      0

REQ_DLL_VER = 2
DLL_ENTRY = 1

start:
; First 3 steps are intended to load/init console DLL
; and are identical for all console programs

; load DLL
        mov     eax, 68
        mov     ebx, 19
        mov     ecx, dll_name
        int     0x40
        test    eax, eax
        jz      exit

; initialize import
        mov	edx, eax
        mov     esi, myimport
import_loop:
        lodsd
        test    eax, eax
        jz      import_done
        push    edx
import_find:
        mov     ebx, [edx]
        test    ebx, ebx
        jz      exit;import_not_found
        push    eax
@@:
        mov     cl, [eax]
        cmp     cl, [ebx]
        jnz     import_find_next
        test    cl, cl
        jz      import_found
        inc     eax
        inc     ebx
        jmp     @b
import_find_next:
        pop     eax
        add     edx, 8
        jmp     import_find
import_found:
        pop     eax
        mov     eax, [edx+4]
        mov     [esi-4], eax
        pop     edx
        jmp     import_loop
import_done:

; check version
        cmp     word [dll_ver], REQ_DLL_VER
        jb      exit
        cmp     word [dll_ver+2], REQ_DLL_VER
        ja      exit
        push    DLL_ENTRY
        call    [dll_start]

; yes! Now do some work (say helloworld in this case).
        push    caption
        push    -1
        push    -1
        push    -1
        push    -1
        call    [con_init]
        ;push    10
        ;push    10
        ;call    [con_set_cursor_pos]
        push    aHelloWorld
        call    [con_write_asciiz]
        push    0
        call    [con_exit]
exit:
        or      eax, -1
        int     0x40

dll_name db '/sys/lib/console.obj',0
caption db 'Console test',0
aHelloWorld     db 27,'[37;1;44m'     
                db 'Hello, World!',10,0

align 4
myimport:
dll_start       dd      aStart
dll_ver         dd      aVersion
con_init        dd      aConInit
con_write_asciiz dd     aConWriteAsciiz
con_exit        dd      aConExit
                dd      0

aStart          db      'START',0
aVersion        db      'version',0
aConInit        db      'con_init',0
aConWriteAsciiz db      'con_write_asciiz',0
aConExit        db      'con_exit',0

i_end:

align 4
rb 2048 ; stack
mem:
lines do not work I have put as comments

Re: console program

Posted: Sat Aug 21, 2010 3:47 am
by hidnplayr
you did not add "con_set_cursor_pos" to the import list, wich contains functions from the library, wich you want to use..
Maybe you should try to use the 'import' macro, as is described here: http://wiki.kolibrios.org/wiki/Libraries

Re: console program

Posted: Sat Aug 21, 2010 2:03 pm
by angel
I've got a problem: :oops:

flat assembler version 1.69.10
example.asm[106]
aconsetcursorpos dd icon_set_cursor_pos',0
error: value out of range


I don't know the bug :cry: :cry:

Code: Select all

use32
        db      'MENUET01'
        dd      1
        dd      start
        dd      i_end
        dd      mem
        dd      mem
        dd      0
        dd      0

REQ_DLL_VER = 2
DLL_ENTRY = 1

start:
; First 3 steps are intended to load/init console DLL
; and are identical for all console programs

; load DLL
        mov     eax, 68
        mov     ebx, 19
        mov     ecx, dll_name
        int     0x40
        test    eax, eax
        jz      exit

; initialize import
        mov	edx, eax
        mov     esi, myimport
import_loop:
        lodsd
        test    eax, eax
        jz      import_done
        push    edx
import_find:
        mov     ebx, [edx]
        test    ebx, ebx
        jz      exit;import_not_found
        push    eax
@@:
        mov     cl, [eax]
        cmp     cl, [ebx]
        jnz     import_find_next
        test    cl, cl
        jz      import_found
        inc     eax
        inc     ebx
        jmp     @b
import_find_next:
        pop     eax
        add     edx, 8
        jmp     import_find
import_found:
        pop     eax
        mov     eax, [edx+4]
        mov     [esi-4], eax
        pop     edx
        jmp     import_loop
import_done:

; check version
        cmp     word [dll_ver], REQ_DLL_VER
        jb      exit
        cmp     word [dll_ver+2], REQ_DLL_VER
        ja      exit
        push    DLL_ENTRY
        call    [dll_start]

; yes! Now do some work (say helloworld in this case).
        push    caption
        push    -1
        push    -1
        push    -1
        push    -1
        call    [con_init]
        push    10

        pop     eax

        push    10

        pop     ebx
        call    [con_set_cursor_pos]
        push    aHelloWorld
        call    [con_write_asciiz]
        push    0
        call    [con_exit]
exit:
        or      eax, -1
        int     0x40

dll_name db '/sys/lib/console.obj',0
caption db 'Console test',0
aHelloWorld     db 27,'[37;1;44m'     
                db 'Hello, World!',10,0

align 4
myimport:
dll_start       dd      aStart
dll_ver         dd      aVersion
con_init        dd      aConInit
con_write_asciiz dd     aConWriteAsciiz
con_exit        dd      aConExit
con_set_cursor_pos dd   aconsetcursorpos
                dd      0

aStart          db      'START',0
aVersion        db      'version',0
aConInit        db      'con_init',0
aConWriteAsciiz db      'con_write_asciiz',0
aConExit        db      'con_exit',0
aconsetcursorpos dd      'con_set_cursor_pos',0

i_end:

align 4
rb 2048 ; stack
mem:


Re: console program

Posted: Sat Aug 21, 2010 2:36 pm
by turbanoff
aconsetcursorpos db icon_set_cursor_pos',0

Re: console program

Posted: Sat Aug 21, 2010 3:25 pm
by hidnplayr
In case you still didnt notice, you forgot the first ' and it looks like you typed a letter i instead
(you typed icon_set_cursor_pos',0 instead of 'con_set_cursor_pos',0)
Also, you typed dd (declare dwords) instead of db (declare bytes)

If you used an editor with syntax hilighting, you'd notice (fasmw for example, if you are using windows)

Re: console program

Posted: Mon Dec 27, 2010 8:03 am
by InterNick
Ángel! somos 2 españoles interesados en estO? que gran noticia! Un saludo desde Pontevedra