home *** CD-ROM | disk | FTP | other *** search
- rpnSCREEN
- prg FORMATTED geos FILE v1.0
- sTAR nx-10
- rpnroutines
- blaster's converter v2.5
- rpnram
- rpnscreen
- wRITE iMAGE v2.0
- GEOwRITE v2.0
- 0sAVE/rESTORE sCREEN ROUTINES FOR da'S MODIFIED TO DO fg SCREEN ONLY.
- ;*************************************************************************
- ;sAVEsCREEN
- ;tHIS ROUTINE SAVES A PORTION OF THE APPLICATION'S fg SCREEN (IF NECESSARY).
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
- ;mODIFIED BY r. kNOP TO SAVE fg ONLY
- ;cALLER:dasTART
- ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
- ;rETURNS:SCREENbUF = APPLICATION'S fg AND bg SCREEN DATA
- ;aLTERS:A, X, Y, R0, R1, R5, R6
- ;************************************************************************
- sAVEsCREEN:
- BITRECOVERfLAG;DO WE NEED TO SAVE fg?
- BPL90$;SKIP IF NOT...
- lOADwR0,#SCREENbUF;USE R0 AS POINTER TO BUFFER
- LDX#da_top*8;USE X AS SCANLINE #, START AT TOP
- 10$:;FOR EACH CARD-ROW COVERED BY da. (cOULD MAKE THIS A SUBROUTINE
- ;TO SAVE CODE SPACE.)
- JSRgETsCANlINE;GET TWO POINTERS TO SCREEN DATA (R5 AND R6)
- ;PUSH fg POINTER TO FIRST BYTE IN LEFT-MOST CARD COVERED BY da
- aDDvw#(da_left*8),R5
- ;START AT RIGHT SIDE OF da AND READ BYTES TO THE LEFT
- LDY#(da_width*8)-1;POINT TO LAST BYTE IN RIGHT-MOST CARD ON LINE
- 20$:;FOR EACH BYTE IN CARDS ON THIS CARD-ROW
- LDA(R5),Y;GET BYTE FROM fg SCREEN AREA
- JSRsAVEbYTE;AND SAVE IT TO BUFFER
- 30$:;ON TO NEXT BYTE TO THE LEFT
- CPY#$FF;OFF LEFT EDGE OF da SPACE YET?
- BNE20$;LOOP FOR NEXT BYTE IF NOT...
- ;ON TO NEXT CARD ROW
- TXA;ADD 8 (# LINES PER CARD) TO SCANLINE INDEX
- ADC#8
- CPX#(da_top+da_height)*8
- ;OFF BOTTOM EDGE YET?
- BCC10$;LOOP FOR NEXT LINE IF NOT...
- 90$:RTS
- ;*************************************************************************
- ;rESTOREsCREEN
- ;tHIS ROUTINE RECOVERS A PORTION OF THE APPLICATION'S fg SCREEN (IF NECESSARY).
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
- ;mODIFIED BY r. kNOP TO RESTORE fg ONLY
- ;cALLER:dasTART
- ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
- ;SCREENbUF = APPLICATION'S fg AND bg SCREEN DATA
- ;rETURNS:fg AND bg SCREENS RESTORED
- ;aLTERS:A, X, Y, R0, R1, R5, R6
- ;************************************************************************
- rESTOREsCREEN:
- BITRECOVERfLAG;DO WE NEED TO SAVE fg?
- BPL90$;SKIP IF NOT...
- lOADwR0,#SCREENbUF;USE R0 AS POINTER TO BUFFER
- LDX#da_top*8;USE X AS SCANLINE #, START AT TOP
- 10$:;FOR EACH CARD-ROW COVERED BY da
- JSRgETsCANlINE;GET TWO POINTERS TO SCREEN DATA (R5 AND R6)
- ;PUSH fg POINTER TO FIRST BYTE IN LEFT-MOST CARD COVERED BY da
- aDDvw#(da_left*8),R5
- ;START AT RIGHT SIDE OF da AND WRITE BYTES TO THE LEFT
- LDY#(da_width*8)-1 ;POINT TO LAST BYTE IN RIGHT-MOST CARD ON LINE
- 20$:;FOR EACH BYTE IN CARDS ON THIS CARD-ROW
- JSRgETbYTE;GET BYTE FROM BUFFER
- STA(R5),Y;AND SAVE TO fg SCREEN
- 30$:;ON TO NEXT BYTE TO THE LEFT
- CPY#$FF;OFF LEFT EDGE OF da SPACE YET?
- BNE20$;LOOP FOR NEXT BYTE IF NOT...
- ;ON TO NEXT CARD ROW
- TXA;ADD 8 (# LINES PER CARD) TO SCANLINE INDEX
- ADC#8
- CPX#(da_top+da_height)*8
- ;OFF BOTTOM EDGE YET?
- BCC10$;LOOP FOR NEXT LINE IF NOT...
- 90$:RTS
- ;*************************************************************************
- ;sAVEcOLORS
- ;tHIS ROUTINE SAVES A PORTION OF THE APPLICATION'S COLOR TABLE.
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
- ;cALLER:dasTAR
- ;*************************************************************************
- ;sAVEcOLORS
- ;tHIS ROUTINE SAVES A PORTION OF THE APPLICATION'S COLOR TABLE.
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
- ;cALLER:dasTART
- ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
- ;rETURNS:COLORbUF = APPLICATION'S COLOR TABLE DATA
- ;aLTERS:A, X, Y, R0, R1, R2
- ;************************************************************************
- sAVEcOLORS:
- lOADwR0,#COLORbUF;USE R0 AS POINTER TO BUFFER
- lOADwR2,#color_matrix + (da_top * 40) + da_left
- ;USE R1 AS POINTER INTO COLOR MATRIX
- ;STORAGE AREA (START AT TOP LEFT OF
- ;WHERE da LIES).
- LDX#da_height;USE X AS CARD-LINE COUNTER
- 10$:;FOR EACH CARD-LINE COVERED BY da
- ;START AT RIGHT SIDE OF da AND READ BYTES TO THE LEFT
- LDY#da_width-1;POINT TO RIGHT-MOST CARD ON LINE
- 20$:;FOR EACH CARD ON LINE: FIRST SAVE CARD COLOR IF NECESSARY
- BITRECOVERfLAG;DO WE NEED TO SAVE APPLICATION'S COLORS?
- BVC30$;SKIP IF NOT...
- LDA(R2),Y;GET BYTE FROM color_matrix AREA
- JSRsAVEbYTE;AND SAVE IT TO BUFFER
- 30$:;AND NOW STUFF CARD WITH VALUE WE WANT
- LDAcolor_matrix+40-1
- ;GET CARD COLOR VALUE FROM TOP-RIGHT CORNER
- ;OF APPLICATION'S SCREEN
- STA(R2),Y;AND USE AS COLOR FOR THIS CARD
- ;ON TO NEXT BYTE TO THE LEFT
- DEY;OFF LEFT EDGE OF da SPACE YET?
- BPL20$;LOOP FOR NEXT BYTE IF NOT...
- ;ON TO NEXT LINE
- aDDvw#40,R2;PUSH POINTER TO NEXT LINE IN color_matrix
- DEX;ONE LESS LINE TO GO
- BNE10$;LOOP IF MORE LINES TO GO...
- ;*************************************************************************
- ;rESTOREcOLORS
- ;tHIS ROUTINE RECOVERS A PORTION OF THE APPLICATION'S COLOR TABLE.
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST
- ;*************************************************************************
- ;rESTOREcOLORS
- ;tHIS ROUTINE RECOVERS A PORTION OF THE APPLICATION'S COLOR TABLE.
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
- ;cALLER:dasTART
- ;pASS:RECOVERfLAG = R10l VALUE PASSED FROM APPLICATION
- ;COLORbUF = APPLICATION'S COLOR TABLE DATA
- ;rETURNS:color_matrix UPDATED
- ;aLTERS:A, X, Y, R0, R1, R2
- ;************************************************************************
- rESTOREcOLORS:
- BITRECOVERfLAG;DO WE NEED TO RECOVER APPLICATION'S COLORS?
- BVC90$;SKIP IF NOT...
- lOADwR0,#COLORbUF;USE R0 AS POINTER TO BUFFER
- lOADwR2,#color_matrix + (da_top * 40) + da_left
- ;USE R1 AS POINTER INTO COLOR MATRIX
- ;STORAGE AREA (START
- AT TOP LEFT OF
- ;WHERE da LIES).
- LDX#da_height;USE X AS CARD-LINE COUNTER
- 10$:;FOR EACH CARD-LINE COVERED BY da
- ;START AT RIGHT SIDE OF da AND STUFF BYTES TO THE LEFT
- LDY#da_width-1;POINT TO RIGHT-MOST CARD ON LINE
- 20$:;FOR EACH CARD ON LINE: RESTORE CARD COLOR VALUE
- JSRgETbYTE;GET BYTE FROM BUFFER
- STA(R2),Y;SAVE BYTE TO color_matrix AREA
- ;ON TO NEXT BYTE TO THE LEFT
- DEY;OFF LEFT EDGE OF da SPACE YET?
- BPL20$;LOOP FOR NEXT BYTE IF NOT...
- ;ON TO NEXT LINE
- aDDvw#40,R2;P
- USH POINTER TO NEXT LINE IN color_matrix
- DEX;ONE LESS LINE TO GO
- BNE10$;LOOP IF MORE LINES TO GO...
- 90$:;ALL DONE
- ;*************************************************************************
- ;sAVEb
- ;*************************************************************************
- ;sAVEbYTE, gETbYTE
- tHESE TWO ROUTINES ARE USED TO SAVE/RECALL A BYTE TO/FROM THE
- ;SCREEN AND COLOR BUFFERS.
- ;aUTHOR:eRIC e. dEL sESTO, aUGUST 1987
- ;cALLER:sAVEsCREEN, rESTOREsCREEN, sAVEcOLORS, rESTOREcOLORS
- ;pASS:R0 = POINTER INTO SCREENbUF OR COLORbUF
- ;A = VALUE TO SAVE (sAVEbYTE)
- ;rETURNS:R0 = POINTER TO NEXT BYTE IN BUFFER
- ;A = VALUE FROM BUFFER (gETbYTE)
- ;X,Y = SAME AS BEFORE
- ;aLTERS:A, R1l
- ;************************************************************************
- sAVEbYTE:
- STYR1l;SAVE Y REGISTER TEMPORARILY
- LDY#0
- STA(R0),Y;SAVE BYTE INTO BUFFER
- BRAfINISH;SKIP AHEAD TO FINISH UP...
- gETbYTE:
- STYR1l;SAVE Y REGISTER TEMPORARILY
- LDY#0
- LDA(R0),Y;GET BYTE FROM BUFFER
- fINISH:
- INCR0l;INCREMENT POINTER (THESE THREE LINES
- BNE90$;CONSTITUTE THE iNCw MACRO.)
- INCR0h
- 90$:LDYR1l;RESTORE Y REGISTER
-