Advertisement
Guest User

Untitled

a guest
Jan 26th, 2025
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     ORG 0x0000
  2. EN EQU %10000000
  3. RW EQU %01000000
  4. RS EQU %00100000
  5.  
  6. PORTA EQU (0x00)
  7. PORTB EQU (0x01)
  8. DDRA EQU (0x02)
  9. DDRB EQU (0x03)
  10.  
  11. START:
  12.     LD SP, 0xFFFE ; stack pointer at end of ram cca
  13.    
  14.     LD B, %10000000
  15.     LD C, 0x2
  16.     LD A, 0x0
  17.     LD (BC), A ; so the ram address of 0x8002 is 0x0
  18.    
  19.     LD A, 0xCF
  20.     OUT (C), A ; control mode on 0x2
  21.     LD A, 0x0
  22.     OUT (C), A ; all are outputs on 0x2
  23.     LD A, %00000111
  24.     OUT (C), A ; interrupt config, not sure if necessary
  25.  
  26.    
  27.     LD A, 0x0
  28.     LD C, 0x3
  29.     LD (BC), A ; so the ram addres of 0x8003 is 0x0
  30.    
  31.     LD C, 0x1
  32.     LD (BC), A ; so the 0x8001 is also 0x0
  33.     LD C, 0x0
  34.     LD (BC), A ; so the 0x8000 is also 0x0
  35.    
  36.     LD C, 0x3
  37.     LD A, 0xCF
  38.     OUT (C), A ; control mode
  39.     LD A, %00010000
  40.     OUT (C), A ; all are outputs except 4
  41.     LD A, 0x0
  42.     OUT (C), A ; vector is 0 i suppose
  43.  
  44.     ; this is the latest addition
  45.     LD A, %10010111
  46.     OUT (C), A ; interrupt config
  47.     LD A, %11101111 ; monitor only byte 4
  48.     OUT (C), A
  49.    
  50.     LD A, 0x02
  51.     LD I, A ; interrupt register, upper byte
  52.     EI
  53.     IM 2
  54.    
  55.     LD A, %00110000
  56.     CALL LCD_INSTRUCTION
  57.     LD A, %00110000
  58.     CALL LCD_INSTRUCTION
  59.     LD A, %00110000
  60.     CALL LCD_INSTRUCTION
  61.    
  62.    
  63.     LD A, %00111000 ; set 8-bit mode, 2 line display, 5x8 font
  64.     CALL LCD_INSTRUCTION
  65.     LD A, %00001110 ; display on, cursor on, blink off
  66.     CALL LCD_INSTRUCTION
  67.     LD A, %00000110 ; increment and shift
  68.     CALL LCD_INSTRUCTION
  69.     JP MAIN
  70.  
  71.     ORG 66h ; non maskable interrupt
  72.     CALL NMI
  73.     RETI
  74.    
  75.     ORG 0x100
  76. MAIN:
  77.     LD A, %00000001 ; clear display
  78.     CALL LCD_INSTRUCTION
  79.     LD HL,msg
  80. LOOP:
  81.     LD A, (HL)
  82.     OR A
  83.     JP Z, END
  84.     CALL PRINT_CHAR
  85.     INC HL
  86.     JP LOOP
  87. END:
  88.     JP END
  89.    
  90.     ORG 0x200
  91.     DW 0x1234
  92.     DW 0x1234
  93.     DW 0x1234
  94.     DW 0x1234
  95.     DW 0x1234
  96.     DW 0x1234
  97.     DW 0x1234
  98.     DW 0x1234
  99.     DW 0x1234
  100.     DW 0x1234
  101.     DW 0x1234
  102.     DW 0x1234
  103.     DW 0x1234
  104.     DW 0x1234
  105.     DW 0x1234
  106.     DW 0x1234
  107.     DW 0x1234
  108.     DW 0x1234
  109.     DW 0x1234
  110.     DW 0x1234
  111.     DW 0x1234
  112.     DW 0x1234
  113.     DW 0x1234
  114.     DW 0x1234
  115.     DW 0x1234
  116.     DW 0x1234
  117.     DW 0x1234
  118.     DW 0x1234
  119.     DW 0x1234
  120.     DW 0x1234
  121.     DW 0x1234
  122.     DW 0x1234
  123.     DW 0x1234
  124.     DW 0x1234
  125.     DW 0x1234
  126.     DW 0x1234
  127.     DW 0x1234
  128.     DW 0x1234
  129.     DW 0x1234
  130.     DW 0x1234
  131.     DW 0x1234
  132.     DW 0x1234
  133.     DW 0x1234
  134.     DW 0x1234
  135.     DW 0x1234
  136.     DW 0x1234
  137.     DW 0x1234
  138.     DW 0x1234
  139.     DW 0x1234
  140.     DW 0x1234
  141.     DW 0x1234
  142.     DW 0x1234
  143.     DW 0x1234
  144.     DW 0x1234
  145.     DW 0x1234
  146.     DW 0x1234
  147.     DW 0x1234
  148.     DW 0x1234
  149.     DW 0x1234
  150.     DW 0x1234
  151.     DW 0x1234
  152.     DW 0x1234
  153.     DW 0x1234
  154.     DW 0x1234
  155.     DW 0x1234
  156.     DW 0x1234
  157.     DW 0x1234
  158.     DW 0x1234
  159.     DW 0x1234
  160.     DW 0x1234
  161.     DW 0x1234
  162.     DW 0x1234
  163.     DW 0x1234
  164.     DW 0x1234
  165.     DW 0x1234
  166.     DW 0x1234
  167.     DW 0x1234
  168.     DW 0x1234
  169.     DW 0x1234
  170.     DW 0x1234
  171.     DW 0x1234
  172.     DW 0x1234
  173.     DW 0x1234
  174.     DW 0x1234
  175.     DW 0x1234
  176.     DW 0x1234
  177.     DW 0x1234
  178.     DW 0x1234
  179.     DW 0x1234
  180.     DW 0x1234
  181.     DW 0x1234
  182.     DW 0x1234
  183.     DW 0x1234
  184.     DW 0x1234
  185.     DW 0x1234
  186.     DW 0x1234
  187.     DW 0x1234
  188.     DW 0x1234
  189.     DW 0x1234
  190.     DW 0x1234
  191.     DW 0x1234
  192.     DW 0x1234
  193.     DW 0x1234
  194.     DW 0x1234
  195.     DW 0x1234
  196.     DW 0x1234
  197.     DW 0x1234
  198.     DW 0x1234
  199.     DW 0x1234
  200.     DW 0x1234
  201.     DW 0x1234
  202.     DW 0x1234
  203.     DW 0x1234
  204.     DW 0x1234
  205.     DW 0x1234
  206.     DW 0x1234
  207.     DW 0x1234
  208.     DW 0x1234
  209.     DW 0x1234
  210.     DW 0x1234
  211.     DW 0x1234
  212.     DW 0x1234
  213.     DW 0x1234
  214.     DW 0x1234
  215.     DW 0x1234
  216.     DW 0x1234
  217.     DW 0x1234
  218.    
  219.     ORG 0x1234
  220. INTERRUPTION:
  221.     DI
  222.     EX  AF, AF'
  223.     EXX
  224.     LD A, %00000001 ; clear display
  225.     CALL LCD_INSTRUCTION
  226.     LD HL,msg_lol2
  227. LOOP_INT3:
  228.     LD A, (HL)
  229.     OR A
  230.     JP Z, END_LOOP3
  231.     CALL PRINT_CHAR
  232.     INC HL
  233.     JP LOOP_INT3
  234. END_LOOP3:
  235.     EXX
  236.     EX AF, AF'
  237.     EI
  238.     HALT
  239.     RETI
  240.    
  241.    
  242.    
  243. LCD_WAIT:
  244.     PUSH AF
  245.     LD C, 0x2
  246.     LD A, 0xCF
  247.     OUT (C), A
  248.     LD A, 0xFF
  249.     OUT (C), A ; port A is input
  250. LCD_BUSY:
  251.     LD A, RW
  252.     LD C, 0x1
  253.     OUT (C), A
  254.    
  255.     OR EN
  256.     OUT (C), A
  257.        
  258.     LD C, 0x0
  259.     IN A, (C)
  260.     AND %10000000
  261.     JR NZ, LCD_BUSY
  262.    
  263.     LD A, RW
  264.     LD C, 0x1
  265.     OUT (C), A
  266.    
  267.     LD C, 0x2
  268.     LD A, 0xCF
  269.     OUT (C), A
  270.     LD A, 0x00
  271.     OUT (C), A ; port A is input
  272.     POP AF
  273.     RET
  274.    
  275. LCD_INSTRUCTION:
  276.     CALL LCD_WAIT
  277.     LD C, 0x0
  278.     OUT (C), A ; put the contents of A register on PORT A
  279.    
  280.     LD C, 0x1
  281.     LD A, 0x0
  282.     OUT (C), A
  283.    
  284.     LD A, EN
  285.     OUT (C), A    
  286.    
  287.     LD A, 0x0
  288.     OUT (C), A
  289.    
  290.     RET
  291.    
  292. DELAY:
  293.     LD HL, 5000
  294. DELAY1:
  295.     DEC HL
  296.     LD A, H
  297.     OR L
  298.     JR NZ, DELAY1
  299.     RET ; if zero, return
  300.    
  301. PRINT_CHAR:
  302.     CALL LCD_WAIT
  303.    
  304.     LD C, 0x0
  305.     OUT (C), A
  306.    
  307.    
  308.     LD C, 0x1
  309.     LD A, RS
  310.     OUT (C), A
  311.    
  312.     LD A, RS
  313.     OR EN
  314.     OUT (C), A
  315.    
  316.     LD A, RS
  317.     OUT (C), A
  318.     RET
  319.  
  320. NMI:
  321.     DI
  322.     EX  AF, AF'
  323.     EXX
  324.     LD HL,msg_nmi
  325. LOOP_INT2:
  326.     LD A, (HL)
  327.     OR A
  328.     JP Z, END_LOOP2
  329.     CALL PRINT_CHAR
  330.     INC HL
  331.     JP LOOP_INT2
  332. END_LOOP2:
  333.     EXX
  334.     EX AF, AF'
  335.     EI
  336.     RET
  337.    
  338.    
  339.    
  340. msg: .asciz "Hello World"
  341. msg_nmi: .asciz "NMI"
  342. msg_int: .asciz "INT"
  343. msg_lol2: .asciz "1234"
  344. msg_lol: .asciz "3412" 
  345.  
  346.  
  347.     ORG 0x3412
  348. INTERRUPTION22:
  349.     DI
  350.     EX  AF, AF'
  351.     EXX
  352.     LD A, %00000001 ; clear display
  353.     CALL LCD_INSTRUCTION
  354.     LD HL,msg_lol
  355. LOOP_INT22:
  356.     LD A, (HL)
  357.     OR A
  358.     JP Z, END_LOOP22
  359.     CALL PRINT_CHAR
  360.     INC HL
  361.     JP LOOP_INT22
  362. END_LOOP22:
  363.     EXX
  364.     EX AF, AF'
  365.     EI
  366.     HALT
  367.     RETI
  368.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement