Annotation of gforth/arch/misc/prim.fs, revision 1.8

1.6       jwilke      1: 
                      2: 
1.8     ! jwilke      3: 0 [IF]
        !             4: Ideas/Todo
        !             5: 
        !             6: - x! x@ is only used in key.fs, we could do (emit), (key)...
        !             7:   as primtives and than drop x! and x@
        !             8: 
        !             9: [THEN]
        !            10: 
1.6       jwilke     11: UNLOCK
                     12: >ENVIRON
                     13: \ true SetValue PrimTrace
                     14: 
                     15: LOCK
                     16: 
1.8     ! jwilke     17: UNLOCK
        !            18: also assembler definitions
        !            19: 
        !            20: X has? PrimTrace [IF]
        !            21: : dout PC+6 X , accu X ,
        !            22:        *accu X , txd X ,
        !            23:        PC+4 X , jmp X ,
        !            24:        X , 0 X , ;
        !            25: [ELSE]
        !            26: : dout drop ;
        !            27: [THEN]
        !            28: 
        !            29: LOCK
        !            30: 
1.1       pazsan     31: \ pie primitives
                     32: 
                     33: $20 allot
                     34: 
1.6       jwilke     35: Label start    ahere 2 + , jmp ,
                     36: Label "IntoForth" 4711 ,
                     37: 
                     38: Label RP'       0 ,
                     39: Label SP'       0 ,
                     40: Label UP'       0 ,
                     41: Label IP'       0 ,
1.1       pazsan     42: 
                     43: Label #0       0 ,
                     44: Label #1       1 ,
1.6       jwilke     45: Label #2       2 ,
                     46: Label #4       4 ,
                     47: Label #FF      $FF ,
                     48: Label #$8000   $8000 ,
                     49: Label #-1      -1 ,
                     50: Label "Next"   1802 ,
                     51: Label "Next1"  1802 ,
                     52: Label ""Next""  "Next" ,
                     53: End-Label
                     54: 
                     55: \ The virtual machine registers an data (stacks) go
                     56: \ to a seperate memory region (hopefully ram)
                     57: 
                     58: UNLOCK
                     59: current-region vm-memory activate ( saved-region )
                     60: LOCK
                     61: 
1.1       pazsan     62: Label RP       0 ,
                     63: Label SP       0 ,
                     64: Label UP       0 ,
                     65: Label IP       0 ,
                     66: Label W                0 ,
1.2       pazsan     67: Label t0       0 ,
                     68: Label t1       0 ,
                     69: Label t2       0 ,
                     70: Label t3       0 ,
                     71: Label srcx     0 ,
                     72: Label dstx     0 ,
1.6       jwilke     73:                 "Next" , jmp ,
                     74: Label data-stack     50 cells allot
                     75: Label data-stack-top 2 cells allot
                     76: Label return-stack     50 cells allot
                     77: Label return-stack-top 2 cells allot
                     78: 
                     79: End-Label
                     80: 
                     81: UNLOCK
                     82: ( saved-region ) activate
                     83: LOCK
1.2       pazsan     84: 
                     85: \ Up to here it's self modified
1.6       jwilke     86: Label IntoForth 
                     87:                 \ Transfer VM registers initial values
                     88:                 RP' , RP ,
                     89:                 SP' , SP ,
                     90:                 IP' , IP ,
                     91:                 UP' , UP , \ useless since UP is initialized by gforth boot
                     92:                 ""Next"" , dstx 1 + ,
                     93:                 #0 , dstx 2 + ,
1.2       pazsan     94: 
1.6       jwilke     95: Label Next     #0 , add ,  \ clear carry
1.1       pazsan     96:                IP , shr ,
                     97:                sym Next
1.2       pazsan     98:                *accu , W ,
1.1       pazsan     99:                #1 , add ,
                    100:                accu , add ,
                    101:                accu , IP ,
1.2       pazsan    102: Label Next1    W , shr ,
                    103:                *accu , shr ,
1.1       pazsan    104:                accu , jmp ,
1.6       jwilke    105: 
1.2       pazsan    106: Label "xmov"   srcx ,
1.6       jwilke    107: End-Label
1.2       pazsan    108: 
1.6       jwilke    109: IntoForth "IntoForth" 2* !
                    110: Next "Next" 2* !
                    111: Next1 "Next1" 2* !
