Files
SyncHome/trunk/workspace/AVR-Computer/avr-vic20/AVRCODE/init.asm
2023-03-13 08:36:51 +00:00

307 lines
4.2 KiB
NASM

init_hardware:
;--setup port directions--
;bias
ldi r16,EXP2(bias_ctrl)
sts bias_port,r16
ldi r16,0x18
sts bias_port-1,r16
;lcd
ldi r16,255 ;data as output
out lcd_data-1,r16
ldi r16,0
out lcd_data,r16
sbi lcd_pins-1,A0
sbi lcd_pins-1,WR
sbi lcd_pins-1,RD
sbi lcd_pins-1,LCS
sbi DDRD,7
; sbi lcd_pins-1,LCD_RST
sbi PORTD,7
cbi lcd_pins,LCD_RST
sbi lcd_pins,A0
sbi lcd_pins,WR
sbi lcd_pins,RD
cbi lcd_pins,LCS
;external memory
ldi r16,128+64
out MCUCR,r16
ldi r16,1
sts XMCRA,r16 ;wait states
;external memory hack
ldi r16, 0xFF ;make top address output if XMMset
out DDRC, r16
ldi r16, 0x00 ;Make sure its zero!
out PORTC, r16
;setup Rs232
ldi r16,0x00
out UCSR0B,r16
out UCSR0A,r16
ldi r16,0x98 ;enable tx,rx and rxint 0x98 (0x18 no int)
out UCSR0B,r16
ldi r16,16 ;56000bps
; ldi r16,103 ;9600bps
out UBRR0L,r16
;---INITALISE VARIABLE--
clr buff_tail ;points to next char to read
clr buff_head ;points to last place stored in buffer,so (head=tail)-> empty, (tail-head = 1)->full
clr cus_x
clr cus_y
clr r16
sts vram_address,r16
sts vram_address+1,r16
;------------------------
rcall delay_1ms
rcall lcd_reset
rcall delay_1ms
rcall bias_reset
rcall delay_1ms
cbi lcd_pins,LCS
rcall delay_1ms
sbi lcd_pins,LCS
ldi r16,31
bias_loop:
rcall bias_inc
dec r16
brne bias_loop
rcall lcd_init
rcall clear_text_ram
ret
clear_text_ram:
push r16
push r17
push r18
push r19
push ZL
push ZH
ldi ZL,low(vram_text)
ldi ZH,high(vram_text)
ldi r17,1 ;command
ldi r16,0x42
rcall lcd_send_data
clr r17
ldi r19,lines_screen
clear_text_ram_l1:
ldi r18,chars_line
clear_text_ram_l2:
ldi r16,0x20
rcall lcd_send_data ;clear
st Z+,r17 ;clear internal vram also
dec r18
brne clear_text_ram_l2
dec r19
brne clear_text_ram_l1
;cursor 0,0
ldi r17,1 ;command
ldi r16,0x46
rcall lcd_send_data
clr r17
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
pop ZH
pop ZL
pop r19
pop r18
pop r17
pop r16
ret
lcd_init:
;SYSTEM SET
ldi r17,1 ;command
ldi r16,0x40
rcall lcd_send_data
clr r17
ldi r16,0x31 ;use CGRAM
rcall lcd_send_data
ldi r16,0x87
rcall lcd_send_data
ldi r16,0x07
rcall lcd_send_data
ldi r16,0x27
rcall lcd_send_data
ldi r16,0x2F
rcall lcd_send_data
ldi r16,0xC7
rcall lcd_send_data
ldi r16,0x50 ;make a line 80 chars long (displays 40)
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
;CHARACTER RAM ADDR
ldi r17,1 ;command
ldi r16,0x5C
rcall lcd_send_data
clr r17
ldi r16,0x00
rcall lcd_send_data
ldi r16,0xf0
rcall lcd_send_data
;SCROLL
ldi r17,1 ;command
ldi r16,0x44
rcall lcd_send_data
clr r17
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
ldi r16,0xc7
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x05
rcall lcd_send_data
ldi r16,0xc7
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
;DISPLAY OFFSET
ldi r17,1 ;command
ldi r16,0x5a
rcall lcd_send_data
clr r17
ldi r16,0x00
rcall lcd_send_data
;CUSOR POSITION 0,0
ldi r17,1 ;command
ldi r16,0x46
rcall lcd_send_data
clr r17
ldi r16,0x00
rcall lcd_send_data
ldi r16,0x00
rcall lcd_send_data
;OVERLAY, TEXT + GRAPHICS
ldi r17,1 ;command
ldi r16,0x5b
rcall lcd_send_data
clr r17
ldi r16,0x00
rcall lcd_send_data
;CURSOR TYPE (BLOCK 8X8)
ldi r17,1 ;command
ldi r16,0x5D
rcall lcd_send_data
clr r17
ldi r16,0x07
rcall lcd_send_data
ldi r16,0x87
rcall lcd_send_data
;CURSOR DIR
ldi r17,1 ;command
ldi r16,0x4C
rcall lcd_send_data
;DISPLAY ON
ldi r17,1 ;command
ldi r16,0x59
rcall lcd_send_data
clr r17
ldi r16,0x06
rcall lcd_send_data
;-----
RET