home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / VDE267SC.LBR / VI.AZM / VI.ASM
Assembly Source File  |  2000-06-30  |  42KB  |  2,308 lines

  1. ;*** VINSTALL.ASM - Installation Utility
  2. ;*** for VDE (Video Display Editor) v2.66
  3. ;*** (c)1988 E. Meyer - For nonprofit use only.
  4. ;    Last modified 06/07/88
  5. ;  ---------------------------
  6. ;USAGE:    A>vinstall vde.com [instfil]
  7. ;  ---------------------------
  8. ; Patch field 0106-010F:
  9. ;0106: version  0108: upat,len  010B: basic,esc,^O,^Q tables
  10. ; Version message 0113-012F
  11. ; User data field: 0130-015F
  12. ;BAKFlg,FMode,FDflt1/2(8),InsDfl,RulFlg,HCDflt,HypFlg,
  13. ;LfMarg,RtMarg,Ovlap,DirSys,FixDsk(2),NoTrap,Ring,Help,AltHdr,NoHdrF,
  14. ;MHz,Timer,TabCnt,VarTab(8),WildCd,BlkChr,TogTbl(4),NTgTbl(4)
  15. ; VDE terminal installation: 0160-01BF (TRMLEN)
  16. ;ID(16);View,AuWrap,Lines,UsrKys(DEL,u,d,r,l)
  17. ;ClL;TInit,TUInit;AltOn;AltOff;AltBit;Filter
  18. ;PosMod,PCu(4),PosDly;InsL,DelL,OddDel
  19. ; VDM terminal installation 0160-01BF
  20. ;ID(16);View,Extra,Lines,UsrKys(DEL,u,d,r,l)
  21. ;TInit,TUInit;CuOff;CuOn
  22. ;VidRAM;VidIN;VidOUT
  23. ; PRINTER installation 01C0-024F
  24. ;ID(16);UseLF,FormL,PTMarg,PrLMrg;PInit,PUInit
  25. ;PCodes (8*8); UCodes (4*8)
  26. ; USER PATCHES: 0250-027F
  27. ; MACRO KEYS: 0280-047F (VDESTRT)
  28. ;
  29. OPTIONS    EQU    0130H    ;<---keep these updated!
  30. INSTALL    EQU    0160H
  31. PRINTER    EQU    01C0H
  32. USERPAT    EQU    0250H
  33. MACKEYS    EQU    0280H
  34. VDESTRT    EQU    0480H
  35. ;
  36. StrSiz    EQU    128        ;from VDE.ASM
  37. Keys    EQU    BUF+(MACKEYS-100H)    ;where the keys are (512 bytes)
  38. ;
  39. ;  ---------------------------
  40. ;
  41. VVERSN    EQU    6602H    ;VDE.COM compatibility version (options etc)
  42. IVERSN    EQU    6002H    ;for inst files
  43. KVERSN    EQU    5002H    ;for key files
  44. PVERSN    EQU    6602H    ;for prt files
  45. ;
  46.     ORG    0100H
  47. ;
  48. START:    SUB    A        ;check for Z80
  49.     RET    PE
  50.     LD    (USTAK),SP
  51.     LD    SP,STACK
  52.     LD    HL,(0001H)
  53.     LD    DE,3
  54.     ADD    HL,DE
  55.     ADD    HL,DE
  56.     LD    (GETCH+1),HL
  57.     ADD    HL,DE
  58.     LD    (PUTCH+1),HL
  59.     LD    HL,COMTYP
  60.     LD    DE,FCB+9
  61.     LD    BC,3
  62.     LDIR
  63.     CALL    SPMSG
  64.     DB    'VDE(M) 2.66 INSTALL (06/88)',CR,LF
  65.     DB    '(c)1988 E.Meyer',CR,LF,LF
  66.     DB    '[Opening ',0
  67.     LD    HL,FCB+1
  68.     LD    B,11
  69.     CALL    BHLMSG
  70.     LD    HL,FCB2        ;set up install file fcb
  71.     LD    DE,IFCB
  72.     LD    BC,12
  73.     LDIR
  74.     LD    DE,FCB        ;open VDE.COM
  75.     LD    C,FOPN
  76.     CALL    BDOS
  77.     INC    A
  78.     JP    Z,NOFMSG
  79.     LD    HL,BUF
  80.     LD    DE,FCB
  81.     LD    B,VDESTRT/80H-2
  82.     CALL    READLP
  83.     JP    C,RDERR
  84.     LD    HL,(BUF+6)    ;check version at 0106-7
  85.     RES    7,L
  86.     LD    DE,VVERSN
  87.     SBC    HL,DE
  88.     JP    NZ,VERR
  89.     CALL    ISVDE        ;set up inst filetype
  90.     JR    Z,IFIL1
  91.     LD    A,'M'
  92.     LD    (VDETYP+2),A
  93. IFIL1:    LD    DE,IFCB+9    ;and use it if needed
  94.     LD    A,(DE)
  95.     CP    ' '
  96.     JR    NZ,IFIL1B
  97.     LD    HL,VDETYP
  98.     LD    BC,3
  99.     LDIR
  100. IFIL1B:    LD    HL,IBUF        ;zero IBUF
  101.     LD    DE,IBUF+1
  102.     LD    BC,512-1
  103.     LD    (HL),0
  104.     LDIR
  105.     LD    A,(IFCB+1)    ;is there an accessory file?
  106.     CP    ' '
  107.     JP    Z,BEGIN
  108. ;
  109.     CALL    SPMSG
  110.     DB    ', ',0
  111.     LD    HL,IFCB+1
  112.     LD    B,11
  113.     CALL    BHLMSG
  114.     LD    DE,IFCB+9
  115.     LD    HL,VDETYP
  116.     LD    A,(DE)
  117.     CP    (HL)
  118.     JP    NZ,RDERR
  119.     INC    HL
  120.     INC    DE
  121.     LD    A,(DE)
  122.     CP    (HL)
  123.     JP    NZ,RDERR
  124.     INC    HL
  125.     INC    DE
  126.     LD    A,(DE)
  127.     CP    (HL)
  128.     JR    Z,IFIL1C
  129.     CP    'K'        ;not VDx, is it VDK?
  130.     JR    Z,IFIL1C
  131.     CP    'P'        ;or VDP?
  132.     JP    NZ,RDERR
  133. IFIL1C:    LD    DE,IFCB        ;open it
  134.     LD    C,FOPN
  135.     CALL    BDOS
  136.     INC    A
  137.     JP    NZ,IFIL2    ;if it exists
  138.     LD    DE,IFCB
  139.     LD    C,FMAK
  140.     CALL    BDOS        ;else, make it
  141.     INC    A
  142.     JP    Z,WRERR
  143.     JP    BEGIN
  144. IFIL2:    LD    A,(IFCB+11)
  145.     LD    HL,IBUF
  146.     LD    DE,IFCB
  147.     CP    'P'
  148.     JR    Z,IFIL4
  149.     CP    'K'
  150.     JR    NZ,IFIL3
  151.     LD    B,4        ;read 4 rec of VDK
  152.     CALL    READLP
  153.     JP    C,RDERR
  154.     LD    HL,(IBUF)    ;check version
  155.     LD    DE,KVERSN
  156.     SBC    HL,DE
  157.     JP    NZ,VERR
  158.     LD    HL,IBUF        ;install it
  159.     LD    DE,Keys
  160.     LD    BC,512
  161.     LDIR
  162.     JR    BEGIN
  163. IFIL3:    LD    B,1        ;read 1 rec of VDx
  164.     CALL    READLP
  165.     JP    C,RDERR
  166.     LD    HL,(IBUF)
  167.     LD    DE,IVERSN    ;check version
  168.     SBC    HL,DE
  169.     JP    NZ,VERR
  170.     LD    HL,IBUF+10H    ;install the data
  171.     LD    DE,BUF+(INSTALL-100H)
  172.     LD    BC,TRMLEN
  173.     LDIR
  174.     JR    BEGIN
  175. IFIL4:    LD    B,2        ;read 2 rec of VDP
  176.     CALL    READLP
  177.     JP    C,RDERR
  178.     LD    HL,(IBUF)
  179.     LD    DE,PVERSN    ;check version
  180.     SBC    HL,DE
  181.     JP    NZ,VERR
  182. ifil6:    LD    HL,IBUF+10H
  183.     LD    DE,BUF+(PRINTER-100H)
  184.     LD    BC,PRTLEN
  185.     LDIR
  186. BEGIN:    CALL    SPMSG
  187.     DB    ']',CR,LF,LF,'Installing: ',0
  188.     LD    HL,BUF+13H    ;show VDE version msg
  189.     LD    B,27
  190.     CALL    BHLMSG
  191.     JP    MENU
  192. ;
  193. LOOP:    CALL    SPMSG
  194.     DB    CR,LF,LF,'...Press <ESC> to see Main Menu',0
  195. MLP0:    CALL    INPCH
  196.     CP    ESC
  197.     JR    NZ,MLP0
  198. MENU:    CALL    SPMSG
  199.     DB    CR,LF,LF,LF
  200.     DB    '--------------- VINSTALL MENU ---------------',CR,LF
  201.     DB    '<O>ption configuration     <K>ey definitions',CR,LF
  202.     DB    '<T>erminal installation    <F>urther patching',CR,LF
  203.     DB    '<P>rinter installation     <R>estore defaults',CR,LF
  204.     DB    CR,LF,'Choose option, <S>ave, <Q>uit, or <H>elp: ',0
  205. MNUI:    CALL    INPCH
  206.     CALL    UCASE
  207.     CALL    CASE
  208.     DB    MNULEN/3
  209. MNU:    DW    BADOPT
  210.     DB    'O'
  211.     DW    USER
  212.     DB    'T'
  213.     DW    TERM
  214.     DB    'P'
  215.     DW    PRINT
  216.     DB    'K'
  217.     DW    KEDIT
  218.     DB    'F'
  219.     DW    PATCH
  220.     DB    'Q'
  221.     DW    ABORT
  222.     DB    'R'
  223.     DW    RESTOR
  224.     DB    'S'
  225.     DW    SAVE
  226.     DB    'H'
  227.     DW    HELPME
  228. MNULEN    EQU    $-MNU
  229.     JP    LOOP
  230. BADOPT:    POP    HL
  231.     JP    MNUI
  232. ;
  233. ;
  234. HELPME:    CALL    SPMSG
  235.     DB CR,LF,LF
  236.     DB 'VINSTALL HELP -- press ^C at any time to abort VINSTALL',CR,LF,LF
  237.     DB '  VINSTALL is menu driven; however, there are several types',CR,LF
  238.     DB 'of data entry in use:',CR,LF
  239.     DB '  LOGICAL values: simply enter "Y" or "N" (Yes/No).',CR,LF
  240.     DB '  DECIMAL values: enter a number from 0-255.',CR,LF
  241.     DB '  HEX (byte) values:  2 digits 0-F (don''t omit lead zeros).',CR,LF
  242.     DB '  BYTE STRINGS:  Fixed length - just enter the required',CR,LF
  243.     DB '           number of HEX bytes, 2 digits each.',CR,LF
  244.     DB '                 Variable length - enter the HEX # of bytes',CR,LF
  245.     DB '           at the "(" prompt, up to the "[max]" value shown,',CR,LF
  246.     DB '           then the bytes themselves.',CR,LF
  247.     DB '  CHARACTERS: type the single character directly.',CR,LF
  248.     DB '  TEXT STRINGS: enter text, then <CR> to end.',CR,LF,LF
  249.     DB '  For all items you can either press <CR> immediately to',CR,LF
  250.     DB 'keep the current value, or enter a new value instead.',CR,LF
  251.     DB '(See VDE.DOC for further explanation of patches and values.)'
  252.     DB CR,LF,0
  253.     RET
  254. ;
  255. ;Restore default values
  256. ;
  257. RESTOR:    CALL    SPMSG
  258.     DB    CR,LF,LF,'RESTORE DEFAULTS:'
  259.     DB    CR,LF,'This will restore VDE to its original distribution'
  260.     DB    CR,LF,'state: default options, terminal, and printer;'
  261.     DB    CR,LF,'no function keys, no user patches.'
  262.     DB    CR,LF,LF,'Proceed? (Y/N) ',0
  263.     CALL    INPCH
  264.     CALL    UCASE
  265.     CP    'Y'
  266.     RET    NZ
  267.     LD    HL,DEFOPT
  268.     LD    DE,BUF+(OPTIONS-100H)
  269.     LD    BC,OPTLEN
  270.     LDIR
  271.     LD    HL,NULPRT
  272.     LD    DE,BUF+(PRINTER-100H)
  273.     LD    BC,PRTLEN
  274.     LDIR
  275.     CALL    VKwipe
  276.     LD    HL,VDESTRT
  277.     LD    (BUF+1),HL
  278.     LD    HL,0
  279.     LD    (BUF+4),HL
  280.     LD    HL,BUF+(USERPAT-100H)
  281.     LD    D,H
  282.     LD    E,L
  283.     INC    DE
  284.     LD    (HL),0
  285.     LD    BC,(MACKEYS-1)-(USERPAT-100H)
  286.     LDIR
  287.     CALL    ISVDE
  288.     LD    HL,DEFTRM
  289.     JR    Z,RESTR1
  290.     LD    HL,OSB2
  291. RESTR1:    LD    DE,BUF+(INSTALL-100H)
  292.     LD    BC,TRMLEN
  293.     LDIR
  294.     CALL    SPMSG
  295.     DB    '  Done.',0
  296.     RET
  297. ;
  298. ; User options
  299. ;
  300. USER:    CALL    SPMSG
  301.     DB    CR,LF,LF,'USER OPTIONS:'
  302.     DB    CR,LF,'Create BAKup files:  ',0
  303.     LD    HL,BUF+(OPTIONS-100H)
  304.     CALL    LVAL
  305.     CALL    SPMSG
  306.     DB    CR,LF,'Default file mode (W/A/N):  ',0
  307.     CALL    AVAL
  308.     CALL    SPMSG
  309.     DB    CR,LF,'Auto mode select filetype 1:  ',0
  310.     LD    B,3
  311.     CALL    SVAL
  312.     CALL    SPMSG
  313.     DB    '  Mode:  ',0
  314.     CALL    AVAL
  315.     CALL    SPMSG
  316.     DB    CR,LF,'Auto mode select filetype 2:  ',0
  317.     LD    B,3
  318.     CALL    SVAL
  319.     CALL    SPMSG
  320.     DB    '  Mode:  ',0
  321.     CALL    AVAL
  322.     CALL    SPMSG
  323.     DB    CR,LF,'Default insert on:  ',0
  324.     CALL    LVAL
  325.     CALL    SPMSG
  326.     DB    CR,LF,'Default ruler on:  ',0
  327.     CALL    LVAL
  328.     CALL    SPMSG
  329.     DB    CR,LF,'Default HCR display on:  ',0
  330.     CALL    LVAL
  331.     CALL    SPMSG
  332.     DB    CR,LF,'Enable hyphenation:  ',0
  333.     CALL    LVAL
  334.     CALL    SPMSG
  335.     DB    CR,LF,'Left margin col:  ',0
  336.     CALL    DVAL
  337.     CALL    SPMSG
  338.     DB    CR,LF,'Right margin col:  ',0
  339.     CALL    DVAL
  340.     CALL    SPMSG
  341.     DB    CR,LF,'Scroll overlap:  ',0
  342.     CALL    DVAL
  343.     CALL    SPMSG
  344.     DB    CR,LF,'Show system files:  ',0
  345.     CALL    LVAL
  346.     CALL    SPMSG
  347.     DB    CR,LF,'Fixed drives (A-P):  ',0
  348.     LD    B,2
  349.     CALL    SVAL
  350.     CALL    SPMSG
  351.     DB    CR,LF,'Ring bell on error:  ',0
  352.     CALL    LVAL
  353.     CALL    SPMSG
  354.     DB    CR,LF,'Enable help menus:  ',0
  355.     CALL    LVAL
  356.     CALL    SPMSG
  357.     DB    CR,LF,'Use alt video in header:  ',0
  358.     CALL    LVAL
  359.     CALL    SPMSG
  360.     DB    CR,LF,'Suppress header by default:  ',0
  361.     CALL    LVAL
  362.     CALL    SPMSG
  363.     DB    CR,LF,'Clock speed in MHz:  ',0
  364.     CALL    HVAL
  365.     CALL    SPMSG
  366.     DB    CR,LF,'Horizontal scroll delay:  ',0
  367.     CALL    HVAL
  368.     CALL    SPMSG
  369.     DB    CR,LF,'Fixed tab display spacing:  ',0
  370.     CALL    ADJ1
  371.     CALL    DVAL
  372.     CALL    UNADJ1
  373.     CALL    SPMSG
  374.     DB    CR,LF,'Variable tab columns:  ',CR,LF,0
  375.     LD    B,4
  376.     CALL    DBVAL
  377.     CALL    CRLF
  378.     LD    B,4
  379.     CALL    DBVAL
  380.     CALL    SPMSG
  381.     DB    CR,LF,LF,'MODIFY DEFAULT CHARACTERS? (Y/N) ',0
  382.     PUSH    HL
  383.     CALL    INPCH
  384.     CALL    UCASE
  385.     POP    HL
  386.     CP    'Y'
  387.     RET    NZ
  388.     CALL    SPMSG
  389.     DB    CR,LF,'Wildcard character:  ',0
  390.     CALL    AVAL
  391.     CALL    SPMSG
  392.     DB    CR,LF,'Code for block marker:  ',0
  393.     CALL    HVAL
  394.     CALL    SPMSG
  395.     DB    CR,LF,'Print toggles 1-4 (^B,D,S,Y):  ',0
  396.     LD    B,4
  397.     CALL    BNVAL
  398.     CALL    SPMSG
  399.     DB    CR,LF,'Print switches 1-4 (^Q,W,E,R):  ',0
  400.     LD    B,4
  401.     CALL    BNVAL
  402.     RET
  403. ;
  404. ADJ1:    INC    (HL)    ;adjust "-1" value up for display
  405.     RET
  406. UNADJ1:    DEC    HL    ;adjust "-1" value down after entry
  407.     DEC    (HL)
  408.     INC    HL
  409.     RET
  410. ;
  411. ; Terminal installation
  412. ;
  413. TERM:    CALL    SPMSG
  414.     DB    CR,LF,LF,'TERMINAL INSTALLATION:  ',0
  415.     CALL    ISVDE
  416.     JR    NZ,TERM01
  417.     CALL    SPMSG
  418.     DB    'Generic Terminal Version',0
  419.     JR    TERM02
  420. TERM01:    CALL    SPMSG
  421.     DB    'Memory Mapped Version',0
  422. TERM02:    CALL    SPMSG
  423.     DB    CR,LF,'Currently "',0
  424.     LD    HL,BUF+(INSTALL-100H)
  425.     LD    B,16
  426.     CALL    BHLMSG
  427.     CALL    SPMSG
  428.     DB    '"',CR,LF,'Choose: <E>dit current or <L>ist terminals: ',0
  429. TERM03:    CALL    INPCH
  430.     CALL    UCASE
  431.     CP    'E'
  432.     JP    Z,TERMED
  433.     CP    'L'
  434.     JR    NZ,TERM03
  435.     CALL    SPMSG
  436.     DB    CR,LF,LF,'Terminals: press <Y> to select from list:',CR,LF,0
  437.     LD    HL,VDEDAT
  438.     CALL    ISVDE
  439.     JR    Z,TERM04
  440.     LD    HL,VDMDAT
  441. TERM04:    LD    A,(HL)        ;length of list
  442.     INC    HL
  443.     LD    B,A
  444. TLIST:    PUSH    BC
  445.     PUSH    HL
  446.     LD    B,16
  447.     CALL    BHLMSG
  448.     CALL    SEPMSG
  449.     CALL    INPCH
  450.     CALL    UCASE
  451.     PUSH    AF
  452.     CALL    CRLF
  453.     POP    AF
  454.     POP    HL
  455.     POP    BC
  456.     CP    'Y'
  457.     JR    Z,TLISTY
  458.     LD    DE,TRMLEN
  459.     ADD    HL,DE
  460.     DJNZ    TLIST
  461.     CALL    SPMSG
  462.     DB    '(End of list)',0
  463.     RET
  464. TLISTY:    LD    DE,BUF+(INSTALL-100H)    ;okay, install it
  465.     LD    BC,TRMLEN
  466.     LDIR
  467.     CALL    SPMSG
  468.     DB    'Selected',0
  469.     RET
  470. ;
  471. TERMED:    CALL    SPMSG
  472.     DB    CR,LF,LF,'Editing installation - ',0
  473.     CALL    ISVDE
  474.     JP    NZ,TERMM
  475.     CALL    SPMSG
  476.     DB    'Generic Terminal Version'
  477.     DB    CR,LF,'Terminal ID:  ',0
  478.     LD    HL,BUF+(INSTALL-100H)
  479.     LD    B,16
  480.     CALL    SVAL
  481.     CALL    SPMSG
  482.     DB    CR,LF,'Viewable columns:  ',0
  483.     CALL    DVAL
  484.     CALL    SPMSG
  485.     DB    CR,LF,'Auto wrap at line end:  ',0
  486.     CALL    LVAL
  487.     CALL    SPMSG
  488.     DB    CR,LF,'Viewable lines:  ',0
  489.     CALL    DVAL
  490.     CALL    SPMSG
  491.     DB    CR,LF,'Extra DELete key:  ',0
  492.     CALL    HVAL
  493.     CALL    SPMSG
  494.     DB    CR,LF,'Extra arrow keys u/d/r/l:  ',0
  495.     LD    B,4
  496.     CALL    BNVAL
  497.     INC    HL    ;skip blank byte
  498.     CALL    SPMSG
  499.     DB    CR,LF,'Clear to end of line [06]:  ',0
  500.     LD    B,6
  501.     CALL    BVAL
  502.     CALL    SPMSG
  503.     DB    CR,LF,'Terminal init [07]:  ',0
  504.     LD    B,7
  505.     CALL    BVAL
  506.     CALL    SPMSG
  507.     DB    CR,LF,'Terminal deinit [07]:  ',0
  508.     LD    B,7
  509.     CALL    BVAL
  510.     CALL    SPMSG
  511.     DB    CR,LF,'Alternate video on [06]:  ',0
  512.     LD    B,6
  513.     CALL    BVAL
  514.     CALL    SPMSG
  515.     DB    CR,LF,'Alternate video off [06]:  ',0
  516.     LD    B,6
  517.     CALL    BVAL
  518.     CALL    SPMSG
  519.     DB    CR,LF,'Alt video uses high bit:  ',0
  520.     CALL    LVAL
  521.     CALL    SPMSG
  522.     DB    CR,LF,'Output filter limit:  ',0
  523.     CALL    HVAL
  524.     CALL    SPMSG
  525.     DB    CR,LF,'Cursor position mode (Std/Rev/ANSI/None):  ',0
  526.     CALL    AVAL
  527.     CALL    SPMSG
  528.     DB    CR,LF,'[Non-ANSI] Cursor position sequence:  ',0
  529.     LD    B,4
  530.     CALL    BNVAL
  531.     CALL    SPMSG
  532.     DB    CR,LF,'Delay after cursor positioning:  ',0
  533.     CALL    HVAL
  534.     CALL    SPMSG
  535.     DB    CR,LF,'Insert line [06]:  ',0
  536.     LD    B,6
  537.     CALL    BVAL
  538.     CALL    SPMSG
  539.     DB    CR,LF,'Delete line [06]:  ',0
  540.     LD    B,6
  541.     CALL    BVAL
  542.     CALL    SPMSG
  543.     DB    CR,LF,'Ins/del specific to line 1:  ',0
  544.     CALL    LVAL
  545.     RET
  546. ;
  547. TERMM:    CALL    SPMSG
  548.     DB    'Memory Mapped Version'
  549.     DB    CR,LF,'Terminal ID:  ',0
  550.     LD    HL,BUF+(INSTALL-100H)
  551.     LD    B,16
  552.     CALL    SVAL
  553.     CALL    SPMSG
  554.     DB    CR,LF,'Viewable columns:  ',0
  555.     CALL    DVAL
  556.     CALL    SPMSG
  557.     DB    CR,LF,'Unused columns in RAM:  ',0
  558.     CALL    DVAL
  559.     CALL    SPMSG
  560.     DB    CR,LF,'Viewable lines:  ',0
  561.     CALL    DVAL
  562.     CALL    SPMSG
  563.     DB    CR,LF,'Extra DELete key:  ',0
  564.     CALL    HVAL
  565.     CALL    SPMSG
  566.     DB    CR,LF,'Extra arrow keys u/d/r/l:  ',0
  567.     LD    B,4
  568.     CALL    BNVAL
  569.     LD    DE,8
  570.     ADD    HL,DE    ;skip 8 blank bytes
  571.     CALL    SPMSG
  572.     DB    CR,LF,'Terminal init [07]:  ',0
  573.     LD    B,7
  574.     CALL    BVAL
  575.     CALL    SPMSG
  576.     DB    CR,LF,'Terminal deinit [07]:  ',0
  577.     LD    B,7
  578.     CALL    BVAL
  579.     CALL    SPMSG
  580.     DB    CR,LF,'Turn cursor off [06]:  ',0
  581.     LD    B,6
  582.     CALL    BVAL
  583.     CALL    SPMSG
  584.     DB    CR,LF,'Turn cursor on [06]:  ',0
  585.     LD    B,6
  586.     CALL    BVAL
  587.     CALL    SPMSG
  588.     DB    CR,LF,'Video RAM start addr:  ',0
  589.     CALL    H2VAL
  590.     CALL    SPMSG
  591.     DB    CR,LF,'Z80 video in routine:',CR,LF,'  ',0
  592.     LD    B,16
  593.     CALL    BNVAL
  594.     CALL    SPMSG
  595.     DB    CR,LF,'Z80 video out routine:',CR,LF,'  ',0
  596.     LD    B,16
  597.     CALL    BNVAL
  598.     RET
  599. ;
  600. ; Printer installation
  601. ;
  602. PRINT:    CALL    SPMSG
  603.     DB    CR,LF,LF,'PRINTER INSTALLATION:'
  604.     DB    CR,LF,'Printer ID:  ',0
  605.     LD    HL,BUF+(PRINTER-100H)
  606.     LD    B,16
  607.     CALL    SVAL
  608.     CALL    SPMSG
  609.     DB    CR,LF,'Send LF after CR:  ',0
  610.     CALL    LVAL
  611.     CALL    SPMSG
  612.     DB    CR,LF,'Page length, lines:  ',0
  613.     CALL    DVAL
  614.     CALL    SPMSG
  615.     DB    CR,LF,'Top margin, lines:  ',0
  616.     CALL    DVAL
  617.     CALL    SPMSG
  618.     DB    CR,LF,'Left margin, columns:  ',0
  619.     CALL    DVAL
  620.     CALL    SPMSG
  621.     DB    CR,LF,'Printer initialization [13]:',CR,LF,'  ',0
  622.     LD    B,19
  623.     CALL    BVAL
  624.     CALL    SPMSG
  625.     DB    CR,LF,'Printer deinit [07]:  ',0
  626.     LD    B,7
  627.     CALL    BVAL
  628.     CALL    SPMSG
  629.     DB    CR,LF,'^B toggle on [07]:  ',0
  630.     LD    B,7
  631.     CALL    BVAL
  632.     CALL    SPMSG
  633.     DB    CR,LF,'   ...and off [07]:  ',0
  634.     LD    B,7
  635.     CALL    BVAL
  636.     CALL    SPMSG
  637.     DB    CR,LF,'^D toggle on [07]:  ',0
  638.     LD    B,7
  639.     CALL    BVAL
  640.     CALL    SPMSG
  641.     DB    CR,LF,'   ...and off [07]:  ',0
  642.     LD    B,7
  643.     CALL    BVAL
  644.     CALL    SPMSG
  645.     DB    CR,LF,'^S toggle on [07]:  ',0
  646.     LD    B,7
  647.     CALL    BVAL
  648.     CALL    SPMSG
  649.     DB    CR,LF,'   ...and off [07]:  ',0
  650.     LD    B,7
  651.     CALL    BVAL
  652.     CALL    SPMSG
  653.     DB    CR,LF,'^Y toggle on [07]:  ',0
  654.     LD    B,7
  655.     CALL    BVAL
  656.     CALL    SPMSG
  657.     DB    CR,LF,'   ...and off [07]:  ',0
  658.     LD    B,7
  659.     CALL    BVAL
  660.     CALL    SPMSG
  661.     DB    CR,LF,'^Q switch [07]:  ',0
  662.     LD    B,7
  663.     CALL    BVAL
  664.     CALL    SPMSG
  665.     DB    CR,LF,'^W switch [07]:  ',0
  666.     LD    B,7
  667.     CALL    BVAL
  668.     CALL    SPMSG
  669.     DB    CR,LF,'^E switch [07]:  ',0
  670.     LD    B,7
  671.     CALL    BVAL
  672.     CALL    SPMSG
  673.     DB    CR,LF,'^R switch [07]:  ',0
  674.     LD    B,7
  675.     CALL    BVAL
  676.     RET
  677. ;
  678. ;
  679. ; Function keys
  680. ;
  681. KEDIT:    CALL    DISPLA        ;this is the big loop
  682.     CALL    SPMSG
  683.     DB    CR,LF,LF,'Select <0-9> or <Z>ap; or <CR> to exit:  ',0
  684. EDIT0:    CALL    INPCH
  685.     CALL    UCASE
  686.     CP    CR
  687.     RET    Z        ;all done?
  688.     CP    'Z'
  689.     JP    Z,ZAP
  690.     LD    (GSCHR),A    ;put char in input prompt
  691.     SUB    '0'
  692.     JP    C,EDIT0
  693.     CP    9+1
  694.     JP    NC,EDIT0
  695.     LD    (KEYNUM),A
  696.     CALL    SPMSG
  697.     DB    CR,LF,'New definition: (<BS> edits, <CR> saves; use ^P to '
  698.     DB    'enter these)',CR,LF,0
  699.     CALL    GETSTR
  700.     CALL    NC,CHANGE
  701.     JP    KEDIT
  702. ;
  703. ZAP:    CALL    VKwipe
  704.     JP    KEDIT
  705. ;
  706. DISPLA:    CALL    SPMSG        ;show the fnkeys (adapted from FNK.ASM)
  707.     DB    CR,LF,LF,LF,'MACRO KEYS:  (',0
  708.     CALL    VerKey
  709.     LD    HL,Keys+1
  710.     CALL    HOUT
  711.     LD    HL,Keys
  712.     CALL    HOUT
  713.     CALL    SPMSG
  714.     DB    ' bytes free)',0
  715.     LD    HL,Keys+2
  716.     LD    B,10
  717. DSPLP:    LD    A,10
  718.     SUB    B
  719.     PUSH    BC
  720.     PUSH    HL
  721.     ADD    '0'
  722.     LD    (DSCHR),A
  723.     CALL    SPMSG
  724.     DB    CR,LF,'<'
  725. DSCHR:    DB    '?>',0        ;<---- label goes here
  726.     POP    HL
  727.     CALL    CTLMSG        ;show string
  728.     POP    BC
  729.     DJNZ    DSPLP
  730.     RET
  731. ;
  732. GETSTR:    CALL    SPMSG        ;get new string
  733.     DB    '<'
  734. GSCHR:    DB    '?>',0        ;<---- label goes here
  735.     LD    HL,STRING+1
  736.     LD    B,StrSiz    ;max length
  737. GSLP:    PUSH    BC
  738.     PUSH    HL
  739.     CALL    GETCH        ;get char
  740.     POP    HL
  741.     POP    BC
  742.     CP    CR
  743.     JR    Z,GSCR        ;CR ends
  744. ;CP    ESC
  745. ;JR    Z,GSESC        ;ESC quits
  746.     CP    BS
  747.     JR    Z,GSBS        ;BS corrects
  748.     CP    'P'-40H
  749.     JR    Z,GSCTLP    ;^P enters ^code
  750. GSADD:    LD    (HL),A
  751.     INC    HL
  752.     PUSH    BC
  753.     PUSH    HL
  754.     CALL    TYPE        ;show it
  755.     POP    HL
  756.     POP    BC
  757.     DJNZ    GSLP        ;count it (fall thru to BS if full)
  758. GSBS:    LD    A,StrSiz-1
  759.     SUB    B
  760.     JR    C,GSLP        ;erase one?
  761.     INC    B
  762.     DEC    HL        ;back up
  763.     LD    A,(HL)
  764.     CP    ' '
  765.     CALL    C,GSWIPE    ;wipe "^" if present
  766.     CALL    GSWIPE        ;wipe out char
  767.     JR    GSLP
  768. GSCTLP:    PUSH    BC        ;enter ^-code
  769.     PUSH    HL
  770.     CALL    GETCH
  771.     AND    1FH
  772.     POP    HL
  773.     POP    BC
  774.     JR    GSADD
  775. GSCR:    LD    HL,STRING    ;done, point to result
  776.     LD    A,StrSiz
  777.     SUB    B
  778.     LD    (HL),A        ;install length
  779.     OR    A
  780.     RET
  781. GSESC:    SCF            ;return with Carry if ESC
  782.     RET
  783. STRING:    DS    StrSiz+1
  784. ;
  785. GSWIPE:    PUSH    BC        ;wipe out a character
  786.     PUSH    HL
  787.     CALL    SPMSG
  788.     DB    BS,' ',BS,0
  789.     POP    HL
  790.     POP    BC
  791.     RET
  792. ;
  793. KEYNUM:    DS    1        ;which key?
  794. CHANGE:    LD    A,(KEYNUM)    ;all set to change key (from VDE.ASM)
  795.     LD    D,A
  796.     LD    A,(STRING)
  797.     LD    E,A
  798.     LD    HL,Keys+2
  799.     LD    A,D
  800.     OR    A
  801.     JR    Z,MKlp1F
  802. MKlp1:    LD    C,(HL)
  803.     LD    B,0        ;find key in list
  804.     ADD    HL,BC
  805.     INC    HL
  806.     DEC    A
  807.     JR    NZ,MKlp1
  808. MKlp1F:    LD    A,(HL)        ;old length
  809.     OR    A
  810.     JR    Z,MK1
  811.     PUSH    DE
  812.     PUSH    HL        ;delete old one
  813.     LD    E,(HL)
  814.     LD    D,0
  815.     LD    (HL),0
  816.     INC    HL
  817.     EX    DE,HL
  818.     ADD    HL,DE
  819.     LD    B,H
  820.     LD    C,L
  821.     PUSH    HL
  822.     LD    HL,Keys+200H
  823.     OR    A
  824.     SBC    HL,BC        ;bytes to move
  825.     LD    B,H
  826.     LD    C,L
  827.     POP    HL
  828.     LDIR
  829.     CALL    VerKey
  830.     POP    HL
  831.     POP    DE
  832. MK1:    LD    A,E        ;anything to add?
  833.     OR    A
  834.     JP    Z,MKDone
  835.     LD    A,(Keys+1)    ;will it fit
  836.     OR    A
  837.     JR    NZ,MK1a
  838.     LD    A,(Keys)
  839.     SUB    E
  840.     RET    C        ;sorry, NO
  841. MK1a:    LD    (HL),E        ;yes
  842.     INC    HL
  843.     LD    C,E
  844.     LD    B,0
  845.     PUSH    HL
  846.     LD    HL,Keys+200H-1
  847.     LD    D,H
  848.     LD    E,L
  849.     OR    A
  850.     SBC    HL,BC        ;from here
  851.     POP    BC
  852.     PUSH    HL
  853.     SBC    HL,BC        ;bytes to move
  854.     LD    B,H
  855.     LD    C,L
  856.     INC    BC        ;inclusive
  857.     POP    HL
  858.     LDDR             ;make room
  859.     LD    C,(HL)
  860.     LD    B,0
  861.     INC    HL
  862.     EX    DE,HL
  863.     LD    HL,STRING+1
  864.     PUSH    DE
  865.     LDIR            ;insert new one
  866.     CALL    SPMSG
  867.     DB    CR,LF,'Choose <N>o-repeat or <Q>uiet if desired:  ',0
  868.     CALL    INPCH
  869.     CALL    UCASE
  870.     PUSH    AF
  871.     CALL    TYPE
  872.     POP    AF
  873.     POP    HL
  874.     CP    'N'        ;take care of N/Q request
  875.     JR    Z,MK2
  876.     CP    'Q'
  877.     JR    NZ,MKDone
  878.     DEC    HL
  879.     LD    A,(HL)        ;Q only works if length >1
  880.     CP    2
  881.     INC    HL
  882.     JR    C,MK2
  883.     INC    HL
  884.     SET    7,(HL)        ;indicate quiet
  885.     DEC    HL
  886. MK2:    SET    7,(HL)        ;indicate no-rpt
  887. MKDone:    JP    VerKey
  888. ;
  889. VerKey:    LD    B,10        ;verify key area
  890.     LD    HL,200H-12
  891.     LD    D,0
  892.     LD    IX,Keys+2
  893. VKlp:    LD    A,StrSiz    ;check size
  894.     CP    (IX)
  895.     JR    C,VKwipe
  896.     LD    E,(IX)
  897.     SBC    HL,DE        ;decrement
  898.     JR    C,VKwipe
  899.     ADD    IX,DE        ;move to next
  900.     INC    IX
  901.     DJNZ    VKlp
  902.     LD    (Keys),HL    ;free bytes
  903.     LD    A,H
  904.     OR    L
  905.     RET    Z        ;full?
  906. VKlp2:    LD    (IX),0
  907.     INC    IX        ;zero fill
  908.     DEC    HL
  909.     LD    A,H
  910.     OR    L
  911.     JR    NZ,VKlp2
  912.     RET
  913. VKwipe:    LD    HL,200H-12    ;oops, bad
  914.     LD    (Keys),HL
  915.     LD    IX,Keys+2
  916.     LD    HL,200H-2
  917.     JR    VKlp2
  918. ;
  919. ;
  920. TYPE:    CP    ' '    ;put char in A to screen, with "^" filter
  921.     LD    C,A
  922.     JP    NC,PUTCH
  923.     ADD    40H
  924.     LD    C,A
  925.     PUSH    BC
  926.     LD    C,'^'
  927.     CALL    PUTCH
  928.     POP    BC
  929.     JP    PUTCH
  930. CTLMSG:    XOR    A    ;put ctlmsg at (HL) to screen
  931.     ADD    (HL)
  932.     INC    HL
  933.     JR    Z,NULL
  934.     INC    HL
  935.     BIT    7,(HL)
  936.     CALL    NZ,QUIET
  937.     BIT    7,(HL)
  938.     DEC    HL
  939.     JR    NZ,CMSG1
  940.     BIT    7,(HL)
  941.     CALL    NZ,NORPT
  942. CMSG1:    DEC    HL
  943.     LD    A,(HL)
  944.     INC    HL
  945.     AND    7FH
  946.     LD    B,A
  947. CMSGLP:    LD    A,(HL)
  948.     AND    7FH
  949.     INC    HL
  950.     PUSH    BC
  951.     PUSH    HL
  952.     CALL    TYPE    ;with filtering
  953.     POP    HL
  954.     POP    BC
  955.     DJNZ    CMSGLP
  956.     RET
  957. NULL:    CALL    SPMSG
  958.     DB    '<>',0
  959.     RET
  960. NORPT:    CALL    SPMSG
  961.     DB    '<N>',0
  962.     RET
  963. QUIET:    CALL    SPMSG
  964.     DB    '<Q>',0
  965.     RET
  966. ;
  967. ;
  968. ;
  969. ; Patch areas
  970. ;
  971. PATCH:    CALL    SPMSG
  972.     DB    CR,LF,LF,'FURTHER PATCHING:',CR,LF
  973.     DB    '  You will require DDT or a similar utility. Addresses',CR,LF
  974.     DB    'in this version of the program are:',CR,LF
  975.     DB    '        User patch area:  ',0
  976.     LD    HL,(BUF+8)
  977.     PUSH    HL
  978.     CALL    H2OUTA
  979.     LD    C,'-'
  980.     CALL    PUTCH
  981.     POP    HL
  982.     LD    A,(BUF+10)
  983.     LD    E,A
  984.     LD    D,0
  985.     ADD    HL,DE
  986.     DEC    HL
  987.     CALL    H2OUTA
  988.     CALL    SPMSG
  989.     DB    CR,LF,'        Command tables:',CR,LF
  990.     DB    '          Basic: ',0
  991.     LD    HL,(BUF+11)
  992.     CALL    H2OUTA
  993.     CALL    SPMSG
  994.     DB    '  ESC/^K: ',0
  995.     LD    HL,(BUF+13)
  996.     CALL    H2OUTA
  997.     CALL    SPMSG
  998.     DB    '  ^O: ',0
  999.     LD    HL,(BUF+15)
  1000.     CALL    H2OUTA
  1001.     CALL    SPMSG
  1002.     DB    '  ^Q: ',0
  1003.     LD    HL,(BUF+17)
  1004.     CALL    H2OUTA
  1005.     CALL    CRLF
  1006.     RET
  1007. ;
  1008. ;
  1009. ; Save and exit
  1010. ;
  1011. SAVE:    CALL    SPMSG
  1012.     DB    CR,LF,LF,'[Closing ',0
  1013.     LD    HL,FCB+1
  1014.     LD    B,11
  1015.     CALL    BHLMSG
  1016.     XOR    A
  1017.     LD    (FCB+12),A
  1018.     LD    (FCB+32),A
  1019.     LD    (IFCB+12),A
  1020.     LD    (IFCB+32),A
  1021.     LD    HL,BUF
  1022.     LD    DE,FCB
  1023.     LD    B,VDESTRT/80H-2
  1024.     CALL    WRITLP
  1025.     JP    C,WRERR
  1026.     LD    A,(IFCB+1)    ;and to accessory file?
  1027.     CP    ' '
  1028.     JP    Z,DONE
  1029.     CALL    SPMSG
  1030.     DB    ', ',0
  1031.     LD    HL,IFCB+1
  1032.     LD    B,11
  1033.     CALL    BHLMSG
  1034.     LD    A,(IFCB+11)
  1035.     CP    'K'
  1036.     JR    Z,IWRT2
  1037.     CP    'P'
  1038.     JR    Z,IWRT1
  1039.     LD    HL,IVERSN    ;write 1 rec of VDx
  1040.     LD    (IBUF),HL
  1041.     LD    HL,BUF+(INSTALL-100H)
  1042.     LD    DE,IBUF+10H
  1043.     LD    BC,TRMLEN
  1044.     LDIR
  1045.     LD    B,1
  1046.     JR    WRITIT
  1047. IWRT1:    LD    HL,PVERSN    ;write 2 rec of VDP
  1048.     LD    (IBUF),HL
  1049.     LD    HL,BUF+(PRINTER-100H)
  1050.     LD    DE,IBUF+10H
  1051.     LD    BC,PRTLEN
  1052.     LDIR
  1053.     LD    B,2
  1054.     JR    WRITIT
  1055. IWRT2:    LD    HL,KVERSN    ;write 4 rec of VDK
  1056.     LD    (IBUF),HL
  1057.     LD    HL,Keys+2
  1058.     LD    DE,IBUF+2
  1059.     LD    BC,512-2
  1060.     LDIR
  1061.     LD    B,4
  1062. WRITIT:    LD    HL,IBUF        ;write out B recs
  1063.     LD    DE,IFCB
  1064.     CALL    WRITLP
  1065.     JP    C,WRERR
  1066. ;
  1067. DONE:    CALL    SPMSG
  1068.     DB    ']',CR,LF,LF,0
  1069. EXIT:    LD    SP,(USTAK)
  1070.     RET
  1071. ;
  1072. ABORT:    CALL    SPMSG
  1073.     DB    ' *Aborted*',CR,LF,0
  1074.     JP    EXIT
  1075. NOFMSG:    CALL    SPMSG
  1076.     DB    CR,LF,'*File',0
  1077.     JR    ERREX
  1078. RDERR:    CALL    SPMSG
  1079.     DB    CR,LF,'*Read',0
  1080.     JR    ERREX
  1081. VERR:    CALL    SPMSG
  1082.     DB    CR,LF,'*Version',0
  1083.     JR    ERREX
  1084. WRERR:    CALL    SPMSG
  1085.     DB    CR,LF,'*Write',0
  1086. ERREX:    CALL    SPMSG
  1087.     DB    ' error*',CR,LF,0
  1088.     JP    EXIT
  1089. ;
  1090. ;
  1091. ;DISK I/O
  1092. ;
  1093. READLP:    PUSH    HL        ;READ in a file: DE=FCB
  1094.     PUSH    BC        ;HL=buffer, B=records (exact)
  1095.     PUSH    DE
  1096.     EX    DE,HL
  1097.     LD    C,SDMA
  1098.     CALL    BDOS
  1099.     POP    DE
  1100.     PUSH    DE
  1101.     LD    C,RSEQ
  1102.     CALL    BDOS
  1103.     POP    DE
  1104.     POP    BC
  1105.     POP    HL
  1106.     OR    A
  1107.     JR    NZ,RDLBAD
  1108.     PUSH    DE
  1109.     LD    DE,128
  1110.     ADD    HL,DE
  1111.     POP    DE
  1112.     DJNZ    READLP
  1113.     OR    A
  1114.     RET
  1115. RDLBAD:    SCF            ;error
  1116.     RET
  1117. WRITLP:    PUSH    HL        ;same, but write and close
  1118.     PUSH    BC
  1119.     PUSH    DE
  1120.     EX    DE,HL
  1121.     LD    C,SDMA
  1122.     CALL    BDOS
  1123.     POP    DE
  1124.     PUSH    DE
  1125.     LD    C,WSEQ
  1126.     CALL    BDOS
  1127.     POP    DE
  1128.     POP    BC
  1129.     POP    HL
  1130.     OR    A
  1131.     JR    NZ,RDLBAD
  1132.     PUSH    DE
  1133.     LD    DE,128
  1134.     ADD    HL,DE
  1135.     POP    DE
  1136.     DJNZ    WRITLP
  1137.     LD    C,FCLO
  1138.     CALL    BDOS
  1139.     INC    A
  1140.     JR    Z,RDLBAD
  1141.     OR    A
  1142.     RET
  1143. ;
  1144. ;
  1145. ;Value I/O functions
  1146. ;
  1147. SVAL:    PUSH    HL    ;Char string (length in B)
  1148.     PUSH    BC
  1149.     CALL    BHLMSG
  1150.     JR    SREDO1
  1151. SREDO:    CALL    OOPS
  1152. SREDO1:    CALL    SEPMSG
  1153.     CALL    UCHO
  1154.     CP    CR
  1155.     JR    Z,SVALX
  1156.     LD    HL,SBUF
  1157.     LD    (HL),A
  1158.     INC    HL
  1159.     POP    BC
  1160.     PUSH    BC
  1161.     DEC    B
  1162. SVALP:    PUSH    HL
  1163.     PUSH    BC
  1164.     CALL    UCHO
  1165.     POP    BC
  1166.     POP    HL
  1167.     CP    CR
  1168.     JR    Z,SVALPF
  1169.     CP    20H
  1170.     JR    C,SREDO
  1171.     LD    (HL),A
  1172.     INC    HL
  1173.     DJNZ    SVALP
  1174.     JR    SVALD
  1175. SVALPF:    LD    (HL),' '
  1176.     INC    HL
  1177.     DJNZ    SVALPF
  1178. SVALD:    LD    HL,SBUF
  1179.     POP    BC
  1180.     LD    C,B
  1181.     LD    B,0
  1182.     POP    DE
  1183.     LDIR
  1184.     EX    DE,HL
  1185.     RET
  1186. SVALX:    POP    BC
  1187.     POP    HL
  1188.     LD    C,B
  1189.     LD    B,0
  1190.     ADD    HL,BC
  1191.     RET
  1192. SBUF:    DS    16
  1193. ;
  1194. LVAL:    PUSH    HL
  1195.     LD    A,(HL)
  1196.     LD    C,'Y'
  1197.     OR    A
  1198.     JR    NZ,LVAL1
  1199.     LD    C,'N'
  1200. LVAL1:    CALL    PUTCH
  1201.     JR    LVALI1
  1202. LVALI:    CALL    OOPS    
  1203. LVALI1:    CALL    SEPMSG
  1204.     CALL    INPCH
  1205.     CALL    UCASE
  1206.     CP    CR
  1207.     JR    Z,LVALX
  1208.     LD    C,0FFH
  1209.     CP    'Y'
  1210.     JR    Z,LVAL2
  1211.     CP    'N'
  1212.     JR    NZ,LVALI
  1213.     LD    C,0
  1214. LVAL2:    PUSH    BC
  1215.     LD    C,A
  1216.     CALL    PUTCH
  1217.     POP    BC
  1218.     POP    HL
  1219.     LD    (HL),C
  1220.     INC    HL
  1221.     RET
  1222. LVALX:    POP    HL
  1223.     INC    HL
  1224.     RET
  1225. ;
  1226. AVAL:    PUSH    HL        ;ASCII value
  1227.     LD    A,(HL)
  1228.     CALL    TYPE
  1229.     CALL    SEPMSG
  1230.     CALL    INPCH
  1231.     CALL    UCASE
  1232.     CP    CR
  1233.     JR    Z,AVALX
  1234.     PUSH    AF
  1235.     CALL    TYPE
  1236.     POP    AF
  1237.     POP    HL
  1238.     LD    (HL),A
  1239.     INC    HL
  1240.     RET
  1241. AVALX:    POP    HL
  1242.     INC    HL
  1243.     RET
  1244. ;
  1245. H2VAL:    PUSH    HL
  1246.     INC    HL
  1247.     CALL    HOUT
  1248.     POP    HL
  1249.     PUSH    HL
  1250.     CALL    HOUT
  1251.     JR    H2RED1
  1252. H2REDO:    CALL    OOPS
  1253. H2RED1:    CALL    SEPMSG
  1254.     CALL    HIN
  1255.     JR    C,H2REDO
  1256.     JR    Z,H2VALX
  1257.     LD    (H2TMP),A
  1258.     CALL    HIN
  1259.     JR    C,H2REDO
  1260.     JR    Z,H2REDO
  1261.     POP    HL
  1262.     LD    (HL),A
  1263.     INC    HL
  1264.     LD    A,(H2TMP)
  1265.     LD    (HL),A
  1266.     INC    HL
  1267.     RET
  1268. H2VALX:    POP    HL
  1269.     INC    HL
  1270.     INC    HL
  1271.     RET
  1272. H2TMP:    DS    1
  1273. H2OUTA:    PUSH    HL
  1274.     LD    A,H
  1275.     CALL    HOUTA
  1276.     POP    HL
  1277.     LD    A,L
  1278.     JP    HOUTA
  1279. ;
  1280. HVAL:    PUSH    HL
  1281.     CALL    HOUT
  1282.     JR    HREDO1
  1283. HREDO:    CALL    OOPS
  1284. HREDO1:    CALL    SEPMSG
  1285.     CALL    HIN
  1286.     JR    C,HREDO
  1287.     POP    HL
  1288.     JR    Z,HVALX
  1289.     LD    (HL),A
  1290. HVALX:    INC    HL
  1291.     RET
  1292. HIN:    CALL    UCHO
  1293.     CP    CR
  1294.     SCF
  1295.     CCF
  1296.     RET    Z        ;Z, no C: CR typed
  1297.     CALL    UNHDIG
  1298.     RET    C        ;C: entry error
  1299.     ADD    A
  1300.     ADD    A
  1301.     ADD    A
  1302.     ADD    A
  1303.     LD    (HTEMP),A
  1304.     CALL    UCHO
  1305.     CALL    UNHDIG
  1306.     RET    C
  1307.     LD    C,A
  1308.     LD    A,(HTEMP)
  1309.     ADD    C
  1310.     SET    0,C        ;kludge Z off
  1311.     BIT    0,C
  1312.     RET            ;no C, no Z: OK
  1313. HTEMP:    DS    1
  1314. HOUT:    LD    A,(HL)
  1315. HOUTA:    PUSH    AF
  1316.     RRA
  1317.     RRA
  1318.     RRA
  1319.     RRA
  1320.     CALL    HDIG
  1321.     LD    C,A
  1322.     CALL    PUTCH
  1323.     POP    AF
  1324.     CALL    HDIG
  1325.     LD    C,A
  1326.     JP    PUTCH
  1327. HDIG:    AND    0FH        ;make hex digit from 0-F
  1328.     ADD    '0'
  1329.     CP    ':'
  1330.     RET    C
  1331.     ADD    'A'-':'
  1332.     RET
  1333. UNHDIG:    AND    7FH        ;process hex digit to 0-F
  1334.     SUB    '0'        ;return C if illegal
  1335.     RET    C
  1336.     CP    10
  1337.     CCF
  1338.     RET    NC        ;nice, 0-9
  1339.     CALL    UCASE
  1340.     SUB    'A'-':'
  1341.     CP    16
  1342.     CCF
  1343.     RET
  1344. ;
  1345. BNVAL:    LD    A,0FFH
  1346.     LD    (BFLAG),A
  1347.     LD    (BVBC),BC
  1348.     LD    (BVHL),HL
  1349. ;LD    C,'('            ;don't show (#) here, it's confusing
  1350. ;CALL    PUTCH
  1351. ;LD    BC,(BVBC)
  1352. ;LD    A,B
  1353. ;CALL    HOUTA
  1354. ;LD    C,')'
  1355. ;CALL    PUTCH
  1356. ;LD    HL,(BVHL)
  1357. ;LD    BC,(BVBC)
  1358.     JR    BVALP1
  1359. BVAL:    XOR    A
  1360.     LD    (BFLAG),A
  1361.     LD    (BVBC),BC
  1362.     LD    (BVHL),HL
  1363.     LD    C,'('
  1364.     CALL    PUTCH
  1365.     LD    HL,(BVHL)
  1366.     CALL    HOUT
  1367.     LD    C,')'
  1368.     CALL    PUTCH
  1369.     LD    HL,(BVHL)
  1370.     LD    B,(HL)
  1371.     INC    HL
  1372.     XOR    A
  1373.     ADD    B
  1374.     JR    Z,BREDO1
  1375. BVALP1:    PUSH    HL
  1376.     PUSH    BC
  1377.     CALL    HOUT
  1378.     POP    BC
  1379.     POP    HL
  1380.     INC    HL
  1381.     DJNZ    BVALP1
  1382.     JR    BREDO1
  1383. BREDO:    CALL    OOPS
  1384. BREDO1:    CALL    SEPMSG
  1385.     LD    HL,BTEMP
  1386.     LD    DE,BTEMP+1
  1387.     LD    BC,16
  1388.     LD    (HL),0
  1389.     LDIR
  1390.     LD    BC,(BVBC)
  1391.     LD    A,(BFLAG)
  1392.     OR    A
  1393.     LD    A,B
  1394.     JR    Z,BRDO1
  1395.     LD    HL,BTEMP
  1396.     LD    (HL),A
  1397.     OR    A
  1398.     JR    Z,BVAL2
  1399.     INC    HL
  1400.     PUSH    BC
  1401.     PUSH    HL
  1402.     CALL    UCHO
  1403.     POP    HL
  1404.     POP    BC
  1405.     CP    CR
  1406.     JR    NZ,BVAL1
  1407.     JP    BVALX
  1408. BRDO1:    PUSH    BC
  1409.     CALL    BSUB
  1410.     POP    BC
  1411.     JR    C,BREDO
  1412.     JP    Z,BVALX
  1413.     INC    B        ;A=chosen, B=max
  1414.     CP    B
  1415.     JR    NC,BREDO
  1416.     LD    HL,BTEMP
  1417.     LD    (HL),A
  1418.     LD    B,A
  1419.     OR    A        ;null?
  1420.     JR    Z,BVAL2
  1421.     INC    HL
  1422. BVALP2:    PUSH    BC
  1423.     PUSH    HL
  1424.     CALL    UCHO
  1425.     POP    HL
  1426.     POP    BC
  1427.     CP    CR
  1428.     JR    NZ,BVAL1
  1429.     LD    A,(BFLAG)
  1430.     OR    A
  1431.     JR    NZ,BVAL2
  1432.     JR    BREDO
  1433. BVAL1:    PUSH    BC
  1434.     PUSH    HL
  1435.     CALL    UNHDIG
  1436.     POP    HL
  1437.     POP    BC
  1438.     JR    C,BREDO
  1439.     ADD    A
  1440.     ADD    A
  1441.     ADD    A
  1442.     ADD    A
  1443.     LD    (HL),A
  1444.     PUSH    BC
  1445.     PUSH    HL
  1446.     CALL    UCHO
  1447.     CALL    UNHDIG
  1448.     POP    HL
  1449.     POP    BC
  1450.     JP    C,BREDO
  1451.     ADD    (HL)
  1452.     LD    (HL),A
  1453.     INC    HL
  1454.     DJNZ    BVALP2
  1455. BVAL2:    LD    DE,(BVHL)
  1456.     LD    BC,(BVBC)
  1457.     LD    C,B
  1458.     LD    B,0
  1459.     LD    HL,BTEMP
  1460.     LD    A,(BFLAG)
  1461.     OR    A
  1462.     JR    NZ,BVAL3
  1463.     INC    BC
  1464.     JR    BVAL4
  1465. BVAL3:    INC    HL
  1466. BVAL4:    LDIR
  1467.     EX    DE,HL
  1468.     RET
  1469. BVALX:    LD    HL,(BVHL)
  1470.     LD    BC,(BVBC)
  1471.     LD    C,B
  1472.     LD    B,0
  1473.     ADD    HL,BC
  1474.     LD    A,(BFLAG)
  1475.     OR    A
  1476.     RET    NZ
  1477.     INC    HL
  1478.     RET
  1479. BSUB:    LD    C,'('
  1480.     CALL    PUTCH
  1481.     CALL    HIN
  1482.     PUSH    AF
  1483.     LD    C,')'
  1484.     CALL    PUTCH
  1485.     POP    AF
  1486.     RET
  1487. BTEMP:    DS    32+1
  1488. BFLAG:    DS    1
  1489. BVBC:    DS    2
  1490. BVHL:    DS    2
  1491. ;
  1492. ;
  1493. DBVAL:    PUSH    BC
  1494.     CALL    DVAL
  1495.     CALL    SPMSG
  1496.     DB    '...   ',0
  1497.     POP    BC
  1498.     DJNZ    DBVAL
  1499.     RET
  1500. ;
  1501. DVAL:    PUSH    HL
  1502.     CALL    DOut
  1503.     JR    DRedo1
  1504. DRedo:    CALL    Oops
  1505. DRedo1:    CALL    SepMsg
  1506.     CALL    DIn
  1507.     JR    C,DRedo
  1508.     POP    HL
  1509.     JR    Z,DVALX
  1510.     LD    (HL),A
  1511. DVALX:    INC    HL
  1512.     RET
  1513. DIn:    CALL    Ucho
  1514.     CP    CR
  1515.     SCF
  1516.     CCF
  1517.     RET    Z        ;Z, no C: CR typed FIRST
  1518.     CALL    UnDDig
  1519.     RET    C        ;C: entry error
  1520.     LD    (DTemp),A
  1521.     CALL    Ucho        ;second digit?
  1522.     CP    CR
  1523.     JR    Z,DInX
  1524.     CALL    UnDDig
  1525.     RET    C
  1526.     LD    E,A
  1527.     LD    A,(DTemp)
  1528.     LD    D,A
  1529.     ADD    A
  1530.     ADD    A
  1531.     ADD    A
  1532.     ADD    D
  1533.     ADD    D        ;*10
  1534.     ADD    A,E        ;plus new value
  1535.     LD    (DTemp),A
  1536.     CALL    Ucho        ;third digit?
  1537.     CP    CR
  1538.     JR    Z,DInX
  1539.     CALL    UnDDig
  1540.     RET    C
  1541.     LD    E,A
  1542.     LD    A,(DTemp)
  1543.     LD    D,A
  1544.     ADD    A
  1545.     ADD    A
  1546.     RET    C        ;(over 255?)
  1547.     ADD    A
  1548.     RET    C
  1549.     ADD    D
  1550.     RET    C
  1551.     ADD    D        ;*10
  1552.     RET    C
  1553.     ADD    A,E        ;plus new value
  1554.     RET    C
  1555.     LD    (DTemp),A
  1556. DInX:    OR    1        ;no C, no Z: OK
  1557.     LD    A,(DTemp)
  1558.     RET
  1559. DOut:    LD    A,(HL)
  1560. DOutA:    PUSH    HL
  1561.     LD    L,A
  1562.     LD    H,0
  1563.     LD    DE,DOWork
  1564.     CALL    BCDCon
  1565.     LD    HL,DOWork
  1566. DOutLp:    LD    A,(HL)
  1567.     CP    ' '
  1568.     JR    Z,DOutLX
  1569.     LD    C,A
  1570.     PUSH    HL
  1571.     CALL    PutCh
  1572.     POP    HL
  1573.     INC    HL
  1574.     JR    DOutLp
  1575. DOutLX:    POP    HL
  1576.     RET
  1577. UnDDig:    AND    7Fh        ;process dec digit in A to val 0-9
  1578.     SUB    '0'        ;return C if illegal
  1579.     RET    C
  1580.     CP    10
  1581.     CCF
  1582.     RET
  1583. DTemp:    DS    1
  1584. DOWork:    DS    5
  1585. ;
  1586. ;
  1587. ;Convert 16-bit number in HL to a one to five
  1588. ;digit decimal number in the area pointed to by DE
  1589. ;
  1590. BCDCon:    LD    IX,P10Tab    ;Point at table
  1591.     PUSH    DE        ;Save output pointer
  1592. BCDlp1:    LD    B,(IX+1)
  1593.     LD    C,(IX)
  1594.     LD    A,C        ;low byte
  1595.     CP    1        ;Clear carry flag
  1596.     JR    Z,BCDend
  1597.     SBC    HL,BC        ;Subtract from input
  1598.     JR    NC,BCDok    ;Got one in range
  1599.     ADD    HL,BC        ;Restore it
  1600.     INC    IX
  1601.     INC    IX
  1602.     JR    BCDlp1        ;Try next one
  1603. ;
  1604. BCDok:    LD    A,'1'
  1605.     LD    (DE),A        ;Set initial digit
  1606. BCDlp2:    SBC    HL,BC        ;Subtract again
  1607.     JR    C,BCDsk1    ;Went negative
  1608.     EX    DE,HL
  1609.     INC    (HL)        ;Increment digit
  1610.     EX    DE,HL
  1611.     JR    BCDlp2
  1612. ;
  1613. BCDsk1:    ADD    HL,BC        ;Restore it
  1614.     INC    DE        ;Bump output
  1615.     INC    IX
  1616.     INC    IX
  1617.     LD    C,(IX)
  1618.     LD    B,(IX+1)
  1619.     LD    A,C
  1620.     CP    1        ;Is this last entry
  1621.     JR    Z,BCDend
  1622.     LD    A,'0'
  1623.     LD    (DE),A
  1624.     JR    BCDlp2
  1625. ;
  1626. BCDend:    LD    A,L
  1627.     OR    '0'
  1628.     LD    (DE),A
  1629.     INC    DE
  1630.     EX    DE,HL
  1631.     POP    BC
  1632.     SBC    HL,BC        ;Number filled
  1633.     LD    A,5        ; needed
  1634.     SUB    L        ; to do
  1635.     RET    Z
  1636.     ADD    HL,BC        ;Restore pointer
  1637. BCDlp3:    LD    (HL),' '    ;Clear field
  1638.     INC    HL
  1639.     DEC    A
  1640.     JR    NZ,BCDlp3
  1641.     RET
  1642. ;
  1643. P10Tab:    DW    10000,1000,100,10,1
  1644. ;
  1645. ;
  1646. ;
  1647. CASE:    POP    HL
  1648.     LD    B,(HL)        ;entries
  1649.     INC    HL
  1650.     LD    E,(HL)        ;DE=default sbr
  1651.     INC    HL
  1652.     LD    D,(HL)
  1653.     INC    HL
  1654. LP1CA:    CP    (HL)        ;Value matches?
  1655.     INC    HL
  1656.     JR    NZ,SK2CA
  1657.     LD    E,(HL)        ;yes, get address
  1658.     INC    HL
  1659.     LD    D,(HL)
  1660.     JR    SK3CA        ;finish up
  1661. SK2CA:    INC    HL        ;No match, skip ahead
  1662. SK3CA:    INC    HL
  1663.     DJNZ    LP1CA        ;Try again
  1664.     EX    DE,HL        ;Swap sbr and return
  1665.     PUSH    DE        ;Store return (end of list)
  1666.     JP    (HL)        ;Go do sbr (LAST match)
  1667. ;
  1668. SEPMSG:    CALL    SPMSG
  1669.     DB    ' :',0
  1670.     RET
  1671. CRLF:    CALL    SPMSG
  1672.     DB    CR,LF,0
  1673.     RET
  1674. OOPS:    CALL    SPMSG
  1675.     DB    BEL,'?',CR,LF,0
  1676.     RET
  1677. ;
  1678. ;
  1679. SPMSG:    EX    (SP),HL        ;must preserve HL
  1680.     XOR    A
  1681.     ADD    (HL)
  1682.     INC    HL
  1683.     EX    (SP),HL
  1684.     RET    Z
  1685.     LD    C,A
  1686.     PUSH    HL
  1687.     CALL    PUTCH
  1688.     POP    HL
  1689.     JR    SPMSG
  1690. ;
  1691. BHLMSG:    XOR    A
  1692.     ADD    (HL)
  1693.     INC    HL
  1694.     RET    Z
  1695.     LD    C,A
  1696.     PUSH    HL
  1697.     PUSH    BC
  1698.     CALL    PUTCH
  1699.     POP    BC
  1700.     POP    HL
  1701.     DJNZ    BHLMSG
  1702.     RET
  1703. ;
  1704. UCHO:    CALL    INPCH
  1705.     CALL    UCASE
  1706.     JR    ECHO1
  1707. ECHO:    CALL    INPCH
  1708. ECHO1:    CP    CR
  1709.     RET    Z
  1710.     PUSH    AF
  1711.     LD    C,A
  1712.     CALL    PUTCH
  1713.     POP    AF
  1714.     RET
  1715. INPCH:    CALL    GETCH
  1716.     CP    03H
  1717.     JP    Z,ABORT
  1718.     RET
  1719. GETCH:    JP    $    ;<---BIOS
  1720. PUTCH:    JP    $    ;<---
  1721. ;
  1722. UCASE:    CP    'a'
  1723.     RET    C
  1724.     CP    'z'+1
  1725.     RET    NC
  1726.     AND    5FH
  1727.     RET
  1728. ;
  1729. ISVDE:    PUSH    HL        ;hi bit on 0103 means VDE-M
  1730.     LD    HL,BUF+6
  1731.     BIT    7,(HL)
  1732.     POP    HL
  1733.     RET            ;Z set if VDE, clear if VDM
  1734. ;
  1735. ;
  1736. COMTYP:    DB    'COM'
  1737. VDETYP:    DB    'VDE'    ;<---Changes to VDM or VDK (VDETYP+2)
  1738. ;
  1739. IFCB:    DS    36,0
  1740. ;
  1741. ;----- DATA -----
  1742. ;
  1743. ;Default option/printer data
  1744. ;
  1745. DEFOPT:        ;DEFAULT USER OPTIONS (0130-015F)
  1746. BAKFlg:    DB    0FFH    ;0130H - create BAK files (y/n)
  1747. FMode:    DB    'A'    ;default to ASCII document mode
  1748. FDflt1:    DB    'ASMN'    ;1st default type override
  1749. FDflt2:    DB    '....'    ;2nd
  1750. InsDfl:    DB    0     ;default insert on (y/n)
  1751. RulFlg:    DB    0    ;default ruler on (y/n)
  1752. HCDflt:    DB    0FFh    ;default HCR disp on (y/n)
  1753. HypFlg:    DB    0    ;enable hyphenation (y/n)
  1754. LfMarg:    DB    1    ;default left margin column (1=margin OFF)
  1755. RtMarg:    DB    1     ;default right margin column (1=wordwrap OFF)
  1756. Ovlap:    DB    2     ;lines of overlap on scroll (^R/^C)
  1757. DirSys:    DB    0     ;include SYS files in directory (y/n)
  1758. FixDsk:    DB    '@@'    ;fixed drives
  1759. Ring:    DB    0     ;ring bell for error messages (y/n)
  1760. Help:    DB    0FFh    ;enable help menus (y/n)
  1761. AltHdr:    DB    0    ;use alt video in header (y/n)
  1762. NoHdrF:    DB    0    ;suppress header (y/n)
  1763. MHz:    DB    40h    ;CPU clock speed (40h = 4.0 MHz, etc)
  1764. Timer:    DB    40h    ;delay for horiz scroll (01 min, FF max)
  1765. TabCnt:    DB    8-1     ;tab stop interval minus 1 (1/3/7/15)
  1766. VTList:    DB    5,15,35,55,0,0,0,0    ;varitab column settings
  1767. WildCd:    DB    '_'    ;wildcard character
  1768. BlkChr:    DB    00H    ;block character (^@)
  1769. TogTbl:    DB    02h,04h,13h,19h        ;4 toggles ^B,^D,^S,^Y
  1770. NTgTbl:    DB    11h,17h,05h,12h        ;4 switches ^Q,^W,^E,^R (last 015C)
  1771. OPTLEN    EQU    $-DEFOPT
  1772. ;
  1773. NULPRT:            ;NULL PRINTER INSTALLATION (01C0-022F)
  1774.     DB    'Teletype        '    ;printer ID (16 chars)
  1775. UseLF:    DB    0FFh            ;send LF after CR? (y/n)
  1776. FormL:    DB    58            ;lines per page (0=no pgn)
  1777. PTMarg:    DB    0            ;top margin
  1778. PrLMrg:    DB    0            ;left margin
  1779. PInit:    DS    20,0            ;Printer init (19 bytes)
  1780. PUInit:    DS    8,0            ;Printer deinit (7 bytes)
  1781. PCodes:    DS    8*8,0            ;4 toggles on and off
  1782. UCodes:    DS    4*8,0            ;4 switches (last 022F)
  1783. PRTLEN    EQU    $-NULPRT
  1784. ;
  1785. ;
  1786. ;VDE terminal installations (60H, 0160-01BF)
  1787. ;
  1788. VDEDAT:    DB    (VDEEND-VDEDAT)/TRMLEN    ;number in list to date
  1789. ;
  1790. DEFTRM:    DB    'Generic CRT     '    ;terminal ID
  1791.     DB    80,0FFH,24        ;View,Wrap,Lines
  1792.     DB    0FFH,0FFH,0FFH,0FFH,0FFH    ;UsrKys
  1793.     DS    1
  1794.     DB    0, 0,0,0,0,0,0        ;ClL
  1795.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1796.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1797.     DB    0, 0,0,0,0,0,0    ;AltOn
  1798.     DB    0, 0,0,0,0,0,0    ;AltOff
  1799.     DB    0,7FH            ;AltBit,Filter
  1800.     DB    'N',1EH,0,0CH,0,0    ;CurMod,PCu,PosDly
  1801.     DB    0, 0,0,0,0,0,0        ;InsL
  1802.     DB    0, 0,0,0,0,0,0        ;DelL
  1803.     DB    0            ;OddDel
  1804.     DS    11
  1805. TRMLEN    EQU    $-DEFTRM
  1806. ;
  1807.     DB    'ADDS 25         '    ;terminal ID
  1808.     DB    80,0FFH,24        ;View,Wrap,Lines
  1809.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1810.     DS    1
  1811.     DB    2, ESC,'K',0,0,0,0    ;ClL
  1812.     DB    3, 01H,ESC,'k',0,0,0,0    ;TInit
  1813.     DB    3, 01H,ESC,'k',0,0,0,0    ;TUInit
  1814.     DB    3, ESC,'G4',0,0,0    ;AltOn
  1815.     DB    3, ESC,'G0',0,0,0    ;AltOff
  1816.     DB    0,7FH            ;AltBit,Filter
  1817.     DB    'S',ESC,'Y',20H,20H,0    ;PosMod,PCu,PosDly
  1818.     DB    2, ESC,'L',0,0,0,0    ;InsL
  1819.     DB    2, ESC,'M',0,0,0,0    ;DelL
  1820.     DB    0            ;OddDel
  1821.     DS    11
  1822. ;
  1823.     DB    'Amstrad / Heath '    ;terminal ID
  1824.     DB    80,0FFH,24        ;View,Wrap,Lines
  1825.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1826.     DS    1
  1827.     DB    2, ESC,'K',0,0,0,0    ;ClL
  1828.     DB    4, ESC,'H',ESC,'E',0,0,0    ;TInit
  1829.     DB    4, ESC,'H',ESC,'E',0,0,0    ;TUInit
  1830.     DB    2, ESC,'p',0,0,0,0    ;AltOn
  1831.     DB    2, ESC,'q',0,0,0,0    ;AltOff
  1832.     DB    0,7FH            ;AltBit,Filter
  1833.     DB    'S',ESC,'Y',20H,20H,0    ;PosMod,PCu,PosDly
  1834.     DB    2, ESC,'L',0,0,0,0    ;InsL
  1835.     DB    2, ESC,'M',0,0,0,0    ;DelL
  1836.     DB    0            ;OddDel
  1837.     DS    11
  1838. ;
  1839.     DB    'ANSI standard   '    ;terminal ID
  1840.     DB    80,0FFH,24        ;View,Wrap,Lines
  1841.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1842.     DS    1
  1843.     DB    3, ESC,'[','K',0,0,0    ;ClL
  1844.     DB    6, ESC,'[H',ESC,'[J',0    ;TInit
  1845.     DB    6, ESC,'[H',ESC,'[J',0    ;TUInit
  1846.     DB    4, ESC,'[7m',0,0    ;AltOn
  1847.     DB    3, ESC,'[m',0,0,0    ;AltOff
  1848.     DB    0,7FH            ;AltBit,Filter
  1849.     DB    'A',0,0,0,0,0        ;PosMod,PCu,PosDly
  1850.     DB    3, ESC,'[L',0,0,0    ;InsL
  1851.     DB    3, ESC,'[M',0,0,0    ;DelL
  1852.     DB    0            ;OddDel
  1853.     DS    11
  1854. ;
  1855.     DB    'Bondwell 2      '    ;terminal ID
  1856.     DB    80,0FFH,25        ;View,Wrap,Lines
  1857.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1858.     DS    1
  1859.     DB    2, ESC,'T',0,0,0,0    ;ClL
  1860.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1861.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1862.     DB    2, ESC,'I',0,0,0,0    ;AltOn
  1863.     DB    2, ESC,'N',0,0,0,0    ;AltOff
  1864.     DB    0,7FH            ;AltBit,Filter
  1865.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1866.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1867.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1868.     DB    0            ;OddDel
  1869.     DS    11
  1870. ;
  1871.     DB    'DEC VT52        '    ;terminal ID
  1872.     DB    80,0FFH,24        ;View,Wrap,Lines
  1873.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1874.     DS    1
  1875.     DB    2, ESC,'K',0,0,0,0    ;ClL
  1876.     DB    4, ESC,'H',ESC,'J',0,0,0    ;TInit
  1877.     DB    4, ESC,'H',ESC,'J',0,0,0    ;TUInit
  1878.     DB    0, 0,0,0,0,0,0        ;AltOn
  1879.     DB    0, 0,0,0,0,0,0        ;AltOff
  1880.     DB    0,7FH            ;AltBit,Filter
  1881.     DB    'S',ESC,'Y',20H,20H,0    ;PosMod,PCu,PosDly
  1882.     DB    0, 0,0,0,0,0,0    ;InsL
  1883.     DB    0, 0,0,0,0,0,0    ;DelL
  1884.     DB    0            ;OddDel
  1885.     DS    11
  1886. ;
  1887.     DB    'Commodore 128   '    ;terminal ID
  1888.     DB    80,0FFH,24        ;View,Wrap,Lines
  1889.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1890.     DS    1
  1891.     DB    2, ESC,'T',0,0,0,0    ;ClL
  1892.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1893.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1894.     DB    2, ESC,')',0,0,0,0    ;AltOn
  1895.     DB    2, ESC,'(',0,0,0,0    ;AltOff
  1896.     DB    0,7FH            ;AltBit,Filter
  1897.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1898.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1899.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1900.     DB    0            ;OddDel
  1901.     DS    11
  1902. ;
  1903.     DB    'Epson Geneva PX8'    ;terminal ID
  1904.     DB    80,0FFH,8        ;View,Wrap,Lines
  1905.     DB    0FFH,1EH,1FH,1CH,1DH    ;UsrKys
  1906.     DS    1
  1907.     DB    2, ESC,'T',0,0,0,0    ;ClL
  1908.     DB    1, 0CH,0,0,0,0,0,0    ;TInit
  1909.     DB    1, 0CH,0,0,0,0,0,0    ;TUInit
  1910.     DB    0, 0,0,0,0,0,0        ;AltOn
  1911.     DB    0, 0,0,0,0,0,0        ;AltOff
  1912.     DB    0,7FH            ;AltBit,Filter
  1913.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1914.     DB    4, ESC,91H,01H,07H,0,0    ;InsL
  1915.     DB    4, ESC,90H,01H,07H,0,0    ;DelL
  1916.     DB    0FFH            ;OddDel
  1917.     DS    11
  1918. ;
  1919.     DB    'Kaypro II/IV    '    ;terminal ID
  1920.     DB    80,0FFH,24        ;View,Wrap,Lines
  1921.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1922.     DS    1
  1923.     DB    1, 18H,0,0,0,0,0    ;ClL
  1924.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1925.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1926.     DB    0, 0,0,0,0,0,0        ;AltOn
  1927.     DB    0, 0,0,0,0,0,0        ;AltOff
  1928.     DB    0,7FH            ;AltBit,Filter
  1929.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1930.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1931.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1932.     DB    0            ;OddDel
  1933.     DS    11
  1934. ;
  1935.     DB    'Kaypro 2/4/10   '    ;terminal ID
  1936.     DB    80,0FFH,24        ;View,Wrap,Lines
  1937.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1938.     DS    1
  1939.     DB    1, 18H,0,0,0,0,0    ;ClL
  1940.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1941.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1942.     DB    3, 1BH,'B0',0,0,0    ;AltOn
  1943.     DB    3, 1BH,'C0',0,0,0    ;AltOff
  1944.     DB    0,7FH            ;AltBit,Filter
  1945.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1946.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1947.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1948.     DB    0            ;OddDel
  1949.     DS    11
  1950. ;
  1951.     DB    'LearSiegler ADM3'    ;terminal ID
  1952.     DB    80,0FFH,24        ;View,Wrap,Lines
  1953.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1954.     DS    1
  1955.     DB    2, ESC,'T',0,0,0,0    ;ClL
  1956.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1957.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1958.     DB    0, 0,0,0,0,0,0        ;AltOn
  1959.     DB    0, 0,0,0,0,0,0        ;AltOff
  1960.     DB    0,7FH            ;AltBit,Filter
  1961.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1962.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1963.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1964.     DB    0            ;OddDel
  1965.     DS    11
  1966. ;
  1967.     DB    'Morrow MDT-20   '    ;terminal ID
  1968.     DB    80,0FFH,24        ;View,Wrap,Lines
  1969.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  1970.     DS    1
  1971.     DB    2, ESC,'T',0,0,0,0    ;ClL
  1972.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  1973.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  1974.     DB    0, 0,0,0,0,0,0        ;AltOn
  1975.     DB    0, 0,0,0,0,0,0        ;AltOff
  1976.     DB    0,7FH            ;AltBit,Filter
  1977.     DB    'R',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1978.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1979.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1980.     DB    0            ;OddDel
  1981.     DS    11
  1982. ;
  1983.     DB    'NEC Starlet 8401'    ;terminal ID
  1984.     DB    80,0FFH,16        ;View,Wrap,Lines
  1985.     DB    7FH,1EH,1FH,1CH,1DH    ;UsrKys
  1986.     DS    1
  1987.     DB    2, ESC,'T',0,0,0,0    ;ClL
  1988.     DB    4, ESC,'g',ESC,'*',0,0,0    ;TInit
  1989.     DB    2, ESC,'*',0,0,0,0,0    ;TUInit
  1990.     DB    2, ESC,')',0,0,0,0    ;AltOn
  1991.     DB    2, ESC,'(',0,0,0,0    ;AltOff
  1992.     DB    0,7FH            ;AltBit,Filter
  1993.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  1994.     DB    2, ESC,'E',0,0,0,0    ;InsL
  1995.     DB    2, ESC,'R',0,0,0,0    ;DelL
  1996.     DB    0            ;OddDel
  1997.     DS    11
  1998. ;
  1999.     DB    'Northstar Advtg.'    ;terminal ID
  2000.     DB    80,0FFH,24        ;View,Wrap,Lines
  2001.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2002.     DS    1
  2003.     DB    1, 0EH,0,0,0,0,0    ;ClL
  2004.     DB    1, 04H,0,0,0,0,0,0    ;TInit
  2005.     DB    1, 04H,0,0,0,0,0,0    ;TUInit
  2006.     DB    1, 01H,0,0,0,0,0    ;AltOn
  2007.     DB    1, 02H,0,0,0,0,0    ;AltOff
  2008.     DB    0,7FH            ;AltBit,Filter
  2009.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  2010.     DB    2, ESC,'L',0,0,0,0    ;InsL
  2011.     DB    2, ESC,'M',0,0,0,0    ;DelL
  2012.     DB    0            ;OddDel
  2013.     DS    11
  2014. ;
  2015.     DB    'Osborne 1/2/4   '    ;terminal ID
  2016.     DB    80,0FFH,24        ;View,Wrap,Lines
  2017.     DB    1FH,0BH,0AH,0CH,0FFH    ;UsrKys
  2018.     DS    1
  2019.     DB    2, ESC,'T',0,0,0,0    ;ClL
  2020.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2021.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2022.     DB    2, ESC,')',0,0,0,0    ;AltOn
  2023.     DB    2, ESC,'(',0,0,0,0    ;AltOff
  2024.     DB    0,7FH            ;AltBit,Filter
  2025.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  2026.     DB    2, ESC,'E',0,0,0,0    ;InsL
  2027.     DB    2, ESC,'R',0,0,0,0    ;DelL
  2028.     DB    0            ;OddDel
  2029.     DS    11
  2030. ;
  2031.     DB    'Otrona Attache  '    ;terminal ID
  2032.     DB    80,0FFH,24        ;View,Wrap,Lines
  2033.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2034.     DS    1
  2035.     DB    2, 1BH,'K',0,0,0,0    ;ClL
  2036.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2037.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2038.     DB    3, 1BH,'U&',0,0,0    ;AltOn
  2039.     DB    3, 1BH,'U ',0,0,0    ;AltOff
  2040.     DB    0,7FH            ;AltBit,Filter
  2041.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  2042.     DB    2, ESC,'L',0,0,0,0    ;InsL
  2043.     DB    2, ESC,'M',0,0,0,0    ;DelL
  2044.     DB    0            ;OddDel
  2045.     DS    11
  2046. ;
  2047.     DB    'Televideo 910+  '    ;terminal ID
  2048.     DB    80,0FFH,24        ;View,Wrap,Lines
  2049.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2050.     DS    1
  2051.     DB    2, ESC,'T',0,0,0,0    ;ClL
  2052.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2053.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2054.     DB    3, ESC,'G4',0,0,0    ;AltOn
  2055.     DB    3, ESC,'G0',0,0,0    ;AltOff
  2056.     DB    0,7FH            ;AltBit,Filter
  2057.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  2058.     DB    2, ESC,'E',0,0,0,0    ;InsL
  2059.     DB    2, ESC,'R',0,0,0,0    ;DelL
  2060.     DB    0            ;OddDel
  2061.     DS    11
  2062. ;
  2063.     DB    'TRS-80 mod 2 P&T'    ;terminal ID
  2064.     DB    80,0,24            ;View,Wrap,Lines
  2065.     DB    0FFH,1EH,1FH,1DH,1CH    ;UsrKys
  2066.     DS    1
  2067.     DB    1, 01H,0,0,0,0,0    ;ClL
  2068.     DB    5, 1AH,14H,0FH,17H,0CH,0,0    ;TInit
  2069.     DB    5, 1AH,14H,0FH,16H,0CH,0,0    ;TUInit
  2070.     DB    1, 0EH,0,0,0,0,0    ;AltOn
  2071.     DB    1, 0FH,0,0,0,0,0    ;AltOff
  2072.     DB    0,7FH            ;AltBit,Filter
  2073.     DB    'S',ESC,'Y',20H,20H,0    ;PosMod,PCu,PosDly
  2074.     DB    1, 04H,0,0,0,0,0        ;InsL
  2075.     DB    1, 0BH,0,0,0,0,0        ;DelL
  2076.     DB    0            ;OddDel
  2077.     DS    11
  2078. ;
  2079.     DB    'TRS-80 model 4P '    ;terminal ID
  2080.     DB    80,0FFH,24        ;View,Wrap,Lines
  2081.     DB    0FFH,0BH,0AH,0FFH,0FFH    ;UsrKys
  2082.     DS    1
  2083.     DB    1, 15H,0,0,0,0,0    ;ClL
  2084.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2085.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2086.     DB    1, 16H,0,0,0,0,0    ;AltOn
  2087.     DB    1, 16H,0,0,0,0,0    ;AltOff
  2088.     DB    0,7FH            ;AltBit,Filter
  2089.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  2090.     DB    0, 0,0,0,0,0,0        ;InsL
  2091.     DB    0, 0,0,0,0,0,0        ;DelL
  2092.     DB    0            ;OddDel
  2093.     DS    11
  2094. ;
  2095.     DB    'Zenith ZT10     '    ;terminal ID
  2096.     DB    80,0FFH,24        ;View,Wrap,Lines
  2097.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2098.     DS    1
  2099.     DB    2, ESC,'T',0,0,0,0    ;ClL
  2100.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2101.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2102.     DB    3, ESC,'s1',0,0,0    ;AltOn
  2103.     DB    3, ESC,'s0',0,0,0    ;AltOff
  2104.     DB    0,7FH            ;AltBit,Filter
  2105.     DB    'S',ESC,'=',20H,20H,0    ;PosMod,PCu,PosDly
  2106.     DB    2, ESC,'E',0,0,0,0    ;InsL
  2107.     DB    2, ESC,'R',0,0,0,0    ;DelL
  2108.     DB    0            ;OddDel
  2109.     DS    11
  2110. ;
  2111. VDEEND    EQU    $
  2112. ;
  2113. ;
  2114. ;VDM terminal installations (60H, 0160-01BF)
  2115. ;
  2116. VDMDAT:    DB    (VDMEND-VDMDAT)/TRMLEN    ;number in list to date
  2117. ;
  2118.     DB    'Bondwell 14     '    ;terminal ID
  2119.     DB    80,0,25            ;View,Extra,Lines
  2120.     DB    0FFH,05H,18H,04H,13H    ;UsrKys
  2121.     DS    8
  2122.     DB    0, 0,0,0,0,0,0,0    ;TInit
  2123.     DB    0, 0,0,0,0,0,0,0    ;TUInit
  2124.     DB    0, 0,0,0,0,0,0        ;CuOff
  2125.     DB    0, 0,0,0,0,0,0        ;CuOn
  2126.     DW    0F800H            ;VidRAM
  2127.     RET            ;VidIN
  2128.     DS    15,0
  2129.     RET            ;VidOUT
  2130.     DS    15,0
  2131. ;
  2132. ;OLD KAYPROS WON'T WORK WITH VDM; BANK SWITCHING AFFECTS 0000-3FFF!
  2133.   IF    0
  2134.     DB    'Kaypro II/IV    '    ;terminal ID
  2135.     DB    80,48,24        ;View,Extra,Lines
  2136.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2137.     DS    8
  2138.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2139.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2140.     DB    0, 0,0,0,0,0,0        ;CuOff
  2141.     DB    0, 0,0,0,0,0,0        ;CuOn
  2142.     DW    03000H            ;VidRAM
  2143.     PUSH    AF        ;VidIN
  2144.     IN    A,1CH
  2145.     OR    80H
  2146.     OUT    1CH,A
  2147.     POP    AF
  2148.     RET
  2149.     DS    7,0
  2150.     PUSH    AF        ;VidOUT
  2151.     IN    A,1CH
  2152.     AND    7FH
  2153.     OUT    1CH,A
  2154.     POP    AF
  2155.     RET
  2156.     DS    7,0
  2157.   ENDIF
  2158. ;
  2159.     DB    'Osborne 1/4     '    ;terminal ID
  2160.     DB    80,48,24        ;View,Extra,Lines
  2161.     DB    1FH,0BH,0AH,0CH,0FFH    ;UsrKys
  2162.     DS    8
  2163.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2164.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2165.     DB    0, 0,0,0,0,0,0        ;CuOff
  2166.     DB    0, 0,0,0,0,0,0        ;CuOn
  2167.     DW    0F000H            ;VidRAM
  2168.     RET            ;VidIN
  2169.     DS    15,0
  2170.     RET            ;VidOUT
  2171.     DS    15,0
  2172. ;
  2173. OSB2:    DB    'Osborne Exec    '    ;terminal ID
  2174.     DB    80,48,24        ;View,Extra,Lines
  2175.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2176.     DS    8
  2177.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2178.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2179.     DB    3, ESC,'.0',0,0,0    ;CuOff
  2180.     DB    3, ESC,'.2',0,0,0    ;CuOn
  2181.     DW    0C000H            ;VidRAM
  2182.     PUSH    AF            ;VidIN
  2183.     IN    A,0
  2184.     SET    6,A
  2185.     OUT    0,A
  2186.     POP    AF
  2187.     RET
  2188.     DS    7,0
  2189.     PUSH    AF            ;VidOUT
  2190.     IN    A,0
  2191.     RES    6,A
  2192.     OUT    0,A
  2193.     POP    AF
  2194.     RET
  2195.     DS    7,0
  2196. ;
  2197.     DB    'TRS80-Holmes CPM'    ;terminal ID
  2198.     DB    80,0,24            ;View,Extra,Lines
  2199.     DB    0FFH,0BH,0AH,0CH,0FFH    ;UsrKys
  2200.     DS    8
  2201.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2202.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2203.     DB    1, 01H,0,0,0,0,0    ;CuOff
  2204.     DB    1, 04H,0,0,0,0,0    ;CuOn
  2205.     DW    0F800H            ;VidRAM
  2206.     PUSH    AF            ;VidIN
  2207.     IN    A,3FH
  2208.     AND    7BH        ;bits 2,7 OFF
  2209.     OUT    3FH,A
  2210.     POP    AF
  2211.     RET
  2212.     DS    7,0
  2213.     PUSH    AF            ;VidOUT
  2214.     IN    A,3FH
  2215.     OR    04H        ;bit 2 ON
  2216.     OUT    3FH,A
  2217.     POP    AF
  2218.     RET
  2219.     DS    7,0
  2220. ;
  2221.     DB    'TRS80-Mont.Micro'    ;terminal ID
  2222.     DB    80,0,24            ;View,Extra,Lines
  2223.     DB    0FFH,0BH,0AH,0FFH,0FFH    ;UsrKys
  2224.     DS    8
  2225.     DB    1, 1AH,0,0,0,0,0,0    ;TInit
  2226.     DB    1, 1AH,0,0,0,0,0,0    ;TUInit
  2227.     DB    2, 1BH,'0',0,0,0,0    ;CuOff
  2228.     DB    2, 1BH,'1',0,0,0,0    ;CuOn
  2229.     DW    0F800H            ;VidRAM
  2230.     PUSH    AF            ;VidIN
  2231.     LD    A,8EH
  2232.     OUT    84H,A
  2233.     POP    AF
  2234.     RET
  2235.     DS    9,0
  2236.     PUSH    AF            ;VidOUT
  2237.     LD    A,8FH
  2238.     OUT    84H,A
  2239.     POP    AF
  2240.     RET
  2241.     DS    9,0
  2242. ;
  2243.     DB    'TRS-80 mod 2 P&T'    ;terminal ID
  2244.     DB    80,0,24            ;View,Extra,Lines
  2245.     DB    0FFH,1EH,1FH,1DH,1CH    ;UsrKys
  2246.     DS    8
  2247.     DB    5, 1AH,14H,0FH,17H,0CH,0,0    ;TInit
  2248.     DB    5, 1AH,14H,0FH,16H,0CH,0,0    ;TUInit
  2249.     DB    2, 19H,14H,0,0,0,0    ;CuOff
  2250.     DB    1, 1AH,0,0,0,0,0    ;CuOn
  2251.     DW    0F800H            ;VidRAM
  2252.     PUSH    AF            ;VidIN
  2253.     PUSH    BC
  2254.     PUSH    DE
  2255.     PUSH    HL
  2256.     LD    B,15H
  2257.     CALL    40H
  2258.     POP    HL
  2259.     POP    DE
  2260.     POP    BC
  2261.     POP    AF
  2262.     RET
  2263.     DS    2,0
  2264.     PUSH    AF        ;VidOUT
  2265.     PUSH    BC
  2266.     PUSH    DE
  2267.     PUSH    HL
  2268.     LD    B,16H
  2269.     CALL    40H
  2270.     POP    HL
  2271.     POP    DE
  2272.     POP    BC
  2273.     POP    AF
  2274.     RET
  2275.     DS    2,0
  2276. ;
  2277. VDMEND    EQU    $
  2278. ;
  2279. ;
  2280. ;
  2281.     DS    46
  2282. STACK:    DS    2
  2283. USTAK:    DS    2
  2284. ;
  2285. IBUF:    DS    512    ;for inst/key files
  2286. ;
  2287. BUF    EQU    $    ;read VDE header here
  2288. ;
  2289. ;
  2290. CR    EQU    0DH
  2291. LF    EQU    0AH
  2292. BS    EQU    08H
  2293. ESC    EQU    1BH
  2294. BEL    EQU    07H
  2295. ;
  2296. BDOS    EQU    0005H
  2297. FCB    EQU    005CH
  2298. FCB2    EQU    006CH
  2299. ;
  2300. FMAK    EQU    22
  2301. FOPN    EQU    15
  2302. RSEQ    EQU    20
  2303. WSEQ    EQU    21
  2304. FCLO    EQU    16
  2305. SDMA    EQU    26
  2306. ;
  2307.     END