61 lines
1.6 KiB
Plaintext
61 lines
1.6 KiB
Plaintext
;********************************************************************************
|
|
; @module LCD-W164B
|
|
; @type driver
|
|
; @device ELECTRONIC ASSEMBLY - W164B-NLW
|
|
; @details
|
|
; The LCD must be connected to a W65C22N Interface Chip:
|
|
; - IO.RB0-7 -> LCD.D0-7 data lines
|
|
; - IO.RA5 -> LCD.RS register select
|
|
; - IO.RA6 -> LCD.R/W read/write
|
|
; - IO.RA7 -> LCD.E enable
|
|
;
|
|
; @requires IO: Base Address of IO Chip
|
|
; @optparam MEM: Memory address for a runtime variable. Default = $300
|
|
; @depends IO-W65C22N
|
|
;********************************************************************************
|
|
.ifndef INCLUDE_LCD
|
|
INCLUDE_LCD = 1
|
|
|
|
.include "system/system.h65"
|
|
|
|
.scope lcd
|
|
LCD_IO = IO1
|
|
Import lcd,init,clear,print,print_char,_cmd
|
|
|
|
;********************************************************************************
|
|
; @macro Print a null-terminated string
|
|
; @param message: Address of the message
|
|
;********************************************************************************
|
|
.macro Print message
|
|
jsr lcd::clear
|
|
lda #<message
|
|
sta ARG0
|
|
lda #>message
|
|
sta ARG1
|
|
jsr lcd::print
|
|
.endmacro
|
|
|
|
; PIN MASKS
|
|
E = %10000000
|
|
RW = %01000000
|
|
RS = %00100000
|
|
|
|
; LCD Instructions (see datasheet for more)
|
|
CMD_CLEAR = %00000001 ; clear display
|
|
CMD_ENTRY_MODE = %00000110 ; auto-shift cursor
|
|
CMD_DISPLAY_ON = %00001111 ; everything on, with blinking cursor
|
|
CMD_FUNCTION_SET = %00111000 ; 8-bit, 4 lines, 5x7 font
|
|
CMD_SET_ADDRESS = %10000000 ; or with the address
|
|
; LCD Constants
|
|
LINE1 = $00
|
|
LINE2 = $40
|
|
LINE3 = $10
|
|
LINE4 = $50
|
|
|
|
CLEAR = %00000000
|
|
|
|
.ifndef KEEPSCOPE
|
|
.endscope
|
|
.endif
|
|
.endif ; guard
|