7. PROGRAM EXAMPLES TO LOAD A COMPLETE SCREEN OF DISPLAYED TEXT

Programming examples for loading the Video Display RAM with text to be displayed are shown in Figures 15-17 for the various memory addressing modes. Each routine uses the same algorithm, for demonstration purposes:

  1. Load all blank characters (hex 20) to initialize screen (all blank).
  2. Load 16 x 16 matrix of characters in center of screen.
    This will comprise entire set of 256 characters available in SY2316B Character Generator ROM.
    Figure 14 illustrates the display.

The following points highlight the differences in the programs of Figures 15-17:


Figure 14. Screen Display Layout for Sample Programs


Figure 15. Load Display Memory (MPU Priority and PH1/PH2 Interleave Modes)

000000r 1               ; crtc software for fig 15 of synertek 6545 application note of July 1980
000000r 1               ; syntax adjusted to suit as65 assembler of cc65 software package
000000r 1               ; http://www.cc65.org/
000000r 1               ; 
000000r 1               	.org	$0312
000312  1               AD6545 = $4000
000312  1               LATCH  = $4003
000312  1               RAM    = $5000
000312  1               
000312  1               ;
000312  1               ;-------- LOAD ASCII BLANKS INTO MEMORY ------
000312  1               ;
000312  1  A9 50        	LDA #$50
000314  1  8D 1F 03     	STA LOC+2	; editor's note - self-modifying code - naughty!
000317  1  A2 0F        	LDX #$0F
000319  1  A9 20        	LDA #$20	; ASCII BLANK
00031B  1  A0 00        LOOP1:	LDY #0
00031D  1  99 00 50     LOC:	STA RAM,Y
000320  1  C8           	INY
000321  1  D0 FA        	BNE LOC
000323  1  EE 1F 03     	INC LOC+2
000326  1  CA           	DEX
000327  1  10 F2        	BPL LOOP1
000329  1               ;
000329  1               ;------- LOAD CHARACTER SET INTO DISPLAY MEMORY -------
000329  1               ;
000329  1               DISP	= $5160
000329  1               ADDR	= $0040
000329  1               DATA	= $0042
000329  1               INDEX	= $0043
000329  1  A2 0F        	LDX #$0F		; HOR LINE COUNT
00032B  1  A9 60        	LDA #<DISP		; START ADDR - L
00032D  1  85 40        	STA ADDR
00032F  1  A9 51        	LDA #>DISP		; START ADDR - H
000331  1  85 41        	STA ADDR+1
000333  1  A9 00        	LDA #0
000335  1  85 42        	STA DATA		; ASCII DATA
000337  1  A9 0F        L1:	LDA #$0F
000339  1  85 43        	STA INDEX		; ROW COUNT
00033B  1  A0 00        	LDY #0
00033D  1  A5 42        L2:	LDA DATA		; GET ASCII CHARACTER
00033F  1  91 40        	STA (ADDR),Y	; STORE IN RAM
000341  1  C8           	INY
000342  1  E6 42        	INC DATA		; NEXT ASCII CHARACTER
000344  1  C6 43        	DEC INDEX
000346  1  10 F5        	BPL L2
000348  1  18           	CLC
000349  1  A5 40        	LDA ADDR
00034B  1  69 50        	ADC #80		; NEXT LINE
00034D  1  85 40        	STA ADDR
00034F  1  90 02        	BCC L3
000351  1  E6 41        	INC ADDR+1
000353  1  CA           L3:	DEX
000354  1  10 E1        	BPL L1
000356  1               	.END 

Figure 16. Load Display Memory (Transparent Addressing - Blanking Updates)

