1 00020 * Direct Page definitions for BIF
\r00030 * BIF Copyright 1989 Joel Matthew Rees (see BIF/ASM)
\r00060 * This file is dependent on BIF/M definitions
\r00100 DPAGE EQU *
\r00105 VDP EQU DPAGE/256
\r00110 * ORG needs to leave space for this code
\r00120 SETDP VDP
\r00130 * COLD needs to load VDP into DP register
\r00500 *
\r00510 * Direct Page variables
\r00600 UP RMB 2
\r00610 RMB 8 spares
\r01000 *
\r01010 * nest into icode list
\r01020 * call by JSR
\r01030 XCOL LDX ,S list ptr
\r01040 STY ,S nest old
\r01050 TFR X,Y interpret
\r01060 NEXT
\r01070 *
\r01080 * PUSH FOLLOWING WORD
\r01090 * call by JSR for CONSTANT
\r01100 XCON LDD [,S++]
\r01110 PSHU D
\r01120 NEXT
\r01130 *
\r01140 * push following address
\r01150 * call by JSR for VARIABLE address
\r01160 XVAR PULS D
\r01170 PSHU D
\r01180 NEXT
\r01190 * (same code as R>, but in DP)
\r01200 *
\r01210 * push address of USER variable
\r01215 * call by JSR
\r01220 XUSER LDB [,S++] one byte offset
\r01225 CLRA
\r01230 ADDD <UP
\r01240 PSHU D
\r01250 NEXT
\r01260 *
\r01300 * push address of LINEAR array entry
\r01305 * call by JSR
\r01310 X1ARR PULS X
\r01320 LDD ,U index
\r01330 SUBD ,X base
\r01340 CMPD 2,X width
\r01350 BLO X1ARRS
\r01360 LDD #$0C
\r01365 PSHU D
\r01370 JMP ERROR
\r01380 X1ARRS PSHS A
\r01390 LDA 4,X size
\r01400 MUL
\r01410 STD ,U
\r01420 PULS A ms byte
\r01430 LDB 4,X
\r01440 MUL
\r01450 TFR B,A
\r01460 ADDA ,U
\r01470 LDB 1,U
\r01480 LEAX 5,X past header
\r01490 LEAX D,X
\r01500 STX ,U
\r01510 NEXT
\r01520 * LINEAR array header format:
\r01530 * FDB BASE (lowest index)
\r01540 * FDB WIDTH (# of elements)
\r01550 * FCB SIZE (< 256 bytes / element)
\r01560 * RMB SIZE*WIDTH (data)
\r01700 *
\r01710 * push content of USER variable
\r01715 * call by JSR
\r01720 XUCON LDX <UP
\r01722 LDB [,S++] one byte offset
\r01725 CLRA
\r01730 LDD D,X
\r01740 PSHU D
\r01750 NEXT
\r01800 *
\r01802 * store VOCABULARY pointer in root
\r01805 * call by JSR
\r01810 XVOC LDX <UP
\r01820 PULS D
\r01830 STD UROOT,X
\r01840 NEXT
\r01850 *
\r01860 * indirect into icode list following
\r01870 * DOES> in defining definition
\r01880 * call by JSR
\r01890 XDOES LDX ,S pfa
\r01900 LDD ,X++ list ptr
\r01920 PSHU X parameters
\r01930 STY ,S nest old
\r01940 TFR D,Y interpret
\r01950 NEXT
\r01960 *
\r02000 * push double constant
\r02010 * call by JSR
\r02020 XDCON PULS X
\r02030 LDD ,X++
\r02040 LDX ,X++
\r02050 PSHU D,X
\r02060 NEXT
\r02070 *
\r40000 ORG DPAGE+256 if code fits
\r40010 SETDP 0 not yet valid
\r