1.1       pazsan    112: 
1.6       jwilke    113: has? PrimTrace [IF]
1.1       pazsan    114: Label "0"      '< ,
                    115: Label "1"      '1 ,
                    116: Label "2"      '2 ,
                    117: Label "3"      '3 ,
                    118: Label "4"      '4 ,
                    119: Label "5"      '5 ,
                    120: Label "6"      '6 ,
                    121: Label "A"      'A ,
                    122: Label "B"      'B ,
                    123: Label "C"      'C ,
                    124: Label "D"      'D ,
                    125: Label "E"      'E ,
                    126: Label "F"      '> ,
                    127: Label "?"      '? ,
                    128: Label "+"      '+ ,
                    129: Label "/"      '/ ,
                    130: Label "H"      'H ,
                    131: Label "I"      'I ,
                    132: Label "J"      'J ,
                    133: Label "K"      'K ,
                    134: Label "L"      'L ,
                    135: Label "M"      'M ,
                    136: Label "N"      'N ,
                    137: Label "O"      'O ,
                    138: Label "P"      'P ,
                    139: Label "Q"      'Q ,
                    140: Label "R"      'R ,
                    141: Label "S"      'S ,
                    142: Label "T"      'T ,
                    143: Label "#"      '# ,
1.6       jwilke    144: End-Label
                    145: [THEN]
1.1       pazsan    146: 
                    147: 
1.8     ! jwilke    148: Code: :docol   
        !           149:                 ': dout
1.1       pazsan    150:                RP , accu ,
                    151:                #1 , sub ,
                    152:                accu , RP ,
1.2       pazsan    153:                IP , *accu ,
1.1       pazsan    154:                W , accu ,
                    155:                #4 , add ,
                    156:                accu , IP ,
                    157:                "Next" , jmp ,
                    158: end-code
                    159: 
1.8     ! jwilke    160: Code: :docon   
        !           161:                 '1 dout
1.2       pazsan    162:                #0 , add ,
                    163:                W , shr ,
                    164:                #2 , add ,
                    165:                *accu , t0 ,
1.1       pazsan    166:                SP , accu ,
                    167:                #1 , sub ,
                    168:                accu , SP ,
1.2       pazsan    169:                t0 , *accu ,
1.1       pazsan    170:                "Next" , jmp ,
                    171: end-code
                    172: 
1.8     ! jwilke    173: Code: :dovar
        !           174:                 '2 dout
1.2       pazsan    175:                W , accu ,
                    176:                #4 , add ,
                    177:                accu , t0 ,
1.1       pazsan    178:                SP , accu ,
                    179:                #1 , sub ,
                    180:                accu , SP ,
1.2       pazsan    181:                t0 , *accu ,
1.1       pazsan    182:                "Next" , jmp ,
                    183: end-code
                    184: 
1.8     ! jwilke    185: Code: :douser  
        !           186:                 '3 dout
1.1       pazsan    187:                #0 , add ,
                    188:                W , shr ,
                    189:                #2 , add ,
1.2       pazsan    190:                *accu , accu ,
1.1       pazsan    191:                UP , add ,
1.2       pazsan    192:                accu , t0 ,
                    193:                SP , accu ,
                    194:                #1 , sub ,
                    195:                accu , SP ,
                    196:                t0 , *accu ,
1.1       pazsan    197:                "Next" , jmp ,
                    198: end-code
                    199: 
1.8     ! jwilke    200: Code: :dodefer 
        !           201:                 '4 dout
1.1       pazsan    202:                #0 , add ,
                    203:                W , shr ,
                    204:                #2 , add ,
1.2       pazsan    205:                *accu , W ,
1.1       pazsan    206:                "Next1" , jmp ,
                    207: end-code
                    208: 
1.8     ! jwilke    209: Code: :dofield
        !           210:                 '5 dout
1.1       pazsan    211:                #0 , add ,
                    212:                W , shr ,
                    213:                #2 , add ,
