home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.7z / ftp.whtech.com / emulators / v9t9 / linux / sources / V9t9 / tools / Forth / term.inc < prev    next >
Encoding:
Text File  |  2006-10-19  |  3.4 KB  |  236 lines

  1. ;    V9t9: the TI Emulator! v6.0 Source 
  2. ;    Copyright (c) 1996 by Edward Swartz
  3.  
  4. ;    Terminal emulation.
  5. ;
  6. ;    VIDEO sets up "vdrawchar", "vwidth", "vheight"
  7. ;    for character drawing.
  8. ;
  9. ;    Call after video mode is initialized.
  10.  
  11. tinit     dect    SP
  12.     mov    0,*SP
  13.     clr    @vx            ; upper-left corner
  14.     clr    @vwx            ; window starts upper-left
  15.     mov    @vwidth,@vwxs        ; set dims to screen size
  16.     mov    +*SP,0
  17.     rt
  18.  
  19.  
  20. ;    Create a windowed area on the screen.
  21. ;
  22. ;    This only sets up limits; something else should "draw"
  23. ;    the window.
  24. ;
  25. ;    hi(R0) = left
  26. ;    lo(R0) = top
  27. ;    hi(R1) = width
  28. ;    lo(R1) = height
  29. ;
  30. ;    If window's left/top coordinates are out-of-bounds, they
  31. ;    will be moved to the very left/top
  32. ;
  33. ;    If the sizes are out-of-bounds, they will stick to the edge of
  34. ;    the screen.
  35. ;
  36. window    si    SP,8
  37.     mov    11,@6(SP)
  38.     mov    0,@4(SP)
  39.     mov    1,@2(SP)
  40.     mov    2,*SP
  41.  
  42.     bl    @vcursoroff            ; clear cursor stuff
  43.  
  44.     li    2,vwidth
  45.     cb    0,*2                ; check left coord
  46.     jl    wxlookay            ; lower, okay
  47.     sb    0,0                ; fix to edge
  48. wxlookay:
  49.     movb    0,@vwx                ; save 
  50.     ab    1,0                ; get right coord
  51.     jc    wxxover
  52.     cb    0,*2                ; lower or equal, okay
  53.     jle    wxhiokay            
  54. wxxover:
  55.     movb    *2,1
  56.     sb    @vwx,1                ; fix R1 to that width
  57. wxhiokay:
  58.     movb    1,@vwxs
  59.  
  60.     swpb    0                ; point to Y 
  61.     swpb    1                ; coordinates
  62.  
  63.     li    2,vheight
  64.     cb    0,*2                ; check top coord
  65.     jl    wylookay            ; lower, okay
  66.     sb    0,0                ; fix to edge
  67. wylookay:
  68.     movb    0,@vwy                ; save 
  69.     ab    1,0                ; get bottom coord
  70.     jc    wyyover
  71.     cb    0,*2                ; lower or equal, okay
  72.     jle    wyhiokay            
  73. wyyover:
  74.     movb    *2,1
  75.     sb    @vwy,1                ; fix R1 to that height
  76. wyhiokay:
  77.     movb    1,@vwys
  78.  
  79.     clr    @vx                ; clear coords
  80.  
  81.     mov    +*SP,2
  82.     mov    +*SP,1
  83.     mov    +*SP,0
  84.     mov    +*SP,11
  85.     rt
  86.  
  87.  
  88. ;    CALLED FROM FORTH!
  89. ;
  90. ;    Print a character.
  91. ;
  92. ;    hi(R1) = char
  93.  
  94. printchar si    SP,4
  95.     mov    11,@2(SP)
  96.     mov    1,*SP
  97.  
  98.     bl    @vcursoroff            ; we're movin', buddy!
  99.  
  100.     movb    1,@vch
  101.     mov    @vdrawchar,1
  102.     blwp    *1                  ; print char
  103.  
  104.     ab    @h01,@vx            ; add a space
  105.     cb    @vx,@vwxs            ; edge of window?
  106.     jl    prchout                ; no, we're okay
  107.  
  108.     bl    @crlf
  109.  
  110. ;    sb    @vx,@vx                ; else next line
  111. ;    ab    @h01,@vy
  112. ;    cb    @vy,@vwys
  113. ;    jl    prchout
  114. ;
  115. ;    sb    @vy,@vy
  116. prchout:
  117.     mov    +*SP,1
  118.     mov    +*SP,11
  119.     rt
  120.  
  121.  
  122. ;    CALLED FROM FORTH!
  123. ;
  124. ;    Move cursor to X,Y in window
  125. ;
  126. ;    hi(R0) = X
  127. ;    lo(R0) = Y
  128. ;
  129. gotoxy    si    SP,4
  130.     mov    11,@2(SP)
  131.     mov    0,*SP
  132.  
  133.     bl    @vcursoroff            ; we're moving it!
  134.  
  135.     cb    0,@vwxs
  136.     jl    gxyokayx
  137.     movb    @vwxs,0
  138.     sb    @h01,0
  139. gxyokayx:
  140.     swpb    0
  141.     cb    0,@vwys
  142.     jl    gxyokayy
  143.     movb    @vwys,0
  144.     sb    @h01,0
  145. gxyokayy:
  146.     swpb    0
  147.     mov    0,@vx
  148.  
  149.     mov    +*SP,0
  150.     mov    +*SP,11
  151.     rt
  152.  
  153.  
  154. ;    CALLED FROM FORTH!
  155. ;
  156. ;    Do a carriage return.
  157. ;
  158.  
  159. crlf    si    SP,4
  160.     mov    1,@2(SP)
  161.     mov    11,*SP
  162.  
  163.     bl    @vcursoroff            ; we're moving cursor
  164.  
  165.     sb    @vx,@vx                ; reset X coord
  166.     ab    @h01,@vy            ; next line
  167.     cb    @vy,@vwys            ; bottom of window?
  168.     jl    crlf0
  169.  
  170.     sb    @vy,@vy
  171.  
  172. crlf0:
  173.  
  174.     cb    @vy,@vwcy
  175.     je    crlf1
  176.     movb    @vy,@vwcy
  177.     mov    @vscroll,1
  178.     blwp    *1
  179.  
  180. crlf1:
  181.     mov    +*SP,11
  182.     mov    +*SP,1
  183.     rt
  184.  
  185.  
  186. ;    CALLED FROM FORTH!
  187. ;
  188. ;    Do a backspace.
  189. ;
  190.  
  191. bksp    si    SP,6
  192.     mov    1,@4(SP)
  193.     mov    2,@2(SP)
  194.     mov    11,*SP
  195.  
  196.     bl    @vcursoroff
  197.  
  198.     movb    @vx,1                ; get x
  199.     sb    @H01,1                ; decrement
  200.     jc    bksp0                ; 0 -> -1?
  201. ;;;    movb    @vy,@vwcy            ; curr row
  202.     movb    @vwxs,1                ; yup, move to other edge
  203.     sb    @h01,1            
  204.     movb    @vy,2                ; and decrement
  205.     sb    @h01,2                ; Y
  206.     jc    bksp1                ; 0 -> -1?
  207.     movb    @vwys,2                ; move to bottom
  208.     sb    @h01,2
  209. bksp1    movb    2,@vy                ; save
  210. bksp0    movb    1,@vx                ; save
  211.  
  212.     mov    +*SP,11
  213.     mov    +*SP,2
  214.     mov    +*SP,1
  215.     rt
  216.  
  217.  
  218. ;    CALLED FROM FORTH!
  219. ;
  220. ;    Do a tab.
  221. ;
  222. tab    si    SP,4
  223.     mov    1,@2(SP)
  224.     mov    11,*SP
  225.  
  226. tab0    li    1,>2000
  227.     bl    @printchar              ; print a space
  228.     movb    @vx,1
  229.     andi    1,>0700                ; if not on 8-char boundary
  230.     jne    tab0                ; repeat
  231.  
  232.     mov    +*SP,11
  233.     mov    +*SP,1
  234.  
  235.     rt
  236.