⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chess.asm

📁 menuet os应用程序源代码,很多汇编写的应用程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    cmp  bl,15                           ; CHARACTER
    jbe  newdata
    mov  eax,[pos]
    mov  [eax+text],bl
    mov  eax,[pos]
    add  eax,1
  cm1:
    mov  ebx,[scroll+4]
    imul ebx,80
    cmp  eax,ebx
    jb   noeaxz
    mov  esi,text+80
    mov  edi,text
    mov  ecx,ebx
    cld
    rep  movsb
    mov  eax,ebx
    sub  eax,80
  noeaxz:
    mov  [pos],eax
  newdata:
    ret
   
   
  red:                          ; REDRAW WINDOW
    call draw_window
    jmp  still
   
  key:                          ; KEY
    mov  eax,2                  ; send to modem
    int  0x40
   
    mov     ebx, [socket_status]
    cmp     ebx, 4              ; connection open?
    jne     still               ; no, so ignore key
   
    shr  eax,8
    cmp  eax,178                ; ARROW KEYS
    jne  noaup
    mov  al,'A'
    call arrow
    jmp  still
  noaup:
    cmp  eax,177
    jne  noadown
    mov  al,'B'
    call arrow
    jmp  still
  noadown:
    cmp  eax,179
    jne  noaright
    mov  al,'C'
    call arrow
    jmp  still
  noaright:
    cmp  eax,176
    jne  noaleft
    mov  al,'D'
    call arrow
    jmp  still
  noaleft:
  modem_out:
   
    call    to_modem
   
    jmp  still
   
  button:                       ; BUTTON
    mov  eax,17
    int  0x40
    cmp  ah,1                   ; CLOSE PROGRAM
    jne  noclose
   
    mov  eax,53
    mov  ebx,8
    mov  ecx,[socket]
    int  0x40
   
     mov  eax,-1
     int  0x40
  noclose:
   
    cmp     ah, 4               ; connect
    jne     notcon
   
    mov     eax, [socket_status]
    cmp     eax, 4
    je     still
    call    connect
   
    jmp     still
   
notcon:
    cmp     ah,5                ; disconnect
    jne     notdiscon
   
    call    disconnect
    jmp  still
   
 notdiscon:
   
    jmp     still
   
arrow:
   
    push eax
    mov  al,27
    call to_modem
    mov  al,'['
    call to_modem
    pop  eax
    call to_modem
   
    ret
   
   
to_modem:
    pusha
    push    ax
    mov     [tx_buff], al
    mov     edx, 1
    cmp     al, 13
    jne     tm_000
    mov     edx, 2
tm_000:
    mov     eax,53
    mov     ebx,7
    mov     ecx,[socket]
    mov     esi, tx_buff
    int  0x40
    pop     bx
    mov     al, [echo]
    cmp     al, 0
    je      tm_001
   
    push    bx
    call    handle_data
    pop     bx
   
    cmp     bl, 13
    jne     tm_002
   
    mov     bl, 10
    call    handle_data
   
tm_002:
    call    draw_text
   
tm_001:
    popa
    ret
   
   
   
disconnect:
    mov  eax,53
    mov  ebx,8
    mov  ecx,[socket]
    int  0x40
    ret
   
   
   
connect:
    pusha
   
 mov     ecx, 1000  ; local port starting at 1000
   
getlp:
 inc     ecx
 push ecx
 mov     eax, 53
 mov     ebx, 9
 int     0x40
 pop     ecx
 cmp     eax, 0   ; is this local port in use?
 jz  getlp      ; yes - so try next
   
    mov     eax,53
    mov     ebx,5
    mov     dl, [ip_address + 3]
    shl     edx, 8
    mov     dl, [ip_address + 2]
    shl     edx, 8
    mov     dl, [ip_address + 1]
    shl     edx, 8
    mov     dl, [ip_address]
    mov     esi, edx
    movzx   edx, word [port]      ; telnet port id
    mov     edi,1      ; active open
    int     0x40
    mov     [socket], eax
   
    popa
   
    ret
   
   
   