1.2       pazsan    214:                *accu , accu ,
                    215:                accu , t0 ,
                    216:                SP , accu ,
                    217:                *accu , accu ,
                    218:                t0 , add ,
                    219:                accu , t0 ,
                    220:                SP , accu ,
                    221:                t0 , *accu ,
1.1       pazsan    222:                "Next" , jmp ,
                    223: end-code
                    224: 
1.8     ! jwilke    225: Code: :dodoes
        !           226:                 '6 dout
1.1       pazsan    227:                RP , accu ,
                    228:                #1 , sub ,
                    229:                accu , RP ,
1.2       pazsan    230:                IP , *accu ,
                    231:                W , accu ,
                    232:                #4 , add ,
                    233:                accu , t0 ,
1.1       pazsan    234:                SP , accu ,
                    235:                #1 , sub ,
                    236:                accu , SP ,
1.2       pazsan    237:                t0 , *accu ,
                    238:                t0 , accu ,
1.1       pazsan    239:                #2 , sub ,
                    240:                #0 , add ,
                    241:                accu , shr ,
1.2       pazsan    242:                *accu , IP ,
1.1       pazsan    243:                "Next" , jmp ,
                    244: end-code
                    245: 
1.4       jwilke    246: Code: :doesjump
                    247: end-code
                    248: 
1.8     ! jwilke    249: Code execute
        !           250:                 'E dout
        !           251:                SP , accu ,
        !           252:                *accu , W ,
        !           253:                #1 , add ,
        !           254:                accu , SP ,
        !           255:                "Next1" , jmp ,
        !           256: end-code
        !           257: 
        !           258: Code ;s
        !           259:                 '; dout
        !           260:                RP , accu ,
        !           261:                #1 , add ,
        !           262:                accu , RP ,
        !           263:                #1 , sub ,
        !           264:                *accu , IP ,
        !           265:                "Next" , jmp ,
        !           266: end-code
        !           267: 
        !           268: Code !
        !           269:                 '! dout
1.1       pazsan    270:                SP , accu ,
1.2       pazsan    271:                *accu , t0 ,
1.1       pazsan    272:                #1 , add ,
1.2       pazsan    273:                *accu , t1 ,
1.1       pazsan    274:                #1 , add ,
                    275:                accu , SP ,
1.2       pazsan    276:                t0 , shr ,
                    277:                t1 , *accu ,
1.1       pazsan    278:                "Next" , jmp ,
                    279: end-code
                    280: 
1.8     ! jwilke    281: Code @
        !           282:                 '@ dout
1.1       pazsan    283:                #0 , add ,
1.2       pazsan    284:                SP , accu ,
                    285:                *accu , shr ,
                    286:                *accu , t0 ,
                    287:                SP , accu ,
                    288:                t0 , *accu ,
1.1       pazsan    289:                "Next" , jmp ,
                    290: end-code
                    291: 
1.8     ! jwilke    292: Code x!
        !           293:                 'X dout
1.1       pazsan    294:                SP , accu ,
1.2       pazsan    295:                *accu , dstx ,
1.1       pazsan    296:                #1 , add ,
1.2       pazsan    297:                accu , srcx ,
1.1       pazsan    298:                #1 , add ,
                    299:                accu , SP ,
1.2       pazsan    300:                "xmov" , jmp ,
1.1       pazsan    301: end-code
                    302:                
1.8     ! jwilke    303: Code x@
        !           304:                 'x dout
1.2       pazsan    305:                SP , accu ,
                    306:                *accu , srcx ,
                    307:                accu , dstx ,
                    308:                "xmov" , jmp ,
1.1       pazsan    309: end-code
                    310: 
1.8     ! jwilke    311: Code ?branch
        !           312:                 '? dout
1.1       pazsan    313:                #0 , add ,
                    314:                IP , shr ,
1.2       pazsan    315:                accu , t0 ,
1.1       pazsan    316:                #1 , add ,
                    317:                accu , add ,
                    318:                accu , IP ,
1.8     ! jwilke    319:                 SP , accu ,
        !           320:                 *accu , t1 ,
1.1       pazsan    321:                #1 , add ,
                    322:                accu , SP ,
1.8     ! jwilke    323:                 t1 , accu ,
1.1       pazsan    324:                pc+4 , jz ,
                    325:                "Next" , jmp ,
