RbBFBlokProjPSIVStrn2006.04 ACnmStrnAChpStrnACsvStrnVer1Strn1 Ver2Strn0 Ver3Strn0 RelsStrn0 NnRlStrn0 RegnStrnSVerStrnLVerStrnIVerStrnaiviInt DVewInt +prTpInt DLanInt CLanInt DEncInt BflgInt IconGrupEndGInt MacCStrnBMacStrnJdiBoy (Classic)BCarStrn JdiBoy (Mac)BCMOStrn JdiBoy.app BunIStrnBSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnBWinStrn JdiBoy.exe BMDIInt WcmNStrnJdisoft WpNmStrnJdiboy WiNmStrnBL86StrnJdiBoy PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNameStrnApp ContInt paswStrnbClsInt SuprStrn Application bNtrInt bApOInt CompStrnPDefGrup$nameStrnMenuBar PValInt k'EndGInt VwBhGrupEndGInt CnstGrupEncoInt nameStrnkFileQuitShortcut typeInt defnStrnflagInt CInsGrup0pltfInt langInt defnStrnCmd+Q EndGInt CInsGrup0pltfInt langInt defnStrnCtrl+Q EndGInt EndGInt CnstGrupEncoInt nameStrn kFileQuit typeInt defnStrn&Quit flagInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt EndGInt CnstGrupEncoInt nameStrn kEditClear typeInt defnStrn&Delete flagInt CInsGrup0pltfInt langInt defnStrn&Delete EndGInt CInsGrup0pltfInt langInt defnStrn&Delete EndGInt EndGInt PadnPadn`************************************************************************************************BlokpVew+HNameStrnWindow1 ContInt paswStrnbClsInt SuprStrnWindow bNtrInt CompStrnHInsGrupnameStrnOpenCompStrnVsblInt sorcGrupEncoInt srclStrn Sub Open() srclStrn0EditField1.AppendText("Jdiboy loaded"+EndOfLine)srclStrnTimer1.Enabled=falsesrclStrnEnd Sub EndGInt EndGInt HInsGrup(nameStrnEnableMenuItems CompStrnVsblInt sorcGrupEncoInt srclStrnSub EnableMenuItems() srclStrnif not enableResume thensrclStrnFileResume.Enabled=falsesrclStrnelsesrclStrnFileResume.Enabled=true srclStrnend if srclStrnEnd Sub EndGInt EndGInt MnuHGrupnameStrnFileLoadCompStrnVsblInt sorcGrupdEncoInt srclStrnFunction FileLoad() As Boolean srclStrn4dim f as FolderItem = GetOpenFolderItem("GamboyRom")srclStrn)if f=nil or not f.Exists then return true srclStrn2EditField1.AppendText("Loading "+f.Name+EndOfLine) srclStrngb = new GameBoysrclStrn#if not gb.load(f.AbsolutePath) then srclStrnLEditField1.AppendText("ERROR: Failure loading cartridge: "+f.Name+EndOfLine)srclStrn return true srclStrnend if srclStrnsrclStrn9EditField1.AppendText("Title: "+gb.getCartridge.getTitle) srclStrnREditField1.AppendText(EndOfLine+"Type: "+gb.getCartridge.getDescription+EndOfLine) srclStrndEditField1.AppendText("ROM: "+str(Bitwise.ShiftRight(gb.getCartridge.getROMSize,10))+"KB"+EndOfLine)srclStrndEditField1.AppendText("RAM: "+str(bitwise.ShiftRight(gb.getCartridge.getRAMsize,10))+"KB"+EndOfLine)srclStrnsrclStrn"if not gb.getCartridge.verify then srclStrnREditField1.AppendText("WARNING: Cartridge checksum verification failed"+EndOfLine) srclStrnend if srclStrnsrclStrngb.run()srclStrnsrclStrn return true srclStrn End FunctionEndGInt EndGInt MnuHGrup\nameStrn FileResume CompStrnVsblInt sorcGrupEncoInt srclStrn Function FileResume() As BooleansrclStrnenableResume=false srclStrngb.running=true srclStrn*EditField1.AppendText("Resumed"+EndOfLine) srclStrnTimer1.Enabled=true srclStrn Timer1.Mode=1 srclStrnsrclStrn End FunctionEndGInt EndGInt MnuHGrupnameStrnFileQuitCompStrnVsblInt sorcGrupEncoInt srclStrnFunction FileQuit() As Boolean srclStrngb.running=falsesrclStrntimer1.Enabled=falsesrclStrn timer1.Mode=0 srclStrnsrclStrn End FunctionEndGInt EndGInt PropGrupPEncoInt declStrn gb As GameBoy flagInt CompStrnshrdInt EndGInt PropGrup`EncoInt declStrnenableResume As boolean = false flagInt CompStrnshrdInt EndGInt PDefGrup0nameStrnMenuBar PValStrn 1803495423 EndGInt PDefGrup(nameStrn MacProcID PValInt EndGInt PDefGrup4nameStrn BalloonHelp EncoInt PValStrnEndGInt PDefGrup0nameStrnMinimizeButton PValStrnTrueEndGInt PDefGrup4nameStrnMaximizeButton PValStrnFalse EndGInt PDefGrup0nameStrn LiveResize PValStrnFalse EndGInt PDefGrup,nameStrn Resizeable PValStrnTrueEndGInt PDefGrup,nameStrn CloseButton PValStrnTrueEndGInt PDefGrup0nameStrnMenuBarVisible PValStrnTrueEndGInt PDefGrup0nameStrn FullScreen PValStrnFalse EndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup8nameStrnTitle EncoInt PValStrnJdiBoy EndGInt PDefGrup$nameStrnBackdropPValStrnEndGInt PDefGrup(nameStrn BackColor PValInt EndGInt PDefGrup0nameStrn HasBackColorPValStrnFalse EndGInt PDefGrup0nameStrn Composite PValStrnFalse EndGInt PDefGrup$nameStrnFrame PValInt EndGInt PDefGrup(nameStrn MaxHeight PValInt }EndGInt PDefGrup$ nameStrnMaxWidthPValInt }EndGInt  PDefGrup( nameStrn MinHeight PValInt @EndGInt  PDefGrup$ nameStrnMinWidthPValInt @EndGInt  PDefGrup$ nameStrnHeight PValInt EndGInt  PDefGrup$ nameStrnWidth PValInt EndGInt  PDefGrup(nameStrn Placement PValInt EndGInt VwBhGrupTVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnWindow EndGInt VwPrGrupLNameStrn Interfaces VsblInt PrGpStrnID CPifStrnWindow EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnWindow EndGInt VwPrGrup0NameStrn Placement VsblInt PrGpStrnPositionPValStrn0 typeStrnInteger vbETStrnEnumCPifStrnWindow EnumGrupdefnStrn 0 - Default defnStrn1 - Parent Window defnStrn2 - Main Screen defnStrn3 - Parent Window ScreendefnStrn 4 - Stagger EndGInt EndGInt VwPrGruppNameStrnWidth VsblInt PrGpStrnPositionPValStrn300 typeStrnInteger CPifStrnWindow EndGInt VwPrGruppNameStrnHeight VsblInt PrGpStrnPositionPValStrn300 typeStrnInteger CPifStrnWindow EndGInt VwPrGruppNameStrnMinWidthVsblInt PrGpStrnPositionPValStrn64 typeStrnInteger CPifStrnWindow EndGInt VwPrGruptNameStrn MinHeight VsblInt PrGpStrnPositionPValStrn64 typeStrnInteger CPifStrnWindow EndGInt VwPrGruptNameStrnMaxWidthVsblInt PrGpStrnPositionPValStrn32000 typeStrnInteger CPifStrnWindow EndGInt VwPrGrupxNameStrn MaxHeight VsblInt PrGpStrnPositionPValStrn32000 typeStrnInteger CPifStrnWindow EndGInt VwPrGrup NameStrnFrame VsblInt PrGpStrn Appearance PValStrn0 typeStrnInteger vbETStrnEnumCPifStrnWindow EnumGruppdefnStrn 0 - DocumentdefnStrn1 - Movable Modal defnStrn2 - Modal DialogdefnStrn3 - Floating Window defnStrn 4 - Plain Box defnStrn5 - Shadowed BoxdefnStrn6 - Rounded Window defnStrn7 - Global Floating Window defnStrn8 - Sheet WindowdefnStrn9 - Metal WindowdefnStrn10 - Drawer Window defnStrn11 - Modeless DialogEndGInt EndGInt VwPrGrup|NameStrn Composite VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt VwPrGrup|NameStrn HasBackColorVsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt VwPrGrup|NameStrn BackColor VsblInt PrGpStrn Appearance PValStrn&hFFFFFFtypeStrnColor CPifStrnWindow EndGInt VwPrGrupx NameStrnBackdropVsblInt PrGpStrn Appearance typeStrnPicture vbETStrnPicture CPifStrnWindow EndGInt  VwPrGrupx!NameStrnTitle VsblInt PrGpStrn Appearance PValStrnUntitledtypeStrnString CPifStrnWindow EndGInt !VwPrGrupt"NameStrnVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt "VwPrGrup|#NameStrn FullScreen VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt #VwPrGrup|$NameStrnMenuBarVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt $VwPrGrupx%NameStrn CloseButton VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt %VwPrGrup|&NameStrn Resizeable VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt &VwPrGrup|'NameStrn LiveResize VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt 'VwPrGrup(NameStrnMaximizeButton VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt (VwPrGrup|)NameStrnMinimizeButton VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt )VwPrGruph*NameStrn BalloonHelp VsblInt PrGpStrn Appearance typeStrnString CPifStrnWindow EndGInt *VwPrGrupx+NameStrn MacProcID VsblInt PrGpStrn Appearance PValStrn0 typeStrnInteger CPifStrnWindow EndGInt +VwPrGrupx,NameStrnMenuBar VsblInt PrGpStrn Appearance typeStrnMenuBar vbETStrnMenuBar CPifStrnWindow EndGInt ,VwPrGrupX-NameStrn enableResumePrGpStrnBehaviorPValStrnfalse typeStrnboolean EndGInt -EndGInt CBhvGrupl.SuprStrnCanvas HInsGrup</nameStrnOpenCompStrnVsblInt sorcGrup0EncoInt srclStrn Sub Open() srclStrn/me.Backdrop = NewPicture(me.Width,me.Height,16) srclStrn/me.Backdrop.Graphics.ForeColor= RGB(234,144,23) srclStrn5me.Backdrop.Graphics.FillRect(0,0,me.Width,me.Height) srclStrnEnd Sub EndGInt 0EndGInt /EndGInt .CBhvGrupX1SuprStrn EditField HInsGrup$2nameStrn TextChange CompStrnVsblInt sorcGrup3EncoInt srclStrnSub TextChange()srclStrn'dim f as new FolderItemsrclStrn'dim g as FolderItemsrclStrn'f=f.Child("log.txt") srclStrn'if f=nil then return srclStrn' srclStrn'if f.Exists then srclStrn'g = f.Parent.Child("log.txt") srclStrn"'f = f.Parent.Child("log.txt.new") srclStrn'end if srclStrn' srclStrn/'dim tos as TextOutputStream = f.CreateTextFile srclStrn' srclStrn'if tos = nil then Return srclStrn' srclStrn'tos.Write(me.Text) srclStrn' srclStrn 'tos.Close srclStrn' srclStrn'if g <> nil then srclStrn 'g.Delete srclStrn'f.CopyFileTo(g)srclStrn 'f.Delete srclStrn'end if srclStrnEnd Sub EndGInt 3EndGInt 2EndGInt 1CBhvGrup 04SuprStrnTimer HInsGrup 5nameStrnAction CompStrnVsblInt sorcGrup 6EncoInt srclStrn Sub Action()srclStrn if gb <> nil and gb.running thensrclStrnme.Enabled=falsesrclStrn me.Mode=0 srclStrnsrclStrn//App.SleepCurrentThread(100) srclStrnapp.DoEvents() srclStrn9//Window1.EditField1.AppendText("Polling keys"+EndOfLine) srclStrnsrclStrn(if Keyboard.AsyncKeyDown(123) then//leftsrclStrngb.mJoypad.keyPressed(123) srclStrn,self.EditField1.AppendText("left"+EndOfLine)srclStrnelsesrclStrngb.mJoypad.keyReleased(123) srclStrnend if srclStrn)if Keyboard.AsyncKeyDown(124) then//right srclStrngb.mJoypad.keyPressed(124) srclStrn-self.EditField1.AppendText("right"+EndOfLine) srclStrnelsesrclStrngb.mJoypad.keyReleased(124) srclStrnend if srclStrn(if Keyboard.AsyncKeyDown(125) then//downsrclStrngb.mJoypad.keyPressed(125) srclStrn,self.EditField1.AppendText("down"+EndOfLine)srclStrnelsesrclStrngb.mJoypad.keyReleased(125) srclStrnend if srclStrn%if Keyboard.AsyncKeyDown(126)then//up srclStrn*self.EditField1.AppendText("up"+EndOfLine) srclStrngb.mJoypad.keyPressed(126) srclStrnelsesrclStrngb.mJoypad.keyReleased(126) srclStrnend if srclStrn.if Keyboard.AsyncKeyDown(60) then//right shift srclStrngb.mJoypad.keyPressed(60) srclStrn/self.EditField1.AppendText("r shift"+EndOfLine) srclStrnelsesrclStrngb.mJoypad.keyReleased(60) srclStrnend if srclStrn'if Keyboard.AsyncKeyDown(76)then//enter srclStrngb.mJoypad.keyPressed(76) srclStrn-self.EditField1.AppendText("enter"+EndOfLine) srclStrnelsesrclStrngb.mJoypad.keyReleased(76) srclStrnend if srclStrn#if Keyboard.AsyncKeyDown(6) then//z srclStrngb.mJoypad.keyPressed(6)srclStrn)self.EditField1.AppendText("z"+EndOfLine) srclStrnelsesrclStrngb.mJoypad.keyReleased(6) srclStrnend if srclStrn"if Keyboard.AsyncKeyDown(7)then//x srclStrngb.mJoypad.keyPressed(7)srclStrn)self.EditField1.AppendText("x"+EndOfLine) srclStrnelsesrclStrngb.mJoypad.keyReleased(7) srclStrnend if srclStrn'if Keyboard.AsyncKeyDown(53) then //esc srclStrngb.running=falsesrclStrn.self.EditField1.AppendText("Paused"+EndOfLine) srclStrnself.enableResume=true srclStrnexitsrclStrnend if srclStrnsrclStrn2gb.emulate(Bitwise.ShiftRight(gb.GAMEBOY_CLOCK,7)) srclStrnme.Enabled = true srclStrn me.mode=1 srclStrnend if srclStrnEnd Sub EndGInt 6EndGInt 5EndGInt 4CtrlGrupP7cclsStrnCanvas nameStrnCanvas PDefGrup88nameStrn InitialParent EncoInt PValStrnEndGInt 8PDefGrup09nameStrnEraseBackground PValStrnTrueEndGInt 9PDefGrup(:nameStrn AcceptTabs PValStrnEndGInt :PDefGrup,;nameStrn AcceptFocus PValStrnTrueEndGInt ;PDefGrup$nameStrnEnabled PValStrnTrueEndGInt >PDefGrup0?nameStrnAutoDeactivate PValStrnTrueEndGInt ?PDefGrup0@nameStrnHelpTag EncoInt PValStrnEndGInt @PDefGrup(AnameStrnVisible PValStrnTrueEndGInt APDefGrup,BnameStrn TabPanelIndex PValInt EndGInt BPDefGrup0CnameStrn LockBottom PValStrnFalse EndGInt CPDefGrup0DnameStrn LockRight PValStrnFalse EndGInt DPDefGrup,EnameStrnLockTop PValStrnFalse EndGInt EPDefGrup,FnameStrnLockLeftPValStrnFalse EndGInt FPDefGrup$GnameStrnHeight PValInt EndGInt GPDefGrup$HnameStrnWidth PValInt EndGInt HPDefGrup InameStrnTop PValInt EndGInt IPDefGrup JnameStrnLeftPValInt EndGInt JPDefGrup8KnameStrn ControlOrderEncoInt PValStrn0 EndGInt KPDefGrup8LnameStrnSuper EncoInt PValStrnCanvas EndGInt LPDefGrup$MnameStrnIndex PValInt EndGInt MPDefGrup4NnameStrnNameEncoInt PValStrnCanvas1 EndGInt NCBixInt EndGInt 7CtrlGrup OcclsStrn EditField nameStrn EditField PDefGrup8PnameStrn InitialParent EncoInt PValStrnEndGInt PPDefGrup4QnameStrn DataField EncoInt PValStrnEndGInt QPDefGrup4RnameStrn DataSource EncoInt PValStrnEndGInt RPDefGrup(SnameStrn Alignment PValInt EndGInt SPDefGrup(TnameStrn AcceptTabs PValStrnEndGInt TPDefGrup(UnameStrn LimitText PValInt EndGInt UPDefGrup(VnameStrnReadOnlyPValStrnTrueEndGInt VPDefGrup,WnameStrnMaskEncoInt PValStrnEndGInt WPDefGrup,XnameStrnTextEncoInt PValStrnEndGInt XPDefGrup(YnameStrn Underline PValStrnEndGInt YPDefGrup$ZnameStrnItalic PValStrnEndGInt ZPDefGrup [nameStrnBoldPValStrnEndGInt [PDefGrup$\nameStrnTextSizePValInt EndGInt \PDefGrup8]nameStrnTextFontEncoInt PValStrnSystem EndGInt ]PDefGrup0^nameStrnAutoDeactivate PValStrnTrueEndGInt ^PDefGrup0_nameStrnHelpTag EncoInt PValStrnEndGInt _PDefGrup(`nameStrnVisible PValStrnTrueEndGInt `PDefGrup0anameStrnFormat EncoInt PValStrnEndGInt aPDefGrup(bnameStrnEnabled PValStrnTrueEndGInt bPDefGrup(cnameStrn BackColor PValInt EndGInt cPDefGrup(dnameStrn TextColor PValInt EndGInt dPDefGrup,enameStrn UseFocusRingPValStrnTrueEndGInt ePDefGrup$fnameStrnPasswordPValStrnEndGInt fPDefGrup$gnameStrnStyled PValStrnEndGInt gPDefGrup4hnameStrnScrollbarVertical PValStrnTrueEndGInt hPDefGrup0inameStrnScrollbarHorizontal PValStrnEndGInt iPDefGrup,jnameStrn Multiline PValStrnTrueEndGInt jPDefGrup(knameStrnBorder PValStrnTrueEndGInt kPDefGrup,lnameStrn TabPanelIndex PValInt EndGInt lPDefGrup0mnameStrn LockBottom PValStrnFalse EndGInt mPDefGrup,nnameStrn LockRight PValStrnTrueEndGInt nPDefGrup(onameStrnLockTop PValStrnTrueEndGInt oPDefGrup(pnameStrnLockLeftPValStrnTrueEndGInt pPDefGrup$qnameStrnHeight PValInt 4EndGInt qPDefGrup$rnameStrnWidth PValInt EndGInt rPDefGrup snameStrnTop PValInt EndGInt sPDefGrup tnameStrnLeftPValInt EndGInt tPDefGrup8unameStrn ControlOrderEncoInt PValStrn1 EndGInt uPDefGrup<vnameStrnSuper EncoInt PValStrn EditField EndGInt vPDefGrup$wnameStrnIndex PValInt EndGInt wPDefGrup8xnameStrnNameEncoInt PValStrn EditField1 EndGInt xCBixInt EndGInt OCtrlGrupycclsStrnTimer nameStrnTimer PDefGrup,znameStrn TabPanelIndex PValInt EndGInt zPDefGrup@{nameStrn InitialParent EncoInt PValStrnCanvas1 EndGInt {PDefGrup$|nameStrnPeriod PValInt EndGInt |PDefGrup }nameStrnModePValInt EndGInt }PDefGrup ~nameStrnTop PValInt EndGInt ~PDefGrup nameStrnLeftPValInt EndGInt PDefGrup8nameStrn ControlOrderEncoInt PValStrn2 EndGInt PDefGrup8nameStrnSuper EncoInt PValStrnTimer EndGInt PDefGrup$nameStrnIndex PValInt EndGInt PDefGrup4nameStrnNameEncoInt PValStrnTimer1 EndGInt CBixInt EndGInt yPadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpMnuk' NameStrnMenuBar1ContInt paswStrnMItmGrupspmuInt nameStrnFileMenutextStrn&File indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnFileLoadtextStrnLoad... indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn FileResume textStrnResume indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnFileQuittextStrn#App.kFileQuit indxInt scutStrn#App.kFileQuitShortcut MiSKStrn#App.kFileQuitShortcut maEnInt EncoInt flagInt SuprStrn QuitMenuItemEndGInt EndGInt MItmGrup\spmuInt nameStrnEditMenutextStrn&Edit indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnEditUndotextStrn&Undo indxInt scutStrnCmd+Z MiSKStrnZ MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn UntitledMenu1 textStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnEditCut textStrnCu&tindxInt scutStrnCmd+X MiSKStrnX MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnEditCopytextStrn&Copy indxInt scutStrnCmd+C MiSKStrnC MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditPaste textStrn&Paste indxInt scutStrnCmd+V MiSKStrnV MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditClear textStrn#App.kEditClear indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn UntitledMenu0 textStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditSelectAll textStrn Select &All indxInt scutStrnCmd+A MiSKStrnA MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt EndGInt PadnPadnh****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjv_8NameStrnGameBoy ContInt paswStrnbClsInt SuprStrnMemory bNtrInt CompStrnMethGrup8nameStrn Constructor CompStrnVsblInt sorcGrupEncoInt srclStrnSub Constructor() srclStrnmInterrupt = new Interrupt srclStrnmRAM = new RAM srclStrnmStore = new StoreDriversrclStrn1mSound = new Sound_gb(new SoundDriver(44100,2,8)) srclStrn1mJoypad = new Joypad(new JoypadDriver,mInterrupt) srclStrn!mTimer = new Timer_gb(mInterrupt) srclStrn#mSerial = new Serial_gb(mInterrupt) srclStrn:mVideo = new Video(new VideoDriver(168,148),mInterrupt,me) srclStrnmCPU = new CPU(mInterrupt,me) srclStrn2mCartridge = new Cartridge(mStore,new ClockDriver) srclStrnsrclStrnREGISTERED_BITMAP(0)=&h3C srclStrnREGISTERED_BITMAP(1)=&h42 srclStrnREGISTERED_BITMAP(2)=&hB9 srclStrnREGISTERED_BITMAP(3)=&hA5 srclStrnREGISTERED_BITMAP(4)=&hB9 srclStrnREGISTERED_BITMAP(5)=&hA5 srclStrnREGISTERED_BITMAP(6)=&h42 srclStrnREGISTERED_BITMAP(7)=&h3C srclStrnsrclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrn getCartridgeCompStrnVsblInt sorcGrupxEncoInt srclStrn$Function getCartridge() As CartridgesrclStrnreturn mCartridge srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrn Cartridge EndGInt MethGrupnameStrngetVideoCompStrnVsblInt sorcGruplEncoInt srclStrnFunction getVideo() As VideosrclStrn return mVideo srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnVideo EndGInt MethGrupnameStrngetSoundCompStrnVsblInt sorcGruppEncoInt srclStrnFunction getSound() As Sound_gb srclStrn return mSound srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnSound_gbEndGInt MethGrupHnameStrnloadCompStrnVsblInt sorcGrupEncoInt srclStrn1Function load(cartridgeName as string) As boolean srclStrn%return mCartridge.load(cartridgeName) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrnboolean EndGInt MethGrupHnameStrnsaveCompStrnVsblInt sorcGrupEncoInt srclStrn1Function save(cartridgeName as string) As boolean srclStrn%return mCartridge.save(cartridgeName) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrnboolean EndGInt MethGrupnameStrnstart CompStrnVsblInt sorcGrupXEncoInt srclStrn Sub start() srclStrnmSound.start() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnstopCompStrnVsblInt sorcGrupXEncoInt srclStrn Sub stop() srclStrn mSound.stop() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup$nameStrnreset CompStrnVsblInt sorcGrupEncoInt srclStrn Sub reset() srclStrn mRAM.reset()srclStrnmCartridge.reset() srclStrnmInterrupt.reset() srclStrn mCPU.reset()srclStrnmSerial.Reset() srclStrnmTimer.Reset() srclStrnmJoypad.reset() srclStrnmVideo.reset() srclStrnmSound.reset() srclStrnsrclStrn mCPU.setROM(mCartridge.getROM())srclStrnsrclStrn drawlogo() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupPnameStrncycles CompStrnVsblInt sorcGrupEncoInt srclStrnFunction cycles() As integersrclStrn\return min(mVideo.ticks(), mSerial.ticks(), mTimer.ticks(), mSound.ticks(), mJoypad.ticks())srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrupXnameStrnemulate CompStrnVsblInt sorcGrupEncoInt srclStrnSub emulate(ticks as integer) srclStrnwhile(ticks>0) srclStrndim count as integer = cycles() srclStrnsrclStrnmCPU.emulate(count) srclStrnmSerial.emulate(count) srclStrnmTimer.emulate(count) srclStrnmVideo.emulate(count) srclStrnmSound.emulate(count) srclStrnmJoypad.emulate(count) srclStrnsrclStrnticks = ticks - count srclStrnwendsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnticks as integerrsltStrnEndGInt MethGrupnameStrnwrite CompStrnVsblInt sorcGrup EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif address <= &h7FFF then srclStrn// 0000 - 7FFF ROM Bank srclStrnmCartridge.write(address, data) srclStrnelseif address <= &h9FFF then srclStrn//8000-9FFF Video RAM srclStrnmVideo.write(address, data) srclStrnelseif address <= &hBFFF then srclStrn//A000-BFFF External RAMsrclStrnmCartridge.write(address, data) srclStrnelseif address <= &hFDFF then srclStrn//C000-FDFF Work RAMsrclStrnmRAM.write(address, data) srclStrnelseif address <= &hFEFF then srclStrn//FE00-FEFF OAM srclStrnmVideo.write(Address, data) srclStrnelseif address = &hFF00 thensrclStrn //FF00-FF00 srclStrnmJoypad.write(address, data)srclStrn2elseif address >=&hFF01 and address <= &hFF02 then srclStrn//FF01-FF02 Serial srclStrnmSerial.write(address,data) srclStrn2elseif address >=&hFF04 and address <= &hFF07 then srclStrn //FF04-FF07 srclStrnmTimer.write(Address,data) srclStrnelseif Address = &hFF0F thensrclStrn//FF0F-FF0F Interrupt srclStrnmInterrupt.write(Address,data) srclStrn-//check pending interrupts when IF is changed srclStrnmCPU.interrupt_() srclStrn3elseif Address >= &hFF10 and Address <= &hFF3F then srclStrn//FF10-FF3F sound srclStrnmSound.write(Address,data) srclStrn3elseif Address >= &hFF40 and Address <= &hFF4B then srclStrn//FF40-FF4B Video srclStrnmVideo.write(address,data) srclStrn///check pending interrupts when STAT is changed srclStrnif(Address= mVideo.STAT) then srclStrnmCPU.interrupt_() srclStrnend if srclStrn3elseif address >= &hFF80 and Address <= &hFFFE then srclStrn//FF80-FFFE High RAMsrclStrnmRAM.write(Address,data)srclStrnelseif Address = &hFFFF thensrclStrn//FFFF-FFFF Interrupt srclStrnmInterrupt.write(address,data) srclStrn-//check pending interrupts when IE is changed srclStrnmCPU.interrupt_() srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrupnameStrnreadCompStrnVsblInt sorcGrupEncoInt srclStrn,Function read(address as integer) As integersrclStrnif address <= &h7FFF then srclStrn// 0000 - 7FFF ROM Bank srclStrnreturn mCartridge.read(address) srclStrnelseif address <= &h9FFF then srclStrn//8000-9FFF Video RAM srclStrnreturn mVideo.read(address) srclStrnelseif address <= &hBFFF then srclStrn//A000-BFFF External RAMsrclStrnreturn mCartridge.read(address) srclStrnelseif address <= &hFDFF then srclStrn//C000-FDFF Work RAMsrclStrnreturn mRAM.read(address) srclStrnelseif address <= &hFEFF then srclStrn//FE00-FEFF OAM srclStrnreturn mVideo.read(Address) srclStrnelseif address = &hFF00 thensrclStrn //FF00-FF00 srclStrnreturn mJoypad.read(address)srclStrn2elseif address >=&hFF01 and address <= &hFF02 then srclStrn//FF01-FF02 Serial srclStrnreturn mSerial.read(address)srclStrn2elseif address >=&hFF04 and address <= &hFF07 then srclStrn//FF04-FF07 Timer srclStrnreturn mTimer.read(Address) srclStrnelseif Address = &hFF0F thensrclStrn//FF0F-FF0F Interrupt srclStrnreturn mInterrupt.read(Address) srclStrn3elseif Address >= &hFF10 and Address <= &hFF3F then srclStrn//FF10-FF3F sound srclStrnreturn mSound.read(Address) srclStrn3elseif Address >= &hFF40 and Address <= &hFF4B then srclStrn//FF40-FF4B Video srclStrnreturn mVideo.read(address) srclStrn3elseif address >= &hFF80 and Address <= &hFFFE then srclStrn//FF80-FFFE High RAMsrclStrnreturn mRAM.read(Address) srclStrnelseif Address = &hFFFF thensrclStrn//FFFF-FFFF Interrupt srclStrnreturn mInterrupt.read(address) srclStrnelsesrclStrn return &hFF srclStrnend if srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrupnameStrndrawlogoCompStrnVsblInt sorcGrup,EncoInt srclStrnSub drawlogo() srclStrnfor index as integer =0 to 48-1 srclStrn3dim bits as integer = mCartridge.read(&h0104+index) srclStrnNdim pattern0 as integer = (bitwise.BitAnd(bitwise.ShiftRight(bits,0), &h80))+_ srclStrn5 (bitwise.BitAnd(bitwise.ShiftRight(bits,1), &h60))+_ srclStrn5 (bitwise.BitAnd(bitwise.ShiftRight(bits,2), &h18))+_ srclStrn5 (bitwise.BitAnd(bitwise.ShiftRight(bits,3), &h06))+_ srclStrn3 (bitwise.BitAnd(bitwise.ShiftRight(bits,4), &h01)) srclStrnMdim pattern1 as integer = (bitwise.BitAnd(bitwise.ShiftLeft(bits,4), &h80))+_ srclStrn3(bitwise.BitAnd(bitwise.ShiftLeft(bits,3), &h60))+_ srclStrn3(bitwise.BitAnd(bitwise.ShiftLeft(bits,2), &h18))+_ srclStrn3(bitwise.BitAnd(bitwise.ShiftLeft(bits,1), &h06))+_ srclStrn1(bitwise.BitAnd(bitwise.ShiftLeft(bits,0), &h01)) srclStrnsrclStrn:mVideo.write(&h8010 + Bitwise.ShiftLeft(index,3),pattern0) srclStrn:mVideo.write(&h8012 + Bitwise.ShiftLeft(index,3),pattern0) srclStrn:mVideo.write(&h8014 + Bitwise.ShiftLeft(index,3),pattern1) srclStrn:mVideo.write(&h8016 + Bitwise.ShiftLeft(index,3),pattern1) srclStrnnextsrclStrnsrclStrnfor index as integer = 0 to 8-1 srclStrnJmVideo.write(&h8190 + bitwise.ShiftLeft(index,1),REGISTERED_BITMAP(index)) srclStrnnextsrclStrnsrclStrnfor tile as integer = 0 to 12-1 srclStrn#mVideo.write(&h9904 + tile, tile+1) srclStrn$mVideo.write(&h9924 + tile, tile+13)srclStrnnextsrclStrnsrclStrnmVideo.write(&h9904 + 12, 25) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnrun CompStrnVsblInt sorcGrupEncoInt srclStrn Sub run() srclStrn*mVideo.setTitle(getCartridge().getTitle()) srclStrnsrclStrnreset() srclStrnsrclStrnstart() srclStrnsrclStrnrunning = true srclStrnWindow1.Timer1.Enabled = true srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt PropGrup\EncoInt declStrnREGISTERED_BITMAP(8) As Int8flagInt CompStrnshrdInt EndGInt PropGrupLEncoInt declStrn mRAM As RAM flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnmCartridge As Cartridge flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnmInterrupt As Interrupt flagInt !CompStrnshrdInt EndGInt PropGrupLEncoInt declStrn mCPU As CPU flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmSerial As Serial_gbflagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmTimer As timer_gb flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmJoypad As JoyPad flagInt CompStrnshrdInt EndGInt PropGrupPEncoInt declStrnmVideo As Video flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmSound As sound_gb flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnrunning As boolean = false flagInt CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnmStore As StoreDriver flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupTNameStrnrunning PrGpStrnBehaviorPValStrnfalse typeStrnboolean EndGInt EndGInt CnstGrupXEncoInt nameStrn GAMEBOY_CLOCK typeInt defnStrn&h100000flagInt EndGInt PadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj=0NameStrn Cartridge ContInt paswStrnbClsInt bNtrInt CompStrnMethGrupnameStrn Constructor CompStrnVsblInt sorcGrupEncoInt srclStrn=Sub Constructor(iStore as StoreDriver, iClock as ClockDriver) srclStrnmStore = iStore srclStrnmClock= iClock srclStrnsrclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn,iStore as StoreDriver, iClock as ClockDriverrsltStrnEndGInt MethGrup<nameStrn Destructor CompStrnVsblInt sorcGrupEncoInt srclStrnSub Destructor()srclStrnmStore.deleteCartridge(mROM)srclStrnmStore.deleteBattery(mRAM) srclStrn mapper=nil srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup@nameStrngetTitleCompStrnVsblInt sorcGrupEncoInt srclStrnFunction getTitle() As string srclStrn#title = mROM.StringValue(&h0134,14) srclStrn return titlesrclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnstring EndGInt MethGrup<nameStrngetCartridgeTypeCompStrnVsblInt sorcGrupEncoInt srclStrn&Function getCartridgeType() As integer srclStrn3return Bitwise.BitAnd(mROM.uint8Value(&h0147),&hFF) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrupnameStrngetROM CompStrnVsblInt sorcGruplEncoInt srclStrn Function getROM() As memoryblocksrclStrn return mROM srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrn memoryblock EndGInt MethGrupnameStrn getROMSize CompStrnVsblInt sorcGrupPEncoInt srclStrn Function getROMSize() As integersrclStrnFdim iromSize as integer = Bitwise.BitAnd(mROM.uint8Value(&h0148),&hFF) srclStrn,if iromSize >= &h00 and iromSize <=&h07 thensrclStrn(return Bitwise.ShiftLeft(32768,iromSize)srclStrnelsesrclStrn return 32768srclStrnend if srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrupxnameStrn getRAMsize CompStrnVsblInt sorcGrupEncoInt srclStrn Function getRAMsize() As integersrclStrn ramSize=0 srclStrn-dim temp as integer = mROM.uint8Value(&h0149) srclStrnselect case tempsrclStrn case &h00 srclStrn ramSize=0 srclStrn case &h01 srclStrnramSize = 8192 //FIXME: 2048srclStrn case &h02 srclStrnramSize = 8192 srclStrn case &h03 srclStrn ramSize=32768 srclStrn end select srclStrnsrclStrnreturn ramSize srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup@nameStrngetDestinationCode CompStrnVsblInt sorcGrupEncoInt srclStrn(Function getDestinationCode() As integersrclStrn3return Bitwise.BitAnd(mROM.uint8Value(&h014A),&hFF) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup<nameStrngetLicenseeCode CompStrnVsblInt sorcGrupEncoInt srclStrn%Function getLicenseeCode() As integer srclStrn3return Bitwise.BitAnd(mROM.uint8Value(&h014B),&hFF) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup8nameStrn getROMVersion CompStrnVsblInt sorcGrupEncoInt srclStrn#Function getROMVersion() As integer srclStrn3return Bitwise.BitAnd(mROM.uint8Value(&h014C),&hFF) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup@nameStrngetHeaderChecksum CompStrnVsblInt sorcGrupEncoInt srclStrn'Function getHeaderChecksum() As integer srclStrn3return Bitwise.BitAnd(mROM.uint8Value(&h014D),&hFF) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrupxnameStrn getChecksum CompStrnVsblInt sorcGrupEncoInt srclStrn!Function getChecksum() As integer srclStrnwreturn Bitwise.ShiftLeft(Bitwise.BitAnd(mROM.uint8Value(&h014E),&hFF),8) + Bitwise.BitAnd(mROM.uint8Value(&h014F),&hFF) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrupHnameStrngetDescription CompStrnVsblInt sorcGrupEncoInt srclStrn#Function getDescription() As string srclStrnCreturn CartridgeFactory.getCartridgeDescription(getCartridgeType()) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnstring EndGInt MethGrup<nameStrn hasBattery CompStrnVsblInt sorcGrupEncoInt srclStrn Function hasBattery() As booleansrclStrn?return CartridgeFactory.hasCartridgeBattery(getCartridgeType()) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnboolean EndGInt MethGrupnameStrnreset CompStrnVsblInt sorcGrup$EncoInt srclStrn Sub reset() srclStrnif not hasBattery() thensrclStrnmRAM=NewMemoryBlock(ramSize)srclStrn#for index as integer=0 to ramSize-1 srclStrnmRAM.uint8Value(index) = &hFF srclStrnnextsrclStrnend if srclStrnmapper.reset() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup0nameStrnreadCompStrnVsblInt sorcGrupEncoInt srclStrn,Function read(address as integer) As integersrclStrnreturn mapper.read(address) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrup<nameStrnwrite CompStrnVsblInt sorcGrupEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnmapper.write(address, data) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrupnameStrnloadCompStrnVsblInt sorcGrupTEncoInt srclStrn1Function load(CartridgeName as string) As boolean srclStrnmStore.DeleteCartridge(mROM)srclStrnmStore.deleteBattery(mRAM) srclStrnsrclStrn mapper=nil srclStrnsrclStrnmROM=nilsrclStrnmRAM=nilsrclStrn romSize= 0 srclStrn ramSize=0 srclStrnsrclStrn0romSize = mStore.getCartridgeSize(CartridgeName)srclStrnsrclStrn(mROM = mStore.AllocateCartridge(romSize)srclStrnsrclStrnif mROM = nil then return false srclStrnsrclStrnIif not mStore.readCartridge(CartridgeName,mROM,romSize) then return false srclStrnsrclStrn'if not verifyHeader() then return false srclStrnsrclStrn+if romSize < getROMSize() then return false srclStrnsrclStrnramSize = getRAMsize() srclStrnsrclStrnuif getCartridgeType() >= CartridgeFactory.TYPE_MBC2 and getCartridgeType() <= CartridgeFactory.TYPE_MBC2_BATTERY then srclStrn ramSize = 512 srclStrnend if srclStrnsrclStrnif ramSize <> 0 thensrclStrn&mRAM = mStore.allocateBattery(ramSize) srclStrnif mRAM = nil then return false srclStrn%for index as integer = 0 to ramSize-1 srclStrnmRAM.uint8Value(index) = &hFF srclStrnnextsrclStrn(if mStore.hasBattery(CartridgeName) thensrclStrnGif not mStore.readbattery(CartridgeName,mRAM,ramSize) then return false srclStrnend if srclStrnend if srclStrnsrclStrncmapper = CartridgeFactory.createBankController(getCartridgeType(),mROM,romSize,mRAM,ramSize,mClock) srclStrn!if mapper = nil then return false srclStrnsrclStrn return true srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnCartridgeName as string rsltStrnboolean EndGInt MethGrupnameStrnsaveCompStrnVsblInt sorcGrupEncoInt srclStrn1Function save(cartridgeName as string) As boolean srclStrn$if not hasBattery() then return truesrclStrn6return mStore.writeBattery(cartridgeName,mRAM,ramSize) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrnboolean EndGInt MethGruphnameStrnverify CompStrnVsblInt sorcGrupEncoInt srclStrnFunction verify() As booleansrclStrndim checksum as integer = 0 srclStrnsrclStrn&for address as integer =0 to romSize-1 srclStrn/if Address <> &h014E and Address <> &h014F then srclStrnZchecksum = Bitwise.BitAnd(checksum + Bitwise.BitAnd(mROM.uint8Value(address),&hFF),&hFFFF) srclStrnend if srclStrnnextsrclStrn,if checksum = getChecksum() then return truesrclStrn return falsesrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnboolean EndGInt MethGruppnameStrn verifyHeaderCompStrnVsblInt sorcGrupEncoInt srclStrn"Function verifyHeader() As boolean srclStrn%if romSize < &h0150 then return false srclStrnsrclStrndim checksum as integer = &hE7 srclStrnsrclStrn)for address as integer = &h0134 to &h014C srclStrnXchecksum = Bitwise.BitAnd(checksum - Bitwise.BitAnd(mROM.uint8Value(address),&hFF),&hFF)srclStrnnextsrclStrn2if checksum = getHeaderChecksum() then return true srclStrn return FalsesrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnboolean EndGInt PropGrup\EncoInt declStrnmStore As StoreDriver = nil flagInt CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmClock As ClockDriver = nil flagInt CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmROM As MemoryBlock = nil flagInt CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmRAM As memoryBlock = nil flagInt CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnromSize As Integer = 0 flagInt CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnramSize As Integer = 0 flagInt CompStrnshrdInt EndGInt PropGrupPEncoInt declStrntitle As string flagInt CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmapper As MBC = nil flagInt CompStrnshrdInt EndGInt VwBhGrup\VwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupPNameStrnromSize PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt VwPrGrupPNameStrnramSize PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt VwPrGrup\NameStrntitle PrGpStrnBehaviortypeStrnstring vbETStrnMultiLineEditor EndGInt EndGInt PadnPadn|********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjLo\NameStrnCPU ContInt paswStrnbClsInt bNtrInt CompStrnMethGruptnameStrn Constructor CompStrnVsblInt sorcGrupEncoInt srclStrn;Sub Constructor(iInterrupt as Interrupt, iMemory as Memory) srclStrna=0 srclStrnb=0 srclStrnc=0 srclStrnd=0 srclStrne=0 srclStrnf=0 srclStrnh=0 srclStrnl=0 srclStrnsp=0srclStrn ime=false srclStrn halted=falsesrclStrncycles=0srclStrnmInterrupt=iInterrupt srclStrnmMemory=iMemory srclStrn//rom=0 srclStrnsrclStrnreset() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn*iInterrupt as Interrupt, iMemory as Memory rsltStrnEndGInt MethGrup nameStrngetBC CompStrnVsblInt sorcGrup| EncoInt srclStrnFunction getBC() As integer srclStrnreturn bitwise.ShiftLeft(b,8)+c srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetDE CompStrnVsblInt sorcGrup EncoInt srclStrnFunction getDE() As integer srclStrn!return (Bitwise.ShiftLeft(d,8))+e srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetHL CompStrnVsblInt sorcGrup EncoInt srclStrnFunction getHL() As integer srclStrn!return (Bitwise.ShiftLeft(h,8))+l srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetSP CompStrnVsblInt sorcGruph EncoInt srclStrnFunction getSP() As integer srclStrn return sp srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetPC CompStrnVsblInt sorcGruph EncoInt srclStrnFunction getPC() As integer srclStrn return pc srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAF CompStrnVsblInt sorcGrup EncoInt srclStrnFunction getAF() As integer srclStrn!return (Bitwise.ShiftLeft(a,8))+f srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetIF CompStrnVsblInt sorcGrup EncoInt srclStrnFunction getIF() As integer srclStrndim rtn as integer srclStrn if ime then srclStrn rtn = &h01 srclStrnelsesrclStrn rtn = &h00 srclStrnend if srclStrnsrclStrnif halted then srclStrnrtn = rtn + &h80srclStrnelsesrclStrnrtn = rtn + &h00srclStrnend if srclStrnsrclStrn return rtn srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrnsetROM CompStrnVsblInt sorcGruph EncoInt srclStrn Sub setROM(banks as MemoryBlock)srclStrn mROM=banks srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnbanks as MemoryBlockrsltStrnEndGInt MethGrup nameStrnreset CompStrnVsblInt sorcGruph EncoInt srclStrn Sub reset() srclStrna=&h01 srclStrnf=&h80 srclStrnb=&h00 srclStrnc=&h13 srclStrnd=&h00 srclStrne=&hD8 srclStrnh=&h01 srclStrnl=&h4D srclStrn sp=&hFFFE srclStrn pc=&h0100 srclStrnsrclStrn ime=False srclStrn halted=FalsesrclStrnsrclStrncycles=0srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnemulate CompStrnVsblInt sorcGrup EncoInt srclStrnSub emulate(iticks as integer) srclStrncycles= cycles+iticks srclStrn interrupt_()srclStrnsrclStrnwhile cycles >0 srclStrn execute() srclStrnwendsrclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrniticks as integer rsltStrnEndGInt MethGrup nameStrn interrupt_ CompStrnVsblInt sorcGrupt EncoInt srclStrnSub interrupt_()srclStrnif halted then srclStrnif mInterrupt.isPending() then srclStrnhalted = false srclStrn//Zerd no Densetsu srclStrncycles = cycles -4 srclStrnelsesrclStrnif cycles>0 thensrclStrn cycles =0 srclStrnend if srclStrnend if srclStrnend if srclStrnsrclStrn if ime then srclStrnif mInterrupt.isPending() then srclStrn0if mInterrupt.isPending(mInterrupt.cVBLANK) thensrclStrn'#if DebugBuild srclStrn 'logger.Log("INTERRUPT: VBLANK")srclStrn'#endif srclStrninterrupt_(&h40)srclStrn$mInterrupt.lower(mInterrupt.cVBLANK)srclStrn1elseif mInterrupt.isPending(mInterrupt.cLCD) then srclStrn'#if DebugBuild srclStrn'logger.Log("INTERRUPT: LCD") srclStrn'#endif srclStrninterrupt_(&h48)srclStrn!mInterrupt.lower(mInterrupt.cLCD) srclStrn3elseif mInterrupt.isPending(mInterrupt.cTIMER) then srclStrn'#if DebugBuild srclStrn'logger.Log("INTERRUPT: TIMER") srclStrn'#endif srclStrninterrupt_(&h50)srclStrn#mInterrupt.lower(mInterrupt.cTIMER) srclStrn4elseif mInterrupt.isPending(mInterrupt.cSERIAL) thensrclStrn'#if DebugBuild srclStrn 'logger.Log("INTERRUPT: SERIAL")srclStrn'#endif srclStrninterrupt_(&h58)srclStrn$mInterrupt.lower(mInterrupt.cSERIAL)srclStrn4elseif mInterrupt.isPending(mInterrupt.cJOYPAD) thensrclStrn'#if DebugBuild srclStrn 'logger.Log("INTERRUPT: JOYPAD")srclStrn'#endif srclStrninterrupt_(&h60)srclStrn$mInterrupt.lower(mInterrupt.cJOYPAD)srclStrnend if srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup0 nameStrn interrupt_ CompStrnVsblInt sorcGrup EncoInt srclStrn"Sub interrupt_(address as integer) srclStrn ime = false srclStrnmCall(Address) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnaddress as integer rsltStrnEndGInt MethGrup nameStrnexecute CompStrnVsblInt sorcGrup\ EncoInt srclStrn Sub execute() srclStrnexecute(fetch())srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupf nameStrnexecute CompStrnVsblInt sorcGrupf@ EncoInt srclStrnSub execute(opcode as integer) srclStrn'#if DebugBuild srclStrn'#pragma DisableBoundsChecking srclStrn'#pragma DisableBackgroundTasks srclStrn'logger.Log("PC="+hex(pc-1))srbpInt srclStrn'#endif srclStrnif opcode < &h40 then srclStrnselect case opcode srclStrn case &h00 srclStrn//nop srclStrnnop() srclStrn case &h08 srclStrn //LD (nnn),SP srclStrn load_mem_SP() srclStrn case &h10 srclStrn//STOP srclStrnstop() srclStrn case &h18 srclStrn//JR nn srclStrnjr_nn() srclStrn case &h20 srclStrn //JR cc,nn srclStrn jr_NZ_nn() srclStrn case &h28 srclStrn jr_Z_nn() srclStrn case &h30 srclStrn jr_NC_nn() srclStrn case &h38 srclStrn jr_C_nn() srclStrnsrclStrn case &h01 srclStrn //LD rr,nnnnsrclStrn ld_BC_nnnn()srclStrn case &h11 srclStrn ld_DE_nnnn()srclStrn case &h21 srclStrn ld_HL_nnnn()srclStrn case &h31 srclStrn ld_SP_nnnn()srclStrnsrclStrn case &h09 srclStrn //ADD HR,rr srclStrn add_HL_BC() srclStrn case &h19 srclStrn add_HL_DE() srclStrn case &h29 srclStrn add_HL_HL() srclStrn case &h39 srclStrn add_HL_SP() srclStrnsrclStrn case &h02 srclStrn //LD (BC),A srclStrn ld_BCi_A() srclStrn case &h0A srclStrn //LD A,(BC) srclStrn ld_A_BCi() srclStrn case &h12 srclStrn //LD (DE),A srclStrn ld_DEi_A() srclStrn case &h1A srclStrn //LD A,(DE) srclStrn load_A_DEi()srclStrn case &h22 srclStrn //LDI (HL),AsrclStrn ldi_HLi_A() srclStrn case &h2A srclStrn //LDI A,(HL)srclStrn ldi_A_HLi() srclStrn case &h32 srclStrn //LDD (HL),AsrclStrn ldd_HLi_A() srclStrn case &h3A srclStrn //LDD A,(HL)srclStrn ldd_A_HLi() srclStrnsrclStrn case &h03 srclStrn//INC rrsrclStrninc_BC()srclStrn case &h13 srclStrninc_DE()srclStrn case &h23 srclStrninc_HL()srclStrn case &h33 srclStrninc_SP()srclStrnsrclStrn case &h0B srclStrn//DEC rrsrclStrndec_BC()srclStrn case &h1B srclStrndec_DE()srclStrn case &h2B srclStrndec_HL()srclStrn case &h3B srclStrndec_SP()srclStrnsrclStrn case &h04 srclStrn//INC r srclStrninc_B() srclStrn case &h0C srclStrninc_C() srclStrn case &h14 srclStrninc_D() srclStrn case &h1C srclStrninc_E() srclStrn case &h24 srclStrninc_H() srclStrn case &h2C srclStrninc_L() srclStrn case &h34 srclStrn inc_HLi() srclStrn case &h3C srclStrninc_A() srclStrnsrclStrn case &h05 srclStrn//DEC r srclStrndec_B() srclStrn case &h0D srclStrndec_C() srclStrn case &h15 srclStrndec_D() srclStrn case &h1D srclStrndec_E() srclStrn case &h25 srclStrndec_H() srclStrn case &h2D srclStrndec_L() srclStrn case &h35 srclStrn dec_HLi() srclStrn case &h3D srclStrndec_A() srclStrnsrclStrn case &h06 srclStrn //LD r,nn srclStrn LD_B_nn() srclStrn case &h0E srclStrn LD_C_nn() srclStrn case &h16 srclStrn ld_D_nn() srclStrn case &h1E srclStrn ld_E_nn() srclStrn case &h26 srclStrn ld_H_nn() srclStrn case &h2E srclStrn ld_L_nn() srclStrn case &h36 srclStrn ld_HLi_nn() srclStrn case &h3E srclStrn ld_A_nn() srclStrnsrclStrn case &h07 srclStrnrlca() srclStrn case &h0F srclStrnrrca() srclStrn case &h17 srclStrnrla() srclStrn case &h1F srclStrnrra() srclStrn case &h27 srclStrndaa() srclStrn case &h2F srclStrncpl() srclStrn case &h37 srclStrnscf() srclStrn case &h3F srclStrnccf() srclStrn end select srclStrnelseif opcode<&h80 then srclStrnselect case opcode srclStrn case &h76 srclStrnhalt() srclStrn case &h40 srclStrn//LD r,ssrclStrnld_B_B()srclStrn case &h41 srclStrnld_B_C()srclStrn case &h42 srclStrnld_B_D()srclStrn case &h43 srclStrnld_B_E()srclStrn case &h44 srclStrnld_B_H()srclStrn case &h45 srclStrnld_B_L()srclStrn case &h46 srclStrn ld_B_HLi() srclStrn case &h47 srclStrnld_B_A()srclStrn case &h48 srclStrnld_C_B()srclStrn case &h49 srclStrnld_C_C()srclStrn case &h4A srclStrnld_C_D()srclStrn case &h4B srclStrnld_C_E()srclStrn case &h4C srclStrnld_C_H()srclStrn case &h4D srclStrnld_C_L()srclStrn case &h4E srclStrn ld_C_HLi() srclStrn case &h4F srclStrnld_C_A()srclStrn case &h50 srclStrnld_D_B()srclStrn case &h51 srclStrnld_D_C()srclStrn case &h52 srclStrnld_D_D()srclStrn case &h53 srclStrnld_D_E()srclStrn case &h54 srclStrnld_D_H()srclStrn case &h55 srclStrnld_D_L()srclStrn case &h56 srclStrn ld_D_HLi() srclStrn case &h57 srclStrnld_D_A()srclStrn case &h58 srclStrnld_E_B()srclStrn case &h59 srclStrnld_E_C()srclStrn case &h5A srclStrnld_E_D()srclStrn case &h5B srclStrnld_E_E()srclStrn case &h5C srclStrnld_E_H()srclStrn case &h5D srclStrnld_E_L()srclStrn case &h5E srclStrn ld_E_HLi() srclStrn case &h5F srclStrnld_E_A()srclStrn case &h60 srclStrnld_H_B()srclStrn case &h61 srclStrnld_H_C()srclStrn case &h62 srclStrnld_H_D()srclStrn case &h63 srclStrnld_H_E()srclStrn case &h64 srclStrnld_H_H()srclStrn case &h65 srclStrnld_H_L()srclStrn case &h66 srclStrn ld_H_HLi() srclStrn case &h67 srclStrnld_H_A()srclStrn case &h68 srclStrnld_L_B()srclStrn case &h69 srclStrnld_L_C()srclStrn case &h6A srclStrnld_L_D()srclStrn case &h6B srclStrnld_L_E()srclStrn case &h6C srclStrnld_L_H()srclStrn case &h6D srclStrnld_L_L()srclStrn case &h6E srclStrn ld_L_HLi() srclStrn case &h6F srclStrnld_L_A()srclStrn case &h70 srclStrn ld_HLi_B() srclStrn case &h71 srclStrn ld_HLi_C() srclStrn case &h72 srclStrn ld_HLi_D() srclStrn case &h73 srclStrn ld_HLi_E() srclStrn case &h74 srclStrn ld_HLi_H() srclStrn case &h75 srclStrn ld_HLi_L() srclStrn case &h77 srclStrn ld_HLi_A() srclStrn case &h78 srclStrnld_A_B()srclStrn case &h79 srclStrnld_A_C()srclStrn case &h7A srclStrnld_A_D()srclStrn case &h7B srclStrnld_A_E()srclStrn case &h7C srclStrnld_A_H()srclStrn case &h7D srclStrnld_A_L()srclStrn case &h7E srclStrn ld_A_HLi() srclStrn case &h7F srclStrnld_A_A()srclStrn end select srclStrnsrclStrnelseif opcode < &hC0 then srclStrnselect case opcode srclStrn case &h80 srclStrn //ADD A,r srclStrn add_A_B() srclStrn case &h81 srclStrn add_A_C() srclStrn case &h82 srclStrn add_A_D() srclStrn case &h83 srclStrn add_A_E() srclStrn case &h84 srclStrn add_A_H() srclStrn case &h85 srclStrn add_A_L() srclStrn case &h86 srclStrn add_A_HLi() srclStrn case &h87 srclStrn add_A_A() srclStrnsrclStrn case &h88 srclStrn //ADC A,r srclStrn adc_A_B() srclStrn case &h89 srclStrn adc_A_C() srclStrn case &h8A srclStrn adc_A_D() srclStrn case &h8B srclStrn adc_A_E() srclStrn case &h8C srclStrn adc_A_H() srclStrn case &h8D srclStrn adc_A_L() srclStrn case &h8E srclStrn adc_A_HLi() srclStrn case &h8F srclStrn adc_A_A() srclStrn case &h90 srclStrn //sub A,r srclStrn sub_A_B() srclStrn case &h91 srclStrn sub_A_C() srclStrn case &h92 srclStrn sub_A_D() srclStrn case &h93 srclStrn sub_A_E() srclStrn case &h94 srclStrn sub_A_H() srclStrn case &h95 srclStrn sub_A_L() srclStrn case &h96 srclStrn sub_A_HLi() srclStrn case &h97 srclStrn sub_A_A() srclStrnsrclStrn case &h98 srclStrn //SBC A,r srclStrn sbc_A_B() srclStrn case &h99 srclStrn sbc_A_C() srclStrn case &h9A srclStrn sbc_A_D() srclStrn case &h9B srclStrn sbc_A_E() srclStrn case &h9C srclStrn sbc_A_H() srclStrn case &h9D srclStrn sbc_A_L() srclStrn case &h9E srclStrn sbc_A_HLi() srclStrn case &h9F srclStrn sbc_A_A() srclStrnsrclStrn case &hA0 srclStrn //AND A,r srclStrn and_A_B() srclStrn case &hA1 srclStrn and_A_C() srclStrn case &hA2 srclStrn and_A_D() srclStrn case &hA3 srclStrn and_A_E() srclStrn case &hA4 srclStrn and_A_H() srclStrn case &hA5 srclStrn and_A_L() srclStrn case &hA6 srclStrn and_A_HLi() srclStrn case &hA7 srclStrn and_A_A() srclStrnsrclStrn case &hA8 srclStrn //XOR A,r srclStrn xor_A_B() srclStrn case &hA9 srclStrn xor_A_C() srclStrn case &hAA srclStrn xor_A_D() srclStrn case &hAB srclStrn xor_A_E() srclStrn case &hAC srclStrn xor_A_H() srclStrn case &hAD srclStrn xor_A_L() srclStrn case &hAE srclStrn xor_A_HLi() srclStrn case &hAF srclStrn xor_A_A() srclStrnsrclStrn case &hB0 srclStrn//OR A,rsrclStrnor_A_B()srclStrn case &hB1 srclStrnor_A_C()srclStrn case &hB2 srclStrnor_A_D()srclStrn case &hB3 srclStrnor_A_E()srclStrn case &hB4 srclStrnor_A_H()srclStrn case &hB5 srclStrnor_A_L()srclStrn case &hB6 srclStrn or_A_HLi() srclStrn case &hB7 srclStrnor_A_A()srclStrnsrclStrn case &hB8 srclStrn//CP A,rsrclStrncp_A_B()srclStrn case &hB9 srclStrncp_A_C()srclStrn case &hBA srclStrncp_A_D()srclStrn case &hBB srclStrncp_A_E()srclStrn case &hBC srclStrncp_A_H()srclStrn case &hBD srclStrncp_A_L()srclStrn case &hBE srclStrn cp_A_HLi() srclStrn case &hBF srclStrncp_A_A()srclStrn end select srclStrnelsesrclStrnselect case opcode srclStrn case &hC0 srclStrn//ret ccsrclStrnret_NZ()srclStrn case &hC8 srclStrnret_Z() srclStrn case &hD0 srclStrnret_NC()srclStrn case &hD8 srclStrnret_C() srclStrnsrclStrn case &hE0 srclStrn //LDH (nn),AsrclStrn ldh_mem_A() srclStrn case &hE8 srclStrn //ADD SP,nn srclStrn add_SP_nn() srclStrn case &hF0 srclStrn //ldh A,(nn)srclStrn ldh_A_mem() srclStrn case &hF8 srclStrn //LD HL,SP+nsrclStrn ld_HP_SP_nn() srclStrnsrclStrn case &hC1 srclStrn//POP rrsrclStrnpop_BC()srclStrn case &hD1 srclStrnpop_DE()srclStrn case &hE1 srclStrnpop_HL()srclStrn case &hF1 srclStrnpop_AF()srclStrnsrclStrn case &hC9 srclStrnret() srclStrn case &hD9 srclStrnreti() srclStrnsrclStrn case &hE9 srclStrn //LD PC,HL srclStrn ld_PC_HL() srclStrn case &hF9 srclStrn //LD SP,HL srclStrn ld_SP_HL() srclStrnsrclStrn case &hC2 srclStrn //JP cc,nnnnsrclStrn jp_NZ_nnnn()srclStrn case &hCA srclStrn jp_Z_nnnn() srclStrn case &hD2 srclStrn jp_NC_nnnn()srclStrn case &hDA srclStrn jp_C_nnnn() srclStrnsrclStrn case &hE2 srclStrn //ldh (C),A srclStrn ldh_Ci_A() srclStrn case &hEA srclStrn //LD (nnnn),A srclStrn ld_mem_A() srclStrn case &hF2 srclStrn //LDH A,(c) srclStrn ldh_A_Ci() srclStrn case &hFA srclStrn //LD A,(nnnn) srclStrn ld_A_mem() srclStrnsrclStrn case &hC3 srclStrn //JP nnnn srclStrn jp_nnnn() srclStrnsrclStrn case &hCB srclStrndim temp as integer = fetch() srclStrnif temp < &h40 then srclStrnselect case tempsrclStrn//RLC r srclStrn case &h00 srclStrnrlc_B() srclStrn case &h01 srclStrnrlc_C() srclStrn case &h02 srclStrnrlc_D() srclStrn case &h03 srclStrnrlc_E() srclStrn case &h04 srclStrnrlc_H() srclStrn case &h05 srclStrnrlc_L() srclStrn case &h06 srclStrn rlc_HLi() srclStrn case &h07 srclStrnrlc_A() srclStrnsrclStrn//RRC r srclStrn case &h08 srclStrnrrc_B() srclStrn case &h09 srclStrnrrc_C() srclStrn case &h0A srclStrnrrc_D() srclStrn case &h0B srclStrnrrc_E() srclStrn case &h0C srclStrnrrc_H() srclStrn case &h0D srclStrnrrc_L() srclStrn case &h0E srclStrn rrc_HLi() srclStrn case &h0F srclStrnrrc_A() srclStrnsrclStrn//RL r srclStrn case &h10 srclStrnrl_B() srclStrn case &h11 srclStrnrl_C() srclStrn case &h12 srclStrnrl_D() srclStrn case &h13 srclStrnrl_E() srclStrn case &h14 srclStrnrl_H() srclStrn case &h15 srclStrnrl_L() srclStrn case &h16 srclStrnrl_HLi()srclStrn case &h17 srclStrnrl_A() srclStrnsrclStrn//RR r srclStrn case &h18 srclStrnrr_B() srclStrn case &h19 srclStrnrr_C() srclStrn case &h1A srclStrnrr_D() srclStrn case &h1B srclStrnrr_E() srclStrn case &h1C srclStrnrr_H() srclStrn case &h1D srclStrnrr_L() srclStrn case &h1E srclStrnrr_HLi()srclStrn case &h1F srclStrnrr_A() srclStrnsrclStrn//SLA r srclStrn case &h20 srclStrnsla_B() srclStrn case &h21 srclStrnsla_C() srclStrn case &h22 srclStrnsla_D() srclStrn case &h23 srclStrnsla_E() srclStrn case &h24 srclStrnsla_H() srclStrn case &h25 srclStrnsla_L() srclStrn case &h26 srclStrn sla_HLi() srclStrn case &h27 srclStrnsla_A() srclStrnsrclStrn//SRA r srclStrn case &h28 srclStrnsra_B() srclStrn case &h29 srclStrnsra_C() srclStrn case &h2A srclStrnsra_D() srclStrn case &h2B srclStrnsra_E() srclStrn case &h2C srclStrnsra_H() srclStrn case &h2D srclStrnsra_L() srclStrn case &h2E srclStrn sra_HLi() srclStrn case &h2F srclStrnsra_A() srclStrnsrclStrn//swap rsrclStrn case &h30 srclStrnswap_B()srclStrn case &h31 srclStrnswap_C()srclStrn case &h32 srclStrnswap_D()srclStrn case &h33 srclStrnswap_E()srclStrn case &h34 srclStrnswap_H()srclStrn case &h35 srclStrnswap_L()srclStrn case &h36 srclStrn swap_HLi() srclStrn case &h37 srclStrnswap_A()srclStrnsrclStrn//SRL r srclStrn case &h38 srclStrnsrl_B() srclStrn case &h39 srclStrnsrl_C() srclStrn case &h3A srclStrnsrl_D() srclStrn case &h3B srclStrnsrl_E() srclStrn case &h3C srclStrnsrl_H() srclStrn case &h3D srclStrnsrl_L() srclStrn case &h3E srclStrn srl_HLi() srclStrn case &h3F srclStrnsrl_A() srclStrn end select srclStrnelseif temp < &h80 then srclStrnselect case tempsrclStrn case &h40 srclStrn //BIT 0,r srclStrnbit_B(0)srclStrn case &h41 srclStrnbit_C(0)srclStrn case &h42 srclStrnbit_D(0)srclStrn case &h43 srclStrnbit_E(0)srclStrn case &h44 srclStrnbit_H(0)srclStrn case &h45 srclStrnbit_L(0)srclStrn case &h46 srclStrn bit_HLi(0) srclStrn case &h47 srclStrnbit_A(0)srclStrnsrclStrn//BIT1,rsrclStrn case &h48 srclStrnbit_B(1)srclStrn case &h49 srclStrnbit_C(1)srclStrn case &h4A srclStrnbit_D(1)srclStrn case &h4B srclStrnbit_E(1)srclStrn case &h4C srclStrnbit_H(1)srclStrn case &h4D srclStrnbit_L(1)srclStrn case &h4E srclStrn bit_HLi(1) srclStrn case &h4F srclStrnbit_A(1)srclStrnsrclStrn //BIT 2,r srclStrn case &h50 srclStrnbit_B(2)srclStrn case &h51 srclStrnbit_C(2)srclStrn case &h52 srclStrnbit_D(2)srclStrn case &h53 srclStrnbit_E(2)srclStrn case &h54 srclStrnbit_H(2)srclStrn case &h55 srclStrnbit_L(2)srclStrn case &h56 srclStrn bit_HLi(2) srclStrn case &h57 srclStrnbit_A(2)srclStrnsrclStrn//BIT3,rsrclStrn case &h58 srclStrnbit_B(3)srclStrn case &h59 srclStrnbit_C(3)srclStrn case &h5A srclStrnbit_D(3)srclStrn case &h5B srclStrnbit_E(3)srclStrn case &h5C srclStrnbit_H(3)srclStrn case &h5D srclStrnbit_L(3)srclStrn case &h5E srclStrn bit_HLi(3) srclStrn case &h5F srclStrnbit_A(3)srclStrnsrclStrn //BIT 4,r srclStrn case &h60 srclStrnbit_B(4)srclStrn case &h61 srclStrnbit_C(4)srclStrn case &h62 srclStrnbit_D(4)srclStrn case &h63 srclStrnbit_E(4)srclStrn case &h64 srclStrnbit_H(4)srclStrn case &h65 srclStrnbit_L(4)srclStrn case &h66 srclStrn bit_HLi(4) srclStrn case &h67 srclStrnbit_A(4)srclStrnsrclStrn//BIT5,rsrclStrn case &h68 srclStrnbit_B(5)srclStrn case &h69 srclStrnbit_C(5)srclStrn case &h6A srclStrnbit_D(5)srclStrn case &h6B srclStrnbit_E(5)srclStrn case &h6C srclStrnbit_H(5)srclStrn case &h6D srclStrnbit_L(5)srclStrn case &h6E srclStrn bit_HLi(5) srclStrn case &h6F srclStrnbit_A(5)srclStrnsrclStrn //BIT 6,r srclStrn case &h70 srclStrnbit_B(6)srclStrn case &h71 srclStrnbit_C(6)srclStrn case &h72 srclStrnbit_D(6)srclStrn case &h73 srclStrnbit_E(6)srclStrn case &h74 srclStrnbit_H(6)srclStrn case &h75 srclStrnbit_L(6)srclStrn case &h76 srclStrn bit_HLi(6) srclStrn case &h77 srclStrnbit_A(6)srclStrnsrclStrn//BIT7,rsrclStrn case &h78 srclStrnbit_B(7)srclStrn case &h79 srclStrnbit_C(7)srclStrn case &h7A srclStrnbit_D(7)srclStrn case &h7B srclStrnbit_E(7)srclStrn case &h7C srclStrnbit_H(7)srclStrn case &h7D srclStrnbit_L(7)srclStrn case &h7E srclStrn bit_HLi(7) srclStrn case &h7F srclStrnbit_A(7)srclStrn end select srclStrnelsesrclStrnselect case tempsrclStrn case &hC0 srclStrn //SET 0,r srclStrnset_B(0)srclStrn case &hC1 srclStrnset_C(0)srclStrn case &hC2 srclStrnset_D(0)srclStrn case &hC3 srclStrnset_E(0)srclStrn case &hC4 srclStrnset_H(0)srclStrn case &hC5 srclStrnset_L(0)srclStrn case &hC6 srclStrn set_HLi(0) srclStrn case &hC7 srclStrnset_A(0)srclStrnsrclStrn //SET 1,r srclStrn case &hC8 srclStrnset_B(1)srclStrn case &hC9 srclStrnset_C(1)srclStrn case &hCA srclStrnset_D(1)srclStrn case &hCB srclStrnset_E(1)srclStrn case &hCC srclStrnset_H(1)srclStrn case &hCD srclStrnset_L(1)srclStrn case &hCE srclStrn set_HLi(1) srclStrn case &hCF srclStrnset_A(1)srclStrnsrclStrn //SET 2,r srclStrn case &hD0 srclStrnset_B(2)srclStrn case &hD1 srclStrnset_C(2)srclStrn case &hD2 srclStrnset_D(2)srclStrn case &hD3 srclStrnset_E(2)srclStrn case &hD4 srclStrnset_H(2)srclStrn case &hD5 srclStrnset_L(2)srclStrn case &hD6 srclStrn set_HLi(2) srclStrn case &hD7 srclStrnset_A(2)srclStrnsrclStrn //SET 3,r srclStrn case &hD8 srclStrnset_B(3)srclStrn case &hD9 srclStrnset_C(3)srclStrn case &hDA srclStrnset_D(3)srclStrn case &hDB srclStrnset_E(3)srclStrn case &hDC srclStrnset_H(3)srclStrn case &hDD srclStrnset_L(3)srclStrn case &hDE srclStrn set_HLi(3) srclStrn case &hDF srclStrnset_A(3)srclStrnsrclStrn //SET 4,r srclStrn case &hE0 srclStrnset_B(4)srclStrn case &hE1 srclStrnset_C(4)srclStrn case &hE2 srclStrnset_D(4)srclStrn case &hE3 srclStrnset_E(4)srclStrn case &hE4 srclStrnset_H(4)srclStrn case &hE5 srclStrnset_L(4)srclStrn case &hE6 srclStrn set_HLi(4) srclStrn case &hE7 srclStrnset_A(4)srclStrnsrclStrn //SET 5,r srclStrn case &hE8 srclStrnset_B(5)srclStrn case &hE9 srclStrnset_C(5)srclStrn case &hEA srclStrnset_D(5)srclStrn case &hEB srclStrnset_E(5)srclStrn case &hEC srclStrnset_H(5)srclStrn case &hED srclStrnset_L(5)srclStrn case &hEE srclStrn set_HLi(5) srclStrn case &hEF srclStrnset_A(5)srclStrnsrclStrn //SET 6,r srclStrn case &hF0 srclStrnset_B(6)srclStrn case &hF1 srclStrnset_C(6)srclStrn case &hF2 srclStrnset_D(6)srclStrn case &hF3 srclStrnset_E(6)srclStrn case &hF4 srclStrnset_H(6)srclStrn case &hF5 srclStrnset_L(6)srclStrn case &hF6 srclStrn set_HLi(6) srclStrn case &hF7 srclStrnset_A(6)srclStrnsrclStrn //SET 1,r srclStrn case &hF8 srclStrnset_B(6)srclStrn case &hF9 srclStrnset_C(6)srclStrn case &hFA srclStrnset_D(6)srclStrn case &hFB srclStrnset_E(6)srclStrn case &hFC srclStrnset_H(6)srclStrn case &hFD srclStrnset_L(6)srclStrn case &hFE srclStrn set_HLi(6) srclStrn case &hFF srclStrnset_A(6)srclStrnsrclStrn //RES 0,r srclStrn case &h80 srclStrnres_B(0)srclStrn case &h81 srclStrnres_C(0)srclStrn case &h82 srclStrnres_D(0)srclStrn case &h83 srclStrnres_E(0)srclStrn case &h84 srclStrnres_H(0)srclStrn case &h85 srclStrnres_L(0)srclStrn case &h86 srclStrn res_HLi(0) srclStrn case &h87 srclStrnres_A(0)srclStrnsrclStrn //RES 1,r srclStrn case &h88 srclStrnres_B(1)srclStrn case &h89 srclStrnres_C(1)srclStrn case &h8A srclStrnres_D(1)srclStrn case &h8B srclStrnres_E(1)srclStrn case &h8C srclStrnres_H(1)srclStrn case &h8D srclStrnres_L(1)srclStrn case &h8E srclStrn res_HLi(1) srclStrn case &h8F srclStrnres_A(1)srclStrnsrclStrn //RES 2,r srclStrn case &h90 srclStrnres_B(2)srclStrn case &h91 srclStrnres_C(2)srclStrn case &h92 srclStrnres_D(2)srclStrn case &h93 srclStrnres_E(2)srclStrn case &h94 srclStrnres_H(2)srclStrn case &h95 srclStrnres_L(2)srclStrn case &h96 srclStrn res_HLi(2) srclStrn case &h97 srclStrnres_A(2)srclStrnsrclStrn //RES 3,r srclStrn case &h98 srclStrnres_B(3)srclStrn case &h99 srclStrnres_C(3)srclStrn case &h9A srclStrnres_D(3)srclStrn case &h9B srclStrnres_E(3)srclStrn case &h9C srclStrnres_H(3)srclStrn case &h9D srclStrnres_L(3)srclStrn case &h9E srclStrn res_HLi(3) srclStrn case &h9F srclStrnres_A(3)srclStrnsrclStrn //RES 4,r srclStrn case &hA0 srclStrnres_B(4)srclStrn case &hA1 srclStrnres_C(4)srclStrn case &hA2 srclStrnres_D(4)srclStrn case &hA3 srclStrnres_E(4)srclStrn case &hA4 srclStrnres_H(4)srclStrn case &hA5 srclStrnres_L(4)srclStrn case &hA6 srclStrn res_HLi(4) srclStrn case &hA7 srclStrnres_A(4)srclStrnsrclStrn //RES 5,r srclStrn case &hA8 srclStrnres_B(5)srclStrn case &hA9 srclStrnres_C(5)srclStrn case &hAA srclStrnres_D(5)srclStrn case &hAB srclStrnres_E(5)srclStrn case &hAC srclStrnres_H(5)srclStrn case &hAD srclStrnres_L(5)srclStrn case &hAE srclStrn res_HLi(5) srclStrn case &hAF srclStrnres_A(5)srclStrnsrclStrn //RES 6,r srclStrn case &hB0 srclStrnres_B(6)srclStrn case &hB1 srclStrnres_C(6)srclStrn case &hB2 srclStrnres_D(6)srclStrn case &hB3 srclStrnres_E(6)srclStrn case &hB4 srclStrnres_H(6)srclStrn case &hB5 srclStrnres_L(6)srclStrn case &hB6 srclStrn res_HLi(6) srclStrn case &hB7 srclStrnres_A(6)srclStrnsrclStrn //RES 5,r srclStrn case &hB8 srclStrnres_B(7)srclStrn case &hB9 srclStrnres_C(7)srclStrn case &hBA srclStrnres_D(7)srclStrn case &hBB srclStrnres_E(7)srclStrn case &hBC srclStrnres_H(7)srclStrn case &hBD srclStrnres_L(7)srclStrn case &hBE srclStrn res_HLi(7) srclStrn case &hBF srclStrnres_A(7)srclStrn end select srclStrnend if srclStrn case &hF3 srclStrndi()srclStrn case &hFB srclStrnei()srclStrnsrclStrn case &hC4 srclStrn//CALL cc,nnnn srclStrncall_NZ_nnnn() srclStrn case &hCC srclStrn call_Z_nnnn() srclStrn case &hD4 srclStrncall_NZ_nnnn() srclStrn case &hDC srclStrn call_C_nnnn() srclStrnsrclStrn case &hC5 srclStrn //PUSH rr srclStrn push_BC() srclStrn case &hD5 srclStrn push_DE() srclStrn case &hE5 srclStrn push_HL() srclStrn case &hF5 srclStrn push_AF() srclStrnsrclStrn case &hCD srclStrn //CALL nnnn srclStrn call_nnnn() srclStrnsrclStrn case &hC6 srclStrn //ADD A,nn srclStrn add_A_nn() srclStrn case &hCE srclStrn adc_A_nn() srclStrn case &hD6 srclStrn sub_A_nn() srclStrn case &hDE srclStrn sbc_A_nn() srclStrn case &hE6 srclStrn and_A_nn() srclStrn case &hEE srclStrn xor_A_nn() srclStrn case &hF6 srclStrn or_A_nn() srclStrn case &hFE srclStrn cp_A_nn() srclStrnsrclStrn case &hC7 srclStrn//RST nnsrclStrn rst(&h00) srclStrn case &hCF srclStrn rst(&h08) srclStrn case &hD7 srclStrn rst(&h10) srclStrn case &hDF srclStrn rst(&h18) srclStrn case &hE7 srclStrn rst(&h20) srclStrn case &hEF srclStrn rst(&h28) srclStrn case &hF7 srclStrn rst(&h30) srclStrn case &hFF srclStrn rst(&h38) srclStrn end select srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnopcode as integer rsltStrnEndGInt MethGrup0 nameStrnreadCompStrnVsblInt sorcGrup EncoInt srclStrn,Function read(address as integer) As integersrclStrnreturn mMemory.read(Address)srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrup< nameStrnwrite CompStrnVsblInt sorcGrup EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnmMemory.write(address, data)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrupP nameStrnreadCompStrnVsblInt sorcGrup !EncoInt srclStrn6Function read(hi as integer, lo as integer) As integer srclStrn'return read(bitwise.ShiftLeft(hi,8)+lo) srclStrn End FunctionEndGInt !EncoInt AlasStrnflagInt !shrdInt parmStrnhi as integer, lo as integerrsltStrninteger EndGInt MethGrup\ "nameStrnwrite CompStrnVsblInt sorcGrup #EncoInt srclStrn8Sub write(hi as integer, lo as integer, data as integer)srclStrn'write(bitwise.ShiftLeft(hi,8)+lo, data) srclStrnEnd Sub EndGInt #EncoInt AlasStrnflagInt !shrdInt parmStrn-hi as integer, lo as integer, data as integer rsltStrnEndGInt "MethGrup $nameStrnfetch CompStrnVsblInt sorcGrup %EncoInt srclStrnFunction fetch() As integer srclStrnif pc <= &h3FFF thensrclStrn=dim rtn as integer = bitwise.BitAnd(mROM.UInt8Value(pc),&hFF) srclStrn pc = pc + 1 srclStrn Return rtn srclStrnend if srclStrnsrclStrn&dim data as integer = mMemory.read(pc) srclStrn#pc =bitwise.BitAnd( (pc+1) ,&hFFFF) srclStrn return data srclStrn End FunctionEndGInt %EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt $MethGrup< &nameStrnpushCompStrnVsblInt sorcGrup 'EncoInt srclStrnSub push(data as integer) srclStrn#sp = Bitwise.BitAnd((sp-1), &hFFFF) srclStrnmMemory.write(sp,data) srclStrnEnd Sub EndGInt 'EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt &MethGrup` (nameStrnpop CompStrnVsblInt sorcGrup )EncoInt srclStrnFunction pop() As integer srclStrn&dim data as integer = mMemory.read(sp) srclStrn"sp = Bitwise.BitAnd((sp+1),&hFFFF) srclStrn return data srclStrn End FunctionEndGInt )EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt (MethGrup< *nameStrnmCall CompStrnVsblInt sorcGrup +EncoInt srclStrnSub mCall(address as integer) srclStrn#if DebugBuild srclStrn;//this is bad and an infiate loop that over flows the stack srclStrnif Address = &h38 then breaksrclStrn //if Address > &hFF00 then breaksrclStrn#endif srclStrnpush(Bitwise.ShiftRight(pc,8)) srclStrnpush(Bitwise.BitAnd(pc, &hFF)) srclStrn pc = addresssrclStrnsrclStrnEnd Sub EndGInt +EncoInt AlasStrnflagInt !shrdInt parmStrnaddress as integer rsltStrnEndGInt *MethGrup ,nameStrnadd CompStrnVsblInt sorcGrup -EncoInt srclStrnSub add(data as integer)srclStrn0dim s as integer = Bitwise.BitAnd((a+data),&hFF)srclStrnsrclStrndim temp as integer srclStrn if s=0 then srclStrn temp =Z_FLAGsrclStrnend if srclStrn if s < a then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrn9if (Bitwise.BitAnd(s,&h0F) < Bitwise.BitAnd(a,&h0F)) then srclStrntemp = temp + H_FLAGsrclStrnend if srclStrnsrclStrnf = tempsrclStrnsrclStrna = s srclStrnEnd Sub EndGInt -EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt ,MethGrup .nameStrnadc CompStrnVsblInt sorcGrupH /EncoInt srclStrnSub adc(data as integer)srclStrnHdim s as integer = a+data+bitwise.ShiftRight(Bitwise.BitAnd(f,C_FLAG),4)srclStrnsrclStrndim temp as integer srclStrn if Bitwise.BitAnd(s,&hFF)=0 thensrclStrn temp = Z_FLAG srclStrnend if srclStrnif s>= &h100 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrn:if Bitwise.BitAnd(Bitwise.BitXor(s,a,data),&h10) <> 0 then srclStrntemp = temp + H_FLAGsrclStrnend if srclStrnsrclStrnf = tempsrclStrnsrclStrna = Bitwise.BitAnd(s,&hFF) srclStrnEnd Sub EndGInt /EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt .MethGrup 0nameStrnmSubCompStrnVsblInt sorcGrup 1EncoInt srclStrnSub mSub(data as integer) srclStrn1dim s as integer = Bitwise.BitAnd((a-data), &hFF) srclStrndim temp as integer srclStrn if s=0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn if s>a then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrn9if (Bitwise.BitAnd(s,&h0F) > Bitwise.BitAnd(a,&h0F)) then srclStrntemp = temp + H_FLAGsrclStrnend if srclStrntemp = temp + N_FLAGsrclStrnf = tempsrclStrna = s srclStrnEnd Sub EndGInt 1EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt 0MethGrup 2nameStrnsbc CompStrnVsblInt sorcGrupt 3EncoInt srclStrnSub sbc(data as integer)srclStrnLdim s as integer = a - data - Bitwise.ShiftRight(Bitwise.BitAnd(f,C_FLAG),4)srclStrnsrclStrndim temp as integer srclStrn"if Bitwise.BitAnd(s,&hFF) = 0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn%if Bitwise.BitAnd(s,&hFF00) <> 0 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrn8if Bitwise.BitAnd(Bitwise.BitXor(s,a,data),&h10)<>0 thensrclStrntemp = temp + H_FLAGsrclStrnend if srclStrntemp = temp + N_FLAGsrclStrnsrclStrnf = tempsrclStrna = Bitwise.BitAnd(s,&hFF) srclStrnEnd Sub EndGInt 3EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt 2MethGrupp 4nameStrnand_CompStrnVsblInt sorcGrup 5EncoInt srclStrnSub and_(data as integer) srclStrna = Bitwise.BitAnd(a,data) srclStrn if a=0 then srclStrnf=Z_FLAGsrclStrnelsesrclStrnf=0 srclStrnend if srclStrnEnd Sub EndGInt 5EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt 4MethGrupp 6nameStrnxor_CompStrnVsblInt sorcGrup 7EncoInt srclStrnSub xor_(data as integer) srclStrna = Bitwise.BitXor(a,data) srclStrn if a=0 then srclStrnf=Z_FLAGsrclStrnelsesrclStrnf=0 srclStrnend if srclStrnEnd Sub EndGInt 7EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt 6MethGrup 8nameStrnor_ CompStrnVsblInt sorcGrup 9EncoInt srclStrnSub or_(data as integer)srclStrna = Bitwise.BitOr(a,data) srclStrnsrclStrn if a = 0 then srclStrn f = Z_FLAG srclStrnelsesrclStrnf=0 srclStrnend if srclStrnEnd Sub EndGInt 9EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt 8MethGrup :nameStrncp CompStrnVsblInt sorcGrup ;EncoInt srclStrnSub cp(data as integer) srclStrn.dim s as Integer = Bitwise.BitAnd(a-data,&hFF) srclStrnsrclStrndim temp as integer srclStrn if s=0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn if s>a then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrn7if Bitwise.BitAnd(s,&h0F) > Bitwise.BitAnd(a,&h0F) then srclStrntemp = temp +H_FLAG srclStrnend if srclStrntemp = temp + N_FLAGsrclStrnsrclStrnf = tempsrclStrnEnd Sub EndGInt ;EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt :MethGrupp nameStrndec CompStrnVsblInt sorcGrup ?EncoInt srclStrn(Function dec(data as integer) As integersrclStrn"data = Bitwise.BitAnd(data-1,&hFF) srclStrnsrclStrndim temp as integer srclStrnif data = 0 thensrclStrn temp = Z_FLAG srclStrnend if srclStrn(if Bitwise.BitAnd(data,&h0F) = &h0F thensrclStrntemp = temp + H_FLAGsrclStrnend if srclStrn/temp = temp + Bitwise.BitAnd(f,C_FLAG) + N_FLAG srclStrnf = tempsrclStrn return data srclStrn End FunctionEndGInt ?EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt >MethGrup @nameStrnrlc CompStrnVsblInt sorcGrup AEncoInt srclStrn(Function rlc(data as integer) As integersrclStrnsdim s as integer = Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h7F),1) + Bitwise.ShiftRight(Bitwise.BitAnd(data,&h80),7) srclStrndim temp as integer srclStrn if s = 0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn)if Bitwise.BitAnd(data,&h80) <> &h00 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt AEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt @MethGrup BnameStrnrl CompStrnVsblInt sorcGrup CEncoInt srclStrn'Function rl(data as integer) As integer srclStrnAdim s as integer = Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h7F),1) srclStrn#if Bitwise.BitAnd(f,C_FLAG) >0 then srclStrn s = s+&h01 srclStrnend if srclStrndim temp as integer srclStrn if s = 0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn)if Bitwise.BitAnd(data,&h80) <> &h00 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt CEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt BMethGrupl DnameStrnrrc CompStrnVsblInt sorcGrup EEncoInt srclStrn(Function rrc(data as integer) As integersrclStrn^dim s as integer = Bitwise.ShiftRight(data,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h01),7) srclStrndim temp as integer srclStrn if s = 0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn)if Bitwise.BitAnd(data,&h01) <> &h00 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt EEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt DMethGrupl FnameStrnrr CompStrnVsblInt sorcGrup GEncoInt srclStrn'Function rr(data as integer) As integer srclStrn]dim s as integer = Bitwise.ShiftRight(data,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(f,C_FLAG),3) srclStrndim temp as integer srclStrn if s = 0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn)if Bitwise.BitAnd(data,&h01) <> &h00 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt GEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt FMethGrup` HnameStrnsla CompStrnVsblInt sorcGrup IEncoInt srclStrn(Function sla(data as integer) As integersrclStrnAdim s as integer = Bitwise.BitAnd(Bitwise.ShiftLeft(data,1),&hFF) srclStrnsrclStrndim temp as integer srclStrn if s=0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn'if Bitwise.BitAnd(data, &h80) <> 0 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnsrclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt IEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt HMethGrup| JnameStrnsra CompStrnVsblInt sorcGrup KEncoInt srclStrn(Function sra(data as integer) As integersrclStrn_dim s as integer = Bitwise.BitAnd(Bitwise.ShiftRight(data,1),&h80) + Bitwise.BitAnd(data, &h80) srclStrnsrclStrndim temp as integer srclStrn if s=0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn'if Bitwise.BitAnd(data, &h01) <> 0 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnsrclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt JMethGrup@ LnameStrnsrl CompStrnVsblInt sorcGrup MEncoInt srclStrn(Function srl(data as integer) As integersrclStrn-dim s as integer = Bitwise.ShiftRight(data,1) srclStrndim temp as integer srclStrn if s=0 then srclStrn temp = Z_FLAG srclStrnend if srclStrn'if Bitwise.BitAnd(data, &h01) <> 0 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnsrclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt MEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt LMethGrup, NnameStrnswapCompStrnVsblInt sorcGrup OEncoInt srclStrn)Function swap(data as integer) As integer srclStrnsdim s as integer = Bitwise.BitAnd(Bitwise.ShiftLeft(data,4),&hF0) + Bitwise.BitAnd(Bitwise.ShiftRight(data,4),&h0F) srclStrnsrclStrndim temp as integer srclStrn if s=0 then srclStrn temp = Z_FLAG srclStrnend if srclStrnsrclStrnf = tempsrclStrnreturn ssrclStrn End FunctionEndGInt OEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrninteger EndGInt NMethGrup PnameStrnbit CompStrnVsblInt sorcGrupD QEncoInt srclStrn&Sub bit(n as integer, data as integer) srclStrndim temp as integer srclStrnsrclStrn(temp = Bitwise.BitAnd(f,C_FLAG) + H_FLAGsrclStrn5if Bitwise.BitAnd(data,Bitwise.ShiftLeft(1,n))=0 then srclStrntemp = temp + Z_FLAGsrclStrnend if srclStrnf = tempsrclStrnEnd Sub EndGInt QEncoInt AlasStrnflagInt !shrdInt parmStrnn as integer, data as integer rsltStrnEndGInt PMethGrup RnameStrnadd CompStrnVsblInt sorcGrupx SEncoInt srclStrn%Sub add(hi as integer, lo as integer) srclStrnddim s as integer = Bitwise.BitAnd(Bitwise.ShiftLeft(h,8) + l + Bitwise.ShiftLeft(hi,8) + lo, &hFFFF)srclStrnsrclStrndim temp as integer srclStrntemp = Bitwise.BitAnd(F,Z_FLAG) srclStrnMif Bitwise.BitAnd(Bitwise.ShiftRight(s,8),&h0F) < Bitwise.BitAnd(h,&h0F) then srclStrntemp = temp+H_FLAG srclStrnend if srclStrn&if s < Bitwise.ShiftLeft(h,8) + l then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnf = tempsrclStrnl=Bitwise.BitAnd(s,&hFF)srclStrnh=Bitwise.ShiftRight(s,8) srclStrnEnd Sub EndGInt SEncoInt AlasStrnflagInt !shrdInt parmStrnhi as integer, lo as integerrsltStrnEndGInt RMethGrup TnameStrnld_B_B CompStrnVsblInt sorcGrupp UEncoInt srclStrn Sub ld_B_B()srclStrn//b=b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt UEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt TMethGrup VnameStrnld_B_C CompStrnVsblInt sorcGrupp WEncoInt srclStrn Sub ld_B_C()srclStrnb = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt WEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt VMethGrup XnameStrnld_B_D CompStrnVsblInt sorcGrupp YEncoInt srclStrn Sub ld_B_D()srclStrnb = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt YEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt XMethGrup ZnameStrnld_B_E CompStrnVsblInt sorcGrupp [EncoInt srclStrn Sub ld_B_E()srclStrnb = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt [EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ZMethGrup \nameStrnld_B_H CompStrnVsblInt sorcGrupp ]EncoInt srclStrn Sub ld_B_H()srclStrnb = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt ]EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt \MethGrup ^nameStrnld_B_L CompStrnVsblInt sorcGrupp _EncoInt srclStrn Sub ld_B_L()srclStrnb = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt _EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ^MethGrup `nameStrnld_B_A CompStrnVsblInt sorcGrupp aEncoInt srclStrn Sub ld_B_A()srclStrnb = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt aEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt `MethGrup bnameStrnld_C_B CompStrnVsblInt sorcGrupp cEncoInt srclStrn Sub ld_C_B()srclStrnc = b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt cEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt bMethGrup dnameStrnld_C_C CompStrnVsblInt sorcGrupp eEncoInt srclStrn Sub ld_C_C()srclStrn//c = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt eEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt dMethGrup fnameStrnld_C_D CompStrnVsblInt sorcGrupp gEncoInt srclStrn Sub ld_C_D()srclStrnc = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt gEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt fMethGrup hnameStrnld_C_E CompStrnVsblInt sorcGrupp iEncoInt srclStrn Sub ld_C_E()srclStrnc = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt iEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt hMethGrup jnameStrnld_C_H CompStrnVsblInt sorcGrupp kEncoInt srclStrn Sub ld_C_H()srclStrnc = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt kEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt jMethGrup lnameStrnld_C_L CompStrnVsblInt sorcGrupp mEncoInt srclStrn Sub ld_C_L()srclStrnc = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt mEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt lMethGrup nnameStrnld_C_A CompStrnVsblInt sorcGrupp oEncoInt srclStrn Sub ld_C_A()srclStrnc = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt oEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt nMethGrup pnameStrnld_D_B CompStrnVsblInt sorcGrupp qEncoInt srclStrn Sub ld_D_B()srclStrnd = b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt qEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt pMethGrup rnameStrnld_D_C CompStrnVsblInt sorcGrupp sEncoInt srclStrn Sub ld_D_C()srclStrnd = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt sEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt rMethGrup tnameStrnld_D_D CompStrnVsblInt sorcGrupp uEncoInt srclStrn Sub ld_D_D()srclStrn//d = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt uEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt tMethGrup vnameStrnld_D_E CompStrnVsblInt sorcGrupp wEncoInt srclStrn Sub ld_D_E()srclStrnd = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt wEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt vMethGrup xnameStrnld_D_H CompStrnVsblInt sorcGrupp yEncoInt srclStrn Sub ld_D_H()srclStrnd = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt yEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt xMethGrup znameStrnld_D_L CompStrnVsblInt sorcGrupp {EncoInt srclStrn Sub ld_D_L()srclStrnd = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt {EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt zMethGrup |nameStrnld_D_A CompStrnVsblInt sorcGrupp }EncoInt srclStrn Sub ld_D_A()srclStrnd = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt }EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt |MethGrup ~nameStrnld_E_B CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_B()srclStrne = b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ~MethGrup nameStrnld_E_C CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_C()srclStrne = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_D CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_D()srclStrne = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_E CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_E()srclStrn//e = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_H CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_H()srclStrne = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_L CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_L()srclStrne = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_A CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_E_A()srclStrne = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_B CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_B()srclStrnh = b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_C CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_C()srclStrnh = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_D CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_D()srclStrnh = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_E CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_E()srclStrnh = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_H CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_H()srclStrn//h = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_L CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_L()srclStrnh = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_A CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_H_A()srclStrnh = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_B CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_B()srclStrnl = b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_C CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_C()srclStrnl = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_D CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_D()srclStrnl = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_E CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_E()srclStrnl = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_H CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_H()srclStrnl = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_L CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_L()srclStrn//l = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_A CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_L_A()srclStrnl = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_B CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_B()srclStrna = b srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_D CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_D()srclStrna = d srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_C CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_C()srclStrna = c srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_E CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_E()srclStrna = e srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_H CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_H()srclStrna = h srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_L CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_L()srclStrna = l srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_A CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub ld_A_A()srclStrn//a = a srclStrncycles = cycles -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_B_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_B_nn() srclStrn b = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_C_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_C_nn() srclStrn c = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_D_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_D_nn() srclStrn d = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_E_nn() srclStrn e = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_H_nn() srclStrn h = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_L_nn() srclStrn l = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_nn CompStrnVsblInt sorcGrupx EncoInt srclStrn Sub ld_A_nn() srclStrn a = fetch() srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_B_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_B_HLi() srclStrn b = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_C_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_C_HLi() srclStrn c = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_D_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_D_HLi() srclStrn d = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_E_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_E_HLi() srclStrn E = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_H_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_H_HLi() srclStrn h = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_L_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_L_HLi() srclStrn l = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_HLiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_A_HLi() srclStrn a = read(h,l) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_BCompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_B() srclStrn write(h,l,b)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_CCompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_C() srclStrn write(h,l,c)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_DCompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_D() srclStrn write(h,l,d)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_ECompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_E() srclStrn write(h,l,e)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_HCompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_H() srclStrn write(h,l,h)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_LCompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_L() srclStrn write(h,l,l)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_HLi_ACompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_HLi_A() srclStrn write(h,l,a)srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ld_HLi_nn CompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_HLi_nn() srclStrnwrite(h,l,fetch()) srclStrncycles = cycles -3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_A_BCiCompStrnVsblInt sorcGrup| EncoInt srclStrnSub ld_A_BCi() srclStrn a = read(b,c) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn load_A_DEi CompStrnVsblInt sorcGrup| EncoInt srclStrnSub load_A_DEi()srclStrn a = read(d,e) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrnld_A_memCompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_A_mem() srclStrndim lo as Integer = fetch() srclStrndim hi as integer = fetch() srclStrna = read(hi, lo)srclStrncycles = cycles -4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_BCi_ACompStrnVsblInt sorcGrupx EncoInt srclStrnSub ld_BCi_A() srclStrn write(b,c,a)srclStrncycles = cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_DEi_ACompStrnVsblInt sorcGrupt EncoInt srclStrnSub ld_DEi_A() srclStrn Write(d,e,a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn load_mem_SP CompStrnVsblInt sorcGrupt EncoInt srclStrnSub load_mem_SP() srclStrndim lo as integer = fetch() srclStrndim hi as Integer = fetch() srclStrn3dim address as integer = Bitwise.ShiftLeft(hi,8)+lo srclStrn&write(Address,Bitwise.BitAnd(sp,&hFF)) srclStrn@write(Bitwise.BitAnd(Address+1,&hFFFF),Bitwise.ShiftRight(sp,8))srclStrncycles = cycles -5 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrnld_mem_ACompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_mem_A() srclStrndim lo as integer = fetch() srclStrndim hi as Integer = fetch() srclStrnWrite(hi, lo, a)srclStrncycles = cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ldh_A_mem CompStrnVsblInt sorcGrup EncoInt srclStrnSub ldh_A_mem() srclStrna = read(&hFF00 + fetch()) srclStrncycles = cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ldh_mem_A CompStrnVsblInt sorcGrup EncoInt srclStrnSub ldh_mem_A() srclStrnwrite(&hFF00 + fetch(), a) srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnldh_A_CiCompStrnVsblInt sorcGrup EncoInt srclStrnSub ldh_A_Ci() srclStrna = read(&hFF00 + c)srclStrncycles = cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnldh_Ci_ACompStrnVsblInt sorcGrup EncoInt srclStrnSub ldh_Ci_A() srclStrnwrite(&hFF00 + c,a) srclStrncycles = cycles -2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ldi_HLi_A CompStrnVsblInt sorcGrup EncoInt srclStrnSub ldi_HLi_A() srclStrn write(h,l,a)srclStrnl=Bitwise.BitAnd(l+1,&hFF) srclStrn if l=0 then srclStrnh=Bitwise.BitAnd(h+1,&hFF) srclStrnend if srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGruph nameStrn ldi_A_HLi CompStrnVsblInt sorcGrup EncoInt srclStrnSub ldi_A_HLi() srclStrn a = read(h,l) srclStrnl = Bitwise.BitAnd(l+1,&hFF)srclStrn&if l=0 then h=Bitwise.BitAnd(h+1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGruph nameStrn ldd_HLi_A CompStrnVsblInt sorcGrup EncoInt srclStrnSub ldd_HLi_A() srclStrn write(h,l,a)srclStrnl=Bitwise.BitAnd(l-1,&hFF) srclStrn)if l=&hFF then h=Bitwise.BitAnd(h-1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupl nameStrn ldd_A_HLi CompStrnVsblInt sorcGrup EncoInt srclStrnSub ldd_A_HLi() srclStrn a = read(h,l) srclStrnl=Bitwise.BitAnd(l-1,&hFF) srclStrn)if l=&hFF then h=Bitwise.BitAnd(h-1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ld_BC_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_BC_nnnn()srclStrn c=fetch() srclStrn b=fetch() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ld_DE_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_DE_nnnn()srclStrn e=fetch() srclStrn d=fetch() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ld_HL_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_HL_nnnn()srclStrn l=fetch() srclStrn h=fetch() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupl nameStrn ld_SP_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_SP_nnnn()srclStrndim lo as integer =fetch() srclStrndim hi as integer=fetch() srclStrnsp = Bitwise.ShiftLeft(hi,8)+lo srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_SP_HLCompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_SP_HL() srclStrnsp = Bitwise.ShiftLeft(h,8)+l srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpush_BC CompStrnVsblInt sorcGrup EncoInt srclStrn Sub push_BC() srclStrnpush(b) srclStrnpush(c) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpush_DE CompStrnVsblInt sorcGrup EncoInt srclStrn Sub push_DE() srclStrnpush(d) srclStrnpush(e) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpush_HL CompStrnVsblInt sorcGrup EncoInt srclStrn Sub push_HL() srclStrnpush(h) srclStrnpush(l) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpush_AF CompStrnVsblInt sorcGrup EncoInt srclStrn Sub push_AF() srclStrnpush(a) srclStrnpush(f) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpop_BC CompStrnVsblInt sorcGrup EncoInt srclStrn Sub pop_BC()srclStrnc=pop() srclStrnb=pop() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpop_DE CompStrnVsblInt sorcGrup EncoInt srclStrn Sub pop_DE()srclStrne=pop() srclStrnd=pop() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpop_HL CompStrnVsblInt sorcGrup EncoInt srclStrn Sub pop_HL()srclStrnl=pop() srclStrnh=pop() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnpop_AF CompStrnVsblInt sorcGrup EncoInt srclStrn Sub pop_AF()srclStrnf=pop() srclStrna=pop() srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnadd_A_B CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub add_A_B() srclStrnadd(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnadd_A_C CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub add_A_C() srclStrnadd(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnadd_A_D CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub add_A_D() srclStrnadd(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnadd_A_E CompStrnVsblInt sorcGrupp !EncoInt srclStrn Sub add_A_E() srclStrnadd(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt !EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup "nameStrnadd_A_H CompStrnVsblInt sorcGrupp #EncoInt srclStrn Sub add_A_H() srclStrnadd(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt #EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt "MethGrup $nameStrnadd_A_L CompStrnVsblInt sorcGrupp %EncoInt srclStrn Sub add_A_L() srclStrnadd(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt %EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt $MethGrup &nameStrnadd_A_A CompStrnVsblInt sorcGrupp 'EncoInt srclStrn Sub add_A_A() srclStrnadd(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt 'EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt &MethGrup (nameStrnadd_A_nnCompStrnVsblInt sorcGrupt )EncoInt srclStrnSub add_A_nn() srclStrn add(fetch())srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt )EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt (MethGrup *nameStrn add_A_HLi CompStrnVsblInt sorcGrupx +EncoInt srclStrnSub add_A_HLi() srclStrnadd(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt +EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt *MethGrup ,nameStrnadc_A_B CompStrnVsblInt sorcGrupp -EncoInt srclStrn Sub adc_A_B() srclStrnadc(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt -EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ,MethGrup .nameStrnadc_A_C CompStrnVsblInt sorcGrupp /EncoInt srclStrn Sub adc_A_C() srclStrnadc(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt /EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt .MethGrup 0nameStrnadc_A_D CompStrnVsblInt sorcGrupp 1EncoInt srclStrn Sub adc_A_D() srclStrnadc(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt 1EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 0MethGrup 2nameStrnadc_A_E CompStrnVsblInt sorcGrupp 3EncoInt srclStrn Sub adc_A_E() srclStrnadc(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt 3EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 2MethGrup 4nameStrnadc_A_H CompStrnVsblInt sorcGrupp 5EncoInt srclStrn Sub adc_A_H() srclStrnadc(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt 5EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 4MethGrup 6nameStrnadc_A_L CompStrnVsblInt sorcGrupp 7EncoInt srclStrn Sub adc_A_L() srclStrnadc(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt 7EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 6MethGrup 8nameStrnadc_A_A CompStrnVsblInt sorcGrupp 9EncoInt srclStrn Sub adc_A_A() srclStrnadc(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt 9EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 8MethGrup :nameStrnadc_A_nnCompStrnVsblInt sorcGrupt ;EncoInt srclStrnSub adc_A_nn() srclStrn adc(fetch())srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt ;EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt :MethGrup nameStrnsub_A_B CompStrnVsblInt sorcGrupp ?EncoInt srclStrn Sub sub_A_B() srclStrnmSub(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt ?EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt >MethGrup @nameStrnsub_A_C CompStrnVsblInt sorcGrupp AEncoInt srclStrn Sub sub_A_C() srclStrnmSub(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt AEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt @MethGrup BnameStrnsub_A_D CompStrnVsblInt sorcGrupp CEncoInt srclStrn Sub sub_A_D() srclStrnmSub(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt CEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt BMethGrup DnameStrnsub_A_E CompStrnVsblInt sorcGrupp EEncoInt srclStrn Sub sub_A_E() srclStrnmSub(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt DMethGrup FnameStrnsub_A_H CompStrnVsblInt sorcGrupp GEncoInt srclStrn Sub sub_A_H() srclStrnmSub(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt GEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt FMethGrup HnameStrnsub_A_L CompStrnVsblInt sorcGrupp IEncoInt srclStrn Sub sub_A_L() srclStrnmSub(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt IEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt HMethGrup JnameStrnsub_A_A CompStrnVsblInt sorcGrupp KEncoInt srclStrn Sub sub_A_A() srclStrnmSub(A) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt JMethGrup LnameStrnsub_A_nnCompStrnVsblInt sorcGrupx MEncoInt srclStrnSub sub_A_nn() srclStrn mSub(fetch()) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt MEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt LMethGrup NnameStrn sub_A_HLi CompStrnVsblInt sorcGrupx OEncoInt srclStrnSub sub_A_HLi() srclStrnmSub(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt OEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt NMethGrup PnameStrnsbc_A_B CompStrnVsblInt sorcGrupp QEncoInt srclStrn Sub sbc_A_B() srclStrnsbc(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt QEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt PMethGrup RnameStrnsbc_A_C CompStrnVsblInt sorcGrupp SEncoInt srclStrn Sub sbc_A_C() srclStrnsbc(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt SEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt RMethGrup TnameStrnsbc_A_D CompStrnVsblInt sorcGrupp UEncoInt srclStrn Sub sbc_A_D() srclStrnsbc(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt UEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt TMethGrup VnameStrnsbc_A_E CompStrnVsblInt sorcGrupp WEncoInt srclStrn Sub sbc_A_E() srclStrnsbc(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt WEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt VMethGrup XnameStrnsbc_A_H CompStrnVsblInt sorcGrupp YEncoInt srclStrn Sub sbc_A_H() srclStrnsbc(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt YEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt XMethGrup ZnameStrnsbc_A_L CompStrnVsblInt sorcGrupp [EncoInt srclStrn Sub sbc_A_L() srclStrnsbc(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt [EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ZMethGrup \nameStrnsbc_A_A CompStrnVsblInt sorcGrupp ]EncoInt srclStrn Sub sbc_A_A() srclStrnsbc(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt ]EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt \MethGrup ^nameStrnsbc_A_nnCompStrnVsblInt sorcGrupt _EncoInt srclStrnSub sbc_A_nn() srclStrn sbc(fetch())srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt _EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ^MethGrup `nameStrn sbc_A_HLi CompStrnVsblInt sorcGrupx aEncoInt srclStrnSub sbc_A_HLi() srclStrnsbc(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt aEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt `MethGrup bnameStrnand_A_B CompStrnVsblInt sorcGrupp cEncoInt srclStrn Sub and_A_B() srclStrnand_(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt cEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt bMethGrup dnameStrnand_A_C CompStrnVsblInt sorcGrupp eEncoInt srclStrn Sub and_A_C() srclStrnand_(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt eEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt dMethGrup fnameStrnand_A_D CompStrnVsblInt sorcGrupp gEncoInt srclStrn Sub and_A_D() srclStrnand_(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt gEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt fMethGrup hnameStrnand_A_E CompStrnVsblInt sorcGrupp iEncoInt srclStrn Sub and_A_E() srclStrnand_(E) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt iEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt hMethGrup jnameStrnand_A_H CompStrnVsblInt sorcGrupp kEncoInt srclStrn Sub and_A_H() srclStrnand_(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt kEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt jMethGrup lnameStrnand_A_L CompStrnVsblInt sorcGrupp mEncoInt srclStrn Sub and_A_L() srclStrnand_(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt mEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt lMethGrup nnameStrnand_A_A CompStrnVsblInt sorcGrupp oEncoInt srclStrn Sub and_A_A() srclStrnand_(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt oEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt nMethGrup pnameStrnand_A_nnCompStrnVsblInt sorcGrupx qEncoInt srclStrnSub and_A_nn() srclStrn and_(fetch()) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt qEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt pMethGrup rnameStrn and_A_HLi CompStrnVsblInt sorcGrupx sEncoInt srclStrnSub and_A_HLi() srclStrnand_(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt sEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt rMethGrup tnameStrnxor_A_B CompStrnVsblInt sorcGrupp uEncoInt srclStrn Sub xor_A_B() srclStrnxor_(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt uEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt tMethGrup vnameStrnxor_A_C CompStrnVsblInt sorcGrupp wEncoInt srclStrn Sub xor_A_C() srclStrnxor_(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt wEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt vMethGrup xnameStrnxor_A_D CompStrnVsblInt sorcGrupp yEncoInt srclStrn Sub xor_A_D() srclStrnxor_(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt yEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt xMethGrup znameStrnxor_A_E CompStrnVsblInt sorcGrupp {EncoInt srclStrn Sub xor_A_E() srclStrnxor_(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt {EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt zMethGrup |nameStrnxor_A_H CompStrnVsblInt sorcGrupp }EncoInt srclStrn Sub xor_A_H() srclStrnxor_(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt }EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt |MethGrup ~nameStrnxor_A_L CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub xor_A_L() srclStrnxor_(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ~MethGrup nameStrnxor_A_A CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub xor_A_A() srclStrnxor_(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnxor_A_nnCompStrnVsblInt sorcGrupx EncoInt srclStrnSub xor_A_nn() srclStrn xor_(fetch()) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn xor_A_HLi CompStrnVsblInt sorcGrupx EncoInt srclStrnSub xor_A_HLi() srclStrnxor_(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_B CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_B()srclStrnor_(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_C CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_C()srclStrnor_(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_D CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_D()srclStrnor_(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_E CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_E()srclStrnor_(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_H CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_H()srclStrnor_(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_L CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_L()srclStrnor_(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_A CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub or_A_A()srclStrnor_(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_nn CompStrnVsblInt sorcGrupt EncoInt srclStrn Sub or_A_nn() srclStrn or_(fetch())srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnor_A_HLiCompStrnVsblInt sorcGrupx EncoInt srclStrnSub or_A_HLi() srclStrnor_(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_B CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_B()srclStrncp(b) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_C CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_C()srclStrncp(c) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_D CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_D()srclStrncp(d) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_E CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_E()srclStrncp(e) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_H CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_H()srclStrncp(h) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_L CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_L()srclStrncp(l) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_A CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub cp_A_A()srclStrncp(a) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_nn CompStrnVsblInt sorcGrupt EncoInt srclStrn Sub cp_A_nn() srclStrn cp(fetch()) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncp_A_HLiCompStrnVsblInt sorcGrupx EncoInt srclStrnSub cp_A_HLi() srclStrn cp(read(h,l)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_B CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_B() srclStrnb=inc(b)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_C CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_C() srclStrnc=inc(c)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_D CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_D() srclStrnd=inc(d)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_E CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_E() srclStrne=inc(e)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_H CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_H() srclStrnh=inc(h)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_L CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_L() srclStrnl=inc(l)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_A CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub inc_A() srclStrna=inc(a)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_HLi CompStrnVsblInt sorcGrup EncoInt srclStrn Sub inc_HLi() srclStrnwrite(h,l,inc(read(h,l))) srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_B CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_B() srclStrnb=dec(b)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_D CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_D() srclStrnd=dec(d)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_C CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_C() srclStrnc=dec(c)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_E CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_E() srclStrne=dec(e)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_H CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_H() srclStrnh=dec(H)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_L CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_L() srclStrnl=dec(l)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_A CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub dec_A() srclStrna=dec(a)srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_HLi CompStrnVsblInt sorcGrup EncoInt srclStrn Sub dec_HLi() srclStrnwrite(h,l,dec(read(h,l))) srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrncpl CompStrnVsblInt sorcGrup EncoInt srclStrn Sub cpl() srclStrna = Bitwise.BitXor(a,&hFF) srclStrn"f = Bitwise.BitOr(f,N_FLAG+H_FLAG) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndaa CompStrnVsblInt sorcGrup8 EncoInt srclStrn Sub daa() srclStrndim delta as integer = 0srclStrnsrclStrnKif (Bitwise.BitAnd(f,H_FLAG) <> 0 ) or (Bitwise.BitAnd(a,&h0F) > &h09) then srclStrn!delta = Bitwise.BitOr(delta,&h06) srclStrnend if srclStrnKif (Bitwise.BitAnd(f,C_FLAG) <> 0 ) or (Bitwise.BitAnd(a,&hF0) > &h90) then srclStrn!delta = Bitwise.BitOr(delta,&h60) srclStrnend if srclStrnKif (Bitwise.BitAnd(a,&hF0) > &h80) and (Bitwise.BitAnd(a,&h0F) > &h09) then srclStrn"delta = Bitwise.BitOr(delta, &h60) srclStrnend if srclStrnsrclStrn$if Bitwise.BitAnd(f,N_FLAG) = 0 thensrclStrn a = Bitwise.BitAnd(a+delta,&hFF)srclStrnelsesrclStrn a = Bitwise.BitAnd(a-delta,&hFF)srclStrnend if srclStrnsrclStrndim temp as integer srclStrntemp = Bitwise.BitAnd(f,N_FLAG) srclStrnif delta >= &h60 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrn if a = 0 then srclStrntemp = temp + Z_FLAGsrclStrnend if srclStrnsrclStrnf= temp srclStrncycles = cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn add_HL_BC CompStrnVsblInt sorcGrupp EncoInt srclStrnSub add_HL_BC() srclStrnadd(b,c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn add_HL_DE CompStrnVsblInt sorcGrupp EncoInt srclStrnSub add_HL_DE() srclStrnadd(d,e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn add_HL_HL CompStrnVsblInt sorcGrupp EncoInt srclStrnSub add_HL_HL() srclStrnadd(h,l)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup4 nameStrn add_HL_SP CompStrnVsblInt sorcGrup EncoInt srclStrnSub add_HL_SP() srclStrn5add(Bitwise.ShiftRight(sp,8),Bitwise.BitAnd(sp,&HFF)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupD nameStrninc_BC CompStrnVsblInt sorcGrup EncoInt srclStrn Sub inc_BC()srclStrnc = Bitwise.BitAnd(c+1,&hFF)srclStrn&if c=0 then b=Bitwise.BitAnd(b+1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupD nameStrninc_DE CompStrnVsblInt sorcGrup EncoInt srclStrn Sub inc_DE()srclStrne = Bitwise.BitAnd(e+1,&hFF)srclStrn&if e=0 then d=Bitwise.BitAnd(d+1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupD nameStrninc_HL CompStrnVsblInt sorcGrup EncoInt srclStrn Sub inc_HL()srclStrnl = Bitwise.BitAnd(l+1,&hFF)srclStrn&if l=0 then h=Bitwise.BitAnd(h+1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrninc_SP CompStrnVsblInt sorcGrup EncoInt srclStrn Sub inc_SP()srclStrn sp = Bitwise.BitAnd(sp+1,&hFFFF)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrndec_BC CompStrnVsblInt sorcGrup EncoInt srclStrn Sub dec_BC()srclStrnc = Bitwise.BitAnd(c-1,&hFF)srclStrn)if c=&hFF then b=Bitwise.BitAnd(b-1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrndec_DE CompStrnVsblInt sorcGrup EncoInt srclStrn Sub dec_DE()srclStrne = Bitwise.BitAnd(e-1,&hFF)srclStrn)if e=&hFF then d=Bitwise.BitAnd(d-1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrndec_HL CompStrnVsblInt sorcGrup EncoInt srclStrn Sub dec_HL()srclStrnl = Bitwise.BitAnd(l-1,&hFF)srclStrn)if l=&hFF then h=Bitwise.BitAnd(h-1,&hFF) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndec_SP CompStrnVsblInt sorcGrup EncoInt srclStrn Sub dec_SP()srclStrn sp = Bitwise.BitAnd(sp-1,&hFFFF)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn add_SP_nn CompStrnVsblInt sorcGrup( EncoInt srclStrnSub add_SP_nn() srclStrn4dim offset as int8 =fetch() //might need to typecastsrclStrnsrclStrn3dim s as integer = Bitwise.BitAnd(sp+offset,&hFFFF) srclStrnsrclStrndim temp as integer srclStrnif offset >=0 then srclStrnif s < sp then srclStrn temp = C_FLAG srclStrnend if srclStrn sp then srclStrn temp = C_FLAG srclStrnend if srclStrn Bitwise.BitAnd(sp,&h0F00) thensrclStrntemp = temp + H_FLAGsrclStrnend if srclStrnend if srclStrnsrclStrnf = tempsrclStrnsrclStrnsp = s srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn ld_HP_SP_nn CompStrnVsblInt sorcGrup( EncoInt srclStrnSub ld_HP_SP_nn() srclStrndim offset as int8 = fetch()srclStrn3dim s as integer = Bitwise.BitAnd(sp+offset,&hFFFF) srclStrnsrclStrndim temp as integer srclStrnif offset >= 0 then srclStrnif s < sp then srclStrn temp = C_FLAG srclStrnend if srclStrn sp then srclStrn temp = C_FLAG srclStrnend if srclStrn Bitwise.BitAnd(sp,&h0F00) thensrclStrntemp = temp + H_FLAGsrclStrnend if srclStrnend if srclStrnf = tempsrclStrnl=Bitwise.BitAnd(s,&hFF)srclStrnh = Bitwise.ShiftRight(s,8) srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlcaCompStrnVsblInt sorcGrup@ EncoInt srclStrn Sub rlca() srclStrn#if Bitwise.BitAnd(a,&h80) <> 0 then srclStrn f = C_FLAG srclStrnelsesrclStrnf=0 srclStrnend if srclStrn^a = Bitwise.ShiftLeft(Bitwise.BitAnd(a,&h7F),1) + Bitwise.ShiftRight(Bitwise.BitAnd(a,&h80),7) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrla CompStrnVsblInt sorcGrup EncoInt srclStrn Sub rla() srclStrn>dim s as integer = Bitwise.ShiftLeft(Bitwise.BitAnd(a,&h7F),1) srclStrn%if Bitwise.BitAnd(f,C_FLAG) <> 0 then srclStrn s = s+&h01 srclStrnend if srclStrn#if Bitwise.BitAnd(a,&h80) <> 0 then srclStrnf=C_FLAGsrclStrnelsesrclStrnf=0 srclStrnend if srclStrna=s srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrcaCompStrnVsblInt sorcGrupL EncoInt srclStrn Sub rrca() srclStrn"if Bitwise.BitAnd(a,&h01)<> 0 then srclStrnf=C_FLAGsrclStrnelse srclStrnf=0 srclStrnend if srclStrnsrclStrn^a = Bitwise.BitAnd(Bitwise.ShiftRight(a,1),&h7F) + Bitwise.BitAnd(Bitwise.ShiftLeft(a,7),&h80) srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup8 nameStrnrra CompStrnVsblInt sorcGrup EncoInt srclStrn Sub rra() srclStrn?dim s as integer = Bitwise.BitAnd(Bitwise.ShiftRight(a,1),&h7F) srclStrndim temp as integer srclStrn$if Bitwise.BitAnd(f,C_FLAG)<> 0 thensrclStrn s = s+&h80 srclStrnend if srclStrn&if Bitwise.BitAnd(a,&h01) <> &h00 then srclStrntemp = temp + C_FLAGsrclStrnend if srclStrnf = tempsrclStrna=s srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_B CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_B() srclStrnb=rlc(b)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_C CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_C() srclStrnc=rlc(c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_D CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_D() srclStrnd=rlc(d)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_E CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_E() srclStrne=rlc(e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_H CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_H() srclStrnh=rlc(h)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_L CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_L() srclStrnl=rlc(l)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrlc_A CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rlc_A() srclStrna=rlc(a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnRLC_HLi CompStrnVsblInt sorcGrup EncoInt srclStrn Sub RLC_HLi() srclStrnwrite(h,l,rlc(read(h,l))) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_BCompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_B() srclStrnb=rl(b) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_CCompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_C() srclStrnc=rl(c) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_DCompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_D() srclStrnd=rl(d) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_ECompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_E() srclStrne=rl(e) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_HCompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_H() srclStrnh=rl(h) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_LCompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_L() srclStrnl=rl(l) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_ACompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rl_A() srclStrna=rl(a) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrl_HLi CompStrnVsblInt sorcGrup| EncoInt srclStrn Sub rl_HLi()srclStrnwrite(h,l,rl(read(h,l)))srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_B CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_B() srclStrnb=rrc(b)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_C CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_C() srclStrnc=rrc(c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_D CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_D() srclStrnd=rrc(d)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_E CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_E() srclStrne=rrc(e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_H CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_H() srclStrnh=rrc(h)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_L CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_L() srclStrnl=rrc(l)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_A CompStrnVsblInt sorcGrupl EncoInt srclStrn Sub rrc_A() srclStrna=rrc(a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrrc_HLi CompStrnVsblInt sorcGrup !EncoInt srclStrn Sub rrc_HLi() srclStrnwrite(h,l,rrc(read(h,l))) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt !EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup "nameStrnrr_BCompStrnVsblInt sorcGrupx #EncoInt srclStrn Sub rr_B() srclStrnb=rr(b) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt #EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt "MethGrup $nameStrnrr_CCompStrnVsblInt sorcGrupx %EncoInt srclStrn Sub rr_C() srclStrnc=rr(c) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt %EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt $MethGrup &nameStrnrr_DCompStrnVsblInt sorcGrupx 'EncoInt srclStrn Sub rr_D() srclStrnd=rr(d) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt 'EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt &MethGrup (nameStrnrr_ECompStrnVsblInt sorcGrupx )EncoInt srclStrn Sub rr_E() srclStrne=rr(e) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt )EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt (MethGrup *nameStrnrr_HCompStrnVsblInt sorcGrupx +EncoInt srclStrn Sub rr_H() srclStrnh=rr(h) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt +EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt *MethGrup ,nameStrnrr_LCompStrnVsblInt sorcGrupx -EncoInt srclStrn Sub rr_L() srclStrnl=rr(l) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt -EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ,MethGrup .nameStrnrr_ACompStrnVsblInt sorcGrupx /EncoInt srclStrn Sub rr_A() srclStrna=rr(a) srclStrncycles=cycles-2 srclStrnsrclStrnEnd Sub EndGInt /EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt .MethGrup 0nameStrnrr_HLi CompStrnVsblInt sorcGrup| 1EncoInt srclStrn Sub rr_HLi()srclStrnwrite(h,l,rr(read(h,l)))srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt 1EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 0MethGrup 2nameStrnsla_B CompStrnVsblInt sorcGrupl 3EncoInt srclStrn Sub sla_B() srclStrnb=sla(b)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt 3EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 2MethGrup 4nameStrnsla_C CompStrnVsblInt sorcGrupl 5EncoInt srclStrn Sub sla_C() srclStrnc=sla(c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt 5EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 4MethGrup 6nameStrnsla_D CompStrnVsblInt sorcGrupl 7EncoInt srclStrn Sub sla_D() srclStrnd=sla(d)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt 7EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 6MethGrup 8nameStrnsla_E CompStrnVsblInt sorcGrupl 9EncoInt srclStrn Sub sla_E() srclStrne=sla(e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt 9EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 8MethGrup :nameStrnsla_H CompStrnVsblInt sorcGrupl ;EncoInt srclStrn Sub sla_H() srclStrnh=sla(h)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt ;EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt :MethGrup nameStrnsla_A CompStrnVsblInt sorcGrupl ?EncoInt srclStrn Sub sla_A() srclStrna=sla(a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt ?EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt >MethGrup @nameStrnsla_HLi CompStrnVsblInt sorcGrup AEncoInt srclStrn Sub sla_HLi() srclStrnwrite(h,l,sla(read(h,l))) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt AEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt @MethGrup BnameStrnswap_B CompStrnVsblInt sorcGrupp CEncoInt srclStrn Sub swap_B()srclStrn b=swap(b) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt CEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt BMethGrup DnameStrnswap_C CompStrnVsblInt sorcGrupp EEncoInt srclStrn Sub swap_C()srclStrn c=swap(c) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt DMethGrup FnameStrnswap_D CompStrnVsblInt sorcGrupp GEncoInt srclStrn Sub swap_D()srclStrn d=swap(d) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt GEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt FMethGrup HnameStrnswap_E CompStrnVsblInt sorcGrupp IEncoInt srclStrn Sub swap_E()srclStrn e=swap(e) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt IEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt HMethGrup JnameStrnswap_H CompStrnVsblInt sorcGrupp KEncoInt srclStrn Sub swap_H()srclStrn h=swap(h) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt JMethGrup LnameStrnswap_L CompStrnVsblInt sorcGrupp MEncoInt srclStrn Sub swap_L()srclStrn l=swap(l) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt MEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt LMethGrup NnameStrnswap_A CompStrnVsblInt sorcGrupp OEncoInt srclStrn Sub swap_A()srclStrn a=swap(a) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt OEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt NMethGrup PnameStrnswap_HLiCompStrnVsblInt sorcGrup QEncoInt srclStrnSub swap_HLi() srclStrnwrite(h,l,swap(read(h,l))) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt QEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt PMethGrup RnameStrnsra_B CompStrnVsblInt sorcGrupl SEncoInt srclStrn Sub sra_B() srclStrnb=sra(b)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt SEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt RMethGrup TnameStrnsra_C CompStrnVsblInt sorcGrupl UEncoInt srclStrn Sub sra_C() srclStrnc=sra(c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt UEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt TMethGrup VnameStrnsra_D CompStrnVsblInt sorcGrupl WEncoInt srclStrn Sub sra_D() srclStrnd=sra(d)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt WEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt VMethGrup XnameStrnsra_E CompStrnVsblInt sorcGrupl YEncoInt srclStrn Sub sra_E() srclStrne=sra(e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt YEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt XMethGrup ZnameStrnsra_H CompStrnVsblInt sorcGrupl [EncoInt srclStrn Sub sra_H() srclStrnh=sra(h)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt [EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ZMethGrup \nameStrnsra_L CompStrnVsblInt sorcGrupl ]EncoInt srclStrn Sub sra_L() srclStrnl=sra(l)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt ]EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt \MethGrup ^nameStrnsra_A CompStrnVsblInt sorcGrupl _EncoInt srclStrn Sub sra_A() srclStrna=sra(a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt _EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt ^MethGrup `nameStrnsra_HLi CompStrnVsblInt sorcGrup aEncoInt srclStrn Sub sra_HLi() srclStrnwrite(h,l,sra(read(h,l))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt aEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt `MethGrup bnameStrnsrl_B CompStrnVsblInt sorcGrupl cEncoInt srclStrn Sub srl_B() srclStrnb=srl(b)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt cEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt bMethGrup dnameStrnsrl_C CompStrnVsblInt sorcGrupl eEncoInt srclStrn Sub srl_C() srclStrnc=srl(c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt eEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt dMethGrup fnameStrnsrl_D CompStrnVsblInt sorcGrupl gEncoInt srclStrn Sub srl_D() srclStrnd=srl(d)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt gEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt fMethGrup hnameStrnsrl_E CompStrnVsblInt sorcGrupl iEncoInt srclStrn Sub srl_E() srclStrne=srl(e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt iEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt hMethGrup jnameStrnsrl_H CompStrnVsblInt sorcGrupl kEncoInt srclStrn Sub srl_H() srclStrnh=srl(h)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt kEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt jMethGrup lnameStrnsrl_L CompStrnVsblInt sorcGrupl mEncoInt srclStrn Sub srl_L() srclStrnl=srl(l)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt mEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt lMethGrup nnameStrnsrl_A CompStrnVsblInt sorcGrupl oEncoInt srclStrn Sub srl_A() srclStrna=srl(a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt oEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt nMethGrup pnameStrnsrl_HLi CompStrnVsblInt sorcGrup qEncoInt srclStrn Sub srl_HLi() srclStrnwrite(h,l,srl(read(h,l))) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt qEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt pMethGrup rnameStrnbit_B CompStrnVsblInt sorcGrupx sEncoInt srclStrnSub bit_B(n as integer) srclStrnbit(n,b)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt sEncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt rMethGrup tnameStrnbit_C CompStrnVsblInt sorcGrupx uEncoInt srclStrnSub bit_C(n as integer) srclStrnbit(n,c)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt uEncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt tMethGrup vnameStrnbit_D CompStrnVsblInt sorcGrupx wEncoInt srclStrnSub bit_D(n as integer) srclStrnbit(n,d)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt wEncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt vMethGrup xnameStrnbit_E CompStrnVsblInt sorcGrupx yEncoInt srclStrnSub bit_E(n as integer) srclStrnbit(n,e)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt yEncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt xMethGrup znameStrnbit_H CompStrnVsblInt sorcGrupx {EncoInt srclStrnSub bit_H(n as integer) srclStrnbit(n,h)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt {EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt zMethGrup |nameStrnbit_L CompStrnVsblInt sorcGrupx }EncoInt srclStrnSub bit_L(n as integer) srclStrnbit(n,l)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt }EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt |MethGrup ~nameStrnbit_A CompStrnVsblInt sorcGrupx EncoInt srclStrnSub bit_A(n as integer) srclStrnbit(n,a)srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt ~MethGrup nameStrnbit_HLi CompStrnVsblInt sorcGrup EncoInt srclStrnSub bit_HLi(n as integer) srclStrnbit(n,read(h,l))srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_B CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_B(n as integer) srclStrn+b = bitwise.BitOr(b,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_C CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_C(n as integer) srclStrn+c = bitwise.BitOr(c,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_D CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_D(n as integer) srclStrn+d = bitwise.BitOr(d,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_E CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_E(n as integer) srclStrn+e = bitwise.BitOr(e,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_H CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_H(n as integer) srclStrn+h = bitwise.BitOr(h,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_L CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_L(n as integer) srclStrn+l = bitwise.BitOr(l,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup8 nameStrnset_A CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_A(n as integer) srclStrn+a = bitwise.BitOr(a,Bitwise.ShiftLeft(1,n)) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupL nameStrnset_HLi CompStrnVsblInt sorcGrup EncoInt srclStrnSub set_HLi(n as integer) srclStrn;write(h,l, bitwise.BitOr(read(h,l),Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_B CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_B(n as integer) srclStrnCb= Bitwise.BitAnd(b,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_C CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_C(n as integer) srclStrnCc= Bitwise.BitAnd(c,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_D CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_D(n as integer) srclStrnCD= Bitwise.BitAnd(D,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_E CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_E(n as integer) srclStrnCe= Bitwise.BitAnd(e,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_H CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_H(n as integer) srclStrnCh= Bitwise.BitAnd(h,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_L CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_L(n as integer) srclStrnCl= Bitwise.BitAnd(l,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupP nameStrnres_A CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_A(n as integer) srclStrnCa= Bitwise.BitAnd(a,Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))) srclStrncycles=cycles-2 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrupd nameStrnres_HLi CompStrnVsblInt sorcGrup EncoInt srclStrnSub res_HLi(n as integer) srclStrnTwrite(h,l, Bitwise.BitAnd(read(h,l),Bitwise.OnesComplement(Bitwise.ShiftLeft(1,n))))srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn n as integerrsltStrnEndGInt MethGrup nameStrnccf CompStrnVsblInt sorcGrup EncoInt srclStrn Sub ccf() srclStrnIf = Bitwise.BitXor(Bitwise.BitAnd(f,Bitwise.BitOr(Z_FLAG,C_FLAG)),C_FLAG) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnscf CompStrnVsblInt sorcGrup| EncoInt srclStrn Sub scf() srclStrn2f = bitwise.BitOr(Bitwise.BitAnd(f,Z_FLAG),C_FLAG) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnnop CompStrnVsblInt sorcGrupX EncoInt srclStrn Sub nop() srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnjp_nnnn CompStrnVsblInt sorcGrup, EncoInt srclStrn Sub jp_nnnn() srclStrndim lo as integer = fetch() srclStrndim hi as Integer = fetch() srclStrn'#if DebugBuild srclStrn'if hi = &hFF then breaksrclStrn'#endif srclStrnpc = Bitwise.ShiftLeft(hi,8)+lo srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnld_PC_HLCompStrnVsblInt sorcGrup EncoInt srclStrnSub ld_PC_HL() srclStrnpc = Bitwise.ShiftLeft(h,8)+l srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupd nameStrn jp_cc_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub jp_cc_nnnn(cc as boolean) srclStrn if cc then srclStrndim lo as integer = fetch() srclStrndim hi as Integer= fetch() srclStrn'#if DebugBuild srclStrn'if hi = &hFF then breaksrclStrn'#endif srclStrnpc = Bitwise.ShiftLeft(hi,8)+lo srclStrncycles=cycles-4 srclStrnelsesrclStrn pc = Bitwise.BitAnd(pc+2,&hFFFF)srclStrncycles=cycles-3 srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn cc as boolean rsltStrnEndGInt MethGrup` nameStrn jp_NZ_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub jp_NZ_nnnn()srclStrndim bool as boolean = false srclStrn.if Bitwise.BitAnd(f,Z_FLAG) = 0 then bool=true srclStrnsrclStrnjp_cc_nnnn(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup` nameStrn jp_NC_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub jp_NC_nnnn()srclStrndim bool as boolean = false srclStrn.if Bitwise.BitAnd(f,C_FLAG) = 0 then bool=true srclStrnsrclStrnjp_cc_nnnn(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup` nameStrn jp_Z_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub jp_Z_nnnn() srclStrndim bool as boolean = false srclStrn/if Bitwise.BitAnd(f,Z_FLAG) <> 0 then bool=true srclStrnsrclStrnjp_cc_nnnn(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup` nameStrn jp_C_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub jp_C_nnnn() srclStrndim bool as boolean = false srclStrn/if Bitwise.BitAnd(f,C_FLAG) <> 0 then bool=true srclStrnsrclStrnjp_cc_nnnn(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnjr_cc_nnCompStrnVsblInt sorcGrupT EncoInt srclStrnSub jr_cc_nn(cc as boolean) srclStrn if cc then srclStrndim offset as int8 = fetch()srclStrn%pc = Bitwise.BitAnd(pc+offset,&hFFFF) srclStrncycles=cycles-3 srclStrnelsesrclStrn pc = Bitwise.BitAnd(pc+1,&hFFFF)srclStrncycles=cycles-2 srclStrnend if srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn cc as boolean rsltStrnEndGInt MethGrup\ nameStrnjr_NZ_nnCompStrnVsblInt sorcGrup EncoInt srclStrnSub jr_NZ_nn() srclStrndim bool as Boolean = false srclStrn-if Bitwise.BitAnd(f,Z_FLAG) =0 then bool=true srclStrnsrclStrnjr_cc_nn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrnjr_Z_nn CompStrnVsblInt sorcGrup EncoInt srclStrn Sub jr_Z_nn() srclStrndim bool as Boolean = false srclStrn/if Bitwise.BitAnd(f,Z_FLAG) <> 0 then bool=true srclStrnsrclStrnjr_cc_nn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrnjr_NC_nnCompStrnVsblInt sorcGrup EncoInt srclStrnSub jr_NC_nn() srclStrndim bool as Boolean = false srclStrn-if Bitwise.BitAnd(f,C_FLAG) =0 then bool=true srclStrnsrclStrnjr_cc_nn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrnjr_C_nn CompStrnVsblInt sorcGrup EncoInt srclStrn Sub jr_C_nn() srclStrndim bool as Boolean = false srclStrn/if Bitwise.BitAnd(f,C_FLAG) <> 0 then bool=true srclStrnsrclStrnjr_cc_nn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupp nameStrn call_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub call_nnnn() srclStrndim lo as integer = fetch() srclStrndim hi as integer = fetch() srclStrn!mcall(Bitwise.ShiftLeft(hi,8)+lo) srclStrncycles=cycles-6 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn call_cc_nnnnCompStrnVsblInt sorcGrupp EncoInt srclStrnSub call_cc_nnnn(cc as boolean) srclStrn if cc then srclStrndim lo as integer = fetch() srclStrndim hi as integer = fetch() srclStrn!mcall(Bitwise.ShiftLeft(hi,8)+lo) srclStrncycles=cycles-6 srclStrnelsesrclStrn pc = Bitwise.BitAnd(pc+2,&hFFFF)srclStrncycles=cycles-3 srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn cc as boolean rsltStrnEndGInt MethGrup\ nameStrn call_NZ_nnnnCompStrnVsblInt sorcGrup EncoInt srclStrnSub call_NZ_nnnn() srclStrndim bool as boolean = false srclStrn.if Bitwise.BitAnd(f,Z_FLAG) = 0 then bool=true srclStrncall_cc_nnnn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrn call_NC_nnnnCompStrnVsblInt sorcGrup EncoInt srclStrnSub call_NC_nnnn() srclStrndim bool as boolean = false srclStrn.if Bitwise.BitAnd(f,C_FLAG) = 0 then bool=true srclStrncall_cc_nnnn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrn call_Z_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub call_Z_nnnn() srclStrndim bool as boolean = false srclStrn/if Bitwise.BitAnd(f,Z_FLAG) <> 0 then bool=true srclStrncall_cc_nnnn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup\ nameStrn call_C_nnnn CompStrnVsblInt sorcGrup EncoInt srclStrnSub call_C_nnnn() srclStrndim bool as boolean = false srclStrn/if Bitwise.BitAnd(f,C_FLAG) <> 0 then bool=true srclStrncall_cc_nnnn(bool) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnret_cc CompStrnVsblInt sorcGrup< EncoInt srclStrnSub ret_cc(cc as boolean) srclStrn if cc then srclStrndim lo as Integer = pop() srclStrndim hi as Integer = Pop() srclStrnpc = Bitwise.ShiftLeft(hi,8)+lo srclStrncycles=cycles-5 srclStrnelsesrclStrncycles=cycles-2 srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn cc as boolean rsltStrnEndGInt MethGrup nameStrnret CompStrnVsblInt sorcGrup, EncoInt srclStrn Sub ret() srclStrndim lo as integer = pop() srclStrndim hi as integer = pop() srclStrn'#if DebugBuild srclStrn'if hi = &hFF then breaksrclStrn'#endif srclStrnpc = bitwise.ShiftLeft(hi,8)+lo srclStrncycles = cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrnret_NZ CompStrnVsblInt sorcGrup EncoInt srclStrn Sub ret_NZ()srclStrndim bool as Boolean = false srclStrn.if Bitwise.BitAnd(f,Z_FLAG) = 0 then bool=true srclStrn ret_cc(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrnret_NC CompStrnVsblInt sorcGrup EncoInt srclStrn Sub ret_NC()srclStrndim bool as Boolean = false srclStrn.if Bitwise.BitAnd(f,C_FLAG) = 0 then bool=true srclStrn ret_cc(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrnret_Z CompStrnVsblInt sorcGrup EncoInt srclStrn Sub ret_Z() srclStrndim bool as Boolean = false srclStrn/if Bitwise.BitAnd(f,Z_FLAG) <> 0 then bool=true srclStrn ret_cc(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupH nameStrnret_C CompStrnVsblInt sorcGrup EncoInt srclStrn Sub ret_C() srclStrndim bool as Boolean = false srclStrn/if Bitwise.BitAnd(f,C_FLAG) <> 0 then bool=true srclStrn ret_cc(bool)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupD nameStrnjr_nn CompStrnVsblInt sorcGrup EncoInt srclStrn Sub jr_nn() srclStrndim offset as int8 = fetch()srclStrn%pc = Bitwise.BitAnd(pc+offset,&hFFFF) srclStrncycles=cycles-3 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnrst CompStrnVsblInt sorcGrup| EncoInt srclStrnSub rst(nn as integer) srclStrn mcall(nn) srclStrncycles=cycles-4 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn nn as integer rsltStrnEndGInt MethGrup nameStrnretiCompStrnVsblInt sorcGrup EncoInt srclStrn Sub reti() srclStrndim lo as integer = pop() srclStrndim hi as integer = pop() srclStrn'#if DebugBuild srclStrn'logger.Log("END INTERRUPT")srclStrn'#endif srclStrnpc = bitwise.ShiftLeft(hi,8)+lo srclStrnsrclStrn//enable interrupts srclStrn ime = true srclStrncycles=cycles-4 srclStrnsrclStrn//execute next instruction srclStrn execute() srclStrnsrclStrn//check pending interrupts srclStrn interrupt_()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndi CompStrnVsblInt sorcGrup EncoInt srclStrnSub di()srclStrn//disable interruptssrclStrn ime = false srclStrncycles=cycles-1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnei CompStrnVsblInt sorcGrup EncoInt srclStrnSub ei()srclStrn//enable interrupts srclStrnime=truesrclStrncycles=cycles-1 srclStrnsrclStrn//execute next instruction srclStrn execute() srclStrnsrclStrn//check pending interrupts srclStrn Interrupt_()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnhaltCompStrnVsblInt sorcGrup4 EncoInt srclStrn Sub halt() srclStrn halted= truesrclStrnsrclStrn(//emulate bug whe interrupts are pendingsrclStrnFif (not ime and mInterrupt.isPending()) then execute(mMemory.read(pc)) srclStrnsrclStrn//check pending interrupts srclStrn interrupt_()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnstopCompStrnVsblInt sorcGrupT EncoInt srclStrn Sub stop() srclStrn call fetch()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt PropGrupL EncoInt declStrn a As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn b As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn c As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn d As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn e As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn f As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn h As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupL EncoInt declStrn l As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrn sp As Integer flagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnime As boolean flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnhalted As boolean flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrncycles As Integer flagInt !CompStrnshrdInt EndGInt PropGrupX EncoInt declStrnmInterrupt As Interrupt flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmMemory As Memory flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmROM As memoryBlock flagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrn pc As Integer flagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrn de As Integer flagInt !CompStrnshrdInt EndGInt VwBhGrup VwPrGrupD NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup` NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupH NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupX NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupX NameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt CnstGrupL EncoInt nameStrnZ_FLAG typeInt defnStrn&h80flagInt EndGInt CnstGrupL EncoInt nameStrnN_FLAG typeInt defnStrn&h40flagInt EndGInt CnstGrupL EncoInt nameStrnH_FLAG typeInt defnStrn&h20flagInt EndGInt CnstGrupL EncoInt nameStrnC_FLAG typeInt defnStrn&h10flagInt EndGInt PadnPadn********BlokpObj/ONameStrn Interrupt ContInt paswStrnbClsInt bNtrInt CompStrnMethGrup nameStrn Constructor CompStrnVsblInt sorcGrup EncoInt srclStrnSub Constructor() srclStrnenable=0srclStrnflag=0 srclStrnreset() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnreset CompStrnVsblInt sorcGrupp EncoInt srclStrn Sub reset() srclStrnenable=0+cJOYPADsrclStrn flag=cVBLANKsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn isPending CompStrnVsblInt sorcGrup EncoInt srclStrnFunction isPending() As boolean srclStrn2if Bitwise.BitAnd(enable,flag)<>0 then return true srclStrn2//if Bitwise.BitAnd(&hFF,flag)<>0 then return true srclStrnsrclStrn return falsesrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnboolean EndGInt MethGrup nameStrn isPending CompStrnVsblInt sorcGrup EncoInt srclStrn.Function isPending(mask as integer) As boolean srclStrn7if Bitwise.BitAnd(enable,flag,mask)<>0 then return true srclStrn7//if Bitwise.BitAnd(&hFF,flag,mask)<>0 then return true srclStrnsrclStrn return falsesrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnmask as integer rsltStrnboolean EndGInt MethGrup nameStrnmRaise CompStrnVsblInt sorcGrupx EncoInt srclStrnSub mRaise(mask as integer) srclStrnflag = Bitwise.BitOr(flag,mask) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnmask as integer rsltStrnEndGInt MethGrup4 nameStrnlower CompStrnVsblInt sorcGrup EncoInt srclStrnSub lower(mask as integer) srclStrn9flag = Bitwise.BitAnd(flag, Bitwise.OnesComplement(mask)) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnmask as integer rsltStrnEndGInt MethGrup nameStrnwrite CompStrnVsblInt sorcGrup EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnselect case address srclStrncase IE srclStrnsetInterruptEnable(data)srclStrncase IF_srclStrnsetInterruptFlag(data) srclStrn end select srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrup nameStrnreadCompStrnVsblInt sorcGrup8 EncoInt srclStrn,Function read(address as integer) As integersrclStrnselect case Address srclStrncase IE srclStrnreturn getInterruptEnable() srclStrncase IF_srclStrnreturn getInterruptFlag() srclStrnelsesrclStrn return &hFF srclStrn end select srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrup nameStrngetInterruptEnable CompStrnVsblInt sorcGrupx EncoInt srclStrn(Function getInterruptEnable() As integersrclStrn return enable srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup( nameStrngetInterruptFlagCompStrnVsblInt sorcGrup EncoInt srclStrn&Function getInterruptFlag() As integer srclStrnreturn Bitwise.BitOr(&hE0,flag) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrupL nameStrnsetInterruptEnable CompStrnVsblInt sorcGrup EncoInt srclStrn'Sub setInterruptEnable(data as integer) srclStrn$//enable=Bitwise.BitOr(data,cJOYPAD)srclStrn enable=data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetInterruptFlagCompStrnVsblInt sorcGrupp EncoInt srclStrn%Sub setInterruptFlag(data as integer) srclStrn flag = data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt PropGrupT EncoInt declStrnenable As Integer flagInt CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnflag As Integer flagInt CompStrnshrdInt EndGInt VwBhGrup VwPrGrupD NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup` NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupH NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupX NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupX NameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupP !NameStrnenable PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt !VwPrGrupL "NameStrnflagPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt "EndGInt CnstGrupL #EncoInt nameStrnIE typeInt defnStrn&hFFFF flagInt EndGInt #CnstGrupL $EncoInt nameStrnIF_ typeInt defnStrn&hFF0F flagInt EndGInt $CnstGrupL %EncoInt nameStrncVBLANK typeInt defnStrn&h01flagInt EndGInt %CnstGrupH &EncoInt nameStrncLCDtypeInt defnStrn&h02flagInt EndGInt &CnstGrupL 'EncoInt nameStrncTIMER typeInt defnStrn&h04flagInt EndGInt 'CnstGrupL (EncoInt nameStrncSERIAL typeInt defnStrn&h08flagInt EndGInt (CnstGrupL )EncoInt nameStrncJOYPAD typeInt defnStrn&h10flagInt EndGInt )PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNxGNameStrnJoyPad ContInt paswStrnbClsInt bNtrInt CompStrnMethGrup *nameStrn Constructor CompStrnVsblInt sorcGrup +EncoInt srclStrnASub Constructor(iDriver as JoyPadDriver, iInterrupt as Interrupt) srclStrnmInterrupt = iInterrupt srclStrndriver = iDriversrclStrnsrclStrnreset() srclStrnEnd Sub EndGInt +EncoInt AlasStrnflagInt shrdInt parmStrn0iDriver as JoyPadDriver, iInterrupt as InterruptrsltStrnEndGInt *MethGrup ,nameStrnreset CompStrnVsblInt sorcGrupx -EncoInt srclStrn Sub reset() srclStrn mjoyp = &hFFsrclStrncycles = JOYPAD_CLOCK srclStrnEnd Sub EndGInt -EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt ,MethGrup .nameStrnticks CompStrnVsblInt sorcGrupl /EncoInt srclStrnFunction ticks() As integer srclStrn return cycles srclStrn End FunctionEndGInt /EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt .MethGrup 0nameStrnemulate CompStrnVsblInt sorcGrup( 1EncoInt srclStrnSub emulate(ticks as integer) srclStrncycles = cycles - ticks srclStrnif cycles <= 0 then srclStrnif driver.isRaised() then srclStrnupdate()srclStrnend if srclStrncycles = JOYPAD_CLOCK srclStrnend if srclStrnsrclStrnEnd Sub EndGInt 1EncoInt AlasStrnflagInt shrdInt parmStrnticks as integerrsltStrnEndGInt 0MethGrup 2nameStrnwrite CompStrnVsblInt sorcGrup 3EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif Address = JOYP then srclStrn?mjoyp = Bitwise.BitAnd(mjoyp, &hCF) + Bitwise.BitAnd(data,&h30) srclStrnupdate()srclStrnend if srclStrnsrclStrnEnd Sub EndGInt 3EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt 2MethGrupp 4nameStrnreadCompStrnVsblInt sorcGrup 5EncoInt srclStrn,Function read(address as integer) As integersrclStrnif Address = JOYP then srclStrn return mjoypsrclStrnend if srclStrn return &hFF srclStrn End FunctionEndGInt 5EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt 4MethGrup 6nameStrnupdate CompStrnVsblInt sorcGrup 7EncoInt srclStrn Sub update()srclStrn1dim data as integer = Bitwise.BitAnd(mjoyp, &hF0) srclStrnsrclStrn&select case Bitwise.BitAnd(data, &h30) srclStrn case &h10 srclStrn/data = Bitwise.BitOr(data, driver.getButtons()) srclStrn case &h20 srclStrn2data = Bitwise.BitOr(data, driver.getDirections()) srclStrn case &h30 srclStrndata = Bitwise.BitOr(data,&h0F) srclStrn end select srclStrnsrclStrnFif Bitwise.BitAnd(mjoyp, Bitwise.OnesComplement(data), &h0F) <> 0 then srclStrn%mInterrupt.mRaise(mInterrupt.cJOYPAD) srclStrnend if srclStrnsrclStrn mjoyp = datasrclStrnEnd Sub EndGInt 7EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt 6MethGrup$ 8nameStrn Keyreleased CompStrnVsblInt sorcGrup| 9EncoInt srclStrn#Sub Keyreleased(keycode as integer) srclStrndriver.keyReleased(keycode) srclStrnEnd Sub EndGInt 9EncoInt AlasStrnflagInt shrdInt parmStrnkeycode as integer rsltStrnEndGInt 8MethGrup$ :nameStrn KeyPressed CompStrnVsblInt sorcGrup| ;EncoInt srclStrn"Sub KeyPressed(keycode as integer) srclStrndriver.KeyPresed(keycode) srclStrnEnd Sub EndGInt ;EncoInt AlasStrnflagInt shrdInt parmStrnkeycode as integer rsltStrnEndGInt :PropGrupT EncoInt declStrnmInterrupt As Interrupt = nil flagInt !CompStrnshrdInt EndGInt >PropGrup\ ?EncoInt declStrndriver As JoypadDriver = nilflagInt !CompStrnshrdInt EndGInt ?VwBhGrup @VwPrGrupD ANameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt AVwPrGrup` BNameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt BVwPrGrupH CNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt CVwPrGrupX DNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt DVwPrGrupX ENameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EEndGInt @CnstGrupL FEncoInt nameStrnJOYPtypeInt defnStrn&hFF00 flagInt EndGInt FCnstGrupX GEncoInt nameStrn GAMEBOY_CLOCK typeInt defnStrn&h100000flagInt !EndGInt GCnstGrupT HEncoInt nameStrn JOYPAD_CLOCKtypeInt defnStrn&h4000 flagInt !EndGInt HPadnPadnx************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjyNameStrnMemory ContInt paswStrnbClsInt bNtrInt CompStrnMethGrup InameStrnwrite CompStrnVsblInt sorcGrupl JEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnsrclStrnEnd Sub EndGInt JEncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt IMethGrup KnameStrnreadCompStrnVsblInt sorcGrupl LEncoInt srclStrn,Function read(address as integer) As integersrclStrnsrclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt KVwBhGrup MVwPrGrupD NNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt NVwPrGrup` ONameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt OVwPrGrupH PNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt PVwPrGrupX QNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt QVwPrGrupX RNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt REndGInt MPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjh / NameStrnRAM ContInt paswStrnbClsInt bNtrInt CompStrnMethGrup SnameStrn Constructor CompStrnVsblInt sorcGrupX TEncoInt srclStrnSub Constructor() srclStrnreset() srclStrnEnd Sub EndGInt TEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt SMethGrup UnameStrnreset CompStrnVsblInt sorcGrupt VEncoInt srclStrn Sub reset() srclStrnwram = NewMemoryBlock(8192) srclStrnhram = NewMemoryBlock(128) srclStrnsrclStrn for index as integer = 0 to 8191srclStrnwram.uint8Value(index) = &h00 srclStrnnextsrclStrnfor index as integer = 0 to 127 srclStrnhram.uint8Value(index) = &h00 srclStrnnextsrclStrnsrclStrnEnd Sub EndGInt VEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt UMethGrupp WnameStrnwrite CompStrnVsblInt sorcGrup XEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrn/if Address >= &hC000 and Address <= &hFDFF then srclStrn//C000-DFFF work ram (8kb) srclStrn//E000-FDFF echo ramsrclStrn6wram.uint8Value(Bitwise.BitAnd(Address,&h1FFF)) = data srclStrn3elseif Address >= &hFF80 and Address <= &hFFFE then srclStrn4hram.uint8Value(Bitwise.BitAnd(Address,&h7F)) = datasrclStrnend if srclStrnEnd Sub EndGInt XEncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt WMethGrup YnameStrnreadCompStrnVsblInt sorcGrup ZEncoInt srclStrn,Function read(address as integer) As integersrclStrn/if Address >= &hC000 and Address <= &hFDFF then srclStrn//C000-DFFF work ram (8kb) srclStrn//E000-FDFF echo ramsrclStrnKreturn Bitwise.BitAnd(wram.uint8Value(Bitwise.BitAnd(Address,&h1FFF)),&hFF) srclStrn3elseif Address >= &hFF80 and Address <= &hFFFE then srclStrnIreturn Bitwise.BitAnd(hram.uint8Value(Bitwise.BitAnd(Address,&h7F)),&hFF) srclStrnend if srclStrn End FunctionEndGInt ZEncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt YPropGrupT [EncoInt declStrnwram As memoryblock flagInt !CompStrnshrdInt EndGInt [PropGrupT \EncoInt declStrnhram As memoryblock flagInt !CompStrnshrdInt EndGInt \VwBhGrup ]VwPrGrupD ^NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt ^VwPrGrup` _NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt _VwPrGrupH `NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt `VwPrGrupX aNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt aVwPrGrupX bNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt bEndGInt ]PadnPadn0************************************************BlokpObjNameStrn Serial_gb ContInt paswStrnbClsInt bNtrInt CompStrnMethGrupH cnameStrn Constructor CompStrnVsblInt sorcGrup dEncoInt srclStrn(Sub Constructor(iInterrupt as Interrupt)srclStrnmInterrupt = iInterrupt srclStrnsrclStrnreset() srclStrnEnd Sub EndGInt dEncoInt AlasStrnflagInt shrdInt parmStrniInterrupt as Interrupt rsltStrnEndGInt cMethGrup enameStrnreset CompStrnVsblInt sorcGrup fEncoInt srclStrn Sub reset() srclStrncycles = SERIAL_CLOCK srclStrnmsb = 0 srclStrnmsc = 0 srclStrnEnd Sub EndGInt fEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt eMethGrup gnameStrnticks CompStrnVsblInt sorcGrupl hEncoInt srclStrnFunction ticks() As integer srclStrn return cycles srclStrn End FunctionEndGInt hEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt gMethGrup< inameStrnemulate CompStrnVsblInt sorcGrup jEncoInt srclStrnSub emulate(ticks as integer) srclStrn'if Bitwise.BitAnd(msc,&h81) = &h81 then srclStrncycles = cycles - ticks srclStrnif cycles <= 0 then srclStrn msb = &hFF srclStrnmsc = Bitwise.BitAnd(msc,&h7F) srclStrncycles = SERIAL_IDLE_CLOCK srclStrnsrclStrn%mInterrupt.mRaise(mInterrupt.cSERIAL) srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt jEncoInt AlasStrnflagInt shrdInt parmStrnticks as integerrsltStrnEndGInt iMethGrup knameStrnwrite CompStrnVsblInt sorcGrup lEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif Address = SB thensrclStrnsetSerialData(data) srclStrnelseif Address = SC thensrclStrnsetSerialControl(data) srclStrnend if srclStrnEnd Sub EndGInt lEncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt kMethGrup mnameStrnreadCompStrnVsblInt sorcGrup nEncoInt srclStrn,Function read(address as integer) As integersrclStrnif Address = SB thensrclStrnreturn getSerialData() srclStrnelseif Address = SC thensrclStrnreturn getSerialControl() srclStrnend if srclStrn return &hFF srclStrn End FunctionEndGInt nEncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt mMethGrup onameStrn setSerialData CompStrnVsblInt sorcGrupl pEncoInt srclStrn"Sub setSerialData(data as integer) srclStrn msb = data srclStrnEnd Sub EndGInt pEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt oMethGrup qnameStrnsetSerialControlCompStrnVsblInt sorcGrup rEncoInt srclStrn%Sub setSerialControl(data as integer) srclStrn msc = data srclStrnsrclStrn= AUD3WAVERAM and address <= AUD3WAVERAM + &h3F then return getAudio3WavePattern(address) srclStrnsrclStrnsrclStrn return &hFF srclStrn end select srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrup nameStrnwrite CompStrnVsblInt sorcGrup@ EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnselect case address srclStrn case NR10 srclStrnsetAudio1Sweep(data)srclStrnsrclStrn case NR11 srclStrnsetAudio1Length(data) srclStrnsrclStrn case NR12 srclStrnsetAudio1Envelope(data) srclStrnsrclStrn case NR13 srclStrnsetAudio1Frequency(data)srclStrnsrclStrn case NR14 srclStrnsetAudio1Playback(data) srclStrnsrclStrnsrclStrn case NR21 srclStrnsetAudio2Length(data) srclStrnsrclStrn case NR22 srclStrnsetAudio2Envelope(data) srclStrnsrclStrn case NR23 srclStrnsetAudio2Frequency(data)srclStrnsrclStrn case NR24 srclStrnsetAudio2Playback(data) srclStrnsrclStrnsrclStrn case NR30 srclStrnsetAudio3Enable(data) srclStrnsrclStrn case NR31 srclStrnsetAudio3Length(data) srclStrnsrclStrn case NR32 srclStrnsetAudio3Level(data)srclStrnsrclStrn case NR33 srclStrnsetAudio3Frequency(data)srclStrnsrclStrn case NR34 srclStrnsetAudio3Playback(data) srclStrnsrclStrnsrclStrn case NR41 srclStrnsetAudio4Length(data) srclStrnsrclStrn case NR42 srclStrnsetAudio4Envelope(data) srclStrnsrclStrn case NR43 srclStrnsetAudio4Polynomial(data) srclStrnsrclStrn case NR44 srclStrnsetAudio4Playback(data) srclStrnsrclStrnsrclStrn case NR50 srclStrnsetOutputLevel(data)srclStrnsrclStrn case NR51 srclStrnsetOutputTerminal(data) srclStrnsrclStrn case NR52 srclStrnsetOutputEnable(data) srclStrnsrclStrnsrclStrnelsesrclStrndif address >= AUD3WAVERAM and address <= AUD3WAVERAM + &h3F then setAudio3WavePattern(address, data)srclStrnsrclStrn end select srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrup nameStrn updateAudio CompStrnVsblInt sorcGrup EncoInt srclStrnSub updateAudio() srclStrn%if Bitwise.BitAnd(mnr52,&h80)<>0 then srclStrn4if Bitwise.BitAnd(mnr52,&h01)<>0 then updateAudio1()srclStrn4if Bitwise.BitAnd(mnr52,&h02)<>0 then updateAudio2()srclStrn4if Bitwise.BitAnd(mnr52,&h04)<>0 then updateAudio3()srclStrn4if Bitwise.BitAnd(mnr52,&h08)<>0 then updateAudio4()srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupX nameStrnmixAudioCompStrnVsblInt sorcGrup EncoInt srclStrnKSub mixAudio(buffer as memoryblock, length as integer, channels as integer) srclStrn#for index as integer =0 to length-1 srclStrnbuffer.uint8Value(index)=0 srclStrnnextsrclStrnsrclStrn%if Bitwise.BitAnd(mnr52,&h80)<>0 then srclStrnGif Bitwise.BitAnd(mnr52,&h01)<>0 then mixAudio1(buffer,length,channels) srclStrnGif Bitwise.BitAnd(mnr52,&h02)<>0 then mixAudio2(buffer,length,channels) srclStrnGif Bitwise.BitAnd(mnr52,&h04)<>0 then mixAudio3(buffer,length,channels) srclStrnGif Bitwise.BitAnd(mnr52,&h08)<>0 then mixAudio4(buffer,length,channels) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn=buffer as memoryblock, length as integer, channels as integer rsltStrnEndGInt MethGrup nameStrngetAudio1Sweep CompStrnVsblInt sorcGrupp EncoInt srclStrn$Function getAudio1Sweep() As integersrclStrn Return mnr10srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio1Length CompStrnVsblInt sorcGrupt EncoInt srclStrn%Function getAudio1Length() As integer srclStrn return mnr11srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio1Envelope CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getAudio1Envelope() As integer srclStrn return mnr12srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio1Frequency CompStrnVsblInt sorcGrupt EncoInt srclStrn(Function getAudio1Frequency() As integersrclStrn return mnr13srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio1Playback CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getAudio1Playback() As integer srclStrn return mnr14srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup| nameStrnsetAudio1Sweep CompStrnVsblInt sorcGrup EncoInt srclStrn#Sub setAudio1Sweep(data as integer) srclStrn mnr10 = datasrclStrnZaudio1SweepLength = (SOUND_CLOCK / 128) * Bitwise.BitAnd(Bitwise.ShiftRight(mnr10,4),&h07) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupd nameStrnsetAudio1Length CompStrnVsblInt sorcGrup EncoInt srclStrn$Sub setAudio1Length(data as integer)srclStrn mnr11 = datasrclStrnDaudio1Length = (SOUND_CLOCK / 256) *(64- Bitwise.BitAnd(mnr11,&h07))srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio1Envelope CompStrnVsblInt sorcGrup EncoInt srclStrn&Sub setAudio1Envelope(data as integer) srclStrn mnr12 = datasrclStrn&if Bitwise.BitAnd(mnr14,&h40) = 0 then srclStrn%if Bitwise.ShiftRight(mnr12,4)=0 then srclStrnaudio1Volume = 0srclStrnelsesrclStrnAif audio1EnvelopeLength = 0 and Bitwise.BitAnd(mnr12,&h07)=0 then srclStrn4audio1Volume = Bitwise.BitAnd(audio1Volume + 1,&h0F)srclStrnelsesrclStrn4audio1Volume = Bitwise.BitAnd(audio1Volume + 2,&h0F)srclStrnend if srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio1Frequency CompStrnVsblInt sorcGrup EncoInt srclStrn'Sub setAudio1Frequency(data as integer) srclStrn mnr13 = datasrclStrnoaudio1Frequency = frequencyTable(Bitwise.ShiftRight(mnr13,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(mnr14,&h07),7)) srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio1Playback CompStrnVsblInt sorcGrup EncoInt srclStrn&Sub setAudio1Playback(data as integer) srclStrn mnr14 = datasrclStrnsrclStrnoaudio1Frequency = frequencyTable(Bitwise.ShiftRight(mnr13,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(mnr14,&h07),7)) srclStrnsrclStrn&if Bitwise.BitAnd(mnr14,&h80)<> 0 then srclStrnmnr52 = Bitwise.BitOr(mnr52,1) srclStrn 0 and audio1Length = 0 thensrclStrn$audio1Length = (SOUND_CLOCK /256)*64srclStrnend if srclStrnZaudio1SweepLength = (SOUND_CLOCK / 128) * Bitwise.BitAnd(Bitwise.ShiftRight(mnr10,4),&h07) srclStrn*audio1Volume = Bitwise.ShiftRight(mnr12,4) srclStrnFaudio1EnvelopeLength = (SOUND_CLOCK / 64) * Bitwise.BitAnd(mnr12,&h07) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup ( nameStrn updateAudio1CompStrnVsblInt sorcGrup EncoInt srclStrnSub updateAudio1() srclStrn&if Bitwise.BitAnd(mnr14,&h40)<> 0 then srclStrnif audio1Length> 0 then srclStrnaudio1Length = audio1Length -1 srclStrnif audio1Length <= 0 then srclStrn:mnr52 = Bitwise.BitAnd(mnr52,Bitwise.OnesComplement(&h01)) srclStrnend if srclStrnend if srclStrnend if srclStrnsrclStrn if audio1EnvelopeLength > 0 thensrclStrn.audio1EnvelopeLength = audio1EnvelopeLength -1 srclStrnsrclStrn!if audio1EnvelopeLength <= 0 then srclStrn'if Bitwise.BitAnd(mnr12,&h08) <> 0 then srclStrnif audio1Volume < 15 then srclStrnaudio1Volume = audio1Volume + 1 srclStrnend if srclStrnelsesrclStrnif audio1Volume >0 then srclStrnaudio1Volume = audio1Volume -1 srclStrnend if srclStrnend if srclStrn[audio1EnvelopeLength = audio1EnvelopeLength + (SOUND_CLOCK/64) * Bitwise.BitAnd(mnr12,&h07) srclStrnend if srclStrnend if srclStrnsrclStrnif audio1sweepLength > 0 then srclStrn(audio1sweepLength = audio1sweepLength -1srclStrnsrclStrnif audio1sweepLength <= 0 then srclStrn6dim SweepSteps as integer = Bitwise.BitAnd(mnr10,&h07) srclStrnif SweepSteps <> 0 then srclStrnRdim frequency as integer = Bitwise.ShiftLeft(Bitwise.BitAnd(mnr14,&h07),8) + mnr13 srclStrn&if Bitwise.BitAnd(mnr10,&h08)<> 0 then srclStrn@frequency = frequency - Bitwise.ShiftRight(frequency,SweepSteps)srclStrnelsesrclStrn@frequency = frequency + Bitwise.ShiftRight(frequency,SweepSteps)srclStrnend if srclStrnif frequency < 2048 thensrclStrnAaudio1Frequency = frequencyTable(Bitwise.ShiftRight(frequency,1)) srclStrn%mnr13= Bitwise.BitAnd(frequency,&hFF) srclStrnYmnr14 = Bitwise.BitAnd(mnr14,&hF8) + Bitwise.BitAnd(Bitwise.ShiftRight(frequency,8),&h07) srclStrnelsesrclStrnaudio1Frequency = 0 srclStrn:mnr52 = Bitwise.BitAnd(mnr52,Bitwise.OnesComplement(&h01)) srclStrnend if srclStrnend if srclStrnnaudio1SweepLength = audio1SweepLength + (SOUND_CLOCK / 128) * Bitwise.BitAnd(Bitwise.ShiftRight(mnr10,4),&h07) srclStrnend if srclStrnend if srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn mixAudio1 CompStrnVsblInt sorcGrup EncoInt srclStrnLSub mixAudio1(buffer as memoryblock, length as integer, channels as integer)srclStrndim wavepattern as integer srclStrn)if Bitwise.BitAnd(mnr11,&hC0) = &h00 then srclStrnwavepattern = &h04 srclStrn-elseif Bitwise.BitAnd(mnr11,&hC0) = &h40 then srclStrnwavepattern = &h08 srclStrn-elseif Bitwise.BitAnd(mnr11,&hC0) = &h80 then srclStrnwavepattern = &h10 srclStrnelsesrclStrnwavepattern = &h18 srclStrnend if srclStrn/wavepattern = Bitwise.ShiftLeft(wavepattern,22) srclStrnsrclStrn'if Bitwise.BitAnd(mnr51,&h11) <> 0 then srclStrnif channels = 2 thensrclStrn+for index as integer = 0 to length-1 step 2 srclStrn+audio1Index = audio1Index + audio1Frequency srclStrnMif Bitwise.BitAnd(audio1Index, Bitwise.ShiftLeft(&h1F,22))>= wavepattern then srclStrn%if Bitwise.BitAnd(mnr51,&h10)<>0 then srclStrnFbuffer.uint8Value(index+0) = buffer.uint8Value(index+0) - audio1Volume srclStrnend if srclStrn%if Bitwise.BitAnd(mnr51,&h01)<>0 then srclStrnFbuffer.uint8Value(index+1) = buffer.uint8Value(index+1) - audio1Volume srclStrnend if srclStrnelsesrclStrn%if Bitwise.BitAnd(mnr51,&h10)<>0 then srclStrnFbuffer.uint8Value(index+0) = buffer.uint8Value(index+0) + audio1Volume srclStrnend if srclStrn%if Bitwise.BitAnd(mnr51,&h01)<>0 then srclStrnFbuffer.uint8Value(index+1) = buffer.uint8Value(index+1) + audio1Volume srclStrnend if srclStrnend if srclStrnnextsrclStrnelsesrclStrn$for index as integer = 0 to length-1srclStrn+audio1Index = audio1Index + audio1Frequency srclStrnMif Bitwise.BitAnd(audio1Index, Bitwise.ShiftLeft(&h1F,22))>= wavepattern then srclStrnBbuffer.uint8Value(index) = buffer.uint8Value(index) - audio1Volume srclStrnelsesrclStrnBbuffer.uint8Value(index) = buffer.uint8Value(index) + audio1Volume srclStrnend if srclStrnnextsrclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn=buffer as memoryblock, length as integer, channels as integer rsltStrnEndGInt MethGrup nameStrngetAudio2Length CompStrnVsblInt sorcGrupt EncoInt srclStrn%Function getAudio2Length() As integer srclStrn return mnr21srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio2Envelope CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getAudio2Envelope() As integer srclStrn return mnr22srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio2Frequency CompStrnVsblInt sorcGrupt EncoInt srclStrn(Function getAudio2Frequency() As integersrclStrn return mnr23srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio2Playback CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getAudio2Playback() As integer srclStrn return mnr24srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrupd nameStrnsetAudio2Length CompStrnVsblInt sorcGrup EncoInt srclStrn$Sub setAudio2Length(data as integer)srclStrn mnr21 = datasrclStrnDaudio2Length = (SOUND_CLOCK / 256) *(64- Bitwise.BitAnd(mnr21,&h3F))srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio2Envelope CompStrnVsblInt sorcGrup EncoInt srclStrn&Sub setAudio2Envelope(data as integer) srclStrn mnr22 = datasrclStrn&if Bitwise.BitAnd(mnr24,&h40) = 0 then srclStrn%if Bitwise.ShiftRight(mnr22,4)=0 then srclStrnaudio2Volume = 0srclStrnelsesrclStrnAif audio2EnvelopeLength = 0 and Bitwise.BitAnd(mnr22,&h07)=0 then srclStrn4audio2Volume = Bitwise.BitAnd(audio2Volume + 1,&h0F)srclStrnelsesrclStrn4audio2Volume = Bitwise.BitAnd(audio2Volume + 2,&h0F)srclStrnend if srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio2Frequency CompStrnVsblInt sorcGrup EncoInt srclStrn'Sub setAudio2Frequency(data as integer) srclStrn mnr23 = datasrclStrnoaudio2Frequency = frequencyTable(Bitwise.ShiftRight(mnr23,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(mnr24,&h07),7)) srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup< nameStrnsetAudio2Playback CompStrnVsblInt sorcGrup EncoInt srclStrn&Sub setAudio2Playback(data as integer) srclStrn mnr24 = datasrclStrnsrclStrnoaudio2Frequency = frequencyTable(Bitwise.ShiftRight(mnr23,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(mnr24,&h07),7)) srclStrnsrclStrn&if Bitwise.BitAnd(mnr24,&h80)<> 0 then srclStrnmnr52 = Bitwise.BitOr(mnr52,2) srclStrn 0 and audio2Length = 0 thensrclStrn$audio2Length = (SOUND_CLOCK /256)*64srclStrnend if srclStrn*audio2Volume = Bitwise.ShiftRight(mnr22,4) srclStrnFaudio2EnvelopeLength = (SOUND_CLOCK / 64) * Bitwise.BitAnd(mnr22,&h07) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrn updateAudio2CompStrnVsblInt sorcGrup EncoInt srclStrnSub updateAudio2() srclStrn&if Bitwise.BitAnd(mnr24,&h40)<> 0 then srclStrnif audio2Length> 0 then srclStrnaudio2Length = audio2Length -1 srclStrnif audio2Length <= 0 then srclStrn:mnr52 = Bitwise.BitAnd(mnr52,Bitwise.OnesComplement(&h02)) srclStrnend if srclStrnend if srclStrnend if srclStrnsrclStrn if audio2EnvelopeLength > 0 thensrclStrn.audio2EnvelopeLength = audio2EnvelopeLength -1 srclStrnsrclStrn!if audio2EnvelopeLength <= 0 then srclStrn'if Bitwise.BitAnd(mnr22,&h08) <> 0 then srclStrnif audio2Volume < 15 then srclStrnaudio2Volume = audio2Volume + 1 srclStrnend if srclStrnelsesrclStrnif audio2Volume >0 then srclStrnaudio2Volume = audio2Volume -1 srclStrnend if srclStrnend if srclStrn[audio2EnvelopeLength = audio2EnvelopeLength + (SOUND_CLOCK/64) * Bitwise.BitAnd(mnr22,&h07) srclStrnend if srclStrnend if srclStrnsrclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn mixAudio2 CompStrnVsblInt sorcGrup EncoInt srclStrnLSub mixAudio2(buffer as memoryblock, length as integer, channels as integer)srclStrndim wavepattern as integer srclStrn)if Bitwise.BitAnd(mnr21,&hC0) = &h00 then srclStrnwavepattern = &h04 srclStrn-elseif Bitwise.BitAnd(mnr21,&hC0) = &h40 then srclStrnwavepattern = &h08 srclStrn-elseif Bitwise.BitAnd(mnr21,&hC0) = &h80 then srclStrnwavepattern = &h10 srclStrnelsesrclStrnwavepattern = &h18 srclStrnend if srclStrn/wavepattern = Bitwise.ShiftLeft(wavepattern,22) srclStrnsrclStrn'if Bitwise.BitAnd(mnr51,&h22) <> 0 then srclStrnif channels = 2 thensrclStrn+for index as integer = 0 to length-1 step 2 srclStrn+audio2Index = audio2Index + audio2Frequency srclStrnMif Bitwise.BitAnd(audio2Index, Bitwise.ShiftLeft(&h1F,22))>= wavepattern then srclStrn%if Bitwise.BitAnd(mnr51,&h20)<>0 then srclStrnFbuffer.uint8Value(index+0) = buffer.uint8Value(index+0) - audio2Volume srclStrnend if srclStrn%if Bitwise.BitAnd(mnr51,&h02)<>0 then srclStrnFbuffer.uint8Value(index+1) = buffer.uint8Value(index+1) - audio2Volume srclStrnend if srclStrnelsesrclStrn%if Bitwise.BitAnd(mnr51,&h20)<>0 then srclStrnFbuffer.uint8Value(index+0) = buffer.uint8Value(index+0) + audio2Volume srclStrnend if srclStrn%if Bitwise.BitAnd(mnr51,&h02)<>0 then srclStrnFbuffer.uint8Value(index+1) = buffer.uint8Value(index+1) + audio2Volume srclStrnend if srclStrnend if srclStrnnextsrclStrnelsesrclStrn$for index as integer = 0 to length-1srclStrn+audio2Index = audio2Index + audio2Frequency srclStrnMif Bitwise.BitAnd(audio2Index, Bitwise.ShiftLeft(&h1F,22))>= wavepattern then srclStrnBbuffer.uint8Value(index) = buffer.uint8Value(index) - audio2Volume srclStrnelsesrclStrnBbuffer.uint8Value(index) = buffer.uint8Value(index) + audio2Volume srclStrnend if srclStrnnextsrclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn=buffer as memoryblock, length as integer, channels as integer rsltStrnEndGInt MethGrup nameStrngetAudio3Enable CompStrnVsblInt sorcGrupt EncoInt srclStrn%Function getAudio3Enable() As integer srclStrn return mnr30srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio3Length CompStrnVsblInt sorcGrupt EncoInt srclStrn%Function getAudio3Length() As integer srclStrn return mnr31srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio3Level CompStrnVsblInt sorcGrupp EncoInt srclStrn$Function getAudio3Level() As integersrclStrn return mnr32srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio3Frequency CompStrnVsblInt sorcGrupt EncoInt srclStrn(Function getAudio3Frequency() As integersrclStrn return mnr33srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetAudio3Playback CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getAudio3Playback() As integer srclStrn return mnr34srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrnsetAudio3Enable CompStrnVsblInt sorcGrup EncoInt srclStrn$Sub setAudio3Enable(data as integer)srclStrn!mnr30 = Bitwise.BitAnd(data,&h80) srclStrnaif Bitwise.BitAnd(mnr30,&h80) = 0 then mnr52 = Bitwise.BitAnd(mnr52,Bitwise.OnesComplement(&h04)) srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupP nameStrnsetAudio3Length CompStrnVsblInt sorcGrup EncoInt srclStrn$Sub setAudio3Length(data as integer)srclStrn mnr31 = datasrclStrn/audio3Length = (SOUND_CLOCK / 256) *(256-mnr31) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio3Level CompStrnVsblInt sorcGrupl EncoInt srclStrn#Sub setAudio3Level(data as integer) srclStrn mnr32 = datasrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio3Frequency CompStrnVsblInt sorcGrup EncoInt srclStrn'Sub setAudio3Frequency(data as integer) srclStrn mnr33 = datasrclStrnaudio3Frequency = Bitwise.ShiftRight(frequencyTable(Bitwise.ShiftRight(mnr33,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(mnr34,&h07),7)),1) srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio3Playback CompStrnVsblInt sorcGrup@ EncoInt srclStrn&Sub setAudio3Playback(data as integer) srclStrn mnr34 = datasrclStrnsrclStrnaudio3Frequency = Bitwise.ShiftRight(frequencyTable(Bitwise.ShiftRight(mnr33,1) + Bitwise.ShiftLeft(Bitwise.BitAnd(mnr34,&h07),7)),1) srclStrnsrclStrnHif Bitwise.BitAnd(mnr34,&h80)<> 0 and Bitwise.BitAnd(mnr30,&h80)<>0 thensrclStrnmnr52 = Bitwise.BitOr(mnr52,4) srclStrn 0 and audio3Length = 0 thensrclStrn%audio3Length = (SOUND_CLOCK /256)*256 srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetAudio3WavePatternCompStrnVsblInt sorcGrup EncoInt srclStrn=Sub setAudio3WavePattern(address as integer, data as integer) srclStrnAaudio3WavePattern.uint8Value(Bitwise.BitAnd(Address,&h0F)) = data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrup nameStrngetAudio3WavePatternCompStrnVsblInt sorcGrup EncoInt srclStrn0 then srclStrnif audio3Length >0 then srclStrnaudio3Length = audio3Length - 1 srclStrnif audio3Length <= 0 then srclStrn:mnr52 = Bitwise.BitAnd(mnr52,Bitwise.OnesComplement(&h04)) srclStrnend if srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup X nameStrn mixAudio3 CompStrnVsblInt sorcGrup EncoInt srclStrnLSub mixAudio3(buffer as memoryblock, length as integer, channels as integer)srclStrndim level as integersrclStrn)if Bitwise.BitAnd(mnr32,&h60) = &h00 then srclStrn level = 8 srclStrn-elseif Bitwise.BitAnd(mnr32,&h60) = &h20 then srclStrn level = 0 srclStrn-elseif Bitwise.BitAnd(mnr32,&h60) = &h40 then srclStrn level = 1 srclStrnelsesrclStrn level = 2 srclStrnend if srclStrnsrclStrn'if Bitwise.BitAnd(mnr51,&h44) <> 0 then srclStrnif channels = 2 thensrclStrn+for index as integer = 0 to length-1 step 2 srclStrn+audio3Index = audio3Index + audio3Frequency srclStrnmdim sample as integer = audio3WavePattern.uint8Value(Bitwise.BitAnd(Bitwise.ShiftRight(audio3Index,23),&h0F)) srclStrnsrclStrn?if Bitwise.BitAnd(audio3Index,Bitwise.ShiftLeft(1,22))<> 0 then srclStrn:sample = Bitwise.BitAnd(Bitwise.ShiftRight(sample,0),&h0F) srclStrnelsesrclStrn:sample = Bitwise.BitAnd(Bitwise.ShiftRight(sample,4),&h0F) srclStrnend if srclStrnsrclStrn@sample = Bitwise.ShiftRight(Bitwise.ShiftLeft(sample-8,1),level)srclStrnsrclStrn&if Bitwise.BitAnd(mnr51,&h40)<> 0 then srclStrn@buffer.uint8Value(index+0) = buffer.uint8value(index+0) + samplesrclStrnend if srclStrn&if Bitwise.BitAnd(mnr51,&h04)<> 0 then srclStrn@buffer.uint8Value(index+1) = buffer.uint8value(index+1) + samplesrclStrnend if srclStrnnextsrclStrnelsesrclStrn$for index as integer = 0 to length-1srclStrn+audio3Index = audio3Index + audio3Frequency srclStrnmdim sample as integer = audio3WavePattern.uint8Value(Bitwise.BitAnd(Bitwise.ShiftRight(audio3Index,23),&h0F)) srclStrn?if Bitwise.BitAnd(audio3Index,Bitwise.ShiftLeft(1,22))<> 0 then srclStrn:sample = Bitwise.BitAnd(Bitwise.ShiftRight(sample,0),&h0F) srclStrnelsesrclStrn:sample = Bitwise.BitAnd(Bitwise.ShiftRight(sample,4),&h0F) srclStrnend if srclStrn@sample = Bitwise.ShiftRight(Bitwise.ShiftLeft(sample-8,1),level)srclStrn 0 then srclStrn!mnr52 = Bitwise.BitOr(mnr52,&h08) srclStrn 0 and audio4Length = 0 thensrclStrn$audio4Length = (SOUND_CLOCK /256)*64srclStrnend if srclStrn*audio4Volume = Bitwise.ShiftRight(mnr42,4) srclStrnFaudio4EnvelopeLength = (SOUND_CLOCK / 64) * Bitwise.BitAnd(mnr42,&h07) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrn updateAudio4CompStrnVsblInt sorcGrup EncoInt srclStrnSub updateAudio4() srclStrn&if Bitwise.BitAnd(mnr44,&h40)<> 0 then srclStrnif audio4Length> 0 then srclStrnaudio4Length = audio4Length -1 srclStrnif audio4Length <= 0 then srclStrn:mnr52 = Bitwise.BitAnd(mnr52,Bitwise.OnesComplement(&h08)) srclStrnend if srclStrnend if srclStrnend if srclStrnsrclStrn if audio4EnvelopeLength > 0 thensrclStrn.audio4EnvelopeLength = audio4EnvelopeLength -1 srclStrnsrclStrn!if audio4EnvelopeLength <= 0 then srclStrn'if Bitwise.BitAnd(mnr42,&h08) <> 0 then srclStrnif audio4Volume < 15 then srclStrnaudio4Volume = audio4Volume + 1 srclStrnend if srclStrnelsesrclStrnif audio4Volume >0 then srclStrnaudio4Volume = audio4Volume -1 srclStrnend if srclStrnend if srclStrn[audio4EnvelopeLength = audio4EnvelopeLength + (SOUND_CLOCK/64) * Bitwise.BitAnd(mnr42,&h07) srclStrnend if srclStrnend if srclStrnsrclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup p nameStrn mixAudio4 CompStrnVsblInt sorcGrup EncoInt srclStrnLSub mixAudio4(buffer as memoryblock, length as integer, channels as integer)srclStrnsrclStrn'if Bitwise.BitAnd(mnr51,&h88) <> 0 then srclStrnif channels = 2 thensrclStrn+for index as integer = 0 to length-1 step 2 srclStrn+audio4Index = audio4Index + audio4Frequency srclStrndim polyomial as integersrclStrn'if Bitwise.BitAnd(mnr43,&h08) <> 0 then srclStrn //7 steps srclStrn2audio4Index = Bitwise.BitAnd(audio4Index,&h7FFFFF) srclStrnpolyomial = Bitwise.ShiftRight(noiseStep7Table(Bitwise.ShiftRight(audio4Index,21)),Bitwise.BitAnd(Bitwise.ShiftRight(audio4Index,16),31)) srclStrnelsesrclStrn //15 steps srclStrn4audio4Index = Bitwise.BitAnd(audio4Index,&h7FFFFFFF)srclStrnpolyomial = Bitwise.ShiftRight(noiseStep15Table(Bitwise.ShiftRight(audio4Index,21)),Bitwise.BitAnd(Bitwise.ShiftRight(audio4Index,16),31)) srclStrnend if srclStrnsrclStrn'if Bitwise.BitAnd(polyomial,1)<> 0 then srclStrn'if Bitwise.BitAnd(mnr51,&h80) <> 0 then srclStrnFbuffer.uint8Value(index+0) = buffer.uint8Value(index+0) - audio4Volume srclStrnend if srclStrn'if Bitwise.BitAnd(mnr51,&h08) <> 0 then srclStrnFbuffer.uint8Value(index+1) = buffer.uint8Value(index+1) - audio4Volume srclStrnend if srclStrnelsesrclStrn'if Bitwise.BitAnd(mnr51,&h80) <> 0 then srclStrnFbuffer.uint8Value(index+0) = buffer.uint8Value(index+0) + audio4Volume srclStrnend if srclStrn'if Bitwise.BitAnd(mnr51,&h08) <> 0 then srclStrnFbuffer.uint8Value(index+1) = buffer.uint8Value(index+1) + audio4Volume srclStrnend if srclStrnend if srclStrnnextsrclStrnelsesrclStrn$for index as integer = 0 to length-1srclStrn+audio4Index = audio4Index + audio4Frequency srclStrndim polyomial as integersrclStrn'if Bitwise.BitAnd(mnr43,&h08) <> 0 then srclStrn //7 steps srclStrn2audio4Index = Bitwise.BitAnd(audio4Index,&h7FFFFF) srclStrnpolyomial = Bitwise.ShiftRight(noiseStep7Table(Bitwise.ShiftRight(audio4Index,21)),Bitwise.BitAnd(Bitwise.ShiftRight(audio4Index,16),31)) srclStrnelsesrclStrn //15 steps srclStrn4audio4Index = Bitwise.BitAnd(audio4Index,&h7FFFFFFF)srclStrnpolyomial = Bitwise.ShiftRight(noiseStep15Table(Bitwise.ShiftRight(audio4Index,21)),Bitwise.BitAnd(Bitwise.ShiftRight(audio4Index,16),31)) srclStrnend if srclStrnsrclStrn'if Bitwise.BitAnd(polyomial,1)<> 0 then srclStrnBbuffer.uint8Value(index) = buffer.uint8Value(index) - audio4Volume srclStrnelsesrclStrnBbuffer.uint8Value(index) = buffer.uint8Value(index) + audio4Volume srclStrnend if srclStrnnextsrclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn=buffer as memoryblock, length as integer, channels as integer rsltStrnEndGInt MethGrup nameStrngetOutputlevel CompStrnVsblInt sorcGrupp EncoInt srclStrn$Function getOutputlevel() As integersrclStrn return mnr50srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetOutputTerminal CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getOutputTerminal() As integer srclStrn return mnr51srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetOutputEnable CompStrnVsblInt sorcGrupt EncoInt srclStrn%Function getOutputEnable() As integer srclStrn return mnr52srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrnsetOutputLevel CompStrnVsblInt sorcGrupl EncoInt srclStrn#Sub setOutputLevel(data as integer) srclStrn mnr50=data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetOutputTerminal CompStrnVsblInt sorcGrupp EncoInt srclStrn&Sub setOutputTerminal(data as integer) srclStrn mnr51 = datasrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetOutputEnable CompStrnVsblInt sorcGrup$ EncoInt srclStrn$Sub setOutputEnable(data as integer)srclStrnKmnr52 = Bitwise.BitOr(Bitwise.BitAnd(mnr52,&h7F),Bitwise.BitAnd(data,&h80)) srclStrn&if Bitwise.BitAnd(mnr52,&h80) = 0 then srclStrn"mnr52 = Bitwise.BitAnd(mnr52,&hF0) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrngetAudio4Frequency CompStrnVsblInt sorcGrupt EncoInt srclStrn(Function getAudio4Frequency() As integersrclStrn return mnr33srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngenerateFrequencyTables CompStrnVsblInt sorcGrupd EncoInt srclStrnSub generateFrequencyTables() srclStrn2dim sampleRate as integer = driver.getSampleRate() srclStrnsrclStrn)//frequency (4194304/32)/(2048-period) Hz srclStrnsrclStrn+for period as integer = 0 to 2048 -1 step 2 srclStrnldim skip as integer = Bitwise.ShiftLeft(Bitwise.ShiftLeft(GAMEBOY_CLOCK,10)/sampleRate,22-8) / (2048-period)srclStrnsrclStrn(if skip >= Bitwise.ShiftLeft(32,22) thensrclStrn/frequencyTable(Bitwise.ShiftRight(period,1))= 0 srclStrnelsesrclStrn1frequencyTable(Bitwise.ShiftRight(period,1))=skip srclStrnend if srclStrnnextsrclStrnsrclStrnsrclStrn#' Polynomial Noise Frequency Ratios srclStrn' srclStrn' 4194304 Hz * 1/2^3 * 2srclStrn' 4194304 Hz * 1/2^3 * 1srclStrn' 4194304 Hz * 1/2^3 * 1/2 srclStrn' 4194304 Hz * 1/2^3 * 1/3 srclStrn' 4194304 Hz * 1/2^3 * 1/4 srclStrn' 4194304 Hz * 1/2^3 * 1/5 srclStrn' 4194304 Hz * 1/2^3 * 1/6 srclStrn' 4194304 Hz * 1/2^3 * 1/7 srclStrnsrclStrnfor ratio as integer = 0 to 8 srclStrnif ratio = 0 then srclStrnSnoiseFreqRatioTable(ratio) = (GAMEBOY_CLOCK/1)*(Bitwise.ShiftLeft(1,16)/sampleRate) srclStrnelsesrclStrnYnoiseFreqRatioTable(ratio) = (GAMEBOY_CLOCK/2*ratio)*(Bitwise.ShiftLeft(1,16)/sampleRate) srclStrnend if srclStrnnextsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrngenerateNoiseTables CompStrnVsblInt sorcGrup8 EncoInt srclStrnSub generateNoiseTables() srclStrn //7 steps srclStrn dim polynomial as integer = &h7FsrclStrn for index as integer = 0 to &h7FsrclStrnpolynomial = Bitwise.BitOr(Bitwise.BitAnd(Bitwise.BitXor(Bitwise.ShiftLeft(polynomial,6),Bitwise.ShiftLeft(polynomial,5)),&h40),Bitwise.ShiftRight(polynomial,1)) srclStrn%if Bitwise.BitAnd(index, 31) = 0 then srclStrn0noiseStep7Table(Bitwise.ShiftRight(index,5)) = 0srclStrnend if srclStrnnoiseStep7Table(Bitwise.ShiftRight(index,5)) = Bitwise.BitOr(noiseStep7Table(Bitwise.ShiftRight(index,5)),Bitwise.ShiftLeft(Bitwise.BitAnd(polynomial,1),Bitwise.BitAnd(index,31))) srclStrnnextsrclStrn //15 steps srclStrnpolynomial = &h7FFF srclStrn"for index as integer = 0 to &h7FFF srclStrnpolynomial = Bitwise.BitOr(Bitwise.BitAnd(Bitwise.BitXor(Bitwise.ShiftLeft(polynomial,14),Bitwise.ShiftLeft(polynomial,13)),&h4000),Bitwise.ShiftRight(polynomial,1)) srclStrn%if Bitwise.BitAnd(index, 31) = 0 then srclStrn1noiseStep15Table(Bitwise.ShiftRight(index,5)) = 0 srclStrnend if srclStrnnoiseStep15Table(Bitwise.ShiftRight(index,5)) = Bitwise.BitOr(noiseStep15Table(Bitwise.ShiftRight(index,5)),Bitwise.ShiftLeft(Bitwise.BitAnd(polynomial,1),Bitwise.BitAnd(index,31))) srclStrnnextsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt PropGrup\ EncoInt declStrndriver As sounddriver = nil flagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr10 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr11 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr12 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr13 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr14 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnaudio1Index As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnaudio1Length As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnaudio1Volume As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupd EncoInt declStrn#audio1EnvelopeLength As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup` EncoInt declStrn audio1SweepLength As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrup` EncoInt declStrnaudio1Frequency As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr21 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr22 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr23 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr24 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnaudio2Index As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnaudio2Length As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnaudio2Volume As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupd EncoInt declStrn#audio2EnvelopeLength As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup` EncoInt declStrnaudio2Frequency As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr30 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr31 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr32 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP EncoInt declStrnmnr33 As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupP !EncoInt declStrnmnr34 As IntegerflagInt !CompStrnshrdInt EndGInt !PropGrup\ "EncoInt declStrnaudio3Index As Integer = 0 flagInt !CompStrnshrdInt EndGInt "PropGrup\ #EncoInt declStrnaudio3Length As Integer = 0 flagInt !CompStrnshrdInt EndGInt #PropGrup` $EncoInt declStrnaudio3Frequency As Integer = 0 flagInt !CompStrnshrdInt EndGInt $PropGruph %EncoInt declStrn&audio3WavePattern As memoryblock = nil flagInt !CompStrnshrdInt EndGInt %PropGrupP &EncoInt declStrnmnr41 As IntegerflagInt !CompStrnshrdInt EndGInt &PropGrupP 'EncoInt declStrnmnr42 As IntegerflagInt !CompStrnshrdInt EndGInt 'PropGrupP (EncoInt declStrnmnr43 As IntegerflagInt !CompStrnshrdInt EndGInt (PropGrupP )EncoInt declStrnmnr44 As IntegerflagInt !CompStrnshrdInt EndGInt )PropGrup\ *EncoInt declStrnaudio4Index As Integer = 0 flagInt !CompStrnshrdInt EndGInt *PropGrup\ +EncoInt declStrnaudio4Length As Integer = 0 flagInt !CompStrnshrdInt EndGInt +PropGrup\ ,EncoInt declStrnaudio4Volume As Integer = 0 flagInt !CompStrnshrdInt EndGInt ,PropGrupd -EncoInt declStrn#audio4EnvelopeLength As Integer = 0 flagInt !CompStrnshrdInt EndGInt -PropGrup` .EncoInt declStrnaudio4Frequency As Integer = 0 flagInt !CompStrnshrdInt EndGInt .PropGrupP /EncoInt declStrnmnr51 As IntegerflagInt !CompStrnshrdInt EndGInt /PropGrupP 0EncoInt declStrnmnr52 As IntegerflagInt !CompStrnshrdInt EndGInt 0PropGrupX 1EncoInt declStrnframes As Integer = 0 flagInt !CompStrnshrdInt EndGInt 1PropGrupX 2EncoInt declStrncycles As Integer = 0 flagInt !CompStrnshrdInt EndGInt 2PropGrup\ 3EncoInt declStrnbuffer As memoryblock = nil flagInt !CompStrnshrdInt EndGInt 3PropGrup` 4EncoInt declStrnfrequencyTable(1024) As integer flagInt !CompStrnshrdInt EndGInt 4PropGrupd 5EncoInt declStrn!noiseFreqRatioTable(8) As Integer flagInt !CompStrnshrdInt EndGInt 5PropGrup` 6EncoInt declStrnnoiseStep7Table(4) As Integer flagInt !CompStrnshrdInt EndGInt 6PropGrupd 7EncoInt declStrn!noiseStep15Table(1024) As Integer flagInt !CompStrnshrdInt EndGInt 7PropGrupP 8EncoInt declStrnmnr50 As IntegerflagInt !CompStrnshrdInt EndGInt 8VwBhGrup 9VwPrGrupD :NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt :VwPrGrup` ;NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt ;VwPrGrupH NameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt >EndGInt 9CnstGrup\ ?EncoInt nameStrn GAMEBOY_CLOCK typeInt defnStrn &h100000 flagInt EndGInt ?CnstGrupP @EncoInt nameStrn SOUND_CLOCK typeInt defnStrn256 flagInt EndGInt @CnstGrupL AEncoInt nameStrnNR10typeInt defnStrn&HFF10 flagInt EndGInt ACnstGrupL BEncoInt nameStrnNR11typeInt defnStrn&HFF11 flagInt EndGInt BCnstGrupL CEncoInt nameStrnNR12typeInt defnStrn&HFF12 flagInt EndGInt CCnstGrupL DEncoInt nameStrnNR14typeInt defnStrn&HFF14 flagInt EndGInt DCnstGrupL EEncoInt nameStrnNR13typeInt defnStrn&HFF13 flagInt EndGInt ECnstGrupL FEncoInt nameStrnNR22typeInt defnStrn&HFF17 flagInt EndGInt FCnstGrupL GEncoInt nameStrnNR21typeInt defnStrn&HFF16 flagInt EndGInt GCnstGrupL HEncoInt nameStrnNR23typeInt defnStrn&HFF18 flagInt EndGInt HCnstGrupL IEncoInt nameStrnNR24typeInt defnStrn&HFF19 flagInt EndGInt ICnstGrupL JEncoInt nameStrnNR30typeInt defnStrn&HFF1A flagInt EndGInt JCnstGrupL KEncoInt nameStrnNR31typeInt defnStrn&HFF1B flagInt EndGInt KCnstGrupL LEncoInt nameStrnNR32typeInt defnStrn&HFF1C flagInt EndGInt LCnstGrupL MEncoInt nameStrnNR33typeInt defnStrn&HFF1D flagInt EndGInt MCnstGrupL NEncoInt nameStrnNR34typeInt defnStrn&HFF1E flagInt EndGInt NCnstGrupL OEncoInt nameStrnNR41typeInt defnStrn&HFF20 flagInt EndGInt OCnstGrupL PEncoInt nameStrnNR42typeInt defnStrn&HFF21 flagInt EndGInt PCnstGrupL QEncoInt nameStrnNR43typeInt defnStrn&HFF22 flagInt EndGInt QCnstGrupL REncoInt nameStrnNR44typeInt defnStrn&HFF23 flagInt EndGInt RCnstGrupL SEncoInt nameStrnNR50typeInt defnStrn&HFF24 flagInt EndGInt SCnstGrupL TEncoInt nameStrnNR51typeInt defnStrn&HFF25 flagInt EndGInt TCnstGrupL UEncoInt nameStrnNR52typeInt defnStrn&HFF26 flagInt EndGInt UCnstGrupT VEncoInt nameStrn AUD3WAVERAM typeInt defnStrn&HFF30 flagInt EndGInt VPadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj$NameStrnTimer_gbContInt paswStrnbClsInt bNtrInt CompStrnMethGrup WnameStrn Constructor CompStrnVsblInt sorcGrup XEncoInt srclStrn(Sub Constructor(iInterrupt as Interrupt)srclStrnTIMER_CLOCK(0)=4096 srclStrnTIMER_CLOCK(1)=262144 srclStrnTIMER_CLOCK(2)=65536srclStrnTIMER_CLOCK(3)=16384srclStrnsrclStrnmInterrupt = iInterrupt srclStrnreset() srclStrnEnd Sub EndGInt XEncoInt AlasStrnflagInt shrdInt parmStrniInterrupt as Interrupt rsltStrnEndGInt WMethGrup YnameStrnreset CompStrnVsblInt sorcGrup8 ZEncoInt srclStrn Sub reset() srclStrnmdiv = 0srclStrndividerCycles = DIV_CLOCK srclStrn mtima = 0 srclStrnmtma= 0 srclStrnmtac = 0srclStrn4timerCycles = TIMER_CLOCK(Bitwise.BitAnd(mtac,&h03))srclStrn3timerClock = TIMER_CLOCK(Bitwise.BitAnd(mtac,&h03)) srclStrnEnd Sub EndGInt ZEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt YMethGrup$ [nameStrnwrite CompStrnVsblInt sorcGrupp \EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnselect case address srclStrncase DIVsrclStrnsetDivider(data)srclStrn case TIMA srclStrnsetTimerCounter(data) srclStrncase TMAsrclStrnsetTimerModulo(data)srclStrncase TACsrclStrnsetTimerControl(data) srclStrn end select srclStrnEnd Sub EndGInt \EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt [MethGrup8 ]nameStrnreadCompStrnVsblInt sorcGrup ^EncoInt srclStrn,Function read(address as integer) As integersrclStrnselect case address srclStrncase DIVsrclStrnreturn getDivider() srclStrn case TIMA srclStrnreturn getTimerCounter()srclStrncase TMAsrclStrnreturn getTimerModulo() srclStrncase TACsrclStrnreturn getTimerControl()srclStrn end select srclStrn return &hFF srclStrn End FunctionEndGInt ^EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt ]MethGrup _nameStrnticks CompStrnVsblInt sorcGrup `EncoInt srclStrnFunction ticks() As integer srclStrn$if Bitwise.BitAnd(mtac,&h04)<>0 thensrclStrn4if timerCyclesif Bitwise.BitAnd(mtac,&h03) <> Bitwise.BitAnd(data,&h03) then srclStrn4timerCycles = TIMER_CLOCK(Bitwise.BitAnd(data,&h03))srclStrntimerClock = timerCyclessrclStrnend if srclStrn mtac = data srclStrnEnd Sub EndGInt jEncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt iMethGrup knameStrn getDivider CompStrnVsblInt sorcGrupl lEncoInt srclStrn Function getDivider() As integersrclStrn return mdiv srclStrn End FunctionEndGInt lEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt kMethGrup mnameStrngetTimerCounter CompStrnVsblInt sorcGrupt nEncoInt srclStrn%Function getTimerCounter() As integer srclStrn return mtimasrclStrn End FunctionEndGInt nEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt mMethGrup onameStrngetTimerModulo CompStrnVsblInt sorcGrupp pEncoInt srclStrn$Function getTimerModulo() As integersrclStrn return mtma srclStrn End FunctionEndGInt pEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt oMethGrup( qnameStrngetTimerControl CompStrnVsblInt sorcGrup rEncoInt srclStrn%Function getTimerControl() As integer srclStrnreturn Bitwise.BitOr(&hF8,mtac) srclStrn End FunctionEndGInt rEncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt qMethGrup snameStrnemulateDivider CompStrnVsblInt sorcGrup$ tEncoInt srclStrn$Sub emulateDivider(ticks as integer)srclStrn%dividerCycles = dividerCycles - ticks srclStrnwhile dividerCycles <= 0srclStrn"mdiv = Bitwise.BitAnd(mdiv+1,&hFF) srclStrn)dividerCycles = dividerCycles + DIV_CLOCK srclStrnwendsrclStrnEnd Sub EndGInt tEncoInt AlasStrnflagInt !shrdInt parmStrnticks as integerrsltStrnEndGInt sMethGrup unameStrn emulateTimerCompStrnVsblInt sorcGrup vEncoInt srclStrn"Sub emulateTimer(ticks as integer) srclStrn&if Bitwise.BitAnd(mtac,&h04) <> 0 then srclStrn!timerCycles = timerCycles - ticks srclStrnwhile timerCycles <= 0 srclStrn$mtima = Bitwise.BitAnd(mtima+1,&hFF)srclStrn&timerCycles = timerCycles + timerClock srclStrnif mtima = &h00 thensrclStrn mtima = mtmasrclStrn$mInterrupt.mRaise(mInterrupt.cTIMER)srclStrnend if srclStrnwendsrclStrnend if srclStrnEnd Sub EndGInt vEncoInt AlasStrnflagInt !shrdInt parmStrnticks as integerrsltStrnEndGInt uPropGrupT wEncoInt declStrnmdiv As Integer = 0 flagInt !CompStrnshrdInt EndGInt wPropGrupT xEncoInt declStrnmtima As Integer = 0flagInt !CompStrnshrdInt EndGInt xPropGrupT yEncoInt declStrnmtma As Integer = 0 flagInt !CompStrnshrdInt EndGInt yPropGrupT zEncoInt declStrnmtac As Integer = 0 flagInt !CompStrnshrdInt EndGInt zPropGrup\ {EncoInt declStrndividerCycles As Integer = 0flagInt !CompStrnshrdInt EndGInt {PropGrup\ |EncoInt declStrntimerCycles As Integer = 0 flagInt !CompStrnshrdInt EndGInt |PropGrup\ }EncoInt declStrntimerClock As Integer = 0 flagInt !CompStrnshrdInt EndGInt }PropGrup` ~EncoInt declStrnmInterrupt As Interrupt = nil flagInt !CompStrnshrdInt EndGInt ~PropGrup\ EncoInt declStrnTIMER_CLOCK(4) As Integer flagInt !CompStrnshrdInt EndGInt VwBhGrup VwPrGrupD NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup` NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupH NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupX NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupX NameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt CnstGrupL EncoInt nameStrnDIV typeInt defnStrn&hFF04 flagInt EndGInt CnstGrupL EncoInt nameStrnTIMAtypeInt defnStrn&hFF05 flagInt EndGInt CnstGrupL EncoInt nameStrnTMA typeInt defnStrn&hFF06 flagInt EndGInt CnstGrupL EncoInt nameStrnTAC typeInt defnStrn&hFF07 flagInt EndGInt CnstGrup\ EncoInt nameStrn GAMEBOY_CLOCK typeInt defnStrn &h100000 flagInt !EndGInt CnstGrupP EncoInt nameStrn DIV_CLOCK typeInt defnStrn&h40flagInt !EndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************BlokpObjxNameStrnVideo ContInt paswStrnbClsInt bNtrInt CompStrnMethGrup nameStrn Constructor CompStrnVsblInt sorcGrup EncoInt srclStrnSSub Constructor(iDriver as VideoDriver, iInterrupt as Interrupt, iMemory as memory) srclStrnoam = NewMemoryBlock(OAM_SIZE) srclStrn vram = NewMemoryBlock(VRAM_SIZE)srclStrncolorMap = NewMemoryBlock(4)srclStrnpalette = NewMemoryBlock(1024) srclStrnsrclStrndriver = iDriversrclStrnmInterrupt = iInterrupt srclStrnmMemory = iMemory srclStrnsrclStrnsrclStrnsrclStrnsetupColorMap() srclStrnsetupMColorMap()srclStrnsrclStrnreset() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnBiDriver as VideoDriver, iInterrupt as Interrupt, iMemory as memory rsltStrnEndGInt MethGrup nameStrn setFrameSkipCompStrnVsblInt sorcGrupt EncoInt srclStrn#Sub setFrameSkip(enable as boolean) srclStrnframeSkip = enable srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnenable as boolean rsltStrnEndGInt MethGrup nameStrnsetColorCompStrnVsblInt sorcGrup EncoInt srclStrnQSub setColor(index as integer, red as integer, green as integer, blue as integer) srclStrn= OAM_ADDR and address < OAM_ADDR + OAM_SIZE then srclStrn*oam.uint8Value(address - OAM_ADDR) = data srclStrn//drawBackgroundsrclStrnsrclStrnDelseif address >= VRAM_ADDR and address < VRAM_ADDR + VRAM_SIZE thensrclStrn+vram.uint8Value(address - VRAM_ADDR) = data srclStrnend if srclStrnsrclStrn end Select srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrup nameStrnreadCompStrnVsblInt sorcGrupD EncoInt srclStrn,Function read(address as integer) As integersrclStrnselect case address srclStrn case LCDC srclStrnreturn getControl() srclStrnsrclStrn case STAT srclStrnreturn getStatus() srclStrnsrclStrncase SCYsrclStrnreturn getScrollY() srclStrnsrclStrncase SCXsrclStrnreturn getScrollX() srclStrnsrclStrncase LY srclStrnreturn getLineY() srclStrnsrclStrncase LYCsrclStrnreturn getLineYCompare()srclStrnsrclStrncase DMAsrclStrnreturn getDMA() srclStrnsrclStrncase BGPsrclStrnreturn getBackgroundPalette() srclStrnsrclStrn case OBP0 srclStrnreturn getObjectPalette0() srclStrnsrclStrn case OBP1 srclStrnreturn getObjectPalette1() srclStrnsrclStrncase WY srclStrnreturn getWindowY() srclStrnsrclStrncase WX srclStrnreturn getWindowX() srclStrnsrclStrnelsesrclStrn=if address >= OAM_ADDR and address < OAM_ADDR + OAM_SIZE then srclStrn>return Bitwise.BitAnd(oam.uint8Value(address - OAM_ADDR),&hFF) srclStrnDelseif address >= VRAM_ADDR and address < VRAM_ADDR + VRAM_SIZE thensrclStrnAreturn Bitwise.BitAnd(vram.uint8Value(address - VRAM_ADDR), &hFF) srclStrnend if srclStrn end select srclStrn return &hFF srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrup nameStrnticks CompStrnVsblInt sorcGrupl EncoInt srclStrnFunction ticks() As integer srclStrn return cycles srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrnemulate CompStrnVsblInt sorcGrup EncoInt srclStrnSub emulate(ticks as integer) srclStrn'if Bitwise.BitAnd(mlcdc,&h80) <> 0 then srclStrncycles = cycles - ticks srclStrnwhile cycles <= 0 srclStrn&select case Bitwise.BitAnd(mstat,&h03) srclStrncase 0 srclStrnemulateHBlank() srclStrncase 1 srclStrnemulateVBlank() srclStrncase 2 srclStrn emulateOAM()srclStrncase 3 srclStrnemulateTransfer() srclStrn end select srclStrnwendsrclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnticks as integerrsltStrnEndGInt MethGrup nameStrn getControl CompStrnVsblInt sorcGrupl EncoInt srclStrn Function getControl() As integersrclStrn return mlcdcsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrn getStatus CompStrnVsblInt sorcGrup EncoInt srclStrnFunction getStatus() As integer srclStrn return Bitwise.BitOr(&h80,mstat)srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrn getScrollY CompStrnVsblInt sorcGrupl EncoInt srclStrn Function getScrollY() As integersrclStrn return mscy srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrn getScrollX CompStrnVsblInt sorcGrupl EncoInt srclStrn Function getScrollX() As integersrclStrn return mscx srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetLineYCompStrnVsblInt sorcGrupl EncoInt srclStrnFunction getLineY() As integer srclStrn return mly srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetLineYCompare CompStrnVsblInt sorcGrupt EncoInt srclStrn%Function getLineYCompare() As integer srclStrn return mlyc srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetDMA CompStrnVsblInt sorcGruph EncoInt srclStrnFunction getDMA() As integersrclStrn return mdma srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetBackgroundPaletteCompStrnVsblInt sorcGrupx EncoInt srclStrn*Function getBackgroundPalette() As integer srclStrn return mbgp srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetObjectPalette0 CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getObjectPalette0() As integer srclStrn return mobp0srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrngetObjectPalette1 CompStrnVsblInt sorcGrupt EncoInt srclStrn'Function getObjectPalette1() As integer srclStrn return mobp1srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrn getWindowY CompStrnVsblInt sorcGrupl EncoInt srclStrn Function getWindowY() As integersrclStrn return mwy srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrn getWindowX CompStrnVsblInt sorcGrupl EncoInt srclStrn Function getWindowX() As integersrclStrn return mwx srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup( nameStrn setControl CompStrnVsblInt sorcGrup EncoInt srclStrnSub setControl(data as integer) srclStrn@if Bitwise.BitAnd(mlcdc,&h80) <> Bitwise.BitAnd(data, &h80) thensrclStrnG//NOTE: do not reset LY=LYC flag (bit 2) of the STAT register (Mr. Do!) srclStrn&if Bitwise.BitAnd(data,&h80) <> 0 then srclStrn6mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat,&hFC),&h02) srclStrncycles = MODE_2_TICKS srclStrnmly=0 srclStrndisplay = false srclStrnelsesrclStrn6mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat,&hFC),&h00) srclStrncycles = MODE_1_TICKS srclStrnmly=0 srclStrn clearFrame()srclStrnend if srclStrnend if srclStrnsrclStrnD//don't draw window if it was not enabled and not being drawn beforesrclStrnmif Bitwise.BitAnd(mlcdc,&h20) = 0 and Bitwise.BitAnd(data,&h20)<>0 and mwly = 0 and mly > mwy then mwly = 144 srclStrnsrclStrn mlcdc = datasrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup( nameStrn setStatus CompStrnVsblInt sorcGrup EncoInt srclStrnSub setStatus(data as integer) srclStrnLmstat = Bitwise.BitOr(Bitwise.BitAnd(mstat,&h87),Bitwise.BitAnd(data, &h78))srclStrnsrclStrn //gameboy bug srclStrnif Bitwise.BitAnd(mlcdc,&h80) <> 0 and Bitwise.BitAnd(mstat, &h03) = &h01 and Bitwise.BitAnd(mstat, &h44) <> &h44 then mInterrupt.mRaise(mInterrupt.cLCD) srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrn setScrollY CompStrnVsblInt sorcGruph EncoInt srclStrnSub setScrollY(data as integer) srclStrn mscy = data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrn setScrollX CompStrnVsblInt sorcGruph EncoInt srclStrnSub setScrollX(data as integer) srclStrn mscx = data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupH nameStrn setLYCompareCompStrnVsblInt sorcGrup EncoInt srclStrn!Sub setLYCompare(data as integer) srclStrn mlyc = data srclStrnsrclStrn'if Bitwise.BitAnd(mlcdc,&h80) <> 0 then srclStrnif mly = mlyc then srclStrnQ//note: raise Interrupt once per line(Prehistorik Man, The Jetsons, Muhammad Ali) srclStrn'if Bitwise.BitAnd(mstat, &h04) = 0 then srclStrn//lyc = ly interruptsrclStrn"mstat = Bitwise.BitOr(mstat, &h04) srclStrn(if Bitwise.BitAnd(mstat, &h40) <> 0 thensrclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrnend if srclStrnelsesrclStrn#mstat = Bitwise.BitAnd(mstat, &hFB) srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrnsetDMA CompStrnVsblInt sorcGrup EncoInt srclStrnSub setDMA(data as integer) srclStrn mdma = data srclStrnsrclStrn&for index as integer = 0 to OAM_SIZE-1 srclStrnEoam.uint8Value(index) = mMemory.read(Bitwise.ShiftLeft(mdma,8)+index) srclStrnnextsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupl nameStrnsetBackgroundPaletteCompStrnVsblInt sorcGrup EncoInt srclStrn)Sub setBackgroundPalette(data as integer) srclStrnif mbgp <> data thensrclStrn mbgp = data srclStrn dirty = truesrclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupl nameStrnsetObjectPalette0 CompStrnVsblInt sorcGrup EncoInt srclStrn&Sub setObjectPalette0(data as integer) srclStrnif mobp0 <> data then srclStrn mobp0 = datasrclStrn dirty = truesrclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupl nameStrnsetObjectPalette1 CompStrnVsblInt sorcGrup EncoInt srclStrn&Sub setObjectPalette1(data as integer) srclStrnif mobp1 <> data then srclStrn mobp1 = datasrclStrn dirty = truesrclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrn setWindowY CompStrnVsblInt sorcGruph EncoInt srclStrnSub setWindowY(data as integer) srclStrn mwy = data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrup nameStrn setWindowX CompStrnVsblInt sorcGruph EncoInt srclStrnSub setWindowX(data as integer) srclStrn mwx = data srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrndata as integer rsltStrnEndGInt MethGrupd nameStrn emulateOAM CompStrnVsblInt sorcGrup EncoInt srclStrnSub emulateOAM()srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h03) srclStrn$cycles = cycles + MODE_3_BEGIN_TICKSsrclStrntransfer = true srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnemulateTransfer CompStrnVsblInt sorcGrupl EncoInt srclStrnSub emulateTransfer() srclStrnif transfer thensrclStrnif display then drawLine() srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h03) srclStrn$cycles = cycles + MODE_3_BEGIN_TICKSsrclStrntransfer = falsesrclStrnelsesrclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h00) srclStrncycles = cycles + MODE_0_TICKS srclStrn//H-Blank interrupt srclStrnLif Bitwise.BitAnd(mstat,&h08) <> 0 and Bitwise.BitAnd(mstat,&h44)<>&h44 thensrclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn emulateVBlank CompStrnVsblInt sorcGrup EncoInt srclStrnSub emulateVBlank() srclStrnif vblank then srclStrnvblank = false srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h01) srclStrn3cycles = cycles + MODE_1_TICKS - MODE_1_BEGIN_TICKS srclStrn//V-Blank interrupt srclStrn(if Bitwise.BitAnd(mstat,&h10) <> 0 thensrclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrn%mInterrupt.mRaise(mInterrupt.cVBLANK) srclStrnelseif mly = 0 then srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h02) srclStrncycles = cycles + MODE_2_TICKS srclStrnsrclStrn//OAM interrupt srclStrnLif Bitwise.BitAnd(mstat,&h20) <> 0 and Bitwise.BitAnd(mstat,&h44)<>&h44 thensrclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrnsrclStrnelsesrclStrnif mly < 153 then srclStrn mly = mly +1srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h01) srclStrnif mly = 153 then srclStrn"cycles = cycles + MODE_1_END_TICKS srclStrnelsesrclStrncycles = cycles + MODE_1_TICKS srclStrnend if srclStrnelsesrclStrnmly =0 srclStrnmwly = 0srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h01) srclStrn1cycles = cycles + MODE_1_TICKS - MODE_1_END_TICKS srclStrnend if srclStrnif mly = mlyc then srclStrn//lyc = ly interruptsrclStrn"mstat = Bitwise.BitOr(mstat, &h04) srclStrn(if Bitwise.BitAnd(mstat,&h40) <> 0 thensrclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrnelsesrclStrn#mstat = Bitwise.BitAnd(mstat, &hFB) srclStrnend if srclStrnend if srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn drawFrame CompStrnVsblInt sorcGrup\ EncoInt srclStrnSub drawFrame() srclStrndriver.Display()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn clearFrame CompStrnVsblInt sorcGrupx EncoInt srclStrnSub clearFrame()srclStrn clearPixels() srclStrndriver.Display()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrndrawLineCompStrnVsblInt sorcGrup EncoInt srclStrnSub drawLine() srclStrn&if Bitwise.BitAnd(mlcdc,&h01)<> 0 then srclStrndrawBackground()srclStrnelsesrclStrndrawCleanBackground() srclStrnend if srclStrnsrclStrn2if Bitwise.BitAnd(mlcdc,&h20)<>0 then drawWindow() srclStrn3if Bitwise.BitAnd(mlcdc,&h02)<>0 then drawObjects() srclStrnsrclStrn drawPixels()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupD nameStrndrawCleanBackground CompStrnVsblInt sorcGrup EncoInt srclStrnSub drawCleanBackground() srclStrn"for x as integer = 0 to 8+160+8-1 srclStrnline(x) = &h00 srclStrnnextsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupp nameStrndrawBackground CompStrnVsblInt sorcGrup EncoInt srclStrnSub drawBackground()srclStrnWif Bitwise.BitAnd(mlcdc,&h20) <> 0 and mly >= mwy and mwx <8 and mwly < 144 then return srclStrnsrclStrn0dim y as integer = Bitwise.BitAnd(mscy+mly,&hFF)srclStrn-dim x as integer = Bitwise.BitAnd(mscx, &hFF) srclStrndim tileMap as integer srclStrn'if Bitwise.BitAnd(mlcdc,&h08) <> 0 then srclStrntileMap = VRAM_MAP_BsrclStrnelsesrclStrntileMap = VRAM_MAP_AsrclStrnend if srclStrndim tileData as integer srclStrn'if Bitwise.BitAnd(mlcdc,&h10) <> 0 then srclStrntileData = VRAM_DATA_A srclStrnelsesrclStrntileData = VRAM_DATA_B srclStrnend if srclStrnsrclStrnXtileMap = tileMap + Bitwise.ShiftLeft(Bitwise.ShiftRight(y,3),5)+Bitwise.ShiftRight(x,3)srclStrn3tileData = Bitwise.ShiftLeft(Bitwise.BitAnd(y,7),1) srclStrn#//tileData = Bitwise.ShiftLeft(y,1) srclStrnsrclStrn1drawTiles(8-Bitwise.BitAnd(x,7),tileMap,tileData) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn drawWindow CompStrnVsblInt sorcGrup EncoInt srclStrnSub drawWindow()srclStrn/if mly >= mwy and mwx < 167 and mwly < 144 then srclStrndim tilemap as integer srclStrn'if Bitwise.BitAnd(mlcdc,&h40) <> 0 then srclStrntileMap = VRAM_MAP_BsrclStrnelsesrclStrntileMap = VRAM_MAP_AsrclStrnend if srclStrndim tileData as integer srclStrn'if Bitwise.BitAnd(mlcdc,&h10) <> 0 then srclStrntileData = VRAM_DATA_A srclStrnelsesrclStrntiledata = VRAM_DATA_B srclStrnend if srclStrnsrclStrnDtilemap = tilemap + Bitwise.ShiftLeft(Bitwise.ShiftRight(mwly,3),5)srclStrnAtileData = tileData + Bitwise.ShiftLeft(Bitwise.BitAnd(mwly,7),1) srclStrnsrclStrn"drawTiles(mwx+1,tilemap, tiledata) srclStrnmwly = mwly + 1 srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGruph nameStrn drawObjects CompStrnVsblInt sorcGrup EncoInt srclStrnSub drawObjects() srclStrn$dim count as integer = scanObjects()srclStrnsrclStrndim lastx as integer = 176 srclStrn!for index as integer = 0 to count srclStrn$dim data as integer = objects(index)srclStrnDdim x as integer = Bitwise.BitAnd(Bitwise.ShiftRight(data, 24),&hFF)srclStrnGdim flags as integer = Bitwise.BitAnd(Bitwise.ShiftRight(data,12),&hFF) srclStrn3dim address as integer = Bitwise.BitAnd(data,&hFFF) srclStrnsrclStrnif x+8 <= lastx thensrclStrndrawObjectTile(x,address,flags) srclStrnelsesrclStrn*drawOverlappedObjectTile(x,address, flags) srclStrnend if srclStrn lastx = x srclStrnnextsrclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn scanObjects CompStrnVsblInt sorcGrup< EncoInt srclStrn!Function scanObjects() As integer srclStrndim count as integersrclStrnsrclStrn//search active objects srclStrn*for offset as integer = 0 to 4*40-1 step 4 srclStrnBdim y as Integer = Bitwise.BitAnd( oam.uint8Value(offset+0) ,&hFF) srclStrnBdim x as Integer = Bitwise.BitAnd( oam.uint8Value(offset+1) ,&hFF) srclStrnsrclStrn6if y<=0 or y >= 144+16 or x<=0 or x>=168 then continue srclStrnsrclStrnDdim tile as integer = Bitwise.BitAnd( oam.uint8Value(offset+2),&hFF)srclStrnDdim flags as integer = Bitwise.BitAnd(oam.uint8Value(offset+3),&hFF)srclStrnsrclStrny = mly - y +16 srclStrnsrclStrn'if Bitwise.BitAnd(mlcdc,&h04) <> 0 then srclStrn//8x16 tile sizesrclStrn if y < 0 or y > 15 then continuesrclStrnsrclStrn//y flipsrclStrn0if Bitwise.BitAnd(flags,&h40) <> 0 then y = 15-ysrclStrnsrclStrn tile = Bitwise.BitAnd(tile,&hFE)srclStrnelsesrclStrn//8x8 tile size srclStrnif y <0 or y > 7 then continue srclStrnsrclStrn//yflip srclStrn/if Bitwise.BitAnd(flags,&h40) <> 0 then y = 7-y srclStrnend if srclStrnsrclStrnfobjects(count) = Bitwise.ShiftLeft(x,24) + Bitwise.ShiftLeft(count,20) + Bitwise.ShiftLeft(flags,12)+_ srclStrn4(Bitwise.ShiftLeft(tile,4) + Bitwise.ShiftLeft(y,1))srclStrnsrclStrncount = count +1srclStrnsrclStrn&if Count >= OBJECTS_PER_LINE then exit srclStrnnextsrclStrnsrclStrn,//sort objects from lower to higher prioritysrclStrn#for index as integer = 0 to count-1 srclStrn dim rightmost as integer = indexsrclStrn*for number as integer = index + 1 to count srclStrnZif Bitwise.ShiftRight(objects(number),20) > Bitwise.ShiftRight(objects(rightmost),20) then srclStrnrightmost = number srclStrnend if srclStrnnextsrclStrnsrclStrnif rightmost <> index then srclStrn$dim data as integer = objects(index)srclStrn$objects(index) = objects(rightmost)srclStrnobjects(rightmost) = data srclStrnend if srclStrnnextsrclStrn return countsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrninteger EndGInt MethGrup( nameStrn drawTiles CompStrnVsblInt sorcGrup\ EncoInt srclStrnDSub drawTiles(x as integer, tileMap as integer, tiledata as integer)srclStrnsrclStrn'if Bitwise.BitAnd(mlcdc,&h10) <> 0 then srclStrn while x < 168 srclStrnCdim tile as integer = Bitwise.BitAnd(VRAM.uint8Value(tileMap),&hFF) srclStrnsrclStrn.drawTile(x,tiledata+Bitwise.ShiftLeft(tile,4)) srclStrnsrclStrnKtileMap = Bitwise.BitAnd(tileMap,&h1FE0) + Bitwise.BitAnd(tileMap+1,&h001F) srclStrnsrclStrn x = x + 8 srclStrnwendsrclStrnelsesrclStrn while x<168 srclStrnXdim tile as integer = Bitwise.BitAnd(Bitwise.BitXor(VRAM.uint8Value(tileMap),&h80),&hFF)srclStrn.drawTile(x,tiledata+Bitwise.ShiftLeft(tile,4)) srclStrnKtileMap = Bitwise.BitAnd(tileMap,&h1FE0) + Bitwise.BitAnd(tileMap+1,&h001F) srclStrn x = x + 8 srclStrnwendsrclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn5x as integer, tileMap as integer, tiledata as integer rsltStrnEndGInt MethGrup nameStrndrawTileCompStrnVsblInt sorcGruph EncoInt srclStrn.Sub drawTile(x as integer, address as integer) srclStrndim pattern as integer = Bitwise.BitAnd(VRAM.uint8Value(Address),&hFF) + Bitwise.ShiftLeft(Bitwise.BitAnd(VRAM.uint8Value(Address+1),&hFF),8) srclStrnsrclStrn@line(x+0) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,7),&h0101)srclStrn@line(x+1) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,6),&h0101)srclStrn@line(x+2) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,5),&h0101)srclStrn@line(x+3) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4),&h0101)srclStrn@line(x+4) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,3),&h0101)srclStrn@line(x+5) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,2),&h0101)srclStrn@line(x+6) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h0101)srclStrn@line(x+7) = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,0),&h0101)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn x as integer, address as integerrsltStrnEndGInt MethGrup nameStrndrawObjectTile CompStrnVsblInt sorcGrup EncoInt srclStrnFSub drawObjectTile(x as integer, address as integer, flags as integer) srclStrndim pattern as integer = Bitwise.BitAnd(VRAM.uint8Value(Address),&hFF) + Bitwise.ShiftLeft(Bitwise.BitAnd(VRAM.uint8Value(Address+1),&hFF),8) srclStrnsrclStrndim mask as integer = 0 srclStrnsrclStrn //priority srclStrnHif Bitwise.BitAnd(flags,&h80)<> 0 then mask = Bitwise.BitOr(mask,&h0008)srclStrnsrclStrn //palette srclStrnHif Bitwise.BitAnd(flags,&h10)<> 0 then mask = Bitwise.BitOr(mask,&h0004)srclStrnsrclStrn//X flipsrclStrn'if Bitwise.BitAnd(flags,&h20)<> 0 then srclStrndim icolor as integer srclStrnsrclStrn 0 then line(x+0) = Bitwise.BitOr(line(x+0),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,0),&h0202) srclStrnSif icolor <> 0 then line(x+1) = Bitwise.BitOr(line(x+1),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h0202) srclStrnSif icolor <> 0 then line(x+2) = Bitwise.BitOr(line(x+2),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,2),&h0202) srclStrnSif icolor <> 0 then line(x+3) = Bitwise.BitOr(line(x+3),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,3),&h0202) srclStrnSif icolor <> 0 then line(x+4) = Bitwise.BitOr(line(x+4),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4),&h0202) srclStrnSif icolor <> 0 then line(x+5) = Bitwise.BitOr(line(x+5),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,5),&h0202) srclStrnSif icolor <> 0 then line(x+6) = Bitwise.BitOr(line(x+6),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,6),&h0202) srclStrnSif icolor <> 0 then line(x+7) = Bitwise.BitOr(line(x+7),Bitwise.BitOr(icolor,mask)) srclStrnsrclStrnelsesrclStrndim icolor as integer srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,6),&h0202) srclStrnSif icolor <> 0 then line(x+0) = Bitwise.BitOr(line(x+0),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,5),&h0202) srclStrnSif icolor <> 0 then line(x+1) = Bitwise.BitOr(line(x+1),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4),&h0202) srclStrnSif icolor <> 0 then line(x+2) = Bitwise.BitOr(line(x+2),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,3),&h0202) srclStrnSif icolor <> 0 then line(x+3) = Bitwise.BitOr(line(x+3),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,2),&h0202) srclStrnSif icolor <> 0 then line(x+4) = Bitwise.BitOr(line(x+4),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h0202) srclStrnSif icolor <> 0 then line(x+5) = Bitwise.BitOr(line(x+5),Bitwise.BitOr(icolor,mask)) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,0),&h0202) srclStrnSif icolor <> 0 then line(x+6) = Bitwise.BitOr(line(x+6),Bitwise.BitOr(icolor,mask)) srclStrn 0 then line(x+7) = Bitwise.BitOr(line(x+7),Bitwise.BitOr(icolor,mask)) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn2x as integer, address as integer, flags as integer rsltStrnEndGInt MethGrup$ nameStrndrawOverlappedObjectTileCompStrnVsblInt sorcGrupP EncoInt srclStrnPSub drawOverlappedObjectTile(x as integer, address as integer, flags as integer)srclStrndim pattern as integer = Bitwise.BitAnd(VRAM.uint8Value(Address),&hFF) + Bitwise.ShiftLeft(Bitwise.BitAnd(VRAM.uint8Value(Address+1),&hFF),8) srclStrnsrclStrndim mask as integer = 0 srclStrnsrclStrn //priority srclStrnHif Bitwise.BitAnd(flags,&h80)<> 0 then mask = Bitwise.BitOr(mask,&h0008)srclStrnsrclStrn //palette srclStrnHif Bitwise.BitAnd(flags,&h10)<> 0 then mask = Bitwise.BitOr(mask,&h0004)srclStrnsrclStrn//X flipsrclStrn&if Bitwise.BitAnd(flags,&h20)<> 0 then srclStrndim icolor as integer srclStrnsrclStrn 0 then line(x+0) = Bitwise.BitOr(Bitwise.BitAnd(line(x+0),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,0),&h0202) srclStrn[if icolor <> 0 then line(x+1) = Bitwise.BitOr(Bitwise.BitAnd(line(x+1),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h0202) srclStrn[if icolor <> 0 then line(x+2) = Bitwise.BitOr(Bitwise.BitAnd(line(x+2),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,2),&h0202) srclStrn[if icolor <> 0 then line(x+3) = Bitwise.BitOr(Bitwise.BitAnd(line(x+3),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,3),&h0202) srclStrn[if icolor <> 0 then line(x+4) = Bitwise.BitOr(Bitwise.BitAnd(line(x+4),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4),&h0202) srclStrn[if icolor <> 0 then line(x+5) = Bitwise.BitOr(Bitwise.BitAnd(line(x+5),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,5),&h0202) srclStrn[if icolor <> 0 then line(x+6) = Bitwise.BitOr(Bitwise.BitAnd(line(x+6),&h0101),icolor,mask) srclStrn?//icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,6),&h0202) srclStrn]//if icolor <> 0 then line(x+7) = Bitwise.BitOr(Bitwise.BitAnd(line(x+7),&h0101),icolor,mask) srclStrnsrclStrnelsesrclStrndim icolor as integer srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,6),&h0202) srclStrn[if icolor <> 0 then line(x+0) = Bitwise.BitOr(Bitwise.BitAnd(line(x+0),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,5),&h0202) srclStrn[if icolor <> 0 then line(x+1) = Bitwise.BitOr(Bitwise.BitAnd(line(x+1),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4),&h0202) srclStrn[if icolor <> 0 then line(x+2) = Bitwise.BitOr(Bitwise.BitAnd(line(x+2),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,3),&h0202) srclStrn[if icolor <> 0 then line(x+3) = Bitwise.BitOr(Bitwise.BitAnd(line(x+3),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,2),&h0202) srclStrn[if icolor <> 0 then line(x+4) = Bitwise.BitOr(Bitwise.BitAnd(line(x+4),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h0202) srclStrn[if icolor <> 0 then line(x+5) = Bitwise.BitOr(Bitwise.BitAnd(line(x+5),&h0101),icolor,mask) srclStrn=icolor = Bitwise.BitAnd(Bitwise.ShiftRight(pattern,0),&h0202) srclStrn[if icolor <> 0 then line(x+6) = Bitwise.BitOr(Bitwise.BitAnd(line(x+6),&h0101),icolor,mask) srclStrn 0 then line(x+7) = Bitwise.BitOr(Bitwise.BitAnd(line(x+7),&h0101),icolor,mask) srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn2x as integer, address as integer, flags as integer rsltStrnEndGInt MethGrup nameStrn drawPixels CompStrnVsblInt sorcGrupL EncoInt srclStrnSub drawPixels()srclStrnupdatePalette() srclStrnsrclStrn*dim pixels as picture = driver.getPixels() srclStrn,//dim rgbs as RGBSurface = pixels.RGBSurfacesrclStrnsrclStrn0//dim offset as integer = ly * driver.getPitch()srclStrndim x, y as integer srclStrnsrclStrn"for i as integer = 8 to 168 step 4 srclStrn#dim pattern0 as integer = line(i+0) srclStrn#dim pattern1 as integer = line(i+1) srclStrn#dim pattern2 as integer = line(i+2) srclStrn#dim pattern3 as integer = line(i+3) srclStrnsrclStrnx =(i-8) mod pixels.Width srclStrny= mly srclStrnsrclStrnFpixels.RGBSurface.Pixel(x+0,y) = mColors(palette.uint8Value(pattern0)) srclStrnFpixels.RGBSurface.Pixel(x+1,y) = mColors(palette.uint8Value(pattern1)) srclStrnFpixels.RGBSurface.Pixel(x+2,y) = mColors(palette.uint8Value(pattern2)) srclStrnFpixels.RGBSurface.Pixel(x+3,y) = mColors(palette.uint8Value(pattern3)) srclStrnsrclStrn//offset = offset+4 srclStrnnextsrclStrnsrclStrndriver.setPixels(pixels)srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn clearPixels CompStrnVsblInt sorcGrup EncoInt srclStrnSub clearPixels() srclStrn/'dim pixels as MemoryBlock = driver.getPixels() srclStrn' srclStrn?'dim length as integer = driver.getPitch() * driver.getHeight() srclStrn' srclStrn&'for offset as integer = 0 to length-1 srclStrn3'pixels.uint8Value(offset) = colorMap.uint8Value(0) srclStrn'next srclStrnsrclStrn(dim pixels as Picture = driver.getPixelssrclStrnEdriver.setPixels(NewPicture(pixels.Width,pixels.Height,pixels.Depth)) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup| nameStrn updatePalette CompStrnVsblInt sorcGrup EncoInt srclStrnSub updatePalette() srclStrn if dirty then srclStrnS//bit 4/0 = BG color, bit 5/1 = OBJ color, bit2 = obj palette, bit 3 = obj priority srclStrnsrclStrn"for pattern as integer = 0 to 64-1 srclStrndim icolor as integer srclStrnvif Bitwise.BitAnd(pattern,&h22) = 0 or ( Bitwise.BitAnd(pattern,&h08) <> 0 and Bitwise.BitAnd(pattern,&h11) <> 0) then srclStrn//obj behind bg color 1-3 srclStrnicolor =Bitwise.BitAnd(Bitwise.ShiftRight(mbgp, Bitwise.ShiftLeft(Bitwise.BitAnd(Bitwise.ShiftRight(pattern,3),&h02) + Bitwise.BitAnd(pattern,&h01),1)), &h03) srclStrnN//color = (bgp >> ((((pattern >> 3) & 0x02) + (pattern & 0x01)) << 1)) & 0x03; srclStrnelsesrclStrn//obj above bg srclStrn(if Bitwise.BitAnd(pattern,&h04) = 0 thensrclStrnicolor = Bitwise.BitAnd(Bitwise.ShiftRight(mobp0,Bitwise.ShiftLeft(Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4), &h02) + Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h01),1)), &h03) srclStrnV//color = (obp0 >> ((((pattern >> 4) & 0x02) + ((pattern >> 1) & 0x01)) << 1)) & 0x03; srclStrnelsesrclStrnicolor = Bitwise.BitAnd(Bitwise.ShiftRight(mobp1,Bitwise.ShiftLeft(Bitwise.BitAnd(Bitwise.ShiftRight(pattern,4), &h02) + Bitwise.BitAnd(Bitwise.ShiftRight(pattern,1),&h01),1)), &h03) srclStrnV//color = (obp1 >> ((((pattern >> 4) & 0x02) + ((pattern >> 1) & 0x01)) << 1)) & 0x03; srclStrnend if srclStrnend if srclStrnpalette.uint8Value( Bitwise.ShiftLeft(Bitwise.BitAnd(pattern,&h30),4)+Bitwise.BitAnd(pattern,&h0F) ) = colorMap.uint8Value(icolor)srclStrnL//palette[ ((pattern & 0x30) << 4) + (pattern & 0x0F) ] = colorMap[color];srclStrnnextsrclStrn dirty = false srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrn setupColorMap CompStrnVsblInt sorcGrupp EncoInt srclStrnSub setupColorMap() srclStrn'setColor(0, 0xFF, 0xFF, 0xFF); srclStrn'setColor(1, 0xAA, 0xAA, 0xAA); srclStrn'setColor(2, 0x55, 0x55, 0x55); srclStrn'setColor(3, 0x00, 0x00, 0x00); srclStrn' srclStrn'setColor(0, 0xB8, 0xD1, 0x86); srclStrn'setColor(1, 0x9B, 0xB0, 0x71); srclStrn'setColor(2, 0x70, 0x80, 0x52); srclStrn'setColor(3, 0x38, 0x40, 0x29); srclStrnsrclStrnsetColor(0, &hFF, &hFF, &hFF) srclStrnsetColor(1, &hB0, &hB0, &hB0) srclStrnsetColor(2, &h70, &h70, &h70) srclStrnsetColor(3, &h40, &h40, &h40) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnsetTitleCompStrnVsblInt sorcGrupt EncoInt srclStrnSub setTitle(title as string) srclStrndriver.setTitle(title) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrntitle as string rsltStrnEndGInt MethGrup nameStrn emulateHBlank CompStrnVsblInt sorcGrup| EncoInt srclStrnSub emulateHBlank() srclStrn mly = mly + 1 srclStrnsrclStrnif mly = mlyc then srclStrn//lyc = ly interruptsrclStrn"mstat = Bitwise.BitOr(mstat, &h04) srclStrn(if Bitwise.BitAnd(mstat,&h40) <> 0 then srclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrnelsesrclStrn#mstat = Bitwise.BitAnd(mstat, &hFB) srclStrnend if srclStrnsrclStrnif mly < 144 then srclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h02) srclStrncycles = cycles + MODE_2_TICKS srclStrnsrclStrn//OAM interrupt srclStrnOif Bitwise.BitAnd(mstat, &h20)<> 0 and Bitwise.BitAnd(mstat, &h44) <> &h44 then srclStrn"mInterrupt.mRaise(mInterrupt.cLCD) srclStrnend if srclStrnelsesrclStrnif display then drawFrame() srclStrn$if not frameSkip or not display thensrclStrn display=truesrclStrnelsesrclStrndisplay = false srclStrnend if srclStrnsrclStrn7mstat = Bitwise.BitOr(Bitwise.BitAnd(mstat, &hFC),&h01) srclStrn$cycles = cycles + MODE_1_BEGIN_TICKSsrclStrn vblank = true srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup nameStrnsetupMColorMap CompStrnVsblInt sorcGrup8 EncoInt srclStrnSub setupMColorMap()srclStrndim index as integer = 0srclStrn%for red as integer = 0 to 255 step 51 srclStrn'for green as integer = 0 to 255 step 51 srclStrn&for blue as integer = 0 to 255 step 51 srclStrn"mColors(index)=RGB(red,green,blue) srclStrnindex = index +1srclStrnnextsrclStrnnextsrclStrnnextsrclStrnsrclStrnfor index = 216 to 248 srclStrn5dim level as integer = Bitwise.ShiftLeft(index-216,3) srclStrn'mColors(index) = RGB(level,level,level) srclStrnnextsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt PropGrup\ EncoInt declStrndriver As Videodriver = nil flagInt !CompStrnshrdInt EndGInt PropGrup` EncoInt declStrnmInterrupt As interrupt = nil flagInt !CompStrnshrdInt EndGInt PropGrupX EncoInt declStrnmMemory As Memory = nil flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmlcdc As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmstat As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmscy As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmscx As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmly As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmlyc As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupT EncoInt declStrnmdma As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmbgp As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmobp0 As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmobp1 As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmwy As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmwx As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmwly As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrncycles As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrntransfer As boolean = false flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrndisplay As boolean = false flagInt !CompStrnshrdInt EndGInt PropGrup\ EncoInt declStrnvblank As boolean = false flagInt !CompStrnshrdInt EndGInt  PropGrupX EncoInt declStrndirty As boolean = falseflagInt !CompStrnshrdInt EndGInt  PropGrup\ EncoInt declStrnframeSkip As boolean = falseflagInt !CompStrnshrdInt EndGInt  PropGrupX EncoInt declStrnoam As memoryblock = nilflagInt !CompStrnshrdInt EndGInt  PropGrup\ EncoInt declStrnvram As memoryblock = nil flagInt !CompStrnshrdInt EndGInt  PropGrupXEncoInt declStrnline(8+160+8) As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupdEncoInt declStrn$objects(OBJECTS_PER_LINE) As IntegerflagInt !CompStrnshrdInt EndGInt PropGrup`EncoInt declStrncolorMap As memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnpalette As memoryblock = nilflagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnmColors(256) As Color flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt CnstGrupLEncoInt nameStrnLCDCtypeInt defnStrn&HFF40 flagInt EndGInt CnstGrupLEncoInt nameStrnSTATtypeInt defnStrn&hFF41 flagInt EndGInt CnstGrupLEncoInt nameStrnSCY typeInt defnStrn&hFF42 flagInt EndGInt CnstGrupLEncoInt nameStrnSCX typeInt defnStrn&hFF43 flagInt EndGInt CnstGrupLEncoInt nameStrnLY typeInt defnStrn&hFF44 flagInt EndGInt CnstGrupLEncoInt nameStrnLYC typeInt defnStrn&hFF45 flagInt EndGInt CnstGrupLEncoInt nameStrnDMA typeInt defnStrn&hFF46 flagInt EndGInt CnstGrupL EncoInt nameStrnBGP typeInt defnStrn&hFF47 flagInt EndGInt  CnstGrupL!EncoInt nameStrnOBP0typeInt defnStrn&hFF48 flagInt EndGInt !CnstGrupL"EncoInt nameStrnOBP1typeInt defnStrn&hFF49 flagInt EndGInt "CnstGrupL#EncoInt nameStrnWY typeInt defnStrn&hFF4A flagInt EndGInt #CnstGrupL$EncoInt nameStrnWX typeInt defnStrn&hFF4B flagInt EndGInt $CnstGrupP%EncoInt nameStrnOAM_ADDRtypeInt defnStrn&hFE00 flagInt !EndGInt %CnstGrupL&EncoInt nameStrnOAM_SIZEtypeInt defnStrn&hA0flagInt !EndGInt &CnstGrupT'EncoInt nameStrn VRAM_ADDR typeInt defnStrn&h8000 flagInt !EndGInt 'CnstGrupT(EncoInt nameStrn VRAM_SIZE typeInt defnStrn&h2000 flagInt !EndGInt (CnstGrupT)EncoInt nameStrn VRAM_DATA_A typeInt defnStrn&h0000 flagInt !EndGInt )CnstGrupT*EncoInt nameStrn VRAM_DATA_B typeInt defnStrn&h0800 flagInt !EndGInt *CnstGrupT+EncoInt nameStrn VRAM_MAP_A typeInt defnStrn&h1800 flagInt !EndGInt +CnstGrupT,EncoInt nameStrn VRAM_MAP_B typeInt defnStrn&h1C00 flagInt !EndGInt ,CnstGrupX-EncoInt nameStrn GAMEBOY_CLOCK typeInt defnStrn&h100000flagInt !EndGInt -CnstGrupP.EncoInt nameStrn MODE_0_TICKStypeInt defnStrn50 flagInt !EndGInt .CnstGrupP/EncoInt nameStrn MODE_1_TICKStypeInt defnStrn114 flagInt !EndGInt /CnstGrupP0EncoInt nameStrn MODE_2_TICKStypeInt defnStrn20 flagInt !EndGInt 0CnstGrupX1EncoInt nameStrnMODE_3_BEGIN_TICKS typeInt defnStrn12 flagInt !EndGInt 1CnstGrupT2EncoInt nameStrnMODE_3_END_TICKStypeInt defnStrn32 flagInt !EndGInt 2CnstGrupX3EncoInt nameStrnMODE_1_BEGIN_TICKS typeInt defnStrn8 flagInt !EndGInt 3CnstGrupT4EncoInt nameStrnMODE_1_END_TICKStypeInt defnStrn1 flagInt !EndGInt 4CnstGrupT5EncoInt nameStrnOBJECTS_PER_LINEtypeInt defnStrn10 flagInt !EndGInt 5PadnPadn************************************************************************************************************************************************************************BlokpFola#'NameStrn Cartridge ContInt paswStrnPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj^ko NameStrnCartridgeFactoryContInt a#'paswStrnbClsInt bNtrInt CompStrnMethGrup$6nameStrnhasCartridgeBattery CompStrnVsblInt sorcGruph7EncoInt srclStrnAFunction hasCartridgeBattery(cartridgeType as integer) As boolean srclStrn-if cartridgeType = TYPE_MBC1_RAM_BATTERY or _ srclStrn&cartridgeType = TYPE_MBC2_BATTERY or _ srclStrn*cartridgeType = TYPE_MBC3_RTC_BATTERY or _ srclStrn.cartridgeType = TYPE_MBC3_RTC_RAM_BATTERY or _ srclStrn*cartridgeType = TYPE_MBC3_RAM_BATTERY or _ srclStrn*cartridgeType = TYPE_MBC5_RAM_BATTERY or _ srclStrn1cartridgeType = TYPE_MBC5_RUMBLE_RAM_BATTERY or _ srclStrn6cartridgeType = TYPE_HUC1_RAM_BATTERY then return true srclStrn return falsesrclStrn End FunctionEndGInt 7EncoInt AlasStrnflagInt shrdInt parmStrncartridgeType as integerrsltStrnboolean EndGInt 6MethGrup8nameStrngetCartridgeDescription CompStrnVsblInt sorcGrup(9EncoInt srclStrnDFunction getCartridgeDescription(cartridgeType as integer) As stringsrclStrnselect case cartridgeType srclStrncase TYPE_ROM_ONLY srclStrnreturn "ROM ONLY" srclStrncase TYPE_MBC1 srclStrn return "MBC1" srclStrncase TYPE_MBC1_RAM srclStrnreturn "MBC1+RAM" srclStrncase TYPE_MBC1_RAM_BATTERY srclStrnreturn "MBC1+RAM+BATTERY" srclStrncase TYPE_MBC2 srclStrn return "MBC2" srclStrncase TYPE_MBC2_BATTERY srclStrnreturn "MBC2+BATTERY" srclStrncase TYPE_MBC3_RTC_BATTERY srclStrnreturn "MBC3+RTC+BATTERY" srclStrncase TYPE_MBC3_RTC_RAM_BATTERY srclStrnreturn "MBC3+RTC+RAM+BATTERY" srclStrncase TYPE_MBC3 srclStrn return "MBC3" srclStrncase TYPE_MBC3_RAM srclStrnreturn "MBC3+RAM" srclStrncase TYPE_MBC3_RAM_BATTERY srclStrnreturn "MBC3+RAM+BATTERY" srclStrncase TYPE_MBC5 srclStrn return "MBC5" srclStrncase TYPE_MBC5_RAM srclStrnreturn "MBC5+RAM" srclStrncase TYPE_MBC5_RAM_BATTERY srclStrnreturn "MBC5+RAM+BATTERY" srclStrncase TYPE_MBC5_RUMBLE srclStrnreturn "MBC5+RUMBLE"srclStrncase TYPE_MBC5_RUMBLE_RAM srclStrnreturn "MBC5+RUMBLE+RAM"srclStrn!case TYPE_MBC5_RUMBLE_RAM_BATTERY srclStrn return "MBC5+RUMBLE+RAM+BATTERY"srclStrncase TYPE_HUC3_RTC_RAM srclStrnreturn "HuC3+RTC+RAM" srclStrncase TYPE_HUC1_RAM_BATTERY srclStrnreturn "HuC1+RAM+BATTERY" srclStrnelsesrclStrnreturn "UNKNOWN"srclStrn end select srclStrn End FunctionEndGInt 9EncoInt AlasStrnflagInt shrdInt parmStrncartridgeType as integerrsltStrnstring EndGInt 8MethGrup:nameStrncreateBankControllerCompStrnVsblInt sorcGrup;EncoInt srclStrnFunction createBankController(cartridgeType as integer, rom as memoryblock, romSize as integer, ram as memoryblock, ramSize as integer, clock as ClockDriver) As MBCsrclStrnselect case cartridgeType srclStrnCcase TYPE_ROM_ONLY, TYPE_MBC1, TYPE_MBC1_RAM, TYPE_MBC1_RAM_BATTERY srclStrn+return new MBC1(rom, romSize, ram, ramSize) srclStrnsrclStrn!case TYPE_MBC2, TYPE_MBC2_BATTERY srclStrn+return new MBC2(rom, romSize, ram, ramSize) srclStrnsrclStrnCcase TYPE_MBC3_RTC_BATTERY, TYPE_MBC3_RTC_RAM_BATTERY, TYPE_MBC3, _ srclStrn$TYPE_MBC3_RAM, TYPE_MBC3_RAM_BATTERYsrclStrn2return new MBC3(rom, romSize, ram, ramSize, clock) srclStrnsrclStrn4case TYPE_MBC5, TYPE_MBC5_RAM, TYPE_MBC5_RAM_BATTERYsrclStrn2return new MBC5(rom, romSize, ram, ramSize, false) srclStrnsrclStrnIcase TYPE_MBC5_RUMBLE, TYPE_MBC5_RUMBLE_RAM, TYPE_MBC5_RUMBLE_RAM_BATTERY srclStrn1return new MBC5(rom, romSize, ram, ramSize, true) srclStrnsrclStrncase TYPE_HUC3_RTC_RAM srclStrn2return new HuC3(rom, romSize, ram, ramSize, clock) srclStrnsrclStrncase TYPE_HUC1_RAM_BATTERY srclStrn+return new HuC1(rom, romSize, ram, ramSize) srclStrnsrclStrn#case &hEA // HACK: Sonic 3D Blast 5 srclStrn+return new MBC1(rom, romSize, ram, ramSize) srclStrnsrclStrn*else // Unsupported memory bank controller srclStrn return nil srclStrn end select srclStrn End FunctionEndGInt ;EncoInt AlasStrnflagInt shrdInt parmStrn~cartridgeType as integer, rom as memoryblock, romSize as integer, ram as memoryblock, ramSize as integer, clock as ClockDriver rsltStrnMBC EndGInt :VwBhGrupNameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt >VwPrGrupH?NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt ?VwPrGrupX@NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt @VwPrGrupXANameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt AEndGInt  0 then srclStrn)if Bitwise.BitAnd(data, &h0A) = &h0A then srclStrnramEnable = truesrclStrnelsesrclStrnramEnable = false srclStrnend if srclStrnend if srclStrnelseif Address <= &h3FFF then srclStrn/if Bitwise.BitAnd(data, &h1F) = 0 then data = 1 srclStrnif memoryModel = 0 then srclStrntromBank = Bitwise.BitAnd(Bitwise.BitAnd(romBank,&h180000) + Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h1F),14),romsize)srclStrnelsesrclStrnQrombank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h1F),14),romsize) srclStrnend if srclStrnelseif address <= &h5FFF then srclStrnif memoryModel = 0 then srclStrntromBank = Bitwise.BitAnd(Bitwise.BitAnd(romBank,&h07FFFF) + Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h03),19),romsize)srclStrnelsesrclStrnQrambank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h03),13),ramsize) srclStrnend if srclStrnelseif Address <= &h7FFF then srclStrn'memoryModel = Bitwise.BitAnd(data,&h01) srclStrn2elseif Address >=&hA000 and Address <= &hBFFF then srclStrnif ramEnable then srclStrn@mRAM.uint8Value(ramBank + Bitwise.BitAnd(Address,&h1FFF)) = datasrclStrnend if srclStrnend if srclStrnEnd Sub EndGInt nEncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt mMethGruponameStrnsetROM CompStrnVsblInt sorcGrup4pEncoInt srclStrn4Sub setROM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / ROM_BANK_SIZE srclStrnsrclStrn$//assert banks >= 2 and banks <= 128srclStrnsrclStrn mROM = buffer srclStrn#romsize = ROM_BANK_SIZE * banks - 1 srclStrnEnd Sub EndGInt pEncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt oMethGrupqnameStrnsetRAM CompStrnVsblInt sorcGrup4rEncoInt srclStrn4Sub setRAM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / RAM_BANK_SIZE srclStrnsrclStrn"//assert banks >= 0 and banks <= 4 srclStrnsrclStrn mRAM = buffer srclStrn"ramsize = RAM_BANK_SIZE * banks -1 srclStrnEnd Sub EndGInt rEncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt qPropGrupTsEncoInt declStrnmROM As memoryblock flagInt !CompStrnshrdInt EndGInt sPropGrupTtEncoInt declStrnmRAM As memoryblock flagInt !CompStrnshrdInt EndGInt tPropGrupTuEncoInt declStrnromsize As Integer flagInt !CompStrnshrdInt EndGInt uPropGrupTvEncoInt declStrnramsize As Integer flagInt !CompStrnshrdInt EndGInt vPropGrupTwEncoInt declStrnromBank As Integer flagInt !CompStrnshrdInt EndGInt wPropGrupTxEncoInt declStrnramBank As Integer flagInt !CompStrnshrdInt EndGInt xPropGrupXyEncoInt declStrnmemoryModel As Integer flagInt !CompStrnshrdInt EndGInt yPropGrupTzEncoInt declStrnramEnable As booleanflagInt !CompStrnshrdInt EndGInt zVwBhGrup{VwPrGrupD|NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt |VwPrGrup`}NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt }VwPrGrupH~NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt ~VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt {PadnPadnP********************************************************************************BlokpObjNameStrnMBC2ContInt a#'paswStrnbClsInt SuprStrnMBC bNtrInt CompStrnMethGrupnameStrn Constructor CompStrnVsblInt sorcGrupEncoInt srclStrncSub Constructor(iROM as memoryblock, iromSize as integer, iRAM as memoryblock, iramSize as integer) srclStrn1// Calling the overridden superclass constructor. srclStrnSuper.Constructor srclStrnsrclStrn mROM = nil srclStrn mRAM = nil srclStrn romSize = 0 srclStrn ramSize = 0 srclStrn romBank = 0 srclStrnramEnable = false srclStrnsrclStrnsetROM(iROM, iromSize) srclStrnsetRAM(iRAM, iramSize) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnRiROM as memoryblock, iromSize as integer, iRAM as memoryblock, iramSize as integer rsltStrnEndGInt MethGrupnameStrnreset CompStrnVsblInt sorcGrupEncoInt srclStrn Sub reset() srclStrnromBank = ROM_BANK_SIZE srclStrnramEnable = false srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnreadCompStrnVsblInt sorcGrup EncoInt srclStrn,Function read(address as integer) As integersrclStrnif Address <= &h3FFF then srclStrn5return Bitwise.BitAnd(mROM.uint8Value(Address), &hFF) srclStrnelseif Address <= &h7FFF then srclStrnVreturn Bitwise.BitAnd(mROM.uint8Value(romBank + Bitwise.BitAnd(Address, &h3FFF)),&hFF) srclStrn3elseif Address >= &hA000 and Address <= &hA1FF then srclStrnKreturn Bitwise.BitAnd(mRAM.uint8Value(Bitwise.BitAnd(Address,&h01FF)),&h0F) srclStrnend if srclStrn return &hFF srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrup nameStrnwrite CompStrnVsblInt sorcGrupXEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif Address <= &h1FFF then srclStrn+if Bitwise.BitAnd(Address, &h0100) = 0 then srclStrn7if Bitwise.BitAnd(data,&h0A) = &h0A and ramSize >0 then srclStrnramEnable = truesrclStrnelsesrclStrnramEnable = False srclStrnend if srclStrnend if srclStrnelseif Address <= &h3FFF then srclStrn+if Bitwise.BitAnd(Address,&h0100) <> 0 then srclStrn.if Bitwise.BitAnd(data, &h0F) = 0 then data =1 srclStrnQromBank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h0F),14),romSize) srclStrnend if srclStrn3elseif Address >= &hA000 and Address <= &hA1FF then srclStrn^if ramEnable then mRAM.uint8Value(Bitwise.BitAnd(Address,&h01FF)) = Bitwise.BitAnd(data, &h0F) srclStrnend if srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrupnameStrnsetROM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setROM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / ROM_BANK_SIZE srclStrnsrclStrn#//assert banks >= 2 and banks <= 16 srclStrnsrclStrn mROM = buffer srclStrn#romsize = ROM_BANK_SIZE * banks - 1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt MethGrupnameStrnsetRAM CompStrnVsblInt sorcGrup$EncoInt srclStrn4Sub setRAM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / RAM_BANK_SIZE srclStrnsrclStrn//assert banks =1 srclStrnsrclStrn mRAM = buffer srclStrn"ramsize = RAM_BANK_SIZE * banks -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt PropGrupTEncoInt declStrnmROM As memoryblock flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmRAM As memoryblock flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnromSize As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnramSize As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnromBank As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnramEnable As booleanflagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt CnstGrupTEncoInt nameStrn RAM_BANK_SIZE typeInt defnStrn512 flagInt EndGInt PadnPadnD********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj(W,NameStrnMBC3ContInt a#'paswStrnbClsInt SuprStrnMBC bNtrInt CompStrnMethGrupnameStrn Constructor CompStrnVsblInt sorcGrupEncoInt srclStrnySub Constructor(iROM as memoryblock, iromSize as integer, iRAM as memoryblock,iramSize as integer, iclock as ClockDriver) srclStrn1// Calling the overridden superclass constructor. srclStrnSuper.Constructor srclStrnsrclStrnmClock = iclock srclStrnsrclStrnsetROM(iROM, iromSize) srclStrnsetRAM(iRAM, iramSize) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnhiROM as memoryblock, iromSize as integer, iRAM as memoryblock,iramSize as integer, iclock as ClockDriverrsltStrnEndGInt MethGrupnameStrnreset CompStrnVsblInt sorcGrup@EncoInt srclStrn Sub reset() srclStrnromBank = ROM_BANK_SIZE srclStrn ramBank = 0 srclStrnsrclStrnramEnable = false srclStrnsrclStrnclockTime = mClock.gettime()srclStrnsrclStrnclockLatch = 0 srclStrnclockRegister = 0 srclStrnclockSeconds = 0srclStrnclockMinutes = 0srclStrnclockHours = 0 srclStrn clockDays = 0 srclStrnclockControl = 0srclStrnclockLSeconds = 0 srclStrnclockLMinutes =0srclStrnclockLHours = 0 srclStrnclockLDays = 0 srclStrnclockLControl = 0 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnreadCompStrnVsblInt sorcGrupEncoInt srclStrn,Function read(address as integer) As integersrclStrnif address <= &h3FFF then srclStrn // 0000-3FFFsrclStrn5return Bitwise.BitAnd(mrom.uint8Value(address) ,&hFF) srclStrnsrclStrnelseif address <= &h7FFF then srclStrn // 4000-5FFFsrclStrnUreturn Bitwise.BitAnd(mrom.uint8Value(romBank + Bitwise.BitAnd(address,&h3FFF)),&hFF) srclStrnsrclStrn3elseif address >= &hA000 and address <= &hBFFF then srclStrn // A000-BFFFsrclStrnif ramBank >= 0 thensrclStrnVreturn Bitwise.BitAnd(mram.uint8Value(ramBank + Bitwise.BitAnd(address,&h1FFF)) ,&hFF) srclStrnelsesrclStrn1if clockRegister = &h08 then return clockLSeconds srclStrn1if clockRegister = &h09 then return clockLMinutes srclStrn/if clockRegister = &h0A then return clockLHours srclStrn.if clockRegister = &h0B then return clockLDays srclStrn1if clockRegister = &h0C then return clockLControl srclStrnend if srclStrnend if srclStrn return &hFF srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrupnameStrnwrite CompStrnVsblInt sorcGrup EncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif Address <= &h1FFF then srclStrnif ramsize > 0 then srclStrn)if Bitwise.BitAnd(data, &h0A) = &h0A then srclStrnramEnable = truesrclStrnelsesrclStrnramEnable = false srclStrnend if srclStrnend if srclStrnelseif Address <= &h3FFF then srclStrnif data = 0 then data = 1 srclStrnQrombank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h7F),14),romsize) srclStrnelseif address <= &h5FFF then srclStrnif data >= 0 and data <=3 then srclStrnQrambank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data,&h03),13),ramsize) srclStrnelsesrclStrn ramBank = -1srclStrnclockRegister = datasrclStrnend if srclStrnelseif Address <= &h7FFF then srclStrn0if clockLatch = 0 and data = 1 then latchClock()srclStrn.if data = 0 or data = 1 then clockLatch = data srclStrn2elseif Address >=&hA000 and Address <= &hBFFF then srclStrnif ramEnable then srclStrn@mRAM.uint8Value(ramBank + Bitwise.BitAnd(Address,&h1FFF)) = datasrclStrnelsesrclStrn updateClock() srclStrn0if clockRegister = &h08 then clockSeconds = datasrclStrn0if clockRegister = &h09 then clockMinutes = datasrclStrn.if clockRegister = &h0A then clockHours = data srclStrn-if clockRegister = &h0B then clockDays = data srclStrnbif clockRegister = &h0C then clockControl = Bitwise.BitOr(Bitwise.BitAnd(clockControl, &h80),data) srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt MethGrupnameStrn latchClock CompStrnVsblInt sorcGrupEncoInt srclStrnSub latchClock()srclStrn updateClock() srclStrnsrclStrnclockLSeconds = clockSecondssrclStrnclockLMinutes = clockMinutessrclStrnclockLHours = clockHourssrclStrnclockLDays = clockDays srclStrnuclockLControl = Bitwise.BitOr(Bitwise.BitAnd(clockControl,&hFE),Bitwise.BitAnd(Bitwise.ShiftRight(clockDays,8),&h01)) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrn updateClock CompStrnVsblInt sorcGrupEncoInt srclStrnSub updateClock() srclStrn%dim now as integer = mClock.getTime() srclStrnsrclStrn.if Bitwise.BitAnd(clockControl, &h40) = 0 then srclStrn(dim elapsed as integer = now - clockTimesrclStrnsrclStrnwhile elapsed >= 24*60*60 srclStrnelapsed = elapsed - 24*60*60srclStrnclockDays = clockDays +1srclStrnwendsrclStrnwhile elapsed >= 60*60 srclStrnelapsed = elapsed - 60*60 srclStrnclockHours = clockHours +1 srclStrnwendsrclStrnwhile elapsed >= 60 srclStrnelapsed = elapsed - 60 srclStrnclockMinutes = clockMinutes +1 srclStrnwendsrclStrn%clockSeconds = clockSeconds + elapsed srclStrnwhile clockSeconds >= 60srclStrnclockSeconds = clockSeconds -60 srclStrnclockMinutes = clockMinutes + 1 srclStrnwendsrclStrnwhile clockMinutes >= 60srclStrnclockMinutes = clockMinutes -60 srclStrnclockHours = clockHours + 1 srclStrnwendsrclStrnwhile clockHours >= 24 srclStrnclockHours = clockHours -24 srclStrnclockDays = clockDays + 1 srclStrnwendsrclStrnwhile clockDays >= 512 srclStrnclockDays= clockDays -512 srclStrn0clockControl = bitwise.BitOr(clockControl ,&h80)srclStrnwendsrclStrnend if srclStrnclockTime = now srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnsetROM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setROM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / ROM_BANK_SIZE srclStrnsrclStrn$//assert banks >= 2 and banks <= 128srclStrnsrclStrn mROM = buffer srclStrn#romsize = ROM_BANK_SIZE * banks - 1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt MethGrupnameStrnsetRAM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setRAM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / RAM_BANK_SIZE srclStrnsrclStrn!//assert banks >=0 and banks <= 4 srclStrnsrclStrn mRAM = buffer srclStrn"ramsize = RAM_BANK_SIZE * banks -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt PropGrup\EncoInt declStrnmClock As ClockDriver = nil flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmROM As memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmRAM As memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnromSize As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnramSize As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnromBank As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnramBank As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnramEnable As boolean = falseflagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockRegister As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockLatch As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnclockTime As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockSeconds As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockMinutes As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockHours As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnclockDays As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockControl As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockLSeconds As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockLMinutes As Integer = 0flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockLHours As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockLDays As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnclockLControl As Integer = 0flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNameStrnMBC5ContInt a#'paswStrnbClsInt SuprStrnMBC bNtrInt CompStrnMethGrupXnameStrn Constructor CompStrnVsblInt sorcGrup\EncoInt srclStrnwSub Constructor(iROM as memoryblock, iromsize as integer, iRAM as memoryblock, iRamsize as integer, irumble as boolean) srclStrnrumble = irumblesrclStrnsetROM(iROM, iromsize) srclStrnFsetRAM(iRAM,iRamsize)// Calling the overridden superclass constructor. srclStrnSuper.Constructor srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnfiROM as memoryblock, iromsize as integer, iRAM as memoryblock, iRamsize as integer, irumble as boolean rsltStrnEndGInt MethGrup(nameStrnreset CompStrnVsblInt sorcGrupEncoInt srclStrn Sub reset() srclStrnromBank = ROM_BANK_SIZE srclStrn ramBank = 0 srclStrnramEnable = false srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnsetROM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setROM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / ROM_BANK_SIZE srclStrnsrclStrn$//assert banks >= 2 and banks <= 128srclStrnsrclStrn mROM = buffer srclStrn#romsize = ROM_BANK_SIZE * banks - 1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt MethGrupnameStrnsetRAM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setRAM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / RAM_BANK_SIZE srclStrnsrclStrn!//assert banks >=0 and banks <= 4 srclStrnsrclStrn mRAM = buffer srclStrn"ramsize = RAM_BANK_SIZE * banks -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt MethGrupnameStrnreadCompStrnVsblInt sorcGrup EncoInt srclStrn,Function read(address as integer) As integersrclStrnif Address <= &h3FFF then srclStrn5return Bitwise.BitAnd(mROM.uint8Value(Address), &hFF) srclStrnelseif Address <= &h7FFF then srclStrnVreturn Bitwise.BitAnd(mROM.uint8Value(romBank + Bitwise.BitAnd(Address, &h3FFF)),&hFF) srclStrn3elseif Address >= &hA000 and Address <= &hBFFF then srclStrnKreturn Bitwise.BitAnd(mRAM.uint8Value(Bitwise.BitAnd(Address,&h1FFF)),&hFF) srclStrnend if srclStrn return &hFF srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrupnameStrnwrite CompStrnVsblInt sorcGrupEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif Address <= &h1FFF then srclStrnif ramsize > 0 then srclStrn)if Bitwise.BitAnd(data, &h0A) = &h0A then srclStrnramEnable = truesrclStrnelsesrclStrnramEnable = false srclStrnend if srclStrnend if srclStrnelseif Address <= &h2FFF then srclStrnromBank = Bitwise.BitAnd((Bitwise.BitAnd(romBank, Bitwise.ShiftLeft(&h01, 22))) + (Bitwise.ShiftLeft(Bitwise.BitAnd(data, &hFF),14)),romSize) srclStrnelseif Address <= &h3FFF then srclStrnromBank = Bitwise.BitAnd((Bitwise.BitAnd(romBank, Bitwise.ShiftLeft(&h01, 14))) + (Bitwise.ShiftLeft(Bitwise.BitAnd(data, &hFF),22)),romSize) srclStrnelseif address <= &h4FFF then srclStrnif rumble then srclStrnRramBank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data, &h07),13),ramSize) srclStrnelsesrclStrnRrambank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data, &h0F),13),ramsize) srclStrnend if srclStrn2elseif Address >=&hA000 and Address <= &hBFFF then srclStrnif ramEnable then srclStrn@mRAM.uint8Value(ramBank + Bitwise.BitAnd(Address,&h1FFF)) = datasrclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt PropGrup\EncoInt declStrnmROM As memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmRAM As memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnromSize As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnramSize As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnromBank As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnramBank As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnramEnable As boolean = falseflagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnrumble As boolean = false flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadnp********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjVNameStrnHuC1ContInt a#'paswStrnbClsInt SuprStrnMBC1bNtrInt CompStrnMethGrup,nameStrn Constructor CompStrnVsblInt sorcGrupDEncoInt srclStrncSub Constructor(iROM as memoryblock, iromSize as integer, iRAM as memoryblock, iRamsize as integer) srclStrn1// Calling the overridden superclass constructor. srclStrnS// Note that this may need modifications if there are multiple constructor choices. srclStrn// Possible constructor calls: srclStrno// Constructor(iROM as memoryblock, iromSize as integer, iRAM as memoryblock, iramSize as integer) -- From MBC1 srclStrn// Constructor() -- From MBCsrclStrn1Super.Constructor(iROM, iRomsize, iRam, iRamsize) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnRiROM as memoryblock, iromSize as integer, iRAM as memoryblock, iRamsize as integer rsltStrnEndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj\$NameStrnHuC3ContInt a#'paswStrnbClsInt SuprStrnMBC bNtrInt CompStrnMethGrupnameStrnsetROM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setROM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / ROM_BANK_SIZE srclStrnsrclStrn$//assert banks >= 2 and banks <= 128srclStrnsrclStrn mROM = buffer srclStrn#romsize = ROM_BANK_SIZE * banks - 1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt MethGrupnameStrnsetRAM CompStrnVsblInt sorcGrup4EncoInt srclStrn4Sub setRAM(buffer as memoryblock, length as integer)srclStrn-dim banks as integer = length / RAM_BANK_SIZE srclStrnsrclStrn!//assert banks >=0 and banks <= 4 srclStrnsrclStrn mRAM = buffer srclStrn"ramsize = RAM_BANK_SIZE * banks -1 srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrn(buffer as memoryblock, length as integerrsltStrnEndGInt MethGrupnameStrn updateClock CompStrnVsblInt sorcGrupXEncoInt srclStrnSub updateClock() srclStrn%dim now as integer = mClock.getTime() srclStrnsrclStrn(dim elapsed as integer = now - clockTimesrclStrnsrclStrn//years srclStrnwhile elapsed >= 365*24*60*60 srclStrnelapsed = elapsed - 24*60*60srclStrn7clockRegister = clockregister + Bitwise.ShiftLeft(1,24) srclStrnwendsrclStrn//days srclStrnwhile elapsed >= 24*60*60 srclStrnelapsed = elapsed - 24*60*60srclStrn7clockRegister = clockregister + Bitwise.ShiftLeft(1,12) srclStrnwendsrclStrn //minutes srclStrnwhile elapsed >= 60 srclStrnelapsed = elapsed - 60 srclStrn!clockRegister = clockregister + 1 srclStrnwendsrclStrnsrclStrnzif Bitwise.BitAnd(clockRegister,&h0000FFF) >= 24*60 then clockRegister = clockRegister + (Bitwise.ShiftLeft(1,24) - 24*60) srclStrnif Bitwise.BitAnd(clockRegister,&h0FFF000) >= Bitwise.ShiftLeft(365,12) then clockRegister = clockRegister + (Bitwise.ShiftLeft(1,24) - Bitwise.ShiftLeft(365,12)) srclStrnsrclStrnsrclStrnclockTime = now - elapsed srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup|nameStrn Constructor CompStrnVsblInt sorcGrup|EncoInt srclStrnzSub Constructor(iROM as memoryblock, iRomSize as integer, iRAM as memoryblock, iRamSize as integer, iClock as clockDriver) srclStrn1// Calling the overridden superclass constructor. srclStrnSuper.Constructor srclStrnmClock = iClock srclStrnsrclStrnsetROM(iROM, iRomSize) srclStrnsetRAM(iRAM, iRamSize) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrniiROM as memoryblock, iRomSize as integer, iRAM as memoryblock, iRamSize as integer, iClock as clockDriver rsltStrnEndGInt MethGrupnameStrnreset CompStrnVsblInt sorcGrupEncoInt srclStrn Sub reset() srclStrnrombank = ROM_BANK_SIZE srclStrn ramBank = 0 srclStrn ramFlag = 0 srclStrn ramValue = 0srclStrnclockRegister= 0srclStrnclockShift = 0 srclStrnclockTime = mClock.getTime()srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrnreadCompStrnVsblInt sorcGrupEncoInt srclStrn,Function read(address as integer) As integersrclStrnif Address <= &h3FFF then srclStrn5return Bitwise.BitAnd(mROM.uint8Value(Address), &hFF) srclStrnelseif Address <= &h7FFF then srclStrnVreturn Bitwise.BitAnd(mROM.uint8Value(romBank + Bitwise.BitAnd(Address, &h3FFF)),&hFF) srclStrn3elseif Address >= &hA000 and Address <= &hBFFF then srclStrnif ramFlag = &h0C then srclStrn Return ramValuesrclStrnelseif ramFlag=&h0D thensrclStrn return &h01 srclStrn,elseif ramFlag = &h0A or ramFlag = &h00 thensrclStrnhif ramSize >0 then return Bitwise.BitAnd(mRAM.uint8Value(rambank + Bitwise.BitAnd(Address,&h1FFF)),&hFF)srclStrnend if srclStrnend if srclStrn return &hFF srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnaddress as integer rsltStrninteger EndGInt MethGrupnameStrnwrite CompStrnVsblInt sorcGrupEncoInt srclStrn.Sub write(address as integer, data as integer) srclStrnif Address <= &h1FFF then srclStrnramFlag = data srclStrnelseif Address <= &h3FFF then srclStrn/if Bitwise.BitAnd(data, &h7F) = 0 then data = 1 srclStrnRrombank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data, &h7F),14),romSize) srclStrnelseif Address <= &h5FFF then srclStrnRrambank = Bitwise.BitAnd(Bitwise.ShiftLeft(Bitwise.BitAnd(data, &h0F),13),ramSize) srclStrn3elseif Address >= &hA000 and Address <= &hBFFF then srclStrnif ramFlag = &h0B then srclStrn)if Bitwise.BitAnd(data, &hF0) = &h10 then srclStrnif clockShift <= 24 thensrclStrnMramValue = Bitwise.BitAnd(Bitwise.ShiftRight(clockRegister, clockShift),&h0F) srclStrnclockShift = clockShift + 4 srclStrnend if srclStrn-elseif Bitwise.BitAnd(data, &hF0) = &h30 then srclStrnif clockShift <= 24 thensrclStrniclockRegister = Bitwise.BitAnd(clockRegister,Bitwise.OnesComplement(Bitwise.ShiftLeft(&h0F, clockShift))) srclStrndclockRegister= Bitwise.BitOr(clockRegister,Bitwise.ShiftLeft(Bitwise.BitAnd(data, &h0F),clockShift))srclStrnclockShift = clockShift+4 srclStrnend if srclStrn-elseif Bitwise.BitAnd(data, &hF0) = &h40 then srclStrn updateClock() srclStrn)if Bitwise.BitAnd(data, &h0F) = &h00 then srclStrnclockShift = 0 srclStrn-elseif Bitwise.BitAnd(data, &h0F) = &h03 then srclStrnclockShift = 0 srclStrn-elseif Bitwise.BitAnd(data, &h0F) = &h07 then srclStrnclockShift = 0 srclStrnend if srclStrn-elseif Bitwise.BitAnd(data, &hF0) = &h50 then srclStrn-elseif Bitwise.BitAnd(data, &hF0) = &h60 then srclStrnramValue = &h01 srclStrnend if srclStrn/elseif ramFlag >= &h0C and ramFlag <= &h0E then srclStrnelseif ramFlag = &h0A then srclStrnif ramSize >0 then srclStrn@mRAM.uint8Value(ramBank + Bitwise.BitAnd(Address,&h1FFF)) = datasrclStrnend if srclStrnend if srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#address as integer, data as integer rsltStrnEndGInt PropGrup\EncoInt declStrnmROM As Memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmRAM As memoryblock = nil flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnromSize As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnramSize As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnrombank As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnramBank As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnramFlag As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnramValue As Integer flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnclockRegister As IntegerflagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnclockShift As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnclockTime As IntegerflagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnmClock As clockDriver = nil flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadn4************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpFol*owNameStrnDrivers ContInt paswStrnPadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjxNameStrn VideoDriver ContInt *owpaswStrnbClsInt bNtrInt CompStrnMethGrup0nameStrn Constructor CompStrnVsblInt sorcGrupxEncoInt srclStrn4Sub Constructor(width as integer, height as integer)srclStrnmWidth = width srclStrnmHeight = heightsrclStrn%surface = NewPicture(width,height,16) srclStrn%//surface.Graphics.ForeColor=&C238952 srclStrn=//surface.Graphics.FillRect(0,0,surface.Width,surface.Height) srclStrnSetupColorMap() srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn#width as integer, height as integer rsltStrnEndGInt MethGrup nameStrn Destructor CompStrnVsblInt sorcGrupL EncoInt srclStrnSub Destructor()srclStrnsrclStrnEnd Sub EndGInt  EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt  MethGrup nameStrngetPitchCompStrnVsblInt sorcGrupp EncoInt srclStrnFunction getPitch() As integer srclStrn return mWidth srclStrn End FunctionEndGInt  EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt  MethGrup nameStrngetWidthCompStrnVsblInt sorcGruppEncoInt srclStrnFunction getWidth() As integer srclStrn Return mWidth srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt  MethGrup nameStrn getHeight CompStrnVsblInt sorcGruppEncoInt srclStrnFunction getHeight() As integer srclStrnReturn mHeight srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup nameStrn getPixels CompStrnVsblInt sorcGruppEncoInt srclStrnFunction getPixels() As picture srclStrnreturn surface srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnpicture EndGInt MethGruphnameStrngetColorCompStrnVsblInt sorcGrupEncoInt srclStrnMFunction getColor(red as integer, green as integer, blue as integer) As UInt8 srclStrnfor index as integer = 0 to 255 srclStrn`if mColors(index).Red = red and mColors(index).Green = green and mColors(index).Blue = blue thensrclStrn return indexsrclStrnend if srclStrnnextsrclStrn+return (red/51)+6*(green/51) + 36*(blue/51) srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn1red as integer, green as integer, blue as integer rsltStrnUInt8 EndGInt MethGrupnameStrnDisplay CompStrnVsblInt sorcGrupEncoInt srclStrn Sub Display() srclStrn//redraw image srclStrnF'Window1.Canvas1.Graphics.DrawPicture(surface,0,0,320,288,0,0,160,140) srclStrn1Window1.Canvas1.Graphics.DrawPicture(surface,0,0) srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrn SetupColorMap CompStrnVsblInt sorcGrup8EncoInt srclStrnSub SetupColorMap() srclStrndim index as integer = 0srclStrn%for red as integer = 0 to 255 step 51 srclStrn'for green as integer = 0 to 255 step 51 srclStrn&for blue as integer = 0 to 255 step 51 srclStrn"mColors(index)=RGB(red,green,blue) srclStrnindex = index +1srclStrnnextsrclStrnnextsrclStrnnextsrclStrnsrclStrnfor index = 216 to 248 srclStrn5dim level as integer = Bitwise.ShiftLeft(index-216,3) srclStrn'mColors(index) = RGB(level,level,level) srclStrnnextsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt MethGrup@nameStrnsetTitleCompStrnVsblInt sorcGrupEncoInt srclStrnSub setTitle(title as string) srclStrn//set title in window srclStrnWindow1.Title="JdiBoy - "+Title srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrntitle as string rsltStrnEndGInt MethGruppnameStrn setPixels CompStrnVsblInt sorcGrupEncoInt srclStrnSub setPixels(mpic as picture) srclStrn //convert memoryblock to picturesrclStrn//dim rgbs as RGBSurfacesrclStrn//rgbs = new RGBSurface srclStrn://dim mb as MemoryBlock = NewMemoryBlock(4*mWidth*mHeight) srclStrnsrclStrn'dim x,y,offset as integer = 0 srclStrn'for y =0 to mHeight-1 srclStrn'for x = 0 to mWidth-1 srclStrn#'//dim c as color = rgbs.Pixel(x,y) srclStrn='surface.RGBSurface.Pixel(x,y)=mColors(mb.UInt8Value(offset)) srclStrn'offset = offset+1 srclStrn'next srclStrn'next srclStrnsrclStrn>'surface.Graphics.DrawPicture(mpic,0,0,mpic.Width,mpic.Height) srclStrnsrclStrn display() srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnmpic as picture rsltStrnEndGInt PropGrupXEncoInt declStrnsurface As picture = nilflagInt CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmWidth As Integer flagInt !CompStrnshrdInt EndGInt PropGrupTEncoInt declStrnmHeight As Integer flagInt !CompStrnshrdInt EndGInt PropGrupX EncoInt declStrnmColors(256) As color flagInt !CompStrnshrdInt EndGInt  VwBhGrup!VwPrGrupD"NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt "VwPrGrup`#NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt #VwPrGrupH$NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt $VwPrGrupX%NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt %VwPrGrupX&NameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt &VwPrGrupP'NameStrnsurface PrGpStrnBehaviorPValStrn0 typeStrnpicture EndGInt 'EndGInt !PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNameStrn SoundDriver ContInt *owpaswStrnbClsInt bNtrInt CompStrnMethGrupP(nameStrn Constructor CompStrnVsblInt sorcGrupt)EncoInt srclStrnXSub Constructor(iSampleRate as integer, iChannels as integer, iBitsPerSample as integer)srclStrn%mBuffer = NewMemoryBlock(BUFFER_SIZE) srclStrnsampleRate = iSampleRatesrclStrnchannels = iChannelssrclStrnbitsPerSample = iBitsPerSample srclStrn length= 0 srclStrn reader = 0 srclStrn writer = 0 srclStrnEnd Sub EndGInt )EncoInt AlasStrnflagInt shrdInt parmStrnGiSampleRate as integer, iChannels as integer, iBitsPerSample as integer rsltStrnEndGInt (MethGrup*nameStrn Destructor CompStrnVsblInt sorcGrupL+EncoInt srclStrnSub Destructor()srclStrnsrclStrnEnd Sub EndGInt +EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt *MethGrup,nameStrn getSampleRate CompStrnVsblInt sorcGrupx-EncoInt srclStrn#Function getSampleRate() As integer srclStrnreturn sampleRate srclStrn End FunctionEndGInt -EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt ,MethGrup.nameStrn getChannels CompStrnVsblInt sorcGrupt/EncoInt srclStrn!Function getChannels() As integer srclStrnreturn channels srclStrn End FunctionEndGInt /EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt .MethGrup0nameStrngetBitsPerSampleCompStrnVsblInt sorcGrup|1EncoInt srclStrn&Function getBitsPerSample() As integer srclStrnreturn bitsPerSamplesrclStrn End FunctionEndGInt 1EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt 0MethGrup2nameStrnstart CompStrnVsblInt sorcGrup3EncoInt srclStrn Sub start() srclStrn reader = 0 srclStrn writer = 0 srclStrn length = 0 srclStrnEnd Sub EndGInt 3EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt 2MethGrup4nameStrnstopCompStrnVsblInt sorcGrupH5EncoInt srclStrn Sub stop() srclStrnsrclStrnEnd Sub EndGInt 5EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt 4MethGrupD6nameStrnwrite CompStrnVsblInt sorcGrup7EncoInt srclStrn3Sub write(samples as memoryblock, size as integer) srclStrndim offset as integer = 0 srclStrnsrclStrnwhile size > 0 srclStrndim count as integersrclStrn#if Writer + size < BUFFER_SIZE then srclStrn count = sizesrclStrnelsesrclStrncount = BUFFER_SIZE - writersrclStrnend if srclStrnsrclStrnAif length + count > BUFFER_SIZE then count = BUFFER_SIZE - length srclStrnsrclStrnif count = 0 then exit srclStrnsrclStrn%for index as integer = 0 to count - 1 srclStrnEmBuffer.UInt8Value(writer + index) = samples.UInt8Value(offset+index) srclStrnnextsrclStrnsrclStrnwriter = writer + count srclStrnlength = length + count srclStrnsrclStrn(if writer >= BUFFER_SIZE then writer = 0srclStrnsrclStrnoffset = offset + count srclStrnsize = size - count srclStrnwendsrclStrnEnd Sub EndGInt 7EncoInt AlasStrnflagInt shrdInt parmStrn(samples as memoryblock, size as integerrsltStrnEndGInt 6MethGrup8nameStrnreadCompStrnVsblInt sorcGrup09EncoInt srclStrn1Sub read(samples as memoryblock, size as integer) srclStrndim offset as integer = 0 srclStrn#if size > length then size = length srclStrnsrclStrnwhile size > 0 srclStrndim count as integersrclStrn#if reader + size < BUFFER_SIZE then srclStrn count = sizesrclStrnelsesrclStrncount = BUFFER_SIZE - readersrclStrnend if srclStrnsrclStrn%for index as integer = 0 to count - 1 srclStrnEsamples.UInt8Value(offset + index) = mBuffer.UInt8Value(reader+index) srclStrnnextsrclStrnsrclStrnreader = reader + count srclStrnlength = length - count srclStrnsrclStrn(if reader >= BUFFER_SIZE then reader = 0srclStrnsrclStrnoffset = offset + count srclStrnsize = size - count srclStrnwendsrclStrnEnd Sub EndGInt 9EncoInt AlasStrnflagInt !shrdInt parmStrn'samples as memoryblock, size as integer rsltStrnEndGInt 8PropGrupX:EncoInt declStrnsampleRate As Integer flagInt CompStrnshrdInt EndGInt :PropGrupT;EncoInt declStrnchannels As Integer flagInt CompStrnshrdInt EndGInt ;PropGrupXEncoInt declStrnwriter As Integer flagInt CompStrnshrdInt EndGInt >PropGrupT?EncoInt declStrnlength As Integer flagInt CompStrnshrdInt EndGInt ?PropGrupX@EncoInt declStrnmBuffer As Memoryblock flagInt CompStrnshrdInt EndGInt @VwBhGrupAVwPrGrupDBNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt BVwPrGrup`CNameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt CVwPrGrupHDNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt DVwPrGrupXENameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EVwPrGrupXFNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt FVwPrGrupTGNameStrn sampleRate PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt GVwPrGrupPHNameStrnchannelsPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt HVwPrGrupXINameStrn bitsPerSample PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt IVwPrGrupPJNameStrnreader PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt JVwPrGrupPKNameStrnwriter PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt KVwPrGrupPLNameStrnlength PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt LEndGInt ACnstGrupPMEncoInt nameStrn BUFFER_SIZE typeInt defnStrn4096flagInt EndGInt MPadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjppW$NameStrn StoreDriver ContInt *owpaswStrnbClsInt bNtrInt CompStrnMethGrupNnameStrn Constructor CompStrnVsblInt sorcGrupPOEncoInt srclStrnSub Constructor() srclStrnsrclStrnEnd Sub EndGInt OEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt NMethGrupPnameStrn Destructor CompStrnVsblInt sorcGrupLQEncoInt srclStrnSub Destructor()srclStrnsrclStrnEnd Sub EndGInt QEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt PMethGruphRnameStrnallocateCartridge CompStrnVsblInt sorcGrupSEncoInt srclStrnCFunction allocateCartridge(cartridgeSize as integer) As memoryblock srclStrn$return NewMemoryBlock(cartridgeSize)srclStrn End FunctionEndGInt SEncoInt AlasStrnflagInt shrdInt parmStrncartridgeSize as integerrsltStrn memoryblock EndGInt RMethGrup8TnameStrndeleteCartridge CompStrnVsblInt sorcGrupUEncoInt srclStrn3Sub deleteCartridge(byref cartridge as memoryblock) srclStrncartridge = nil srclStrnEnd Sub EndGInt UEncoInt AlasStrnflagInt shrdInt parmStrnbyref cartridge as memoryblock rsltStrnEndGInt TMethGrup`VnameStrnallocateBattery CompStrnVsblInt sorcGrupWEncoInt srclStrn?Function allocateBattery(batterySize as integer) As memoryblock srclStrn"return NewMemoryBlock(batterySize) srclStrn End FunctionEndGInt WEncoInt AlasStrnflagInt shrdInt parmStrnbatterySize as integer rsltStrn memoryblock EndGInt VMethGrup0XnameStrn deleteBattery CompStrnVsblInt sorcGrup|YEncoInt srclStrn/Sub deleteBattery(byref battery as memoryblock) srclStrn battery = nil srclStrnEnd Sub EndGInt YEncoInt AlasStrnflagInt shrdInt parmStrnbyref battery as memoryblockrsltStrnEndGInt XMethGrupZnameStrn hasCartridgeCompStrnVsblInt sorcGrup[EncoInt srclStrn9Function hasCartridge(cartridgeName as string) As boolean srclStrn5dim f as folderitem = GetCartridgeFile(cartridgeName) srclStrnreturn f.Exists srclStrn End FunctionEndGInt [EncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrnboolean EndGInt ZMethGrup\nameStrngetCartridgeSizeCompStrnVsblInt sorcGrup]EncoInt srclStrn=Function getCartridgeSize(CartridgeName as string) As integer srclStrn5dim f as folderitem = GetCartridgeFile(cartridgeName) srclStrnreturn f.Length srclStrn End FunctionEndGInt ]EncoInt AlasStrnflagInt shrdInt parmStrnCartridgeName as string rsltStrninteger EndGInt \MethGrup4^nameStrn readCartridge CompStrnVsblInt sorcGrupL_EncoInt srclStrniFunction readCartridge(cartridgeName as string,byref buffer as memoryblock, length as integer) As boolean srclStrn5dim f as folderitem = GetCartridgeFile(cartridgeName) srclStrnif f<> nil and f.Exists thensrclStrndim bs as BinaryStream srclStrnbs = f.OpenAsBinaryFile srclStrnbuffer = NewMemoryBlock(length) srclStrn%for i as integer = 0 to buffer.Size-1 srclStrn%buffer.UInt8Value(i) = bs.ReadUInt8() srclStrnnextsrclStrn return true srclStrnelsesrclStrn return falsesrclStrnend if srclStrn End FunctionEndGInt _EncoInt AlasStrnflagInt shrdInt parmStrnFcartridgeName as string,byref buffer as memoryblock, length as integer rsltStrnboolean EndGInt ^MethGrup|`nameStrn hasBattery CompStrnVsblInt sorcGrupaEncoInt srclStrn7Function hasBattery(cartridgeName as string) As boolean srclStrn3dim f as FolderItem = getBatteryFile(cartridgeName) srclStrnreturn f.Exists srclStrn End FunctionEndGInt aEncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrnboolean EndGInt `MethGrupbnameStrngetBatterySize CompStrnVsblInt sorcGrupcEncoInt srclStrn;Function getBatterySize(cartridgeName as string) As integer srclStrn3dim f as FolderItem = getBatteryFile(cartridgeName) srclStrnreturn f.Length srclStrn End FunctionEndGInt cEncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrninteger EndGInt bMethGrup(dnameStrn readBattery CompStrnVsblInt sorcGrupDeEncoInt srclStrnhFunction readBattery(cartridgeName as string, byref buffer as memoryblock, length as integer) As booleansrclStrn3dim f as folderitem = GetBatteryFile(cartridgeName) srclStrnif f<> nil and f.Exists thensrclStrndim bs as BinaryStream srclStrnbs = f.OpenAsBinaryFile srclStrnbuffer = NewMemoryBlock(length) srclStrn%for i as integer = 0 to buffer.Size-1 srclStrn%buffer.UInt8Value(i) = bs.ReadUInt8() srclStrnnextsrclStrn return true srclStrnelsesrclStrn return falsesrclStrnend if srclStrn End FunctionEndGInt eEncoInt AlasStrnflagInt shrdInt parmStrnGcartridgeName as string, byref buffer as memoryblock, length as integer rsltStrnboolean EndGInt dMethGrupfnameStrn writeBatteryCompStrnVsblInt sorcGrupgEncoInt srclStrncFunction writeBattery(cartridgename as string, buffer as memoryblock, length as integer) As boolean srclStrn3dim f as FolderItem = getBatteryFile(cartridgename) srclStrnif f<> nil and f.Exists thensrclStrn1dim bs as BinaryStream = f.OpenAsBinaryFile(true) srclStrn%for i as integer = 0 to buffer.Size-1 srclStrn#bs.WriteUInt8(buffer.UInt8Value(i)) srclStrnnextsrclStrn return true srclStrnend if srclStrn return falsesrclStrn End FunctionEndGInt gEncoInt AlasStrnflagInt shrdInt parmStrnAcartridgename as string, buffer as memoryblock, length as integer rsltStrnboolean EndGInt fMethGruphnameStrn removeBattery CompStrnVsblInt sorcGrup0iEncoInt srclStrn:Function removeBattery(cartridgeName as string) As boolean srclStrn3dim f as FolderItem = getBatteryFile(cartridgeName) srclStrnif f<> nil and f.Exists thensrclStrnf.DeletesrclStrn return true srclStrnend if srclStrn return falsesrclStrn End FunctionEndGInt iEncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrnboolean EndGInt hMethGrupjnameStrngetBatteryFile CompStrnVsblInt sorcGrupkEncoInt srclStrn>Function getBatteryFile(cartridgeName as string) As folderItem srclStrndim batteryName as string srclStrnsrclStrnNdim f as FolderItem = GetFolderItem(getbatteryname(cartridgeName,batteryName)) srclStrnreturn fsrclStrn End FunctionEndGInt kEncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrn folderItem EndGInt jMethGrup0lnameStrngetBatteryName CompStrnVsblInt sorcGrup\mEncoInt srclStrnWFunction getBatteryName(cartridgeName as string, byref batteryName as string) As string srclStrndim extention as string srclStrnbatteryName=cartridgeName srclStrnBextention = NthField(batteryName,".",CountFields(batteryName,".")) srclStrnif extention <> "" then srclStrndim s() as string srclStrns = batteryName.Split(".") srclStrns.Remove(UBound(s)) srclStrnbatteryName = Join(s,".") srclStrnend if srclStrn2batteryName = batteryName + BATTERY_FILE_EXTENTION srclStrnreturn batteryName srclStrnsrclStrn End FunctionEndGInt mEncoInt AlasStrnflagInt shrdInt parmStrn4cartridgeName as string, byref batteryName as stringrsltStrnstring EndGInt lMethGrupnnameStrngetCartridgeFileCompStrnVsblInt sorcGrupoEncoInt srclStrn@Function getCartridgeFile(cartridgeName as string) As folderItemsrclStrn2dim f as FolderItem = GetFolderItem(cartridgeName) srclStrnreturn fsrclStrn End FunctionEndGInt oEncoInt AlasStrnflagInt shrdInt parmStrncartridgeName as string rsltStrn folderItem EndGInt nVwBhGruppVwPrGrupDqNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt qVwPrGrup`rNameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt rVwPrGrupHsNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt sVwPrGrupXtNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt tVwPrGrupXuNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt uEndGInt pCnstGrup\vEncoInt nameStrnBATTERY_FILE_EXTENTION typeInt defnStrn.savflagInt EndGInt vPadnPadn************************************************************************************************************************************************************BlokpObj NameStrn ClockDriver ContInt *owpaswStrnbClsInt bNtrInt CompStrnMethGrupwnameStrn Constructor CompStrnVsblInt sorcGrupPxEncoInt srclStrnSub Constructor() srclStrnsrclStrnEnd Sub EndGInt xEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt wMethGrupynameStrn Destructor CompStrnVsblInt sorcGrupLzEncoInt srclStrnSub Destructor()srclStrnsrclStrnEnd Sub EndGInt zEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt yMethGrup{nameStrngetTime CompStrnVsblInt sorcGrup|EncoInt srclStrnFunction getTime() As integer srclStrnreturn Microseconds()/1000000 srclStrn End FunctionEndGInt |EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt {VwBhGrup}VwPrGrupD~NameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt ~VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt }PadnPadn,****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj{NameStrn JoypadDriverContInt *owpaswStrnbClsInt bNtrInt CompStrnMethGrupnameStrn Constructor CompStrnVsblInt sorcGrupPEncoInt srclStrnSub Constructor() srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupnameStrn Destructor CompStrnVsblInt sorcGrupLEncoInt srclStrnSub Destructor()srclStrnsrclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt MethGrupPnameStrnisRaisedCompStrnVsblInt sorcGrupEncoInt srclStrnFunction isRaised() As boolean srclStrndim result as Boolean = raised srclStrnraised = false srclStrn return result srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnboolean EndGInt MethGrup nameStrn getButtons CompStrnVsblInt sorcGrupEncoInt srclStrn Function getButtons() As integersrclStrn#return Bitwise.BitXor(buttons,&h0F) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGrup,nameStrn getDirections CompStrnVsblInt sorcGrupEncoInt srclStrn#Function getDirections() As integer srclStrn&return Bitwise.BitXor(directions,&h0F) srclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt MethGruphnameStrn KeyPresed CompStrnVsblInt sorcGrupEncoInt srclStrn!Sub KeyPresed(keycode as integer) srclStrnselect case keycode srclStrn case VK_DOWNsrclStrn2directions = Bitwise.BitOr(directions,BUTTON_DOWN) srclStrnIdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_UP)) srclStrn case VK_UP srclStrn0directions = Bitwise.BitOr(directions,BUTTON_UP)srclStrnKdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_DOWN)) srclStrn case VK_LEFTsrclStrn2directions = Bitwise.BitOr(directions,BUTTON_LEFT) srclStrnLdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_RIGHT))srclStrn case VK_RIGHT srclStrn3directions = Bitwise.BitOr(directions,BUTTON_RIGHT) srclStrnKdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_LEFT)) srclStrn case VK_START srclStrn-buttons = Bitwise.BitOr(buttons,BUTTON_START) srclStrncase VK_SELECT srclStrn.buttons = Bitwise.BitOr(buttons,BUTTON_SELECT) srclStrncase VK_BUTTON_BsrclStrn)buttons = Bitwise.BitOr(buttons,BUTTON_B) srclStrncase VK_BUTTON_AsrclStrn)buttons = Bitwise.BitOr(buttons,BUTTON_A) srclStrn end select srclStrn raised = true srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnkeycode as integer rsltStrnEndGInt MethGrupnameStrn keyReleased CompStrnVsblInt sorcGrup$EncoInt srclStrn#Sub keyReleased(keycode as integer) srclStrnselect case keycode srclStrn case VK_DOWNsrclStrnKdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_DOWN)) srclStrn case VK_UP srclStrnIdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_UP)) srclStrn case VK_LEFTsrclStrnKdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_LEFT)) srclStrn case VK_RIGHT srclStrnLdirections = Bitwise.BitAnd(directions,Bitwise.OnesComplement(BUTTON_RIGHT))srclStrn case VK_START srclStrnFbuttons = Bitwise.BitAnd(buttons,Bitwise.OnesComplement(BUTTON_START)) srclStrncase VK_SELECT srclStrnGbuttons = Bitwise.BitAnd(buttons,Bitwise.OnesComplement(BUTTON_SELECT)) srclStrncase VK_BUTTON_BsrclStrnBbuttons = Bitwise.BitAnd(buttons,Bitwise.OnesComplement(BUTTON_B)) srclStrncase VK_BUTTON_AsrclStrnBbuttons = Bitwise.BitAnd(buttons,Bitwise.OnesComplement(BUTTON_A)) srclStrn end select srclStrn raised = true srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnkeycode as integer rsltStrnEndGInt PropGrupXEncoInt declStrnbuttons As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrndirections As Integer = 0 flagInt !CompStrnshrdInt EndGInt PropGrup\EncoInt declStrnraised As boolean = false flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt CnstGrupPEncoInt nameStrn BUTTON_DOWN typeInt defnStrn&h08flagInt EndGInt CnstGrupPEncoInt nameStrn BUTTON_UP typeInt defnStrn&h04flagInt EndGInt CnstGrupPEncoInt nameStrn BUTTON_LEFT typeInt defnStrn&h02flagInt EndGInt CnstGrupPEncoInt nameStrn BUTTON_RIGHTtypeInt defnStrn&h01flagInt EndGInt CnstGrupPEncoInt nameStrn BUTTON_STARTtypeInt defnStrn&h08flagInt EndGInt CnstGrupTEncoInt nameStrn BUTTON_SELECT typeInt defnStrn&h04flagInt EndGInt CnstGrupLEncoInt nameStrnBUTTON_BtypeInt defnStrn&h02flagInt EndGInt CnstGrupLEncoInt nameStrnBUTTON_AtypeInt defnStrn&h01flagInt EndGInt CnstGrupLEncoInt nameStrnVK_DOWN typeInt defnStrn125 flagInt !EndGInt CnstGrupLEncoInt nameStrnVK_UP typeInt defnStrn126 flagInt !EndGInt CnstGrupLEncoInt nameStrnVK_LEFT typeInt defnStrn123 flagInt !EndGInt CnstGrupLEncoInt nameStrnVK_RIGHTtypeInt defnStrn124 flagInt !EndGInt CnstGrupPEncoInt nameStrn VK_SELECT typeInt defnStrn60 flagInt !EndGInt CnstGrupLEncoInt nameStrnVK_STARTtypeInt defnStrn76 flagInt !EndGInt CnstGrupPEncoInt nameStrn VK_BUTTON_B typeInt defnStrn7 flagInt !EndGInt CnstGrupPEncoInt nameStrn VK_BUTTON_A typeInt defnStrn6 flagInt !EndGInt PadnPadnT****************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpFTyuNameStrn FileTypes1 ContInt paswStrnfTypGruppnameStrn Gamboy Rom MacCStrntypeStrndefnStrn .gb, .gbc flagInt NameStrn GamboyRom EndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj#O NameStrnlogger ContInt paswStrnbClsInt bNtrInt CompStrnMethGrupPnameStrnLog CompStrnVsblInt sorcGrupEncoInt srclStrnSub Log(line as string) srclStrnlines.Append line srclStrnif UBound(lines)>15 thensrclStrnwrite srclStrnend if srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnline as string rsltStrnEndGInt MethGrup|nameStrnwrite CompStrnVsblInt sorcGrupEncoInt srclStrn Sub write() srclStrnif location = nil then srclStrnlocation=new FolderItem srclStrn"location=location.Child("log.txt") srclStrnend if srclStrnsrclStrnif location=nil then return srclStrn'dim g as FolderItemsrclStrn'if location.Exists thensrclStrn''g=GetFolderItem(location.AbsolutePath) srclStrn0'location = location.Parent.Child("log.txt.new")srclStrn'end if srclStrnsrclStrn7dim tos as TextOutputStream = location.AppendToTextFile srclStrnif tos = nil then ReturnsrclStrnsrclStrn#for i as integer=0 to UBound(lines) srclStrntos.WriteLine(lines(i)) srclStrnnextsrclStrnsrclStrn)for i as integer = UBound(lines) DownTo 0 srclStrnlines.Remove(i) srclStrnnextsrclStrnsrclStrn tos.Close srclStrnsrclStrn'if g <> nil then srclStrn 'g.Delete srclStrn'location.CopyFileTo(g) srclStrn'location.DeletesrclStrn'end if srclStrn 'location=g srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt !shrdInt parmStrnrsltStrnEndGInt PropGrupTEncoInt declStrnlines(-1) As string flagInt !CompStrnshrdInt EndGInt PropGrupXEncoInt declStrnlocation As folderItem flagInt !CompStrnshrdInt EndGInt VwBhGrupVwPrGrupDNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrup`NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt VwPrGrupHNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt VwPrGrupXNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt VwPrGrupXNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt EndGInt PadnPadn|************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpUIsWnStGrup0OTabGrupContInt eSptInt EndGInt OTabGrup(ContInt v_LSptInt ciIDInt EndGInt OTabGrup(ContInt xLSptInt ciIDInt EndGInt OTabGrup(ContInt xLSptInt ciIDInt EndGInt OTabGrup(ContInt LoLSptInt ciIDInt EndGInt OTabGrupXContInt +LSptInt RSptInt ScrXInt ScrYInt lstHInt lstVInt EndGInt OTabGrup4ContInt +AltEInt LSptInt ciIDInt EndGInt LsLcStrnVideoDriver.setPixels rEdtRect:nYEndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************EOF!