	0000 D032	bra	0066	; init
	0002 D7FE	bra	0000	
	0004 D7FD	bra	0000	
	0006 D109	bra	021A	; execute
	0008 D00F	bra	0028	; enterhi
	000A D12D	bra	0266	; jsr
	000C D126	bra	025A	; out
	000E D17E	bra	030C	; (a!)
	0010 D176	bra	02FE	; (@a+)
	0012 D172	bra	02F8	; (!a+)
	0014 D180	bra	0316	; (p!)
	0016 D176	bra	0304	; (@p+)
	0018 D018	bra	004A	; enterlo
	001A D130	bra	027C	; bye
	001C D11B	bra	0254	; in
	001E D12B	bra	0276	; ack
; exithi
	0020 6EDA	movwf	FSR2H, A
	0022 50ED	drop
	0024 50D9	movf	FSR2L, W, A
	0026 0011	retfie1
; enterhi
	0028 0005	push
	002A 0E00	movlw 	00
	002C 6EFE	movwf	TOSH, A
	002E 0E20	movlw 	20
	0030 6EFD	movwf	TOSL, A
	0032 50D9	movf	FSR2L, W, A
	0034 6EEC	dup
	0036 50DA	movf	FSR2H, W, A
	0038 EF00	goto 	0000	
	003A F000	nop
; exitlo
	003C 6EDA	movwf	FSR2H, A
	003E 50ED	drop
	0040 6ED9	movwf	FSR2L, A
	0042 50ED	drop
	0044 6ED8	movwf	STATUS, A
	0046 50ED	drop
	0048 0010	retfie
; enterlo
	004A 6EEC	dup
	004C 50D8	movf	STATUS, W, A
	004E 6EEC	dup
	0050 50D9	movf	FSR2L, W, A
	0052 6EEC	dup
	0054 50DA	movf	FSR2H, W, A
	0056 0005	push
	0058 6AFE	clrf	TOSH, A
	005A 6EEC	dup
	005C 0E3C	movlw 	3C
	005E 6EFD	movwf	TOSL, A
	0060 50ED	drop
	0062 EFEF	goto 	01DE	
	0064 F000	nop
; init
	0066 EE00	lfsr 	0, 007F
	0068 F07F	nop
	006A EE10	lfsr 	1, 008F
	006C F08F	nop
	006E 0E00	movlw 	00
	0070 6EFC	movwf	FC, A
	0072 EF76	goto 	00EC	
	0074 F000	nop
; (@)
	0076 6ED9	movwf	FSR2L, A
	0078 6ADA	clrf	FSR2H, A
	007A BEE8	btfsc	E8, 6
	007C 68DA	setf	FSR2H, A
	007E 50DF	movf	INDF2, W, A
	0080 0012	return
; (!)
	0082 6ED9	movwf	FSR2L, A
	0084 6ADA	clrf	FSR2H, A
	0086 BEE8	btfsc	E8, 6
	0088 68DA	setf	FSR2H, A
	008A 50ED	drop
	008C 6EDF	movwf	INDF2, A
	008E 50ED	drop
	0090 0012	return
; swap
	0092 0005	push
	0094 6EFD	movwf	TOSL, A
	0096 50ED	drop
	0098 6EFE	movwf	TOSH, A
	009A 50FD	movf	TOSL, W, A
	009C 6EEC	dup
	009E 50FE	movf	TOSH, W, A
	00A0 0006	pop
	00A2 0012	return
; over
	00A4 6EEC	dup
	00A6 0EFF	movlw 	FF
	00A8 50EB	movf	EB, W, A
	00AA 0012	return
; 2dup
	00AC 6EEC	dup
	00AE 0EFF	movlw 	FF
	00B0 50EB	movf	EB, W, A
	00B2 6EEC	dup
	00B4 0EFF	movlw 	FF
	00B6 50EB	movf	EB, W, A
	00B8 0012	return
; rot
	00BA 0005	push
	00BC 6EFD	movwf	TOSL, A
	00BE 50ED	drop
	00C0 6EFE	movwf	TOSH, A
	00C2 50ED	drop
	00C4 CFFE	movff 	0FFE, 0FEC
	00C6 FFEC	nop
	00C8 CFFD	movff 	0FFD, 0FEC
	00CA FFEC	nop
	00CC 0006	pop
	00CE 0012	return
; a>x
	00D0 CFD9	movff 	0FD9, 0FE4
	00D2 FFE4	nop
	00D4 CFDA	movff 	0FDA, 0FE4
	00D6 FFE4	nop
	00D8 0012	return