1.8     ! jwilke    326:                 '~ dout
1.2       pazsan    327:                t0 , accu ,
                    328:                *accu , accu ,
1.8     ! jwilke    329: Label >branch
1.1       pazsan    330:                IP , add ,
                    331:                #2 , sub ,
                    332:                accu , IP ,
                    333:                "Next" , jmp ,
                    334: Label "branch" >branch ,
                    335: end-code
                    336: 
1.8     ! jwilke    337: Code branch
        !           338:                 'b dout
1.1       pazsan    339:                #0 , add ,
                    340:                IP , shr ,
1.2       pazsan    341:                *accu , accu ,
1.1       pazsan    342:                IP , add ,
                    343:                accu , IP ,
                    344:                "Next" , jmp ,
                    345: end-code
                    346: 
1.8     ! jwilke    347: Code (loop)    
        !           348:                 'l dout
1.1       pazsan    349:                #0 , add ,
                    350:                IP , shr ,
1.2       pazsan    351:                *accu , t0 ,
1.1       pazsan    352:                #1 , add ,
                    353:                accu , add ,
                    354:                accu , IP ,
                    355:                RP , accu ,
1.2       pazsan    356:                *accu , t2 ,
1.1       pazsan    357:                #1 , add ,
1.2       pazsan    358:                *accu , t3 ,
                    359:                t2 , accu ,
1.1       pazsan    360:                #1 , add ,
1.2       pazsan    361:                accu , t1 ,
                    362:                RP , accu ,
                    363:                t1 , *accu ,
                    364:                t1 , accu ,
                    365:                t3 , sub ,
1.1       pazsan    366:                "Next" , jz ,
1.2       pazsan    367:                t0 , accu ,
1.1       pazsan    368:                "branch" , jmp ,
                    369: end-code
                    370:                
1.8     ! jwilke    371: Code xor
        !           372:                 'x dout
1.1       pazsan    373:                SP , accu ,
1.2       pazsan    374:                *accu , t0 ,
1.1       pazsan    375:                #1 , add ,
                    376:                accu , SP ,
1.2       pazsan    377:                *accu , accu ,
                    378:                t0 , xor ,
                    379:                accu , t0 ,
                    380:                SP , accu ,
                    381:                t0 , *accu ,
1.1       pazsan    382:                "Next" , jmp ,
                    383: end-code
                    384: 
1.8     ! jwilke    385: Code or        
        !           386:                 'o dout        
1.1       pazsan    387:                SP , accu ,
1.2       pazsan    388:                *accu , t0 ,
1.1       pazsan    389:                #1 , add ,
                    390:                accu , SP ,
1.2       pazsan    391:                *accu , accu ,
                    392:                t0 , or ,
                    393:                accu , t0 ,
                    394:                SP , accu ,
                    395:                t0 , *accu ,
1.1       pazsan    396:                "Next" , jmp ,
                    397: end-code
                    398: 
1.8     ! jwilke    399: Code and
        !           400:                 'a dout
1.1       pazsan    401:                SP , accu ,
1.2       pazsan    402:                *accu , t0 ,
1.1       pazsan    403:                #1 , add ,
                    404:                accu , SP ,
1.2       pazsan    405:                *accu , accu ,
                    406:                t0 , and ,
                    407:                accu , t0 ,
                    408:                SP , accu ,
                    409:                t0 , *accu ,
1.1       pazsan    410:                "Next" , jmp ,
                    411: end-code
                    412: 
1.8     ! jwilke    413: Code +         
        !           414:                 '+ dout
1.1       pazsan    415:                SP , accu ,
1.2       pazsan    416:                *accu , t0 ,
1.1       pazsan    417:                #1 , add ,
                    418:                accu , SP ,
1.2       pazsan    419:                *accu , accu ,
                    420:                t0 , add ,
                    421:                accu , t0 ,
                    422:                SP , accu ,
                    423:                t0 , *accu ,
1.1       pazsan    424:                "Next" , jmp ,
                    425: end-code
                    426: 
1.8     ! jwilke    427: Code -         
        !           428:                 '- dout
