1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-06-10 08:29:37 +00:00

Move readkey to a separate module

This commit is contained in:
Karol Stasiak 2019-06-26 15:51:09 +02:00
parent c9a65d5971
commit 32476f2a4e
15 changed files with 141 additions and 81 deletions

View File

@ -14,7 +14,7 @@
* Added `memory_barrier` macro.
* Added `readkey` function.
* Added `keyboard` module.
* Added `random` module.

View File

@ -45,7 +45,7 @@
* [Modules for reading input devices](stdlib/input.md)
* [Other cross-platform modules (`err`, `random`)](stdlib/other.md)
* [Other cross-platform modules (`keyboard`, `err`, `random`)](stdlib/other.md)
* [Definitions available on only some platforms](stdlib/frequent.md)

View File

@ -45,7 +45,7 @@
* [Modules for reading input devices](stdlib/input.md)
* [Other cross-platform modules (`err`, `random`)](stdlib/other.md)
* [Other cross-platform modules (`keyboard`, `err`, `random`)](stdlib/other.md)
* [Definitions available on only some platforms](stdlib/frequent.md)

View File

@ -29,26 +29,6 @@ Moves the cursor to the next line.
Available for: all computer targets.
Uses ROM routines, so requires the appropriate ROM to be enabled if applicable.
#### `byte readkey()`
Waits for and reads a single keypress.
The returning values may vary between platforms:
* letters may be uppercase or lowercase
* modifier keys may be applied or ignored
Available for:
Commodore 64 (requires KERNAL),
Commodore 16 or Plus/4 (requires KERNAL),
Commodore 128 (requires KERNAL),
VIC 20 (requires KERNAL),
Atari,
Amstrad CPC,
ZX Spectrum,
NEC PC-88.
#### `pointer readline()`
Reads a line from the console and returns a pointer to a null-terminated string.

View File

@ -1,5 +1,34 @@
[< back to index](../index.md)
## keyboard
The `keyboard` module provides support for reading keypresses from the keyboard.
Not supported on all targets.
#### `byte readkey()`
Waits for and reads a single keypress.
The returning values may vary between platforms:
* letters may be uppercase or lowercase
* modifier keys may be applied or ignored
Available for:
Commodore 64 (requires KERNAL),
Commodore 16 or Plus/4 (requires KERNAL),
Commodore 128 (requires KERNAL),
VIC 20 (requires KERNAL),
Atari,
Amstrad CPC,
ZX Spectrum,
NEC PC-88.
#### `const byte KEY_ENTER`
Key code for the Enter/Return key. Usually 13, but not always.
## err
#### `enum error_number`

View File

@ -10,7 +10,11 @@ import c64_basic
import c264_basic
#endif
#define READKEY = CBM_64 | CBM_VIC | CBM_264 | CBM_128 | ZX_SPECTRUM | NEC_PC_88 | ATARI_8
#define READKEY = CBM_64 | CBM_264 | ZX_SPECTRUM | NEC_PC_88
#if READKEY
import keyboard
#endif
void main () {
init_rand_seed()
@ -63,9 +67,9 @@ void play_round() {
putstrz(" attempts!"z)
new_line()
#if READKEY
putstrz("Press any key to play again."z)
readkey()
new_line()
putstrz("Press any key to play again."z)
readkey()
new_line()
#endif
new_line()
}

View File

@ -13,16 +13,6 @@ noinline asm void putchar(byte a) {
rts
}
noinline asm byte readkey() {
lda #$C
sta $2A
lda $E425
pha
lda $E424
pha
rts
}
inline void new_line() {
putchar($9b)
}

View File

@ -15,14 +15,6 @@ asm void putchar(byte a) {
? RTS
}
noinline asm byte readkey() {
__read_key__start:
LDA $D0
BEQ __read_key__start
LDX #0
JMP $C244
}
inline void new_line() {
putchar(13)
}

View File

@ -14,14 +14,6 @@ asm void putchar(byte a) {
? RTS
}
noinline asm byte readkey() {
__read_key__start:
LDA $EF
BEQ __read_key__start
LDX #0
JMP $D8D5
}
inline void new_line() {
putchar(13)
}

View File

@ -31,13 +31,6 @@ asm void putchar(byte a) {
? RTS
}
noinline asm byte readkey() {
__read_key__start:
LDA $C6
BEQ __read_key__start
JMP $E5B4
}
inline void new_line() {
chrout(13)
}

View File

@ -5,8 +5,6 @@
asm void putchar(byte a) @$BB5A extern
asm byte readkey() @$BB06 extern
inline void new_line() {
putchar(13)
putchar(10)

101
include/keyboard.mfk Normal file
View File

@ -0,0 +1,101 @@
#if ATARI_8
const byte KEY_ENTER = 155
#else
const byte KEY_ENTER = 13
#endif
#if CBM_64
noinline asm byte readkey() {
__read_key__start:
LDA $C6
BEQ __read_key__start
JMP $E5B4
}
#define OK = 1
#endif
#if CBM_128
noinline asm byte readkey() {
__read_key__start:
LDA $D0
BEQ __read_key__start
LDX #0
JMP $C244
}
#define OK = 1
#endif
#if CBM_264
noinline asm byte readkey() {
__read_key__start:
LDA $EF
BEQ __read_key__start
LDX #0
JMP $D8D5
}
#define OK = 1
#endif
#if CBM_VIC
noinline asm byte readkey() {
__read_key__start:
LDA $C6
BEQ __read_key__start
JMP $E5CF
}
#define OK = 1
#endif
#if ATARI_8
noinline asm byte readkey() {
lda #$C
sta $2A
lda $E425
pha
lda $E424
pha
rts
}
#define OK = 1
#endif
#if NEC_PC_88
asm byte readkey() @$3583 extern
#define OK = 1
#endif
#if AMSTRAD_CPC
asm byte readkey() @$BB06 extern
#define OK = 1
#endif
#if ZX_SPECTRUM
#pragma zilog_syntax
asm byte readkey() {
ld hl,23560
ld (hl),0
__readkey__start:
ld a,(hl)
or a
jr z,__readkey__start
? ret
}
#define OK = 1
#endif
#if not(OK)
#if KEYBOARD
#warn keyboard module is not yet supported
#else
#warn keyboard module is not supported on targets without keyboard
#endif
#endif

View File

@ -6,8 +6,6 @@
asm void putchar(byte a) @$3e0d extern
asm byte readkey() @$3583 extern
inline void new_line() {
putchar(13)
putchar(10)

View File

@ -15,13 +15,6 @@ asm void putchar(byte a) {
? RTS
}
noinline asm byte readkey() {
__read_key__start:
LDA $C6
BEQ __read_key__start
JMP $E5CF
}
inline void new_line() {
putchar(13)
}

View File

@ -14,16 +14,6 @@ inline void new_line() {
putchar(13)
}
asm byte readkey() {
ld hl,23560
ld (hl),0
__readkey__start:
ld a,(hl)
or a
jr z,__readkey__start
? ret
}
inline asm void set_border(byte a) {
out (254),a
? ret