home *** CD-ROM | disk | FTP | other *** search
- pRINTERsHELL
- prg FORMATTED geos FILE v1.0
- wRITE iMAGE v2.0
- GEOwRITE v2.1
- .sOURCE CODE FOR pRINTER sHELL. do not modify. fOR VIEWING ONLY.
- .INCLUDEsHELLzERO
- @mOVEdATA
- ==$C17E
- @start of driver ($7900)
- .PSECT
- JMPJiNITfORpRINT
- JMPJsTARTpRINT
- JMPJpRINTbUFFER
- JMPJsTOPpRINT
- JMPJgETdIMENSIONS
- JMPRpRINTtEXT
- JMPJsTARTascii
- @sETnlq
- LDA#$C0
- STApRINTmODE
- JSRoPENcHANNEL
- LDX#MsETnlq
- JSRsENDmESSAGE
- @cLOSEcHA
- NNEL:
- JMPRcLOSEcHANNEL;
- @eNTRY FIXED AT $7922.
- @JiNITfOR
- pRINT:
- JSRiNITfORpRINT
- LDX#0;fIXES BUG IN GEOcALC.
- @sENDbYTE
- JMPRsENDbYTE;
- @eNTRY FIXED AT $792B.
- @oPENcHAN
- JMPRoPENcHANNEL;
- @eNTRY FIXED AT $792E.
- @opoFFSET
- .BYTE0;oFFSETS USED BY oPENwINDOW (ODD BYTES).
- @pRIMARY
- .BYTENpRIMARY;
- @pARAMETER FIXED AT $7932.
- .BYTE7;sECOND OFFSET.
- @sECONDAR
- .BYTENsECONDARY;
- @pARAMETER FIXED AT $7934.
- .BYTE14;tHIRD OFFSET.
- @pOINTERS
- .BLOCK6;tHREE POINTERS TO 640-BYTE CARD BUFFERS.
- sTACKsIZE=20;aLL CALLS TO sHELL SUBROUTINES MUST NOT HAVE
- @sTACKsAV
- E:;USED MORE THAN TWENTY BYTES ON THE STACK.
- .BLOCKsTACKsIZE
- @JgETdIME
- NSIONS:
- LDX#cARDSwIDE;
- @pARAMETER FIXED AT $7951.
- LDY#cARDSlONG;
- @pARAMETER FIXED AT $7953.
- LDA#0
- @sENDmESS
- AGE:;
- @eNTRY FIXED AT $7957.
- LDYmESSAGElENGTH,X;gET LENGTH OF MESSAGE "x".
- @(aT $7958.)
- BEQ99$;bRANCH IF MESSAGE LENGTH IS ZERO.
- LDAmESSAGEoFFSET,X;gET OFFSET TO MESSAGE "x".
- @(aT $795D.)
- 10$LDAMESSAGES,X;gET NEXT BYTE OF MESSAGE.
- @(aT $7961.)
- JSRsENDbYTE;tRANSMIT BYTE TO PRINTER.
- INX;sTEP TO NEXT BYTE.
- DEY;dECREMENT LENGTH COUNTER.
- BNE10$
- 99$RTS
- @sHIFTpIX
- ELS:
- @eNTRY FIXED AT $796B.
- LDX#23;sHIFT THE PIXELS WITHIN THE wINDOW ONE
- 10$ASLwINDOW+48,X;POSITION TO THE LEFT. tHE NEW PIXELS ON
- ROLwINDOW+24,X;THE RIGHT ARE CLEARED. aFTER 8 SHIFTS, THE
- ROLwINDOW,X;RIGHT HAND PANE IS CLEARED AND THE
- DEX;SUBROUTINE RETURNS WITH THE z-FLAG SET.
- BPL10$
- DECpIXELcOUNTER;pIXELcOUNTER IS INITIALIZED BY THE
- RTS;SUBROUTINE cOLORwINDOW.
- @oPENwIND
- OW:
- @eNTRY FIXED AT $7979.
- STYaCTIVEcOLUMN;sAVE ACTIVE COLUMN MINUS TWO TIMES EIGHT.
- LDA#<-8;gET READY IN CASE WE'RE ON COLUMN ONE.
- STATEMP
- BMI6$;bRANCH IF ON FIRST COLUMN.
- ASLA;mAXIMUM VALUE IS 80 SO CARRY IS CLEAR.
- ASLA
- STATEMP
- LDA#0
- ROLA
- ASLTEMP
- ROLA
- 6$STATEMP+1
- LDX#4
- 10$CLC
- LDYopoFFSETS,X
- LDApOINTERS,X
- ADCTEMP;lOW PARAMETER FOR LDA 1234,Y.
- STAoPENpANE+7,Y
- LDApOINTERS+1,X
- ADCTEMP+1;hIGH PARAMETER FOR LDA 1234,Y.
- STAoPENpANE+8,Y
- BPL10$
- ; fALL THROUGH INTO cOLORwINDOW ON NEXT PAGE.
- @cOLORwIN
- DOW:
- @eNTRY FIXED AT $79AA.
- LDA#8
- STApIXELcOUNTER
- JSRoPENrIGHTpANE
- JSRoPENmIDpANE
- @oPENlEFT
- pANE:
- LDYaCTIVEcOLUMN;y POINTS TO CURRENT MIDDLE PANE SO
- DEY;DECREMENT IT.
- JSRsETcOLOR;mODIFY "EOR #0" INSTRUCTION OF oPENpANE.
- LDY#$FF;y GETS INCREMENTED TO POINT TO FIRST CARD.
- LDA#0;a WILL INDEX INTO LEFT PANE OF WINDOW.
- BEQoPENcONT;(aLWAYS)
- @oPENmIDp
- LDYaCTIVEcOLUMN;y POINTS TO CURRENT MIDDLE PANE.
- JSRsETcOLOR;mODIFY "EOR #0" INSTRUCTION OF oPENpANE.
- LDY#$07;y GETS INC'ED TO POINT TO SECOND CARD.
- LDA#24;a WILL INDEX INTO MIDDLE PANE OF WINDOW.
- BNEoPENcONT;(aLWAYS)
- @oPENrIGH
- TpANE:
- LDYaCTIVEcOLUMN;y POINTS TO CURRENT MIDDLE PANE SO
- INY;INCREMENT IT.
- JSRsETcOLOR;mODIFY "EOR #0" INSTRUCTION OF oPENpANE.
- LDY#$0F;y GETS INC'ED TO POINT TO THIRD CARD.
- LDA#48;a WILL INDEX INTO RIGHT PANE OF WINDOW.
- oPENcONT:
- cAfR:ORA#7;oFFSET FOR pREwINDOW IS MODIFIED HERE.
- @oPENpANE
- LDA#8;cOUNTER FOR EIGHT BYTES PER CARD.
- STATEMP
- 10$INX
- LDA1234,Y;tHIS ADDRESS GETS MODIFIED.
- EOR#0;rESERVE FOR COLOR MODIFICATION.
- STApREwINDOW+15,X;bOTTOM CARD.
- LDA1234,Y;tHIS ADDRESS GETS MODIFIED.
- EOR#0;rESERVE FOR COLOR MODIFICATION.
- STApREwINDOW+7,X;mIDDLE CARD.
- LDA1234,Y;tHIS ADDRESS GETS MODIFIED.
- EOR#0;rESERVE FOR COLOR MODIFICATION.
- STApREwINDOW-1,X;tOP CARD.
- DECTEMP
- BNE10$
- @sETcOLOR
- LDA(R1),Y;gET COLORS FOR BOTTOM CARD OF PANE.
- JSRcALCcOLOR;cALCULATE ACTIVE FORE/BACKGROUND PIXELS.
- STAoPENpANE+9;oPCODE FOR "LDA" OR "EOR".
- STXoPENpANE+10;pARAMETER "$00" OR "$FF".
- LDA(R2),Y;gET COLORS FOR MIDDLE CARD OF PANE.
- JSRcALCcOLOR;cALCULATE ACTIVE FORE/BACKGROUND PIXELS.
- STAoPENpANE+16;oPCODE FOR "LDA" OR "EOR".
- STXoPENpANE+17;pARAMETER "$00" OR "$FF".
- LDA(R3),Y;gET COLORS FOR TOP CARD OF PANE.
- JSRcALCcOLOR;cALCULATE ACTIVE FORE/BACKGROUND PIXELS.
- STAoPENpANE+23;oPCODE FOR "LDA" OR "EOR".
- STXoPENpANE+24;pARAMETER "$00" OR "$FF".
- @cALCcOLO
- STYTEMP;tEMP SAVE CURRENT COLUMN POSTION.
- sEfI:LDY#0;sELECTfILTER
- @pARAMETER FIXED AT $7A1D.
- PHA;tEST FOR A MATCH OF THE FOREGROUND COLOR.
- LSRA
- LSRA
- LSRA
- LSRA
- CMP#8;cOPY msb OF NYBBLE TO CARRY BIT.
- AND#7;tHREE lsbS REMAIN.
- LDAcOLORfILTERS,Y;gET lsbYTE OF FOREGROUND FILTER
- @(AT $7A29)
- BCC10$;bRANCH IF THAT'S THE ONE WE NEED.
- LDAcOLORfILTERS+1,Y;eLSE GET THE msbYTE FILTER.
- 10$ANDbITtABLE,X;sEE IF THIS CARD'S COLOR IS ON THE FILTER.
- BEQ20$;bRANCH IF NOT WITH acc=0.
- LDA#2;eLSE USE 2 AS FOREGROUND PART OF INDEX.
- 20$STATEMP+1
- PLA;nOW TEST FOR MATCH OF BACKGROUND COLOR.
- AND#$0F
- CMP#8;cOPY msb OF NYBBLE TO CARRY BIT.
- AND#7;tHREE lsbS REMAIN.
- LDAcOLORfILTERS+2,Y;gET BACKGROUND FILTER (lsbYTE).
- BCC30$;bRANCH IF THAT'S THE ONE WE NEED.
- LDAcOLORfILTERS+3,Y;eLSE GET THE msbYTE FILTER.
- 30$LDYTEMP+1
- ANDbITtABLE,X;sEE IF THIS CARD'S COLOR IS ON THE FILTER.
- BEQ40$;bRANCH IF NOT.
- INY;eLSE USE 1 AS BACKGROUND PART OF INDEX.
- 40$LDAcOLORoPtABLE,Y
- LDXcOLORpARMtABLE,Y
- LDYTEMP;rESTORE y.
- @cOLORoPt
- ABLE:
- .BYTE$A9,$49,$49,$A9;"LDA", "EOR", "EOR", "LDA".
- @cOLORpAR
- MtABLE:
- .BYTE$00,$FF,$00,$FF
- @bITtABLE
- .BYTE1,2,4,8,16,32,64,128;
- @tABLE STARTS AT $7A62.
- @JsTARTas
- LDA#$81;sET ascii fLAG.
- BNEcONTsTART
- @JsTARTpR
- LDA#$40;cLEAR ascii fLAG, BUT SET BIT 6 FOR sTOPpRINT.
- cONTsTART:STApRINTmODE
- JSRoPENcHANNEL;tEST IF PRINTER AVAILABLE.
- JSRcLOSEcHANNEL
- LDXstatus
- BEQpRmO
- RTS;eXIT WITH "PRINTER INACCESSIBLE".
- pRmO:LDA#0;pRINTmODE
- @pARAMETER STORED A$7A7F.
- BPLcONTpRINT
- JMPRsTARTtEXT
- cONTpRINT:TSX;sAVE STACK POINTER FOR gETbUFFER.
- STXsTACKpOINT
- JSRgETbUFFER;gET FIRST BUFFER AND VALID POINTERS.
- BITpRINTmODE
- BVCsETaPPeNV;bRANCH ON BLANK PAGE.
- LDA#7;iNITIALIZE cARDfRACTION FOR ONE FULL CARD.
- STAcARDfRACTION
- LDAR8;sEE IF COLOR PRINTING IS NEEDED.
- BNEdObORDER;bRANCH IF SO.
- LDY#80;eLSE FILL BOTTOM COLOR BUFFER WITH
- bLcO:LDA#$01;BLACK ON WHITE
- @(AT $7A9D).
- 110$STA(R1),Y
- BNE110$
- dObORDER:LDY#81;nOW FILL MIDDLE BUFFER FOR
- bOcO:LDA#$11;wHITE ON WHITE
- @(AT $7AA6).
- STA(R1),Y;fILL RIGHT BORDER COLOR FOR BOTTOM BUFFER.
- 210$STA(R2),Y;fILL MIDDLE COLOR BUFFER FOR BLANK TOP BORDER.
- BPL210$
- STA(R1),Y;fILL LEFT BORDER COLOR FOR BOTTOM BUFFER.
- LDX#4
- 220$LDAR5-1,X;iNITIALIZE TOP TWO CARD BUFFER POINTERS.
- STApOINTERS+1,X
- BNE220$
- JSRnEXTbUFFER
- JSRpRINTpAGE
- @sETaPPeN
- LDY#$8F-$22
- 10$LDA(R4),Y
- STApROGeND-pROGeND+$22,Y;fORCE abs,y MODE ON PAGE ZERO.
- BPL10$
- JMPcLOSEcHANNEL
- @mOVEdOWN
- @eNTRY FIXED AT $7ACE
- STATEMP;nUMBER OF PIXELS TO MOVE DOWN.
- LDX$DC01;tEST FOR MOUSE BUTTON DOWN (TO HALT PRINT).
- BNE1111$;bRANCH IF SO.
- LDAcARDfRACTION;eLSE CALCULATE FRACTIONAL PART OF CARD
- SEC;TO SEE IF NECESSARY TO RETURN TO APPLICATION.
- SBCTEMP
- BCS999$;bRANCH IF NOT.
- 100$PHA
- JSRnEXTbUFFER;eLSE GET ANOTHER BUFFER FROM THE APPLICATION.
- ADC#8
- BCC100$
- 999$STAcARDfRACTION
- 1111$JSRnEXTbUFFER;mOUSE BUTTON DOWN - CANCEL PRINT. kEEP
- BEQ1111$;RETURNING TO APP UNTIL IT NOTICES BUTTON.
- @nEXTbUFF
- ER:;uPDATE pOINTERS AND GET MORE DATA.
- LDY#80;mOVE COLOR BUFFERS UP.
- 10$LDA(R2),Y;cOPY MIDDLE COLOR BUFFER
- STA(R3),Y;TO TOP COLOR BUFFER.
- LDA(R1),Y;cOPY BOTTOM COLOR BUFFER
- STA(R2),Y;TO MIDDLE COLOR BUFFER.
- BNE10$
- LDX#1
- 100$LDYpOINTERS+4,X;eXCANGE TOP CARD BUFFER POINTER
- LDApOINTERS+2,X;WITH MIDDLE CARD BUFFER POINTER.
- STApOINTERS+4,X
- STApOINTERS+2,X
- BPL100$
- BITpRINTmODE;sEE IF THE BOTTOM HAS ALREADY BEEN HIT.
- BVS200$;bRANCH IF NOT.
- DECpRINTmODE;eLSE KEEP TRACK OF HOW MANY TIMES THRU.
- RTS;gO IMMEDIATELY BACK TO DRIVER.
- 200$STAR1;cOPY MIDDLE POINTER TO DESTINATION
- LDApOINTERS+3;PARAMETER FOR mOVEdATA.
- STAR1+1
- LDA#>640;nUMBER OF BYTES-TO-MOVE PARAMETER
- STAR2+1;FOR mOVEdATA.
- LDA#<640
- STAR2
- JSRsETaPPeNV
- JSRmOVEdATA;sOURCE PARAMETER IS ALREADY IN R0.
- @gETbUFFE
- LDY#sTACKsIZE;rESTORE aPPLICATION ENVIRONMENT.
- gb10:DEY
- STAsTACKsAVE,Y
- sTpO:CPX#0;sTACKpOINT IS MODIFIED HERE.
- BCCgb10
- STYsTACKpOINT
- LDX#0;cLEAR ERROR FLAG.
- RTS;bACK TO APPLICATION.
- @JsTOPpRI
- DECpRINTmODE;$81 FOR ascii, $40 FOR GRAPHICS.
- BPL100$;bRANCH IF GRAPHICS MODE.
- JMPRsTOPtEXT
- 100$LDY#80;fILL BOTTOM COLOR BUFFER WITH
- LDAbORDERcOLOR;BORDER COLORS.
- 110$STA(R1),Y
- BNE110$
- BEQsETdRIVEReNV;(aLWAYS)
- @JpRINTbU
- FFER:
- LDAR2+1;sEE IF aPPLICATION AND DRIVER WANT COLOR.
- cOfL:AND#0;
- @pARAMETER FIXED AT $7B57.
- STAR8;lET CALLER KNOW.
- BEQ400$;bRANCH IF NOT COLOR.
- LDY#0;eLSE PASS 80 BYTES OF COLOR.
- 300$LDA(R2),Y;gET COLOR PASSED BY aPPLICATION.
- STA(R1),Y;pUT IN BOTTOM COLOR BUFFER.
- CPY#80;sEE IF NEAR RIGHT BORDER.
- BCC300$;bRANCH IF NOT YET THERE.
- 400$LDAR0;aDJUST BOTTOM POINTERS.
- STApOINTERS
- LDAR0+1
- STApOINTERS+1
- sETdRIVEReNV:
- LDX#<-12;cALCULATE BUFFER POINTERS.
- 8$LDAR1+12,X
- ADCpOINToFFtABLE+12-256,X;zERO-PAGE MODE.
- STAR2+12,X
- BNE8$
- JSRoPENcHANNEL
- LDY#$8F-$22;sAVE A BUNCH OF ZERO PAGE LOCATIONS.
- 9$LDApROGeND-pROGeND+$22,Y;fORCE abs,y ON PAGE ZERO.
- STA(R4),Y
- BPL9$
- TSX;rE-CREATE DRIVER'S STACK ENVIRONMENT.
- LDYsTACKpOINT
- 10$LDAsTACKsAVE,Y
- CPY#sTACKsIZE
- BCC10$
- STXsTACKpOINT
- @pOINToFF
- tABLE:;tHREE COLOR BUFFERS, ZERO-PAGE BUFFER,
- .WORD82,82,82,138,640,640;TWO CARD BUFFERS, GENERAL BUFFER.
- .WORDtEXTaDDRESS;
- @fIXED AT $7BA8.
- .WORDxFACEaDDRESS;
- @fIXED AT $7BAA.
- .WORDpROGeND;
- @fIXED AT $7BAC.
- pRINTmODE==pRmO+$7901
- sTACKpOINT==sTpO+$7901
- cARDfRACTION==cAfR+$7901
- cOLORfLAG==cOfL+$7901
- sELECTfILTER==sEfI+$7901
- bORDERcOLOR==bOcO+$7901
- bLACKcOLOR==bLcO+$7901;
- @cUSTOM CODE STARTS AT $7BAE.
- hgeos pRINTER dRIVER sHELL
- pAGE: page
- pRINTED ON: dateaT: timefILE: pRINTERsHELL
- -----------------------------------------------------------------------------------------------
-