Advertisement
sci4me

Untitled

Mar 5th, 2019
686
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.                         .setcpu "65C02"
  2.  
  3.                         ACIA_DATA       = $7F00
  4.                         ACIA_STATUS     = $7F01
  5.                         ACIA_COMMAND    = $7F02
  6.                         ACIA_CONTROL    = $7F03
  7.  
  8.                         BF_MEMORY       = $1000
  9.                         BF_JUMP_TABLE   = $1100
  10.  
  11.                         .segment "VECTORS"
  12.  
  13.                         .word nmi
  14.                         .word reset
  15.                         .word irq
  16.  
  17.                         .zeropage
  18.  
  19. temp_2:                 .res 2
  20. bf_ip:                  .res 1
  21. bf_next_ip:             .res 1
  22. bf_dp:                  .res 1
  23.  
  24.                         .code
  25.  
  26. reset:                  jmp main
  27. nmi:                    rti
  28. irq:                    rti
  29.  
  30. main:          
  31. init_acia:              lda #%00001011
  32.                         sta ACIA_COMMAND
  33.                         lda #%00011111
  34.                         sta ACIA_CONTROL
  35.  
  36.                         ldx #0
  37. :                       stz BF_MEMORY,x
  38.                         stz BF_JUMP_TABLE,x
  39.                         inx
  40.                         bne :-
  41.  
  42.                         jsr compute_jump_table
  43.  
  44.                         stz bf_ip
  45.                         stz bf_dp                        
  46.  
  47. loop:                   ldx bf_ip
  48.                         lda brainfuck_code,x
  49.                         bne :+
  50.                         jmp end
  51.  
  52. :                       inx
  53.                         stx bf_next_ip
  54.  
  55.                         cmp #'+'
  56.                         bne :+
  57.                                 ldx bf_dp
  58.                                 inc BF_MEMORY,x
  59.                         bra @op_end
  60. :                       cmp #'-'
  61.                         bne :+
  62.                                 ldx bf_dp
  63.                                 dec BF_MEMORY,x
  64.                         bra @op_end
  65. :                       cmp #'>'
  66.                         bne :+
  67.                                 inc bf_dp
  68.                         bra @op_end
  69. :                       cmp #'<'
  70.                         bne :+
  71.                                 dec bf_dp
  72.                         bra @op_end
  73. :                       cmp #'.'
  74.                         bne :+
  75.                                 ldx bf_dp
  76.                                 lda BF_MEMORY,x
  77.                                 jsr acia_putc
  78.                         bra @op_end
  79. :                       cmp #','
  80.                         bne :+
  81.                         ; ,
  82.                         bra @op_end
  83. :                       cmp #'['
  84.                         bne :+
  85.                                 ldx bf_dp
  86.                                 lda BF_MEMORY,x
  87.                                 bne @op_end
  88.                                 ldx bf_ip
  89.                                 lda BF_JUMP_TABLE,x
  90.                                 inc a
  91.                                 sta bf_next_ip
  92.                         bra @op_end
  93. :                       cmp #']'
  94.                         bne @op_end
  95.                                 ldx bf_dp
  96.                                 lda BF_MEMORY,x
  97.                                 beq @op_end
  98.                                 ldx bf_ip
  99.                                 lda BF_JUMP_TABLE,x
  100.                                 inc a
  101.                                 sta bf_next_ip
  102.  
  103. @op_end:                lda bf_next_ip
  104.                         sta bf_ip
  105.                         jmp loop
  106.  
  107. end:                    wai
  108.                         bra end
  109.  
  110. compute_jump_table:     ldx #0
  111. @loop:                  lda brainfuck_code,x
  112.                         cmp #'['
  113.                         bne :+
  114.                                 phx
  115.                         bra :++
  116. :                       cmp #']'
  117.                         bne :+
  118.                                 pla
  119.                                 sta BF_JUMP_TABLE,x
  120.                                 tay
  121.                                 txa
  122.                                 sta BF_JUMP_TABLE,y
  123. :                       inx
  124.                         bne @loop
  125.                         rts
  126.  
  127. acia_putc:              pha
  128. :                       lda ACIA_STATUS
  129.                         and #$10
  130.                         beq :-
  131.                         pla
  132.                         sta ACIA_DATA
  133.                         rts
  134.  
  135. brainfuck_code:         .byte "++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]", 0
  136. ;.byte "++++++++[>+>++++<<-]>++>>+<[-[>>+<<-]+>>]>+[-<<<[->[+[-]+>++>>>-<<]<[<]>>++++++[<<+++++>>-]+<<++.[-]<<]>.>+[>>]>+]", 0
  137. ;.byte "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.", 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement