- Module files are removed from the source folder.

- Removed fasm debug module. 
- Added debug function to "kolibri" module.

git-svn-id: svn://kolibrios.org@8475 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
superturbocat2001 2020-12-25 23:07:44 +00:00
parent 4930c1d7a2
commit 6db1f4dd5a
11 changed files with 35 additions and 351 deletions

View File

@ -0,0 +1,19 @@
#include "tp.h"
void debug_write_byte(const char ch){
__asm__ __volatile__(
"int $0x40"
::"a"(63), "b"(1), "c"(ch)
);
}
tp_obj kolibri_debug_print(TP)
{
tp_obj str = TP_TYPE(TP_STRING);
for(int i=0; i < str.string.len; i++)
{
debug_write_byte(str.string.val[i]);
}
return tp_None;
}

View File

@ -2,6 +2,7 @@
extern tp_obj kolibri_open(TP);
extern tp_obj kolibri_mainwindow(TP);
extern tp_obj kolibri_debug_print(TP);
extern tp_obj kolibri_socket_module(TP);
extern tp_obj tp_dict(TP);
extern tp_obj tp_fnc(TP,tp_obj v(TP));
@ -13,6 +14,8 @@ void kolibri_init(TP)
tp_set(tp, kolibri_mod, tp_string("open"), tp_fnc(tp, kolibri_open));
tp_set(tp, kolibri_mod, tp_string("window"), tp_fnc(tp, kolibri_mainwindow));
/* debug */
tp_set(tp, kolibri_mod, tp_string("debug_print"), tp_fnc(tp, kolibri_debug_print));
/* socket is a separated module. */
tp_set(tp, kolibri_mod, tp_string("socket"), socket_mod);

View File

