337 lines
3.1 KiB
C
337 lines
3.1 KiB
C
#include "conio.h"
|
|
|
|
static IOCharMap giocharmap = IOCHM_ASCII;
|
|
|
|
#if defined(__C128__)
|
|
#pragma code(lowcode)
|
|
__asm bsout
|
|
{
|
|
ldx #0
|
|
stx 0xff00
|
|
jsr 0xffd2
|
|
sta 0xff01
|
|
}
|
|
__asm bsin
|
|
{
|
|
lda #0
|
|
sta 0xff00
|
|
jsr 0xffe4
|
|
sta 0xff01
|
|
}
|
|
__asm bsplot
|
|
{
|
|
lda #0
|
|
sta 0xff00
|
|
jsr 0xfff0
|
|
sta 0xff01
|
|
}
|
|
__asm bsinit
|
|
{
|
|
lda #0
|
|
sta 0xff00
|
|
jsr 0xff81
|
|
sta 0xff01
|
|
}
|
|
__asm dswap
|
|
{
|
|
sta 0xff00
|
|
jsr 0xff5f
|
|
sta 0xff01
|
|
}
|
|
#pragma code(code)
|
|
#elif defined(__C128B__) || defined(__C128E__)
|
|
#define dswap 0xff5f
|
|
#define bsout 0xffd2
|
|
#define bsin 0xffe4
|
|
#define bsplot 0xfff0
|
|
#define bsinit 0xff81
|
|
#elif defined(__PLUS4__)
|
|
#pragma code(lowcode)
|
|
__asm bsout
|
|
{
|
|
sta 0xff3e
|
|
jsr 0xffd2
|
|
sta 0xff3f
|
|
}
|
|
__asm bsin
|
|
{
|
|
sta 0xff3e
|
|
jsr 0xffe4
|
|
sta 0xff3f
|
|
}
|
|
__asm bsplot
|
|
{
|
|
sta 0xff3e
|
|
jsr 0xfff0
|
|
sta 0xff3f
|
|
}
|
|
__asm bsinit
|
|
{
|
|
sta 0xff3e
|
|
jsr 0xff81
|
|
sta 0xff3f
|
|
}
|
|
#pragma code(code)
|
|
#elif defined(__ATARI__)
|
|
__asm bsout
|
|
{
|
|
tax
|
|
lda 0xe407
|
|
pha
|
|
lda 0xe406
|
|
pha
|
|
txa
|
|
}
|
|
|
|
__asm bsin
|
|
{
|
|
lda 0xe405
|
|
pha
|
|
lda 0xe404
|
|
pha
|
|
}
|
|
|
|
__asm bsplot
|
|
{
|
|
|
|
}
|
|
__asm bsinit
|
|
{
|
|
|
|
}
|
|
#elif defined(__VIC20__)
|
|
#define bsout 0xffd2
|
|
#define bsin 0xffe4
|
|
#define bsplot 0xfff0
|
|
__asm bsinit
|
|
{
|
|
lda #147
|
|
jmp $ffd2
|
|
}
|
|
#else
|
|
#define bsout 0xffd2
|
|
#define bsin 0xffe4
|
|
#define bsplot 0xfff0
|
|
#define bsinit 0xff81
|
|
#endif
|
|
|
|
#if defined(__C128__) || defined(__C128B__) || defined(__C128E__)
|
|
void dispmode40col(void)
|
|
{
|
|
if (*(volatile char *)0xd7 >= 128)
|
|
{
|
|
__asm
|
|
{
|
|
jsr dswap
|
|
}
|
|
}
|
|
}
|
|
|
|
void dispmode80col(void)
|
|
{
|
|
if (*(volatile char *)0xd7 < 128)
|
|
{
|
|
__asm
|
|
{
|
|
jsr dswap
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
void iocharmap(IOCharMap chmap)
|
|
{
|
|
giocharmap = chmap;
|
|
#if !defined(__ATARI__)
|
|
if (chmap == IOCHM_PETSCII_1)
|
|
putch(128 + 14);
|
|
else if (chmap == IOCHM_PETSCII_2)
|
|
putch(14);
|
|
#endif
|
|
}
|
|
|
|
__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
|
|
|
|
#if defined(__CBMPET__)
|
|
cmp #97
|
|
bcs w4
|
|
cmp #91
|
|
bcs w3
|
|
w2:
|
|
eor #$a0
|
|
w4:
|
|
eor #$20
|
|
|
|
#else
|
|
cmp #97
|
|
bcs w2
|
|
cmp #91
|
|
bcs w3
|
|
w2:
|
|
eor #$20
|
|
#endif
|
|
cpx #IOCHM_PETSCII_2
|
|
beq w3
|
|
and #$df
|
|
w3:
|
|
jmp bsout
|
|
}
|
|
|
|
__asm getpch
|
|
{
|
|
jsr bsin
|
|
|
|
ldx giocharmap
|
|
cpx #IOCHM_ASCII
|
|
bcc w3
|
|
|
|
cmp #13
|
|
bne w1
|
|
lda #10
|
|
w1:
|
|
cpx #IOCHM_PETSCII_1
|
|
bcc w3
|
|
|
|
cmp #219
|
|
bcs w3
|
|
cmp #65
|
|
bcc w3
|
|
|
|
cmp #193
|
|
bcc w4
|
|
eor #$a0
|
|
w4:
|
|
cmp #123
|
|
bcs w3
|
|
cmp #97
|
|
bcs w2
|
|
cmp #91
|
|
bcs w3
|
|
w2:
|
|
eor #$20
|
|
w3:
|
|
}
|
|
|
|
|
|
char kbhit(void)
|
|
{
|
|
__asm
|
|
{
|
|
lda $c6
|
|
sta accu
|
|
}
|
|
}
|
|
|
|
char getche(void)
|
|
{
|
|
__asm
|
|
{
|
|
L1:
|
|
jsr getpch
|
|
cmp #0
|
|
beq L1
|
|
|
|
sta accu
|
|
jsr putpch
|
|
}
|
|
|
|
}
|
|
|
|
char getch(void)
|
|
{
|
|
__asm
|
|
{
|
|
L1:
|
|
jsr getpch
|
|
cmp #0
|
|
beq L1
|
|
|
|
sta accu
|
|
}
|
|
}
|
|
|
|
char getchx(void)
|
|
{
|
|
__asm
|
|
{
|
|
jsr getpch
|
|
sta accu
|
|
}
|
|
}
|
|
|
|
void putch(char c)
|
|
{
|
|
__asm {
|
|
lda c
|
|
jsr bsout
|
|
}
|
|
}
|
|
|
|
void clrscr(void)
|
|
{
|
|
__asm
|
|
{
|
|
jsr bsinit
|
|
}
|
|
}
|
|
|
|
void textcursor(bool show)
|
|
{
|
|
*(char *)0xcc = show ? 0 : 1;
|
|
}
|
|
|
|
void gotoxy(char cx, char cy)
|
|
{
|
|
__asm
|
|
{
|
|
ldx cy
|
|
ldy cx
|
|
clc
|
|
jsr bsplot
|
|
}
|
|
}
|
|
|
|
void textcolor(char c)
|
|
{
|
|
__asm
|
|
{
|
|
lda c
|
|
sta $0286
|
|
}
|
|
}
|
|
|
|
char wherex(void)
|
|
{
|
|
__asm
|
|
{
|
|
lda $d3
|
|
sta accu
|
|
}
|
|
}
|
|
|
|
char wherey(void)
|
|
{
|
|
__asm
|
|
{
|
|
lda $d6
|
|
sta accu
|
|
}
|
|
}
|