Repository navigation
Expand file tree
/
Copy path6800.1
More file actions
executable file
·1298 lines (1062 loc) · 21.5 KB
/
Copy path6800.1
File metadata and controls
executable file
·1298 lines (1062 loc) · 21.5 KB
1
DIM ImmFlag AS BOOLEAN
DIM PgmCtrSet AS BOOLEAN
DIM RunFlag AS BOOLEAN
DIM StepFlag AS BOOLEAN
DIM TargetMem(65536) AS BYTE
DIM I AS LONG
DIM TempInt AS LONG
DIM TempByte AS BYTE
DIM TempStr AS STRING*256
DIM TempHexData AS STRING*256
DIM HexData AS STRING*256
DIM TempLabel AS LABEL
DIM BinFile AS FILE
DIM InstReg AS BYTE
DIM OperandReg AS LONG
DIM StoreData AS BYTE
DIM IFlag AS BOOLEAN
DIM NFlag AS BOOLEAN
DIM ZFlag AS BOOLEAN
DIM VFlag AS BOOLEAN
DIM CFlag AS BOOLEAN
DIM CPUBackground AS RECTANGLE
DIM ResetButton AS BUTTON
DIM RunButton AS BUTTON
DIM StepButton AS BUTTON
DIM LoadButton AS BUTTON
DIM AddrReg AS LONG
DIM AddrRegDisplay AS TEXTBOX
DIM AddrRegLabel AS STATICTEXT
DIM DecAddr AS BUTTON
DIM IncAddr AS BUTTON
DIM DataReg AS BYTE
DIM DataRegDisplay AS TEXTBOX
DIM DataRegLabel AS STATICTEXT
DIM SetData AS BUTTON
DIM PgmCtr AS LONG
DIM PgmCtrDisplay AS TEXTBOX
DIM PgmCtrLabel AS STATICTEXT
DIM SetPgmCtr AS BUTTON
DIM SPReg AS LONG
DIM SPRegDisplay AS TEXTBOX
DIM SPRegLabel AS STATICTEXT
DIM SetSPReg AS BUTTON
DIM IndexReg AS LONG
DIM IndexRegDisplay AS TEXTBOX
DIM IndexRegLabel AS STATICTEXT
DIM SetIndexReg AS BUTTON
DIM AccA AS BYTE
DIM AccADisplay AS TEXTBOX
DIM AccALabel AS STATICTEXT
DIM SetAccA AS BUTTON
DIM AccB AS BYTE
DIM AccBDisplay AS TEXTBOX
DIM AccBLabel AS STATICTEXT
DIM SetAccB AS BUTTON
DIM CCReg AS BYTE
DIM BPReg AS LONG
DIM BPRegDisplay AS TEXTBOX
DIM BPRegLabel AS STATICTEXT
DIM SetBPReg AS BUTTON
DIM IRQButton AS BUTTON
DIM NMIButton AS BUTTON
DIM NextInst AS STATICTEXT
DIM TimerFlag AS BOOLEAN
DIM TimerLight AS STATICTEXT
DIM ILight AS RECTANGLE
DIM NLight AS RECTANGLE
DIM ZLight AS RECTANGLE
DIM VLight AS RECTANGLE
DIM CLight AS RECTANGLE
DIM KbdBackground AS RECTANGLE
DIM Line1 AS RECTANGLE
DIM Line2 AS RECTANGLE
DIM Key(16) AS BUTTON
DIM IOBackground AS RECTANGLE
ENUM 0
TRAPMODE
INHERENTMODE
IMM1MODE
IMM2MODE
DIRECTMODE
INDEXEDMODE
EXTENDEDMODE
RELATIVEMODE
END ENUM
TYPE OpCodeData
OpInstDispatch AS LABEL
OpModeDispatch AS LABEL
OpMode AS LONG
OpName AS STRING*8
END TYPE
TABLE 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 TABLE
OBMain.create
SETPOSITION OBMain,0,0,1024,740
OBMain.TEXT="6800 Emulator"
StepFlag=TRUE
PgmCtrSet=FALSE
IndexReg=0
AccA=0
AccB=0
SPReg=0
BPReg=0
CONSTRUCT CPUBackground,5,280,280,400
CPUBackground.BACKCOLOR=$ff0000
CONSTRUCT ResetButton,10,650,60,20
ResetButton.TEXT="RESET"
CONSTRUCT RunButton,80,650,60,20
RunButton.TEXT="RUN"
CONSTRUCT StepButton,150,650,60,20
StepButton.TEXT="STEP"
CONSTRUCT LoadButton,220,650,60,20
LoadButton.TEXT="LOAD"
CONSTRUCT NextInst,10,620,270,20
NextInst.BACKCOLOR=$ffffff
CONSTRUCT DecAddr,120,580,15,20
DecAddr.TEXT="<"
CONSTRUCT IncAddr,135,580,15,20
IncAddr.TEXT=">"
CONSTRUCT AddrRegLabel,50,600,60,20
CONSTRUCT AddrRegDisplay,50,580,60,20
AddrRegLabel.TEXT="Addr"
AddrRegLabel.BACKCOLOR=$ff0000
AddrRegLabel.FORECOLOR=$ffffff
CONSTRUCT IRQButton,170,580,60,20
IRQButton.TEXT="IRQ"
CONSTRUCT NMIButton,170,540,60,20
NMIButton.TEXT="NMI"
CONSTRUCT TimerLight,170,500,60,20
TimerLight.BACKCOLOR=$ff
TimerLight.FORECOLOR=$ffff
TimerLight.TEXT="TIMER"
CONSTRUCT ILight,170,460,60,20
ILight.BACKCOLOR=$ff
ILight.FORECOLOR=$ffff
ILight.TEXT="INT"
CONSTRUCT NLight,170,420,60,20
NLight.BACKCOLOR=$ff
NLight.FORECOLOR=$ffff
NLight.TEXT="NEG"
CONSTRUCT ZLight,170,380,60,20
ZLight.BACKCOLOR=$ff
ZLight.FORECOLOR=$ffff
ZLight.TEXT="ZERO"
CONSTRUCT VLight,170,340,60,20
VLight.BACKCOLOR=$ff
VLight.FORECOLOR=$ffff
VLight.TEXT="OVF"
CONSTRUCT CLight,170,300,60,20
CLight.BACKCOLOR=$ff
CLight.FORECOLOR=$ffff
CLight.TEXT="CARRY"
CONSTRUCT DataRegLabel,50,560,60,20
CONSTRUCT DataRegDisplay,50,540,60,20
DataRegLabel.TEXT="Data"
DataRegLabel.BACKCOLOR=$ff0000
DataRegLabel.FORECOLOR=$ffffff
CONSTRUCT SetData,120,540,30,20
SetData.TEXT="Set"
CONSTRUCT PgmCtrLabel,50,520,60,20
CONSTRUCT PgmCtrDisplay,50,500,60,20
PgmCtrLabel.TEXT="Pgm Ctr"
PgmCtrLabel.BACKCOLOR=$ff0000
PgmCtrLabel.FORECOLOR=$ffffff
CONSTRUCT SetPgmCtr,120,500,30,20
SetPgmCtr.TEXT="Set"
CONSTRUCT IndexRegLabel,50,480,60,20
CONSTRUCT IndexRegDisplay,50,460,60,20
IndexRegLabel.TEXT="Ndx Reg"
IndexRegLabel.BACKCOLOR=$ff0000
IndexRegLabel.FORECOLOR=$ffffff
CONSTRUCT SetIndexReg,120,460,30,20
SetIndexReg.TEXT="Set"
CONSTRUCT AccALabel,50,440,60,20
CONSTRUCT AccADisplay,50,420,60,20
AccALabel.TEXT="Acc A"
AccALabel.BACKCOLOR=$ff0000
AccALabel.FORECOLOR=$ffffff
CONSTRUCT SetAccA,120,420,30,20
SetAccA.TEXT="Set"
CONSTRUCT AccBLabel,50,400,60,20
CONSTRUCT AccBDisplay,50,380,60,20
AccBLabel.TEXT="Acc B"
AccBLabel.BACKCOLOR=$ff0000
AccBLabel.FORECOLOR=$ffffff
CONSTRUCT SetAccB,120,380,30,20
SetAccB.TEXT="Set"
CONSTRUCT BPRegLabel,50,360,60,20
CONSTRUCT BPRegDisplay,50,340,60,20
BPRegLabel.TEXT="BP Reg"
BPRegLabel.BACKCOLOR=$ff0000
BPRegLabel.FORECOLOR=$ffffff
CONSTRUCT SetBPReg,120,340,30,20
SetBPReg.TEXT="Set"
CONSTRUCT SPRegLabel,50,320,60,20
CONSTRUCT SPRegDisplay,50,300,60,20
SPRegLabel.TEXT="SP Reg"
SPRegLabel.BACKCOLOR=$ff0000
SPRegLabel.FORECOLOR=$ffffff
CONSTRUCT SetSPReg,120,300,30,20
SetSPReg.TEXT="Set"
CONSTRUCT BPRegLabel,170,320,60,20
CONSTRUCT BPRegDisplay,170,300,60,20
CONSTRUCT KbdBackground,730,280,280,400
KbdBackground.BACKCOLOR=$808080
CONSTRUCT Line1,740,290,260,20
Line1.BACKCOLOR=$c0c0c0
CONSTRUCT Line2,740,310,260,20
Line2.BACKCOLOR=$c0c0c0
CONSTRUCT Key(1),740,350,75,20
Key(1).TEXT="^"
CONSTRUCT Key(2),832,350,75,20
Key(2).TEXT="^"
CONSTRUCT Key(3),924,350,75,20
Key(3).TEXT="^"
CONSTRUCT Key(4),740,380,75,20
Key(4).TEXT="1"
CONSTRUCT Key(5),832,380,75,20
Key(5).TEXT="2"
CONSTRUCT Key(6),924,380,75,20
Key(6).TEXT="3"
CONSTRUCT Key(7),740,410,75,20
Key(7).TEXT="4"
CONSTRUCT Key(8),832,410,75,20
Key(8).TEXT="5"
CONSTRUCT Key(9),924,410,75,20
Key(9).TEXT="6"
CONSTRUCT Key(10),740,440,75,20
Key(10).TEXT="7"
CONSTRUCT Key(11),832,440,75,20
Key(11).TEXT="8"
CONSTRUCT Key(12),924,440,75,20
Key(12).TEXT="9"
CONSTRUCT Key(13),740,470,75,20
Key(13).TEXT="-"
CONSTRUCT Key(14),832,470,75,20
Key(14).TEXT="0"
CONSTRUCT Key(15),924,470,75,20
Key(15).TEXT="."
CONSTRUCT Key(16),740,500,260,20
Key(16).TEXT="ENTER"
CONSTRUCT IOBackground,300,280,415,400
IOBackground.BACKCOLOR=$ffff00
GOSUB LoadBin
END EVENT
AbaX:
RETURN
AddaX:
RETURN
AddbX:
RETURN
AdcaX:
RETURN
AdcbX:
RETURN
AndaX:
RETURN
AndbX:
RETURN
BitaX:
RETURN
BitbX:
RETURN
ClrX:
RETURN
ClraX:
RETURN
ClrbX:
RETURN
CmpaX:
RETURN
CmpbX:
RETURN
CbaX:
RETURN
ComX:
RETURN
ComaX:
RETURN
CombX:
RETURN
NegX:
RETURN
NegaX:
RETURN
NegbX:
RETURN
DaaX:
RETURN
DecX:
RETURN
DecaX:
RETURN
DecbX:
RETURN
EoraX:
RETURN
EorbX:
RETURN
IncX:
RETURN
IncaX:
RETURN
IncbX:
LdaaX:
IF ImmFlag=False THEN
AccA=TargetMem(OperandReg+1)
ELSE
AccA=OperandReg
ENDIF
or al,al
sets [NFlag]
sete [ZFlag]
VFlag=FALSE
RETURN
LdabX:
IF ImmFlag=False THEN
AccB=TargetMem(OperandReg+1)
ELSE
AccB=OperandReg
ENDIF
or al,al
sets [NFlag]
sete [ZFlag]
VFlag=FALSE
RETURN
OraaX:
RETURN
OrabX:
RETURN
PshaX:
RETURN
PshbX:
RETURN
PulaX:
RETURN
PulbX:
RETURN
RolX:
RETURN
RolaX:
RETURN
RolbX:
RETURN
RorX:
RETURN
RoraX:
RETURN
RorbX:
RETURN
AslX:
RETURN
AslaX:
RETURN
AslbX:
RETURN
AsrX:
AsraX:
RETURN
AsrbX:
RETURN
LsrX:
RETURN
LsraX:
RETURN
LsrbX:
RETURN
StaaX:
TargetMem(OperandReg+1)=AccA
or al,al
sets [NFlag]
sete [ZFlag]
VFlag=FALSE
RETURN
StabX:
TargetMem(OperandReg+1)=AccB
or al,al
sets [NFlag]
sete [ZFlag]
VFlag=FALSE
RETURN
SubaX:
RETURN
SubbX:
RETURN
SbaX:
RETURN
SbcaX:
RETURN
SbcbX:
RETURN
TabX:
RETURN
TbaX:
RETURN
TstX:
RETURN
TstaX:
RETURN
TstbX:
RETURN
CpxX:
RETURN
DexX:
DECR IndexReg
RETURN
DesX:
RETURN
InxX:
RETURN
InsX:
RETURN
LdxX:
IF ImmFlag=False THEN
GOSUB GetData2
IndexReg=OperandReg
ELSE
IndexReg=OperandReg
ENDIF
VFlag=FALSE
RETURN
LdsX:
IF ImmFlag=False THEN
GOSUB GetData2
SPReg=OperandReg
ELSE
SPReg=OperandReg
ENDIF
VFlag=FALSE
RETURN
StxX:
StoreData=IndexReg/256
TargetMem(OperandReg+1)=StoreData
StoreData=IndexReg
TargetMem(OperandReg+2)=StoreData
RETURN
StsX:
StoreData=SPReg/256
TargetMem(OperandReg+1)=StoreData
StoreData=IndexReg
TargetMem(OperandReg+2)=StoreData
RETURN
TxsX:
RETURN
TsxX:
RETURN
BraX:
RETURN
BccX:
RETURN
BcsX:
RETURN
BeqX:
RETURN
BgeX:
RETURN
BgtX:
BhiX:
RETURN
BleX:
RETURN
BlsX:
RETURN
BltX:
RETURN
BmiX:
RETURN
BneX:
RETURN
BvcX:
RETURN
BvsX:
RETURN
BplX:
RETURN
JmpX:
PgmCtr=OperandReg+1
RETURN
BsrX:
RETURN
JsrX:
; Save PgmCtr on stack here
PgmCtr=OperandReg+1
RETURN
NopX:
; Do Nothing
RETURN
RtiX:
RETURN
RtsX:
RETURN
SwiX:
RETURN
WaiX:
RETURN
ClcX:
CFlag=FALSE
RETURN
CliX:
IFlag=FALSE
RETURN
ClvX:
VFlag=FALSE
RETURN
SecX:
CFlag=TRUE
RETURN
SeiX:
IFlag=TRUE
RETURN
SevX:
VFlag=TRUE
RETURN
TapX:
RETURN
TpaX:
RETURN
Imm1X:
ImmFlag=TRUE
GOSUB GetOp1
PgmCtr=PgmCtr+2
RETURN
Imm2X:
ImmFlag=TRUE
GOSUB GetImmOp2
PgmCtr=PgmCtr+3
RETURN
DirX:
ImmFlag=FALSE
GOSUB GetOp1
PgmCtr=PgmCtr+2
RETURN
ExtX:
ImmFlag=FALSE
GOSUB GetOp2
PgmCtr=PgmCtr+3
RETURN
IndexX:
ImmFlag=FALSE
GOSUB GetOp1
OperandReg=OperandReg+IndexReg
PgmCtr=PgmCtr+2
RETURN
InherentX:
ImmFlag=FALSE
INCR PgmCtr
RETURN
RelX:
ImmFlag=FALSE
PgmCtr=PgmCtr+2; *********************** Take out later ****************************
RETURN
TrapX:
ImmFlag=FALSE
INCR PgmCtr
RETURN
TimerLight.COMMAND
IF TimerFlag=FALSE THEN
TimerLight.BACKCOLOR=$ff00
ELSE
TimerLight.BACKCOLOR=$ff
ENDIF
TimerFlag=NOT(TimerFlag)
END EVENT
RunButton.command
TempStr=AddrRegDisplay.text
HexData="$"+TempStr
TempInt=val(HexData)+1
TempStr=OpCode(TempInt).OpName
TempInt=OpCode(TempInt).OpMode
select case TempInt
case TRAPMODE
TempStr=TempStr+" Trap"
case INHERENTMODE
TempStr=TempStr+" Inherent"
case IMM1MODE
TempStr=TempStr+" Imm1"
case IMM2MODE
TempStr=TempStr+" Imm2"
case DIRECTMODE
TempStr=TempStr+" Dir"
case INDEXEDMODE
TempStr=TempStr+" Ndx"
case EXTENDEDMODE
TempStr=TempStr+" Ext"
case RELATIVEMODE
TempStr=TempStr+" Rel"
end select
NextInst.text=TempStr
END EVENT
AddrRegDisplay.CHANGE
GOSUB ChangeAddr
END EVENT
ChangeAddr:
TempStr=AddrRegDisplay.TEXT
HexData="$"+TempStr
AddrReg=VAL(HexData)+1
TempInt=TargetMem(AddrReg)
HexData=HEX(TempInt)
GOSUB Pad2
DataRegDisplay.TEXT=HexData
RETURN
SetPgmCtr.COMMAND
PgmCtrSet=TRUE
TempStr=PgmCtrDisplay.TEXT
HexData="$"+TempStr
PgmCtr=VAL(HexData)+1
HexData=HEX(PgmCtr-1)
GOSUB Pad4
PgmCtrDisplay.TEXT=HexData
GOSUB DisplayInst
END EVENT
SetData.COMMAND
TempStr=DataRegDisplay.TEXT
HexData="$"+TempStr
DataReg=VAL(HexData)
TargetMem(AddrReg)=DataReg
GOSUB ChangeAddr
END EVENT
SetAccA.COMMAND
TempStr=AccADisplay.TEXT
HexData="$"+TempStr
DataReg=VAL(HexData)
AccA=DataReg
END EVENT
SetAccB.COMMAND
TempStr=AccBDisplay.TEXT
HexData="$"+TempStr
DataReg=VAL(HexData)
AccB=DataReg
END EVENT
Pad2:
IF LEN(HexData)=1 THEN
TempHexData="0"+HexData
HexData=TempHexData
ENDIF
RETURN
Pad4:
TempInt=LEN(HexData)
SELECT CASE TempInt
CASE 1
TempHexData="000"+HexData
CASE 2
TempHexData="00"+HexData
CASE 3
TempHexData="0"+HexData
CASE 4
TempHexData=HexData
END SELECT
HexData=TempHexData
RETURN
IncAddr.COMMAND
TempStr=AddrRegDisplay.TEXT
HexData="$"+TempStr
AddrReg=VAL(HexData)
INCR AddrReg
HexData=HEX(AddrReg)
GOSUB Pad4
AddrRegDisplay.TEXT=HexData
END EVENT
DecAddr.COMMAND
TempStr=AddrRegDisplay.TEXT
HexData="$"+TempStr
AddrReg=VAL(HexData)
DECR AddrReg
HexData=HEX(AddrReg)
GOSUB Pad4
AddrRegDisplay.TEXT=HexData
END EVENT
Key.COMMAND
TempStr=str(ArrayIndex)
RunButton.text=TempStr
END EVENT
LoadButton.COMMAND
GOSUB LoadBin
END EVENT
LoadBin:
OPEN BinFile,"Romer.bin":READ
GET BinFile,TargetMem
CLOSE BinFile
RETURN
DisplayInst:
InstReg=TargetMem(PgmCtr)
TempStr=OpCode(InstReg+1).OpName
TempInt=OpCode(InstReg+1).OpMode
SELECT 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+" $"+HexData
END SELECT
NextInst.TEXT=TempStr
HexData=HEX(IndexReg)
GOSUB Pad4
IndexRegDisplay.TEXT=HexData
HexData=HEX(SPReg)
GOSUB Pad4
SPRegDisplay.TEXT=HexData
HexData=HEX(AccA)
GOSUB Pad2
AccADisplay.TEXT=HexData
HexData=HEX(AccB)
GOSUB Pad2
AccBDisplay.TEXT=HexData
IF IFlag=FALSE THEN
ILight.BACKCOLOR=$ff
ELSE
ILight.BACKCOLOR=$ff00
ENDIF
IF NFlag=FALSE THEN
NLight.BACKCOLOR=$ff
ELSE
NLight.BACKCOLOR=$ff00
ENDIF
IF ZFlag=FALSE THEN
ZLight.BACKCOLOR=$ff
ELSE
ZLight.BACKCOLOR=$ff00
ENDIF
IF VFlag=FALSE THEN
VLight.BACKCOLOR=$ff
ELSE
VLight.BACKCOLOR=$ff00
ENDIF
IF CFlag=FALSE THEN
CLight.BACKCOLOR=$ff
ELSE
CLight.BACKCOLOR=$ff00
ENDIF
RETURN
GetOp1:
OperandReg=TargetMem(PgmCtr+1)
RETURN
GetOp2:
OperandReg=TargetMem(PgmCtr+1)*256
OperandReg=OperandReg+TargetMem(PgmCtr+2)
RETURN
GetImmOp2:
OperandReg=TargetMem(PgmCtr+1)*256
or ax,ax
sets [NFlag]
or ax,ax
sete [ZFlag]
OperandReg=OperandReg+TargetMem(PgmCtr+2)
RETURN
GetData2:
TempInt=TargetMem(OperandReg+1)*256
or ax,ax
sets [NFlag]
OperandReg=TempInt+TargetMem(OperandReg+2)
or ax,ax
sete [ZFlag]
RETURN
StepButton.COMMAND
IF PgmCtrSet=False THEN
WARNINGBOX "Program Counter Not Set",TempStr,MB_OK
RETURN
ENDIF
StepFlag=TRUE
GOSUB StepCode
END EVENT
StepCode:
InstReg=TargetMem(PgmCtr)
GOSUB [OpCode(InstReg+1).OpModeDispatch]
GOSUB [OpCode(InstReg+1).OpInstDispatch]
GOSUB DisplayInst
HexData=HEX(PgmCtr-1)
GOSUB Pad4
PgmCtrDisplay.TEXT=HexData
RETURN
ResetButton.COMMAND
PgmCtrSet=TRUE
END EVENT