Add conio

Also removes print statements from the interrupt handler (except for the
button interrupt)
This commit is contained in:
Byron Lathi
2022-03-14 22:20:15 -05:00
parent 340f43103a
commit 15b91dcc20
3 changed files with 77 additions and 25 deletions

60
sw/conio.s Normal file
View 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

View File

@@ -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);
}
}

View File

@@ -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;
}