mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-27 02:14:19 +00:00
Upload
Digital Research
This commit is contained in:
75
CONTRIBUTIONS/cpm-handbook/cpmsrc/FIG5-11.ASM
Normal file
75
CONTRIBUTIONS/cpm-handbook/cpmsrc/FIG5-11.ASM
Normal file
@@ -0,0 +1,75 @@
|
||||
; 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
|
||||
|
||||
Reference in New Issue
Block a user