From 9bbfce23e2c6eee89da4ef8dcf82da4118335d60 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Sat, 12 Mar 2022 21:26:19 -0600 Subject: [PATCH] Add driver for hex digits This only includes the method to set the pairs of displays individually. The functions to write a single 16 or 32 bit value have not been implemented yet, nor has the mask function. --- sw/io.inc65 | 2 +- sw/main.c | 13 +++++++------ sw/sevenseg.h | 12 ++++++++++++ sw/sevenseg.s | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 sw/sevenseg.h create mode 100644 sw/sevenseg.s diff --git a/sw/io.inc65 b/sw/io.inc65 index 8f254ac..4bf4736 100644 --- a/sw/io.inc65 +++ b/sw/io.inc65 @@ -1 +1 @@ -BB_SPI_BASE = $7ff0 +SEVEN_SEG = $7ff0 diff --git a/sw/main.c b/sw/main.c index a09a475..d20d3e0 100644 --- a/sw/main.c +++ b/sw/main.c @@ -1,11 +1,12 @@ -#define SEVEN_SEG 0x7ff0 - #include -int main() { - uint16_t* seven_seg; - seven_seg = (uint16_t*)SEVEN_SEG; +#include "sevenseg.h" - *seven_seg = 0xbabe; +int main() { + //hex_enable(0xff); + hex_set_8(0xb5, 0); + hex_set_8(0x00, 1); + hex_set_8(0xb0, 2); + while(1); return 0; } diff --git a/sw/sevenseg.h b/sw/sevenseg.h new file mode 100644 index 0000000..a2b2175 --- /dev/null +++ b/sw/sevenseg.h @@ -0,0 +1,12 @@ +#ifndef _SEVEN_SEG +#define _SEVEN_SEG + +#include + +uint8_t hex_set_8(uint8_t val, uint8_t idx); +uint8_t hex_set_16(uint16_t val); +uint8_t hex_set_24(uint32_t val); + +void hex_enable(uint8_t mask); + +#endif \ No newline at end of file diff --git a/sw/sevenseg.s b/sw/sevenseg.s new file mode 100644 index 0000000..691fb2c --- /dev/null +++ b/sw/sevenseg.s @@ -0,0 +1,39 @@ +.include "io.inc65" + +.export _hex_set_8 +.export _hex_set_16 +.export _hex_set_24 +.export _hex_enable + +.autoimport on + +.code + +; @in A: idx Stack[0]: val +; @out A: 0 for success, 1 for failure. +; Sets one of the 3 pairs of hex digits. +_hex_set_8: + phx + cmp #$3 ; If idx >= 3 then fail + bcc @1 + lda #$1 + rts +@1: tax ; Move idx into x + jsr popa ; put val into a + sta SEVEN_SEG,x ; write to val + lda #$0 + plx + rts + +_hex_set_16: + lda #$1 + rts + +_hex_set_24: + lda #$1 + rts + +; @in A: mask +; Set the mask for seven seg enables +_hex_enable: + rts \ No newline at end of file