1 00000010 * Start up routines for BIF
\r00020 * BIF Copyright 1989 Joel Matthew Rees (see BIF/ASM)
\r00100 *
\r00105 ILIM EQU $8000 memory
\r00110 IBUFF EQU ILIM-BCT*(BWID+4)
\r00120 IPAD EQU IBUFF-TWID max
\r00130 IHASH EQU IPAD-34
\r00140 IWPAD EQU IHASH-NLMASK-2
\r00150 ITIB EQU IWPAD-TWID
\r00160 IUSER EQU ITIB-UEND
\r00170 IRP0 EQU IUSER-2
\r00180 ISP0 EQU IRP0-258
\r00190 * dictionary below here
\r00400 *
\r00410 ORIG EQU * initials for task 0, offsets
\r00420 NOP 0
\r00430 JMP COLD 1
\r00440 NOP 4
\r00450 JMP WARM 5
\r00460 FDB $6809 cpu 8
\r00470 FDB 0 rev $0A
\r00480 FDB FORGET-CFAOFF CURRENT for COLD $0C
\r00490 FDB 8 backspace $0E
\r00500 FDB IUSER task 0 user area $10
\r00510 FDB ISP0 $12
\r00520 FDB IRP0 $14
\r00530 FDB ITIB $16
\r00540 FDB NLMASK not used $18
\r00550 FDB 1 WARNING $1A
\r00560 FDB FOLLOW-1 FENCE for COLD $1C
\r00570 FDB FOLLOW DP for COLD $1E
\r00580 FDB BIF+2 defs root $20
\r00590 FDB IPAD $22
\r00600 FDB IWPAD $24
\r00610 FDB 32 terminal columns $26
\r00620 FDB IBUFF $28
\r00630 FDB ILIM $2A
\r01000 *
\r01010 FCC 'COLD'
\r01020 FCB 4
\r01030 FCB MFORE
\r01040 FDB 0
\r01050 FDB BIF+2
\r01060 FDB 0
\r01070 FDB 0
\r01080 COLD LEAY DOREGS,PCR
\r01090 EXG PC,Y call
\r01100 SETDP VDP
\r01110 CLR $71 for BASIC reset
\r01120 LDD -4,Y
\r01130 STD UCURR,X
\r01140 LDD $0C,Y
\r01150 STD UFENCE,X
\r01160 LDD $0E,Y
\r01170 STD UDP,X
\r01180 LDD $10,Y
\r01190 STD UROOT,X
\r01200 STD UDROOT,X
\r01210 PSHU D Initial vocabularies
\r01220 BSR PRUNE must ALL be PRUNEd!
\r01230 LDD #EDITOR+2
\r01240 PSHU D
\r01250 BSR PRUNE
\r01260 LDD #ASMBLR+2
\r01270 PSHU D
\r01280 BSR PRUNE
\r01290 JMP WARM+5
\r01300 SETDP 0
\r01310 * Watch stack (vocabulary) depth!
\r01315 SETDP VDP
\r01320 PRUNE PSHS D,X,Y
\r01330 LDY <UP
\r01340 LDX ,U++ vocab
\r01344 BEQ PRUNEX+2
\r01348 LDD ,X root
\r01352 BEQ PRUNEX+2
\r01356 CMPD UFENCE,Y
\r01360 BLS PRUNSK
\r01364 LDD #0
\r01368 STD ,X
\r01372 BRA PRUNEX+2
\r01376 PRUNSK TFR D,X
\r01380 LDD #0
\r01386 PSHS D mark
\r01390 PRUNL LDD RTOFF,X
\r01400 BEQ PRUNLF
\r01410 CMPD UFENCE,Y
\r01420 BLS PRUNLF-2
\r01430 LDD #0 make leaf
\r01440 STD RTOFF,X
\r01450 BRA PRUNLF
\r01460 PSHS D for later
\r01470 PRUNLF LDD LFTOFF,X
\r01480 BEQ PRUNEX-2
\r01490 CMPD UFENCE,Y
\r01500 BHI PRUNL0
\r01510 TFR D,X go left
\r01520 BRA PRUNL
\r01530 PRUNL0 LDD #0 make leaf
\r01540 STD LFTOFF,X
\r01550 LDX ,S++ go right?
\r01560 PRUNEX BNE PRUNL
\r01570 PULS D,X,Y,PC
\r01580 SETDP 0
\r01590 *
\r02000 SETDP 0
\r02010 DOREGS LDS #IRP0
\r02020 PSHS CC save
\r02030 ORCC #$50 mask ints
\r02040 PSHS Y return adr
\r02050 LDD #DPAGE
\r02060 TFR A,DP
\r02070 SETDP VDP
\r02080 LDY #ORIG+$10
\r02090 LDX ,Y
\r02100 STX <UP
\r02110 LDU #ISP0
\r02120 LDD #0
\r02130 STD >0 trap [NULL]s
\r02140 RTS
\r02150 SETDP 0
\r02160 *
\r02230 FCC 'WARM'
\r02240 FCB 4
\r02250 FCB MFORE
\r02260 FDB COLD-CFAOFF
\r02270 FDB BIF+2
\r02280 FDB VLIST-CFAOFF
\r02290 FDB WARN-CFAOFF
\r02300 WARM LEAY <DOREGS,PCR
\r02310 EXG PC,Y call
\r02320 SETDP VDP
\r02360 LDD 2,Y
\r02370 STD US0,X
\r02380 STD UCSP,X
\r02390 LDD 4,Y
\r02400 STD UR0,X
\r02410 LDD -2,Y
\r02420 STD UBS,X
\r02430 LDD 6,Y
\r02440 STD UTIB,X
\r02450 LDD $0A,Y
\r02460 STD UWARN,X
\r02470 LEAY $10,Y
\r02480 LDD 2,Y
\r02490 STD UPAD,X
\r02500 STD UHLD,X
\r02510 LDD 4,Y
\r02520 STD UWP,X
\r02530 LDD 6,Y
\r02540 STD UCOLUM,X
\r02550 LDD 8,Y
\r02560 STD UFIRST,X
\r02570 STD UUSE,X
\r02580 STD UPREV,X
\r02590 LDD $0A,Y
\r02600 STD ULIMIT,X
\r02610 LDD #16
\r02620 STD UBASE,X
\r02630 LDD #0
\r02640 STD [UR0,X] hole
\r02650 STD [US0,X] hole
\r02660 LDA #(UEND-UIN)
\r02670 LEAY UIN,X
\r02680 WARMLY STB ,Y+
\r02690 DECA
\r02700 BNE WARMLY
\r02740 PULS CC
\r02745 ANDCC #$EF enable IRQ (disc)
\r02750 DOCOL
\r02760 FDB EMTBUF
\r02770 FDB ABORT
\r02780 SETDP 0
\r02890 *
\r