Skip to content

Commit

Permalink
Add partial keyboard support
Browse files Browse the repository at this point in the history
  • Loading branch information
x0r committed Jun 24, 2019
1 parent 900b6bf commit 8545a78
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 7 deletions.
169 changes: 169 additions & 0 deletions asm.c
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,175 @@ const char* log_spaces(int n)
return s+(88-n);
}

dw getscan()
{
dw o=0;
int ch = getch();
//if (ch==ERR) return(0);

//log_debug(">> %x\n",ch);

switch (ch)
{
case ERR: {o=0;break;}

case 0x30: {o=0xb;break;}
case 0x31: {o=0x2;break;}
case 0x32: {o=0x3;break;}
case 0x33: {o=0x4;break;}
case 0x34: {o=0x5;break;}
case 0x35: {o=0x6;break;}
case 0x36: {o=0x7;break;}
case 0x37: {o=0x8;break;}
case 0x38: {o=0x9;break;}
case 0x39: {o=0xa;break;}

case ALT_ESC: {o=0x1;break;}
case ALT_BKSP: {o=0xE;break;}
case KEY_BTAB: {o=0xF;break;}
case ALT_Q: {o=0x10;break;}
case ALT_W: {o=0x11;break;}
case ALT_E: {o=0x12;break;}
case ALT_R: {o=0x13;break;}
case ALT_T: {o=0x14;break;}
case ALT_Y: {o=0x15;break;}
case ALT_U: {o=0x16;break;}
case ALT_I: {o=0x17;break;}
case ALT_O: {o=0x18;break;}
case ALT_P: {o=0x19;break;}
case ALT_LBRACKET: {o=0x1A;break;}
case ALT_RBRACKET: {o=0x1B;break;}
case ALT_ENTER: {o=0x1C;break;}
case ALT_A: {o=0x1E;break;}
case ALT_S: {o=0x1F;break;}
case ALT_D: {o=0x20;break;}
case ALT_F: {o=0x21;break;}
case ALT_G: {o=0x22;break;}
case ALT_H: {o=0x23;break;}
case ALT_J: {o=0x24;break;}
case ALT_K: {o=0x25;break;}
case ALT_L: {o=0x26;break;}
case ALT_SEMICOLON: {o=0x27;break;}
case ALT_FQUOTE: {o=0x28;break;}
case ALT_BQUOTE: {o=0x29;break;}
case ALT_BSLASH: {o=0x2B;break;}
case ALT_Z: {o=0x2C;break;}
case ALT_X: {o=0x2D;break;}
case ALT_C: {o=0x2E;break;}
case ALT_V: {o=0x2F;break;}
case ALT_B: {o=0x30;break;}
case ALT_N: {o=0x31;break;}
case ALT_M: {o=0x32;break;}
case ALT_COMMA: {o=0x33;break;}
case ALT_STOP: {o=0x34;break;}
case ALT_FSLASH: {o=0x35;break;}
case ALT_PADSTAR: {o=0x37;break;}
case KEY_F(1): {o=0x3B;break;}
case KEY_F(2): {o=0x3C;break;}
case KEY_F(3): {o=0x3D;break;}
case KEY_F(4): {o=0x3E;break;}
case KEY_F(5): {o=0x3F;break;}
case KEY_F(6): {o=0x40;break;}
case KEY_F(7): {o=0x41;break;}
case KEY_F(8): {o=0x42;break;}
case KEY_F(9): {o=0x43;break;}
case KEY_F(10): {o=0x44;break;}
case KEY_HOME: {o=0xe047;break;}
case KEY_UP: {o=0xe048;break;}
case KEY_PPAGE: {o=0xe049;break;}
case ALT_PADMINUS: {o=0x4A;break;}
case KEY_LEFT: {o=0xe04B;break;}
case KEY_B2: {o=0x4C;break;}
case KEY_RIGHT: {o=0xe04D;break;}
case ALT_PADPLUS: {o=0x4E;break;}
case KEY_END: {o=0x4F;break;}
case KEY_DOWN: {o=0xe050;break;}
case KEY_NPAGE: {o=0xe051;break;}
case KEY_IC: {o=0xe052;break;}
case KEY_DC: {o=0xe053;break;}
case KEY_F(13): {o=0x54;break;}
case KEY_F(14): {o=0x55;break;}
case KEY_F(15): {o=0x56;break;}
case KEY_F(11): {o=0x57;break;}
case KEY_F(12): {o=0x58;break;}
case KEY_F(18): {o=0x59;break;}
case KEY_F(19): {o=0x5A;break;}
case KEY_F(20): {o=0x5B;break;}
case KEY_F(21): {o=0x5C;break;}
case KEY_F(22): {o=0x5D;break;}
case KEY_F(25): {o=0x5E;break;}
case KEY_F(26): {o=0x5F;break;}
case KEY_F(27): {o=0x60;break;}
case KEY_F(28): {o=0x61;break;}
case KEY_F(29): {o=0x62;break;}
case KEY_F(30): {o=0x63;break;}
case KEY_F(31): {o=0x64;break;}
case KEY_F(32): {o=0x65;break;}
case KEY_F(33): {o=0x66;break;}
case KEY_F(34): {o=0x67;break;}
case KEY_F(37): {o=0x68;break;}
case KEY_F(38): {o=0x69;break;}
case KEY_F(39): {o=0x6A;break;}
case KEY_F(40): {o=0x6B;break;}
case KEY_F(41): {o=0x6C;break;}
case KEY_F(42): {o=0x6D;break;}
case KEY_F(43): {o=0x6E;break;}
case KEY_F(44): {o=0x6F;break;}
case KEY_F(45): {o=0x70;break;}
case KEY_F(46): {o=0x71;break;}
case CTL_LEFT: {o=0x73;break;}
case CTL_RIGHT: {o=0x74;break;}
case CTL_END: {o=0x75;break;}
case CTL_PGDN: {o=0x76;break;}
case CTL_HOME: {o=0x77;break;}
case ALT_1: {o=0x78;break;}
case ALT_2: {o=0x79;break;}
case ALT_3: {o=0x7A;break;}
case ALT_4: {o=0x7B;break;}
case ALT_5: {o=0x7C;break;}
case ALT_6: {o=0x7D;break;}
case ALT_7: {o=0x7E;break;}
case ALT_8: {o=0x7F;break;}
case ALT_9: {o=0x80;break;}
case ALT_0: {o=0x81;break;}
case ALT_MINUS: {o=0x82;break;}
case ALT_EQUAL: {o=0x83;break;}
case CTL_PGUP: {o=0x84;break;}
//case KEY_F(11): {o=0x85;break;}
//case KEY_F(12): {o=0x86;break;}
case KEY_F(23): {o=0x87;break;}
case KEY_F(24): {o=0x88;break;}
case KEY_F(35): {o=0x89;break;}
case KEY_F(36): {o=0x8A;break;}
case KEY_F(47): {o=0x8B;break;}
case KEY_F(48): {o=0x8C;break;}
case CTL_UP: {o=0x8D;break;}
case CTL_PADMINUS: {o=0x8E;break;}
case CTL_PADCENTER: {o=0x8F;break;}
case CTL_PADPLUS: {o=0x90;break;}
case CTL_DOWN: {o=0x91;break;}
case CTL_INS: {o=0x92;break;}
case CTL_DEL: {o=0x93;break;}
case CTL_TAB: {o=0x94;break;}
case CTL_PADSLASH: {o=0x95;break;}
case CTL_PADSTAR: {o=0x96;break;}
case ALT_HOME: {o=0x97;break;}
case ALT_UP: {o=0x98;break;}
case ALT_PGUP: {o=0x99;break;}
case ALT_LEFT: {o=0x9B;break;}
case ALT_RIGHT: {o=0x9D;break;}
case ALT_END: {o=0x9F;break;}
case ALT_DOWN: {o=0xA0;break;}
case ALT_PGDN: {o=0xA1;break;}
case ALT_INS: {o=0xA2;break;}
case ALT_DEL: {o=0xA3;break;}
case ALT_PADSLASH: {o=0xA4;break;}
case ALT_TAB: {o=0xA5;break;}
case ALT_PADENTER: {o=0xA6;break;}
}
return o;
}

