0100 ; SCREEN DISPLAY SUBROUTINE›0110 ; OUTPUT GR.2 CHARACTERS IN GR.6›0120 ;›0130 ; COPYRIGHT (C) 1983 ROBERT FREEDMAN›0140 ;›0150 ; CALL WITH THE FOLLOWING FROM BASIC›0160 ; ASM=USR(ADR(D6$),ADR(LINE$),LEN(LINE$),PX,PY)›0170 ; PX= X DISPLACEMENT+1, PY=Y DISPLACEMENT+1›0180 ;›0190 *=$630 ; RELOCATABLE›0200 ADRSTR = $CB›0210 SCRMEM = $604›0220 SCRWRK = $CF›0230 LENGTH = $600›0240 XPOS = $601›0250 YPOS = $602›0260 TEMP = $603›0270 OFFSET = $CD›0280 ;›0290 PLA›0300 PLA›0310 STA ADRSTR+1›0320 PLA›0330 STA ADRSTR›0340 PLA›0350 PLA›0360 STA LENGTH›0370 PLA›0380 PLA›0390 STA XPOS›0400 DEC XPOS›0410 PLA›0420 PLA›0430 STA YPOS›0440 DEC YPOS›0450 LDA 560 ; DISPLAY LIST LO›0460 STA $CF ; TEMP ZPAGE LOC›0470 LDA 561 ; DL HI›0480 STA $D0›0490 LDY #4 ; OFFSET FOR SCREEN RAM›0500 LDA ($CF),Y ; GET SCREEN RAM LO›0510 STA SCRMEM ; TO PAGE 6›0520 INY›0530 LDA ($CF),Y ; GET SCREEN RAM HI›0540 STA SCRMEM+1›0550 ;›0560 ; FIND WHERE TO START OUTPUT›0570 ;›0580 LDY YPOS ; HOW FAR DOWN›0590 BEQ GOON ; 1ST LINE?›0600 LOOP CLC ; GET READY FOR ADD›0610 LDA SCRMEM ; BEGIN OF SCR RAM›0620 ADC #20 ; EACH LINE 20 LONG›0630 STA SCRMEM›0640 BCC NEXT ; CARRY?›0650 INC SCRMEM+1 ; YES›0660 NEXT DEY ; DECREMENT COUNTER›0670 BNE LOOP ; CONTINUE MULTIPLY›0680 GOON CLC ; 1 MORE ADD›0690 LDA SCRMEM ; CURRENTLY ON 1ST BYTE OF LINE›0700 ADC XPOS ; X OFFSET›0710 STA SCRMEM›0720 BCC N1 ; CARRY?›0730 INC SCRMEM+1 ; YES›0740 ;›0750 ; FIND BITMAP OF CHARACTER›0760 ;›0770 N1 LDA #00 ; CLEAR TEMP›0780 STA TEMP›0790 NEXT1 LDY TEMP ; COUNTER OF LETTERS OUTPUT›0800 CPY LENGTH ; END?›0810 BCS END ; YES (TEMP >= LENGTH)›0820 LDA #00 ; CLEAR HI OFFSET›0830 STA OFFSET+1›0840 LDA ($CB),Y ; GET LETTER›0850 SEC ; GET READY FOR SUBTRACTION›0860 SBC #32 ; CONVERT TO INTERNAL CODE›0870 STA OFFSET ; OFFSET INTO BIT-MAP TABLE›0880 CLC ; CLEAR FOR X8 MULTIPLACTION›0890 ASL OFFSET ; DO MULTIPLACTION - 16 BIT, X8›0900 ROL OFFSET+1›0910 ASL OFFSET›0920 ROL OFFSET+1›0930 ASL OFFSET›0940 ROL OFFSET+1›0950 LDA OFFSET+1 ; ADD $E000 TO OFFSET›0960 ORA #$E0 ; THIS IS AN ADD!›0970 STA OFFSET+1›0980 ;›0990 ; OUTPUT TO SCREEN›1000 ;›1010 LDA SCRMEM›1020 STA SCRWRK ; TEMP REG FOR OUTPUT›1030 LDA SCRMEM+1›1040 STA SCRWRK+1 ; TEMP REG HI›1050 LDY #00 ; CLEAR Y REG›1060 LDX #6 ; OUTPUT 8 CHAR›1070 OUTPUT LDA (OFFSET),Y ; BITMAP #1›1080 STA (SCRWRK),Y ; OUTPUT #1›1090 INC OFFSET ; NEXT BIT MAP›1100 BNE N2 ; CROSS PAGE BOUNDARY?›1110 INC OFFSET+1 ; YES›1120 N2 CLC ; CLEAR FOR ADD›1130 LDA SCRWRK ; CURRENT SCREEN LINE›1140 ADC #20 ; NEXT LINE›1150 STA SCRWRK›1160 BCC N3 ; CARRY?›1170 INC SCRWRK+1 ; YES›1180 N3 DEX ; ONE MORE DONE›1190 BPL OUTPUT ; ALL 8 OUTPUT? NO -›1200 ;›1210 ;NEXT LETTER›1220 ;›1230 INC TEMP ; NEXT LETTER›1240 INC SCRMEM ; NEXT SCREEN LOCATION›1250 BNE N4 ; PAGE BOUNDARY?›1260 INC SCRMEM+1 ; YES›1270 N4 SEC ; SET CARRY›1280 BCS NEXT1 ; MAKE CODE RELOCATABLE ( I COULD KILL FOR BAW (BRANCH ALWAYS))›1290 END RTS ; THATS ALL FOLKS›