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

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: 
1.12      pazsan     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.12      pazsan    323:                accu , t0 ,
1.1       pazsan    324:                #1 , add ,
                    325:                accu , add ,
1.12      pazsan    326:                 accu , IP ,
                    327:     
1.1       pazsan    328:                RP , accu ,
1.2       pazsan    329:                *accu , t2 ,
1.1       pazsan    330:                #1 , add ,
1.2       pazsan    331:                *accu , t3 ,
                    332:                t2 , accu ,
1.1       pazsan    333:                #1 , add ,
1.2       pazsan    334:                accu , t1 ,
                    335:                RP , accu ,
                    336:                t1 , *accu ,
                    337:                t1 , accu ,
                    338:                t3 , sub ,
1.1       pazsan    339:                "Next" , jz ,
1.2       pazsan    340:                t0 , accu ,
1.11      pazsan    341:                *accu , IP ,
                    342:                "Next" , jmp ,
1.1       pazsan    343: end-code
                    344:                
1.8       jwilke    345: Code xor
                    346:                 'x dout
1.1       pazsan    347:                SP , accu ,
1.2       pazsan    348:                *accu , t0 ,
1.1       pazsan    349:                #1 , add ,
                    350:                accu , SP ,
1.2       pazsan    351:                *accu , accu ,
                    352:                t0 , xor ,
                    353:                accu , t0 ,
                    354:                SP , accu ,
                    355:                t0 , *accu ,
1.1       pazsan    356:                "Next" , jmp ,
                    357: end-code
                    358: 
1.8       jwilke    359: Code or        
                    360:                 'o dout        
1.1       pazsan    361:                SP , accu ,
1.2       pazsan    362:                *accu , t0 ,
1.1       pazsan    363:                #1 , add ,
                    364:                accu , SP ,
1.2       pazsan    365:                *accu , accu ,
                    366:                t0 , or ,
                    367:                accu , t0 ,
                    368:                SP , accu ,
                    369:                t0 , *accu ,
1.1       pazsan    370:                "Next" , jmp ,
                    371: end-code
                    372: 
1.8       jwilke    373: Code and
                    374:                 'a dout
1.1       pazsan    375:                SP , accu ,
1.2       pazsan    376:                *accu , t0 ,
1.1       pazsan    377:                #1 , add ,
                    378:                accu , SP ,
1.2       pazsan    379:                *accu , accu ,
                    380:                t0 , and ,
                    381:                accu , t0 ,
                    382:                SP , accu ,
                    383:                t0 , *accu ,
1.1       pazsan    384:                "Next" , jmp ,
                    385: end-code
                    386: 
1.8       jwilke    387: Code +         
                    388:                 '+ dout
1.1       pazsan    389:                SP , accu ,
1.2       pazsan    390:                *accu , t0 ,
1.1       pazsan    391:                #1 , add ,
                    392:                accu , SP ,
1.2       pazsan    393:                *accu , accu ,
                    394:                t0 , add ,
                    395:                accu , t0 ,
                    396:                SP , accu ,
                    397:                t0 , *accu ,
1.1       pazsan    398:                "Next" , jmp ,
                    399: end-code
                    400: 
1.8       jwilke    401: Code -         
                    402:                 '- dout
1.1       pazsan    403:                SP , accu ,
1.2       pazsan    404:                *accu , t0 ,
1.1       pazsan    405:                #1 , add ,
                    406:                accu , SP ,
1.2       pazsan    407:                *accu , accu ,
                    408:                t0 , sub ,
                    409:                accu , t0 ,
                    410:                SP , accu ,
                    411:                t0 , *accu ,
1.1       pazsan    412:                "Next" , jmp ,
                    413: end-code
                    414: 
1.8       jwilke    415: Code 2/                
                    416:                 '/ dout
1.1       pazsan    417:                #0 , add ,
1.2       pazsan    418:                SP , accu ,
                    419:                *accu , accu ,
1.1       pazsan    420:                PC+6 , js ,
                    421:                accu , shr ,
                    422:                PC+6 , jmp ,
                    423:                accu , shr ,
                    424:                #$8000 , or ,
