-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy path6800.5
More file actions
executable file
·1740 lines (1544 loc) · 28.4 KB
/
6800.5
File metadata and controls
executable file
·1740 lines (1544 loc) · 28.4 KB
1
DIM ImmFlag AS BOOLEANDIM PgmCtrSet AS BOOLEANDIM RunFlag AS BOOLEANDIM TargetMem(65536) AS BYTEDIM I AS LONGDIM TempInt AS LONGDIM TempByte AS BYTEDIM TempStr AS STRING*256DIM TempHexData AS STRING*256DIM HexData AS STRING*256DIM TempLabel AS LABELDIM BinFile AS FILEDIM InstReg AS BYTEDIM OperandReg AS LONGDIM StoreData AS BYTEDIM IFlag AS BOOLEANDIM NFlag AS BOOLEANDIM ZFlag AS BOOLEANDIM VFlag AS BOOLEANDIM CFlag AS BOOLEANDIM CPUBackground AS RECTANGLEDIM ResetButton AS BUTTONDIM RunButton AS BUTTONDIM StepButton AS BUTTONDIM LoadButton AS BUTTONDIM AddrReg AS LONGDIM AddrRegDisplay AS TEXTBOXDIM AddrRegLabel AS STATICTEXTDIM DecAddr AS BUTTONDIM IncAddr AS BUTTONDIM DataReg AS BYTEDIM DataRegDisplay AS TEXTBOXDIM DataRegLabel AS STATICTEXTDIM SetData AS BUTTONDIM PgmCtr AS LONGDIM PgmCtrDisplay AS TEXTBOXDIM PgmCtrLabel AS STATICTEXTDIM SetPgmCtr AS BUTTONDIM SPReg AS LONGDIM SPRegDisplay AS TEXTBOXDIM SPRegLabel AS STATICTEXTDIM SetSPReg AS BUTTONDIM IndexReg AS LONGDIM IndexRegDisplay AS TEXTBOXDIM IndexRegLabel AS STATICTEXTDIM SetIndexReg AS BUTTONDIM AccA AS BYTEDIM AccADisplay AS TEXTBOXDIM AccALabel AS STATICTEXTDIM SetAccA AS BUTTONDIM AccB AS BYTEDIM AccBDisplay AS TEXTBOXDIM AccBLabel AS STATICTEXTDIM SetAccB AS BUTTONDIM CCReg AS BYTEDIM BPReg AS LONGDIM BPRegDisplay AS TEXTBOXDIM BPRegLabel AS STATICTEXTDIM SetBPReg AS BUTTONDIM IRQButton AS BUTTONDIM NMIButton AS BUTTONDIM NextInst AS STATICTEXTDIM TimerFlag AS BOOLEANDIM TimerLight AS STATICTEXTDIM ILight AS STATICTEXTDIM NLight AS STATICTEXTDIM ZLight AS STATICTEXTDIM VLight AS STATICTEXTDIM CLight AS STATICTEXTDIM RunLight AS STATICTEXTDIM KbdBackground AS RECTANGLEDIM Line1 AS RECTANGLEDIM Line2 AS RECTANGLEDIM Key(16) AS BUTTONDIM IOBackground AS RECTANGLEENUM 0 TRAPMODE INHERENTMODE IMM1MODE IMM2MODE DIRECTMODE INDEXEDMODE EXTENDEDMODE RELATIVEMODEEND ENUMTYPE OpCodeData OpInstDispatch AS LABEL OpModeDispatch AS LABEL OpMode AS LONG OpName AS STRING*8END TYPETABLE OpCode AS OpCodeData TrapX,TrapX,TRAPMODE,"Trap" NopX,InherentX,INHERENTMODE,"NOP" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TapX,InherentX,INHERENTMODE,"TAP" TpaX,InherentX,INHERENTMODE,"TPA" InxX,InherentX,INHERENTMODE,"INX" DexX,InherentX,INHERENTMODE,"DEX" ClvX,InherentX,INHERENTMODE,"CLV" SevX,InherentX,INHERENTMODE,"SEV" ClcX,InherentX,INHERENTMODE,"CLC" SecX,InherentX,INHERENTMODE,"SEC" CliX,InherentX,INHERENTMODE,"CLI" SeiX,InherentX,INHERENTMODE,"SEI" SbaX,InherentX,INHERENTMODE,"SBA" CbaX,InherentX,INHERENTMODE,"CBA" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TabX,InherentX,INHERENTMODE,"TAB" TbaX,InherentX,INHERENTMODE,"TBA" TrapX,TrapX,TRAPMODE,"Trap" DaaX,InherentX,INHERENTMODE,"DAA" TrapX,TrapX,TRAPMODE,"Trap" AbaX,InherentX,INHERENTMODE,"ABA" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" BraX,RelX,RELATIVEMODE,"BRA" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" BlsX,RelX,RELATIVEMODE,"BLS" BccX,RelX,RELATIVEMODE,"BCC" BcsX,RelX,RELATIVEMODE,"BCS" BneX,RelX,RELATIVEMODE,"BNE" BeqX,RelX,RELATIVEMODE,"BEQ" BvcX,RelX,RELATIVEMODE,"BVC" BvsX,RelX,RELATIVEMODE,"BVS" BplX,RelX,RELATIVEMODE,"BPL" BmiX,RelX,RELATIVEMODE,"BMI" BgeX,RelX,RELATIVEMODE,"BGE" BltX,RelX,RELATIVEMODE,"BLT" BgtX,RelX,RELATIVEMODE,"BGT" BleX,RelX,RELATIVEMODE,"BLE" TsxX,InherentX,INHERENTMODE,"TSX" InsX,InherentX,INHERENTMODE,"INS" PulaX,InherentX,INHERENTMODE,"PULA" PulbX,InherentX,INHERENTMODE,"PULB" DesX,InherentX,INHERENTMODE,"DES" TxsX,InherentX,INHERENTMODE,"TSX" PshaX,InherentX,INHERENTMODE,"PSHA" PshbX,InherentX,INHERENTMODE,"PSHB" TrapX,TrapX,TRAPMODE,"Trap" RtsX,InherentX,INHERENTMODE,"RTS" TrapX,TrapX,TRAPMODE,"Trap" RtiX,InherentX,INHERENTMODE,"RTI" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" WaiX,InherentX,INHERENTMODE,"WAI" SwiX,InherentX,INHERENTMODE,"SWI" NegaX,InherentX,INHERENTMODE,"NEGA" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" ComaX,InherentX,INHERENTMODE,"COMA" LsraX,InherentX,INHERENTMODE,"LSRA" TrapX,TrapX,TRAPMODE,"Trap" RoraX,InherentX,INHERENTMODE,"RORA" AsraX,InherentX,INHERENTMODE,"ASRA" AslaX,InherentX,INHERENTMODE,"ASLA" RolaX,InherentX,INHERENTMODE,"ROLA" DecaX,InherentX,INHERENTMODE,"DECA" TrapX,TrapX,TRAPMODE,"Trap" IncaX,InherentX,INHERENTMODE,"INCA" TstaX,InherentX,INHERENTMODE,"TSTA" TrapX,TrapX,TRAPMODE,"Trap" ClraX,InherentX,INHERENTMODE,"CLRA" NegbX,InherentX,INHERENTMODE,"NEGB" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" CombX,InherentX,INHERENTMODE,"COMB" LsrbX,InherentX,INHERENTMODE,"LSRB" TrapX,TrapX,TRAPMODE,"Trap" RorbX,InherentX,INHERENTMODE,"RORB" AsrbX,InherentX,INHERENTMODE,"ASRB" AslbX,InherentX,INHERENTMODE,"ASLB" RolbX,InherentX,INHERENTMODE,"ROLB" DecbX,InherentX,INHERENTMODE,"DECB" TrapX,TrapX,TRAPMODE,"Trap" IncbX,InherentX,INHERENTMODE,"INCB" TstbX,InherentX,INHERENTMODE,"TSTB" TrapX,TrapX,TRAPMODE,"Trap" ClrbX,InherentX,INHERENTMODE,"CLRB" NegX,IndexX,INDEXEDMODE,"NEGB" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" ComX,IndexX,INDEXEDMODE,"COM" LsrX,IndexX,INDEXEDMODE,"LSR" TrapX,TrapX,TRAPMODE,"Trap" RorX,IndexX,INDEXEDMODE,"ROR" AsrX,IndexX,INDEXEDMODE,"ASR" AslX,IndexX,INDEXEDMODE,"ASL" RolX,IndexX,INDEXEDMODE,"ROL" DecX,IndexX,INDEXEDMODE,"DEC" TrapX,TrapX,TRAPMODE,"Trap" IncX,IndexX,INDEXEDMODE,"INC" TstX,IndexX,INDEXEDMODE,"TST" JmpX,IndexX,INDEXEDMODE,"JMP" ClrX,IndexX,INDEXEDMODE,"CLR" NegX,ExtX,EXTENDEDMODE,"NEG" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" ComX,ExtX,EXTENDEDMODE,"COM" LsrX,ExtX,EXTENDEDMODE,"LSR" TrapX,TrapX,TRAPMODE,"Trap" RorX,ExtX,EXTENDEDMODE,"ROR" TrapX,TrapX,TRAPMODE,"Trap" AslX,ExtX,EXTENDEDMODE,"ASL" RolX,ExtX,EXTENDEDMODE,"ROL" DecX,ExtX,EXTENDEDMODE,"DEC" TrapX,TrapX,TRAPMODE,"Trap" IncX,ExtX,EXTENDEDMODE,"INC" TstX,ExtX,EXTENDEDMODE,"TST" JmpX,ExtX,EXTENDEDMODE,"JMP" ClrX,ExtX,EXTENDEDMODE,"CLR" SubaX,Imm1X,IMM1MODE,"SUBA" CmpaX,Imm1X,IMM1MODE,"CMPA" SbcaX,Imm1X,IMM1MODE,"SBCA" TrapX,TrapX,TRAPMODE,"Trap" AndaX,Imm1X,IMM1MODE,"ANDA" BitaX,Imm1X,IMM1MODE,"BITA" LdaaX,Imm1X,IMM1MODE,"LDAA" TrapX,TrapX,TRAPMODE,"Trap" EoraX,Imm1X,IMM1MODE,"EORA" AdcaX,Imm1X,IMM1MODE,"ADCA" OraaX,Imm1X,IMM1MODE,"ORAA" AddaX,Imm1X,IMM1MODE,"ADDA" CpxX,Imm2X,IMM2MODE,"CPX" BsrX,RelX,RELATIVEMODE,"BSR" LdsX,Imm2X,IMM2MODE,"LDS" TrapX,TrapX,TRAPMODE,"Trap" SubaX,DirX,DIRECTMODE,"SUBA" CmpaX,DirX,DIRECTMODE,"CMPA" SbcaX,DirX,DIRECTMODE,"SBCA" TrapX,TrapX,TRAPMODE,"Trap" AndaX,DirX,DIRECTMODE,"ANDA" BitaX,DirX,DIRECTMODE,"BITA" LdaaX,DirX,DIRECTMODE,"LDAA" StaaX,DirX,DIRECTMODE,"STAA" EoraX,DirX,DIRECTMODE,"EORA" AdcaX,DirX,DIRECTMODE,"ADCA" OraaX,DirX,DIRECTMODE,"ORAA" AddaX,DirX,DIRECTMODE,"ADDA" CpxX,DirX,DIRECTMODE,"CPX" StsX,DirX,DIRECTMODE,"STS" LdsX,DirX,DIRECTMODE,"LDS" TrapX,TrapX,TRAPMODE,"Trap" SubaX,IndexX,INDEXEDMODE,"SUBA" CmpaX,IndexX,INDEXEDMODE,"CMPA" SbcaX,IndexX,INDEXEDMODE,"SBCA" TrapX,TrapX,TRAPMODE,"Trap" AndaX,IndexX,INDEXEDMODE,"ANDA" BitaX,IndexX,INDEXEDMODE,"BITA" LdaaX,IndexX,INDEXEDMODE,"LDAA" StaaX,IndexX,INDEXEDMODE,"STAA" EoraX,IndexX,INDEXEDMODE,"EORA" AdcaX,IndexX,INDEXEDMODE,"ADCA" OraaX,IndexX,INDEXEDMODE,"ORAA" AddaX,IndexX,INDEXEDMODE,"ADDA" CpxX,IndexX,INDEXEDMODE,"CPX" JsrX,IndexX,INDEXEDMODE,"JSR" LdsX,IndexX,INDEXEDMODE,"LDS" StsX,IndexX,INDEXEDMODE,"STS" SubaX,ExtX,EXTENDEDMODE,"SUBA" CmpaX,ExtX,EXTENDEDMODE,"CMPX" SbcaX,ExtX,EXTENDEDMODE,"SBCA" TrapX,TrapX,TRAPMODE,"Trap" AndaX,ExtX,EXTENDEDMODE,"ANDA" BitaX,ExtX,EXTENDEDMODE,"BITA" LdaaX,ExtX,EXTENDEDMODE,"LDAA" StaaX,ExtX,EXTENDEDMODE,"STAA" EoraX,ExtX,EXTENDEDMODE,"EORA" AdcaX,ExtX,EXTENDEDMODE,"ADCA" OraaX,ExtX,EXTENDEDMODE,"ORAA" AddaX,ExtX,EXTENDEDMODE,"ADDA" CpxX,ExtX,EXTENDEDMODE,"CPX" JsrX,ExtX,EXTENDEDMODE,"JSR" LdsX,ExtX,EXTENDEDMODE,"LDS" StsX,ExtX,EXTENDEDMODE,"STS" SubbX,Imm1X,IMM1MODE,"SUBB" CmpbX,Imm1X,IMM1MODE,"CMPB" SbcbX,Imm1X,IMM1MODE,"SBCB" TrapX,TrapX,TRAPMODE,"Trap" AndbX,Imm1X,IMM1MODE,"ANDB" BitbX,Imm1X,IMM1MODE,"BITB" LdabX,Imm1X,IMM1MODE,"LDAB" TrapX,TrapX,TRAPMODE,"Trap" EorbX,Imm1X,IMM1MODE,"EORB" AdcbX,Imm1X,IMM1MODE,"ADCB" OrabX,Imm1X,IMM1MODE,"ORAB" AddbX,Imm1X,IMM1MODE,"ADDB" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" LdxX,Imm2X,IMM2MODE,"LDX" TrapX,TrapX,TRAPMODE,"Trap" SubbX,DirX,DIRECTMODE,"SUBB" CmpbX,DirX,DIRECTMODE,"CMPB" SbcbX,DirX,DIRECTMODE,"SBCB" TrapX,TrapX,TRAPMODE,"Trap" AndbX,DirX,DIRECTMODE,"ANDB" BitbX,DirX,DIRECTMODE,"BITB" LdabX,DirX,DIRECTMODE,"LDAB" StabX,DirX,DIRECTMODE,"STAB" EorbX,DirX,DIRECTMODE,"EORB" AdcbX,DirX,DIRECTMODE,"ADCB" OrabX,DirX,DIRECTMODE,"ORAB" AddbX,DirX,DIRECTMODE,"ADDB" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" LdxX,DirX,DIRECTMODE,"LDX" StxX,DirX,DIRECTMODE,"STX" SubbX,IndexX,INDEXEDMODE,"SUBB" CmpbX,IndexX,INDEXEDMODE,"CMPB" SbcbX,IndexX,INDEXEDMODE,"SBCB" TrapX,TrapX,TRAPMODE,"Trap" AndbX,IndexX,INDEXEDMODE,"ANDB" BitbX,IndexX,INDEXEDMODE,"BITB" LdabX,IndexX,INDEXEDMODE,"LDAB" StabX,IndexX,INDEXEDMODE,"STAB" EorbX,IndexX,INDEXEDMODE,"EORB" AdcbX,IndexX,INDEXEDMODE,"ADCB" OrabX,IndexX,INDEXEDMODE,"ORAB" AddbX,IndexX,INDEXEDMODE,"ADDB" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" LdxX,IndexX,INDEXEDMODE,"LDX" StxX,IndexX,INDEXEDMODE,"STX" SubbX,ExtX,EXTENDEDMODE,"SUBB" CmpbX,ExtX,EXTENDEDMODE,"CMPB" SbcbX,ExtX,EXTENDEDMODE,"SBCB" TrapX,TrapX,TRAPMODE,"Trap" AndbX,ExtX,EXTENDEDMODE,"ANDB" BitbX,ExtX,EXTENDEDMODE,"BITB" LdabX,ExtX,EXTENDEDMODE,"LDAB" StabX,ExtX,EXTENDEDMODE,"STAB" EorbX,ExtX,EXTENDEDMODE,"EORB" AdcbX,ExtX,EXTENDEDMODE,"ADCB" OrabX,ExtX,EXTENDEDMODE,"ORAB" AddbX,ExtX,EXTENDEDMODE,"ADDB" TrapX,TrapX,TRAPMODE,"Trap" TrapX,TrapX,TRAPMODE,"Trap" LdxX,ExtX,EXTENDEDMODE,"LDX" StxX,ExtX,EXTENDEDMODE,"STX"END TABLEOBMain.createSETPOSITION OBMain,0,0,1024,740OBMain.TEXT="6800 Emulator"PgmCtrSet=FALSERunFlag=FALSEIndexReg=0BPReg=0AccA=0AccB=0SPReg=0BPReg=0CONSTRUCT CPUBackground,5,280,280,400CPUBackground.BACKCOLOR=$ff0000CONSTRUCT ResetButton,10,650,60,20ResetButton.TEXT="RESET"CONSTRUCT RunButton,80,650,60,20RunButton.TEXT="RUN"CONSTRUCT StepButton,150,650,60,20StepButton.TEXT="STEP"CONSTRUCT LoadButton,220,650,60,20LoadButton.TEXT="LOAD"CONSTRUCT NextInst,10,620,270,20NextInst.BACKCOLOR=$ffffffCONSTRUCT DecAddr,120,580,15,20DecAddr.TEXT="<"CONSTRUCT IncAddr,135,580,15,20IncAddr.TEXT=">"CONSTRUCT AddrRegLabel,50,600,60,20CONSTRUCT AddrRegDisplay,50,580,60,20AddrRegLabel.TEXT="Addr"AddrRegLabel.BACKCOLOR=$ff0000AddrRegLabel.FORECOLOR=$ffffffCONSTRUCT IRQButton,170,580,60,20IRQButton.TEXT="IRQ"CONSTRUCT NMIButton,170,540,60,20NMIButton.TEXT="NMI"CONSTRUCT TimerLight,170,500,60,20TimerLight.BACKCOLOR=$ffTimerLight.FORECOLOR=$ffffTimerLight.TEXT="TIMER"CONSTRUCT ILight,170,460,60,20ILight.BACKCOLOR=$ffILight.FORECOLOR=$ffffILight.TEXT="INT"CONSTRUCT NLight,170,420,60,20NLight.BACKCOLOR=$ffNLight.FORECOLOR=$ffffNLight.TEXT="NEG"CONSTRUCT ZLight,170,380,60,20ZLight.BACKCOLOR=$ffZLight.FORECOLOR=$ffffZLight.TEXT="ZERO"CONSTRUCT VLight,170,340,60,20VLight.BACKCOLOR=$ffVLight.FORECOLOR=$ffffVLight.TEXT="OVF"CONSTRUCT CLight,170,300,60,20CLight.BACKCOLOR=$ffCLight.FORECOLOR=$ffffCLight.TEXT="CARRY"CONSTRUCT RunLight,245,300,30,20RunLight.BACKCOLOR=$ffRunLight.FORECOLOR=$ffffRunLight.TEXT="RUN"CONSTRUCT DataRegLabel,50,560,60,20CONSTRUCT DataRegDisplay,50,540,60,20DataRegLabel.TEXT="Data"DataRegLabel.BACKCOLOR=$ff0000DataRegLabel.FORECOLOR=$ffffffCONSTRUCT SetData,120,540,30,20SetData.TEXT="Set"CONSTRUCT PgmCtrLabel,50,520,60,20CONSTRUCT PgmCtrDisplay,50,500,60,20PgmCtrLabel.TEXT="Pgm Ctr"PgmCtrLabel.BACKCOLOR=$ff0000PgmCtrLabel.FORECOLOR=$ffffffCONSTRUCT SetPgmCtr,120,500,30,20SetPgmCtr.TEXT="Set"CONSTRUCT IndexRegLabel,50,480,60,20CONSTRUCT IndexRegDisplay,50,460,60,20IndexRegLabel.TEXT="Ndx Reg"IndexRegLabel.BACKCOLOR=$ff0000IndexRegLabel.FORECOLOR=$ffffffCONSTRUCT SetIndexReg,120,460,30,20SetIndexReg.TEXT="Set"CONSTRUCT AccALabel,50,440,60,20CONSTRUCT AccADisplay,50,420,60,20AccALabel.TEXT="Acc A"AccALabel.BACKCOLOR=$ff0000AccALabel.FORECOLOR=$ffffffCONSTRUCT SetAccA,120,420,30,20SetAccA.TEXT="Set"CONSTRUCT AccBLabel,50,400,60,20CONSTRUCT AccBDisplay,50,380,60,20AccBLabel.TEXT="Acc B"AccBLabel.BACKCOLOR=$ff0000AccBLabel.FORECOLOR=$ffffffCONSTRUCT SetAccB,120,380,30,20SetAccB.TEXT="Set"CONSTRUCT BPRegLabel,50,360,60,20CONSTRUCT BPRegDisplay,50,340,60,20BPRegLabel.TEXT="BP Reg"BPRegLabel.BACKCOLOR=$ff0000BPRegLabel.FORECOLOR=$ffffffBPRegDisplay.TEXT="0000"CONSTRUCT SetBPReg,120,340,30,20SetBPReg.TEXT="Set"CONSTRUCT SPRegLabel,50,320,60,20CONSTRUCT SPRegDisplay,50,300,60,20SPRegLabel.TEXT="SP Reg"SPRegLabel.BACKCOLOR=$ff0000SPRegLabel.FORECOLOR=$ffffffCONSTRUCT SetSPReg,120,300,30,20SetSPReg.TEXT="Set"CONSTRUCT BPRegLabel,170,320,60,20CONSTRUCT BPRegDisplay,170,300,60,20CONSTRUCT KbdBackground,730,280,280,400KbdBackground.BACKCOLOR=$808080CONSTRUCT Line1,740,290,260,20Line1.BACKCOLOR=$c0c0c0CONSTRUCT Line2,740,310,260,20Line2.BACKCOLOR=$c0c0c0CONSTRUCT Key(1),740,350,75,20Key(1).TEXT="^"CONSTRUCT Key(2),832,350,75,20Key(2).TEXT="^"CONSTRUCT Key(3),924,350,75,20Key(3).TEXT="^"CONSTRUCT Key(4),740,380,75,20Key(4).TEXT="1"CONSTRUCT Key(5),832,380,75,20Key(5).TEXT="2"CONSTRUCT Key(6),924,380,75,20Key(6).TEXT="3"CONSTRUCT Key(7),740,410,75,20Key(7).TEXT="4"CONSTRUCT Key(8),832,410,75,20Key(8).TEXT="5"CONSTRUCT Key(9),924,410,75,20Key(9).TEXT="6"CONSTRUCT Key(10),740,440,75,20Key(10).TEXT="7"CONSTRUCT Key(11),832,440,75,20Key(11).TEXT="8"CONSTRUCT Key(12),924,440,75,20Key(12).TEXT="9"CONSTRUCT Key(13),740,470,75,20Key(13).TEXT="-"CONSTRUCT Key(14),832,470,75,20Key(14).TEXT="0"CONSTRUCT Key(15),924,470,75,20Key(15).TEXT="."CONSTRUCT Key(16),740,500,260,20Key(16).TEXT="ENTER"CONSTRUCT IOBackground,300,280,415,400IOBackground.BACKCOLOR=$ffff00GOSUB LoadBinEND EVENTAbaX:mov bl,[AccA]add bl,[AccB]mov [AccA],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNAddaX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]add bl,almov [AccA],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNAddbX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]add bl,almov [AccB],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNAdcaX:IF CFlag=FALSE THEN clcELSE stcENDIFIF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]add bl,almov [AccA],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNAdcbX:IF CFlag=FALSE THEN clcELSE stcENDIFIF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]add bl,almov [AccB],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNAndaX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]and bl,almov [AccA],blsets [NFlag]sete [ZFlag]VFlag=FALSEsete [ZFlag]RETURNAndbX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]and bl,almov [AccB],blsets [NFlag]sete [ZFlag]VFlag=FALSERETURNBitaX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]and bl,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNBitbX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]and bl,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNClrX:TargetMem(OperandReg+1)=0ZFlag=TRUENFlag=FALSECFlag=FALSEVFlag=FALSERETURNClraX:AccA=0ZFlag=TRUENFlag=FALSECFlag=FALSEVFlag=FALSERETURNClrbX:AccB=0ZFlag=TRUENFlag=FALSECFlag=FALSEVFlag=FALSERETURNCmpaX:IF CFlag=FALSE THEN clcELSE stcENDIFIF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]sub bl,alsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNCmpbX:IF CFlag=FALSE THEN clcELSE stcENDIFIF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]sub bl,alsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNCbaX:mov bl,[AccA]sub bl,[AccB]setc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNComX:RETURNComaX:RETURNCombX:RETURNNegX:RETURNNegaX:RETURNNegbX:RETURNDaaX:RETURNDecX:TempByte=TargetMem(OperandReg+1)sub al,1sets [NFlag]sete [ZFlag]mov [TempByte], alTargetMem(OperandReg+1)=TempByteRETURNDecaX:mov al,[AccA]sub al,1sets [NFlag]sete [ZFlag]mov [AccA], alRETURNDecbX:mov al,[AccB]sub al,1sets [NFlag]sete [ZFlag]mov [AccB], alRETURNEoraX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]xor bl,almov [AccA],blsets [NFlag]sete [ZFlag]VFlag=FALSERETURNEorbX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]xor bl,almov [AccB],blsets [NFlag]sete [ZFlag]VFlag=FALSERETURNIncX:TempByte=TargetMem(OperandReg+1)add al,1sets [NFlag]sete [ZFlag]mov [TempByte], alTargetMem(OperandReg+1)=TempByteRETURNIncaX:mov al,[AccA]add al,1sets [NFlag]sete [ZFlag]mov [AccA], alRETURNIncbX:mov al,[AccB]add al,1sets [NFlag]sete [ZFlag]mov [AccB], alRETURNLdaaX:IF ImmFlag=False THEN AccA=TargetMem(OperandReg+1)ELSE AccA=OperandRegENDIFor al,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNLdabX:IF ImmFlag=False THEN AccB=TargetMem(OperandReg+1)ELSE AccB=OperandRegENDIFor al,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNOraaX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]or bl,almov [AccA],blsets [NFlag]sete [ZFlag]VFlag=FALSERETURNOrabX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]or bl,almov [AccB],blsets [NFlag]sete [ZFlag]VFlag=FALSERETURNPshaX:TargetMem(SPReg+1)=AccADECR SPRegRETURNPshbX:TargetMem(SPReg+1)=AccBDECR SPRegRETURNPulaX:INCR SPRegAccA=TargetMem(SPReg+1)RETURNPulbX:INCR SPRegAccB=TargetMem(SPReg+1)RETURNRolX:RETURNRolaX:RETURNRolbX:RETURNRorX:RETURNRoraX:RETURNRorbX:RETURNAslX:RETURNAslaX:RETURNAslbX:RETURNAsrX:AsraX:RETURNAsrbX:RETURNLsrX:RETURNLsraX:RETURNLsrbX:RETURNStaaX:TargetMem(OperandReg+1)=AccAor al,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNStabX:TargetMem(OperandReg+1)=AccBor al,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNSubaX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]sub bl,almov [AccA],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNSubbX:IF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]sub bl,almov [AccB],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNSbaX:mov bl,[AccA]sub bl,[AccB]mov [AccA],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNSbcaX:IF CFlag=FALSE THEN clcELSE stcENDIFIF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccA]sub bl,almov [AccA],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNSbcbX:IF CFlag=FALSE THEN clcELSE stcENDIFIF ImmFlag=False THEN TempByte=TargetMem(OperandReg+1)ELSE TempByte=OperandRegENDIFmov bl,[AccB]sub bl,almov [AccB],blsetc [CFlag]seto [VFlag]sets [NFlag]sete [ZFlag]RETURNTabX:AccB=AccBor al,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNTbaX:AccA=AccBor al,alsets [NFlag]sete [ZFlag]VFlag=FALSERETURNTstX:TempByte=OperandRegor al,alsets [NFlag]sete [ZFlag]CFlag=FALSEVFlag=FALSERETURNTstaX:mov al,[AccA]or al,alsets [NFlag]sete [ZFlag]CFlag=FALSEVFlag=FALSERETURNTstbX:mov al,[AccB]or al,alsets [NFlag]sete [ZFlag]CFlag=FALSEVFlag=FALSERETURNCpxX:RETURNDexX:DECR IndexRegRETURNDesX:DECR SPRegRETURNInxX:INCR IndexRegRETURNInsX:INCR SPRegRETURNLdxX:IF ImmFlag=False THEN GOSUB GetData2 IndexReg=OperandRegELSE IndexReg=OperandRegENDIFVFlag=FALSERETURNLdsX:IF ImmFlag=False THEN GOSUB GetData2 SPReg=OperandRegELSE SPReg=OperandRegENDIFVFlag=FALSERETURNStxX:StoreData=IndexReg/256or al,alsets [NFlag]mov [TempByte],alTargetMem(OperandReg+1)=StoreDataStoreData=IndexRegadd al,[TempByte]sete [ZFlag]TargetMem(OperandReg+2)=StoreDataRETURNStsX:StoreData=SPReg/256or al,alsets [NFlag]mov [TempByte],alTargetMem(OperandReg+1)=StoreDataStoreData=IndexRegadd al,[TempByte]sete [ZFlag]TargetMem(OperandReg+2)=StoreDataRETURNTxsX:RETURNTsxX:RETURNBraX:PgmCtr=OperandRegRETURNBccX:IF CFlag=FALSE THEN PgmCtr=OperandRegENDIFRETURNBcsX:IF CFlag=TRUE THEN PgmCtr=OperandRegENDIFRETURNBeqX:IF ZFlag=TRUE THEN PgmCtr=OperandRegENDIFRETURNBgeX:RETURNBgtX:BhiX:RETURNBleX:RETURNBlsX:RETURNBltX:RETURNBmiX:IF NFlag=TRUE THEN PgmCtr=OperandRegENDIFRETURNBneX:IF ZFlag=FALSE THEN PgmCtr=OperandRegENDIFRETURNBvcX:RETURNBvsX:RETURNBplX:IF NFlag=FALSE THEN PgmCtr=OperandRegENDIFRETURNJmpX:PgmCtr=OperandReg+1RETURNBsrX:DECR PgmCtrStoreData=PgmCtr/256TargetMem(SPReg)=StoreDataStoreData=PgmCtrTargetMem(SPReg+1)=StoreDataPgmCtr=OperandRegSPReg=SPReg-2RETURNJsrX:DECR PgmCtrStoreData=PgmCtr/256TargetMem(SPReg)=StoreDataStoreData=PgmCtrTargetMem(SPReg+1)=StoreDataPgmCtr=OperandReg+1SPReg=SPReg-2RETURNNopX:; Do NothingRETURNRtiX:RETURNRtsX:SPReg=SPReg+2TempInt=TargetMem(SPReg)*256OperandReg=TempInt+TargetMem(SPReg+1)PgmCtr=OperandReg+1RETURNSwiX:RETURNWaiX:RETURNClcX:CFlag=FALSERETURNCliX:IFlag=FALSERETURNClvX:VFlag=FALSERETURNSecX:CFlag=TRUERETURNSeiX:IFlag=TRUERETURNSevX:VFlag=TRUERETURNTapX:RETURNTpaX:RETURNImm1X:ImmFlag=TRUEGOSUB GetOp1PgmCtr=PgmCtr+2RETURNImm2X:ImmFlag=TRUEGOSUB GetImmOp2PgmCtr=PgmCtr+3RETURNDirX:ImmFlag=FALSEGOSUB GetOp1PgmCtr=PgmCtr+2RETURNExtX:ImmFlag=FALSEGOSUB GetOp2PgmCtr=PgmCtr+3RETURNIndexX:ImmFlag=FALSEGOSUB GetOp1OperandReg=OperandReg+IndexRegPgmCtr=PgmCtr+2RETURNInherentX:ImmFlag=FALSEINCR PgmCtrRETURNRelX:ImmFlag=FALSEGOSUB GetOp1IF OperandReg<128 THEN; Branch Forward OperandReg=OperandReg+2+PgmCtrELSE TempByte=$fe-OperandReg; Branch Backward OperandReg=PgmCtr-TempByteENDIFPgmCtr=PgmCtr+2RETURNTrapX:ImmFlag=FALSEINCR PgmCtrRETURNTimerLight.COMMANDIF TimerFlag=FALSE THEN TimerLight.BACKCOLOR=$ff00ELSE TimerLight.BACKCOLOR=$ffENDIFTimerFlag=NOT(TimerFlag)END EVENTVLight.COMMANDIF VFlag=FALSE THEN VLight.BACKCOLOR=$ff00ELSE VLight.BACKCOLOR=$ffENDIFVFlag=NOT(VFlag)END EVENTILight.COMMANDIF IFlag=FALSE THEN ILight.BACKCOLOR=$ff00ELSE ILight.BACKCOLOR=$ffENDIFIFlag=NOT(IFlag)END EVENTNLight.COMMANDIF NFlag=FALSE THEN NLight.BACKCOLOR=$ff00ELSE NLight.BACKCOLOR=$ffENDIFNFlag=NOT(NFlag)END EVENTZLight.COMMANDIF ZFlag=FALSE THEN ZLight.BACKCOLOR=$ff00ELSE ZLight.BACKCOLOR=$ffENDIFZFlag=NOT(ZFlag)END EVENTCLight.COMMANDIF CFlag=FALSE THEN CLight.BACKCOLOR=$ff00ELSE CLight.BACKCOLOR=$ffENDIFCFlag=NOT(CFlag)END EVENTRunButton.COMMANDIF RunFlag=FALSE THEN RunFlag=TRUE RunLight.BACKCOLOR=$ff00 RunButton.TEXT="HALT" Timer1.INTERVAL=1ELSE Timer1.STOP RunFlag=FALSE RunLight.BACKCOLOR=$ff RunButton.TEXT="RUN" GOSUB DisplayInst HexData=HEX(PgmCtr-1) GOSUB Pad4 PgmCtrDisplay.TEXT=HexDataENDIFEND EVENTTimer1.TIMERIF RunFlag=FALSE THEN RETURNENDIFInstReg=TargetMem(PgmCtr)GOSUB [OpCode(InstReg+1).OpModeDispatch]GOSUB [OpCode(InstReg+1).OpInstDispatch]IF PgmCtr-1=BPReg THEN Timer1.STOP RunFlag=FALSE RunLight.BACKCOLOR=$ff RunButton.TEXT="RUN" GOSUB DisplayInst HexData=HEX(PgmCtr-1) GOSUB Pad4 PgmCtrDisplay.TEXT=HexDataENDIFEND EVENTAddrRegDisplay.CHANGEGOSUB ChangeAddrEND EVENTChangeAddr:TempStr=AddrRegDisplay.TEXTHexData="$"+TempStrAddrReg=VAL(HexData)+1TempInt=TargetMem(AddrReg)HexData=HEX(TempInt)GOSUB Pad2DataRegDisplay.TEXT=HexDataRETURNSetPgmCtr.COMMANDPgmCtrSet=TRUETempStr=PgmCtrDisplay.TEXTHexData="$"+TempStrPgmCtr=VAL(HexData)+1HexData=HEX(PgmCtr-1)GOSUB Pad4PgmCtrDisplay.TEXT=HexDataGOSUB DisplayInstEND EVENTSetData.COMMANDTempStr=DataRegDisplay.TEXTHexData="$"+TempStrDataReg=VAL(HexData)TargetMem(AddrReg)=DataRegGOSUB ChangeAddrEND EVENTSetAccA.COMMANDTempStr=AccADisplay.TEXTHexData="$"+TempStrDataReg=VAL(HexData)AccA=DataRegEND EVENTSetAccB.COMMANDTempStr=AccBDisplay.TEXTHexData="$"+TempStrDataReg=VAL(HexData)AccB=DataRegEND EVENTSetIndexReg.COMMANDTempStr=IndexRegDisplay.TEXTHexData="$"+TempStrIndexReg=VAL(HexData)HexData=HEX(IndexReg)GOSUB Pad4IndexRegDisplay.TEXT=HexDataGOSUB DisplayInstEND EVENTSetBPReg.COMMANDTempStr=BPRegDisplay.TEXTHexData="$"+TempStrBPReg=VAL(HexData)HexData=HEX(BPReg)GOSUB Pad4BPRegDisplay.TEXT=HexDataGOSUB DisplayInstEND EVENTSetSPReg.COMMANDTempStr=SPRegDisplay.TEXTHexData="$"+TempStrSPReg=VAL(HexData)HexData=HEX(SPReg)GOSUB Pad4SPRegDisplay.TEXT=HexDataGOSUB DisplayInstEND EVENTPad2:IF LEN(HexData)=1 THEN TempHexData="0"+HexData HexData=TempHexDataENDIFRETURNPad4:TempInt=LEN(HexData)SELECT CASE TempInt CASE 1 TempHexData="000"+HexData CASE 2 TempHexData="00"+HexData CASE 3 TempHexData="0"+HexData CASE 4 TempHexData=HexDataEND SELECTHexData=TempHexDataRETURNIncAddr.COMMANDTempStr=AddrRegDisplay.TEXTHexData="$"+TempStrAddrReg=VAL(HexData)INCR AddrRegHexData=HEX(AddrReg)GOSUB Pad4AddrRegDisplay.TEXT=HexDataEND EVENTDecAddr.COMMANDTempStr=AddrRegDisplay.TEXTHexData="$"+TempStrAddrReg=VAL(HexData)DECR AddrRegHexData=HEX(AddrReg)GOSUB Pad4AddrRegDisplay.TEXT=HexDataEND EVENTKey.COMMANDTempStr=str(ArrayIndex)RunButton.text=TempStrEND EVENTLoadButton.COMMANDGOSUB LoadBinEND EVENTLoadBin:OPEN BinFile,"Romer.bin":READGET BinFile,TargetMemCLOSE BinFileRETURNDisplayInst:InstReg=TargetMem(PgmCtr)TempStr=OpCode(InstReg+1).OpNameTempInt=OpCode(InstReg+1).OpModeSELECT CASE TempInt CASE TRAPMODE CASE INHERENTMODE CASE IMM1MODE GOSUB GetOp1 HexData=HEX(OperandReg) GOSUB Pad2 TempStr=TempStr+" #$"+HexData CASE IMM2MODE GOSUB GetOp2 HexData=HEX(OperandReg) GOSUB Pad4 TempStr=TempStr+" #$"+HexData CASE DIRECTMODE GOSUB GetOp1 HexData=HEX(OperandReg) GOSUB Pad2 TempStr=TempStr+" $00"+HexData CASE INDEXEDMODE GOSUB GetOp1 HexData=HEX(OperandReg) GOSUB Pad2 TempStr=TempStr+" $"+HexData+",X" CASE EXTENDEDMODE GOSUB GetOp2 HexData=HEX(OperandReg) GOSUB Pad4 TempStr=TempStr+" $"+HexData CASE RELATIVEMODE GOSUB GetOp1 IF OperandReg<128 THEN; Branch Forward OperandReg=OperandReg+1+PgmCtr ELSE TempByte=$ff-OperandReg OperandReg=PgmCtr-TempByte ENDIF HexData=HEX(OperandReg) GOSUB Pad2 TempStr=TempStr+" $"+HexDataEND SELECTNextInst.TEXT=TempStrHexData=HEX(IndexReg)GOSUB Pad4IndexRegDisplay.TEXT=HexDataHexData=HEX(SPReg)GOSUB Pad4SPRegDisplay.TEXT=HexDataHexData=HEX(AccA)GOSUB Pad2AccADisplay.TEXT=HexDataHexData=HEX(AccB)GOSUB Pad2AccBDisplay.TEXT=HexDataIF IFlag=FALSE THEN ILight.BACKCOLOR=$ffELSE ILight.BACKCOLOR=$ff00ENDIFIF NFlag=FALSE THEN NLight.BACKCOLOR=$ffELSE NLight.BACKCOLOR=$ff00ENDIFIF ZFlag=FALSE THEN ZLight.BACKCOLOR=$ffELSE ZLight.BACKCOLOR=$ff00ENDIFIF VFlag=FALSE THEN VLight.BACKCOLOR=$ffELSE VLight.BACKCOLOR=$ff00ENDIFIF CFlag=FALSE THEN CLight.BACKCOLOR=$ffELSE CLight.BACKCOLOR=$ff00ENDIFRETURNGetOp1:OperandReg=TargetMem(PgmCtr+1)RETURNGetOp2:OperandReg=TargetMem(PgmCtr+1)*256OperandReg=OperandReg+TargetMem(PgmCtr+2)RETURNGetImmOp2:OperandReg=TargetMem(PgmCtr+1)*256or ax,axsets [NFlag]OperandReg=OperandReg+TargetMem(PgmCtr+2)or ax,axsete [ZFlag]RETURNGetData2:TempInt=TargetMem(OperandReg+1)*256or ax,axsets [NFlag]OperandReg=TempInt+TargetMem(OperandReg+2)or ax,axsete [ZFlag]RETURNStepButton.COMMANDIF PgmCtrSet=False THEN WARNINGBOX "Program Counter Not Set",TempStr,MB_OK RETURNENDIFGOSUB StepCodeEND EVENTStepCode:InstReg=TargetMem(PgmCtr)GOSUB [OpCode(InstReg+1).OpModeDispatch]GOSUB [OpCode(InstReg+1).OpInstDispatch]GOSUB DisplayInstHexData=HEX(PgmCtr-1)GOSUB Pad4PgmCtrDisplay.TEXT=HexDataRETURNResetButton.COMMANDPgmCtrSet=TRUEPgmCtr=TargetMem($ffff)*256PgmCtr=PgmCtr+TargetMem($10000)INCR PgmCtrHexData=HEX(PgmCtr-1)GOSUB Pad4PgmCtrDisplay.TEXT=HexDataGOSUB DisplayInstEND EVENT