;   *********************************************
;   *******  WINDOW DEFINITIONS AND DRAW ********
;   *********************************************
   
   
draw_window:
   
    pusha
   
    mov  eax,12
    mov  ebx,1
    int  0x40
   
    mov  eax,14
    int  0x40
   
    mov  ebx,eax
    mov  ecx,eax
   
    shr  ebx,16
    and  ebx,0xffff
    and  ecx,0xffff
   
    shr  ebx,1
    shr  ecx,1
   
    sub  ebx,275
    sub  ecx,235
   
    shl  ebx,16
    shl  ecx,16
   
     mov  eax,0                     ; DRAW WINDOW
    mov  bx,550
    mov  cx,470
    mov  edx,[wcolor]
    add  edx,0x03000000
    mov  esi,0x80557799
    mov  edi,0x00557799
    int  0x40
   
    mov  eax,4                     ; WINDOW LABEL
    mov  ebx,8*65536+8
    mov  ecx,0x10ffffff
    mov  edx,labelt
    mov  esi,labellen-labelt
    int  0x40
   
    call display_status
   
    mov  eax,8                     ; BUTTON 4: Connect
    mov  ebx,conx*65536+80
    mov  ecx,cony*65536+15
     mov  esi,[wbutton]
     mov  edx,4
    int  0x40
    mov  eax,4                     ; Button text
    mov  ebx,(conx+4)*65536+cony+4
    mov  ecx,0xffffff
    mov  edx,cont
    mov  esi,conlen-cont
    int  0x40
   
   
    mov  eax,8                     ; BUTTON 5: disconnect
    mov  ebx,dconx*65536+80
    mov  ecx,dcony*65536+15
    mov  edx,5
     mov  esi,[wbutton]
     int  0x40
    mov  eax,4                     ; Button text
    mov  ebx,(dconx+4)*65536+dcony+4
    mov  ecx,0x00ffffff
    mov  edx,dist
    mov  esi,dislen-dist
    int  0x40
   
   
    xor  eax,eax
    mov  edi,text+80*30
    mov  ecx,80*30 /4
    cld
    rep  stosd
   
    call draw_text
   
    mov  [changed],1
   
    mov  edi,board_old
    mov  ecx,80*19
    mov  al,0
    cld
    rep  stosb
   
    mov  eax,4
    mov  ebx,conx*65536+52
    mov  ecx,[tcolor]
    mov  edx,quick_start
    mov  esi,30
   
  prqs:
   
    int  0x40
    add  ebx,10
    add  edx,30
    cmp  [edx],byte 'x'
    jne  prqs
   
    mov  eax,12
    mov  ebx,2
    int  0x40
   
    popa
   
    ret
   
   
display_status:
   
    pusha
   
    ; draw status bar
    mov  eax, 13
    mov  ebx, statusx*65536+80
    mov  ecx, statusy*65536 + 16
    mov  edx, [wcolor]
    int  0x40
   
    mov  esi,contlen-contt          ; display connected status
    mov  edx, contt
    mov  eax, [socket_status]
    cmp  eax, 4                  ; 4 is connected
    je   pcon
    mov  esi,discontlen-discontt
    mov  edx, discontt
  pcon:
    mov  eax,4                     ; status text
    mov  ebx,statusx*65536+statusy+2
     mov  ecx,[tcolor]
     int  0x40
   
    popa
    ret
   
   
nappulat:
   
    dd '*P  ',5
    dd '*K  ',3
    dd '*Q  ',4
    dd '*R  ',0
    dd '*N  ',1
    dd '*B  ',2
   
    dd '    ',20
   
    dd 'P   ',5
    dd 'K   ',3
    dd 'Q   ',4
    dd 'R   ',0
    dd 'N   ',1
    dd 'B   ',2
   
   
row   dd  0x0
col   dd  0x0
   
   
   
draw_text:
   
    mov  esi,text+80*24
    mov  edi,texts+80*3
   
  dtl1:
   
    cmp  [esi],dword 'logi'
    je   add_text
    cmp  [esi],dword 'aics'
    je   add_text
    cmp  [esi],dword 'You '
    je   add_text
    cmp  [esi],dword 'Your'
    je   add_text
    cmp  [esi],dword 'Game'
    je   add_text
    cmp  [esi],dword 'Ille'
    je   add_text
    cmp  [esi],dword 'No s'
    je   add_text
   
    sub  esi,80
    cmp  esi,text
    jge  dtl1
   
  dtl2:
   
    mov  eax,13
    mov  ebx,10*65536+532
    mov  ecx,420*65536+40
     mov  edx,[wtcom]
     int  0x40
   
    mov  eax,4
    mov  ebx,10*65536+420
     mov  ecx,[wtxt]
     mov  edx,texts
    mov  esi,80
   
  dtl3:
   
    int  0x40
    add  edx,80
    add  ebx,10
    cmp  edx,texts+4*80
    jb   dtl3
   
    ret
   
  add_text:
   
    pusha
   
    cld
    mov  ecx,80
    rep  movsb
   
    popa
   
   
    sub  esi,80
    sub  edi,80
   
    cmp  edi,texts
    jb   dtl2
   
    jmp  dtl1
   
   
