mirror of
https://github.com/KarolS/millfork.git
synced 2025-08-16 10:27:33 +00:00
Move readkey to a separate module
This commit is contained in:
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
* Added `memory_barrier` macro.
|
* Added `memory_barrier` macro.
|
||||||
|
|
||||||
* Added `readkey` function.
|
* Added `keyboard` module.
|
||||||
|
|
||||||
* Added `random` module.
|
* Added `random` module.
|
||||||
|
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
* [Modules for reading input devices](stdlib/input.md)
|
* [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)
|
* [Definitions available on only some platforms](stdlib/frequent.md)
|
||||||
|
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
* [Modules for reading input devices](stdlib/input.md)
|
* [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)
|
* [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.
|
Available for: all computer targets.
|
||||||
Uses ROM routines, so requires the appropriate ROM to be enabled if applicable.
|
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()`
|
#### `pointer readline()`
|
||||||
|
|
||||||
Reads a line from the console and returns a pointer to a null-terminated string.
|
Reads a line from the console and returns a pointer to a null-terminated string.
|
||||||
|
@@ -1,5 +1,34 @@
|
|||||||
[< back to index](../index.md)
|
[< 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
|
## err
|
||||||
|
|
||||||
#### `enum error_number`
|
#### `enum error_number`
|
||||||
|
@@ -10,7 +10,11 @@ import c64_basic
|
|||||||
import c264_basic
|
import c264_basic
|
||||||
#endif
|
#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 () {
|
void main () {
|
||||||
init_rand_seed()
|
init_rand_seed()
|
||||||
|
@@ -13,16 +13,6 @@ noinline asm void putchar(byte a) {
|
|||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
noinline asm byte readkey() {
|
|
||||||
lda #$C
|
|
||||||
sta $2A
|
|
||||||
lda $E425
|
|
||||||
pha
|
|
||||||
lda $E424
|
|
||||||
pha
|
|
||||||
rts
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
putchar($9b)
|
putchar($9b)
|
||||||
}
|
}
|
||||||
|
@@ -15,14 +15,6 @@ asm void putchar(byte a) {
|
|||||||
? RTS
|
? RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
noinline asm byte readkey() {
|
|
||||||
__read_key__start:
|
|
||||||
LDA $D0
|
|
||||||
BEQ __read_key__start
|
|
||||||
LDX #0
|
|
||||||
JMP $C244
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
putchar(13)
|
putchar(13)
|
||||||
}
|
}
|
||||||
|
@@ -14,14 +14,6 @@ asm void putchar(byte a) {
|
|||||||
? RTS
|
? RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
noinline asm byte readkey() {
|
|
||||||
__read_key__start:
|
|
||||||
LDA $EF
|
|
||||||
BEQ __read_key__start
|
|
||||||
LDX #0
|
|
||||||
JMP $D8D5
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
putchar(13)
|
putchar(13)
|
||||||
}
|
}
|
||||||
|
@@ -31,13 +31,6 @@ asm void putchar(byte a) {
|
|||||||
? RTS
|
? RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
noinline asm byte readkey() {
|
|
||||||
__read_key__start:
|
|
||||||
LDA $C6
|
|
||||||
BEQ __read_key__start
|
|
||||||
JMP $E5B4
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
chrout(13)
|
chrout(13)
|
||||||
}
|
}
|
||||||
|
@@ -5,8 +5,6 @@
|
|||||||
|
|
||||||
asm void putchar(byte a) @$BB5A extern
|
asm void putchar(byte a) @$BB5A extern
|
||||||
|
|
||||||
asm byte readkey() @$BB06 extern
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
putchar(13)
|
putchar(13)
|
||||||
putchar(10)
|
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 void putchar(byte a) @$3e0d extern
|
||||||
|
|
||||||
asm byte readkey() @$3583 extern
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
putchar(13)
|
putchar(13)
|
||||||
putchar(10)
|
putchar(10)
|
||||||
|
@@ -15,13 +15,6 @@ asm void putchar(byte a) {
|
|||||||
? RTS
|
? RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
noinline asm byte readkey() {
|
|
||||||
__read_key__start:
|
|
||||||
LDA $C6
|
|
||||||
BEQ __read_key__start
|
|
||||||
JMP $E5CF
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void new_line() {
|
inline void new_line() {
|
||||||
putchar(13)
|
putchar(13)
|
||||||
}
|
}
|
||||||
|
@@ -14,16 +14,6 @@ inline void new_line() {
|
|||||||
putchar(13)
|
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) {
|
inline asm void set_border(byte a) {
|
||||||
out (254),a
|
out (254),a
|
||||||
? ret
|
? ret
|
||||||
|
Reference in New Issue
Block a user