oscar64/include/conio.c

179 lines
1.5 KiB
C

#include "conio.h"
static IOCharMap giocharmap = IOCHM_ASCII;
void iocharmap(IOCharMap chmap)
{
giocharmap = chmap;
if (chmap == IOCHM_PETSCII_1)
putchar(128 + 14);
else if (chmap == IOCHM_PETSCII_2)
putchar(14);
}
__asm putpch
{
ldx giocharmap
cpx #IOCHM_ASCII
bcc w3
cmp #10
bne w1
lda #13
w1:
cpx #IOCHM_PETSCII_1
bcc w3
cmp #65
bcc w3
cmp #123
bcs w3
cmp #97
bcs w2
cmp #91
bcs w3
w2:
eor #$20
cpx #IOCHM_PETSCII_2
beq w3
and #$df
w3:
jmp 0xffd2
}
__asm getpch
{
jsr 0xffe4
ldx giocharmap
cpx #IOCHM_ASCII
bcc w3
cmp #13
bne w1
lda #10
w1:
cpx #IOCHM_PETSCII_1
bcc w3
cmp #65
bcc w3
cmp #123
bcs w3
cmp #97
bcs w2
cmp #91
bcs w3
w2:
eor #$20
w3:
}
int kbhit(void)
{
__asm
{
lda $c6
sta accu
lda #0
sta accu + 1
}
}
int getche(void)
{
__asm
{
L1:
jsr getpch
cmp #0
beq L1
sta accu
jsr putpch
lda #0
sta accu + 1
}
}
int getch(void)
{
__asm
{
L1:
jsr getpch
cmp #0
beq L1
sta accu
lda #0
sta accu + 1
}
}
void putch(int c)
{
__asm {
ldy #c
lda (fp), y
jsr 0xffd2
}
}
void clrscr(void)
{
__asm
{
jsr $ff5b
}
}
void textcursor(bool show)
{
*(char *)0xcc = show ? 0 : 1;
}
void gotoxy(int cx, int cy)
{
__asm
{
ldy cy
ldx cx
clc
jsr $fff0
}
}
void textcolor(int c)
{
__asm
{
lda c
sta $0286
}
}
int wherex(void)
{
__asm
{
lda $d3
sta accu
lda #0
sta accu + 1
}
}
int wherey(void)
{
__asm
{
lda $d6
sta accu
lda #0
sta accu + 1
}
}