LTCD_070816.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:20 +02:00
1 parent d14bbc24f9
commit 0e9364ff4c
506 files changed
+157705 -41812

No files matched your search

+593
View File
@@ -0,0 +1,593 @@
IMPORT sys_update_screen_tss;
ALIGN 8,OC_NOP
NORMAL_KEY_SCAN_DECODE_TABLE::
DU1 0,CH_ESC,"1234567890-=",8,9;
DU1 "qwertyuiop[]",CH_CR,0,"as";
DU1 "dfghjkl;'\`",0,"\\zxcv";
DU1 "bnm,./",0,'*',0,CH_SPACE,0,0,0,0,0,0;
DU1 0,0,0,0,0,0,0,0,0,0,'-',0,0,0,'+',0;
SHIFT_KEY_SCAN_DECODE_TABLE::
DU1 0,CH_ESC,"!@#$$%^&*()_+",8,9;
DU1 "QWERTYUIOP{}",CH_CR,0,"AS";
DU1 "DFGHJKL:\"~",0,"|ZXCV";
DU1 "BNM<>?",0,'*',0,CH_SHIFT_SPACE,0,0,0,0,0,0;
DU1 0,0,0,0,0,0,0,0,0,0,'-',0,0,0,'+',0;
CTRL_KEY_SCAN_DECODE_TABLE::
DU1 0,CH_ESC,"1234567890-=",8,9;
DU1 17,23,5,18,20,25,21,9,15,16,"[]",CH_CR,0,1,19;
DU1 4,6,7,8,CH_LINE_FEED,11,12,";'\`",0,"\\",26,24,3,22;
DU1 2,14,13,",./",0,'*',0,CH_SPACE,0,0,0,0,0,0;
DU1 0,0,0,0,0,0,0,0,0,0,'-',0,0,0,'+',0;
ALIGN 8,OC_NOP
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
CP_PLOT_SCREEN_I1::
PUSH RBP
MOV RBP,RSP
MOV RBX,U8 SF_PARAM2[RBP]
MOV RAX,U8 SF_PARAM3[RBP]
OR RBX,RBX
JS @@100
OR RAX,RAX
JS @@100
CMP RBX,TEXT_COLS
JGE @@100
CMP RAX,TEXT_ROWS
JGE @@100
IMUL2 RAX,TEXT_COLS
ADD RBX,RAX
SHL RBX,2
ADD RBX,U8 [SYS_TEXTBASE]
MOV RAX,U8 SF_PARAM1[RBP]
MOV U4 [RBX],EAX
POP RBP
MOV RAX,1
RET
@@100: POP RBP
XOR EAX,EAX
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
CP_PLOT_WIN_I1::
PUSH RBP
MOV RBP,RSP
MOV RBX,U8 SF_PARAM3[RBP]
MOV RAX,U8 SF_PARAM4[RBP]
MOV RCX,U8 SF_PARAM1[RBP]
OR RBX,RBX
JS @@100
ADD RBX,U8 TSS_WIN_LEFT[RCX]
CMP RBX,U8 TSS_WIN_RIGHT[RCX]
JG @@100
OR RBX,RBX
JS @@100
CMP RBX,TEXT_COLS
JGE @@100
OR RAX,RAX
JS @@100
ADD RAX,U8 TSS_WIN_TOP[RCX]
CMP RAX,U8 TSS_WIN_BOTTOM[RCX]
JG @@100
OR RAX,RAX
JS @@100
CMP RAX,TEXT_ROWS
JGE @@100
IMUL2 RAX,TEXT_COLS
ADD RBX,RAX
SHL RBX,2
ADD RBX,U8 [SYS_TEXTBASE]
MOV RAX,U8 SF_PARAM2[RBP]
MOV U4 [RBX],EAX
POP RBP
MOV RAX,1
RET
@@100: POP RBP
XOR EAX,EAX
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
/*
BoolU4 PlotWinStr2(TssStruct *tss,I1 *s,I8 len,
U8 attr,I8 x,I8 y)
*/
ALIGN 8,OC_NOP
CP_PLOT_WIN_STR2::
PUSH RBP
MOV RBP,RSP
MOV R10,U8 [SYS_TEXTBASE]
PUSH RSI
PUSH RDI
MOV RBX,U8 SF_PARAM1[RBP]
MOV RSI,U8 SF_PARAM2[RBP]
MOV RDI,U8 SF_PARAM5[RBP]
MOV RCX,U8 SF_PARAM3[RBP]
OR RDI,RDI
JNS @@10
ADD RCX,RDI
SUB RSI,RDI
XOR EDI,EDI
@@10: ADD RDI,U8 TSS_WIN_LEFT[RBX]
MOV RDX,RCX
ADD RDX,RDI
DEC RDX
CMP RDX,U8 TSS_WIN_RIGHT[RBX]
JLE @@11
MOV RAX,RDX
SUB RAX,U8 TSS_WIN_RIGHT[RBX]
SUB RDX,RAX
SUB RCX,RAX
@@11: OR RDI,RDI
JNS @@12
ADD RCX,RDI
SUB RSI,RDI
XOR EDI,EDI
@@12: INC RDX
SUB RDX,TEXT_COLS
JLE @@13
SUB RCX,RDX
@@13: CMP RCX,1
JL @@100
MOV RAX,U8 SF_PARAM6[RBP]
OR RAX,RAX
JS @@100
ADD RAX,U8 TSS_WIN_TOP[RBX]
CMP RAX,U8 TSS_WIN_BOTTOM[RBX]
JG @@100
OR RAX,RAX
JS @@100
CMP RAX,TEXT_ROWS
JGE @@100
IMUL2 RAX,TEXT_COLS
ADD RDI,RAX
SHL RDI,2
ADD RDI,R10
MOV RAX,U8 SF_PARAM4[RBP]
@@20: LODSB
STOSD
LOOP @@20
POP RDI
POP RSI
POP RBP
MOV RAX,TRUE
RET
@@100: POP RDI
POP RSI
POP RBP
XOR EAX,EAX
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
/*
BoolU4 PlotAttr(TssStruct *tss,I8 len,
U8 attr,I8 x,I8 y)
*/
ALIGN 8,OC_NOP
CP_PLOT_ATTR::
PUSH RBP
MOV RBP,RSP
MOV R10,U8 [SYS_TEXTBASE]
PUSH RSI
PUSH RDI
MOV RBX,U8 SF_PARAM1[RBP]
MOV RDI,U8 SF_PARAM4[RBP]
MOV RCX,U8 SF_PARAM2[RBP]
OR RDI,RDI
JNS @@10
ADD RCX,RDI
XOR EDI,EDI
@@10: ADD RDI,U8 TSS_WIN_LEFT[RBX]
MOV RDX,RCX
ADD RDX,RDI
DEC RDX
CMP RDX,U8 TSS_WIN_RIGHT[RBX]
JLE @@11
MOV RAX,RDX
SUB RAX,U8 TSS_WIN_RIGHT[RBX]
SUB RDX,RAX
SUB RCX,RAX
@@11: OR RDI,RDI
JNS @@12
ADD RCX,RDI
XOR EDI,EDI
@@12: INC RDX
SUB RDX,TEXT_COLS
JLE @@13
SUB RCX,RDX
@@13: CMP RCX,1
JL @@100
MOV RAX,U8 SF_PARAM5[RBP]
OR RAX,RAX
JS @@100
ADD RAX,U8 TSS_WIN_TOP[RBX]
CMP RAX,U8 TSS_WIN_BOTTOM[RBX]
JG @@100
OR RAX,RAX
JS @@100
CMP RAX,TEXT_ROWS
JGE @@100
IMUL2 RAX,TEXT_COLS
ADD RDI,RAX
SHL RDI,2
ADD RDI,R10
MOV RBX,U8 SF_PARAM3[RBP]
MOV RSI,RDI
@@20: LODSD
OR AL,AL
JNZ @@21
MOV RAX,RBX
STOSD
LOOP @@20
@@21: POP RDI
POP RSI
POP RBP
MOV RAX,TRUE
RET
@@100: POP RDI
POP RSI
POP RBP
XOR EAX,EAX
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
CP_PLOT_BORDER_I1::
PUSH RBP
MOV RBP,RSP
MOV R10,U8 [SYS_TEXTBASE]
MOV RBX,U8 SF_PARAM3[RBP]
MOV RAX,U8 SF_PARAM4[RBP]
MOV RCX,U8 SF_PARAM1[RBP]
MOV RDX,-1
CMP RBX,RDX
JL @@100
ADD RBX,U8 TSS_WIN_LEFT[RCX]
MOV RDX,U8 TSS_WIN_RIGHT[RCX]
INC RDX
CMP RBX,RDX
JG @@100
OR RBX,RBX
JS @@100
CMP RBX,TEXT_COLS
JGE @@100
MOV RDX,-1
CMP RAX,RDX
JL @@100
ADD RAX,U8 TSS_WIN_TOP[RCX]
MOV RDX,U8 TSS_WIN_BOTTOM[RCX]
INC RDX
CMP RAX,RDX
JG @@100
OR RAX,RAX
JS @@100
CMP RAX,TEXT_ROWS
JGE @@100
IMUL2 RAX,TEXT_COLS
ADD RBX,RAX
SHL RBX,2
ADD RBX,R10
MOV RAX,U8 SF_PARAM2[RBP]
MOV U4 [RBX],EAX
POP RBP
MOV RAX,TRUE
RET
@@100: POP RBP
XOR EAX,EAX
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
/*
GrXorLineU8(&dst3,&src,&src2,d5b,vga_image,reverse_table);
for (col=0;col<d5a;col++) {
*dst3=*src^*src2;
dst3+=8;
src+=8;
src2+=8;
}
*/
GR_XOR_LINE_U8::
PUSH RBP
MOV RBP,RSP
PUSH RSI
PUSH RDI
MOV RAX,U8 SF_PARAM2[RBP]
MOV RDX,U8 [RAX]
MOV RAX,U8 SF_PARAM3[RBP]
MOV RSI,U8 [RAX] //rsi=src2
MOV RBX,U8 SF_PARAM6[RBP] //rbx=reverse table
MOV RCX,U8 SF_PARAM4[RBP] //rcx=d5
MOV RAX,U8 SF_PARAM5[RBP]
MOV RDI,U8 [RAX] //rdi=vga image
MOV RAX,U8 SF_PARAM1[RBP]
MOV R8,U8 [RAX] //rbp=vga dst
@@5: MOV RAX,U8 [RDX]
XOR RAX,U8 [RSI]
CMP U8 [RDI],RAX
JE @@7
MOV U8 [RDI],RAX
XLATB
ROR RAX,8
XLATB
ROR RAX,8
XLATB
ROR RAX,8
XLATB
ROR RAX,8
XLATB
ROR RAX,8
XLATB
ROR RAX,8
XLATB
ROR RAX,8
XLATB
ROR RAX,8
MOV U8 [R8],RAX
@@7: ADD RDI,8
ADD R8,8
ADD RSI,8
ADD RDX,8
LOOP @@5
MOV RAX,U8 SF_PARAM1[RBP]
MOV U8 [RAX],R8
MOV RAX,U8 SF_PARAM5[RBP]
MOV U8 [RAX],RDI
MOV RAX,U8 SF_PARAM3[RBP]
MOV U8 [RAX],RSI
MOV RAX,U8 SF_PARAM2[RBP]
MOV U8 [RAX],RDX
POP RDI
POP RSI
POP RBP
RET
////**************************PROCEDURE*************************
GR_XOR_BITMAP_U8::
PUSH RBP
MOV RBP,RSP
PUSH RSI
PUSH RDI
MOV RSI,SF_PARAM2[RBP]
MOV RDI,SF_PARAM1[RBP]
MOV RCX,SF_PARAM3[RBP]
@@1: LODSQ
XOR RAX,U8 [RDI]
STOSQ
LOOP @@1
POP RDI
POP RSI
POP RBP
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
/*
GrPlotChar(font_ptr,cur_ch.u1[1],&dst2,d1,d2);
for (plane=0x01;plane!=0x10;plane<<=1) {
font_ptr2=font_ptr;
if (cur_ch.u1[1] & plane) {
for (ch_line=0;ch_line<FONT_HEIGHT;ch_line++) {
*dst2|=*font_ptr2++;
dst2+=d1;
}
} else {
for (ch_line=0;ch_line<FONT_HEIGHT;ch_line++) {
*dst2&=~*font_ptr2++;
dst2+=d1;
}
}
dst2+=d2;
}
*/
GR_PLOT_CHAR::
PUSH RBP
MOV RBP,RSP
PUSH RSI
PUSH RDI
MOV RDX,1 //EDX=plane
MOV RBX,U8 SF_PARAM4[RBP] //RBX=d1
MOV RAX,U8 SF_PARAM3[RBP]
MOV RDI,U8 [RAX] //RDI=dst2
@@10: MOV RSI,U8 SF_PARAM1[RBP] //RSI=font_ptr2
TEST U8 SF_PARAM2[RBP],RDX
JZ @@30
@@20: LODSQ
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
OR U1 [RDI],AL
ADD RDI,RBX
JMP @@40
@@30: LODSQ
NOT RAX
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
ROR RAX,8
AND U1 [RDI],AL
ADD RDI,RBX
@@40: ADD RDI,U8 SF_PARAM5[RBP]
SHL1 RDX
CMP RDX,0x10
JNE U4 @@10
MOV RAX,U8 SF_PARAM3[RBP]
MOV U8 [RAX],RDI
POP RDI
POP RSI
POP RBP
RET
////**************************PROCEDURE*************************
ALIGN 8,OC_NOP
/*
GrPlotBackground(cur_ch.u1[1],&dst,d1,d2);
for (plane=0x10;plane!=0x100;plane=plane<<1) {
d=(cur_ch.u1[1] & plane) ? 0xFF:0x00;
for (ch_line=0;ch_line<FONT_HEIGHT;ch_line++) {
*dst=d;
dst+=d1;
}
dst+=d2;
}
*/
GR_PLOT_BACKGROUND::
PUSH RBP
MOV RBP,RSP
PUSH RDI
MOV RDX,0x10 //EDX=plane
MOV RBX,U8 SF_PARAM3[RBP] //RBX=d1
MOV RAX,U8 SF_PARAM2[RBP] //RDI=dst
MOV RDI,U8 [RAX] //RDI=dst
@@10: XOR EAX,EAX
TEST U8 SF_PARAM1[RBP],RDX
JZ @@20
DEC RAX
@@20: MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
MOV U1 [RDI],AL
ADD RDI,RBX
ADD RDI,U8 SF_PARAM4[RBP]
SHL1 RDX
CMP RDX,0x100
JNE @@10
MOV RAX,U8 SF_PARAM2[RBP]
MOV U8 [RAX],RDI
POP RDI
POP RBP
RET
/*****
BoolU4 IsPixelCovered(TssStruct *tss,I8 x,I8 y)
{
if (tss==sys_update_screen_tss) return FALSE;
tss=tss->next_tss;
while (tss!=sys_update_screen_tss) {
if (Bt(&tss->crt_flags,CRTf_SHOW)) { //no short circuit logic
if (x>=tss->win_border_pixel_left) {
if (x<=tss->win_border_pixel_right) {
if (y>=tss->win_border_pixel_top) {
if (y<=tss->win_border_pixel_bottom) {
return TRUE;
}}}}}
tss=tss->next_tss;
}
return FALSE;
}
*********/
CP_IS_PIXEL_COVERED::
PUSH RBP
MOV RBP,RSP
MOV RAX,U8 SF_PARAM1[RBP]
MOV RBX,U8 SF_PARAM2[RBP]
MOV RCX,U8 SF_PARAM3[RBP]
MOV RDX,U8 [sys_update_screen_tss]
BT U4 TSS_CRT_FLAGS[RAX],CRTf_ON_TOP
JC @@100
PUSHFD
CLI
MOV RAX,U8 TSS_NEXT_TSS[RAX]
JMP @@30
@@1: BT U4 TSS_CRT_FLAGS[RAX],CRTf_SHOW
JNC @@20
CMP RBX,U8 TSS_WIN_BORDER_PIXEL_LEFT[RAX]
JL @@20
CMP RCX,U8 TSS_WIN_BORDER_PIXEL_TOP[RAX]
JL @@20
CMP RBX,U8 TSS_WIN_BORDER_PIXEL_RIGHT[RAX]
JG @@20
CMP RCX,U8 TSS_WIN_BORDER_PIXEL_BOTTOM[RAX]
JG @@20
POPFD
MOV RAX,TRUE
POP RBP
RET
@@20: MOV RAX,U8 TSS_NEXT_TSS[RAX]
@@30: CMP RAX,RDX
JNE @@1
POPFD
@@100: XOR EAX,EAX
POP RBP
RET
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
#help_index "Graphics"
public LTextern CP_IS_PIXEL_COVERED BoolU4 IsPixelCovered(TssStruct *tss,I8 x,I8 y);
LTextern GR_XOR_LINE_U8 void GrXorLineU8(U8 **dst3,U8 **src,U8 **src2,U8 d5b,
void **vga,U1 *reverse_bit_tab);
LTextern GR_XOR_BITMAP_U8 void GrXorBitMapU8(U8 *b1,U8 *b2,U8 cnt);
LTextern GR_PLOT_CHAR void GrPlotChar(U1 *font_ptr,U1 attr,U1 **dst2,U8 d1,U8 d2);
LTextern GR_PLOT_BACKGROUND void GrPlotBackground(U1 attr,U1 **dst,U8 d1,U8 d2);
//The callback is void Plot(aux_data,x,y,z)
#help_index "Graphics/Char"
public LTextern CP_PLOT_SCREEN_I1 BoolU4 PlotScreenChar(U8 w,I8 x,I8 y);
public LTextern CP_PLOT_WIN_I1 BoolU4 PlotWinChar(TssStruct *tss,U8 w,I8 x,I8 y);
public LTextern CP_PLOT_WIN_STR2 BoolU4 PlotWinStr2(
TssStruct *tss,I1 *s,I8 len,U8 attr,I8 x,I8 y);
public LTextern CP_PLOT_ATTR BoolU4 PlotWinAttr(
TssStruct *tss,I8 len,U8 attr,I8 x,I8 y);
public LTextern CP_PLOT_BORDER_I1 BoolU4 PlotBorderChar(TssStruct *tss,U8 w,I8 x,I8 y);
#help_index ""
Binary file not shown.
Binary file not shown.