58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
#include <c64/vic.h>
 | 
						|
#include <c64/rasterirq.h>
 | 
						|
#include <string.h>
 | 
						|
 | 
						|
const char * Text =
 | 
						|
	S"LABORUM RERUM QUO. QUASI IN, SEQUI, TENETUR VOLUPTATEM RERUM "
 | 
						|
	S"PORRO NON ET MAIORES ALIAS ODIO EST EOS. MAGNAM APERIAM CUM ET "
 | 
						|
	S"ESSE TEMPORE ITAQUE TEMPORA VOLUPTAS ET IPSAM IPSAM EARUM. ID "
 | 
						|
	S"SUSCIPIT QUIA RERUM REPREHENDERIT ERROR ET UT. DOLOR ID "
 | 
						|
	S"CORPORIS, EOS? UNDE VERO ISTE QUIA? EAQUE EAQUE. IN. AUT ID "
 | 
						|
	S"EXPEDITA ILLUM MOLESTIAS, ";
 | 
						|
 | 
						|
// Raster interrupt command structure for change to scrolled and back
 | 
						|
 | 
						|
RIRQCode	scroll, bottom;
 | 
						|
 | 
						|
int main(void)
 | 
						|
{
 | 
						|
	// initialize raster IRQ
 | 
						|
	rirq_init(true);
 | 
						|
 | 
						|
	// Build switch to scroll line IRQ
 | 
						|
	rirq_build(&scroll, 1);
 | 
						|
	// Change control register two with this IRQ
 | 
						|
	rirq_write(&scroll, 0, &vic.ctrl2, 0);
 | 
						|
	// Put it onto the scroll line
 | 
						|
	rirq_set(0, 50 + 24 * 8, &scroll);
 | 
						|
 | 
						|
	// Build the switch to normal IRQ
 | 
						|
	rirq_build(&bottom, 1);
 | 
						|
	// re-enable left and right column and reset horizontal scroll
 | 
						|
	rirq_write(&bottom, 0, &vic.ctrl2, VIC_CTRL2_CSEL);
 | 
						|
	// place this at the bottom
 | 
						|
	rirq_set(1, 250, &bottom);
 | 
						|
 | 
						|
	// sort the raster IRQs
 | 
						|
	rirq_sort();
 | 
						|
 | 
						|
	// start raster IRQ processing
 | 
						|
	rirq_start();
 | 
						|
 | 
						|
	// Loop through text
 | 
						|
	int	x = 0;
 | 
						|
	for(;;)
 | 
						|
	{
 | 
						|
		// wait for raster reaching bottom of screen
 | 
						|
		rirq_wait();
 | 
						|
		// Update raster IRQ for scroll line with new horizontal scroll offset		
 | 
						|
		rirq_data(&scroll, 0, 7 - (x & 7));
 | 
						|
		// Copy scrolled version of text when switching over char border
 | 
						|
		if ((x & 7) == 0)
 | 
						|
			memcpy((char *)0x0400 + 40 * 24, Text + ((x >> 3) & 255), 40);
 | 
						|
		x++;
 | 
						|
	}
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 |