home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / geos / programming / source / rpn64-src.sfx / rpnscreen (.txt) < prev    next >
Encoding:
GEOS ConVerT  |  1990-02-12  |  8.1 KB  |  190 lines

  1. rpnSCREEN
  2. prg FORMATTED geos FILE v1.0
  3. sTAR nx-10
  4. rpnroutines
  5. blaster's converter v2.5
  6. rpnram
  7. rpnscreen
  8. wRITE iMAGE v2.0
  9. GEOwRITE    v2.0
  10. 0sAVE/rESTORE sCREEN ROUTINES FOR da'S MODIFIED TO DO fg SCREEN ONLY.
  11. ;*************************************************************************
  12. ;sAVEsCREEN
  13. ;tHIS ROUTINE SAVES A PORTION OF THE APPLICATION'S fg SCREEN (IF NECESSARY).
  14. ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
  15. ;mODIFIED BY r. kNOP TO SAVE fg ONLY
  16. ;cALLER:dasTART
  17. ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
  18. ;rETURNS:SCREENbUF = APPLICATION'S fg AND bg SCREEN DATA
  19. ;aLTERS:A, X, Y, R0, R1, R5, R6
  20. ;************************************************************************
  21. sAVEsCREEN:
  22. BITRECOVERfLAG;DO WE NEED TO SAVE fg?
  23. BPL90$;SKIP IF NOT...
  24. lOADwR0,#SCREENbUF;USE R0 AS POINTER TO BUFFER
  25. LDX#da_top*8;USE X AS SCANLINE #, START AT TOP
  26. 10$:;FOR EACH CARD-ROW COVERED BY da. (cOULD MAKE THIS A SUBROUTINE
  27. ;TO SAVE CODE SPACE.)
  28. JSRgETsCANlINE;GET TWO POINTERS TO SCREEN DATA (R5 AND R6)
  29. ;PUSH fg POINTER TO FIRST BYTE IN LEFT-MOST CARD COVERED BY da
  30. aDDvw#(da_left*8),R5
  31. ;START AT RIGHT SIDE OF da AND READ BYTES TO THE LEFT
  32. LDY#(da_width*8)-1;POINT TO LAST BYTE IN RIGHT-MOST CARD ON LINE
  33. 20$:;FOR EACH BYTE IN CARDS ON THIS CARD-ROW
  34. LDA(R5),Y;GET BYTE FROM fg SCREEN AREA
  35. JSRsAVEbYTE;AND SAVE IT TO BUFFER
  36. 30$:;ON TO NEXT BYTE TO THE LEFT
  37. CPY#$FF;OFF LEFT EDGE OF da SPACE YET?
  38. BNE20$;LOOP FOR NEXT BYTE IF NOT...
  39. ;ON TO NEXT CARD ROW
  40. TXA;ADD 8 (# LINES PER CARD) TO SCANLINE INDEX
  41. ADC#8
  42. CPX#(da_top+da_height)*8
  43. ;OFF BOTTOM EDGE YET?
  44. BCC10$;LOOP FOR NEXT LINE IF NOT...
  45. 90$:RTS
  46. ;*************************************************************************
  47. ;rESTOREsCREEN
  48. ;tHIS ROUTINE RECOVERS A PORTION OF THE APPLICATION'S fg SCREEN (IF NECESSARY).
  49. ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
  50. ;mODIFIED BY r. kNOP TO RESTORE fg ONLY
  51. ;cALLER:dasTART
  52. ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
  53. ;SCREENbUF = APPLICATION'S fg AND bg SCREEN DATA
  54. ;rETURNS:fg AND bg SCREENS RESTORED
  55. ;aLTERS:A, X, Y, R0, R1, R5, R6
  56. ;************************************************************************
  57. rESTOREsCREEN:
  58. BITRECOVERfLAG;DO WE NEED TO SAVE fg?
  59. BPL90$;SKIP IF NOT...
  60. lOADwR0,#SCREENbUF;USE R0 AS POINTER TO BUFFER
  61. LDX#da_top*8;USE X AS SCANLINE #, START AT TOP
  62. 10$:;FOR EACH CARD-ROW COVERED BY da
  63. JSRgETsCANlINE;GET TWO POINTERS TO SCREEN DATA (R5 AND R6)
  64. ;PUSH fg POINTER TO FIRST BYTE IN LEFT-MOST CARD COVERED BY da
  65. aDDvw#(da_left*8),R5
  66. ;START AT RIGHT SIDE OF da AND WRITE BYTES TO THE LEFT
  67. LDY#(da_width*8)-1 ;POINT TO LAST BYTE IN RIGHT-MOST CARD ON LINE
  68. 20$:;FOR EACH BYTE IN CARDS ON THIS CARD-ROW
  69. JSRgETbYTE;GET BYTE FROM BUFFER
  70. STA(R5),Y;AND SAVE TO fg SCREEN
  71. 30$:;ON TO NEXT BYTE TO THE LEFT
  72. CPY#$FF;OFF LEFT EDGE OF da SPACE YET?
  73. BNE20$;LOOP FOR NEXT BYTE IF NOT...
  74. ;ON TO NEXT CARD ROW
  75. TXA;ADD 8 (# LINES PER CARD) TO SCANLINE INDEX
  76. ADC#8
  77. CPX#(da_top+da_height)*8
  78. ;OFF BOTTOM EDGE YET?
  79. BCC10$;LOOP FOR NEXT LINE IF NOT...
  80. 90$:RTS
  81. ;*************************************************************************
  82. ;sAVEcOLORS
  83. ;tHIS ROUTINE SAVES A PORTION OF THE APPLICATION'S COLOR TABLE.
  84. ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
  85. ;cALLER:dasTAR
  86. ;*************************************************************************
  87. ;sAVEcOLORS
  88. ;tHIS ROUTINE SAVES A PORTION OF THE APPLICATION'S COLOR TABLE.
  89. ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
  90. ;cALLER:dasTART
  91. ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
  92. ;rETURNS:COLORbUF = APPLICATION'S COLOR TABLE DATA
  93. ;aLTERS:A, X, Y, R0, R1, R2
  94. ;************************************************************************
  95. sAVEcOLORS:
  96. lOADwR0,#COLORbUF;USE R0 AS POINTER TO BUFFER
  97. lOADwR2,#color_matrix + (da_top * 40) + da_left
  98. ;USE R1 AS POINTER INTO COLOR MATRIX
  99. ;STORAGE AREA (START AT TOP LEFT OF
  100. ;WHERE da LIES).
  101. LDX#da_height;USE X AS CARD-LINE COUNTER
  102. 10$:;FOR EACH CARD-LINE COVERED BY da
  103. ;START AT RIGHT SIDE OF da AND READ BYTES TO THE LEFT
  104. LDY#da_width-1;POINT TO RIGHT-MOST CARD ON LINE
  105. 20$:;FOR EACH CARD ON LINE: FIRST SAVE CARD COLOR IF NECESSARY
  106. BITRECOVERfLAG;DO WE NEED TO SAVE APPLICATION'S COLORS?
  107. BVC30$;SKIP IF NOT...
  108. LDA(R2),Y;GET BYTE FROM color_matrix AREA
  109. JSRsAVEbYTE;AND SAVE IT TO BUFFER
  110. 30$:;AND NOW STUFF CARD WITH VALUE WE WANT
  111. LDAcolor_matrix+40-1
  112. ;GET CARD COLOR VALUE FROM TOP-RIGHT CORNER
  113. ;OF APPLICATION'S SCREEN
  114. STA(R2),Y;AND USE AS COLOR FOR THIS CARD
  115. ;ON TO NEXT BYTE TO THE LEFT
  116. DEY;OFF LEFT EDGE OF da SPACE YET?
  117. BPL20$;LOOP FOR NEXT BYTE IF NOT...
  118. ;ON TO NEXT LINE
  119. aDDvw#40,R2;PUSH POINTER TO NEXT LINE IN color_matrix
  120. DEX;ONE LESS LINE TO GO
  121. BNE10$;LOOP IF MORE LINES TO GO...
  122. ;*************************************************************************
  123. ;rESTOREcOLORS
  124. ;tHIS ROUTINE RECOVERS A PORTION OF THE APPLICATION'S COLOR TABLE.
  125. ;aUTHOR:eRIC e. dEL sESTO, aUGUST
  126. ;*************************************************************************
  127. ;rESTOREcOLORS
  128. ;tHIS ROUTINE RECOVERS A PORTION OF THE APPLICATION'S COLOR TABLE.
  129. ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
  130. ;cALLER:dasTART
  131. ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
  132. ;COLORbUF = APPLICATION'S COLOR TABLE DATA
  133. ;rETURNS:color_matrix UPDATED
  134. ;aLTERS:A, X, Y, R0, R1, R2
  135. ;************************************************************************
  136. rESTOREcOLORS:
  137. BITRECOVERfLAG;DO WE NEED TO RECOVER APPLICATION'S COLORS?
  138. BVC90$;SKIP IF NOT...
  139. lOADwR0,#COLORbUF;USE R0 AS POINTER TO BUFFER
  140. lOADwR2,#color_matrix + (da_top * 40) + da_left
  141. ;USE R1 AS POINTER INTO COLOR MATRIX
  142. ;STORAGE AREA (START 
  143. AT TOP LEFT OF
  144. ;WHERE da LIES).
  145. LDX#da_height;USE X AS CARD-LINE COUNTER
  146. 10$:;FOR EACH CARD-LINE COVERED BY da
  147. ;START AT RIGHT SIDE OF da AND STUFF BYTES TO THE LEFT
  148. LDY#da_width-1;POINT TO RIGHT-MOST CARD ON LINE
  149. 20$:;FOR EACH CARD ON LINE: RESTORE CARD COLOR VALUE
  150. JSRgETbYTE;GET BYTE FROM BUFFER
  151. STA(R2),Y;SAVE BYTE TO color_matrix AREA
  152. ;ON TO NEXT BYTE TO THE LEFT
  153. DEY;OFF LEFT EDGE OF da SPACE YET?
  154. BPL20$;LOOP FOR NEXT BYTE IF NOT...
  155. ;ON TO NEXT LINE
  156. aDDvw#40,R2;P
  157. USH POINTER TO NEXT LINE IN color_matrix
  158. DEX;ONE LESS LINE TO GO
  159. BNE10$;LOOP IF MORE LINES TO GO...
  160. 90$:;ALL DONE
  161. ;*************************************************************************
  162. ;sAVEb
  163. ;*************************************************************************
  164. ;sAVEbYTE, gETbYTE
  165. tHESE TWO ROUTINES ARE USED TO SAVE/RECALL A BYTE TO/FROM THE
  166. ;SCREEN AND COLOR BUFFERS.
  167. ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
  168. ;cALLER:sAVEsCREEN, rESTOREsCREEN, sAVEcOLORS, rESTOREcOLORS
  169. ;pASS:R0 = POINTER INTO SCREENbUF OR COLORbUF
  170. ;A = VALUE TO SAVE (sAVEbYTE)
  171. ;rETURNS:R0 = POINTER TO NEXT BYTE IN BUFFER
  172. ;A = VALUE FROM BUFFER (gETbYTE)
  173. ;X,Y = SAME AS BEFORE
  174. ;aLTERS:A, R1l
  175. ;************************************************************************
  176. sAVEbYTE:
  177. STYR1l;SAVE Y REGISTER TEMPORARILY
  178. LDY#0
  179. STA(R0),Y;SAVE BYTE INTO BUFFER
  180. BRAfINISH;SKIP AHEAD TO FINISH UP...
  181. gETbYTE:
  182. STYR1l;SAVE Y REGISTER TEMPORARILY
  183. LDY#0
  184. LDA(R0),Y;GET BYTE FROM BUFFER
  185. fINISH:
  186. INCR0l;INCREMENT POINTER (THESE THREE LINES
  187. BNE90$;CONSTITUTE THE iNCw MACRO.)
  188. INCR0h
  189. 90$:LDYR1l;RESTORE Y REGISTER
  190.