home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / C / CLMFEB85.ZIP / CASM.3 < prev    next >
Encoding:
Text File  |  1988-07-25  |  3.9 KB  |  119 lines

  1.  
  2.                             Listing 3
  3.                     C to Assembler Interface
  4.  
  5.  
  6.  
  7. Interfacinτ ├ t∩ acces≤ architecturσ dependen⌠ capabilitie≤ ì
  8.  
  9. TITLE DISPIO - SUBROUTINE TO PERFORM DIRECT SCREEN I/O
  10. ;
  11. ;  #define MAX 8
  12. ;  char retvals [MAX] /* used by 3 functions */
  13. ;           /* (1) - read cursor position; retvals[0-1] = current cursor mode */
  14. ;           /*         retvals[3] = col, retvals[2] = row */
  15. ;           /* (2) - read light pen position  */
  16. ;           /*         retvals[0] = active(1)/inactive(0) */
  17. ;           /*         retvals[2-3] = pixel column, retvals[4]=raster line */
  18. ;           /*         retvals[6] = row, retvals[7] = col */
  19. ;           /* (3) - get state; retvals[0] = cols, retvals[1] = mode */
  20. ;           /*         retvals[2] = page */ 
  21. ;
  22. ;   setmode - dispio(mode) ;
  23. ;   set cursor type - dispio(set_curs_type,type) ;
  24. ;   set cursor position - dispio(set_cursor,page<<8,row<<8+col) ;
  25. ;   read cursor position - dispio(read_cursor_position,page<<8,retvals) ;
  26. ;   read light pen position - dispio(read_pen,retvals) ;
  27. ;   select active page - dispio(select_page+new_page_value) ;
  28. ;   scroll active page up - dispio(scroll_up+number_of_lines,page<<8,
  29. ;                                  lrow<<8+lcol, rrow<<8+rcol) ;
  30. ;   scroll active page down - dispio(scroll_down+number_of_lines,page<<8,
  31. ;                                    lrow<<8+lcol,rrow<<8+rcol) ;
  32. ;   get attribute character at current cursor pos - dispio(readac,page<<8) ;
  33. ;     returns attribute character as function value - high byte attribute,
  34. ;     low byte character
  35. ;   write attribute character at current cursor position - dispio(writeac+char,
  36. ;            page<<8+attribute, repeat count)
  37. ;   write character - dispio(write_char+character,page<<8,repeat count) ;
  38. ;   set color palette - dispio(set_pallette,pallette<<8+color_value) ;
  39. ;   write dot - dispio(write_dot+color,col,row) ;
  40. ;   read dot - dispio(read_dot,col,row)
  41. ;              dot read returned as low byte of function value
  42. ;   write teletype - dispio(write_teletype+char,(page<<8)+color) ;
  43. ;   get state - dispio(get_state,retval) 
  44. ;
  45. DGROUP  GROUP  DATA
  46. DATA    SEGMENT WORD PUBLIC 'DATA'
  47.         ASSUME  DS:DGROUP
  48. CASE_TABLE DW SETMODE,CURSTYPE,SETCURS,READCURS,READPEN,SETMODE
  49.            DW SCROLL,SCROLL,READAC,WRITEAC,WRITEAC,READAC,WRITEDOT
  50.            DW WRITEDOT,READAC,STATE
  51. ; case table uses 16 words
  52. RLAYOUT  STRUC        ; Return address space layout
  53. RAX     DW    ?       
  54. RBX     DW    ?
  55. RCX     DW    ?
  56. RDX     DW    ?
  57. RLAYOUT ENDS
  58. èDATA    ENDS
  59. ;
  60. PGROUP  GROUP  PROG
  61. PROG    SEGMENT  BYTE  PUBLIC 'PROG'
  62.         ASSUME   CS:PGROUP
  63.         PUBLIC   DISPIO
  64. ;
  65. DISPIO  PROC    NEAR
  66.         POP     SI
  67.         POP     AX
  68.         MOV     BL,AH
  69.         XOR     BH,BH
  70.         CMP     BL,15             ; INVALID FUNCTION CODE ?
  71.         JA      ERROR
  72.         SHL     BX,1
  73.         JMP     CASE_TABLE[BX]
  74. ;
  75. ERROR:  MOV     AX,-1
  76.         JMP     SI
  77. ;
  78. SETCURS:   POP    BX
  79.            POP    DX
  80. SETMODE:   INT    10H
  81.            JMP    SI
  82. ;
  83. READCURS:  POP    BX
  84.            INT    10H
  85.            POP    DI
  86.            MOV    [DI].RAX,CX
  87.            MOV    [DI].RBX,DX
  88.            JMP    SI
  89. ;
  90. SCROLL:    POP    BX
  91. WRITEDOT:  POP    CX
  92.            POP    DX
  93.            INT    10H
  94.            JMP    SI
  95. ;
  96. READAC:    POP    BX
  97.            INT    10H
  98.            JMP    SI
  99. ;
  100. WRITEAC:   POP    BX
  101. CURSTYPE:  POP    CX
  102.            INT    10H
  103.            JMP    SI
  104. ;
  105. STATE:     INT    10H
  106.            POP    DI
  107.            MOV    [DI].RAX,AX
  108.            MOV    [DI].RBX,BX
  109.            JMP    SI
  110. ;
  111. READPEN:   INT    10H
  112.            POP    DI
  113. è           MOV    [DI].RAX,AX
  114.            MOV    [DI].RBX,BX
  115.            MOV    [DI].RCX,CX
  116.            MOV    [DI].RDX,DX
  117.            JMP    SI
  118. DISPIO  ENDP
  119. PROG    ENDS
  120.         END
  121.