-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
\ No newline at end of file
+00020 * Direct Page definitions for BIF
+00030 * BIF Copyright 1989 Joel Matthew Rees (see BIF/ASM)
+00060 * This file is dependent on BIF/M definitions
+00100 DPAGE EQU *
+00105 VDP EQU DPAGE/256
+00110 * ORG needs to leave space for this code
+00120 SETDP VDP
+00130 * COLD needs to load VDP into DP register
+00500 *
+00510 * Direct Page variables
+00600 UP RMB 2
+00610 RMB 8 spares
+01000 *
+{ bifc_vm.c
+01010 * nest into icode list
+01020 * call by JSR
+01030 XCOL LDX ,S list ptr
+01040 STY ,S nest old
+01050 TFR X,Y interpret
+01060 NEXT
+01070 *
+}
+{ symbol.c
+01080 * PUSH FOLLOWING WORD
+01090 * call by JSR for CONSTANT
+01100 XCON LDD [,S++]
+01110 PSHU D
+01120 NEXT
+01130 *
+01140 * push following address
+01150 * call by JSR for VARIABLE address
+01160 XVAR PULS D
+01170 PSHU D
+01180 NEXT
+01190 * (same code as R>, 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 <UP
+01240 PSHU D
+01250 NEXT
+01260 *
+01300 * push address of LINEAR array entry
+01305 * call by JSR
+01310 X1ARR PULS X
+01320 LDD ,U index
+01330 SUBD ,X base
+01340 CMPD 2,X width
+01350 BLO X1ARRS
+01360 LDD #$0C
+01365 PSHU D
+01370 JMP ERROR
+01380 X1ARRS PSHS A
+01390 LDA 4,X size
+01400 MUL
+01410 STD ,U
+01420 PULS A ms byte
+01430 LDB 4,X
+01440 MUL
+01450 TFR B,A
+01460 ADDA ,U
+01470 LDB 1,U
+01480 LEAX 5,X past header
+01490 LEAX D,X
+01500 STX ,U
+01510 NEXT
+01520 * LINEAR array header format:
+01530 * FDB BASE (lowest index)
+01540 * FDB WIDTH (# of elements)
+01550 * FCB SIZE (< 256 bytes / element)
+01560 * RMB SIZE*WIDTH (data)
+01700 *
+01710 * push content of USER variable
+01715 * call by JSR
+01720 XUCON LDX <UP
+01722 LDB [,S++] one byte offset
+01725 CLRA
+01730 LDD D,X
+01740 PSHU D
+01750 NEXT
+01800 *
+01802 * store VOCABULARY pointer in root
+01805 * call by JSR
+01810 XVOC LDX <UP
+01820 PULS D
+01830 STD UROOT,X
+01840 NEXT
+01850 *
+01860 * indirect into icode list following
+01870 * DOES> 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