add timer LED blink demo
This commit is contained in:
parent
67b234001d
commit
f15eca7ea1
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
*.bin
|
*.bin
|
||||||
*.rom
|
*.rom
|
||||||
|
*.asm
|
||||||
|
4
Makefile
4
Makefile
@ -1,6 +1,8 @@
|
|||||||
HOME = /home/buhman
|
HOME = /home/buhman
|
||||||
|
|
||||||
%.asm: %.asm.in
|
all:
|
||||||
|
|
||||||
|
%.asm: %.asm.in common.m4
|
||||||
m4 < $< > $@
|
m4 < $< > $@
|
||||||
|
|
||||||
%.bin: %.asm
|
%.bin: %.asm
|
||||||
|
27
common.m4
Normal file
27
common.m4
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
changecom(`@')dnl
|
||||||
|
dnl
|
||||||
|
define(PORTB, 8000)dnl
|
||||||
|
define(PORTA, 8001)dnl
|
||||||
|
define(DDRB, 8002)dnl
|
||||||
|
define(DDRA, 8003)dnl
|
||||||
|
define(T1CL, 8004)dnl
|
||||||
|
define(T1CH, 8005)dnl
|
||||||
|
define(T1LL, 8006)dnl
|
||||||
|
define(T1LH, 8007)dnl
|
||||||
|
define(T2CL, 8008)dnl
|
||||||
|
define(T2CH, 8009)dnl
|
||||||
|
define(SR, 800a)dnl
|
||||||
|
define(ACR, 800b)dnl
|
||||||
|
define(PCR, 800c)dnl
|
||||||
|
define(IFR, 800d)dnl
|
||||||
|
define(IER, 800e)dnl
|
||||||
|
dnl
|
||||||
|
define(`L_CGRAM', `0b01000000')dnl
|
||||||
|
define(`L_DDRAM', `0b10000000')dnl
|
||||||
|
dnl
|
||||||
|
define(`L_E', `0b001')dnl
|
||||||
|
define(`L_RS', `0b010')dnl
|
||||||
|
define(`L_RW', `0b100')dnl
|
||||||
|
dnl
|
||||||
|
define(`hh', `eval($1, 16)')dnl
|
||||||
|
define(`bh', `eval(0b$1, 16)')dnl
|
41
face.asm.in
41
face.asm.in
@ -1,56 +1,39 @@
|
|||||||
; -*-asm-*-
|
; -*-asm-*-
|
||||||
|
include(`common.m4')
|
||||||
changecom(`@')
|
|
||||||
|
|
||||||
;; VIA: 8000
|
|
||||||
define(PORTB, h8000)
|
|
||||||
define(PORTA, h8001)
|
|
||||||
define(DDRB, h8002)
|
|
||||||
define(DDRA, h8003)
|
|
||||||
|
|
||||||
define(`L_CGRAM', `0b01000000')
|
|
||||||
define(`L_DDRAM', `0b10000000')
|
|
||||||
|
|
||||||
define(`L_E', `0b001')
|
|
||||||
define(`L_RS', `0b010')
|
|
||||||
define(`L_RW', `0b100')
|
|
||||||
|
|
||||||
define(`hh', `eval($1, 16)')
|
|
||||||
define(`bh', `eval(0b$1, 16)')
|
|
||||||
|
|
||||||
;; reset stack
|
;; reset stack
|
||||||
reset: LDX # ff
|
reset: LDX # ff
|
||||||
TXS i
|
TXS i
|
||||||
|
|
||||||
;; Set pins 0-2 on Port A to Output
|
;; Set pins 0-2 on Port A to Output
|
||||||
LDA # bh(00000111)
|
LDA # %00000111
|
||||||
STA a DDRA
|
STA a DDRA
|
||||||
|
|
||||||
;; Function Set:
|
;; Function Set:
|
||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; 0 0 1 B L F x x
|
;; 0 0 1 B L F x x
|
||||||
;; (Bits 8/4, Lines 2/1, Font 5x11/5x8)
|
;; (Bits 8/4, Lines 2/1, Font 5x11/5x8)
|
||||||
LDA # bh(00111000)
|
LDA # %00111000
|
||||||
JSR a :lcd-w-rs0
|
JSR a :lcd-w-rs0
|
||||||
|
|
||||||
;; Display ON/OFF:
|
;; Display ON/OFF:
|
||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; 0 0 0 0 0 D C B
|
;; 0 0 0 0 0 D C B
|
||||||
;; (Display, Cursor, Blink)
|
;; (Display, Cursor, Blink)
|
||||||
LDA # bh(00001110)
|
LDA # %00001110
|
||||||
JSR a :lcd-w-rs0
|
JSR a :lcd-w-rs0
|
||||||
|
|
||||||
;; Clear Display:
|
;; Clear Display:
|
||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; 0 0 0 0 0 0 0 1
|
;; 0 0 0 0 0 0 0 1
|
||||||
LDA # bh(00000001)
|
LDA # %00000001
|
||||||
JSR a :lcd-w-rs0
|
JSR a :lcd-w-rs0
|
||||||
|
|
||||||
;; Entry Mode Set:
|
;; Entry Mode Set:
|
||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; 0 0 0 0 0 1 I/D S
|
;; 0 0 0 0 0 1 I/D S
|
||||||
;; (Increment/Decrement, Shift)
|
;; (Increment/Decrement, Shift)
|
||||||
LDA # bh(00000110)
|
LDA # %00000110
|
||||||
JSR a :lcd-w-rs0
|
JSR a :lcd-w-rs0
|
||||||
|
|
||||||
;; Set DDRAM Address:
|
;; Set DDRAM Address:
|
||||||
@ -105,7 +88,7 @@ loop: LDA (zp),y 00
|
|||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; 0 0 0 0 0 D C B
|
;; 0 0 0 0 0 D C B
|
||||||
;; (Display, Cursor, Blink)
|
;; (Display, Cursor, Blink)
|
||||||
LDA # bh(00001100)
|
LDA # %00001100
|
||||||
JSR a :lcd-w-rs0
|
JSR a :lcd-w-rs0
|
||||||
|
|
||||||
;; Set CGRAM Address
|
;; Set CGRAM Address
|
||||||
@ -117,7 +100,7 @@ loop2: LDA # hh(L_CGRAM|9)
|
|||||||
;; Write Data to CGRAM
|
;; Write Data to CGRAM
|
||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; D D D D D D D D
|
;; D D D D D D D D
|
||||||
LDA # bh(00110)
|
LDA # %00110
|
||||||
JSR a :lcd-w-rs1
|
JSR a :lcd-w-rs1
|
||||||
|
|
||||||
;; Set CGRAM Address
|
;; Set CGRAM Address
|
||||||
@ -129,7 +112,7 @@ loop2: LDA # hh(L_CGRAM|9)
|
|||||||
;; Write Data to CGRAM
|
;; Write Data to CGRAM
|
||||||
;; D7 D6 D5 D4 D3 D2 D1 D0
|
;; D7 D6 D5 D4 D3 D2 D1 D0
|
||||||
;; D D D D D D D D
|
;; D D D D D D D D
|
||||||
LDA # bh(00000)
|
LDA # %00000
|
||||||
JSR a :lcd-w-rs1
|
JSR a :lcd-w-rs1
|
||||||
|
|
||||||
JMP a :loop2
|
JMP a :loop2
|
||||||
@ -164,7 +147,7 @@ lcd-w-rs1: JSR a :lcd-wait
|
|||||||
;; wait BF
|
;; wait BF
|
||||||
lcd-wait: PHA s
|
lcd-wait: PHA s
|
||||||
|
|
||||||
LDA # bh(00000000) ;; Set pins 0-7 on Port B to Input
|
LDA # %00000000 ;; Set pins 0-7 on Port B to Input
|
||||||
STA a DDRB
|
STA a DDRB
|
||||||
|
|
||||||
_lcd_wait: LDA # hh(L_RW)
|
_lcd_wait: LDA # hh(L_RW)
|
||||||
@ -172,13 +155,13 @@ _lcd_wait: LDA # hh(L_RW)
|
|||||||
LDA # hh(L_E|L_RW)
|
LDA # hh(L_E|L_RW)
|
||||||
STA a PORTA
|
STA a PORTA
|
||||||
LDA a PORTB
|
LDA a PORTB
|
||||||
AND # bh(10000000)
|
AND # %10000000
|
||||||
BNE r :_lcd_wait
|
BNE r :_lcd_wait
|
||||||
|
|
||||||
LDA # hh(L_RW)
|
LDA # hh(L_RW)
|
||||||
STA a PORTA
|
STA a PORTA
|
||||||
|
|
||||||
LDA # bh(11111111) ;; Set pins 0-7 on Port B to Output
|
LDA # %11111111 ;; Set pins 0-7 on Port B to Output
|
||||||
STA a DDRB
|
STA a DDRB
|
||||||
|
|
||||||
PLA s
|
PLA s
|
||||||
|
64
timer.asm.in
Normal file
64
timer.asm.in
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
; -*-asm-*-
|
||||||
|
include(`common.m4')
|
||||||
|
|
||||||
|
define(ticks_, 00)
|
||||||
|
|
||||||
|
BRA r :reset
|
||||||
|
BRA r :irq
|
||||||
|
|
||||||
|
;;; begin irq
|
||||||
|
irq: PHA s
|
||||||
|
|
||||||
|
LDA a T1CL
|
||||||
|
DEC zp ticks_
|
||||||
|
|
||||||
|
PLA s
|
||||||
|
RTI s
|
||||||
|
;;; end irq
|
||||||
|
|
||||||
|
|
||||||
|
reset: LDX # ff
|
||||||
|
TXS i
|
||||||
|
|
||||||
|
LDA # %10000000 ;; Set pins 0-7 on Port B to Output
|
||||||
|
STA a DDRA
|
||||||
|
|
||||||
|
JSR a :continuous
|
||||||
|
|
||||||
|
count: LDA # 25
|
||||||
|
STA zp ticks_
|
||||||
|
|
||||||
|
loop: LDA zp ticks_
|
||||||
|
BPL r :loop
|
||||||
|
LDA # %10000000
|
||||||
|
EOR a PORTA
|
||||||
|
STA a PORTA
|
||||||
|
BRA r :count
|
||||||
|
|
||||||
|
|
||||||
|
;;; begin continuous
|
||||||
|
continuous: LDA # %01000000
|
||||||
|
STA a ACR
|
||||||
|
LDA # 0e
|
||||||
|
STA a T1CL
|
||||||
|
LDA # 27
|
||||||
|
STA a T1CH
|
||||||
|
LDA # %11000000
|
||||||
|
STA a IER
|
||||||
|
CLI i
|
||||||
|
RTS s
|
||||||
|
;;; end continuous
|
||||||
|
|
||||||
|
|
||||||
|
;;; begin oneshot
|
||||||
|
oneshot: LDA # %00000000
|
||||||
|
STA a ACR
|
||||||
|
LDA # 50
|
||||||
|
STA a T1CL
|
||||||
|
LDA # c3
|
||||||
|
STA a T1CH
|
||||||
|
_oneshot: BIT a IFR
|
||||||
|
BVC r :_oneshot ; IFR[6]==0
|
||||||
|
LDA a T1CL ; clear IFR[6]
|
||||||
|
RTS s
|
||||||
|
;;; end oneshot
|
Loading…
x
Reference in New Issue
Block a user