1.1       pazsan    429:                SP , accu ,
1.2       pazsan    430:                *accu , t0 ,
1.1       pazsan    431:                #1 , add ,
                    432:                accu , SP ,
1.2       pazsan    433:                *accu , accu ,
                    434:                t0 , sub ,
                    435:                accu , t0 ,
                    436:                SP , accu ,
                    437:                t0 , *accu ,
1.1       pazsan    438:                "Next" , jmp ,
                    439: end-code
                    440: 
1.8     ! jwilke    441: Code 2/                
        !           442:                 '/ dout
1.1       pazsan    443:                #0 , add ,
1.2       pazsan    444:                SP , accu ,
                    445:                *accu , accu ,
1.1       pazsan    446:                PC+6 , js ,
                    447:                accu , shr ,
                    448:                PC+6 , jmp ,
                    449:                accu , shr ,
                    450:                #$8000 , or ,
1.2       pazsan    451:                accu , t0 ,
                    452:                SP , accu ,
                    453:                t0 , *accu ,
1.1       pazsan    454:                "Next" , jmp ,
                    455: end-code
                    456: 
1.8     ! jwilke    457: Code 0=                
        !           458:                 '° dout
1.2       pazsan    459:                SP , accu ,
                    460:                *accu , accu ,
1.1       pazsan    461:                ZF , accu ,
1.2       pazsan    462:                #1 , xor ,
                    463:                #1 , sub ,
                    464:                accu , t0 ,
                    465:                SP , accu ,
                    466:                t0 , *accu ,
1.1       pazsan    467:                "Next" , jmp ,
                    468: end-code
                    469: 
1.8     ! jwilke    470: Code 0<>       
        !           471:                 '% dout
1.2       pazsan    472:                SP , accu ,
                    473:                *accu , accu ,
1.1       pazsan    474:                ZF , accu ,
1.2       pazsan    475:                #1 , sub ,
                    476:                accu , t0 ,
                    477:                SP , accu ,
                    478:                t0 , *accu ,
1.1       pazsan    479:                "Next" , jmp ,
                    480: end-code
                    481: 
1.8     ! jwilke    482: Code =         
        !           483:                 '= dout
1.1       pazsan    484:                SP , accu ,
1.2       pazsan    485:                *accu , t0 ,
1.1       pazsan    486:                #1 , add ,
                    487:                accu , SP ,
1.2       pazsan    488:                *accu , accu ,
                    489:                t0 , sub ,
1.1       pazsan    490:                ZF , accu ,
1.2       pazsan    491:                #1 , xor ,
                    492:                #1 , sub ,
                    493:                accu , t0 ,
                    494:                SP , accu ,
                    495:                t0 , *accu ,
1.1       pazsan    496:                "Next" , jmp ,
                    497: end-code
                    498: 
1.8     ! jwilke    499: Code u<                
        !           500:                 '< dout
1.1       pazsan    501:                SP , accu ,
1.2       pazsan    502:                *accu , t0 ,
1.1       pazsan    503:                #1 , add ,
                    504:                accu , SP ,
1.2       pazsan    505:                *accu , accu ,
                    506:                t0 , sub ,
1.1       pazsan    507:                CF , accu ,
1.2       pazsan    508:                #1 , xor ,
                    509:                #1 , sub ,
                    510:                accu , t0 ,
                    511:                SP , accu ,
                    512:                t0 , *accu ,
1.1       pazsan    513:                "Next" , jmp ,
                    514: end-code
                    515: 
1.8     ! jwilke    516: Code 1+                
        !           517:                 'p dout
1.2       pazsan    518:                SP , accu ,
                    519:                *accu , accu ,
1.1       pazsan    520:                #1 , add ,
1.2       pazsan    521:                accu , t0 ,
                    522:                SP , accu ,
                    523:                t0 , *accu ,
1.1       pazsan    524:                "Next" , jmp ,
                    525: end-code
                    526: 
1.8     ! jwilke    527: Code cell+     
        !           528:                 'P dout
1.2       pazsan    529:                SP , accu ,
                    530:                *accu , accu ,
1.1       pazsan    531:                #2 , add ,
1.2       pazsan    532:                accu , t0 ,
                    533:                SP , accu ,
                    534:                t0 , *accu ,