read_string:
   
    mov  edi,string
    mov  eax,'_'
    mov  ecx,[string_length]
    inc     ecx
    cld
    rep  stosb
    call print_text
   
    mov  edi,string
  f11:
    mov  eax,10
    int  0x40
    cmp  eax,2
    jne  read_done
    mov  eax,2
    int  0x40
    shr  eax,8
    cmp  eax,13
    je   read_done
    cmp  eax,8
    jnz  nobsl
    cmp  edi,string
    jz   f11
    sub  edi,1
    mov  [edi],byte '_'
    call print_text
    jmp  f11
  nobsl:
    cmp  eax,dword 31
    jbe  f11
    cmp  eax,dword 95
    jb   keyok
    sub  eax,32
  keyok:
    mov  [edi],al
    call print_text
   
    inc  edi
    mov  esi,string
    add  esi,[string_length]
    cmp  esi,edi
    jnz  f11
   
  read_done:
   
    call print_text
   
    ret
   
   
print_text:
   
    pusha
   
    mov  eax,13
    mov  ebx,[string_x]
    shl  ebx,16
    add  ebx,[string_length]
    imul bx,6
    mov  ecx,[string_y]
    shl  ecx,16
    mov  cx,8
    mov  edx,[wcolor]
    int  0x40
   
    mov  eax,4
    mov  ebx,[string_x]
    shl  ebx,16
    add  ebx,[string_y]
    mov  ecx,[tcolor]
    mov  edx,string
    mov  esi,[string_length]
    int  0x40
   
    popa
    ret
   
   
   
   
; DATA AREA
   
telnetrep       db 0xff,0xfc,0x00
telnetstate     db 0
   
string_length  dd    16
string_x       dd    200
string_y       dd    60
   
string         db    '________________'
   
tx_buff         db  0, 10
ip_address      db  204,178,125,65
port            dw  5051 ;  0,0
echo            db  1
socket          dd  0x0
socket_status   dd  0x0
pos             dd  80 * 22
scroll          dd  1
                dd  24
   
wbutton         dd  0x336688
   
wtcom           dd  0x336688 ; 0x666666
wtxt            dd  0xffffff
   
wcolor          dd  0xe0e0e0
tcolor          dd  0x000000
   
sq_black        dd  0x336688 ; 666666
sq_white        dd  0xffffff
   
labelt          db  'Chess Client for Chessclub.com - v0.1'
labellen:
setipt          db  '               .   .   .'
setiplen:
setportt        db  '     '
setportlen:
cont            db  'Connect'
conlen:
dist            db  'Disconnect'
dislen:
contt           db  'Connected'
contlen:
discontt        db  'Disconnected'
discontlen:
echot        db  'Echo On'
echolen:
echoot        db  'Echo Off'
echoolen:
   
quick_start:
   
    db  '( OPPONENT )                  '
   
   times 16  db  '                             1'
   
    db  'Quick start:                  '
    db  '                              '
    db  '1 Connect                     '
    db  '2 login: "guest"              '
    db  '3 aics% "seek 10 0"           '
    db  '  (for a player)              '
    db  '  (wait)                      '
    db  '4 Play eg. "e7e5"             '
    db  '  or  "d2d4"                  '
    db  '5 aics% "resign"              '
    db  '  (quit game)                 '
    db  '6 Disconnect                  '
   
  times 5  db  '                              '
   
    db  '( YOU )                       '
   
    db  'x'
   
   
chess_board:
   
    times  80    db 0
   
 db '     8    *R  *N  *B  *Q  *K  *B  *N  *R'
 db '                                        '
   
     times  80  db 0
   
 db '     7    *P  *P  *P  *P  *P  *P  *P  *P'
 db '                                        '
   
     times  80  db 0
   
 db '     6                                  '
 db '                                        '
   
     times  80  db 0
   
 db '     5                                  '
 db '                                        '
   
     times  80  db 0
   
 db '     4                                  '
 db '                                        '
   
     times  80  db 0
   
 db '     3                                  '
 db '                                        '
   
     times  80  db 0
   
 db '     2    P   P   P   P   P   P   P   P '
 db '                                        '
   
    times  80      db 0
   
 db '     1    R   N   B   Q   K   B   N   R '
 db '                                        '
   
    times  80      db 0
   
 db '          a   b   c   d   e   f   g   h '
 db '                                        '
   
   
    times  80*20 db 0
   
board_old:
   
   
I_END:
   
   
   
   
   
   
   
   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -