; 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 . ; 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 = [ ; 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