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:
The following points highlight the differences in the programs of Figures 15-17:
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
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
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