Reduce inline assembly in stdio and conio
This commit is contained in:
parent
3dfba389ff
commit
bf5f5a807c
|
@ -134,7 +134,7 @@ The compiler is command line driven, and creates an executable .prg file.
|
||||||
* -cid : cartridge type ID, used by vice emulator
|
* -cid : cartridge type ID, used by vice emulator
|
||||||
* -pp : compile in C++ mode
|
* -pp : compile in C++ mode
|
||||||
* -psci : use PETSCII encoding for all strings without prefix
|
* -psci : use PETSCII encoding for all strings without prefix
|
||||||
* -rpt : generate error files .error.map, .error.asm when linker fails
|
* -rmp : generate error files .error.map, .error.asm when linker fails
|
||||||
|
|
||||||
A list of source files can be provided.
|
A list of source files can be provided.
|
||||||
|
|
||||||
|
|
325
include/conio.c
325
include/conio.c
|
@ -18,6 +18,13 @@ __asm bsin
|
||||||
jsr 0xffe4
|
jsr 0xffe4
|
||||||
sta 0xff01
|
sta 0xff01
|
||||||
}
|
}
|
||||||
|
__asm bsget
|
||||||
|
{
|
||||||
|
lda #0
|
||||||
|
sta 0xff00
|
||||||
|
jsr 0xffcf
|
||||||
|
sta 0xff01
|
||||||
|
}
|
||||||
__asm bsplot
|
__asm bsplot
|
||||||
{
|
{
|
||||||
lda #0
|
lda #0
|
||||||
|
@ -43,6 +50,7 @@ __asm dswap
|
||||||
#define dswap 0xff5f
|
#define dswap 0xff5f
|
||||||
#define bsout 0xffd2
|
#define bsout 0xffd2
|
||||||
#define bsin 0xffe4
|
#define bsin 0xffe4
|
||||||
|
#define bsget 0xffcf
|
||||||
#define bsplot 0xfff0
|
#define bsplot 0xfff0
|
||||||
#define bsinit 0xff81
|
#define bsinit 0xff81
|
||||||
#elif defined(__PLUS4__)
|
#elif defined(__PLUS4__)
|
||||||
|
@ -59,6 +67,12 @@ __asm bsin
|
||||||
jsr 0xffe4
|
jsr 0xffe4
|
||||||
sta 0xff3f
|
sta 0xff3f
|
||||||
}
|
}
|
||||||
|
__asm bsget
|
||||||
|
{
|
||||||
|
sta 0xff3e
|
||||||
|
jsr 0xffcf
|
||||||
|
sta 0xff3f
|
||||||
|
}
|
||||||
__asm bsplot
|
__asm bsplot
|
||||||
{
|
{
|
||||||
sta 0xff3e
|
sta 0xff3e
|
||||||
|
@ -91,6 +105,14 @@ __asm bsin
|
||||||
pha
|
pha
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__asm bsget
|
||||||
|
{
|
||||||
|
lda 0xe405
|
||||||
|
pha
|
||||||
|
lda 0xe404
|
||||||
|
pha
|
||||||
|
}
|
||||||
|
|
||||||
__asm bsplot
|
__asm bsplot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -103,6 +125,7 @@ __asm bsinit
|
||||||
#define bsout 0xffd2
|
#define bsout 0xffd2
|
||||||
#define bsin 0xffe4
|
#define bsin 0xffe4
|
||||||
#define bsplot 0xfff0
|
#define bsplot 0xfff0
|
||||||
|
#define bsget 0xffcf
|
||||||
__asm bsinit
|
__asm bsinit
|
||||||
{
|
{
|
||||||
lda #147
|
lda #147
|
||||||
|
@ -113,6 +136,7 @@ __asm bsinit
|
||||||
#define bsin 0xffe4
|
#define bsin 0xffe4
|
||||||
#define bsplot 0xfff0
|
#define bsplot 0xfff0
|
||||||
#define bsinit 0xff81
|
#define bsinit 0xff81
|
||||||
|
#define bsget 0xffcf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__C128__) || defined(__C128B__) || defined(__C128E__)
|
#if defined(__C128__) || defined(__C128B__) || defined(__C128E__)
|
||||||
|
@ -145,138 +169,13 @@ void iocharmap(IOCharMap chmap)
|
||||||
giocharmap = chmap;
|
giocharmap = chmap;
|
||||||
#if !defined(__ATARI__)
|
#if !defined(__ATARI__)
|
||||||
if (chmap == IOCHM_PETSCII_1)
|
if (chmap == IOCHM_PETSCII_1)
|
||||||
putch(128 + 14);
|
putrch(128 + 14);
|
||||||
else if (chmap == IOCHM_PETSCII_2)
|
else if (chmap == IOCHM_PETSCII_2)
|
||||||
putch(14);
|
putrch(14);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__asm putpch
|
void putrch(char c)
|
||||||
{
|
|
||||||
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 {
|
__asm {
|
||||||
lda c
|
lda c
|
||||||
|
@ -284,6 +183,144 @@ void putch(char c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void putpch(char c)
|
||||||
|
{
|
||||||
|
#if defined(__ATARI__)
|
||||||
|
if (c == 10)
|
||||||
|
c = 0x9b;
|
||||||
|
#else
|
||||||
|
if (giocharmap >= IOCHM_ASCII)
|
||||||
|
{
|
||||||
|
if (c == '\n')
|
||||||
|
c = 13;
|
||||||
|
else if (c == '\t')
|
||||||
|
{
|
||||||
|
char n = wherex() & 3;
|
||||||
|
do {
|
||||||
|
putrch(' ');
|
||||||
|
} while (++n < 4);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (giocharmap >= IOCHM_PETSCII_1)
|
||||||
|
{
|
||||||
|
if (c >= 65 && c < 123)
|
||||||
|
{
|
||||||
|
if (c >= 97 || c < 91)
|
||||||
|
{
|
||||||
|
#if defined(__CBMPET__)
|
||||||
|
if (c >= 97)
|
||||||
|
c ^= 0xa0;
|
||||||
|
c ^= 0x20;
|
||||||
|
#else
|
||||||
|
if (c >= 97)
|
||||||
|
c ^= 0x20;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (giocharmap == IOCHM_PETSCII_2)
|
||||||
|
c &= 0xdf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
putrch(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char convch(char ch)
|
||||||
|
{
|
||||||
|
#if !defined(__ATARI__)
|
||||||
|
|
||||||
|
if (giocharmap >= IOCHM_ASCII)
|
||||||
|
{
|
||||||
|
if (ch == 13)
|
||||||
|
ch = 10;
|
||||||
|
else if (giocharmap >= IOCHM_PETSCII_1)
|
||||||
|
{
|
||||||
|
if (ch >= 65 && ch < 219)
|
||||||
|
{
|
||||||
|
if (ch >= 193)
|
||||||
|
ch ^= 0xa0;
|
||||||
|
if (ch < 123 && (ch >= 97 || ch < 91))
|
||||||
|
ch ^= 0x20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
char getrch(void)
|
||||||
|
{
|
||||||
|
return __asm {
|
||||||
|
jsr bsget
|
||||||
|
sta accu
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
char getpch(void)
|
||||||
|
{
|
||||||
|
return convch(getrch());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char kbhit(void)
|
||||||
|
{
|
||||||
|
return __asm
|
||||||
|
{
|
||||||
|
lda $c6
|
||||||
|
sta accu
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
char getche(void)
|
||||||
|
{
|
||||||
|
char ch;
|
||||||
|
do {
|
||||||
|
ch = __asm {
|
||||||
|
jsr bsin
|
||||||
|
sta accu
|
||||||
|
};
|
||||||
|
} while (!ch);
|
||||||
|
|
||||||
|
__asm {
|
||||||
|
lda ch
|
||||||
|
jsr bsout
|
||||||
|
}
|
||||||
|
|
||||||
|
return convch(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
char getch(void)
|
||||||
|
{
|
||||||
|
char ch;
|
||||||
|
do {
|
||||||
|
ch = __asm {
|
||||||
|
jsr bsin
|
||||||
|
sta accu
|
||||||
|
};
|
||||||
|
} while (!ch);
|
||||||
|
|
||||||
|
return convch(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
char getchx(void)
|
||||||
|
{
|
||||||
|
char ch = __asm {
|
||||||
|
jsr bsin
|
||||||
|
sta accu
|
||||||
|
};
|
||||||
|
|
||||||
|
return convch(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
void putch(char c)
|
||||||
|
{
|
||||||
|
putpch(c);
|
||||||
|
}
|
||||||
|
|
||||||
void clrscr(void)
|
void clrscr(void)
|
||||||
{
|
{
|
||||||
__asm
|
__asm
|
||||||
|
@ -294,7 +331,7 @@ void clrscr(void)
|
||||||
|
|
||||||
void textcursor(bool show)
|
void textcursor(bool show)
|
||||||
{
|
{
|
||||||
*(char *)0xcc = show ? 0 : 1;
|
*(volatile char *)0xcc = show ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gotoxy(char cx, char cy)
|
void gotoxy(char cx, char cy)
|
||||||
|
@ -310,27 +347,27 @@ void gotoxy(char cx, char cy)
|
||||||
|
|
||||||
void textcolor(char c)
|
void textcolor(char c)
|
||||||
{
|
{
|
||||||
__asm
|
*(volatile char *)0x0286 = c;
|
||||||
{
|
|
||||||
lda c
|
|
||||||
sta $0286
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char wherex(void)
|
char wherex(void)
|
||||||
{
|
{
|
||||||
__asm
|
#if defined(__C128__) || defined(__C128B__) || defined(__C128E__)
|
||||||
{
|
return *(volatile char *)0xec;
|
||||||
lda $d3
|
#elif defined(__PLUS4__)
|
||||||
sta accu
|
return *(volatile char *)0xca;
|
||||||
}
|
#else
|
||||||
|
return *(volatile char *)0xd3;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
char wherey(void)
|
char wherey(void)
|
||||||
{
|
{
|
||||||
__asm
|
#if defined(__C128__) || defined(__C128B__) || defined(__C128E__)
|
||||||
{
|
return *(volatile char *)0xeb;
|
||||||
lda $d6
|
#elif defined(__PLUS4__)
|
||||||
sta accu
|
return *(volatile char *)0xcd;
|
||||||
}
|
#else
|
||||||
|
return *(volatile char *)0xd6;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,19 @@ void dispmode80col(void);
|
||||||
#define PETSCII_F7 0x88
|
#define PETSCII_F7 0x88
|
||||||
#define PETSCII_F8 0x8c
|
#define PETSCII_F8 0x8c
|
||||||
|
|
||||||
|
// Lowlevel console in/out
|
||||||
|
|
||||||
|
// using petscii translation
|
||||||
|
void putpch(char c);
|
||||||
|
char getpch(void);
|
||||||
|
|
||||||
|
// using no translation
|
||||||
|
inline void putrch(char c);
|
||||||
|
inline char getrch(void);
|
||||||
|
|
||||||
|
|
||||||
|
// Standard console in/out
|
||||||
|
|
||||||
char kbhit(void);
|
char kbhit(void);
|
||||||
|
|
||||||
char getche(void);
|
char getche(void);
|
||||||
|
@ -59,15 +72,15 @@ void clrscr(void);
|
||||||
|
|
||||||
void gotoxy(char x, char y);
|
void gotoxy(char x, char y);
|
||||||
|
|
||||||
void textcolor(char c);
|
inline void textcolor(char c);
|
||||||
|
|
||||||
char wherex(void);
|
inline char wherex(void);
|
||||||
|
|
||||||
char wherey(void);
|
inline char wherey(void);
|
||||||
|
|
||||||
// show or hide the text cursor
|
// show or hide the text cursor
|
||||||
|
|
||||||
void textcursor(bool show);
|
inline void textcursor(bool show);
|
||||||
|
|
||||||
#pragma compile("conio.c")
|
#pragma compile("conio.c")
|
||||||
|
|
||||||
|
|
233
include/stdio.c
233
include/stdio.c
|
@ -2,237 +2,40 @@
|
||||||
#include "conio.h"
|
#include "conio.h"
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
|
|
||||||
#if defined(__C128__)
|
|
||||||
#pragma code(lowcode)
|
|
||||||
__asm bsout
|
|
||||||
{
|
|
||||||
ldx #0
|
|
||||||
stx 0xff00
|
|
||||||
jsr 0xffd2
|
|
||||||
sta 0xff01
|
|
||||||
}
|
|
||||||
__asm bsplot
|
|
||||||
{
|
|
||||||
lda #0
|
|
||||||
sta 0xff00
|
|
||||||
jsr 0xfff0
|
|
||||||
sta 0xff01
|
|
||||||
}
|
|
||||||
__asm bsin
|
|
||||||
{
|
|
||||||
lda #0
|
|
||||||
sta 0xff00
|
|
||||||
jsr 0xffcf
|
|
||||||
sta 0xff01
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma code(code)
|
|
||||||
#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
|
|
||||||
}
|
|
||||||
#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
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define bsout 0xffd2
|
|
||||||
#define bsplot 0xfff0
|
|
||||||
#define bsin 0xffcf
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__asm putpch
|
|
||||||
{
|
|
||||||
#if defined(__ATARI__)
|
|
||||||
cmp #10
|
|
||||||
bne w1
|
|
||||||
lda #0x9b
|
|
||||||
w1:
|
|
||||||
jmp bsout
|
|
||||||
#else
|
|
||||||
ldx giocharmap
|
|
||||||
cpx #IOCHM_ASCII
|
|
||||||
bcc w3
|
|
||||||
|
|
||||||
cmp #10
|
|
||||||
bne w1
|
|
||||||
lda #13
|
|
||||||
w1:
|
|
||||||
cmp #9
|
|
||||||
beq t1
|
|
||||||
|
|
||||||
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
|
|
||||||
t1:
|
|
||||||
sec
|
|
||||||
jsr bsplot
|
|
||||||
tya
|
|
||||||
and #3
|
|
||||||
eor #3
|
|
||||||
tax
|
|
||||||
lda #$20
|
|
||||||
l1:
|
|
||||||
jsr bsout
|
|
||||||
dex
|
|
||||||
bpl l1
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
__asm getpch
|
|
||||||
{
|
|
||||||
jsr bsin
|
|
||||||
#if !defined(__ATARI__)
|
|
||||||
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:
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void putchar(char c)
|
void putchar(char c)
|
||||||
{
|
{
|
||||||
__asm {
|
putpch(c);
|
||||||
lda c
|
|
||||||
jsr putpch
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char getchar(void)
|
char getchar(void)
|
||||||
{
|
{
|
||||||
__asm {
|
return getpch();
|
||||||
jsr getpch
|
|
||||||
sta accu
|
|
||||||
lda #0
|
|
||||||
sta accu + 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void puts(const char * str)
|
void puts(const char * str)
|
||||||
{
|
{
|
||||||
__asm {
|
while (char ch = *str++)
|
||||||
ploop:
|
putpch(ch);
|
||||||
ldy #0
|
|
||||||
lda (str), y
|
|
||||||
beq pdone
|
|
||||||
|
|
||||||
jsr putpch
|
|
||||||
|
|
||||||
inc str
|
|
||||||
bne ploop
|
|
||||||
inc str + 1
|
|
||||||
bne ploop
|
|
||||||
pdone:
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char * gets(char * str)
|
char * gets(char * str)
|
||||||
{
|
{
|
||||||
__asm {
|
char i = 0;
|
||||||
gloop:
|
while ((char ch = getpch()) != '\n')
|
||||||
jsr getpch
|
str[i++] = ch;
|
||||||
ldy #0
|
str[i] = 0;
|
||||||
cmp #10
|
return str;
|
||||||
beq gdone
|
|
||||||
sta (str), y
|
|
||||||
inc str
|
|
||||||
bne gloop
|
|
||||||
inc str + 1
|
|
||||||
bne gloop
|
|
||||||
gdone:
|
|
||||||
lda #0
|
|
||||||
sta (str), y
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char * gets_s(char * str, size_t n)
|
||||||
|
{
|
||||||
|
char i = 0, t = n - 1;
|
||||||
|
while ((char ch = getpch()) != '\n')
|
||||||
|
{
|
||||||
|
if (i < t)
|
||||||
|
str[i++] = ch;
|
||||||
|
}
|
||||||
|
str[i] = 0;
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#define STDIO_H
|
#define STDIO_H
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
void putchar(char c);
|
void putchar(char c);
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@ void puts(const char * str);
|
||||||
|
|
||||||
char * gets(char * str);
|
char * gets(char * str);
|
||||||
|
|
||||||
|
char * gets_s(char * str, size_t n);
|
||||||
|
|
||||||
void printf(const char * fmt, ...);
|
void printf(const char * fmt, ...);
|
||||||
|
|
||||||
int sprintf(char * str, const char * fmt, ...);
|
int sprintf(char * str, const char * fmt, ...);
|
||||||
|
|
|
@ -1419,6 +1419,10 @@ bool NativeCodeInstruction::ChangesZeroPage(int address) const
|
||||||
if (address >= BC_REG_TMP && address < BC_REG_TMP + mLinkerObject->mProc->mCallerSavedTemps)
|
if (address >= BC_REG_TMP && address < BC_REG_TMP + mLinkerObject->mProc->mCallerSavedTemps)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (!mLinkerObject)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (address >= BC_REG_TMP && address < BC_REG_TMP_SAVED)
|
if (address >= BC_REG_TMP && address < BC_REG_TMP_SAVED)
|
||||||
|
|
Loading…
Reference in New Issue