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