home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_2.iso / files / 768b.lha / Brainfuck / bfc.asm < prev    next >
Assembly Source File  |  1993-05-27  |  2KB  |  168 lines

  1.     EXEOBJ
  2.     OUTPUT "bfc"
  3.  
  4. read    EQU    -$2a
  5. write    EQU    -$30
  6. input    EQU    -$36
  7. output    EQU    -$3c
  8. openlib EQU     -$198
  9. closlib EQU    -$19e
  10.  
  11. LEN    EQU    4096
  12.  
  13. ; a2 = origstack
  14. ; a3 = entry
  15. ; a4 = codeptr
  16. ; a5 = codebuf
  17. ; a6 = doslib
  18.  
  19. ; d3 = 1
  20.  
  21. ;========= opendos ==========
  22.     bra.w    startup
  23.  
  24. ;============data============
  25.     dc.b    0
  26.  
  27. ecode:    dc.b    0        ; left
  28.     subq.l    #4,a4
  29.     dc.b    '<'
  30.     
  31.     dc.b    0        ; right
  32.     addq.l    #4,a4
  33.     dc.b    '>'
  34.  
  35.     dc.b    0        ; inc
  36.     addq.l    #1,(a4)    
  37.     dc.b    '+'
  38.  
  39.     dc.b    0        ; dec
  40.     subq.l    #1,(a4)
  41.     dc.b    '-'
  42.  
  43.     dc.b    1        ; loop
  44.     dc.w    $6000,$0000
  45.     dc.b    '['
  46.  
  47.     dc.b    1        ; endloop
  48.     tst.l    (a4)
  49.     dc.w    $6600
  50.     dc.b    ']'
  51.     
  52.     dc.b    4        ; in
  53.     move.l    a4,d2
  54.     addq.l    #3,d2
  55.     move.l    d4,d1
  56.     jsr    read(a6)
  57.     dc.b    ','
  58.  
  59.     dc.b    6        ; out
  60. save    jsr    output(a6)
  61.     move.l    d0,d1
  62.     move.l    a4,d2
  63.     addq.l    #3,d2
  64.     jsr    write(a6)
  65.  
  66.     move.l    (a7),(a7)    
  67.  
  68. ;========== exit ============
  69. exit    move.l    a2,a7
  70.     move.l    a6,a1
  71.     move.l    (4).w,a6
  72.     jsr    closlib(a6)
  73.     moveq    #0,d0
  74.     rts
  75. a3pos
  76.  
  77. ;=========== emit ===========
  78. eloop    move.w    (a0)+,(a1)+
  79.     dbra    d0,eloop
  80.     cmp.b    (a0)+,d6
  81.     bne.s    eentry
  82.     move.l    a1,a4
  83.  
  84. eentry:    move.l    a4,a1
  85.     move.b    (a0)+,d0
  86.     ext.w    d0
  87.     bge.s    eloop
  88.  
  89.     move.l    a0,a3
  90.     sub.b    #91,d6
  91.     bne.s    nodo    
  92. ;============ [ =============
  93.     move.l    a4,-(sp)
  94.  
  95. ;============================
  96. nodo:    subq.b    #2,d6
  97.     bne.s    loop
  98. ;============ ] =============
  99.     move.l    (sp),d6        ; fix up the backward beq
  100.     sub.l    a4,d6
  101.     move.w    d6,(a4)+
  102.  
  103.     move.l    (sp)+,a0    ; fix up the forward bra
  104.     neg.w    d6
  105.     subq.w    #2,d6
  106.     move.w    d6,-(a0)
  107.  
  108. ;======== mainloop ==========
  109. loop    move.l    a4,d2
  110.     move.l    d4,d1
  111.     jsr    read(a6)
  112.  
  113.     lea    ecode(pc),a0
  114.     move.b    (a4),d6
  115.     tst.l    d0
  116.     bgt.s    eentry
  117.  
  118. ;========== finish =========
  119. finish    move.l    (a3)+,(a4)+
  120.     move.l    (a3)+,(a4)+
  121.     move.l    (a3)+,(a4)+
  122.     move.l    (a3)+,(a4)+
  123.  
  124.     move.l    #$3f2,LEN-36+startup-a3pos(a3)
  125.  
  126. ;========== save ===========
  127.     lea    odata-3(pc),a4
  128.     move.w    #LEN,d3
  129.     bra.s    save
  130.  
  131. odata:    dc.l    $3f3
  132.     dc.l    0
  133.     dc.l    1
  134.     dc.l    0
  135.     dc.l    0
  136. hlen:    dc.l    (LEN-36)/4
  137.     dc.l    $3e9
  138. clen:    dc.l    (LEN-36)/4
  139.  
  140. ;========== doslib ==========
  141. startup    lea    dosn(pc),a1
  142.     move.l    (4).w,a6
  143.     jsr    openlib(a6)        ; opendoslib
  144.     move.l    d0,a6            ; a6=dosbase
  145.     bra.s    clrstk
  146. dosn:    dc.b    "dos.library",0
  147.  
  148. ;========= clrstack =========
  149. clrstk    move.l    a7,a2
  150.     moveq    #100,d0
  151. 1$    clr.l    -(a7)
  152.     dbra    d0,1$
  153.     move.l    a7,a4
  154.  
  155.  
  156. ;=========== getio ==========
  157.     jsr    input(a6)
  158.     move.l    d0,d4
  159.     moveq    #1,d3
  160.  
  161. ;========= writebuf ========
  162. start:    lea    start(pc),a5        ; store beg for len calc
  163.     move.l    a5,a4
  164.     bra.w    loop
  165.  
  166.     dx.b    LEN
  167.     END
  168.