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›