Add new debug board - dbgboard based on console.obj #119
@@ -468,6 +468,7 @@ tup.append_table(img_files, {
|
||||
{"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"},
|
||||
{"DEVELOP/ASCIIVJU", VAR_PROGS .. "/develop/asciivju/trunk/asciivju"},
|
||||
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
|
||||
{"DEVELOP/DBGBOARD", VAR_PROGS .. "/system/dbgboard/dbgboard"},
|
||||
{"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"},
|
||||
{"DEVELOP/COBJ", VAR_PROGS .. "/develop/cObj/trunk/cObj"},
|
||||
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"},
|
||||
|
@@ -116,8 +116,8 @@ ico=8
|
||||
x=-67
|
||||
y=68
|
||||
[10]
|
||||
name=BOARD
|
||||
path=/SYS/DEVELOP/BOARD
|
||||
name=DBGBOARD
|
||||
path=/SYS/DEVELOP/DBGBOARD
|
||||
param=
|
||||
ico=19
|
||||
x=-135
|
||||
|
@@ -116,8 +116,8 @@ ico=8
|
||||
x=-67
|
||||
y=68
|
||||
[10]
|
||||
name=BOARD
|
||||
path=/SYS/DEVELOP/BOARD
|
||||
name=DBGBOARD
|
||||
path=/SYS/DEVELOP/DBGBOARD
|
||||
param=
|
||||
ico=19
|
||||
x=-135
|
||||
|
@@ -116,8 +116,8 @@ ico=8
|
||||
x=-67
|
||||
y=68
|
||||
[10]
|
||||
name=BOARD
|
||||
path=/SYS/DEVELOP/BOARD
|
||||
name=DBGBOARD
|
||||
path=/SYS/DEVELOP/DBGBOARD
|
||||
param=
|
||||
ico=19
|
||||
x=-135
|
||||
|
@@ -116,8 +116,8 @@ ico=8
|
||||
x=-67
|
||||
y=68
|
||||
[10]
|
||||
name=BOARD
|
||||
path=/SYS/DEVELOP/BOARD
|
||||
name=DBGBOARD
|
||||
path=/SYS/DEVELOP/DBGBOARD
|
||||
param=
|
||||
ico=19
|
||||
x=-135
|
||||
|
@@ -116,8 +116,8 @@ ico=8
|
||||
x=-67
|
||||
y=68
|
||||
[10]
|
||||
name=BOARD
|
||||
path=/SYS/DEVELOP/BOARD
|
||||
name=DBGBOARD
|
||||
path=/SYS/DEVELOP/DBGBOARD
|
||||
param=
|
||||
ico=19
|
||||
x=-135
|
||||
|
509
programs/if.inc
Normal file
509
programs/if.inc
Normal file
@@ -0,0 +1,509 @@
|
||||
|
||||
; SPDX-License-Identifier: GPL-2.0
|
||||
; Macroinstructions for HLL-style conditional operations
|
||||
; Copyright (C) 2025 KolibriOS team
|
||||
|
||||
macro .if [arg]
|
||||
{
|
||||
common
|
||||
__IF equ
|
||||
local ..endif
|
||||
__ENDIF equ ..endif
|
||||
local ..else
|
||||
__ELSE equ ..else
|
||||
JNCOND __ELSE,arg
|
||||
}
|
||||
|
||||
macro .else
|
||||
{
|
||||
jmp __ENDIF
|
||||
__ELSE:
|
||||
restore __IF
|
||||
__IF equ ,
|
||||
}
|
||||
|
||||
macro .elseif [arg]
|
||||
{
|
||||
common
|
||||
jmp __ENDIF
|
||||
__ELSE:
|
||||
restore __ELSE
|
||||
local ..else
|
||||
__ELSE equ ..else
|
||||
JNCOND __ELSE,arg
|
||||
}
|
||||
|
||||
macro .endif
|
||||
{
|
||||
if __IF eq
|
||||
__ELSE:
|
||||
end if
|
||||
__ENDIF:
|
||||
restore __ELSE
|
||||
restore __ENDIF
|
||||
restore __IF
|
||||
}
|
||||
|
||||
macro .while [arg]
|
||||
{
|
||||
common
|
||||
local ..while
|
||||
__WHILE equ ..while
|
||||
local ..endw
|
||||
__ENDW equ ..endw
|
||||
__WHILE:
|
||||
JNCOND __ENDW,arg
|
||||
}
|
||||
|
||||
macro .endw
|
||||
{
|
||||
jmp __WHILE
|
||||
__ENDW:
|
||||
restore __ENDW
|
||||
restore __WHILE
|
||||
}
|
||||
|
||||
macro .repeat
|
||||
{
|
||||
local ..repeat
|
||||
__REPEAT equ ..repeat
|
||||
__REPEAT:
|
||||
}
|
||||
|
||||
macro .until [arg]
|
||||
{
|
||||
common
|
||||
JNCOND __REPEAT,arg
|
||||
restore __REPEAT
|
||||
}
|
||||
|
||||
jnne equ je
|
||||
jnna equ ja
|
||||
jnnb equ jb
|
||||
jnng equ jg
|
||||
jnnl equ jl
|
||||
jnnae equ jae
|
||||
jnnbe equ jbe
|
||||
jnnge equ jge
|
||||
jnnle equ jle
|
||||
|
||||
macro JNCOND label,v1,c,v2
|
||||
{
|
||||
match any,c
|
||||
\{
|
||||
cmp v1,v2
|
||||
jn\#c label
|
||||
\}
|
||||
match ,c
|
||||
\{
|
||||
PARSECOND parsed@cond,v1
|
||||
match cond,parsed@cond \\{ JNCONDEXPR label,cond \\}
|
||||
\}
|
||||
}
|
||||
|
||||
gt equ >
|
||||
lt equ <
|
||||
|
||||
macro PARSECOND parsed,cond
|
||||
{
|
||||
define parsed
|
||||
define neg@cond
|
||||
define status@cond
|
||||
define nest@cond
|
||||
irps symb,cond
|
||||
\{
|
||||
define symb@cond symb
|
||||
match >,symb
|
||||
\\{
|
||||
define symb@cond gt
|
||||
\\}
|
||||
match <,symb
|
||||
\\{
|
||||
define symb@cond lt
|
||||
\\}
|
||||
current@cond equ status@cond
|
||||
match ,current@cond
|
||||
\\{
|
||||
match ~,symb
|
||||
\\\{
|
||||
neg@cond equ neg@cond ~
|
||||
match ~~,neg@cond
|
||||
\\\\{
|
||||
define neg@cond
|
||||
\\\\}
|
||||
define symb@cond
|
||||
\\\}
|
||||
match (,symb
|
||||
\\\{
|
||||
parsed equ parsed neg@cond,<
|
||||
define nest@cond +
|
||||
define symb@cond
|
||||
define neg@cond
|
||||
\\\}
|
||||
match any,symb@cond
|
||||
\\\{
|
||||
parsed equ parsed neg@cond,symb@cond
|
||||
define status@cond +
|
||||
\\\}
|
||||
\\}
|
||||
match status,current@cond
|
||||
\\{
|
||||
match &,symb
|
||||
\\\{
|
||||
parsed equ parsed,&,
|
||||
define status@cond
|
||||
define symb@cond
|
||||
define neg@cond
|
||||
\\\}
|
||||
match |,symb
|
||||
\\\{
|
||||
parsed equ parsed,|,
|
||||
define status@cond
|
||||
define symb@cond
|
||||
define neg@cond
|
||||
\\\}
|
||||
match (,symb
|
||||
\\\{
|
||||
define nest@cond (
|
||||
\\\}
|
||||
match ),symb
|
||||
\\\{
|
||||
match +,nest@cond
|
||||
\\\\{
|
||||
parsed equ parsed>
|
||||
define symb@cond
|
||||
\\\\}
|
||||
restore nest@cond
|
||||
\\\}
|
||||
match any,symb@cond
|
||||
\\\{
|
||||
parsed equ parsed symb@cond
|
||||
\\\}
|
||||
\\}
|
||||
\}
|
||||
}
|
||||
|
||||
macro define_JNCONDEXPR
|
||||
{
|
||||
macro JNCONDEXPR elabel,[mod,cond,op]
|
||||
\{
|
||||
\common
|
||||
\local ..t,..f
|
||||
define t@cond ..t
|
||||
define f@cond ..f
|
||||
\forward
|
||||
match ,op
|
||||
\\{
|
||||
match ,mod \\\{ JNCONDEL elabel,<cond> \\\}
|
||||
match ~,mod \\\{ JCONDEL elabel,<cond> \\\}
|
||||
\\}
|
||||
match &:flabel:tlabel, op:f@cond:t@cond
|
||||
\\{
|
||||
match ,mod \\\{ JNCONDEL flabel,<cond> \\\}
|
||||
match ~,mod \\\{ JCONDEL flabel,<cond> \\\}
|
||||
tlabel:
|
||||
\\local ..tnew
|
||||
restore t@cond
|
||||
define t@cond ..tnew
|
||||
\\}
|
||||
match |:flabel:tlabel, op:f@cond:t@cond
|
||||
\\{
|
||||
match ,mod \\\{ JCONDEL tlabel,<cond> \\\}
|
||||
match ~,mod \\\{ JNCONDEL tlabel,<cond> \\\}
|
||||
flabel:
|
||||
\\local ..fnew
|
||||
restore f@cond
|
||||
define f@cond ..fnew
|
||||
\\}
|
||||
\common
|
||||
label f@cond at elabel
|
||||
t@cond:
|
||||
restore t@cond
|
||||
restore f@cond
|
||||
\}
|
||||
}
|
||||
|
||||
macro define_JCONDEXPR
|
||||
{
|
||||
macro JCONDEXPR elabel,[mod,cond,op]
|
||||
\{
|
||||
\common
|
||||
\local ..t,..f
|
||||
define t@cond ..t
|
||||
define f@cond ..f
|
||||
\forward
|
||||
match ,op
|
||||
\\{
|
||||
match ,mod \\\{ JCONDEL elabel,<cond> \\\}
|
||||
match ~,mod \\\{ JNCONDEL elabel,<cond> \\\}
|
||||
\\}
|
||||
match |:flabel:tlabel, op:f@cond:t@cond
|
||||
\\{
|
||||
match ,mod \\\{ JCONDEL flabel,<cond> \\\}
|
||||
match ~,mod \\\{ JNCONDEL flabel,<cond> \\\}
|
||||
tlabel:
|
||||
\\local ..tnew
|
||||
restore t@cond
|
||||
define t@cond ..tnew
|
||||
\\}
|
||||
match &:flabel:tlabel, op:f@cond:t@cond
|
||||
\\{
|
||||
match ,mod \\\{ JNCONDEL tlabel,<cond> \\\}
|
||||
match ~,mod \\\{ JCONDEL tlabel,<cond> \\\}
|
||||
flabel:
|
||||
\\local ..fnew
|
||||
restore f@cond
|
||||
define f@cond ..fnew
|
||||
\\}
|
||||
\common
|
||||
label f@cond at elabel
|
||||
t@cond:
|
||||
restore t@cond
|
||||
restore f@cond
|
||||
\}
|
||||
}
|
||||
|
||||
macro define_JNCONDEL
|
||||
{
|
||||
macro JNCONDEL label,cond
|
||||
\{
|
||||
\local COND
|
||||
match car=,cdr,:cond
|
||||
\\{
|
||||
define_JNCONDEXPR
|
||||
define_JCONDEXPR
|
||||
define_JCONDEL
|
||||
define_JNCONDEL
|
||||
JNCONDEXPR label,cond
|
||||
purge JNCONDEXPR,JCONDEXPR,JCONDEL,JNCONDEL
|
||||
define COND
|
||||
\\}
|
||||
match c,cond ; replace gt and lt
|
||||
\\{
|
||||
match =COND =signed v1>==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jl label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =signed v1<==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jg label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1>==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jb label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1<==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
ja label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jne label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1<>v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
je label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =signed v1>v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jle label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =signed v1<v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jge label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1>v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jbe label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1<v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jae label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =ZERO?, COND c
|
||||
\\\{
|
||||
jnz label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =CARRY?, COND c
|
||||
\\\{
|
||||
jnc label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =OVERFLOW?, COND c
|
||||
\\\{
|
||||
jno label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =SIGN?, COND c
|
||||
\\\{
|
||||
jns label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =PARITY?, COND c
|
||||
\\\{
|
||||
jnp label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v, COND c
|
||||
\\\{
|
||||
if v eqtype 0
|
||||
if ~ v
|
||||
jmp label
|
||||
end if
|
||||
else if v eqtype eax
|
||||
test v,v
|
||||
jz label
|
||||
else
|
||||
cmp v,0
|
||||
je label
|
||||
end if
|
||||
\\\}
|
||||
\\}
|
||||
\}
|
||||
}
|
||||
|
||||
macro define_JCONDEL
|
||||
{
|
||||
macro JCONDEL label,cond
|
||||
\{
|
||||
\local COND
|
||||
match car=,cdr,:cond
|
||||
\\{
|
||||
define_JNCONDEXPR
|
||||
define_JCONDEXPR
|
||||
define_JCONDEL
|
||||
define_JNCONDEL
|
||||
JCONDEXPR label,cond
|
||||
purge JNCONDEXPR,JCONDEXPR,JCONDEL,JNCONDEL
|
||||
define COND
|
||||
\\}
|
||||
match c,cond ; replace gt and lt
|
||||
\\{
|
||||
match =COND =signed v1>==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jge label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =signed v1<==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jle label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1>==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jae label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1<==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jbe label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1==v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
je label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1<>v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jne label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =signed v1>v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jg label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =signed v1<v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jl label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1>v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
ja label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v1<v2, COND c
|
||||
\\\{
|
||||
cmp v1,v2
|
||||
jb label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =ZERO?, COND c
|
||||
\\\{
|
||||
jz label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =CARRY?, COND c
|
||||
\\\{
|
||||
jc label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =OVERFLOW?, COND c
|
||||
\\\{
|
||||
jo label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =SIGN?, COND c
|
||||
\\\{
|
||||
js label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND =PARITY?, COND c
|
||||
\\\{
|
||||
jp label
|
||||
define COND
|
||||
\\\}
|
||||
match =COND v, COND c
|
||||
\\\{
|
||||
if v eqtype 0
|
||||
if v
|
||||
jmp label
|
||||
end if
|
||||
else if v eqtype eax
|
||||
test v,v
|
||||
jnz label
|
||||
else
|
||||
cmp v,0
|
||||
jne label
|
||||
end if
|
||||
\\\}
|
||||
\\}
|
||||
\}
|
||||
}
|
||||
|
||||
define_JNCONDEXPR
|
||||
define_JCONDEXPR
|
||||
define_JNCONDEL
|
||||
define_JCONDEL
|
7
programs/system/dbgboard/README.md
Normal file
7
programs/system/dbgboard/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## DBGBOARD - a console-based debug board
|
||||
Main advantages over the old board:
|
||||
* Bigger font
|
||||
* Scrolling (like in other console apps)
|
||||
* K : and L: messages highligting
|
||||
|
||||
Also, like the old board it writes log to /tmp0/1/boardlog.txt (or you can pass another path in args like `/sys/develop/dbgboard /tmp0/1/hgfdhgfh.txt`), you can view log file in cedit by hitting `F2` key
|
2
programs/system/dbgboard/Tupfile.lua
Normal file
2
programs/system/dbgboard/Tupfile.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
tup.rule("dbgboard.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "dbgboard")
|
244
programs/system/dbgboard/dbgboard.asm
Normal file
244
programs/system/dbgboard/dbgboard.asm
Normal file
@@ -0,0 +1,244 @@
|
||||
; SPDX-License-Identifier: GPL-2.0
|
||||
; DBGBOARD - a console-based debug board
|
||||
; Copyright (C) 2025 KolibriOS team
|
||||
|
||||
format binary as ""
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01' ; signature
|
||||
dd 1 ; header version
|
||||
dd start ; entry point
|
||||
dd _image_end ; end of image
|
||||
dd _memory ; required memory size
|
||||
dd _stacktop ; address of stack top
|
||||
dd _cmdline ; buffer for command line arguments
|
||||
dd 0 ; buffer for path
|
||||
|
||||
; __DEBUG__ = 1
|
||||
; __DEBUG_LEVEL__ = DBG_ALL
|
||||
; DBG_ALL = 0 ; all messages
|
||||
; DBG_INFO = 1 ; info and errors
|
||||
; DBG_ERR = 2 ; only errors
|
||||
|
||||
include '../../macros.inc'
|
||||
purge mov,add,sub
|
||||
include '../../KOSfuncs.inc'
|
||||
; include '../../debug-fdo.inc'
|
||||
include '../../proc32.inc'
|
||||
include '../../dll.inc'
|
||||
include '../../if.inc'
|
||||
include '../../string.inc'
|
||||
|
||||
CON_WINDOW_CLOSED = 0x200
|
||||
|
||||
TEXT_COLOR_YELLOW = 14
|
||||
TEXT_COLOR_WHITE = 15
|
||||
TEXT_COLOR_LIGHTGRAY = 7
|
||||
; TEXT_COLOR_LIGHTGREEN = 10
|
||||
|
||||
proc set_text_color stdcall uses eax, _color
|
||||
and [_color], 0x0F
|
||||
invoke con_get_flags
|
||||
and eax, 0x3F0
|
||||
or eax, [_color]
|
||||
invoke con_set_flags, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
; returns eax = 0 or fs error code
|
||||
proc get_file_attrib stdcall uses ebx, _path, _buf
|
||||
push [_path]
|
||||
dec esp
|
||||
mov byte[esp], 0
|
||||
push [_buf] ; 40 bytes buf
|
||||
push 0
|
||||
push 0
|
||||
push 0
|
||||
push SSF_GET_INFO
|
||||
mov ebx, esp
|
||||
mcall SF_FILE
|
||||
add esp, 25
|
||||
ret
|
||||
endp
|
||||
|
||||
; returns eax = 0 or fs error code
|
||||
proc create_file stdcall uses ebx, _path
|
||||
push [_path]
|
||||
dec esp
|
||||
mov byte[esp], 0
|
||||
push 0
|
||||
push 0
|
||||
push 0
|
||||
push 0
|
||||
push SSF_CREATE_FILE
|
||||
mov ebx, esp
|
||||
mcall SF_FILE
|
||||
add esp, 25
|
||||
ret
|
||||
endp
|
||||
|
||||
; returns eax = 0 or fs error code
|
||||
proc write_file stdcall uses ebx, _path, _buf, _count, _pos_lo, _pos_hi, _out_bytes_written
|
||||
push [_path]
|
||||
dec esp
|
||||
mov byte[esp], 0
|
||||
push [_buf]
|
||||
push [_count]
|
||||
push [_pos_hi]
|
||||
push [_pos_lo]
|
||||
push SSF_WRITE_FILE
|
||||
mov ebx, esp
|
||||
mcall SF_FILE
|
||||
add esp, 25
|
||||
mov ecx, [_out_bytes_written]
|
||||
mov [ecx], ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
start:
|
||||
;; if there is a second instance of conboard is running then exit
|
||||
mcall SF_THREAD_INFO, thread_info, -1
|
||||
stdcall string.copy, thread_info + process_information.process_name, thread_name
|
||||
stdcall string.to_lower_case, thread_name
|
||||
xor edx, edx ; conboard instance count
|
||||
xor esi, esi
|
||||
.while esi < 256 ; NOTE: add to macros.inc MAX_THREAD_COUNT = 256
|
||||
mcall SF_THREAD_INFO, thread_info, esi
|
||||
.if [thread_info + process_information.slot_state] <> TSTATE_FREE
|
||||
stdcall string.to_lower_case, thread_info + process_information.process_name
|
||||
stdcall string.cmp, thread_info + process_information.process_name, thread_name, -1
|
||||
.if eax = 0
|
||||
inc edx
|
||||
.if edx >= 2
|
||||
jmp .raw_exit
|
||||
.endif
|
||||
.endif
|
||||
.endif
|
||||
inc esi
|
||||
.endw
|
||||
|
||||
stdcall dll.Load, @IMPORT
|
||||
test eax, eax
|
||||
jnz .exit
|
||||
|
||||
invoke con_start, 1
|
||||
invoke con_init, 80, 32, -1, -1, title
|
||||
|
||||
.if byte [_cmdline] <> 0
|
||||
mov [log_file_path], _cmdline
|
||||
.endif
|
||||
|
||||
.main_loop:
|
||||
invoke con_kbhit
|
||||
.if eax = 1
|
||||
invoke con_getch2
|
||||
.if ah = 60 ; F2
|
||||
mov eax, [log_file_path]
|
||||
mov [struct_open_in_notepad.filename], eax
|
||||
mcall SF_FILE, struct_open_in_notepad
|
||||
.endif
|
||||
.endif
|
||||
|
||||
mcall SF_BOARD, SSF_DEBUG_READ
|
||||
.if ebx = 0
|
||||
mcall SF_SLEEP, 50
|
||||
jz .main_loop_cond
|
||||
.endif
|
||||
mov [chr], al
|
||||
|
||||
.if [is_start_line] = 1
|
||||
mov eax, prefix
|
||||
add eax, [prefix_index]
|
||||
mov bl, byte [chr]
|
||||
mov [eax], bl
|
||||
.if [prefix_index] = 2
|
||||
.if dword [prefix] = 'K :'
|
||||
stdcall set_text_color, TEXT_COLOR_YELLOW
|
||||
.elseif dword [prefix] = 'L: '
|
||||
stdcall set_text_color, TEXT_COLOR_WHITE
|
||||
.else
|
||||
stdcall set_text_color, TEXT_COLOR_LIGHTGRAY
|
||||
.endif
|
||||
mov [is_start_line], 0
|
||||
mov [prefix_index], 0
|
||||
invoke con_write_asciiz, prefix
|
||||
mov dword [prefix], 0
|
||||
.else
|
||||
inc [prefix_index]
|
||||
.endif
|
||||
.else
|
||||
invoke con_write_asciiz, chr
|
||||
.if byte [chr] = 10
|
||||
mov [is_start_line], 1
|
||||
stdcall set_text_color, TEXT_COLOR_LIGHTGRAY
|
||||
.endif
|
||||
.endif
|
||||
|
||||
stdcall get_file_attrib, [log_file_path], file_info_buf
|
||||
.if eax = 5 ; file not found
|
||||
stdcall create_file, [log_file_path]
|
||||
.endif
|
||||
stdcall write_file, [log_file_path], chr, 1, dword [file_info_buf + 32], dword [file_info_buf + 32 + 4], bytes_written
|
||||
|
||||
.main_loop_cond:
|
||||
invoke con_get_flags
|
||||
and eax, CON_WINDOW_CLOSED
|
||||
test eax, eax
|
||||
jz .main_loop
|
||||
|
||||
.exit:
|
||||
invoke con_exit, 0
|
||||
.raw_exit:
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
|
||||
; data:
|
||||
title db 'Debug & message board',0
|
||||
log_file_path dd default_log_file_path
|
||||
default_log_file_path db '/tmp0/1/BOARDLOG.TXT',0
|
||||
prefix db 0,0,0,0
|
||||
prefix_index dd 0
|
||||
is_start_line dd 1
|
||||
bytes_written dd 0
|
||||
chr db 0, 0
|
||||
|
||||
struct_open_in_notepad:
|
||||
dd SSF_START_APP
|
||||
dd 0
|
||||
.filename dd ?
|
||||
dd 0
|
||||
dd 0
|
||||
db '/sys/develop/cedit', 0
|
||||
|
||||
|
||||
; include_debug_strings
|
||||
|
||||
align 4
|
||||
@IMPORT:
|
||||
library console, 'console.obj'
|
||||
import console, \
|
||||
con_start, 'START', \
|
||||
con_init, 'con_init', \
|
||||
con_write_asciiz, 'con_write_asciiz', \
|
||||
con_exit, 'con_exit', \
|
||||
con_kbhit, 'con_kbhit', \
|
||||
con_getch2, 'con_getch2', \
|
||||
con_set_flags, 'con_set_flags', \
|
||||
con_get_flags, 'con_get_flags'
|
||||
|
||||
align 16
|
||||
_image_end:
|
||||
|
||||
file_info_buf rb 40
|
||||
|
||||
align 4
|
||||
_cmdline rb 256
|
||||
|
||||
thread_info process_information
|
||||
thread_name rb 16
|
||||
|
||||
; reserve for stack:
|
||||
rb 4096
|
||||
align 16
|
||||
_stacktop:
|
||||
_memory:
|
@@ -118,8 +118,8 @@ ico=8
|
||||
x=-67
|
||||
y=68
|
||||
[10]
|
||||
name=BOARD
|
||||
path=/SYS/DEVELOP/BOARD
|
||||
name=DBGBOARD
|
||||
path=/SYS/DEVELOP/DBGBOARD
|
||||
param=
|
||||
ico=19
|
||||
x=-135
|
||||
|
Reference in New Issue
Block a user