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"},
|
{"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"},
|
||||||
{"DEVELOP/ASCIIVJU", VAR_PROGS .. "/develop/asciivju/trunk/asciivju"},
|
{"DEVELOP/ASCIIVJU", VAR_PROGS .. "/develop/asciivju/trunk/asciivju"},
|
||||||
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
|
{"DEVELOP/BOARD", VAR_PROGS .. "/system/board/trunk/board"},
|
||||||
|
{"DEVELOP/DBGBOARD", VAR_PROGS .. "/system/dbgboard/dbgboard"},
|
||||||
{"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"},
|
{"DEVELOP/CEDIT", SRC_PROGS .. "/develop/cedit/CEDIT"},
|
||||||
{"DEVELOP/COBJ", VAR_PROGS .. "/develop/cObj/trunk/cObj"},
|
{"DEVELOP/COBJ", VAR_PROGS .. "/develop/cObj/trunk/cObj"},
|
||||||
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"},
|
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"},
|
||||||
|
@@ -116,8 +116,8 @@ ico=8
|
|||||||
x=-67
|
x=-67
|
||||||
y=68
|
y=68
|
||||||
[10]
|
[10]
|
||||||
name=BOARD
|
name=DBGBOARD
|
||||||
path=/SYS/DEVELOP/BOARD
|
path=/SYS/DEVELOP/DBGBOARD
|
||||||
param=
|
param=
|
||||||
ico=19
|
ico=19
|
||||||
x=-135
|
x=-135
|
||||||
|
@@ -116,8 +116,8 @@ ico=8
|
|||||||
x=-67
|
x=-67
|
||||||
y=68
|
y=68
|
||||||
[10]
|
[10]
|
||||||
name=BOARD
|
name=DBGBOARD
|
||||||
path=/SYS/DEVELOP/BOARD
|
path=/SYS/DEVELOP/DBGBOARD
|
||||||
param=
|
param=
|
||||||
ico=19
|
ico=19
|
||||||
x=-135
|
x=-135
|
||||||
|
@@ -116,8 +116,8 @@ ico=8
|
|||||||
x=-67
|
x=-67
|
||||||
y=68
|
y=68
|
||||||
[10]
|
[10]
|
||||||
name=BOARD
|
name=DBGBOARD
|
||||||
path=/SYS/DEVELOP/BOARD
|
path=/SYS/DEVELOP/DBGBOARD
|
||||||
param=
|
param=
|
||||||
ico=19
|
ico=19
|
||||||
x=-135
|
x=-135
|
||||||
|
@@ -116,8 +116,8 @@ ico=8
|
|||||||
x=-67
|
x=-67
|
||||||
y=68
|
y=68
|
||||||
[10]
|
[10]
|
||||||
name=BOARD
|
name=DBGBOARD
|
||||||
path=/SYS/DEVELOP/BOARD
|
path=/SYS/DEVELOP/DBGBOARD
|
||||||
param=
|
param=
|
||||||
ico=19
|
ico=19
|
||||||
x=-135
|
x=-135
|
||||||
|
@@ -116,8 +116,8 @@ ico=8
|
|||||||
x=-67
|
x=-67
|
||||||
y=68
|
y=68
|
||||||
[10]
|
[10]
|
||||||
name=BOARD
|
name=DBGBOARD
|
||||||
path=/SYS/DEVELOP/BOARD
|
path=/SYS/DEVELOP/DBGBOARD
|
||||||
param=
|
param=
|
||||||
ico=19
|
ico=19
|
||||||
x=-135
|
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
|
x=-67
|
||||||
y=68
|
y=68
|
||||||
[10]
|
[10]
|
||||||
name=BOARD
|
name=DBGBOARD
|
||||||
path=/SYS/DEVELOP/BOARD
|
path=/SYS/DEVELOP/DBGBOARD
|
||||||
param=
|
param=
|
||||||
ico=19
|
ico=19
|
||||||
x=-135
|
x=-135
|
||||||
|
Reference in New Issue
Block a user