( ----- 000 ) CVM MASTER INDEX 301 CVM boot code 306 CVM assembler 309 Common drivers 310 Grid drivers ( ----- 001 ) : CVMC 302 305 LOADR ; : CVMA 306 LOAD ; ( ----- 002 ) $0c ALLOT0 ( END OF STABLE ABI ) 0 TO lblnext 0 TO lblcell ( same as next for CVM ) 2 TO lbldoes 1 TO lblxt 3 TO lblval ( ----- 003 ) \ CVM native words \ We implement the *absolute* bare bone set here, at the cost \ of extreme inefficiency. The reason why we do that is that \ the CVM generally runs on CPU that are obscenely fast, so \ speed doesn't matter much. The other reason is that this \ allows us to test the Forth "fallback" words properly, \ something we wouldn't to otherwise. CODE PC! 51 C, ;CODE CODE PC@ 52 C, ;CODE CODE * 53 C, ;CODE CODE /MOD 54 C, ;CODE CODE QUIT 55 C, CODE ABORT 56 C, CODE EXIT 13 C, ;CODE CODE RCNT 57 C, ;CODE CODE SCNT 58 C, ;CODE CODE BYE 59 C, CODE (br) 30 C, ;CODE CODE (?br) 8 C, ;CODE CODE (next) 9 C, ;CODE CODE (b) 15 C, ;CODE CODE (n) 16 C, ;CODE ( ----- 004 ) CODE C@ 63 C, ;CODE CODE @ 64 C, ;CODE CODE C! 66 C, ;CODE CODE ! 65 C, ;CODE CODE NOT 38 C, ;CODE CODE AND 39 C, ;CODE CODE OR 40 C, ;CODE CODE XOR 41 C, ;CODE CODE + 28 C, ;CODE CODE - 29 C, ;CODE CODE < 33 C, ;CODE CODE R@ 60 C, ;CODE CODE R~ 26 C, ;CODE CODE R> 61 C, ;CODE CODE >R 62 C, ;CODE ( ----- 005 ) CODE DUP 0 C, ;CODE CODE DROP 1 C, ;CODE CODE ?DUP 14 C, ;CODE CODE SWAP 4 C, ;CODE CODE OVER 5 C, ;CODE CODE ROT 6 C, ;CODE CODE TICKS ;CODE CODE EXECUTE 21 C, CODE JMPi! 19 C, ;CODE CODE CALLi! 25 C, ;CODE CODE i>! 27 C, ;CODE ( ----- 006 ) \ CVM "assembler" : JMP(i), 17 C, L, ; : JMPi, 11 C, L, ; : CALLi, 10 C, L, ; : i>, 2 C, L, ; : (i)>, 3 C, L, ; ( ----- 009 ) \ Common drivers : (key?) 0 PC@ 1 ; : _ ( n blk( -- ) SWAP ( blk( n ) ( n ) L|M 3 PC! 3 PC! ( blkid ) ( blk( ) L|M 3 PC! 3 PC! ( dest ) ; : (blk@) 1 3 PC! ( read ) _ ; : (blk!) 2 3 PC! ( write ) _ ; : TX> 8 PC! ; : RX