; x>a
	00DA CFE5	movff 	0FE5, 0FDA
	00DC FFDA	nop
	00DE CFE5	movff 	0FE5, 0FD9
	00E0 FFD9	nop
	00E2 0012	return
; initports
	00E4 6A92	clrf	TRISA, A
	00E6 6A93	clrf	TRISB, A
	00E8 6A94	clrf	TRISC, A
	00EA 0012	return
	00EC DFFB	rcall	00E4	; initports
	00EE EFF7	goto 	01EE	
	00F0 F000	nop
; read
	00F2 6EEC	dup
	00F4 50DF	movf	INDF2, W, A
	00F6 0BF0	andlw 	F0
	00F8 38E8	swapf	E8, W, A
	00FA 50DB	movf	DB, W, A
	00FC 6EEC	dup
	00FE 50DF	movf	INDF2, W, A
	0100 0F10	addlw 	10
	0102 E301	bnc 	0106	
	0104 0F10	addlw 	10
	0106 6EDF	movwf	INDF2, A
	0108 50ED	drop
	010A 0012	return
; write
	010C 6EEC	dup
	010E 50DF	movf	INDF2, W, A
	0110 0B0F	andlw 	0F
	0112 CFEF	movff 	0FEF, 0FDB
	0114 FFDB	nop
	0116 50ED	drop
	0118 50DF	movf	INDF2, W, A
	011A 38E8	swapf	E8, W, A
	011C 0F10	addlw 	10
	011E E301	bnc 	0122	
	0120 0F10	addlw 	10
	0122 38E8	swapf	E8, W, A
	0124 6EDF	movwf	INDF2, A
	0126 50ED	drop
	0128 0012	return
; clear
	012A 6EEC	dup
	012C 0E11	movlw 	11
	012E 6EDF	movwf	INDF2, A
	0130 50ED	drop
	0132 0012	return
; (empty?)
	0134 6EEC	dup
	0136 50DF	movf	INDF2, W, A
	0138 6EEC	dup
	013A 38E8	swapf	E8, W, A
	013C 18ED	xorwf	POSTDEC0, W, A
	013E CFED	movff 	0FED, 0FE8
	0140 FFE8	nop
	0142 0012	return
; (full?)
	0144 6EEC	dup
	0146 50DF	movf	INDF2, W, A
	0148 6EEC	dup
	014A 38E8	swapf	E8, W, A
	014C 5CED	subwf	POSTDEC0, W, A
	014E 0A2E	xorlw 	2E
	0150 CFED	movff 	0FED, 0FE8
	0152 FFE8	nop
	0154 0012	return
; fatal
	0156 00FF	reset
	0158 0012	return
; rx-reset
	015A 98AB	bcf	AB, 0
	015C 88AB	bsf	AB, 0
	015E 0012	return
; rx-handler
	0160 AA9D	btfss	9D, 2
	0162 D7F9	bra	0156	; fatal
	0164 B2AB	btfsc	AB, 2
	0166 D7F9	bra	015A	; rx-reset
	0168 6EEC	dup
	016A 50AE	movf	AE, W, A
	016C A4AB	btfss	AB, 4
	016E D002	bra	0174	
	0170 50ED	drop
	0172 0012	return
	0174 EE20	lfsr 	2, 00A0
	0176 F0A0	nop
	0178 D7C9	bra	010C	; write
; tx-handler
	017A A89D	btfss	9D, 0
	017C D7EC	bra	0156	; fatal
	017E EE20	lfsr 	2, 00B0
	0180 F0B0	nop
	0182 DFD8	rcall	0134	; (empty?)
	0184 E102	bnz 	018A	
	0186 989D	bcf	9D, 0
	0188 0012	return
	018A DFB3	rcall	00F2	; read
	018C 6EAD	movwf	AD, A
	018E 50ED	drop
	0190 0012	return