1.2       pazsan    425:                accu , t0 ,
                    426:                SP , accu ,
                    427:                t0 , *accu ,
1.1       pazsan    428:                "Next" , jmp ,
                    429: end-code
                    430: 
1.8       jwilke    431: Code 0=                
                    432:                 '° dout
1.2       pazsan    433:                SP , accu ,
                    434:                *accu , accu ,
1.1       pazsan    435:                ZF , accu ,
1.2       pazsan    436:                #1 , xor ,
                    437:                #1 , sub ,
                    438:                accu , t0 ,
                    439:                SP , accu ,
                    440:                t0 , *accu ,
1.1       pazsan    441:                "Next" , jmp ,
                    442: end-code
                    443: 
1.8       jwilke    444: Code 0<>       
                    445:                 '% dout
1.2       pazsan    446:                SP , accu ,
                    447:                *accu , accu ,
1.1       pazsan    448:                ZF , accu ,
1.2       pazsan    449:                #1 , sub ,
                    450:                accu , t0 ,
                    451:                SP , accu ,
                    452:                t0 , *accu ,
1.1       pazsan    453:                "Next" , jmp ,
                    454: end-code
                    455: 
1.8       jwilke    456: Code =         
                    457:                 '= dout
1.1       pazsan    458:                SP , accu ,
1.2       pazsan    459:                *accu , t0 ,
1.1       pazsan    460:                #1 , add ,
                    461:                accu , SP ,
1.2       pazsan    462:                *accu , accu ,
                    463:                t0 , sub ,
1.1       pazsan    464:                ZF , accu ,
1.2       pazsan    465:                #1 , xor ,
                    466:                #1 , sub ,
                    467:                accu , t0 ,
                    468:                SP , accu ,
                    469:                t0 , *accu ,
1.1       pazsan    470:                "Next" , jmp ,
                    471: end-code
                    472: 
1.8       jwilke    473: Code u<                
                    474:                 '< dout
1.1       pazsan    475:                SP , accu ,
1.2       pazsan    476:                *accu , t0 ,
1.1       pazsan    477:                #1 , add ,
                    478:                accu , SP ,
1.2       pazsan    479:                *accu , accu ,
                    480:                t0 , sub ,
1.1       pazsan    481:                CF , accu ,
1.2       pazsan    482:                #1 , xor ,
                    483:                #1 , sub ,
                    484:                accu , t0 ,
                    485:                SP , accu ,
                    486:                t0 , *accu ,
1.1       pazsan    487:                "Next" , jmp ,
                    488: end-code
                    489: 
1.8       jwilke    490: Code 1+                
                    491:                 'p dout
1.2       pazsan    492:                SP , accu ,
                    493:                *accu , accu ,
1.1       pazsan    494:                #1 , add ,
1.2       pazsan    495:                accu , t0 ,
                    496:                SP , accu ,
                    497:                t0 , *accu ,
1.1       pazsan    498:                "Next" , jmp ,
                    499: end-code
                    500: 
1.8       jwilke    501: Code cell+     
                    502:                 'P dout
1.2       pazsan    503:                SP , accu ,
                    504:                *accu , accu ,
1.1       pazsan    505:                #2 , add ,
1.2       pazsan    506:                accu , t0 ,
                    507:                SP , accu ,
                    508:                t0 , *accu ,
1.1       pazsan    509:                "Next" , jmp ,
                    510: end-code
                    511: 
1.8       jwilke    512: Code 8<<       
                    513:                 '{ dout
1.1       pazsan    514:                #0 , add ,
                    515:                SP , accu ,
1.2       pazsan    516:                *accu , accu ,
1.1       pazsan    517:                accu , add ,
                    518:                accu , add ,
                    519:                accu , add ,
                    520:                accu , add ,
                    521:                accu , add ,
                    522:                accu , add ,
                    523:                accu , add ,
                    524:                accu , add ,
