From 1a07d880145ce350cea5bf6373901adf45dba4bd Mon Sep 17 00:00:00 2001 From: Ian C Date: Wed, 21 Feb 2007 01:12:50 +0000 Subject: Added support for RAM at 0x2000. Fixed 1K display. --- source/zx81.c | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) (limited to 'source/zx81.c') diff --git a/source/zx81.c b/source/zx81.c index 81cfd55..4d1da51 100644 --- a/source/zx81.c +++ b/source/zx81.c @@ -31,6 +31,8 @@ #include "zx81.h" #include "gui.h" +#include "config.h" + #include "zx81_bin.h" #ifndef TRUE @@ -86,7 +88,6 @@ static Z80Byte scr_mirror[7000]; static Z80Word RAMBOT=0; static Z80Word RAMTOP=0; -static Z80Word RAMLEN=0; #define DFILE 0x400c @@ -258,7 +259,7 @@ static Z80Byte FromASCII(char c) /* Open a tape file the passed address */ -static FILE *OpenTapeFile(Z80Word addr) +static FILE *OpenTapeFile(Z80Word addr, int *cancelled) { static const char zx_chars[] = "\"#$:?()><=+-*/;,." "0123456789" @@ -271,6 +272,7 @@ static FILE *OpenTapeFile(Z80Word addr) fp = NULL; f = 0; done = FALSE; + *cancelled = FALSE; while(f<(FILENAME_MAX-3) && !done) { @@ -296,6 +298,10 @@ static FILE *OpenTapeFile(Z80Word addr) { fp = fopen(fn,"rb"); } + else + { + *cancelled = TRUE; + } SK_DisplayKeyboard(BG_GFX_SUB); } @@ -518,6 +524,12 @@ static void DrawScreen_TEXT(Z80 *z80) x++; } + while (xDE.w<0x8000) { FILE *fp; + int cancel; - if ((fp=OpenTapeFile(z80->DE.w))) + if ((fp=OpenTapeFile(z80->DE.w,&cancel))) { LoadExternalTape(fp,z80); fclose(fp); } else { - GUI_Alert(FALSE,"Couldn't open tape"); - SK_DisplayKeyboard(BG_GFX_SUB); + if (!cancel) + { + GUI_Alert(FALSE,"Couldn't open tape"); + SK_DisplayKeyboard(BG_GFX_SUB); + } } } else @@ -847,8 +863,7 @@ void ZX81Init(uint16 *text_vram, uint16* bitmap_vram, Z80 *z80) /* Memory size (16K) */ RAMBOT=0x4000; - RAMLEN=0x4000; - RAMTOP=RAMBOT+RAMLEN; + RAMTOP=RAMBOT+0x4000; for(f=RAMBOT;f<=RAMTOP;f++) mem[f]=0; @@ -873,7 +888,7 @@ void ZX81HandleKey(SoftKey key, int is_pressed) } else { - /* TODO: Joysticks? */ + /* TODO: Joysticks? Were there any common ones for the 81? */ } } @@ -1044,4 +1059,18 @@ void ZX81DisplayString(const char *p) } +void ZX81Reconfigure(void) +{ + if (DS81_Config[DS81_STATIC_RAM_AT_0x2000]) + { + RAMBOT = 0x2000; + } + else + { + RAMBOT = 0x4000; + memcpy(mem+ROMLEN,mem,ROMLEN); + } +} + + /* END OF FILE */ -- cgit v1.2.3