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 / TERMS / QTPAT42.LBR / QT-PCPI.ZY / QT-PCPI.ZY
Text File  |  2000-06-30  |  8KB  |  343 lines

  1. ; QT-PCPI.Z - QTERM Version 4.2 Patch Area for Apple II w/ super serial card
  2.  
  3. ; Updated from V4.1 to V4.2, D. Goodenough
  4.  
  5. ; This is a ZSM version of patch, created by disassembling QT-PCPI.COM
  6. ; as provided by Tom Bopp.
  7.  
  8. ; The overlay assumes that you have selected either Soroc or TVI software
  9. ; codes for your video driver, so that <ESC>-* will clear the screen and
  10. ; <ESC>-= is the leadin for cursor addressing.  You can check this by typing
  11. ; <ESC>* at the CP/M prompt and see if your screen clears.  If your screen
  12. ; does not clear, either change your driver using CONFIGSV and INSTALL, or
  13. ; use DDT to change the code in the overlay to the appropriate screen codes.
  14. ; See PATCH.DOC for details on patching QTERM.
  15.  
  16. ; The overlay contains code to allow you to set the baud rate and
  17. ; communications mode, as well as send a break and drop DTR (hang up).
  18. ; Inverse video is disabled because I find it distracting; you may reenable
  19. ; it by changing the byte at 022FH from C0H to C3H.  You should also check
  20. ; the other video strings and 0230H and 0238H for your terminal.
  21.  
  22. ; Since the Apple video system does not have hardware insert/delete for lines
  23. ; or characters, you cannot use the Split-Screen option of QTERM. However the
  24. ; VT-100 emulation will work.
  25.  
  26. ;                             PATCHING FOR APPLE II+
  27.  
  28. ; I have used QTERM with this overlay on my Apple II+, with only one change
  29. ; needed.  This is to change the byte at 01CFH, which specifies the escape
  30. ; character.  The Apple II+ keyboard does not have the \ symbol, so ^\
  31. ; cannot be typed.  I would suggest a change to either 1BH (ESC) or 1EH(^^).
  32.  
  33. ;                            PATCHING FOR OTHER SLOTS
  34.  
  35. ; To use a Super Serial Card in some slot other than slot 2, some of the
  36. ; addresses used in the overlay have to be changed.  In particular, all
  37. ; routines that access the serial card (addresses C0A8, C0A9, C0AA, and C0AB)
  38. ; will need to refer to offset addresses.  These one-for-one substitutions
  39. ; depend on the slot used, and can be made easily with DDT.  For example, if
  40. ; slot 1 is used, the addresses are C098, 99, 9A, and 9B; for slot 4 they
  41. ; would be C0C8, C9, CA, and CB.
  42.  
  43. ; This has now been automated by selection of the slot number with the
  44. ; variable slot - D. Goodenough 7-22-89
  45.  
  46. .var    slot    2        ; stick your slot number here
  47.  
  48. .var    base    0xc088 + 16 * slot
  49.                 ; base address to access super serial card
  50.  
  51. .var    data    base        ; serial card data port
  52. .var    status    base + 1    ; serial card status port
  53. .var    control    base + 2    ; serial card control port
  54. .var    modep    base + 3    ; serial card mode port
  55.  
  56. .var    yes    0xff        ; true value
  57. .var    no    0        ; false value
  58.  
  59. .org    0x0110
  60. modist:
  61.     push    de
  62.     ld    de,status
  63.     call    MODGET
  64.     and    8
  65.     pop    de
  66.     ret
  67.  
  68. .org    0x0120
  69. modin:
  70.     push    de
  71.     ld    de,data
  72.     call    MODGET
  73.     pop    de
  74.     ret
  75.  
  76. .org    0x0130
  77. modost:
  78.     push    de
  79.     ld    de,status
  80.     call    MODGET
  81.     and    0x10
  82.     pop    de
  83.     ret
  84.  
  85. .org    0x0140
  86. modout:
  87.     push    de
  88.     ld    de,data
  89.     call    MODPUT
  90.     pop    de
  91.     ret
  92.  
  93. .org    0x0150
  94. sbreak:
  95.     push    de
  96.     ld    de,control
  97.     push    de
  98.     call    MODGET
  99.     set    2,a
  100.     pop    de
  101.     call    MODPUT
  102.     pop    de
  103.     ret
  104.  
  105. .org    0x0160
  106. ebreak:
  107.     push    de
  108.     ld    de,control
  109.     push    de
  110.     call    MODGET
  111.     res    2,a
  112.     pop    de
  113.     call    MODPUT
  114.     pop    de
  115.     ret
  116.  
  117. .org    0x0170
  118. dtroff:
  119.     push    de
  120.     ld    de,control
  121.     push    de
  122.     call    MODGET
  123.     res    0,a
  124.     pop    de
  125.     call    MODPUT
  126.     pop    de
  127.     ret
  128.  
  129. .org    0x0180
  130. dtron:
  131.     push    de
  132.     ld    de,control
  133.     push    de
  134.     call    MODGET
  135.     set    0,a
  136.     pop    de
  137.     call    MODPUT
  138.     pop    de
  139.     ret
  140.  
  141. .org    0x0190
  142. setbd:
  143.     push    de
  144.     push    hl
  145.     ld    de,modep
  146.     push    de
  147.     push    af
  148.     call    MODGET
  149.     jp    FINBD
  150.  
  151. .org    0x01a0
  152. baudtb:
  153. b38400:    db    0,no
  154. b19200:    db    0,no
  155. b9600:    db    0x0e,yes
  156. b4800:    db    0x0c,yes
  157. b2400:    db    0x0a,yes
  158. b1200:    db    8,yes
  159. b600:    db    7,yes
  160. b300:    db    6,yes
  161.  
  162. .org    0x01b0
  163. setmod:
  164.     ld    (MODSAV),a
  165.     push    de
  166.     ld    de,modep
  167.     push    de
  168.     call    MODGET
  169.     jp    FINMOD
  170.  
  171. .org    0x01c0
  172. modtab:
  173. n17:    db    0b00110000    ;0x30, 7n1
  174. n18:    db    0b00010000    ;0x10, 8n1
  175. n27:    db    0b10110000    ;0xb0, 7n2
  176. n28:    db    0b10010000    ;0x90, 8n2
  177. e17:    db    0b00110110    ;0x36, 7e1
  178. e18:    db    0b00010110    ;0x16, 8e1
  179. e27:    db    0b10110110    ;0xb6, 7e2
  180. e28:    db    0b10010110    ;0x96, 8e2
  181. o17:    db    0b00110010    ;0x32, 7o1
  182. o18:    db    0b00010010    ;0x12, 8o1
  183. o27:    db    0b10110010    ;0xb2, 7o2
  184. o28:    db    0b10010010    ;0x92, 8o2
  185.  
  186. .org    0x01cc
  187. resrvd:    db    0    ; reserved for future use
  188.  
  189. .org    0x01cd
  190. xfersz:    db    8    ;number of K to read/write during file xfers
  191.  
  192. .org    0x01ce
  193. speed:    db    6    ;cpu speed
  194.  
  195. .org    0x01cf
  196. escape:    db    '\e'    ;escape character
  197.  
  198. .org    0x01d0
  199. signon:            ;signon message
  200.     db    'Apple II/PCPI/SSC\0'
  201.  
  202. .org    0x01f0
  203. clrs:            ; string to clear the screen
  204.     db    '\e*\0'
  205.  
  206. .var    scrout    0x0109    ;(a routine to print to CON: the
  207.             ;   character in C)
  208. .var    decout    0x010c    ;(a routine to print to CON: a decimal value
  209.             ;   in HL.  Is available for VT100 and the like.)
  210.  
  211. .org    0x0200
  212. moveto:
  213.     push    hl    ;move cursor to position in HL (Row,Col)
  214.     ld    c,'\e'    ; lead-in with Esc (the ASCII one; not QTERM's)
  215.     call    scrout
  216.     ld    c,'='    ; 2nd lead-in is '='
  217.     call    scrout
  218.     pop    hl        ; get row,col
  219.     ld    de,0x2020    ; add offset
  220.     add    hl,de
  221.     push    hl        ; and save
  222.     ld    c,h        ; send row+offset
  223.     call    scrout
  224.     pop    bc        ; get col+offset
  225.     jp    scrout        ; send
  226.  
  227. ; Terminal Capability Bits.  The eight bits stand for each of the following
  228. ;   strings.   They count from 01h=bright to 80h=clear-to-end-of-screen.
  229.  
  230. .var    b_brit    0b00000001    ; 0: bright (1.)    -- NOT mandatory
  231. .var    b_dim    0b00000010    ; 1: dim    (2.)    -- NOT mandatory
  232. .var    b_dlln    0b00000100    ; 2: delete line (4.)    -- important
  233. .var    b_inln    0b00001000    ; 3: insert line (8.)    -- important
  234. .var    b_dlch    0b00010000    ; 4: delete character (16.)-- unused by QTERM
  235. .var    b_inch    0b00100000    ; 5: insert character (32.)-- NOT mandatory
  236. .var    b_clel    0b01000000    ; 6: clear to end-of-line(64.) -- important
  237. .var    b_cles    0b10000000    ; 7: clear to end-of-screen(128.)-- important
  238.  
  239. .org    0x022f
  240. tcbits:    db    b_brit + b_dim + b_clel + b_cles    ; capability bits
  241.  
  242. .org    0x0230
  243. brites:    db    '\e(\0'    ;bright string
  244.  
  245. .org    0x0238
  246. dims:    db    '\e)\0'    ;dim string
  247.  
  248. .org    0x0240
  249. dlstr:    db    0    ;delete line - not available
  250.  
  251. .org    0x0248
  252. ilstr:    db    0    ;insert line - not available
  253.  
  254. .org    0x0250
  255. dcstr:    db    0    ;delete character - not available
  256.  
  257. .org    0x0258
  258. icstr:    db    0    ;insert character - not available
  259.  
  260. .org    0x0260
  261. ceol:    db    '\eT\0'    ;clear to end of line
  262.  
  263. .org    0x0268
  264. ceos:    db    '\eY\0'    ;clear to end-of-screen
  265.  
  266. ; Entry and Exit hooks.  These are provided to perform custom initialisation
  267. ; on startup and on exit from QTERM.  They are invoked before any use is made
  268. ; of the screen or the port hardware.
  269.  
  270. .org    0x0270
  271. entry:    ret        ; entry hook (270h .. 272h)
  272.  
  273. .org    0x0273
  274. exit:    ret        ; exit hook (273h .. 275h)
  275.  
  276. .org    0x0276
  277. user:    ret        ; user subroutine (0x0276 .. 0x0278)
  278.  
  279. .org    0x0279
  280. kbmap:    ret        ; keyboard map (0x0279 .. 0x027b)
  281.  
  282. ; in line prompt entry for user subroutine
  283.  
  284. .var    ilprmt    0x027c
  285.  
  286. ; extended patch area: 0x0280 .. 0x04ff
  287.  
  288. .org    0x0280
  289. MODGET:
  290.     push    bc
  291.     ld    c,6
  292.     call    0xffe3
  293.     call    0xffe9
  294.     call    0xffe0
  295.     pop    bc
  296.     ret
  297.  
  298. MODPUT:
  299.     push    bc
  300.     ld    b,a
  301.     ld    c,7
  302.     call    0xffe3
  303.     call    0xffe9
  304.     ld    c,b
  305.     call    0xffe3
  306.     pop    bc
  307.     ret
  308.  
  309. FINBD:
  310.     and    0xf0
  311.     pop    hl
  312.     or    h
  313.     pop    de
  314.     call    MODPUT
  315.     pop    hl
  316.     pop    de
  317.     ret
  318.  
  319. FINMOD:
  320.     and    0x0f
  321.     push    hl
  322.     ld    h,a
  323.     ld    a,(MODSAV)
  324.     and    0xf0
  325.     or    h
  326.     pop    hl
  327.     pop    de
  328.     call    MODPUT
  329.     ld    a,(MODSAV)
  330.     and    0x0f
  331.     rlca
  332.     rlca
  333.     rlca
  334.     rlca
  335.     or    0x0b
  336.     ld    de,control
  337.     call    MODPUT
  338.     pop    de
  339.     ret
  340.  
  341. MODSAV:
  342.     db    0x10
  343.