000000r 1               ; crtc software for fig 16 of synertek 6545 application note of July 1980
000000r 1               ; syntax adjusted to suit as65 assembler of cc65 software package
000000r 1               ; http://www.cc65.org/
000000r 1               ; 
000000r 1               	.org	$0312
000000r 1               	.org	$0312
000312  1               AD6545 = $4000
000312  1               LATCH  = $4003
000312  1               
000312  1               ;
000312  1               ;-------- LDA ASCII BLANKS INTO ALL MEMORY ----
000312  1               ;
000312  1  A9 1F        	LDA #31
000314  1  8D 00 40     	STA AD6545		; R31 SELECT
000317  1  A2 0F        	LDX #$0F
000319  1  A0 00        LOOP1:	LDY #0
00031B  1  AD 00 40     LOC:	LDA AD6545		; STATUS
00031E  1  10 FB        	BPL LOC
000320  1  A9 20        	LDA #$20		; ASCII BLANK
000322  1  8D 03 40     	STA LATCH		; WRITE DATA
000325  1  C8           	INY
000326  1  D0 F3        	BNE LOC
000328  1  CA           	DEX
000329  1  10 EE        	BPL LOOP1
00032B  1               ;
00032B  1               ;-------- LOAD CHARACTER SET
00032B  1               ;
00032B  1               DISP	= $0160
00032B  1               ADDR	= $0040
00032B  1               DATA	= $0042
00032B  1               INDEX	= $0043
00032B  1  A9 00        	LDA #0
00032D  1  85 42        	STA DATA
00032F  1  A2 0F        	LDX #$0F
000331  1  A9 01        	LDA #>DISP	; UA - HI
000333  1  85 40        	STA ADDR
000335  1  A9 60        	LDA #<DISP	; UA - LO
000337  1  85 41        	STA ADDR+1
000339  1  A9 18        L1:	LDA #$18
00033B  1  8D 00 40     	STA AD6545	; R18
00033E  1  A5 40        	LDA ADDR
000340  1  8D 01 40     	STA AD6545+1	; UA - HI
000343  1  A9 13        	LDA #19
000345  1  8D 00 40     	STA AD6545	; R19
000348  1  A5 41        	LDA ADDR+1
00034A  1  8D 01 40     	STA AD6545+1	; UA - LO
00034D  1  A9 1F        	LDA #31
00034F  1  8D 00 40     	STA AD6545	; R31 SELECT
000352  1  A9 0F        	LDA #$0F	; NO OF CHARACTERS PER LINE
000354  1  85 43        	STA INDEX
000356  1  AD 00 40     L2:	LDA AD6545	; STATUS
000359  1  10 FB        	BPL L2
00035B  1  A5 42        	LDA DATA	; GET CHARACTER
00035D  1  8D 03 40     	STA LATCH	; STORE IT IN LATCH
000360  1  E6 42        	INC DATA	; NEXT CHARACTER
000362  1  C6 43        	DEC INDEX
000364  1  10 F0        	BPL L2
000366  1  18           	CLC		; GET ADDRESS
000367  1  A5 41        	LDA ADDR+1	; OF FIRST LOCATION
000369  1  69 50        	ADC #$50	; OF NEXT LINE
00036B  1  85 41        	STA ADDR+1
00036D  1  90 02        	BCC L3
00036F  1  E6 40        	INC ADDR
000371  1  CA           L3:	DEX
000372  1  10 C5        	BPL L1
000374  1               	.END

Figure 17. Load Display Memory (Transparent Addressing PH1/PH2 Interleave)

000000r 1               ; crtc software for fig 17 of synertek 6545 application note of July 1980
000000r 1               ; syntax adjusted to suit as65 assembler of cc65 software package
000000r 1               ; http://www.cc65.org/
000000r 1               ;
000000r 1               	.org	$0312
000312  1               AD6545 = $4000
000312  1               RAM	 = $4003
000312  1               
000312  1               ;
000312  1               ;-------- LDA ASCII BLANKS INTO ALL MEMORY ----
000312  1               ;
000312  1  A9 1F        	LDA #31
000314  1  8D 00 40     	STA AD6545		; R31 SELECT
000317  1  A2 0F        	LDX #$0F
000319  1  A0 00        LOOP1:	LDY #0
00031B  1  A9 20        LOC:	LDA #$20		; ASCII BLANK
00031D  1  8D 03 40     	STA RAM		; WRITE DATA
000320  1  C8           	INY
000321  1  D0 F8        	BNE LOC
000323  1  CA           	DEX
000324  1  10 F3        	BPL LOOP1
000326  1               ;
000326  1               ;-------- LOAD CHARACTER SET
000326  1               ;
000326  1               DISP	= $0084
000326  1               ADDR	= $0040
000326  1               DATA	= $0042
000326  1               INDEX	= $0043
000326  1               
000326  1  A9 00        	LDA #0
000328  1  85 42        	STA DATA	; FIRST DATA CHARACTER
00032A  1  A2 0F        	LDX #$0F	; NO OF ROWS IN BLOCK
00032C  1  A9 00        	LDA #>DISP	; UA ADDR - H
00032E  1  85 40        	STA ADDR
000330  1  A9 84        	LDA #<DISP	; UA ADDR - L
000332  1  85 41        	STA ADDR+1
000334  1  A9 12        L1:	LDA #18
000336  1  8D 00 40     	STA AD6545	; R18
000339  1  A5 40        	LDA ADDR
00033B  1  8D 01 40     	STA AD6545+1	; UA - HI
00033E  1  A9 13        	LDA #19
000340  1  8D 00 40     	STA AD6545	; R19
000343  1  A5 41        	LDA ADDR+1
000345  1  8D 01 40     	STA AD6545+1	; UA - LO
000348  1  A9 1F        	LDA #31
00034A  1  8D 00 40     	STA AD6545	; R31 SELECT
00034D  1  A9 0F        	LDA #$0F	; NO OF CHARACTERS PER LINE
00034F  1  85 43        	STA INDEX
000351  1  A5 42        L2:	LDA DATA	; GET CHARACTER
000353  1  8D 03 40     	STA RAM		; STORE IT IN RAM
000356  1  E6 42        	INC DATA	; NEXT CHARACTER
000358  1  C6 43        	DEC INDEX
00035A  1  10 F5        	BPL L2
00035C  1  18           	CLC		; GET ADDRESS
00035D  1  A5 41        	LDA ADDR+1	; OF FIRST LOCATION
00035F  1  69 28        	ADC #40		; OF NEXT LINE
000361  1  85 41        	STA ADDR+1
000363  1  90 02        	BCC L3
000365  1  E6 40        	INC ADDR
000367  1  CA           L3:	DEX
000368  1  10 CA        	BPL L1
00036A  1               	.END