; serialinit
	0192 EE20	lfsr 	2, 00B0
	0194 F0B0	nop
	0196 DFC9	rcall	012A	; clear
	0198 EE20	lfsr 	2, 00A0
	019A F0A0	nop
	019C DFC6	rcall	012A	; clear
	019E 8E94	bsf	94, 6
	01A0 9C94	bcf	94, 4
	01A2 6EEC	dup
	01A4 0E81	movlw 	81
	01A6 6EAF	movwf	AF, A
	01A8 0E24	movlw 	24
	01AA 6EAC	movwf	AC, A
	01AC 0E90	movlw 	90
	01AE 6EAB	movwf	AB, A
	01B0 0E30	movlw 	30
	01B2 129D	iorwf	9D, F, A
	01B4 0ECF	movlw 	CF
	01B6 169F	andwf	9F, F, A
	01B8 50ED	drop
	01BA 8ED0	bsf	D0, 6
	01BC 6EEC	dup
	01BE 0EC0	movlw 	C0
	01C0 12F2	iorwf	INTCON, F, A
	01C2 50ED	drop
	01C4 0012	return
; transmit
	01C6 EE20	lfsr 	2, 00B0
	01C8 F0B0	nop
	01CA DFBC	rcall	0144	; (full?)
	01CC E0FE	bz 	01CA	
	01CE DF9E	rcall	010C	; write
	01D0 889D	bsf	9D, 0
	01D2 0012	return
; receive
	01D4 EE20	lfsr 	2, 00A0
	01D6 F0A0	nop
	01D8 DFAD	rcall	0134	; (empty?)
	01DA E0FE	bz 	01D8	
	01DC D78A	bra	00F2	; read
	01DE BA9E	btfsc	9E, 2
	01E0 D7BF	bra	0160	; rx-handler
	01E2 EFF3	goto 	01E6	
	01E4 F000	nop
	01E6 B89E	btfsc	9E, 0
	01E8 D7C8	bra	017A	; tx-handler
	01EA EF00	goto 	0000	
	01EC F000	nop
	01EE DFD1	rcall	0192	; serialinit
	01F0 EF99	goto 	0332	
	01F2 F001	nop
; engage
	01F4 6EEC	dup
	01F6 9EF2	bcf	F2, 6
	01F8 0E55	movlw 	55
	01FA 6EA7	movwf	A7, A
	01FC 0EAA	movlw 	AA
	01FE 6EA7	movwf	A7, A
	0200 82A6	bsf	A6, 2
	0202 8EF2	bsf	F2, 6
	0204 50ED	drop
	0206 0012	return
; erase
	0208 84A6	bsf	A6, 4
	020A 88A6	bsf	A6, 0
	020C D7F3	bra	01F4	; engage
; program
	020E 84A6	bsf	A6, 4
	0210 98A6	bcf	A6, 0
	0212 000A	tblrd*-
	0214 DFEF	rcall	01F4	; engage
	0216 0009	tblrd*+
	0218 0012	return
; execute
	021A 0005	push
	021C 44E8	rlncf	E8, W, A
	021E 6EEC	dup
	0220 0B01	andlw 	01
	0222 6EFE	movwf	TOSH, A
	0224 50ED	drop
	0226 0BFE	andlw 	FE
	0228 6EFD	movwf	TOSL, A
	022A 50ED	drop
	022C 0012	return
; 777cycles
	022E 6AE4	clrf	PREINC1, A
	0230 06E7	decf	INDF1, F, A
	0232 E1FE	bnz 	0230	
	0234 52E5	movf	POSTDEC1, F, A
	0236 0012	return
; ms
	0238 6EE4	movwf	PREINC1, A
	023A 0E0C	movlw 	0C
	023C 6EE4	movwf	PREINC1, A
	023E 50ED	drop
	0240 DFF6	rcall	022E	; 777cycles
	0242 06E7	decf	INDF1, F, A
	0244 E1FD	bnz 	0240	
	0246 52E5	movf	POSTDEC1, F, A
	0248 6EEC	dup
	024A 06E7	decf	INDF1, F, A
	024C E1F6	bnz 	023A	
	024E 52E5	movf	POSTDEC1, F, A
	0250 50ED	drop
	0252 0012	return
; in
	0254 DF3D	rcall	00D0	; a>x
	0256 DFBE	rcall	01D4	; receive
	0258 D740	bra	00DA	; x>a
; out
	025A DF3A	rcall	00D0	; a>x
	025C DFB4	rcall	01C6	; transmit
	025E 6EEC	dup
	0260 0E01	movlw 	01
	0262 DFEA	rcall	0238	; ms
	0264 D73A	bra	00DA	; x>a
; jsr
	0266 0005	push
	0268 DFF5	rcall	0254	; in
	026A 6EFD	movwf	TOSL, A
	026C 50ED	drop
	026E DFF2	rcall	0254	; in
	0270 6EFE	movwf	TOSH, A
	0272 50ED	drop
	0274 0012	return
