home *** CD-ROM | disk | FTP | other *** search
-
-
- title 'Terminal Emulation (ADM-31 with K-Pro support) 21 May 86'
-
-
- maclib z80
-
- maclib cxequ
-
- lines equ 24
-
- public ?out40,?out80,ADM31
-
- ;
- ; ADM3A
- ;
- ;
- ; ESC = row col cursor position
- ; ESC ESC ESC color set color ; added for C128 CP/M
- ; ^H cursor left
- ; ^L cursor right
- ; ^J cursor down
- ; ^K cursor up
- ; ^Z home and clear screen
- ; ^M carrage return
- ; ^G bell
-
- ;
- ; ADM31
- ;
- ;
- ; ESC = row col cursor position
- ; ESC ESC ESC color set color ; added for C128 CP/M
- ; ESC T clear to end of line
- ; ESC t clear to end of line
- ; ESC Y clear to end of screen
- ; ESC y clear to end of screen
- ; ESC : home & clear screen
- ; ESC * home & clear screen
- ; ESC ) Half intensity on
- ; ESC ( Half intensity off
- ; ESC G 4 Reverse video on
- ; ESC G 2 Blinking on
- ; ESC G 0 Rev. video and blinking off
- ; ESC E Insert line
- ; ESC Q Insert Character
- ; ESC R Delete Line
- ; ESC W Delete Character
- ; ^H cursor left
- ; ^L cursor right
- ; ^J cursor down
- ; ^K cursor up
- ; ^Z home and clear screen
- ; ^M carriage return
- ; ^G bell
- ;
- page
- ;
- ; KPRO II Terminal control sequences
- ;
- ;
- ; Cursor Control
- ;
- ; ^H cursor left (bs)
- ; ^L cursor right
- ; ^J cursor down
- ; ^K cursor up
- ; ^^ home cursor
- ; ^Z home cursor & clear screen
- ; ^M carriage return
- ;
- ; Cursor Positioning
- ;
- ; ESC = R C (R & C =' '+position)
- ;
- ; Line Insert/Delete
- ;
- ; ESC E Line Insert
- ; ESC R Line Delete
- ;
- ; Clear to End of Screen/Line
- ;
- ; ^X Clear to End of Line
- ; ^W Clear to End of Screen
- ;
- ; Set Greek or ASCII (not supported)
- ;
- ; ESC A Set ASCII
- ; ESC G Set Greek (lower case letters print as Greek Alphabet)
- ;
- ; KAYPRO 84 (???) screen commands
- ;
- ; ESC B <num> turn attrubute on
- ; ESC C <num> turn attrubute off
- ;
- ; where <num> is defined as:
- ; 0=reverse video
- ; 1= <half intensity>
- ; 2= <blink>
- ; 3= <underline>
- ;
- ; <best guess>
- ;
- ; The following two sequences are
- ; use but I do not know what function
- ; they perform. (added 21 May 86)
- ;
- ; ESC D <num1><num2><num3><num4>
- ; ESC L <num1><num2><num3><num4>
- ;
- page
-
- dseg
- ;
- ;
- ;
- ?out40:
- mvi a,FR$40
- lxi h,parm$area$40
- jr out$cont
-
- ;
- ;
- ;
- ?out$80:
- xra a ; 80 column offset is 0
- lxi h,parm$area$80
- out$cont:
- sta fun$offset
- mvi a,7fh
- ana c
- mov c,a
- shld parm$base
- lhld emulation$adr
- pchl
-
- page
- ;
- ; ADM-31 terminal emulation
- ;
- ADM31:
- lhld parm$base ; 1st parm is exec adr (2 bytes)
- mov a,m
- inx h
- mov h,m
- mov l,a
-
- ora h ; L is in A already, test HL=0
- mov a,c ; C is char to output
- jrz start$checking
- pchl
-
- ;
- ;
- ;
- start$checking:
- lxi h,control$table
- lxi b,cnt$tbl$lng
- ccir
- lxi h,control$exec$adr
- jrz find$exec$adr
-
- cpi 20h
- rc
-
- do$direct:
- mov d,a
- TJMP FR$wr$char
-
- page
- ;
- ;
- ;
- char$esc: ; ESC
- call cont$later
- ;
- ; ESC char look for char in the ESC table
- ;
- call remove$exec$adr
- lxi h,esc$table
- lxi b,esc$tbl$lng
- ccir
- rnz ; bad esc sequence
- lxi h,esc$exec$adr
-
- find$exec$adr:
- dad b
- dad b
- mov a,m
- inx h
- mov h,m
- mov l,a
- pchl
-
-
-
- page
- ;
- ;
- ;
- cont$later:
- pop h ; get address to cont at in H
- jr save$exec$adr ; save it
- ;
- ;
- ;
- remove$exec$adr:
- lxi h,0
- save$exec$adr:
- xchg
- lhld parm$base
- mov m,e
- inx h
- mov m,d
- ret
-
-
- ;
- ;
- ;
- esc$esc:
- call cont$later
- ;
- ; check for ESC ESC ESC
- ;
- cpi esc ; check if 3rd char is an ESC
- jrnz remove$exec$adr
- call cont$later
- ;
- ; set current character as the attr
- ;
- mov b,a
- TCALL FR$color
- jr remove$exec$adr
-
- page
- ;
- ;
- ;
- esc$equ:
- call cont$later
- ;
- ; ESC = R
- ;
- lhld parm$base
- inx h
- inx h
- sui ' ' ; remove ascii bias
- mov m,a
- cpi '8'-' ' ; test for line 25 (A=24?)
- jrnz not$status$line ; no, jmp
- inr a ; yes, A=25
- sta paint$size ; set 40 column repaint to 25 lines
- not$status$line:
- call cont$later
- ;
- ; ESC = R C (go do it)
- ;
- sui ' '
- mov e,a ; column # to E
-
- lhld parm$base
- inx h
- inx h
- mov d,m ; row # to D
- TCALL FR$cursor$pos
- jr remove$exec$adr
-
- page
- ;
- ;
- ;
- char$cnt$z: ; ^Z home and clear screen
- lxi d,lines*256+0 ; B=24(row) C=0(col)
- TCALL FR$cursor$pos
- call esc$t ; clear the status line
- lxi d,0
- TCALL FR$cursor$pos
- esc$y:
- TJMP FR$CES ; clear to end of screen
-
- home$cursor:
- lxi d,0
- TJMP FR$cursor$pos
-
- esc$t:
- TJMP FR$CEL ; clear to end of line
-
- ;
- ;
- ;
- do$cr:
- TJMP FR$do$cr
-
- ;
- ;
- ;
- cursor$rt:
- TJMP FR$cursor$rt
-
- ;
- ;
- ;
- cursor$up:
- TJMP FR$cursor$up
-
- ;
- ;
- ;
- cursor$down:
- TJMP FR$cursor$down
-
- ;
- ;
- ;
- cursor$left:
- TJMP FR$cursor$left
-
- page
-
- ;
- ; placed in common so that link and gencpm will not
- ; cause this code to show up at address 0D000h to 0DFFFh
- ;
- char$cnt$g: ; ^G bell
- RJMP FR$bell
-
- ;
- ; delete character
- ;
- esc$W:
- TJMP FR$char$del
-
- ;
- ; delete line
- ;
- esc$R:
- TJMP FR$line$del
-
- ;
- ; insert character
- ;
- esc$Q:
- TJMP FR$char$ins
-
- ;
- ; insert line
- ;
- esc$E:
- TJMP FR$line$ins
-
- page
- ;
- ; ESC C <num> atribute off
- ;
- esc$C:
- call cont$later
- lxi b,4*256+4 ; max+1 num, offset
- jr esc$num$cont
-
- ;
- ; ESC B <num> atribute on
- ;
- esc$B:
- call cont$later
- lxi b,4*256+0 ; max+1 num, offset
- jr esc$num$cont
- ;
- ; Set Attribute sequence
- ;
- esc$G:
- call cont$later
- lxi b,5*256+8 ; max+1 num, table offset
- esc$num$cont:
- call remove$exec$adr
- sui '0' ; remove ascii bias
- cmp b ; number of functions
- rnc
- add c ; get offset
- mov c,a
- mvi b,0
- lxi h,esc$num$tbl
- jmp find$exec$adr
-
- page
- ;
- ;
- ;
- esc$D:
- esc$L:
- call cont$later ; wait for num1
- call cont$later ; wait for num2
- call cont$later ; wait for num3
- call cont$later ; wait for num4
- jmp remove$exec$adr
-
- page
- ;
- ; Half Intensity Off
- ;
- esc$lfp:
- mvi b,00000001b ; turn intensity up
- jr set$atr$on
- ;
- ; Half Intensity On
- ;
- esc$rtp:
- mvi b,00000001b ; turn intensity down
- jr set$atr$off
-
- ;
- ; Rev. Video, blink, atl char set, and underline off
- ;
- esc$G$0:
- mvi c,10000000b ; turn attributes off
- mvi b,11110000b ; attribute bit to change
- jr set$FR$attr
-
- ;
- ; Select alt character set
- ;
- esc$G$1:
- mvi b,10000000b ; select alt character set
- jr set$atr$off
-
- ;
- ; Blinking On
- ;
- esc$B$2: ; turn flash ON ???
- esc$G$2:
- mvi b,00010000b ; turn on blink attr
- jr set$atr$on
- ;
- ;
- ;
- esc$C$2: ; turn flash OFF ???
- mvi b,00010000b
- jr set$atr$off
- ;
- ; Under line
- ;
- esc$B$3: ; turn underline ON ???
- esc$G$3:
- mvi b,00100000b ; turn on underline bit
- jr set$atr$on
- ;
- ;
- ;
- esc$C$3: ; turn under line OFF ???
- mvi b,00100000b
- jr set$atr$off
- ;
- ; Reverse Video On
- ;
- esc$B$0:
- esc$G$4:
- mvi b,01000000b ; turn attributes on
-
- set$atr$on:
- mov c,b ; reverse attr
- set$FR$attr:
- TJMP FR$attr
-
- ;
- ;
- ;
- esc$C$1: ; turn half bright OFF ???
- mvi b,00000001b
- jr set$atr$on
-
- ;
- ;
- ;
- esc$B$1: ; set half bright ON ???
- mvi b,00000001b
- jr set$atr$off
-
- ;
- ; turn reverse video off
- ;
- esc$C$0:
- mvi b,01000000b ; attribute to turn off
- set$atr$off:
- mov a,b
- cma
- ana b
- mov c,a
- TJMP FR$attr
-
- page
- ;
- ; table scanned top to bottom
- ;
- control$table:
- db 07h ; ^G bell
- db bs ; ^H cursor left
- db lf ; ^J cursor down
- db 0Bh ; ^K cursor up
- db 0Ch ; ^L cursor right
- db cr ; ^M carrage return
- db 1Ah ; ^Z home and clear screen
- db esc ; ESC
- db 18h ; ^X Clear to End of Line (K-Pro)
- db 17h ; ^W Clear to End of Screen (K-Pro)
- db 1Eh ; ^^ home cursor (K-Pro)
-
- cnt$tbl$lng equ $-control$table
-
- ;
- ; table scanned bottom to top
- ;
- control$exec$adr:
- dw home$cursor ; ^^ home cursor (K-Pro)
- dw esc$y ; ^W CES (K-Pro)
- dw esc$t ; ^X CEL (K-Pro)
- dw char$esc ; ESC
- dw char$cnt$z ; ^Z home and clear screen
- dw do$cr ; ^M carriage return
- dw cursor$rt ; ^L cursor right
- dw cursor$up ; ^K cursor up
- dw cursor$down ; ^J cursor down
- dw cursor$left ; ^H cursor left
- dw char$cnt$g ; ^G bell
-
-
- page
- ;
- ; table scanned top to bottom
- ;
- esc$table:
- db '=' ; ESC = R C
-
- db 'T' ; ESC T clear to end of line
- db 't' ; ESC t clear to end of line
- db 'Y' ; ESC Y clear to end of screen
- db 'y' ; ESC y clear to end of screen
- db ':' ; ESC : home & clear screen
- db '*' ; ESC * home & clear screen
-
- db 'E' ; ESC E Insert line
- db 'Q' ; ESC Q Insert Character
- db 'R' ; ESC R Delete Line
- db 'W' ; ESC W Delete Character
-
- db ')' ; ESC ) Half intensity on
- db '(' ; ESC ( Half intensity off
- db 'G' ; ESC G 4 Reverse video on
- ; ESC G 2 Blinking on
- ; ESC G 0 Rev. video and blinking off
- db 'B' ; ESC B <num> atribute on
- db 'C' ; ESC C <num> atribute off
- db esc ; ESC ESC
- db 'D' ; ESC D ???
- db 'L' ; ESC L ???
-
- esc$tbl$lng equ $-esc$table
-
-
- ;
- ; table scanned bottom to top
- ;
- esc$exec$adr:
- dw esc$L ; ESC L A kaypro function ???
- dw esc$D ; ESC D A kaypro function ???
- dw esc$esc ; ESC ESC ESC color
- dw esc$C ; ESC C <num> atribute off
- dw esc$B ; ESC B <num> atribute on
- dw esc$G ; ESC G 4 Reverse video on
- ; ESC G 2 Blinking on
- ; ESC G 0 Rev. video and blinking off
- dw esc$lfp ; ESC ( Half intensity off
- dw esc$rtp ; ESC ) Half intensity on
-
- dw esc$W ; ESC W Delete Character
- dw esc$R ; ESC R Delete Line
- dw esc$Q ; ESC Q Insert Character
- dw esc$E ; ESC E Insert line
-
- dw char$cnt$z ; ESC * home & clear screen
- dw char$cnt$z ; ESC : home & clear screen
- dw esc$y ; ESC y clear to end of screen
- dw esc$y ; ESC Y clear to end of screen
- dw esc$t ; ESC t clear to end of line
- dw esc$t ; ESC T clear to end of line
-
- dw esc$equ ; ESC = RC
- ;
- ;
- ;
- esc$num$tbl:
- dw esc$b$0 ; ESC B0 reverse video ON
- dw esc$b$1 ; ESC B1 ??? half bright ON
- dw esc$b$2 ; ESC B2 ??? blink ON
- dw esc$b$3 ; ESC B3 ??? under line ON
-
- dw esc$c$0 ; ESC C0 reverse video OFF
- dw esc$c$1 ; ESC C1 ??? half bright OFF
- dw esc$c$2 ; ESC C2 ??? blink OFF
- dw esc$c$3 ; ESC C3 ??? under line OFF
-
- dw esc$g$0 ; ESC G0 clear attributes (all G functions)
- dw esc$g$1 ; ESC G1 alt char set
- dw esc$g$2 ; ESC G2 blink attr on
- dw esc$g$3 ; ESC G3 underline attr on
- dw esc$g$4 ; ESC G4 reverse video on
-