@ -13,21 +13,24 @@ CFLAGS = -U_Win32 -U_WIN32 -U__MINGW32__ -mpreferred-stack-boundary=2 \
INCLUDES= -I. -I$(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib
OBJECTS = tpmain.o kolibri_init.o kolibri_fs.o kolibri_gui.o kolibri_net.o kolibri_dbg.obj
KOLIBRI_M_OBJ= ../modules/kolibri/init.o \
../modules/kolibri/fs.o \
../modules/kolibri/net.o \
../modules/kolibri/gui.o \
../modules/kolibri/debug.o \
OBJECTS = tpmain.o $(KOLIBRI_M_OBJ)
all:$(NAME)
$(NAME): $(OBJECTS) Makefile
$(NAME): $(OBJECTS)
$(LD) $(LIBPATH) --subsystem native -o $@ $(OBJECTS) $(LDFLAGS) -n -Map $(NAME).map
kos32-objcopy $@ -O binary
kpack $@
%.o : %.c Makefile
$(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $<
kolibri_dbg.obj: fasm_modules/kolibri_dbg.s
fasm fasm_modules/kolibri_dbg.s
cp fasm_modules/kolibri_dbg.obj .
clean:
-rm -f *.o $(NAME).map fasm_modules/kolibri_dbg.obj kolibri_dbg.obj
rm -f *.o $(NAME).map $(KOLIBRI_M_OBJ)

View File

@ -1,155 +0,0 @@
; TinyPy module
; Name: kolibri_dbg
;
; Exports:
; debug_print(msg) - prints a message to debug board.
format coff
use32 ; Tell compiler to use 32 bit instructions
section '.init' code ; Keep this line before includes or GCC messes up call addresses
include '../../../proc32.inc'
include '../../../struct.inc'
purge section,mov,add,sub
include 'tinypy.inc'
include '../../../../programs/dll.inc'
extrn '_tp_dict' as tp_dict
extrn '_tp_set' as tp_set
extrn '_tp_get' as tp_get
extrn '_tp_None' as tp_None
extrn '_tp_fnc' as tp_fnc
public kolibri_dbg_init as '_kolibri_dbg_init'
; Module name
modname db "kolibri_dbg"
modnamelen = $-modname
; Exported function name
debug_print_name db "debug_print"
debug_print_namelen = $-debug_print_name
; Export dictionary for module
kolibri_dbg_dict rb sizeof.tp_obj
; tp_obj of exported function
debug_print_obj rb sizeof.tp_obj
; Function debug_print(tp_vm *tp)
; return nothing
debug_print:
push ebp
mov ebp, esp
; Store registers
push eax
push ebx
push ecx
push edx
sub esp, sizeof.tp_obj; Reserve tp_obj tmp
mov edx, esp
push edx ;Store &tmp
; Obtain tp_string parameter
; tp_get(&tmp, tp, *(tp_obj *)(tp_vm->params), tp_None)
push_tp_none
mov eax, dword[ebp+12] ;4 for return address, 4 for result pointer; 4 for tp_vm
add eax, tp_vm.params
push_tp_obj_at_reg eax
push dword[ebp+12]
push edx ;ebx contains address of reserved tp_obj variable
call tp_get
;Restore stack
add esp, sizeof.tp_obj*2+4;2 tp_obj's and 2 pointers in parameters minus 1 pointer to result (cleared inside tp_get)
;Leave if parameter is not a string. tp_raise() should be called here.
pop edx; edx = &tmp
cmp dword[edx], TP_STRING ; Check that function returned a TP_STRING
jne .exit
mov ecx, dword[edx+tp_string_.len] ; String length
mov edx, dword[edx+tp_string_.val] ;
mov eax, 63
mov ebx, 1
.cont:
; Print message.
push ecx ; Store ecx to use it in inner loop
mov cl, byte[edx]
inc edx
int 40h
pop ecx ; Get ecx back
loop .cont
.exit:
add esp, sizeof.tp_obj ; Release tp_obj reserved in stack.
; Returning tp_None
mov eax, dword[ebp+8]
mov dword[eax], 0
; Restore registers
pop edx
pop ecx
pop ebx
pop eax
mov esp, ebp
pop ebp
ret
;void kolibri_dbg_init(tp_vm *tp);
kolibri_dbg_init:
push ebp
mov ebp, esp
;Save registers
push eax
push ebx
push ecx
; Create module dictionary and store its address in kolibri_dbg_str
mov eax, dword [ebp + 8]
push eax
push kolibri_dbg_dict
call tp_dict
add esp, 4 ;Clear stack
; Push tp_obj structure pointed by kolibri_dbg_dict
push_tp_obj kolibri_dbg_dict
; Push modname as a tp_obj object
push modnamelen; len
push modname ; val
push 0 ;_tp_string info
push TP_STRING ; type
; Push tp_obj structure pointed by tp->modules
mov eax, dword [ebp + 8]
add eax, tp_vm.modules + 16
mov ecx, 4
.push_tpobj1:
sub eax, 4
push dword[eax]
loop .push_tpobj1
push eax
call tp_set
add esp, sizeof.tp_obj*3+4
; Register "debug_print" function
;Reserve memory for function tp_obj object
sub esp, sizeof.tp_obj
mov eax, esp
push debug_print
push dword[ebp+8]
push eax
call tp_fnc
add esp, 8; tp_obj is already in stack, adding other arguments
;Pushing function name tp_obj
;mov eax, esp
;push_tp_obj_at_reg eax
push debug_print_namelen
push debug_print_name
push 0
push TP_STRING
;Pushing module dictionary tp_obj
push_tp_obj kolibri_dbg_dict
;Pushing tp_vm
push dword[ebp+8]
call tp_set
add esp, sizeof.tp_obj*3+4
; Leaving function
pop ecx
pop ebx
pop eax
mov esp, ebp
pop ebp
ret

View File

@ -1,184 +0,0 @@
; Python object types
TP_NONE equ 0
TP_NUMBER equ 1
TP_STRING equ 2
TP_DICT equ 3
TP_LIST equ 4
TP_FNC equ 5
TP_DATA equ 6
; Python "number" object. Can be treated as integer or float.
struct tp_number_
type rd 1
val rd 1
ends
; GC information for "string" object
struct _tp_string
gci rd 1
s rb 1
ends
; Python "string" object
struct tp_string_
type rd 1
info rd 1 ;pointer to _tp_string
val rd 1
len rd 1
ends
; GC information for "list" object
struct _tp_list
gci rd 1
items rd 1
len rd 1
alloc rd 1
ends
; Python "list" object
struct tp_list_
type rd 1
val rd 1 ;pointer to _tp_list
ends
; GC information for "dict" object
struct _tp_dict
gci rd 1
items rd 1
len rd 1
alloc rd 1
cur rd 1
mask rd 1
used rd 1
ends
; Python "dict" object
struct tp_dict_
type rd 1
val rd 1 ;pointer to _tp_dict
ends
; GC information for "function" object
; todo
; Python "function" object
struct tp_fnc_
type rd 1
info rd 1
ftype rd 1
val rd 1
ends
; Python "data" object
struct tp_data_
type rd 1
info rd 1
val rd 1
magic rd 1
ends
struct tp_gc_info
type rd 1
data rd 1
ends
; Generic Python object
struct tp_obj
union
type rd 1
string tp_string_
number tp_number_
gc_info tp_gc_info
dict tp_dict_
list tp_list_
fnc tp_fnc_
dat tp_data_
ends
ends
; Bytecode element
struct sregs
.i rb 1
.a rb 1
.b rb 1
.c rb 1
ends
struct tp_code
union
i rb 1
regs sregs
string rb 4
number rp 1
ends
ends
; TinyPy VM frame
struct tp_frame_
.codes rd 1
.cur rd 1
.jump rd 1
.regs rd 1
.ret_dest rd 1
.fname rb sizeof.tp_obj
.name rb sizeof.tp_obj
.line rb sizeof.tp_obj
.globals rb sizeof.tp_obj
.lineno rd 1
.cregs rd 1
ends
; TinyPy VM
TP_FRAMES equ 256
struct tp_vm
builtins rb sizeof.tp_obj
modules rb sizeof.tp_obj
frames rb TP_FRAMES*sizeof.tp_frame_
_params rb sizeof.tp_obj
params rb sizeof.tp_obj
_regs rb sizeof.tp_obj
regs rq 1
root rb sizeof.tp_obj
jmp_buf rd 1
jump rd 1
ex rb sizeof.tp_obj
chars rb 512
cur rd 1
white rb sizeof._tp_list
grey rb sizeof._tp_list
black rb sizeof._tp_list
strings rb sizeof._tp_dict
steps rd 1
ends
macro push_tp_none
{
local .push_more
mov ecx, 4
.push_more:
push 0
loop .push_more
}
macro push_tp_obj obj
{
local .push_more
mov ebx, obj + 12
mov ecx, 4
.push_more:
push dword[ebx]
sub ebx, 4
loop .push_more
}
macro push_tp_obj_at_reg reg
{
local .push_more
add reg, 12
mov ecx, 4
.push_more:
push dword[reg]
sub reg, 4
loop .push_more
}

View File

@ -1 +0,0 @@
#include "../modules/kolibri/fs.c"

View File

@ -1 +0,0 @@
#include "../modules/kolibri/init.c"

View File

@ -10,6 +10,7 @@ def onbtn():
print("Button pressed")
if __name__=="__main__":
kolibri.debug_print("Debug test line\n")
w = kolibri.window(10,10,400, 400, False)
w.on_show = onshow
w.on_key = onkey

View File

@ -2,11 +2,10 @@
/* INCLUDE */
const char header[]="TinyPy for kolibriOS";
extern void (*kolibri_dbg_init)(tp_vm *tp) __attribute__((__stdcall__));
//extern void kolibri_dbg_init(tp_vm *tp); //__attribute__((__stdcall__));
void main(int argc, const char *argv[]) {
tp_vm *tp = tp_init(argc, argv);
// kolibri_dbg_init(tp);
kolibri_init(tp);
CONSOLE_INIT(header);
/* INIT */