; ack
	0276 6EEC	dup
	0278 0EFF	movlw 	FF
	027A D7EF	bra	025A	; out
; bye
	027C 0006	pop
	027E 0012	return
; ferase
	0280 8EA6	bsf	A6, 6
	0282 9CA6	bcf	A6, 4
	0284 D7C1	bra	0208	; erase
; fprog
	0286 6EEC	dup
	0288 0E08	movlw 	08
	028A 6EE4	movwf	PREINC1, A
	028C 50ED	drop
	028E DFE2	rcall	0254	; in
	0290 6EF5	movwf	TABLAT, A
	0292 000D	tblwt*+
	0294 50ED	drop
	0296 06E7	decf	INDF1, F, A
	0298 E1FA	bnz 	028E	
	029A 52E5	movf	POSTDEC1, F, A
	029C 8EA6	bsf	A6, 6
	029E 9CA6	bcf	A6, 4
	02A0 D7B6	bra	020E	; program
; interpreter
	02A2 DFD8	rcall	0254	; in
	02A4 DFBA	rcall	021A	; execute
	02A6 D7FD	bra	02A2	; interpreter
; n@p+
	02A8 6EE4	movwf	PREINC1, A
	02AA 0009	tblrd*+
	02AC 50F5	movf	TABLAT, W, A
	02AE DFD5	rcall	025A	; out
	02B0 6EEC	dup
	02B2 06E7	decf	INDF1, F, A
	02B4 E1FA	bnz 	02AA	
	02B6 52E5	movf	POSTDEC1, F, A
	02B8 50ED	drop
	02BA 0012	return
; n@a+
	02BC 6EE4	movwf	PREINC1, A
	02BE 50DE	movf	POSTINC2, W, A
	02C0 DFCC	rcall	025A	; out
	02C2 6EEC	dup
	02C4 06E7	decf	INDF1, F, A
	02C6 E1FB	bnz 	02BE	
	02C8 52E5	movf	POSTDEC1, F, A
	02CA 50ED	drop
	02CC 0012	return
; n!a+
	02CE 6EE4	movwf	PREINC1, A
	02D0 50ED	drop
	02D2 DFC0	rcall	0254	; in
	02D4 6EDE	movwf	POSTINC2, A
	02D6 50ED	drop
	02D8 06E7	decf	INDF1, F, A
	02DA E1FB	bnz 	02D2	
	02DC 52E5	movf	POSTDEC1, F, A
	02DE 0012	return
; ping
	02E0 6EEC	dup
	02E2 0E50	movlw 	50
	02E4 DFBA	rcall	025A	; out
	02E6 6EEC	dup
	02E8 0E49	movlw 	49
	02EA DFB7	rcall	025A	; out
	02EC 6EEC	dup
	02EE 0E4E	movlw 	4E
	02F0 DFB4	rcall	025A	; out
	02F2 6EEC	dup
	02F4 0E47	movlw 	47
	02F6 D7B1	bra	025A	; out
; (!a+)
	02F8 6EDE	movwf	POSTINC2, A
	02FA 50ED	drop
	02FC 0012	return
; (@a+)
	02FE 6EEC	dup
	0300 50DE	movf	POSTINC2, W, A
	0302 0012	return
; (@p+)
	0304 6EEC	dup
	0306 0009	tblrd*+
	0308 50F5	movf	TABLAT, W, A
	030A 0012	return
; (a!)
	030C 6EDA	movwf	FSR2H, A
	030E 50ED	drop
	0310 6ED9	movwf	FSR2L, A
	0312 50ED	drop
	0314 0012	return
; (p!)
	0316 6EF7	movwf	TBLPTRH, A
	0318 50ED	drop
	031A 6EF6	movwf	TBLPTRL, A
	031C 50ED	drop
	031E 0012	return
; on
	0320 8080	bsf	80, 0
	0322 0012	return
; off
	0324 9080	bcf	80, 0
	0326 0012	return
; blink
	0328 DFFB	rcall	0320	; on
	032A 6EEC	dup
	032C 0E64	movlw 	64
	032E DF84	rcall	0238	; ms
	0330 D7F9	bra	0324	; off
	0332 DFFA	rcall	0328	; blink
	0334 D001	bra	0338	; main
	0336 0000	nop
; main
	0338 D7B4	bra	02A2	; interpreter
	033A FFFF	nop
	033C FFFF	nop
	033E FFFF	nop