1.2       pazsan    525:                accu , t0 ,
                    526:                SP , accu ,
                    527:                t0 , *accu ,
1.1       pazsan    528:                "Next" , jmp ,
                    529: end-code
                    530: 
1.8       jwilke    531: Code 8>>       
                    532:                 '{ dout
1.1       pazsan    533:                #0 , add ,
                    534:                SP , accu ,
1.2       pazsan    535: Label c-even@  *accu , shr ,
1.1       pazsan    536:                accu , shr ,
                    537:                accu , shr ,
                    538:                accu , shr ,
                    539:                accu , shr ,
                    540:                accu , shr ,
                    541:                accu , shr ,
                    542:                accu , shr ,
                    543:                #FF , and ,
1.2       pazsan    544:                accu , t0 ,
                    545:                SP , accu ,
                    546:                t0 , *accu ,
1.1       pazsan    547:                "Next" , jmp ,
                    548: Label "c-even@"        c-even@ ,
                    549: end-code
                    550: 
1.8       jwilke    551: Code c@                
                    552:                 'c dout
1.1       pazsan    553:                #0 , add ,
1.2       pazsan    554:                SP , accu ,
                    555:                *accu , shr ,
1.1       pazsan    556:                PC+4 , jc ,
                    557:                "c-even@" , jmp ,
1.2       pazsan    558:                *accu , accu ,
1.1       pazsan    559:                #FF , and ,
1.2       pazsan    560:                accu , t0 ,
                    561:                SP , accu ,
                    562:                t0 , *accu ,
1.1       pazsan    563:                "Next" , jmp ,
1.10      jwilke    564: end-code
1.1       pazsan    565: 
1.8       jwilke    566: Code 2*                
                    567:                 '* dout
1.2       pazsan    568:                SP , accu ,
                    569:                *accu , accu ,
1.1       pazsan    570:                accu , add ,
1.2       pazsan    571:                accu , t0 ,
                    572:                SP , accu ,
                    573:                t0 , *accu ,
1.1       pazsan    574:                "Next" , jmp ,
                    575: end-code
                    576: 
1.8       jwilke    577: Code >r                
                    578:                 'R dout
1.2       pazsan    579:                SP , accu ,
                    580:                *accu , t0 ,
                    581:                #1 , add ,
                    582:                accu , SP ,
1.1       pazsan    583:                RP , accu ,
                    584:                #1 , sub ,
                    585:                accu , RP ,
1.2       pazsan    586:                t0 , *accu ,
1.1       pazsan    587:                "Next" , jmp ,
                    588: end-code
                    589: 
1.8       jwilke    590: Code r>                
                    591:                 'r dout
1.1       pazsan    592:                RP , accu ,
1.2       pazsan    593:                *accu , t0 ,
1.1       pazsan    594:                #1 , add ,
                    595:                accu , RP ,
                    596:                SP , accu ,
                    597:                #1 , sub ,
                    598:                accu , SP ,
1.2       pazsan    599:                t0 , *accu ,
1.1       pazsan    600:                "Next" , jmp ,
                    601: end-code
                    602: 
1.8       jwilke    603: Code sp@       
                    604:                 's dout
1.1       pazsan    605:                SP , accu ,
1.2       pazsan    606:                accu , add ,
                    607:                accu , t0 ,
                    608:                SP , accu ,
1.1       pazsan    609:                #1 , sub ,
                    610:                accu , SP ,
1.2       pazsan    611:                t0 , *accu ,
1.1       pazsan    612:                "Next" , jmp ,
                    613: end-code
                    614: 
1.8       jwilke    615: Code sp!       
                    616:                 'S dout
1.1       pazsan    617:                #0 , add ,
1.2       pazsan    618:                SP , accu ,
                    619:                *accu , shr ,
1.1       pazsan    620:                accu , SP ,
                    621:                "Next" , jmp ,
                    622: end-code
                    623: 
1.8       jwilke    624: Code rp@       
1.2       pazsan    625:                RP , accu ,
                    626:                accu , add ,
                    627:                accu , t0 ,
