From 515ad2030616fe937158da055ee5d6fdd54a59b2 Mon Sep 17 00:00:00 2001 From: Joel Matthew Rees Date: Thu, 25 Apr 2019 18:19:38 +0900 Subject: [PATCH] 32col.c in junkbox has become bif-img.c, a tool for exhanging contents of disks with text files. --- bif-img.c | 1 + commands.txt | 9 ++ testsource/bifsource.dsk | 393 +++++++++++++++++++++++++++++++++++++++++++++++ testsource/blank.dsk | Bin 0 -> 161280 bytes testsource/cs431.dsk | 1 + testsource/tools.dsk | 1 + 6 files changed, 405 insertions(+) create mode 100644 bif-img.c create mode 100644 testsource/bifsource.dsk create mode 100644 testsource/blank.dsk create mode 100644 testsource/cs431.dsk create mode 100644 testsource/tools.dsk diff --git a/bif-img.c b/bif-img.c new file mode 100644 index 0000000..dfdbbc1 --- /dev/null +++ b/bif-img.c @@ -0,0 +1 @@ +/* Tool for working with BIF-6809 images. // Written by Joel Matthew Rees, Amagasaki, Japan, April 2019, // Parts adapted from the author's 32col.c, written 1999. // Copyright 1999, 2019, Joel Matthew Rees. // Permission granted in advance for all uses // with the condition that this copyright and permission notice are retained. // // BIF-6809 project page: https://osdn.net/projects/bif-6809/ */ #include #include /* for EXIT_SUCCESS */ #include #include #define ScreenWidth 32 #define ScreenHeight 32 #define BufferPlay 3 /* room for CR/LF and NUL */ #define BufferWidth ( ScreenWidth + BufferPlay ) #define TO_SCREEN 1 const char kTo_ScreenStr[] = "--to-screens"; #define TO_EOLN_TEXT 2 const char kTo_EOLN_textStr[] = "--to-eoln-text"; void toEOLNtext( FILE * input, FILE * output /*, int linecountflag */ ) { char buffer[ ScreenHeight ][ BufferWidth ]; while ( !feof( input ) ) { int lineCount; for ( lineCount = 0; lineCount < ScreenHeight && !feof( input ); ++lineCount ) { int length = fread( buffer[ lineCount ], sizeof (char), ScreenWidth, input ); while ( --length >= 0 && ( isspace( buffer[ lineCount ][ length ] ) || !isprint( buffer[ lineCount ][ length ] ) ) ) /* "empty" loop */; buffer[ lineCount ][ ++length ] = '\0'; } if ( lineCount > 1 || ( lineCount == 1 && buffer[ 0 ][ 0 ] != '\0' ) ) { int line = 0; while ( --lineCount > 0 && buffer[ lineCount ][ 0 ] == '\0' ) /* "empty" loop */; for ( line = 0; line <= lineCount; ++line ) /* check end conditions again. */ { fputs( buffer[ line ], output ); fputc( '\n', output ); } fputc( '\f', output ); } } } #define FILE_START 0x200 /* beyond char range. */ #define LINE_START 0x400 /* beyond char range. */ void toScreens( FILE * input, FILE * output /*, int linecountflag */ ) { char buffer[ ScreenHeight ][ BufferWidth ]; int eolFlag = FILE_START; while ( !feof( input ) ) { int lineCount; for ( lineCount = 0; lineCount < ScreenHeight; ++lineCount ) { int length = 0; char * line = buffer[ lineCount ]; int ch = LINE_START; while ( ( length < ScreenWidth ) && !feof( input ) ) { ch = fgetc( input ); if ( ( length == 0 ) && ( ( ( ch == '\r' ) && ( eolFlag == '\n' ) ) || ( ( ch == '\n' ) && ( eolFlag == '\r' ) ) ) ) { ch = fgetc( input ); } eolFlag = ch; if ( ( ch == '\n' ) || ( ch == '\r' ) || feof( input ) ) { break; /* The habit is to set a NUL, but not for SCREENs. */ } line[ length++ ] = ch; /* dbg * / putchar( ch ); */ } /* dbg * / printf( "||end:%d:", length ); */ while ( length < ScreenWidth ) { line[ length++ ] = ' '; /* dbg * / putchar( '*' );*/ } /* dbg * / printf( "||:%d:%d\n", length, lineCount ); */ } /* dbg * / printf( "<>\n", lineCount ); */ if ( lineCount > 0 ) { int line = 0; for ( line = 0; line < lineCount; ++line ) { fwrite( buffer[ line ], sizeof (char), ScreenWidth, output ); } } } } int main(int argc, char * argv[] ) { FILE * input = stdin; FILE * output = stdout; int direction = 0; int blocksize = 1024; int offset = 0; int count = 0; if ( argc > 3 ) { if ( strcmp( argv[ 1 ], kTo_ScreenStr ) == 0 ) { direction = TO_SCREEN; } else if ( strcmp( argv[ 1 ], kTo_EOLN_textStr ) == 0 ) { direction = TO_EOLN_TEXT; } if ( direction != 0 ) { if ( strcmp( argv[ 2 ], "--" ) != 0 ) { input = fopen( argv[ 2 ], "rb" ); } if ( input == NULL ) { printf( "Error opening file <%s> for input.\n", argv[ 2 ] ); direction = -1; } if ( strcmp( argv[ 3 ], "--" ) != 0 ) { output = fopen( argv[ 3 ], "wb" ); } if ( output == NULL ) { printf( "Error opening file <%s> for output.\n", argv[ 3 ] ); fclose( input ); direction = -1; } } } if ( direction < 0 ) { printf( "*** %s quitting. ***\n", argv[ 0 ] ); return EXIT_FAILURE; } else if ( direction == 0 ) { puts( "usage:" ); printf( "\t%s %s \n", argv[ 0 ], kTo_ScreenStr ); printf( "\t%s %s [ [ -size= ] -off= [ -count= ] ]\n", argv[ 0 ], kTo_EOLN_textStr ); printf( "** Default block size is 1024, compatible with Forth SCREENs.\n" ); printf( "** Default count is length of input file.\n" ); printf( "** 0xhexadecimal and 0octal permitted for size, etc.\n" ); printf( "** Replace with -- for stdfiles in pipes\n" ); /* printf( "\t%s --to-image \n", argv[ 0 ] ); */ return EXIT_SUCCESS; } switch ( direction ) { case TO_SCREEN: toScreens( input, output ); break; case TO_EOLN_TEXT: toEOLNtext( input, output ); break; } return EXIT_SUCCESS; } \ No newline at end of file diff --git a/commands.txt b/commands.txt index caa2ac2..7eff8a7 100644 --- a/commands.txt +++ b/commands.txt @@ -29,9 +29,18 @@ tr /\\r/ /\\n/ < BIFU.INC > bifu.inc tr /\\n/ /\\r/ < bifu.inc > BIFU.INC +cat BIFU.INC | tr '\r' '\n' + imgtool del coco_jvc_rsdos bifsource.dsk BIFU.INC imgtool put coco_jvc_rsdos bifsource.dsk BIFU.INC BIFU.INC --ftype=assembler --ascii=ascii +imgtool get coco_jvc_rsdos ../../foreign6809/play/play.dsk PRIMES.BAS --filter=ascii +# Put still gives FM format error when BASIC tries to load: +# imgtool put coco_jvc_rsdos ../../foreign6809/play/play.dsk PRIMESL.BAS PRIMESL.BAS --filter=ascii +# NG: imgtool writes, BASIC won't load: +# imgtool put coco_jvc_rsdos ../../foreign6809/play/play.dsk PRIMESL.BAS PRIMESL.BAS --filter=ascii --ftype=basic + + ../../lwtools-4.14/lwasm/lwasm --list=bif6809.list BIF.ASM dd if=/dev/zero of=blank.dsk bs=256 count=630 diff --git a/testsource/bifsource.dsk b/testsource/bifsource.dsk new file mode 100644 index 0000000..76ee4fc --- /dev/null +++ b/testsource/bifsource.dsk @@ -0,0 +1,393 @@ +00010 * The Kernel of BIF: A Dialect of FORTH 00015 * with a Binary Tree Dictionary 00020 * Copyright 1989 by Joel Matthew Rees 00025 * 00030 * BIF is architecturally derived from 00035 * the public domain fig-FORTH model. 00040 * 00050 * TITLE BIF kernel 16 Feb 89 00070 OPT MEX 00080 INCLUDE BIFU.INC:1 00090 ORG $1200 DEBIF: $3F00 00100 INCLUDE BIF.M:1 00110 INCLUDE BIFDP.ASM:1 00110 INCLUDE BIFST.ASM:1 00120 SETDP VDP COLD loads DP 01000 * 01001 FCC '@' name 01002 FCB 1 name length, usage (NFA) 01003 FCB MFORE type/allocation MODES 01004 FDB WARM-CFAOFF previous link in allocation 01005 FDB BIF+2 owning vocabulary 01006 FDB EQ-CFAOFF left link in tree 01007 FDB AND-CFAOFF right link in tree 01010 FETCH LDD [,U] from [tos] to stack 01011 STD ,U 01012 NEXT 01013 * 01014 FCC '!' 01015 FCB 1 01016 FCB MFORE 01017 FDB FETCH-CFAOFF 01030 FDB BIF+2 01040 FDB NUBLK-CFAOFF 01050 FDB STOCSP-CFAOFF 01060 STORE LDD 2,U from stack to [top] 01070 STD [,U] 01080 LEAU 4,U 01090 NEXT 01095 * 01100 FCC 'LIT' 01110 FCB MCOMP.OR.3 01120 FCB MFORE 01130 FDB STORE-CFAOFF 01140 FDB BIF+2 01150 FDB 0 * LIST-CFAOFF 01160 FDB 0 01170 LIT LDD ,Y++ push literal from code 01180 PSHU D 01190 NEXT 01200 * 01210 FCC 'DLIT' 01220 FCB MCOMP.OR.4 01230 FCB MFORE 01240 FDB LIT-CFAOFF 01250 FDB BIF+2 01260 FDB 0 01270 FDB 0 01280 * push double literal from code 01290 DLIT LDD ,Y++ 01300 LDX ,Y++ 01310 PSHU D,X 01320 NEXT 01330 * 01340 FCC 'EXECUTE' 01350 FCB MCOMP.OR.7 01360 FCB MFORE 01370 FDB DLIT-CFAOFF 01380 FDB BIF+2 01390 FDB 0 01400 FDB 0 01410 * EXECUTE cfa on stack 01420 EXEC LDX ,U++ 01430 BEQ *+4 01440 JMP ,X 01450 LDD #9 01460 PSHU D 01462 JMP ERROR 01464 * 01466 FCC '1BRANCH' 01468 FCB MCOMP.OR.7 01470 FCB MFORE 01472 FDB EXEC-CFAOFF 01474 FDB BIF+2 01476 FDB 0 01478 FDB 0 01480 TBR LDD ,U++ 01482 BNE BRANCH 01484 LEAY 2,Y 01486 NEXT 01488 * 01490 FCC 'BRANCH' 01500 FCB MCOMP.OR.6 01510 FCB MFORE 01520 FDB TBR-CFAOFF 01530 FDB BIF+2 01540 FDB 0 01550 FDB 0 01560 BRANCH LDD ,Y++ 01570 LEAY D,Y 01580 NEXT 01590 * 01600 FCC '0BRANCH' 01610 FCB MCOMP.OR.7 01620 FCB MFORE 01630 FDB BRANCH-CFAOFF 01640 FDB BIF+2 01650 FDB 0 01660 FDB 0 01670 ZBR LDD ,U++ 01680 BEQ BRANCH 01690 LEAY 2,Y 01700 NEXT 01710 * 01720 FCC '(LOOP)' 01730 FCB MCOMP.OR.6 01740 FCB MFORE 01750 FDB ZBR-CFAOFF 01760 FDB BIF+2 01770 FDB 0 01780 FDB 0 01790 XLOOP LDD #1 01800 ADDD ,S 01810 STD ,S 01820 SUBD 2,S 01830 BLT BRANCH 01840 XLOOPN LEAY 2,Y 01850 LEAS 4,S 01860 NEXT 01870 * 01880 FCC '(+LOOP)' 01890 FCB MCOMP.OR.7 01900 FCB MFORE 01910 FDB XLOOP-CFAOFF 01920 FDB BIF+2 01930 FDB 0 01940 FDB 0 01950 XPLOOP LDD ,U++ inc val 01960 BPL XLOOP+3 01970 ADDD ,S 01980 STD ,S 01990 SUBD 2,S 02000 BGT BRANCH 02010 BRA XLOOPN 02020 * 02030 FCC '(DO)' 02040 FCB 4 02050 FCB MFORE 02060 FDB XPLOOP-CFAOFF 02070 FDB BIF+2 02080 FDB 0 02090 FDB 0 02100 XDO PULU D,X 02110 PSHS D,X 02120 NEXT 02130 * 02140 FCC 'I' 02150 FCB 1 02160 FCB MFORE 02170 FDB XDO-CFAOFF 02180 FDB BIF+2 02190 FDB HLD-CFAOFF 02200 FDB IDDOT-CFAOFF 02210 I LDD ,S 02220 PSHU D 02222 NEXT 02224 * 02226 FCC 'J' 02228 FCB 1 02230 FCB MFORE 02232 FDB I-CFAOFF 02234 FDB BIF+2 02236 FDB IPCOM-CFAOFF 02238 FDB 0 02240 J LDD 4,S 02242 PSHU D 02244 NEXT 02246 * 02250 FCC 'DIGIT' 02260 FCB 5 02270 FCB MFORE 02280 FDB J-CFAOFF 02290 FDB BIF+2 02300 FDB DEC-CFAOFF 02310 FDB DLITER-CFAOFF 02320 DIGIT LDB 3,U 02330 CMPB #'9 02340 BLS DIGITX+4 02350 CMPB #'A 02360 BLO DIGITN 02370 CMPB #'Z 02380 BLS DIGITX+2 02390 CMPB #'a 02400 BLO DIGITN 02410 CMPB #'z 02420 BHI DIGITN 02430 DIGITX SUBB #'a-'Z-1 02440 SUBB #'A-'9-1 02450 SUBB #'0 02460 CMPB 1,U 02470 BHS DIGITN 02480 CLRA 02490 STD 2,U 02500 LDD #-1 02510 DIGITL STD ,U 02520 NEXT 02530 DIGITN LEAU 2,U 02540 LDD #0 02550 BRA DIGITL 02560 * 02570 FCC '(FIND)' 02580 FCB 6 02590 FCB MFORE 02600 FDB DIGIT-CFAOFF 02610 FDB BIF+2 02620 FDB IABORT-CFAOFF 02630 FDB XMACH-CFAOFF 02640 * search vocabulary adr2 for (adr1) 02650 PFIND LDD ,U valid? 02660 BEQ PFINDX 02670 PFINDL DOCOL 02680 FDB PREF 02690 FDB XMACH 02700 LEAU 2,U 02710 LDX [,U] NULL link? 02720 BEQ PFINDN 02730 LDB ,X 02740 ANDB #MHID smudged? 02750 BEQ PFINDY 02760 LEAX RTOFF,X deeper 02770 STX ,U 02780 BRA PFINDL 02790 PFINDY LDX #-1 02800 PFINDN LDD ,U 02810 STX ,U 02820 PFINDX STD 2,U 02830 NEXT 02990 * 03000 FCC 'ENCLOSE' 03010 FCB 7 03020 FCB MFORE 03030 FDB PFIND-CFAOFF 03040 FDB BIF+2 03050 FDB EMTBUF-CFAOFF 03060 FDB 0 03070 * adr1 c --- adr2 len 03080 ENCLOS LDX 2,U 03100 ENCLLD LDB ,X+ delimiter 03110 BEQ ENCL0 03120 CMPB 1,U 03130 BEQ ENCLLD 03133 ENCL0 LEAX -1,X 03140 STX 2,U 03150 ENCLLW LDB ,X+ scan word 03160 BEQ ENCLCA 03170 CMPB 1,U 03180 BNE ENCLLW 03190 ENCLCA TFR X,D length 03195 SUBD #1 03200 SUBD 2,U 03220 STD ,U 03230 NEXT 03240 * 03250 FCC 'LITERAL' 03260 FCB MIMM.OR.7 03270 FCB MFORE 03280 FDB ENCLOS-CFAOFF 03290 FDB BIF+2 03300 FDB LIT-CFAOFF 03310 FDB LOAD-CFAOFF 03320 * compile a literal 03330 LITER BSR LITERS 03340 LDD #LIT 03350 LITERB STD ,Y++ 03360 PULU D 03370 STD ,Y++ 03380 STY UDP,X 03390 PULS Y 03400 JMP HERERR 03405 * 03410 LITERS LDX , but in DP) 01200 * 01210 * push address of USER variable 01215 * call by JSR 01220 XUSER LDB [,S++] one byte offset 01225 CLRA 01230 ADDD in defining definition 01880 * call by JSR 01890 XDOES LDX ,S pfa 01900 LDD ,X++ list ptr 01920 PSHU X parameters 01930 STY ,S nest old 01940 TFR D,Y interpret 01950 NEXT 01960 * 02000 * push double constant 02010 * call by JSR 02020 XDCON PULS X 02030 LDD ,X++ 02040 LDX ,X++ 02050 PSHU D,X 02060 NEXT 02070 * 40000 ORG DPAGE+256 if code fits 40010 SETDP 0 not yet valid 0010 SETDP 0 not yet valid ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00000010 * Start up routines for BIF 00020 * BIF Copyright 1989 Joel Matthew Rees (see BIF/ASM) 00100 * 00105 ILIM EQU $8000 memory 00110 IBUFF EQU ILIM-BCT*(BWID+4) 00120 IPAD EQU IBUFF-TWID max 00130 IHASH EQU IPAD-34 00140 IWPAD EQU IHASH-NLMASK-2 00150 ITIB EQU IWPAD-TWID 00160 IUSER EQU ITIB-UEND 00170 IRP0 EQU IUSER-2 00180 ISP0 EQU IRP0-258 00190 * dictionary below here 00400 * 00410 ORIG EQU * initials for task 0, offsets 00420 NOP 0 00430 JMP COLD 1 00440 NOP 4 00450 JMP WARM 5 00460 FDB $6809 cpu 8 00470 FDB 0 rev $0A 00480 FDB FORGET-CFAOFF CURRENT for COLD $0C 00490 FDB 8 backspace $0E 00500 FDB IUSER task 0 user area $10 00510 FDB ISP0 $12 00520 FDB IRP0 $14 00530 FDB ITIB $16 00540 FDB NLMASK not used $18 00550 FDB 1 WARNING $1A 00560 FDB FOLLOW-1 FENCE for COLD $1C 00570 FDB FOLLOW DP for COLD $1E 00580 FDB BIF+2 defs root $20 00590 FDB IPAD $22 00600 FDB IWPAD $24 00610 FDB 32 terminal columns $26 00620 FDB IBUFF $28 00630 FDB ILIM $2A 01000 * 01010 FCC 'COLD' 01020 FCB 4 01030 FCB MFORE 01040 FDB 0 01050 FDB BIF+2 01060 FDB 0 01070 FDB 0 01080 COLD LEAY DOREGS,PCR 01090 EXG PC,Y call 01100 SETDP VDP 01110 CLR $71 for BASIC reset 01120 LDD -4,Y 01130 STD UCURR,X 01140 LDD $0C,Y 01150 STD UFENCE,X 01160 LDD $0E,Y 01170 STD UDP,X 01180 LDD $10,Y 01190 STD UROOT,X 01200 STD UDROOT,X 01210 PSHU D Initial vocabularies 01220 BSR PRUNE must ALL be PRUNEd! 01230 LDD #EDITOR+2 01240 PSHU D 01250 BSR PRUNE 01260 LDD #ASMBLR+2 01270 PSHU D 01280 BSR PRUNE 01290 JMP WARM+5 01300 SETDP 0 01310 * Watch stack (vocabulary) depth! 01315 SETDP VDP 01320 PRUNE PSHS D,X,Y 01330 LDY 0 trap [NULL]s 02140 RTS 02150 SETDP 0 02160 * 02230 FCC 'WARM' 02240 FCB 4 02250 FCB MFORE 02260 FDB COLD-CFAOFF 02270 FDB BIF+2 02280 FDB VLIST-CFAOFF 02290 FDB WARN-CFAOFF 02300 WARM LEAY 0 to be compiled 04420 * 04440 DEVNUM EQU $6F coco ROM constant 04450 FCC '>PRT' 04460 FCB 4 04470 FCB MFORE 04480 FDB XSCODE-CFAOFF 04490 FDB BIF+2 04500 FDB 0 04510 FDB 0 04520 TOPRT LDB #-2 04530 STB DEVNUM 04540 NEXT 04550 * 04560 FCC '>VID' 04570 FCB 4 04580 FCB MFORE 04590 FDB TOPRT-CFAOFF 04600 FDB BIF+2 04610 FDB 0 04620 FDB 0 04630 TOVID CLR DEVNUM 04650 NEXT 04660 * 04670 FCC '2*' 04680 FCB 2 04690 FCB MFORE 04700 FDB TOVID-CFAOFF 04710 FDB BIF+2 04720 FDB 0 04730 FDB 0 04740 LSHIFT LSL 1,U 04750 ROL ,U 04760 NEXT 04770 * 04780 FCC '2/' 04790 FCB 2 04800 FCB MFORE 04810 FDB LSHIFT-CFAOFF 04820 FDB BIF+2 04830 FDB SUB2-CFAOFF 04840 FDB THREE-CFAOFF 04850 RSHIFT ASR ,U 04860 ROR 1,U 04870 NEXT 04880 * 04885 FCC '(REFIND)' 04890 FCB 8 04895 FCB MFORE 04900 FDB RSHIFT-CFAOFF 04910 FDB BIF+2 04920 FDB 0 04930 FDB 0 04940 * search vocabulary adr2 for first (adr1) 04950 PREF LDD #PFAOFF vocab flag 04955 PSHS D,Y 04960 LDX ,U root ptr 04965 BEQ PREFN 04970 BRA PREFA 04980 PREFP LDY 2,U hunt for 04990 LDB ,X count 05000 ANDB #NLMASK 05005 BEQ PREF1 05010 TFR B,A 05020 NEGA 05040 LEAX A,X hunt in 05050 PREFS LDA ,Y+ scan 05060 SUBA ,X+ 05070 BNE PREFN 05080 DECB 05090 BNE PREFS 05100 PREF1 LDA ,Y NUL? 05110 BNE PREFN 05120 PREFX PULS D,Y 05140 PSHU D flag 05170 NEXT 05180 PREFN LDX [,U] old NFA 05190 TSTA 05200 BMI *+6 05210 LDB #RTOFF 05220 BRA *+4 05230 LDB #LFTOFF 05233 LEAX B,X 05236 STB 1,S flag 05240 STX ,U 05250 PREFA LDX ,X new NFA 05260 BNE PREFP 05280 BRA PREFX 08200 * ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00010 * Include file for BIF 00020 * BIF Copyright 1989 Joel Matthew Rees (see BIF/ASM) 00030 * 01000 FCC 'MOVE' 01010 FCB 4 01020 FCB MFORE 01030 FDB PREF-CFAOFF 01040 FDB BIF+2 01050 FDB MINUS-CFAOFF 01060 FDB NFA-CFAOFF 01070 MOVE LDD ,U++ count=0? 01080 BEQ MOVEX 01090 PSHS Y,U 01100 LDY ,U 01110 LDU 2,U 01120 MOVELP PULU X 01130 STX ,Y++ 01140 SUBD #1 01150 BNE MOVELP 01160 PULS Y,U 01170 MOVEX LEAU 4,U 01180 NEXT 01190 * 01200 FCC 'CMOVE' 01210 FCB 5 01220 FCB MFORE 01225 FDB MOVE-CFAOFF 01230 FDB BIF+2 01240 FDB CFA-CFAOFF 01250 FDB COMP-CFAOFF 01260 CMOVE LDD #0 01270 SUBD ,U++ 01280 PSHS A,Y 01290 PULU X,Y 01300 BEQ CMOVEX 01310 CMOVEL LDA ,Y+ 01320 STA ,X+ 01330 INCB 01340 BNE CMOVEL 01350 INC ,S 01360 BNE CMOVEL 01370 CMOVEX PULS A,Y 01380 NEXT 01390 * 01400 FCC 'U*' 01410 FCB 2 01420 FCB MFORE 01430 FDB CMOVE-CFAOFF 01440 FDB BIF+2 01450 FDB TOG-CFAOFF 01460 FDB UPDATE-CFAOFF 01470 USTAR LEAS -4,S 01480 LDA 1,U LEAST 01490 LDB 3,U 01500 MUL 01510 STD 2,S 01520 LDA ,U most 01530 LDB 2,U 01540 MUL 01550 STD ,S 01560 LDD 1,U inner 01570 MUL 01580 ADDD 1,S 01590 BCC *+4 01600 INC ,S 01605 STD 1,S 01610 LDA ,U 01620 LDB 3,U 01630 MUL 01640 ADDD 1,S 01650 BCC *+4 01660 INC ,S 01670 STD 1,S 01680 PULS D,X 01690 STD ,U 01700 STX 2,U 01710 NEXT 01720 * 01730 FCC 'U/' 01740 FCB 2 01750 FCB MFORE 01760 FDB USTAR-CFAOFF 01770 FDB BIF+2 01780 FDB 0 01790 FDB 0 01800 USLASH LDA #17 bit ct 01810 PSHS A 01820 LDD 2,U dividend 01830 USLDIV CMPD ,U divisor 01840 BHS USLSUB 01850 ANDCC #.NOT.1 01860 BRA USLBIT 01870 USLSUB SUBD ,U 01880 ORCC #1 quotient, 01890 USLBIT ROL 5,U save it 01900 ROL 4,U 01910 DEC ,S more bits? 01920 BEQ USLR 01930 ROLB remainder 01940 ROLA 01950 BCC USLDIV 01960 BRA USLSUB 01970 USLR LEAS 1,S 01980 LEAU 2,U 01990 LDX 2,U 02000 STD 2,U 02010 STX ,U 02020 NEXT 02030 * 02200 FCC 'AND' 02210 FCB 3 02220 FCB MFORE 02230 FDB USLASH-CFAOFF 02240 FDB BIF+2 02250 FDB ABS-CFAOFF 02260 FDB BACK-CFAOFF 02270 AND PULU D 02280 ANDB 1,U 02290 ANDA ,U 02300 STD ,U 02310 NEXT 02320 * 02330 FCC 'OR' 02340 FCB 2 02350 FCB MFORE 02360 FDB AND-CFAOFF 02370 FDB BIF+2 02380 FDB OCT-CFAOFF 02390 FDB OUT-CFAOFF 02400 OR PULU D 02410 ORB 1,U 02420 ORA ,U 02430 STD ,U 02440 NEXT 02450 * 02460 FCC 'XOR' 02470 FCB 3 02480 FCB MFORE 02490 FDB OR-CFAOFF 02500 FDB BIF+2 02510 FDB 0 02520 FDB 0 02530 XOR PULU D 02540 EORB 1,U 02550 EORA ,U 02560 STD ,U 02570 NEXT 02580 * 02590 FCC 'SP@' 02600 FCB 3 02610 FCB MFORE 02620 FDB XOR-CFAOFF 02630 FDB BIF+2 02640 FDB SPSTO-CFAOFF 02660 FDB 0 02670 SPFEH TFR U,X 02680 PSHU X 02690 NEXT 02700 * 02710 FCC 'SP!' 02720 FCB 3 02730 FCB MFORE 02740 FDB SPFEH-CFAOFF 02750 FDB BIF+2 02760 FDB 0 02770 FDB 0 02780 SPSTO LDX R' 03150 FCB MCOMP.OR.2 03160 FCB MFORE 03170 FDB LEAVE-CFAOFF 03180 FDB BIF+2 03190 FDB GT-CFAOFF 03200 FDB QDOT-CFAOFF 03210 TOR PULU D 03220 PSHS D 03230 NEXT 03240 * 03250 FCC 'R>' 03260 FCB MCOMP.OR.2 03270 FCB MFORE 03280 FDB TOR-CFAOFF 03290 FDB BIF+2 03300 FDB R-CFAOFF 03310 FDB REPEAT-CFAOFF 03320 RFROM JMP ' 03683 FCB 1 03684 FCB MFORE 03685 FDB ZLESS-CFAOFF 03686 FDB BIF+2 03687 FDB 0 03688 FDB TOPRT-CFAOFF 03689 GT LDD 2,U 03690 CMPD ,U++ 03691 BGT TRUE 03692 BRA FALSE 03693 * 03700 FCC '+' 03710 FCB 1 03720 FCB MFORE 03730 FDB GT-CFAOFF 03740 FDB BIF+2 03750 FDB PAREN-CFAOFF 03760 FDB SLASH-CFAOFF 03770 ADD PULU D 03780 ADDTOP 03810 * 03820 FCC '-' 03830 FCB 1 03840 FCB MFORE 03850 FDB ADD-CFAOFF 03860 FDB BIF+2 03870 FDB 0 03880 FDB 0 03890 SUB LDD 2,U 03900 SUBD ,U++ 03910 STD ,U 03920 NEXT 03930 * 03940 FCC 'D+' 03950 FCB 2 03960 FCB MFORE 03970 FDB SUB-CFAOFF 03980 FDB BIF+2 03990 FDB CONST-CFAOFF 04000 FDB DABS-CFAOFF 04010 DADD LDD 6,U 04020 ADDD 2,U 04030 STD 6,U 04040 LDD 4,U 04050 ADCB 1,U 04060 ADCA ,U 04070 LEAU 4,U 04080 STD ,U 04090 NEXT 04100 * 04120 FCC 'D-' 04130 FCB 2 04140 FCB MFORE 04150 FDB DADD-CFAOFF 04160 FDB BIF+2 04170 FDB DCHS-CFAOFF 04180 FDB DDOT-CFAOFF 04190 DSUB LDD 6,U 04200 SUBD 2,U 04210 STD 6,U 04220 LDD 4,U 04230 SBCB 1,U 04240 SBCA ,U 04250 LEAU 4,U 04260 STD ,U 04270 NEXT 04280 * 04290 FCC 'MINUS' 04300 FCB 5 04310 FCB MFORE 04320 FDB DSUB-CFAOFF 04330 FDB BIF+2 04340 FDB 0 04350 FDB MOD-CFAOFF 04360 MINUS LDD #0 04370 SUBD ,U 04380 STD ,U 04390 NEXT 04400 * 04410 FCC 'DMINUS' 04420 FCB 6 04430 FCB MFORE 04440 FDB MINUS-CFAOFF 04450 FDB BIF+2 04460 FDB 0 04470 FDB 0 04480 DMINUS LDD #0 04490 SUBD 2,U 04500 STD 2,U 04510 LDD #0 04520 SBCB 1,U 04530 SBCA ,U 04570 STD ,U 04580 NEXT 04590 * 04600 FCC 'OVER' 04610 FCB 4 04620 FCB MFORE 04630 FDB DMINUS-CFAOFF 04640 FDB BIF+2 04650 FDB OR-CFAOFF 04660 FDB PFA-CFAOFF 04670 OVER LDD 2,U 04680 PSHU D 04690 NEXT 04700 * 04710 FCC 'DROP' 04720 FCB 4 04730 FCB MFORE 04740 FDB OVER-CFAOFF 04750 FDB BIF+2 04760 FDB DPL-CFAOFF 04770 FDB EMIT-CFAOFF 04780 DROP LEAU 2,U 04790 NEXT 04800 * 04810 FCC 'SWAP' 04820 FCB 4 04830 FCB MFORE 04840 FDB DROP-CFAOFF 04850 FDB BIF+2 04860 FDB ROT-CFAOFF 04870 FDB VAR-CFAOFF 04880 SWAP PULU D,X 04890 PSHU D 04900 PSHU X 04910 NEXT 04920 * 04930 FCC 'DUP' 04940 FCB 3 04940 FCB MFORE 04950 FDB SWAP-CFAOFF 04960 FDB BIF+2 04970 FDB 0 * DUMP-CFAOFF 04980 FDB ELSE-CFAOFF 04990 DUP LDD ,U 05000 PSHU D 05010 NEXT 05020 * 05030 FCC '+!' 05040 FCB 2 05050 FCB MFORE 05060 FDB DUP-CFAOFF 05070 FDB BIF+2 05080 FDB 0 05090 FDB 0 05100 ADDSTO PULU X 05110 LDD ,X 05120 ADDD ,U++ 05130 STD ,X 05140 NEXT 05150 * ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00010 * Include file for BIF 00020 * BIF Copyright 1989 Joel Matthew Rees (see BIF/ASM) 00030 * 05160 FCC 'TOGGLE' 05170 FCB 6 05180 FCB MFORE 05190 FDB ADDSTO-CFAOFF 05200 FDB BIF+2 05210 FDB TIB-CFAOFF 05220 FDB TYPE-CFAOFF 05230 TOG PULU D,X 05240 EORB ,X 05250 STB ,X 05260 NEXT 05270 * 05280 FCC 'C@' 05290 FCB 2 05300 FCB MFORE 05310 FDB TOG-CFAOFF 05320 FDB BIF+2 05330 FDB BUFFER-CFAOFF 05340 FDB DADD-CFAOFF 05350 CFEH LDB [,U] 05360 CLRA 05370 STD ,U 05380 NEXT 05390 * 05400 FCC 'C!' 05410 FCB 2 05420 FCB MFORE 05430 FDB CFEH-CFAOFF 05440 FDB BIF+2 05450 FDB 0 05460 FDB 0 05470 CSTO LDB 3,U 05480 STB [,U] 05490 LEAU 4,U 05500 NEXT 05510 * 05520 FCC 'ROT' 05530 FCB 3 05540 FCB MFORE 05550 FDB CSTO-CFAOFF 05560 FDB BIF+2 05570 FDB RFROM-CFAOFF 05580 FDB SMUDGE-CFAOFF 05590 ROT PSHS Y 05600 PULU D,X,Y 05610 PSHU D,X 05620 PSHU Y 05630 PULS Y 05640 NEXT 05650 * 05660 FCC 'BACK' back ref 05670 FCB MCOMP.OR.4 05680 FCB MFORE 05690 FDB ROT-CFAOFF 05700 FDB BIF+2 05710 FDB BPBUF-CFAOFF 05720 FDB BEGIN-CFAOFF 05730 BACK LDX ' 07010 FCB MIMM.OR.3 07020 FCB MFORE 07030 FDB TICK-CFAOFF 07040 FDB BIF+2 07050 FDB PLOOP-CFAOFF 07060 FDB DOT-CFAOFF 07065 * --> see fig-FORTH model 07070 NEXSCR DOCOL 07080 FDB QLOAD 07090 FDB ZERO 07100 FDB IN 07110 FDB STORE 07120 FDB BPSCR 07130 FDB BLK 07140 FDB FETCH 07150 FDB OVER 07160 FDB MOD remaining in screen 07170 FDB SUB 07180 FDB BLK 07190 FDB ADDSTO to next 07200 FDB SEMIS 07290 * 07300 FCC '1ARRAY' 07310 FCB 6 07320 FCB MFORE 07330 FDB NEXSCR-CFAOFF 07340 FDB BIF+2 07350 FDB SUB1-CFAOFF 07360 FDB TBR-CFAOFF 07370 ONEARR DOCOL 07380 FDB CREATE 07390 FDB IPCOM 07400 DO1ARR 07410 FDB XMACH 07415 LDX ,U 07420 CMPX #255 0