mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 18:04:07 +00:00
75 lines
2.3 KiB
NASM
75 lines
2.3 KiB
NASM
; Figure 5-11
|
||
;
|
||
; This example shows how to use the Get and Set IOBYTE
|
||
; functions to implement a simple Terminal emulator.
|
||
; For this example to work, the BIOS must detect the
|
||
; Console Value being set to 3 (IO$CUC1) and connect
|
||
; Console Status, Input and Output functions to the
|
||
; Communications line.
|
||
;
|
||
B$DIRCONIO EQU 6 ;Direct Console Input/Output
|
||
B$GETIO EQU 7 ;Get IOBYTE
|
||
B$SETIO EQU 8 ;Set IOBYTE
|
||
B$CONST EQU 11 ;Get Console Status (sneak preview)
|
||
BDOS EQU 5 ;BDOS entry point
|
||
;
|
||
IO$CONM EQU 0000$0011B ;Console Mask for IOBYTE
|
||
IO$CCRT EQU 1 ;Console -> CRT:
|
||
IO$CUC1 EQU 3 ;Console -> User Console #1
|
||
;
|
||
TERM:
|
||
CALL SETCRT ;Connect Console -> CRT:
|
||
TERM$CKS:
|
||
CALL CONST ;Get CRT status
|
||
JZ TERM$NOKI ;No console input
|
||
CALL CONIN ;Get keyboard character
|
||
CALL SETCOMM ;Connect Console -> Comm. Line
|
||
CALL CONOUT ;Output to Comm. Line
|
||
TERM$CCS: ;Check Comm. Status
|
||
CALL CONST ;Get "Console" status
|
||
JZ TERM ;No incoming Comm. character
|
||
CALL CONIN ;Get incoming Comm. character
|
||
CALL SETCRT ;Connect Console -> CRT:
|
||
CALL CONOUT ;Output to CRT
|
||
JMP TERM$CKS ;Loop back to check keyboard status
|
||
TERM$NOKI:
|
||
CALL SETCOMM ;Connect Console -> Comm. Line
|
||
JMP TERM$CCS ;Loop back to check Comm. status
|
||
;
|
||
SETCRT: ;Connect Console -> CRT:
|
||
PUSH PSW ;Save possible data character
|
||
MVI B,IO$CCRT ;Connect Console -> CRT:
|
||
JMP SETCON ;Common Code
|
||
|
||
SETCOMM: ;Connect Console -> Comm. Line
|
||
PUSH PSW ;Save possible data character
|
||
MVI B,IO$CUC1 ;Connect Console -> Comm. Line
|
||
;Drop into SETCON
|
||
|
||
SETCON: ;Set Console Device
|
||
;New code in B (in bits 1,0)
|
||
PUSH B ;Save code
|
||
MVI C,B$GETIO ;Get current IOBYTE
|
||
CALL BDOS
|
||
ANI (NOT IO$CONM) AND 0FFH ;Preserve all but console
|
||
POP B ;Recover required code
|
||
ORA B ;OR in new bits
|
||
MOV E,A ;Ready for setting
|
||
MVI C,B$SETIO ;Function code
|
||
CALL BDOS
|
||
POP PSW ;Recover possible data character
|
||
RET
|
||
CONOUT:
|
||
MOV E,A ;Get data byte for output
|
||
MVI C,B$DIRCONIO ;Function code
|
||
JMP BDOS ;BDOS returns to CONOUT's caller
|
||
CONIN:
|
||
MVI C,B$DIRCONIO ;Function Code
|
||
MVI E,0FFH ;Indicate Console Input
|
||
JMP BDOS ;BDOS returns to CONIN's caller
|
||
CONST:
|
||
MVI C,B$CONST ;Function Code
|
||
CALL BDOS
|
||
ORA A ;Set Z-flag to result
|
||
RET
|
||
|