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 <conio.h>
|
||||
|
||||
#include "interrupt.h"
|
||||
#include "uart.h"
|
||||
#include "sevenseg.h"
|
||||
|
||||
char lastchar;
|
||||
|
||||
// This is defined in main.c
|
||||
void puts(const char* s);
|
||||
|
||||
void handle_irq() {
|
||||
uint8_t status;
|
||||
char c;
|
||||
|
||||
puts("Interrupt Detected!\n");
|
||||
|
||||
status = irq_get_status();
|
||||
|
||||
if (status & BUTTON) {
|
||||
puts("Button Interrupt!\n");
|
||||
cputs("Button Interrupt!\n");
|
||||
irq_set_status(status & ~BUTTON);
|
||||
}
|
||||
if (status & UART) {
|
||||
puts("UART Interrupt!\n");
|
||||
c = uart_rxb();
|
||||
puts("Received: ");
|
||||
puts(&c);
|
||||
puts("\n");
|
||||
lastchar = uart_rxb();
|
||||
irq_set_status(status & ~UART);
|
||||
}
|
||||
}
|
||||
26
sw/main.c
26
sw/main.c
@@ -1,24 +1,20 @@
|
||||
#include <stdint.h>
|
||||
#include <conio.h>
|
||||
|
||||
#include "sevenseg.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() {
|
||||
hex_enable(0x3f);
|
||||
hex_set_24(0xabcdef);
|
||||
char s[16];
|
||||
|
||||
clrscr();
|
||||
cprintf("Hello, world!\n");
|
||||
|
||||
while (1) {
|
||||
cscanf("%15s", s);
|
||||
cprintf("Read string: %s\n", s);
|
||||
}
|
||||
|
||||
|
||||
puts("Hello, World!\n");
|
||||
while(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user