1.1       pazsan    628:                SP , accu ,
                    629:                #1 , sub ,
                    630:                accu , SP ,
1.2       pazsan    631:                t0 , *accu ,
1.1       pazsan    632:                "Next" , jmp ,
                    633: end-code
                    634: 
                    635: Code rp!       sym rp!
                    636:                SP , accu ,
1.2       pazsan    637:                *accu , t0 ,
1.1       pazsan    638:                #1 , add ,
                    639:                accu , SP ,
                    640:                #0 , add ,
1.2       pazsan    641:                t0 , shr ,
1.1       pazsan    642:                accu , RP ,
                    643:                "Next" , jmp ,
                    644: end-code
                    645: 
1.8       jwilke    646: Code drop
                    647:                 'd dout        
1.1       pazsan    648:                SP , accu ,
                    649:                #1 , add ,
                    650:                accu , SP ,
                    651:                "Next" , jmp ,
                    652: end-code
                    653: 
1.8       jwilke    654: Code lit       
                    655:                 '# dout
1.1       pazsan    656:                IP , shr ,
1.2       pazsan    657:                *accu , t0 ,
1.1       pazsan    658:                #1 , add ,
                    659:                accu , add ,
                    660:                accu , IP ,
1.2       pazsan    661:                SP , accu ,
                    662:                #1 , sub ,
                    663:                accu , SP ,
                    664:                t0 , *accu ,
1.1       pazsan    665:                "Next" , jmp ,
                    666: end-code
                    667: 
1.8       jwilke    668: Code dup       
                    669:                 'u dout
1.1       pazsan    670:                SP , accu ,
1.2       pazsan    671:                *accu , t0 ,
1.1       pazsan    672:                #1 , sub ,
                    673:                accu , SP ,
1.2       pazsan    674:                t0 , *accu ,
1.1       pazsan    675:                "Next" , jmp ,
                    676: end-code
                    677: 
1.8       jwilke    678: Code r@                
                    679:                 'I dout
1.2       pazsan    680:                RP , accu ,
                    681:                *accu , t0 ,
1.1       pazsan    682:                SP , accu ,
                    683:                #1 , sub ,
                    684:                accu , SP ,
1.2       pazsan    685:                t0 , *accu ,
1.1       pazsan    686:                "Next" , jmp ,
                    687: end-code
                    688: 
1.8       jwilke    689: Code over      
                    690:                 'v dout
1.1       pazsan    691:                SP , accu ,
                    692:                #1 , add ,
1.2       pazsan    693:                *accu , t0 ,
1.1       pazsan    694:                #2 , sub ,
                    695:                accu , SP ,
1.2       pazsan    696:                t0 , *accu ,
1.1       pazsan    697:                "Next" , jmp ,
                    698: end-code
                    699: 
1.8       jwilke    700: Code swap      
                    701:                 'w dout
1.1       pazsan    702:                SP , accu ,
1.2       pazsan    703:                *accu , t0 ,
1.1       pazsan    704:                #1 , add ,
1.2       pazsan    705:                *accu , t1 ,
                    706:                t0 , *accu ,
                    707:                #1 , sub ,
                    708:                t1 , *accu ,
1.1       pazsan    709:                "Next" , jmp ,
                    710: end-code
                    711: 
1.8       jwilke    712: Code d+                
1.1       pazsan    713:                SP , accu ,
1.2       pazsan    714:                *accu , t0 ,
1.1       pazsan    715:                #1 , add ,
1.2       pazsan    716:                *accu , t1 ,
1.1       pazsan    717:                #1 , add ,
1.2       pazsan    718:                *accu , t2 ,
1.1       pazsan    719:                accu , SP ,
                    720:                #1 , add ,
1.2       pazsan    721:                *accu , accu ,
                    722:                t1 , add ,
                    723:                accu , t1 ,
1.1       pazsan    724:                CF , accu ,
1.2       pazsan    725:                t2 , add ,
                    726:                t0 , add ,
                    727:                accu , t0 ,
                    728:                SP , accu ,
                    729:                t0 , *accu ,
                    730:                #1 , add ,
                    731:                t1 , *accu ,
