├── src ├── STRCONST.h ├── ICONAPPW.ico ├── ICONDSKW.ico ├── ICONROMW.ico ├── ICONAPPO.icns ├── ICONDSKO.icns ├── ICONROMO.icns ├── CNFUIPIC.h ├── CNFUIOSG.h ├── ROMEMDEV.h ├── PMUEMDEV.h ├── SCRNEMDV.h ├── MOUSEMDV.h ├── SNDEMDEV.h ├── ASCEMDEV.h ├── IWMEMDEV.h ├── PROGMAIN.h ├── SCSIEMDV.h ├── VIDEMDEV.h ├── DISAM68K.h ├── ADBEMDEV.h ├── KBRDEMDV.h ├── RTCEMDEV.h ├── SONYEMDV.h ├── SCCEMDEV.h ├── CNFUDOSG.h ├── OSGCOMUD.h ├── CNFUDALL.h ├── main.r ├── VIA2EMDV.h ├── VIAEMDEV.h ├── SCRNEMDV.c ├── MINEM68K.h ├── OSGCOMUI.h ├── CNFUIALL.h ├── PICOMMON.h ├── PBUFSTDC.h ├── MOUSEMDV.c ├── DFCNFCMP.h ├── ENDIANAC.h ├── SCRNTRNS.h ├── SCRNMAPR.h ├── SCSIEMDV.c ├── DATE2SEC.h ├── ALTKEYSM.h ├── KBRDEMDV.c ├── M68KITAB.h ├── IWMEMDEV.c ├── HPMCHACK.h ├── CNFUDPIC.h ├── SNDEMDEV.c ├── SGLUDDSP.h ├── ADBEMDEV.c ├── ADBSHARE.h ├── GLOBGLUE.h ├── STRCNENG.h ├── STRCNPOL.h ├── ICONAPPM.r ├── ICONDSKM.r ├── ICONROMM.r ├── STRCNSPA.h ├── STRCNCAT.h ├── STRCNCZE.h ├── STRCNDUT.h ├── STRCNITA.h └── STRCNGER.h ├── .gitignore ├── Screenshots ├── menu.png ├── home-card.png └── system6-about.png ├── Source ├── images │ ├── card.png │ └── icon.png └── pdxinfo ├── Makefile ├── CMakeLists.txt └── README.md /src/STRCONST.h: -------------------------------------------------------------------------------- 1 | #include "STRCNENG.h" 2 | -------------------------------------------------------------------------------- /src/ICONAPPW.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/src/ICONAPPW.ico -------------------------------------------------------------------------------- /src/ICONDSKW.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/src/ICONDSKW.ico -------------------------------------------------------------------------------- /src/ICONROMW.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/src/ICONROMW.ico -------------------------------------------------------------------------------- /src/ICONAPPO.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/src/ICONAPPO.icns -------------------------------------------------------------------------------- /src/ICONDSKO.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/src/ICONDSKO.icns -------------------------------------------------------------------------------- /src/ICONROMO.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/src/ICONROMO.icns -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build.dev 2 | build 3 | minivmac.pdx 4 | Source/pdex.dylib 5 | Source/pdex.elf 6 | *.dsk 7 | -------------------------------------------------------------------------------- /Screenshots/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/Screenshots/menu.png -------------------------------------------------------------------------------- /Source/images/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/Source/images/card.png -------------------------------------------------------------------------------- /Source/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/Source/images/icon.png -------------------------------------------------------------------------------- /Screenshots/home-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/Screenshots/home-card.png -------------------------------------------------------------------------------- /Screenshots/system6-about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zydeco/minivmac4playdate/HEAD/Screenshots/system6-about.png -------------------------------------------------------------------------------- /Source/pdxinfo: -------------------------------------------------------------------------------- 1 | name=Mini vMac 2 | author=Jesus A. Alvarez 3 | description=Miniature Macintosh Emulator 4 | bundleID=net.namedfork.minivmac 5 | imagePath=images 6 | buildNumber=1 7 | -------------------------------------------------------------------------------- /src/CNFUIPIC.h: -------------------------------------------------------------------------------- 1 | /* 2 | see comment in PICOMMON.h 3 | 4 | This file is automatically generated by the build system, 5 | which tries to know what options are valid in what 6 | combinations. Avoid changing this file manually unless 7 | you know what you're doing. 8 | */ 9 | -------------------------------------------------------------------------------- /src/CNFUIOSG.h: -------------------------------------------------------------------------------- 1 | /* 2 | see comment in OSGCOMUI.h 3 | 4 | This file is automatically generated by the build system, 5 | which tries to know what options are valid in what 6 | combinations. Avoid changing this file manually unless 7 | you know what you're doing. 8 | */ 9 | 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | -------------------------------------------------------------------------------- /src/ROMEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | ROMEMDEV.h 3 | 4 | Copyright (C) 2003 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef ROMEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define ROMEMDEV_H 21 | #endif 22 | 23 | EXPORTFUNC blnr ROM_Init(void); 24 | -------------------------------------------------------------------------------- /src/PMUEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | PMUEMDEV.h 3 | 4 | Copyright (C) 2008 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef PMUEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define PMUEMDEV_H 21 | #endif 22 | 23 | EXPORTPROC PmuToReady_ChangeNtfy(void); 24 | EXPORTPROC PMU_DoTask(void); 25 | -------------------------------------------------------------------------------- /src/SCRNEMDV.h: -------------------------------------------------------------------------------- 1 | /* 2 | SCRNEMDV.h 3 | 4 | Copyright (C) 2006 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | #ifdef SCRNEMDV_H 19 | #error "header already included" 20 | #else 21 | #define SCRNEMDV_H 22 | #endif 23 | 24 | EXPORTPROC Screen_EndTickNotify(void); 25 | -------------------------------------------------------------------------------- /src/MOUSEMDV.h: -------------------------------------------------------------------------------- 1 | /* 2 | MOUSEMDV.h 3 | 4 | Copyright (C) 2003 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef MOUSEMDV_H 18 | #error "header already included" 19 | #else 20 | #define MOUSEMDV_H 21 | #endif 22 | 23 | EXPORTPROC Mouse_Update(void); 24 | EXPORTPROC Mouse_EndTickNotify(void); 25 | -------------------------------------------------------------------------------- /src/SNDEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | SNDEMDEV.h 3 | 4 | Copyright (C) 2003 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef SNDEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define SNDEMDEV_H 21 | #endif 22 | 23 | #if MySoundEnabled 24 | EXPORTPROC MacSound_SubTick(int SubTick); 25 | #endif 26 | -------------------------------------------------------------------------------- /src/ASCEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | ASCEMDEV.h 3 | 4 | Copyright (C) 2008 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef ASCEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define ASCEMDEV_H 21 | #endif 22 | 23 | EXPORTFUNC ui5b ASC_Access(ui5b Data, blnr WriteMem, CPTR addr); 24 | EXPORTPROC ASC_SubTick(int SubTick); 25 | -------------------------------------------------------------------------------- /src/IWMEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | IWMEVDEV.h 3 | 4 | Copyright (C) 2004 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef IWMEVDEV_H 18 | #error "header already included" 19 | #else 20 | #define IWMEVDEV_H 21 | #endif 22 | 23 | EXPORTPROC IWM_Reset(void); 24 | 25 | EXPORTFUNC ui5b IWM_Access(ui5b Data, blnr WriteMem, CPTR addr); 26 | -------------------------------------------------------------------------------- /src/PROGMAIN.h: -------------------------------------------------------------------------------- 1 | /* 2 | PROGMAIN.h 3 | 4 | Copyright (C) 2009 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | #ifdef PROGMAIN_H 19 | #error "header already included" 20 | #else 21 | #define PROGMAIN_H 22 | #endif 23 | 24 | EXPORTPROC EmulationReserveAlloc(void); 25 | EXPORTPROC ProgramMain(void); 26 | -------------------------------------------------------------------------------- /src/SCSIEMDV.h: -------------------------------------------------------------------------------- 1 | /* 2 | SCSIEMDV.h 3 | 4 | Copyright (C) 2004 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef SCSIEMDV_H 18 | #error "header already included" 19 | #else 20 | #define SCSIEMDV_H 21 | #endif 22 | 23 | EXPORTPROC SCSI_Reset(void); 24 | 25 | EXPORTFUNC ui5b SCSI_Access(ui5b Data, blnr WriteMem, CPTR addr); 26 | -------------------------------------------------------------------------------- /src/VIDEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | VIDEMDEV.h 3 | 4 | Copyright (C) 2008 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef VIDEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define VIDEMDEV_H 21 | #endif 22 | 23 | EXPORTFUNC blnr Vid_Init(void); 24 | EXPORTFUNC ui4r Vid_Reset(void); 25 | EXPORTPROC Vid_Update(void); 26 | 27 | EXPORTPROC ExtnVideo_Access(CPTR p); 28 | -------------------------------------------------------------------------------- /src/DISAM68K.h: -------------------------------------------------------------------------------- 1 | /* 2 | DISAM68K.h 3 | 4 | Copyright (C) 2010 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | DISAssemble Motorola 68K instructions. 19 | */ 20 | 21 | #ifdef DIS1M68K_H 22 | #error "header already included" 23 | #else 24 | #define DIS1M68K_H 25 | #endif 26 | 27 | EXPORTPROC DisasmOneOrSave(ui5r pc); 28 | 29 | EXPORTPROC m68k_WantDisasmContext(void); 30 | -------------------------------------------------------------------------------- /src/ADBEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | ADBEMDEV.h 3 | 4 | Copyright (C) 2008 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef ADBEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define ADBEMDEV_H 21 | #endif 22 | 23 | 24 | EXPORTPROC ADBstate_ChangeNtfy(void); 25 | EXPORTPROC ADB_DoNewState(void); 26 | EXPORTPROC ADB_DataLineChngNtfy(void); 27 | EXPORTPROC ADB_Update(void); 28 | -------------------------------------------------------------------------------- /src/KBRDEMDV.h: -------------------------------------------------------------------------------- 1 | /* 2 | KBRDEMDV.h 3 | 4 | Copyright (C) 2003 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef KBRDEMDV_H 18 | #error "header already included" 19 | #else 20 | #define KBRDEMDV_H 21 | #endif 22 | 23 | 24 | EXPORTPROC Kybd_DataLineChngNtfy(void); 25 | EXPORTPROC DoKybd_ReceiveEndCommand(void); 26 | EXPORTPROC DoKybd_ReceiveCommand(void); 27 | EXPORTPROC KeyBoard_Update(void); 28 | -------------------------------------------------------------------------------- /src/RTCEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | RTCEMDEV.h 3 | 4 | Copyright (C) 2003 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef RTCEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define RTCEMDEV_H 21 | #endif 22 | 23 | EXPORTFUNC blnr RTC_Init(void); 24 | EXPORTPROC RTC_Interrupt(void); 25 | 26 | EXPORTPROC RTCunEnabled_ChangeNtfy(void); 27 | EXPORTPROC RTCclock_ChangeNtfy(void); 28 | EXPORTPROC RTCdataLine_ChangeNtfy(void); 29 | -------------------------------------------------------------------------------- /src/SONYEMDV.h: -------------------------------------------------------------------------------- 1 | /* 2 | SONYEMDV.h 3 | 4 | Copyright (C) 2004 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef SONYEMDV_H 18 | #error "header already included" 19 | #else 20 | #define SONYEMDV_H 21 | #endif 22 | 23 | EXPORTPROC ExtnDisk_Access(CPTR p); 24 | EXPORTPROC ExtnSony_Access(CPTR p); 25 | 26 | EXPORTPROC Sony_SetQuitOnEject(void); 27 | 28 | EXPORTPROC Sony_EjectAllDisks(void); 29 | EXPORTPROC Sony_Reset(void); 30 | 31 | EXPORTPROC Sony_Update(void); 32 | -------------------------------------------------------------------------------- /src/SCCEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | SCCEMDEV.h 3 | 4 | Copyright (C) 2004 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef SCCEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define SCCEMDEV_H 21 | #endif 22 | 23 | EXPORTPROC SCC_Reset(void); 24 | 25 | EXPORTFUNC ui5b SCC_Access(ui5b Data, blnr WriteMem, CPTR addr); 26 | 27 | EXPORTFUNC blnr SCC_InterruptsEnabled(void); 28 | 29 | #if EmLocalTalk 30 | EXPORTPROC LocalTalkTick(void); 31 | #endif 32 | -------------------------------------------------------------------------------- /src/CNFUDOSG.h: -------------------------------------------------------------------------------- 1 | /* 2 | see comment in OSGCOMUD.h 3 | 4 | This file is automatically generated by the build system, 5 | which tries to know what options are valid in what 6 | combinations. Avoid changing this file manually unless 7 | you know what you're doing. 8 | */ 9 | 10 | #define RomFileName "vMac.ROM" 11 | #define kCheckSumRom_Size 0x00020000 12 | #define kRomCheckSum1 0x4D1EEEE1 13 | #define kRomCheckSum2 0x4D1EEAE1 14 | #define kRomCheckSum3 0x4D1F8172 15 | #define RomStartCheckSum 1 16 | #define SaveDialogEnable 0 17 | #define EnableAltKeysMode 0 18 | #define VarFullScreen 1 19 | #define WantInitFullScreen 0 20 | #define MayFullScreen 1 21 | #define MayNotFullScreen 0 22 | #define WantInitMagnify 0 23 | #define EnableMagnify 0 24 | #define MyWindowScale 1 25 | #define WantInitRunInBackground 0 26 | #define WantInitNotAutoSlow 1 27 | #define WantInitSpeedValue 0 28 | #define WantEnblCtrlInt 0 29 | #define WantEnblCtrlRst 0 30 | #define WantEnblCtrlKtg 0 31 | #define UseControlKeys 1 32 | #define UseActvCode 0 33 | #define EnableDemoMsg 0 34 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | HEAP_SIZE = 8388208 2 | STACK_SIZE = 61800 3 | 4 | PRODUCT = minivmac.pdx 5 | 6 | # Locate the SDK 7 | SDK = ${PLAYDATE_SDK_PATH} 8 | ifeq ($(SDK),) 9 | SDK = $(shell egrep '^\s*SDKRoot' ~/.Playdate/config | head -n 1 | cut -c9-) 10 | endif 11 | 12 | ifeq ($(SDK),) 13 | $(error SDK path not found; set ENV value PLAYDATE_SDK_PATH) 14 | endif 15 | 16 | ###### 17 | # IMPORTANT: You must add your source folders to VPATH for make to find them 18 | # ex: VPATH += src1:src2 19 | ###### 20 | 21 | VPATH += src 22 | 23 | # List C source files here 24 | SRC = OSGLUPDX.c SCSIEMDV.c MINEM68K.c GLOBGLUE.c M68KITAB.c PROGMAIN.c IWMEMDEV.c VIAEMDEV.c SCRNEMDV.c SONYEMDV.c SNDEMDEV.c ROMEMDEV.c RTCEMDEV.c KBRDEMDV.c SCCEMDEV.c MOUSEMDV.c 25 | 26 | # List all user directories here 27 | UINCDIR = 28 | 29 | # List user asm files 30 | UASRC = 31 | 32 | # List all user C define here, like -D_DEBUG=1 33 | UDEFS = -O3 34 | 35 | # Define ASM defines here 36 | UADEFS = 37 | 38 | # List the user directory to look for the libraries here 39 | ULIBDIR = 40 | 41 | # List all user libraries here 42 | ULIBS = 43 | 44 | include $(SDK)/C_API/buildsupport/common.mk 45 | 46 | -------------------------------------------------------------------------------- /src/OSGCOMUD.h: -------------------------------------------------------------------------------- 1 | /* 2 | OSGCOMUD.h 3 | 4 | Copyright (C) 2020 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Operating System Glue COMmon includes, User options Dependent 19 | 20 | Second include of OSGLUxxx files. All things in common 21 | that can not go in OSGLCMUI, because they depend on user options. 22 | */ 23 | 24 | #ifdef OSGCOMUD_H 25 | #error "header already included" 26 | #else 27 | #define OSGCOMUD_H 28 | #endif 29 | 30 | #include "CNFUDOSG.h" 31 | /* 32 | Configuration file dependent on user options 33 | for operating system glue. 34 | */ 35 | #include "CNFUDALL.h" 36 | /* 37 | Configuration file dependent on user options 38 | for all code. 39 | */ 40 | #include "OSGLUAAA.h" 41 | 42 | #include "STRCONST.h" 43 | -------------------------------------------------------------------------------- /src/CNFUDALL.h: -------------------------------------------------------------------------------- 1 | /* 2 | see comment in OSGCOMUD.h 3 | 4 | This file is automatically generated by the build system, 5 | which tries to know what options are valid in what 6 | combinations. Avoid changing this file manually unless 7 | you know what you're doing. 8 | */ 9 | 10 | #define MySoundEnabled 0 11 | 12 | #define MySoundRecenterSilence 0 13 | #define kLn2SoundSampSz 3 14 | 15 | #define dbglog_HAVE 1 16 | #define dbglog_Lag 1 17 | 18 | #define WantAbnormalReports 0 19 | 20 | #define NumDrives 6 21 | #define NonDiskProtect 0 22 | #define IncludeSonyRawMode 1 23 | #define IncludeSonyGetName 1 24 | #define IncludeSonyNew 0 25 | #define IncludeSonyNameNew 0 26 | 27 | //#define vMacScreenWidth 512 28 | //#define vMacScreenHeight 384 29 | #define vMacScreenWidth 400 30 | #define vMacScreenHeight 240 31 | 32 | #define vMacScreenDepth 0 33 | 34 | #if vMacScreenWidth != 512 35 | #define UseLargeScreenHack 1 36 | #endif 37 | 38 | #define kROM_Size 0x00020000 39 | 40 | #define IncludePbufs 1 41 | #define NumPbufs 4 42 | 43 | #define EnableMouseMotion 1 44 | 45 | #define IncludeHostTextClipExchange 0 46 | #define EnableAutoSlow 0 47 | #define EmLocalTalk 0 48 | 49 | #define AutoLocation 0 50 | #define AutoTimeZone 0 51 | #define CurMacLatitude 0 52 | #define CurMacLongitude 0 53 | #define CurMacDelta 0 54 | -------------------------------------------------------------------------------- /src/main.r: -------------------------------------------------------------------------------- 1 | /* 2 | main.r 3 | 4 | Copyright (C) 2003 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | #include "CNFGRSRC.h" 19 | 20 | /* Alerts Constants */ 21 | 22 | #define kMyStandardAlert 128 23 | 24 | resource 'DITL' (kMyStandardAlert, purgeable) { 25 | { /* array DITLarray: 2 elements */ 26 | /* [1] */ 27 | {177, 293, 197, 351}, 28 | Button { 29 | enabled, 30 | "OK" 31 | }, 32 | /* [2] */ 33 | {10, 72, 162, 353}, 34 | StaticText { 35 | disabled, 36 | "^0\n\n^1^2^3" 37 | } 38 | } 39 | }; 40 | 41 | resource 'ALRT' (kMyStandardAlert, "Non Fatal Error", purgeable) { 42 | {40, 43, 249, 405}, 43 | kMyStandardAlert, 44 | { /* array: 4 elements */ 45 | /* [1] */ 46 | OK, visible, sound1, 47 | /* [2] */ 48 | OK, visible, sound1, 49 | /* [3] */ 50 | OK, visible, sound1, 51 | /* [4] */ 52 | OK, visible, sound1 53 | }, 54 | alertPositionMainScreen 55 | }; 56 | -------------------------------------------------------------------------------- /src/VIA2EMDV.h: -------------------------------------------------------------------------------- 1 | /* 2 | VIA2EMDV.h 3 | 4 | Copyright (C) 2004 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef VIA2EMDV_H 18 | #error "header already included" 19 | #else 20 | #define VIA2EMDV_H 21 | #endif 22 | 23 | EXPORTPROC VIA2_Zap(void); 24 | EXPORTPROC VIA2_Reset(void); 25 | 26 | EXPORTFUNC ui5b VIA2_Access(ui5b Data, blnr WriteMem, CPTR addr); 27 | 28 | EXPORTPROC VIA2_ExtraTimeBegin(void); 29 | EXPORTPROC VIA2_ExtraTimeEnd(void); 30 | #ifdef VIA2_iCA1_PulseNtfy 31 | EXPORTPROC VIA2_iCA1_PulseNtfy(void); 32 | #endif 33 | #ifdef VIA2_iCA2_PulseNtfy 34 | EXPORTPROC VIA2_iCA2_PulseNtfy(void); 35 | #endif 36 | #ifdef VIA2_iCB1_PulseNtfy 37 | EXPORTPROC VIA2_iCB1_PulseNtfy(void); 38 | #endif 39 | #ifdef VIA2_iCB2_PulseNtfy 40 | EXPORTPROC VIA2_iCB2_PulseNtfy(void); 41 | #endif 42 | EXPORTPROC VIA2_DoTimer1Check(void); 43 | EXPORTPROC VIA2_DoTimer2Check(void); 44 | 45 | EXPORTFUNC ui4b VIA2_GetT1InvertTime(void); 46 | 47 | EXPORTPROC VIA2_ShiftInData(ui3b v); 48 | EXPORTFUNC ui3b VIA2_ShiftOutData(void); 49 | -------------------------------------------------------------------------------- /src/VIAEMDEV.h: -------------------------------------------------------------------------------- 1 | /* 2 | VIAEMDEV.h 3 | 4 | Copyright (C) 2004 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef VIAEMDEV_H 18 | #error "header already included" 19 | #else 20 | #define VIAEMDEV_H 21 | #endif 22 | 23 | EXPORTPROC VIA1_Zap(void); 24 | EXPORTPROC VIA1_Reset(void); 25 | 26 | EXPORTFUNC ui5b VIA1_Access(ui5b Data, blnr WriteMem, CPTR addr); 27 | 28 | EXPORTPROC VIA1_ExtraTimeBegin(void); 29 | EXPORTPROC VIA1_ExtraTimeEnd(void); 30 | #ifdef VIA1_iCA1_PulseNtfy 31 | EXPORTPROC VIA1_iCA1_PulseNtfy(void); 32 | #endif 33 | #ifdef VIA1_iCA2_PulseNtfy 34 | EXPORTPROC VIA1_iCA2_PulseNtfy(void); 35 | #endif 36 | #ifdef VIA1_iCB1_PulseNtfy 37 | EXPORTPROC VIA1_iCB1_PulseNtfy(void); 38 | #endif 39 | #ifdef VIA1_iCB2_PulseNtfy 40 | EXPORTPROC VIA1_iCB2_PulseNtfy(void); 41 | #endif 42 | EXPORTPROC VIA1_DoTimer1Check(void); 43 | EXPORTPROC VIA1_DoTimer2Check(void); 44 | 45 | EXPORTFUNC ui4b VIA1_GetT1InvertTime(void); 46 | 47 | EXPORTPROC VIA1_ShiftInData(ui3b v); 48 | EXPORTFUNC ui3b VIA1_ShiftOutData(void); 49 | -------------------------------------------------------------------------------- /src/SCRNEMDV.c: -------------------------------------------------------------------------------- 1 | /* 2 | SCRNEMDV.c 3 | 4 | Copyright (C) 2006 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | /* 19 | SCReeN EMulated DeVice 20 | 21 | Emulation of the screen in the Mac Plus. 22 | 23 | This code descended from "Screen-MacOS.c" in Richard F. Bannister's 24 | Macintosh port of vMac, by Philip Cummins. 25 | */ 26 | 27 | #include "PICOMMON.h" 28 | 29 | #include "SCRNEMDV.h" 30 | 31 | #if ! IncludeVidMem 32 | #define kMain_Offset 0x5900 33 | #define kAlternate_Offset 0xD900 34 | #define kMain_Buffer (kRAM_Size - kMain_Offset) 35 | #define kAlternate_Buffer (kRAM_Size - kAlternate_Offset) 36 | #endif 37 | 38 | GLOBALPROC Screen_EndTickNotify(void) 39 | { 40 | ui3p screencurrentbuff; 41 | 42 | #if IncludeVidMem 43 | screencurrentbuff = VidMem; 44 | #else 45 | if (SCRNvPage2 == 1) { 46 | screencurrentbuff = get_ram_address(kMain_Buffer); 47 | } else { 48 | screencurrentbuff = get_ram_address(kAlternate_Buffer); 49 | } 50 | #endif 51 | 52 | Screen_OutputFrame(screencurrentbuff); 53 | } 54 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | set(CMAKE_C_STANDARD 11) 3 | 4 | set(ENVSDK $ENV{PLAYDATE_SDK_PATH}) 5 | 6 | if (NOT ${ENVSDK} STREQUAL "") 7 | # Convert path from Windows 8 | file(TO_CMAKE_PATH ${ENVSDK} SDK) 9 | else() 10 | execute_process( 11 | COMMAND bash -c "egrep '^\\s*SDKRoot' $HOME/.Playdate/config" 12 | COMMAND head -n 1 13 | COMMAND cut -c9- 14 | OUTPUT_VARIABLE SDK 15 | OUTPUT_STRIP_TRAILING_WHITESPACE 16 | ) 17 | endif() 18 | 19 | if (NOT EXISTS ${SDK}) 20 | message(FATAL_ERROR "SDK Path not found; set ENV value PLAYDATE_SDK_PATH") 21 | return() 22 | endif() 23 | 24 | set(CMAKE_CONFIGURATION_TYPES "Debug;Release") 25 | set(CMAKE_XCODE_GENERATE_SCHEME TRUE) 26 | 27 | # Game Name Customization 28 | set(PLAYDATE_GAME_NAME minivmac) 29 | set(PLAYDATE_GAME_DEVICE minivmac_DEVICE) 30 | 31 | project(${PLAYDATE_GAME_NAME} C ASM) 32 | 33 | if (TOOLCHAIN STREQUAL "armgcc") 34 | add_executable(${PLAYDATE_GAME_DEVICE} src/OSGLUPDX.c src/SCSIEMDV.c src/MINEM68K.c src/GLOBGLUE.c src/M68KITAB.c src/PROGMAIN.c src/IWMEMDEV.c src/VIAEMDEV.c src/SCRNEMDV.c src/SONYEMDV.c src/SNDEMDEV.c src/ROMEMDEV.c src/RTCEMDEV.c src/KBRDEMDV.c src/SCCEMDEV.c src/MOUSEMDV.c) 35 | else() 36 | add_library(${PLAYDATE_GAME_NAME} SHARED src/OSGLUPDX.c src/SCSIEMDV.c src/MINEM68K.c src/GLOBGLUE.c src/M68KITAB.c src/PROGMAIN.c src/IWMEMDEV.c src/VIAEMDEV.c src/SCRNEMDV.c src/SONYEMDV.c src/SNDEMDEV.c src/ROMEMDEV.c src/RTCEMDEV.c src/KBRDEMDV.c src/SCCEMDEV.c src/MOUSEMDV.c) 37 | endif() 38 | 39 | include(${SDK}/C_API/buildsupport/playdate_game.cmake) 40 | 41 | -------------------------------------------------------------------------------- /src/MINEM68K.h: -------------------------------------------------------------------------------- 1 | /* 2 | MINEM68K.h 3 | 4 | Copyright (C) 2004 Bernd Schmidt, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef MINEM68K_H 18 | #error "header already included" 19 | #else 20 | #define MINEM68K_H 21 | #endif 22 | 23 | EXPORTPROC MINEM68K_Init( 24 | ui3b *fIPL); 25 | #if SmallGlobals 26 | EXPORTPROC MINEM68K_ReserveAlloc(void); 27 | #endif 28 | 29 | EXPORTPROC m68k_IPLchangeNtfy(void); 30 | EXPORTPROC DiskInsertedPsuedoException(CPTR newpc, ui5b data); 31 | EXPORTPROC m68k_reset(void); 32 | 33 | EXPORTFUNC si5r GetCyclesRemaining(void); 34 | EXPORTPROC SetCyclesRemaining(si5r n); 35 | 36 | EXPORTPROC m68k_go_nCycles(ui5b n); 37 | 38 | /* 39 | general purpose access of address space 40 | of emulated computer. (memory and 41 | memory mapped hardware.) 42 | */ 43 | 44 | EXPORTFUNC ui3r get_vm_byte(CPTR addr); 45 | EXPORTFUNC ui4r get_vm_word(CPTR addr); 46 | EXPORTFUNC ui5r get_vm_long(CPTR addr); 47 | 48 | EXPORTPROC put_vm_byte(CPTR addr, ui3r b); 49 | EXPORTPROC put_vm_word(CPTR addr, ui4r w); 50 | EXPORTPROC put_vm_long(CPTR addr, ui5r l); 51 | 52 | EXPORTPROC SetHeadATTel(ATTep p); 53 | EXPORTFUNC ATTep FindATTel(CPTR addr); 54 | -------------------------------------------------------------------------------- /src/OSGCOMUI.h: -------------------------------------------------------------------------------- 1 | /* 2 | OSGCOMUI.h 3 | 4 | Copyright (C) 2020 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Operating System Glue COMmon includes, User options Independent 19 | 20 | First include of OSGLUxxx files. Things in common that are not 21 | affected by user selected options. 22 | (but are affected by developer selected options) 23 | 24 | May be worthwhile to create a pre-compiled header from this, 25 | if supported by compiler, which can be used for all 26 | Variations of a given port. 27 | */ 28 | 29 | #ifdef OSGCOMUI_H 30 | #error "header already included" 31 | #else 32 | #define OSGCOMUI_H 33 | #endif 34 | 35 | 36 | #include "CNFUIOSG.h" 37 | /* 38 | Configuration file independent of user options 39 | for operating system glue. 40 | Such as includes of API header files 41 | */ 42 | #include "CNFUIALL.h" 43 | /* 44 | Configuration file independent of user options 45 | for all code. 46 | In particular, configuration for current compiler. 47 | */ 48 | #include "DFCNFCMP.h" 49 | /* 50 | Default configuration of compiler 51 | If options for compiler haven't been defined in any 52 | configuration files, they are defined here. 53 | */ 54 | #include "ENDIANAC.h" 55 | -------------------------------------------------------------------------------- /src/CNFUIALL.h: -------------------------------------------------------------------------------- 1 | /* 2 | see comment in OSGCOMUI.h 3 | 4 | This file is automatically generated by the build system, 5 | which tries to know what options are valid in what 6 | combinations. Avoid changing this file manually unless 7 | you know what you're doing. 8 | */ 9 | 10 | #include 11 | 12 | #define MayInline inline __attribute__((always_inline)) 13 | #define MayNotInline __attribute__((noinline)) 14 | #define SmallGlobals 0 15 | #define cIncludeUnused 0 16 | #define UnusedParam(p) (void) p 17 | 18 | /* --- integer types ---- */ 19 | 20 | typedef unsigned char ui3b; 21 | #define HaveRealui3b 1 22 | 23 | typedef signed char si3b; 24 | #define HaveRealsi3b 1 25 | 26 | typedef unsigned short ui4b; 27 | #define HaveRealui4b 1 28 | 29 | typedef short si4b; 30 | #define HaveRealsi4b 1 31 | 32 | typedef unsigned int ui5b; 33 | #define HaveRealui5b 1 34 | 35 | typedef int si5b; 36 | #define HaveRealsi5b 1 37 | 38 | #define HaveRealui6b 1 39 | #define HaveRealsi6b 1 40 | 41 | /* --- integer representation types ---- */ 42 | 43 | typedef ui3b ui3r; 44 | #define ui3beqr 1 45 | 46 | typedef si3b si3r; 47 | #define si3beqr 1 48 | 49 | typedef ui4b ui4r; 50 | #define ui4beqr 1 51 | 52 | typedef si4b si4r; 53 | #define si4beqr 1 54 | 55 | typedef ui5b ui5r; 56 | #define ui5beqr 1 57 | 58 | typedef si5b si5r; 59 | #define si5beqr 1 60 | 61 | typedef int64_t si6r; 62 | typedef int64_t si6b; 63 | typedef uint64_t ui6r; 64 | typedef uint64_t ui6b; 65 | #define LIT64(a) a##ULL 66 | 67 | #define NeedIntlChars 1 68 | #define kStrAppName "Mini vMac" 69 | #define kAppVariationStr "minivmac-b37-ios" 70 | #define kStrCopyrightYear "2023" 71 | #define kMaintainerName "Jesús A. Álvarez" 72 | #define kStrHomePage "https://namedfork.net/minivmac" 73 | -------------------------------------------------------------------------------- /src/PICOMMON.h: -------------------------------------------------------------------------------- 1 | /* 2 | PICOMMON.h 3 | 4 | Copyright (C) 2020 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Platform Idendependent code COMMON 19 | 20 | First include of platform idendependent code files, 21 | containing definitions used by all of them. 22 | 23 | May be worthwhile to create a pre-compiled header from this, 24 | if supported by compiler, which can be used for all 25 | platform idendependent files of a given Variation. 26 | */ 27 | 28 | #ifdef PICOMMON_H 29 | #error "header already included" 30 | #else 31 | #define PICOMMON_H 32 | #endif 33 | 34 | #include "CNFUIALL.h" 35 | /* see OSGCOMUI.h for comment */ 36 | #include "CNFUIPIC.h" 37 | /* 38 | Configuration file independent of user options 39 | suitable for platform indendent code. 40 | Usually empty, but if use different compiler for 41 | operating system glue, then could define the different compiler 42 | configuration here and in CNFUIOSG, instead of CNFUIALL. 43 | */ 44 | #include "DFCNFCMP.h" 45 | /* see OSGCOMUI.h for comment */ 46 | #include "ENDIANAC.h" 47 | #include "CNFUDALL.h" 48 | /* see OSGCOMUD.h for comment */ 49 | #include "OSGLUAAA.h" 50 | #include "CNFUDPIC.h" 51 | /* 52 | Configuration file dependent on user options 53 | suitable for platform indendent code. 54 | */ 55 | #include "GLOBGLUE.h" 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mini vMac for Playdate 2 | 3 | Port of Mini vMac to the Panic Playdate console. It's not very usable due to slowness and limited input. 4 | 5 | ![About the Macintosh Finder](Screenshots/system6-about.png) 6 | 7 | ## Features 8 | 9 | * Emulates a Macintosh Plus, but is around 3.5 times slower. 10 | * Screen matching the Playdate (400×240). This is smaller than any Macintosh, which will break some software. 11 | * Draws screen at around 4 fps. 12 | * No sound (disabled for performance). 13 | * Controls: 14 | * D-pad: mouse movement or WASD (set in menu) 15 | * A button: mouse button 16 | * B button: space bar 17 | * Crank: arrow up/down 18 | * Load `vMac.rom` and disk images from `Data/net.namedfork.minivmac` 19 | * Press the menu button to switch input modes or insert disks 20 | 21 | ![Menu](Screenshots/menu.png) 22 | 23 | ## Installation 24 | 25 | ![Card in the Playdate home screen](Screenshots/home-card.png) 26 | 27 | * Build or download `minivmac.pdx` from [releases](https://github.com/zydeco/minivmac4playdate/releases). 28 | * Copy `minivmac.pdx` to the Playdate's `Games` directory, or sideload it [from the web](https://play.date/account/sideload/). 29 | * Copy `vMac.rom` and any disk images to the Playdate's `Data/net.namedfork.minivmac` directory (create it if it doesn't exist). 30 | 31 | 32 | ## Building 33 | 34 | Requires installing the [Playdate SDK](https://play.date/dev/), and having the `PLAYDATE_SDK_PATH` environment variable set. 35 | 36 | ### Device 37 | 38 | * Create a build directory and initialize it 39 | 40 | ``` 41 | mkdir build.dev 42 | cd build.dev 43 | cmake -DCMAKE_TOOLCHAIN_FILE=$PLAYDATE_SDK_PATH/C_API/buildsupport/arm.cmake -DCMAKE_BUILD_TYPE=Release .. 44 | make 45 | ``` 46 | 47 | * `minivmac.pdx` will be built in the root directory 48 | 49 | ### Simulator (Xcode on macOS) 50 | 51 | * Create a build directory and initialize it 52 | 53 | ``` 54 | mkdir build.sim 55 | cd build.sim 56 | cmake .. -G Xcode -D CMAKE_C_COMPILER=cc 57 | ``` 58 | 59 | * An Xcode project `minivmac.xcodeproj` will be generated 60 | * You can open and run this from Xcode 61 | 62 | ## Credits 63 | 64 | * Mini vMac for Playdate by [Jesús A. Álvarez](https://github.com/zydeco) 65 | * [Mini vMac](http://gryphel.com/c/minivmac/) ©2001-2021 Paul C. Pratt 66 | * [vMac](http://vmac.org/) ©1996-1999 Philip Cummins & al. 67 | -------------------------------------------------------------------------------- /src/PBUFSTDC.h: -------------------------------------------------------------------------------- 1 | /* 2 | PBUFSTDC.h 3 | 4 | Copyright (C) 2018 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Parameter BUFfers implemented with STanDard C library 19 | */ 20 | 21 | 22 | #if IncludePbufs 23 | LOCALVAR void *PbufDat[NumPbufs]; 24 | #endif 25 | 26 | #if IncludePbufs 27 | LOCALFUNC tMacErr PbufNewFromPtr(void *p, ui5b count, tPbuf *r) 28 | { 29 | tPbuf i; 30 | tMacErr err; 31 | 32 | if (! FirstFreePbuf(&i)) { 33 | free(p); 34 | err = mnvm_miscErr; 35 | } else { 36 | *r = i; 37 | PbufDat[i] = p; 38 | PbufNewNotify(i, count); 39 | err = mnvm_noErr; 40 | } 41 | 42 | return err; 43 | } 44 | #endif 45 | 46 | #if IncludePbufs 47 | LOCALPROC PbufKillToPtr(void **p, ui5r *count, tPbuf r) 48 | { 49 | *p = PbufDat[r]; 50 | *count = PbufSize[r]; 51 | 52 | PbufDisposeNotify(r); 53 | } 54 | #endif 55 | 56 | #if IncludePbufs 57 | GLOBALOSGLUFUNC tMacErr PbufNew(ui5b count, tPbuf *r) 58 | { 59 | tMacErr err = mnvm_miscErr; 60 | 61 | void *p = calloc(1, count); 62 | if (NULL != p) { 63 | err = PbufNewFromPtr(p, count, r); 64 | } 65 | 66 | return err; 67 | } 68 | #endif 69 | 70 | #if IncludePbufs 71 | GLOBALOSGLUPROC PbufDispose(tPbuf i) 72 | { 73 | void *p; 74 | ui5r count; 75 | 76 | PbufKillToPtr(&p, &count, i); 77 | 78 | free(p); 79 | } 80 | #endif 81 | 82 | #if IncludePbufs 83 | LOCALPROC UnInitPbufs(void) 84 | { 85 | tPbuf i; 86 | 87 | for (i = 0; i < NumPbufs; ++i) { 88 | if (PbufIsAllocated(i)) { 89 | PbufDispose(i); 90 | } 91 | } 92 | } 93 | #endif 94 | 95 | #if IncludePbufs 96 | #define PbufHaveLock 1 97 | #endif 98 | 99 | #if IncludePbufs 100 | LOCALFUNC ui3p PbufLock(tPbuf i) 101 | { 102 | return (ui3p)PbufDat[i]; 103 | } 104 | #endif 105 | 106 | #if IncludePbufs 107 | #define PbufUnlock(i) 108 | #endif 109 | 110 | #if IncludePbufs 111 | GLOBALOSGLUPROC PbufTransfer(ui3p Buffer, 112 | tPbuf i, ui5r offset, ui5r count, blnr IsWrite) 113 | { 114 | void *p = ((ui3p)PbufDat[i]) + offset; 115 | if (IsWrite) { 116 | (void) memcpy(p, Buffer, count); 117 | } else { 118 | (void) memcpy(Buffer, p, count); 119 | } 120 | } 121 | #endif 122 | -------------------------------------------------------------------------------- /src/MOUSEMDV.c: -------------------------------------------------------------------------------- 1 | /* 2 | MOUSEMDV.c 3 | 4 | Copyright (C) 2006 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | MOUSe EMulated DeVice 19 | 20 | Emulation of the mouse in the Mac Plus. 21 | 22 | This code descended from "Mouse-MacOS.c" in Richard F. Bannister's 23 | Macintosh port of vMac, by Philip Cummins. 24 | */ 25 | 26 | #include "PICOMMON.h" 27 | #include "SCCEMDEV.h" 28 | #include "MINEM68K.h" 29 | 30 | #include "MOUSEMDV.h" 31 | 32 | GLOBALPROC Mouse_Update(void) 33 | { 34 | #if HaveMasterMyEvtQLock 35 | if (0 != MasterMyEvtQLock) { 36 | --MasterMyEvtQLock; 37 | } 38 | #endif 39 | 40 | /* 41 | Check mouse position first. After mouse button or key event, 42 | can't process another mouse position until following tick, 43 | otherwise button or key will be in wrong place. 44 | */ 45 | 46 | /* 47 | if start doing this too soon after boot, 48 | will mess up memory check 49 | */ 50 | if (Mouse_Enabled()) { 51 | MyEvtQEl *p; 52 | 53 | if ( 54 | #if HaveMasterMyEvtQLock 55 | (0 == MasterMyEvtQLock) && 56 | #endif 57 | (nullpr != (p = MyEvtQOutP()))) 58 | { 59 | #if EmClassicKbrd 60 | #if EnableMouseMotion 61 | if (MyEvtQElKindMouseDelta == p->kind) { 62 | 63 | if ((p->u.pos.h != 0) || (p->u.pos.v != 0)) { 64 | put_ram_word(0x0828, 65 | get_ram_word(0x0828) + p->u.pos.v); 66 | put_ram_word(0x082A, 67 | get_ram_word(0x082A) + p->u.pos.h); 68 | put_ram_byte(0x08CE, get_ram_byte(0x08CF)); 69 | /* Tell MacOS to redraw the Mouse */ 70 | } 71 | MyEvtQOutDone(); 72 | } else 73 | #endif 74 | #endif 75 | if (MyEvtQElKindMousePos == p->kind) { 76 | ui5r NewMouse = (p->u.pos.v << 16) | p->u.pos.h; 77 | 78 | if (get_ram_long(0x0828) != NewMouse) { 79 | put_ram_long(0x0828, NewMouse); 80 | /* Set Mouse Position */ 81 | put_ram_long(0x082C, NewMouse); 82 | #if EmClassicKbrd 83 | put_ram_byte(0x08CE, get_ram_byte(0x08CF)); 84 | /* Tell MacOS to redraw the Mouse */ 85 | #else 86 | put_ram_long(0x0830, NewMouse); 87 | put_ram_byte(0x08CE, 0xFF); 88 | /* Tell MacOS to redraw the Mouse */ 89 | #endif 90 | } 91 | MyEvtQOutDone(); 92 | } 93 | } 94 | } 95 | 96 | #if EmClassicKbrd 97 | { 98 | MyEvtQEl *p; 99 | 100 | if ( 101 | #if HaveMasterMyEvtQLock 102 | (0 == MasterMyEvtQLock) && 103 | #endif 104 | (nullpr != (p = MyEvtQOutP()))) 105 | { 106 | if (MyEvtQElKindMouseButton == p->kind) { 107 | MouseBtnUp = p->u.press.down ? 0 : 1; 108 | MyEvtQOutDone(); 109 | MasterMyEvtQLock = 4; 110 | } 111 | } 112 | } 113 | #endif 114 | } 115 | 116 | GLOBALPROC Mouse_EndTickNotify(void) 117 | { 118 | if (Mouse_Enabled()) { 119 | /* tell platform specific code where the mouse went */ 120 | CurMouseV = get_ram_word(0x082C); 121 | CurMouseH = get_ram_word(0x082E); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /src/DFCNFCMP.h: -------------------------------------------------------------------------------- 1 | /* 2 | DFCNFCMP.h 3 | 4 | Copyright (C) 2006 Bernd Schmidt, Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | DeFaults for CoNFiguration of CoMPiler 19 | */ 20 | 21 | #ifdef DFCNFCMP_H 22 | #error "header already included" 23 | #else 24 | #define DFCNFCMP_H 25 | #endif 26 | 27 | 28 | typedef ui3b *ui3p; 29 | typedef ui4b *ui4p; 30 | typedef ui5b *ui5p; 31 | 32 | /* 33 | Largest efficiently supported 34 | representation types. uimr should be 35 | large enough to hold number of elements 36 | of any array we will deal with. 37 | */ 38 | typedef ui5r uimr; 39 | typedef si5r simr; 40 | 41 | #define blnr ui3r 42 | #define trueblnr 1 43 | #define falseblnr 0 44 | 45 | #define nullpr ((void *) 0) 46 | 47 | #define anyp ui3p 48 | 49 | /* pascal string, single byte characters */ 50 | #define ps3p ui3p 51 | 52 | #ifndef MayInline 53 | #define MayInline 54 | #endif 55 | 56 | #ifndef MayNotInline 57 | #define MayNotInline 58 | #endif 59 | 60 | #ifndef my_reg_call 61 | #define my_reg_call 62 | #endif 63 | 64 | #ifndef my_osglu_call 65 | #define my_osglu_call 66 | #endif 67 | 68 | #define LOCALVAR static 69 | #define GLOBALVAR 70 | #define EXPORTVAR(t, v) extern t v; 71 | 72 | #define LOCALFUNC static MayNotInline 73 | #define FORWARDFUNC LOCALFUNC 74 | #define GLOBALFUNC MayNotInline 75 | #define EXPORTFUNC extern 76 | #define IMPORTFUNC EXPORTFUNC 77 | #define TYPEDEFFUNC typedef 78 | 79 | #define LOCALPROC LOCALFUNC void 80 | #define GLOBALPROC GLOBALFUNC void 81 | #define EXPORTPROC EXPORTFUNC void 82 | #define IMPORTPROC IMPORTFUNC void 83 | #define FORWARDPROC FORWARDFUNC void 84 | #define TYPEDEFPROC TYPEDEFFUNC void 85 | 86 | #define LOCALINLINEFUNC static MayInline 87 | #define LOCALINLINEPROC LOCALINLINEFUNC void 88 | 89 | #define LOCALFUNCUSEDONCE LOCALINLINEFUNC 90 | #define LOCALPROCUSEDONCE LOCALINLINEPROC 91 | 92 | #define GLOBALOSGLUFUNC GLOBALFUNC my_osglu_call 93 | #define EXPORTOSGLUFUNC EXPORTFUNC my_osglu_call 94 | #define GLOBALOSGLUPROC GLOBALFUNC my_osglu_call void 95 | #define EXPORTOSGLUPROC EXPORTFUNC my_osglu_call void 96 | /* 97 | For functions in operating system glue that 98 | are called by rest of program. 99 | */ 100 | 101 | #ifndef BigEndianUnaligned 102 | #define BigEndianUnaligned 0 103 | #endif 104 | 105 | #ifndef LittleEndianUnaligned 106 | #define LittleEndianUnaligned 0 107 | #endif 108 | 109 | /* 110 | best type for ui4r that is probably in register 111 | (when compiler messes up otherwise) 112 | */ 113 | 114 | #ifndef ui3rr 115 | #define ui3rr ui3r 116 | #endif 117 | 118 | #ifndef ui4rr 119 | #define ui4rr ui4r 120 | #endif 121 | 122 | #ifndef si5rr 123 | #define si5rr si5r 124 | #endif 125 | 126 | #ifndef my_align_8 127 | #define my_align_8 128 | #endif 129 | 130 | #ifndef my_cond_rare 131 | #define my_cond_rare(x) (x) 132 | #endif 133 | 134 | #ifndef Have_ASR 135 | #define Have_ASR 0 136 | #endif 137 | 138 | #ifndef HaveMySwapUi5r 139 | #define HaveMySwapUi5r 0 140 | #endif 141 | -------------------------------------------------------------------------------- /src/ENDIANAC.h: -------------------------------------------------------------------------------- 1 | /* 2 | ENDIANAC.h 3 | 4 | Copyright (C) 2006 Bernd Schmidt, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | ENDIAN ACcess 19 | 20 | Deals with endian issues in memory access. 21 | 22 | This code is adapted from code in the Un*x Amiga Emulator by 23 | Bernd Schmidt, as found in vMac by Philip Cummins. 24 | */ 25 | 26 | #ifdef ENDIANAC_H 27 | #error "header already included" 28 | #else 29 | #define ENDIANAC_H 30 | #endif 31 | 32 | 33 | #define do_get_mem_byte(a) ((ui3r)*((ui3b *)(a))) 34 | 35 | #if BigEndianUnaligned 36 | #define do_get_mem_word(a) ((ui4r)*((ui4b *)(a))) 37 | #else 38 | LOCALINLINEFUNC ui4r do_get_mem_word(ui3p a) 39 | { 40 | #if LittleEndianUnaligned 41 | ui4b b = (*((ui4b *)(a))); 42 | 43 | return ((b & 0x00FF) << 8) | ((b >> 8) & 0x00FF); 44 | #else 45 | return (((ui4r)*a) << 8) | ((ui4r)*(a + 1)); 46 | #endif 47 | } 48 | #endif 49 | 50 | #if BigEndianUnaligned 51 | #define do_get_mem_long(a) ((ui5r)*((ui5b *)(a))) 52 | #elif HaveMySwapUi5r && LittleEndianUnaligned 53 | #define do_get_mem_long(a) (MySwapUi5r((ui5r)*((ui5b *)(a)))) 54 | #else 55 | LOCALINLINEFUNC ui5r do_get_mem_long(ui3p a) 56 | { 57 | #if LittleEndianUnaligned 58 | #if 0 59 | ui5b b = (*((ui5b *)(a))); 60 | return ((b & 0x000000FF) << 24) 61 | | ((b & 0x0000FF00) << 8) 62 | | ((b & 0x00FF0000) >> 8) 63 | | ((b & 0xFF000000) >> 24); 64 | #endif 65 | #if 0 66 | ui5b b = (*((ui5b *)(a))); 67 | return ((b << 24) & 0xFF000000) 68 | | ((b << 8) & 0x00FF0000) 69 | | ((b >> 8) & 0x0000FF00) 70 | | ((b >> 24) & 0x000000FF); 71 | /* 72 | no, this doesn't do well with apple tools, 73 | instead try combining two 16 bit swaps. 74 | */ 75 | #endif 76 | ui5b b = (*((ui5b *)(a))); 77 | ui4b b1 = b; 78 | ui4b b2 = b >> 16; 79 | ui4b c1 = ((b1 & 0x00FF) << 8) | ((b1 >> 8) & 0x00FF); 80 | ui4b c2 = ((b2 & 0x00FF) << 8) | ((b2 >> 8) & 0x00FF); 81 | 82 | return (((ui5r)c1) << 16) | ((ui5r)c2); 83 | /* 84 | better, though still doesn't use BSWAP 85 | instruction with apple tools for intel. 86 | */ 87 | #else 88 | return (((ui5r)*a) << 24) | (((ui5r)*(a + 1)) << 16) 89 | | (((ui5r)*(a + 2)) << 8) | ((ui5r)*(a + 3)); 90 | #endif 91 | } 92 | #endif 93 | 94 | #define do_put_mem_byte(a, v) ((*((ui3b *)(a))) = (v)) 95 | 96 | #if BigEndianUnaligned 97 | #define do_put_mem_word(a, v) ((*((ui4b *)(a))) = (v)) 98 | #else 99 | LOCALINLINEFUNC void do_put_mem_word(ui3p a, ui4r v) 100 | { 101 | #if LittleEndianUnaligned 102 | ui4b b = ((v & 0x00FF) << 8) | ((v >> 8) & 0x00FF); 103 | 104 | *(ui4b *)a = b; 105 | #else 106 | *a = v >> 8; 107 | *(a + 1) = v; 108 | #endif 109 | } 110 | #endif 111 | 112 | #if BigEndianUnaligned 113 | #define do_put_mem_long(a, v) ((*((ui5b *)(a))) = (v)) 114 | #elif HaveMySwapUi5r && LittleEndianUnaligned 115 | #define do_put_mem_long(a, v) ((*((ui5b *)(a))) = MySwapUi5r(v)) 116 | #else 117 | LOCALINLINEFUNC void do_put_mem_long(ui3p a, ui5r v) 118 | { 119 | #if LittleEndianUnaligned 120 | ui4b b1 = v; 121 | ui4b b2 = v >> 16; 122 | ui4b c1 = ((b1 & 0x00FF) << 8) | ((b1 >> 8) & 0x00FF); 123 | ui4b c2 = ((b2 & 0x00FF) << 8) | ((b2 >> 8) & 0x00FF); 124 | 125 | *(ui5b *)a = (c1 << 16) | c2; 126 | #else 127 | *a = v >> 24; 128 | *(a + 1) = v >> 16; 129 | *(a + 2) = v >> 8; 130 | *(a + 3) = v; 131 | #endif 132 | } 133 | #endif 134 | -------------------------------------------------------------------------------- /src/SCRNTRNS.h: -------------------------------------------------------------------------------- 1 | /* 2 | SCRNTRNS.h 3 | 4 | Copyright (C) 2012 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | SCReeN TRaNSlater 19 | */ 20 | 21 | /* required arguments for this template */ 22 | 23 | #ifndef ScrnTrns_DoTrans /* procedure to be created by this template */ 24 | #error "ScrnTrns_DoTrans not defined" 25 | #endif 26 | #ifndef ScrnTrns_Src 27 | #error "ScrnTrns_Src not defined" 28 | #endif 29 | #ifndef ScrnTrns_Dst 30 | #error "ScrnTrns_Dst not defined" 31 | #endif 32 | #ifndef ScrnTrns_SrcDepth 33 | #error "ScrnTrns_SrcDepth not defined" 34 | #endif 35 | #ifndef ScrnTrns_DstDepth 36 | #error "ScrnTrns_DstDepth not defined" 37 | #endif 38 | 39 | /* optional argument for this template */ 40 | 41 | #ifndef ScrnTrns_Scale 42 | #define ScrnTrns_Scale 1 43 | #endif 44 | 45 | #ifndef ScrnTrns_DstZLo 46 | #define ScrnTrns_DstZLo 0 47 | #endif 48 | 49 | /* check of parameters */ 50 | 51 | #if (ScrnTrns_SrcDepth < 4) 52 | #error "bad ScrnTrns_SrcDepth" 53 | #endif 54 | 55 | #if (ScrnTrns_DstDepth < 4) 56 | #error "bad ScrnTrns_Dst" 57 | #endif 58 | 59 | /* now define the procedure */ 60 | 61 | LOCALPROC ScrnTrns_DoTrans(si4b top, si4b left, 62 | si4b bottom, si4b right) 63 | { 64 | int i; 65 | int j; 66 | ui5b t0; 67 | ui5b t1; 68 | ui4r jn = right - left; 69 | ui4r SrcSkip = vMacScreenByteWidth 70 | - (jn << (ScrnTrns_SrcDepth - 3)); 71 | ui3b *pSrc = ((ui3b *)ScrnTrns_Src) 72 | + (left << (ScrnTrns_SrcDepth - 3)) 73 | + vMacScreenByteWidth * (ui5r)top; 74 | ui5b *pDst = ((ui5b *)ScrnTrns_Dst) 75 | + left * ScrnTrns_Scale 76 | + (ui5r)vMacScreenWidth * ScrnTrns_Scale * ScrnTrns_Scale * top; 77 | ui4r DstSkip = (vMacScreenWidth - jn) * ScrnTrns_Scale; 78 | #if ScrnTrns_Scale > 1 79 | int k; 80 | ui5b *p3; 81 | ui5b *p4; 82 | #endif 83 | 84 | for (i = bottom - top; --i >= 0; ) { 85 | #if ScrnTrns_Scale > 1 86 | p3 = pDst; 87 | #endif 88 | 89 | for (j = jn; --j >= 0; ) { 90 | #if 4 == ScrnTrns_SrcDepth 91 | t0 = do_get_mem_word(pSrc); 92 | pSrc += 2; 93 | t1 = 94 | #if ScrnTrns_DstZLo 95 | ((t0 & 0x7C00) << 17) | 96 | ((t0 & 0x7000) << 12) | 97 | ((t0 & 0x03E0) << 14) | 98 | ((t0 & 0x0380) << 9) | 99 | ((t0 & 0x001F) << 11) | 100 | ((t0 & 0x001C) << 6); 101 | #else 102 | ((t0 & 0x7C00) << 9) | 103 | ((t0 & 0x7000) << 4) | 104 | ((t0 & 0x03E0) << 6) | 105 | ((t0 & 0x0380) << 1) | 106 | ((t0 & 0x001F) << 3) | 107 | ((t0 & 0x001C) >> 2); 108 | #endif 109 | #if 0 110 | ((t0 & 0x7C00) << 1) | 111 | ((t0 & 0x7000) >> 4) | 112 | ((t0 & 0x03E0) << 14) | 113 | ((t0 & 0x0380) << 9) | 114 | ((t0 & 0x001F) << 27) | 115 | ((t0 & 0x001C) << 22); 116 | #endif 117 | 118 | #elif 5 == ScrnTrns_SrcDepth 119 | t0 = do_get_mem_long(pSrc); 120 | pSrc += 4; 121 | #if ScrnTrns_DstZLo 122 | t1 = t0 << 8; 123 | #else 124 | t1 = t0; 125 | #endif 126 | #endif 127 | 128 | #if ScrnTrns_Scale > 1 129 | for (k = ScrnTrns_Scale; --k >= 0; ) 130 | #endif 131 | { 132 | *pDst++ = t1; 133 | } 134 | } 135 | pSrc += SrcSkip; 136 | pDst += DstSkip; 137 | 138 | #if ScrnTrns_Scale > 1 139 | #if ScrnTrns_Scale > 2 140 | for (k = ScrnTrns_Scale - 1; --k >= 0; ) 141 | #endif 142 | { 143 | p4 = p3; 144 | for (j = ScrnTrns_Scale * jn; --j >= 0; ) { 145 | *pDst++ = *p4++; 146 | } 147 | pDst += DstSkip; 148 | } 149 | #endif /* ScrnTrns_Scale > 1 */ 150 | } 151 | } 152 | 153 | /* undefine template locals and parameters */ 154 | 155 | #undef ScrnTrns_DoTrans 156 | #undef ScrnTrns_Src 157 | #undef ScrnTrns_Dst 158 | #undef ScrnTrns_SrcDepth 159 | #undef ScrnTrns_DstDepth 160 | #undef ScrnTrns_Scale 161 | #undef ScrnTrns_DstZLo 162 | -------------------------------------------------------------------------------- /src/SCRNMAPR.h: -------------------------------------------------------------------------------- 1 | /* 2 | SCRNMAPR.h 3 | 4 | Copyright (C) 2012 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | SCReeN MAPpeR 19 | */ 20 | 21 | /* required arguments for this template */ 22 | 23 | #ifndef ScrnMapr_DoMap /* procedure to be created by this template */ 24 | #error "ScrnMapr_DoMap not defined" 25 | #endif 26 | #ifndef ScrnMapr_Src 27 | #error "ScrnMapr_Src not defined" 28 | #endif 29 | #ifndef ScrnMapr_Dst 30 | #error "ScrnMapr_Dst not defined" 31 | #endif 32 | #ifndef ScrnMapr_SrcDepth 33 | #error "ScrnMapr_SrcDepth not defined" 34 | #endif 35 | #ifndef ScrnMapr_DstDepth 36 | #error "ScrnMapr_DstDepth not defined" 37 | #endif 38 | #ifndef ScrnMapr_Map 39 | #error "ScrnMapr_Map not defined" 40 | #endif 41 | 42 | /* optional argument for this template */ 43 | 44 | #ifndef ScrnMapr_Scale 45 | #define ScrnMapr_Scale 1 46 | #endif 47 | 48 | /* check of parameters */ 49 | 50 | #if (ScrnMapr_SrcDepth < 0) || (ScrnMapr_SrcDepth > 3) 51 | #error "bad ScrnMapr_SrcDepth" 52 | #endif 53 | 54 | #if (ScrnMapr_DstDepth < ScrnMapr_SrcDepth) 55 | #error "bad ScrnMapr_Dst" 56 | #endif 57 | 58 | /* calculate a few things local to this template */ 59 | 60 | #define ScrnMapr_MapElSz \ 61 | (ScrnMapr_Scale << (ScrnMapr_DstDepth - ScrnMapr_SrcDepth)) 62 | 63 | #if 0 == (ScrnMapr_MapElSz & 3) 64 | #define ScrnMapr_TranT ui5b 65 | #define ScrnMapr_TranLn2Sz 2 66 | #elif 0 == (ScrnMapr_MapElSz & 1) 67 | #define ScrnMapr_TranT ui4b 68 | #define ScrnMapr_TranLn2Sz 1 69 | #else 70 | #define ScrnMapr_TranT ui3b 71 | #define ScrnMapr_TranLn2Sz 0 72 | #endif 73 | 74 | #define ScrnMapr_TranN (ScrnMapr_MapElSz >> ScrnMapr_TranLn2Sz) 75 | 76 | #define ScrnMapr_ScrnWB (vMacScreenWidth >> (3 - ScrnMapr_SrcDepth)) 77 | 78 | /* now define the procedure */ 79 | 80 | LOCALPROC ScrnMapr_DoMap(si4b top, si4b left, 81 | si4b bottom, si4b right) 82 | { 83 | int i; 84 | int j; 85 | #if (ScrnMapr_TranN > 4) || (ScrnMapr_Scale > 2) 86 | int k; 87 | #endif 88 | ui5r t0; 89 | ScrnMapr_TranT *pMap; 90 | #if ScrnMapr_Scale > 1 91 | ScrnMapr_TranT *p3; 92 | #endif 93 | 94 | ui4r leftB = left >> (3 - ScrnMapr_SrcDepth); 95 | ui4r rightB = (right + (1 << (3 - ScrnMapr_SrcDepth)) - 1) 96 | >> (3 - ScrnMapr_SrcDepth); 97 | ui4r jn = rightB - leftB; 98 | ui4r SrcSkip = ScrnMapr_ScrnWB - jn; 99 | ui3b *pSrc = ((ui3b *)ScrnMapr_Src) 100 | + leftB + ScrnMapr_ScrnWB * (ui5r)top; 101 | ScrnMapr_TranT *pDst = ((ScrnMapr_TranT *)ScrnMapr_Dst) 102 | + ((leftB + ScrnMapr_ScrnWB * ScrnMapr_Scale * (ui5r)top) 103 | * ScrnMapr_TranN); 104 | ui5r DstSkip = SrcSkip * ScrnMapr_TranN; 105 | 106 | for (i = bottom - top; --i >= 0; ) { 107 | #if ScrnMapr_Scale > 1 108 | p3 = pDst; 109 | #endif 110 | 111 | for (j = jn; --j >= 0; ) { 112 | t0 = *pSrc++; 113 | pMap = 114 | &((ScrnMapr_TranT *)ScrnMapr_Map)[t0 * ScrnMapr_TranN]; 115 | 116 | #if ScrnMapr_TranN > 4 117 | for (k = ScrnMapr_TranN; --k >= 0; ) { 118 | *pDst++ = *pMap++; 119 | } 120 | #else 121 | 122 | #if ScrnMapr_TranN >= 2 123 | *pDst++ = *pMap++; 124 | #endif 125 | #if ScrnMapr_TranN >= 3 126 | *pDst++ = *pMap++; 127 | #endif 128 | #if ScrnMapr_TranN >= 4 129 | *pDst++ = *pMap++; 130 | #endif 131 | *pDst++ = *pMap; 132 | 133 | #endif /* ! ScrnMapr_TranN > 4 */ 134 | 135 | } 136 | pSrc += SrcSkip; 137 | pDst += DstSkip; 138 | 139 | #if ScrnMapr_Scale > 1 140 | #if ScrnMapr_Scale > 2 141 | for (k = ScrnMapr_Scale - 1; --k >= 0; ) 142 | #endif 143 | { 144 | pMap = p3; 145 | for (j = ScrnMapr_TranN * jn; --j >= 0; ) { 146 | *pDst++ = *pMap++; 147 | } 148 | pDst += DstSkip; 149 | } 150 | #endif /* ScrnMapr_Scale > 1 */ 151 | } 152 | } 153 | 154 | /* undefine template locals and parameters */ 155 | 156 | #undef ScrnMapr_ScrnWB 157 | #undef ScrnMapr_TranN 158 | #undef ScrnMapr_TranLn2Sz 159 | #undef ScrnMapr_TranT 160 | #undef ScrnMapr_MapElSz 161 | 162 | #undef ScrnMapr_DoMap 163 | #undef ScrnMapr_Src 164 | #undef ScrnMapr_Dst 165 | #undef ScrnMapr_SrcDepth 166 | #undef ScrnMapr_DstDepth 167 | #undef ScrnMapr_Map 168 | #undef ScrnMapr_Scale 169 | -------------------------------------------------------------------------------- /src/SCSIEMDV.c: -------------------------------------------------------------------------------- 1 | /* 2 | SCSIEMDV.c 3 | 4 | Copyright (C) 2004 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Small Computer System Interface EMulated DeVice 19 | 20 | Emulates the SCSI found in the Mac Plus. 21 | 22 | This code adapted from "SCSI.c" in vMac by Philip Cummins. 23 | */ 24 | 25 | /* NCR5380 chip emulation by Yoav Shadmi, 1998 */ 26 | 27 | #include "PICOMMON.h" 28 | #include "MINEM68K.h" 29 | 30 | #include "SCSIEMDV.h" 31 | 32 | #define scsiRd 0x00 33 | #define scsiWr 0x01 34 | 35 | #define sCDR 0x00 /* current scsi data register (r/o) */ 36 | #define sODR 0x00 /* output data register (w/o) */ 37 | #define sICR 0x02 /* initiator command register (r/w) */ 38 | #define sMR 0x04 /* mode register (r/w) */ 39 | #define sTCR 0x06 /* target command register (r/w) */ 40 | #define sCSR 0x08 /* current SCSI bus status (r/o) */ 41 | #define sSER 0x08 /* select enable register (w/o) */ 42 | #define sBSR 0x0A /* bus and status register (r/o) */ 43 | #define sDMAtx 0x0A /* start DMA send (w/o) */ 44 | #define sIDR 0x0C /* input data register (r/o) */ 45 | #define sTDMArx 0x0C /* start DMA target receive (w/o) */ 46 | #define sRESET 0x0E /* reset parity/interrupt (r/o) */ 47 | #define sIDMArx 0x0E /* start DMA initiator receive (w/o) */ 48 | 49 | #define kSCSI_Size 0x00010 50 | 51 | LOCALVAR ui3b SCSI[kSCSI_Size]; 52 | 53 | GLOBALPROC SCSI_Reset(void) 54 | { 55 | int i; 56 | 57 | for (i = 0; i < kSCSI_Size; i++) { 58 | SCSI[i] = 0; 59 | } 60 | } 61 | 62 | LOCALPROC SCSI_BusReset(void) 63 | { 64 | SCSI[scsiRd + sCDR] = 0; 65 | SCSI[scsiWr + sODR] = 0; 66 | SCSI[scsiRd + sICR] = 0x80; 67 | SCSI[scsiWr + sICR] &= 0x80; 68 | SCSI[scsiRd + sMR] &= 0x40; 69 | SCSI[scsiWr + sMR] &= 0x40; 70 | SCSI[scsiRd + sTCR] = 0; 71 | SCSI[scsiWr + sTCR] = 0; 72 | SCSI[scsiRd + sCSR] = 0x80; 73 | SCSI[scsiWr + sSER] = 0; 74 | SCSI[scsiRd + sBSR] = 0x10; 75 | SCSI[scsiWr + sDMAtx] = 0; 76 | SCSI[scsiRd + sIDR] = 0; 77 | SCSI[scsiWr + sTDMArx] = 0; 78 | SCSI[scsiRd + sRESET] = 0; 79 | SCSI[scsiWr + sIDMArx] = 0; 80 | #if 0 81 | SCSI[scsiRd + sODR + dackWr] = 0; 82 | SCSI[scsiWr + sIDR + dackRd] = 0; 83 | #endif 84 | 85 | /* The missing piece of the puzzle.. :) */ 86 | put_ram_word(0xb22, get_ram_word(0xb22) | 0x8000); 87 | } 88 | 89 | LOCALPROC SCSI_Check(void) 90 | { 91 | /* 92 | The arbitration select/reselect scenario 93 | [stub.. doesn't really work...] 94 | */ 95 | if ((SCSI[scsiWr + sODR] >> 7) == 1) { 96 | /* Check if the Mac tries to be an initiator */ 97 | if ((SCSI[scsiWr + sMR] & 1) == 1) { 98 | /* the Mac set arbitration in progress */ 99 | /* 100 | stub! tell the mac that there 101 | is arbitration in progress... 102 | */ 103 | SCSI[scsiRd + sICR] |= 0x40; 104 | /* ... that we didn't lose arbitration ... */ 105 | SCSI[scsiRd + sICR] &= ~ 0x20; 106 | /* 107 | ... and that there isn't a higher priority ID present... 108 | */ 109 | SCSI[scsiRd + sCDR] = 0x00; 110 | 111 | /* 112 | ... the arbitration and selection/reselection is 113 | complete. the initiator tries to connect to the SCSI 114 | device, fails and returns after timeout. 115 | */ 116 | } 117 | } 118 | 119 | /* check the chip registers, AS SET BY THE CPU */ 120 | if ((SCSI[scsiWr + sICR] >> 7) == 1) { 121 | /* Check Assert RST */ 122 | SCSI_BusReset(); 123 | } else { 124 | SCSI[scsiRd + sICR] &= ~ 0x80; 125 | SCSI[scsiRd + sCSR] &= ~ 0x80; 126 | } 127 | 128 | if ((SCSI[scsiWr + sICR] >> 2) == 1) { 129 | /* Check Assert SEL */ 130 | SCSI[scsiRd + sCSR] |= 0x02; 131 | SCSI[scsiRd + sBSR] = 0x10; 132 | } else { 133 | SCSI[scsiRd + sCSR] &= ~ 0x02; 134 | } 135 | } 136 | 137 | GLOBALFUNC ui5b SCSI_Access(ui5b Data, blnr WriteMem, CPTR addr) 138 | { 139 | if (addr < (kSCSI_Size / 2)) { 140 | addr *= 2; 141 | if (WriteMem) { 142 | SCSI[addr + 1] = Data; 143 | SCSI_Check(); 144 | } else { 145 | Data = SCSI[addr]; 146 | } 147 | } 148 | return Data; 149 | } 150 | -------------------------------------------------------------------------------- /src/DATE2SEC.h: -------------------------------------------------------------------------------- 1 | /* 2 | DATE2SEC.h 3 | Copyright (C) 2003 Bradford L. Barrett, Paul C. Pratt 4 | 5 | You can redistribute this file and/or modify it under the terms 6 | of version 2 of the GNU General Public License as published by 7 | the Free Software Foundation. You should have received a copy 8 | of the license along with this file; see the file COPYING. 9 | 10 | This file is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | license for more details. 14 | */ 15 | 16 | /* 17 | DATE 2(to) SEConds 18 | 19 | convert year/month/day/hour/minute/second 20 | to number of seconds since the beginning 21 | of 1904, the format for storing dates 22 | on the Macintosh. 23 | 24 | The function jdate is from the program Webalizer 25 | by Bradford L. Barrett. 26 | */ 27 | 28 | #ifdef DATE2SEC_H 29 | #error "header already included" 30 | #else 31 | #define DATE2SEC_H 32 | #endif 33 | 34 | /* 35 | The function jdate was found at the end of the file 36 | webalizer.c in the program webalizer at 37 | "www.mrunix.net/webalizer/". 38 | Here is copyright info from the top of that file: 39 | 40 | webalizer - a web server log analysis program 41 | 42 | Copyright (C) 1997-2000 Bradford L. Barrett (brad@mrunix.net) 43 | 44 | This program is free software; you can redistribute it and/or modify 45 | it under the terms of the GNU General Public License as published by 46 | the Free Software Foundation; either version 2 of the License, or 47 | (at your option) any later version, and provided that the above 48 | copyright and permission notice is included with all distributed 49 | copies of this or derived software. 50 | */ 51 | 52 | /* ************************************************************* */ 53 | /* */ 54 | /* JDATE - Julian date calculator */ 55 | /* */ 56 | /* Calculates the number of days since Jan 1, 0000. */ 57 | /* */ 58 | /* Originally written by Bradford L. Barrett (03/17/1988) */ 59 | /* Returns an unsigned long value representing the number of */ 60 | /* days since January 1, 0000. */ 61 | /* */ 62 | /* Note: Due to the changes made by Pope Gregory XIII in the */ 63 | /* 16th Centyry (Feb 24, 1582), dates before 1583 will */ 64 | /* not return a truely accurate number (will be at least */ 65 | /* 10 days off). Somehow, I don't think this will */ 66 | /* present much of a problem for most situations :) */ 67 | /* */ 68 | /* Usage: days = jdate(day, month, year) */ 69 | /* */ 70 | /* The number returned is adjusted by 5 to facilitate day of */ 71 | /* week calculations. The mod of the returned value gives the */ 72 | /* day of the week the date is. (ie: dow = days % 7) where */ 73 | /* dow will return 0=Sunday, 1=Monday, 2=Tuesday, etc... */ 74 | /* */ 75 | /* ************************************************************* */ 76 | 77 | LOCALFUNC ui5b jdate(int day, int month, int year) 78 | { 79 | ui5b days; /* value returned */ 80 | int mtable[] = { 81 | 0, 31, 59, 90, 120, 151, 82 | 181, 212, 243, 273, 304, 334 83 | }; 84 | 85 | /* 86 | First, calculate base number including leap 87 | and Centenial year stuff 88 | */ 89 | 90 | days = (((ui5b)year * 365) + day + mtable[month - 1] 91 | + ((year + 4) / 4) - ((year / 100) - (year / 400))); 92 | 93 | /* now adjust for leap year before March 1st */ 94 | 95 | if ((year % 4 == 0) 96 | && (! ((year % 100 == 0) && (year % 400 != 0))) 97 | && (month < 3)) 98 | { 99 | --days; 100 | } 101 | 102 | /* done, return with calculated value */ 103 | 104 | return (days + 5); 105 | } 106 | 107 | LOCALFUNC ui5b Date2MacSeconds(int second, int minute, int hour, 108 | int day, int month, int year) 109 | { 110 | ui5b curjdate; 111 | ui5b basejdate; 112 | 113 | curjdate = jdate(day, month, year); 114 | basejdate = jdate(1, 1, 1904); 115 | return (((curjdate - basejdate) * 24 + hour) * 60 116 | + minute) * 60 + second; 117 | } 118 | -------------------------------------------------------------------------------- /src/ALTKEYSM.h: -------------------------------------------------------------------------------- 1 | /* 2 | ALTKEYSM.h 3 | 4 | Copyright (C) 2007 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | ALTernate KEYs Mode 19 | */ 20 | 21 | #ifdef ALTKEYSM_H 22 | #error "header already included" 23 | #else 24 | #define ALTKEYSM_H 25 | #endif 26 | 27 | LOCALVAR blnr AltKeysLockText = falseblnr; 28 | LOCALVAR blnr AltKeysTrueCmnd = falseblnr; 29 | LOCALVAR blnr AltKeysTrueOption = falseblnr; 30 | LOCALVAR blnr AltKeysTrueShift = falseblnr; 31 | LOCALVAR blnr AltKeysModOn = falseblnr; 32 | LOCALVAR blnr AltKeysTextOn = falseblnr; 33 | 34 | LOCALPROC CheckAltKeyUseMode(void) 35 | { 36 | blnr NewAltKeysTextOn; 37 | 38 | AltKeysModOn = AltKeysTrueCmnd 39 | || AltKeysTrueOption || AltKeysTrueShift; 40 | NewAltKeysTextOn = AltKeysLockText || AltKeysModOn; 41 | if (NewAltKeysTextOn != AltKeysTextOn) { 42 | DisconnectKeyCodes(kKeepMaskControl | kKeepMaskCapsLock 43 | | (AltKeysTrueCmnd ? kKeepMaskCommand : 0) 44 | | (AltKeysTrueOption ? kKeepMaskOption : 0) 45 | | (AltKeysTrueShift ? kKeepMaskShift : 0)); 46 | AltKeysTextOn = NewAltKeysTextOn; 47 | } 48 | } 49 | 50 | LOCALPROC Keyboard_UpdateKeyMap1(ui3r key, blnr down) 51 | { 52 | if (MKC_Command == key) { 53 | AltKeysTrueCmnd = down; 54 | CheckAltKeyUseMode(); 55 | Keyboard_UpdateKeyMap(key, down); 56 | } else if (MKC_Option == key) { 57 | AltKeysTrueOption = down; 58 | CheckAltKeyUseMode(); 59 | Keyboard_UpdateKeyMap(key, down); 60 | } else if (MKC_Shift == key) { 61 | AltKeysTrueShift = down; 62 | CheckAltKeyUseMode(); 63 | Keyboard_UpdateKeyMap(key, down); 64 | } else if (MKC_SemiColon == key) { 65 | if (down && ! AltKeysModOn) { 66 | if (AltKeysLockText) { 67 | AltKeysLockText = falseblnr; 68 | NeedWholeScreenDraw = trueblnr; 69 | SpecialModeClr(SpclModeAltKeyText); 70 | 71 | CheckAltKeyUseMode(); 72 | } 73 | } else { 74 | Keyboard_UpdateKeyMap(key, down); 75 | } 76 | } else if (AltKeysTextOn) { 77 | Keyboard_UpdateKeyMap(key, down); 78 | } else if (MKC_M == key) { 79 | if (down) { 80 | if (! AltKeysLockText) { 81 | AltKeysLockText = trueblnr; 82 | SpecialModeSet(SpclModeAltKeyText); 83 | NeedWholeScreenDraw = trueblnr; 84 | CheckAltKeyUseMode(); 85 | } 86 | } 87 | } else { 88 | switch (key) { 89 | case MKC_A: 90 | key = MKC_SemiColon; 91 | break; 92 | case MKC_B: 93 | key = MKC_BackSlash; 94 | break; 95 | case MKC_C: 96 | key = MKC_F3; 97 | break; 98 | case MKC_D: 99 | key = MKC_Option; 100 | break; 101 | case MKC_E: 102 | key = MKC_BackSpace; 103 | break; 104 | case MKC_F: 105 | key = MKC_Command; 106 | break; 107 | case MKC_G: 108 | key = MKC_Enter; 109 | break; 110 | case MKC_H: 111 | key = MKC_Equal; 112 | break; 113 | case MKC_I: 114 | key = MKC_Up; 115 | break; 116 | case MKC_J: 117 | key = MKC_Left; 118 | break; 119 | case MKC_K: 120 | key = MKC_Down; 121 | break; 122 | case MKC_L: 123 | key = MKC_Right; 124 | break; 125 | case MKC_M: 126 | /* handled above */ 127 | break; 128 | case MKC_N: 129 | key = MKC_Minus; 130 | break; 131 | case MKC_O: 132 | key = MKC_RightBracket; 133 | break; 134 | case MKC_P: 135 | return; /* none */ 136 | break; 137 | case MKC_Q: 138 | key = MKC_Grave; 139 | break; 140 | case MKC_R: 141 | key = MKC_Return; 142 | break; 143 | case MKC_S: 144 | key = MKC_Shift; 145 | break; 146 | case MKC_T: 147 | key = MKC_Tab; 148 | break; 149 | case MKC_U: 150 | key = MKC_LeftBracket; 151 | break; 152 | case MKC_V: 153 | key = MKC_F4; 154 | break; 155 | case MKC_W: 156 | return; /* none */ 157 | break; 158 | case MKC_X: 159 | key = MKC_F2; 160 | break; 161 | case MKC_Y: 162 | key = MKC_Escape; 163 | break; 164 | case MKC_Z: 165 | key = MKC_F1; 166 | break; 167 | default: 168 | break; 169 | } 170 | Keyboard_UpdateKeyMap(key, down); 171 | } 172 | } 173 | 174 | LOCALPROC DisconnectKeyCodes1(ui5b KeepMask) 175 | { 176 | DisconnectKeyCodes(KeepMask); 177 | 178 | if (! (0 != (KeepMask & kKeepMaskCommand))) { 179 | AltKeysTrueCmnd = falseblnr; 180 | } 181 | if (! (0 != (KeepMask & kKeepMaskOption))) { 182 | AltKeysTrueOption = falseblnr; 183 | } 184 | if (! (0 != (KeepMask & kKeepMaskShift))) { 185 | AltKeysTrueShift = falseblnr; 186 | } 187 | AltKeysModOn = AltKeysTrueCmnd 188 | || AltKeysTrueOption || AltKeysTrueShift; 189 | AltKeysTextOn = AltKeysLockText || AltKeysModOn; 190 | } 191 | 192 | LOCALPROC DrawAltKeyMode(void) 193 | { 194 | int i; 195 | 196 | CurCellv0 = ControlBoxv0; 197 | CurCellh0 = ControlBoxh0; 198 | 199 | DrawCellAdvance(kInsertText00); 200 | for (i = (ControlBoxw - 4) / 2; --i >= 0; ) { 201 | DrawCellAdvance(kInsertText04); 202 | } 203 | DrawCellAdvance(kInsertText01); 204 | DrawCellAdvance(kInsertText02); 205 | for (i = (ControlBoxw - 4) / 2; --i >= 0; ) { 206 | DrawCellAdvance(kInsertText04); 207 | } 208 | DrawCellAdvance(kInsertText03); 209 | } 210 | -------------------------------------------------------------------------------- /src/KBRDEMDV.c: -------------------------------------------------------------------------------- 1 | /* 2 | KBRDEMDV.c 3 | 4 | Copyright (C) 2006 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | KeyBoaRD EMulated DeVice 19 | 20 | Emulation of the keyboard in the Mac Plus. 21 | 22 | This code adapted from "Keyboard.c" in vMac by Philip Cummins. 23 | */ 24 | 25 | #include "PICOMMON.h" 26 | 27 | #if EmClassicKbrd 28 | 29 | #include "KBRDEMDV.h" 30 | 31 | #ifdef _VIA_Debug 32 | #include 33 | #endif 34 | 35 | /* 36 | ReportAbnormalID unused 0x0B03 - 0x0BFF 37 | */ 38 | 39 | IMPORTPROC KYBD_ShiftOutData(ui3b v); 40 | IMPORTFUNC ui3b KYBD_ShiftInData(void); 41 | 42 | enum { 43 | kKybdStateIdle, 44 | kKybdStateRecievingCommand, 45 | kKybdStateRecievedCommand, 46 | kKybdStateRecievingEndCommand, 47 | 48 | kKybdStates 49 | }; 50 | 51 | LOCALVAR int KybdState = kKybdStateIdle; 52 | 53 | LOCALVAR blnr HaveKeyBoardResult = falseblnr; 54 | LOCALVAR ui3b KeyBoardResult; 55 | 56 | LOCALPROC GotKeyBoardData(ui3b v) 57 | { 58 | if (KybdState != kKybdStateIdle) { 59 | HaveKeyBoardResult = trueblnr; 60 | KeyBoardResult = v; 61 | } else { 62 | KYBD_ShiftOutData(v); 63 | VIA1_iCB2 = 1; 64 | } 65 | } 66 | 67 | LOCALVAR ui3b InstantCommandData = 0x7B; 68 | 69 | LOCALFUNC blnr AttemptToFinishInquiry(void) 70 | { 71 | int i; 72 | blnr KeyDown; 73 | ui3b Keyboard_Data; 74 | 75 | if (FindKeyEvent(&i, &KeyDown)) { 76 | if (i < 64) { 77 | Keyboard_Data = i << 1; 78 | if (! KeyDown) { 79 | Keyboard_Data += 128; 80 | } 81 | } else { 82 | Keyboard_Data = 121; 83 | InstantCommandData = (i - 64) << 1; 84 | if (! KeyDown) { 85 | InstantCommandData += 128; 86 | } 87 | } 88 | GotKeyBoardData(Keyboard_Data); 89 | return trueblnr; 90 | } else { 91 | return falseblnr; 92 | } 93 | } 94 | 95 | #define MaxKeyboardWait 16 /* in 60ths of a second */ 96 | /* 97 | Code in the mac rom will reset the keyboard if 98 | it hasn't been heard from in 32/60th of a second. 99 | So time out and send something before that 100 | to keep connection. 101 | */ 102 | 103 | LOCALVAR int InquiryCommandTimer = 0; 104 | 105 | GLOBALPROC DoKybd_ReceiveCommand(void) 106 | { 107 | if (KybdState != kKybdStateRecievingCommand) { 108 | ReportAbnormalID(0x0B01, 109 | "KybdState != kKybdStateRecievingCommand"); 110 | } else { 111 | ui3b in = KYBD_ShiftInData(); 112 | 113 | KybdState = kKybdStateRecievedCommand; 114 | 115 | switch (in) { 116 | case 0x10 : /* Inquiry Command */ 117 | if (! AttemptToFinishInquiry()) { 118 | InquiryCommandTimer = MaxKeyboardWait; 119 | } 120 | break; 121 | case 0x14 : /* Instant Command */ 122 | GotKeyBoardData(InstantCommandData); 123 | InstantCommandData = 0x7B; 124 | break; 125 | case 0x16 : /* Model Command */ 126 | GotKeyBoardData(0x0b /* 0x01 */); 127 | /* Test value, means Model 0, no extra devices */ 128 | /* 129 | Fixed by Hoshi Takanori - 130 | it uses the proper keyboard type now 131 | */ 132 | break; 133 | case 0x36 : /* Test Command */ 134 | GotKeyBoardData(0x7D); 135 | break; 136 | case 0x00: 137 | GotKeyBoardData(0); 138 | break; 139 | default : 140 | /* Debugger(); */ 141 | GotKeyBoardData(0); 142 | break; 143 | } 144 | } 145 | } 146 | 147 | GLOBALPROC DoKybd_ReceiveEndCommand(void) 148 | { 149 | if (KybdState != kKybdStateRecievingEndCommand) { 150 | ReportAbnormalID(0x0B02, 151 | "KybdState != kKybdStateRecievingEndCommand"); 152 | } else { 153 | KybdState = kKybdStateIdle; 154 | #ifdef _VIA_Debug 155 | fprintf(stderr, "enter DoKybd_ReceiveEndCommand\n"); 156 | #endif 157 | if (HaveKeyBoardResult) { 158 | #ifdef _VIA_Debug 159 | fprintf(stderr, "HaveKeyBoardResult: %d\n", KeyBoardResult); 160 | #endif 161 | HaveKeyBoardResult = falseblnr; 162 | KYBD_ShiftOutData(KeyBoardResult); 163 | VIA1_iCB2 = 1; 164 | } 165 | } 166 | } 167 | 168 | GLOBALPROC Kybd_DataLineChngNtfy(void) 169 | { 170 | switch (KybdState) { 171 | case kKybdStateIdle: 172 | if (VIA1_iCB2 == 0) { 173 | KybdState = kKybdStateRecievingCommand; 174 | #ifdef _VIA_Debug 175 | fprintf(stderr, "posting kICT_Kybd_ReceiveCommand\n"); 176 | #endif 177 | ICT_add(kICT_Kybd_ReceiveCommand, 178 | 6800UL * kCycleScale / 64 * kMyClockMult); 179 | 180 | if (InquiryCommandTimer != 0) { 181 | InquiryCommandTimer = 0; /* abort Inquiry */ 182 | } 183 | } 184 | break; 185 | case kKybdStateRecievedCommand: 186 | if (VIA1_iCB2 == 1) { 187 | KybdState = kKybdStateRecievingEndCommand; 188 | #ifdef _VIA_Debug 189 | fprintf(stderr, 190 | "posting kICT_Kybd_ReceiveEndCommand\n"); 191 | #endif 192 | ICT_add(kICT_Kybd_ReceiveEndCommand, 193 | 6800UL * kCycleScale / 64 * kMyClockMult); 194 | } 195 | break; 196 | } 197 | } 198 | 199 | GLOBALPROC KeyBoard_Update(void) 200 | { 201 | if (InquiryCommandTimer != 0) { 202 | if (AttemptToFinishInquiry()) { 203 | InquiryCommandTimer = 0; 204 | } else { 205 | --InquiryCommandTimer; 206 | if (InquiryCommandTimer == 0) { 207 | GotKeyBoardData(0x7B); 208 | } 209 | } 210 | } 211 | } 212 | 213 | #endif /* EmClassicKbrd */ 214 | -------------------------------------------------------------------------------- /src/M68KITAB.h: -------------------------------------------------------------------------------- 1 | /* 2 | M68KITAB.h 3 | 4 | Copyright (C) 2007, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef M68KITAB_H 18 | #error "header already included" 19 | #else 20 | #define M68KITAB_H 21 | #endif 22 | 23 | enum { 24 | kIKindTst, 25 | kIKindCmpB, 26 | kIKindCmpW, 27 | kIKindCmpL, 28 | kIKindBccB, 29 | kIKindBccW, 30 | kIKindBraB, 31 | kIKindBraW, 32 | kIKindDBcc, 33 | kIKindDBF, 34 | kIKindSwap, 35 | kIKindMoveL, 36 | kIKindMoveW, 37 | kIKindMoveB, 38 | kIKindMoveAL, 39 | kIKindMoveAW, 40 | kIKindMoveQ, 41 | kIKindAddB, 42 | kIKindAddW, 43 | kIKindAddL, 44 | kIKindSubB, 45 | kIKindSubW, 46 | kIKindSubL, 47 | kIKindLea, 48 | kIKindPEA, 49 | kIKindA, 50 | kIKindBsrB, 51 | kIKindBsrW, 52 | kIKindJsr, 53 | kIKindLinkA6, 54 | kIKindMOVEMRmML, 55 | kIKindMOVEMApRL, 56 | kIKindUnlkA6, 57 | kIKindRts, 58 | kIKindJmp, 59 | kIKindClr, 60 | kIKindAddA, 61 | kIKindAddQA, 62 | kIKindSubA, 63 | kIKindSubQA, 64 | kIKindCmpA, 65 | kIKindAddXB, 66 | kIKindAddXW, 67 | kIKindAddXL, 68 | kIKindSubXB, 69 | kIKindSubXW, 70 | kIKindSubXL, 71 | kIKindAslB, 72 | kIKindAslW, 73 | kIKindAslL, 74 | kIKindAsrB, 75 | kIKindAsrW, 76 | kIKindAsrL, 77 | kIKindLslB, 78 | kIKindLslW, 79 | kIKindLslL, 80 | kIKindLsrB, 81 | kIKindLsrW, 82 | kIKindLsrL, 83 | kIKindRxlB, 84 | kIKindRxlW, 85 | kIKindRxlL, 86 | kIKindRxrB, 87 | kIKindRxrW, 88 | kIKindRxrL, 89 | kIKindRolB, 90 | kIKindRolW, 91 | kIKindRolL, 92 | kIKindRorB, 93 | kIKindRorW, 94 | kIKindRorL, 95 | kIKindBTstB, 96 | kIKindBChgB, 97 | kIKindBClrB, 98 | kIKindBSetB, 99 | kIKindBTstL, 100 | kIKindBChgL, 101 | kIKindBClrL, 102 | kIKindBSetL, 103 | kIKindAndI, 104 | kIKindAndEaD, 105 | kIKindAndDEa, 106 | kIKindOrI, 107 | kIKindOrDEa, 108 | kIKindOrEaD, 109 | kIKindEor, 110 | kIKindEorI, 111 | kIKindNot, 112 | kIKindScc, 113 | kIKindNegXB, 114 | kIKindNegXW, 115 | kIKindNegXL, 116 | kIKindNegB, 117 | kIKindNegW, 118 | kIKindNegL, 119 | kIKindEXTW, 120 | kIKindEXTL, 121 | kIKindMulU, 122 | kIKindMulS, 123 | kIKindDivU, 124 | kIKindDivS, 125 | kIKindExg, 126 | kIKindMoveEaCCR, 127 | kIKindMoveSREa, 128 | kIKindMoveEaSR, 129 | kIKindOrISR, 130 | kIKindAndISR, 131 | kIKindEorISR, 132 | kIKindOrICCR, 133 | kIKindAndICCR, 134 | kIKindEorICCR, 135 | kIKindMOVEMApRW, 136 | kIKindMOVEMRmMW, 137 | kIKindMOVEMrmW, 138 | kIKindMOVEMrmL, 139 | kIKindMOVEMmrW, 140 | kIKindMOVEMmrL, 141 | kIKindAbcd, 142 | kIKindSbcd, 143 | kIKindNbcd, 144 | kIKindRte, 145 | kIKindNop, 146 | kIKindMoveP0, 147 | kIKindMoveP1, 148 | kIKindMoveP2, 149 | kIKindMoveP3, 150 | kIKindIllegal, 151 | kIKindChkW, 152 | kIKindTrap, 153 | kIKindTrapV, 154 | kIKindRtr, 155 | kIKindLink, 156 | kIKindUnlk, 157 | kIKindMoveRUSP, 158 | kIKindMoveUSPR, 159 | kIKindTas, 160 | kIKindFdflt, 161 | kIKindStop, 162 | kIKindReset, 163 | 164 | #if Use68020 165 | kIKindCallMorRtm, 166 | kIKindBraL, 167 | kIKindBccL, 168 | kIKindBsrL, 169 | kIKindEXTBL, 170 | kIKindTRAPcc, 171 | kIKindChkL, 172 | kIKindBkpt, 173 | kIKindDivL, 174 | kIKindMulL, 175 | kIKindRtd, 176 | kIKindMoveCCREa, 177 | kIKindMoveCEa, 178 | kIKindMoveEaC, 179 | kIKindLinkL, 180 | kIKindPack, 181 | kIKindUnpk, 182 | kIKindCHK2orCMP2, 183 | kIKindCAS2, 184 | kIKindCAS, 185 | kIKindMoveS, 186 | kIKindBitField, 187 | #endif 188 | #if EmMMU 189 | kIKindMMU, 190 | #endif 191 | #if EmFPU 192 | kIKindFPUmd60, 193 | kIKindFPUDBcc, 194 | kIKindFPUTrapcc, 195 | kIKindFPUScc, 196 | kIKindFPUFBccW, 197 | kIKindFPUFBccL, 198 | kIKindFPUSave, 199 | kIKindFPURestore, 200 | kIKindFPUdflt, 201 | #endif 202 | 203 | kNumIKinds 204 | }; 205 | 206 | enum { 207 | kAMdRegB, 208 | kAMdRegW, 209 | kAMdRegL, 210 | kAMdIndirectB, 211 | kAMdIndirectW, 212 | kAMdIndirectL, 213 | kAMdAPosIncB, 214 | kAMdAPosIncW, 215 | kAMdAPosIncL, 216 | kAMdAPosInc7B, 217 | kAMdAPreDecB, 218 | kAMdAPreDecW, 219 | kAMdAPreDecL, 220 | kAMdAPreDec7B, 221 | kAMdADispB, 222 | kAMdADispW, 223 | kAMdADispL, 224 | kAMdAIndexB, 225 | kAMdAIndexW, 226 | kAMdAIndexL, 227 | kAMdAbsWB, 228 | kAMdAbsWW, 229 | kAMdAbsWL, 230 | kAMdAbsLB, 231 | kAMdAbsLW, 232 | kAMdAbsLL, 233 | kAMdPCDispB, 234 | kAMdPCDispW, 235 | kAMdPCDispL, 236 | kAMdPCIndexB, 237 | kAMdPCIndexW, 238 | kAMdPCIndexL, 239 | kAMdImmedB, 240 | kAMdImmedW, 241 | kAMdImmedL, 242 | kAMdDat4, 243 | 244 | kNumAMds 245 | }; 246 | 247 | struct DecOpXR { 248 | /* expected size : 4 bytes */ 249 | ui4b MainClas; 250 | ui4b Cycles; 251 | }; 252 | typedef struct DecOpXR DecOpXR; 253 | 254 | struct DecArgR { 255 | /* expected size : 2 bytes */ 256 | ui3b AMd; 257 | ui3b ArgDat; 258 | }; 259 | typedef struct DecArgR DecArgR; 260 | 261 | struct DecOpYR { 262 | /* expected size : 4 bytes */ 263 | DecArgR v[2]; 264 | }; 265 | typedef struct DecOpYR DecOpYR; 266 | 267 | struct DecOpR { 268 | /* expected size : 8 bytes */ 269 | DecOpXR x; 270 | DecOpYR y; 271 | } my_align_8; 272 | typedef struct DecOpR DecOpR; 273 | 274 | #define GetDcoCycles(p) ((p)->x.Cycles) 275 | 276 | #define SetDcoMainClas(p, xx) ((p)->x.MainClas = (xx)) 277 | #define SetDcoCycles(p, xx) ((p)->x.Cycles = (xx)) 278 | 279 | EXPORTPROC M68KITAB_setup(DecOpR *p); 280 | -------------------------------------------------------------------------------- /src/IWMEMDEV.c: -------------------------------------------------------------------------------- 1 | /* 2 | IWMEVDEV.c 3 | 4 | Copyright (C) 2006 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Integrated Woz Machine EMulated DEVice 19 | 20 | Emulates the IWM found in the Mac Plus. 21 | 22 | This code is adapted from "IWM.c" in vMac by Philip Cummins. 23 | */ 24 | 25 | /* 26 | This is the emulation for the IWM, the Integrated Woz Machine. 27 | It's basically a serial to parallel converter with some timing 28 | in-built into it to perform handshaking. Emulation so far just 29 | includes Status and Mode Register Accesses. 30 | */ 31 | 32 | #include "PICOMMON.h" 33 | 34 | #include "IWMEMDEV.h" 35 | 36 | #define IWM_dolog (dbglog_HAVE && 0) 37 | 38 | /* 39 | ReportAbnormalID unused 0x0603 - 0x06FF 40 | */ 41 | 42 | #define kph0L 0x00 /* CA0 off (0) */ 43 | #define kph0H 0x01 /* CA0 on (1) */ 44 | #define kph1L 0x02 /* CA1 off (0) */ 45 | #define kph1H 0x03 /* CA1 on (1) */ 46 | #define kph2L 0x04 /* CA2 off (0) */ 47 | #define kph2H 0x05 /* CA2 on (1) */ 48 | #define kph3L 0x06 /* LSTRB off (low) */ 49 | #define kph3H 0x07 /* LSTRB on (high) */ 50 | #define kmtrOff 0x08 /* disk enable off */ 51 | #define kmtrOn 0x09 /* disk enable on */ 52 | #define kintDrive 0x0A /* select internal drive */ 53 | #define kextDrive 0x0B /* select external drive */ 54 | #define kq6L 0x0C /* Q6 off */ 55 | #define kq6H 0x0D /* Q6 on */ 56 | #define kq7L 0x0E /* Q7 off */ 57 | #define kq7H 0x0F /* Q7 on */ 58 | 59 | #define kph0 0x01 60 | #define kph1 0x02 61 | #define kph2 0x04 62 | #define kph3 0x08 63 | #define kmtr 0x10 64 | #define kdrv 0x20 65 | #define kq6 0x40 66 | #define kq7 0x80 67 | 68 | typedef struct 69 | { 70 | ui3b DataIn; /* Read Data Register */ 71 | ui3b Handshake; /* Read Handshake Register */ 72 | ui3b Status; /* Read Status Register */ 73 | ui3b Mode; 74 | /* Drive Off : Write Mode Register */ 75 | /* Drive On : Write Data Register */ 76 | ui3b DataOut; /* Write Data Register */ 77 | ui3b Lines; /* Used to Access Disk Drive Registers */ 78 | } IWM_Ty; 79 | 80 | IWM_Ty IWM; 81 | 82 | GLOBALPROC IWM_Reset(void) 83 | { 84 | IWM.DataIn = IWM.Handshake = IWM.Status = IWM.Mode = 85 | IWM.DataOut = IWM.Lines = 0; 86 | } 87 | 88 | typedef enum {On, Off} Mode_Ty; 89 | 90 | LOCALPROC IWM_Set_Lines(ui3b line, Mode_Ty the_mode) 91 | { 92 | if (the_mode == Off) { 93 | IWM.Lines &= (0xFF - line); 94 | } else { 95 | IWM.Lines |= line; 96 | } 97 | } 98 | 99 | LOCALFUNC ui3b IWM_Read_Reg(void) 100 | { 101 | switch ((IWM.Lines & (kq6 + kq7)) >> 6) { 102 | case 0 : 103 | #if (CurEmMd >= kEmMd_SE) && (CurEmMd <= kEmMd_IIx) 104 | /* don't report */ 105 | #else 106 | ReportAbnormalID(0x0601, "IWM Data Read"); 107 | #endif 108 | #if IWM_dolog 109 | dbglog_WriteNote("IWM Data Read"); 110 | #endif 111 | return IWM.DataIn; 112 | break; 113 | case 1 : 114 | #if IWM_dolog 115 | dbglog_WriteNote("IWM Status Read"); 116 | #endif 117 | return IWM.Status; 118 | break; 119 | case 2 : 120 | ReportAbnormalID(0x0602, "IWM Handshake Read"); 121 | #if IWM_dolog 122 | dbglog_WriteNote("IWM Handshake Read"); 123 | #endif 124 | return IWM.Handshake; 125 | break; 126 | case 3 : 127 | default : 128 | /* 129 | should alway be in 0-3, 130 | but compiler warnings don't know that 131 | */ 132 | return 0; 133 | break; 134 | } 135 | } 136 | 137 | LOCALPROC IWM_Write_Reg(ui3b in) 138 | { 139 | if (((IWM.Lines & kmtr) >> 4) == 0) { 140 | #if IWM_dolog 141 | dbglog_WriteNote("IWM Mode Register Write"); 142 | #endif 143 | IWM.Mode = in; 144 | IWM.Status = ((IWM.Status & 0xE0) + (IWM.Mode & 0x1F)); 145 | } 146 | } 147 | 148 | GLOBALFUNC ui5b IWM_Access(ui5b Data, blnr WriteMem, CPTR addr) 149 | { 150 | #if IWM_dolog 151 | dbglog_AddrAccess("IWM", Data, WriteMem, addr); 152 | #endif 153 | 154 | switch (addr) { 155 | case kph0L : 156 | IWM_Set_Lines(kph0, Off); 157 | break; 158 | case kph0H : 159 | IWM_Set_Lines(kph0, On); 160 | break; 161 | case kph1L : 162 | IWM_Set_Lines(kph1, Off); 163 | break; 164 | case kph1H : 165 | IWM_Set_Lines(kph1, On); 166 | break; 167 | case kph2L : 168 | IWM_Set_Lines(kph2, Off); 169 | break; 170 | case kph2H : 171 | IWM_Set_Lines(kph2, On); 172 | break; 173 | case kph3L : 174 | IWM_Set_Lines(kph3, Off); 175 | break; 176 | case kph3H : 177 | IWM_Set_Lines(kph3, On); 178 | break; 179 | case kmtrOff : 180 | IWM.Status &= 0xDF; 181 | IWM_Set_Lines(kmtr, Off); 182 | break; 183 | case kmtrOn : 184 | IWM.Status |= 0x20; 185 | IWM_Set_Lines(kmtr, On); 186 | break; 187 | case kintDrive : 188 | IWM_Set_Lines(kdrv, Off); 189 | break; 190 | case kextDrive : 191 | IWM_Set_Lines(kdrv, On); 192 | break; 193 | case kq6L : 194 | IWM_Set_Lines(kq6, Off); 195 | break; 196 | case kq6H : 197 | IWM_Set_Lines(kq6, On); 198 | break; 199 | case kq7L : 200 | if (! WriteMem) { 201 | Data = IWM_Read_Reg(); 202 | } 203 | IWM_Set_Lines(kq7, Off); 204 | break; 205 | case kq7H : 206 | if (WriteMem) { 207 | IWM_Write_Reg(Data); 208 | } 209 | IWM_Set_Lines(kq7, On); 210 | break; 211 | } 212 | 213 | return Data; 214 | } 215 | -------------------------------------------------------------------------------- /src/HPMCHACK.h: -------------------------------------------------------------------------------- 1 | /* 2 | HPMCHACK.c 3 | 4 | Copyright (C) 2016 Steve Chamberlin, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | HaPpy MaCintosh Hack 19 | 20 | Patch the ROM for alternatives to the 21 | Happy Macintosh icon displayed on boot 22 | when a disk is inserted. 23 | */ 24 | 25 | #define kAHM_aside 0 26 | #define kAHM_cheese 1 27 | #define kAHM_evil 2 28 | #define kAHM_horror 3 29 | #define kAHM_lady_mac 4 30 | #define kAHM_moustache 5 31 | #define kAHM_nerdy 6 32 | #define kAHM_pirate 7 33 | #define kAHM_sleepy 8 34 | #define kAHM_sly 9 35 | #define kAHM_sunglasses 10 36 | #define kAHM_surprise 11 37 | #define kAHM_tongue 12 38 | #define kAHM_yuck 13 39 | #define kAHM_zombie 14 40 | 41 | LOCALVAR const ui3b my_HappyMac_icon[] = { 42 | #if CurAltHappyMac == kAHM_aside 43 | 0x00, 0x00, 44 | 0x39, 0x38, 45 | 0x21, 0x20, 46 | 0x01, 0x00, 47 | 0x01, 0x00, 48 | 0x03, 0x00, 49 | 0x00, 0x00, 50 | 0x00, 0x00, 51 | 0x07, 0x80, 52 | 0x00, 0x00 53 | #endif 54 | #if CurAltHappyMac == kAHM_cheese 55 | 0x10, 0x10, 56 | 0x28, 0x28, 57 | 0x00, 0x00, 58 | 0x00, 0x00, 59 | 0x3F, 0xF8, 60 | 0x20, 0x08, 61 | 0x20, 0x08, 62 | 0x20, 0x08, 63 | 0x10, 0x10, 64 | 0x0F, 0xE0, 65 | #endif 66 | #if CurAltHappyMac == kAHM_evil 67 | 0x00, 0x00, 68 | 0x10, 0x10, 69 | 0x08, 0x20, 70 | 0x0C, 0x60, 71 | 0x00, 0x00, 72 | 0x20, 0x08, 73 | 0x20, 0x08, 74 | 0x1F, 0xF0, 75 | 0x00, 0x00, 76 | 0x00, 0x00 77 | #endif 78 | #if CurAltHappyMac == kAHM_horror 79 | 0x38, 0x38, 80 | 0x44, 0x44, 81 | 0x44, 0x44, 82 | 0x44, 0x44, 83 | 0x38, 0x38, 84 | 0x03, 0x80, 85 | 0x03, 0x80, 86 | 0x03, 0x80, 87 | 0x03, 0x80, 88 | 0x03, 0x80 89 | #endif 90 | #if CurAltHappyMac == kAHM_lady_mac 91 | 0x38, 0x38, 92 | 0x45, 0x44, 93 | 0x55, 0x54, 94 | 0x45, 0x44, 95 | 0x39, 0x38, 96 | 0x03, 0x00, 97 | 0x00, 0x00, 98 | 0x00, 0x00, 99 | 0x07, 0x80, 100 | 0x03, 0x00 101 | #endif 102 | #if CurAltHappyMac == kAHM_moustache 103 | 0x00, 0x00, 104 | 0x11, 0x10, 105 | 0x11, 0x10, 106 | 0x01, 0x00, 107 | 0x01, 0x00, 108 | 0x03, 0x00, 109 | 0x1F, 0xE0, 110 | 0x00, 0x00, 111 | 0x08, 0x40, 112 | 0x07, 0x80 113 | #endif 114 | #if CurAltHappyMac == kAHM_nerdy 115 | 0x38, 0x38, 116 | 0x45, 0x45, 117 | 0xD7, 0xD6, 118 | 0x45, 0x44, 119 | 0x39, 0x38, 120 | 0x03, 0x00, 121 | 0x00, 0x00, 122 | 0x00, 0x00, 123 | 0x0F, 0xC0, 124 | 0x00, 0x00 125 | #endif 126 | #if CurAltHappyMac == kAHM_pirate 127 | 0x00, 0x81, 128 | 0x00, 0x7E, 129 | 0x11, 0x7E, 130 | 0x11, 0x3C, 131 | 0x01, 0x3C, 132 | 0x01, 0x18, 133 | 0x03, 0x00, 134 | 0x00, 0x00, 135 | 0x08, 0x40, 136 | 0x07, 0x80 137 | #endif 138 | #if CurAltHappyMac == kAHM_sleepy 139 | 0x00, 0x00, 140 | 0x1C, 0x70, 141 | 0x22, 0x88, 142 | 0x00, 0x00, 143 | 0x1C, 0x70, 144 | 0x08, 0x20, 145 | 0x00, 0x00, 146 | 0x00, 0x00, 147 | 0x03, 0x80, 148 | 0x00, 0x00 149 | #endif 150 | #if CurAltHappyMac == kAHM_sly 151 | 0x00, 0x00, 152 | 0x08, 0x20, 153 | 0x14, 0x50, 154 | 0x00, 0x00, 155 | 0x00, 0x00, 156 | 0x20, 0x08, 157 | 0x3F, 0xF8, 158 | 0x00, 0x00, 159 | 0x00, 0x00, 160 | 0x00, 0x00 161 | #endif 162 | #if CurAltHappyMac == kAHM_sunglasses 163 | 0x00, 0x00, 164 | 0xFF, 0xFE, 165 | 0x7D, 0x7C, 166 | 0x7D, 0x7C, 167 | 0x39, 0x38, 168 | 0x03, 0x00, 169 | 0x00, 0x00, 170 | 0x1F, 0xF0, 171 | 0x00, 0x00, 172 | 0x00, 0x00 173 | #endif 174 | #if CurAltHappyMac == kAHM_surprise 175 | 0x1C, 0x70, 176 | 0x22, 0x88, 177 | 0x41, 0x04, 178 | 0x49, 0x24, 179 | 0x41, 0x04, 180 | 0x22, 0x88, 181 | 0x1C, 0x70, 182 | 0x01, 0x00, 183 | 0x03, 0x80, 184 | 0x03, 0x80 185 | #endif 186 | #if CurAltHappyMac == kAHM_tongue 187 | 0x00, 0x00, 188 | 0x1E, 0x78, 189 | 0x00, 0x00, 190 | 0x00, 0x00, 191 | 0x20, 0x04, 192 | 0x3F, 0xFC, 193 | 0x05, 0x40, 194 | 0x05, 0x40, 195 | 0x04, 0x40, 196 | 0x03, 0x80 197 | #endif 198 | #if CurAltHappyMac == kAHM_yuck 199 | 0x00, 0x00, 200 | 0x18, 0x30, 201 | 0x04, 0x40, 202 | 0x02, 0x80, 203 | 0x00, 0x00, 204 | 0x00, 0x00, 205 | 0x1F, 0xF0, 206 | 0x15, 0x50, 207 | 0x04, 0x40, 208 | 0x03, 0x80 209 | #endif 210 | #if CurAltHappyMac == kAHM_zombie 211 | 0x70, 0x7C, 212 | 0x88, 0x82, 213 | 0x88, 0x8A, 214 | 0xA8, 0x8A, 215 | 0x70, 0x82, 216 | 0x00, 0x42, 217 | 0x00, 0x3C, 218 | 0x1E, 0x00, 219 | 0x3F, 0x00, 220 | 0x3F, 0x00 221 | #endif 222 | }; 223 | 224 | #if CurEmMd <= kEmMd_Twig43 225 | #define HappyMacBase 0xA34 226 | #elif CurEmMd <= kEmMd_Twiggy 227 | #define HappyMacBase 0x8F4 228 | #elif CurEmMd <= kEmMd_128K 229 | #define HappyMacBase 0x8A0 230 | #elif CurEmMd <= kEmMd_Plus 231 | #define HappyMacBase 0xFD2 232 | #elif CurEmMd <= kEmMd_Classic 233 | #define HappyMacBase 0x125C 234 | #elif CurEmMd <= kEmMd_PB100 235 | #define HappyMacBase 0x2BB0 236 | #elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) 237 | #define HappyMacBase 0x1948 238 | #endif 239 | 240 | LOCALPROC PatchHappyMac(void) 241 | { 242 | #if (CurEmMd == kEmMd_PB100) \ 243 | || (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) 244 | 245 | int i; 246 | ui3b *dst = HappyMacBase + ROM + 0x18; 247 | ui3b *src = (ui3b *)my_HappyMac_icon; 248 | 249 | for (i = 10; --i >= 0; ) { 250 | ++dst; 251 | *dst++ = *src++; 252 | *dst++ = *src++; 253 | ++dst; 254 | } 255 | 256 | #else 257 | MyMoveBytes((anyp)my_HappyMac_icon, 258 | (anyp)(HappyMacBase + ROM), 259 | sizeof(my_HappyMac_icon)); 260 | #endif 261 | } 262 | -------------------------------------------------------------------------------- /src/CNFUDPIC.h: -------------------------------------------------------------------------------- 1 | /* 2 | see comment in PICOMMON.h 3 | 4 | This file is automatically generated by the build system, 5 | which tries to know what options are valid in what 6 | combinations. Avoid changing this file manually unless 7 | you know what you're doing. 8 | */ 9 | 10 | #define EmClassicKbrd 1 11 | #define EmADB 0 12 | #define EmRTC 1 13 | #define EmPMU 0 14 | #define EmVIA1 1 15 | #define EmVIA2 0 16 | #define Use68020 0 17 | #define EmFPU 0 18 | #define EmMMU 0 19 | #define EmClassicSnd MySoundEnabled 20 | #define EmASC 0 21 | 22 | #define CurEmMd kEmMd_Plus 23 | 24 | #define kMyClockMult 1 25 | 26 | #define WantCycByPriOp 1 27 | #define WantCloserCyc 0 28 | 29 | #define kAutoSlowSubTicks 16384 30 | #define kAutoSlowTime 34 31 | 32 | #define kRAMa_Size 0x00200000 33 | #define kRAMb_Size 0x00200000 34 | 35 | #if vMacScreenWidth != 512 36 | #define IncludeVidMem 1 37 | #define kVidMemRAM_Size 0x00008000 38 | #endif 39 | 40 | #define EmVidCard 0 41 | 42 | #define MaxATTListN 16 43 | #define IncludeExtnPbufs 1 44 | #define IncludeExtnHostTextClipExchange 0 45 | 46 | #define Sony_SupportDC42 1 47 | #define Sony_SupportTags 0 48 | #define Sony_WantChecksumsUpdated 0 49 | #define Sony_VerifyChecksums 0 50 | #define CaretBlinkTime 0x03 51 | #define SpeakerVol 0x07 52 | #define DoubleClickTime 0x05 53 | #define MenuBlink 0x03 54 | #define AutoKeyThresh 0x06 55 | #define AutoKeyRate 0x03 56 | 57 | 58 | /* the Wire variables are 1/0, not true/false */ 59 | 60 | enum { 61 | 62 | Wire_VIA1_iA0_SoundVolb0, 63 | #define SoundVolb0 (Wires[Wire_VIA1_iA0_SoundVolb0]) 64 | #define VIA1_iA0 (Wires[Wire_VIA1_iA0_SoundVolb0]) 65 | 66 | Wire_VIA1_iA1_SoundVolb1, 67 | #define SoundVolb1 (Wires[Wire_VIA1_iA1_SoundVolb1]) 68 | #define VIA1_iA1 (Wires[Wire_VIA1_iA1_SoundVolb1]) 69 | 70 | Wire_VIA1_iA2_SoundVolb2, 71 | #define SoundVolb2 (Wires[Wire_VIA1_iA2_SoundVolb2]) 72 | #define VIA1_iA2 (Wires[Wire_VIA1_iA2_SoundVolb2]) 73 | 74 | Wire_VIA1_iA4_MemOverlay, 75 | #define MemOverlay (Wires[Wire_VIA1_iA4_MemOverlay]) 76 | #define VIA1_iA4 (Wires[Wire_VIA1_iA4_MemOverlay]) 77 | #define VIA1_iA4_ChangeNtfy MemOverlay_ChangeNtfy 78 | 79 | Wire_VIA1_iA6_SCRNvPage2, 80 | #define SCRNvPage2 (Wires[Wire_VIA1_iA6_SCRNvPage2]) 81 | #define VIA1_iA6 (Wires[Wire_VIA1_iA6_SCRNvPage2]) 82 | 83 | Wire_VIA1_iA5_IWMvSel, 84 | #define IWMvSel (Wires[Wire_VIA1_iA5_IWMvSel]) 85 | #define VIA1_iA5 (Wires[Wire_VIA1_iA5_IWMvSel]) 86 | 87 | Wire_VIA1_iA7_SCCwaitrq, 88 | #define SCCwaitrq (Wires[Wire_VIA1_iA7_SCCwaitrq]) 89 | #define VIA1_iA7 (Wires[Wire_VIA1_iA7_SCCwaitrq]) 90 | 91 | Wire_VIA1_iB0_RTCdataLine, 92 | #define RTCdataLine (Wires[Wire_VIA1_iB0_RTCdataLine]) 93 | #define VIA1_iB0 (Wires[Wire_VIA1_iB0_RTCdataLine]) 94 | #define VIA1_iB0_ChangeNtfy RTCdataLine_ChangeNtfy 95 | 96 | Wire_VIA1_iB1_RTCclock, 97 | #define RTCclock (Wires[Wire_VIA1_iB1_RTCclock]) 98 | #define VIA1_iB1 (Wires[Wire_VIA1_iB1_RTCclock]) 99 | #define VIA1_iB1_ChangeNtfy RTCclock_ChangeNtfy 100 | 101 | Wire_VIA1_iB2_RTCunEnabled, 102 | #define RTCunEnabled (Wires[Wire_VIA1_iB2_RTCunEnabled]) 103 | #define VIA1_iB2 (Wires[Wire_VIA1_iB2_RTCunEnabled]) 104 | #define VIA1_iB2_ChangeNtfy RTCunEnabled_ChangeNtfy 105 | 106 | Wire_VIA1_iA3_SoundBuffer, 107 | #define SoundBuffer (Wires[Wire_VIA1_iA3_SoundBuffer]) 108 | #define VIA1_iA3 (Wires[Wire_VIA1_iA3_SoundBuffer]) 109 | 110 | Wire_VIA1_iB3_MouseBtnUp, 111 | #define MouseBtnUp (Wires[Wire_VIA1_iB3_MouseBtnUp]) 112 | #define VIA1_iB3 (Wires[Wire_VIA1_iB3_MouseBtnUp]) 113 | 114 | Wire_VIA1_iB4_MouseX2, 115 | #define MouseX2 (Wires[Wire_VIA1_iB4_MouseX2]) 116 | #define VIA1_iB4 (Wires[Wire_VIA1_iB4_MouseX2]) 117 | 118 | Wire_VIA1_iB5_MouseY2, 119 | #define MouseY2 (Wires[Wire_VIA1_iB5_MouseY2]) 120 | #define VIA1_iB5 (Wires[Wire_VIA1_iB5_MouseY2]) 121 | 122 | Wire_VIA1_iCB2_KybdDat, 123 | #define VIA1_iCB2 (Wires[Wire_VIA1_iCB2_KybdDat]) 124 | #define VIA1_iCB2_ChangeNtfy Kybd_DataLineChngNtfy 125 | 126 | Wire_VIA1_iB6_SCRNbeamInVid, 127 | #define SCRNbeamInVid (Wires[Wire_VIA1_iB6_SCRNbeamInVid]) 128 | #define VIA1_iB6 (Wires[Wire_VIA1_iB6_SCRNbeamInVid]) 129 | 130 | Wire_VIA1_iB7_SoundDisable, 131 | #define SoundDisable (Wires[Wire_VIA1_iB7_SoundDisable]) 132 | #define VIA1_iB7 (Wires[Wire_VIA1_iB7_SoundDisable]) 133 | 134 | Wire_VIA1_InterruptRequest, 135 | #define VIA1_InterruptRequest (Wires[Wire_VIA1_InterruptRequest]) 136 | #define VIA1_interruptChngNtfy VIAorSCCinterruptChngNtfy 137 | 138 | Wire_SCCInterruptRequest, 139 | #define SCCInterruptRequest (Wires[Wire_SCCInterruptRequest]) 140 | #define SCCinterruptChngNtfy VIAorSCCinterruptChngNtfy 141 | 142 | kNumWires 143 | }; 144 | 145 | 146 | /* VIA configuration */ 147 | #define VIA1_ORA_FloatVal 0xFF 148 | #define VIA1_ORB_FloatVal 0xFF 149 | #define VIA1_ORA_CanIn 0x80 150 | #define VIA1_ORA_CanOut 0x7F 151 | #define VIA1_ORB_CanIn 0x79 152 | #define VIA1_ORB_CanOut 0x87 153 | #define VIA1_IER_Never0 (1 << 1) 154 | #define VIA1_IER_Never1 ((1 << 3) | (1 << 4)) 155 | #define VIA1_CB2modesAllowed 0x01 156 | #define VIA1_CA2modesAllowed 0x01 157 | 158 | #define Mouse_Enabled SCC_InterruptsEnabled 159 | 160 | #define VIA1_iCA1_PulseNtfy VIA1_iCA1_Sixtieth_PulseNtfy 161 | #define Sixtieth_PulseNtfy VIA1_iCA1_Sixtieth_PulseNtfy 162 | 163 | #define VIA1_iCA2_PulseNtfy VIA1_iCA2_RTC_OneSecond_PulseNtfy 164 | #define RTC_OneSecond_PulseNtfy VIA1_iCA2_RTC_OneSecond_PulseNtfy 165 | 166 | #define GetSoundInvertTime VIA1_GetT1InvertTime 167 | 168 | #define KYBD_ShiftInData VIA1_ShiftOutData 169 | #define KYBD_ShiftOutData VIA1_ShiftInData 170 | 171 | #define kExtn_Block_Base 0x00F40000 172 | #define kExtn_ln2Spc 5 173 | 174 | #define kROM_Base 0x00400000 175 | #define kROM_ln2Spc 20 176 | 177 | #define WantDisasm 0 178 | #define ExtraAbnormalReports 0 179 | -------------------------------------------------------------------------------- /src/SNDEMDEV.c: -------------------------------------------------------------------------------- 1 | /* 2 | SNDEMDEV.c 3 | 4 | Copyright (C) 2003 Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | SouND EMulated DEVice 19 | 20 | Emulation of Sound in the Mac Plus could go here. 21 | 22 | This code adapted from "Sound.c" in vMac by Philip Cummins. 23 | */ 24 | 25 | #include "PICOMMON.h" 26 | 27 | #if EmClassicSnd 28 | 29 | #include "MINEM68K.h" 30 | 31 | #include "SNDEMDEV.h" 32 | 33 | 34 | #define kSnd_Main_Offset 0x0300 35 | #define kSnd_Alt_Offset 0x5F00 36 | 37 | #define kSnd_Main_Buffer (kRAM_Size - kSnd_Main_Offset) 38 | #define kSnd_Alt_Buffer (kRAM_Size - kSnd_Alt_Offset) 39 | 40 | /* 41 | approximate volume levels of vMac, so: 42 | 43 | x * vol_mult[SoundVolume] >> 16 44 | + vol_offset[SoundVolume] 45 | = {approx} (x - kCenterSound) / (8 - SoundVolume) + kCenterSound; 46 | */ 47 | 48 | LOCALVAR const ui4b vol_mult[] = { 49 | 8192, 9362, 10922, 13107, 16384, 21845, 32768 50 | }; 51 | 52 | LOCALVAR const trSoundSamp vol_offset[] = { 53 | #if 3 == kLn2SoundSampSz 54 | 112, 110, 107, 103, 96, 86, 64, 0 55 | #elif 4 == kLn2SoundSampSz 56 | 28672, 28087, 27307, 26215, 24576, 21846, 16384, 0 57 | #else 58 | #error "unsupported kLn2SoundSampSz" 59 | #endif 60 | }; 61 | 62 | LOCALVAR const ui4b SubTick_offset[kNumSubTicks] = { 63 | 0, 25, 50, 90, 102, 115, 138, 161, 64 | 185, 208, 231, 254, 277, 300, 323, 346 65 | }; 66 | 67 | LOCALVAR const ui3r SubTick_n[kNumSubTicks] = { 68 | 25, 25, 40, 12, 13, 23, 23, 24, 69 | 23, 23, 23, 23, 23, 23, 23, 24 70 | }; 71 | 72 | /* 73 | One version of free form sound driver 74 | spends around 18000 cycles writing 75 | offsets 50 to 370, then around another 3000 76 | cycles writing 0 to 50. So be done 77 | with 0 to 50 at end of second sixtieth. 78 | */ 79 | 80 | /* 81 | Different in system 6.0.4: 82 | spends around 23500 cycles writing 83 | offsets 90 to 370, then around another 7500 84 | cycles writing 0 to 90. This is nastier, 85 | because gets to be a very small gap 86 | between where is being read and 87 | where written. So read a bit in 88 | advance for third subtick. 89 | */ 90 | 91 | /* 92 | startup sound spends around 19500 cycles 93 | writing offsets 0 to 370. presumably 94 | writing offset 0 before it is read. 95 | */ 96 | 97 | LOCALVAR ui5b SoundInvertPhase = 0; 98 | LOCALVAR ui4b SoundInvertState = 0; 99 | 100 | IMPORTFUNC ui4b GetSoundInvertTime(void); 101 | 102 | GLOBALPROC MacSound_SubTick(int SubTick) 103 | { 104 | ui4r actL; 105 | tpSoundSamp p; 106 | ui4r i; 107 | ui5b StartOffset = SubTick_offset[SubTick]; 108 | ui4r n = SubTick_n[SubTick]; 109 | unsigned long addy = 110 | #ifdef SoundBuffer 111 | (SoundBuffer == 0) ? kSnd_Alt_Buffer : 112 | #endif 113 | kSnd_Main_Buffer; 114 | #ifndef ln2mtb 115 | ui3p addr = addy + (2 * StartOffset) + RAM; 116 | #else 117 | CPTR addr = addy + (2 * StartOffset); 118 | #endif 119 | ui4b SoundInvertTime = GetSoundInvertTime(); 120 | ui3b SoundVolume = SoundVolb0 121 | | (SoundVolb1 << 1) 122 | | (SoundVolb2 << 2); 123 | 124 | #if dbglog_HAVE && 0 125 | dbglog_StartLine(); 126 | dbglog_writeCStr("reading sound buffer "); 127 | dbglog_writeHex(StartOffset); 128 | dbglog_writeCStr(" to "); 129 | dbglog_writeHex(StartOffset + n); 130 | dbglog_writeReturn(); 131 | #endif 132 | 133 | label_retry: 134 | p = MySound_BeginWrite(n, &actL); 135 | if (actL > 0) { 136 | if (SoundDisable && (SoundInvertTime == 0)) { 137 | for (i = 0; i < actL; i++) { 138 | #if 0 139 | *p++ = 0x00; /* this is believed more accurate */ 140 | #else 141 | /* But this avoids more clicks. */ 142 | *p++ = kCenterSound; 143 | #endif 144 | } 145 | } else { 146 | for (i = 0; i < actL; i++) { 147 | /* Copy sound data, high byte of each word */ 148 | *p++ = 149 | #ifndef ln2mtb 150 | *addr 151 | #else 152 | get_vm_byte(addr) 153 | #endif 154 | #if 4 == kLn2SoundSampSz 155 | << 8 156 | #endif 157 | ; 158 | 159 | /* Move the address on */ 160 | addr += 2; 161 | } 162 | 163 | if (SoundInvertTime != 0) { 164 | ui5b PhaseIncr = (ui5b)SoundInvertTime * (ui5b)20; 165 | p -= actL; 166 | 167 | for (i = 0; i < actL; i++) { 168 | if (SoundInvertPhase < 704) { 169 | ui5b OnPortion = 0; 170 | ui5b LastPhase = 0; 171 | do { 172 | if (! SoundInvertState) { 173 | OnPortion += 174 | (SoundInvertPhase - LastPhase); 175 | } 176 | SoundInvertState = ! SoundInvertState; 177 | LastPhase = SoundInvertPhase; 178 | SoundInvertPhase += PhaseIncr; 179 | } while (SoundInvertPhase < 704); 180 | if (! SoundInvertState) { 181 | OnPortion += 704 - LastPhase; 182 | } 183 | *p = (*p * OnPortion) / 704; 184 | } else { 185 | if (SoundInvertState) { 186 | *p = 0; 187 | } 188 | } 189 | SoundInvertPhase -= 704; 190 | p++; 191 | } 192 | } 193 | } 194 | 195 | if (SoundVolume < 7) { 196 | /* 197 | Usually have volume at 7, so this 198 | is just for completeness. 199 | */ 200 | ui5b mult = (ui5b)vol_mult[SoundVolume]; 201 | trSoundSamp offset = vol_offset[SoundVolume]; 202 | 203 | p -= actL; 204 | for (i = 0; i < actL; i++) { 205 | *p = (trSoundSamp)((ui5b)(*p) * mult >> 16) + offset; 206 | ++p; 207 | } 208 | } 209 | 210 | MySound_EndWrite(actL); 211 | n -= actL; 212 | if (n > 0) { 213 | goto label_retry; 214 | } 215 | } 216 | } 217 | 218 | #endif /* EmClassicSnd */ 219 | -------------------------------------------------------------------------------- /src/SGLUDDSP.h: -------------------------------------------------------------------------------- 1 | /* 2 | SGLUDDSP.h 3 | 4 | Copyright (C) 2012 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Sound GLUe for "/Dev/DSP" 19 | OSS and related, accessed through "/dev/dsp" 20 | */ 21 | 22 | LOCALVAR int audio_fd = -1; 23 | LOCALVAR blnr audio_started; 24 | 25 | #if 4 == kLn2SoundSampSz 26 | LOCALPROC ConvertSoundBlockToNative(tpSoundSamp p) 27 | { 28 | int i; 29 | 30 | for (i = kOneBuffLen; --i >= 0; ) { 31 | *p++ -= 0x8000; 32 | } 33 | } 34 | #else 35 | #define ConvertSoundBlockToNative(p) 36 | #endif 37 | 38 | LOCALPROC MySound_WriteOut(void) 39 | { 40 | int retry_count = 32; 41 | 42 | label_retry: 43 | if (--retry_count > 0) { 44 | int err; 45 | struct audio_buf_info info; 46 | 47 | if (ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &info) != 0) { 48 | fprintf(stderr, "SNDCTL_DSP_GETOSPACE fails\n"); 49 | } else { 50 | tpSoundSamp NextPlayPtr; 51 | ui4b PlayNowSize = 0; 52 | ui4b MaskedFillOffset = ThePlayOffset & kOneBuffMask; 53 | ui4b PrivateBuffUsed = TheFillOffset - ThePlayOffset; 54 | int used = (info.fragstotal * info.fragsize) - info.bytes; 55 | 56 | if (audio_started) { 57 | ui4b TotPendBuffs = used >> kLnOneBuffSz; 58 | 59 | if (TotPendBuffs < MinFilledSoundBuffs) { 60 | MinFilledSoundBuffs = TotPendBuffs; 61 | } 62 | /* fprintf(stderr, "buffer used %d\n", (int)used); */ 63 | } else { 64 | if (PrivateBuffUsed >= kAllBuffLen - kOneBuffLen) { 65 | audio_started = trueblnr; 66 | } else { 67 | info.bytes = 0; 68 | } 69 | } 70 | 71 | if (MaskedFillOffset != 0) { 72 | /* take care of left overs */ 73 | PlayNowSize = kOneBuffLen - MaskedFillOffset; 74 | NextPlayPtr = 75 | TheSoundBuffer + (ThePlayOffset & kAllBuffMask); 76 | } else if (0 != 77 | ((TheFillOffset - ThePlayOffset) >> kLnOneBuffLen)) 78 | { 79 | PlayNowSize = kOneBuffLen; 80 | NextPlayPtr = 81 | TheSoundBuffer + (ThePlayOffset & kAllBuffMask); 82 | } else { 83 | /* nothing to play now */ 84 | } 85 | 86 | #if 4 == kLn2SoundSampSz 87 | PlayNowSize <<= 1; 88 | #endif 89 | 90 | if (PlayNowSize > info.bytes) { 91 | PlayNowSize = info.bytes; 92 | } 93 | 94 | if (0 != PlayNowSize) { 95 | err = write( 96 | audio_fd, NextPlayPtr, PlayNowSize); 97 | if (err < 0) { 98 | if (- EAGAIN == err) { 99 | /* buffer full, try again later */ 100 | fprintf(stderr, "pcm write: EAGAIN\n"); 101 | } else if (- EPIPE == err) { 102 | /* buffer seems to have emptied */ 103 | fprintf(stderr, "pcm write emptied\n"); 104 | goto label_retry; 105 | } else { 106 | fprintf(stderr, "audio_fd write error: %d\n", 107 | err); 108 | } 109 | } else { 110 | ThePlayOffset += err 111 | #if 4 == kLn2SoundSampSz 112 | >> 1 113 | #endif 114 | ; 115 | goto label_retry; 116 | } 117 | } 118 | } 119 | } 120 | } 121 | 122 | LOCALPROC MySound_Start(void) 123 | { 124 | if (audio_fd >= 0) { 125 | MySound_Start0(); 126 | audio_started = falseblnr; 127 | } 128 | } 129 | 130 | LOCALPROC MySound_Stop(void) 131 | { 132 | if (audio_fd >= 0) { 133 | if (0 != 134 | ioctl(audio_fd, SNDCTL_DSP_RESET /* SNDCTL_DSP_HALT */, 135 | NULL)) 136 | { 137 | fprintf(stderr, "SNDCTL_DSP_RESET fails\n"); 138 | } 139 | } 140 | } 141 | 142 | #if 4 == kLn2SoundSampSz 143 | #define MyDesiredFormat AFMT_S16_NE 144 | #else 145 | #define MyDesiredFormat AFMT_U8 146 | #endif 147 | 148 | LOCALFUNC blnr MySound_Init(void) 149 | { 150 | blnr IsOk = falseblnr; 151 | 152 | audio_fd = open(AudioDevPath, O_WRONLY, 0); 153 | if (audio_fd < 0) { 154 | fprintf(stderr, "open /dev/dsp fails: %d\n", audio_fd); 155 | } else { 156 | int fragment_value = (16 /* 16 fragments */ << 16) 157 | #if 4 == kLn2SoundSampSz 158 | | 10 /* of 1024 bytes */ 159 | #else 160 | | 9 /* of 512 bytes */ 161 | #endif 162 | ; 163 | int channels_value = 1; 164 | int fmt_value = MyDesiredFormat; 165 | int speed_value = SOUND_SAMPLERATE; 166 | 167 | /* fprintf(stderr, "open /dev/dsp works\n"); */ 168 | 169 | if (0 != 170 | ioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, &fragment_value)) 171 | { 172 | fprintf(stderr, "SNDCTL_DSP_SETFRAGMENT fails\n"); 173 | } else if ((0 != 174 | ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &channels_value)) 175 | || (channels_value != 1)) 176 | { 177 | fprintf(stderr, "SNDCTL_DSP_CHANNELS fails\n"); 178 | } else if ((0 != 179 | ioctl(audio_fd, SNDCTL_DSP_SETFMT, &fmt_value)) 180 | || (fmt_value != MyDesiredFormat)) 181 | { 182 | fprintf(stderr, "SNDCTL_DSP_SETFMT fails\n"); 183 | } else if ((0 != 184 | ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed_value)) 185 | || (speed_value != SOUND_SAMPLERATE)) 186 | { 187 | fprintf(stderr, "SNDCTL_DSP_SPEED fails\n"); 188 | } else 189 | { 190 | IsOk = trueblnr; 191 | } 192 | 193 | if (! IsOk) { 194 | (void) close(audio_fd); 195 | audio_fd = -1; 196 | } 197 | } 198 | 199 | return trueblnr; /* keep going, even if no sound */ 200 | } 201 | 202 | LOCALPROC MySound_UnInit(void) 203 | { 204 | if (audio_fd >= 0) { 205 | if (close(audio_fd) != 0) { 206 | fprintf(stderr, "close /dev/dsp fails\n"); 207 | } 208 | audio_fd = -1; 209 | } 210 | } 211 | 212 | GLOBALOSGLUPROC MySound_EndWrite(ui4r actL) 213 | { 214 | if (MySound_EndWrite0(actL)) { 215 | ConvertSoundBlockToNative(TheSoundBuffer 216 | + ((TheFillOffset - kOneBuffLen) & kAllBuffMask)); 217 | if (audio_fd >= 0) { 218 | MySound_WriteOut(); 219 | } 220 | } 221 | } 222 | 223 | LOCALPROC MySound_SecondNotify(void) 224 | { 225 | if (audio_fd >= 0) { 226 | MySound_SecondNotify0(); 227 | } 228 | } 229 | -------------------------------------------------------------------------------- /src/ADBEMDEV.c: -------------------------------------------------------------------------------- 1 | /* 2 | ADBEMDEV.c 3 | 4 | Copyright (C) 2008 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Apple Desktop Bus EMulated DEVice 19 | */ 20 | 21 | #include "PICOMMON.h" 22 | 23 | #if EmADB 24 | 25 | #include "ADBEMDEV.h" 26 | 27 | #ifdef _VIA_Debug 28 | #include 29 | #endif 30 | 31 | /* 32 | ReportAbnormalID unused 0x0C06 - 0x0CFF 33 | */ 34 | 35 | IMPORTPROC ADB_ShiftOutData(ui3b v); 36 | IMPORTFUNC ui3b ADB_ShiftInData(void); 37 | 38 | #include "ADBSHARE.h" 39 | 40 | LOCALVAR blnr ADB_ListenDatBuf; 41 | LOCALVAR ui3b ADB_IndexDatBuf; 42 | 43 | GLOBALPROC ADB_DoNewState(void) 44 | { 45 | ui3b state = ADB_st1 * 2 + ADB_st0; 46 | #ifdef _VIA_Debug 47 | fprintf(stderr, "ADB_DoNewState: %d\n", state); 48 | #endif 49 | { 50 | ADB_Int = 1; 51 | switch (state) { 52 | case 0: /* Start a new command */ 53 | if (ADB_ListenDatBuf) { 54 | ADB_ListenDatBuf = falseblnr; 55 | ADB_SzDatBuf = ADB_IndexDatBuf; 56 | ADB_EndListen(); 57 | } 58 | ADB_TalkDatBuf = falseblnr; 59 | ADB_IndexDatBuf = 0; 60 | ADB_CurCmd = ADB_ShiftInData(); 61 | /* which sets interrupt, acknowleding command */ 62 | #ifdef _VIA_Debug 63 | fprintf(stderr, "in: %d\n", ADB_CurCmd); 64 | #endif 65 | switch ((ADB_CurCmd >> 2) & 3) { 66 | case 0: /* reserved */ 67 | switch (ADB_CurCmd & 3) { 68 | case 0: /* Send Reset */ 69 | ADB_DoReset(); 70 | break; 71 | case 1: /* Flush */ 72 | ADB_Flush(); 73 | break; 74 | case 2: /* reserved */ 75 | case 3: /* reserved */ 76 | ReportAbnormalID(0x0C01, 77 | "Reserved ADB command"); 78 | break; 79 | } 80 | break; 81 | case 1: /* reserved */ 82 | ReportAbnormalID(0x0C02, 83 | "Reserved ADB command"); 84 | break; 85 | case 2: /* listen */ 86 | ADB_ListenDatBuf = trueblnr; 87 | #ifdef _VIA_Debug 88 | fprintf(stderr, "*** listening\n"); 89 | #endif 90 | break; 91 | case 3: /* talk */ 92 | ADB_DoTalk(); 93 | break; 94 | } 95 | break; 96 | case 1: /* Transfer date byte (even) */ 97 | case 2: /* Transfer date byte (odd) */ 98 | if (! ADB_ListenDatBuf) { 99 | /* 100 | will get here even if no pending talk data, 101 | when there is pending event from device 102 | other than the one polled by the last talk 103 | command. this probably indicates a bug. 104 | */ 105 | if ((! ADB_TalkDatBuf) 106 | || (ADB_IndexDatBuf >= ADB_SzDatBuf)) 107 | { 108 | ADB_ShiftOutData(0xFF); 109 | ADB_Data = 1; 110 | ADB_Int = 0; 111 | } else { 112 | #ifdef _VIA_Debug 113 | fprintf(stderr, "*** talk one\n"); 114 | #endif 115 | ADB_ShiftOutData(ADB_DatBuf[ADB_IndexDatBuf]); 116 | ADB_Data = 1; 117 | ADB_IndexDatBuf += 1; 118 | } 119 | } else { 120 | if (ADB_IndexDatBuf >= ADB_MaxSzDatBuf) { 121 | ReportAbnormalID(0x0C03, "ADB listen too much"); 122 | /* ADB_MaxSzDatBuf isn't big enough */ 123 | (void) ADB_ShiftInData(); 124 | } else { 125 | #ifdef _VIA_Debug 126 | fprintf(stderr, "*** listen one\n"); 127 | #endif 128 | ADB_DatBuf[ADB_IndexDatBuf] = ADB_ShiftInData(); 129 | ADB_IndexDatBuf += 1; 130 | } 131 | } 132 | break; 133 | case 3: /* idle */ 134 | if (ADB_ListenDatBuf) { 135 | ReportAbnormalID(0x0C04, "ADB idle follows listen"); 136 | /* apparently doesn't happen */ 137 | } 138 | if (ADB_TalkDatBuf) { 139 | if (ADB_IndexDatBuf != 0) { 140 | ReportAbnormalID(0x0C05, 141 | "idle when not done talking"); 142 | } 143 | ADB_ShiftOutData(0xFF); 144 | /* ADB_Int = 0; */ 145 | } else if (CheckForADBanyEvt()) { 146 | if (((ADB_CurCmd >> 2) & 3) == 3) { 147 | ADB_DoTalk(); 148 | } 149 | ADB_ShiftOutData(0xFF); 150 | /* ADB_Int = 0; */ 151 | } 152 | break; 153 | } 154 | } 155 | } 156 | 157 | GLOBALPROC ADBstate_ChangeNtfy(void) 158 | { 159 | #ifdef _VIA_Debug 160 | fprintf(stderr, "ADBstate_ChangeNtfy: %d, %d, %d\n", 161 | ADB_st1, ADB_st0, GetCuriCount()); 162 | #endif 163 | ICT_add(kICT_ADB_NewState, 164 | 348160UL * kCycleScale / 64 * kMyClockMult); 165 | /* 166 | Macintosh Family Hardware Reference say device "must respond 167 | to talk command within 260 microseconds", which translates 168 | to about 190 instructions. But haven't seen much problems 169 | even for very large values (tens of thousands), and do see 170 | problems for small values. 50 is definitely too small, 171 | mouse doesn't move smoothly. There may still be some 172 | signs of this problem with 150. 173 | 174 | On the other hand, how fast the device must respond may 175 | not be related to how fast the ADB transceiver responds. 176 | */ 177 | } 178 | 179 | GLOBALPROC ADB_DataLineChngNtfy(void) 180 | { 181 | #ifdef _VIA_Debug 182 | fprintf(stderr, "ADB_DataLineChngNtfy: %d\n", ADB_Data); 183 | #endif 184 | } 185 | 186 | GLOBALPROC ADB_Update(void) 187 | { 188 | ui3b state = ADB_st1 * 2 + ADB_st0; 189 | 190 | if (state == 3) { /* idle */ 191 | if (ADB_TalkDatBuf) { 192 | /* ignore, presumably being taken care of */ 193 | } else if (CheckForADBanyEvt()) 194 | { 195 | if (((ADB_CurCmd >> 2) & 3) == 3) { 196 | ADB_DoTalk(); 197 | } 198 | ADB_ShiftOutData(0xFF); 199 | /* 200 | Wouldn't expect this would be needed unless 201 | there is actually talk data. But without it, 202 | ADB never polls the other devices. Clearing 203 | ADB_Int has no effect. 204 | */ 205 | /* 206 | ADB_Int = 0; 207 | seems to have no effect, which probably indicates a bug 208 | */ 209 | } 210 | } 211 | } 212 | 213 | #endif /* EmADB */ 214 | -------------------------------------------------------------------------------- /src/ADBSHARE.h: -------------------------------------------------------------------------------- 1 | /* 2 | ADBSHARE.h 3 | 4 | Copyright (C) 2008 Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | Apple Desktop Bus SHAREd code 19 | shared by emulation of different implementations of ADB 20 | */ 21 | 22 | #ifdef ADBSHARE_H 23 | #error "header already included" 24 | #else 25 | #define ADBSHARE_H 26 | #endif 27 | 28 | 29 | /* 30 | ReportAbnormalID unused 0x0D08 - 0x0DFF 31 | */ 32 | 33 | #define ADB_MaxSzDatBuf 8 34 | 35 | LOCALVAR ui3b ADB_SzDatBuf; 36 | LOCALVAR blnr ADB_TalkDatBuf = falseblnr; 37 | LOCALVAR ui3b ADB_DatBuf[ADB_MaxSzDatBuf]; 38 | LOCALVAR ui3b ADB_CurCmd = 0; 39 | LOCALVAR ui3b NotSoRandAddr = 1; 40 | 41 | LOCALVAR ui3b MouseADBAddress; 42 | LOCALVAR blnr SavedCurMouseButton = falseblnr; 43 | LOCALVAR ui4r MouseADBDeltaH = 0; 44 | LOCALVAR ui4r MouseADBDeltaV = 0; 45 | 46 | LOCALPROC ADB_DoMouseTalk(void) 47 | { 48 | switch (ADB_CurCmd & 3) { 49 | case 0: 50 | { 51 | MyEvtQEl *p; 52 | ui4b partH; 53 | ui4b partV; 54 | blnr overflow = falseblnr; 55 | blnr MouseButtonChange = falseblnr; 56 | 57 | if (nullpr != (p = MyEvtQOutP())) { 58 | if (MyEvtQElKindMouseDelta == p->kind) { 59 | MouseADBDeltaH += p->u.pos.h; 60 | MouseADBDeltaV += p->u.pos.v; 61 | MyEvtQOutDone(); 62 | } 63 | } 64 | partH = MouseADBDeltaH; 65 | partV = MouseADBDeltaV; 66 | 67 | if ((si4b)MouseADBDeltaH < 0) { 68 | partH = - partH; 69 | } 70 | if ((si4b)MouseADBDeltaV < 0) { 71 | partV = - partV; 72 | } 73 | if ((partH >> 6) > 0) { 74 | overflow = trueblnr; 75 | partH = (1 << 6) - 1; 76 | } 77 | if ((partV >> 6) > 0) { 78 | overflow = trueblnr; 79 | partV = (1 << 6) - 1; 80 | } 81 | if ((si4b)MouseADBDeltaH < 0) { 82 | partH = - partH; 83 | } 84 | if ((si4b)MouseADBDeltaV < 0) { 85 | partV = - partV; 86 | } 87 | MouseADBDeltaH -= partH; 88 | MouseADBDeltaV -= partV; 89 | if (! overflow) { 90 | if (nullpr != (p = MyEvtQOutP())) { 91 | if (MyEvtQElKindMouseButton == p->kind) { 92 | SavedCurMouseButton = p->u.press.down; 93 | MouseButtonChange = trueblnr; 94 | MyEvtQOutDone(); 95 | } 96 | } 97 | } 98 | if ((0 != partH) || (0 != partV) || MouseButtonChange) { 99 | ADB_SzDatBuf = 2; 100 | ADB_TalkDatBuf = trueblnr; 101 | ADB_DatBuf[0] = (SavedCurMouseButton ? 0x00 : 0x80) 102 | | (partV & 127); 103 | ADB_DatBuf[1] = /* 0x00 */ 0x80 | (partH & 127); 104 | } 105 | } 106 | ADBMouseDisabled = 0; 107 | break; 108 | case 3: 109 | ADB_SzDatBuf = 2; 110 | ADB_TalkDatBuf = trueblnr; 111 | ADB_DatBuf[0] = 0x60 | (NotSoRandAddr & 0x0f); 112 | ADB_DatBuf[1] = 0x01; 113 | NotSoRandAddr += 1; 114 | break; 115 | default: 116 | ReportAbnormalID(0x0D01, "Talk to unknown mouse register"); 117 | break; 118 | } 119 | } 120 | 121 | LOCALPROC ADB_DoMouseListen(void) 122 | { 123 | switch (ADB_CurCmd & 3) { 124 | case 3: 125 | if (ADB_DatBuf[1] == 0xFE) { 126 | /* change address */ 127 | MouseADBAddress = (ADB_DatBuf[0] & 0x0F); 128 | } else { 129 | ReportAbnormalID(0x0D02, 130 | "unknown listen op to mouse register 3"); 131 | } 132 | break; 133 | default: 134 | ReportAbnormalID(0x0D03, 135 | "listen to unknown mouse register"); 136 | break; 137 | } 138 | } 139 | 140 | LOCALVAR ui3b KeyboardADBAddress; 141 | 142 | LOCALFUNC blnr CheckForADBkeyEvt(ui3b *NextADBkeyevt) 143 | { 144 | int i; 145 | blnr KeyDown; 146 | 147 | if (! FindKeyEvent(&i, &KeyDown)) { 148 | return falseblnr; 149 | } else { 150 | #if dbglog_HAVE && 0 151 | if (KeyDown) { 152 | dbglog_WriteNote("Got a KeyDown"); 153 | } 154 | #endif 155 | switch (i) { 156 | case MKC_Control: 157 | i = 0x36; 158 | break; 159 | case MKC_Left: 160 | i = 0x3B; 161 | break; 162 | case MKC_Right: 163 | i = 0x3C; 164 | break; 165 | case MKC_Down: 166 | i = 0x3D; 167 | break; 168 | case MKC_Up: 169 | i = 0x3E; 170 | break; 171 | default: 172 | /* unchanged */ 173 | break; 174 | } 175 | *NextADBkeyevt = (KeyDown ? 0x00 : 0x80) | i; 176 | return trueblnr; 177 | } 178 | } 179 | 180 | LOCALPROC ADB_DoKeyboardTalk(void) 181 | { 182 | switch (ADB_CurCmd & 3) { 183 | case 0: 184 | { 185 | ui3b NextADBkeyevt; 186 | 187 | if (CheckForADBkeyEvt(&NextADBkeyevt)) { 188 | ADB_SzDatBuf = 2; 189 | ADB_TalkDatBuf = trueblnr; 190 | ADB_DatBuf[0] = NextADBkeyevt; 191 | if (! CheckForADBkeyEvt(&NextADBkeyevt)) { 192 | ADB_DatBuf[1] = 0xFF; 193 | } else { 194 | ADB_DatBuf[1] = NextADBkeyevt; 195 | } 196 | } 197 | } 198 | break; 199 | case 3: 200 | ADB_SzDatBuf = 2; 201 | ADB_TalkDatBuf = trueblnr; 202 | ADB_DatBuf[0] = 0x60 | (NotSoRandAddr & 0x0f); 203 | ADB_DatBuf[1] = 0x01; 204 | NotSoRandAddr += 1; 205 | break; 206 | default: 207 | ReportAbnormalID(0x0D04, 208 | "Talk to unknown keyboard register"); 209 | break; 210 | } 211 | } 212 | 213 | LOCALPROC ADB_DoKeyboardListen(void) 214 | { 215 | switch (ADB_CurCmd & 3) { 216 | case 3: 217 | if (ADB_DatBuf[1] == 0xFE) { 218 | /* change address */ 219 | KeyboardADBAddress = (ADB_DatBuf[0] & 0x0F); 220 | } else { 221 | ReportAbnormalID(0x0D05, 222 | "unknown listen op to keyboard register 3"); 223 | } 224 | break; 225 | default: 226 | ReportAbnormalID(0x0D06, 227 | "listen to unknown keyboard register"); 228 | break; 229 | } 230 | } 231 | 232 | LOCALFUNC blnr CheckForADBanyEvt(void) 233 | { 234 | MyEvtQEl *p = MyEvtQOutP(); 235 | if (nullpr != p) { 236 | switch (p->kind) { 237 | case MyEvtQElKindMouseButton: 238 | case MyEvtQElKindMouseDelta: 239 | case MyEvtQElKindKey: 240 | return trueblnr; 241 | break; 242 | default: 243 | break; 244 | } 245 | } 246 | 247 | return (0 != MouseADBDeltaH) && (0 != MouseADBDeltaV); 248 | } 249 | 250 | LOCALPROC ADB_DoTalk(void) 251 | { 252 | ui3b Address = ADB_CurCmd >> 4; 253 | if (Address == MouseADBAddress) { 254 | ADB_DoMouseTalk(); 255 | } else if (Address == KeyboardADBAddress) { 256 | ADB_DoKeyboardTalk(); 257 | } 258 | } 259 | 260 | LOCALPROC ADB_EndListen(void) 261 | { 262 | ui3b Address = ADB_CurCmd >> 4; 263 | if (Address == MouseADBAddress) { 264 | ADB_DoMouseListen(); 265 | } else if (Address == KeyboardADBAddress) { 266 | ADB_DoKeyboardListen(); 267 | } 268 | } 269 | 270 | LOCALPROC ADB_DoReset(void) 271 | { 272 | MouseADBAddress = 3; 273 | KeyboardADBAddress = 2; 274 | } 275 | 276 | LOCALPROC ADB_Flush(void) 277 | { 278 | ui3b Address = ADB_CurCmd >> 4; 279 | 280 | if ((Address == KeyboardADBAddress) 281 | || (Address == MouseADBAddress)) 282 | { 283 | ADB_SzDatBuf = 2; 284 | ADB_TalkDatBuf = trueblnr; 285 | ADB_DatBuf[0] = 0x00; 286 | ADB_DatBuf[1] = 0x00; 287 | } else { 288 | ReportAbnormalID(0x0D07, "Unhandled ADB Flush"); 289 | } 290 | } 291 | -------------------------------------------------------------------------------- /src/GLOBGLUE.h: -------------------------------------------------------------------------------- 1 | /* 2 | GLOBGLUE.h 3 | 4 | Copyright (C) 2003 Bernd Schmidt, Philip Cummins, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | #ifdef GLOBGLUE_H 18 | #error "header already included" 19 | #else 20 | #define GLOBGLUE_H 21 | #endif 22 | 23 | 24 | #define kEmMd_Twig43 0 25 | #define kEmMd_Twiggy 1 26 | #define kEmMd_128K 2 27 | #define kEmMd_512Ke 3 28 | #define kEmMd_Plus 4 29 | #define kEmMd_SE 5 30 | #define kEmMd_SEFDHD 6 31 | #define kEmMd_Classic 7 32 | #define kEmMd_PB100 8 33 | #define kEmMd_II 9 34 | #define kEmMd_IIx 10 35 | 36 | #define RAMSafetyMarginFudge 4 37 | 38 | #define kRAM_Size (kRAMa_Size + kRAMb_Size) 39 | EXPORTVAR(ui3p, RAM) 40 | /* 41 | allocated by OSGLUxxx to be at least 42 | kRAM_Size + RAMSafetyMarginFudge 43 | bytes. Because of shortcuts taken in GLOBGLUE.c, it is in theory 44 | possible for the emulator to write up to 3 bytes past kRAM_Size. 45 | */ 46 | 47 | #if EmVidCard 48 | EXPORTVAR(ui3p, VidROM) 49 | #endif 50 | 51 | #if IncludeVidMem 52 | EXPORTVAR(ui3p, VidMem) 53 | #endif 54 | 55 | EXPORTPROC MemOverlay_ChangeNtfy(void); 56 | 57 | #if (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) 58 | EXPORTPROC Addr32_ChangeNtfy(void); 59 | #endif 60 | 61 | /* 62 | representation of pointer into memory of emulated computer. 63 | */ 64 | typedef ui5b CPTR; 65 | 66 | /* 67 | mapping of address space to real memory 68 | */ 69 | 70 | EXPORTFUNC ui3p get_real_address0(ui5b L, blnr WritableMem, CPTR addr, 71 | ui5b *actL); 72 | 73 | /* 74 | memory access routines that can use when have address 75 | that is known to be in RAM (and that is in the first 76 | copy of the ram, not the duplicates, i.e. < kRAM_Size). 77 | */ 78 | 79 | #ifndef ln2mtb 80 | 81 | #define get_ram_byte(addr) do_get_mem_byte((addr) + RAM) 82 | #define get_ram_word(addr) do_get_mem_word((addr) + RAM) 83 | #define get_ram_long(addr) do_get_mem_long((addr) + RAM) 84 | 85 | #define put_ram_byte(addr, b) do_put_mem_byte((addr) + RAM, (b)) 86 | #define put_ram_word(addr, w) do_put_mem_word((addr) + RAM, (w)) 87 | #define put_ram_long(addr, l) do_put_mem_long((addr) + RAM, (l)) 88 | 89 | #else 90 | 91 | #define get_ram_byte get_vm_byte 92 | #define get_ram_word get_vm_word 93 | #define get_ram_long get_vm_long 94 | 95 | #define put_ram_byte put_vm_byte 96 | #define put_ram_word put_vm_word 97 | #define put_ram_long put_vm_long 98 | 99 | #endif 100 | 101 | #define get_ram_address(addr) ((addr) + RAM) 102 | 103 | /* 104 | accessing addresses that don't map to 105 | real memory, i.e. memory mapped devices 106 | */ 107 | 108 | EXPORTFUNC blnr AddrSpac_Init(void); 109 | 110 | 111 | #define ui5r_FromSByte(x) ((ui5r)(si5r)(si3b)(ui3b)(x)) 112 | #define ui5r_FromSWord(x) ((ui5r)(si5r)(si4b)(ui4b)(x)) 113 | #define ui5r_FromSLong(x) ((ui5r)(si5r)(si5b)(ui5b)(x)) 114 | 115 | #define ui5r_FromUByte(x) ((ui5r)(ui3b)(x)) 116 | #define ui5r_FromUWord(x) ((ui5r)(ui4b)(x)) 117 | #define ui5r_FromULong(x) ((ui5r)(ui5b)(x)) 118 | 119 | 120 | #if WantDisasm 121 | EXPORTPROC dbglog_StartLine(void); 122 | #else 123 | #define dbglog_StartLine() 124 | #endif 125 | 126 | #if dbglog_HAVE 127 | EXPORTPROC dbglog_WriteMemArrow(blnr WriteMem); 128 | 129 | EXPORTPROC dbglog_WriteNote(char *s); 130 | EXPORTPROC dbglog_WriteSetBool(char *s, blnr v); 131 | EXPORTPROC dbglog_AddrAccess(char *s, 132 | ui5r Data, blnr WriteMem, ui5r addr); 133 | EXPORTPROC dbglog_Access(char *s, ui5r Data, blnr WriteMem); 134 | #endif 135 | 136 | #if ! WantAbnormalReports 137 | #define ReportAbnormalID(id, s) 138 | #else 139 | #if dbglog_HAVE 140 | #define ReportAbnormalID DoReportAbnormalID 141 | #else 142 | #define ReportAbnormalID(id, s) DoReportAbnormalID(id) 143 | #endif 144 | EXPORTPROC DoReportAbnormalID(ui4r id 145 | #if dbglog_HAVE 146 | , char *s 147 | #endif 148 | ); 149 | #endif /* WantAbnormalReports */ 150 | 151 | EXPORTPROC VIAorSCCinterruptChngNtfy(void); 152 | 153 | EXPORTVAR(blnr, InterruptButton) 154 | EXPORTPROC SetInterruptButton(blnr v); 155 | 156 | enum { 157 | kICT_SubTick, 158 | #if EmClassicKbrd 159 | kICT_Kybd_ReceiveCommand, 160 | kICT_Kybd_ReceiveEndCommand, 161 | #endif 162 | #if EmADB 163 | kICT_ADB_NewState, 164 | #endif 165 | #if EmPMU 166 | kICT_PMU_Task, 167 | #endif 168 | #if EmVIA1 169 | kICT_VIA1_Timer1Check, 170 | kICT_VIA1_Timer2Check, 171 | #endif 172 | #if EmVIA2 173 | kICT_VIA2_Timer1Check, 174 | kICT_VIA2_Timer2Check, 175 | #endif 176 | 177 | kNumICTs 178 | }; 179 | 180 | EXPORTPROC ICT_add(int taskid, ui5b n); 181 | 182 | #define iCountt ui5b 183 | EXPORTFUNC iCountt GetCuriCount(void); 184 | EXPORTPROC ICT_Zap(void); 185 | 186 | EXPORTVAR(uimr, ICTactive) 187 | EXPORTVAR(iCountt, ICTwhen[kNumICTs]) 188 | EXPORTVAR(iCountt, NextiCount) 189 | 190 | EXPORTVAR(ui3b, Wires[kNumWires]) 191 | 192 | #define kLn2CycleScale 6 193 | #define kCycleScale (1 << kLn2CycleScale) 194 | 195 | #if WantCycByPriOp 196 | #define RdAvgXtraCyc /* 0 */ (kCycleScale + kCycleScale / 4) 197 | #define WrAvgXtraCyc /* 0 */ (kCycleScale + kCycleScale / 4) 198 | #endif 199 | 200 | #define kNumSubTicks 16 201 | 202 | 203 | #define HaveMasterMyEvtQLock EmClassicKbrd 204 | #if HaveMasterMyEvtQLock 205 | EXPORTVAR(ui4r, MasterMyEvtQLock) 206 | #endif 207 | EXPORTFUNC blnr FindKeyEvent(int *VirtualKey, blnr *KeyDown); 208 | 209 | 210 | /* minivmac extensions */ 211 | 212 | #define ExtnDat_checkval 0 213 | #define ExtnDat_extension 2 214 | #define ExtnDat_commnd 4 215 | #define ExtnDat_result 6 216 | #define ExtnDat_params 8 217 | 218 | #define kCmndVersion 0 219 | #define ExtnDat_version 8 220 | 221 | enum { 222 | kExtnFindExtn, /* must be first */ 223 | 224 | kExtnDisk, 225 | kExtnSony, 226 | #if EmVidCard 227 | kExtnVideo, 228 | #endif 229 | #if IncludeExtnPbufs 230 | kExtnParamBuffers, 231 | #endif 232 | #if IncludeExtnHostTextClipExchange 233 | kExtnHostTextClipExchange, 234 | #endif 235 | 236 | kNumExtns 237 | }; 238 | 239 | #define kcom_callcheck 0x5B17 240 | 241 | EXPORTVAR(ui5r, my_disk_icon_addr) 242 | 243 | EXPORTPROC Memory_Reset(void); 244 | 245 | EXPORTPROC Extn_Reset(void); 246 | 247 | EXPORTPROC customreset(void); 248 | 249 | struct ATTer { 250 | struct ATTer *Next; 251 | ui5r cmpmask; 252 | ui5r cmpvalu; 253 | ui5r Access; 254 | ui5r usemask; /* Should be one less than a power of two. */ 255 | ui3p usebase; 256 | ui3r MMDV; 257 | ui3r Ntfy; 258 | ui4r Pad0; 259 | ui5r Pad1; /* make 32 byte structure, on 32 bit systems */ 260 | }; 261 | typedef struct ATTer ATTer; 262 | typedef ATTer *ATTep; 263 | 264 | #define kATTA_readreadybit 0 265 | #define kATTA_writereadybit 1 266 | #define kATTA_mmdvbit 2 267 | #define kATTA_ntfybit 3 268 | 269 | #define kATTA_readwritereadymask \ 270 | ((1 << kATTA_readreadybit) | (1 << kATTA_writereadybit)) 271 | #define kATTA_readreadymask (1 << kATTA_readreadybit) 272 | #define kATTA_writereadymask (1 << kATTA_writereadybit) 273 | #define kATTA_mmdvmask (1 << kATTA_mmdvbit) 274 | #define kATTA_ntfymask (1 << kATTA_ntfybit) 275 | 276 | EXPORTFUNC ui5b MMDV_Access(ATTep p, ui5b Data, 277 | blnr WriteMem, blnr ByteSize, CPTR addr); 278 | EXPORTFUNC blnr MemAccessNtfy(ATTep pT); 279 | -------------------------------------------------------------------------------- /src/STRCNENG.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNENG.h 3 | 4 | Copyright (C) 2006 Paul C. Pratt, Pierre Lemieux 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for ENGlish 19 | 20 | Pierre Lemieux provided some corrections and suggestions. 21 | */ 22 | 23 | #define kStrAboutTitle "About" 24 | #define kStrAboutMessage "To display information about this program, use the ;]A;} command of the ^p Control Mode. To learn about the Control Mode, see the ;[More Commands;ll;{ item in the ;[Special;{ menu." 25 | 26 | #define kStrMoreCommandsTitle "More commands are available in the ^p Control Mode." 27 | #define kStrMoreCommandsMessage "To enter the Control Mode, press and hold down the ;]^c;} key. You will remain in the Control Mode until you release the ;]^c;} key. Type ;]H;} in the Control Mode to list available commands." 28 | 29 | #define kStrTooManyImagesTitle "Too many Disk Images" 30 | #define kStrTooManyImagesMessage "I can not mount that many Disk Images. Try ejecting one." 31 | 32 | #define kStrImageInUseTitle "Disk Image in use" 33 | #define kStrImageInUseMessage "I can not mount the Disk Image because it is already in use by another application or already open in ^p." 34 | 35 | #define kStrOutOfMemTitle "Not enough Memory" 36 | #define kStrOutOfMemMessage "There is not enough memory available to launch ^p." 37 | 38 | #define kStrNoROMTitle "Unable to locate ROM image" 39 | #define kStrNoROMMessage "I can not find the ROM image file ;[^r;{. For more information, see: ;[^w;{." 40 | 41 | #define kStrCorruptedROMTitle "ROM checksum failed" 42 | #define kStrCorruptedROMMessage "The ROM image file ;[^r;{ may be corrupted." 43 | 44 | #define kStrUnsupportedROMTitle "Unsupported ROM" 45 | #define kStrUnsupportedROMMessage "The ROM image file ;[^r;{ loaded successfully, but I don;}t support this ROM version." 46 | 47 | #define kStrQuitWarningTitle "Please shut down the emulated computer before quitting." 48 | #define kStrQuitWarningMessage "To force ^p to quit, at the risk of corrupting the mounted disk image files, use the ;]Q;} command of the ^p Control Mode. To learn about the Control Mode, see the ;[More Commands;ll;{ item in the ;[Special;{ menu." 49 | 50 | #define kStrReportAbnormalTitle "Abnormal Situation" 51 | #define kStrReportAbnormalMessage "The emulated computer is attempting an operation that wasn;}t expected to happen in normal use." 52 | 53 | #define kStrBadArgTitle "Unknown argument" 54 | #define kStrBadArgMessage "I did not understand one of the command line arguments, and ignored it." 55 | 56 | #define kStrOpenFailTitle "Open failed" 57 | #define kStrOpenFailMessage "I could not open the disk image." 58 | 59 | #define kStrNoReadROMTitle "Unable to read ROM image" 60 | #define kStrNoReadROMMessage "I found the ROM image file ;[^r;{, but I can not read it." 61 | 62 | #define kStrShortROMTitle "ROM image too short" 63 | #define kStrShortROMMessage "The ROM image file ;[^r;{ is shorter than it should be." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "on" 67 | #define kStrOff "off" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "pressed" 71 | #define kStrReleased "released" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. This variation is made for:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p contains the work of many people. This version is maintained by:" 81 | #define kStrForMoreInfo "For more information, see:" 82 | #define kStrLicense "^p is distributed under the terms of the GNU Public License, version 2." 83 | #define kStrDisclaimer " ^p is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;ls without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "To leave the Control Mode, release the ;]^c;} key." 87 | #define kStrHowToPickACommand "Otherwise, type a letter. Available commands are:" 88 | #define kStrCmdAbout "About (version information)" 89 | #define kStrCmdOpenDiskImage "Open disk image;ll" 90 | #define kStrCmdQuit "Quit" 91 | #define kStrCmdSpeedControl "Speed control;ll (^s)" 92 | #define kStrCmdMagnifyToggle "Magnify toggle (^g)" 93 | #define kStrCmdFullScrnToggle "Full screen toggle (^f)" 94 | #define kStrCmdCtrlKeyToggle "emulated ;]^m;} Key toggle (^k)" 95 | #define kStrCmdReset "Reset" 96 | #define kStrCmdInterrupt "Interrupt" 97 | #define kStrCmdHelp "Help (show this page)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Current speed: ^s" 101 | #define kStrSpeedAllOut "All out" 102 | #define kStrSpeedStopped "stopped toggle (^h)" 103 | #define kStrSpeedBackToggle "run in Background toggle (^b)" 104 | #define kStrSpeedAutoSlowToggle "autosloW toggle (^l)" 105 | #define kStrSpeedExit "Exit speed control" 106 | 107 | #define kStrNewSpeed "Speed: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "Stopped is ^h." 111 | #define kStrNewRunInBack "Run in background is ^b." 112 | #define kStrNewAutoSlow "AutoSlow is ^l." 113 | 114 | #define kStrNewMagnify "Magnify is ^g." 115 | 116 | #define kStrNewFullScreen "Full Screen is ^f." 117 | 118 | #define kStrNewCntrlKey "Emulated ;]^m;} key ^k." 119 | 120 | #define kStrCmdCancel "cancel" 121 | 122 | #define kStrConfirmReset "Are you sure you want to reset the emulated computer? Unsaved changes will be lost, and there is a risk of corrupting the mounted disk image files. Type a letter:" 123 | #define kStrResetDo "reset" 124 | #define kStrResetNo kStrCmdCancel 125 | 126 | #define kStrHaveReset "Have reset the emulated computer" 127 | 128 | #define kStrCancelledReset "Reset cancelled" 129 | 130 | #define kStrConfirmInterrupt "Are you sure you want to interrupt the emulated computer? This will invoke any installed debugger. Type a letter:" 131 | #define kStrInterruptDo "interrupt" 132 | #define kStrInterruptNo kStrCmdCancel 133 | 134 | #define kStrHaveInterrupted "Have interrupted the emulated computer" 135 | 136 | #define kStrCancelledInterrupt "Interrupt cancelled" 137 | 138 | #define kStrConfirmQuit "Are you sure you want to quit ^p? You should shut down the emulated computer before quitting to prevent corrupting the mounted disk image files. Type a letter:" 139 | #define kStrQuitDo "quit" 140 | #define kStrQuitNo kStrCmdCancel 141 | 142 | #define kStrCancelledQuit "Quit cancelled" 143 | 144 | #define kStrModeConfirmReset "Control Mode : Confirm Reset" 145 | #define kStrModeConfirmInterrupt "Control Mode : Confirm Interrupt" 146 | #define kStrModeConfirmQuit "Control Mode : Confirm Quit" 147 | #define kStrModeSpeedControl "Control Mode : Speed Control" 148 | #define kStrModeControlBase "Control Mode (Type ;]H;} for help)" 149 | #define kStrModeControlHelp "Control Mode" 150 | #define kStrModeMessage "Message (Type ;]C;} to continue)" 151 | 152 | #define kStrMenuFile "File" 153 | #define kStrMenuSpecial "Special" 154 | #define kStrMenuHelp "Help" 155 | 156 | #define kStrMenuItemAbout "About ^p" 157 | #define kStrMenuItemOpen "Open Disk Image" 158 | #define kStrMenuItemQuit "Quit" 159 | #define kStrMenuItemMore "More Commands" 160 | 161 | #define kStrAppMenuItemHide "Hide ^p" 162 | #define kStrAppMenuItemHideOthers "Hide Others" 163 | #define kStrAppMenuItemShowAll "Show All" 164 | #define kStrAppMenuItemQuit "Quit ^p" 165 | 166 | #define kStrCmdCopyOptions "copy variation options" 167 | #define kStrHaveCopiedOptions "Variation options copied" 168 | -------------------------------------------------------------------------------- /src/STRCNPOL.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNPOL.h 3 | 4 | Copyright (C) 2012 Przemys;dlaw Buczkowski, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for POLish 19 | 20 | These strings were translated by Przemys;dlaw Buczkowski. 21 | */ 22 | 23 | #define kStrAboutTitle "O programie;ll" 24 | #define kStrAboutMessage "Aby obejrze;ec informacje o tym programie u;dzyj komendy ;]A;} w ^p Trybie Kontroli. Aby dowiedzie;ec si;de wi;decej o tym trybie kliknij przycisk ;[Wi;decej komend;ll;{ w menu ;[Specjalne;{." 25 | 26 | #define kStrMoreCommandsTitle "Wi;decej komend jest dost;depnych w ^p Trybie Kontroli." 27 | #define kStrMoreCommandsMessage "Aby wej;es;ec w Tryb Kontroli przytrzymaj przycisk ^c. Pozostaniesz w Trybie Kontroli dop;eoki nie pu;escisz tego klawisza. Kliknij H aby wy;eswietli;ec Pomoc." 28 | 29 | #define kStrTooManyImagesTitle "Za du;dzo obraz;eow dysk;eow" 30 | #define kStrTooManyImagesMessage "Nie mog;de zamontowa;ec tylu dysk;eow. Odmontowywanie jednego." 31 | 32 | #define kStrImageInUseTitle "Obraz w u;dzyciu" 33 | #define kStrImageInUseMessage "Nie mog;de zamontowa;ec tego dysku poniewa;dz jest on u;dzywany przez inn;da aplikacj;de lub uruchomiony w ^p." 34 | 35 | #define kStrOutOfMemTitle "Za ma;dlo pami;deci" 36 | #define kStrOutOfMemMessage "Mam za ma;dlo pami;deci aby uruchomi;ec ^p." 37 | 38 | #define kStrNoROMTitle "Nie uda;dlo si;de zlokalizowa;ec ROMu" 39 | #define kStrNoROMMessage "Nie mog;de znale;ez;ec ROMu ;[^r;{. Aby dowiedzie;ec si;de wi;decej, zobacz: ;[^w;{." 40 | 41 | #define kStrCorruptedROMTitle "ROM uszkodzony" 42 | #define kStrCorruptedROMMessage "Plik ROMu ;[^r;{ mo;dze by;ec uszkodzony." 43 | 44 | #define kStrUnsupportedROMTitle "Niewspierany ROM" 45 | #define kStrUnsupportedROMMessage "ROM ;[^r;{ zosta;dl za;dladowany, ale nie obs;dluguj;de tej wersji." 46 | 47 | #define kStrQuitWarningTitle "Prosz;de wy;dl;daczy;ec emulowany komputer przed wyj;esciem." 48 | #define kStrQuitWarningMessage "Aby wymusi;ec wyj;escie ryzykuj;dac uszkodzenie obraz;eow dysk;eow u;dzyj komendy ;]Q;} w Trybie Kontroli. Aby dowiedzie;ec si;de wi;decej o tym trybie kliknij przycisk ;[Wi;decej komend;ll;{ w menu ;[Specjalne;{." 49 | 50 | #define kStrReportAbnormalTitle "Nienormalne polecenie" 51 | #define kStrReportAbnormalMessage "Emulowany komputer pr;eobowa;dl zrobi;ec co;es, co nie powinno si;de zdarzy;ec." 52 | 53 | #define kStrBadArgTitle "Z;dly argument" 54 | #define kStrBadArgMessage "Nie zrozumia;dlem podanego argumentu." 55 | 56 | #define kStrOpenFailTitle "B;dl;dad otwierania" 57 | #define kStrOpenFailMessage "Nie mog;de otworzy;ec obrazu dysku." 58 | 59 | #define kStrNoReadROMTitle "Nieudane otwarcie ROMu" 60 | #define kStrNoReadROMMessage "Znalaz;dlem plik ROMu ;[^r;{, ale nie mog;de go otworzy;ec." 61 | 62 | #define kStrShortROMTitle "Za ma;dly ROM" 63 | #define kStrShortROMMessage "Plik ROMu ;[^r;{ jest mniejszy ni;dz powinien by;ec." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "w;dl;daczone" 67 | #define kStrOff "wy;dl;daczone" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "wci;esni;dety" 71 | #define kStrReleased "puszczony" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. This variation is made for:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p jest wynikiem pracy wielu os;eob. Ta wersja jest zarz;dadzana przez:" 81 | #define kStrForMoreInfo "Po wi;decej informacji zobacz:" 82 | #define kStrLicense "^p jest dystrybuowany na licencji GNU General Public License 2." 83 | #define kStrDisclaimer " ^p is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;ls without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "Aby opu;esci;ec Tryb Kontroli pu;es;ec klawisz ^c." 87 | #define kStrHowToPickACommand "Naci;esnij liter;de. Dost;depne komendy to:" 88 | #define kStrCmdAbout "O programie (szczeg;eo;dly wersji);ll" 89 | #define kStrCmdOpenDiskImage "Otw;eorz obraz dysku;ll" 90 | #define kStrCmdQuit "Wyjd;ez" 91 | #define kStrCmdSpeedControl "Kontrola szybko;esci;ll (^s)" 92 | #define kStrCmdMagnifyToggle "Skalowanie (^g)" 93 | #define kStrCmdFullScrnToggle "Pe;dlny ekran (^f)" 94 | #define kStrCmdCtrlKeyToggle "Emulowany klawisz ^m (^k)" 95 | #define kStrCmdReset "Reset" 96 | #define kStrCmdInterrupt "Przerwanie" 97 | #define kStrCmdHelp "Pomoc (ta strona)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Obecna pr;dedko;es;ec: ^s" 101 | #define kStrSpeedAllOut "Ca;dla naprz;eod!" 102 | #define kStrSpeedStopped "Zatrzymanie (^h)" 103 | #define kStrSpeedBackToggle "Uruchamianie w tle (^b)" 104 | #define kStrSpeedAutoSlowToggle "AutoSlow (^l)" 105 | #define kStrSpeedExit "Wyj;escie z kontroli pr;dedko;esci" 106 | 107 | #define kStrNewSpeed "Pr;dedko;es;ec: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "Zatrzymanie jest ^h." 111 | #define kStrNewRunInBack "Uruchomienie w tle ^b." 112 | #define kStrNewAutoSlow "AutoSlow jest ^g." 113 | 114 | #define kStrNewMagnify "Powi;dekszenie jest ^g." 115 | 116 | #define kStrNewFullScreen "Pe;dlny ekran jest ^f." 117 | 118 | #define kStrNewCntrlKey "Emulowany klawiszem ^m jest ^k." 119 | 120 | #define kStrCmdCancel "anuluj" 121 | 122 | #define kStrConfirmReset "Czy na pewno chcesz zresetowa;ec emulator? Zmiany nie zostan;da zapisane, istnieje ryzyko uszkodzenia obraz;eow dysk;eow. Podaj liter;de:" 123 | #define kStrResetDo "reset" 124 | #define kStrResetNo kStrCmdCancel 125 | 126 | #define kStrHaveReset "Zresetowano komputer." 127 | 128 | #define kStrCancelledReset "Reset anulowany." 129 | 130 | #define kStrConfirmInterrupt "Czy jeste;es pewny aby wywo;dla;ec przerwanie emulatora? Podaj liter;de:" 131 | #define kStrInterruptDo "przerwanie" 132 | #define kStrInterruptNo kStrCmdCancel 133 | 134 | #define kStrHaveInterrupted "Wywo;dlano przerwanie komputera." 135 | 136 | #define kStrCancelledInterrupt "Przerwanie anulowane." 137 | 138 | #define kStrConfirmQuit "Czy na pewno chcesz wy;dl;daczy;ec komputer ^p? Zmiany nie zostan;da zapisane, istnieje ryzyko uszkodzenia obraz;eow dysk;eow. Podaj liter;de:" 139 | #define kStrQuitDo "wyjd;ez" 140 | #define kStrQuitNo kStrCmdCancel 141 | 142 | #define kStrCancelledQuit "Wyj;escie anulowane" 143 | 144 | #define kStrModeConfirmReset "Tryb Kontroli : Potwierd;ez reset" 145 | #define kStrModeConfirmInterrupt "Tryb Kontroli : Potwierd;ez przerwanie" 146 | #define kStrModeConfirmQuit "Tryb Kontroli : Potwierd;ez wyj;escie" 147 | #define kStrModeSpeedControl "Tryb Kontroli : Kontrola pr;dedko;esci" 148 | #define kStrModeControlBase "Tryb Kontroli (wci;esnij ;]H;} po pomoc)" 149 | #define kStrModeControlHelp "Tryb Kontroli" 150 | #define kStrModeMessage "Wiadomo;es;ec (kliknij ;]C;} aby kontynuowa;ec)" 151 | 152 | #define kStrMenuFile "Plik" 153 | #define kStrMenuSpecial "Specjalne" 154 | #define kStrMenuHelp "Pomoc" 155 | 156 | #define kStrMenuItemAbout "O;ll ^p" 157 | #define kStrMenuItemOpen "Otw;eorz obraz dysku" 158 | #define kStrMenuItemQuit "Pomoc" 159 | #define kStrMenuItemMore "Wi;decej komend" 160 | 161 | #define kStrAppMenuItemHide "Ukryj ^p" 162 | #define kStrAppMenuItemHideOthers "Ukryj pozosta;dle" 163 | #define kStrAppMenuItemShowAll "Poka;dz wszystkie" 164 | #define kStrAppMenuItemQuit "Zako;encz ^p" 165 | 166 | #define kStrCntrlKyName "Control" 167 | #define kStrCmdCopyOptions "Kopiuj variation options" 168 | #define kStrHaveCopiedOptions "Variation options kopiowane" 169 | -------------------------------------------------------------------------------- /src/ICONAPPM.r: -------------------------------------------------------------------------------- 1 | /* 2 | AppIcon.r 3 | 4 | Copyright (C) 2003 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | #if SmallIconAPIAvail 19 | resource 'ics#' (AppIconId, purgeable) { 20 | { /* array: 2 elements */ 21 | /* [1] */ 22 | $"0000 1FF8 2004 2FF4 2814 2A94 2B14 2A14" 23 | $"2814 2FF4 2004 2004 20F4 2004 1FF8 1FF8", 24 | /* [2] */ 25 | $"0000 1FF8 3FFC 3FFC 3FFC 3FFC 3FFC 3FFC" 26 | $"3FFC 3FFC 3FFC 3FFC 3FFC 3FFC 1FF8 1FF8" 27 | } 28 | }; 29 | #endif 30 | 31 | #if ColorIconAPIAvail 32 | resource 'ics8' (AppIconId, purgeable) { 33 | $"0000 0000 0000 0000 0000 0000 0000 0000" 34 | $"0000 00FF FFFF FFFF FFFF FFFF FF00 0000" 35 | $"0000 FF2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000" 36 | $"0000 FF2B FCFC FCFC FCFC FCFC 2BFF 0000" 37 | $"0000 FF2B FC2A 2A2A 2A2A 2A00 2BFF 0000" 38 | $"0000 FF2B FC2A EC2A EC2A 2A00 2BFF 0000" 39 | $"0000 FF2B FC2A ECEC 2A2A 2A00 2BFF 0000" 40 | $"0000 FF2B FC2A EC2A 2A2A 2A00 2BFF 0000" 41 | $"0000 FF2B FC2A 2A2A 2A2A 2A00 2BFF 0000" 42 | $"0000 FF2B FA00 0000 0000 0000 2BFF 0000" 43 | $"0000 FF2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000" 44 | $"0000 FF2B E32B 2B2B 2B2B 2B2B 2BFF 0000" 45 | $"0000 FF2B D82B 2B2B FFFF FFFF 2BFF 0000" 46 | $"0000 FF2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000" 47 | $"0000 00FD FDFD FDFD FDFF FFFF FF00 0000" 48 | $"0000 00FF FFFF FFFF FFFF FFFF FF" 49 | }; 50 | #endif 51 | 52 | #if ColorIconAPIAvail 53 | resource 'ics4' (AppIconId, purgeable) { 54 | $"0000 0000 0000 0000 000F FFFF FFFF F000" 55 | $"00FC CCCC CCCC CF00 00FC EEEE EEEE CF00" 56 | $"00FC ED0D 0D0C CF00 00FC E060 60D0 CF00" 57 | $"00FC ED66 0D0C CF00 00FC E060 D0D0 CF00" 58 | $"00FC ED0D 0D0C CF00 00FC D0C0 C0C0 CF00" 59 | $"00FC CCCC CCCC CF00 00FC 8CCC CCCC CF00" 60 | $"00FC 3CCC FFFF CF00 00FC CCCC CCCC CF00" 61 | $"000F FFFF FFFF F000 000F FFFF FFFF F0" 62 | }; 63 | #endif 64 | 65 | resource 'ICN#' (AppIconId, purgeable) { 66 | { /* array: 2 elements */ 67 | /* [1] */ 68 | $"0000 0000 07FF FFE0 0800 0010 0800 0010" 69 | $"08FF FF10 0900 0090 0918 1890 0918 3090" 70 | $"0918 6090 0918 C090 0919 8090 091B 0090" 71 | $"091E 0090 091C 0090 0918 0090 0910 0090" 72 | $"0900 0090 08FF FF10 0800 0010 0800 0010" 73 | $"0800 0010 0800 0010 0800 FF10 0800 0010" 74 | $"0800 0010 0800 0010 0800 0010 07FF FFE0" 75 | $"0400 0020 0400 0020 0400 0020 07FF FFE0", 76 | /* [2] */ 77 | $"0000 0000 07FF FFE0 0FFF FFF0 0FFF FFF0" 78 | $"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0" 79 | $"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0" 80 | $"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0" 81 | $"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0" 82 | $"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0" 83 | $"0FFF FFF0 0FFF FFF0 0FFF FFF0 07FF FFE0" 84 | $"07FF FFE0 07FF FFE0 07FF FFE0 07FF FFE0" 85 | } 86 | }; 87 | 88 | #if ColorIconAPIAvail 89 | resource 'icl8' (AppIconId, purgeable) { 90 | $"0000 0000 0000 0000 0000 0000 0000 0000" 91 | $"0000 0000 0000 0000 0000 0000 0000 0000" 92 | $"0000 0000 00FF FFFF FFFF FFFF FFFF FFFF" 93 | $"FFFF FFFF FFFF FFFF FFFF FF00 0000 0000" 94 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 95 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 96 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 97 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 98 | $"0000 0000 FF2B 2B2B FCFC FCFC FCFC FCFC" 99 | $"FCFC FCFC FCFC FCFC 2B2B 2BFF 0000 0000" 100 | $"0000 0000 FF2B 2BFC 2A2A 2A2A 2A2A 2A2A" 101 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 102 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A" 103 | $"2A2A 2AEC EC2A 2A2A 002B 2BFF 0000 0000" 104 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A" 105 | $"2A2A ECEC 2A2A 2A2A 002B 2BFF 0000 0000" 106 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A" 107 | $"2AEC EC2A 2A2A 2A2A 002B 2BFF 0000 0000" 108 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A" 109 | $"ECEC 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 110 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2AEC" 111 | $"EC2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 112 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A ECEC" 113 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 114 | $"0000 0000 FF2B 2BFC 2A2A 2AEC ECEC EC2A" 115 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 116 | $"0000 0000 FF2B 2BFC 2A2A 2AEC ECEC 2A2A" 117 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 118 | $"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A" 119 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 120 | $"0000 0000 FF2B 2BFC 2A2A 2AEC 2A2A 2A2A" 121 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 122 | $"0000 0000 FF2B 2BFC 2A2A 2A2A 2A2A 2A2A" 123 | $"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000" 124 | $"0000 0000 FF2B 2B2B 0000 0000 0000 0000" 125 | $"0000 0000 0000 0000 2B2B 2BFF 0000 0000" 126 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 127 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 128 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 129 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 130 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 131 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 132 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 133 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 134 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 135 | $"FFFF FFFF FFFF FFFF 2B2B 2BFF 0000 0000" 136 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 137 | $"0000 0000 0000 0000 2B2B 2BFF 0000 0000" 138 | $"0000 0000 FF2B 2BE3 E32B 2B2B 2B2B 2B2B" 139 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 140 | $"0000 0000 FF2B 2BD8 D82B 2B2B 2B2B 2B2B" 141 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 142 | $"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B" 143 | $"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000" 144 | $"0000 0000 00FF FFFF FFFF FFFF FFFF FFFF" 145 | $"FFFF FFFF FFFF FFFF FFFF FF00 0000 0000" 146 | $"0000 0000 00FF FBFB FBFB FBFB FCFC FCFC" 147 | $"FCFD FDFD FDFD FDFD FDFD FF00 0000 0000" 148 | $"0000 0000 00FF FAFA FAFA FAFA FAFA FBFB" 149 | $"FCFC FCFC FDFD FDFD FDFD FF00 0000 0000" 150 | $"0000 0000 00FF F9F9 F9F9 F9F9 F9F9 FAFA" 151 | $"FAFB FBFC FCFC FCFD FDFD FF00 0000 0000" 152 | $"0000 0000 00FF FFFF FFFF FFFF FFFF FFFF" 153 | $"FFFF FFFF FFFF FFFF FFFF FF" 154 | }; 155 | #endif 156 | 157 | #if ColorIconAPIAvail 158 | resource 'icl4' (AppIconId, purgeable) { 159 | $"0000 0000 0000 0000 0000 0000 0000 0000" 160 | $"0000 0FFF FFFF FFFF FFFF FFFF FFF0 0000" 161 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 162 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 163 | $"0000 FCCC EEEE EEEE EEEE EEEE CCCF 0000" 164 | $"0000 FCCE 0D0D 0D0D 0D0D 0D0D 0CCF 0000" 165 | $"0000 FCCE D0D6 60D0 D0D6 60D0 CCCF 0000" 166 | $"0000 FCCE 0D06 6D0D 0D66 0D0D 0CCF 0000" 167 | $"0000 FCCE D0D6 60D0 D660 D0D0 CCCF 0000" 168 | $"0000 FCCE 0D06 6D0D 660D 0D0D 0CCF 0000" 169 | $"0000 FCCE D0D6 60D6 60D0 D0D0 CCCF 0000" 170 | $"0000 FCCE 0D06 6D66 0D0D 0D0D 0CCF 0000" 171 | $"0000 FCCE D0D6 6660 D0D0 D0D0 CCCF 0000" 172 | $"0000 FCCE 0D06 660D 0D0D 0D0D 0CCF 0000" 173 | $"0000 FCCE D0D6 60D0 D0D0 D0D0 CCCF 0000" 174 | $"0000 FCCE 0D06 0D0D 0D0D 0D0D 0CCF 0000" 175 | $"0000 FCCE D0D0 D0D0 D0D0 D0D0 CCCF 0000" 176 | $"0000 FCCC 0C0C 0C0C 0C0C 0C0C 0CCF 0000" 177 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 178 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 179 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 180 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 181 | $"0000 FCCC CCCC CCCC FFFF FFFF CCCF 0000" 182 | $"0000 FCCC CCCC CCCC 0C0C 0C0C CCCF 0000" 183 | $"0000 FCC8 8CCC CCCC CCCC CCCC CCCF 0000" 184 | $"0000 FCC3 3CCC CCCC CCCC CCCC CCCF 0000" 185 | $"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000" 186 | $"0000 0FFF FFFF FFFF FFFF FFFF FFF0 0000" 187 | $"0000 0FEE EEEE EEEE EEFF FFFF FFF0 0000" 188 | $"0000 0FDD DDDD DDEE EEEE EEFF FFF0 0000" 189 | $"0000 0FDD DDDD DDDD DEEE EEEE EEF0 0000" 190 | $"0000 0FFF FFFF FFFF FFFF FFFF FFF0" 191 | }; 192 | #endif 193 | -------------------------------------------------------------------------------- /src/ICONDSKM.r: -------------------------------------------------------------------------------- 1 | /* 2 | DskIcon.r 3 | 4 | Copyright (C) 2003 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | #if SmallIconAPIAvail 19 | resource 'ics#' (DskIconId, purgeable) { 20 | { /* array: 2 elements */ 21 | /* [1] */ 22 | $"7FE0 4030 4028 403C 4004 4004 4004 4FC4" 23 | $"4AA4 4BA4 4824 4BA4 4AA4 4FE4 4004 7FFC", 24 | /* [2] */ 25 | $"7FE0 7FF0 7FF8 7FFC 7FFC 7FFC 7FFC 7FFC" 26 | $"7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC" 27 | } 28 | }; 29 | #endif 30 | 31 | #if ColorIconAPIAvail 32 | resource 'ics8' (DskIconId, purgeable) { 33 | $"00FF FFFF FFFF FFFF FFFF FF00 0000 0000" 34 | $"00FF 0000 0000 0000 0000 FFFF 0000 0000" 35 | $"00FF 0000 0000 0000 0000 FF2A FF00 0000" 36 | $"00FF 0000 0000 0000 0000 FFFF FFFF 0000" 37 | $"00FF 0000 0000 0000 0000 00FA FAFF 0000" 38 | $"00FF 0000 0000 0000 0000 0000 00FF 0000" 39 | $"00FF 0000 0000 0000 0000 0000 00FF 0000" 40 | $"00FF 0000 E0E0 E0E0 E0E0 0000 00FF 0000" 41 | $"00FF 0000 E054 AB2A AB54 E000 00FF 0000" 42 | $"00FF 0000 E054 ABAB AB54 E000 00FF 0000" 43 | $"00FF 0000 E054 5454 5454 E000 00FF 0000" 44 | $"00FF 0000 E054 ABAB AB54 E000 00FF 0000" 45 | $"00FF 0000 E054 AB2A AB54 E000 00FF 0000" 46 | $"00FF 0000 E0FF E0E0 E0E0 E000 00FF 0000" 47 | $"00FF 0000 0000 0000 0000 0000 00FF 0000" 48 | $"00FF FFFF FFFF FFFF FFFF FFFF FFFF" 49 | }; 50 | #endif 51 | 52 | #if ColorIconAPIAvail 53 | resource 'ics4' (DskIconId, purgeable) { 54 | $"0FFF FFFF FFF0 0000 0F00 0000 00FF 0000" 55 | $"0F00 0000 00FC F000 0F00 0000 00FF FF00" 56 | $"0F00 0000 000D DF00 0F00 0000 0000 0F00" 57 | $"0F00 0000 0000 0F00 0F00 FFFF FF00 0F00" 58 | $"0F00 FCE0 ECF0 0F00 0F00 FCEE ECF0 0F00" 59 | $"0F00 FCCC CCF0 0F00 0F00 FCEE ECF0 0F00" 60 | $"0F00 FCE0 ECF0 0F00 0F00 FFFF FFF0 0F00" 61 | $"0F00 0000 0000 0F00 0FFF FFFF FFFF FF" 62 | }; 63 | #endif 64 | 65 | resource 'ICN#' (DskIconId, purgeable) { 66 | { /* array: 2 elements */ 67 | /* [1] */ 68 | $"1FFF F800 1000 0C00 1000 0A00 1000 0900" 69 | $"1000 0880 1000 0840 1000 0820 1000 0FF0" 70 | $"1000 0010 1000 0010 1000 0010 1000 0010" 71 | $"1000 0010 10FF FC10 1120 9210 1121 5110" 72 | $"1121 5110 1121 5110 1120 9110 111F E110" 73 | $"1100 0110 1100 0110 111F F110 1120 0910" 74 | $"1120 0910 1122 8910 1123 0910 1122 0910" 75 | $"1120 0910 10FF FE10 1000 0010 1FFF FFF0", 76 | /* [2] */ 77 | $"1FFF F800 1FFF FC00 1FFF FE00 1FFF FF00" 78 | $"1FFF FF80 1FFF FFC0 1FFF FFE0 1FFF FFF0" 79 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 80 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 81 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 82 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 83 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 84 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 85 | } 86 | }; 87 | 88 | #if ColorIconAPIAvail 89 | resource 'icl8' (DskIconId, purgeable) { 90 | $"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF" 91 | $"FFFF FFFF FF00 0000 0000 0000 0000 0000" 92 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 93 | $"0000 0000 FFFF 0000 0000 0000 0000 0000" 94 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 95 | $"0000 0000 FF2A FF00 0000 0000 0000 0000" 96 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 97 | $"0000 0000 FF2A 2AFF 0000 0000 0000 0000" 98 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 99 | $"0000 0000 FF2A 2A2A FF00 0000 0000 0000" 100 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 101 | $"0000 0000 FF2A 2A2A 2AFF 0000 0000 0000" 102 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 103 | $"0000 0000 FF2A 2A2A 2A2A FF00 0000 0000" 104 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 105 | $"0000 0000 FFFF FFFF FFFF FFFF 0000 0000" 106 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 107 | $"0000 0000 00FA FAFA FAFA FAFF 0000 0000" 108 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 109 | $"0000 0000 0000 0000 0000 00FF 0000 0000" 110 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 111 | $"0000 0000 0000 0000 0000 00FF 0000 0000" 112 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 113 | $"0000 0000 0000 0000 0000 00FF 0000 0000" 114 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 115 | $"0000 0000 0000 0000 0000 00FF 0000 0000" 116 | $"0000 00FF 0000 00F5 E0FF E0E0 E0E0 E0E0" 117 | $"E0E0 E0E0 E0E0 0000 0000 00FF 0000 0000" 118 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFA" 119 | $"FFFA 2AAB 5454 E000 0000 00FF 0000 0000" 120 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFF" 121 | $"00FF 2AAB 5454 54E0 0000 00FF 0000 0000" 122 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFF" 123 | $"00FF 2AAB 5454 54E0 0000 00FF 0000 0000" 124 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFF" 125 | $"00FF 2AAB 5454 54E0 0000 00FF 0000 0000" 126 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFA" 127 | $"FFFA 2AAB 5454 54E0 0000 00FF 0000 0000" 128 | $"0000 00FF 0000 00E0 5454 54AB ABAB ABAB" 129 | $"ABAB AB54 5454 54E0 0000 00FF 0000 0000" 130 | $"0000 00FF 0000 00E0 5454 5454 5454 5454" 131 | $"5454 5454 5454 54E0 0000 00FF 0000 0000" 132 | $"0000 00FF 0000 00E0 5454 5454 5454 5454" 133 | $"5454 5454 5454 54E0 0000 00FF 0000 0000" 134 | $"0000 00FF 0000 00E0 5454 54AB ABAB ABAB" 135 | $"ABAB ABAB 5454 54E0 0000 00FF 0000 0000" 136 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2A2A" 137 | $"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000" 138 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2A2A" 139 | $"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000" 140 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A EC2A" 141 | $"EC2A 2A2A AB54 54E0 0000 00FF 0000 0000" 142 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A ECEC" 143 | $"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000" 144 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A EC2A" 145 | $"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000" 146 | $"0000 00FF 0000 00E0 5454 AB2A 2A2A 2A2A" 147 | $"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000" 148 | $"0000 00FF 0000 00F5 FFFF E0E0 E0E0 E0E0" 149 | $"E0E0 E0E0 FFE0 E0F5 0000 00FF 0000 0000" 150 | $"0000 00FF 0000 0000 0000 0000 0000 0000" 151 | $"0000 0000 0000 0000 0000 00FF 0000 0000" 152 | $"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF" 153 | $"FFFF FFFF FFFF FFFF FFFF FFFF" 154 | }; 155 | #endif 156 | 157 | #if ColorIconAPIAvail 158 | resource 'icl4' (DskIconId, purgeable) { 159 | $"000F FFFF FFFF FFFF FFFF F000 0000 0000" 160 | $"000F 0000 0000 0000 0000 FF00 0000 0000" 161 | $"000F 0000 0000 0000 0000 F0F0 0000 0000" 162 | $"000F 0000 0000 0000 0000 FC0F 0000 0000" 163 | $"000F 0000 0000 0000 0000 F0C0 F000 0000" 164 | $"000F 0000 0000 0000 0000 FC0C 0F00 0000" 165 | $"000F 0000 0000 0000 0000 F0C0 C0F0 0000" 166 | $"000F 0000 0000 0000 0000 FFFF FFFF 0000" 167 | $"000F 0000 0000 0000 0000 0DDD DDDF 0000" 168 | $"000F 0000 0000 0000 0000 0000 000F 0000" 169 | $"000F 0000 0000 0000 0000 0000 000F 0000" 170 | $"000F 0000 0000 0000 0000 0000 000F 0000" 171 | $"000F 0000 0000 0000 0000 0000 000F 0000" 172 | $"000F 0000 FFFF FFFF FFFF FF00 000F 0000" 173 | $"000F 000F CCEC 0C0D FD0E CCF0 000F 0000" 174 | $"000F 000F CCE0 C0CF 0FCE CCCF 000F 0000" 175 | $"000F 000F CCEC 0C0F 0F0E CCCF 000F 0000" 176 | $"000F 000F CCE0 C0CF 0FCE CCCF 000F 0000" 177 | $"000F 000F CCEC 0C0D FD0E CCCF 000F 0000" 178 | $"000F 000F CCCE EEEE EEEC CCCF 000F 0000" 179 | $"000F 000F CCCC CCCC CCCC CCCF 000F 0000" 180 | $"000F 000F CCCC CCCC CCCC CCCF 000F 0000" 181 | $"000F 000F CCCE EEEE EEEE CCCF 000F 0000" 182 | $"000F 000F CCEC 0C0C 0C0C ECCF 000F 0000" 183 | $"000F 000F CCE0 C0C0 C0C0 ECCF 000F 0000" 184 | $"000F 000F CCEC 0C6C 6C0C ECCF 000F 0000" 185 | $"000F 000F CCE0 C066 C0C0 ECCF 000F 0000" 186 | $"000F 000F CCEC 0C6C 0C0C ECCF 000F 0000" 187 | $"000F 000F CCE0 C0C0 C0C0 ECCF 000F 0000" 188 | $"000F 0000 FFFF FFFF FFFF FFF0 000F 0000" 189 | $"000F 0000 0000 0000 0000 0000 000F 0000" 190 | $"000F FFFF FFFF FFFF FFFF FFFF FFFF" 191 | }; 192 | #endif 193 | -------------------------------------------------------------------------------- /src/ICONROMM.r: -------------------------------------------------------------------------------- 1 | /* 2 | RomIcon.r 3 | 4 | Copyright (C) 2003 Philip Cummins, Richard F. Bannister, 5 | Paul C. Pratt 6 | 7 | You can redistribute this file and/or modify it under the terms 8 | of version 2 of the GNU General Public License as published by 9 | the Free Software Foundation. You should have received a copy 10 | of the license along with this file; see the file COPYING. 11 | 12 | This file is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | license for more details. 16 | */ 17 | 18 | #if SmallIconAPIAvail 19 | resource 'ics#' (RomIconId, purgeable) { 20 | { /* array: 2 elements */ 21 | /* [1] */ 22 | $"7FE0 4030 4028 403C 4004 5FC4 5FC4 5FC4" 23 | $"5FC4 4004 5FC4 5FC4 5FC4 5FC4 4004 7FFC", 24 | /* [2] */ 25 | $"7FE0 7FF0 7FF8 7FFC 7FFC 7FFC 7FFC 7FFC" 26 | $"7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC" 27 | } 28 | }; 29 | #endif 30 | 31 | #if ColorIconAPIAvail 32 | resource 'ics8' (RomIconId, purgeable) { 33 | $"00FF FFFF FFFF FFFF FFFF FF00 0000 0000" 34 | $"00FF F5F5 F5F5 F5F5 F5F5 FFFF 0000 0000" 35 | $"00FF F5F5 F5F5 F5F5 F5F5 FF2B FF00 0000" 36 | $"00FF F5F5 F5F5 F5F5 F5F5 FFFF FFFF 0000" 37 | $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000" 38 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 39 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 40 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 41 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 42 | $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000" 43 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 44 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 45 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 46 | $"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000" 47 | $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000" 48 | $"00FF FFFF FFFF FFFF FFFF FFFF FFFF" 49 | }; 50 | #endif 51 | 52 | #if ColorIconAPIAvail 53 | resource 'ics4' (RomIconId, purgeable) { 54 | $"0FFF FFFF FFF0 0000 0F0C 0C0C 0CFF 0000" 55 | $"0FC0 C0C0 C0FC F000 0F0C 0C0C 0CFF FF00" 56 | $"0FC0 C0C0 C0C0 CF00 0F0F FFFF FF0C 0F00" 57 | $"0FCF FFFF FFC0 CF00 0F0F FFFF FF0C 0F00" 58 | $"0FCF FFFF FFC0 CF00 0F0C 0C0C 0C0C 0F00" 59 | $"0FCF FFFF FFC0 CF00 0F0F FFFF FF0C 0F00" 60 | $"0FCF FFFF FFC0 CF00 0F0F FFFF FF0C 0F00" 61 | $"0FC0 C0C0 C0C0 CF00 0FFF FFFF FFFF FF" 62 | }; 63 | #endif 64 | 65 | resource 'ICN#' (RomIconId, purgeable) { 66 | { /* array: 2 elements */ 67 | /* [1] */ 68 | $"1FFF FC00 1000 0600 1000 0500 1000 0480" 69 | $"1000 0440 1000 0420 1000 07F0 1000 0010" 70 | $"1155 5010 12AA A810 13FF F810 13FF F810" 71 | $"13FF F810 13FF F810 13FF F810 13FF F810" 72 | $"12AA A810 1155 5010 1000 0010 1155 5010" 73 | $"12AA A810 13FF F810 13FF F810 13FF F810" 74 | $"13FF F810 13FF F810 13FF F810 12AA A810" 75 | $"1155 5010 1000 0010 1000 0010 1FFF FFF0", 76 | /* [2] */ 77 | $"1FFF FC00 1FFF FE00 1FFF FF00 1FFF FF80" 78 | $"1FFF FFC0 1FFF FFE0 1FFF FFF0 1FFF FFF0" 79 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 80 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 81 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 82 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 83 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 84 | $"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0" 85 | } 86 | }; 87 | 88 | #if ColorIconAPIAvail 89 | resource 'icl8' (RomIconId, purgeable) { 90 | $"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF" 91 | $"FFFF FFFF FFFF 0000 0000 0000 0000 0000" 92 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 93 | $"F5F5 F5F5 F5FF FF00 0000 0000 0000 0000" 94 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 95 | $"F5F5 F5F5 F5FF 2BFF 0000 0000 0000 0000" 96 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 97 | $"F5F5 F5F5 F5FF 2B2B FF00 0000 0000 0000" 98 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 99 | $"F5F5 F5F5 F5FF 2B2B 2BFF 0000 0000 0000" 100 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 101 | $"F5F5 F5F5 F5FF 2B2B 2B2B FF00 0000 0000" 102 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 103 | $"F5F5 F5F5 F5FF FFFF FFFF FFFF 0000 0000" 104 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 105 | $"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000" 106 | $"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF" 107 | $"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000" 108 | $"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00" 109 | $"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000" 110 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 111 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 112 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 113 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 114 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 115 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 116 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 117 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 118 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 119 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 120 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 121 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 122 | $"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00" 123 | $"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000" 124 | $"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF" 125 | $"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000" 126 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 127 | $"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000" 128 | $"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF" 129 | $"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000" 130 | $"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00" 131 | $"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000" 132 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 133 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 134 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 135 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 136 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 137 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 138 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 139 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 140 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 141 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 142 | $"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF" 143 | $"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000" 144 | $"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00" 145 | $"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000" 146 | $"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF" 147 | $"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000" 148 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 149 | $"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000" 150 | $"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" 151 | $"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000" 152 | $"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF" 153 | $"FFFF FFFF FFFF FFFF FFFF FFFF" 154 | }; 155 | #endif 156 | 157 | #if ColorIconAPIAvail 158 | resource 'icl4' (RomIconId, purgeable) { 159 | $"000F FFFF FFFF FFFF FFFF FF00 0000 0000" 160 | $"000F 0C0C 0C0C 0C0C 0C0C 0FF0 0000 0000" 161 | $"000F C0C0 C0C0 C0C0 C0C0 CFCF 0000 0000" 162 | $"000F 0C0C 0C0C 0C0C 0C0C 0FCC F000 0000" 163 | $"000F C0C0 C0C0 C0C0 C0C0 CFCC CF00 0000" 164 | $"000F 0C0C 0C0C 0C0C 0C0C 0FCC CCF0 0000" 165 | $"000F C0C0 C0C0 C0C0 C0C0 CFFF FFFF 0000" 166 | $"000F 0C0C 0C0C 0C0C 0C0C 0C0C 0C0F 0000" 167 | $"000F C0CF CFCF CFCF CFCF C0C0 C0CF 0000" 168 | $"000F 0CF0 F0F0 F0F0 F0F0 FC0C 0C0F 0000" 169 | $"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000" 170 | $"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000" 171 | $"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000" 172 | $"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000" 173 | $"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000" 174 | $"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000" 175 | $"000F C0F0 F0F0 F0F0 F0F0 F0C0 C0CF 0000" 176 | $"000F 0C0F 0F0F 0F0F 0F0F 0C0C 0C0F 0000" 177 | $"000F C0C0 C0C0 C0C0 C0C0 C0C0 C0CF 0000" 178 | $"000F 0C0F 0F0F 0F0F 0F0F 0C0C 0C0F 0000" 179 | $"000F C0F0 F0F0 F0F0 F0F0 F0C0 C0CF 0000" 180 | $"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000" 181 | $"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000" 182 | $"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000" 183 | $"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000" 184 | $"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000" 185 | $"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000" 186 | $"000F 0CF0 F0F0 F0F0 F0F0 FC0C 0C0F 0000" 187 | $"000F C0CF CFCF CFCF CFCF C0C0 C0CF 0000" 188 | $"000F 0C0C 0C0C 0C0C 0C0C 0C0C 0C0F 0000" 189 | $"000F C0C0 C0C0 C0C0 C0C0 C0C0 C0CF 0000" 190 | $"000F FFFF FFFF FFFF FFFF FFFF FFFF" 191 | }; 192 | #endif 193 | -------------------------------------------------------------------------------- /src/STRCNSPA.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNSPA.h 3 | 4 | Copyright (C) 2006 Chir, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for SPAnish 19 | 20 | These strings were translated by Chir. 21 | */ 22 | 23 | #define kStrAboutTitle "Acerca de" 24 | #define kStrAboutMessage "Para mostrar informaci;eon acerca de este programa, use el comando ;]A;} del ^p Modo Control. Para saber m;eas acerca del Modo Control, vea ;[Mas Comandos;ll;{ en el menu ;[Especial;{ ." 25 | 26 | #define kStrMoreCommandsTitle "M;eas comandos est;ean disponibles en el modo de control de ^p ." 27 | #define kStrMoreCommandsMessage "Para entrar en el modo de control, mantenga pulsada la tecla ;]^c;} . Seguir;ea en el modo control hasta que suelte la tecla ;]^c;} . Pulse ;]H;} en el modo control para listar los comandos disponibles." 28 | 29 | #define kStrTooManyImagesTitle "Demasiadas im;eagenes de disco" 30 | #define kStrTooManyImagesMessage "No se pueden montar tantas im;eagenes de disco. Intente sacar alguna." 31 | 32 | #define kStrImageInUseTitle "Imagen disco en uso" 33 | #define kStrImageInUseMessage "No se puede montar la imagen disco porque ya est;ea en uso por otra aplicaci;eon, o ya abierta en ^p." 34 | 35 | #define kStrOutOfMemTitle "Memoria insuficiente" 36 | #define kStrOutOfMemMessage "No hay suficiente memoria disponible para lanzar ^p." 37 | 38 | #define kStrNoROMTitle "Imposible localizar la imagen ROM" 39 | #define kStrNoROMMessage "No se encuentra la imagen del fichero ROM ;[^r;{. Para m;eas informaci;eon, ver: ;[^w;{." 40 | 41 | #define kStrCorruptedROMTitle "El control checksum de la ROM ha fracasado" 42 | #define kStrCorruptedROMMessage "El fichero de imagen ROM ;[^r;{ puede estar corrompido." 43 | 44 | #define kStrUnsupportedROMTitle "ROM no soportada" 45 | #define kStrUnsupportedROMMessage "Fichero de imagen ROM ;[^r;{ cargado con ;eexito, pero esa versi;eon no est;ea soportada." 46 | 47 | #define kStrQuitWarningTitle "Por favor, apague el ordenador emulado antes de salir." 48 | #define kStrQuitWarningMessage "Para forzar ^p salir, con riesgo de corrupci;eon en las im;eagenes de discos montadas, use el comando ;]Q;} del ^p Modo Control. Para saber m;eas acerca del Modo Control, vea ;[Mas Comandos;ll;{ en el menu ;[Especial;{ ." 49 | 50 | #define kStrReportAbnormalTitle "Situaci;eon anormal" 51 | #define kStrReportAbnormalMessage "El ordenador emulado intenta hacer una operaci;eon no esperada en un uso normal." 52 | 53 | #define kStrBadArgTitle "Argumento desconocido" 54 | #define kStrBadArgMessage "No se comprendi;eo alguno de los argumentos de la linea de comandos, y se ignor;eo." 55 | 56 | #define kStrOpenFailTitle "Apertura fracasada" 57 | #define kStrOpenFailMessage "No se pudo abrir la imagen disco." 58 | 59 | #define kStrNoReadROMTitle "No se puede abrir la imagen ROM" 60 | #define kStrNoReadROMMessage "Se encontr;eo el fichero de imagen ROM ;[^r;{, pero no se pudo leer." 61 | 62 | #define kStrShortROMTitle "Imagen ROM demasiado corta" 63 | #define kStrShortROMMessage "El fichero de imagen ROM ;[^r;{ es m;eas corto de lo que deber;eia." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "activado" 67 | #define kStrOff "desactivado" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "pulsada" 71 | #define kStrReleased "soltada" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. This variation is made for:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p contiene el trabajo de muchas personas. Esta versi;eon es mantenida por:" 81 | #define kStrForMoreInfo "Para m;eas informaci;eon, vea:" 82 | #define kStrLicense "^p es distribuido bajo los t;eerminos de la licencia p;eublica GNU, versi;eon 2." 83 | #define kStrDisclaimer " ^p es distribuido con la esperanza de ser ;eutil, pero SIN NINGUNA GARANTIA;ls incluso sin la garant;eia impl;eicita de MERCANTIBILIDAD O ADECUACION PARA UN USO PARTICULAR." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "Para salir del Modo Control, suelte la tecla ;]^c;} ." 87 | #define kStrHowToPickACommand "Sin;eo, pulse una letra. Los comandos disponibles son:" 88 | #define kStrCmdAbout "Acerca de (informaci;eon sobre versi;eon)" 89 | #define kStrCmdOpenDiskImage "Abrir imagen disco;ll" 90 | #define kStrCmdQuit "Salir" 91 | #define kStrCmdSpeedControl "Control de velocidad;ll (^s)" 92 | #define kStrCmdMagnifyToggle "Magnificaci;eon (^g)" 93 | #define kStrCmdFullScrnToggle "Pantalla completa (^f)" 94 | #define kStrCmdCtrlKeyToggle "Toggle emulaci;eon tecla ;]^m;} (^k)" 95 | #define kStrCmdReset "Reset" 96 | #define kStrCmdInterrupt "Interrumpir" 97 | #define kStrCmdHelp "Ayuda (mostrar esta p;eagina)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Velocidad actual: ^s" 101 | #define kStrSpeedAllOut "M;eaxima velocidad" 102 | #define kStrSpeedStopped "Stop (^h)" 103 | #define kStrSpeedBackToggle "Ejecutar en segundo plano (^b)" 104 | #define kStrSpeedAutoSlowToggle "AutoSlow (^l)" 105 | #define kStrSpeedExit "Salir del control de velocidad" 106 | 107 | #define kStrNewSpeed "Velocidad: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "Stop est;ea ^h." 111 | #define kStrNewRunInBack "Ejecutar en segundo plano est;ea ^b." 112 | #define kStrNewAutoSlow "AutoSlow est;ea ^l." 113 | 114 | #define kStrNewMagnify "Magnificaci;eon est;ea ^g." 115 | 116 | #define kStrNewFullScreen "Pantalla completa est;ea ^f." 117 | 118 | #define kStrNewCntrlKey "Emulado tecla ;]^m;} ^k." 119 | 120 | #define kStrCmdCancel "cancelar" 121 | 122 | #define kStrConfirmReset "Est;ea seguro de desear reiniciar el ordenador emulado? Los cambios no salvados se perderan, y existe riesgo de corrupci;eon en las im;eagenes de discos montadas. Pulse una tecla:" 123 | #define kStrResetDo "reset" 124 | #define kStrResetNo kStrCmdCancel 125 | 126 | #define kStrHaveReset "Se ha reiniciado el ordenador emulado" 127 | 128 | #define kStrCancelledReset "Reset cancelado" 129 | 130 | #define kStrConfirmInterrupt "Est;ea seguro de desear interrumpir el ordenador emulado? Esto invocar;ea cualquier debugger instalado. Pulse una tecla:" 131 | #define kStrInterruptDo "interrumpir" 132 | #define kStrInterruptNo kStrCmdCancel 133 | 134 | #define kStrHaveInterrupted "Se ha interrumpido el ordenador emulado" 135 | 136 | #define kStrCancelledInterrupt "Interrupci;eon cancelada" 137 | 138 | #define kStrConfirmQuit "Est;ea seguro de desear salir de ^p? Deber;eia apagar el ordenador emulado antes de salir, para evitar corrupciones en las im;eagenes de discos montadas. Pulse una tecla:" 139 | #define kStrQuitDo "salir" 140 | #define kStrQuitNo kStrCmdCancel 141 | 142 | #define kStrCancelledQuit "Salida cancelada" 143 | 144 | #define kStrModeConfirmReset "Modo Control : Confirmar reset" 145 | #define kStrModeConfirmInterrupt "Modo Control : Confirmar Interrupci;eon" 146 | #define kStrModeConfirmQuit "Modo Control : Confirmar salida" 147 | #define kStrModeSpeedControl "Modo Control : Control de velocidad" 148 | #define kStrModeControlBase "Modo Control (Pulse ;]H;} para la ayuda)" 149 | #define kStrModeControlHelp "Modo Control" 150 | #define kStrModeMessage "Mensaje (Pulse ;]C;} para continuar)" 151 | 152 | #define kStrMenuFile "Fichero" 153 | #define kStrMenuSpecial "Especial" 154 | #define kStrMenuHelp "Ayuda" 155 | 156 | #define kStrMenuItemAbout "Acerca de ^p" 157 | #define kStrMenuItemOpen "Abrir imagen disco" 158 | #define kStrMenuItemQuit "Salir" 159 | #define kStrMenuItemMore "M;eas comandos" 160 | 161 | #define kStrAppMenuItemHide "Ocultar ^p" 162 | #define kStrAppMenuItemHideOthers "Ocultar otros" 163 | #define kStrAppMenuItemShowAll "Mostrar todo" 164 | #define kStrAppMenuItemQuit "Salir de ^p" 165 | 166 | #define kStrCmdCopyOptions "Copiar variation options" 167 | #define kStrHaveCopiedOptions "Variation options copiadas" 168 | -------------------------------------------------------------------------------- /src/STRCNCAT.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNCAT.h 3 | 4 | Copyright (C) 2017 ArduinoXino, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file;ls see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY;ls without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for CATalan 19 | 20 | These strings were translated by ArduinoXino. 21 | */ 22 | 23 | #define kStrAboutTitle "Sobre" 24 | #define kStrAboutMessage "Per mostrar informaci;eo sobre aquest programa, utilitzeu el comandament ;]A;} del ^p Mode Control. Per coneixer m;ees sobre el Mode Control, vegi ;[M;ees Comandaments;ll;{ en el menu ;[Especial;{ ." 25 | 26 | #define kStrMoreCommandsTitle "M;ees comandaments est;`an disponibles en el mode de control de ^p ." 27 | #define kStrMoreCommandsMessage "Per entrar en el mode de control, mantingueu premut la tecla ;]^c;} . Seguir;`a en el mode control fins que deixeu anar la tecla ;]^c;} . Polsi ;]H;} en el mode control per llistar els comandaments disponibles." 28 | 29 | #define kStrTooManyImagesTitle "Massa imatges de disc" 30 | #define kStrTooManyImagesMessage "No es poden muntar tantes imatges de disc. Proveu treure alguna." 31 | 32 | #define kStrImageInUseTitle "Imatge de disc en ;eus" 33 | #define kStrImageInUseMessage "No es pot muntar la imatge disc perqu;`e ja est;`a en ;eus per una altra aplicaci;eo, o ja est;`a oberta a ^p." 34 | 35 | #define kStrOutOfMemTitle "Mem;`oria insuficient" 36 | #define kStrOutOfMemMessage "No hi ha prou mem;`oria disponible per a llan;car ^p." 37 | 38 | #define kStrNoROMTitle "Impossible localitzar la imatge ROM" 39 | #define kStrNoROMMessage "No es troba la imatge del fitxer ROM ;[^r;{. Per a m;ees informaci;eo, veure: ;[^w;{." 40 | 41 | #define kStrCorruptedROMTitle "El control checksum de la ROM ha fracassat" 42 | #define kStrCorruptedROMMessage "El fitxer d;laimatge ROM ;[^r;{ pot estar corromput." 43 | 44 | #define kStrUnsupportedROMTitle "ROM no suportada" 45 | #define kStrUnsupportedROMMessage "Fitxer d;laimatge ROM ;[^r;{ carregat amb ;`exit, per;`o aquesta versi;eo no est;`a suportada." 46 | 47 | #define kStrQuitWarningTitle "Si us plau, apagueu l;laordinador emulat abans de sortir." 48 | #define kStrQuitWarningMessage "Per for;car ^p sortir, amb risc de corrupci;eo en les imatges de discos muntades, utilitzeu la ordre ;]Q;} del ^p Mode Control. Per coneixer m;ees sobre el Mode Control, vegi ;[M;ees Comandaments;ll;{ al menu ;[Especial;{ ." 49 | 50 | #define kStrReportAbnormalTitle "Situaci;eo anormal" 51 | #define kStrReportAbnormalMessage "L;laordinador emulat intenta fer una operaci;eo no esperada en un ;eus normal." 52 | 53 | #define kStrBadArgTitle "Argument desconegut" 54 | #define kStrBadArgMessage "No es va comprendre algun dels arguments de la l;einia d;laordres, i es va ignorar." 55 | 56 | #define kStrOpenFailTitle "Obertura fracassada" 57 | #define kStrOpenFailMessage "No s;laha pogut obrir la imatge disc." 58 | 59 | #define kStrNoReadROMTitle "No es pot obrir la imatge ROM" 60 | #define kStrNoReadROMMessage "Es va trobar el fitxer d;laimatge ROM ;[^r;{, per;`o no es va poder llegir." 61 | 62 | #define kStrShortROMTitle "Imatge ROM massa curta" 63 | #define kStrShortROMMessage "El fitxer d;laimatge ROM ;[^r;{ ;ees m;ees curt del que hauria de ser." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "activat" 67 | #define kStrOff "desactivat" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "polsada" 71 | #define kStrReleased "deixada anar" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. Aquesta variaci;eo est;`a patrocinada per:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p cont;ee el treball de moltes persones. Aquesta versi;eo ;ees mantinguda per:" 81 | #define kStrForMoreInfo "Per m;ees informaci;eo, vegeu:" 82 | #define kStrLicense "^p es distribueix sota els termes de la llic;`encia p;eublica GNU, versi;eo 2." 83 | #define kStrDisclaimer " ^p es distribueix amb l;laesperan;ca de ser ;eutil, per;`o SENSE CAP GARANTIA;ls fins i tot sense la garantia impl;eicita de MERCANTIBILITAT O ADECUACI;eO PER A UN ;eUS PARTICULAR." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "Per sortir del Mode Control, deixeu anar la tecla ;]^c;} ." 87 | #define kStrHowToPickACommand "Sin;eo, polsi una lletra. Els comandaments disponibles s;eon:" 88 | #define kStrCmdAbout "Sobre (informaci;eo sobre versi;eo)" 89 | #define kStrCmdOpenDiskImage "Obrir imatge de disc..." 90 | #define kStrCmdQuit "Sortir" 91 | #define kStrCmdSpeedControl "Control de velocitat;ll (^s)" 92 | #define kStrCmdMagnifyToggle "Magnificaci;eo (^g)" 93 | #define kStrCmdFullScrnToggle "Pantalla completa (^f)" 94 | #define kStrCmdCtrlKeyToggle "Toggle emulaci;eo tecla ;]^m;} (^k)" 95 | #define kStrCmdReset "Restablir" 96 | #define kStrCmdInterrupt "Interrompre" 97 | #define kStrCmdHelp "Ajuda (mostra aquesta p;`agina)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Velocitat actual: ^s" 101 | #define kStrSpeedAllOut "M;`axima velocitat" 102 | #define kStrSpeedStopped "Aturar (^h)" 103 | #define kStrSpeedBackToggle "Executar en segon pla (^b)" 104 | #define kStrSpeedAutoSlowToggle "AutoSlow (^l)" 105 | #define kStrSpeedExit "Sortir del control de velocitat" 106 | 107 | #define kStrNewSpeed "Velocitat: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "Aturar est;ea ^h." 111 | #define kStrNewRunInBack "Executar en segon pla est;`a ^b." 112 | #define kStrNewAutoSlow "AutoSlow est;`a ^l." 113 | 114 | #define kStrNewMagnify "Magnificaci;eo est;`a ^g." 115 | 116 | #define kStrNewFullScreen "Pantalla completa est;`a ^f." 117 | 118 | #define kStrNewCntrlKey "Emulat tecla ;]^m;} ^k." 119 | 120 | #define kStrCmdCancel "cancel;l.lar" 121 | 122 | #define kStrConfirmReset "Est;`a segur de voler reiniciar l;laordinador emulat? Els canvis no salvats es perdran, i hi ha risc de corrupci;eo en les imatges de discos muntades. Premeu una tecla:" 123 | #define kStrResetDo "restablir" 124 | #define kStrResetNo kStrCmdCancel 125 | 126 | #define kStrHaveReset "S;laha reiniciat l;laordinador emulat" 127 | 128 | #define kStrCancelledReset "Reset cancel;l.lat" 129 | 130 | #define kStrConfirmInterrupt "Est;`a segur de voler interrompre l;laordinador emulat? Aix;`o invocar;`a qualsevol debugger instal;l.lat. Premeu una tecla:" 131 | #define kStrInterruptDo "interrompre" 132 | #define kStrInterruptNo kStrCmdCancel 133 | 134 | #define kStrHaveInterrupted "S;laha interromput l;laordinador emulat" 135 | 136 | #define kStrCancelledInterrupt "Interrupci;eo cancel;l.lada" 137 | 138 | #define kStrConfirmQuit "Est;`a segur de desitjar sortir de ^p? Hauria apagar l;laordinador emulat abans de sortir, per evitar corrupcions en les imatges de discos muntades. Premeu una tecla:" 139 | #define kStrQuitDo "sortir" 140 | #define kStrQuitNo kStrCmdCancel 141 | 142 | #define kStrCancelledQuit "Sortida cancel;l.lada" 143 | 144 | #define kStrModeConfirmReset "Mode Control : Confirma reset" 145 | #define kStrModeConfirmInterrupt "Mode Control : Confirma Interrupci;eo" 146 | #define kStrModeConfirmQuit "Mode Control : Confirma sortida" 147 | #define kStrModeSpeedControl "Mode Control : Control de velocitat" 148 | #define kStrModeControlBase "Mode Control (Premi ;laH;la per a l;laajuda)" 149 | #define kStrModeControlHelp "Mode Control" 150 | #define kStrModeMessage "Missatge (Premi ;]C;} per continuar)" 151 | 152 | #define kStrMenuFile "Fitxer" 153 | #define kStrMenuSpecial "Especial" 154 | #define kStrMenuHelp "Ajuda" 155 | 156 | #define kStrMenuItemAbout "Sobre ^p" 157 | #define kStrMenuItemOpen "Obrir imatge de disc" 158 | #define kStrMenuItemQuit "Sortir" 159 | #define kStrMenuItemMore "M;eess comandaments" 160 | 161 | #define kStrAppMenuItemHide "Ocultar ^p" 162 | #define kStrAppMenuItemHideOthers "Ocultar la resta" 163 | #define kStrAppMenuItemShowAll "Mostrar-ho tot" 164 | #define kStrAppMenuItemQuit "Sortir de ^p" 165 | 166 | #define kStrCmdCopyOptions "Copiar variation options" 167 | #define kStrHaveCopiedOptions "Variation options copiat" 168 | -------------------------------------------------------------------------------- /src/STRCNCZE.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNCZE.h 3 | 4 | Copyright (C) 2017 Anonymous, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file;ls see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY;ls without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for CZEch 19 | 20 | These strings were translated by Anonymous. 21 | */ 22 | 23 | #define kStrAboutTitle "O programu" 24 | #define kStrAboutMessage "Pro zobrazen;ei informac;ei o programu, pou;vzijte p;vr;eikaz ;]A;} v ovl;eadac;eim m;eodu ^p. Pro informace o ovl;eadac;eim m;eodu, pod;eivejte se do ;[V;eice p;vr;eikaz;ru;ll;{ v menu ;[Dal;vs;ei mo;vznosti;{." 25 | 26 | #define kStrMoreCommandsTitle "V kontroln;eim m;eodu ^p jsou dostupn;ee dal;vs;ei p;vr;eikazy." 27 | #define kStrMoreCommandsMessage "pro pou;vzit;ei ovl;eadac;eiho m;eodu stiskn;vete a dr;vzte ;]^c;}. V ovl;eadac;eim m;eodu z;rustanete, dokud nepust;eite ;]^c;}. stiskn;vete ;]H;} v ovl;eadac;eim m;eodu pro zobrazen;ei dostupn;eych p;vr;eikaz;ru." 28 | 29 | #define kStrTooManyImagesTitle "P;vr;eili;vs mnoho obraz;ru disk;ru" 30 | #define kStrTooManyImagesMessage "Tolik obraz;ru disk;ru p;vripojit nezvl;eadnu. zkuste jeden odpojit." 31 | 32 | #define kStrImageInUseTitle "Obraz disku je pou;vz;eiv;ean" 33 | #define kStrImageInUseMessage "Nemohu p;vripojit obraz disku, proto;vze je pou;vz;eiv;ean jinou aplikac;ei nebo otev;vren v ^p." 34 | 35 | #define kStrOutOfMemTitle "Nedostatek pam;veti" 36 | #define kStrOutOfMemMessage "Pro su;vst;ven;ei ^p nen;ei dostatek pam;veti." 37 | 38 | #define kStrNoROMTitle "ROM nenalezen" 39 | #define kStrNoROMMessage "Nemohu naj;eit soubor ROM ;[^r;{. Pro v;eice informac;ei se pod;eivejte na: ;[^w;{." 40 | 41 | #define kStrCorruptedROMTitle "Kontroln;ei sou;vcet ROMu selhal" 42 | #define kStrCorruptedROMMessage "ROM ;[^r;{ m;ru;vze b;eyt po;vskozen." 43 | 44 | #define kStrUnsupportedROMTitle "Nepodporovan;ey ROM" 45 | #define kStrUnsupportedROMMessage "ROM ;[^r;{ se ;eusp;ve;vsn;ve na;vcetl, ale s touto verz;ei ROMu neum;eim pracovat." 46 | 47 | #define kStrQuitWarningTitle "Pros;eim vypn;vete emulovan;ey po;vc;eita;vc p;vred zav;vren;eim." 48 | #define kStrQuitWarningMessage "Pro vynucen;ei zav;vren;ei ^p (riskujete po;vskozen;ei p;vripojen;eych disk;ru),pou;vzijte p;vr;eikaz ;]Q;} ovl;eadac;eiho m;eodu ^p. Pro informace o ovl;eadac;eim m;eodu, pod;eivejte se do ;[V;eice p;vr;eikaz;ru;ll;{ v menu ;[Dal;vs;ei mo;vznosti;{." 49 | 50 | #define kStrReportAbnormalTitle "Abnorm;ealn;ei situace" 51 | #define kStrReportAbnormalMessage "Emulovan;ey po;vc;eite;vc se pokou;vs;ei o operaci, kter;ea nebyla o;vcek;eav;eana p;vri b;ve;vzn;eem pou;vz;eiv;ean;ei." 52 | 53 | #define kStrBadArgTitle "Nezn;eam;ey argument" 54 | #define kStrBadArgMessage "Nerozum;eim jednomu z p;vr;eikazov;eych argument;ru, budu ho ignorovat." 55 | 56 | #define kStrOpenFailTitle "Otev;vren;ei selhalo" 57 | #define kStrOpenFailMessage "Neopda;vrilo se mi otev;vr;eit obraz disku." 58 | 59 | #define kStrNoReadROMTitle "Ne;vciteln;ey ROM" 60 | #define kStrNoReadROMMessage "Na;vsel jsem ROM ;[^r;{, ale nemohu ho p;vre;vc;eist." 61 | 62 | #define kStrShortROMTitle "P;vr;eili;vs kr;eatk;ey ROM" 63 | #define kStrShortROMMessage "ROM ;[^r;{ je krat;vs;ei ne;vz obvykle." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "on" 67 | #define kStrOff "off" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "stisknuto" 71 | #define kStrReleased "pu;vst;veno" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. Tuto variaci sponzoruje:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p Obsahuje pr;eaci mnoha lid;ei. Tuto verzi udr;vzuje:" 81 | #define kStrForMoreInfo "Pro v;eice informac;ei jd;vete na:" 82 | #define kStrLicense "^p je distribuov;ean poj licenc;ei GNU GPL, verze 2." 83 | #define kStrDisclaimer " ^p je distribuov;ean s nad;vej;ei, ;vze ude pou;vz;eiv;ean, ale BEZ JAK;eEKOLIV Z;eARUKY;ls t;ee;vz bez implikovan;ee z;earuky OBCHODOVATELNOSTI nebo VHODNOSTI PRO UR;vCIT;eY ;eU;vCEL." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "Pro opu;vst;ven;ei ovl;ead;eac;eiho m;eodu pus;vtte ;]^c;}." 87 | #define kStrHowToPickACommand "jinak stiskn;vete p;eismeno. Dostupn;ee p;vr;eikazy jsou:" 88 | #define kStrCmdAbout "O programu (informace o verzi)" 89 | #define kStrCmdOpenDiskImage "Otev;vr;eit obraz disku" 90 | #define kStrCmdQuit "Zav;vr;eit" 91 | #define kStrCmdSpeedControl "Ovl;ead;ean;ei rychlosti;ll (^s)" 92 | #define kStrCmdMagnifyToggle "P;vribl;ei;vzen;ei (^g)" 93 | #define kStrCmdFullScrnToggle "Cel;ea obrazovka (^f)" 94 | #define kStrCmdCtrlKeyToggle "P;vrep;ein;ean;ei emulovan;eeho ;]^m;} (^k)" 95 | #define kStrCmdReset "Reset" 96 | #define kStrCmdInterrupt "Vyru;vsit" 97 | #define kStrCmdHelp "Pomoc (uk;eaz;eat tuto str;eanku)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Sou;vcasn;ea rychlost: ^s" 101 | #define kStrSpeedAllOut "Maximum" 102 | #define kStrSpeedStopped "zastavit (^h)" 103 | #define kStrSpeedBackToggle "b;ve;vz;vet v pozad;ei (^b)" 104 | #define kStrSpeedAutoSlowToggle "automatick;ee zpomalen;ei (^l)" 105 | #define kStrSpeedExit "Zav;vr;eit ovl;ead;ean;ei rychlosti" 106 | 107 | #define kStrNewSpeed "Rychlost: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "Je zastaven: ^h." 111 | #define kStrNewRunInBack "B;ve;vz;ei na pozad;ei: ^b." 112 | #define kStrNewAutoSlow "Je automaticky zpomalen: ^l." 113 | 114 | #define kStrNewMagnify "P;vribl;ei;vzen;ei: ^g." 115 | 116 | #define kStrNewFullScreen "Na celou obrazovku: ^f." 117 | 118 | #define kStrNewCntrlKey "Emulovan;ey ;]^m;}: ^k." 119 | 120 | #define kStrCmdCancel "Storno" 121 | 122 | #define kStrConfirmReset "Opravdu chcete resetovat emulovan;ey po;vc;eita;vc? Ztrat;eite neulo;vzen;ee zm;veny a riskujete po;vskozen;ei p;vripojen;eych obraz;ru disk;ru. Stiskn;vete p;eismeno:" 123 | #define kStrResetDo "resetovat" 124 | #define kStrResetNo kStrCmdCancel 125 | 126 | #define kStrHaveReset "Resetoval jsem emulovan;ey po;vc;eita;vc" 127 | 128 | #define kStrCancelledReset "Resetov;ean;ei zru;vseno" 129 | 130 | #define kStrConfirmInterrupt "Opravdu chcete vyru;vsit emulovan;ey po;vc;eita;vc? Spust;ei se nainstalovan;ey debugger. Stiskn;vete p;eismeno:" 131 | #define kStrInterruptDo "vyru;vsit" 132 | #define kStrInterruptNo kStrCmdCancel 133 | 134 | #define kStrHaveInterrupted "Vyru;vsil jsem emulovan;ey po;vc;eita;vc" 135 | 136 | #define kStrCancelledInterrupt "Vyru;vsen;ei zru;vseno" 137 | 138 | #define kStrConfirmQuit "Opravdu chcete zav;vr;eit ^p? M;veli byste vypnout emulovan;ey po;vc;eita;vc p;vred vypnut;eim pro zabr;ean;ven;ei po;vskozen;ei p;vripojen;eych obraz;ru disk;ru. Stiskn;vete p;eismeno:" 139 | #define kStrQuitDo "odej;eit" 140 | #define kStrQuitNo kStrCmdCancel 141 | 142 | #define kStrCancelledQuit "Zav;vren;ei zru;vseno" 143 | 144 | #define kStrModeConfirmReset " : Confirm Reset" 145 | #define kStrModeConfirmInterrupt "ovl;ead;eac;ei m;eod : Potvrdit vyru;vsen;ei" 146 | #define kStrModeConfirmQuit "ovl;ead;eac;ei m;eod : Potvrdit zav;vren;ei" 147 | #define kStrModeSpeedControl "ovl;ead;eac;ei m;eod : Ovl;ead;ean;ei rychlosti" 148 | #define kStrModeControlBase "ovl;ead;eac;ei m;eod (stiskn;vete ;]H;} pro pomoc) " 149 | #define kStrModeControlHelp "ovl;ead;eac;ei m;eod" 150 | #define kStrModeMessage "Zpr;eava (Stiskn;vete ;]C;} pro pokra;vcov;ean;ei)" 151 | 152 | #define kStrMenuFile "Soubor" 153 | #define kStrMenuSpecial "Dal;vs;ei mo;vznosti" 154 | #define kStrMenuHelp "Pomoc" 155 | 156 | #define kStrMenuItemAbout "O ^p" 157 | #define kStrMenuItemOpen "Otev;vr;eit obraz disku" 158 | #define kStrMenuItemQuit "Odej;eit" 159 | #define kStrMenuItemMore "V;eice p;vr;eikaz;ru" 160 | 161 | #define kStrAppMenuItemHide "Skr;eyt ^p" 162 | #define kStrAppMenuItemHideOthers "Skr;eyt ostatn;ei" 163 | #define kStrAppMenuItemShowAll "Zobrazit v;vse" 164 | #define kStrAppMenuItemQuit "Ukon;vcit ^p" 165 | 166 | #define kStrCmdCopyOptions "Kop;eirovat variation options" 167 | #define kStrHaveCopiedOptions "Variation options zkop;eirov;eany" 168 | -------------------------------------------------------------------------------- /src/STRCNDUT.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNDUT.h 3 | 4 | Copyright (C) 2006 Luc Pauwels, Paul C. Pratt 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for DUTch 19 | 20 | These strings were translated by Luc Pauwels. 21 | */ 22 | 23 | #define kStrAboutTitle "Over ^p" 24 | #define kStrAboutMessage "Gebruik het ;]A;}-commando van de ^p controlemodus om meer informatie over deze applicatie te tonen. Om meer te weten te komen over de controlemodus, zie ;[Meer Commando;}s;ll;{ in het ;[Speciaal;{ menu." 25 | 26 | #define kStrMoreCommandsTitle "Meer commando;}s zijn beschikbaar in de ^p controlemodus." 27 | #define kStrMoreCommandsMessage "Om naar de controlemodus te gaan, hou de ;]^c;} toets ingedrukt. Je blijft in de controlemodus zolang je de ;]^c;} toets ingedrukt houdt. Type ;]H;} in de controlemodus om een lijst van beschikbare commando;}s te zien." 28 | 29 | #define kStrTooManyImagesTitle "Teveel schijfkopiebestanden" 30 | #define kStrTooManyImagesMessage "Het maximaal aantal schijfkopiebestanden is in gebruik. Probeer er ;ee;een te verwijderen." 31 | 32 | #define kStrImageInUseTitle "Schijfkopiebestand in gebruik" 33 | #define kStrImageInUseMessage "Ik kan het schijfkopiebestand niet openen omdat het al in gebruik is door een andere applicatie of omdat het al geopend is in ^p." 34 | 35 | #define kStrOutOfMemTitle "Niet genoeg geheugen" 36 | #define kStrOutOfMemMessage "Er is niet genoeg geheugen beschikbaar om ^p te openen." 37 | 38 | #define kStrNoROMTitle "ROM bestand niet gevonden" 39 | #define kStrNoROMMessage "Ik kan het ROM bestand ;[^r;{ niet vinden. Voor meer informatie, zie ;[^w;{." 40 | 41 | #define kStrCorruptedROMTitle "ROM controlegetal verkeerd" 42 | #define kStrCorruptedROMMessage "Het ROM bestand ;[^r;{ is mogelijk beschadigd." 43 | 44 | #define kStrUnsupportedROMTitle "Niet ondersteunde ROM" 45 | #define kStrUnsupportedROMMessage "Het ROM bestand ;[^r;{ werd succesvol ingeladen, maar ik ondersteun deze ROM versie niet." 46 | 47 | #define kStrQuitWarningTitle "Zet de ge;uemuleerde computer uit vooraleer de applicatie te stoppen." 48 | #define kStrQuitWarningMessage "Om ^p geforceerd te stoppen, met het risico dat het gebruikte schijfkopiebestand beschadigd geraakt, gebruik het ;]Q;} commando van de ^p controlemodus. Om meer te weten te komen over de controlemodus, zie ;[Meer Commando;}s;{ in het ;[Speciaal;{ menu." 49 | 50 | #define kStrReportAbnormalTitle "Abnormale situatie" 51 | #define kStrReportAbnormalMessage "De ge;uemuleerde computer probeert een operatie uit te voeren die onder normale omstandigheden niet kan voorkomen." 52 | 53 | #define kStrBadArgTitle "Onbekend argument" 54 | #define kStrBadArgMessage "Ik herkende ;ee;een van de commandolijn-argumenten niet en heb het genegeerd." 55 | 56 | #define kStrOpenFailTitle "Open operatie gefaald" 57 | #define kStrOpenFailMessage "Ik kon het schijfkopiebestand niet openen." 58 | 59 | #define kStrNoReadROMTitle "Het ROM bestand kan niet gelezen worden" 60 | #define kStrNoReadROMMessage "Ik kon het ROM bestand ;[^r;{vinden, maar ik kon het niet lezen." 61 | 62 | #define kStrShortROMTitle "ROM bestand te kort" 63 | #define kStrShortROMMessage "Het ROM bestand ;[^r;{ is korter dan verwacht." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "aan" 67 | #define kStrOff "uit" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "ingedrukt" 71 | #define kStrReleased "losgelaten" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. This variation is made for:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p is het werk van velen. Deze versie wordt onderhouden door:" 81 | #define kStrForMoreInfo "Voor meer informatie, zie:" 82 | #define kStrLicense "^p wordt verspreid onder de voorwaarden van de GNU Public License, versie 2." 83 | #define kStrDisclaimer " ^p wordt verspreid in de hoop dat het bruikbaar is, maar ZONDER ENIGE GARANTIE, zelfs zonder impliciete garanties van VERKOOPBAARHEID noch BRUIKBAARHEID VOOR EEN BEPAALD DOELEINDE." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "Laat de ;]^c;} toets los om de controlemodus te verlaten." 87 | #define kStrHowToPickACommand "Zoniet, typ een letter. De beschikbare commando;}s zijn:" 88 | #define kStrCmdAbout "Over ^p (informatie over deze versie)" 89 | #define kStrCmdOpenDiskImage "Open schijfkopiebstand;ll" 90 | #define kStrCmdQuit "Stop" 91 | #define kStrCmdSpeedControl "Snelheidscontrole;ll (^s)" 92 | #define kStrCmdMagnifyToggle "Schermvergroting (^g)" 93 | #define kStrCmdFullScrnToggle "Gebruik het volledig scherm (^f)" 94 | #define kStrCmdCtrlKeyToggle "Ge;uemuleerde ;]^m;} toets (^k)" 95 | #define kStrCmdReset "Herstart" 96 | #define kStrCmdInterrupt "Onderbreek" 97 | #define kStrCmdHelp "Hulp (toon deze pagina)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Huidige snelheid: ^s" 101 | #define kStrSpeedAllOut "Zo snel mogelijk" 102 | #define kStrSpeedStopped "Stopschakelaar (^h)" 103 | #define kStrSpeedBackToggle "Schakelaar om in de achtergrond te draaien (^b)" 104 | #define kStrSpeedAutoSlowToggle "AutoSlow (^l)" 105 | #define kStrSpeedExit "Verlaat Snelheidscontrole" 106 | 107 | #define kStrNewSpeed "Snelheid: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "Stopschakelaar is ^h." 111 | #define kStrNewRunInBack "In de achtergrond draaien is ^b." 112 | #define kStrNewAutoSlow "AutoSlow is ^l." 113 | 114 | #define kStrNewMagnify "Schermvergroting is ^g." 115 | 116 | #define kStrNewFullScreen "Volledig scherm gebruiken is ^f." 117 | 118 | #define kStrNewCntrlKey "Ge;uemuleerde ;]^m;} toets ^k." 119 | 120 | #define kStrCmdCancel "annuleer" 121 | 122 | #define kStrConfirmReset "Bent u er zeker van dat u de ge;uemuleerde computer wilt herstarten? Werk dat niet bewaard werd zal verloren gaan, en er bestaat een kans dat het gebruikte schijfkopiebestand beschadigd geraakt. Typ een letter:" 123 | #define kStrResetDo "herstart" 124 | #define kStrResetNo kStrCmdCancel 125 | 126 | #define kStrHaveReset "De ge;uemuleerde computer werd herstart" 127 | 128 | #define kStrCancelledReset "Herstart werd geannuleerd" 129 | 130 | #define kStrConfirmInterrupt "Bent u er zeker van dat u de ge;uemuleerde computer wilt onderbreken? Dit zal de eventueel ge;uinstalleerde debugger activeren. Typ een letter:" 131 | #define kStrInterruptDo "onderbreken" 132 | #define kStrInterruptNo kStrCmdCancel 133 | 134 | #define kStrHaveInterrupted "De ge;uemuleerde computer werd onderbroken" 135 | 136 | #define kStrCancelledInterrupt "Onderbreking geannuleerd" 137 | 138 | #define kStrConfirmQuit "Bent u er zeker van dat u wilt ^p wilt stoppen? U zou eerst de ge;uemuleerde computer moeten uitzetten alvorens te stoppen om beschadiging van het gebruikte schijfkopiebestand te vermijden. Typ een letter:" 139 | #define kStrQuitDo "stop" 140 | #define kStrQuitNo kStrCmdCancel 141 | 142 | #define kStrCancelledQuit "Stoppen geannuleerd" 143 | 144 | #define kStrModeConfirmReset "Controlemodus : Bevesting herstarten" 145 | #define kStrModeConfirmInterrupt "Controlemodus : Bevesting onderbreking" 146 | #define kStrModeConfirmQuit "Controlemodus : Bevesting stoppen" 147 | #define kStrModeSpeedControl "Controlemodus : Snelheidscontrole" 148 | #define kStrModeControlBase "Controlemodus (Typ ;]H;} voor meer hulp)" 149 | #define kStrModeControlHelp "Controlemodus" 150 | #define kStrModeMessage "Boodschap (Typ ;]C;} om verder te gaan)" 151 | 152 | #define kStrMenuFile "Archief" 153 | #define kStrMenuSpecial "Speciaal" 154 | #define kStrMenuHelp "Hulp" 155 | 156 | #define kStrMenuItemAbout "Over ^p" 157 | #define kStrMenuItemOpen "Open schijfkopiebestand" 158 | #define kStrMenuItemQuit "Stop" 159 | #define kStrMenuItemMore "Meer Commando;}s" 160 | 161 | #define kStrAppMenuItemHide "Verberg ^p" 162 | #define kStrAppMenuItemHideOthers "Verberg andere" 163 | #define kStrAppMenuItemShowAll "Toon alles" 164 | #define kStrAppMenuItemQuit "Stop ^p" 165 | 166 | #define kStrCmdCopyOptions "Kopieer variation options" 167 | #define kStrHaveCopiedOptions "Variation options gekopieerd" 168 | -------------------------------------------------------------------------------- /src/STRCNITA.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNITA.h 3 | 4 | Copyright (C) 2006 Paul C. Pratt, Fabio Concas, Gianluca Abbiati 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for ITAlian 19 | 20 | These strings were originally translated by Fabio Concas, who 21 | hasn't been heard from lately, and modifications were 22 | needed for version 2.8.1. Gianluca Abbiati agreed to look 23 | at it, and made numerous changes for version 2.8.2. 24 | */ 25 | 26 | #define kStrAboutTitle "Informazioni" 27 | #define kStrAboutMessage "Per visualizzare le informazioni su questo programma usa il comando ;]A;} dalla Modalit;`a Controllo di ^p. Per informazioni sulla Modalit;`a Controllo, vedi ;[Ulteriori Comandi;ll;{ nel men;`u ;[Speciale;{." 28 | 29 | #define kStrMoreCommandsTitle "Ulteriori comandi sono disponibili nella Modalit;`a Controllo di ^p." 30 | #define kStrMoreCommandsMessage "Per entrare nella Modalit;`a Controllo, premi e tieni premuto il tasto ;]^c;}. La Modalit;`a Controllo rester;`a attiva fino a che il tasto ;]^c;} non verr;`a rilasciato. Digita ;]H;} nella Modalit;`a Controllo per avere la lista dei comandi disponibili." 31 | 32 | #define kStrTooManyImagesTitle "Troppe Immagini Disco." 33 | #define kStrTooManyImagesMessage "Non posso montare altre Immagini Disco. Prova ad espellerne una." 34 | 35 | #define kStrImageInUseTitle "Immagine Disco in uso." 36 | #define kStrImageInUseMessage "Non posso montare l;}Immagine Disco perch;ee ;`e utilizzata da un;}altra applicazione." 37 | 38 | #define kStrOutOfMemTitle "Memoria insufficiente." 39 | #define kStrOutOfMemMessage "Non c;};`e abbastanza memoria per avviare ^p." 40 | 41 | #define kStrNoROMTitle "Impossibile trovare l;}immagine della ROM." 42 | #define kStrNoROMMessage "Non trovo il file immagine della ROM ;[^r;{. Per maggiori informazioni, vedi: ;[^w;{" 43 | 44 | #define kStrCorruptedROMTitle "Checksum della ROM fallita." 45 | #define kStrCorruptedROMMessage "L;}immagine della ROM ;[^r;{ potrebbe essere danneggiata." 46 | 47 | #define kStrUnsupportedROMTitle "ROM non supportata." 48 | #define kStrUnsupportedROMMessage "Il file immagine della ROM ;[^r;{ ;`e stato caricato, ma ^p non supporta ancora questa ROM." 49 | 50 | #define kStrQuitWarningTitle "Dovresti spegnere la macchina emulata prima di uscire." 51 | #define kStrQuitWarningMessage "Per forzare l;}uscita da ^p (col rischio di danneggiare le immagini disco montate), usa il comando ;]Q;} dalla Modalit;`a Controllo di ^p. Per informazioni sulla Modalit;`a Controllo, vedi ;[Ulteriori Comandi;ll;{ nel men;`u ;[Speciale;{." 52 | 53 | #define kStrReportAbnormalTitle "Situazione Anomala" 54 | #define kStrReportAbnormalMessage "La macchina emulata sta tentando un;}operazione inaspettata nell;}uso normale." 55 | 56 | #define kStrBadArgTitle "Argomento sconosciuto." 57 | #define kStrBadArgMessage "Non comprendo uno dei parametri della riga di comando, lo ignoro." 58 | 59 | #define kStrOpenFailTitle "Apertura fallita." 60 | #define kStrOpenFailMessage "Non posso aprire l;}immagine disco." 61 | 62 | #define kStrNoReadROMTitle "Non posso leggere l;}immagine della ROM." 63 | #define kStrNoReadROMMessage "Ho trovato l;}immagine della ROM ;[^r;{, ma non posso leggerla." 64 | 65 | #define kStrShortROMTitle "L;}immagine della ROM ;`e troppo piccola." 66 | #define kStrShortROMMessage "Il file immagine della ROM ;[^r;{ ;`e pi;`u piccolo di quanto dovrebbe essere." 67 | 68 | /* state of a boolean option */ 69 | #define kStrOn "attivo" 70 | #define kStrOff "inattivo" 71 | 72 | /* state of a key */ 73 | #define kStrPressed "premuto" 74 | #define kStrReleased "rilasciato" 75 | 76 | /* state of Stopped */ 77 | #define kStrStoppedOn kStrOn 78 | #define kStrStoppedOff kStrOff 79 | 80 | /* About Screen */ 81 | #define kStrProgramInfo "^v" 82 | #define kStrSponsorIs "^v. This variation is made for:" 83 | #define kStrWorkOfMany "Copyright ^y. ^p contiene il lavoro di molte persone. Questa versione ;`e mantenuta da:" 84 | #define kStrForMoreInfo "Per maggiori informazioni, vedi:" 85 | #define kStrLicense "^p ;`e distribuito secondo i termini della Licenza Pubblica GNU, versione 2." 86 | #define kStrDisclaimer " ^p ;`e distribuito con la speranza che sia utile, ma SENZA ALCUNA GARANZIA;ls compresa la garanzia implicita di COMMERCIABILIT;`A o IDONEIT;`A PER UN QUALSIASI SCOPO." 87 | 88 | /* Help Screen */ 89 | #define kStrHowToLeaveControl "Per uscire dalla Modalit;`a Controllo, rilascia il tasto ;]^c;}." 90 | #define kStrHowToPickACommand "Altrimenti premi una lettera. I comandi disponibili sono:" 91 | #define kStrCmdAbout "Informazioni (informazioni sulla versione)" 92 | #define kStrCmdOpenDiskImage "Apri immagine disco;ll" 93 | #define kStrCmdQuit "Esci" 94 | #define kStrCmdSpeedControl "Controllo velocit;`a;ll (^s)" 95 | #define kStrCmdMagnifyToggle "Ingrandimento (^g)" 96 | #define kStrCmdFullScrnToggle "Schermo intero (^f)" 97 | #define kStrCmdCtrlKeyToggle "Tasto ;]^m;} emulato (^k)" 98 | #define kStrCmdReset "Reset" 99 | #define kStrCmdInterrupt "Interrupt" 100 | #define kStrCmdHelp "Aiuto (mostra questo messaggio)" 101 | 102 | /* Speed Control Screen */ 103 | #define kStrCurrentSpeed "Velocit;`a attuale: ^s" 104 | #define kStrSpeedAllOut "Massima velocit;`a" 105 | #define kStrSpeedStopped "Stop (^h)" 106 | #define kStrSpeedBackToggle "Funzionamento in background (^b)" 107 | #define kStrSpeedAutoSlowToggle "AutoSlow (^l)" 108 | #define kStrSpeedExit "Esci da Controllo Velocit;`a" 109 | 110 | #define kStrNewSpeed "Velocit;`a: ^s" 111 | #define kStrSpeedValueAllOut "Massima" 112 | 113 | #define kStrNewStopped "Lo stop ;`e ^h" 114 | #define kStrNewRunInBack "Il funzionamento in background ;`e ^b" 115 | #define kStrNewAutoSlow "AutoSlow ;`e ^l." 116 | 117 | #define kStrNewMagnify "L;laingrandimento ;`e ^g" 118 | 119 | #define kStrNewFullScreen "Lo schermo intero ;`e ^f" 120 | 121 | #define kStrNewCntrlKey "Il tasto ;]^m;} emulato ;`e ^k" 122 | 123 | #define kStrCmdCancel "Annulla" 124 | 125 | #define kStrConfirmReset "Sei sicuro di voler resettare la macchina emulata? Le modifiche non salvate andranno perse e le immagini disco montate potrebbero venire danneggiate. Premi una lettera:" 126 | #define kStrResetDo kStrCmdReset 127 | #define kStrResetNo kStrCmdCancel 128 | 129 | #define kStrHaveReset "La macchina emulata ;`e stata resettata" 130 | 131 | #define kStrCancelledReset "Reset annullato" 132 | 133 | #define kStrConfirmInterrupt "Sei sicuro di voler eseguire l;laInterrupt della macchina emulata? Questo avvier;`a il debugger installato nel tuo sistema. Premi una lettera:" 134 | #define kStrInterruptDo kStrCmdInterrupt 135 | #define kStrInterruptNo kStrCmdCancel 136 | 137 | #define kStrHaveInterrupted "Interrupt della macchina emulata eseguito" 138 | 139 | #define kStrCancelledInterrupt "Interrupt annullato" 140 | 141 | #define kStrConfirmQuit "Sei sicuro di voler uscire? Dovresti spegnere la macchina emulata prima di uscire da ^p per prevenire potenziali danni alle immagini disco montate. Premi una lettera:" 142 | #define kStrQuitDo kStrCmdQuit 143 | #define kStrQuitNo kStrCmdCancel 144 | 145 | #define kStrCancelledQuit "Uscita annullata" 146 | 147 | #define kStrModeConfirmReset "Modalit;`a Controllo : Conferma Riavviare" 148 | #define kStrModeConfirmInterrupt "Modalit;`a Controllo : Conferma l;}Interrupt" 149 | #define kStrModeConfirmQuit "Modalit;`a Controllo : Conferma Uscire" 150 | #define kStrModeSpeedControl "Modalit;`a Controllo : Controllo Velocit;`a" 151 | #define kStrModeControlBase "Modalit;`a Controllo (Digita ;]H;} per l;}aiuto)" 152 | #define kStrModeControlHelp "Modalit;`a Controllo" 153 | #define kStrModeMessage "Messaggio (Digita ;]C;} per continuare)" 154 | 155 | #define kStrMenuFile "Archivio" 156 | #define kStrMenuSpecial "Speciale" 157 | #define kStrMenuHelp "Aiuto" 158 | 159 | #define kStrMenuItemAbout "Informazioni su ^p" 160 | #define kStrMenuItemOpen "Apri Immagine Disco" 161 | #define kStrMenuItemQuit "Esci" 162 | #define kStrMenuItemMore "Altri Comandi" 163 | 164 | #define kStrAppMenuItemHide "Nascondi ^p" 165 | #define kStrAppMenuItemHideOthers "Nascondi altre" 166 | #define kStrAppMenuItemShowAll "Mostra tutte" 167 | #define kStrAppMenuItemQuit "Esci da ^p" 168 | 169 | #define kStrCmdCopyOptions "Copia variation options" 170 | #define kStrHaveCopiedOptions "Variation options copiate" 171 | -------------------------------------------------------------------------------- /src/STRCNGER.h: -------------------------------------------------------------------------------- 1 | /* 2 | STRCNGER.h 3 | 4 | Copyright (C) 2006 Paul C. Pratt, Detlef Kahner 5 | 6 | You can redistribute this file and/or modify it under the terms 7 | of version 2 of the GNU General Public License as published by 8 | the Free Software Foundation. You should have received a copy 9 | of the license along with this file; see the file COPYING. 10 | 11 | This file is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | license for more details. 15 | */ 16 | 17 | /* 18 | STRing CoNstants for GERman 19 | 20 | Translated by Detlef Kahner 21 | */ 22 | 23 | #define kStrAboutTitle ";uUber ^p" 24 | #define kStrAboutMessage "Mehr Informationen zu ^p erhalten Sie ;uuber die Taste ;]A;} im Kontrollmodus. Informationen zum Kontrollmodus erhalten Sie ;uuber den Men;uubefehl ;[Mehr Befehle;ll;{ im Spezialmen;uu." 25 | 26 | #define kStrMoreCommandsTitle "Mehr Befehle sind im Kontrollmodus abrufbar." 27 | #define kStrMoreCommandsMessage "Um den Kontrollmodus von ^p aufzurufen, dr;uucken Sie die ;]^c;}-Taste und lassen diese gedr;uuckt. Sie verbleiben im Kontrollmodus, solange Sie diese Taste gedr;uuckt halten. Eine Liste verf;uugbarer Befehle erhalten Sie w;uahrenddessen durch Dr;uucken der Taste ;]H;}." 28 | 29 | #define kStrTooManyImagesTitle "Zuviele Disketten-Images." 30 | #define kStrTooManyImagesMessage "Soviele Images k;uonnen nicht gemountet sein. Bitte werfen Sie einige aus." 31 | 32 | #define kStrImageInUseTitle "Disketten-Image bereits in Gebrauch." 33 | #define kStrImageInUseMessage "Disketten-Image kann nicht gemountet werden, weil es entweder bereits in ^p gemountet ist oder von einem anderen Programm (z. B. dem Finder) verwendet wird." 34 | 35 | #define kStrOutOfMemTitle "Zuwenig Arbeitsspeicher." 36 | #define kStrOutOfMemMessage "Es ist nicht gen;uugend Arbeitsspeicher vorhanden, um ^p zu starten." 37 | 38 | #define kStrNoROMTitle "ROM nicht gefunden." 39 | #define kStrNoROMMessage "Das ROM namens ;[^r;{ kann nicht gefunden werden. Mehr Informationen hier: ;[^w;{" 40 | 41 | #define kStrCorruptedROMTitle "ROM-Pr;uufsumme fehlgeschlagen." 42 | #define kStrCorruptedROMMessage "Das ROM ;[^r;{ ist m;uoglicherweise besch;uadigt." 43 | 44 | #define kStrUnsupportedROMTitle "ROM wird nicht unterst;uutzt." 45 | #define kStrUnsupportedROMMessage "Das ROM ;[^r;{ wurde erfolgreich geladen, aber diese Version von ^p unterst;uutzt es nicht." 46 | 47 | #define kStrQuitWarningTitle "Bitte fahren Sie das emulierte MacOS herunter, bevor Sie ^p beenden." 48 | #define kStrQuitWarningMessage "Um ^p sofort zu beenden, aber Besch;uadigungen an den gemounteten Disketten-Images in Kauf zu nehmen, dr;uucken Sie die Taste ;]Q;} innerhalb des Kontrollmodus. Zugriff zum Kontrollmodus von ^p erhalten Sie, indem Sie die ;]^c;}-Taste gedr;uuckt halten." 49 | 50 | #define kStrReportAbnormalTitle "Unerwartete Situation" 51 | #define kStrReportAbnormalMessage "Der emulierte Rechner hat versucht, eine Operation durchzuf;uuhren, die im Rahmen eines normalen Gebrauches nicht vorgesehen war." 52 | 53 | #define kStrBadArgTitle "Unbekannter Befehl." 54 | #define kStrBadArgMessage "Befehlseingabe nicht verstanden und deshalb ignoriert." 55 | 56 | #define kStrOpenFailTitle ";uOffnen fehlgeschlagen." 57 | #define kStrOpenFailMessage "Das Disk-Image konnte nicht ge;uoffnet werden." 58 | 59 | #define kStrNoReadROMTitle "ROM nicht lesbar." 60 | #define kStrNoReadROMMessage "Das ROM namens ;[^r;{ wurde gefunden, kann aber von dieser Version von ^p nicht verwendet werden." 61 | 62 | #define kStrShortROMTitle "ROM-Image zu klein." 63 | #define kStrShortROMMessage "Das ROM ;[^r;{ ist kleiner als erwartet." 64 | 65 | /* state of a boolean option */ 66 | #define kStrOn "an" 67 | #define kStrOff "aus" 68 | 69 | /* state of a key */ 70 | #define kStrPressed "gedr;uuckt" 71 | #define kStrReleased "losgelassen" 72 | 73 | /* state of Stopped */ 74 | #define kStrStoppedOn kStrOn 75 | #define kStrStoppedOff kStrOff 76 | 77 | /* About Screen */ 78 | #define kStrProgramInfo "^v" 79 | #define kStrSponsorIs "^v. This variation is made for:" 80 | #define kStrWorkOfMany "Copyright ^y. ^p enth;ualt die Arbeit mehrerer Personen. Diese Version wird gepflegt von:" 81 | #define kStrForMoreInfo "Mehr Informationen:" 82 | #define kStrLicense "^p wird unter den Bestimmungen der GNU Public License, Version 2, verbreitet." 83 | #define kStrDisclaimer " ^p wird angeboten in der Hoffnung, brauchbar zu sein, aber OHNE JEDE GARANTIE;ls gleichfalls ohne garantierte EIGNUNG ZU EINEM BESTIMMTEN ZWECK." 84 | 85 | /* Help Screen */ 86 | #define kStrHowToLeaveControl "Um den Kontrollmodus zu verlassen, lassen Sie ;]^c;} los." 87 | #define kStrHowToPickACommand "Anderenfalls dr;uucken Sie einen dieser Buchstaben:" 88 | #define kStrCmdAbout "Informationen zu dieser Version" 89 | #define kStrCmdOpenDiskImage "Disketten-Image ;uoffnen;ll" 90 | #define kStrCmdQuit "Beenden" 91 | #define kStrCmdSpeedControl "Geschwindigkeitskontrolle;ll (^s)" 92 | #define kStrCmdMagnifyToggle "Vergr;uosserung (^g)" 93 | #define kStrCmdFullScrnToggle "Vollbild (^f)" 94 | #define kStrCmdCtrlKeyToggle "Emulierte ;]^m;}-Taste (^k)" 95 | #define kStrCmdReset "Neustarten (Reset durchf;uuhren)" 96 | #define kStrCmdInterrupt "Interrupt" 97 | #define kStrCmdHelp "Hilfe (zeigt diese Befehlsliste)" 98 | 99 | /* Speed Control Screen */ 100 | #define kStrCurrentSpeed "Momentane Geschwindigkeit: ^s" 101 | #define kStrSpeedAllOut "H;uochstgeschwindigkeit" 102 | #define kStrSpeedStopped "^p jetzt anhalten (^h)" 103 | #define kStrSpeedBackToggle "^p im Hintergrund anhalten (^b)" 104 | #define kStrSpeedAutoSlowToggle "AutoSlow (^l)" 105 | #define kStrSpeedExit "Geschwindigkeits-Einstellungen verlassen" 106 | 107 | #define kStrNewSpeed "Neue Geschwindigkeit: ^s" 108 | #define kStrSpeedValueAllOut kStrSpeedAllOut 109 | 110 | #define kStrNewStopped "^p ist jetzt angehalten (^h)" 111 | #define kStrNewRunInBack "^p anhalten, wenn nicht aktiv (^b)" 112 | #define kStrNewAutoSlow "AutoSlow (^l)" 113 | 114 | #define kStrNewMagnify "Vergr;uo;serung ist ^g" 115 | 116 | #define kStrNewFullScreen "Vollbildmodus ist ^f" 117 | 118 | #define kStrNewCntrlKey "Emulierte ;]^m;}-Taste ^k" 119 | 120 | #define kStrCmdCancel "Abbrechen" 121 | 122 | #define kStrConfirmReset "Wollen Sie den emulierten Rechner wirklich neustarten? Ungesicherte ;uAnderungen werden verlorengehen und gemountete Disketten-Images k;uonnen besch;uadigt werden. Dr;uucken Sie einen dieser Buchstaben:" 123 | #define kStrResetDo "^p neustarten" 124 | #define kStrResetNo "Nicht neustarten" 125 | 126 | #define kStrHaveReset "Emulierter Rechner wurde zur;uuckgesetzt." 127 | 128 | #define kStrCancelledReset "Neustart wird nicht durchgef;uuhrt" 129 | 130 | #define kStrConfirmInterrupt "Interrupt f;uur diesen emulierten Rechner ausf;uuhren? Dies ruft alle implementierten Debugger auf. Dr;uucken Sie einen dieser Buchstaben:" 131 | #define kStrInterruptDo "Interrupt ausf;uuhren" 132 | #define kStrInterruptNo "Interrupt nicht ausf;uuhren" 133 | 134 | #define kStrHaveInterrupted "Interrupt wurde durchgef;uuhrt" 135 | 136 | #define kStrCancelledInterrupt "Interrupt wird nicht ausgef;uuhrt" 137 | 138 | #define kStrConfirmQuit "Wollen Sie ^p wirklich beenden? Sie sollten zuvor den emulierten Rechner herunterfahren, um Besch;uadigungen an gemounteten Disketten-Images zu vermeiden. Dr;uucken Sie einen dieser Buchstaben:" 139 | #define kStrQuitDo kStrCmdQuit 140 | #define kStrQuitNo "Nicht beenden" 141 | 142 | #define kStrCancelledQuit "^p wird nicht beendet" 143 | 144 | #define kStrModeConfirmReset "Kontrollmodus : Neustarten von ^p best;uatigen" 145 | #define kStrModeConfirmInterrupt "Kontrollmodus : Interrupt best;uatigen" 146 | #define kStrModeConfirmQuit "Kontrollmodus : Beenden von ^p best;uatigen" 147 | #define kStrModeSpeedControl "Kontrollmodus : Geschwindigkeitskontrolle" 148 | #define kStrModeControlBase "Kontrollmodus (Tippen Sie ;]H;}, um Hilfe zu erhalten)" 149 | #define kStrModeControlHelp "Kontrollmodus" 150 | #define kStrModeMessage "Mitteilung (Tippen Sie ;]C;}, um fortzusetzen)" 151 | 152 | #define kStrMenuFile "Ablage" 153 | #define kStrMenuFile_win "Datei" 154 | #define kStrMenuSpecial "Spezial" 155 | #define kStrMenuHelp "Hilfe" 156 | 157 | #define kStrMenuItemAbout ";uUber ^p" 158 | #define kStrMenuItemOpen "Disketten-Image ;uoffnen" 159 | #define kStrMenuItemQuit "Beenden" 160 | #define kStrMenuItemMore "Mehr Befehle" 161 | 162 | #define kStrAppMenuItemHide "^p ausblenden" 163 | #define kStrAppMenuItemHideOthers "Andere ausblenden" 164 | #define kStrAppMenuItemShowAll "Alle einblenden" 165 | #define kStrAppMenuItemQuit "^p beenden" 166 | 167 | #define kStrCntrlKyName "Control" 168 | #define kStrCmdCopyOptions "Variation options kopieren" 169 | #define kStrHaveCopiedOptions "Variation options kopiert" 170 | --------------------------------------------------------------------------------