mirror of
				https://github.com/deater/dos33fsprogs.git
				synced 2025-11-04 04:16:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			192 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <unistd.h>
 | 
						|
 | 
						|
#include <fcntl.h>
 | 
						|
 | 
						|
#include "6502_emulate.h"
 | 
						|
#include "gr-sim.h"
 | 
						|
 | 
						|
int main(int argc, char **argv) {
 | 
						|
 | 
						|
	int ch,fd;
 | 
						|
 | 
						|
	grsim_init();
 | 
						|
 | 
						|
	home();
 | 
						|
 | 
						|
	hgr();
 | 
						|
	/* Show all 280x192, no bottom text */
 | 
						|
        soft_switch(MIXCLR);
 | 
						|
        soft_switch(HISCR);
 | 
						|
 | 
						|
	fd=open("MERRY.BIN",O_RDONLY);
 | 
						|
	if (fd<0) {
 | 
						|
		printf("Error opening!\n");
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
	read(fd,&ram[0x6000],8192);
 | 
						|
	close(fd);
 | 
						|
 | 
						|
//	grsim_update();
 | 
						|
 | 
						|
//	while(1) {
 | 
						|
//		ch=grsim_input();
 | 
						|
//		if (ch) break;
 | 
						|
//		usleep(100000);
 | 
						|
//	}
 | 
						|
 | 
						|
	fd=open("BALLC.BIN",O_RDONLY);
 | 
						|
	if (fd<0) {
 | 
						|
		printf("Error opening!\n");
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
	read(fd,&ram[0x4000],8192);
 | 
						|
	close(fd);
 | 
						|
 | 
						|
	/*	  0     1     2     3     4     5     6     7
 | 
						|
	00	= $2000 $2400 $2800 $2c00 $3000 $3400 $3800 $3c00
 | 
						|
	08	= $2080 $2480 $2880 $2c80 $3080 $3480 $3880 $3c80
 | 
						|
	16	= $2100 $2500 $2900 $2d00 $3100 $3500 $3900 $3d00
 | 
						|
	24	= $2180 $2580 $2980 $2d80 $3180 $3580 $3980 $3d80
 | 
						|
	32	= $2200 $2600 $2a00 $2e00 $3200 $3600 $3a00 $3e00
 | 
						|
	40	= $2280 $2680 $2a80 $2e80 $3280 $3680 $3a80 $3e80
 | 
						|
	48	= $2300 $2700 $2b00 $2f00 $3300 $3700 $3b00 $3f00
 | 
						|
	56	= $2380 $2780 $2b80 $2f80 $3380 $3780 $3b80 $3f80
 | 
						|
	-----
 | 
						|
	64	= $2028 $2428 $2828 $2c28 $3028 $3428 $3828 $3c28
 | 
						|
	72	= $20a8 $24a8 $28a8 $2ca8 $30a8 $34a8 $38a8 $3ca8
 | 
						|
	80	= $2128 $2528 $2928 $2d28 $3128 $3528 $3928 $3d28
 | 
						|
	88	= $21a8 $25a8 $29a8 $2da8 $31a8 $35a8 $39a8 $3da8
 | 
						|
	96	= $2228 $2628 $2a28 $2e28 $3228 $3628 $3a28 $3e28
 | 
						|
	104	= $22a8 $26a8 $2aa8 $2ea8 $32a8 $36a8 $3aa8 $3ea8
 | 
						|
	112	= $2328 $2728 $2b28 $2f28 $3328 $3728 $3b28 $3f28
 | 
						|
	120	= $23a8 $27a8 $2ba8 $2fa8 $33a8 $37a8 $3ba8 $3fa8
 | 
						|
	-----
 | 
						|
	128	= $2050 $2450 $2850 $2c50 $3050 $3450 $3850 $3c50
 | 
						|
	136	= $20d0 $24d0 $28d0 $2cd0 $30d0 $34d0 $38d0 $3cd0
 | 
						|
	144	= $2150 $2550 $2950 $2d50 $3150 $3550 $3950 $3d50
 | 
						|
	152	= $21d0 $25d0 $29d0 $2dd0 $31d0 $35d0 $39d0 $3dd0
 | 
						|
	160	= $2250 $2650 $2a50 $2e50 $3250 $3650 $3a50 $3e50
 | 
						|
	168	= $22d0 $26d0 $2ad0 $2ed0 $32d0 $36d0 $3ad0 $3ed0
 | 
						|
	176	= $2350 $2750 $2b50 $2f50 $3350 $3750 $3b50 $3f50
 | 
						|
	184	= $23d0 $27d0 $2bd0 $2fd0 $33d0 $37d0 $3bd0 $3fd0
 | 
						|
	-----
 | 
						|
	*/
 | 
						|
 | 
						|
 | 
						|
	int count=0;
 | 
						|
 | 
						|
#define HIGH	0x00
 | 
						|
#define CURRENT	0x01
 | 
						|
#define NEXT	0x02
 | 
						|
#define INL	0xfc
 | 
						|
#define INH	0xfd
 | 
						|
#define OUTL	0xfe
 | 
						|
#define OUTH	0xff
 | 
						|
 | 
						|
//ram[y_indirect(OUTL,y)]
 | 
						|
 | 
						|
scroll_loop:
 | 
						|
 | 
						|
	ram[OUTH]=0x40;
 | 
						|
	ram[OUTL]=0x00;
 | 
						|
	ram[INH]=0x60;
 | 
						|
	ram[INL]=0x00;
 | 
						|
left_one_loop:
 | 
						|
//	printf("%d %02x:%02x\n",count,ram[OUTH],ram[OUTL]);
 | 
						|
 | 
						|
	for(y=0;y<40;y++) {
 | 
						|
		ram[CURRENT]=ram[y_indirect(OUTL,y)];
 | 
						|
		ram[NEXT]=ram[y_indirect(OUTL,y+1)];
 | 
						|
		if ((count%7==2) || (count%7==6)) {
 | 
						|
			ram[HIGH]=ram[NEXT]&0x80;
 | 
						|
		}
 | 
						|
		else {
 | 
						|
			ram[HIGH]=ram[CURRENT]&0x80;
 | 
						|
		}
 | 
						|
		if (y==39) ram[NEXT]=ram[y_indirect(INL,0)];
 | 
						|
 | 
						|
		a=ram[NEXT];
 | 
						|
		and(0x3);
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		ram[NEXT]=a;
 | 
						|
 | 
						|
		a=ram[CURRENT];
 | 
						|
		lsr();
 | 
						|
		lsr();			// current>>=2;
 | 
						|
		and(0x1f);		// current&=0x1f;
 | 
						|
		ora_mem(HIGH);
 | 
						|
		ora_mem(NEXT);
 | 
						|
		ram[y_indirect(OUTL,y)]=a;
 | 
						|
	}
 | 
						|
 | 
						|
	for(y=0;y<40;y++) {
 | 
						|
		ram[CURRENT]=ram[y_indirect(INL,y)];
 | 
						|
		ram[NEXT]=ram[y_indirect(INL,y+1)];
 | 
						|
		if ((count%7==2) ||(count%7==6)) {
 | 
						|
			ram[HIGH]=ram[NEXT]&0x80;
 | 
						|
		}
 | 
						|
		else {
 | 
						|
			ram[HIGH]=ram[CURRENT]&0x80;
 | 
						|
		}
 | 
						|
 | 
						|
		a=ram[NEXT];
 | 
						|
		and(0x3);
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		asl();
 | 
						|
		ram[NEXT]=a;
 | 
						|
 | 
						|
		a=ram[CURRENT];
 | 
						|
		lsr();
 | 
						|
		lsr();			// current>>=2;
 | 
						|
		and(0x1f);		// current&=0x1f;
 | 
						|
		ora_mem(HIGH);
 | 
						|
		ora_mem(NEXT);
 | 
						|
		ram[y_indirect(INL,y)]=a;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	clc();
 | 
						|
	a=ram[INL];
 | 
						|
	adc(0x80);
 | 
						|
	ram[INL]=a;
 | 
						|
	a=ram[INH];
 | 
						|
	adc(0x0);
 | 
						|
	ram[INH]=a;
 | 
						|
 | 
						|
	clc();
 | 
						|
	a=ram[OUTL];
 | 
						|
	adc(0x80);
 | 
						|
	ram[OUTL]=a;
 | 
						|
	a=ram[OUTH];
 | 
						|
	adc(0x0);
 | 
						|
	ram[OUTH]=a;
 | 
						|
 | 
						|
	if (a!=0x60) goto left_one_loop;
 | 
						|
 | 
						|
	grsim_update();
 | 
						|
	ch=grsim_input();
 | 
						|
	if (ch) goto scroll_done;
 | 
						|
	usleep(17000);	// 60Hz = 17ms
 | 
						|
	count++;
 | 
						|
	if (count==140) goto scroll_done;
 | 
						|
 | 
						|
	goto scroll_loop;
 | 
						|
scroll_done:
 | 
						|
 | 
						|
	while(1) {
 | 
						|
		ch=grsim_input();
 | 
						|
		if (ch) break;
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 |