1.1       pazsan    732:                "Next" , jmp ,
                    733: end-code
                    734: 
                    735: Label cf1      0 ,
1.10      jwilke    736: End-Label
1.1       pazsan    737: Code d2*+      sym d2*+
1.2       pazsan    738:                SP , accu ,
                    739: Label >d2*+    *accu , t0 ,
                    740:                #1 , add ,
                    741:                *accu , t1 ,
1.1       pazsan    742:                #1 , add ,
1.2       pazsan    743:                *accu , t2 ,
                    744:                accu , t3 ,
                    745:                t0 , accu ,
                    746:                t2 , add ,
                    747:                t2 , add ,
                    748:                accu , t2 ,
                    749:                CF , accu ,
                    750:                t1 , add ,
                    751:                t1 , add ,
                    752:                accu , t0 ,
                    753:                t1 , accu ,
1.1       pazsan    754:                #$8000 , and ,
1.2       pazsan    755:                accu , t1 ,
                    756:                t3 , accu ,
                    757:                t2 , *accu ,
                    758:                #1 , sub ,
                    759:                t0 , *accu ,
                    760:                #1 , sub ,
                    761:                t1 , *accu ,
1.1       pazsan    762:                "Next" , jmp ,
                    763: end-code
                    764: 
                    765: Label "d2*+"   >d2*+ ,
1.10      jwilke    766: End-Label
1.1       pazsan    767: Code /modstep ( ud c R: u -- ud-?u 0/1 )
                    768:                sym /modstep
                    769:                SP , accu ,
1.2       pazsan    770:                *accu , t0 ,
                    771:                #1 , add ,
                    772:                *accu , t1 ,
1.1       pazsan    773:                #1 , add ,
1.2       pazsan    774:                *accu , t2 ,
                    775:                t2 , accu ,
                    776:                t0 , sub ,
                    777:                accu , t0 ,
1.1       pazsan    778:                CF , accu ,
1.2       pazsan    779:                t1 , or ,
1.1       pazsan    780:                PC+6 , JZ ,
                    781:                #0 , accu ,
                    782:                PC+6 , jmp ,
1.2       pazsan    783:                t0 , t2 ,
1.1       pazsan    784:                #1 , accu ,
1.2       pazsan    785:                accu , t0 ,
                    786:                SP , accu ,
                    787:                #1 , add ,
                    788:                t0 , *accu ,
                    789:                #1 , add ,
                    790:                t2 , *accu ,
                    791:                #1 , sub ,
1.1       pazsan    792:                "d2*+" , jmp ,
                    793: end-code
1.8       jwilke    794: 
                    795: Code (key)      
                    796:                SP , accu ,
                    797:                #1 , sub ,
                    798:                accu , SP ,
                    799:                 rxd , *accu ,
                    800:                "Next" , jmp ,
                    801: end-code
                    802: 
                    803: Code (key?)      
                    804:                 rx? , accu ,
                    805:                ZF , accu ,
                    806:                #1 , sub ,
                    807:                accu , t0 ,
                    808:                SP , accu ,
                    809:                #1 , sub ,
                    810:                accu , SP ,
                    811:                t0 , *accu ,
                    812:                "Next" , jmp ,
                    813: end-code
                    814: 
                    815: Code (emit)      
                    816:                SP , accu ,
                    817:                 *accu , txd ,
                    818:                #1 , add ,
                    819:                accu , SP ,
                    820:                "Next" , jmp ,
                    821: end-code
1.1       pazsan    822:                
                    823: UP 2* Constant UP
                    824: 
1.5       pazsan    825: : up@ up @ ;
                    826: : up! up ! ;
1.1       pazsan    827: 
1.8       jwilke    828: \ include ./key.fs
                    829: include ./optcmove.fs
1.12      pazsan    830: 
                    831: : (bye) 0 execute ;
                    832: : float+ 8 + ;
                    833: : finish-code ;

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