summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux/syslinux-4.03/core/conio.inc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux/syslinux-4.03/core/conio.inc')
-rw-r--r--contrib/syslinux/syslinux-4.03/core/conio.inc431
1 files changed, 0 insertions, 431 deletions
diff --git a/contrib/syslinux/syslinux-4.03/core/conio.inc b/contrib/syslinux/syslinux-4.03/core/conio.inc
deleted file mode 100644
index b450502..0000000
--- a/contrib/syslinux/syslinux-4.03/core/conio.inc
+++ /dev/null
@@ -1,431 +0,0 @@
-;; -----------------------------------------------------------------------
-;;
-;; Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
-;; Copyright 2009 Intel Corporation; author: H. Peter Anvin
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
-;; Boston MA 02111-1307, USA; either version 2 of the License, or
-;; (at your option) any later version; incorporated herein by reference.
-;;
-;; -----------------------------------------------------------------------
-
-;;
-;; conio.inc
-;;
-;; Console I/O code, except:
-;; writechr, writestr_early - module-dependent
-;; writestr, crlf - writestr.inc
-;; writehex* - writehex.inc
-;;
-
-;
-; loadkeys: Load a LILO-style keymap; file is open on the top of the
-; getc stack.
-;
- section .text16
-
-loadkeys:
- mov cx,256
- mov di,trackbuf
- call readc
- jc .done ; EOF already?
-
- ; Make sure we are at EOF now...
- call getc
- jnc .done ; We should be at EOF now!
-
- ; It was okay, we can now move it into the KbdMap
- mov si,trackbuf
- mov di,KbdMap
- mov cx,256 >> 2
- rep movsd
-
-.done:
- call close
- ret
-
-;
-; get_msg_file: Load a text file and write its contents to the screen,
-; interpreting color codes. Call with the file already
-; on the top of the open/getc stack.
-;
-; Assumes CS == DS == ES.
-;
-get_msg_file:
- mov byte [TextAttribute],07h ; Default grey on white
- mov byte [DisplayMask],07h ; Display text in all modes
- call msg_initvars
-
-print_msg_file:
-.getc:
- call getc
- jc .done
- cmp al,1Ah ; DOS EOF?
- je .done
- movzx cx,byte [UsingVGA]
- and cl,01h
- inc cx ; CL <- 01h = text mode,
- ; 02h = graphics mode
- call [NextCharJump] ; Do what shall be done
- jmp .getc
-.done:
- jmp close ; Tailcall!
-
-msg_putchar: ; Normal character
- cmp al,0Fh ; ^O = color code follows
- je msg_ctrl_o
- cmp al,0Dh ; Ignore <CR>
- je msg_ignore
- cmp al,0Ah ; <LF> = newline
- je msg_newline
- cmp al,0Ch ; <FF> = clear screen
- je msg_formfeed
- cmp al,07h ; <BEL> = beep
- je msg_beep
- cmp al,19h ; <EM> = return to text mode
- je msg_novga
- cmp al,18h ; <CAN> = VGA filename follows
- je msg_vga
- jnb .not_modectl
- cmp al,10h ; 10h to 17h are mode controls
- jae msg_modectl
-.not_modectl:
-
-msg_normal: call write_serial_displaymask ; Write to serial port
- test [DisplayMask],cl
- jz msg_ignore ; Not screen
- test byte [DisplayCon],01h
- jz msg_ignore
- mov bl,[TextAttribute]
- mov bh,[BIOS_page]
- mov ah,09h ; Write character/attribute
- mov cx,1 ; One character only
- int 10h ; Write to screen
- mov al,[CursorCol]
- inc ax
- cmp al,[VidCols]
- ja msg_line_wrap ; Screen wraparound
- mov [CursorCol],al
-
-msg_gotoxy: mov bh,[BIOS_page]
- mov dx,[CursorDX]
- mov ah,02h ; Set cursor position
- int 10h
-msg_ignore: ret
-
-msg_beep: mov ax,0E07h ; Beep
- xor bx,bx
- int 10h
- ret
-
-msg_ctrl_o: ; ^O = color code follows
- mov word [NextCharJump],msg_setbg
- ret
-msg_newline: ; Newline char or end of line
- mov si,crlf_msg
- call write_serial_str_displaymask
-msg_line_wrap: ; Screen wraparound
- test [DisplayMask],cl
- jz msg_ignore
- mov byte [CursorCol],0
- mov al,[CursorRow]
- inc ax
- cmp al,[VidRows]
- ja msg_scroll
- mov [CursorRow],al
- jmp short msg_gotoxy
-msg_scroll: xor cx,cx ; Upper left hand corner
- mov dx,[ScreenSize]
- mov [CursorRow],dh ; New cursor at the bottom
- mov bh,[ScrollAttribute]
- mov ax,0601h ; Scroll up one line
- int 10h
- jmp short msg_gotoxy
-msg_formfeed: ; Form feed character
- mov si,crff_msg
- call write_serial_str_displaymask
- test [DisplayMask],cl
- jz msg_ignore
- xor cx,cx
- mov [CursorDX],cx ; Upper lefthand corner
- mov dx,[ScreenSize]
- mov bh,[TextAttribute]
- mov ax,0600h ; Clear screen region
- int 10h
- jmp msg_gotoxy
-msg_setbg: ; Color background character
- call unhexchar
- jc msg_color_bad
- shl al,4
- test [DisplayMask],cl
- jz .dontset
- mov [TextAttribute],al
-.dontset:
- mov word [NextCharJump],msg_setfg
- ret
-msg_setfg: ; Color foreground character
- call unhexchar
- jc msg_color_bad
- test [DisplayMask],cl
- jz .dontset
- or [TextAttribute],al ; setbg set foreground to 0
-.dontset:
- jmp short msg_putcharnext
-msg_vga:
- mov word [NextCharJump],msg_filename
- mov di, VGAFileBuf
- jmp short msg_setvgafileptr
-
-msg_color_bad:
- mov byte [TextAttribute],07h ; Default attribute
-msg_putcharnext:
- mov word [NextCharJump],msg_putchar
- ret
-
-msg_filename: ; Getting VGA filename
- cmp al,0Ah ; <LF> = end of filename
- je msg_viewimage
- cmp al,' '
- jbe msg_ret ; Ignore space/control char
- mov di,[VGAFilePtr]
- cmp di,VGAFileBufEnd
- jnb msg_ret
- mov [di],al ; Can't use stosb (DS:)
- inc di
-msg_setvgafileptr:
- mov [VGAFilePtr],di
-msg_ret: ret
-
-msg_novga:
- call vgaclearmode
- jmp short msg_initvars
-
-msg_viewimage:
- mov si,[VGAFilePtr]
- mov byte [si],0 ; Zero-terminate filename
- mov si,VGAFileBuf
- mov di,VGAFileMBuf
- pm_call pm_mangle_name
- call core_open
- jz msg_putcharnext ; Not there
- call vgadisplayfile
- ; Fall through
-
- ; Subroutine to initialize variables, also needed
- ; after loading a graphics file
-msg_initvars:
- pusha
- mov bh,[BIOS_page]
- mov ah,03h ; Read cursor position
- int 10h
- mov [CursorDX],dx
- popa
- jmp short msg_putcharnext ; Initialize state machine
-
-msg_modectl:
- and al,07h
- mov [DisplayMask],al
- jmp short msg_putcharnext
-
-;
-; write_serial: If serial output is enabled, write character on serial port
-; write_serial_displaymask: d:o, but ignore if DisplayMask & 04h == 0
-;
-write_serial_displaymask:
- test byte [DisplayMask], 04h
- jz write_serial.end
-write_serial:
- pushfd
- pushad
- mov bx,[SerialPort]
- and bx,bx
- je .noserial
- push ax
- mov ah,[FlowInput]
-.waitspace:
- ; Wait for space in transmit register
- lea dx,[bx+5] ; DX -> LSR
- in al,dx
- test al,20h
- jz .waitspace
-
- ; Wait for input flow control
- inc dx ; DX -> MSR
- in al,dx
- and al,ah
- cmp al,ah
- jne .waitspace
-.no_flow:
-
- xchg dx,bx ; DX -> THR
- pop ax
- slow_out dx,al ; Send data
-.noserial: popad
- popfd
-.end: ret
-
-;
-; write_serial_str: write_serial for strings
-; write_serial_str_displaymask: d:o, but ignore if DisplayMask & 04h == 0
-;
-write_serial_str_displaymask:
- test byte [DisplayMask], 04h
- jz write_serial_str.end
-
-write_serial_str:
-.loop lodsb
- and al,al
- jz .end
- call write_serial
- jmp short .loop
-.end: ret
-
-;
-; pollchar: check if we have an input character pending (ZF = 0)
-;
-pollchar:
- pushad
- mov ah,11h ; Poll keyboard
- int 16h
- jnz .done ; Keyboard response
- mov dx,[SerialPort]
- and dx,dx
- jz .done ; No serial port -> no input
- mov ax,[SerialTail] ; Already-queued input?
- cli
- cmp ax,[SerialHead]
- jne .done_sti ; If so, return ZF = 0
- add dx,5 ; DX -> LSR
- in al,dx
- test al,1 ; ZF = 0 if data pending
- jz .done_sti
- inc dx ; DX -> MSR
- mov ah,[FlowIgnore] ; Required status bits
- in al,dx
- and al,ah
- cmp al,ah
- setne al
- dec al ; Set ZF = 0 if equal
-.done_sti: sti
-.done: popad
- ret
-
-;
-; getchar: Read a character from keyboard or serial port
-;
-getchar.sti_again:
- sti
-getchar:
-.again:
- call do_idle
- mov ah,11h ; Poll keyboard
- int 16h
- jnz .kbd ; Keyboard input?
- mov bx,[SerialPort]
- and bx,bx
- jz .again
- mov ax,[SerialTail]
- cli
- cmp ax,[SerialHead]
- jne .serial_queued
- lea dx,[bx+5] ; DX -> LSR
- in al,dx
- test al,1
- jz .sti_again
- inc dx ; DX -> MSR
- mov ah,[FlowIgnore]
- in al,dx
- and al,ah
- cmp al,ah
- jne .sti_again
-.serial: xor ah,ah ; Avoid confusion
- mov dx,bx ; Data port
- in al,dx ; Read data
- sti
- jmp .done
-.serial_queued:
- sti ; We already know we'll consume data
- xchg bx,ax
- push ds
- mov ax,aux_seg + (aux.serial >> 4)
- mov ds,ax
- mov al,[bx]
- pop ds
- inc bx
- and bx,serial_buf_size-1
- mov [SerialTail],bx
- jmp .done
-
-.kbd: mov ah,10h ; Get keyboard input
- int 16h
- cmp al,0E0h
- jnz .not_ext
- xor al,al
-.not_ext:
- and al,al
- jz .func_key
- mov bx,KbdMap ; Convert character sets
- xlatb
-.func_key:
-.done:
- jmp reset_idle ; Character received
-
-%ifdef DEBUG_TRACERS
-;
-; debug hack to print a character with minimal code impact
-;
-debug_tracer: pushad
- pushfd
- mov bp,sp
- mov bx,[bp+9*4] ; Get return address
- mov al,[cs:bx] ; Get data byte
- inc word [bp+9*4] ; Return to after data byte
- call writechr
- popfd
- popad
- ret
-%endif ; DEBUG_TRACERS
-
- section .data16
-%if IS_ISOLINUX == 0 ; Defined elsewhere for ISOLINUX
-crlf_msg db CR, LF
-null_msg db 0
-%endif
-crff_msg db CR, FF, 0
-
- section .config
- ; This is a word to pc_setint16 can set it
-DisplayCon dw 01h ; Console display enabled
-
-ScrollAttribute db 07h ; Grey on white (normal text color)
-
- section .bss16
- alignb 2
-NextCharJump resw 1 ; Routine to interpret next print char
-CursorDX equ $
-CursorCol resb 1 ; Cursor column for message file
-CursorRow resb 1 ; Cursor row for message file
-ScreenSize equ $
-VidCols resb 1 ; Columns on screen-1
-VidRows resb 1 ; Rows on screen-1
-
-; Serial console stuff; don't put this in .config becasue we don't want
-; loading a new config file to undo this setting.
- section .data16
- alignz 4
-SerialPort dw 0 ; Serial port base (or 0 for no serial port)
-BaudDivisor dw 115200/9600 ; Baud rate divisor
-FlowControl equ $
-FlowOutput db 0 ; Outputs to assert for serial flow
-FlowInput db 0 ; Input bits for serial flow
-FlowIgnore db 0 ; Ignore input unless these bits set
-FlowDummy db 0 ; Unused
-
- section .bss16
-TextAttribute resb 1 ; Text attribute for message file
-DisplayMask resb 1 ; Display modes mask
-
- section .text16
-%include "serirq.inc"