forked from KolibriOS/kolibrios
Console15, eliza, ScrV src added.
git-svn-id: svn://kolibrios.org@1817 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
3d31c6abab
commit
5646ab62dc
33
programs/games/console15/asm_code.asm
Normal file
33
programs/games/console15/asm_code.asm
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
format MS COFF
|
||||||
|
|
||||||
|
public Start
|
||||||
|
|
||||||
|
extrn Memory
|
||||||
|
extrn hEnd
|
||||||
|
|
||||||
|
extrn _kol_main
|
||||||
|
|
||||||
|
section ".text" code
|
||||||
|
db "MENUET01"
|
||||||
|
dd 1, Start, hEnd, Memory, hStack, 0, 0
|
||||||
|
|
||||||
|
Start:
|
||||||
|
|
||||||
|
; èíèöèàëèçàöèÿ êó÷è
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 11
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; âûçîâ ãëàâíîé ïðîöåäóðû
|
||||||
|
mov eax, _kol_main
|
||||||
|
call eax
|
||||||
|
|
||||||
|
; çàâåðøåíèå ðàáîòû ïðîãðàììû
|
||||||
|
mov eax, -1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
section ".bss"
|
||||||
|
|
||||||
|
rb 4096
|
||||||
|
hStack:
|
192
programs/games/console15/c_code.c
Normal file
192
programs/games/console15/c_code.c
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
#include "system/kolibri.h"
|
||||||
|
#include "system/stdlib.h"
|
||||||
|
#include "system/string.h"
|
||||||
|
|
||||||
|
char CONSOLE[] = "/sys/lib/console.obj";
|
||||||
|
|
||||||
|
#define MENTION _printf("Arrows to move left, up, right or down, or 'Esc' to exit: \n\n");
|
||||||
|
|
||||||
|
int** field;
|
||||||
|
int emptyCell_x, emptyCell_y;
|
||||||
|
|
||||||
|
char NOT_VALID_MOVE[] = {"Not valid move.\n\n"};
|
||||||
|
|
||||||
|
void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);
|
||||||
|
void (* _cdecl _printf)(const char* format,...);
|
||||||
|
void (* _stdcall __exit)(char bCloseWindow);
|
||||||
|
int (* _stdcall _getch)(void);
|
||||||
|
|
||||||
|
|
||||||
|
//------------------
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
int x,y, i,j;
|
||||||
|
srand( kol_system_time_get() );
|
||||||
|
for(i=1; i<=15;)
|
||||||
|
{
|
||||||
|
x=rand()%4; y=rand()%4;
|
||||||
|
if(field[x][y] == 0) field[x][y] = i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=0; i<4; i++) //to find the empty cell
|
||||||
|
for(j=0; j<4; j++)
|
||||||
|
if(field[j][i] == 0)
|
||||||
|
{
|
||||||
|
emptyCell_x=j; emptyCell_y = i; return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
void printField()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
for(i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
for(j=0; j<4; j++)
|
||||||
|
if(field[j][i]) _printf("%3d", field[j][i]);
|
||||||
|
else _printf(" _");
|
||||||
|
_printf("\n\n");
|
||||||
|
}
|
||||||
|
_printf("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------
|
||||||
|
int notEndYet()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
for(i=0; i<3; i++)
|
||||||
|
for(j=0; j<4; j++)
|
||||||
|
if(field[j][i] != 4*i+j+1) return 0; //go on play
|
||||||
|
if(field[0][3] != 13) return 0;
|
||||||
|
|
||||||
|
return 1; //victory!
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------- allows move the emply cell
|
||||||
|
int move()
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned short c;
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
c = _getch();
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
case 0x4d00:
|
||||||
|
if(emptyCell_x==0)
|
||||||
|
{
|
||||||
|
_printf(NOT_VALID_MOVE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field[emptyCell_x][emptyCell_y] = field[emptyCell_x-1][emptyCell_y];
|
||||||
|
field[emptyCell_x-1][emptyCell_y] = 0;
|
||||||
|
emptyCell_x--;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case 0x5000:
|
||||||
|
if(emptyCell_y==0)
|
||||||
|
{
|
||||||
|
_printf(NOT_VALID_MOVE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field[emptyCell_x][emptyCell_y] = field[emptyCell_x][emptyCell_y-1];
|
||||||
|
field[emptyCell_x][emptyCell_y-1] = 0;
|
||||||
|
emptyCell_y--;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
case 0x4b00:
|
||||||
|
if(emptyCell_x==3)
|
||||||
|
{
|
||||||
|
_printf(NOT_VALID_MOVE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field[emptyCell_x][emptyCell_y] = field[emptyCell_x+1][emptyCell_y];
|
||||||
|
field[emptyCell_x+1][emptyCell_y] = 0;
|
||||||
|
emptyCell_x++;
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
case 0x4800:
|
||||||
|
if(emptyCell_y==3)
|
||||||
|
{
|
||||||
|
_printf(NOT_VALID_MOVE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field[emptyCell_x][emptyCell_y] = field[emptyCell_x][emptyCell_y+1];
|
||||||
|
field[emptyCell_x][emptyCell_y+1] = 0;
|
||||||
|
emptyCell_y++;
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
case 0x011b: __exit(1);
|
||||||
|
default: MENTION
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------- main function
|
||||||
|
void kol_main()
|
||||||
|
{
|
||||||
|
|
||||||
|
int i;
|
||||||
|
kol_struct_import *imp;
|
||||||
|
|
||||||
|
imp = kol_cofflib_load(CONSOLE);
|
||||||
|
if (imp == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_init = ( _stdcall void (*)(unsigned, unsigned, unsigned, unsigned, const char*))
|
||||||
|
kol_cofflib_procload (imp, "con_init");
|
||||||
|
if (con_init == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
_printf = ( _cdecl void (*)(const char*,...))
|
||||||
|
kol_cofflib_procload (imp, "con_printf");
|
||||||
|
if (_printf == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
__exit = ( _stdcall void (*)(char))
|
||||||
|
kol_cofflib_procload (imp, "con_exit");
|
||||||
|
|
||||||
|
if (__exit == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
|
||||||
|
_getch = ( _stdcall int (*)(void))
|
||||||
|
kol_cofflib_procload (imp, "con_getch2");
|
||||||
|
|
||||||
|
if (_getch == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_init(-1, -1, -1, -1, "Console15 by O.Bogomaz");
|
||||||
|
|
||||||
|
field = (int**)malloc(4 * sizeof(int*));
|
||||||
|
|
||||||
|
for( i=0; i<4; i++)
|
||||||
|
field[i] = (int*)malloc(4 * sizeof(int));
|
||||||
|
|
||||||
|
do
|
||||||
|
init();
|
||||||
|
while(notEndYet());
|
||||||
|
|
||||||
|
MENTION
|
||||||
|
|
||||||
|
printField();
|
||||||
|
|
||||||
|
while(!notEndYet())
|
||||||
|
{
|
||||||
|
move();
|
||||||
|
printField();
|
||||||
|
}
|
||||||
|
|
||||||
|
_printf("\nYou win!\n");
|
||||||
|
__exit(0);
|
||||||
|
}
|
11
programs/games/console15/compile.bat
Normal file
11
programs/games/console15/compile.bat
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
del *.o
|
||||||
|
fasm asm_code.asm asm_code.o
|
||||||
|
gcc -c c_code.c
|
||||||
|
gcc -c system/kolibri.c
|
||||||
|
gcc -c system/stdlib.c
|
||||||
|
gcc -c system/string.c
|
||||||
|
ld -nostdlib -T kolibri.ld -o console15 asm_code.o kolibri.o stdlib.o string.o c_code.o
|
||||||
|
objcopy console15 -O binary
|
||||||
|
kpack console15
|
||||||
|
del *.o
|
||||||
|
pause
|
20
programs/games/console15/kolibri.ld
Normal file
20
programs/games/console15/kolibri.ld
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*OUTPUT_FORMAT("binary")*/
|
||||||
|
ENTRY(Start)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text 0x000000:
|
||||||
|
{
|
||||||
|
*(.text)
|
||||||
|
}
|
||||||
|
|
||||||
|
.data : {
|
||||||
|
*(.data)
|
||||||
|
hEnd = . ;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
*(.bss)
|
||||||
|
}
|
||||||
|
Memory = . ;
|
||||||
|
}
|
422
programs/games/console15/system/kolibri.c
Normal file
422
programs/games/console15/system/kolibri.c
Normal file
@ -0,0 +1,422 @@
|
|||||||
|
|
||||||
|
#include "kolibri.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern char KOL_PATH[256];
|
||||||
|
extern char KOL_PARAM[256];
|
||||||
|
extern char KOL_DIR[256];
|
||||||
|
|
||||||
|
|
||||||
|
void kol_exit()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_sleep(unsigned d)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(5), "b"(d));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c)
|
||||||
|
{
|
||||||
|
asm ("nop"::"a"(0), "b"(x*65536+w), "c"(y*65536+h), "d"(c));
|
||||||
|
asm ("movl $0xffffff, %esi \n int $0x40");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_wnd_move(unsigned x, unsigned y)
|
||||||
|
{
|
||||||
|
asm ("nop"::"a"(67), "b"(x), "c"(y));
|
||||||
|
asm ("movl $-1, %edx \n movl $-1, %esi \n int $0x40");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_event_mask(unsigned e)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(40), "b"(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_event_wait()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_event_wait_time(unsigned time)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(23), "b"(time));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_event_check()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(11));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_start()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(12), "b"(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_end()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(12), "b"(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_pixel(unsigned x, unsigned y, unsigned c)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(1), "b"(x), "c"(y), "d"(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(13), "b"(x*65536+w), "c"(y*65536+h), "d"(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(38), "b"(x1*65536+x2), "c"(y1*65536+y2), "d"(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(4), "b"(x*65536+y), "c"(c), "d"(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(7), "c"(w*65536+h), "d"(x*65536+y), "b"(d));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette)
|
||||||
|
{
|
||||||
|
asm ("nop"::"c"(w*65536+h), "d"(x*65536+y), "b"(d));
|
||||||
|
asm ("nop"::"a"(palette));
|
||||||
|
asm ("movl %eax, %edi");
|
||||||
|
asm ("xor %eax, %eax");
|
||||||
|
asm ("movl %eax, %ebp");
|
||||||
|
asm ("pushl $8");
|
||||||
|
asm ("popl %esi");
|
||||||
|
asm ("int $0x40"::"a"(65));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_key_get()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_key_control()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(66), "b"(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_key_lang_set(unsigned lang)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(21), "b"(2), "c"(9), "d"(lang));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_key_lang_get()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(26), "b"(2), "c"(9));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_key_mode_set(unsigned mode)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(66), "b"(1), "c"(mode));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_key_mode_get()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(66), "b"(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_btn_get()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(17));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c)
|
||||||
|
{
|
||||||
|
asm ("nop"::"b"(x*65536+w), "c"(y*65536+h), "d"(d));
|
||||||
|
asm ("nop"::"a"(c));
|
||||||
|
asm ("movl %eax, %esi");
|
||||||
|
asm ("int $0x40"::"a"(8));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_btn_type(unsigned t)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(48), "b"(1), "c"(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_wnd_caption(char *s)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(71), "b"(1), "c"(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_mouse_pos()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(37), "b"(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_mouse_posw()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(37), "b"(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_mouse_btn()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(37), "b"(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_board_putc(char c)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(63), "b"(1), "c"(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_board_puts(char *s)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
i = 0;
|
||||||
|
while (*(s+i))
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i)));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_board_puti(int n)
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
int i = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
c = n % 10 + '0';
|
||||||
|
asm ("int $0x40"::"a"(63), "b"(1), "c"(c));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while ((n /= 10) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int kol_file_70(kol_struct70 *k)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(70), "b"(k));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
kol_struct_import* kol_cofflib_load(char *name)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(68), "b"(19), "c"(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* kol_cofflib_procload (kol_struct_import *imp, char *name)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i=0;;i++)
|
||||||
|
if ( NULL == ((imp+i) -> name))
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
if ( 0 == strcmp(name, (imp+i)->name) )
|
||||||
|
return (imp+i)->data;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_cofflib_procnum (kol_struct_import *imp)
|
||||||
|
{
|
||||||
|
unsigned i, n;
|
||||||
|
|
||||||
|
for (i=n=0;;i++)
|
||||||
|
if ( NULL == ((imp+i) -> name))
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
n++;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
*name = 0;
|
||||||
|
|
||||||
|
for (i=0;;i++)
|
||||||
|
if ( NULL == ((imp+i) -> name))
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
if ( i == n )
|
||||||
|
{
|
||||||
|
strcpy(name, ((imp+i)->name));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_system_cpufreq()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(5));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_system_mem()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(17));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_system_memfree()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(16));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_system_time_get()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_system_date_get()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(29));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_system_end(unsigned param)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(9), "c"(param));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_path_file2dir(char *dir, char *fname)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
strcpy (dir, fname);
|
||||||
|
for ( i = strlen(dir);; --i)
|
||||||
|
if ( '/' == dir[i])
|
||||||
|
{
|
||||||
|
dir[i] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void kol_path_full(char *full, char *fname)
|
||||||
|
{
|
||||||
|
char temp[256];
|
||||||
|
|
||||||
|
switch (*fname)
|
||||||
|
{
|
||||||
|
|
||||||
|
case '/':
|
||||||
|
strncpy(temp, fname+1, 2);
|
||||||
|
temp[2]=0;
|
||||||
|
if ( (!strcmp("rd", temp)) || (!strcmp("hd", temp)) || (!strcmp("cd", temp)) )
|
||||||
|
strcpy (full, fname);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '.':
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void kol_screen_wait_rr()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(14));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void kol_screen_get_size(unsigned *w, unsigned *h)
|
||||||
|
{
|
||||||
|
unsigned size;
|
||||||
|
asm ("int $0x40":"=a"(size):"a"(14));
|
||||||
|
*w = size / 65536;
|
||||||
|
*h = size % 65536;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_skin_height()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(48), "b"(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_thread_start(unsigned start, unsigned stack)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(51), "b"(1), "c"(start), "d"(stack));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_time_tick()
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(26), "b"(9));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_sound_speaker(char data[])
|
||||||
|
{
|
||||||
|
asm ("movl %0, %%esi"::"a"(data));
|
||||||
|
asm ("int $0x40"::"a"(55), "b"(55));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned kol_process_info(unsigned slot, char buf1k[])
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(9), "b"(buf1k), "c"(slot));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int kol_process_kill_pid(unsigned process)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(18), "c"(process));
|
||||||
|
}
|
||||||
|
|
||||||
|
int kol_kill_process(unsigned process)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(2), "c"(process));
|
||||||
|
}
|
||||||
|
|
||||||
|
void kol_get_kernel_ver(char buff16b[])
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(18), "b"(13), "c"(buff16b));
|
||||||
|
}
|
92
programs/games/console15/system/kolibri.h
Normal file
92
programs/games/console15/system/kolibri.h
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
|
||||||
|
#define NULL ((void*)0)
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned p00 __attribute__((packed));
|
||||||
|
unsigned p04 __attribute__((packed));
|
||||||
|
unsigned p08 __attribute__((packed));
|
||||||
|
unsigned p12 __attribute__((packed));
|
||||||
|
unsigned p16 __attribute__((packed));
|
||||||
|
char p20 __attribute__((packed));
|
||||||
|
char *p21 __attribute__((packed));
|
||||||
|
} kol_struct70 __attribute__((packed));
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned p00 __attribute__((packed));
|
||||||
|
char p04 __attribute__((packed));
|
||||||
|
char p05[3] __attribute__((packed));
|
||||||
|
unsigned p08 __attribute__((packed));
|
||||||
|
unsigned p12 __attribute__((packed));
|
||||||
|
unsigned p16 __attribute__((packed));
|
||||||
|
unsigned p20 __attribute__((packed));
|
||||||
|
unsigned p24 __attribute__((packed));
|
||||||
|
unsigned p28 __attribute__((packed));
|
||||||
|
unsigned p32[2] __attribute__((packed));
|
||||||
|
unsigned p40 __attribute__((packed));
|
||||||
|
} kol_struct_BDVK __attribute__((packed));
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name __attribute__((packed));
|
||||||
|
void *data __attribute__((packed));
|
||||||
|
} kol_struct_import __attribute__((packed));
|
||||||
|
|
||||||
|
|
||||||
|
void kol_exit();
|
||||||
|
void kol_sleep(unsigned d);
|
||||||
|
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
|
||||||
|
void kol_wnd_move(unsigned x, unsigned y);
|
||||||
|
void kol_wnd_caption(char *s);
|
||||||
|
void kol_event_mask(unsigned e);
|
||||||
|
unsigned kol_event_wait();
|
||||||
|
unsigned kol_event_wait_time(unsigned time);
|
||||||
|
unsigned kol_event_check();
|
||||||
|
void kol_paint_start();
|
||||||
|
void kol_paint_end();
|
||||||
|
void kol_paint_pixel(unsigned x, unsigned y, unsigned c);
|
||||||
|
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
|
||||||
|
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c);
|
||||||
|
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c);
|
||||||
|
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d);
|
||||||
|
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette);
|
||||||
|
unsigned kol_key_get();
|
||||||
|
unsigned kol_key_control();
|
||||||
|
void kol_key_lang_set(unsigned lang);
|
||||||
|
unsigned kol_key_lang_get();
|
||||||
|
void kol_key_mode_set(unsigned mode);
|
||||||
|
unsigned kol_key_mode_get();
|
||||||
|
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c);
|
||||||
|
unsigned kol_btn_get();
|
||||||
|
void kol_btn_type(unsigned t);
|
||||||
|
unsigned kol_mouse_pos();
|
||||||
|
unsigned kol_mouse_posw();
|
||||||
|
unsigned kol_mouse_btn();
|
||||||
|
void kol_board_putc(char c);
|
||||||
|
void kol_board_puts(char *s);
|
||||||
|
void kol_board_puti(int n);
|
||||||
|
int kol_file_70(kol_struct70 *k);
|
||||||
|
kol_struct_import* kol_cofflib_load(char *name);
|
||||||
|
void* kol_cofflib_procload (kol_struct_import *imp, char *name);
|
||||||
|
unsigned kol_cofflib_procnum (kol_struct_import *imp);
|
||||||
|
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n);
|
||||||
|
unsigned kol_system_end(unsigned param);
|
||||||
|
unsigned kol_system_cpufreq();
|
||||||
|
unsigned kol_system_mem();
|
||||||
|
unsigned kol_system_memfree();
|
||||||
|
unsigned kol_system_time_get();
|
||||||
|
unsigned kol_system_date_get();
|
||||||
|
void kol_path_file2dir(char *dir, char *fname);
|
||||||
|
void kol_path_full(char *full, char *fname);
|
||||||
|
void kol_screen_wait_rr();
|
||||||
|
void kol_screen_get_size(unsigned *w, unsigned *h);
|
||||||
|
unsigned kol_skin_height();
|
||||||
|
unsigned kol_thread_start(unsigned start, unsigned stack);
|
||||||
|
unsigned kol_time_tick();
|
||||||
|
unsigned kol_sound_speaker(char data[]);
|
||||||
|
unsigned kol_process_info(unsigned slot, char buf1k[]);
|
||||||
|
int kol_process_kill_pid(unsigned process);
|
||||||
|
void kol_get_kernel_ver(char buff16b[]);
|
||||||
|
int kol_kill_process(unsigned process);
|
33
programs/games/console15/system/stdlib.c
Normal file
33
programs/games/console15/system/stdlib.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
unsigned int seed_o = 0x45168297;
|
||||||
|
|
||||||
|
|
||||||
|
void srand (unsigned seed)
|
||||||
|
{
|
||||||
|
seed_o = seed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int rand (void)
|
||||||
|
{
|
||||||
|
seed_o = seed_o * 0x15a4e35 + 1;
|
||||||
|
return(seed_o >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* malloc(unsigned s)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(68), "b"(12), "c"(s) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void free(void *p)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(68), "b"(13), "c"(p) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* realloc(void *p, unsigned s)
|
||||||
|
{
|
||||||
|
asm ("int $0x40"::"a"(68), "b"(12), "c"(p), "d"(s) );
|
||||||
|
}
|
14
programs/games/console15/system/stdlib.h
Normal file
14
programs/games/console15/system/stdlib.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
#define RAND_MAX 0x7FFFU
|
||||||
|
|
||||||
|
#define isspace(c) ((c)==' ')
|
||||||
|
#define abs(i) (((i)<0)?(-(i)):(i))
|
||||||
|
|
||||||
|
#define random(num) ((rand()*(num))/((RAND_MAX+1)))
|
||||||
|
|
||||||
|
void* malloc(unsigned size);
|
||||||
|
void free(void *pointer);
|
||||||
|
void* realloc(void* pointer, unsigned size);
|
||||||
|
|
||||||
|
void srand (unsigned seed);
|
||||||
|
int rand (void);
|
124
programs/games/console15/system/string.c
Normal file
124
programs/games/console15/system/string.c
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
void* memset(void *mem, int c, unsigned size)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for ( i = 0; i < size; i++ )
|
||||||
|
*((char *)mem+i) = (char) c;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* memcpy(void *dst, const void *src, unsigned size)
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for ( i = 0; i < size; i++)
|
||||||
|
*(char *)(dst+i) = *(char *)(src+i);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int memcmp(const void* buf1, const void* buf2, int count)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i=0;i<count;i++)
|
||||||
|
{
|
||||||
|
if (*(unsigned char*)buf1<*(unsigned char*)buf2)
|
||||||
|
return -1;
|
||||||
|
if (*(unsigned char*)buf1>*(unsigned char*)buf2)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void strcat(char strDest[], char strSource[])
|
||||||
|
{
|
||||||
|
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
i = j = 0;
|
||||||
|
while (strDest[i] != '\0')
|
||||||
|
i++;
|
||||||
|
|
||||||
|
while ((strDest[i++] = strSource[j++]) != '\0')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int strcmp(const char* string1, const char* string2)
|
||||||
|
{
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if (*string1<*string2)
|
||||||
|
return -1;
|
||||||
|
if (*string1>*string2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (*string1=='\0')
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
string1++;
|
||||||
|
string2++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void strcpy(char strDest[], const char strSource[])
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ((strDest[i] = strSource[i]) != '\0')
|
||||||
|
i++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char* strncpy(char *strDest, const char *strSource, unsigned n)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
if (! n )
|
||||||
|
return strDest;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ((strDest[i] = strSource[i]) != '\0')
|
||||||
|
if ( (n-1) == i )
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
i++;
|
||||||
|
|
||||||
|
return strDest;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int strlen(const char* string)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
while (*string++) i++;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
char* strchr(const char* string, int c)
|
||||||
|
{
|
||||||
|
while (*string)
|
||||||
|
{
|
||||||
|
if (*string==c)
|
||||||
|
return (char*)string;
|
||||||
|
string++;
|
||||||
|
}
|
||||||
|
return (char*)0;
|
||||||
|
}
|
||||||
|
|
15
programs/games/console15/system/string.h
Normal file
15
programs/games/console15/system/string.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#define NULL ((void*)0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void* memset(void *mem, int c, unsigned size);
|
||||||
|
void* memcpy(void *dst, const void *src, unsigned size);
|
||||||
|
int memcmp(const void* buf1, const void* buf2, int count);
|
||||||
|
|
||||||
|
void strcat(char strDest[], char strSource[]);
|
||||||
|
int strcmp(const char* string1, const char* string2);
|
||||||
|
void strcpy(char strDest[], const char strSource[]);
|
||||||
|
char* strncpy(char *strDest, const char *strSource, unsigned n);
|
||||||
|
int strlen(const char* string);
|
||||||
|
char *strchr(const char* string, int c);
|
3
programs/games/eliza/compile.bat
Normal file
3
programs/games/eliza/compile.bat
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
del eliza
|
||||||
|
fasm eliza.asm eliza
|
||||||
|
kpack eliza
|
964
programs/games/eliza/eliza.asm
Normal file
964
programs/games/eliza/eliza.asm
Normal file
@ -0,0 +1,964 @@
|
|||||||
|
use32
|
||||||
|
org 0
|
||||||
|
db 'MENUET01'
|
||||||
|
dd 1
|
||||||
|
dd _start
|
||||||
|
dd _end
|
||||||
|
dd _memory
|
||||||
|
dd _stack
|
||||||
|
dd _param
|
||||||
|
dd 0
|
||||||
|
|
||||||
|
_start:
|
||||||
|
|
||||||
|
call lib_console_init
|
||||||
|
push caption
|
||||||
|
push -1
|
||||||
|
push -1
|
||||||
|
push -1
|
||||||
|
push -1
|
||||||
|
call [con_init]
|
||||||
|
|
||||||
|
;----------------------------------------------------;
|
||||||
|
; Program code starts here ;
|
||||||
|
;----------------------------------------------------;
|
||||||
|
mov dl,1 ; init dl to 1, reply paging
|
||||||
|
call [Clstext] ; Clear screen
|
||||||
|
mov esi,line1 ; Load intro screen line adress
|
||||||
|
call [PrintString] ; Print it
|
||||||
|
call [WaitForKeyPress] ; Key press ends intro
|
||||||
|
call [Clstext] ; Clear screen
|
||||||
|
mov ax,0111h ; Write location in Dex title block
|
||||||
|
mov esi,Program_name ; What to write
|
||||||
|
call [SetCursorPos] ; Put cursor there
|
||||||
|
call [PrintString] ; Write title
|
||||||
|
mov ax,0400h ; Write location to start chat
|
||||||
|
call [SetCursorPos] ; Set it
|
||||||
|
mov al,2 ; Eliza text color
|
||||||
|
call [TextColor] ; Set it
|
||||||
|
mov esi,Message ; Intro Message
|
||||||
|
call [PrintString] ; Print it
|
||||||
|
userinput:
|
||||||
|
call prtblk ; Add a blank line
|
||||||
|
mov al,3 ; User text color
|
||||||
|
call [TextColor] ; Set it
|
||||||
|
call [GetUserInput] ; Get sentance from user
|
||||||
|
call prtblk ; Add line after input
|
||||||
|
call [UpperCase] ; Make user input caps
|
||||||
|
mov al,2 ; Eliza text color
|
||||||
|
call [TextColor] ; Set it
|
||||||
|
phr:
|
||||||
|
push edi ; Save user input pointer
|
||||||
|
mov ebx,keywords ; Set keyword pointer
|
||||||
|
phr1:
|
||||||
|
mov al,[edi] ; Get char from user input
|
||||||
|
inc edi ; Set pointer to next char
|
||||||
|
inc ebx ; Set keyword pointer to next char
|
||||||
|
mov ah,[ebx] ; Get letter to test from keywords
|
||||||
|
and ah,127 ; Strip out bit 7 marker
|
||||||
|
cmp al,ah ; Do the letters match?
|
||||||
|
je phr2 ; Jump if they do
|
||||||
|
phr1a:
|
||||||
|
cmp byte[ebx],128 ; Was that the last letter of keyword?
|
||||||
|
jnb phr1b ; Jump if it was
|
||||||
|
inc ebx ; increment key word pointer to next letter
|
||||||
|
jmp phr1a ; Jump back to see if this is the last letter
|
||||||
|
phr1b:
|
||||||
|
add ebx,5 ; Add 5 to get to next word past execution address
|
||||||
|
cmp byte[ebx],128 ; No more keywords?
|
||||||
|
je phr3 ; Jump to maybe inc user input
|
||||||
|
dec ebx ; Correct for pre-increment
|
||||||
|
pop edi ; Restore user input pointer
|
||||||
|
push edi ; Save user input pointer
|
||||||
|
jmp phr1 ; Check next keyword for a match
|
||||||
|
phr2:
|
||||||
|
cmp byte[ebx],128 ; Last letter of a keyword?
|
||||||
|
jb phr1 ; No check some more
|
||||||
|
inc ebx ; ebx -> is the execution address
|
||||||
|
pop eax ; Clear stored pointer from stack
|
||||||
|
jmp dword[ebx] ; Goto line stored with keyword
|
||||||
|
phr3: pop edi ; Restore input pointer
|
||||||
|
inc edi ; Move to next letter of user input
|
||||||
|
cmp byte[edi],0 ; Nothing left to check?
|
||||||
|
je rep29 ; Go to sorry message
|
||||||
|
jmp phr ; Try some more
|
||||||
|
rep1:
|
||||||
|
mov esi,rep1a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep1b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep1c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep1b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep1c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep2:
|
||||||
|
mov esi,rep2a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep2b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep2a ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep2b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep2a ; Load reply
|
||||||
|
cmp dl,9 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep2b ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep3:
|
||||||
|
mov esi,rep3a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep3b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep3c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep3d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep3b ; Load reply
|
||||||
|
cmp dl,9 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep3c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep4:
|
||||||
|
mov esi,rep4a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep4b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep4c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep4d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep4b ; Load reply
|
||||||
|
cmp dl,9 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep4c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep5:
|
||||||
|
mov esi,rep5a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep5b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep5c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep5b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep5c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep6:
|
||||||
|
mov esi,rep6a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep6b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep6c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep6b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep6c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep7:
|
||||||
|
mov esi,rep7a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep7b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep7a ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep7b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep7a ; Load reply
|
||||||
|
cmp dl,9 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep7b ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep8:
|
||||||
|
mov esi,rep8a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep8b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep8c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep8b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep8c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep9:
|
||||||
|
mov esi,rep9a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep9b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep9c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep9b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep9c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep10:
|
||||||
|
mov esi,rep10a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep10b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep10c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep10d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep10c ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep11:
|
||||||
|
mov esi,rep11a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep11b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep11c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep11b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep11c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep12:
|
||||||
|
mov esi,rep12a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep12b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep12c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep12d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep12e ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep13:
|
||||||
|
mov esi,rep13a ; Load reply
|
||||||
|
cmp dl,1 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13b ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13c ; Load reply
|
||||||
|
cmp dl,3 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13d ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13e ; Load reply
|
||||||
|
cmp dl,5 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13f ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13g ; Load reply
|
||||||
|
cmp dl,7 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13h ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep13i ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep14:
|
||||||
|
mov esi,rep14a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep14b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep14a ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep14b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep14a ; Load reply
|
||||||
|
cmp dl,9 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep14b ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep15:
|
||||||
|
mov esi,rep15a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep15b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep15c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep15d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep15c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep16:
|
||||||
|
mov esi,rep16a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep16b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep16c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep16d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep16c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep17:
|
||||||
|
mov esi,rep17a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep17b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep17c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep17d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep17c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep18:
|
||||||
|
mov esi,rep18a ; Load reply
|
||||||
|
jmp printless ; print reply
|
||||||
|
rep19:
|
||||||
|
mov esi,rep19a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep19b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep19c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep19d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep19e ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep20:
|
||||||
|
mov esi,rep20a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep20b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep20c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep20d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep20e ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep21:
|
||||||
|
mov esi,rep21a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep21b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep21a ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep21b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep21a ; Load reply
|
||||||
|
cmp dl,9 ; are we repeating our self
|
||||||
|
jna printmore ; reply with user text
|
||||||
|
mov esi,rep21b ; Load reply
|
||||||
|
jmp printmore ; reply with user text
|
||||||
|
rep22:
|
||||||
|
mov esi,rep22a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep22b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep22c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep22d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep22c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep23:
|
||||||
|
mov esi,rep23a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep23b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep23c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep23b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep23c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep24:
|
||||||
|
mov esi,rep24a ; Load reply
|
||||||
|
cmp dl,1 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24b ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24c ; Load reply
|
||||||
|
cmp dl,3 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24d ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24e ; Load reply
|
||||||
|
cmp dl,5 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24f ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24g ; Load reply
|
||||||
|
cmp dl,7 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24c ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep24f ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep25:
|
||||||
|
mov esi,rep25a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep25b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep25c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep25b ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep25c ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep26:
|
||||||
|
mov esi,rep26a ; Load reply
|
||||||
|
cmp dl,1 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26b ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26c ; Load reply
|
||||||
|
cmp dl,3 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26d ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26e ; Load reply
|
||||||
|
cmp dl,5 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26f ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26e ; Load reply
|
||||||
|
cmp dl,7 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26c ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep26f ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep27:
|
||||||
|
mov esi,rep27a ; Load reply
|
||||||
|
cmp dl,1 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27b ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27c ; Load reply
|
||||||
|
cmp dl,3 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27d ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27e ; Load reply
|
||||||
|
cmp dl,5 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27f ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27g ; Load reply
|
||||||
|
cmp dl,7 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27c ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep27f ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep28:
|
||||||
|
mov esi,rep28a ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep28b ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep28c ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep28d ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep28e ; Load reply
|
||||||
|
jmp printless ; reply with user tex
|
||||||
|
|
||||||
|
rep29:
|
||||||
|
mov esi,rep29a ; Load reply
|
||||||
|
cmp dl,1 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29b ; Load reply
|
||||||
|
cmp dl,2 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29c ; Load reply
|
||||||
|
cmp dl,3 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29d ; Load reply
|
||||||
|
cmp dl,4 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29e ; Load reply
|
||||||
|
cmp dl,5 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29f ; Load reply
|
||||||
|
cmp dl,6 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29g ; Load reply
|
||||||
|
cmp dl,7 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29c ; Load reply
|
||||||
|
cmp dl,8 ; are we repeating our self
|
||||||
|
jna printless ; reply with user text
|
||||||
|
mov esi,rep29f ; Load reply
|
||||||
|
jmp printless ; reply with user text
|
||||||
|
rep30:
|
||||||
|
mov al,"A"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"M"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep31:
|
||||||
|
mov al,"W"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"A"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"S"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep32:
|
||||||
|
mov al,"I"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep33:
|
||||||
|
mov al,"M"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"Y"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep34:
|
||||||
|
mov al,"Y"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"O"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"U"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"'"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"V"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"E"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep35:
|
||||||
|
mov al,"Y"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"O"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"U"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"'"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"R"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"E"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep36:
|
||||||
|
mov al,"M"
|
||||||
|
call [PrintChar]
|
||||||
|
mov al,"E"
|
||||||
|
call [PrintChar]
|
||||||
|
jmp printmore2
|
||||||
|
rep37:
|
||||||
|
jmp printmore2
|
||||||
|
progmend:
|
||||||
|
mov esi,message2 ; Load good bye message
|
||||||
|
call [PrintString] ; Print it
|
||||||
|
mov al,7
|
||||||
|
call [TextColor] ; Restore text color
|
||||||
|
|
||||||
|
|
||||||
|
push 0
|
||||||
|
call [con_exit]
|
||||||
|
|
||||||
|
mov eax, -1
|
||||||
|
int 0x40
|
||||||
|
ret ; Exit.
|
||||||
|
printmore:
|
||||||
|
call [PrintString] ; Print rep phrase with rephrased user input
|
||||||
|
printmore2:
|
||||||
|
push edi ; Save user input pointer
|
||||||
|
mov ebx,keyword2 ; Set keyword pointer
|
||||||
|
rphr1:
|
||||||
|
mov al,[edi] ; Get char from user input
|
||||||
|
inc edi ; Set pointer to next char
|
||||||
|
inc ebx ; Set keyword pointer to next char
|
||||||
|
mov ah,[ebx] ; Get letter to test from keywords
|
||||||
|
and ah,127 ; Strip out bit 7 marker
|
||||||
|
cmp al,ah ; Do the letters match?
|
||||||
|
je rphr2 ; Jump if they do
|
||||||
|
rphr1a:
|
||||||
|
cmp byte[ebx],128 ; Was that the last letter of keyword?
|
||||||
|
jnb rphr1b ; Jump if it was
|
||||||
|
inc ebx ; increment key word pointer to next letter
|
||||||
|
jmp rphr1a ; Jump back to see if this is the last letter
|
||||||
|
rphr1b:
|
||||||
|
add ebx,5 ; Add 5 to get to next word past execution address
|
||||||
|
cmp byte[ebx],128 ; No more keywords?
|
||||||
|
je rphr3 ; Jump to maybe inc user input
|
||||||
|
dec ebx ; Correct for pre-increment
|
||||||
|
pop edi ; Restore user input pointer
|
||||||
|
push edi ; Save user input pointer
|
||||||
|
jmp rphr1 ; Check next keyword for a match
|
||||||
|
rphr2:
|
||||||
|
cmp byte[ebx],128 ; Last letter of a keyword?
|
||||||
|
jb rphr1 ; No check some more
|
||||||
|
inc ebx ; ebx -> is the execution address
|
||||||
|
pop eax ; Clear stored pointer from stack
|
||||||
|
jmp dword[ebx] ; Goto line stored with keyword
|
||||||
|
rphr3:
|
||||||
|
pop edi ; Restore input pointer
|
||||||
|
mov al,[edi] ; load non key word letter
|
||||||
|
call [PrintCharCursor] ; Print it
|
||||||
|
inc edi ; Move to next letter of user input
|
||||||
|
cmp byte[edi],0 ; Nothing left to check?
|
||||||
|
je userinput ; Go to get another user input
|
||||||
|
jmp printmore2 ; Try some more
|
||||||
|
printless:
|
||||||
|
call [PrintString] ; Print it
|
||||||
|
call prtblk ; Add a blank line
|
||||||
|
inc dl ; inc reply
|
||||||
|
cmp dl,10 ; is it to large
|
||||||
|
jna printless2 ; jump if it's ok
|
||||||
|
mov dl,1 ; if not reset it to 1
|
||||||
|
printless2:
|
||||||
|
jmp userinput ; go back and get more user input
|
||||||
|
keywords:
|
||||||
|
db " "
|
||||||
|
db "CAN YO",213
|
||||||
|
dd rep1
|
||||||
|
db "CAN ",201
|
||||||
|
dd rep2
|
||||||
|
db "YOU AR",197
|
||||||
|
dd rep3
|
||||||
|
db "YOU'R",197
|
||||||
|
dd rep3
|
||||||
|
db "I DON'",212
|
||||||
|
dd rep4
|
||||||
|
db "I FEE",204
|
||||||
|
dd rep5
|
||||||
|
db "WHY DON'T YO",213
|
||||||
|
dd rep6
|
||||||
|
db "WHY CAN'T ",201
|
||||||
|
dd rep7
|
||||||
|
db "ARE YO",213
|
||||||
|
dd rep8
|
||||||
|
db "I CAN'",212
|
||||||
|
dd rep9
|
||||||
|
db "I A",205
|
||||||
|
dd rep10
|
||||||
|
db "I'M",160
|
||||||
|
dd rep10
|
||||||
|
db "YOU",160
|
||||||
|
dd rep11
|
||||||
|
db "I WAN",212
|
||||||
|
dd rep12
|
||||||
|
db "WHA",212
|
||||||
|
dd rep13
|
||||||
|
db "HO",215
|
||||||
|
dd rep13
|
||||||
|
db "WH",207
|
||||||
|
dd rep13
|
||||||
|
db "WHER",197
|
||||||
|
dd rep13
|
||||||
|
db "WHE",206
|
||||||
|
dd rep13
|
||||||
|
db "WH",217
|
||||||
|
dd rep13
|
||||||
|
db "NAM",197
|
||||||
|
dd rep14
|
||||||
|
db "CAUS",197
|
||||||
|
dd rep15
|
||||||
|
db "SORR",217
|
||||||
|
dd rep16
|
||||||
|
db "DREA",205
|
||||||
|
dd rep17
|
||||||
|
db "HELL",207
|
||||||
|
dd rep18
|
||||||
|
db "HI",160
|
||||||
|
dd rep18
|
||||||
|
db "MAYB",197
|
||||||
|
dd rep19
|
||||||
|
db " N",207
|
||||||
|
dd rep20
|
||||||
|
db "YOU",210
|
||||||
|
dd rep21
|
||||||
|
db "ALWAY",211
|
||||||
|
dd rep22
|
||||||
|
db "THIN",203
|
||||||
|
dd rep23
|
||||||
|
db "ALIK",197
|
||||||
|
dd rep24
|
||||||
|
db "YE",211
|
||||||
|
dd rep25
|
||||||
|
db "FRIEN",196
|
||||||
|
dd rep26
|
||||||
|
db "COMPUTE",210
|
||||||
|
dd rep27
|
||||||
|
db "CA",210
|
||||||
|
dd rep28
|
||||||
|
db "BY",197
|
||||||
|
dd progmend
|
||||||
|
db 128
|
||||||
|
dd rep29
|
||||||
|
keyword2:
|
||||||
|
db " "
|
||||||
|
db "AR",197
|
||||||
|
dd rep30
|
||||||
|
db "WER",197
|
||||||
|
dd rep31
|
||||||
|
db "YOU",210
|
||||||
|
dd rep33
|
||||||
|
db "YO",213
|
||||||
|
dd rep32
|
||||||
|
db "I'V",197
|
||||||
|
dd rep34
|
||||||
|
db "I'",205
|
||||||
|
dd rep35
|
||||||
|
db "YO",213
|
||||||
|
dd rep36
|
||||||
|
db 128
|
||||||
|
dd rep37
|
||||||
|
prtblk:
|
||||||
|
mov esi,blkprt
|
||||||
|
call [PrintString]
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------;
|
||||||
|
; calltable include goes here. ;
|
||||||
|
;----------------------------------------------------;
|
||||||
|
blkprt:
|
||||||
|
db 13,13
|
||||||
|
userline:
|
||||||
|
dw 0
|
||||||
|
line1:
|
||||||
|
db 13,10
|
||||||
|
db " *** ELIZA ***",13,10, 13,10
|
||||||
|
db " First writen by: Joseph Weizenbaum ",13, 10, 13, 10
|
||||||
|
db " MODIFIED FROM CYBER 175 AT UNIVERSITY OF ILLINOIS AT CHAMPAGNE",13, 10
|
||||||
|
db " BY JOHN SCHUGG JANUARY 1985",13, 10, 13, 10
|
||||||
|
db " Converted to asm for DexOS by Roboman 2007",13, 10
|
||||||
|
db " Converted to asm for KolibriOS by Albom 2008",13, 10, 13, 10
|
||||||
|
db " HAVE ANY PROBLEMS ?",13, 10, 13, 10
|
||||||
|
db " LET ELIZA HELP YOU!",13, 10, 13, 10
|
||||||
|
db " TO STOP ELIZA TYPE 'bye'",13, 10, 13, 10
|
||||||
|
db " (THIS VERSION WILL NOT RECORD YOUR CONVERSATIONS)",13, 10, 13, 10
|
||||||
|
db " < Press any key to continue...>",13, 10, 0
|
||||||
|
Program_name:
|
||||||
|
db "--** Dr. Eliza **--",0
|
||||||
|
Message:
|
||||||
|
db "HI! I'M ELIZA. WHAT'S YOUR PROBLEM?",0
|
||||||
|
message2:
|
||||||
|
db 13,13,"Thanks for talking things over with Eliza, bye",13,13,0
|
||||||
|
rep1a: db "DON'T YOU BELIEVE THAT I CAN ",0
|
||||||
|
rep1b: db "PERHAPS YOU WOULD LIKE TO BE ABLE TO ",0
|
||||||
|
rep1c: db "YOU WANT ME TO BE ABLE TO ",0
|
||||||
|
rep2a: db "PERHAPS YOU DON'T WANT TO ",0
|
||||||
|
rep2b: db "DO YOU WANT TO BE ABLE TO ",0
|
||||||
|
rep3a: db "WHAT MAKES YOU THINK I AM ",0
|
||||||
|
rep3b: db "DOES IT PLEASE YOU TO BELIEVE I AM ",0
|
||||||
|
rep3c: db "PERHAPS YOU WOULD LIKE TO BE ",0
|
||||||
|
rep3d: db "DO YOU SOMETIMES WISH YOU WERE ",0
|
||||||
|
rep4a: db "DON'T YOU REALLY ",0
|
||||||
|
rep4b: db "WHY DON'T YOU ",0
|
||||||
|
rep4c: db "DO YOU WISH TO BE ABLE TO ",0
|
||||||
|
rep4d: db "DOES THAT TROUBLE YOU?",0
|
||||||
|
rep5a: db "TELL ME MORE ABOUT SUCH FEELINGS.",0
|
||||||
|
rep5b: db "DO YOU OFTEN FEEL ",0
|
||||||
|
rep5c: db "DO YOU ENJOY FEELING ",0
|
||||||
|
rep6a: db "DO YOU REALLY BELIEVE I DON'T ",0
|
||||||
|
rep6b: db "PERHAPS IN GOOD TIME I WILL ",0
|
||||||
|
rep6c: db "DO YOU WANT ME TO ",0
|
||||||
|
rep7a: db "DO YOU THINK YOU SHOULD BE ABLE TO ",0
|
||||||
|
rep7b: db "WHY CAN'T YOU ",0
|
||||||
|
rep8a: db "WHY ARE YOU INTERESTED IN WHETHER OR NOT I AM ",0
|
||||||
|
rep8b: db "WOULD YOU PREFER IF I WERE NOT ",0
|
||||||
|
rep8c: db "PERHAPS IN YOUR FANTASIES I AM ",0
|
||||||
|
rep9a: db "HOW DO YOU KNOW YOU CAN'T ",0
|
||||||
|
rep9b: db "HAVE YOU TRIED?",0
|
||||||
|
rep9c: db "PERHAPS YOU CAN NOW ",0
|
||||||
|
rep10a: db "DID YOU COME TO ME BECAUSE YOU ARE ",0
|
||||||
|
rep10b: db "HOW LONG HAVE YOU BEEN ",0
|
||||||
|
rep10c: db "DO YOU BELIEVE IT IS NORMAL TO BE ",0
|
||||||
|
rep10d: db "DO YOU ENJOY BEING ",0
|
||||||
|
rep11a: db "WE WERE DISCUSSING YOU-- NOT ME.",0
|
||||||
|
rep11b: db "OH, I ",0
|
||||||
|
rep11c: db "YOU'RE NOT REALLY TALKING ABOUT ME, ARE YOU?",0
|
||||||
|
rep12a: db "WHAT WOULD IT MEAN TO YOU IF YOU GOT ",0
|
||||||
|
rep12b: db "WHY DO YOU WANT ",0
|
||||||
|
rep12c: db "SUPPOSE YOU SOON GOT ",0
|
||||||
|
rep12d: db "WHAT IF YOU NEVER GOT ",0
|
||||||
|
rep12e: db "I SOMETIMES ALSO WANT ",0
|
||||||
|
rep13a: db "WHY DO YOU ASK?",0
|
||||||
|
rep13b: db "DOES THAT QUESTION INTEREST YOU?",0
|
||||||
|
rep13c: db "WHAT ANSWER WOULD PLEASE YOU THE MOST?",0
|
||||||
|
rep13d: db "WHAT DO YOU THINK?",0
|
||||||
|
rep13e: db "ARE SUCH QUESTIONS ON YOUR MIND OFTEN?",0
|
||||||
|
rep13f: db "WHAT IS IT THAT YOU REALLY WANT TO KNOW?",0
|
||||||
|
rep13g: db "HAVE YOU ASKED ANYONE ELSE?",0
|
||||||
|
rep13h: db "HAVE YOU ASKED SUCH QUESTIONS BEFORE?",0
|
||||||
|
rep13i: db "WHAT ELSE COMES TO MIND WHEN YOU ASK THAT?",0
|
||||||
|
rep14a: db "NAMES DON'T INTEREST ME.",0
|
||||||
|
rep14b: db "I DON'T CARE ABOUT NAMES-- PLEASE GO ON.",0
|
||||||
|
rep15a: db "IS THAT THE REAL REASON?",0
|
||||||
|
rep15b: db "DON'T ANY OTHER REASONS COME TO MIND?",0
|
||||||
|
rep15c: db "DOES THAT REASON EXPLAIN ANY THING ELSE?",0
|
||||||
|
rep15d: db "WHAT OTHER REASONS MIGHT THERE BE?",0
|
||||||
|
rep16a: db "PLEASE DON'T APOLOGIZE.",0
|
||||||
|
rep16b: db "APOLOGIES ARE NOT NECESSARY.",0
|
||||||
|
rep16c: db "WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE?",0
|
||||||
|
rep16d: db "DON'T BE SO DEFENSIVE!",0
|
||||||
|
rep17a: db "WHAT DOES THAT DREAM SUGGEST TO YOU?",0
|
||||||
|
rep17b: db "DO YOU DREAM OFTEN?",0
|
||||||
|
rep17c: db "WHAT PERSONS APPEAR IN YOUR DREAMS?",0
|
||||||
|
rep17d: db "ARE YOU DISTURBED BY YOUR DREAMS?",0
|
||||||
|
rep18a: db "HOW DO YOU DO--PLEASE STATE YOUR PROBLEM.",0
|
||||||
|
rep19a: db "YOU DON'T SEEM QUITE CERTAIN.",0
|
||||||
|
rep19b: db "WHY THE UNCERTAIN TONE?",0
|
||||||
|
rep19c: db "CAN'T YOU BE MORE POSITIVE?",0
|
||||||
|
rep19d: db "YOU AREN'T SURE?",0
|
||||||
|
rep19e: db "DON'T YOU KNOW?",0
|
||||||
|
rep20a: db "ARE YOU SAYING NO JUST TO BE NEGATIVE?",0
|
||||||
|
rep20b: db "YOU ARE BEING A BIT NEGATIVE.",0
|
||||||
|
rep20c: db "WHY NOT?",0
|
||||||
|
rep20d: db "ARE YOU SURE?",0
|
||||||
|
rep20e: db "WHY NO?",0
|
||||||
|
rep21a: db "WHY ARE YOU CONCERNED ABOUT MY ",0
|
||||||
|
rep21b: db "WHAT ABOUT YOUR OWN ",0
|
||||||
|
rep22a: db "CAN YOU THINK OF A SPECIFIC EXAMPLE?",0
|
||||||
|
rep22b: db "WHEN?",0
|
||||||
|
rep22c: db "WHAT ARE YOU THINKING OF?",0
|
||||||
|
rep22d: db "REALLY, ALWAYS?",0
|
||||||
|
rep23a: db "DO YOU REALLY THINK SO?",0
|
||||||
|
rep23b: db "BUT YOU ARE NOT SURE YOU ",0
|
||||||
|
rep23c: db "DO YOU DOUBT YOU ",0
|
||||||
|
rep24a: db "IN WHAT WAY?",0
|
||||||
|
rep24b: db "WHAT RESEMBLANCE DO YOU SEE?",0
|
||||||
|
rep24c: db "WHAT DOES THE SIMILARITY SUGGEST TO YOU?",0
|
||||||
|
rep24d: db "WHAT OTHER CONNECTIONS DO YOU SEE?",0
|
||||||
|
rep24e: db "COULD THERE REALLY BE SOME CONNECTION?",0
|
||||||
|
rep24f: db "HOW?",0
|
||||||
|
rep24g: db "YOU SEEM QUITE POSITIVE.",0
|
||||||
|
rep25a: db "ARE YOU SURE?",0
|
||||||
|
rep25b: db "I SEE.",0
|
||||||
|
rep25c: db "I UNDERSTAND.",0
|
||||||
|
rep26a: db "WHY DO YOU BRING UP THE TOPIC OF FRIENDS?",0
|
||||||
|
rep26b: db "DO YOUR FRIENDS WORRY YOU?",0
|
||||||
|
rep26c: db "DO YOUR FRIENDS PICK ON YOU?",0
|
||||||
|
rep26d: db "ARE YOU SURE YOU HAVE ANY FRIENDS?",0
|
||||||
|
rep26e: db "DO YOU IMPOSE ON YOUR FRIENDS?",0
|
||||||
|
rep26f: db "PERHAPS YOUR LOVE FOR FRIENDS WORRIES YOU?",0
|
||||||
|
rep27a: db "DO COMPUTERS WORRY YOU?",0
|
||||||
|
rep27b: db "ARE YOU TALKING ABOUT ME IN PARTICULAR?",0
|
||||||
|
rep27c: db "ARE YOU FRIGHTENED BY MACHINES?",0
|
||||||
|
rep27d: db "WHY DO YOU MENTION COMPUTERS?",0
|
||||||
|
rep27e: db "WHAT DO YOU THINK MACHINES HAVE TO DO WITH YOUR PROBLEM?",0
|
||||||
|
rep27f: db "DON'T YOU THINK COMPUTERS CAN HELP PEOPLE?",0
|
||||||
|
rep27g: db "WHAT IS IT ABOUT MACHINES THAT WORRIES YOU?",0
|
||||||
|
rep28a: db "OH, DO YOU LIKE CARS?",0
|
||||||
|
rep28b: db "MY FAVORITE CAR IS A LAMBORGINI COUNTACH. WHAT IS YOUR FAVORITE CAR?",0
|
||||||
|
rep28c: db "MY FAVORITE CAR COMPANY IS FERRARI. WHAT IS YOURS?",0
|
||||||
|
rep28d: db "DO YOU LIKE PORSCHES?",0
|
||||||
|
rep28e: db "DO YOU LIKE PORSCHE TURBO CARRERAS?",0
|
||||||
|
rep29a: db "SAY, DO YOU HAVE ANY PSYCHOLOGICAL PROBLEMS?",0
|
||||||
|
rep29b: db "WHAT DOES THAT SUGGEST TO YOU?",0
|
||||||
|
rep29c: db "I SEE.",0
|
||||||
|
rep29d: db "I'M NOT SURE I UNDERSTAND YOU FULLY.",0
|
||||||
|
rep29e: db "COME COME ELUCIDATE YOUR THOUGHTS.",0
|
||||||
|
rep29f: db "CAN YOU ELABORATE ON THAT?",0
|
||||||
|
rep29g: db "THAT IS QUITE INTERESTING.",0
|
||||||
|
|
||||||
|
include 'myConsole.inc'
|
||||||
|
include 'myDex.inc'
|
||||||
|
|
||||||
|
_param:
|
||||||
|
rb 256
|
||||||
|
|
||||||
|
_end:
|
||||||
|
|
||||||
|
align 32
|
||||||
|
rb 2048
|
||||||
|
_stack:
|
||||||
|
_memory:
|
85
programs/games/eliza/myConsole.inc
Normal file
85
programs/games/eliza/myConsole.inc
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
lib_console_init:
|
||||||
|
|
||||||
|
; 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:
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
exit:
|
||||||
|
or eax, -1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
|
||||||
|
new_line db 13, 10, 0
|
||||||
|
dll_name db '/sys/lib/console.obj',0
|
||||||
|
caption db 'Eliza for KolibriOS', 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_getch dd aCon_getch
|
||||||
|
con_cls dd aCon_cls
|
||||||
|
con_set_cursor_pos dd aCon_set_cursor_pos
|
||||||
|
con_gets dd aCon_gets
|
||||||
|
con_printf dd aCon_printf
|
||||||
|
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
|
||||||
|
aCon_getch db 'con_getch',0
|
||||||
|
aCon_cls db 'con_cls',0
|
||||||
|
aCon_set_cursor_pos db 'con_set_cursor_pos',0
|
||||||
|
aCon_gets db 'con_gets',0
|
||||||
|
aCon_printf db 'con_printf',0
|
||||||
|
|
||||||
|
|
||||||
|
buffer rb 1024
|
119
programs/games/eliza/myDex.inc
Normal file
119
programs/games/eliza/myDex.inc
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
|
||||||
|
; äëèíà ñòðîêè
|
||||||
|
macro strlen string
|
||||||
|
{
|
||||||
|
local .bcl,.ebcl
|
||||||
|
mov esi,string
|
||||||
|
mov ecx,0
|
||||||
|
.bcl:
|
||||||
|
cmp byte [esi+ecx],0
|
||||||
|
je .ebcl
|
||||||
|
inc ecx
|
||||||
|
jmp .bcl
|
||||||
|
.ebcl:
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Clstext dd _Clstext
|
||||||
|
PrintString dd _PrintString
|
||||||
|
WaitForKeyPress dd _WaitForKeyPress
|
||||||
|
SetCursorPos dd _SetCursorPos
|
||||||
|
TextColor dd _TextColor
|
||||||
|
GetUserInput dd _GetUserInput
|
||||||
|
UpperCase dd _UpperCase
|
||||||
|
PrintChar dd _PrintChar
|
||||||
|
PrintCharCursor dd _PrintCharCursor
|
||||||
|
|
||||||
|
|
||||||
|
_Clstext:
|
||||||
|
call [con_cls]
|
||||||
|
ret
|
||||||
|
|
||||||
|
_PrintString:
|
||||||
|
pusha
|
||||||
|
push esi
|
||||||
|
call [con_write_asciiz]
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
_WaitForKeyPress:
|
||||||
|
pusha
|
||||||
|
call [con_getch]
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
_SetCursorPos:
|
||||||
|
pusha
|
||||||
|
mov ebx, eax
|
||||||
|
and ebx, 0xff
|
||||||
|
mov ecx, eax
|
||||||
|
and ecx, 0xff00
|
||||||
|
shr ecx, 8
|
||||||
|
push ecx
|
||||||
|
push ebx
|
||||||
|
call [con_set_cursor_pos]
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
_TextColor:
|
||||||
|
ret
|
||||||
|
|
||||||
|
_GetUserInput:
|
||||||
|
pusha
|
||||||
|
push new_line
|
||||||
|
call [con_write_asciiz]
|
||||||
|
push 256
|
||||||
|
push buffer
|
||||||
|
call [con_gets]
|
||||||
|
popa
|
||||||
|
mov edi, buffer
|
||||||
|
strlen edi
|
||||||
|
ret
|
||||||
|
|
||||||
|
_UpperCase: ; ñêîïèðîâàíî èç èñõîäíèêà DexOS
|
||||||
|
pushad
|
||||||
|
push es
|
||||||
|
; mov ax,sys_data ; <- ëèøíÿÿ äåòàëü :)
|
||||||
|
; mov es,ax
|
||||||
|
UcaseNextChar:
|
||||||
|
mov al,byte[es:edi]
|
||||||
|
cmp al,0
|
||||||
|
je UcaseDone
|
||||||
|
cmp al,0x61
|
||||||
|
jb DontUcaseChar
|
||||||
|
cmp al,0x7a
|
||||||
|
ja DontUcaseChar
|
||||||
|
sub al,0x20
|
||||||
|
mov byte[es:edi],al
|
||||||
|
DontUcaseChar:
|
||||||
|
inc edi
|
||||||
|
jmp UcaseNextChar
|
||||||
|
UcaseDone:
|
||||||
|
pop es
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
|
||||||
|
_PrintChar:
|
||||||
|
pusha
|
||||||
|
and eax, 0xff
|
||||||
|
push eax
|
||||||
|
push char_spec
|
||||||
|
call [con_printf]
|
||||||
|
add esp, 8
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
_PrintCharCursor:
|
||||||
|
pusha
|
||||||
|
and eax, 0xff
|
||||||
|
push eax
|
||||||
|
push char_spec
|
||||||
|
call [con_printf]
|
||||||
|
add esp, 8
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
char_spec db '%c',0
|
3
programs/media/scrv/build.bat
Normal file
3
programs/media/scrv/build.bat
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
del scrv
|
||||||
|
fasm scrv.asm scrv
|
||||||
|
kpack scrv
|
27
programs/media/scrv/readme.txt
Normal file
27
programs/media/scrv/readme.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
ScrV 0.2
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Simple program to view ZX Spectrum
|
||||||
|
screen files.
|
||||||
|
6912 bytes (*.scr, *.s)
|
||||||
|
and
|
||||||
|
6929 bytes (*.$c) files are supported now.
|
||||||
|
|
||||||
|
Ïðîñòàÿ ïðîãðàììà äëÿ ïðîñìîòðà
|
||||||
|
ôàéëîâ ýêðàíîâ ZX Spectrum.
|
||||||
|
Ïîääåðæèâàþòñÿ ôàéëû ðàçìåðîì
|
||||||
|
6912 áàéò (*.scr, *.s)
|
||||||
|
è
|
||||||
|
6929 áàéò (*.$c).
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
author: Oleksandr Bogomaz
|
||||||
|
e-mail: albom85@yandex.ru
|
||||||
|
site: http://albom06.boom.ru/
|
||||||
|
|
||||||
|
=========================================
|
409
programs/media/scrv/scrv.asm
Normal file
409
programs/media/scrv/scrv.asm
Normal file
@ -0,0 +1,409 @@
|
|||||||
|
|
||||||
|
;=========================================
|
||||||
|
;
|
||||||
|
; Simple program to view ZX Spectrum
|
||||||
|
; screen files.
|
||||||
|
; 6912 bytes (*.scr, *.s)
|
||||||
|
; and
|
||||||
|
; 6929 bytes (*.$c) files are supported now.
|
||||||
|
|
||||||
|
; Ïðîñòàÿ ïðîãðàììà äëÿ ïðîñìîòðà
|
||||||
|
; ôàéëîâ ýêðàíîâ ZX Spectrum.
|
||||||
|
; Ïîääåðæèâàþòñÿ ôàéëû ðàçìåðîì
|
||||||
|
; 6912 áàéò (*.scr, *.s)
|
||||||
|
; è
|
||||||
|
; 6929 áàéò (*.$c).
|
||||||
|
;
|
||||||
|
; author: Oleksandr Bogomaz
|
||||||
|
; e-mail: albom85@yandex.ru
|
||||||
|
; site: http://albom06.boom.ru/
|
||||||
|
;
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
use32
|
||||||
|
org 0
|
||||||
|
db 'MENUET01'
|
||||||
|
dd 1
|
||||||
|
dd _start
|
||||||
|
dd _end
|
||||||
|
dd _memory
|
||||||
|
dd _stack
|
||||||
|
dd _param
|
||||||
|
dd 0
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
_start:
|
||||||
|
|
||||||
|
call mem_init
|
||||||
|
call file_getsize
|
||||||
|
call file_read
|
||||||
|
call file_convert
|
||||||
|
call window_draw
|
||||||
|
|
||||||
|
_event_wait:
|
||||||
|
|
||||||
|
mov eax, 10
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax, 1
|
||||||
|
je __repaint_wnd
|
||||||
|
|
||||||
|
cmp eax, 2
|
||||||
|
je __key
|
||||||
|
|
||||||
|
cmp eax, 3
|
||||||
|
je __button
|
||||||
|
|
||||||
|
jmp _event_wait
|
||||||
|
|
||||||
|
__repaint_wnd:
|
||||||
|
call window_draw
|
||||||
|
jmp _event_wait
|
||||||
|
|
||||||
|
|
||||||
|
__key:
|
||||||
|
mov eax, 2
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp ah, 27
|
||||||
|
jne _event_wait
|
||||||
|
|
||||||
|
jmp __end
|
||||||
|
|
||||||
|
jmp _event_wait
|
||||||
|
|
||||||
|
__button:
|
||||||
|
|
||||||
|
mov eax, 17
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp ah, 1
|
||||||
|
jne _event_wait
|
||||||
|
|
||||||
|
__end:
|
||||||
|
call mem_free
|
||||||
|
|
||||||
|
mov eax, -1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
window_draw:
|
||||||
|
mov eax, 12
|
||||||
|
mov ebx, 1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
mov ebx, 10*65536+290
|
||||||
|
mov ecx, 10*65536+230
|
||||||
|
mov edx, 0x34ffffff
|
||||||
|
mov edi, _app_title
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 65
|
||||||
|
mov ebx, [dst]
|
||||||
|
mov ecx, 256*65536 + 192
|
||||||
|
mov edx, 5*65536 + 5
|
||||||
|
mov edi, _palette
|
||||||
|
mov esi, 8
|
||||||
|
mov ebp, 0
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 12
|
||||||
|
mov ebx, 2
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
mem_init:
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 11
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 12
|
||||||
|
mov ecx, 6144
|
||||||
|
int 0x40
|
||||||
|
mov dword [src], eax
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 12
|
||||||
|
mov ecx, 768
|
||||||
|
int 0x40
|
||||||
|
mov dword [atr], eax
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 12
|
||||||
|
mov ecx, 256*192
|
||||||
|
int 0x40
|
||||||
|
mov dword [dst], eax
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
mem_free:
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 13
|
||||||
|
mov ecx, [src]
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 13
|
||||||
|
mov ecx, [atr]
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 13
|
||||||
|
mov ecx, [dst]
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
file_read:
|
||||||
|
|
||||||
|
mov eax, 70
|
||||||
|
mov ebx, _in_f1
|
||||||
|
mov ecx, [src]
|
||||||
|
mov [_in_f1+16], ecx
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax, 70
|
||||||
|
mov ebx, _in_f2
|
||||||
|
mov ecx, [atr]
|
||||||
|
mov [_in_f2+16], ecx
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
file_getsize:
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 12
|
||||||
|
mov ecx, 0x5000
|
||||||
|
int 0x40
|
||||||
|
mov dword [tmp], eax
|
||||||
|
|
||||||
|
mov eax, 70
|
||||||
|
mov ebx, _in_f0
|
||||||
|
mov ecx, [tmp]
|
||||||
|
mov [_in_f0+16], ecx
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov [fsize], ebx
|
||||||
|
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 13
|
||||||
|
mov ecx, [tmp]
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp [fsize], 6929
|
||||||
|
jne _ok_size
|
||||||
|
|
||||||
|
mov dword [_in_f1+4], 17
|
||||||
|
mov dword [_in_f2+4], 6144+17
|
||||||
|
|
||||||
|
_ok_size:
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
file_convert:
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
mov [I], eax
|
||||||
|
mov [J], eax
|
||||||
|
mov [K], eax
|
||||||
|
mov [L], eax
|
||||||
|
mov [M], eax
|
||||||
|
mov [N], eax
|
||||||
|
|
||||||
|
__J:
|
||||||
|
__I:
|
||||||
|
__K:
|
||||||
|
__L:
|
||||||
|
xor ebx, ebx
|
||||||
|
mov eax, [J]
|
||||||
|
shl eax, 0x0b ; eax * 2048
|
||||||
|
add ebx, eax
|
||||||
|
mov eax, [K]
|
||||||
|
shl eax, 0x08 ; eax * 256
|
||||||
|
add ebx, eax
|
||||||
|
mov eax, [I]
|
||||||
|
shl eax, 0x05 ; eax * 32
|
||||||
|
add ebx, eax
|
||||||
|
add ebx, [L]
|
||||||
|
add ebx, [src]
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
mov ah, [ebx]
|
||||||
|
mov [C], ah
|
||||||
|
|
||||||
|
__M:
|
||||||
|
mov ah, [C]
|
||||||
|
and ah, 128
|
||||||
|
shr ah, 7
|
||||||
|
mov [S], ah
|
||||||
|
|
||||||
|
xor ebx, ebx
|
||||||
|
mov eax, [J]
|
||||||
|
shl eax, 0x08 ; eax * 256
|
||||||
|
add ebx, eax
|
||||||
|
mov eax, [I]
|
||||||
|
shl eax, 0x05 ; eax * 32
|
||||||
|
add ebx, eax
|
||||||
|
add ebx, [L]
|
||||||
|
add ebx, [atr]
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
mov ah, [ebx]
|
||||||
|
mov [A], ah
|
||||||
|
|
||||||
|
and ah, 64
|
||||||
|
cmp ah, 64
|
||||||
|
jne __b0
|
||||||
|
mov [B], 8
|
||||||
|
jmp __OK_b
|
||||||
|
__b0:
|
||||||
|
mov [B], 0
|
||||||
|
__OK_b:
|
||||||
|
|
||||||
|
mov ah, [S]
|
||||||
|
cmp ah, 0
|
||||||
|
jne __1
|
||||||
|
|
||||||
|
mov ah, [A]
|
||||||
|
shr ah, 3
|
||||||
|
and ah, 7
|
||||||
|
add ah, [B]
|
||||||
|
jmp __OK_col
|
||||||
|
|
||||||
|
__1:
|
||||||
|
mov ah, [A]
|
||||||
|
and ah, 7
|
||||||
|
add ah, [B]
|
||||||
|
|
||||||
|
__OK_col:
|
||||||
|
mov ebx, [dst]
|
||||||
|
add ebx, [N]
|
||||||
|
mov [ebx], ah
|
||||||
|
inc [N]
|
||||||
|
|
||||||
|
shl [C], 1
|
||||||
|
|
||||||
|
inc [M]
|
||||||
|
cmp [M], 8
|
||||||
|
jne __M
|
||||||
|
|
||||||
|
mov [M], 0
|
||||||
|
inc [L]
|
||||||
|
cmp [L], 32
|
||||||
|
jne __L
|
||||||
|
|
||||||
|
mov [L], 0
|
||||||
|
inc [K]
|
||||||
|
cmp [K], 8
|
||||||
|
jne __K
|
||||||
|
|
||||||
|
mov [K], 0
|
||||||
|
inc [I]
|
||||||
|
cmp [I], 8
|
||||||
|
jne __I
|
||||||
|
|
||||||
|
mov [I], 0
|
||||||
|
inc [J]
|
||||||
|
cmp [J], 3
|
||||||
|
jne __J
|
||||||
|
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=========================================
|
||||||
|
|
||||||
|
_app_title:
|
||||||
|
db 'ScrV 0.2 by O.Bogomaz', 0
|
||||||
|
|
||||||
|
_in_f0:
|
||||||
|
dd 0
|
||||||
|
dq 0
|
||||||
|
dd 0x5000
|
||||||
|
dd 0
|
||||||
|
db 0
|
||||||
|
dd _param
|
||||||
|
|
||||||
|
_in_f1:
|
||||||
|
dd 0
|
||||||
|
dq 0
|
||||||
|
dd 6144
|
||||||
|
dd 0
|
||||||
|
db 0
|
||||||
|
dd _param
|
||||||
|
|
||||||
|
_in_f2:
|
||||||
|
dd 0
|
||||||
|
dq 6144
|
||||||
|
dd 768
|
||||||
|
dd 0
|
||||||
|
db 0
|
||||||
|
dd _param
|
||||||
|
|
||||||
|
_palette:
|
||||||
|
dd 0 ; black
|
||||||
|
dd 0x000000b0 ; blue
|
||||||
|
dd 0x00b00000 ; red
|
||||||
|
dd 0x00b000b0 ; magenta
|
||||||
|
dd 0x0000b000 ; green
|
||||||
|
dd 0x0000b0b0 ; cyan
|
||||||
|
dd 0x00b0b000 ; yellow
|
||||||
|
dd 0x00b0b0b0 ; gray
|
||||||
|
dd 0 ; black
|
||||||
|
dd 0x000000ff ; light blue
|
||||||
|
dd 0x00ff0000 ; light red
|
||||||
|
dd 0x00ff00ff ; light magenta
|
||||||
|
dd 0x0000ff00 ; light green
|
||||||
|
dd 0x0000ffff ; light cyan
|
||||||
|
dd 0x00ffff00 ; light yellow
|
||||||
|
dd 0x00ffffff ; white
|
||||||
|
|
||||||
|
src dd 0
|
||||||
|
dst dd 0
|
||||||
|
atr dd 0
|
||||||
|
tmp dd 0
|
||||||
|
|
||||||
|
fsize dd 0
|
||||||
|
|
||||||
|
I dd 0
|
||||||
|
J dd 0
|
||||||
|
K dd 0
|
||||||
|
L dd 0
|
||||||
|
M dd 0
|
||||||
|
N dd 0
|
||||||
|
|
||||||
|
C db 0
|
||||||
|
A db 0
|
||||||
|
B db 0
|
||||||
|
S db 0
|
||||||
|
|
||||||
|
_param:
|
||||||
|
rb 256
|
||||||
|
|
||||||
|
_end:
|
||||||
|
|
||||||
|
align 32
|
||||||
|
rb 2048
|
||||||
|
_stack:
|
||||||
|
_memory:
|
||||||
|
|
||||||
|
;=========================================
|
Loading…
Reference in New Issue
Block a user