Advertisement
Madotsuki

mavis_beacon.asm

May 5th, 2014
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 10.07 KB | None | 0 0
  1. INDF        EQU         0x00       ; Indirect File Reg. Address
  2. PCL         EQU         0x02       ; PCL :)
  3. STATUS      EQU         0x03       ; Status Register
  4. FSR         EQU         0x04       ; File Select Register
  5. PORTA       EQU         0x05
  6. PORTB       EQU         0x06
  7. TRISA       EQU         0x85
  8. TRISB       EQU         0x86
  9.  
  10. ;===================== STATUS BITS =====================;
  11. C           EQU         0x0        ; Carry Flag
  12. DC          EQU         0x1        ; Digit Carry Flag
  13. Z           EQU         0x2        ; Zero Flag
  14. PD          EQU         0x3        ; Power Down Bit
  15. TO          EQU         0x4        ; WDT Time-out Bit
  16. RP0         EQU         0x5        ; Bank Select
  17. RP1         EQU         0x6        ; Bank Select, unused
  18. IRP         EQU         0x7        ; Unused
  19. ;===================== DELAY PARAM ======================;
  20. DLY_N1      EQU         0x10
  21. ;===================== LCD PARAM ====================;
  22. LCD_CMD     EQU         0x11       ; For LCD commands
  23. LCD_DLY     EQU         0x12       ; For 40us or 1sec?
  24. SHO_TBL_CN  EQU         0x13       ; Counter for short table
  25.  
  26. __CONFIG 0x3FF2
  27.             ORG         0x00            ; Reset vector
  28.             GOTO        START
  29.             ORG         0x04
  30.             RETFIE
  31.  
  32. START
  33.             ; configure PORTA & PORTB
  34.             BSF         STATUS,RP0      ; Select Bank 1
  35.             BCF         STATUS,RP1      ;
  36.             ;MOVLW   B'00001111'     ; (!) might not be correct?
  37.             ;MOVWF   TRISA           ; INPUT
  38.             ;CLRF    TRISB           ; OUTPUT
  39.             CLRF    TRISA
  40.             CLRF    TRISB
  41.             BCF     STATUS,RP0      ; SELECT BANK 0
  42.             ; other initialization
  43.             CALL    OpenLCD
  44.             ;GOTO    $
  45.             MOVLW   D'33'           ; size of string
  46.             MOVWF   SHO_TBL_CN
  47.             ;GOTO    LOOP
  48.  
  49.             GOTO    HARDCORE_STRATS
  50.  
  51. SECRET_ROUTE
  52.         ;MOVF    PORTA,W
  53.         ;ANDLW   B'00000111'
  54.         MOVLW   'T'
  55.         MOVWF   LCD_CMD
  56.         CALL    DAT2LCD
  57.  
  58.         MOVLW   'H'
  59.         MOVWF   LCD_CMD
  60.         CALL    DAT2LCD
  61.  
  62.         MOVLW   'E'
  63.         MOVWF   LCD_CMD
  64.         CALL    DAT2LCD
  65.  
  66.         MOVLW   'G'
  67.         MOVWF   LCD_CMD
  68.         CALL    DAT2LCD
  69.  
  70.         MOVLW   'A'
  71.         MOVWF   LCD_CMD
  72.         CALL    DAT2LCD
  73.  
  74.         MOVLW   'M'
  75.         MOVWF   LCD_CMD
  76.         CALL    DAT2LCD
  77.  
  78.         MOVLW   'E'
  79.         MOVWF   LCD_CMD
  80.         CALL    DAT2LCD
  81.  
  82.         GOTO    $
  83.  
  84. ;GOTO    SECRET_ROUTE
  85.  
  86. LOOP
  87.             ;MOVF    PORTA,W
  88.             ;ANDLW   B'00000111'
  89.             CALL    SHORT_TABLE
  90.             MOVWF   LCD_CMD
  91.             CALL    DAT2LCD
  92.             DECFSZ  SHO_TBL_CN
  93.             GOTO    LOOP
  94.             GOTO    $
  95.  
  96. OpenLCD
  97.     MOVLW   B'00111100'
  98.     MOVWF   LCD_CMD
  99.     MOVLW   1
  100.     MOVWF   LCD_DLY
  101.     CALL    CMD2LCD
  102.  
  103.     MOVLW   B'00111100'
  104.     MOVWF   LCD_CMD
  105.     MOVLW   1
  106.     MOVWF   LCD_DLY
  107.     CALL    CMD2LCD
  108.  
  109.     MOVLW   B'00001111'
  110.     MOVWF   LCD_CMD
  111.     MOVLW   1
  112.     MOVWF   LCD_DLY
  113.     CALL    CMD2LCD
  114.  
  115.     MOVLW   B'00000110'
  116.     MOVWF   LCD_CMD
  117.     MOVLW   1
  118.     MOVWF   LCD_DLY
  119.     CALL    CMD2LCD
  120.  
  121.     MOVLW   B'00000001'
  122.     MOVWF   LCD_CMD
  123.     MOVLW   D'41'
  124.     MOVWF   LCD_DLY
  125.     CALL    CMD2LCD
  126.  
  127.     RETURN
  128.  
  129. CMD2LCD
  130.     MOVLW   B'000'
  131.     MOVWF   PORTA
  132.     MOVF    LCD_CMD,W
  133.     MOVWF   PORTB
  134.     NOP
  135.     MOVLW   B'11111001'
  136.     MOVWF   PORTA
  137.     NOP
  138.     NOP
  139.     MOVLW   B'11111000'
  140.     MOVWF   PORTA
  141.     CALL    S_DLY40
  142.     DECFSZ  LCD_DLY
  143.     GOTO    $-2
  144.     RETURN
  145.  
  146. DAT2LCD
  147.     MOVLW   B'11111100'
  148.     MOVWF   PORTA
  149.     MOVF    LCD_CMD,W
  150.     MOVWF   PORTB
  151.     NOP
  152.     MOVLW   B'11111101'
  153.     MOVWF   PORTA
  154.     NOP
  155.     NOP
  156.     MOVLW   B'11111100'
  157.     MOVWF   PORTA
  158.     CALL    S_DLY40
  159.     RETURN
  160.  
  161. S_DLY40
  162.     MOVLW   D'66'
  163.     MOVWF   DLY_N1
  164.     DECFSZ  DLY_N1
  165.     GOTO    $-1
  166.     RETURN
  167.  
  168. SHORT_TABLE
  169.     ADDWF   PCL,F            ; PC=PC+Offset
  170.     RETLW   B'10110010'     ; i
  171.     RETLW   B'11000001'     ; chi
  172.     RETLW   B'11001010'     ; ba
  173.     RETLW   B'11011110'     ; ''
  174.     RETLW   B'11011101'     ; n
  175.     RETLW   B'10100101'     ; [dot]
  176.     RETLW   B'11001100'     ; fu
  177.     RETLW   B'10101011'     ; kawaii o
  178.     RETLW   B'10110000'     ; -
  179.     RETLW   B'10100101'     ; [dot]
  180.     RETLW   B'10111011'     ; za
  181.     RETLW   B'11011110'     ; ''
  182.     RETLW   B'10100101'     ; [dot]
  183.     RETLW   B'11000001'     ; chi
  184.     RETLW   B'10110000'     ; -
  185.     RETLW   B'11010001'     ; mu
  186.     RETLW   B'00100001'     ; !
  187.     RETLW   B'00100000'     ;
  188.     RETLW   B'01111110'     ; ->
  189.     RETLW   B'00101000'     ; (
  190.     RETLW   B'01010100'     ; T
  191.     RETLW   B'01101000'     ; h
  192.     RETLW   B'01100101'     ; e
  193.     RETLW   B'00100000'     ;
  194.     RETLW   B'01100010'     ; b
  195.     RETLW   B'01100101'     ; e
  196.     RETLW   B'01110011'     ; s
  197.     RETLW   B'01110100'     ; t
  198.     RETLW   B'00100001'     ; !
  199.     RETLW   B'00101001'     ; )
  200.     RETLW   B'00100000'     ;
  201.     RETLW   B'11011111'     ; o
  202.     RETLW   B'11011100'     ; V
  203.     RETLW   B'11011111'     ; o
  204.  
  205. HARDCORE_STRATS
  206.         MOVLW   B'10110010'
  207.         MOVWF   LCD_CMD
  208.         CALL    DAT2LCD
  209.  
  210.         MOVLW   B'11000001'
  211.         MOVWF   LCD_CMD
  212.         CALL    DAT2LCD
  213.  
  214.         MOVLW   B'11001010'
  215.         MOVWF   LCD_CMD
  216.         CALL    DAT2LCD
  217.  
  218.         MOVLW   B'11011110'
  219.         MOVWF   LCD_CMD
  220.         CALL    DAT2LCD
  221.  
  222.         MOVLW   B'11011101'
  223.         MOVWF   LCD_CMD
  224.         CALL    DAT2LCD
  225.  
  226.         MOVLW   B'10100101'
  227.         MOVWF   LCD_CMD
  228.         CALL    DAT2LCD
  229.  
  230.         MOVLW   B'11001100'
  231.         MOVWF   LCD_CMD
  232.         CALL    DAT2LCD
  233.  
  234.         MOVLW   B'10101011'
  235.         MOVWF   LCD_CMD
  236.         CALL    DAT2LCD
  237.  
  238.         MOVLW   B'10110000'
  239.         MOVWF   LCD_CMD
  240.         CALL    DAT2LCD
  241.  
  242.         MOVLW   B'10100101'
  243.         MOVWF   LCD_CMD
  244.         CALL    DAT2LCD
  245.  
  246.         MOVLW   B'10111011'
  247.         MOVWF   LCD_CMD
  248.         CALL    DAT2LCD
  249.  
  250.         MOVLW   B'11011110'
  251.         MOVWF   LCD_CMD
  252.         CALL    DAT2LCD
  253.  
  254.         MOVLW   B'10100101'
  255.         MOVWF   LCD_CMD
  256.         CALL    DAT2LCD
  257.  
  258.         MOVLW   B'11000001'
  259.         MOVWF   LCD_CMD
  260.         CALL    DAT2LCD
  261.  
  262.         MOVLW   B'10110000'
  263.         MOVWF   LCD_CMD
  264.         CALL    DAT2LCD
  265.  
  266.         MOVLW   B'11010001'
  267.         MOVWF   LCD_CMD
  268.         CALL    DAT2LCD
  269.  
  270.         MOVLW   B'00100001'
  271.         MOVWF   LCD_CMD
  272.         CALL    DAT2LCD
  273.  
  274.         MOVLW   B'00100000'
  275.         MOVWF   LCD_CMD
  276.         CALL    DAT2LCD
  277.  
  278.         MOVLW   B'01111110'
  279.         MOVWF   LCD_CMD
  280.         CALL    DAT2LCD
  281.  
  282.         MOVLW   B'00101000'
  283.         MOVWF   LCD_CMD
  284.         CALL    DAT2LCD
  285.  
  286.         MOVLW   'T'
  287.         MOVWF   LCD_CMD
  288.         CALL    DAT2LCD
  289.  
  290.         MOVLW   'h'
  291.         MOVWF   LCD_CMD
  292.         CALL    DAT2LCD
  293.  
  294.         MOVLW   'e'
  295.         MOVWF   LCD_CMD
  296.         CALL    DAT2LCD
  297.  
  298.         MOVLW   ' '
  299.         MOVWF   LCD_CMD
  300.         CALL    DAT2LCD
  301.  
  302.         MOVLW   'b'
  303.         MOVWF   LCD_CMD
  304.         CALL    DAT2LCD
  305.  
  306.         MOVLW   'e'
  307.         MOVWF   LCD_CMD
  308.         CALL    DAT2LCD
  309.  
  310.         MOVLW   's'
  311.         MOVWF   LCD_CMD
  312.         CALL    DAT2LCD
  313.  
  314.         MOVLW   't'
  315.         MOVWF   LCD_CMD
  316.         CALL    DAT2LCD
  317.  
  318.         MOVLW   '!'
  319.         MOVWF   LCD_CMD
  320.         CALL    DAT2LCD
  321.  
  322.         MOVLW   ')'
  323.         MOVWF   LCD_CMD
  324.         CALL    DAT2LCD
  325.  
  326.         MOVLW   ' '
  327.         MOVWF   LCD_CMD
  328.         CALL    DAT2LCD
  329.  
  330.         MOVLW   B'11011111'
  331.         MOVWF   LCD_CMD
  332.         CALL    DAT2LCD
  333.  
  334.         MOVLW   B'11011100'
  335.         MOVWF   LCD_CMD
  336.         CALL    DAT2LCD
  337.  
  338.         MOVLW   B'11011111'
  339.         MOVWF   LCD_CMD
  340.         CALL    DAT2LCD
  341.  
  342.         MOVLW   ' '
  343.         MOVWF   LCD_CMD
  344.         CALL    DAT2LCD
  345.  
  346.         MOVLW   'T'
  347.         MOVWF   LCD_CMD
  348.         CALL    DAT2LCD
  349.  
  350.         MOVLW   'h'
  351.         MOVWF   LCD_CMD
  352.         CALL    DAT2LCD
  353.  
  354.         MOVLW   'i'
  355.         MOVWF   LCD_CMD
  356.         CALL    DAT2LCD
  357.  
  358.         MOVLW   's'
  359.         MOVWF   LCD_CMD
  360.         CALL    DAT2LCD
  361.  
  362.         MOVLW   ' '
  363.         MOVWF   LCD_CMD
  364.         CALL    DAT2LCD
  365.  
  366.         MOVLW   'm'
  367.         MOVWF   LCD_CMD
  368.         CALL    DAT2LCD
  369.  
  370.         MOVLW   'e'
  371.         MOVWF   LCD_CMD
  372.         CALL    DAT2LCD
  373.  
  374.         MOVLW   's'
  375.         MOVWF   LCD_CMD
  376.         CALL    DAT2LCD
  377.  
  378.         MOVLW   's'
  379.         MOVWF   LCD_CMD
  380.         CALL    DAT2LCD
  381.  
  382.         MOVLW   'a'
  383.         MOVWF   LCD_CMD
  384.         CALL    DAT2LCD
  385.  
  386.         MOVLW   'g'
  387.         MOVWF   LCD_CMD
  388.         CALL    DAT2LCD
  389.  
  390.         MOVLW   'e'
  391.         MOVWF   LCD_CMD
  392.         CALL    DAT2LCD
  393.  
  394.         MOVLW   ' '
  395.         MOVWF   LCD_CMD
  396.         CALL    DAT2LCD
  397.  
  398.         MOVLW   'i'
  399.         MOVWF   LCD_CMD
  400.         CALL    DAT2LCD
  401.  
  402.         MOVLW   's'
  403.         MOVWF   LCD_CMD
  404.         CALL    DAT2LCD
  405.  
  406.         MOVLW   ' '
  407.         MOVWF   LCD_CMD
  408.         CALL    DAT2LCD
  409.  
  410.         MOVLW   'a'
  411.         MOVWF   LCD_CMD
  412.         CALL    DAT2LCD
  413.  
  414.         MOVLW   'l'
  415.         MOVWF   LCD_CMD
  416.         CALL    DAT2LCD
  417.  
  418.         MOVLW   's'
  419.         MOVWF   LCD_CMD
  420.         CALL    DAT2LCD
  421.  
  422.         MOVLW   'o'
  423.         MOVWF   LCD_CMD
  424.         CALL    DAT2LCD
  425.  
  426.         MOVLW   ' '
  427.         MOVWF   LCD_CMD
  428.         CALL    DAT2LCD
  429.  
  430.         MOVLW   'i'
  431.         MOVWF   LCD_CMD
  432.         CALL    DAT2LCD
  433.  
  434.         MOVLW   'n'
  435.         MOVWF   LCD_CMD
  436.         CALL    DAT2LCD
  437.  
  438.         MOVLW   ' '
  439.         MOVWF   LCD_CMD
  440.         CALL    DAT2LCD
  441.  
  442.         MOVLW   'S'
  443.         MOVWF   LCD_CMD
  444.         CALL    DAT2LCD
  445.  
  446.         MOVLW   'w'
  447.         MOVWF   LCD_CMD
  448.         CALL    DAT2LCD
  449.  
  450.         MOVLW   'a'
  451.         MOVWF   LCD_CMD
  452.         CALL    DAT2LCD
  453.  
  454.         MOVLW   'h'
  455.         MOVWF   LCD_CMD
  456.         CALL    DAT2LCD
  457.  
  458.         MOVLW   'i'
  459.         MOVWF   LCD_CMD
  460.         CALL    DAT2LCD
  461.  
  462.         MOVLW   'l'
  463.         MOVWF   LCD_CMD
  464.         CALL    DAT2LCD
  465.  
  466.         MOVLW   'i'
  467.         MOVWF   LCD_CMD
  468.         CALL    DAT2LCD
  469.  
  470.         MOVLW   '.'
  471.         MOVWF   LCD_CMD
  472.         CALL    DAT2LCD
  473.  
  474. GOTO    $
  475.  
  476.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement