mirror of https://github.com/wwarthen/RomWBW.git
21 changed files with 347 additions and 442 deletions
@ -0,0 +1,74 @@ |
|||||
|
;====================================================================== |
||||
|
; TERMINAL DRIVER FOR SBC PROJECT |
||||
|
; |
||||
|
; SERIAL PSEUDO-DEVICE DRIVER PROVIDES A TERMINAL EMULATION |
||||
|
; INTERFACE FOR VDA DEVICES |
||||
|
; |
||||
|
; WRITTEN BY: WAYNE WARTHEN -- 04/10/2016 |
||||
|
;====================================================================== |
||||
|
; |
||||
|
; TODO: |
||||
|
; - HANDLE MULTIPLE INSTANCES |
||||
|
; |
||||
|
;====================================================================== |
||||
|
; TERMINAL DRIVER - CONSTANTS |
||||
|
;====================================================================== |
||||
|
; |
||||
|
; |
||||
|
;====================================================================== |
||||
|
; TERMINAL DRIVER - ATTACH |
||||
|
;====================================================================== |
||||
|
; |
||||
|
; A VDA DRIVER CALLS THE ATTACH FUNCTION WHEN IT INITIALIZES TO |
||||
|
; CREATE A TERMINAL EMULATION INSTANCE. THE VDA DRIVER PASSES |
||||
|
; IN IT'S DISPATCH ADDRESS FOR USE BY THE EMULATION MODULES. THE |
||||
|
; TERMINAL DRIVER ADDS ITSELF AS AN ENTRY IN THE SERIAL UNIT LIST. |
||||
|
; |
||||
|
; CURRENTLY, ONLY A SINGLE INSTANCE OF THE TERMINAL DRIVER IS SUPPORTED. |
||||
|
; ANY ATTEMPT TO ATTACH AFTER THE FIRST WILL RETURN A FAILURE. |
||||
|
; |
||||
|
; C: VIDEO UNIT NUMBER OF CALLING VDA DRIVER |
||||
|
; DE: VDA DRIVER'S DISPATCH ADDRESS |
||||
|
; |
||||
|
TERM_ATTACH: |
||||
|
; |
||||
|
LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE |
||||
|
LD B,A ; PUT IT IN B |
||||
|
; |
||||
|
; SETUP EMULATOR MODULE DISPATCH ADDRESS BASED ON DESIRED EMULATION |
||||
|
; EMULATOR PASSES BACK IT'S DISPATCH ADDRESS IN DE |
||||
|
OR $FF ; PRESET FAILURE |
||||
|
#IF (VDAEMU == EMUTYP_TTY) |
||||
|
CALL TTY_INIT ; INIT TTY, DE := TTY_DISPATCH |
||||
|
#ENDIF |
||||
|
#IF (VDAEMU == EMUTYP_ANSI) |
||||
|
CALL ANSI_INIT ; INIT ANSI, DE := ANSI_DISPATCH |
||||
|
#ENDIF |
||||
|
RET NZ ; BAIL OUT ON ERROR |
||||
|
; |
||||
|
; ADD OURSELVES TO CIO DISPATCH TABLE |
||||
|
PUSH DE ; COPY EMULATOR DISPATCH ADDRESS |
||||
|
POP BC ; ... TO BC |
||||
|
LD DE,0 ; DE := DATA BLOB (NONE AT THIS POINT) |
||||
|
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED |
||||
|
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE |
||||
|
; |
||||
|
; INCREMENT DEVICE COUNT |
||||
|
LD HL,TERM_DEVCNT ; POINT TO DEVICE COUNT |
||||
|
INC (HL) ; INCREMENT IT |
||||
|
; |
||||
|
XOR A ; SIGNAL SUCCESS |
||||
|
RET ; RETURN |
||||
|
; |
||||
|
;====================================================================== |
||||
|
; TERMINAL DRIVER PRIVATE DATA |
||||
|
;====================================================================== |
||||
|
; |
||||
|
TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT |
||||
|
; |
||||
|
;====================================================================== |
||||
|
; EMULATION MODULES |
||||
|
;====================================================================== |
||||
|
; |
||||
|
#INCLUDE "tty.asm" |
||||
|
#INCLUDE "ansi.asm" |
||||
Loading…
Reference in new issue