1.1       pazsan    535:                "Next" , jmp ,
                    536: end-code
                    537: 
1.8     ! jwilke    538: Code 8<<       
        !           539:                 '{ dout
1.1       pazsan    540:                #0 , add ,
                    541:                SP , accu ,
1.2       pazsan    542:                *accu , accu ,
1.1       pazsan    543:                accu , add ,
                    544:                accu , add ,
                    545:                accu , add ,
                    546:                accu , add ,
                    547:                accu , add ,
                    548:                accu , add ,
                    549:                accu , add ,
                    550:                accu , add ,
1.2       pazsan    551:                accu , t0 ,
                    552:                SP , accu ,
                    553:                t0 , *accu ,
1.1       pazsan    554:                "Next" , jmp ,
                    555: end-code
                    556: 
1.8     ! jwilke    557: Code 8>>       
        !           558:                 '{ dout
1.1       pazsan    559:                #0 , add ,
                    560:                SP , accu ,
1.2       pazsan    561: Label c-even@  *accu , shr ,
1.1       pazsan    562:                accu , shr ,
                    563:                accu , shr ,
                    564:                accu , shr ,
                    565:                accu , shr ,
                    566:                accu , shr ,
                    567:                accu , shr ,
                    568:                accu , shr ,
                    569:                #FF , and ,
1.2       pazsan    570:                accu , t0 ,
                    571:                SP , accu ,
                    572:                t0 , *accu ,
1.1       pazsan    573:                "Next" , jmp ,
                    574: Label "c-even@"        c-even@ ,
                    575: end-code
                    576: 
1.8     ! jwilke    577: Code c@                
        !           578:                 'c dout
1.1       pazsan    579:                #0 , add ,
1.2       pazsan    580:                SP , accu ,
                    581:                *accu , shr ,
1.1       pazsan    582:                PC+4 , jc ,
                    583:                "c-even@" , jmp ,
1.2       pazsan    584:                *accu , accu ,
1.1       pazsan    585:                #FF , and ,
1.2       pazsan    586:                accu , t0 ,
                    587:                SP , accu ,
                    588:                t0 , *accu ,
1.1       pazsan    589:                "Next" , jmp ,
                    590: 
1.8     ! jwilke    591: Code 2*                
        !           592:                 '* dout
1.2       pazsan    593:                SP , accu ,
                    594:                *accu , accu ,
1.1       pazsan    595:                accu , add ,
1.2       pazsan    596:                accu , t0 ,
                    597:                SP , accu ,
                    598:                t0 , *accu ,
1.1       pazsan    599:                "Next" , jmp ,
                    600: end-code
                    601: 
1.8     ! jwilke    602: Code >r                
        !           603:                 'R dout
1.2       pazsan    604:                SP , accu ,
                    605:                *accu , t0 ,
                    606:                #1 , add ,
                    607:                accu , SP ,
1.1       pazsan    608:                RP , accu ,
                    609:                #1 , sub ,
                    610:                accu , RP ,
1.2       pazsan    611:                t0 , *accu ,
1.1       pazsan    612:                "Next" , jmp ,
                    613: end-code
                    614: 
1.8     ! jwilke    615: Code r>                
        !           616:                 'r dout
1.1       pazsan    617:                RP , accu ,
1.2       pazsan    618:                *accu , t0 ,
1.1       pazsan    619:                #1 , add ,
                    620:                accu , RP ,
                    621:                SP , accu ,
                    622:                #1 , sub ,
                    623:                accu , SP ,
1.2       pazsan    624:                t0 , *accu ,
1.1       pazsan    625:                "Next" , jmp ,
                    626: end-code
                    627: 
1.8     ! jwilke    628: Code sp@       
        !           629:                 's dout
1.1       pazsan    630:                SP , accu ,
1.2       pazsan    631:                accu , add ,
                    632:                accu , t0 ,
                    633:                SP , accu ,
1.1       pazsan    634:                #1 , sub ,
                    635:                accu , SP ,
1.2       pazsan    636:                t0 , *accu ,
1.1       pazsan    637:                "Next" , jmp ,
                    638: end-code
                    639: 
1.8     ! jwilke    640: Code sp!       
        !           641:                 'S dout