void realtocurs()
{

Expand Down
1 change: 1 addition & 0 deletions asm.h
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,7 @@ _offsets __disp; \
dw _source;

void realtocurs();
dw getscan();

struct SDL_Renderer;
extern SDL_Renderer *renderer;
Expand Down
2 changes: 1 addition & 1 deletion build_mingw.bat
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
set OPT=-O0 -Wno-multichar -I\MinGW\include\ -lmingw32 -lSDL2main -lSDL2 -ggdb3
rem -DDEBUG=3
rem -DDEBUG=1
"C:\MinGW\bin\g++.exe" -mno-ms-bitfields asm.c -c %OPT%
"C:\MinGW\bin\g++.exe" -mno-ms-bitfields memmgr.c -c %OPT%
"C:\MinGW\bin\g++.exe" -mno-ms-bitfields iplay_masm_.cpp -c %OPT%
Expand Down
18 changes: 12 additions & 6 deletions iplay_masm_.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ resize_term(25, 80);
cbreak(); // put keys directly to program
noecho(); // do not echo
keypad(stdscr, TRUE); // provide keypad buttons
nodelay(stdscr, TRUE);

if (!has_colors())
{
Expand Down Expand Up @@ -4378,8 +4379,8 @@ if (ttt==0)
R(INC(di)); // 4945 inc di
R(ADC(si, bp)); // 4946 adc si, bp
R(DEC(cx)); // 4947 dec cx
hexDump(sss,ssss);
hexDump(ttt,16);
//hexDump(sss,ssss);
//hexDump(ttt,16);
R(JNZ(loc_12921)); // 4948 jnz loc_12921
locret_12a55:
R(RETN); // 4952 retn
Expand Down Expand Up @@ -12990,7 +12991,8 @@ __disp = static_cast<_offsets>(bx);
loc_193fc:
R(CALL(k_put_message)); // 17379 call _put_message
loc_193ff:
R(MOV(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 17382 mov ax, cs:[_key_code] ; keyboard message loop here
// R(MOV(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 17382 mov ax, cs:[_key_code] ; keyboard message loop here
ax=getscan();
R(OR(ax, ax)); // 17383 or ax, ax
R(JZ(loc_193c7)); // 17384 jz short loc_193C7
R(PUSH(ax)); // 17385 push ax
Expand Down Expand Up @@ -13074,7 +13076,8 @@ MOVS(*(dd*)(raddr(es,di)), *(dd*)(raddr(fs,si)), 4); // 17437 movs dword ptr es:
ax = 0;AFFECT_ZF(0); AFFECT_SF(ax,0); // 17470 xor ax, ax
R(MOV(*(dw*)(raddr(cs,offset(seg001,_key_code))), ax)); // 17471 mov cs:[_key_code], ax
loc_194da:
R(XCHG(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 17474 xchg ax, cs:[_key_code]
// R(XCHG(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 17474 xchg ax, cs:[_key_code]
ax=getscan();
R(OR(ax, ax)); // 17475 or ax, ax
R(JZ(loc_194da)); // 17476 jz short loc_194DA
loc_194e3:
Expand Down Expand Up @@ -13239,7 +13242,8 @@ MOVS(*(dd*)(raddr(es,di)), *(dd*)(raddr(fs,si)), 4); // 17437 movs dword ptr es:
R(CALL(k_message_1be77)); // 17674 call _message_1BE77
loc_196d0:
ax = 0;AFFECT_ZF(0); AFFECT_SF(ax,0); // 17677 xor ax, ax
R(XCHG(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 17678 xchg ax, cs:[_key_code]
// R(XCHG(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 17678 xchg ax, cs:[_key_code]
ax=getscan();
R(OR(ax, ax)); // 17679 or ax, ax
R(JZ(loc_196d0)); // 17680 jz short loc_196D0
R(JS(loc_196d0)); // 17681 js short loc_196D0
Expand Down Expand Up @@ -14091,7 +14095,8 @@ __disp = static_cast<_offsets>(*(dw*)(raddr(ds,offset(dseg,_offs_draw))));
R(TEST(m._byte_1DE90, 1)); // 18737 test _byte_1DE90, 1
R(JNZ(loc_1a3a7)); // 18738 jnz loc_1A3A7
ax = 0;AFFECT_ZF(0); AFFECT_SF(ax,0); // 18739 xor ax, ax
R(XCHG(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 18740 xchg ax, cs:[_key_code]
// R(XCHG(ax, *(dw*)(raddr(cs,offset(seg001,_key_code))))); // 18740 xchg ax, cs:[_key_code]
ax=getscan();
R(OR(ax, ax)); // 18741 or ax, ax
R(JZ(_keyb_screen_loop)); // 18742 jz short _keyb_screen_loop
R(MOV(m._word_1DE50, ax)); // 18743 mov _word_1DE50, ax
Expand Down Expand Up @@ -14526,6 +14531,7 @@ __disp = static_cast<_offsets>(bx);
// R(MOV(edx, *(dd*)(raddr(es,0x46C)))); // 19277 mov edx, es:[46Ch]
edx=time(0)*18.20648193359375;
R(CMP(edx, m._dword_1DE88)); // 19278 cmp edx, _dword_1DE88
//x0r goto loc_1a3f6;
R(JZ(loc_1a3f6)); // 19279 jz short loc_1A3F6
R(MOV(m._dword_1DE88, edx)); // 19280 mov _dword_1DE88, edx
R(POP(es)); // 19281 pop es
Expand Down

0 comments on commit 8545a78

Please sign in to comment.