Add conio
Also removes print statements from the interrupt handler (except for the button interrupt)
This commit is contained in:
60
sw/conio.s
Normal file
60
sw/conio.s
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
.importzp sp, sreg
|
||||||
|
|
||||||
|
.import _uart_txb_block
|
||||||
|
.import _lastchar
|
||||||
|
|
||||||
|
.export _cputc
|
||||||
|
.export gotoxy
|
||||||
|
.export _clrscr
|
||||||
|
.export _cgetc
|
||||||
|
|
||||||
|
.autoimport on
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
; void __fastcall__ cputc (char c);
|
||||||
|
_cputc:
|
||||||
|
jsr _uart_txb_block
|
||||||
|
cmp #$0a
|
||||||
|
bne @1
|
||||||
|
lda #$0d
|
||||||
|
jsr _uart_txb_block
|
||||||
|
@1: rts
|
||||||
|
|
||||||
|
; void __fastcall__ gotoxy (unsigned char x, unsigned char y);
|
||||||
|
gotoxy:
|
||||||
|
phx
|
||||||
|
phy
|
||||||
|
tay ; Move y position to y
|
||||||
|
lda (sp)
|
||||||
|
tax ; Move x position to x
|
||||||
|
lda #$1b
|
||||||
|
jsr _uart_txb_block
|
||||||
|
lda #'['
|
||||||
|
jsr _uart_txb_block
|
||||||
|
tya
|
||||||
|
jsr _uart_txb_block
|
||||||
|
lda #';'
|
||||||
|
jsr _uart_txb_block
|
||||||
|
txa
|
||||||
|
jsr _uart_txb_block
|
||||||
|
lda #'H'
|
||||||
|
jsr _uart_txb_block
|
||||||
|
ply
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
|
||||||
|
_clrscr:
|
||||||
|
phx
|
||||||
|
lda #$1b
|
||||||
|
jsr _uart_txb_block
|
||||||
|
lda #'c'
|
||||||
|
jsr _uart_txb_block
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
_cgetc:
|
||||||
|
@2: lda _lastchar
|
||||||
|
beq @2
|
||||||
|
stz _lastchar
|
||||||
|
rts
|
||||||
16
sw/irq.c
16
sw/irq.c
@@ -1,30 +1,26 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <conio.h>
|
||||||
|
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
|
#include "sevenseg.h"
|
||||||
|
|
||||||
|
char lastchar;
|
||||||
|
|
||||||
// This is defined in main.c
|
|
||||||
void puts(const char* s);
|
|
||||||
|
|
||||||
void handle_irq() {
|
void handle_irq() {
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
puts("Interrupt Detected!\n");
|
|
||||||
|
|
||||||
status = irq_get_status();
|
status = irq_get_status();
|
||||||
|
|
||||||
if (status & BUTTON) {
|
if (status & BUTTON) {
|
||||||
puts("Button Interrupt!\n");
|
cputs("Button Interrupt!\n");
|
||||||
irq_set_status(status & ~BUTTON);
|
irq_set_status(status & ~BUTTON);
|
||||||
}
|
}
|
||||||
if (status & UART) {
|
if (status & UART) {
|
||||||
puts("UART Interrupt!\n");
|
lastchar = uart_rxb();
|
||||||
c = uart_rxb();
|
|
||||||
puts("Received: ");
|
|
||||||
puts(&c);
|
|
||||||
puts("\n");
|
|
||||||
irq_set_status(status & ~UART);
|
irq_set_status(status & ~UART);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
26
sw/main.c
26
sw/main.c
@@ -1,24 +1,20 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <conio.h>
|
||||||
|
|
||||||
#include "sevenseg.h"
|
#include "sevenseg.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
|
|
||||||
void puts(const char* s)
|
|
||||||
{
|
|
||||||
while (*s) {
|
|
||||||
uart_txb_block(*s);
|
|
||||||
if (*s == '\n')
|
|
||||||
uart_txb_block('\r');
|
|
||||||
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
hex_enable(0x3f);
|
char s[16];
|
||||||
hex_set_24(0xabcdef);
|
|
||||||
|
clrscr();
|
||||||
|
cprintf("Hello, world!\n");
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
cscanf("%15s", s);
|
||||||
|
cprintf("Read string: %s\n", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
puts("Hello, World!\n");
|
|
||||||
while(1);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user