#if not(ZX_SPECTRUM) #warn zxspectrum module should be only used on ZX Spectrum-compatible targets #endif #pragma zilog_syntax inline asm void putchar(byte register(a) char) !preserves_bc !preserves_de !preserves_hl { rst $10 ? ret } inline void new_line() !preserves_bc !preserves_de !preserves_hl { putchar(13) } inline asm void set_border(byte register(a) colour) !preserves_bc !preserves_de !preserves_hl { out (254),a ? ret } inline asm void bell() { ? ld hl,$6A ? ld de,$105 ? call $3B5 ? ret } array __readline_out[45] const pointer readline_out = __readline_out.addr pointer readline() { asm { ld a, 1 call $1601 ld hl, $5c71 set 7, (hl) set 5, (hl) call $16b0 ld bc, 1 rst $30 ld (hl), 13 ld ($5c5b), hl ld hl, __readline_exit push hl ld ($5c2d), sp call $0f2c pop hl ld hl, ($5c61) ld de, __readline_out.addr ld b, __readline_out.length - 1 __readline_copy: ld a, (hl) cp 13 jr z, __readline_exit ld (de), a inc hl inc de djnz __readline_copy __readline_exit: ld a, 0 ld (de), a ld a,2 call $1601 call $16b0 } putstrz(__readline_out) new_line() return __readline_out.addr } const byte black = 0 const byte blue = 1 const byte red = 2 const byte purple = 3 const byte green = 4 const byte cyan = 5 const byte yellow = 6 const byte white = 7