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

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

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