~rabbits/uxn11

66de46b3525d1bb611e3ac587331a5f14846d7c9 — Devine Lu Linvega 2 months ago b762c14
(uxnasm)Added support for JMI, JCI and JSI
4 files changed, 24 insertions(+), 15 deletions(-)

M etc/polycat.tal
M src/uxn11.c
M src/uxnasm.c
M src/uxncli.c
M etc/polycat.tal => etc/polycat.tal +8 -8
@@ 36,7 36,7 @@
	#ff ;draw-tail/last STA
	( set screen mode auto-x )
	#05 .Screen/auto DEO
	,draw-polycat JSR
	draw-polycat

BRK



@@ 53,8 53,8 @@ BRK
	;body .Screen/addr DEO2
	#81 .Screen/sprite DEO
	( eye/tail )
	#00 ,draw-eye JSR
	#00 ,draw-tail JSR
	#00 draw-eye
	#00 draw-tail

JMP2r



@@ 62,16 62,16 @@ JMP2r
	
	.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT
	.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT
		ADD ,draw-eye JSR
		ADD draw-eye
	.cat/timer LDZ INC [ DUP ] .cat/timer STZ
		#04 SFT ,draw-tail JSR
	,draw-cursor JSR
		#04 SFT draw-tail
	draw-cursor

BRK

@draw-eye ( quad -- )
	
	DUP ,&last LDR NEQ ,&changed JCN
	DUP ,&last LDR NEQ ?&changed
		POP JMP2r &changed
	( only redraw on change )
	DUP


@@ 86,7 86,7 @@ JMP2r

@draw-tail ( frame -- )

	STHk ,&last LDR NEQ ,&changed JCN
	STHk ,&last LDR NEQ ?&changed
		POPr JMP2r &changed
	( only redraw on change )
	STHr #00 OVR ;frames ADD2 LDA

M src/uxn11.c => src/uxn11.c +1 -1
@@ 57,7 57,7 @@ static void
console_deo(Uint8 *d, Uint8 port)
{
	FILE *fd = port == 0x8 ? stdout : port == 0x9 ? stderr :
                                                    0;
													0;
	if(fd) {
		fputc(d[port], fd);
		fflush(fd);

M src/uxnasm.c => src/uxnasm.c +14 -5
@@ 328,6 328,14 @@ parse(char *w, FILE *f)
		makereference(p.scope, w, p.ptr);
		if(!writeshort(0xffff, 1)) return 0;
		break;
	case '!': /* JMI */
		makereference(p.scope, w, p.ptr);
		if(!writebyte(0x20) || !writeshort(0xffff, 0)) return 0;
		break;
	case '?': /* JCI */
		makereference(p.scope, w, p.ptr);
		if(!writebyte(0x40) || !writeshort(0xffff, 0)) return 0;
		break;
	case '"': /* raw string */
		i = 0;
		while((c = w[++i]))


@@ 355,8 363,11 @@ parse(char *w, FILE *f)
				if(!parse(m->items[i], f))
					return 0;
			return 1;
		} else
			return error("Unknown token", w);
		} else {
			makereference(p.scope, w - 1, p.ptr);
			if(!writebyte(0x60) || !writeshort(0xffff, 0))
				return 0;
		}
	}
	return 1;
}


@@ 405,15 416,13 @@ resolve(void)
			p.data[r->addr + 1] = l->addr & 0xff;
			l->refs++;
			break;
		case ';':
		default:
			if(!(l = findlabel(r->name)))
				return error("Unknown absolute reference", r->name);
			p.data[r->addr + 1] = l->addr >> 0x8;
			p.data[r->addr + 2] = l->addr & 0xff;
			l->refs++;
			break;
		default:
			return error("Unknown reference", r->name);
		}
	}
	return 1;

M src/uxncli.c => src/uxncli.c +1 -1
@@ 38,7 38,7 @@ static void
console_deo(Uint8 *d, Uint8 port)
{
	FILE *fd = port == 0x8 ? stdout : port == 0x9 ? stderr :
                                                    0;
													0;
	if(fd) {
		fputc(d[port], fd);
		fflush(fd);