mirror of
https://github.com/KarolS/millfork.git
synced 2025-01-24 07:31:44 +00:00
Move readkey to a separate module
This commit is contained in:
parent
c9a65d5971
commit
32476f2a4e
@ -14,7 +14,7 @@
|
||||
|
||||
* Added `memory_barrier` macro.
|
||||
|
||||
* Added `readkey` function.
|
||||
* Added `keyboard` module.
|
||||
|
||||
* Added `random` module.
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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`
|
||||
|
@ -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()
|
||||
}
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
101
include/keyboard.mfk
Normal 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
|
@ -6,8 +6,6 @@
|
||||
|
||||
asm void putchar(byte a) @$3e0d extern
|
||||
|
||||
asm byte readkey() @$3583 extern
|
||||
|
||||
inline void new_line() {
|
||||
putchar(13)
|
||||
putchar(10)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user