From c3ab4004adbd2d8c2e766456f3e1257ac1bdf195 Mon Sep 17 00:00:00 2001 From: Gwenhael Le Moine Date: Tue, 19 Mar 2024 22:11:59 +0100 Subject: [PATCH] 1996-02-01: Historic version 0.37 Signed-off-by: Gwenhael Le Moine --- BITMAP1.BMP | Bin 0 -> 1270 bytes DUMP.C | 95 ++++++ DUMP2ROM.C | 100 ++++++ EMU48.H | 134 ++++++++ EMU48.ICO | Bin 0 -> 1398 bytes EMU48.MAK | 297 +++++++++++++++++ EMU48.RC | 88 +++++ EMU48_ID.BMP | Bin 0 -> 17014 bytes FETCH.H | 454 ++++++++++++++++++++++++++ HARDWARE.C | 896 +++++++++++++++++++++++++++++++++++++++++++++++++++ HARDWARE.H | 86 +++++ INSTR.C | 516 +++++++++++++++++++++++++++++ KEYBOARD.BMP | Bin 0 -> 20814 bytes LST2C.C | 65 ++++ MAIN.C | 86 +++++ MAKEFILE | 12 + MEM2.C | 739 ++++++++++++++++++++++++++++++++++++++++++ MEMORY.C | 728 +++++++++++++++++++++++++++++++++++++++++ OPCODES.H | 425 ++++++++++++++++++++++++ PCPDBG.H | 354 ++++++++++++++++++++ PIX4.BMP | Bin 0 -> 246 bytes README | 239 ++++++++++++++ RESOURCE.H | 21 ++ ROM | Bin 0 -> 262144 bytes ROMDUMP | Bin 0 -> 561 bytes RUNME.BAT | 3 + SATURN.C | 130 ++++++++ SAVE.BAT | 15 + dump2rom.exe | Bin 0 -> 22528 bytes dump2rom.obj | Bin 0 -> 2876 bytes emu48w32.exe | Bin 0 -> 144896 bytes pcpdebug.h | 123 +++++++ ram | Bin 0 -> 131072 bytes 33 files changed, 5606 insertions(+) create mode 100644 BITMAP1.BMP create mode 100644 DUMP.C create mode 100644 DUMP2ROM.C create mode 100644 EMU48.H create mode 100644 EMU48.ICO create mode 100644 EMU48.MAK create mode 100644 EMU48.RC create mode 100644 EMU48_ID.BMP create mode 100644 FETCH.H create mode 100644 HARDWARE.C create mode 100644 HARDWARE.H create mode 100644 INSTR.C create mode 100644 KEYBOARD.BMP create mode 100644 LST2C.C create mode 100644 MAIN.C create mode 100644 MAKEFILE create mode 100644 MEM2.C create mode 100644 MEMORY.C create mode 100644 OPCODES.H create mode 100644 PCPDBG.H create mode 100644 PIX4.BMP create mode 100644 README create mode 100644 RESOURCE.H create mode 100644 ROM create mode 100644 ROMDUMP create mode 100644 RUNME.BAT create mode 100644 SATURN.C create mode 100644 SAVE.BAT create mode 100644 dump2rom.exe create mode 100644 dump2rom.obj create mode 100644 emu48w32.exe create mode 100644 pcpdebug.h create mode 100644 ram diff --git a/BITMAP1.BMP b/BITMAP1.BMP new file mode 100644 index 0000000000000000000000000000000000000000..6e8e840620a27fb2fa28f68c860a5eaa5714167a GIT binary patch literal 1270 zcmZ?r{l>xo24z4}1BeZvn2`Y@(EybPD?%X}7#M(vp`ign0ZAZ};lP0dKpG_RAB-6O a{|B*v7zjZ^ApR&A4S~@R7!82|3IPD0SCat% literal 0 HcmV?d00001 diff --git a/DUMP.C b/DUMP.C new file mode 100644 index 0000000..1bf3112 --- /dev/null +++ b/DUMP.C @@ -0,0 +1,95 @@ +/* + * Copyright (C) 1995 Sebastien Carlier + */ + +#include +#include + +FILE *in; +unsigned char A[16], B[16], C[16], D[16], ST[4]; +unsigned char R0[16], R1[16], R2[16], R3[16], R4[16]; +unsigned char HST, P, CARRY, MODE, INTP, INTE, INTD, SHUTDN; +unsigned char ioram[64]; +unsigned long pc, d0, d1, OUT, IN, rstk[8], rstkp, t1, t2; +unsigned long ucfg[5], base[6], size[5]; +unsigned short crc; + +void Ndisp(unsigned char *a, int s) { + + while (s--) putchar((a[s]<10)?(a[s]+'0'):(a[s]-10+'A')); + return; +} + +int main(int argc, char *argv[]) { + int i; + + if (argc!=2) + in = fopen("saturn", "rb"); + else + in = fopen(argv[1], "rb"); + if (in == NULL) return 1; + fread(A, 16, 1, in); + fread(B, 16, 1, in); + fread(C, 16, 1, in); + fread(D, 16, 1, in); + fread(R0, 16, 1, in); + fread(R1, 16, 1, in); + fread(R2, 16, 1, in); + fread(R3, 16, 1, in); + fread(R4, 16, 1, in); + fread(&pc, 4, 1, in); + fread(&d0, 4, 1, in); + fread(&d1, 4, 1, in); + fread(&OUT, 4, 1, in); + fread(&IN, 4, 1, in); + fread(ST, 4, 1, in); + HST = fgetc(in); + if (!P) P = fgetc(in); else fseek(in, 1, SEEK_CUR); + CARRY = fgetc(in); + MODE = fgetc(in); + INTP = fgetc(in); + INTE = fgetc(in); + INTD = fgetc(in); + SHUTDN = fgetc(in); + fread(rstk, 32, 1, in); + rstkp = fgetc(in); + for (i=0; i<5; i++) { + ucfg[i] = fgetc(in); + fread(&base[i], 4, 1, in); + fread(&size[i], 4, 1, in); + } + fread(ioram, 64, 1, in); + t1 = fgetc(in); + fread(&t2, 4, 1, in); + fread(&crc, 4, 1, in); +/* fread(&display, sizeof(display_t), 1, in);*/ + fclose(in); + + printf(" A="); Ndisp(A, 16); putchar('\t'); + printf(" B="); Ndisp(B, 16); putchar('\t'); + printf(" C="); Ndisp(C, 16); putchar('\n'); + printf(" D="); Ndisp(D, 16); putchar('\t'); + printf("R0="); Ndisp(R0, 16); putchar('\t'); + printf("R1="); Ndisp(R1, 16); putchar('\n'); + printf("R2="); Ndisp(R2, 16); putchar('\t'); + printf("R3="); Ndisp(R3, 16); putchar('\t'); + printf("R4="); Ndisp(R4, 16); putchar('\n'); + printf("PC=%05lX\tD0=%05lX\tD1=%05lX\n", pc, d0, d1); + printf("OUT=%03lX\tIN=%04lX\tST=", OUT, IN); Ndisp(ST, 4); putchar('\n'); + printf("HST=%X\tP=%i\tCARRY=%c\tMODE=%2i\n", HST, P, CARRY?'Y':'N', MODE); + printf("INTP=%c\tINTE=%c\tINTD=%c\tSHUTDN=%c\n", INTP?'Y':'N', INTE?'Y':'N', + INTD?'Y':'N', SHUTDN?'Y':'N'); + printf("RSTK(%ld): ", rstkp); + for (i=0; i<8; i++) printf("%05lX ", rstk[i]); putchar('\n'); + printf("IORAM: "); + for (i=0; i<64; i++) { + putchar((ioram[i]<10)?(ioram[i]+'0'):(ioram[i]-10+'A')); + if ((i&0xf) == 0xf) putchar(' '); + } + putchar('\n'); + printf("T1=%1lX T2=%08lX CRC=%04X\n", t1, t2, crc); + for (i=0; i<5; i++) + printf("Module %d: cfg=%ld base=%05lX size=%05lX\n", i, ucfg[i], base[i], size[i]); + return 0; +} + \ No newline at end of file diff --git a/DUMP2ROM.C b/DUMP2ROM.C new file mode 100644 index 0000000..c5e154b --- /dev/null +++ b/DUMP2ROM.C @@ -0,0 +1,100 @@ +/* + * This file is part of Emu48, an emulator of the HP-48 Calculator. + * Copyright (C) 1995 Sebastien Carlier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include + +#define word8 unsigned char +#define word16 unsigned short +#define word32 unsigned long + +char in[32]; +word8 out[8]; +FILE *IN, *OUT; + +void Ncode(word8 *a, word8 s) { + + while (s--) { + if (a[s] < '0') { a[s] = 0; continue; } + if (a[s] <='9') { a[s]-= '0'; continue; } + if (a[s] < 'A') { a[s] = 0; continue; } + if (a[s] <='F') { a[s]-= ('A'-10); continue; } + a[s] = 0; + } + return; +} + +word32 Nrpack(word8 *a, word8 s) { + word32 r = 0; + int i; + + for (i=0; i>4)^(((crc^(nib))&0xf)*0x1081); +#define ISMODULE(n,d) ((!ucfg[n])&&(d>=base[n])&&(d<(base[n]+size[n]))) +#define INTERRUPT(t) {INTP=1;rstkpush(pc);pc=0xf;} +#define PCHANGED {F_s[0]=P;F_l[1]=P+1;} + +extern char A[16]; +extern char B[16]; +extern char C[16]; +extern char D[16]; +extern char R0[16]; +extern char R1[16]; +extern char R2[16]; +extern char R3[16]; +extern char R4[16]; +extern char ST[4]; +extern char HST, P; +extern int OUT, IN; +extern int SHUTDN, INTP, INTE, INTD, rstkp, MODE, CARRY; +extern long rstk[8]; +extern long pc, d0, d1; +extern int F_s[16]; +extern int F_l[16]; +extern char CARDSTATUS; + +extern char *rom, *ram, *port1, *port2, *data[6], ioram[64]; +extern int ucfg[6], bank1, bank2; +extern long base[6], size[6]; +extern unsigned short crc; +extern unsigned long t1, t2, saturn_speed; +extern int quit; +extern int load_state; + +extern int load(); +extern int save(); +extern void bank_save(char *mem, char *bn, int bank); +extern void bank_load(char *mem, char *bn, int bank); +extern void bank_switch(int bank); +extern void emulate(); +extern long rstkpop(); +extern void rstkpush(long d); +extern char *nibble_ptr(long d); +extern char read_nibble(long d); +extern char read_nibble_crc(long d); +extern void write_nibble(long d, char c); +extern char read_io(long d); +extern void write_io(long d, char c); +extern void config(); +extern void unconfig(); +extern void reset(); +extern void c_eq_id(); +extern void calibrate_timer(); + +extern long Npack(char *a, int s); +extern void Nunpack(char *a, long b, int s); +extern void Nread(char *a, long b, int s); +extern void NCread(char *a, long b, int s); +extern void Nwrite(char *a, long b, int s); +extern void Ncopy(char *a, char *b, int s); +extern void Nxchg(char *a, char *b, int s); +extern void Ninc(char *a, int s); +extern void Ndec(char *a, int s); +extern void Nadd(char *a, char *b, int s); +extern void Nsub(char *a, char *b, int s); +extern void Nrsub(char *a, char *b, int s); +extern void Nand(char *a, char *b, int s); +extern void Nor(char *a, char *b, int s); +extern void Nzero(char *a, int s); +extern void Nnot(char *a, int s); +extern void Nneg(char *a, int s); +extern void Nsl(char *a, int s); +extern void Nsr(char *a, int s); +extern void Nbit0(char *a, char b); +extern void Nbit1(char *a, char b); +extern void Nslc(char *a, int s); +extern void Nsrc(char *a, int s); +extern void Nsrb(char *a, int s); +extern void Ndbl(char *a, int s); +extern void Tbit0(char *a, char b); +extern void Tbit1(char *a, char b); +extern void Te(char *a, char *b, int s); +extern void Tne(char *a, char *b, int s); +extern void Tz(char *a, int s); +extern void Tnz(char *a, int s); +extern void Ta(char *a, char *b, int s); +extern void Tae(char *a, char *b, int s); +extern void Tb(char *a, char *b, int s); +extern void Tbe(char *a, char *b, int s); + +#define P_FIELDScl(t,fn) extern void t##F##fn(char *a, long b, int f); +#define P_FIELDScc(t,fn) extern void t##F##fn(char *a, char *b, int f); +#define P_FIELDSc(t,fn) extern void t##F##fn(char *a, int f); + +P_FIELDScl(N,unpack) +P_FIELDScl(NC,read) +P_FIELDScl(N,write) +P_FIELDScc(N,copy) +P_FIELDScc(N,xchg) +P_FIELDSc(N,inc) +P_FIELDSc(N,dec) +P_FIELDScc(N,add) +P_FIELDScc(N,sub) +P_FIELDScc(N,rsub) +P_FIELDScc(N,and) +P_FIELDScc(N,or) +P_FIELDSc(N,zero) +P_FIELDSc(N,not) +P_FIELDSc(N,neg) +P_FIELDSc(N,sr) +P_FIELDSc(N,sl) +P_FIELDSc(N,srb) +P_FIELDSc(N,dbl) + +P_FIELDScc(T,e) +P_FIELDScc(T,ne) +P_FIELDSc(T,z) +P_FIELDSc(T,nz) +P_FIELDScc(T,a) +P_FIELDScc(T,ae) +P_FIELDScc(T,b) +P_FIELDScc(T,be) + \ No newline at end of file diff --git a/EMU48.ICO b/EMU48.ICO new file mode 100644 index 0000000000000000000000000000000000000000..63834ed67f47fa3c9c6ff1ae1c0625a73ae9cbfb GIT binary patch literal 1398 zcmcgsxo*Nh6ddD7D=OSjA;2XiRcb0KNp3dKCeS801M1Yu4K*V8uM8ZDcf197!`cw& znW8L9MiI{6a84PGms)bafXO|Yl_tv#(bj$bb%1{v;D_cz+h5t=)Bni7d0hVf{_jx; z@9p}(*8Ta&jLDAe{2t#BXA)|_IU7?6(PK?}64JT;2`R1Cxn+JHmKrBRP5VI4^iG{q z)fs1jI=L+#4q<)$d{KnDj#Xc?Tj*QAmd<@nZZkb2bk74G5`^{s)Ny&YIo^l*Qk+-( cbRcTV^83`(pY7xu_?IrJDa&K#k)}O~9|@pUBme*a literal 0 HcmV?d00001 diff --git a/EMU48.MAK b/EMU48.MAK new file mode 100644 index 0000000..c097e33 --- /dev/null +++ b/EMU48.MAK @@ -0,0 +1,297 @@ +# Microsoft Visual C++ Generated NMAKE File, Format Version 2.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=Win32 Debug +!MESSAGE No configuration specified. Defaulting to Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "Win32 Release" && "$(CFG)" != "Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "EMU48.MAK" CFG="Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "Win32 Debug" +MTL=MkTypLib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "WinRel" +# PROP BASE Intermediate_Dir "WinRel" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "WinRel" +# PROP Intermediate_Dir "WinRel" +OUTDIR=.\WinRel +INTDIR=.\WinRel + +ALL : .\WinRel\EMU48.exe .\WinRel\EMU48.bsc + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE CPP /nologo /W3 /GX /YX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /c +# ADD CPP /nologo /G4 /Gr /Zp8 /MT /W3 /GX /YX /O2 /I "C:\Emu48\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR /c +# SUBTRACT CPP /Z +CPP_PROJ=/nologo /G4 /Gr /Zp8 /MT /W3 /GX /YX /O2 /I "C:\Emu48\win32" /D\ + "WIN32" /D "NDEBUG" /D "_WINDOWS" /FR$(INTDIR)/ /Fp$(OUTDIR)/"EMU48.pch"\ + /Fo$(INTDIR)/ /c +CPP_OBJS=.\WinRel/ +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /i "D:\MSVC20\MFC\INCLUDE" /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo$(INTDIR)/"EMU48.res" /i "D:\MSVC20\MFC\INCLUDE" /d\ + "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"EMU48.bsc" +BSC32_SBRS= \ + .\WinRel\HARDWARE.SBR \ + .\WinRel\MEMORY.SBR \ + .\WinRel\INSTR.SBR \ + .\WinRel\SATURN.SBR \ + .\WinRel\MAIN.SBR + +.\WinRel\EMU48.bsc : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /NOLOGO /SUBSYSTEM:windows /MACHINE:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib /NOLOGO /VERSION:0,37 /SUBSYSTEM:windows /MACHINE:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib /NOLOGO /VERSION:0,37\ + /SUBSYSTEM:windows /INCREMENTAL:no /PDB:$(OUTDIR)/"EMU48.pdb" /MACHINE:I386\ + /OUT:$(OUTDIR)/"EMU48.exe" +DEF_FILE= +LINK32_OBJS= \ + .\WinRel\HARDWARE.OBJ \ + .\WinRel\MEMORY.OBJ \ + .\WinRel\INSTR.OBJ \ + .\WinRel\SATURN.OBJ \ + .\WinRel\MAIN.OBJ \ + .\WinRel\EMU48.res + +.\WinRel\EMU48.exe : $(OUTDIR) $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "WinDebug" +# PROP BASE Intermediate_Dir "WinDebug" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "WinDebug" +# PROP Intermediate_Dir "WinDebug" +OUTDIR=.\WinDebug +INTDIR=.\WinDebug + +ALL : .\WinDebug\EMU48.exe .\WinDebug\EMU48.bsc + +$(OUTDIR) : + if not exist $(OUTDIR)/nul mkdir $(OUTDIR) + +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE CPP /nologo /W3 /GX /Zi /YX /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /c +# ADD CPP /nologo /W3 /WX /GX /Zi /YX /Od /I "C:\Emu48\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /c +CPP_PROJ=/nologo /W3 /WX /GX /Zi /YX /Od /I "C:\Emu48\win32" /D "WIN32" /D\ + "_DEBUG" /D "_WINDOWS" /FR$(INTDIR)/ /Fp$(OUTDIR)/"EMU48.pch" /Fo$(INTDIR)/\ + /Fd$(OUTDIR)/"EMU48.pdb" /c +CPP_OBJS=.\WinDebug/ +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /i "D:\MSVC20\MFC\INCLUDE" /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo$(INTDIR)/"EMU48.res" /i "D:\MSVC20\MFC\INCLUDE" /d\ + "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o$(OUTDIR)/"EMU48.bsc" +BSC32_SBRS= \ + .\WinDebug\HARDWARE.SBR \ + .\WinDebug\MEMORY.SBR \ + .\WinDebug\INSTR.SBR \ + .\WinDebug\SATURN.SBR \ + .\WinDebug\MAIN.SBR + +.\WinDebug\EMU48.bsc : $(OUTDIR) $(BSC32_SBRS) + $(BSC32) @<< + $(BSC32_FLAGS) $(BSC32_SBRS) +<< + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /NOLOGO /SUBSYSTEM:windows /DEBUG /MACHINE:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /NOLOGO /SUBSYSTEM:windows /DEBUG /MACHINE:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /NOLOGO /SUBSYSTEM:windows /INCREMENTAL:yes\ + /PDB:$(OUTDIR)/"EMU48.pdb" /DEBUG /MACHINE:I386 /OUT:$(OUTDIR)/"EMU48.exe" +DEF_FILE= +LINK32_OBJS= \ + .\WinDebug\HARDWARE.OBJ \ + .\WinDebug\MEMORY.OBJ \ + .\WinDebug\INSTR.OBJ \ + .\WinDebug\SATURN.OBJ \ + .\WinDebug\MAIN.OBJ \ + .\WinDebug\EMU48.res + +.\WinDebug\EMU48.exe : $(OUTDIR) $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Group "Source Files" + +################################################################################ +# Begin Source File + +SOURCE=.\HARDWARE.C +DEP_HARDW=\ + ..\SRC\EMU48.H + +!IF "$(CFG)" == "Win32 Release" + +.\WinRel\HARDWARE.OBJ : $(SOURCE) $(DEP_HARDW) $(INTDIR) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +.\WinDebug\HARDWARE.OBJ : $(SOURCE) $(DEP_HARDW) $(INTDIR) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\EMU48\SRC\MEMORY.C + +!IF "$(CFG)" == "Win32 Release" + +.\WinRel\MEMORY.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +.\WinDebug\MEMORY.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\EMU48\SRC\INSTR.C + +!IF "$(CFG)" == "Win32 Release" + +.\WinRel\INSTR.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +.\WinDebug\INSTR.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\EMU48\SRC\SATURN.C + +!IF "$(CFG)" == "Win32 Release" + +.\WinRel\SATURN.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +.\WinDebug\SATURN.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\EMU48\SRC\MAIN.C + +!IF "$(CFG)" == "Win32 Release" + +.\WinRel\MAIN.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +.\WinDebug\MAIN.OBJ : $(SOURCE) $(INTDIR) + $(CPP) $(CPP_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\EMU48.RC +DEP_EMU48=\ + .\EMU48.ICO\ + .\KEYBOARD.BMP\ + .\PIX4.BMP + +!IF "$(CFG)" == "Win32 Release" + +.\WinRel\EMU48.res : $(SOURCE) $(DEP_EMU48) $(INTDIR) + $(RSC) $(RSC_PROJ) $(SOURCE) + +!ELSEIF "$(CFG)" == "Win32 Debug" + +.\WinDebug\EMU48.res : $(SOURCE) $(DEP_EMU48) $(INTDIR) + $(RSC) $(RSC_PROJ) $(SOURCE) + +!ENDIF + +# End Source File +# End Group +# End Project +################################################################################ diff --git a/EMU48.RC b/EMU48.RC new file mode 100644 index 0000000..4a5c86a --- /dev/null +++ b/EMU48.RC @@ -0,0 +1,88 @@ +//Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +EMU48_ICON ICON DISCARDABLE "Emu48.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +EMU48_KEYBOARD BITMAP DISCARDABLE "Keyboard.bmp" +EMU48_PIX4 BITMAP DISCARDABLE "Pix4.bmp" +EMU48_IDLE BITMAP DISCARDABLE "EMU48_ID.BMP" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +///////////////////////////////////////////////////////////////////////////// +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +EMU48_MENU MENU DISCARDABLE +BEGIN + POPUP "&System" + BEGIN + MENUITEM "&Run", ID_SYSTEM_RUN + MENUITEM "&Save RAM", ID_SAVE + MENUITEM "E&xit WITHOUT save", ID_SYSTEM_EXIT + END + POPUP "&Help" + BEGIN + MENUITEM "&About", ID_HELP_ABOUT + END +END + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/EMU48_ID.BMP b/EMU48_ID.BMP new file mode 100644 index 0000000000000000000000000000000000000000..1a0def34fe4e98bc3c3ebcf8c385a82c3fb11b71 GIT binary patch literal 17014 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 ai`XH}%i9&sX*LaFRBC&#!X1NIy7~{8T~YM_ literal 0 HcmV?d00001 diff --git a/FETCH.H b/FETCH.H new file mode 100644 index 0000000..f2a8136 --- /dev/null +++ b/FETCH.H @@ -0,0 +1,454 @@ +switch(I[0]) { + case 0x0: switch(I[1]) { + case 0x0: goto o00; + case 0x1: goto o01; + case 0x2: goto o02; + case 0x3: goto o03; + case 0x4: goto o04; + case 0x5: goto o05; + case 0x6: goto o06; + case 0x7: goto o07; + case 0x8: goto o08; + case 0x9: goto o09; + case 0xA: goto o0A; + case 0xB: goto o0B; + case 0xC: goto o0C; + case 0xD: goto o0D; + case 0xE: switch(I[3]) { + case 0x0: goto o0Ef0; + case 0x1: goto o0Ef1; + case 0x2: goto o0Ef2; + case 0x3: goto o0Ef3; + case 0x4: goto o0Ef4; + case 0x5: goto o0Ef5; + case 0x6: goto o0Ef6; + case 0x7: goto o0Ef7; + case 0x8: goto o0Ef8; + case 0x9: goto o0Ef9; + case 0xA: goto o0EfA; + case 0xB: goto o0EfB; + case 0xC: goto o0EfC; + case 0xD: goto o0EfD; + case 0xE: goto o0EfE; + case 0xF: goto o0EfF; } goto o_invalid; + case 0xF: goto o0F; } goto o_invalid; + case 0x1: switch(I[1]) { + case 0x0: switch(I[2]) { + case 0x0: goto o100; + case 0x1: goto o101; + case 0x2: goto o102; + case 0x3: goto o103; + case 0x4: goto o104; + case 0x8: goto o108; + case 0x9: goto o109; + case 0xA: goto o10A; + case 0xB: goto o10B; + case 0xC: goto o10C; } goto o_invalid3; + case 0x1: switch(I[2]) { + case 0x0: goto o110; + case 0x1: goto o111; + case 0x2: goto o112; + case 0x3: goto o113; + case 0x4: goto o114; + case 0x8: goto o118; + case 0x9: goto o119; + case 0xA: goto o11A; + case 0xB: goto o11B; + case 0xC: goto o11C; } goto o_invalid3; + case 0x2: switch(I[2]) { + case 0x0: goto o120; + case 0x1: goto o121; + case 0x2: goto o122; + case 0x3: goto o123; + case 0x4: goto o124; + case 0x8: goto o128; + case 0x9: goto o129; + case 0xA: goto o12A; + case 0xB: goto o12B; + case 0xC: goto o12C; } goto o_invalid3; + case 0x3: switch(I[2]) { + case 0x0: goto o130; + case 0x1: goto o131; + case 0x2: goto o132; + case 0x3: goto o133; + case 0x4: goto o134; + case 0x5: goto o135; + case 0x6: goto o136; + case 0x7: goto o137; + case 0x8: goto o138; + case 0x9: goto o139; + case 0xA: goto o13A; + case 0xB: goto o13B; + case 0xC: goto o13C; + case 0xD: goto o13D; + case 0xE: goto o13E; + case 0xF: goto o13F; } goto o_invalid; + case 0x4: switch(I[2]) { + case 0x0: goto o140; + case 0x1: goto o141; + case 0x2: goto o142; + case 0x3: goto o143; + case 0x4: goto o144; + case 0x5: goto o145; + case 0x6: goto o146; + case 0x7: goto o147; + case 0x8: goto o148; + case 0x9: goto o149; + case 0xA: goto o14A; + case 0xB: goto o14B; + case 0xC: goto o14C; + case 0xD: goto o14D; + case 0xE: goto o14E; + case 0xF: goto o14F; } goto o_invalid; + case 0x5: switch(I[2]) { + case 0x0: goto o150a; + case 0x1: goto o151a; + case 0x2: goto o152a; + case 0x3: goto o153a; + case 0x4: goto o154a; + case 0x5: goto o155a; + case 0x6: goto o156a; + case 0x7: goto o157a; + case 0x8: goto o158x; + case 0x9: goto o159x; + case 0xA: goto o15Ax; + case 0xB: goto o15Bx; + case 0xC: goto o15Cx; + case 0xD: goto o15Dx; + case 0xE: goto o15Ex; + case 0xF: goto o15Fx; } goto o_invalid; + case 0x6: goto o16x; + case 0x7: goto o17x; + case 0x8: goto o18x; + case 0x9: goto o19d2; + case 0xA: goto o1Ad4; + case 0xB: goto o1Bd5; + case 0xC: goto o1Cx; + case 0xD: goto o1Dd2; + case 0xE: goto o1Ed4; + case 0xF: goto o1Fd5; } goto o_invalid; + case 0x2: goto o2n; + case 0x3: goto o3X; + case 0x4: goto o4d2; + case 0x5: goto o5d2; + case 0x6: goto o6d3; + case 0x7: goto o7d3; + case 0x8: switch(I[1]) { + case 0x0: switch(I[2]) { + case 0x0: goto o800; + case 0x1: goto o801; + case 0x2: goto o802; + case 0x3: goto o803; + case 0x4: goto o804; + case 0x5: goto o805; + case 0x6: goto o806; + case 0x7: goto o807; + case 0x8: switch(I[3]) { + case 0x0: goto o8080; + case 0x1: if (I[4]) goto o_invalid5; goto o80810; + case 0x2: goto o8082X; + case 0x3: goto o8083; + case 0x4: goto o8084n; + case 0x5: goto o8085n; + case 0x6: goto o8086n; + case 0x7: goto o8087n; + case 0x8: goto o8088n; + case 0x9: goto o8089n; + case 0xA: goto o808An; + case 0xB: goto o808Bn; + case 0xC: goto o808C; + case 0xD: goto o808D; + case 0xE: goto o808E; + case 0xF: goto o808F; } goto o_invalid; + case 0x9: goto o809; + case 0xA: goto o80A; + case 0xB: goto o80B; + case 0xC: goto o80Cn; + case 0xD: goto o80Dn; + case 0xE: goto o80E; + case 0xF: goto o80Fn; } goto o_invalid; + case 0x1: switch(I[2]) { + case 0x0: goto o810; + case 0x1: goto o811; + case 0x2: goto o812; + case 0x3: goto o813; + case 0x4: goto o814; + case 0x5: goto o815; + case 0x6: goto o816; + case 0x7: goto o817; + case 0x8: switch(I[4]) { + case 0x0: goto o818f0x; + case 0x1: goto o818f1x; + case 0x2: goto o818f2x; + case 0x3: goto o818f3x; + case 0x8: goto o818f8x; + case 0x9: goto o818f9x; + case 0xA: goto o818fAx; + case 0xB: goto o818fBx; } goto o_invalid6; + case 0x9: switch(I[4]) { + case 0x0: goto o819f0; + case 0x1: goto o819f1; + case 0x2: goto o819f2; + case 0x3: goto o819f3; } goto o_invalid5; + case 0xA: switch(I[4]) { + case 0x0: switch(I[5]) { + case 0x0: goto o81Af00; + case 0x1: goto o81Af01; + case 0x2: goto o81Af02; + case 0x3: goto o81Af03; + case 0x4: goto o81Af04; + case 0x8: goto o81Af08; + case 0x9: goto o81Af09; + case 0xA: goto o81Af0A; + case 0xB: goto o81Af0B; + case 0xC: goto o81Af0C; } goto o_invalid6; + case 0x1: switch(I[5]) { + case 0x0: goto o81Af10; + case 0x1: goto o81Af11; + case 0x2: goto o81Af12; + case 0x3: goto o81Af13; + case 0x4: goto o81Af14; + case 0x8: goto o81Af18; + case 0x9: goto o81Af19; + case 0xA: goto o81Af1A; + case 0xB: goto o81Af1B; + case 0xC: goto o81Af1C; } goto o_invalid6; + case 0x2: switch(I[5]) { + case 0x0: goto o81Af20; + case 0x1: goto o81Af21; + case 0x2: goto o81Af22; + case 0x3: goto o81Af23; + case 0x4: goto o81Af24; + case 0x8: goto o81Af28; + case 0x9: goto o81Af29; + case 0xA: goto o81Af2A; + case 0xB: goto o81Af2B; + case 0xC: goto o81Af2C; } goto o_invalid6; } goto o_invalid5; + case 0xB: switch(I[3]) { + case 0x2: goto o81B2; + case 0x3: goto o81B3; + case 0x4: goto o81B4; + case 0x5: goto o81B5; + case 0x6: goto o81B6; + case 0x7: goto o81B7; } goto o_invalid4; + case 0xC: goto o81C; + case 0xD: goto o81D; + case 0xE: goto o81E; + case 0xF: goto o81F; } goto o_invalid; + case 0x2: goto o82n; + case 0x3: goto o83n; + case 0x4: goto o84n; + case 0x5: goto o85n; + case 0x6: goto o86n; + case 0x7: goto o87n; + case 0x8: goto o88n; + case 0x9: goto o89n; + case 0xA: switch(I[2]) { + case 0x0: goto o8A0; + case 0x1: goto o8A1; + case 0x2: goto o8A2; + case 0x3: goto o8A3; + case 0x4: goto o8A4; + case 0x5: goto o8A5; + case 0x6: goto o8A6; + case 0x7: goto o8A7; + case 0x8: goto o8A8; + case 0x9: goto o8A9; + case 0xA: goto o8AA; + case 0xB: goto o8AB; + case 0xC: goto o8AC; + case 0xD: goto o8AD; + case 0xE: goto o8AE; + case 0xF: goto o8AF;} goto o_invalid; + case 0xB: switch(I[2]) { + case 0x0: goto o8B0; + case 0x1: goto o8B1; + case 0x2: goto o8B2; + case 0x3: goto o8B3; + case 0x4: goto o8B4; + case 0x5: goto o8B5; + case 0x6: goto o8B6; + case 0x7: goto o8B7; + case 0x8: goto o8B8; + case 0x9: goto o8B9; + case 0xA: goto o8BA; + case 0xB: goto o8BB; + case 0xC: goto o8BC; + case 0xD: goto o8BD; + case 0xE: goto o8BE; + case 0xF: goto o8BF; } goto o_invalid; + case 0xC: goto o8Cd4; + case 0xD: goto o8Dd5; + case 0xE: goto o8Ed4; + case 0xF: goto o8Fd5; } goto o_invalid; + case 0x9: if (I[1]<8) { switch(I[2]) { + case 0x0: goto o9a0; + case 0x1: goto o9a1; + case 0x2: goto o9a2; + case 0x3: goto o9a3; + case 0x4: goto o9a4; + case 0x5: goto o9a5; + case 0x6: goto o9a6; + case 0x7: goto o9a7; + case 0x8: goto o9a8; + case 0x9: goto o9a9; + case 0xA: goto o9aA; + case 0xB: goto o9aB; + case 0xC: goto o9aC; + case 0xD: goto o9aD; + case 0xE: goto o9aE; + case 0xF: goto o9aF; } goto o_invalid; + } else { switch(I[2]) { + case 0x0: goto o9b0; + case 0x1: goto o9b1; + case 0x2: goto o9b2; + case 0x3: goto o9b3; + case 0x4: goto o9b4; + case 0x5: goto o9b5; + case 0x6: goto o9b6; + case 0x7: goto o9b7; + case 0x8: goto o9b8; + case 0x9: goto o9b9; + case 0xA: goto o9bA; + case 0xB: goto o9bB; + case 0xC: goto o9bC; + case 0xD: goto o9bD; + case 0xE: goto o9bE; + case 0xF: goto o9bF; } goto o_invalid; } + case 0xA: if (I[1]<8) { switch(I[2]) { + case 0x0: goto oAa0; + case 0x1: goto oAa1; + case 0x2: goto oAa2; + case 0x3: goto oAa3; + case 0x4: goto oAa4; + case 0x5: goto oAa5; + case 0x6: goto oAa6; + case 0x7: goto oAa7; + case 0x8: goto oAa8; + case 0x9: goto oAa9; + case 0xA: goto oAaA; + case 0xB: goto oAaB; + case 0xC: goto oAaC; + case 0xD: goto oAaD; + case 0xE: goto oAaE; + case 0xF: goto oAaF; } goto o_invalid; + } else { switch(I[2]) { + case 0x0: goto oAb0; + case 0x1: goto oAb1; + case 0x2: goto oAb2; + case 0x3: goto oAb3; + case 0x4: goto oAb4; + case 0x5: goto oAb5; + case 0x6: goto oAb6; + case 0x7: goto oAb7; + case 0x8: goto oAb8; + case 0x9: goto oAb9; + case 0xA: goto oAbA; + case 0xB: goto oAbB; + case 0xC: goto oAbC; + case 0xD: goto oAbD; + case 0xE: goto oAbE; + case 0xF: goto oAbF; } goto o_invalid; } + case 0xB: if (I[1]<8) { switch(I[2]) { + case 0x0: goto oBa0; + case 0x1: goto oBa1; + case 0x2: goto oBa2; + case 0x3: goto oBa3; + case 0x4: goto oBa4; + case 0x5: goto oBa5; + case 0x6: goto oBa6; + case 0x7: goto oBa7; + case 0x8: goto oBa8; + case 0x9: goto oBa9; + case 0xA: goto oBaA; + case 0xB: goto oBaB; + case 0xC: goto oBaC; + case 0xD: goto oBaD; + case 0xE: goto oBaE; + case 0xF: goto oBaF; } goto o_invalid; + } else { switch(I[2]) { + case 0x0: goto oBb0; + case 0x1: goto oBb1; + case 0x2: goto oBb2; + case 0x3: goto oBb3; + case 0x4: goto oBb4; + case 0x5: goto oBb5; + case 0x6: goto oBb6; + case 0x7: goto oBb7; + case 0x8: goto oBb8; + case 0x9: goto oBb9; + case 0xA: goto oBbA; + case 0xB: goto oBbB; + case 0xC: goto oBbC; + case 0xD: goto oBbD; + case 0xE: goto oBbE; + case 0xF: goto oBbF; } goto o_invalid;} + case 0xC: switch(I[1]) { + case 0x0: goto oC0; + case 0x1: goto oC1; + case 0x2: goto oC2; + case 0x3: goto oC3; + case 0x4: goto oC4; + case 0x5: goto oC5; + case 0x6: goto oC6; + case 0x7: goto oC7; + case 0x8: goto oC8; + case 0x9: goto oC9; + case 0xA: goto oCA; + case 0xB: goto oCB; + case 0xC: goto oCC; + case 0xD: goto oCD; + case 0xE: goto oCE; + case 0xF: goto oCF; } goto o_invalid; + case 0xD: switch(I[1]) { + case 0x0: goto oD0; + case 0x1: goto oD1; + case 0x2: goto oD2; + case 0x3: goto oD3; + case 0x4: goto oD4; + case 0x5: goto oD5; + case 0x6: goto oD6; + case 0x7: goto oD7; + case 0x8: goto oD8; + case 0x9: goto oD9; + case 0xA: goto oDA; + case 0xB: goto oDB; + case 0xC: goto oDC; + case 0xD: goto oDD; + case 0xE: goto oDE; + case 0xF: goto oDF; } goto o_invalid; + case 0xE: switch(I[1]) { + case 0x0: goto oE0; + case 0x1: goto oE1; + case 0x2: goto oE2; + case 0x3: goto oE3; + case 0x4: goto oE4; + case 0x5: goto oE5; + case 0x6: goto oE6; + case 0x7: goto oE7; + case 0x8: goto oE8; + case 0x9: goto oE9; + case 0xA: goto oEA; + case 0xB: goto oEB; + case 0xC: goto oEC; + case 0xD: goto oED; + case 0xE: goto oEE; + case 0xF: goto oEF; } goto o_invalid; + case 0xF: switch(I[1]) { + case 0x0: goto oF0; + case 0x1: goto oF1; + case 0x2: goto oF2; + case 0x3: goto oF3; + case 0x4: goto oF4; + case 0x5: goto oF5; + case 0x6: goto oF6; + case 0x7: goto oF7; + case 0x8: goto oF8; + case 0x9: goto oF9; + case 0xA: goto oFA; + case 0xB: goto oFB; + case 0xC: goto oFC; + case 0xD: goto oFD; + case 0xE: goto oFE; + case 0xF: goto oFF; } goto o_invalid; } goto o_invalid; + \ No newline at end of file diff --git a/HARDWARE.C b/HARDWARE.C new file mode 100644 index 0000000..a21031f --- /dev/null +++ b/HARDWARE.C @@ -0,0 +1,896 @@ +/* + * Copyright (C) 1995 Sebastien Carlier + */ + +#define NEW 1 +#define WIN32_LEAN_AND_MEAN +#include +#undef IN +#undef OUT +#include +#include +#include "emu48.h" +#include "resource.h" +#include +#include + +#define DEBUG 1 +#include "pcpdebug.h" +DEBUG_PRINTF_FUNCDEF("emu48.log") + +#define W_WIDTH 264 +#define W_HEIGHT 396 +#define KBD_UP 144 +#define KBD_DOWN 342 +#define KBD_LEFT 30 +#define KBD_RIGHT 234 + +HANDLE hInst; +HANDLE hWindow; +HANDLE hThreadEmulate; +HANDLE hKeyboard, hPix4, hIdle; +HANDLE hMemoryDC; +DWORD ThreadID1; +CHAR Buf[80]; +display_t display; +char kbd_row[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; +int KDN, KDN_rising_edge, IR15X; +int thread_suspended = 0; +int keyprocessed = 0; + +LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); +void about_box(); + +/*************************************************************************\ +* +* FUNCTION: WinMain(HANDLE, HANDLE, LPSTR, int) +* +\*************************************************************************/ +int PASCAL WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + MSG msg; + WNDCLASS wc; + UNREFERENCED_PARAMETER( lpCmdLine ); + UNREFERENCED_PARAMETER( hPrevInstance ); + + // check if Win32s, if so, display notice and terminate + if(GetVersion()&0x80000000 && (GetVersion()&0xFF)==3) { + MessageBox( NULL, + "This application cannot run on Windows 3.1.\n" + "This application will now terminate.", + "HP48SX", + MB_OK | MB_ICONSTOP | MB_SETFOREGROUND ); + return 1; + } + + hInst = hInstance; + + wc.style = CS_BYTEALIGNCLIENT; + wc.lpfnWndProc = (WNDPROC)MainWndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, "Emu48_Icon"); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = NULL; + wc.lpszMenuName = "Emu48_Menu"; + wc.lpszClassName = "Emu48Class"; + + RegisterClass(&wc); + + hWindow = CreateWindow("Emu48Class", "HP48SX", + WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, + W_WIDTH, W_HEIGHT, NULL, NULL, hInstance, NULL); + + ShowWindow(hWindow, nCmdShow); + + while (GetMessage (&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage (&msg); // Dispatch message to window. + Sleep(0); + } + + return msg.wParam; // Returns value from PostQuitMessage. +} + +/*************************************************************************\ +* +* FUNCTION: MainWndProc (HWND, UINT, WPARAM, LPARAM) +* +\*************************************************************************/ +LRESULT CALLBACK MainWndProc (HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + short x, y; + HDC hDC; + + switch (message) { + case WM_CREATE : +/* about_box(); */ + hKeyboard = LoadBitmap(hInst, "Emu48_Keyboard"); + hPix4 = LoadBitmap(hInst, "Emu48_Pix4"); + hIdle = LoadBitmap(hInst, "Emu48_Idle"); + hDC = GetDC(hwnd); + hMemoryDC = CreateCompatibleDC(hDC); + SelectObject(hMemoryDC, hPix4); + ReleaseDC(hwnd, hDC); + load(); + if (display.pointer==NULL) display.pointer = rom; + saturn_speed = 5000; + // Create the emulator thread + hThreadEmulate = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)emulate, + NULL, 0, (LPDWORD)&ThreadID1); + if (!hThreadEmulate) { + wsprintf(Buf, "Error in creating Emulator thread: %d", GetLastError()); + MessageBox (hwnd, Buf, "WM_CREATE", MB_OK); + } + return 0; + case WM_RBUTTONDOWN: + case WM_LBUTTONDOWN: // Left mouse button pressed + x = ((short*)&lParam)[0]; + y = ((short*)&lParam)[1]; + if (xKBD_RIGHT) break; + if (yKBD_DOWN) break; + x = (x-KBD_LEFT)/34; + y = (y-KBD_UP)/22; + kbd_handler((y<<4)|x,1); + return 0; +#if NEW + + case WM_CHAR: + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + { + MSG msg; int i; + msg.hwnd = hwnd; + msg.message = message; + msg.wParam = wParam; + msg.lParam = lParam; + dsx(lParam); + dsx(wParam); + i = translatekeys(&msg); + /* capture system key */ + if (i && message == WM_SYSKEYDOWN) + return 0; + } + break; +#else + + + case WM_CHAR: + ds(("WM_CHAR\n")) + dsx(lParam); + dsx(wParam); + presskeys(lParam, wParam, 1); + break; + + case WM_KEYDOWN: + ds(("WM_KEYDOWN\n")) + dsx(lParam); + dsx(wParam); + if (lParam & 0x1000000L) + presskeys(lParam, wParam, 1); + break; +#endif + + + case WM_LBUTTONUP: // Left mouse button released + x = ((short*)&lParam)[0]; + y = ((short*)&lParam)[1]; + if (xKBD_RIGHT) break; + if (yKBD_DOWN) break; + x = (x-KBD_LEFT)/34; + y = (y-KBD_UP)/22; + kbd_handler((y<<4)|x,0); + return 0; + + case WM_ERASEBKGND: // Erase background + + hDC = GetDC(hwnd); + PatBlt(hDC, 0, 0, W_WIDTH, W_HEIGHT, BLACKNESS); + PatBlt(hDC, 0, 0, 262, 129, WHITENESS); + SelectObject(hMemoryDC, hKeyboard); + BitBlt(hDC, KBD_LEFT, KBD_UP, 204, 198, hMemoryDC, 0, 0, SRCCOPY); + if (thread_suspended) { + SelectObject(hMemoryDC, hIdle); + BitBlt(hDC, 0, 0, 262, 128, hMemoryDC, 0, 0, SRCCOPY); + } + ReleaseDC(hwnd, hDC); + SelectObject(hMemoryDC, hPix4); + if (!thread_suspended) { + display_redraw(); + display_ann(); + } + return 0; + case WM_CLOSE: + save(); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case ID_SYSTEM_EXIT: + DestroyWindow(hwnd); + break; + case ID_SAVE: + save(); + break; + + case ID_HELP_ABOUT: + about_box(); + break; + } + return 0; + case WM_DESTROY: + TerminateThread(hThreadEmulate, 0); + DeleteDC(hMemoryDC); + DeleteObject(hKeyboard); + PostQuitMessage (0); + return 0; + } + return DefWindowProc (hwnd, message, wParam, lParam); +} + + +/*************************************************************************\ +* +* FUNCTION: display_error() +* +\*************************************************************************/ +void about_box() { + + display_warning( + "Emu48 version "VERSION", Copyright (C) 1995 Sebastien Carlier\n" + "This is free software, and you are welcome to redistribute it\n" + "under certain conditions; see COPYING for details.\n"); + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_error() +* +\*************************************************************************/ +void display_error(char *s) { + + MessageBox(NULL,s,"Emu48",MB_OK|MB_ICONSTOP|MB_SETFOREGROUND); + exit(1); +} + +/*************************************************************************\ +* +* FUNCTION: display_warning() +* +\*************************************************************************/ +void display_warning(char *s) { + + MessageBox(NULL,s,"Emu48",MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND); + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_redraw() +* +\*************************************************************************/ +void display_redraw() { + int y; + + display.line = 0; + display.lcounter = display.lcntsave; + display.pointer = nibble_ptr(display.start1); + display.disoffs = 0; + if (display.dispon) + for (y=0; y<64; y++) display_line(); + else + display_clear(); + if (display.boffset&4) + display.end1 = display.start1 + (display.lcntsave+1)*(display.loffset+36); + else + display.end1 = display.start1 + (display.lcntsave+1)*(display.loffset+34); + if (display.end1 < display.start1) { + display.start12 = display.end1; + display.end1 = display.start1; + } else display.start12 = display.start1; + display.end2 = display.start2 + (63 - display.lcntsave)*34; + display.touched = 0; + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_line() +* +\*************************************************************************/ +#define SET4PIXELS(x,y,m) BitBlt(hDC, 2*x, y, 8, 2, hMemoryDC,0, (m)*2, SRCCOPY); +void display_line() { + HDC hDC; + char *ptr; + int x, y; + + if (!display.dispon) return; + +// c = display.contrast; + y = 2*display.line; + hDC = GetDC(hWindow); + if (display.disoffs) { + ptr = display.pointer; + for (x=0; x<128; x+=4) + SET4PIXELS(x,y,*(ptr++)); + SET4PIXELS(x,y,*ptr & 7); + } else { + if (display.boffset&4) display.pointer++; + ptr = display.pointer; + switch (display.boffset&3) { + case 0: + for (x=0; x<128; x+=4) + SET4PIXELS(x,y,*(ptr++)); + SET4PIXELS(x,y,*ptr & 7); + break; + case 1: + SET4PIXELS(0,y, *(ptr++) >> 1); + for (x=3; x<127; x+=4) + SET4PIXELS(x,y,*(ptr++)); + SET4PIXELS(x,y,*ptr); + break; + case 2: + SET4PIXELS(0,y, *(ptr++) >> 2); + for (x=2; x<130; x+=4) + SET4PIXELS(x,y,*(ptr++)); + SET4PIXELS(x,y,*ptr & 1); + break; + case 3: + SET4PIXELS(0,y, *(ptr++) >> 3); + for (x=1; x<129; x+=4) + SET4PIXELS(x,y,*(ptr++)); + SET4PIXELS(x,y,*ptr & 3); + break; + } + } + ReleaseDC(hWindow, hDC); + + display_next(); + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_plot1(long d, char m) +* +\*************************************************************************/ +void display_plot1(long d, char m) { + int x, y, w; + HDC hDC; + + d -= display.start12; + w = 34 + display.loffset; + if (display.boffset&4) w+=2; + if (w==0) return; + if (w<0) + y = d / w + display.lcntsave + 1; + else + y = d / w; + if (y<0) return; + if (y>display.lcntsave) return; + x = (d % w) * 4; + if (display.boffset) { + x -= display.boffset; + if (x<0) return; + } + if (x>130) return; + hDC = GetDC(hWindow); + SET4PIXELS(x,y*2,m) + ReleaseDC(hWindow, hDC); + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_plot2(long d, char m) +* +\*************************************************************************/ +void display_plot2(long d, char m) { + int x, y; + HDC hDC; + + d -= display.start2; + y = display.lcntsave + (d / 34) + 1; + x = (d % 34) * 4; + if (x==128) m&=7; + hDC = GetDC(hWindow); + SET4PIXELS(x,y*2,m) + ReleaseDC(hWindow, hDC); + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_next() +* +\*************************************************************************/ +void display_next() { + + display.line++; + if (display.line >= 64) { /* new refresh cycle */ + display.line = 0; + display.lcounter = display.lcntsave; + display.pointer = nibble_ptr(display.start1); + display.disoffs = 0; + return; + } + if (display.disoffs) { + display.pointer += 34; + return; + } + if (display.lcounter) { + display.lcounter--; + display.pointer += 34 + display.loffset; + if (display.boffset&4) display.pointer++; + return; + } + display.pointer = nibble_ptr(display.start2); + display.disoffs = 1; + return; +} + +void init_lcd() { + + display.pointer = rom; + return; +} + +void exit_lcd() { + + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_çlear() +* +\*************************************************************************/ +void display_clear() { + HDC hDC; + + hDC = GetDC(hWindow); + PatBlt(hDC, 0, 0, 262, 128, WHITENESS); + ReleaseDC(hWindow, hDC); + return; +} + +/*************************************************************************\ +* +* FUNCTION: display_ann() +* +\*************************************************************************/ +void display_ann() { + HDC hDC; + unsigned short c; + + hDC = GetDC(hWindow); + c = *(unsigned short*)(ioram+0x0b); + if (!(c&0x0800)) c=0; + PatBlt(hDC, 16+32*1, 132, 4, 4, (c&0x001)?WHITENESS:BLACKNESS); + PatBlt(hDC, 16+32*2, 132, 4, 4, (c&0x002)?WHITENESS:BLACKNESS); + PatBlt(hDC, 16+32*3, 132, 4, 4, (c&0x004)?WHITENESS:BLACKNESS); + PatBlt(hDC, 16+32*4, 132, 4, 4, (c&0x008)?WHITENESS:BLACKNESS); + PatBlt(hDC, 16+32*5, 132, 4, 4, (c&0x100)?WHITENESS:BLACKNESS); + PatBlt(hDC, 16+32*6, 132, 4, 4, (c&0x200)?WHITENESS:BLACKNESS); + ReleaseDC(hWindow, hDC); + return; +} + +/*************************************************************************\ +* +* FUNCTION: keyboard_invert() +* +\*************************************************************************/ +void kbd_invert(int x, int y) { + HDC hDC; + + hDC = GetDC(hWindow); + PatBlt(hDC, 1+KBD_LEFT+34*x, 1+KBD_UP+22*y, 33, 21, DSTINVERT); + ReleaseDC(hWindow, hDC); + return; +} + +/*************************************************************************\ +* +* FUNCTION: keyboard_invert2() +* +\*************************************************************************/ +void kbd_invert2(int x, int y) { + HDC hDC; + + hDC = GetDC(hWindow); + PatBlt(hDC, 1+KBD_LEFT+34*x, 1+KBD_UP+22*y, 67, 21, DSTINVERT); + ReleaseDC(hWindow, hDC); + return; +} + +/*************************************************************************\ +* +* FUNCTION: keyboard_handler(unsigned char scancode, int press) +* +\*************************************************************************/ +void kbd_handler(int scancode, int press) +{ + int mask, row; + +dsx(scancode); + + if (scancode == 0x81) /*ON*/ { + if (press) { + if (!IR15X) { kbd_invert(scancode&0xf, scancode>>4); IR15X = 0x8000; } + } else { + if (IR15X) { kbd_invert(scancode&0xf, scancode>>4); IR15X = 0x0000; } + } + } + if (ioram[0x2f]&1 == 0) return; + switch (scancode) { + case 0x00: row = 1; mask = 0x0010; break; + case 0x01: row = 8; mask = 0x0010; break; + case 0x02: row = 8; mask = 0x0008; break; + case 0x03: row = 8; mask = 0x0004; break; + case 0x04: row = 8; mask = 0x0002; break; + case 0x05: row = 8; mask = 0x0001; break; + case 0x10: row = 2; mask = 0x0010; break; + case 0x11: row = 7; mask = 0x0010; break; + case 0x12: row = 7; mask = 0x0008; break; + case 0x13: row = 7; mask = 0x0004; break; + case 0x14: row = 7; mask = 0x0002; break; + case 0x15: row = 7; mask = 0x0001; break; + case 0x20: row = 0; mask = 0x0010; break; + case 0x21: row = 6; mask = 0x0010; break; + case 0x22: row = 6; mask = 0x0008; break; + case 0x23: row = 6; mask = 0x0004; break; + case 0x24: row = 6; mask = 0x0002; break; + case 0x25: row = 6; mask = 0x0001; break; + case 0x30: row = 3; mask = 0x0010; break; + case 0x31: row = 5; mask = 0x0010; break; + case 0x32: row = 5; mask = 0x0008; break; + case 0x33: row = 5; mask = 0x0004; break; + case 0x34: row = 5; mask = 0x0002; break; + case 0x35: row = 5; mask = 0x0001; break; + case 0x40: row = 4; mask = 0x0010; break; + case 0x41: row = 4; mask = 0x0010; break; + case 0x42: row = 4; mask = 0x0008; break; + case 0x43: row = 4; mask = 0x0004; break; + case 0x44: row = 4; mask = 0x0002; break; + case 0x45: row = 4; mask = 0x0001; break; + case 0x51: row = 3; mask = 0x0020; break; + case 0x52: row = 3; mask = 0x0008; break; + case 0x53: row = 3; mask = 0x0004; break; + case 0x54: row = 3; mask = 0x0002; break; + case 0x55: row = 3; mask = 0x0001; break; + case 0x61: row = 2; mask = 0x0020; break; + case 0x62: row = 2; mask = 0x0008; break; + case 0x63: row = 2; mask = 0x0004; break; + case 0x64: row = 2; mask = 0x0002; break; + case 0x65: row = 2; mask = 0x0001; break; + case 0x71: row = 1; mask = 0x0020; break; + case 0x72: row = 1; mask = 0x0008; break; + case 0x73: row = 1; mask = 0x0004; break; + case 0x74: row = 1; mask = 0x0002; break; + case 0x75: row = 1; mask = 0x0001; break; + case 0x82: row = 0; mask = 0x0008; break; + case 0x83: row = 0; mask = 0x0004; break; + case 0x84: row = 0; mask = 0x0002; break; + case 0x85: row = 0; mask = 0x0001; break; + case 0x50: + kbd_invert(scancode&0xf, scancode>>4); + if (press) { + HDC hDC; + SuspendThread(hThreadEmulate); + thread_suspended = 1; + hDC = GetDC(hWindow); + SelectObject(hMemoryDC, hIdle); + BitBlt(hDC, 0, 0, 262, 128, hMemoryDC, 0, 0, SRCCOPY); + ReleaseDC(hWindow, hDC); + SelectObject(hMemoryDC, hPix4); + } + return; + case 0x60: + kbd_invert(scancode&0xf, scancode>>4); + if (press) { + thread_suspended = 0; + ResumeThread(hThreadEmulate); + display_redraw(); + display_ann(); + } + return; + case 0x70: + kbd_invert(scancode&0xf, scancode>>4); + return; + case 0x80: + kbd_invert(scancode&0xf, scancode>>4); + return; + default: return; + } + if (press) { + if ((kbd_row[row]&mask)==0) { + KDN_rising_edge = 1; + KDN++; + if ((scancode==0x40)||(scancode==0x41)) + kbd_invert2(0, 4); + else + kbd_invert(scancode&0xf, scancode>>4); + kbd_row[row]|=mask; + } + } else { + if (kbd_row[row]&mask) { + KDN--; + if ((scancode==0x40)||(scancode==0x41)) + kbd_invert2(0, 4); + else + kbd_invert(scancode&0xf, scancode>>4); + kbd_row[row]&=~mask; + } + } + return; +} + +void presskeys(unsigned lparam, unsigned wparam, int down) +{ + int scancode = -1; + int state=0; + state = (GetKeyState(VK_LSHIFT) & 0x8000) ? 0x100 : 0; + state |= (GetKeyState(VK_RSHIFT) & 0x8000) ? 0x200 : 0; + state |= (GetKeyState(VK_CONTROL) & 0x8000) ? 0x400 : 0; + state |= (GetKeyState(VK_MENU) & 0x8000) ? 0x800 : 0; +dsx(wparam); + if (isalpha(wparam)) wparam = toupper(wparam); +dsx(wparam); + + if (wparam >= 'A' && wparam <= 'X') + { + int row = (wparam - 'A') / 6; + int col = (wparam - 'A') % 6; + scancode = row * 0x10 + col; + } + else if (!(lparam & 0x1000000L) ) + { + switch (wparam) + { + case '\n': + case '\r': scancode = 0x41; break; + case '0': scancode = 0x82; break; + case '1': scancode = 0x72; break; + case '2': scancode = 0x73; break; + case '3': scancode = 0x74; break; + case '4': scancode = 0x62; break; + case '5': scancode = 0x63; break; + case '6': scancode = 0x64; break; + case '7': scancode = 0x52; break; + case '8': scancode = 0x53; break; + case '9': scancode = 0x54; break; + case '.': scancode = 0x83; break; + case ' ': scancode = 0x84; break; + case '+': scancode = 0x85; break; + case '-': scancode = 0x75; break; + case '*': scancode = 0x65; break; + case '/': scancode = 0x55; break; + case 'Y': scancode = 0x42; break; + case '\'': scancode = 0x20; break; + case 'Z': scancode = 0x43; break; + case 0x1B: scancode = 0x81; break; + case '\b': scancode = 0x45; break; + case '\t': scancode = 0x15; break; + default: + break; + } + } + else if ((lparam & 0x1000000L) || (wparam >= VK_F1 && wparam <= VK_F6)) switch (wparam) + { + case VK_RETURN: scancode = 0x41; break; + case VK_LEFT: scancode = 0x23; break; + case VK_UP: scancode = 0x14; break; + case VK_RIGHT: scancode = 0x25; break; + case VK_DOWN: scancode = 0x24; break; + case VK_CONTROL: scancode = 0x51; break; + case VK_PRIOR: if (!(state & 0x300)) scancode = 0x61; break; + case VK_NEXT: if (!(state & 0x300)) scancode = 0x71; break; + case VK_F1: scancode = 0x00; break; + case VK_F2: scancode = 0x01; break; + case VK_F3: scancode = 0x02; break; + case VK_F4: scancode = 0x03; break; + case VK_F5: scancode = 0x04; break; + case VK_F6: scancode = 0x05; break; + } +dsx(state); + if (scancode != -1) + { +/* if (state & 0x100) + presskeys(0x01000000, VK_PRIOR, 0); + else if (state & 0x200) + presskeys(0x01000000, VK_NEXT, 0); */ + kbd_handler(scancode, 1); + Sleep(100); + kbd_handler(scancode, 0); + } +} + +void update_in() { + + IN = IR15X; + if (OUT & 0x001) IN|=kbd_row[0]; + if (OUT & 0x002) IN|=kbd_row[1]; + if (OUT & 0x004) IN|=kbd_row[2]; + if (OUT & 0x008) IN|=kbd_row[3]; + if (OUT & 0x010) IN|=kbd_row[4]; + if (OUT & 0x020) IN|=kbd_row[5]; + if (OUT & 0x040) IN|=kbd_row[6]; + if (OUT & 0x080) IN|=kbd_row[7]; + if (OUT & 0x100) IN|=kbd_row[8]; + return; +} + +void init_keyboard() { + + return; +} + +void exit_keyboard() { + + return; +} +#if NEW +#define IGNORE_WM_CHAR 0x8000 + +int keyevent(long key) +{ + int scancode = -1, retval = 0; +dsx(key); + if (key >= 'a' && key <= 'z') key = toupper(key); +dsx(key); +dsx(KEYC_PGDN); + if (key >= 'A' && key <= 'X') + { + int row = (key - 'A') / 6; + int col = (key - 'A') % 6; + scancode = row * 0x10 + col; + } + else switch (key) + { + case '0': scancode = 0x82; break; + case '1': scancode = 0x72; break; + case '2': scancode = 0x73; break; + case '3': scancode = 0x74; break; + case '4': scancode = 0x62; break; + case '5': scancode = 0x63; break; + case '6': scancode = 0x64; break; + case '7': scancode = 0x52; break; + case '8': scancode = 0x53; break; + case '9': scancode = 0x54; break; + case '.': scancode = 0x83; break; + case ' ': scancode = 0x84; break; + case '+': scancode = 0x85; break; + case '-': scancode = 0x75; break; + case '*': scancode = 0x65; break; + case '/': scancode = 0x55; break; + case 'Y': scancode = 0x42; break; + case '\'': scancode = 0x20; break; + case 'Z': scancode = 0x43; break; + case '`': scancode = 0x51; break; + case '\n': + case '\r': scancode = 0x41; retval = 1; break; + case 0x1B: scancode = 0x81; retval = 1; break; + case '\b': scancode = 0x45; retval = 1; break; + case '\\': + case '\t': scancode = 0x15; retval = 1; break; + + case KEYC_LEFT: scancode = 0x23; break; + case KEYC_UP: scancode = 0x14; break; + case KEYC_RIGHT: scancode = 0x25; break; + case KEYC_DOWN: scancode = 0x24; break; + case KEYC_DELETE: scancode = 0x44; break; + case KEYC_PGUP: scancode = 0x61; break; + case KEYC_PGDN: scancode = 0x71; break; + case KEYF_FKEY+1: + case KEYF_FKEY+2: + case KEYF_FKEY+3: + case KEYF_FKEY+4: + case KEYF_FKEY+5: + case KEYF_FKEY+6: + scancode = key-KEYF_FKEY-1; retval = 1; break; + + default: break; + } +dsx(scancode); + if (scancode != -1) + { +/* if (state & 0x100) + presskeys(0x01000000, VK_PRIOR, 0); + else if (state & 0x200) + presskeys(0x01000000, VK_NEXT, 0); */ + kbd_handler(scancode, 1); + Sleep(100); + kbd_handler(scancode, 0); + } + return retval; +} + +int translatekeys(void * vmsg) +{ + MSG *msg = (MSG*) vmsg; + int state=0; + + switch(msg->message) + { + case WM_CHAR: + if (keyprocessed & IGNORE_WM_CHAR) + { + keyprocessed &= ~IGNORE_WM_CHAR; + return 1; + } + else + return keyevent(KEYFROMASCII(msg->wParam)); + + case WM_SYSKEYDOWN: + case WM_KEYDOWN: + state = (GetKeyState(VK_SHIFT) & 0x8000) ? KEYF_SHIFT : 0; + state |= (GetKeyState(VK_CONTROL) & 0x8000) ? KEYF_CTRL : 0; + state |= (GetKeyState(VK_MENU) & 0x8000) ? KEYF_ALT: 0; + if (msg->wParam >= VK_F1 && msg->wParam <= VK_F12) + /* Return function key */ + return keyevent((msg->wParam-(VK_F1-1)+KEYF_FKEY)|state); + else + { + int i; + long k; + switch (msg->wParam) + { + case VK_PRIOR: + k = (KEYC_PAGEUP|state); break; + case VK_NEXT: + k = (KEYC_PAGEDOWN|state); break; + case VK_END: + k = (KEYC_END|state); break; + case VK_HOME: + k = (KEYC_HOME|state); break; + case VK_LEFT: + k = (KEYC_LEFT|state); break; + case VK_UP: + k = (KEYC_UP|state); break; + case VK_RIGHT: + k = (KEYC_RIGHT|state); break; + case VK_DOWN: + k = (KEYC_DOWN|state); break; + case VK_INSERT: + k = (KEYC_INSERT|state); break; + case VK_DELETE: + k = (KEYC_DELETE|state); break; + default: + k = (KEYFROMSCAN(msg->wParam)|state); break; + } + i = keyevent(k); + if (i) + keyprocessed |= IGNORE_WM_CHAR; + return i; + } + } + return 0; +} +#endif +/******** BEEP ********/ + +void update_out() { +/* char c; + + __asm__("inb $0x61, %0":"=a"(c)); + if (OUT&0x800) + c|=0x02; + else + c&=0xfc; + __asm__("outb %0, $0x61"::"a"(c)); + return; +*/ +} diff --git a/HARDWARE.H b/HARDWARE.H new file mode 100644 index 0000000..c2641a9 --- /dev/null +++ b/HARDWARE.H @@ -0,0 +1,86 @@ +/* + * Copyright (C) 1995 Sebastien Carlier + */ + + +#define keyboard_update() ; +#define INLINE _inline + +typedef struct { + int line; + long start1, start12, end1; + long start2, end2; + int loffset; + int boffset; + int lcntsave; + int lcounter; + int dispon; + int contrast; + int noscan; + char *pointer; + int disoffs; + int touched; +} display_t; + +extern display_t display; +extern int font[256]; +extern int KDN, KDN_rising_edge; +extern int IR15X; +extern char Buf[80]; + +void setport1(const char *newstring); +extern void init_lcd(); +extern void exit_lcd(); +extern void display_redraw(); +extern void display_line(); +extern void display_next(); +extern void display_clear(); +extern void display_plot1(long d, char m); +extern void display_plot2(long d, char m); +extern void display_ann(); +extern void init_keyboard(); +extern void exit_keyboard(); +extern void kbd_invert(int x, int y); +extern void kbd_handler(int scancode, int press); +extern void update_in(); +extern void update_out(); +extern void display_warning(char *s); +extern void display_error(char *s); +extern void presskeys(unsigned lparam, unsigned wparam, int down); + +#if NEW + +#define KEYFROMASCII(ascii) ((unsigned long)(unsigned char) (ascii)) +#define KEYFROMSCAN(scan ) (((unsigned long)(unsigned char) (scan)) | KEYF_SCAN) +#define KEYFROMKEYC(scan ) (((unsigned long)(unsigned short) (keyc)) | KEYF_KEYC) +#define KEYFROMCOMMAND(command) (((unsigned long) (command)) | KEYF_COMMAND) + +#define KEYF_COMMAND 0x10000L // Cannot be enumerated: compiler bug ?!? +#define KEYF_UP 0x20000L + +enum KEYFLAGS { KEYF_SCAN=0x1000, KEYF_KEYC=0x2000, KEYF_FKEY=KEYF_KEYC+100, + KEYF_SHIFT=0x100, KEYF_CTRL=0x400, KEYF_ALT=0x800 } ; + +#define KEYC_BACKSPACE 8 +#define KEYC_BS KEYC_BACKSPACE +#define KEYC_TAB 9 +#define KEYC_ENTER 13 +#define KEYC_ESC 27 +#define KEYC_DEL (KEYF_KEYC+146) +#define KEYC_DELETE KEYC_DEL +#define KEYC_INSERT (KEYF_KEYC+148) +#define KEYC_INS KEYC_INSERT +#define KEYC_END (KEYF_KEYC+149) +#define KEYC_DOWN (KEYF_KEYC+150) +#define KEYC_PAGEDOWN (KEYF_KEYC+151) +#define KEYC_PGDN KEYC_PAGEDOWN +#define KEYC_LEFT (KEYF_KEYC+152) +#define KEYC_RIGHT (KEYF_KEYC+154) +#define KEYC_HOME (KEYF_KEYC+155) +#define KEYC_UP (KEYF_KEYC+156) +#define KEYC_PAGEUP (KEYF_KEYC+157) +#define KEYC_PGUP KEYC_PAGEUP + + +int translatekeys(void *); +#endif diff --git a/INSTR.C b/INSTR.C new file mode 100644 index 0000000..cde8cde --- /dev/null +++ b/INSTR.C @@ -0,0 +1,516 @@ +/* + * Copyright (C) 1995 Sebastien Carlier + */ + +#include +#include "emu48.h" + +#define SIMPLE_DBL 1 +#define SIMPLE_XCHG 1 +#define FAST_WRITE 1 + +INLINE long Npack(char *a, int s) { + long r = 0; + + while (s--) r = (r<<4)|a[s]; + return r; +} + +INLINE void Nunpack(char *a, long b, int s) { + int i; + + for (i=0; i>=4; } + return; +} + +INLINE void Ncopy(char *a, char *b, int s) { + + memcpy(a,b,s); + return; +} + +INLINE void Nxchg(char *a, char *b, int s) { +#if SIMPLE_XCHG + char X[16]; + + memcpy(X, b, s); + memcpy(b, a, s); + memcpy(a, X, s); +#else + char t; + + while (s--) { t=a[s]; a[s]=b[s]; b[s]=t; } +#endif + return; +} + +INLINE void Ninc(char *a, int s) { + int i; + + for (i=0; i>2]&=~(1<<(b&3)); + return; +} + +INLINE void Nbit1(char *a, char b) { + + a[b>>2]|=1<<(b&3); + return; +} + +INLINE void Nslc(char *a, int s) { + char c; + + c = a[s-1]; + while (--s) a[s] = a[s-1]; + *a = c; + return; +} + +INLINE void Nsrc(char *a, int s) { + char c = *a; + + while (--s) { *a=a[1]; a++; } + *a = c; + return; +} + +INLINE void Nsrb(char *a, int s) { + + if ((*a)&1) HST|=SB; + while (--s) { + (*a)>>=1; + if (a[1]&1) (*a)|=8; + a++; + } + *a>>=1; + return; +} + +INLINE void Ndbl(char *a, int s) { +#if SIMPLE_DBL + char b[16]; + memcpy(b, a, s); + Nadd(a, b, s); +#else + char c, carry = 0; + int i; + + for (i=0; i=MODE) + { c-=MODE; carry = 1; } + else + carry = 0; + a[i] = c; + } + CARRY = carry; +#endif + return; +} + +INLINE void Tbit0(char *a, char b) { + + if (a[b>>2]&(1<<(b&3))) + CARRY = 0; + else + CARRY = 1; + return; +} + +INLINE void Tbit1(char *a, char b) { + + if (a[b>>2]&(1<<(b&3))) + CARRY = 1; + else + CARRY = 0; + return; +} + +INLINE void Te(char *a, char *b, int s) { + + while (s--) if (a[s]!=b[s]) { CARRY = 0; return; } + CARRY = 1; + return; +} + +INLINE void Tne(char *a, char *b, int s) { + + while (s--) if (a[s]!=b[s]) { CARRY=1; return; } + CARRY = 0; + return; +} + +INLINE void Tz(char *a, int s) { + + while (s--) if (a[s]!=0) { CARRY = 0; return; } + CARRY = 1; + return; +} + +INLINE void Tnz(char *a, int s) { + + while (s--) if (a[s]!=0) { CARRY=1; return; } + CARRY = 0; + return; +} + +INLINE void Ta(char *a, char *b, int s) { + + while (--s) if (a[s]!=b[s]) break; + CARRY = (a[s]>b[s]); + return; +} + +INLINE void Tb(char *a, char *b, int s) { + + while (--s) if (a[s]!=b[s]) break; + CARRY = (a[s]=b[s]); + return; +} + +INLINE void Tbe(char *a, char *b, int s) { + + while (--s) if (a[s]!=b[s]) break; + CARRY = (a[s]<=b[s]); + return; +} + +INLINE char read_nibble(long d) { + + if (ISMODULE(1, d)) return data[1][d-base[1]]; + if (CARDSTATUS&2) if (ISMODULE(3, d)) return data[3][d-base[3]]; + if (CARDSTATUS&1) if (ISMODULE(4, d)) return data[4][d-base[4]]; + return rom[d]; +} + +INLINE char* nibble_ptr(long d) { + + if (ISMODULE(1, d)) return data[1]+d-base[1]; + if (CARDSTATUS&2) if (ISMODULE(3, d)) return data[3]+d-base[3]; + if (CARDSTATUS&1) if (ISMODULE(4, d)) return data[4]+d-base[4]; + return rom+d; +} + +INLINE char read_nibble_crc(long d) { + char n; + + if (ISMODULE(0, d)) return read_io(d-base[0]); + if (ISMODULE(1, d)) {n=data[1][d-base[1]];CRC(n);return n;} + if (ISMODULE(2, d)) {bank_switch((int)((d-base[2])/2));return 7;} + if (CARDSTATUS&2) if (ISMODULE(3, d)) {n=data[3][d-base[3]];CRC(n);return n;} + if (CARDSTATUS&1) if (ISMODULE(4, d)) {n=data[4][d-base[4]];CRC(n);return n;} + n=rom[d]; + CRC(n); + return n; +} + +INLINE void write_nibble(long d, char c) { + +#if FAST_WRITE + if (ISMODULE(1, d)) { + if (display.dispon) { + if ((d>=display.start12)&&(d=display.start2)&&(d=display.start12)&&(d=display.start2)&&(dTBWS%QWF< z`trrT@QK6e+qZA{=7pd7nSTD{5q|NHB7S^Qd-~e74-rh$)7-Y_4-qWlO!IDEzyZ7~ zXE=gj>I8cXnTvF^bqQxb?^>LFg}RJ0W5|qg4!<6!GWhvv#A)0y2dB!m)i_h-!5SQN z-@%&q`GYuDw$a)cZ*Gj%B4N8}w~(JO_jxHlZBU5Qws#0#$2rX}$CnvDYVS}R_T-RP zaR70A*#rkmjfH$MZtw#*bm=qvflnWdGkbnc$B*^L+{n*NYDiWIA{sVmF+cNVKI31s zPVJc!{TLV3kAfn(TrL!N)Y0)UpBHf;Z*g8cf>M4tLrW^T(4H2DYM;=dAfw09eTt43 z_!JFVvK?S7tqmNV6S(pRR<<~I_>;i&hiYq&4{|U}QP)L(;LGK#fLNc(9|)A6#9@Bu zPkP8Ja&QGs(ZZuTZn|=d0QmtKsoRea5quKa0nCTcn?dQ)yl&I8S$+n!yeaa6?o+6L1E*C3OZJUqoRLd$d)uGE!BNoQURif~f5xZ`<`07R z;Qa4ue)@Ebmb?e&N8ogW+J$J-T&8S%E{WPsk5pE}t;pgcJAA;V>UiH={j29WI9hND<`cvuFp;&L(9q zq*T;7MqFPHgkv923tfjC11-Q6#NiS+6qwX-z|U)La(x~YAmUJ6Hp3x_02p`#=)i%8 z#4(z5t3L`)ha;JScM!1Q7{6?81=x64=?`?Y`H|&tMNScigs<@@t)e~4IHik@8sjLr zMS%6KCObHO@SU$;2YNFImg>R>qV`>H&a&%VI+N|*c@a0VJR0{52O zhSO^qfJX;gpvC)i@TY93Xf$YHr)3nh9jbLS1I#~~*#3pztNH2q=oS73rKY#|lOqG? zM}^Z`w|+g?Mm16b_`umz zA&|~~k{^(UBn~+3>+4&K6XTd4kd6y<2ad5HZCX%-xm4pouo~w8(&Iofzx9VW7kt34 zJ8`Hcad3!0=B5_;4z3IO9vl+QCO_K$0cZ0~E#V-CWIb{kal1AT!dS#M5A9$R0rK+H8^vhpV8VnuFDxTpfEV&237H>X3O>9b)3_DI=-Cn zq$%RoMga+H+X_M4Keayuz~9UFs;19({Z&*CNfUU@Z;CWmXS-O15?WUFfFh6{v6*x);8IKVh_owDN=z&({r+(fD2DUg4l!WrJ z)qVPV=R4i&JZpAuZs9v6F@CgFe)cGzcpqeHUZ$zgh*KBt9iM06U&!{89&qUmkz!h0 zH3{b%|A++6u6g;S#i?IQnTdlT1qZh!hGTpVf@%48wS>aK8!_}J3U~JQ1DU^zl@~i4 z5bUs_lWGNw4k;k;0?xc=$X@lQ(y`yu{K}tMf))NSKa8#uke| zd!wzyN&Pmm*LL{e*e= zIAJsnj-k-Lp;r0HS2HLuf1DJp!)djSXDhTU@SRo<*8>(x6=Bp%E6iOV?cQXqv@*@Y z?qoo5V=x#Fi-vp5IGL`%(Ica)I4}b>8Jc|%m>15H9w0wZe}vA{DRDA`8Y3LKA@j;e z*Jyo6*I5259C}x8_=v8-dfXixBVgSpo>bxJtsp{OiyN*LE~7BnHdt7b{=_UYf!$$d ztK|m-&G=2292)qIdB7d8;ASpBa@zbLYWYV7aF{Sn;l!zRE*)<*-#WfCoNn@f>+$}M z=0Tgs6&WNCL1j;(F`?LlDu4h4A)tU|J-X~E*zflRO8lUlqH7FsAxbcCP?S>%7!<3& z&b`{{r5|gT~Q=Q?YDUL&b!g^YZ>o7hfJ}A2or}0OGp>hz1!h!YSvDZIKqNn5n}BH8f3Yns8t$jE#}(b0onCT@vs#xe=04GQ~Lu_SgF-~ z8?5bd27j=TQ&4D$`I9mU>OR6rGt^Jf&k;Dlpguo`GhSCJeW(^$Zt}xGRy`QEwh^ak zn+Sl@5u8ov&7kzbcQnzP1oBpB+bHPffodUG2EKPTG-!wR7$_3oakc8hQt#*X<%Jw4 zMaL43Xh>9Y;ZTC=E;Xv#u5cMgd`CT;%V0>4BU|WC;&3+#J3u5SJ&tXli1Hb*eHKf6 zhXp-|Y=7P z?ojk_SXkozRGi_8KS$yKA1$=xy_|w#njLu<6Q}cs`6(i3@r|S|KY71j#mSkhc@S3E z_tin!?Uo*h8wwvE_r&`-ERGapy@XnAOQ2w$g~iB%u5qrMNZa_v62CZotTClCDPfQ} z`UADxtcg7&;ZP7Q1wm*G2eX_%RAo58KKdAX%nRJ_Q4@|fg|O!m*20x@#d!>ee9VcH ztffxkoZuJ)Xiyx}2{tdo!n$PdAT4NGF0~a8shku|B{JU>`(VLJb@g{Rtdy zOVo{gr^V6zBQ6s)OFV?;;~AI6PEJh9{sy(sj4Uoa&V*ZAkI38**eHMa$Scep_IDx( zSp@XlO!Oz!m_J$PnbkXj#HjxTIEnlGAQPUiy>D;2fqU+LmN1AXcf*0 z3+pC0IrV`c3&CK?g1| +#include + +#define BUFSIZE 256 +#define NEXTFIELD {s=p; while ((p +#include +#include +#include "emu48.h" + +char A[16]={0,}; +char B[16]={0,}; +char C[16]={0,}; +char D[16]={0,}; +char R0[16]={0,}; +char R1[16]={0,}; +char R2[16]={0,}; +char R3[16]={0,}; +char R4[16]={0,}; +char ST[4]={0,}; +char HST=0, P=0; +int OUT = 0, IN = 0; +int SHUTDN=0, INTP=0, INTE=0, INTD=0, rstkp = 0, MODE = 16, CARRY=0; +long rstk[8] = {0,}; +long pc=0, d0=0, d1=0; +char CARDSTATUS = 0; + +char *eprom; +char *rom = NULL, *ram, *port1, *port2; +char *data[6]={NULL,NULL,NULL,NULL,NULL,NULL}; +int ucfg[6]={1,1,1,1,1,0}, bank1, bank2; +long base[6]={0x00100,0x80000,0x7F000,0x7E000,0x7E000,0x00000}; +long size[6]={0x00040,0x40000,0x01000,0x01000,0x01000,0x100000}; +unsigned short crc; +unsigned long t1=0xf, t2=0xffffffff; +unsigned long saturn_speed = 0; +int quit = 0; +int load_state = 1; + +void calibrate_timer() { + + saturn_speed = 4000; + return; +} + +int main(int argc, char *argv[]) { + int i; + char c; + + printf("Emu48 version "VERSION", Copyright (C) 1995 Sebastien Carlier\n"); + printf("This is free software, and you are welcome to redistribute it\n"); + printf("under certain conditions; see COPYING for details.\n"); + for (i=1; i +#include +#include +#include +#include +#include "emu48.h" + +/* Modules : + * 0 IO RAM + * 1 RAM + * 2 bank switcher + * 3 PORT 1 + * 4 PORT 2 + * 5 ROM + */ + +/* ucfg value : + * 0 configured + * 1 unconfigured + * 2 got size only + */ + +#define PORT1DEF "port1" + +char PORT1[100] = PORT1DEF; + +void setport1(const char *newstring) +{ + if (newstring) + { + if (*newstring) + strcpy(PORT1, newstring); + else + strcpy(PORT1, PORT1DEF); + } +} + +int readport1(const char *portname) +{ + /* CARDSTATUS: P2W P1W P2C P1C */ + long i, s; + unsigned char c; + FILE *in = fopen(PORT1, "rb"); + if (in!=NULL) + { + fseek(in, 0, SEEK_END); + s = ftell(in) * 2; + fseek(in, 0, SEEK_SET); +#ifdef DOSX286 + port1 = (char*)_halloc(262144L,1); +#else + port1 = (char*)malloc(262144L); +#endif + if (port1!=NULL) { + for (i=0; i>4)&0xf); + } + data[3] = port1; + CARDSTATUS |= 0xA; + if (s!=262144L) memset(port1, 0, 16); + } + else display_warning("Not enough memory for port1"); + fclose(in); + return 0; + } + return -1; +} + +int load() +{ + FILE *in; + long i, s; + unsigned char c; + int swap; + + if (load_state) { + in = fopen("saturn", "rb"); + if (in != NULL) { + fread(A, 16, 1, in); + fread(B, 16, 1, in); + fread(C, 16, 1, in); + fread(D, 16, 1, in); + fread(R0, 16, 1, in); + fread(R1, 16, 1, in); + fread(R2, 16, 1, in); + fread(R3, 16, 1, in); + fread(R4, 16, 1, in); + if (!pc) fread(&pc, 4, 1, in); else fseek(in, 4, SEEK_CUR); + fread(&d0, 4, 1, in); + fread(&d1, 4, 1, in); + fread(&OUT, 4, 1, in); + fread(&IN, 4, 1, in); + fread(ST, 4, 1, in); + HST = (char)fgetc(in); + if (!P) P = (char)fgetc(in); else fseek(in, 1, SEEK_CUR); + CARRY = fgetc(in); + MODE = fgetc(in); + INTP = fgetc(in); + INTE = fgetc(in); + INTD = fgetc(in); + SHUTDN = fgetc(in); + fread(rstk, 32, 1, in); + rstkp = fgetc(in); + for (i=0; i<5; i++) { + ucfg[i] = fgetc(in); + fread(&base[i], 4, 1, in); + fread(&size[i], 4, 1, in); + } + fread(ioram, 64, 1, in); + t1 = fgetc(in); + fread(&t2, 4, 1, in); + fread(&crc, 4, 1, in); + fread(&display, sizeof(display_t), 1, in); + fclose(in); + } + } + +#ifdef DOSX286 + rom = (char*)_halloc(1048576L,1); +#else + rom = (char*)malloc(1048576L); +#endif + + if (rom==NULL) display_error("Not enough memory for rom.\n"); + in = fopen("rom", "rb"); + if (in==NULL) { + free(rom); + display_error("The rom dump file 'rom' is missing.\n"); + } + fseek(in,0,SEEK_END); + s = ftell(in)*2; + fseek(in,0,SEEK_SET); + c = (char)fgetc(in); + switch (c) { + case 0x32: swap = 0; break; + case 0x23: swap = 1; break; + default: swap = 0; break; + } + ungetc(c, in); + if (!swap) + for (i=0; i>4)&0xf); + } + else + for (i=0; i>4)&0xf); + rom[i++] = (char)(c&0xf); + } + fclose(in); + data[5] = rom; + +#ifdef DOSX286 + ram = (char*)_halloc(262144L,1); +#else + ram = (char*)malloc(262144L); +#endif + if (ram==NULL) display_error("Not enough memory for ram.\n"); + in = fopen("ram", "rb"); + if (in!=NULL) { + c = (char)fgetc(in); + switch (c) { + case 0x3F: swap = 0; break; + case 0xF3: swap = 1; break; + default: swap = 0; break; + } + ungetc(c, in); + if (!swap) + for (i=0; i<262144L;) { + c = (char)fgetc(in); + ram[i++] = (char)(c&0xf); + ram[i++] = (char)((c>>4)&0xf); + } + else + for (i=0; i<262144L;) { + c = (char)fgetc(in); + ram[i++] = (char)((c>>4)&0xf); + ram[i++] = (char)(c&0xf); + } + fclose(in); + } + data[1] = ram; + + readport1(PORT1); + /* CARDSTATUS: P2W P1W P2C P1C */ + in = fopen("port2", "rb"); + if (in!=NULL) { + fseek(in, 0, SEEK_END); + s = ftell(in) * 2; + fseek(in, 0, SEEK_SET); +#ifdef DOSX286 + port2 = (char*)_halloc(262144L,1); +#else + port2 = (char*)malloc(262144L); +#endif + if (port2!=NULL) { + for (i=0; i>4)&0xf); + } + data[4] = port2; + CARDSTATUS |= 0x5; + } else display_warning("Not enough memory for port2"); + fclose(in); + } + + return 0; +} + +int save() { + FILE *out; + long i; + + out = fopen("ram", "wb"); + if (out==NULL) return 1; + for (i=0; i<262144L; i+=2) fputc(ram[i]|(ram[i+1]<<4), out); + fclose(out); + + if (CARDSTATUS&2) bank_save(port1,PORT1,bank1); + + if (CARDSTATUS&1) bank_save(port2,"port2",bank2); + + out = fopen("saturn", "wb"); + fwrite(A, 16, 1, out); + fwrite(B, 16, 1, out); + fwrite(C, 16, 1, out); + fwrite(D, 16, 1, out); + fwrite(R0, 16, 1, out); + fwrite(R1, 16, 1, out); + fwrite(R2, 16, 1, out); + fwrite(R3, 16, 1, out); + fwrite(R4, 16, 1, out); + fwrite(&pc, 4, 1, out); + fwrite(&d0, 4, 1, out); + fwrite(&d1, 4, 1, out); + fwrite(&OUT, 4, 1, out); + fwrite(&IN, 4, 1, out); + fwrite(ST, 4, 1, out); + fputc(HST, out); + fputc(P, out); + fputc(CARRY, out); + fputc(MODE, out); + fputc(INTP, out); + fputc(INTE, out); + fputc(INTD, out); + fputc(SHUTDN, out); + fwrite(rstk, 32, 1, out); + fputc(rstkp, out); + for (i=0; i<5; i++) { + fputc(ucfg[i], out); + fwrite(&base[i], 4, 1, out); + fwrite(&size[i], 4, 1, out); + } + fwrite(ioram, 64, 1, out); + fputc((int)t1, out); + fwrite(&t2, 4, 1, out); + fwrite(&crc, 4, 1, out); + fwrite(&display, sizeof(display_t), 1, out); + fclose(out); + + return 0; +} + +void bank_save(char *mem, char *bn, int bank) { + char name[12]; + FILE *out; + long i; + + if (bank) + sprintf(name,"%s.%i",bn,bank); + else + strcpy(name, bn); + out = fopen(name, "rb"); + if (out==NULL) return; + fclose(out); + out = fopen(name, "wb"); + if (out==NULL) { + printf("Failed to write %s\n", name); + return; + } + for (i=0; i<262144L; i+=2) fputc(mem[i]|(mem[i+1]<<4), out); + fclose(out); + return; +} + +void bank_load(char *mem, char *bn, int bank) { + char name[12], c; + FILE *in; + long i, s; + + if (bank) + sprintf(name,"%s.%i",bn,bank); + else + strcpy(name, bn); + in = fopen(name, "rb"); + if (in==NULL) { + printf("Failed to read %s\n", name); + return; + } + fseek(in, 0, SEEK_END); + s = ftell(in) * 2; + fseek(in, 0, SEEK_SET); + for (i=0; i>4)&0xf); + } + fclose(in); + return; +} + +void bank_switch(int bank) { + + if (bank<32) /* port 1 */ { + if (bank1 == bank) return; + bank_save(port1,PORT1,bank1); + bank1 = bank; + bank_load(port1,PORT1,bank1); + } else { + bank -= 32; + if (bank2 == bank) return; + bank_save(port2,"port2",bank2); + bank2 = bank; + bank_load(port2,"port2",bank2); + } + return; +} + +/******** IO RAM ********/ + +char ioram[64] = { + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0xC,0x0, + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xf, 0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf +}; + +char read_io(long d) { + char c; + + switch (d) { + case 0x04: c = (char)(crc); break; + case 0x05: c = (char)(crc>>4); break; + case 0x06: c = (char)(crc>>8); break; + case 0x07: c = (char)(crc>>12); break; + case 0x0F: c = CARDSTATUS; break; + case 0x14: return ioram[d]; + case 0x15: ioram[0x11]&=0xe; return ioram[d]; + case 0x16: /**/ + case 0x17: /**/ return 3; + case 0x18: /**/ + case 0x19: /**/ display_warning("Nibbles #118/#119 read."); + case 0x20: /**/ + case 0x21: /**/ + case 0x22: /**/ + case 0x23: /**/ + case 0x24: /**/ + case 0x25: /**/ + case 0x26: /**/ + case 0x27: /**/ return 3; + case 0x28: c = (char)display.lcounter; break; + case 0x29: c = (char)(display.lcounter>>4); break; + case 0x30: /**/ + case 0x31: /**/ + case 0x32: /**/ + case 0x33: /**/ + case 0x34: /**/ c = 3; break; + case 0x37: c = (char)(t1); break; + case 0x38: c = (char)(t2); break; + case 0x39: c = (char)(t2>>4); break; + case 0x3A: c = (char)(t2>>8); break; + case 0x3B: c = (char)(t2>>12); break; + case 0x3C: c = (char)(t2>>16); break; + case 0x3D: c = (char)(t2>>20); break; + case 0x3E: c = (char)(t2>>24); break; + case 0x3F: c = (char)(t2>>28); break; + default: + return ioram[d]; + } + return (char)(c&0xf); +} + +void write_io(long d, char c) { + + switch (d) { + + /* 00100 = NS:DISPIO + * 00100 @ Display bit offset and DON [DON OFF2 OFF1 OFF0] + * 00100 @ 3 nibs for display offset (scrolling), DON=Display ON + */ + case 0x00: + if (display.boffset!=(c&7)) { + display.touched = 1; + display.boffset = c&7; + } + if (display.dispon!=(c>>3)) { + display.touched = 1; + display.dispon = c>>3; + } + break; + + /* 00101 = NS:CONTRLSB + * 00101 @ Contrast Control [CON3 CON2 CON1 CON0] + * 00101 @ Higher value = darker screen + */ + case 0x01: + if ((display.contrast&0xf)!=c) { + display.contrast &= 0x10; + display.contrast |= c; + display.touched = 1; + } + break; + + /* 00102 = NS:DISPTEST + * 00102 @ Display test [VDIG LID TRIM CON4] [LRT LRTD LRTC BIN] + * 00102 @ Normally zeros + */ + case 0x02: + if ((display.contrast>>4)!=(c&1)) { + display.contrast &= 0x0f; + display.contrast |= (c<<4)&0x10; + display.touched = 1; + } + break; + case 0x03: + /*display.noscan = (c>>3)&1;*/ + /*display.touched = 1;*/ + break; + + /* 00104 = HP:CRC + * 00104 @ 16 bit hardware CRC (104-107) (X^16+X^12+X^5+1) + * 00104 @ crc = ( crc >> 4 ) ^ ( ( ( crc ^ nib ) & 0x000F ) * 0x1081 ); + */ + case 0x04: crc=crc&0xfff0;crc|=(c); return; + case 0x05: crc=crc&0xff0f;crc|=(c<<4); return; + case 0x06: crc=crc&0xf0ff;crc|=(c<<8); return; + case 0x07: crc=crc&0x0fff;crc|=(c<<12); return; + + /* 00108 = NS:POWERSTATUS + * 00108 @ Low power registers (108-109) + * 00108 @ [LB2 LB1 LB0 VLBI] (read only) + * 00108 @ LowBat(2) LowBat(1) LowBat(S) VeryLowBat + */ + case 0x08: + return; + + /* 00109 = NS:POWERCTRL + * 00109 @ [ELBI EVLBI GRST RST] (read/write) + */ + case 0x09: + break; + + /* 0010A = NS:MODE + * 0010A @ Mode Register (read-only) + */ + case 0x0A: + break; + + /* 0010B = HP:ANNCTRL + * 0010B @ Annunciator control [LA4 LA3 LA2 LA1] = [ alarm alpha -> <- ] + */ + case 0x0B: + case 0x0C: + ioram[d] = c; display_ann(); return; + + /* 0010D = NS:BAU + * 0010D @ Serial baud rate [UCK BD2 BD1 BD0] (bit 3 is read-only) + * 0010D @ 3 bits = {1200 1920 2400 3840 4800 7680 9600 15360} + */ + case 0x0D: + c &= 7; + break; + + /* 0010E = NS:CARDCTRL + * 0010E @ [ECDT RCDT SMP SWINT] (read/write) + * 0010E @ Enable Card Det., Run Card Det., Set Module Pulled, Software interrupt + */ + case 0x0E: + if (c&1) INTERRUPT("SW"); + if (c&2) { ioram[0x19] = 2; HST|=MP; INTERRUPT("MP"); } + if (c&8) + if (c&4) ioram[0x0F] = 0; + break; + + /* 0010F = NS:CARDSTATUS + * 0010F @ [P2W P1W P2C P1C] (read-only) Port 2 writable .. Port 1 inserted + */ + case 0x0F: + return; + + /* 00110 = HP:IOC + * 00110 @ Serial I/O Control [SON ETBE ERBF ERBZ] + * 00110 @ Serial On, Interrupt On Recv.Buf.Empty, Full, Buzy + */ + case 0x10: + break; + + /* 00111 = HP:RCS + * 00111 @ Serial Receive Control/Status [RX RER RBZ RBF] (bit 3 is read-only) + */ + case 0x11: + c &= 7; + c |= ioram[0x11]&8; + break; + + /* 00112 = HP:TCS + * 00112 @ Serial Transmit Control/Status [BRK LPB TBZ TBF] + */ + case 0x12: + break; + + /* 00113 = HP:CRER + * 00113 @ Serial Clear RER (writing anything clears RER bit) + */ + case 0x13: + ioram[0x11]&=0xB; + return; + + /* 00114 = HP:RBR + * 00114 @ Serial Receive Buffer Register (Reading clears RBF bit) + * 00114 @ [RX RER RBZ RBF] + */ + case 0x14: + case 0x15: + return; + + /* 00116 = HP:TBR + * 00116 @ Serial Transmit Buffer Register (Writing sets TBF bit) + */ + case 0x016: break; + case 0x017: + ioram[0x12] |= 1; + break; + + /* 00118 = NS:SRR + * 00118 @ Service Request Register (read-only) + * 00118 @ [ISQR TSQR USRQ VSRQ] [KDN NINT2 NINT LSRQ] + */ + case 0x18: + case 0x19: + return; + + /* 0011A = HP:IRC + * 0011A @ IR Control Register [IRI EIRU EIRI IRE] (bit 3 is read-only) + * 0011A @ IR Input, Enable IR UART mode, Enable IR Interrupt, IR Event + */ + case 0x1A: + c &= 7; + c |= ioram[0x1A]&8; + break; + + /* 0011B = NS:BASENIBOFF + * 0011B @ Used as addressto get BASENIB from 11F to the 5th nibble + */ + case 0x1B: + return; + + /* 0011C = NS:LCR + * 0011C @ Led Control Register [LED ELBE LBZ LBF] (Setting LED is draining) + */ + case 0x1C: + break; + + /* 0011D = NS:LBR + * 0011D @ Led Buffer Register [0 0 0 LBO] (bits 1-3 read zero) + */ + case 0x1D: + c &= 1; + break; + + /* 0011E = NS:SCRATCHPAD + * 0011E @ Scratch pad (11F is BASEIB, 7 or F for base memory) + */ + case 0x1E: + break; + + /* 0011F = NS:BASENIB + */ + case 0x1F: + break; + + /* 00120 = NS:DISPADDR + * 00120 @ Display Start Address (write only) + * 00120 @ bit 0 is ignored (display must start on byte boundary) + */ + case 0x20: + if ((display.start1&0x0000F)!=c) { + display.start1 = (display.start1&0xFFFF0)|(c&0xE); + display.touched = 1; + } + break; + case 0x21: + if (((display.start1&0x000F0)>>4)!=c) { + display.start1=(display.start1&0xFFF0F)|(c<<4); + display.touched = 1; + } + break; + case 0x22: + if (((display.start1&0x00F00)>>8)!=c) { + display.start1=(display.start1&0xFF0FF)|(c<<8); + display.touched = 1; + } + break; + case 0x23: + if (((display.start1&0x0F000)>>12)!=c) { + display.start1=(display.start1&0xF0FFF)|(c<<12); + display.touched = 1; + } + break; + case 0x24: + if (((display.start1&0xF0000)>>16)!=c) { + display.start1=(display.start1&0x0FFFF)|(c<<16); + display.touched = 1; + } + break; + + /* 00125 = NS:LINEOFFS + * 00125 @ Display Line offset (write only) (no of bytes skipped after each line) + * 00125 @ MSG sign extended + */ + case 0x25: c &= 0xe; + case 0x26: + case 0x27: + ioram[d] = c; + display.loffset = (int)Npack(ioram+0x25, 3); + if (display.loffset&0x800) display.loffset = display.loffset - 0x1000; + display.touched = 1; + return; + + /* 00128 = NS:LINECOUNT + * 00128 @ Display Line Counter and miscellaneous (28-29) + * 00128 @ [LC3 LC2 LC1 LC0] [DA19 M32 LC5 LC4] + * 00128 @ Line counter 6 bits -> max = 2^6-1 = 63 = disp height + * 00128 @ Normally has 55 -> Menu starts at display row 56 + */ + case 0x28: + if ((display.lcntsave&0xf)!=c) { + display.lcntsave=(display.lcntsave&0x30)|c; + display.touched = 1; + } + break; + case 0x29: + if ((display.lcntsave&0x30)!=((c&3)<<4)) { + display.lcntsave=(display.lcntsave&0x0f)|((c&3)<<4); + display.touched = 1; + } + break; + + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + return; + + /* 0012E = NS:TIMER1CTRL + * 0012E @ TIMER1 Control [SRQ WKE INT XTRA] + */ + case 0x2E: + c &= 0xE; + break; + + /* 0012F = NS:TIMER2CTRL + * 0012F @ TIMER2 Control [SRQ WKE INT RUN] + */ + case 0x2F: + break; + + /* 00130 = NS:MENUADDR + * 00130 @ Display Secondary Start Address (write only) (30-34) + * 00130 @ Menu Display Address, no line offsets + */ + case 0x30: + if ((display.start2&0x0000F)!=c) { + display.start2=(display.start2&0xFFFF0)|(c&0xE); + display.touched = 1; + } + break; + case 0x31: + if (((display.start2&0x000F0)>>4)!=c) { + display.start2=(display.start2&0xFFF0F)|(c<<4); + display.touched = 1; + } + break; + case 0x32: + if (((display.start2&0x00F00)>>8)!=c) { + display.start2=(display.start2&0xFF0FF)|(c<<8); + display.touched = 1; + } + break; + case 0x33: + if (((display.start2&0x0F000)>>12)!=c) { + display.start2=(display.start2&0xF0FFF)|(c<<12); + display.touched = 1; + } + break; + case 0x34: + if (((display.start2&0xF0000)>>16)!=c) { + display.start2=(display.start2&0x0FFFF)|(c<<16); + display.touched = 1; + } + break; + + case 0x35: + case 0x36: + return; + + /* 00137 = HP:TIMER1 + * 00137 @ Decremented 16 times/s + */ + case 0x37: + t1 = c; + break; + + /* 00138 = HP:TIMER2 + * 00138 @ hardware timer (38-3F), decremented 8192 times/s + */ + case 0x38: t2=(t2&0xFFFFFFF0)|c; break; + case 0x39: t2=(t2&0xFFFFFF0F)|(c<<4); break; + case 0x3A: t2=(t2&0xFFFFF0FF)|(c<<8); break; + case 0x3B: t2=(t2&0xFFFF0FFF)|(c<<12); break; + case 0x3C: t2=(t2&0xFFF0FFFF)|(c<<16); break; + case 0x3D: t2=(t2&0xFF0FFFFF)|(c<<20); break; + case 0x3E: t2=(t2&0xF0FFFFFF)|(c<<24); break; + case 0x3F: t2=(t2&0x0FFFFFFF)|(c<<28); break; + default: return; + } + ioram[d] = c; + return; +} + \ No newline at end of file diff --git a/MEMORY.C b/MEMORY.C new file mode 100644 index 0000000..f1b7dc0 --- /dev/null +++ b/MEMORY.C @@ -0,0 +1,728 @@ +/* + * Copyright (C) 1995 Sebastien Carlier + */ + +#include +#include +#include +#include +#include +#include "emu48.h" + +/* Modules : + * 0 IO RAM + * 1 RAM + * 2 bank switcher + * 3 PORT 1 + * 4 PORT 2 + * 5 ROM + */ + +/* ucfg value : + * 0 configured + * 1 unconfigured + * 2 got size only + */ + +#define PORT1DEF "port1" + +char PORT1[100] = PORT1DEF; + +void setport1(const char *newstring) +{ + if (newstring) + { + if (*newstring) + strcpy(PORT1, newstring); + else + strcpy(PORT1, PORT1DEF); + } +} + +int load() { + FILE *in; + long i, s; + unsigned char c; + int swap; + + if (load_state) { + in = fopen("saturn", "rb"); + if (in != NULL) { + fread(A, 16, 1, in); + fread(B, 16, 1, in); + fread(C, 16, 1, in); + fread(D, 16, 1, in); + fread(R0, 16, 1, in); + fread(R1, 16, 1, in); + fread(R2, 16, 1, in); + fread(R3, 16, 1, in); + fread(R4, 16, 1, in); + if (!pc) fread(&pc, 4, 1, in); else fseek(in, 4, SEEK_CUR); + fread(&d0, 4, 1, in); + fread(&d1, 4, 1, in); + fread(&OUT, 4, 1, in); + fread(&IN, 4, 1, in); + fread(ST, 4, 1, in); + HST = (char)fgetc(in); + if (!P) P = (char)fgetc(in); else fseek(in, 1, SEEK_CUR); + CARRY = fgetc(in); + MODE = fgetc(in); + INTP = fgetc(in); + INTE = fgetc(in); + INTD = fgetc(in); + SHUTDN = fgetc(in); + fread(rstk, 32, 1, in); + rstkp = fgetc(in); + for (i=0; i<5; i++) { + ucfg[i] = fgetc(in); + fread(&base[i], 4, 1, in); + fread(&size[i], 4, 1, in); + } + fread(ioram, 64, 1, in); + t1 = fgetc(in); + fread(&t2, 4, 1, in); + fread(&crc, 4, 1, in); + fread(&display, sizeof(display_t), 1, in); + fclose(in); + } + } + +#ifdef DOSX286 + rom = (char*)_halloc(1048576L,1); +#else + rom = (char*)malloc(1048576L); +#endif + + if (rom==NULL) display_error("Not enough memory for rom.\n"); + in = fopen("rom", "rb"); + if (in==NULL) { + free(rom); + display_error("The rom dump file 'rom' is missing.\n"); + } + fseek(in,0,SEEK_END); + s = ftell(in)*2; + fseek(in,0,SEEK_SET); + c = (char)fgetc(in); + switch (c) { + case 0x32: swap = 0; break; + case 0x23: swap = 1; break; + default: swap = 0; break; + } + ungetc(c, in); + if (!swap) + for (i=0; i>4)&0xf); + } + else + for (i=0; i>4)&0xf); + rom[i++] = (char)(c&0xf); + } + fclose(in); + data[5] = rom; + +#ifdef DOSX286 + ram = (char*)_halloc(262144L,1); +#else + ram = (char*)malloc(262144L); +#endif + if (ram==NULL) display_error("Not enough memory for ram.\n"); + in = fopen("ram", "rb"); + if (in!=NULL) { + c = (char)fgetc(in); + switch (c) { + case 0x3F: swap = 0; break; + case 0xF3: swap = 1; break; + default: swap = 0; break; + } + ungetc(c, in); + if (!swap) + for (i=0; i<262144L;) { + c = (char)fgetc(in); + ram[i++] = (char)(c&0xf); + ram[i++] = (char)((c>>4)&0xf); + } + else + for (i=0; i<262144L;) { + c = (char)fgetc(in); + ram[i++] = (char)((c>>4)&0xf); + ram[i++] = (char)(c&0xf); + } + fclose(in); + } + data[1] = ram; + + /* CARDSTATUS: P2W P1W P2C P1C */ + in = fopen(PORT1, "rb"); + if (in!=NULL) { + fseek(in, 0, SEEK_END); + s = ftell(in) * 2; + fseek(in, 0, SEEK_SET); +#ifdef DOSX286 + port1 = (char*)_halloc(262144L,1); +#else + port1 = (char*)malloc(262144L); +#endif + if (port1!=NULL) { + for (i=0; i>4)&0xf); + } + data[3] = port1; + CARDSTATUS |= 0xA; + if (s!=262144L) memset(port1, 0, 16); + } else display_warning("Not enough memory for port1"); + fclose(in); + } + + /* CARDSTATUS: P2W P1W P2C P1C */ + in = fopen("port2", "rb"); + if (in!=NULL) { + fseek(in, 0, SEEK_END); + s = ftell(in) * 2; + fseek(in, 0, SEEK_SET); +#ifdef DOSX286 + port2 = (char*)_halloc(262144L,1); +#else + port2 = (char*)malloc(262144L); +#endif + if (port2!=NULL) { + for (i=0; i>4)&0xf); + } + data[4] = port2; + CARDSTATUS |= 0x5; + } else display_warning("Not enough memory for port2"); + fclose(in); + } + + return 0; +} + +int save() { + FILE *out; + long i; + + out = fopen("ram", "wb"); + if (out==NULL) return 1; + for (i=0; i<262144L; i+=2) fputc(ram[i]|(ram[i+1]<<4), out); + fclose(out); + + if (CARDSTATUS&2) bank_save(port1,PORT1,bank1); + + if (CARDSTATUS&1) bank_save(port2,"port2",bank2); + + out = fopen("saturn", "wb"); + fwrite(A, 16, 1, out); + fwrite(B, 16, 1, out); + fwrite(C, 16, 1, out); + fwrite(D, 16, 1, out); + fwrite(R0, 16, 1, out); + fwrite(R1, 16, 1, out); + fwrite(R2, 16, 1, out); + fwrite(R3, 16, 1, out); + fwrite(R4, 16, 1, out); + fwrite(&pc, 4, 1, out); + fwrite(&d0, 4, 1, out); + fwrite(&d1, 4, 1, out); + fwrite(&OUT, 4, 1, out); + fwrite(&IN, 4, 1, out); + fwrite(ST, 4, 1, out); + fputc(HST, out); + fputc(P, out); + fputc(CARRY, out); + fputc(MODE, out); + fputc(INTP, out); + fputc(INTE, out); + fputc(INTD, out); + fputc(SHUTDN, out); + fwrite(rstk, 32, 1, out); + fputc(rstkp, out); + for (i=0; i<5; i++) { + fputc(ucfg[i], out); + fwrite(&base[i], 4, 1, out); + fwrite(&size[i], 4, 1, out); + } + fwrite(ioram, 64, 1, out); + fputc((int)t1, out); + fwrite(&t2, 4, 1, out); + fwrite(&crc, 4, 1, out); + fwrite(&display, sizeof(display_t), 1, out); + fclose(out); + + return 0; +} + +void bank_save(char *mem, char *bn, int bank) { + char name[12]; + FILE *out; + long i; + + if (bank) + sprintf(name,"%s.%i",bn,bank); + else + strcpy(name, bn); + out = fopen(name, "rb"); + if (out==NULL) return; + fclose(out); + out = fopen(name, "wb"); + if (out==NULL) { + printf("Failed to write %s\n", name); + return; + } + for (i=0; i<262144L; i+=2) fputc(mem[i]|(mem[i+1]<<4), out); + fclose(out); + return; +} + +void bank_load(char *mem, char *bn, int bank) { + char name[12], c; + FILE *in; + long i, s; + + if (bank) + sprintf(name,"%s.%i",bn,bank); + else + strcpy(name, bn); + in = fopen(name, "rb"); + if (in==NULL) { + printf("Failed to read %s\n", name); + return; + } + fseek(in, 0, SEEK_END); + s = ftell(in) * 2; + fseek(in, 0, SEEK_SET); + for (i=0; i>4)&0xf); + } + fclose(in); + return; +} + +void bank_switch(int bank) { + + if (bank<32) /* port 1 */ { + if (bank1 == bank) return; + bank_save(port1,PORT1,bank1); + bank1 = bank; + bank_load(port1,PORT1,bank1); + } else { + bank -= 32; + if (bank2 == bank) return; + bank_save(port2,"port2",bank2); + bank2 = bank; + bank_load(port2,"port2",bank2); + } + return; +} + +/******** IO RAM ********/ + +char ioram[64] = { + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0xC,0x0, + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xf, 0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf +}; + +char read_io(long d) { + char c; + + switch (d) { + case 0x04: c = (char)(crc); break; + case 0x05: c = (char)(crc>>4); break; + case 0x06: c = (char)(crc>>8); break; + case 0x07: c = (char)(crc>>12); break; + case 0x0F: c = CARDSTATUS; break; + case 0x14: return ioram[d]; + case 0x15: ioram[0x11]&=0xe; return ioram[d]; + case 0x16: /**/ + case 0x17: /**/ return 3; + case 0x18: /**/ + case 0x19: /**/ display_warning("Nibbles #118/#119 read."); + case 0x20: /**/ + case 0x21: /**/ + case 0x22: /**/ + case 0x23: /**/ + case 0x24: /**/ + case 0x25: /**/ + case 0x26: /**/ + case 0x27: /**/ return 3; + case 0x28: c = (char)display.lcounter; break; + case 0x29: c = (char)(display.lcounter>>4); break; + case 0x30: /**/ + case 0x31: /**/ + case 0x32: /**/ + case 0x33: /**/ + case 0x34: /**/ c = 3; break; + case 0x37: c = (char)(t1); break; + case 0x38: c = (char)(t2); break; + case 0x39: c = (char)(t2>>4); break; + case 0x3A: c = (char)(t2>>8); break; + case 0x3B: c = (char)(t2>>12); break; + case 0x3C: c = (char)(t2>>16); break; + case 0x3D: c = (char)(t2>>20); break; + case 0x3E: c = (char)(t2>>24); break; + case 0x3F: c = (char)(t2>>28); break; + default: + return ioram[d]; + } + return (char)(c&0xf); +} + +void write_io(long d, char c) { + + switch (d) { + + /* 00100 = NS:DISPIO + * 00100 @ Display bit offset and DON [DON OFF2 OFF1 OFF0] + * 00100 @ 3 nibs for display offset (scrolling), DON=Display ON + */ + case 0x00: + if (display.boffset!=(c&7)) { + display.touched = 1; + display.boffset = c&7; + } + if (display.dispon!=(c>>3)) { + display.touched = 1; + display.dispon = c>>3; + } + break; + + /* 00101 = NS:CONTRLSB + * 00101 @ Contrast Control [CON3 CON2 CON1 CON0] + * 00101 @ Higher value = darker screen + */ + case 0x01: + if ((display.contrast&0xf)!=c) { + display.contrast &= 0x10; + display.contrast |= c; + display.touched = 1; + } + break; + + /* 00102 = NS:DISPTEST + * 00102 @ Display test [VDIG LID TRIM CON4] [LRT LRTD LRTC BIN] + * 00102 @ Normally zeros + */ + case 0x02: + if ((display.contrast>>4)!=(c&1)) { + display.contrast &= 0x0f; + display.contrast |= (c<<4)&0x10; + display.touched = 1; + } + break; + case 0x03: + /*display.noscan = (c>>3)&1;*/ + /*display.touched = 1;*/ + break; + + /* 00104 = HP:CRC + * 00104 @ 16 bit hardware CRC (104-107) (X^16+X^12+X^5+1) + * 00104 @ crc = ( crc >> 4 ) ^ ( ( ( crc ^ nib ) & 0x000F ) * 0x1081 ); + */ + case 0x04: crc=crc&0xfff0;crc|=(c); return; + case 0x05: crc=crc&0xff0f;crc|=(c<<4); return; + case 0x06: crc=crc&0xf0ff;crc|=(c<<8); return; + case 0x07: crc=crc&0x0fff;crc|=(c<<12); return; + + /* 00108 = NS:POWERSTATUS + * 00108 @ Low power registers (108-109) + * 00108 @ [LB2 LB1 LB0 VLBI] (read only) + * 00108 @ LowBat(2) LowBat(1) LowBat(S) VeryLowBat + */ + case 0x08: + return; + + /* 00109 = NS:POWERCTRL + * 00109 @ [ELBI EVLBI GRST RST] (read/write) + */ + case 0x09: + break; + + /* 0010A = NS:MODE + * 0010A @ Mode Register (read-only) + */ + case 0x0A: + break; + + /* 0010B = HP:ANNCTRL + * 0010B @ Annunciator control [LA4 LA3 LA2 LA1] = [ alarm alpha -> <- ] + */ + case 0x0B: + case 0x0C: + ioram[d] = c; display_ann(); return; + + /* 0010D = NS:BAU + * 0010D @ Serial baud rate [UCK BD2 BD1 BD0] (bit 3 is read-only) + * 0010D @ 3 bits = {1200 1920 2400 3840 4800 7680 9600 15360} + */ + case 0x0D: + c &= 7; + break; + + /* 0010E = NS:CARDCTRL + * 0010E @ [ECDT RCDT SMP SWINT] (read/write) + * 0010E @ Enable Card Det., Run Card Det., Set Module Pulled, Software interrupt + */ + case 0x0E: + if (c&1) INTERRUPT("SW"); + if (c&2) { ioram[0x19] = 2; HST|=MP; INTERRUPT("MP"); } + if (c&8) + if (c&4) ioram[0x0F] = 0; + break; + + /* 0010F = NS:CARDSTATUS + * 0010F @ [P2W P1W P2C P1C] (read-only) Port 2 writable .. Port 1 inserted + */ + case 0x0F: + return; + + /* 00110 = HP:IOC + * 00110 @ Serial I/O Control [SON ETBE ERBF ERBZ] + * 00110 @ Serial On, Interrupt On Recv.Buf.Empty, Full, Buzy + */ + case 0x10: + break; + + /* 00111 = HP:RCS + * 00111 @ Serial Receive Control/Status [RX RER RBZ RBF] (bit 3 is read-only) + */ + case 0x11: + c &= 7; + c |= ioram[0x11]&8; + break; + + /* 00112 = HP:TCS + * 00112 @ Serial Transmit Control/Status [BRK LPB TBZ TBF] + */ + case 0x12: + break; + + /* 00113 = HP:CRER + * 00113 @ Serial Clear RER (writing anything clears RER bit) + */ + case 0x13: + ioram[0x11]&=0xB; + return; + + /* 00114 = HP:RBR + * 00114 @ Serial Receive Buffer Register (Reading clears RBF bit) + * 00114 @ [RX RER RBZ RBF] + */ + case 0x14: + case 0x15: + return; + + /* 00116 = HP:TBR + * 00116 @ Serial Transmit Buffer Register (Writing sets TBF bit) + */ + case 0x016: break; + case 0x017: + ioram[0x12] |= 1; + break; + + /* 00118 = NS:SRR + * 00118 @ Service Request Register (read-only) + * 00118 @ [ISQR TSQR USRQ VSRQ] [KDN NINT2 NINT LSRQ] + */ + case 0x18: + case 0x19: + return; + + /* 0011A = HP:IRC + * 0011A @ IR Control Register [IRI EIRU EIRI IRE] (bit 3 is read-only) + * 0011A @ IR Input, Enable IR UART mode, Enable IR Interrupt, IR Event + */ + case 0x1A: + c &= 7; + c |= ioram[0x1A]&8; + break; + + /* 0011B = NS:BASENIBOFF + * 0011B @ Used as addressto get BASENIB from 11F to the 5th nibble + */ + case 0x1B: + return; + + /* 0011C = NS:LCR + * 0011C @ Led Control Register [LED ELBE LBZ LBF] (Setting LED is draining) + */ + case 0x1C: + break; + + /* 0011D = NS:LBR + * 0011D @ Led Buffer Register [0 0 0 LBO] (bits 1-3 read zero) + */ + case 0x1D: + c &= 1; + break; + + /* 0011E = NS:SCRATCHPAD + * 0011E @ Scratch pad (11F is BASEIB, 7 or F for base memory) + */ + case 0x1E: + break; + + /* 0011F = NS:BASENIB + */ + case 0x1F: + break; + + /* 00120 = NS:DISPADDR + * 00120 @ Display Start Address (write only) + * 00120 @ bit 0 is ignored (display must start on byte boundary) + */ + case 0x20: + if ((display.start1&0x0000F)!=c) { + display.start1 = (display.start1&0xFFFF0)|(c&0xE); + display.touched = 1; + } + break; + case 0x21: + if (((display.start1&0x000F0)>>4)!=c) { + display.start1=(display.start1&0xFFF0F)|(c<<4); + display.touched = 1; + } + break; + case 0x22: + if (((display.start1&0x00F00)>>8)!=c) { + display.start1=(display.start1&0xFF0FF)|(c<<8); + display.touched = 1; + } + break; + case 0x23: + if (((display.start1&0x0F000)>>12)!=c) { + display.start1=(display.start1&0xF0FFF)|(c<<12); + display.touched = 1; + } + break; + case 0x24: + if (((display.start1&0xF0000)>>16)!=c) { + display.start1=(display.start1&0x0FFFF)|(c<<16); + display.touched = 1; + } + break; + + /* 00125 = NS:LINEOFFS + * 00125 @ Display Line offset (write only) (no of bytes skipped after each line) + * 00125 @ MSG sign extended + */ + case 0x25: c &= 0xe; + case 0x26: + case 0x27: + ioram[d] = c; + display.loffset = (int)Npack(ioram+0x25, 3); + if (display.loffset&0x800) display.loffset = display.loffset - 0x1000; + display.touched = 1; + return; + + /* 00128 = NS:LINECOUNT + * 00128 @ Display Line Counter and miscellaneous (28-29) + * 00128 @ [LC3 LC2 LC1 LC0] [DA19 M32 LC5 LC4] + * 00128 @ Line counter 6 bits -> max = 2^6-1 = 63 = disp height + * 00128 @ Normally has 55 -> Menu starts at display row 56 + */ + case 0x28: + if ((display.lcntsave&0xf)!=c) { + display.lcntsave=(display.lcntsave&0x30)|c; + display.touched = 1; + } + break; + case 0x29: + if ((display.lcntsave&0x30)!=((c&3)<<4)) { + display.lcntsave=(display.lcntsave&0x0f)|((c&3)<<4); + display.touched = 1; + } + break; + + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + return; + + /* 0012E = NS:TIMER1CTRL + * 0012E @ TIMER1 Control [SRQ WKE INT XTRA] + */ + case 0x2E: + c &= 0xE; + break; + + /* 0012F = NS:TIMER2CTRL + * 0012F @ TIMER2 Control [SRQ WKE INT RUN] + */ + case 0x2F: + break; + + /* 00130 = NS:MENUADDR + * 00130 @ Display Secondary Start Address (write only) (30-34) + * 00130 @ Menu Display Address, no line offsets + */ + case 0x30: + if ((display.start2&0x0000F)!=c) { + display.start2=(display.start2&0xFFFF0)|(c&0xE); + display.touched = 1; + } + break; + case 0x31: + if (((display.start2&0x000F0)>>4)!=c) { + display.start2=(display.start2&0xFFF0F)|(c<<4); + display.touched = 1; + } + break; + case 0x32: + if (((display.start2&0x00F00)>>8)!=c) { + display.start2=(display.start2&0xFF0FF)|(c<<8); + display.touched = 1; + } + break; + case 0x33: + if (((display.start2&0x0F000)>>12)!=c) { + display.start2=(display.start2&0xF0FFF)|(c<<12); + display.touched = 1; + } + break; + case 0x34: + if (((display.start2&0xF0000)>>16)!=c) { + display.start2=(display.start2&0x0FFFF)|(c<<16); + display.touched = 1; + } + break; + + case 0x35: + case 0x36: + return; + + /* 00137 = HP:TIMER1 + * 00137 @ Decremented 16 times/s + */ + case 0x37: + t1 = c; + break; + + /* 00138 = HP:TIMER2 + * 00138 @ hardware timer (38-3F), decremented 8192 times/s + */ + case 0x38: t2=(t2&0xFFFFFFF0)|c; break; + case 0x39: t2=(t2&0xFFFFFF0F)|(c<<4); break; + case 0x3A: t2=(t2&0xFFFFF0FF)|(c<<8); break; + case 0x3B: t2=(t2&0xFFFF0FFF)|(c<<12); break; + case 0x3C: t2=(t2&0xFFF0FFFF)|(c<<16); break; + case 0x3D: t2=(t2&0xFF0FFFFF)|(c<<20); break; + case 0x3E: t2=(t2&0xF0FFFFFF)|(c<<24); break; + case 0x3F: t2=(t2&0x0FFFFFFF)|(c<<28); break; + default: return; + } + ioram[d] = c; + return; +} + \ No newline at end of file diff --git a/OPCODES.H b/OPCODES.H new file mode 100644 index 0000000..96b5401 --- /dev/null +++ b/OPCODES.H @@ -0,0 +1,425 @@ + +/* Copyright (C) 1995 Sebastien Carlier (sebc@cybera.anet.fr) */ + +o00: ticks-=60; HST|=XM; pc = rstkpop(); goto o_done; +o01: ticks-=60; pc = rstkpop(); goto o_done; +o02: ticks-=60; CARRY=1; pc = rstkpop(); goto o_done; +o03: ticks-=60; CARRY=0; pc = rstkpop(); goto o_done; +o04: ticks-=24; pc+=2; MODE=16; goto o_done; +o05: ticks-=24; pc+=2; MODE=10; goto o_done; +o06: ticks-=44; pc+=2; rstkpush(Npack(C,5)); goto o_done; +o07: ticks-=44; pc+=2; Nunpack(C, rstkpop(), 5); goto o_done; +o08: ticks-=32; pc+=2; Nzero(ST,4); goto o_done; +o09: ticks-=32; pc+=2; Ncopy(C, ST, 4); goto o_done; +o0A: ticks-=32; pc+=2; Ncopy(ST, C, 4); goto o_done; +o0B: ticks-=32; pc+=2; Nxchg(C, ST, 4); goto o_done; +o0C: ticks-=24; pc+=2; P++; if (P>15) { P=0; CARRY=1; } else CARRY=0; PCHANGED goto o_done; +o0D: ticks-=24; pc+=2; P--; if (P<0) { P=15; CARRY=1; } else CARRY=0; PCHANGED goto o_done; +o0Ef0: ticks-=40+F04[(int)I[2]];pc+=4; NFand(A,B,I[2]); goto o_done; +o0Ef1: ticks-=40+F04[(int)I[2]];pc+=4; NFand(B,C,I[2]); goto o_done; +o0Ef2: ticks-=40+F04[(int)I[2]];pc+=4; NFand(C,A,I[2]); goto o_done; +o0Ef3: ticks-=40+F04[(int)I[2]];pc+=4; NFand(D,C,I[2]); goto o_done; +o0Ef4: ticks-=40+F04[(int)I[2]];pc+=4; NFand(B,A,I[2]); goto o_done; +o0Ef5: ticks-=40+F04[(int)I[2]];pc+=4; NFand(C,B,I[2]); goto o_done; +o0Ef6: ticks-=40+F04[(int)I[2]];pc+=4; NFand(A,C,I[2]); goto o_done; +o0Ef7: ticks-=40+F04[(int)I[2]];pc+=4; NFand(C,D,I[2]); goto o_done; +o0Ef8: ticks-=40+F04[(int)I[2]];pc+=4; NFor(A,B,I[2]); goto o_done; +o0Ef9: ticks-=40+F04[(int)I[2]];pc+=4; NFor(B,C,I[2]); goto o_done; +o0EfA: ticks-=40+F04[(int)I[2]];pc+=4; NFor(C,A,I[2]); goto o_done; +o0EfB: ticks-=40+F04[(int)I[2]];pc+=4; NFor(D,C,I[2]); goto o_done; +o0EfC: ticks-=40+F04[(int)I[2]];pc+=4; NFor(B,A,I[2]); goto o_done; +o0EfD: ticks-=40+F04[(int)I[2]];pc+=4; NFor(C,B,I[2]); goto o_done; +o0EfE: ticks-=40+F04[(int)I[2]];pc+=4; NFor(A,C,I[2]); goto o_done; +o0EfF: ticks-=40+F04[(int)I[2]];pc+=4; NFor(C,D,I[2]); goto o_done; +o0F: ticks-=60; if (INTD&&INTE) {INTD=0;pc=0xf;} else {INTP=0;pc=rstkpop();} goto o_done; +o100: ticks-=93; pc+=3; Ncopy(R0, A, 16); goto o_done; +o101: ticks-=93; pc+=3; Ncopy(R1, A, 16); goto o_done; +o102: ticks-=93; pc+=3; Ncopy(R2, A, 16); goto o_done; +o103: ticks-=93; pc+=3; Ncopy(R3, A, 16); goto o_done; +o104: ticks-=93; pc+=3; Ncopy(R4, A, 16); goto o_done; +o108: ticks-=93; pc+=3; Ncopy(R0, C, 16); goto o_done; +o109: ticks-=93; pc+=3; Ncopy(R1, C, 16); goto o_done; +o10A: ticks-=93; pc+=3; Ncopy(R2, C, 16); goto o_done; +o10B: ticks-=93; pc+=3; Ncopy(R3, C, 16); goto o_done; +o10C: ticks-=93; pc+=3; Ncopy(R4, C, 16); goto o_done; +o110: ticks-=93; pc+=3; Ncopy(A, R0, 16); goto o_done; +o111: ticks-=93; pc+=3; Ncopy(A, R1, 16); goto o_done; +o112: ticks-=93; pc+=3; Ncopy(A, R2, 16); goto o_done; +o113: ticks-=93; pc+=3; Ncopy(A, R3, 16); goto o_done; +o114: ticks-=93; pc+=3; Ncopy(A, R4, 16); goto o_done; +o118: ticks-=93; pc+=3; Ncopy(C, R0, 16); goto o_done; +o119: ticks-=93; pc+=3; Ncopy(C, R1, 16); goto o_done; +o11A: ticks-=93; pc+=3; Ncopy(C, R2, 16); goto o_done; +o11B: ticks-=93; pc+=3; Ncopy(C, R3, 16); goto o_done; +o11C: ticks-=93; pc+=3; Ncopy(C, R4, 16); goto o_done; +o120: ticks-=93; pc+=3; Nxchg(A, R0, 16); goto o_done; +o121: ticks-=93; pc+=3; Nxchg(A, R1, 16); goto o_done; +o122: ticks-=93; pc+=3; Nxchg(A, R2, 16); goto o_done; +o123: ticks-=93; pc+=3; Nxchg(A, R3, 16); goto o_done; +o124: ticks-=93; pc+=3; Nxchg(A, R4, 16); goto o_done; +o128: ticks-=93; pc+=3; Nxchg(C, R0, 16); goto o_done; +o129: ticks-=93; pc+=3; Nxchg(C, R1, 16); goto o_done; +o12A: ticks-=93; pc+=3; Nxchg(C, R2, 16); goto o_done; +o12B: ticks-=93; pc+=3; Nxchg(C, R3, 16); goto o_done; +o12C: ticks-=93; pc+=3; Nxchg(C, R4, 16); goto o_done; +o130: ticks-=49; pc+=3; d0 = Npack(A, 5); goto o_done; +o131: ticks-=49; pc+=3; d1 = Npack(A, 5); goto o_done; +o132: ticks-=49; pc+=3; d = d0; d0=Npack(A, 5); Nunpack(A, d, 5); goto o_done; +o133: ticks-=49; pc+=3; d = d1; d1=Npack(A, 5); Nunpack(A, d, 5); goto o_done; +o134: ticks-=49; pc+=3; d0 = Npack(C, 5); goto o_done; +o135: ticks-=49; pc+=3; d1 = Npack(C, 5); goto o_done; +o136: ticks-=49; pc+=3; d = d0; d0=Npack(C, 5); Nunpack(C, d, 5); goto o_done; +o137: ticks-=49; pc+=3; d = d1; d1=Npack(C, 5); Nunpack(C, d, 5); goto o_done; +o138: ticks-=45; pc+=3; d0&=0xf0000; d0|=Npack(A, 4); goto o_done; +o139: ticks-=45; pc+=3; d1&=0xf0000; d1|=Npack(A, 4); goto o_done; +o13A: ticks-=45; pc+=3; d = d0; d0&=0xf0000; d0|=Npack(A, 4); Nunpack(A, d, 4); goto o_done; +o13B: ticks-=45; pc+=3; d = d1; d1&=0xf0000; d1|=Npack(A, 4); Nunpack(A, d, 4); goto o_done; +o13C: ticks-=45; pc+=3; d0&=0xf0000; d0|=Npack(C, 4); goto o_done; +o13D: ticks-=45; pc+=3; d1&=0xf0000; d1|=Npack(C, 4); goto o_done; +o13E: ticks-=45; pc+=3; d = d0; d0&=0xf0000; d0|=Npack(C, 4); Nunpack(C, d, 4); goto o_done; +o13F: ticks-=45; pc+=3; d = d1; d1&=0xf0000; d1|=Npack(C, 4); Nunpack(C, d, 4); goto o_done; +o140: ticks-=148; pc+=3; Nwrite(A, d0, 5); goto o_done; +o141: ticks-=148; pc+=3; Nwrite(A, d1, 5); goto o_done; +o142: ticks-=138; pc+=3; NCread(A, d0, 5); goto o_done; +o143: ticks-=138; pc+=3; NCread(A, d1, 5); goto o_done; +o144: ticks-=148; pc+=3; Nwrite(C, d0, 5); goto o_done; +o145: ticks-=148; pc+=3; Nwrite(C, d1, 5); goto o_done; +o146: ticks-=138; pc+=3; NCread(C, d0, 5); goto o_done; +o147: ticks-=138; pc+=3; NCread(C, d1, 5); goto o_done; +o148: ticks-=98; pc+=3; Nwrite(A, d0, 2); goto o_done; +o149: ticks-=98; pc+=3; Nwrite(A, d1, 2); goto o_done; +o14A: ticks-=114; pc+=3; NCread(A, d0, 2); goto o_done; +o14B: ticks-=114; pc+=3; NCread(A, d1, 2); goto o_done; +o14C: ticks-=98; pc+=3; Nwrite(C, d0, 2); goto o_done; +o14D: ticks-=98; pc+=3; Nwrite(C, d1, 2); goto o_done; +o14E: ticks-=114; pc+=3; NCread(C, d0, 2); goto o_done; +o14F: ticks-=114; pc+=3; NCread(C, d1, 2); goto o_done; +o150a: ticks-=FWR[(int)I[3]];pc+=4; NFwrite(A, d0, I[3]); goto o_done; +o151a: ticks-=FWR[(int)I[3]];pc+=4; NFwrite(A, d1, I[3]); goto o_done; +o152a: ticks-=FRD[(int)I[3]];pc+=4; NCFread(A, d0, I[3]); goto o_done; +o153a: ticks-=FRD[(int)I[3]];pc+=4; NCFread(A, d1, I[3]); goto o_done; +o154a: ticks-=FWR[(int)I[3]];pc+=4; NFwrite(C, d0, I[3]); goto o_done; +o155a: ticks-=FWR[(int)I[3]];pc+=4; NFwrite(C, d1, I[3]); goto o_done; +o156a: ticks-=FRD[(int)I[3]];pc+=4; NCFread(C, d0, I[3]); goto o_done; +o157a: ticks-=FRD[(int)I[3]];pc+=4; NCFread(C, d1, I[3]); goto o_done; +o158x: ticks-=NWR[(int)I[3]];pc+=4; Nwrite(A, d0, I[3]+1); goto o_done; +o159x: ticks-=NWR[(int)I[3]];pc+=4; Nwrite(A, d1, I[3]+1); goto o_done; +o15Ax: ticks-=NRD[(int)I[3]];pc+=4; NCread(A, d0, I[3]+1); goto o_done; +o15Bx: ticks-=NRD[(int)I[3]];pc+=4; NCread(A, d1, I[3]+1); goto o_done; +o15Cx: ticks-=NWR[(int)I[3]];pc+=4; Nwrite(C, d0, I[3]+1); goto o_done; +o15Dx: ticks-=NWR[(int)I[3]];pc+=4; Nwrite(C, d1, I[3]+1); goto o_done; +o15Ex: ticks-=NRD[(int)I[3]];pc+=4; NCread(C, d0, I[3]+1); goto o_done; +o15Fx: ticks-=NRD[(int)I[3]];pc+=4; NCread(C, d1, I[3]+1); goto o_done; +o16x: ticks-=45; pc+=3; d0+=I[2]+1; if (d0>0xfffff) { d0&=0xfffff; CARRY=1; } else CARRY=0; goto o_done; +o17x: ticks-=45; pc+=3; d1+=I[2]+1; if (d1>0xfffff) { d1&=0xfffff; CARRY=1; } else CARRY=0; goto o_done; +o18x: ticks-=45; pc+=3; d0-=I[2]+1; if (d0<0) { d0&=0xfffff; CARRY=1; } else CARRY=0; goto o_done; +o19d2: ticks-=40; pc+=4; d0&=0xfff00; d0|=Npack(I+2, 2); goto o_done; +o1Ad4: ticks-=60; pc+=6; d0&=0xf0000; d0|=Npack(I+2, 4); goto o_done; +o1Bd5: ticks-=70; pc+=7; d0=Npack(I+2, 5); goto o_done; +o1Cx: ticks-=45; pc+=3; d1-=I[2]+1; if (d1<0) { d1&=0xfffff; CARRY=1; } else CARRY=0; goto o_done; +o1Dd2: ticks-=40; pc+=4; d1&=0xfff00; d1|=Npack(I+2, 2); goto o_done; +o1Ed4: ticks-=60; pc+=6; d1&=0xf0000; d1|=Npack(I+2, 4); goto o_done; +o1Fd5: ticks-=70; pc+=7; d1=Npack(I+2, 5); goto o_done; +o2n: ticks-=20; pc+=2; P=I[1]; PCHANGED goto o_done; +o3X: ticks-=30+D10[(int)I[1]];n=I[1]+1; pc+=2+n; if (P+n<=16) Ncopy(C+P, I+2, n); else { Ncopy(C+P, I+2, 16-P); Ncopy(C, I+2+(16-P), n-(16-P)); } goto o_done; +o4d2: ticks-=30; if ( CARRY) { d=Npack(I+1,2); if (d) { ticks-=40; if (d&0x80) pc-=(d^0xff); else pc+=d+1;} else pc=rstkpop(); } else pc+=3; goto o_done; +o5d2: ticks-=30; if (!CARRY) { d=Npack(I+1,2); if (d) { ticks-=40; if (d&0x80) pc-=(d^0xff); else pc+=d+1;} else pc=rstkpop(); } else pc+=3; goto o_done; +o6d3: ticks-=80; d=Npack(I+1,3); if (d&0x800) pc-=(d^0xfff); else pc+=d+1; goto o_done; +o7d3: ticks-=82; rstkpush(pc+4); d=Npack(I+1,3); if (d&0x800) pc-=(d^0xfff)-3; else pc+=d+4; goto o_done; +o800: ticks-=33; pc+=3; OUT&=0xff0; OUT|=C[0]; goto o_done; +o801: ticks-=41; pc+=3; OUT = Npack(C, 3); update_out(); goto o_done; +o802: ticks-=70; pc+=3; update_in(); Nunpack(A, IN, 4); goto o_done; +o803: ticks-=70; pc+=3; update_in(); Nunpack(C, IN, 4); goto o_done; +o804: ticks-=73; pc+=3; unconfig(); goto o_done; +o805: ticks-=73; pc+=3; config(); goto o_done; +o806: ticks-=73; pc+=3; c_eq_id(); goto o_done; +o807: ticks-=60; pc+=3; SHUTDN = 1; goto o_done; +o8080: ticks-=42; pc+=4; INTE=1; if (INTD&&(!INTP)) {INTD=0;INTERRUPT("DL");} goto o_done; +o80810: ticks-=53; pc+=5; if (IN) {if (!INTP) INTERRUPT("RS") else INTD=1;} goto o_done; +o8082X: ticks-=60+D10[(int)I[1]];n=I[4]+1; pc+=5+n; if (P+n<=16) Ncopy(A+P, I+5, n); else { Ncopy(A+P, I+5, 16-P); Ncopy(A, I+5+(16-P), n-(16-P)); } goto o_done; +o8083: ticks-=73; pc+=4; goto o_done; +o8084n: ticks-=53; pc+=5; Nbit0(A, I[4]); goto o_done; +o8085n: ticks-=53; pc+=5; Nbit1(A, I[4]); goto o_done; +o8086n: ticks-=117; pc+=5; Tbit0(A, I[4]); goyes(5); goto o_done; +o8087n: ticks-=117; pc+=5; Tbit1(A, I[4]); goyes(5); goto o_done; +o8088n: ticks-=53; pc+=5; Nbit0(C, I[4]); goto o_done; +o8089n: ticks-=53; pc+=5; Nbit1(C, I[4]); goto o_done; +o808An: ticks-=117; pc+=5; Tbit0(C, I[4]); goyes(5); goto o_done; +o808Bn: ticks-=117; pc+=5; Tbit1(C, I[4]); goyes(5); goto o_done; +o808C: ticks-=230; pc = Npack(nibble_ptr(Npack(A,5)), 5); goto o_done; +o808D: ticks-=73; pc+=4; goto o_done; +o808E: ticks-=230; pc = Npack(nibble_ptr(Npack(C,5)), 5); goto o_done; +o808F: ticks-=42; pc+=4; INTE = 0; goto o_done; +o809: ticks-=49; pc+=3; d=Npack(C, 5); d+=P+1; if (d>0xfffff) { d&=0xfffff; CARRY=1; } else CARRY=0; Nunpack(C, d, 5); goto o_done; +o80A: ticks-=73; pc+=3; reset(); goto o_done; +o80B: ticks-=73; pc+=3; goto o_done; +o80Cn: ticks-=48; pc+=4; C[(int)I[3]] = P; goto o_done; +o80Dn: ticks-=48; pc+=4; P = C[(int)I[3]]; PCHANGED goto o_done; +o80E: ticks-=58; pc+=3; C[0]=0; goto o_done; +o80Fn: ticks-=48; pc+=4; n = P; P = C[(int)I[3]]; C[(int)I[3]] = n; PCHANGED goto o_done; +o810: ticks-=101; pc+=3; Nslc(A, 16); goto o_done; +o811: ticks-=101; pc+=3; Nslc(B, 16); goto o_done; +o812: ticks-=101; pc+=3; Nslc(C, 16); goto o_done; +o813: ticks-=101; pc+=3; Nslc(D, 16); goto o_done; +o814: ticks-=101; pc+=3; Nsrc(A, 16); goto o_done; +o815: ticks-=101; pc+=3; Nsrc(B, 16); goto o_done; +o816: ticks-=101; pc+=3; Nsrc(C, 16); goto o_done; +o817: ticks-=101; pc+=3; Nsrc(D, 16); goto o_done; +o818f0x: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFadd(A, X, I[3]); goto o_done; +o818f1x: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFadd(B, X, I[3]); goto o_done; +o818f2x: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFadd(C, X, I[3]); goto o_done; +o818f3x: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFadd(D, X, I[3]); goto o_done; +o818f8x: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFsub(A, X, I[3]); goto o_done; +o818f9x: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFsub(B, X, I[3]); goto o_done; +o818fAx: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFsub(C, X, I[3]); goto o_done; +o818fBx: ticks-=S00[(int)I[3]];pc+=6; NFunpack(X,I[5]+1,I[3]); NFsub(D, X, I[3]); goto o_done; +o819f0: ticks-=53+F04[(int)I[3]];pc+=5; NFsrb(A, I[3]); goto o_done; +o819f1: ticks-=53+F04[(int)I[3]];pc+=5; NFsrb(B, I[3]); goto o_done; +o819f2: ticks-=53+F04[(int)I[3]];pc+=5; NFsrb(C, I[3]); goto o_done; +o819f3: ticks-=53+F04[(int)I[3]];pc+=5; NFsrb(D, I[3]); goto o_done; +o81Af00: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R0, A, I[3]); goto o_done; +o81Af01: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R1, A, I[3]); goto o_done; +o81Af02: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R2, A, I[3]); goto o_done; +o81Af03: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R3, A, I[3]); goto o_done; +o81Af04: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R4, A, I[3]); goto o_done; +o81Af08: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R0, C, I[3]); goto o_done; +o81Af09: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R1, C, I[3]); goto o_done; +o81Af0A: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R2, C, I[3]); goto o_done; +o81Af0B: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R3, C, I[3]); goto o_done; +o81Af0C: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(R4, C, I[3]); goto o_done; +o81Af10: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(A, R0, I[3]); goto o_done; +o81Af11: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(A, R1, I[3]); goto o_done; +o81Af12: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(A, R2, I[3]); goto o_done; +o81Af13: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(A, R3, I[3]); goto o_done; +o81Af14: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(A, R4, I[3]); goto o_done; +o81Af18: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(C, R0, I[3]); goto o_done; +o81Af19: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(C, R1, I[3]); goto o_done; +o81Af1A: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(C, R2, I[3]); goto o_done; +o81Af1B: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(C, R3, I[3]); goto o_done; +o81Af1C: ticks-=60+F04[(int)I[3]];pc+=6; NFcopy(C, R4, I[3]); goto o_done; +o81Af20: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(A, R0, I[3]); goto o_done; +o81Af21: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(A, R1, I[3]); goto o_done; +o81Af22: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(A, R2, I[3]); goto o_done; +o81Af23: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(A, R3, I[3]); goto o_done; +o81Af24: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(A, R4, I[3]); goto o_done; +o81Af28: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(C, R0, I[3]); goto o_done; +o81Af29: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(C, R1, I[3]); goto o_done; +o81Af2A: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(C, R2, I[3]); goto o_done; +o81Af2B: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(C, R3, I[3]); goto o_done; +o81Af2C: ticks-=60+F04[(int)I[3]];pc+=6; NFxchg(C, R4, I[3]); goto o_done; +o81B2: ticks-=100; pc = Npack(A, 5); goto o_done; +o81B3: ticks-=100; pc = Npack(C, 5); goto o_done; +o81B4: ticks-=60; pc+=4; Nunpack(A, pc, 5); goto o_done; +o81B5: ticks-=60; pc+=4; Nunpack(C, pc, 5); goto o_done; +o81B6: ticks-=100; d = pc+4; pc = Npack(A, 5); Nunpack(A, d, 5); goto o_done; +o81B7: ticks-=100; d = pc+4; pc = Npack(C, 5); Nunpack(C, d, 5); goto o_done; +o81C: ticks-=97; pc+=3; Nsrb(A, 16); goto o_done; +o81D: ticks-=97; pc+=3; Nsrb(B, 16); goto o_done; +o81E: ticks-=97; pc+=3; Nsrb(C, 16); goto o_done; +o81F: ticks-=97; pc+=3; Nsrb(D, 16); goto o_done; +o82n: ticks-=30; pc+=3; HST&=~I[2]; goto o_done; +o83n: ticks-=53; pc+=3; CARRY=(HST&I[2])?0:1; goyes(3); goto o_done; +o84n: ticks-=33; pc+=3; Nbit0(ST, I[2]); goto o_done; +o85n: ticks-=33; pc+=3; Nbit1(ST, I[2]); goto o_done; +o86n: ticks-=57; pc+=3; Tbit0(ST, I[2]); goyes(3); goto o_done; +o87n: ticks-=57; pc+=3; Tbit1(ST, I[2]); goyes(3); goto o_done; +o88n: ticks-=53; pc+=3; if (P!=I[2]) CARRY=1; else CARRY=0; goyes(3); goto o_done; +o89n: ticks-=53; pc+=3; if (P==I[2]) CARRY=1; else CARRY=0; goyes(3); goto o_done; +o8A0: ticks-=73; pc+=3; Te(A, B, 5); goyes(3); goto o_done; +o8A1: ticks-=73; pc+=3; Te(B, C, 5); goyes(3); goto o_done; +o8A2: ticks-=73; pc+=3; Te(C, A, 5); goyes(3); goto o_done; +o8A3: ticks-=73; pc+=3; Te(D, C, 5); goyes(3); goto o_done; +o8A4: ticks-=73; pc+=3; Tne(A, B, 5); goyes(3); goto o_done; +o8A5: ticks-=73; pc+=3; Tne(B, C, 5); goyes(3); goto o_done; +o8A6: ticks-=73; pc+=3; Tne(C, A, 5); goyes(3); goto o_done; +o8A7: ticks-=73; pc+=3; Tne(D, C, 5); goyes(3); goto o_done; +o8A8: ticks-=73; pc+=3; Tz(A, 5); goyes(3); goto o_done; +o8A9: ticks-=73; pc+=3; Tz(B, 5); goyes(3); goto o_done; +o8AA: ticks-=73; pc+=3; Tz(C, 5); goyes(3); goto o_done; +o8AB: ticks-=73; pc+=3; Tz(D, 5); goyes(3); goto o_done; +o8AC: ticks-=73; pc+=3; Tnz(A, 5); goyes(3); goto o_done; +o8AD: ticks-=73; pc+=3; Tnz(B, 5); goyes(3); goto o_done; +o8AE: ticks-=73; pc+=3; Tnz(C, 5); goyes(3); goto o_done; +o8AF: ticks-=73; pc+=3; Tnz(D, 5); goyes(3); goto o_done; +o8B0: ticks-=73; pc+=3; Ta(A, B, 5); goyes(3); goto o_done; +o8B1: ticks-=73; pc+=3; Ta(B, C, 5); goyes(3); goto o_done; +o8B2: ticks-=73; pc+=3; Ta(C, A, 5); goyes(3); goto o_done; +o8B3: ticks-=73; pc+=3; Ta(D, C, 5); goyes(3); goto o_done; +o8B4: ticks-=73; pc+=3; Tb(A, B, 5); goyes(3); goto o_done; +o8B5: ticks-=73; pc+=3; Tb(B, C, 5); goyes(3); goto o_done; +o8B6: ticks-=73; pc+=3; Tb(C, A, 5); goyes(3); goto o_done; +o8B7: ticks-=73; pc+=3; Tb(D, C, 5); goyes(3); goto o_done; +o8B8: ticks-=73; pc+=3; Tae(A, B, 5); goyes(3); goto o_done; +o8B9: ticks-=73; pc+=3; Tae(B, C, 5); goyes(3); goto o_done; +o8BA: ticks-=73; pc+=3; Tae(C, A, 5); goyes(3); goto o_done; +o8BB: ticks-=73; pc+=3; Tae(D, C, 5); goyes(3); goto o_done; +o8BC: ticks-=73; pc+=3; Tbe(A, B, 5); goyes(3); goto o_done; +o8BD: ticks-=73; pc+=3; Tbe(B, C, 5); goyes(3); goto o_done; +o8BE: ticks-=73; pc+=3; Tbe(C, A, 5); goyes(3); goto o_done; +o8BF: ticks-=73; pc+=3; Tbe(D, C, 5); goyes(3); goto o_done; +o8Cd4: ticks-=100; d=Npack(I+2, 4); if (d&0x8000) pc-=(d^0xffff)-1; else pc+=d+2; goto o_done; +o8Dd5: ticks-=109; pc=Npack(I+2, 5);; goto o_done; +o8Ed4: ticks-=104; rstkpush(pc+6); d=Npack(I+2,4); if (d&0x8000) pc-=(d^0xffff)-5; else pc+=d+6; goto o_done; +o8Fd5: ticks-=113; rstkpush(pc+7); pc=Npack(I+2, 5); goto o_done; +o9a0: ticks-=53+F04[(int)I[1]];pc+=3; TFe(A, B, I[1]); goyes(3); goto o_done; +o9a1: ticks-=53+F04[(int)I[1]];pc+=3; TFe(B, C, I[1]); goyes(3); goto o_done; +o9a2: ticks-=53+F04[(int)I[1]];pc+=3; TFe(C, A, I[1]); goyes(3); goto o_done; +o9a3: ticks-=53+F04[(int)I[1]];pc+=3; TFe(D, C, I[1]); goyes(3); goto o_done; +o9a4: ticks-=53+F04[(int)I[1]];pc+=3; TFne(A, B, I[1]); goyes(3); goto o_done; +o9a5: ticks-=53+F04[(int)I[1]];pc+=3; TFne(B, C, I[1]); goyes(3); goto o_done; +o9a6: ticks-=53+F04[(int)I[1]];pc+=3; TFne(C, A, I[1]); goyes(3); goto o_done; +o9a7: ticks-=53+F04[(int)I[1]];pc+=3; TFne(D, C, I[1]); goyes(3); goto o_done; +o9a8: ticks-=53+F04[(int)I[1]];pc+=3; TFz(A, I[1]); goyes(3); goto o_done; +o9a9: ticks-=53+F04[(int)I[1]];pc+=3; TFz(B, I[1]); goyes(3); goto o_done; +o9aA: ticks-=53+F04[(int)I[1]];pc+=3; TFz(C, I[1]); goyes(3); goto o_done; +o9aB: ticks-=53+F04[(int)I[1]];pc+=3; TFz(D, I[1]); goyes(3); goto o_done; +o9aC: ticks-=53+F04[(int)I[1]];pc+=3; TFnz(A, I[1]); goyes(3); goto o_done; +o9aD: ticks-=53+F04[(int)I[1]];pc+=3; TFnz(B, I[1]); goyes(3); goto o_done; +o9aE: ticks-=53+F04[(int)I[1]];pc+=3; TFnz(C, I[1]); goyes(3); goto o_done; +o9aF: ticks-=53+F04[(int)I[1]];pc+=3; TFnz(D, I[1]); goyes(3); goto o_done; +o9b0: ticks-=53+F04[(int)I[1]];pc+=3; TFa(A, B, I[1]&7); goyes(3); goto o_done; +o9b1: ticks-=53+F04[(int)I[1]];pc+=3; TFa(B, C, I[1]&7); goyes(3); goto o_done; +o9b2: ticks-=53+F04[(int)I[1]];pc+=3; TFa(C, A, I[1]&7); goyes(3); goto o_done; +o9b3: ticks-=53+F04[(int)I[1]];pc+=3; TFa(D, C, I[1]&7); goyes(3); goto o_done; +o9b4: ticks-=53+F04[(int)I[1]];pc+=3; TFb(A, B, I[1]&7); goyes(3); goto o_done; +o9b5: ticks-=53+F04[(int)I[1]];pc+=3; TFb(B, C, I[1]&7); goyes(3); goto o_done; +o9b6: ticks-=53+F04[(int)I[1]];pc+=3; TFb(C, A, I[1]&7); goyes(3); goto o_done; +o9b7: ticks-=53+F04[(int)I[1]];pc+=3; TFb(D, C, I[1]&7); goyes(3); goto o_done; +o9b8: ticks-=53+F04[(int)I[1]];pc+=3; TFae(A, B, I[1]&7); goyes(3); goto o_done; +o9b9: ticks-=53+F04[(int)I[1]];pc+=3; TFae(B, C, I[1]&7); goyes(3); goto o_done; +o9bA: ticks-=53+F04[(int)I[1]];pc+=3; TFae(C, A, I[1]&7); goyes(3); goto o_done; +o9bB: ticks-=53+F04[(int)I[1]];pc+=3; TFae(D, C, I[1]&7); goyes(3); goto o_done; +o9bC: ticks-=53+F04[(int)I[1]];pc+=3; TFbe(A, B, I[1]&7); goyes(3); goto o_done; +o9bD: ticks-=53+F04[(int)I[1]];pc+=3; TFbe(B, C, I[1]&7); goyes(3); goto o_done; +o9bE: ticks-=53+F04[(int)I[1]];pc+=3; TFbe(C, A, I[1]&7); goyes(3); goto o_done; +o9bF: ticks-=53+F04[(int)I[1]];pc+=3; TFbe(D, C, I[1]&7); goyes(3); goto o_done; +oAa0: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(A, B, I[1]); goto o_done; +oAa1: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(B, C, I[1]); goto o_done; +oAa2: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(C, A, I[1]); goto o_done; +oAa3: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(D, C, I[1]); goto o_done; +oAa4: ticks-=33+F04[(int)I[1]];pc+=3; NFdbl(A, I[1]); goto o_done; +oAa5: ticks-=33+F04[(int)I[1]];pc+=3; NFdbl(B, I[1]); goto o_done; +oAa6: ticks-=33+F04[(int)I[1]];pc+=3; NFdbl(C, I[1]); goto o_done; +oAa7: ticks-=33+F04[(int)I[1]];pc+=3; NFdbl(D, I[1]); goto o_done; +oAa8: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(B, A, I[1]); goto o_done; +oAa9: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(C, B, I[1]); goto o_done; +oAaA: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(A, C, I[1]); goto o_done; +oAaB: ticks-=33+F04[(int)I[1]];pc+=3; NFadd(C, D, I[1]); goto o_done; +oAaC: ticks-=33+F04[(int)I[1]];pc+=3; NFdec(A, I[1]); goto o_done; +oAaD: ticks-=33+F04[(int)I[1]];pc+=3; NFdec(B, I[1]); goto o_done; +oAaE: ticks-=33+F04[(int)I[1]];pc+=3; NFdec(C, I[1]); goto o_done; +oAaF: ticks-=33+F04[(int)I[1]];pc+=3; NFdec(D, I[1]); goto o_done; +oAb0: ticks-=33+F04[(int)I[1]];pc+=3; NFzero(A, I[1]&7); goto o_done; +oAb1: ticks-=33+F04[(int)I[1]];pc+=3; NFzero(B, I[1]&7); goto o_done; +oAb2: ticks-=33+F04[(int)I[1]];pc+=3; NFzero(C, I[1]&7); goto o_done; +oAb3: ticks-=33+F04[(int)I[1]];pc+=3; NFzero(D, I[1]&7); goto o_done; +oAb4: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(A, B, I[1]&7); goto o_done; +oAb5: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(B, C, I[1]&7); goto o_done; +oAb6: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(C, A, I[1]&7); goto o_done; +oAb7: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(D, C, I[1]&7); goto o_done; +oAb8: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(B, A, I[1]&7); goto o_done; +oAb9: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(C, B, I[1]&7); goto o_done; +oAbA: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(A, C, I[1]&7); goto o_done; +oAbB: ticks-=33+F04[(int)I[1]];pc+=3; NFcopy(C, D, I[1]&7); goto o_done; +oAbC: ticks-=33+F04[(int)I[1]];pc+=3; NFxchg(A, B, I[1]&7); goto o_done; +oAbD: ticks-=33+F04[(int)I[1]];pc+=3; NFxchg(B, C, I[1]&7); goto o_done; +oAbE: ticks-=33+F04[(int)I[1]];pc+=3; NFxchg(C, A, I[1]&7); goto o_done; +oAbF: ticks-=33+F04[(int)I[1]];pc+=3; NFxchg(D, C, I[1]&7); goto o_done; +oBa0: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(A, B, I[1]); goto o_done; +oBa1: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(B, C, I[1]); goto o_done; +oBa2: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(C, A, I[1]); goto o_done; +oBa3: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(D, C, I[1]); goto o_done; +oBa4: ticks-=33+F04[(int)I[1]];pc+=3; NFinc(A, I[1]); goto o_done; +oBa5: ticks-=33+F04[(int)I[1]];pc+=3; NFinc(B, I[1]); goto o_done; +oBa6: ticks-=33+F04[(int)I[1]];pc+=3; NFinc(C, I[1]); goto o_done; +oBa7: ticks-=33+F04[(int)I[1]];pc+=3; NFinc(D, I[1]); goto o_done; +oBa8: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(B, A, I[1]); goto o_done; +oBa9: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(C, B, I[1]); goto o_done; +oBaA: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(A, C, I[1]); goto o_done; +oBaB: ticks-=33+F04[(int)I[1]];pc+=3; NFsub(C, D, I[1]); goto o_done; +oBaC: ticks-=33+F04[(int)I[1]];pc+=3; NFrsub(A, B, I[1]); goto o_done; +oBaD: ticks-=33+F04[(int)I[1]];pc+=3; NFrsub(B, C, I[1]); goto o_done; +oBaE: ticks-=33+F04[(int)I[1]];pc+=3; NFrsub(C, A, I[1]); goto o_done; +oBaF: ticks-=33+F04[(int)I[1]];pc+=3; NFrsub(D, C, I[1]); goto o_done; +oBb0: ticks-=33+F04[(int)I[1]];pc+=3; NFsl(A, I[1]&7); goto o_done; +oBb1: ticks-=33+F04[(int)I[1]];pc+=3; NFsl(B, I[1]&7); goto o_done; +oBb2: ticks-=33+F04[(int)I[1]];pc+=3; NFsl(C, I[1]&7); goto o_done; +oBb3: ticks-=33+F04[(int)I[1]];pc+=3; NFsl(D, I[1]&7); goto o_done; +oBb4: ticks-=33+F04[(int)I[1]];pc+=3; NFsr(A, I[1]&7); goto o_done; +oBb5: ticks-=33+F04[(int)I[1]];pc+=3; NFsr(B, I[1]&7); goto o_done; +oBb6: ticks-=33+F04[(int)I[1]];pc+=3; NFsr(C, I[1]&7); goto o_done; +oBb7: ticks-=33+F04[(int)I[1]];pc+=3; NFsr(D, I[1]&7); goto o_done; +oBb8: ticks-=33+F04[(int)I[1]];pc+=3; NFneg(A, I[1]&7); goto o_done; +oBb9: ticks-=33+F04[(int)I[1]];pc+=3; NFneg(B, I[1]&7); goto o_done; +oBbA: ticks-=33+F04[(int)I[1]];pc+=3; NFneg(C, I[1]&7); goto o_done; +oBbB: ticks-=33+F04[(int)I[1]];pc+=3; NFneg(D, I[1]&7); goto o_done; +oBbC: ticks-=33+F04[(int)I[1]];pc+=3; NFnot(A, I[1]&7); goto o_done; +oBbD: ticks-=33+F04[(int)I[1]];pc+=3; NFnot(B, I[1]&7); goto o_done; +oBbE: ticks-=33+F04[(int)I[1]];pc+=3; NFnot(C, I[1]&7); goto o_done; +oBbF: ticks-=33+F04[(int)I[1]];pc+=3; NFnot(D, I[1]&7); goto o_done; +oC0: ticks-=40; pc+=2; Nadd(A, B, 5); goto o_done; +oC1: ticks-=40; pc+=2; Nadd(B, C, 5); goto o_done; +oC2: ticks-=40; pc+=2; Nadd(C, A, 5); goto o_done; +oC3: ticks-=40; pc+=2; Nadd(D, C, 5); goto o_done; +oC4: ticks-=40; pc+=2; Ndbl(A, 5); goto o_done; +oC5: ticks-=40; pc+=2; Ndbl(B, 5); goto o_done; +oC6: ticks-=40; pc+=2; Ndbl(C, 5); goto o_done; +oC7: ticks-=40; pc+=2; Ndbl(D, 5); goto o_done; +oC8: ticks-=40; pc+=2; Nadd(B, A, 5); goto o_done; +oC9: ticks-=40; pc+=2; Nadd(C, B, 5); goto o_done; +oCA: ticks-=40; pc+=2; Nadd(A, C, 5); goto o_done; +oCB: ticks-=40; pc+=2; Nadd(C, D, 5); goto o_done; +oCC: ticks-=40; pc+=2; Ndec(A, 5); goto o_done; +oCD: ticks-=40; pc+=2; Ndec(B, 5); goto o_done; +oCE: ticks-=40; pc+=2; Ndec(C, 5); goto o_done; +oCF: ticks-=40; pc+=2; Ndec(D, 5); goto o_done; +oD0: ticks-=40; pc+=2; Nzero(A, 5); goto o_done; +oD1: ticks-=40; pc+=2; Nzero(B, 5); goto o_done; +oD2: ticks-=40; pc+=2; Nzero(C, 5); goto o_done; +oD3: ticks-=40; pc+=2; Nzero(D, 5); goto o_done; +oD4: ticks-=40; pc+=2; Ncopy(A, B, 5); goto o_done; +oD5: ticks-=40; pc+=2; Ncopy(B, C, 5); goto o_done; +oD6: ticks-=40; pc+=2; Ncopy(C, A, 5); goto o_done; +oD7: ticks-=40; pc+=2; Ncopy(D, C, 5); goto o_done; +oD8: ticks-=40; pc+=2; Ncopy(B, A, 5); goto o_done; +oD9: ticks-=40; pc+=2; Ncopy(C, B, 5); goto o_done; +oDA: ticks-=40; pc+=2; Ncopy(A, C, 5); goto o_done; +oDB: ticks-=40; pc+=2; Ncopy(C, D, 5); goto o_done; +oDC: ticks-=40; pc+=2; Nxchg(A, B, 5); goto o_done; +oDD: ticks-=40; pc+=2; Nxchg(B, C, 5); goto o_done; +oDE: ticks-=40; pc+=2; Nxchg(C, A, 5); goto o_done; +oDF: ticks-=40; pc+=2; Nxchg(D, C, 5); goto o_done; +oE0: ticks-=40; pc+=2; Nsub(A, B, 5); goto o_done; +oE1: ticks-=40; pc+=2; Nsub(B, C, 5); goto o_done; +oE2: ticks-=40; pc+=2; Nsub(C, A, 5); goto o_done; +oE3: ticks-=40; pc+=2; Nsub(D, C, 5); goto o_done; +oE4: ticks-=40; pc+=2; Ninc(A, 5); goto o_done; +oE5: ticks-=40; pc+=2; Ninc(B, 5); goto o_done; +oE6: ticks-=40; pc+=2; Ninc(C, 5); goto o_done; +oE7: ticks-=40; pc+=2; Ninc(D, 5); goto o_done; +oE8: ticks-=40; pc+=2; Nsub(B, A, 5); goto o_done; +oE9: ticks-=40; pc+=2; Nsub(C, B, 5); goto o_done; +oEA: ticks-=40; pc+=2; Nsub(A, C, 5); goto o_done; +oEB: ticks-=40; pc+=2; Nsub(C, D, 5); goto o_done; +oEC: ticks-=40; pc+=2; Nrsub(A, B, 5); goto o_done; +oED: ticks-=40; pc+=2; Nrsub(B, C, 5); goto o_done; +oEE: ticks-=40; pc+=2; Nrsub(C, A, 5); goto o_done; +oEF: ticks-=40; pc+=2; Nrsub(D, C, 5); goto o_done; +oF0: ticks-=44; pc+=2; Nsl(A, 5); goto o_done; +oF1: ticks-=44; pc+=2; Nsl(B, 5); goto o_done; +oF2: ticks-=44; pc+=2; Nsl(C, 5); goto o_done; +oF3: ticks-=44; pc+=2; Nsl(D, 5); goto o_done; +oF4: ticks-=44; pc+=2; Nsr(A, 5); goto o_done; +oF5: ticks-=44; pc+=2; Nsr(B, 5); goto o_done; +oF6: ticks-=44; pc+=2; Nsr(C, 5); goto o_done; +oF7: ticks-=44; pc+=2; Nsr(D, 5); goto o_done; +oF8: ticks-=40; pc+=2; Nneg(A, 5); goto o_done; +oF9: ticks-=40; pc+=2; Nneg(B, 5); goto o_done; +oFA: ticks-=40; pc+=2; Nneg(C, 5); goto o_done; +oFB: ticks-=40; pc+=2; Nneg(D, 5); goto o_done; +oFC: ticks-=40; pc+=2; Nnot(A, 5); goto o_done; +oFD: ticks-=40; pc+=2; Nnot(B, 5); goto o_done; +oFE: ticks-=40; pc+=2; Nnot(C, 5); goto o_done; +oFF: ticks-=40; pc+=2; Nnot(D, 5); goto o_done; +/* 424 lines, 1 instructions */ + \ No newline at end of file diff --git a/PCPDBG.H b/PCPDBG.H new file mode 100644 index 0000000..cdddbbb --- /dev/null +++ b/PCPDBG.H @@ -0,0 +1,354 @@ +/* UCMS_VERSION_ID("@(#)pcpdbg.h 61EX:6 readonly 17/05/95 12:59(#)@") */ +#ifndef PCPDBG_H + +/***************************************************************************** +* +* $Workfile:: PCPDBG.H $ +* +* $Logfile:: $ +* +* Library:: CLASSLIB.LIB +* +* Makefile:: MAKEFILE +* +* $Date:: $ +* +* $Revision:: 0.00 $ +* +* $Author:: Klaas van Ditzhuyzen $ +* +* Functions:: +* +* $Log:: $ +* +* NOTES: DEBUG_PRINTF should be defined as a standard printf routine +* to a debug port or file. +* DEBUG_ON() is a macro which returns the debug level. When +* zero, all runtime debugging is turned off. +* +*****************************************************************************/ + + +/***************************************************************************** +* Definitions +*****************************************************************************/ +#ifndef EXTERN_C + /* Allow usage of C++ compiler */ +#ifdef __cplusplus /* Move this to "software.h" */ +#define EXTERN_C extern "C" +#define EXTERN_C_BEGIN EXTERN_C { +#define EXTERN_C_END } +#else +#define EXTERN_C +#define EXTERN_C_BEGIN +#define EXTERN_C_END +#endif /* C++ */ +#endif /* EXTERN_C */ + +#ifndef NULL +#define NULL ((void*) 0) +#endif + +#if DEBUG + +#ifdef _MSC_VER +#pragma message("DEBUG SHIT ENABLED") +#endif + +#ifndef DEBUG_PRINTF_FUNCDEF + +#define DEBUG_PRINTF_FUNCDEF(file) \ +EXTERN_C int DEBUG_PRINTF(const char *s, ...) \ +{ \ + va_list array; \ + char *p = file; \ + int i; \ + static FILE * fp; \ + va_start(array,s); \ + if (!fp) \ + { \ + if (!file) \ + { \ + char fbuf[100]; \ + strcpy(fbuf, __FILE__); \ + p = strchr(fbuf, '.'); \ + strcpy(p, ".log"); \ + p = fbuf; \ + } \ + fp = fopen(p, "w"); \ + } \ + i = vfprintf(fp, s, array); \ + fflush(fp); \ + return i; \ +} + +#endif + +EXTERN_C void DEBUG_DUMPDATA(const char *name, const void *ptr, int nbytes, int flags); + +/* + * Log current value of STACK in hex (consumes two words of stack space !). + */ +#ifndef DEBUG_LOGSTACK +#define DEBUG_LOGSTACK() { int _stack, *STACK=&_stack; dsx(STACK); } +#endif + +/* + * Makes always an acceptable string + */ +#ifndef DEBUG_STR +#define DEBUG_STR(x) (char*)(x) ? (*((char*)x) ? (char*)(x) : "\\0") : _nullname +#endif + +/* + * Opens the debug environment. Can be redefined. + */ + +#ifndef DEBUG_OPEN +#define DEBUG_OPEN(file) fopen(file, "w",stdout) +#endif + +/* + * Does a printf() to a debug file or port. + */ + +#ifndef DEBUG_PRINTF +#define DEBUG_PRINTF printf +#endif + +#ifndef zprintf +#define zprintf DEBUG_PRINTF +#endif + +/* + * Logs return value and return it. + */ + +#ifndef DEBUG_RETURN +#define DEBUG_RETURN(x) { ds(("Returning %s\n",#x)) return x; } +#endif + +/* + * Can be replaced by a variable which holds the debug level. + */ + +#ifndef DEBUG_ON +#if DEBUG==2 +int _debug_on=1; +#elif DEBUG==3 +extern int _debug_on; +#elif DEBUG==1 +static int _debug_on=1; +#endif +#define DEBUG_ON() (_debug_on) +#endif + +/* + * Can be replaced by a variable which holds the debug level. + * Used for tracing function entries. + */ + +#ifndef DEBUG_ENTRYON +#define DEBUG_ENTRYON() DEBUG_ON() +#endif + +/* + * Cleans up the debug environment. + */ + +#ifndef DEBUG_CLOSE +#define DEBUG_CLOSE() fclose(stdout) +#endif + +/* + * Log file name and line number + */ + +#ifndef DEBUG_LOGFILELINE +static char __fileline__[]="%-10s %4d :"; +/* #define DEBUG_LOGFILELINE(file, line) DEBUG_PRINTF("%-10s %4d :",file,line) */ +#define DEBUG_LOGFILELINE(file, line) DEBUG_PRINTF(__fileline__,file,line) +#endif + + +#ifndef DL +#define DL() DEBUG_LOGFILELINE(__FILE__,__LINE__); +#endif + +#ifndef DEBUG_ENTRY +/* + * Function entry and exit + */ +#define _DEBUG_STACKTAG 0xFEDCBA98 /* magic number */ + +#ifdef __cplusplus + +class debug_logentry +{ +private: + long stacktag; + char *funcname; +public: + char *getfuncname() { return funcname; } // function name + void * getstack() { int hello; return (void*) &hello; } // return current stack + void * unwindstack(); // unwind stack + debug_logentry(char *name) + { + funcname = name; + stacktag = _DEBUG_STACKTAG; // magic number + if (DEBUG_ENTRYON()) DEBUG_PRINTF("Entering [%s]\n", funcname); + } + ~debug_logentry() + { + if (DEBUG_ENTRYON()) DEBUG_PRINTF("Leaving [%s]\n", funcname); + } +} ; + +#define __FUNCENTRY__(a,b) debug_logentry __FUNC__(a); + +#else +/* + * Sets the name of a function in a local variable called __FUNC__. + * Can be replaced by logging the name. + */ + +typedef struct +{ + long stacktag; + char *funcname; +} debug_logentry; + +#define __FUNCENTRY__(a,b) debug_logentry __FUNC__ = {_DEBUG_STACKTAG, a} ; + +#endif /* C++ */ +#define DEBUG_ENTRY(a,b) __FUNCENTRY__(#a,b) +#endif /* DEBUG_ENTRY */ + + +#define D(x) x +#define d(x) {if (DEBUG_ON()) {x} } +#define dd(x) {if (DEBUG_ON()) {DL() x} } +#define ds(x) dd(DEBUG_PRINTF x; ) +#define dsx(x) ds(( #x "=0x%08lX\n", (long)(x))) +#define dsd(x) ds(( #x "=%ld\n", (long)(x))) +#define dsxd(x) ds(( #x "=0x%08lX %ld\n", (long)(x), (long)(x))) +#define dsf(x) ds(( #x "=%16g\n", (double)(x))) +#define dsm(s,n) DL() DEBUG_DUMPDATA(#s, s, n, 0) +static const char _nullname[] = ""; +#define dss(x) ds(( #x "=[%s]\n", (const char*)((char*)(x) ? (char*)(x) : _nullname))) +#define dsxs(x) ds(( #x "=0x%08lX [%s]\n", (long)(x), (const char*)((char*)(x) ? (char*)(x) : _nullname))) + +#if __cplusplus + +#define dcp(x) { dd((x)->debug(#x);) } // class debug function + +/* + * For debugging of existing structures: make a derived class of it. + * NOTE: private members are not accessible by this class ! + */ + +#define DEBUG_DCLASS(type, statements) \ +class _DEBUG_##type : public type \ +{ \ +public: \ + inline operator type & () { return (type &) *this; } \ + inline _DEBUG_##type & operator = (type & par) { *this = (_DEBUG_##type &) par; return *this; } \ + DEBUG_LOGSTRUCT(statements) \ +} ; \ +DEBUG_LOGSTRUCTFUNC(type,var) + +#define ddcp(var) { dd(_debug_logstruct(var, #var); ) } + +/* + * For debugging of nonstruct scalar types: make a class containing one data element + * of the specified type named . + */ + +#define DEBUG_VCLASS(type,statements) \ +class _DEBUG_##type \ +{ \ +protected: \ + type var; \ +public: \ + _DEBUG_##type(const type init) { var = init; } \ + inline operator type & () const { return (type&) var ; } \ + DEBUG_LOGSTRUCT(statements) \ +} ; \ +DEBUG_LOGSTRUCTFUNC(type,var) + +#else /* Standard Regular C */ + +#define DEBUG_VCLASS(y,x) +#define DEBUG_DCLASS(y,x) +#define ddcp(x) /* not defined */ +#define dcp(x) /* not defined */ +#endif /* if C++ */ + +#else /* DEBUG off */ + /* stub out DEBUG_PRINTF */ +#define DEBUG_PRINTF_FUNCDEF(file) \ +EXTERN_C int DEBUG_PRINTF(const char *s, ...) { return 0; } + +#define DEBUG_STR(s) s +#define DEBUG_LOGSTACK() +#define DEBUG_VCLASS(y,x) +#define DEBUG_DCLASS(y,x) +#define DEBUG_OPEN(file) +#define DEBUG_CLOSE() +#define DEBUG_ENTRY(a,b) +#define DEBUG_LOGFILELINE(x,y) +#define DEBUG_RETURN(x) return x +#define __FUNCENTRY__(a,b) +#define D(x) +#define DL() +#define d(x) +#define dd(x) +#define ds(x) +#define dsx(x) +#define dsd(x) +#define dsxd(x) +#define dsf(x) +#define dsm(s,n) +#define dss(x) +#define dcp(x) +#define ddcp(x) +#define dsxs(x) +#endif /* if DEBUG */ + +#ifndef assert +#include +#endif + +#if !DEBUG +#define _assert(exp, file, line) _assert(NULL, file, line) +#endif + +/* + * DEBUG member function in a struct or class (C++ only) + * To be put as last item in a struct or class definition. + */ +#if DEBUG && __cplusplus + +/* + * This nonclass function allows type specific versions to allow + * automatic invocation of the type specific debug function without + * specifying the type in the macro. + */ +#define DEBUG_LOGSTRUCTFUNC(type, var) \ +inline void _debug_logstruct(const type * var, char * str) \ +{ \ + ((_DEBUG_##type*)var)->debug(str, #type); \ +} +#ifndef DEBUG_LOGSTRUCT +#define DEBUG_LOGSTRUCT(x) \ +public: void debug(const char *s, const char *typestr=NULL) { \ + DEBUG_PRINTF("%s [%s]: ptr=%08lXh\n", typestr ? typestr : "?", s, this); \ + if (this) { x ; } } +#endif +#else +#define DEBUG_LOGSTRUCTFUNC(type, var) +#define DEBUG_LOGSTRUCT(x) +#endif /* if C++ */ + +#define PCPDBG_H +#endif diff --git a/PIX4.BMP b/PIX4.BMP new file mode 100644 index 0000000000000000000000000000000000000000..a0e9333e1bf6e11a0a93f02cb0ce7f117a097869 GIT binary patch literal 246 zcmZvVy%m5k2!!!H3&*f@4tv+JX0%LYi}w?(B)Nm|h2*@RaNI}-v_U(x#0rl{`JaIh wW;(%9#ux*cptPfk6@R literal 0 HcmV?d00001 diff --git a/README b/README new file mode 100644 index 0000000..5834337 --- /dev/null +++ b/README @@ -0,0 +1,239 @@ + + Emu48 - an HP48 emulator + Copyright (C) 1995 Sebastien Carlier (sebc@cybera.anet.fr) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Emu48 - an HP48 emulator +======================== + +This is Emu48, another HP48 CPU emulator. This is Version 0.37 +It's at least 25% faster than a real HP48GX on an Intel DX2-66, +and it's very small. Though I did nothing to allow that, Emu48 +can emulate BOTH HP48G/GX and HP48S/SX. You've just to give it +the proper rom dump file. +Emu48 is now compatible with Emul48 rom and ram files, but it +will always write them in its own style. + + + + +NOTE (from x48 by Eddie C. Dost, from EM48 README by Paul Fox) +=================================== + +This emulator is capable of providing a faithful replication of the +HP48. In order to do so, it requires a copy of the ROM software +from YOUR calculator. In order to avoid breaking copyright laws, +and upsetting HP, you MUST BE THE PROUD OWNER OF AN HP48 before +running this program. Of course you can run this program without a +copy of the ROM software in order to write trivial machine code +programs but you will not be able to access any of the calculator +functionality. + +Instructions on how to download a copy of the ROM are provided +later in this document. + + +CREDITS +======= + +Thanks to all these friendly guys I met on the #hp48 channel on IRC : + alonzo (Alonzo Gariepy - helped a lot in optimizing Emu48) + fin (Mika Heiskanen - his Jazz is great) + moyer | + BeeF | helpful ideas, documentations, testing programs... + hideki | +and the others I might have forgotten. + +Some parts of this README come from x48 README by Eddie C. Dost. + + +COMPILING THE SOURCES +===================== + +Copy the proper makefile into the main directory and run 'make'. + +Supported plateforms : + Linux/svgalib + MsDos/go32 + MsDos/PharLap + Windows 95/NT + + + +HOW TO DOWNLOAD A COPY OF THE ROM +================================= + +The emulator works by executing an image of the HP48s ROM. In order +to run the emulator you must have a version of your ROM on the system. + +********************************************************************** +* This includes the HIDDEN ROM. Please don't use DUMP programs, that * +* don't dump the HIDDEN ROM. The emulator won't run. * +********************************************************************** + + +To get a memory dump you need to do the following: + + +- Download the file 'romdump/ROMDump' to your HP. + +- To capture a complete ROM, start kermit on your computer, set the + line so it fits your HP, set the speed to 9600 baud and type + 'log session', then 'connect'. + +- On a HP48 S/SX type '#0h #7FFFFh ROMDump', + on a HP48 G/GX type '#0h #FFFFFh ROMDump'. + This will take about 15 minutes on the S/SX, 30 minutes on the G/GX. + +- When done, type the kermit-Escape (usually CTRL-\) followed + by 'C' on your Computer. Say 'quit' to the kermit. + +Your ROM should now be in the file 'session.log'. + + + +Now you have a file containing lines like + +#00000:2369B108DADF1008 +... + +This has to be converted to a binary ROM for x48. + +Run the command: `dump2rom session.log` +This will convert your dump into a rom file readable by the emulator +called 'rom.dump'. + +CHECK the file with the program 'checkrom'. +Type: `checkrom rom.dump`. It should say: + + ROM Version is HP48-A + ROM CRC reads 0xcb76 (for Rev. A, will be different for other ROMs) + IROM OK: ROM CRC test passed. + +or + + ROM Version is HP48-R + ROM CRC 1 reads 0xdfed (for Rev. R, will be different for other ROMs) + ROM CRC 2 reads 0xf0b1 ( --- " --- ) + IROM OK: ROM CRC test passed. + +If the test failed, something went wrong transfering the ROM. Don't +start thinking about the size or the nibbles in 'rom.dump'. That's +all correct. Do the Transfer again. + +If you know how to do it, you could of course only transfer the +'broken' part of the dump, using e.g. '#60000h #60080h ROMDump' +and fix these lines in 'session.log'. + + +USING THE EMULATOR +================== + + * Press the RIGHT Control key to quit the emulator. + * Press the RIGHT Alt key to quit the emulator WITHOUT SAVING its state. + * If(When?) the emulator crashes, quit it with [RightCtrl], and run + emu48 -W + If it doesn't work, try using -WC instead of -W. + If this fails, delete the file named 'saturn' and run emu48. + + +USING RAM CARDS +=============== + +To get a RAM card, just create files named 'port1' and 'port2' with +something like this : + echo > port1 +or echo > port2 + +You can now create files named 'port2.1', 'port2.2'...'port2.31' to have +a card bigger than 128k in port 2. + + +KEYBOARD SUPPORT +================ + + ON = Esc + A = A, Insert B = B, Home + C = C, PageUp D = D, Delete + E = E, End F = F, PageDown + G,MTH = G H,PRG = H + I,CST = I J,VAR = J + K,UP = K, Up Arrow L,NXT = L + M,' = M, ' N,STO = N + O,EVAL = O P,LEFT = P, Left Arrow + Q,DOWN = Q, Down Arrow R,RIGHT= E, Right Arrow + S,SIN = S T,COS = T + U,TAN = U V,SQRT = V + W,Y^X = W X,1/X = X + ENTER = ENTER Y,+/- = Y + Z,EEX = Z DEL = Keypad Del + <= = BackSpace ALPHA = Left Shift, Right Shift + <~| = Left Crtl |~> = Left Alt + 0 = 0, Keypad 0 1 = 1, Keypad 1 + 2 = 2, Keypad 2 3 = 3, Keypad 3 + 4 = 4, Keypad 4 5 = 5, Keypad 5 + 6 = 6, Keypad 6 7 = 7, Keypad 7 + 8 = 8, Keypad 8 9 = 9, Keypad 9 + . = . SPC = Space + / = /, Keypad / * = Keypad * + - = -, Keypad - + = Keypad + + + +TALKING TO THE OUTSIDE WORLD +============================ + + * To load a kermit file from disk, name it as 'port1' in the directory + in which the emulator is. Then run the emulator, type the following + program and store it as 'GET1' : + + << GROB 8 3 0100C0 #4017h SYSEVAL #56B6h SYSEVAL DROP NEWOB >> + + When you execute this program, it will put on the stack the content + of the file you renamed as 'port1'. + This works only for binary files. + + * Serial ports aren't emulated. Instead, the XMIT command will write + its output to a file named 'wire'. You can use the 'SND.PRG' file + along with the DEV library (download them 'GET1') to send an object + on the stack to the file 'wire', which will be exactly like a kermit + binary file. You must quit the emulator and rename 'wire' before + sending another file, otherwise you'll only be able to recover the + first file. + + +KNOWN BUGS +========== + +Timer handling isn't really good. I'm fixing that. + +I must also provide different keyboard mappings. + +Someone told me Emu48 didn't display anything on his computer. This should +be checked. + + + +ACCESS TO THE AUTHOR +==================== + +Please send any bug reports, context-diffs or suggestions to + +sebc@cybera.anet.fr + +Sebastien Carlier +10, Allee des bergeronnettes +35340 LIFFRE +FRANCE diff --git a/RESOURCE.H b/RESOURCE.H new file mode 100644 index 0000000..e685c44 --- /dev/null +++ b/RESOURCE.H @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by EMU48.RC +// +#define IDI_APP 101 +#define IDB_KEYBOARD 102 +#define ID_SYSTEM_RUN 40001 +#define ID_SYSTEM_EXIT 40002 +#define ID_SAVE 40004 +#define ID_HELP_ABOUT 40003 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 108 +#define _APS_NEXT_COMMAND_VALUE 40004 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/ROM b/ROM new file mode 100644 index 0000000000000000000000000000000000000000..74ade581cf8dea5874738558bd1cc109691047fb GIT binary patch literal 262144 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 literal 0 HcmV?d00001 diff --git a/ROMDUMP b/ROMDUMP new file mode 100644 index 0000000000000000000000000000000000000000..a8f101e8bdd865ed9df3153cede34712af7fa54a GIT binary patch literal 561 zcmeYW@CY!m&<&cadtrsdrhdVROuHE_++>=a88`t0M}3t(XdPqsG;IOp|+t2|A!y@)e0mNzZ$SG)N`1yFw}9B1R1h0{O2$Q z2>=N&tB#|!!HI#PV@dvuoYpIi004`VP()U zY+>j9_>m!Kqlow={_@yZEi@}{;*y=cMU|BlrbI!#6h4KxJ{qdJFHW~xn$I%)9 zL=gQQQ2iSnfJO@ZGX1!q?iiEdB{5|Ve-3^iw&#%Nu#XjHd9_@xt5SADd{+E>0b$h6eWU7sVWT85tm8gAlW}Ap-z>#>f-^ literal 0 HcmV?d00001 diff --git a/RUNME.BAT b/RUNME.BAT new file mode 100644 index 0000000..f1e6e68 --- /dev/null +++ b/RUNME.BAT @@ -0,0 +1,3 @@ +@echo off +echo Building opcodes.h +..\bin\lst2c.com < ..\src\opcodes.lst > ..\src\opcodes.h diff --git a/SATURN.C b/SATURN.C new file mode 100644 index 0000000..29d6e96 --- /dev/null +++ b/SATURN.C @@ -0,0 +1,130 @@ +/* + * emu48/src/emulate.c + * + * Copyright (C) 1995 Sebastien Carlier + */ + +#include +#include "emu48.h" + +#define goyes(n) GOJMP = I+n; goto o_goyes; + +/* P WP* XS X S M B W P WP XS X S M B W*/ +int F04[16] = { 4, 32, 4, 12, 4, 48, 8, 64, 4, 4, 4, 12, 4, 48, 8, 64}; +int FRD[16] = {132,202,132,152,132,248,142,288,132,202,132,152,132,248,142,288}; +int FWR[16] = {142,212,142,162,142,232,152,272,142,212,142,162,142,232,152,272}; +/* P WP XS X S M B W - - - - - - - A*/ +int S00[16] = {124,124,124, 68,124,124, 64,120, 0, 0, 0, 0, 0, 0, 0, 76}; +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F*/ +int D10[16] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100,110,120,130,140,150}; +int NWR[16] = {142,132,162,152,182,172,202,192,222,212,242,232,262,252,282,272}; +int NRD[16] = {132,148,152,168,172,188,192,208,212,228,232,248,252,268,272,288}; +/*108 874*/ +char X[16]; + +FILE *wire; + +void emulate() { + long ticks, update_lcd, update_kbd; + long d; + char *I, *GOJMP, n; + signed char jmp; + + wire = fopen("wire", "wb"); + ticks = saturn_speed; + update_lcd=0; + update_kbd=128; + + while (!quit) { + if (SHUTDN) { ticks-=12; goto o_done; } + if (pc<0x7E000) { I = rom+pc; goto o_fetch; } + if (ISMODULE(1, pc)) { I = data[1]+pc-base[1]; goto o_fetch; } + if (CARDSTATUS&2) if (ISMODULE(3, pc)) { I = data[3]+pc-base[3]; goto o_fetch; } + if (CARDSTATUS&1) if (ISMODULE(4, pc)) { I = data[4]+pc-base[4]; goto o_fetch; } + I = rom+pc; +o_fetch: + +#include "fetch.h" +#include "opcodes.h" + +o_goyes: + if (!CARRY) { pc+=2; goto o_done; } + ticks -= 40; + jmp = GOJMP[0] | (GOJMP[1]<<4); + if (jmp) pc+=jmp; else pc=rstkpop(); + goto o_done; +o_invalid: + sprintf(Buf, "Invalid Opcode at #%05lX\n", pc); + display_warning(Buf); + fclose(wire); + quit = 1; + return; +o_invalid3: pc+=3; ticks--; goto o_done; +o_invalid4: pc+=4; ticks--; goto o_done; +o_invalid5: pc+=5; ticks--; goto o_done; +o_invalid6: pc+=6; ticks--; goto o_done; +o_done: + if (ticks>0) continue; + /* 1/8192s has elapsed */ + + ticks = saturn_speed; + + update_lcd^=1; + if (update_lcd) { /* LCD_REFRESH 4096Hz */ + display_next(); + if (display.touched) display_redraw(); + if (ioram[0x10]&8) { + if (ioram[0x12]&1) { + fputc((char)Npack(ioram+0x16, 2), wire); + ioram[0x12] = 0; + if (ioram[0x10]&4) INTERRUPT("IO"); + } + } + } + + update_kbd--; + if (update_kbd<=0) { /* KBD_UPDATE 64Hz */ + if ((ioram[0x2f]&1) == 0) update_kbd = 128; + keyboard_update(); + if (IR15X) { + SHUTDN = 0; + if (!INTP) INTERRUPT("ON"); + } + } + + if ((ioram[0x2f]&1) == 0) continue; /* T2, T1, KBD_POLL disabled ? */ + + if (t2) /* T2 8192Hz */ + t2--; + else { + t2 = 0xffffffff; + if (ioram[0x2f]&4) { ioram[0x2f]|=8; SHUTDN = 0; } + if (ioram[0x2f]&2) { ioram[0x2f]|=8; if (!INTP) INTERRUPT("T2"); } + } + + if ((t2&0x1ff) == 0) { /* T1 16Hz */ + if (t1) + t1--; + else { /* 1s has elapsed */ + t1 = 0xf; + if (ioram[0x2e]&4) { ioram[0x2e]|=8; SHUTDN = 0; } + if (ioram[0x2e]&2) { ioram[0x2e]|=8; if (!INTP) INTERRUPT("T1"); } + } + } + + if (update_kbd<=0) { /* KBD_POLL 64Hz */ + update_kbd = 128; + if (KDN_rising_edge) { + KDN_rising_edge = 0; + SHUTDN = 0; + if (INTE&&(!INTP)) INTERRUPT("KP"); + } + } + + } + + fclose(wire); + return; +} + + \ No newline at end of file diff --git a/SAVE.BAT b/SAVE.BAT new file mode 100644 index 0000000..2aeff1f --- /dev/null +++ b/SAVE.BAT @@ -0,0 +1,15 @@ +@echo off +if %1z == z goto err +ctty nul +call renlower *.* +ctty con +arj u EMU48 ram.1 readme rom *.html *.dat *.bat *.c *.h *.rc *.ico *.bmp *.mak makefile romdump dump2rom.c +arj t EMU48 +echo Insert EMU48 diskette in %1: +pause +copy EMU48.arj %1: /v +chkdsk %1: +goto end +:err +echo SAVE drive +:end diff --git a/dump2rom.exe b/dump2rom.exe new file mode 100644 index 0000000000000000000000000000000000000000..99164f1c4232df437d257cd5a911900c4a4e0405 GIT binary patch literal 22528 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

4LpxoRB4;Y#x+QKqP`to)YB)7w;8`CSf=5i zsIJ|ZQ&igC87vyvzWdsu-?tqwJkvr0lgDjcB!1%l%eKK!-REx0`H{PKQ8d%@V#xZS zZ=pF`-s4}iWW<^O+C*Q1BC}kilvCt)ax9um-wd~Ca(Wh>K-+!YFKzlwgbZ09f4Fzt zJLN||&s876Pw4mWcb52t5p6Cwu_`_KMX5o5GM&%fSu(KYHW?ZnX>Vy;*0Q;MR^`gd z(duurmWWt*ZrwF6*6y7DAbrCI{S{mK!-$L5H?-Z=p59SHUpNvI{KapT^sP}-=Fwjd zr|;sFf1_Qvdil#+>Famc3w^yQfBWeRH}j#G_0-lwQ~zc6jwbrPI5P&HAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& z00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY z0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea xAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00KndzX2xuyZrzF literal 0 HcmV?d00001