Added files
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
PORT=/dev/ttyUSB3
|
||||
|
||||
test.srec: test.asm
|
||||
tpasm -P 68705 -o srec test.srec -o text test.txt test.asm
|
||||
@echo "load t"
|
||||
@cat test.srec
|
||||
+140
@@ -0,0 +1,140 @@
|
||||
;
|
||||
; A0 D4
|
||||
; A1 D5
|
||||
; A2 D6
|
||||
; A3 D7
|
||||
; A4 RS
|
||||
; A5 E
|
||||
|
||||
.ORG 0x80
|
||||
|
||||
|
||||
PORTA .EQU 0x00
|
||||
PORTB .EQU 0x01
|
||||
PORTC .EQU 0x02
|
||||
PORTD .EQU 0x03
|
||||
DDRA .EQU 0x04
|
||||
DDRB .EQU 0x05
|
||||
DDRC .EQU 0x06
|
||||
TCR .EQU 0x08
|
||||
TDR .EQU 0x09
|
||||
MR .EQU 0x0A
|
||||
PCR .EQU 0x0B
|
||||
ACR .EQU 0x0E
|
||||
ADR .EQU 0x0F
|
||||
|
||||
SCRATCH .EQU 0x10
|
||||
TMPX .EQU 0x11
|
||||
|
||||
start:
|
||||
JSR init_dbus
|
||||
JSR lcd_init
|
||||
|
||||
LDA #txt_hellorld
|
||||
JSR print
|
||||
|
||||
endloop:
|
||||
BRA endloop
|
||||
|
||||
; Text symbols need to be within the first 255 bytes of the code - cus 8 bit registers.
|
||||
txt_hellorld:
|
||||
DB "Hellorld",0
|
||||
|
||||
; Configure port A to be the interface to the LCD
|
||||
init_dbus:
|
||||
LDA #0xFF ; 0xFF -> A Reg
|
||||
STA DDRA ; All pins output
|
||||
LDA #0x00 ; 0x00 -> A Reg
|
||||
STA PORTA ; All pins low
|
||||
RTS
|
||||
|
||||
; Send a nibble plus the RS pin
|
||||
send_nibble:
|
||||
ORA #0x20 ; Add the E pin high
|
||||
STA PORTA ; Output the data
|
||||
JSR delay ; Wait
|
||||
AND #0x1F ; Remove the E pin again
|
||||
STA PORTA ; Output again
|
||||
JSR delay ; wait
|
||||
RTS
|
||||
|
||||
|
||||
; Send a data byte split into 2 nibbles. Byte is in A
|
||||
send_data:
|
||||
|
||||
STA SCRATCH ; Store the byte for later use
|
||||
.REPEAT 4
|
||||
LSRA ; Shift right 4 times to get the upper nibble
|
||||
.ENDR
|
||||
ORA #0x10 ; Set the RS pin high
|
||||
JSR send_nibble ; Send it
|
||||
|
||||
LDA SCRATCH ; Get the old byte back
|
||||
AND #0x0F ; Mask out just the lower nibble
|
||||
ORA #0x10 ; Add the RS pin again
|
||||
JSR send_nibble ; Send it
|
||||
|
||||
RTS
|
||||
|
||||
; Send an instruction byte split into 2 nibbles. Byte is in A
|
||||
send_inst:
|
||||
STA SCRATCH ; Store the byte for later use
|
||||
.REPEAT 4
|
||||
LSRA ; Shift right 4 times to get the upper nibble
|
||||
.ENDR
|
||||
JSR send_nibble ; Send it
|
||||
|
||||
LDA SCRATCH ; Get the old byte back
|
||||
AND #0x0F ; Mask out the lower nibble
|
||||
JSR send_nibble ; Send it
|
||||
RTS
|
||||
|
||||
|
||||
; Clear the screen and home the cursor
|
||||
lcd_clr:
|
||||
LDA #0x01 ; Clear screen instruction
|
||||
JSR send_inst ; Send it
|
||||
RTS
|
||||
|
||||
; Initialize the LCD into 4 bit mode. This assumes that it's in
|
||||
; the power-on 8 bit state, otherwise the instructions get out
|
||||
; of sequence and things don't work.
|
||||
lcd_init:
|
||||
LDA #0x02 ; 4 bit mode
|
||||
JSR send_nibble
|
||||
LDA #0x28 ; 4 bit mode and 2 line mode
|
||||
JSR send_inst
|
||||
LDA #0x0E ; Auto increment
|
||||
JSR send_inst
|
||||
LDA #0x06 ; Display on
|
||||
JSR send_inst
|
||||
JSR lcd_clr ; CLS
|
||||
RTS
|
||||
|
||||
; A short delay to make things work.
|
||||
delay:
|
||||
STX TMPX ; Store X into the temporary store
|
||||
LDX 0x13 ; 0x13 -> X
|
||||
@ldel:
|
||||
NOP ; Nothing
|
||||
DECX ; Decrement X
|
||||
BNE @ldel ; Repeat until zero
|
||||
LDX TMPX ; Restore X
|
||||
RTS
|
||||
|
||||
; Print a string. Address of the string is in A
|
||||
print:
|
||||
TAX ; Put A into X
|
||||
@printloop:
|
||||
LDA ,X ; Grab the byte at X
|
||||
BEQ @endprint ; If it's zero then bail
|
||||
JSR send_data ; Send that byte
|
||||
INCX ; Increment X
|
||||
BRA @printloop ; Next byte.
|
||||
|
||||
@endprint:
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user