0100 ;XEPRINT SOURCE CODEõ0110 ;XEP-PRINT USR ROUTINEõ0120 ; FUNCTION:õ0130 ; A=USR(XEPRINT, X, Y, ADR(A$),õ0140 ; LEN(A$) )õ0150 ;õ0160 ; Using direct screen RAM access,õ0170 ;write the string pointed toõ0180 ;on the graphics mode 0 display.õ0190 ; Handle CHR$(125), clear screenõ0200 ;properly, but all other charsõ0210 ;are printed. No editing, etc.õ0220 ; 30 A=USR(XEPFREAD, "D:PIC.GR8", ADR(BUF$))õ0230 SAVMSC = 88 ;Screen RAM pointerõ0240 RETURN = 155 ;Carraige Returnõ0250 CLEAR = 125 ;clear screenõ0260 STRING = $D0 ; String pointerõ0270 STRLEN = STRING+2 ; String counter, 2 bytesõ0280 XPOS = STRLEN+2 ; xpos of cursorõ0290 YPOS = XPOS+1 ;ypos of cursorõ0300 PUTADR = YPOS+1 ;2byte screen pointerõ0310 ORGADR = PUTADR+2 ; Save original PUTADR hereõ0320 CLRADR = ORGADR+2 ; Working register to clear screenõ0330 TEMP = CLRADR+2 ; Work, convert ASCII to internalõ0340 *= $0600õ0350 PLA õ0360 CMP #$04õ0370 BEQ BEG1õ0380 ;õ0390 TAX õ0400 BEQ LEAVEõ0410 ;õ0420 LOOPEMõ0430 PLA õ0440 PLA õ0450 DEX õ0460 BNE LOOPEMõ0470 ;õ0480 LEAVEõ0490 RTS õ0500 BEG1õ0510 LDA #$00õ0520 STA PUTADRõ0530 STA PUTADR+1õ0540 PLA õ0550 PLA õ0560 STA XPOSõ0570 PLA õ0580 PLA õ0590 STA YPOSõ0600 TAX õ0610 BEQ NOADDõ0620 ;õ0630 BY40õ0640 LDA #40õ0650 CLC õ0660 ADC PUTADRõ0670 STA PUTADRõ0680 BCC BY40Aõ0690 ;õ0700 INC PUTADR+1õ0710 BY40Aõ0720 DEX õ0730 BNE BY40õ0740 ;õ0750 NOADDõ0760 LDA XPOSõ0770 CLC õ0780 ADC PUTADRõ0790 STA PUTADRõ0800 BCC SAVEITõ0810 ;õ0820 INC PUTADR+1õ0830 SAVEIT ; Save orig. put addrõ0840 ;õ0850 ; Save start PUT addressõ0860 ;õ0870 CLC õ0880 LDA SAVMSCõ0890 ADC PUTADRõ0900 STA PUTADRõ0910 STA ORGADRõ0920 LDA SAVMSC+1õ0930 ADC PUTADR+1õ0940 STA PUTADR+1õ0950 STA ORGADR+1õ0960 ;õ0970 ; Get string addressõ0980 ;õ0990 PLA õ1000 STA STRING+1õ1010 PLA õ1020 STA STRINGõ1030 PLA ; get string lenõ1040 STA STRLEN+1õ1050 PLA õ1060 STA STRLENõ1070 ;õ1080 ; All inits complete, nowõ1090 ;get the string handlingõ1100 ;RETURN and CLEAR screenõ1110 ;chars. properly.õ1120 ;õ1130 PRINTõ1140 LDY #$00 ;Always zero hereõ1150 SEC ;DECREMENT, DONE TEST FIRSTõ1160 LDA STRLENõ1170 SBC #$01õ1180 STA STRLENõ1190 BCS PRINT1õ1200 ;õ1210 LDA STRLEN+1 ;ALL DONE?õ1220 BEQ EXITNOWõ1230 ;õ1240 DEC STRLEN+1õ1250 PRINT1õ1260 LDA (STRING),Yõ1270 CMP #RETURNõ1280 BEQ RETURNITõ1290 ;õ1300 CMP #CLEARõ1310 BEQ CLEARITõ1320 ;õ1330 STA TEMPõ1340 AND #$7F ; Forget invidõ1350 TAX ; Convert to screenõ1360 CPX #$60õ1370 BCS PUTNOWõ1380 ;õ1390 LDA #$40õ1400 CPX #$20 ; ASC<32 THEN ADD 64õ1410 BCC ADCVõ1420 ;õ1430 LDA #$E0 ; $E0 = -32 32