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

📄 ir.asm

📁 Application sources:A084.ZIP
💻 ASM
字号:
;
;    INFRARED
;
;    Compile with FASM for Menuet
;
   
use32
   
                org     0x0
   
                db      'MENUET00'              ; 8 byte id
                dd      56                      ; required os
                dd      START                   ; program start
                dd      I_END                   ; program image size
                dd      0x100000                ; required amount of memory
                                                ; esp = 0x7FFF0
                dd      0x00000000              ; reserved=no extended header
   
   
   
START:                          ; start of execution
   
    call draw_window            ; at first, draw the window
   
    call set_variables
   
still:
   
    mov  eax,10                 ; wait here for event
    int  0x40
   
    cmp  eax,1                  ; redraw request ?
    je   red
    cmp  eax,2                  ; key in buffer ?
    je   key
    cmp  eax,3                  ; button in buffer ?
    je   button
    cmp  eax,16+4
    je   readir
   
    jmp  still
   
pos dd 0x0
   
cdplayer db  'CDPLAY     '
   
  readir:
    mov  eax,42
    mov  ebx,4
    int  0x40
   
    cmp  ebx,80
    jne  nocd
   
    mov  eax,19
    mov  ebx,cdplayer
    mov  ecx,0
    int  0x40
   
   
  nocd:
   
    push ebx
    mov  eax,[pos]
    add  eax,1
    cmp  eax,10*20+1
    jb   noeaxz
    mov  esi,text+10*4
    mov  edi,text
    mov  ecx,10*21*4
    cld
    rep  movsb
    mov  eax,13
    mov  ebx,20*65536+260
    mov  ecx,22*65536+220
    mov  edx,[wcolor]
    int  0x40
    mov  eax,10*19+1
  noeaxz:
    mov  [pos],eax
    pop  ebx
    and  ebx,0xff
    call draw_data
    jmp  still
   
  red:                          ; redraw
    call draw_window
    jmp  still
   
  key:                          ; key
    mov  eax,2                  ; just read it and ignore
    int  0x40
    jmp  still
   
  button:                       ; button
    mov  eax,17                 ; get id
    int  0x40
   
    cmp  ah,1                   ; button id=1 ?
    jne  noclose
   
    mov  eax,45                 ; free irq
    mov  ebx,1
    mov  ecx,4
    int  0x40
   
    mov  eax,46                 ; free ports 0x3f0-0x3ff
    mov  ebx,1
    mov  ecx,0x3f0
    mov  edx,0x3ff
    int  0x40
   
    mov  eax,-1                 ; close this program
    int  0x40
  noclose:
   
    jmp  still
   
   
   
draw_data:
   
    pusha
   
    xchg eax,ebx
   
    mov  ecx,10
    shl  ebx,2
    mov  esi,3
  newnum:
    xor  edx,edx
    div  ecx
    add  edx,48
    mov  [ebx+text-1],dl
    dec  ebx
    dec  esi
    jnz  newnum
   
    call draw_text
   
    popa
   
    ret
   
   
irqtable:
   
    dd  0x3f8+0x01000000   ;  +  01 = read byte,  02 read word
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
    dd  0
   
   
   
set_variables:
   
   
    pusha
   
    mov  eax,46           ; reserve ports 0x3f0 - 0x3ff
    mov  ebx,0
    mov  ecx,0x3f0
    mov  edx,0x3ff
    int  0x40
   
    mov  eax,45           ; reserve irq 4
    mov  ebx,0
    mov  ecx,4
    int  0x40
   
    mov  eax,46           ; reserve ports 0x3f0-0x3ff
    mov  ebx,0
    mov  ecx,0x3f0
    mov  edx,0x3ff
    int  0x40
   
    mov  eax,44           ; set read ports for irq 4
    mov  ebx,irqtable
    mov  ecx,4
    int  0x40
   
    mov  cx,0x3f3+8
    mov  bl,0x80
    mov  eax,43
    int  0x40
   
    mov  cx,0x3f1+8
    mov  bl,0
    mov  eax,43
    int  0x40
   
    mov  cx,0x3f0+8
    mov  bl,0x30 / 4
    mov  eax,43
    int  0x40
   
    mov  cx,0x3f3+8
    mov  bl,3
    mov  eax,43
    int  0x40
   
    mov  cx,0x3f4+8
    mov  bl,0xB
    mov  eax,43
    int  0x40
   
    mov  cx,0x3f1+8
    mov  bl,1
    mov  eax,43
    int  0x40
   
    mov  eax,5
    mov  ebx,100
    int  0x40
   
    mov  cx,0x3f8
    mov  bl,'I'
    mov  eax,43
    int  0x40
   
    mov  eax,5
    mov  ebx,10
    int  0x40
   
    mov  cx,0x3f8
    mov  bl,'R'
    mov  eax,43
    int  0x40
   
    mov  eax,40                                 ; get com 1 data with irq 4
    mov  ebx,0000000000010000b shl 16 + 111b
    int  0x40
   
    popa
   
    ret
   
   
;   *********************************************
;   *******  WINDOW DEFINITIONS AND DRAW ********
;   *********************************************
   
   
draw_window:
   
    mov  eax,12                    ; function 12:tell os about windowdraw
    mov  ebx,1                     ; 1, start of draw
    int  0x40
   
                                   ; DRAW WINDOW
    mov  eax,0                     ; function 0 : define and draw window
    mov  ebx,100*65536+300         ; [x start] *65536 + [x size]
    mov  ecx,100*65536+250         ; [y start] *65536 + [y size]
    mov  edx,[wcolor]              ; color of work area RRGGBB,8->color
    mov  esi,0x8099bbff            ; color of grab bar  RRGGBB,8->color glide
    mov  edi,0x00ffffff            ; color of frames    RRGGBB
    int  0x40
   
                                   ; WINDOW LABEL
    mov  eax,4                     ; function 4 : write text to window
    mov  ebx,8*65536+8             ; [x start] *65536 + [y start]
    mov  ecx,0x00ffffff            ; color of text RRGGBB
    mov  edx,labelt                ; pointer to text beginning
    mov  esi,labellen-labelt       ; text length
    int  0x40
   
                                   ; CLOSE BUTTON
    mov  eax,8                     ; function 8 : define and draw button
    mov  ebx,(300-19)*65536+12     ; [x start] *65536 + [x size]
    mov  ecx,5*65536+12            ; [y start] *65536 + [y size]
    mov  edx,1                     ; button id
    mov  esi,0x5599cc              ; button color RRGGBB
;    int  0x40
   
    call draw_text
   
    mov  eax,12
    mov  ebx,2
    int  0x40
   
    ret
   
draw_text:
   
    pusha
   
    mov  ebx,25*65536+35           ; draw info text with function 4
    mov  ecx,0xffffff
    mov  edx,text
    mov  esi,40
    mov  edi,20
  newline:
    mov  eax,4
    int  0x40
    add  ebx,10
    add  edx,40
    dec  edi
    jne  newline
   
    popa
   
    ret
   
   
   
; DATA AREA
   
wcolor  dd  0x03000000
   
labelt  db  'INFRARED RECEIVER FOR IRMAN IN COM 1'
labellen:
   
text:
   
I_END:
   
   
   
   

⌨️ 快捷键说明

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