You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

370 lines
14 KiB

; terminal.asm 2/17/2012 dwg - review for release 1.5.1.0
; terminal.asm 12/26/2011 dwg -
; Copyright (C) 2011-2012 Douglas Goodall Licensed under GPL Ver 3.
;
; This file is part of NuBiosDWG and is free software: you can
; redistribute it and/or modify it under the terms of the GNU
; General Public License as published by the Free Software Foundation,
; either version 3 of the License, or (at your option) any later version.
; This file is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
; You should have received a copy of the GNU General Public License
; along with it. If not, see <http://www.gnu.org/licenses/>.
; The termbind lib is the home of the macros that are the
; ; front end for access to library routines that implement
; ; terminal specific functionality.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Table 4-11 VT52 Escape Sequences;
; ESC A; Cursor up.;; ESC B; Cursor down.;; ESC C; Cursor right.;
; ESC D; Cursor left.;; ESC F; Enter graphics mode.;; ESC G; Exit graphics mode.;; ESC H; Cursor to home
; ANSI
; CSI = <esc>[
; CSI n A CUU - CUrsor Up, n cells
; CSI n B CUD - CUrsor Down, n cells
; CSI n C CUF - CUrsor Forward
; CSI n D CUB - CUrsor Back
; CSI n E CNL - Cursor Next Line
; CSI n F CPL - Cursor Previous Line
; CSI n G CHA - Cursor Horizontal Absolute
; CSI n ; m H CUP - Cursor Position,n = row, m = col (1rel)
; CSI 0 J ED - clear from cursor to EOS
; CSI 1 J ED - clear from cursor to BOS
; CSI 2 J ED - clear screen
; CSI n K EL - 0-clr-2eol,1-clr-to-bol,2-clr-line
; CSI n S SU - Scroll Up
; CSI n T SD - Scroll Down
; CSI s SCP - Save Cursor Position
; CSI u RCP - Restore Cursor Position
; CSI n [;k] m SGR - Select Graphic Rendition
; CSI 0 m SGR - Reset / Normal
; CSI 1 m SGR - Bright or Bold
; CSI 3 m SGR - italic on
; CSI 4 m SGR - underline (single) on
; CSI 5 m SGR - blink slow
; CSI 6 m SGR - blink rapid
; CSI 7 m SGR - negative
; CSI 8 m SGR - Conceal
; CSI 9 m SGR - Crossed Out
; CSI 10 m SGR - Primary (default) Font
; CSI 21 m SGR - Bright Bold Off
; CSI 22 m SGR - Normal COlor or Intensity
; CSI 23 m SGR - Not Italic
; CSI 24 m SGR - Not underline
; CSI 25 m SGR - Not Blink
; CSI 27 m SGR - Image Positive
; CSI 28 m SGR - Reveal
; CSI 29 m SGR - Not Crossed Out
; CSI 30 m SGR - Black CSI 30 ; 1 m (light black)
; CSI 31 m SGR - Red CSI 31 ; 1 m (light red)
; CSI 32 m SGR - Green CSI 32 ; 1 m (light green)
; CSI 33 m SGR - Yellow CSI 33 ; 1 m (light yellow)
; CSI 34 m SGR - Blue CSI 34 ; 1 m (light blue)
; CSI 35 m SGR - Magenta CSI 35 ; 1 m (light magenta)
; CSI 36 m SGR - Cyan CSI 36 ; 1 m (light cyan)
; CSI 37 m SGR - White CSI 37 ; 1 m (light white)
; CSI 39 m SGR - Set Default Text Color
; CSI 40-47 m SGR - Set Background Color
; CSI 6 n DSR - Device Status Report
; VT100
; VT220
; WYSE
; WY50
; ESC = r c Set Cursor Position (see row codes)
; ESC * Clear screen to nulls
; ESC + Clear screen to spaces
maclib portab
maclib std
maclib cpmbios
maclib cpmbdos
maclib bioshdr
maclib hbios
maclib cnfgdata
; enter with the number in de
public xprdec
0000 216801 xprdec: lxi h,dr
0003 19 dad d
0004 19 dad d
0005 19 dad d
0006 19 dad d
0007 EB xchg
0008 0E09 mvi c,9
000A CD0500 call 5
000D C9 ret
public xcrtinit
xcrtinit:
000E CD0000 call xgetsc
0011 214480 lxi h,termtype
0014 7E mov a,m
0015 326203 sta ttyp
0018 C9 ret
public xcrtclr
xcrtclr:
0019 3A6203 lda ttyp
001C FE01 cpi TERM$ANSI
001E C24000 jnz xnotansi1
0021 0E021E1BCD mvi c,2 ! mvi e,27 ! call 5
0028 0E021E5BCD mvi c,2 ! mvi e,'[' ! call 5
002F 0E021E32CD mvi c,2 ! mvi e,'2' ! call 5
0036 0E021E4ACD mvi c,2 ! mvi e,'J' ! call 5
003D C3A700 jmp xdone1
xnotansi1:
0040 FE02 cpi TERM$WYSE
0042 C26600 jnz xnotwyse1
conout 27
0045+F5 PUSH PSW
0046+C5 PUSH B
0047+D5 PUSH D
0048+E5 PUSH H
0049+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
004B+1E1B MVI E,27 ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
004D+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
0050+E1 POP H
0051+D1 POP D
0052+C1 POP B
0053+F1 POP PSW
conout '+'
0054+F5 PUSH PSW
0055+C5 PUSH B
0056+D5 PUSH D
0057+E5 PUSH H
0058+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
005A+1E2B MVI E,'+' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
005C+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
005F+E1 POP H
0060+D1 POP D
0061+C1 POP B
0062+F1 POP PSW
0063 C3A700 jmp xdone1
xnotwyse1:
0066 FE03 cpi TERM$VT52
0068 C23201 jnz xdone
conout 27
006B+F5 PUSH PSW
006C+C5 PUSH B
006D+D5 PUSH D
006E+E5 PUSH H
006F+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
0071+1E1B MVI E,27 ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
0073+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
0076+E1 POP H
0077+D1 POP D
0078+C1 POP B
0079+F1 POP PSW
conout 'H' ; Cursor to Hoe
007A+F5 PUSH PSW
007B+C5 PUSH B
007C+D5 PUSH D
007D+E5 PUSH H
007E+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
0080+1E48 MVI E,'H' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
0082+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
0085+E1 POP H
0086+D1 POP D
0087+C1 POP B
0088+F1 POP PSW
conout 27
0089+F5 PUSH PSW
008A+C5 PUSH B
008B+D5 PUSH D
008C+E5 PUSH H
008D+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
008F+1E1B MVI E,27 ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
0091+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
0094+E1 POP H
0095+D1 POP D
0096+C1 POP B
0097+F1 POP PSW
conout 'J' ; Erase to End of Screen
0098+F5 PUSH PSW
0099+C5 PUSH B
009A+D5 PUSH D
009B+E5 PUSH H
009C+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
009E+1E4A MVI E,'J' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
00A0+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
00A3+E1 POP H
00A4+D1 POP D
00A5+C1 POP B
00A6+F1 POP PSW
xdone1:
00A7 C9 ret
; h=line l=col
public xcrtlc
xcrtlc:
00A8 3A6203 lda ttyp
00AB FE01 cpi TERM$ANSI
00AD CA0601 jz xisansi
00B0 FE02 cpi TERM$WYSE
00B2 CABB00 jz xiswyse
00B5 FE03 cpi TERM$VT52
00B7 CA3301 jz xisvt52
00BA C9 ret
xiswyse:
00BB 7C mov a,h
00BC 326003 sta templine
00BF 7D mov a,l
00C0 326103 sta tempcol
conout 27
00C3+F5 PUSH PSW
00C4+C5 PUSH B
00C5+D5 PUSH D
00C6+E5 PUSH H
00C7+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
00C9+1E1B MVI E,27 ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
00CB+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
00CE+E1 POP H
00CF+D1 POP D
00D0+C1 POP B
00D1+F1 POP PSW
conout '='
00D2+F5 PUSH PSW
00D3+C5 PUSH B
00D4+D5 PUSH D
00D5+E5 PUSH H
00D6+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
00D8+1E3D MVI E,'=' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
00DA+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
00DD+E1 POP H
00DE+D1 POP D
00DF+C1 POP B
00E0+F1 POP PSW
00E1 3A6003 lda templine
00E4 5F mov e,a
00E5 1600 mvi d,0
00E7 21F802 lxi h,wy50row
00EA 19 dad d
00EB 2B dcx h
00EC 5E mov e,m
00ED 0E02 mvi c,2
00EF CD0500 call BDOS
;
00F2 3A6103 lda tempcol
00F5 5F mov e,a
00F6 1600 mvi d,0
00F8 211003 lxi h,wy50col
00FB 19 dad d
00FC 2B dcx h
00FD 5E mov e,m
00FE 0E02 mvi c,2
0100 CD0500 call BDOS
0103 C33201 jmp xdone
;------->
xisansi:
0106 E5 push h
0107 E5 push h
0108 0E021E1BCD mvi c,2 ! mvi e,27 ! call 5
010F 0E021E5BCD mvi c,2 ! mvi e,'[' ! call 5
0116 E1 pop h
0117 5C mov e,h
0118 1600 mvi d,0
011A CD0000 call xprdec
011D 0E021E3BCD mvi c,2 ! mvi e,';' ! call 5
0124 E1 pop h
0125 5D mov e,l
0126 1600 mvi d,0
0128 CD0000 call xprdec
012B 0E021E66CD mvi c,2 ! mvi e,66h ! call 5
xdone:
0132 C9 ret
xisvt52:
0133 E5 push h
0134 E5 push h
conout 27
0135+F5 PUSH PSW
0136+C5 PUSH B
0137+D5 PUSH D
0138+E5 PUSH H
0139+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
013B+1E1B MVI E,27 ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
013D+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
0140+E1 POP H
0141+D1 POP D
0142+C1 POP B
0143+F1 POP PSW
conout 'Y'
0144+F5 PUSH PSW
0145+C5 PUSH B
0146+D5 PUSH D
0147+E5 PUSH H
0148+0E02 MVI C,CWRITE ; SET FOR CONSOLE OUTPUT BDOS CALL
014A+1E59 MVI E,'Y' ; PLACE OUTPUT CHARACTER IN E AS REQUIRED
014C+CD0500 CALL BDOS ; CALL BDOS FUNCTION ENTRY POINT
014F+E1 POP H
0150+D1 POP D
0151+C1 POP B
0152+F1 POP PSW
0153 E1 pop h
0154 7C mov a,h
0155 C620 adi 32
0157 5F mov e,a
0158 0E02 mvi c,CWRITE
015A CD0500 call BDOS
015D E1 pop h
015E 7D mov a,l
015F C620 adi 32
0161 5F mov e,a
0162 0E02 mvi c,CWRITE
0164 CD0500 call BDOS
0167 C9 ret
public dr
0168 3024202031dr db '0$ ','1$ ','2$ ','3$ ','4$ '
017C 3524202036 db '5$ ','6$ ','7$ ','8$ ','9$ '
0190 3130242031 db '10$ ','11$ ','12$ ','13$ ','14$ '
01A4 3135242031 db '15$ ','16$ ','17$ ','18$ ','19$ '
01B8 3230242032 db '20$ ','21$ ','22$ ','23$ ','24$ '
01CC 3235242032 db '25$ ','26$ ','27$ ','28$ ','29$ '
01E0 3330242033 db '30$ ','31$ ','32$ ','33$ ','34$ '
01F4 3335242033 db '35$ ','36$ ','37$ ','38$ ','39$ '
0208 3430242034 db '40$ ','41$ ','42$ ','43$ ','44$ '
021C 3435242034 db '45$ ','46$ ','47$ ','48$ ','49$ '
0230 3530242035 db '50$ ','51$ ','52$ ','53$ ','54$ '
0244 3535242035 db '55$ ','56$ ','57$ ','58$ ','59$ '
0258 3630242036 db '60$ ','61$ ','62$ ','63$ ','64$ '
026C 3635242036 db '65$ ','66$ ','67$ ','68$ ','69$ '
0280 3730242037 db '70$ ','71$ ','72$ ','73$ ','74$ '
0294 3735242037 db '75$ ','76$ ','77$ ','78$ ','79$ '
02A8 3830242038 db '80$ ','81$ ','82$ ','83$ ','84$ '
02BC 3835242038 db '85$ ','86$ ','87$ ','88$ ','89$ '
02D0 3930242039 db '90$ ','91$ ','92$ ','93$ ','94$ '
02E4 3935242039 db '95$ ','96$ ','97$ ','99$ ','100$'
0000 = SINGLEQUOTE equ 0
0000 = RIGHTQUOTE equ 0
0000 = LEFTQUOTE equ 0
02F8 2021222324wy50row db ' !"#$%&'
02FF 27 db 39
0300 28292A2B2C db '()*+,-./01234567'
0310 2021222324wy50col db ' !"#$%&'
0317 27 db 39
0318 28292A2B2C db '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'
0350 60 db 96
0351 6162636465 db 'abcdefghijklmno'
0360 00 templine db 0
0361 00 tempcol db 0
0362 00 ttyp db 0
0363 end