Vous êtes sur la page 1sur 6

; BIOS Keyboard interface routines for FORTRAN ; ; Copyright (c) 1986-1997 Kevin G. Rhoads. All rights reserved.

; ; include forframe.mac ; ; DATA segment PUBLIC 'DATA' USE16 DATA ends dgroup group DATA code segment 'CODE' PUBLIC USE16 assume cs:code,ds:dgroup,es:dgroup,ss:dgroup ; ;declare: INTEGER*2 GETKEY ; EXTERNAL GETKEY ;uses: I2 = GETKEY() ; returns to I2 either ASCII value (0 .. 255) OR ; Extended code * 256 ; consumes keystroke ; getkey proc far public getkey save mov ah,0 int 16h cmp al,0 je getkey_out mov ah,0 getkey_out: restore ret db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.' getkey endp ; ;declare: INTEGER*2 INKEY ; EXTERNAL INKEY ;uses: I2 = INKEY() ; returns to I2 ASCII value (0 .. 255) PLUS ; Extended code * 256 ; consumes keystroke ; inkey proc far public inkey save mov ah,0 int 16h restore ret db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.' inkey endp ; ; RETURNS ONLY SCAN CODE/EXTENDED CODE ; getscn proc far public getscn save mov ah,0

'(c) 1986-1993 Kevin G. Rhoads, all rights reserved.' getscn endp ; ; ;declare: INTEGER*2 g3tkey ; EXTERNAL g3tkey ;uses: I2 = g3tkey() ; returns to I2 either ASCII value (0 .. 255) OR ; Extended code * 256 ; returns zero (immediately) if no character present ; DOES NOT consume keystroke ; g3tkey proc far getk3y label far getkey2 label far public g3tkey,getk3y,getkey2 save mov ah,1 int 16h jnz g3tkey_got mov ax,0 jmp g3tkey_out g3tkey_got: cmp al,0 je g3tkey_out mov ah,0 g3tkey_out: restore ret db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.' g3tkey endp ; ; ;declare: INTEGER*2 inkey2 ; EXTERNAL inkey2 ;uses: I2 = inkey2() ; returns to I2 ASCII value (0 .. 255) PLUS ; Extended code * 256 ; returns zero (immediately) if no character present ; uses extended keyboard BIOS call ; DOES NOT consume keystroke ; inkey2 proc far inkeynw label far public inkey2,inkeynw save mov ah,1 int 16h jnz inkey2_got mov ax,0 inkey2_got label near restore ret db '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.'

int mov mov restore ret db

16h al,ah ah,0

inkey2 endp ; ; ;declare: INTEGER*2 getkex ; EXTERNAL getkex ;uses: I2 = getkex() ; returns to I2 either ASCII value (0 .. 255) OR ; Extended code * 256 ; consumes keystroke ; getkex proc far public getkex save mov ah,11h mov bp,0 add bp,bp ;force zero flag, if function 11h not implemented we try 01 next int 16h jnz getkex_got mov ah,0 jmp getkex_old getkex_got: mov ah,10h ;new style calls work, keystroke waiting getkex_old: int 16h cmp al,0 je getkex_out mov ah,0 getkex_out: restore ret db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.' getkex endp ; ; ;declare: INTEGER*2 g3tkex ; EXTERNAL g3tkex ;uses: I2 = g3tkex() ; returns to I2 either ASCII value (0 .. 255) OR ; Extended code * 256 ; returns zero (immediately) if no character present ; uses extended keyboard BIOS call ; DOES NOT consume keystroke ; g3tkex proc far getk3x label far getkeyx label far public g3tkex,getk3x,getkeyx save mov ah,11h int 16h jnz g3tkex_got mov ax,0 jmp g3tkex_out g3tkex_got: cmp al,0 je g3tkex_out mov ah,0 g3tkex_out: restore

'(c) 1986-1994 Kevin G. Rhoads, all rights reserved.' g3tkex endp ; ; ;declare: INTEGER*2 inkex2 ; EXTERNAL inkex2 ;uses: I2 = inkex2() ; returns to I2 ASCII value (0 .. 255) PLUS ; Extended code * 256 ; returns zero (immediately) if no character present ; uses extended keyboard BIOS call ; DOES NOT consume keystroke ; inkex2 proc far inkexnw label far inkeyx label far public inkex2,inkexnw,inkeyx save mov ah,11h int 16h jnz inkex2_got mov ax,0 inkex2_got label near restore ret db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.' inkex2 endp ; ; ;declare: INTEGER*2 getkez ; EXTERNAL getkez ;uses: I2 = getkez() ; returns to I2 either ASCII value (0 .. 255) OR ; Extended code * 256 ; consumes keystroke ; getkez proc far public getkez save getkez_again: mov ah,11h mov bp,0 add bp,bp ;force zero flag, if function 11h not implemented we try 01 next int 16h jnz getkez_got mov ah,01h int 16h mov ah,0 ;old style keystroke waiting jnz getkez_old mov ax,9002h ;keyboard is waiting ... int 15h jmp getkez_again getkez_got: mov ah,10h ;new style calls work, keystroke waiting getkez_old:

ret db

int 16h cmp al,0 je getkez_out mov ah,0 getkez_out: restore ret db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.' getkez endp ; ; ;declare: INTEGER*2 g3tkez ; external g3tkez ;uses: I2 = g3tkez() ; returns to I2 either ASCII value (0 .. 255) OR ; Eztended code * 256 ; returns zero (immediately) if no character present ; uses extended keyboard BIOS call first, then regular ; DOES NOT consume keystroke ; g3tkez proc far getk3z label far getkeyz label far public g3tkez,getk3z,getkeyz save mov ah,11h mov bp,0 add bp,bp ;force zero flag, if function 11h not implemented we try 01 next int 16h jnz g3tkez_got mov ah,1 int 16h jnz g3tkez_got mov ax,0 jmp g3tkez_out g3tkez_got: cmp al,0 je g3tkez_out mov ah,0 g3tkez_out: restore ret db '(c) 1986-1994 Kevin G. Rhoads, all rights reserved.' g3tkez endp ; ; ;declare: INTEGER*2 inkez2 ; external inkez2 ;uses: I2 = inkez2() ; returns to I2 ASCII value (0 .. 255) PLUS ; Extended code * 256 ; returns zero (immediately) if no character present ; DOES NOT consume keystroke ; inkez2 proc far inkeznw label far inkeyz label far public inkez2,inkeznw,inkeyz save

mov mov add we try 01 next int jnz mov int jnz mov inkez2_got label restore ret db inkez2 ; ; prtscn public save push push push push push int pop pop pop pop pop restore ret db prtscn ; ; code ends e end

ah,11h bp,0 bp,bp 16h inkez2_got ah,1 16h inkez2_got ax,0 near

;force zero flag, if function 11h not implemented

'(c) 1986-1994 Kevin G. Rhoads, all rights reserved.' endp ` proc prtscn ax bx cx dx es 5 es dx cx bx ax '(c) 1986-1993 Kevin G. Rhoads, all rights reserved.' endp far

Vous aimerez peut-être aussi