home *** CD-ROM | disk | FTP | other *** search
- Page 58,132
- Title TTY.ASM TTY Interface Routines
- ;******************************************************************************
- ;
- ; Name: TTY.ASM TTY Interface Routines
- ;
- ; Group: Emulator
- ;
- ; Revision: 1.00
- ;
- ; Date: January 30, 1988
- ;
- ; Author: Randy W. Spurlock
- ;
- ;******************************************************************************
- ;
- ; Module Functional Description:
- ;
- ; This module contains all the code for the TTY interface
- ; used by the Apple emulator.
- ;
- ;******************************************************************************
- ;
- ; Changes:
- ;
- ; DATE REVISION DESCRIPTION
- ; -------- -------- -------------------------------------------------------
- ; 1/30/88 1.00 Original
- ;
- ;******************************************************************************
- Page
- ;
- ; Public Declarations
- ;
- Public TTY_Init ; Initialize TTY mode routine
- Public TTY_Reset ; Reset TTY mode routine
- Public Write_TTY ; Write TTY routine
- Public Set_Position ; Set current position routine
- Public Set_Row ; Set current row routine
- Public Set_Column ; Set current column routine
- Public Set_Attribute ; Set current attribute routine
- Public Set_Foreground ; Set current foreground routine
- Public Set_Background ; Set current background routine
- Public Set_Cursor ; Set cursor position routine
- Public Set_Type ; Set cursor type routine
- Public Get_Position ; Get current position routine
- Public Get_Row ; Get current row routine
- Public Get_Column ; Get current column routine
- Public Get_Attribute ; Get current attribute routine
- Public Get_Foreground ; Get current foreground routine
- Public Get_Background ; Get current background routine
- Public Get_Cursor ; Get cursor position routine
- Public Get_Type ; Get cursor type routine
- Public Clear_Screen ; Clear screen routine
- Public Current_Row ; Current screen row number
- Public Current_Col ; Current screen column number
- Public Current_Fore ; Current foreground color value
- Public Current_Back ; Current background color value
- ;
- ; External Declarations
- ;
- Extrn Clear_Window:Near ; Clear window routine (WINDOW)
- Extrn Cursor_Off:Near ; Turn cursor off routine (VIDEO)
- Extrn Cursor_On:Near ; Turn cursor on routine (VIDEO)
- Extrn Blink_Off:Near ; Turn blink off routine (VIDEO)
- Extrn Blink_On:Near ; Turn blink on routine (VIDEO)
- Extrn CGA_Restore:Near ; CGA restore screen routine (CGA)
- Extrn EGA_Restore:Near ; EGA restore screen routine (EGA)
- Extrn System_Flag:Byte ; Apple emulator system flag byte(DATA)
- Extrn Video_Flag:Byte ; Video system flag byte (DATA)
- ;
- ; LOCAL Equates
- ;
- TEXT_MODE Equ 00h ; Text mode value (40 x 25)
- GRAPH_MODE Equ 04h ; Graphics mode value (320 x 200)
- BACK_SHIFT Equ 04h ; Background attribute shift value
- MAX_ROW Equ 19h ; Maximum row number value (25)
- MAX_COLUMN Equ 28h ; Maximum column number value (40)
- CURSOR_MASK Equ 07h ; Cursor type mask value
- ATTRIBUTE_MASK Equ 0Fh ; Foreground/background attribute mask
- MAX_TAB Equ 24h ; Maximum horizontal tab position (36)
- TAB_SIZE Equ 04h ; Tab stop size value (4)
- TAB_MASK Equ 03h ; Tab count mask value
- VIDEO_MEMORY Equ 0B800h ; Start of video memory segment
- ;
- ; Define any include files needed
- ;
- Include Macros.inc ; Include the macro definitions
- Include Equates.inc ; Include the equate definitions
- .286c ; Include 80286 instructions
- Page
- ;
- ; Define the emulator code segment
- ;
- Emulate Segment Word Public 'EMULATE' ; Emulator code segment
- Assume cs:Emulate, ds:Nothing, es:Nothing
- Subttl TTY_Init Initialize TTY Mode Routine
- Page +
- ;******************************************************************************
- ;
- ; TTY_Init()
- ;
- ; Save the required registers
- ; Set text mode 0 (40x25)
- ; Call routine to turn off cursor
- ; Call routine to disable blink (Intensity)
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- TTY_Init Proc Near ; Initialize TTY mode procedure
- Save ax ; Save the required registers
- mov ah,SET_MODE ; Get set mode video sub-function code
- mov al,TEXT_MODE ; Get the 40x25 text mode value
- int VIDEO ; Set video mode to 40x25 text mode
- call Cursor_Off ; Call routine to turn cursor off
- call Blink_Off ; Call routine to turn blink off
- Restore ax ; Restore the required registers
- ret ; Return to the caller
- TTY_Init Endp ; End of the TTY_Init procedure
- Subttl TTY_Reset Reset TTY Mode Routine
- Page +
- ;******************************************************************************
- ;
- ; TTY_Reset()
- ;
- ; If this is a CGA type video
- ; Call routine to restore CGA screen
- ; Else this is an EGA type video
- ; Call routine to restore EGA screen
- ; Endif for video type
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- TTY_Reset Proc Near ; Reset TTY mode procedure
- test cs:[System_Flag],EGA_TYPE
- jnz Reset_Ega ; Jump if this is an EGA type video
- Reset_CGA:
- call CGA_Restore ; Call routine to restore CGA
- jmp Short Reset_Exit ; Go return to the caller
- Reset_EGA:
- call EGA_Restore ; Call routine to restore EGA
- Reset_Exit:
- ret ; Return to the caller
- TTY_Reset Endp ; End of the TTY_Reset procedure
- Subttl Write_TTY Write TTY Routine
- Page +
- ;******************************************************************************
- ;
- ; Write_TTY(Character)
- ;
- ; Save the required registers
- ; If special character
- ; Call routine to handle special character
- ; Else
- ; Calculate the current screen position
- ; Get current screen colors (Foreground/Background)
- ; Put requested character on the screen
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AL - Character to write
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Write_TTY Proc Near ; Write TTY procedure
- Save ax,bx,cx,dx,di,es ; Save the required registers
- mov bx,cs ; Setup access to
- mov es,bx ; character table
- mov cx,SPECIAL_LENGTH ; Get length of special character table
- lea di,cs:[Special_Table] ; Get pointer to character table
- repne scasb ; Check for a special character
- jne Write_Character ; Jump if NOT a special character
- lea ax,cs:[Special_Table] ; Calculate
- sub di,ax ; matching
- dec di ; character value
- shl di,1 ; Convert matching number to table index
- call cs:[di + Special_Jump] ; Call correct special character routine
- jmp Short Write_Exit ; Go return control to the caller
- Write_Character:
- mov cx,cs:[Current_Row] ; Get the current row number
- mov bx,cx ; Compute
- shl bx,2 ; row number
- add bx,cx ; times five (*80)
- add bx,VIDEO_MEMORY ; Compute actual video memory segment
- mov es,bx ; Setup to access video memory
- mov di,cs:[Current_Col] ; Compute the actual
- shl di,1 ; memory address
- mov ah,Byte Ptr cs:[Current_Back]
- shl ah,BACK_SHIFT ; Shift background into position
- or ah,Byte Ptr cs:[Current_Fore]
- stosw ; Store character into memory
- mov ax,cs:[Current_Row] ; Get the current
- mov bx,cs:[Current_Col] ; row/column values
- inc bx ; Increment the column number
- cmp bx,MAX_COLUMN ; Check against maximum column value
- jb Write_Update ; Jump if column number valid
- xor bx,bx ; Reset current column number
- inc ax ; Increment the row number
- cmp ax,MAX_ROW ; Check against maximum row value
- jae Write_Exit ; Jump if invalid row/column values
- Write_Update:
- mov cs:[Current_Row],ax ; Update the current
- mov cs:[Current_Col],bx ; row/column values
- Write_Exit:
- Restore ax,bx,cx,dx,di,es ; Restore the required registers
- ret ; Return to the caller
- Write_TTY Endp ; End of the Write_TTY procedure
- Subttl Special_NULL Special NULL Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_NULL()
- ;
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_NULL Proc Near ; Special NULL character procedure
- ret ; Return to the caller
- Special_NULL Endp ; End of the Special_NULL procedure
- Subttl Special_BELL Special BELL Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_BELL()
- ;
- ; Save the required registers
- ;
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_BELL Proc Near ; Special BELL character procedure
- Save ; Save the required registers
-
-
-
- Restore ; Restore the required registers
- ret ; Return to the caller
- Special_BELL Endp ; End of the Special_BELL procedure
- Subttl Special_BS Special BS Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_BS()
- ;
- ; Save the required registers
- ; If current column number greater than zero
- ; Decrement the current column number
- ; Calculate the current screen position
- ; Get current screen colors (Foreground/Background)
- ; Put space character on the screen
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_BS Proc Near ; Special BS character procedure
- Save ax,bx,di,es ; Save the required registers
- mov ax,cs:[Current_Col] ; Get the current column number
- or ax,ax ; Check for in column zero
- jz BS_Exit ; Jump if currently in column zero
- dec cs:[Current_Col] ; Decrement the current column value
- mov ax,cs:[Current_Row] ; Get the current row number
- mov bx,ax ; Compute
- shl bx,2 ; row number
- add ax,bx ; times five (*80)
- add ax,VIDEO_MEMORY ; Compute actual video memory segment
- mov es,ax ; Setup to access video memory
- mov di,cs:[Current_Col] ; Compute the actual
- shl di,1 ; memory address
- mov al,SPACE ; Setup to write a space character
- mov ah,Byte Ptr cs:[Current_Back]
- shl ah,BACK_SHIFT ; Shift background into position
- or ah,Byte Ptr cs:[Current_Fore]
- stosw ; Store character into memory
- BS_Exit:
- Restore ax,bx,di,es ; Restore the required registers
- ret ; Return to the caller
- Special_BS Endp ; End of the Special_BS procedure
- Subttl Special_HT Special HT Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_HT()
- ;
- ; Save the required registers
- ; If current column less than maximum tab position
- ; Calculate number of pad characters required (Spaces)
- ; Calculate the current screen position
- ; Get current screen colors (Foreground/Background)
- ; Update the current column position
- ; While more pad characters to display
- ; Put pad character on the screen (Space)
- ; Decrement the pad counter
- ; EndWhile
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_HT Proc Near ; Special HT character procedure
- Save ax,bx,cx,di,es ; Save the required registers
- mov ax,cs:[Current_Col] ; Get the current column position
- cmp ax,MAX_TAB ; Check against maximum tab position
- jae HT_Exit ; Jump if past maximum tab position
- and ax,TAB_MASK ; Compute
- mov cx,TAB_SIZE ; the actual
- sub cx,ax ; tab count value
- mov ax,cs:[Current_Row] ; Get the current row number
- mov bx,ax ; Compute
- shl bx,2 ; row number
- add ax,bx ; times five (*80)
- add ax,VIDEO_MEMORY ; Compute actual video memory segment
- mov es,ax ; Setup to access video memory
- mov di,cs:[Current_Col] ; Compute the actual
- shl di,1 ; memory address
- mov al,SPACE ; Setup to write a space character
- mov ah,Byte Ptr cs:[Current_Back]
- shl ah,BACK_SHIFT ; Shift background into position
- or ah,Byte Ptr cs:[Current_Fore]
- add cs:[Current_Col],cx ; Update the current column position
- rep stosw ; Store the horizontal pad characters
- HT_Exit:
- Restore ax,bx,cx,di,es ; Restore the required registers
- ret ; Return to the caller
- Special_HT Endp ; End of the Special_HT procedure
- Subttl Special_LF Special LF Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_LF()
- ;
- ; Save the required registers
- ; If not on the bottom row
- ; Increment the current row value
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_LF Proc Near ; Special LF character procedure
- Save ax ; Save the required registers
- mov ax,cs:[Current_Row] ; Get the current row position
- cmp ax,MAX_ROW - 1 ; Check for on the bottom row
- jae LF_Exit ; Jump if currently on the last row
- inc cs:[Current_Row] ; Increment to the next row
- LF_Exit:
- Restore ax ; Restore the required registers
- ret ; Return to the caller
- Special_LF Endp ; End of the Special_LF procedure
- Subttl Special_VT Special VT Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_VT()
- ;
- ; Save the required registers
- ; If not on the bottom row
- ; Increment the current row value
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_VT Proc Near ; Special VT character procedure
- Save ax ; Save the required registers
- mov ax,cs:[Current_Row] ; Get the current row position
- cmp ax,MAX_ROW - 1 ; Check for on the bottom row
- jae VT_Exit ; Jump if currently on the last row
- inc cs:[Current_Row] ; Increment to the next row
- VT_Exit:
- Restore ax ; Restore the required registers
- ret ; Return to the caller
- Special_VT Endp ; End of the Special_VT procedure
- Subttl Special_FF Special FF Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_FF()
- ;
- ; Save the required registers
- ; Call routine to clear the screen
- ; Set row position to zero
- ; Set column position to zero
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_FF Proc Near ; Special FF character procedure
- Save ax ; Save the required registers
- call Clear_Screen ; Call routine to clear the screen
- xor ax,ax ; Setup to zero current position (Home)
- mov cs:[Current_Row],ax ; Zero the current
- mov cs:[Current_Col],ax ; row/column position
- Restore ax ; Restore the required registers
- ret ; Return to the caller
- Special_FF Endp ; End of the Special_FF procedure
- Subttl Special_CR Special CR Character Routine
- Page +
- ;******************************************************************************
- ;
- ; Special_CR()
- ;
- ; Save the required registers
- ; Set current column position to zero
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Special_CR Proc Near ; Special CR character procedure
- Save ax ; Save the required registers
- xor ax,ax ; Setup to zero column position
- mov cs:[Current_Col],ax ; Zero current column position value
- Restore ax ; Restore the required registers
- ret ; Return to the caller
- Special_CR Endp ; End of the Special_CR procedure
- Subttl Set_Position Set Current Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Position(Row, Column)
- ;
- ; If new row position is valid
- ; If new column position is valid
- ; Set current row to new row
- ; Set current column to new column
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - New row number
- ; BX - New column number
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Position Proc Near ; Set current position procedure
- cmp ax,MAX_ROW ; Check the new row number value
- jae Position_Exit ; Jump if new row value is invalid
- cmp bx,MAX_COLUMN ; Check the new column number value
- jae Position_Exit ; Jump if new column value is invalid
- mov cs:[Current_Row],ax ; Update the current
- mov cs:[Current_Col],bx ; row/column values
- Position_Exit:
- ret ; Return to the caller
- Set_Position Endp ; End of the Set_Position procedure
- Subttl Set_Row Set Current Row Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Row(Row)
- ;
- ; If new row position is valid
- ; Set current row to new row
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - New row number
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Row Proc Near ; Set current row position procedure
- cmp ax,MAX_ROW ; Check the new row number value
- jae Row_Exit ; Jump if new row value is invalid
- mov cs:[Current_Row],ax ; Update the current row value
- Row_Exit:
- ret ; Return to the caller
- Set_Row Endp ; End of the Set_Row procedure
- Subttl Set_Column Set Current Column Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Column(Column)
- ;
- ; If new column position is valid
- ; Set current column to new column
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - New column number
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Column Proc Near ; Set current column position procedure
- cmp ax,MAX_COLUMN ; Check the new column number value
- jae Column_Exit ; Jump if new column value is invalid
- mov cs:[Current_Col],ax ; Update the current column value
- Column_Exit:
- ret ; Return to the caller
- Set_Column Endp ; End of the Set_Column procedure
- Subttl Set_Attribute Set Current Attribute Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Attribute(Foreground, Background)
- ;
- ; Set current foreground color to new value
- ; Set current background color to new value
- ; Mask off the foreground value
- ; Mask off the background value
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - New foreground color
- ; BX - New background color
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Attribute Proc Near ; Set current attribute procedure
- mov cs:[Current_Fore],ax ; Save new foreground
- mov cs:[Current_Back],bx ; background colors
- and cs:[Current_Fore],ATTRIBUTE_MASK
- and cs:[Current_Back],ATTRIBUTE_MASK
- ret ; Return to the caller
- Set_Attribute Endp ; End of the Set_Attribute procedure
- Subttl Set_Foreground Set Current Foreground Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Foreground(Foreground)
- ;
- ; Set current foreground color to new value
- ; Mask off the foreground value
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - New foreground color
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Foreground Proc Near ; Set current foreground procedure
- mov cs:[Current_Fore],ax ; Save new foreground color value
- and cs:[Current_Fore],ATTRIBUTE_MASK
- ret ; Return to the caller
- Set_Foreground Endp ; End of the Set_Foreground procedure
- Subttl Set_Background Set Current Background Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Background(Background)
- ;
- ; Set current background color to new value
- ; Mask off the background value
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - New background color
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Background Proc Near ; Set current background procedure
- mov cs:[Current_Back],ax ; Save new background color value
- and cs:[Current_Back],ATTRIBUTE_MASK
- ret ; Return to the caller
- Set_Background Endp ; End of the Set_Background procedure
- Subttl Set_Cursor Set Cursor Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Cursor(Row, Column)
- ;
- ; Save the required registers
- ; If new row position is valid
- ; If new column position is valid
- ; Set new cursor position
- ; Endif
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - Cursor row number
- ; BX - Cursor column number
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Cursor Proc Near ; Set cursor position procedure
- Save ax,bx,dx ; Save the required registers
- cmp ax,MAX_ROW ; Check the new row number value
- jae Cursor_Exit ; Jump if new row value is invalid
- cmp bx,MAX_COLUMN ; Check the new column number value
- jae Cursor_Exit ; Jump if new column value is invalid
- mov dh,al ; Setup the cursor
- mov dl,bl ; row and column values
- xor bh,bh ; Setup for video page zero
- mov ah,WRITE_CURSOR ; Get write cursor position function
- int VIDEO ; Set the new cursor position
- Cursor_Exit:
- Restore ax,bx,dx ; Restore the required registers
- ret ; Return to the caller
- Set_Cursor Endp ; End of the Set_Cursor procedure
- Subttl Set_Type Set Cursor Type Routine
- Page +
- ;******************************************************************************
- ;
- ; Set_Type(Start, End)
- ;
- ; Save the required registers
- ; Mask off the cursor start value
- ; Mask off the cursor end value
- ; Set the new cursor type value
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AX - Cursor start row number (0 - 7)
- ; BX - Cursor end row number (0 - 7)
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Set_Type Proc Near ; Set cursor type procedure
- Save ax,cx ; Save the required registers
- mov ch,al ; Get and mask
- and ch,CURSOR_MASK ; cursor start value
- mov cl,bl ; Get and mask
- and cl,CURSOR_MASK ; cursor end value
- mov ah,CURSOR_TYPE ; Get set cursor type function code
- int VIDEO ; Set the new cursor type value
- Restore ax,cx ; Restore the required registers
- ret ; Return to the caller
- Set_Type Endp ; End of the Set_Type procedure
- Subttl Get_Position Get Current Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Position()
- ;
- ; Get the current row value
- ; Get the current column vlaue
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Current row number
- ; BX - Current column number
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Position Proc Near ; Get current position procedure
- mov ax,cs:[Current_Row] ; Get the current
- mov bx,cs:[Current_Col] ; row/column values
- ret ; Return to the caller
- Get_Position Endp ; End of the Get_Position procedure
- Subttl Get_Row Get Current Row Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Row()
- ;
- ; Get the current row value
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Current row number
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Row Proc Near ; Get current row position procedure
- mov ax,cs:[Current_Row] ; Get the current row value
- ret ; Return to the caller
- Get_Row Endp ; End of the Get_Row procedure
- Subttl Get_Column Get Current Column Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Column()
- ;
- ; Get the current column vlaue
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Current column number
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Column Proc Near ; Get current column position procedure
- mov ax,cs:[Current_Col] ; Get the current column value
- ret ; Return to the caller
- Get_Column Endp ; End of the Get_Column procedure
- Subttl Get_Attribute Get Current Attribute Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Attribute()
- ;
- ; Get the current foreground color
- ; Get the current background color
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Current foreground color
- ; BX - Current background color
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Attribute Proc Near ; Get current attribute procedure
- mov ax,cs:[Current_Fore] ; Get foreground/
- mov bx,cs:[Current_Back] ; background colors
- ret ; Return to the caller
- Get_Attribute Endp ; End of the Get_Attribute procedure
- Subttl Get_Foreground Get Current Foreground Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Foreground()
- ;
- ; Get the current foreground color
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Current foreground color
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Foreground Proc Near ; Get current foreground procedure
- mov ax,cs:[Current_Fore] ; Get the current foreground color
- ret ; Return to the caller
- Get_Foreground Endp ; End of the Get_Foreground procedure
- Subttl Get_Background Get Current Background Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Background()
- ;
- ; Get the current background color
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Current background color
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Background Proc Near ; Get current background procedure
- mov ax,cs:[Current_Back] ; Get the current background color
- ret ; Return to the caller
- Get_Background Endp ; End of the Get_Background procedure
- Subttl Get_Cursor Get Cursor Position Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Cursor()
- ;
- ; Save the required registers
- ; Get current cursor position
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Cursor row number
- ; BX - Cursor column number
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Cursor Proc Near ; Get cursor position procedure
- Save cx,dx ; Save the required registers
- xor bh,bh ; Setup for video page zero
- mov ah,READ_CURSOR ; Get read cursor position function
- int VIDEO ; Get the current cursor position
- mov al,dh ; Get the current
- xor ah,ah ; row position value
- mov bl,dl ; Get the current
- xor bh,bh ; column position value
- Restore cx,dx ; Restore the required registers
- ret ; Return to the caller
- Get_Cursor Endp ; End of the Get_Cursor procedure
- Subttl Get_Type Get Cursor Type Routine
- Page +
- ;******************************************************************************
- ;
- ; Get_Type()
- ;
- ; Save the required registers
- ; Get current cursor type
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AX - Cursor start row number (0 - 7)
- ; BX - Cursor end row number (0 - 7)
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Get_Type Proc Near ; Get cursor type procedure
- Save cx,dx ; Save the required registers
- xor bh,bh ; Setup for video page zero
- mov ah,READ_CURSOR ; Get read cursor position function
- int VIDEO ; Get the current cursor position
- mov al,ch ; Get cursor start
- xor ah,ah ; row position value
- mov bl,cl ; Get cursor end
- xor bh,bh ; row position value
- Restore cx,dx ; Restore the required registers
- ret ; Return to the caller
- Get_Type Endp ; End of the Get_Type procedure
- Subttl Clear_Screen Clear Screen Routine
- Page +
- ;******************************************************************************
- ;
- ; Clear_Screen()
- ;
- ; Save the required registers
- ; Set window to entire screen
- ; Call routine to clear window
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Clear_Screen Proc Near ; Clear screen procedure
- Save ax,bx,cx,dx ; Save the required registers
- xor ax,ax ; Setup
- xor bx,bx ; window
- mov cx,MAX_ROW - 1 ; to the
- mov dx,MAX_COLUMN - 1 ; entire screen
- call Clear_Window ; Call routine to clear the window
- Restore ax,bx,cx,dx ; Restore the required registers
- ret ; Return to the caller
- Clear_Screen Endp ; End of the Clear_Screen procedure
- Subttl TTY Interface Data Areas
- Page +
- ;******************************************************************************
- ;
- ; Define any data areas needed by the TTY interface
- ;
- ;******************************************************************************
- Special_Table Equ This Byte ; Special character table
- Db NULL ; Null character
- Db BELL ; Bell character
- Db BS ; Backspace character
- Db HT ; Horizontal tab character
- Db LF ; Line feed character
- Db VT ; Vertical tab character
- Db FF ; Form feed character
- Db CR ; Carriage return character
- SPECIAL_LENGTH Equ This Byte - Special_Table
- Special_Jump Equ This Word ; Special character jump table
- Dw Special_NULL ; Null character routine
- Dw Special_BELL ; Bell character routine
- Dw Special_BS ; Backspace character routine
- Dw Special_HT ; Horizontal tab character routine
- Dw Special_LF ; Line feed character routine
- Dw Special_VT ; Vertical tab character routine
- Dw Special_FF ; Form feed character routine
- Dw Special_CR ; Carriage return character routine
- Current_Row Dw 0 ; Current screen row number
- Current_Col Dw 0 ; Current screen column number
- Current_Fore Dw INTENSE_WHITE ; Current foreground color value
- Current_Back Dw GRAY ; Current background color value
- ;******************************************************************************
- ;
- ; Define the end of the Emulator Code Segment
- ;
- ;******************************************************************************
- Emulate Ends
- End ; End of the TTY module