1.1       pazsan    642:                #0 , add ,
1.2       pazsan    643:                SP , accu ,
                    644:                *accu , shr ,
1.1       pazsan    645:                accu , SP ,
                    646:                "Next" , jmp ,
                    647: end-code
                    648: 
1.8     ! jwilke    649: Code rp@       
1.2       pazsan    650:                RP , accu ,
                    651:                accu , add ,
                    652:                accu , t0 ,
1.1       pazsan    653:                SP , accu ,
                    654:                #1 , sub ,
                    655:                accu , SP ,
1.2       pazsan    656:                t0 , *accu ,
1.1       pazsan    657:                "Next" , jmp ,
                    658: end-code
                    659: 
                    660: Code rp!       sym rp!
                    661:                SP , accu ,
1.2       pazsan    662:                *accu , t0 ,
1.1       pazsan    663:                #1 , add ,
                    664:                accu , SP ,
                    665:                #0 , add ,
1.2       pazsan    666:                t0 , shr ,
1.1       pazsan    667:                accu , RP ,
                    668:                "Next" , jmp ,
                    669: end-code
                    670: 
1.8     ! jwilke    671: Code drop
        !           672:                 'd dout        
1.1       pazsan    673:                SP , accu ,
                    674:                #1 , add ,
                    675:                accu , SP ,
                    676:                "Next" , jmp ,
                    677: end-code
                    678: 
1.8     ! jwilke    679: Code lit       
        !           680:                 '# dout
1.1       pazsan    681:                IP , shr ,
1.2       pazsan    682:                *accu , t0 ,
1.1       pazsan    683:                #1 , add ,
                    684:                accu , add ,
                    685:                accu , IP ,
1.2       pazsan    686:                SP , accu ,
                    687:                #1 , sub ,
                    688:                accu , SP ,
                    689:                t0 , *accu ,
1.1       pazsan    690:                "Next" , jmp ,
                    691: end-code
                    692: 
1.8     ! jwilke    693: Code dup       
        !           694:                 'u dout
1.1       pazsan    695:                SP , accu ,
1.2       pazsan    696:                *accu , t0 ,
1.1       pazsan    697:                #1 , sub ,
                    698:                accu , SP ,
1.2       pazsan    699:                t0 , *accu ,
1.1       pazsan    700:                "Next" , jmp ,
                    701: end-code
                    702: 
1.8     ! jwilke    703: Code r@                
        !           704:                 'I dout
1.2       pazsan    705:                RP , accu ,
                    706:                *accu , t0 ,
1.1       pazsan    707:                SP , accu ,
                    708:                #1 , sub ,
                    709:                accu , SP ,
1.2       pazsan    710:                t0 , *accu ,
1.1       pazsan    711:                "Next" , jmp ,
                    712: end-code
                    713: 
1.8     ! jwilke    714: Code over      
        !           715:                 'v dout
1.1       pazsan    716:                SP , accu ,
                    717:                #1 , add ,
1.2       pazsan    718:                *accu , t0 ,
1.1       pazsan    719:                #2 , sub ,
                    720:                accu , SP ,
1.2       pazsan    721:                t0 , *accu ,
1.1       pazsan    722:                "Next" , jmp ,
                    723: end-code
                    724: 
1.8     ! jwilke    725: Code swap      
        !           726:                 'w dout
1.1       pazsan    727:                SP , accu ,
1.2       pazsan    728:                *accu , t0 ,
1.1       pazsan    729:                #1 , add ,
1.2       pazsan    730:                *accu , t1 ,
                    731:                t0 , *accu ,
                    732:                #1 , sub ,
                    733:                t1 , *accu ,
1.1       pazsan    734:                "Next" , jmp ,
                    735: end-code
                    736: 
1.8     ! jwilke    737: Code d+                
1.1       pazsan    738:                SP , accu ,
1.2       pazsan    739:                *accu , t0 ,
1.1       pazsan    740:                #1 , add ,
1.2       pazsan    741:                *accu , t1 ,
1.1       pazsan    742:                #1 , add ,
1.2       pazsan    743:                *accu , t2 ,
1.1       pazsan    744:                accu , SP ,
                    745:                #1 , add ,
