forked from z80playground/cpm-fat
-
Notifications
You must be signed in to change notification settings - Fork 3
/
ZINS.SCR
1 lines (1 loc) · 10 KB
/
ZINS.SCR
1
\ ZINS - Information 971228es ZINS performs automatic terminal installation for DX-Forth and its applications when running Z-System (ZCPR3, NZCOM etc). ZINS may be used as part of a general terminal install program or included in DX-Forth applications to dynamically adjust to the current TermCap in memory if Z-System is found present. Note: Due to the Turbo Pascal compatible install system used by DX-Forth, certain Z-System cursor motion commands cannot be properly emulated. These exceptions are handled as follows - '%>xy' is treated as '%.' '%D' is treated as '%2' if the number of screen columns is less than 100 or as '%3' otherwise. \ ZINS - Load block 971228esFORTH DEFINITIONS DECIMAL APPLICATION CR .( loading ZINS ) 2 LOAD \ ZINS - (Z1) (Z2) 971228esHEX \ Parse null-terminated string CODE (Z1) ( de=src hl=dst ; de=src' b=len ) 0FF B MVI H PUSH 1 $: B INR H INX D LDAX D INX A ORA 3 $ JZ CHAR \ CPI 2 $ JNZ D LDAX D INX 2 $: A M MOV 1 $ JMP 3 $: H POP B M MOV RET END-CODE \ Place counted string CODE (Z2) ( de=src hl=dst b=len ) B M MOV B INR 1 $: B DCR RZ D LDAX D INX H INX A M MOV 1 $ JMP END-CODE --> \ ZINS - (Z3) 971228es\ Parse cursor motion string CODE (Z3) ( de=src hl=dst ; de=scr' ) 0FF B MVI A XRA 019C STA 019D STA \ zero offsets 016B STA 016C STA H PUSH \ reset temp flags 1 $: B INR H INX 2 $: D LDAX D INX A ORA 4 $ JZ \ end CHAR % CPI 5 $ JZ \ command follows CHAR \ CPI 3 $ JNZ D LDAX D INX \ literal char follows 3 $: A M MOV 1 $ JMP 4 $: H POP B M MOV \ insert count 016B LDA A ORA RZ \ make col first if req. 019C LHLD L A MOV H L MOV A H MOV 019C SHLD 019E LHLD L A MOV H L MOV A H MOV 019E SHLD RET --> \ ZINS - (Z3) 971228es 5 $: D LDAX D INX \ get next char CHAR a CPI 6 $ JC \ make uppercase CHAR z 1+ CPI 6 $ JNC 20 SUI 6 $: CHAR + CPI 0B $ JZ \ binary + offset CHAR . CPI 0D $ JZ \ binary CHAR > CPI 0E $ JZ \ binary greater + offset CHAR R CPI 0F $ JZ \ output col first CHAR I CPI 10 $ JZ \ home is 1,1 CHAR N CPI 11 $ JZ \ insert a null CHAR 2 CPI 8 $ JZ \ decimal 2 digits CHAR 3 CPI 7 $ JZ \ decimal 3 digits CHAR D CPI 3 $ JNZ \ decimal else unknown command --> \ ZINS - (Z3) 971228es 0168 LDA 64 CPI 8 $ JC \ test if max columns < 100 7 $: CHAR 0 M MVI H INX B INR \ insert '000' 8 $: CHAR 0 M MVI H INX B INR \ insert '00' CHAR 0 M MVI A XRA \ set decimal 9 $: 019B STA H PUSH 019F H LXI 016C LDA \ set row or col position A ORA 0A $ JZ H DCX \ in cm template 0A $: B M MOV M INR 1 A MVI 016C STA \ set flag H POP 1 $ JMP --> \ ZINS - (Z3) 971228es 0B $: H PUSH 019D H LXI \ binary + offset 016C LDA A ORA 0C $ JZ H DCX 0C $: D LDAX D INX M ADD A M MOV H POP 0D $: A XRA A M MOV \ binary A INR 9 $ JMP \ set mode 0E $: D INX D INX 0D $ JMP \ skip parameters 0F $: 016B STA 2 $ JMP \ set col first flag 10 $: H PUSH 019C H LXI M INR \ home co-ords = 1,1 H INX M INR H POP 2 $ JMP 11 $: A XRA 3 $ JMP \ insert null END-CODE --> \ ZINS - ZINS 971228es\ Install terminal patch area with Z-System TermCap CODE ZINS ( -- ) 0109 LHLD H A MOV L ORA NEXT JZ \ exit if bad zenv B PUSH \ save forth IP 02B D LXI D DAD M A MOV 0124 STA \ cpu speed MHz 6 D LXI D DAD M A MOV 0168 STA \ number of columns H INX M A MOV 0169 STA \ number of rows 04E D LXI D DAD XCHG 0153 H LXI \ terminal name 0E B MVI ' (Z2) CALL XCHG H INX H INX 014F B LXI M A MOV A ORA 2 $ JNZ \ up arrow 5 A MVI 2 $: B STAX B INX H INX M A MOV A ORA 3 $ JNZ \ down arrow 18 A MVI 3 $: B STAX --> \ ZINS - ZINS 971228es B INX H INX M A MOV A ORA 4 $ JNZ \ right arrow 4 A MVI 4 $: B STAX B INX H INX M A MOV A ORA 5 $ JNZ \ left arrow 13 A MVI 5 $: B STAX H INX M A MOV 01BA STA \ delay after cls H INX M A MOV 01A0 STA \ delay after cm H INX M A MOV 01CE STA \ delay after cleol H INX XCHG 016B H LXI ' (Z1) CALL \ clear screen D PUSH 016C D LXI 01A8 H LXI 0 M MVI \ zero home B A MOV 6 CPI 6 $ JC \ if cls too long 5 SUI A C MOV 5 B MVI \ split between ... --> \ ZINS - ZINS 971228es ' (Z2) CALL \ home sequence and C B MOV 016C 5 + D LXI 6 $: 01A2 H LXI ' (Z2) CALL \ cls sequence D POP 018B H LXI ' (Z3) CALL \ cursor motion 01BC H LXI ' (Z1) CALL \ clear-to-EOL 01C2 H LXI ' (Z1) CALL \ hilight 01C8 H LXI ' (Z1) CALL \ normal 016B H LXI ' (Z1) CALL \ video init 017B H LXI ' (Z1) CALL \ video exit 01B4 H LXI ' (Z1) CALL \ delete line 01AE H LXI ' (Z1) CALL \ insert line B POP \ restore forth IP NEXT JMP END-CODE DECIMAL