slenkar писал(а):
ok it works after I import xdev.lib
Yes, ENTIER implemented in SYSTEM.c that is a part of xdev.lib which is designed as an universal and cross-platform runtime and set of modules (SYSTEM, Platform, Console, Math (in future - CmdLine, GrPixel, GrTiles, GrSprites, Control, Keyboard etc)).
slenkar писал(а):
Have you tried doing any input?
I tried PEEKING 23560 to see the last key pressed but it doesnt seem to work
It's because interrupts are disabled by Basic.Init:
Код: "C"
void Basic_Init (void)
{
__asm
DI
LD IY,#0x5C3A
RES 4,1(IY) /* RESET OF 128K FLAG */
__endasm;
} //Basic_Init
And it's done because SDCC actively used IY in generated code. You can to experience with IM 2 mode (with saving IY and calling an interrupt routine manually) or disable SDCC using IY for generated code.
1. To have IM 2 mode, use Basic initializer such:
Код: "C"
void Basic__init(void)
{
__asm
; ************************************************
; * Set IM2 mode (need for correct work with IY) *
; ************************************************
LD HL,#IM2PROC$
IMON$:
LD A,#24 ; код команды JR
LD (#65535),A
LD A,#195 ; код команды JP
LD (#65524),A
LD (#65525),HL ; в HL - адрес обработчика прерываний
LD HL,#0xFE00 ; построение таблицы для векторов прерываний
LD DE,#0xFE01
LD BC,#256 ; размер таблицы минус 1
LD (HL),#0xFF ; адрес перехода #FFFF (65535)
LD A,H ; запоминаем старший байт адреса таблицы
LDIR ; заполняем таблицу
DI ; запрещаем прерывания на время
; установки второго режима
LD I,A ; задаем в регистре I старший байт адреса
; таблицы для векторов прерываний
IM 2 ; назначаем второй режим прерываний
EI ; разрешаем прерывания
RET
IM2PROC$:
PUSH AF
PUSH HL
LD HL,(#0x5C78) ;
INC HL ; INC(FRAMES_CNTR)
LD (#0x5C78),HL ;
POP HL
POP AF
EI
__endasm;
} //Basic__init
Here is only work with timer. To use LAST_K (PEEKING 23560) you need to call ZX Basic interrupt handler. But all this questions are well known for Speccy fans.
2. Disable SDCC using IY for generated code. Use option --reserve-regs-iy and mode IM 0 (IM 1). IY must always = 0x5C3A. You'll need to remove DI from Basic_Init.
Probably, in the future I will add to Basic.lib support for the work in different interrupt modes (IM 0, IM 2). Maybe your work and written code will be useful too.

slenkar писал(а):
and how do I enable the fast print function?
Remark the line "#define ROM_OUTPUT" in ZXDev/Obj/BasicCfg.h