1.2       pazsan    746:                *accu , accu ,
                    747:                t1 , add ,
                    748:                accu , t1 ,
1.1       pazsan    749:                CF , accu ,
1.2       pazsan    750:                t2 , add ,
                    751:                t0 , add ,
                    752:                accu , t0 ,
                    753:                SP , accu ,
                    754:                t0 , *accu ,
                    755:                #1 , add ,
                    756:                t1 , *accu ,
1.1       pazsan    757:                "Next" , jmp ,
                    758: end-code
                    759: 
                    760: Label cf1      0 ,
                    761: Code d2*+      sym d2*+
1.2       pazsan    762:                SP , accu ,
                    763: Label >d2*+    *accu , t0 ,
                    764:                #1 , add ,
                    765:                *accu , t1 ,
1.1       pazsan    766:                #1 , add ,
1.2       pazsan    767:                *accu , t2 ,
                    768:                accu , t3 ,
                    769:                t0 , accu ,
                    770:                t2 , add ,
                    771:                t2 , add ,
                    772:                accu , t2 ,
                    773:                CF , accu ,
                    774:                t1 , add ,
                    775:                t1 , add ,
                    776:                accu , t0 ,
                    777:                t1 , accu ,
1.1       pazsan    778:                #$8000 , and ,
1.2       pazsan    779:                accu , t1 ,
                    780:                t3 , accu ,
                    781:                t2 , *accu ,
                    782:                #1 , sub ,
                    783:                t0 , *accu ,
                    784:                #1 , sub ,
                    785:                t1 , *accu ,
1.1       pazsan    786:                "Next" , jmp ,
                    787: end-code
                    788: 
                    789: Label "d2*+"   >d2*+ ,
                    790: Code /modstep ( ud c R: u -- ud-?u 0/1 )
                    791:                sym /modstep
                    792:                SP , accu ,
1.2       pazsan    793:                *accu , t0 ,
                    794:                #1 , add ,
                    795:                *accu , t1 ,
1.1       pazsan    796:                #1 , add ,
1.2       pazsan    797:                *accu , t2 ,
                    798:                t2 , accu ,
                    799:                t0 , sub ,
                    800:                accu , t0 ,
1.1       pazsan    801:                CF , accu ,
1.2       pazsan    802:                t1 , or ,
1.1       pazsan    803:                PC+6 , JZ ,
                    804:                #0 , accu ,
                    805:                PC+6 , jmp ,
1.2       pazsan    806:                t0 , t2 ,
1.1       pazsan    807:                #1 , accu ,
1.2       pazsan    808:                accu , t0 ,
                    809:                SP , accu ,
                    810:                #1 , add ,
                    811:                t0 , *accu ,
                    812:                #1 , add ,
                    813:                t2 , *accu ,
                    814:                #1 , sub ,
1.1       pazsan    815:                "d2*+" , jmp ,
                    816: end-code
1.8     ! jwilke    817: 
        !           818: Code (key)      
        !           819:                SP , accu ,
        !           820:                #1 , sub ,
        !           821:                accu , SP ,
        !           822:                 rxd , *accu ,
        !           823:                "Next" , jmp ,
        !           824: end-code
        !           825: 
        !           826: Code (key?)      
        !           827:                 rx? , accu ,
        !           828:                ZF , accu ,
        !           829:                #1 , sub ,
        !           830:                accu , t0 ,
        !           831:                SP , accu ,
        !           832:                #1 , sub ,
        !           833:                accu , SP ,
        !           834:                t0 , *accu ,
        !           835:                "Next" , jmp ,
        !           836: end-code
        !           837: 
        !           838: Code (emit)      
        !           839:                SP , accu ,
        !           840:                 *accu , txd ,
        !           841:                #1 , add ,
        !           842:                accu , SP ,
        !           843:                "Next" , jmp ,
        !           844: end-code
1.1       pazsan    845:                
                    846: UP 2* Constant UP
                    847: 
1.5       pazsan    848: : up@ up @ ;
                    849: : up! up ! ;
1.1       pazsan    850: 
1.8     ! jwilke    851: \ include ./key.fs
        !           852: include ./optcmove.fs

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>