Option Explicit Dim address As Long Function chgFlag16 (aa As Long) Dim a As Long a = aa If a < 0 Or 65535 < a Then Flag(0) = 1 Else Flag(0) = 0 '''C-Flag While a < 0: a = a + 65536: Wend While a >= 65536: a = a - 65536: Wend Flag(3) = a \ 32768 '''N-Flag Flag(2) = (65536 - a) \ 65536 '''Z-Flag chgFlag16 = a End Function Function chgFlag16NZ (aa As Long) Dim a As Long a = aa While a < 0: a = a + 65536: Wend While a >= 65536: a = a - 65536: Wend Flag(3) = a \ 32768 '''N-Flag Flag(2) = (65536 - a) \ 65536 '''Z-Flag chgFlag16NZ = a End Function Function chgFlag8 (aa As Long) Dim a As Long a = aa If a < 0 Or 255 < a Then Flag(0) = 1 Else Flag(0) = 0 '''C-Flag While a < 0: a = a + 256: Wend While a >= 256: a = a - 256: Wend Flag(3) = a \ 128 '''N-Flag Flag(2) = (256 - a) \ 256'''Z-Flag chgFlag8 = a End Function Function chgFlag8NZ (aa As Long) Dim a As Long a = aa While a < 0: a = a + 256: Wend While a >= 256: a = a - 256: Wend Flag(3) = a \ 128 '''N-Flag Flag(2) = (256 - a) \ 256'''Z-Flag chgFlag8NZ = a End Function Sub cmd_ex1_Click () Dim i As Long list2.Clear list2.AddItem "example-1" list2.AddItem " " list2.AddItem " org 2000" list2.AddItem " mov F010,a" list2.AddItem " mov a,F011" list2.AddItem " " address = &H2000 Call write1(&HB6) Call write1(&HF0) Call write1(&H10) Call write1(&HB7) Call write1(&HF0) Call write1(&H11) Call write1(&H3F) 'jmp 2000 Call write1(&H7E) Call write1(&H20) Call write1(&H0) address = &HF010 Call write1(&H12) Call write1(&H34) 'r8(0) = "24" 'r8(1) = "68" 'r16(0) = "0010" 'r16(1) = "0080" 'r16(2) = "2080" 'r16(3) = "FF80" r16(4) = "2000" End Sub Sub cmd_exX_Click () Dim i As Long list2.Clear list2.AddItem "example-X" list2.AddItem " " list2.AddItem " org 2000" list2.AddItem " ???" list2.AddItem " nop" list2.AddItem " jmp 2000" list2.AddItem " " address = &HD000 Call write1(&HE0) Call write1(&H1) Call write1(&HE0) Call write1(&H3) Call write1(&HE0) Call write1(&H5) Call write1(&HE0) Call write1(&H7) Call write1(&HE0) Call write1(&H9) Call write1(&HE0) Call write1(&HB) Call write1(&HE0) Call write1(&HD) Call write1(&HE0) Call write1(&HF) Call write1(&HE0) Call write1(&H11) Call write1(&HE0) Call write1(&H13) Call write1(&HE0) Call write1(&H15) Call write1(&HE0) Call write1(&H17) Call write1(&HE0) Call write1(&H19) Call write1(&HE0) Call write1(&H1B) Call write1(&HE0) Call write1(&H1D) Call write1(&HE0) Call write1(&H1F) Call write1(&HE0) Call write1(&H21) Call write1(&HE0) Call write1(&H23) Call write1(&HE0) Call write1(&H25) Call write1(&HE0) Call write1(&H27) Call write1(&HE0) Call write1(&H29) Call write1(&HE0) Call write1(&H2B) Call write1(&HE0) Call write1(&H2D) Call write1(&HE0) Call write1(&H2F) Call write1(&HE0) Call write1(&H31) address = &HE000 Call write1(&H47) Call write1(&H50) Call write1(&H19) Call write1(&H10) Call write1(&HA) Call write1(&H14) Call write1(&H27) Call write1(&H35) Call write1(&H41) Call write1(&H59) Call write1(&H69) Call write1(&H7F) Call write1(&H8D) Call write1(&H9C) Call write1(&HA1) Call write1(&HB9) Call write1(&HCC) Call write1(&HD4) Call write1(&HE9) Call write1(&HF6) Call write1(&HA5) Call write1(&H67) Call write1(&HED) Call write1(&H23) Call write1(&H4) Call write1(&H3B) Call write1(&H4A) Call write1(&H56) Call write1(&H72) Call write1(&H8F) Call write1(&H68) Call write1(&HC6) Call write1(&H42) Call write1(&HA0) Call write1(&H3B) Call write1(&HF9) Call write1(&H61) Call write1(&H94) Call write1(&H38) Call write1(&HA3) Call write1(&H11) Call write1(&H2D) Call write1(&H30) Call write1(&H94) Call write1(&H0) Call write1(&H0) Call write1(&H0) Call write1(&H0) Call write1(&H47) Call write1(&H69) Call write1(&HE0) Call write1(&H2F) Call write1(&H33) Call write1(&H44) Call write1(&H55) Call write1(&H66) Call write1(&H77) Call write1(&H88) Call write1(&H99) Call write1(&HAA) Call write1(&HBB) Call write1(&HCC) Call write1(&HDD) Call write1(&HEE) Call write1(&HFF) address = &H2000 Call write1(&H12) Call write1(&H12) Call write1(&H12) Call write1(&H12) Call write1(&H12) 'jmp 2000 Call write1(&H7E) Call write1(&H20) Call write1(&H0) r8(0) = "18" r8(1) = "03" r16(0) = "E018" r16(1) = "D002" r16(2) = "E000" r16(3) = "E030" r16(4) = "2000" End Sub Sub cmd_reset_Click () Call form_load End Sub Sub Command1_Click () Dim prebyte, opcode As Long Dim pc As Long Dim ea As Long Dim s As String Dim upper, lower As Long Dim work8 As Long Dim data8 As Long Dim data16 As Long Dim indmode, indirect, ix As Long ReDim sacc(1), six(4) As String ReDim asm(768) As String Dim Msg, stmp As String Dim tmp, i As Long If command1.Caption = "running" Then Exit Sub command1.Caption = "running" sacc(0) = "a" sacc(1) = "b" six(0) = "x" six(1) = "y" six(2) = "u" six(3) = "d" six(4) = "pc" asm(&H0) = "neg (ea)" asm(&H1) = "-" asm(&H2) = "-" asm(&H3) = "not (ea)" asm(&H4) = "lsr (ea)" asm(&H5) = "-" asm(&H6) = "ror (ea)" asm(&H7) = "asr (ea)" asm(&H8) = "lsl (ea)" asm(&H9) = "rol (ea)" asm(&HA) = "dec (ea)" asm(&HB) = "-" asm(&HC) = "inc (ea)" asm(&HD) = "tst (ea)" asm(&HE) = "jmp (ea)" asm(&HF) = "clr (ea)" asm(&H10) = "PRE" asm(&H11) = "PRE" asm(&H12) = "nop" asm(&H13) = "sync" asm(&H14) = "-" asm(&H15) = "-" asm(&H16) = "lbra ea" asm(&H17) = "lbsr ea" asm(&H18) = "-" asm(&H19) = "daa" asm(&H1A) = "orcc immidiate" asm(&H1B) = "-" asm(&H1C) = "andcc immidiate" asm(&H1D) = "sex" asm(&H1E) = "exg" asm(&H1F) = "mov" asm(&H20) = "bra ea" asm(&H21) = "brn ea" asm(&H22) = "bhi ea" asm(&H23) = "bls ea" asm(&H24) = "bcc ea" asm(&H25) = "bcs ea" asm(&H26) = "bne ea" asm(&H27) = "beq ea" asm(&H28) = "bvc ea" asm(&H29) = "bvs ea" asm(&H2A) = "bpl ea" asm(&H2B) = "bmi ea" asm(&H2C) = "bge ea" asm(&H2D) = "blt ea" asm(&H2E) = "bgt ea" asm(&H2F) = "ble ea" asm(&H121) = "lbrn ea" asm(&H122) = "lbhi ea" asm(&H123) = "lbls ea" asm(&H124) = "lbcc ea" asm(&H125) = "lbcs ea" asm(&H126) = "lbne ea" asm(&H127) = "lbeq ea" asm(&H128) = "lbvc ea" asm(&H129) = "lbvs ea" asm(&H12A) = "lbpl ea" asm(&H12B) = "lbmi ea" asm(&H12C) = "lbge ea" asm(&H12D) = "lblt ea" asm(&H12E) = "lbgt ea" asm(&H12F) = "lble ea" asm(&H30) = "lea x,ea" asm(&H31) = "lea y,ea" asm(&H32) = "lea s,ea" asm(&H33) = "lea u,ea" asm(&H34) = "pshs 1byte" asm(&H35) = "puls 1byte" asm(&H36) = "pshu 1byte" asm(&H37) = "pulu 1byte" asm(&H38) = "-" asm(&H39) = "rts" asm(&H3A) = "abx" asm(&H3B) = "rti" asm(&H3C) = "cwai" asm(&H3D) = "mul" asm(&H3E) = "-" asm(&H3F) = "swi": asm(&H13F) = "swi2": asm(&H23F) = "swi3" asm(&H40) = "neg a" asm(&H41) = "-" asm(&H42) = "-" asm(&H43) = "not a" asm(&H44) = "lsr a" asm(&H45) = "-" asm(&H46) = "ror a" asm(&H47) = "asr a" asm(&H48) = "lsl a" asm(&H49) = "rol a" asm(&H4A) = "dec a" asm(&H4B) = "-" asm(&H4C) = "inc a" asm(&H4D) = "tst a" asm(&H4E) = "jmp a" asm(&H4F) = "clr a" asm(&H50) = "neg b" asm(&H51) = "-" asm(&H52) = "-" asm(&H53) = "not b" asm(&H54) = "lsr b" asm(&H55) = "-" asm(&H56) = "ror b" asm(&H57) = "asr b" asm(&H58) = "lsl b" asm(&H59) = "rol b" asm(&H5A) = "dec b" asm(&H5B) = "-" asm(&H5C) = "inc b" asm(&H5D) = "tst b" asm(&H5E) = "jmp b" asm(&H5F) = "clr b" asm(&H60) = "neg (ea)" asm(&H61) = "-" asm(&H62) = "-" asm(&H63) = "not (ea)" asm(&H64) = "lsr (ea)" asm(&H65) = "-" asm(&H66) = "ror (ea)" asm(&H67) = "asr (ea)" asm(&H68) = "lsl (ea)" asm(&H69) = "rol (ea)" asm(&H6A) = "dec (ea)" asm(&H6B) = "-" asm(&H6C) = "inc (ea)" asm(&H6D) = "tst (ea)" asm(&H6E) = "jmp (ea)" asm(&H6F) = "clr (ea)" asm(&H70) = "neg (ea)" asm(&H71) = "-" asm(&H72) = "-" asm(&H73) = "not (ea)" asm(&H74) = "lsr (ea)" asm(&H75) = "-" asm(&H76) = "ror (ea)" asm(&H77) = "asr (ea)" asm(&H78) = "lsl (ea)" asm(&H79) = "rol (ea)" asm(&H7A) = "dec (ea)" asm(&H7B) = "-" asm(&H7C) = "inc (ea)" asm(&H7D) = "tst (ea)" asm(&H7E) = "jmp (ea)" asm(&H7F) = "clr (ea)" asm(&H80) = "sub #data,a" asm(&H81) = "cmp #data,a" asm(&H82) = "sbc #data,a" asm(&H83) = "sub #data,d": asm(&H183) = "cmp #data,d": asm(&H283) = "cmp #data,u" asm(&H84) = "and #data,a" asm(&H85) = "bit #data,a" asm(&H86) = "mov #data,a" asm(&H87) = "-" asm(&H88) = "eor #data,a" asm(&H89) = "adc #data,a" asm(&H8A) = "or #data,a" asm(&H8B) = "add #data,a" asm(&H8C) = "cmp #data,x": asm(&H18C) = "cmp #data,y": asm(&H28C) = "cmp #data,s" asm(&H8D) = "bsr ea" asm(&H8E) = "mov #data,x": asm(&H18E) = "mov #data,y" asm(&H8F) = "-": asm(&H90) = "sub (ea),a" asm(&H91) = "cmp (ea),a" asm(&H92) = "sbc (ea),a" asm(&H93) = "sub (ea),d": asm(&H193) = "cmp (ea),d": asm(&H293) = "cmp (ea),u" asm(&H94) = "and (ea),a" asm(&H95) = "bit (ea),a" asm(&H96) = "mov (ea),a" asm(&H97) = "mov a,(ea)" asm(&H98) = "eor (ea),a" asm(&H99) = "adc (ea),a" asm(&H9A) = "or (ea),a" asm(&H9B) = "add (ea),a" asm(&H9C) = "cmp (ea),x": asm(&H19C) = "cmp (ea),y": asm(&H29C) = "cmp (ea),s" asm(&H9D) = "jsr ea" asm(&H9E) = "mov (ea),x": asm(&H19E) = "mov (ea),y" asm(&H9F) = "mov x,(ea)": asm(&H19F) = "mov y,(ea)" asm(&HA0) = "sub (ea),a" asm(&HA1) = "cmp (ea),a" asm(&HA2) = "sbc (ea),a" asm(&HA3) = "sub (ea),d": asm(&H1A3) = "cmp (ea),d": asm(&H2A3) = "cmp (ea),u" asm(&HA4) = "and (ea),a" asm(&HA5) = "bit (ea),a" asm(&HA6) = "mov (ea),a" asm(&HA7) = "mov a,(ea)" asm(&HA8) = "eor (ea),a" asm(&HA9) = "adc (ea),a" asm(&HAA) = "or (ea),a" asm(&HAB) = "add (ea),a" asm(&HAC) = "cmp (ea),x": asm(&H1AC) = "cmp (ea),y": asm(&H2AC) = "cmp (ea),s" asm(&HAD) = "jsr ea" asm(&HAE) = "mov (ea),x": asm(&H1AE) = "mov (ea),y" asm(&HAF) = "mov x,(ea)": asm(&H1AF) = "mov y,(ea)" asm(&HB0) = "sub (ea),a" asm(&HB1) = "cmp (ea),a" asm(&HB2) = "sbc (ea),a" asm(&HB3) = "sub (ea),d": asm(&H1B3) = "cmp (ea),d": asm(&H2B3) = "cmp (ea),u" asm(&HB4) = "and (ea),a" asm(&HB5) = "bit (ea),a" asm(&HB6) = "mov (ea),a" asm(&HB7) = "mov a,(ea)" asm(&HB8) = "eor (ea),a" asm(&HB9) = "adc (ea),a" asm(&HBA) = "or (ea),a" asm(&HBB) = "add (ea),a" asm(&HBC) = "cmp (ea),x": asm(&H1BC) = "cmp (ea),y": asm(&H2BC) = "cmp (ea),s" asm(&HBD) = "jsr ea" asm(&HBE) = "mov (ea),x": asm(&H1BE) = "mov (ea),y" asm(&HBF) = "mov x,(ea)": asm(&H1BF) = "mov y,(ea)" asm(&HC0) = "sub #data,b" asm(&HC1) = "cmp #data,b" asm(&HC2) = "sbc #data,b" asm(&HC3) = "add #data,d" asm(&HC4) = "and #data,b" asm(&HC5) = "bit #data,b" asm(&HC6) = "mov #data,b" asm(&HC7) = "-" asm(&HC8) = "eor #data,b" asm(&HC9) = "adc #data,b" asm(&HCA) = "or #data,b" asm(&HCB) = "add #data,b" asm(&HCC) = "mov #data,d" asm(&HCD) = "-" asm(&HCE) = "mov #data,u": asm(&H1CE) = "mov #data,s" asm(&HCF) = "-" asm(&HD0) = "sub (ea),b" asm(&HD1) = "cmp (ea),b" asm(&HD2) = "sbc (ea),b" asm(&HD3) = "add (ea),d" asm(&HD4) = "and (ea),b" asm(&HD5) = "bit (ea),b" asm(&HD6) = "mov (ea),b" asm(&HD7) = "mov b,(ea)" asm(&HD8) = "eor (ea),b" asm(&HD9) = "adc (ea),b" asm(&HDA) = "or (ea),b" asm(&HDB) = "add (ea),b" asm(&HDC) = "mov (ea),d" asm(&HDD) = "mov d,(ea)" asm(&HDE) = "mov (ea),u": asm(&H1DE) = "mov (ea),s" asm(&HDF) = "mov u,(ea)": asm(&H1DF) = "mov s,(ea)" asm(&HE0) = "sub (ea),b" asm(&HE1) = "cmp (ea),b" asm(&HE2) = "sbc (ea),b" asm(&HE3) = "add (ea),d" asm(&HE4) = "and (ea),b" asm(&HE5) = "bit (ea),b" asm(&HE6) = "mov (ea),b" asm(&HE7) = "mov b,(ea)" asm(&HE8) = "eor (ea),b" asm(&HE9) = "adc (ea),b" asm(&HEA) = "or (ea),b" asm(&HEB) = "add (ea),b" asm(&HEC) = "mov (ea),d" asm(&HED) = "mov d,(ea)" asm(&HEE) = "mov (ea),u": asm(&H1EE) = "mov (ea),s" asm(&HEF) = "mov u,(ea)": asm(&H1EF) = "mov s,(ea)" asm(&HF0) = "sub (ea),b" asm(&HF1) = "cmp (ea),b" asm(&HF2) = "sbc (ea),b" asm(&HF3) = "add (ea),d" asm(&HF4) = "and (ea),b" asm(&HF5) = "bit (ea),b" asm(&HF6) = "mov (ea),b" asm(&HF7) = "mov b,(ea)" asm(&HF8) = "eor (ea),b" asm(&HF9) = "adc (ea),b" asm(&HFA) = "or (ea),b" asm(&HFB) = "add (ea),b" asm(&HFC) = "mov (ea),d" asm(&HFD) = "mov d,(ea)" asm(&HFE) = "mov (ea),u": asm(&H1FE) = "mov (ea),s" asm(&HFF) = "mov u,(ea)": asm(&H1FF) = "mov s,(ea)" ''' Fetch list2.Clear fetch: list2.AddItem "Fetch" prebyte = 0 opcode = memPCP() If opcode = &H10 Or opcode = &H11 Then prebyte = opcode - 15 opcode = memPCP() Else list2.AddItem " " End If list2.AddItem asm(256 * prebyte + opcode) ''' Find EA list2.AddItem " " ea = -1 ''' -1 means inherent ''' -2 means immidiate upper = opcode \ 16 lower = opcode Mod 16 If opcode = &H16 Or opcode = &H17 Or opcode = &H8D Or upper = 2 Then If prebyte = 0 And upper = 2 Then list2.AddItem "{ea mode = relative 8-bit}" data8 = memPCP() pc = intFFFF(r16(4) & "") If data8 < 128 Then ea = pc + data8 Else ea = pc + data8 - 256 End If list2.AddItem " ea = " & hexFFFF(ea + 0) Else list2.AddItem "{ea mode = relative 16-bit}" data8 = memPCP() data16 = memPCP() pc = intFFFF(r16(4) & "") data16 = data8 * 256 + data16 ea = pc + data16 If ea > 65536 Then ea = ea - 65536 End If list2.AddItem " ea = " & hexFFFF(ea + 0) End If ElseIf upper = 8 Or upper = 12 Then If lower = 3 Or lower >= 12 Then list2.AddItem "{data mode = immidiate 16-bit}" data8 = memPCP() data16 = memPCP() data16 = data8 * 256 + data16 list2.AddItem " data = " & hexFFFF(data16 + 0) Else list2.AddItem "{data mode = immidiate 8-bit}" data8 = memPCP() list2.AddItem " data = " & hexFF(data8 + 0) End If ElseIf upper = 0 Or upper = 9 Or upper = 13 Then list2.AddItem "{ea mode = absolute short}" ea = memPCP() list2.AddItem " ea = " & hexFFFF(ea + 0) ElseIf upper = 7 Or upper = 11 Or upper = 15 Then list2.AddItem "{ea mode = absolute long}" data8 = memPCP() data16 = memPCP() ea = data8 * 256 + data16 list2.AddItem " ea = " & hexFFFF(ea + 0) ElseIf upper = 6 Or upper = 10 Or upper = 14 Or (&H30 <= opcode And opcode < &H34) Then list2.AddItem "{ea mode = indirect}" indmode = memPCP() ix = (indmode And &H60) \ 32 If (indmode >= 128) And ((indmode And &HE) = &HC) Then ix = 4 indirect = (indmode And &H10) \ 16 If indirect = 0 Then Msg = "" Else Msg = "@" indmode = indmode And &H8F list2.AddItem " ix = " & six(ix) If indmode < 128 Then ea = intFFFF(r16(ix) & "") + indmode - 16 * indirect indirect = 0 list2.AddItem " ea = " & Msg & "(ix+d5)" ElseIf indmode = &H80 Then If indirect = 1 Then Stop ea = intFFFF(r16(ix) & "") r16(ix) = hexFFFF(ea + 1) list2.AddItem " ea = " & Msg & "(ix)+" ElseIf indmode = &H81 Then ea = intFFFF(r16(ix) & "") r16(ix) = hexFFFF(ea + 2) list2.AddItem " ea = " & Msg & "(ix)++" ElseIf indmode = &H82 Then If indirect = 1 Then Stop ea = intFFFF(r16(ix) & "") ea = ea - 1 r16(ix) = hexFFFF(ea) list2.AddItem " ea = " & Msg & "-(ix)" ElseIf indmode = &H83 Then ea = intFFFF(r16(ix) & "") ea = ea - 2 r16(ix) = hexFFFF(ea) list2.AddItem " ea = " & Msg & "--(ix)" ElseIf indmode = &H84 Then ea = intFFFF(r16(ix) & "") list2.AddItem " ea = " & Msg & "(ix)" ElseIf indmode = &H85 Then ea = intFFFF(r16(ix) & "") data8 = intFF(r8(1) & "") If data8 < 128 Then ea = ea + data8 Else ea = ea + data8 - 256 End If list2.AddItem " ea = " & Msg & "(ix+b)" ElseIf indmode = &H86 Then ea = intFFFF(r16(ix) & "") data8 = intFF(r8(0) & "") If data8 < 128 Then ea = ea + data8 Else ea = ea + data8 - 256 End If list2.AddItem " ea = " & Msg & "(ix+a)" ElseIf indmode = &H87 Then Stop ElseIf indmode = &H88 Or indmode = &H8C Then data8 = memPCP() ea = intFFFF(r16(ix) & "") + data8 If data8 >= 128 Then ea = ea - 256 list2.AddItem " ea = " & Msg & "(ix+d8)" ElseIf indmode = &H89 Or indmode = &H8D Then data8 = memPCP() data16 = memPCP() data16 = data8 * 256 + data16 ea = intFFFF(r16(ix) & "") + data16 While ea > 65535: ea = ea - 65536: Wend list2.AddItem " ea = " & Msg & "(ix+d16)" ElseIf indmode = &H8A Then Stop ElseIf indmode = &H8B Then ea = intFFFF(r16(ix) & "") data8 = intFF(r8(0) & "") data16 = intFF(r8(1) & "") data16 = data8 * 256 + data16 ea = ea + data16 While ea > 65535: ea = ea - 65536: Wend list2.AddItem " ea = " & Msg & "(ix+d)" ElseIf indmode = &H8E Then Stop ElseIf indmode = &H8F Then If indirect = 0 Then Stop data8 = memPCP() data16 = memPCP() ea = data8 * 256 + data16 list2.AddItem " ea = " & Msg & "d16" Else Stop End If list2.AddItem " = " & Msg & hexFFFF(ea + 0) If indirect = 1 Then data8 = memEA(ea) data16 = memEA(ea + 1) ea = data8 * 256 + data16 list2.AddItem " = " & hexFFFF(ea + 0) End If Else list2.AddItem "{inherent}" End If list2.AddItem " " list2.AddItem "Execute" Select Case (256 * prebyte + opcode) '''neg Case 0, &H60, &H70 data8 = memEA(ea) Call wri(ea, chgFlag8(256 - data8)) Case &H40, &H50 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8(256 - data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''not Case 3, &H63, &H73 data8 = memEA(ea) Call wri(ea, chgFlag8(255 - data8)) Case &H43, &H53 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8(255 - data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''lsr Case 4, &H64, &H74 data8 = memEA(ea) tmp = data8 And 1 Call wri(ea, chgFlag8(512 * tmp + data8 \ 2)) Case &H44, &H54 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) tmp = data8 And 1 r8(i) = hexFF(chgFlag8(512 * tmp + data8 \ 2)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''ror Case 6, &H66, &H76 data8 = memEA(ea) tmp = data8 And 1 Call wri(ea, chgFlag8(640 * tmp + data8 \ 2)) Case &H46, &H56 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) tmp = data8 And 1 r8(i) = hexFF(chgFlag8(640 * tmp + data8 \ 2)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''asr Case 7, &H67, &H77 data8 = memEA(ea) data8 = (data8 And 128) * 2 + data8 tmp = data8 And 1 Call wri(ea, chgFlag8(512 * tmp + data8 \ 2)) Case &H47, &H57 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) data8 = (data8 And 128) * 2 + data8 tmp = data8 And 1 r8(i) = hexFF(chgFlag8(512 * tmp + data8 \ 2)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''lsl Case 8, &H68, &H78 data8 = memEA(ea) Call wri(ea, chgFlag8(data8 * 2)) Case &H48, &H58 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8(data8 * 2)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''rol Case 9, &H69, &H79 data8 = memEA(ea) Call wri(ea, chgFlag8(data8 * 2 + Flag(0))) Case &H49, &H59 i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8(data8 * 2 + Flag(0))) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''dec Case &HA, &H6A, &H7A data8 = memEA(ea) Call wri(ea, chgFlag8NZ(data8 - 1)) Case &H4A, &H5A i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8NZ(data8 - 1)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''inc Case &HC, &H6C, &H7C data8 = memEA(ea) Call wri(ea, chgFlag8NZ(data8 + 1)) Case &H4C, &H5C i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8NZ(data8 + 1)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''tst Case &HD, &H6D, &H7D data8 = memEA(ea) Call wri(ea, chgFlag8NZ(data8)) Case &H4D, &H5D i = (opcode \ 16) And 1 data8 = intFF(r8(i) & ""): list2.AddItem sacc(i) & " : " & hexFF(data8 + 0) r8(i) = hexFF(chgFlag8NZ(data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''clr Case &HF, &H6F, &H7F tmp = chgFlag8(0) Call wri(ea, 0) Case &H4F, &H5F i = (opcode \ 16) And 1 tmp = chgFlag8(0) r8(i) = "00" list2.AddItem sacc(i) & " : 00 *** write ***" '''jmp Case &HE, &H6E, &H7E r16(4) = hexFFFF(ea) '''jsr Case &H9D, &HAD, &HBD list2.AddItem "(pshs pc)" tmp = intFFFF(r16(3) & "") Call wri(tmp - 2, intFF(Left$(r16(4), 2) & "")) Call wri(tmp - 1, intFF(Right$(r16(4), 2) & "")) r16(3) = hexFFFF(tmp + 65536 - 2) r16(4) = hexFFFF(ea) '''sub r8 Case &H80, &H90, &HA0, &HB0, &HC0, &HD0, &HE0, &HF0 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8(intFF(r8(i) & "") - data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''cmp r8 Case &H81, &H91, &HA1, &HB1, &HC1, &HD1, &HE1, &HF1 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If tmp = hexFF(chgFlag8(intFF(r8(i) & "") - data8)) '''sbc r8 Case &H82, &H92, &HA2, &HB2, &HC2, &HD2, &HE2, &HF2 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8(data8 = intFF(r8(i) & "") - data8 - Flag(0))) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''and r8 Case &H84, &H94, &HA4, &HB4, &HC4, &HD4, &HE4, &HF4 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8NZ(intFF(r8(i) & "") And data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''bit r8 Case &H85, &H95, &HA5, &HB5, &HC5, &HD5, &HE5, &HF5 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If tmp = hexFF(chgFlag8NZ(intFF(r8(i) & "") And data8)) '''mov(ld) r8 Case &H86, &H96, &HA6, &HB6, &HC6, &HD6, &HE6, &HF6 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8NZ(data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''mov(st) r8 Case &H97, &HA7, &HB7, &HD7, &HE7, &HF7 i = (opcode And &H40) \ &H40 Call wri(ea, chgFlag8NZ(intFF(r8(i) & ""))) '''eor r8 Case &H88, &H98, &HA8, &HB8, &HC8, &HD8, &HE8, &HF8 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8NZ(intFF(r8(i) & "") Xor data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''adc r8 Case &H89, &H99, &HA9, &HB9, &HC9, &HD9, &HE9, &HF9 i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8(data8 = intFF(r8(i) & "") + data8 + Flag(0))) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''or r8 Case &H8A, &H9A, &HAA, &HBA, &HCA, &HDA, &HEA, &HFA i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8NZ(intFF(r8(i) & "") Or data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''add r8 Case &H8B, &H9B, &HAB, &HBB, &HCB, &HDB, &HEB, &HFB i = (opcode And &H40) \ &H40 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) End If r8(i) = hexFF(chgFlag8(intFF(r8(i) & "") + data8)) list2.AddItem sacc(i) & " : " & r8(i) & " *** write ***" '''sub D Case &H83, &H93, &HA3, &HB3 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFF(r8(0) & "") * 256 + intFF(r8(1) & "") - data16)) r8(0) = Left$(stmp, 2) r8(1) = Right$(stmp, 2) list2.AddItem "d : " & stmp & " *** write ***" '''cmp D Case &H183, &H193, &H1A3, &H1B3 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFF(r8(0) & "") * 256 + intFF(r8(1) & "") - data16)) '''cmp U Case &H283, &H293, &H2A3, &H2B3 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFFFF(r16(2) & "") - data16)) '''cmp X Case &H8C, &H9C, &HAC, &HBC If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFFFF(r16(0) & "") - data16)) '''cmp Y Case &H18C, &H19C, &H1AC, &H1BC If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFFFF(r16(1) & "") - data16)) '''cmp S Case &H28C, &H29C, &H2AC, &H2BC If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFFFF(r16(3) & "") - data16)) '''add D Case &HC3, &HD3, &HE3, &HF3 If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16(intFF(r8(0) & "") * 256 + intFF(r8(1) & "") + data16)) r8(0) = Left$(stmp, 2) r8(1) = Right$(stmp, 2) list2.AddItem "d : " & stmp & " *** write ***" '''mov(ld) D Case &HCC, &HDC, &HEC, &HFC If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If stmp = hexFFFF(chgFlag16NZ(data16)) r8(0) = Left$(stmp, 2) r8(1) = Right$(stmp, 2) list2.AddItem "d : " & stmp & " *** write ***" '''mov(ld) X Case &H8E, &H9E, &HAE, &HBE If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If r16(0) = hexFFFF(chgFlag16NZ(data16)) list2.AddItem six(0) & " : " & r16(0) & " *** write ***" '''mov(ld) Y Case &H18E, &H19E, &H1AE, &H1BE If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If r16(1) = hexFFFF(chgFlag16NZ(data16)) list2.AddItem six(1) & " : " & r16(1) & " *** write ***" '''mov(ld) U Case &HCE, &HDE, &HEE, &HFE If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If r16(2) = hexFFFF(chgFlag16NZ(data16)) list2.AddItem six(2) & " : " & r16(2) & " *** write ***" '''mov(ld) S Case &H1CE, &H1DE, &H1EE, &H1FE If (opcode And &H30) <> &H0 Then data8 = memEA(ea) data16 = memEA(ea + 1) data16 = data8 * 256 + data16 End If r16(3) = hexFFFF(chgFlag16NZ(data16)) list2.AddItem six(3) & " : " & r16(3) & " *** write ***" '''mov(st) D Case &HDD, &HED, &HFD tmp = chgFlag16NZ(intFF(r8(0) & "") * 256 + intFF(r8(1) & "")) Call wri(ea, intFF(r8(0) & "")) Call wri(ea + 1, intFF(r8(1) & "")) '''mov(st) X Case &H9F, &HAF, &HBF tmp = chgFlag16NZ(intFFFF(r16(0) & "")) Call wri(ea, intFF(Left$(r16(0), 2) & "")) Call wri(ea + 1, intFF(Right$(r16(0), 2) & "")) '''mov(st) Y Case &H19F, &H1AF, &H1BF tmp = chgFlag16NZ(intFFFF(r16(1) & "")) Call wri(ea, intFF(Left$(r16(1), 2) & "")) Call wri(ea + 1, intFF(Right$(r16(1), 2) & "")) '''mov(st) U Case &HDF, &HEF, &HFF tmp = chgFlag16NZ(intFFFF(r16(2) & "")) Call wri(ea, intFF(Left$(r16(2), 2) & "")) Call wri(ea + 1, intFF(Right$(r16(2), 2) & "")) '''mov(st) S Case &H1DF, &H1EF, &H1FF tmp = chgFlag16NZ(intFFFF(r16(3) & "")) Call wri(ea, intFF(Left$(r16(3), 2) & "")) Call wri(ea + 1, intFF(Right$(r16(3), 2) & "")) '''(l)bsr Case &H8D, &H17 list2.AddItem "(pshs pc)" tmp = intFFFF(r16(3) & "") Call wri(tmp - 2, intFF(Left$(r16(4), 2) & "")) Call wri(tmp - 1, intFF(Right$(r16(4), 2) & "")) r16(3) = hexFFFF(tmp + 65536 - 2) list2.AddItem "branch" r16(4) = hexFFFF(ea) '''(l)brn Case &H21, &H121 list2.AddItem "no branch" '''(l)bra Case &H20, &H16 list2.AddItem "branch" r16(4) = hexFFFF(ea) '''(l)bhi Case &H22, &H122 If (Flag(0) = 0) And (Flag(2) = 0) Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)bls Case &H23, &H123 If (Flag(0) Xor Flag(2)) = 0 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)bcc Case &H24, &H124 If Flag(0) = 0 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)bcs Case &H25, &H125 If Flag(0) = 1 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)bne Case &H26, &H126 If Flag(2) = 0 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)beq Case &H27, &H127 If Flag(2) = 1 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)bpl Case &H2A, &H12A If Flag(3) = 0 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''(l)bmi Case &H2B, &H12B If Flag(3) = 1 Then list2.AddItem "branch" r16(4) = hexFFFF(ea) Else list2.AddItem "no branch" End If '''nop Case &H12 list2.AddItem "no operation" '''orcc Case &H1A data8 = memPCP() If (data8 And 1) > 0 Then list2.AddItem "set c-Flag" Flag(0) = 1 End If If (data8 And 2) > 0 Then list2.AddItem "set v-Flag" Flag(1) = 1 End If If (data8 And 4) > 0 Then list2.AddItem "set z-Flag" Flag(2) = 1 End If If (data8 And 8) > 0 Then list2.AddItem "set n-Flag" Flag(3) = 1 End If '''andcc Case &H1C data8 = memPCP() If (data8 And 1) = 0 Then list2.AddItem "clr c-Flag" Flag(0) = 0 End If If (data8 And 2) = 0 Then list2.AddItem "clr v-Flag" Flag(1) = 0 End If If (data8 And 4) = 0 Then list2.AddItem "clr z-Flag" Flag(2) = 0 End If If (data8 And 8) = 0 Then list2.AddItem "clr n-Flag" Flag(3) = 0 End If '''sex Case &H1D If intFF(r8(1) & "") > 127 Then r8(0) = "FF" list2.AddItem "a : FF *** write ***" Flag(2) = 0 Flag(3) = 1 Else r8(0) = "00" list2.AddItem "a : 00 *** write ***" If r8(1) = "00" Then Flag(2) = 1 Else Flag(2) = 0 End If Flag(3) = 0 End If Flag(1) = 0 '''lea Case &H30, &H31 ix = opcode - &H30 r16(ix) = hexFFFF(ea + 0) list2.AddItem six(ix) & " : " & r16(ix) & " *** write ***" If ea = 0 Then Flag(2) = 1 Else Flag(2) = 0 Case &H32, &H33 ix = &H35 - opcode r16(ix) = hexFFFF(ea + 0) list2.AddItem six(ix) & " : " & r16(ix) & " *** write ***" '''psh Case &H34, &H36 If opcode = &H34 Then ix = 3 Else ix = 2 ea = intFFFF(r16(ix) & "") work8 = memPCP() If (work8 And 128) > 0 Then list2.AddItem "psh pc" ea = ea - 1: Call wri(ea, intFF(Right$(r16(4), 2) & "")) ea = ea - 1: Call wri(ea, intFF(Left$(r16(4), 2) & "")) End If If (work8 And 64) > 0 Then If ix = 3 Then list2.AddItem "psh u" Else list2.AddItem "psh s" End If ea = ea - 1: Call wri(ea, intFF(Right$(r16(5 - ix), 2) & "")) ea = ea - 1: Call wri(ea, intFF(Left$(r16(5 - ix), 2) & "")) End If If (work8 And 32) > 0 Then list2.AddItem "psh y" ea = ea - 1: Call wri(ea, intFF(Right$(r16(1), 2) & "")) ea = ea - 1: Call wri(ea, intFF(Left$(r16(1), 2) & "")) End If If (work8 And 16) > 0 Then list2.AddItem "psh x" ea = ea - 1: Call wri(ea, intFF(Right$(r16(0), 2) & "")) ea = ea - 1: Call wri(ea, intFF(Left$(r16(0), 2) & "")) End If If (work8 And 8) > 0 Then list2.AddItem "psh dpr" ea = ea - 1: Call wri(ea, 0) End If If (work8 And 4) > 0 Then list2.AddItem "psh b" ea = ea - 1: Call wri(ea, intFF(r8(1) & "")) End If If (work8 And 2) > 0 Then list2.AddItem "psh a" ea = ea - 1: Call wri(ea, intFF(r8(0) & "")) End If If (work8 And 1) > 0 Then list2.AddItem "psh cc" tmp = 8 * Flag(3) + 4 * Flag(2) + 2 * Flag(1) + Flag(0) ea = ea - 1: Call wri(ea, tmp + 0) End If r16(ix) = hexFFFF(ea + 0) list2.AddItem six(ix) & " : " & r16(ix) & " *** write ***" '''puls, pulu Case &H35, &H37 If opcode = &H35 Then ix = 3 Else ix = 2 ea = intFFFF(r16(ix) & "") work8 = memPCP() If (work8 And 1) > 0 Then list2.AddItem "pul cc" tmp = memEA(ea): ea = ea + 1 Flag(3) = (tmp And 8) \ 8 Flag(2) = (tmp And 4) \ 4 Flag(1) = (tmp And 2) \ 2 Flag(0) = (tmp And 1) \ 1 End If If (work8 And 2) > 0 Then list2.AddItem "pul a" data8 = memEA(ea): ea = ea + 1 r8(0) = hexFF(data8) End If If (work8 And 4) > 0 Then list2.AddItem "pul b" data8 = memEA(ea): ea = ea + 1 r8(1) = hexFF(data8) End If If (work8 And 8) > 0 Then list2.AddItem "pul dpr" tmp = memEA(ea): ea = ea + 1 If tmp <> 0 Then Stop End If If (work8 And 16) > 0 Then list2.AddItem "pul x" data8 = memEA(ea): ea = ea + 1 data16 = memEA(ea): ea = ea + 1 r16(0) = hexFFFF(data8 * 256 + data16) End If If (work8 And 32) > 0 Then list2.AddItem "pul y" data8 = memEA(ea): ea = ea + 1 data16 = memEA(ea): ea = ea + 1 r16(1) = hexFFFF(data8 * 256 + data16) End If If (work8 And 64) > 0 Then If ix = 3 Then list2.AddItem "pul u" Else list2.AddItem "pul s" End If data8 = memEA(ea): ea = ea + 1 data16 = memEA(ea): ea = ea + 1 r16(5 - ix) = hexFFFF(data8 * 256 + data16) End If If (work8 And 128) > 0 Then list2.AddItem "pul pc" data8 = memEA(ea): ea = ea + 1 data16 = memEA(ea): ea = ea + 1 r16(4) = hexFFFF(data8 * 256 + data16) End If r16(ix) = hexFFFF(ea + 0) list2.AddItem six(ix) & " : " & r16(ix) & " *** write ***" '''rts Case &H39 ea = intFFFF(r16(3) & "") data8 = memEA(ea) data16 = memEA(ea + 1) r16(3) = hexFFFF(ea + 2) r16(4) = hexFFFF(data8 * 256 + data16) ''' sync, daa, abx, rti, mul, swi (1-byte) Case &H13, &H19, &H3A, &H3B, &H3D, &H3F list2.AddItem "未実装の命令です。" MsgBox "未実装の命令です", 0, "!" option1.Value = True ''' bvc, bvs, bge, blt, bgt, ble, swi2, swi3 (2-byte) Case &H28, &H29, &H2C, &H2D, &H2E, &H2F, &H13F, &H23F list2.AddItem "未実装の 2 byte命令です。" MsgBox "未実装の 2 byte命令です", 0, "!" option1.Value = True ''' lbvc, lbvs, lbge, lblt, lbgt, lble (4-byte) Case &H128, &H129, &H12C, &H12D, &H12E, &H12F tmp = memPCP() list2.AddItem "未実装の 4 byte命令です。" MsgBox "未実装の 4 byte命令です", 0, "!" option1.Value = True ''' exg, mov, cwai (2-byte) Case &H1E, &H1F, &H3C tmp = memPCP() list2.AddItem "未実装の 2 byte命令です。" MsgBox "未実装の 2 byte命令です", 0, "!" option1.Value = True '''else Case Else list2.AddItem "未定義 or 未実装の命令です。" Do stmp = InputBox$("未定義 or 未実装の命令です。 次に命令を開始するアドレス(16進数4桁)を指定して下さい。", "!", "") list2.AddItem stmp Loop Until Len(stmp) = 4 option1.Value = True End Select If (option1.Value = False) And (list2.ListCount > 2000) Then list2.AddItem " ", 0 list2.AddItem "-----------------------------------", 0 list2.AddItem " ", 0 list2.AddItem " ", 0 list2.AddItem "--- Please 'Excecute' again.", 0 list2.AddItem "--- No space to record.", 0 list2.AddItem "--- Too much instructions.", 0 list2.AddItem "--- Pause", 0 Else If option1.Value = False Then list2.AddItem " " list2.AddItem "------------------------------" GoTo fetch End If option1.Value = True End If command1.Caption = "Execute" End Sub Sub Command2_Click (Index As Integer) Dim a As Long Dim temp a = intFFFF(r16(Index) & "") temp = mem(a) End Sub Sub form_load () Dim i As Integer option1.Value = True For i = 0 To 1 r8(i) = "00" Next i r16(0) = "0000" r16(1) = "0000" r16(2) = "0000" r16(3) = "FFC0" r16(4) = "2000" List1.Clear For i = &H0 To &HFF List1.AddItem Right$(Hex$(65536 + i), 4) & " : 00" Next i For i = &H2000 To &H207F List1.AddItem Right$(Hex$(65536 + i), 4) & " : 12" Next i For i = &H8000 To &H803F List1.AddItem Right$(Hex$(65536 + i), 4) & " : 12" Next i For i = &HD000 To &HD03F List1.AddItem Right$(Hex$(65536 + i), 4) & " : 00" Next i For i = &HE000 To &HE03F List1.AddItem Right$(Hex$(65536 + i), 4) & " : 00" Next i For i = &HF000 To &HF03F List1.AddItem Right$(Hex$(65536 + i), 4) & " : 00" Next i For i = &HFF80 To &HFFFF List1.AddItem Right$(Hex$(65536 + i), 4) & " : 00" Next i list2.Clear list2.AddItem "MC6809 CPU のエミュレータ" list2.AddItem "・一部の機能は省略されています" list2.AddItem " :v-Flag(v-flagを使うbranchも)" list2.AddItem " :割り込み関係(swi, i-Flag等)" list2.AddItem " :dpr レジスタ関係(DPR=0 固定)" list2.AddItem " :daa 命令" list2.AddItem " :mul 命令" list2.AddItem " :exg reg,reg 命令" list2.AddItem " :mov reg,reg 命令" list2.AddItem "・数値はすべて16進表記です" list2.AddItem " (a はレジスタ,Aは数値です)" list2.AddItem " " list2.AddItem "- - - - - - - - - - - - - - -" list2.AddItem "・プログラム開発者" list2.AddItem " 望月孔二" list2.AddItem " 沼津工業高等専門学校 " list2.AddItem " 電気工学科" list2.AddItem " Tel 0559-26-5815" list2.AddItem " motizuki@ee.numazu-ct.ac.jp" list2.AddItem " " list2.AddItem "・本プログラムはコピー自由です。" list2.AddItem " " End Sub Function hexFF (i As Long) hexFF = Right$(Hex$(i + 256), 2) End Function Function hexFFFF (i As Long) hexFFFF = Right$(Hex$(i + 65536), 4) End Function Function intFF (ss As String) Dim i As Long i = Val("&h" & Left$(ss, 2)) If i < 0 Then i = i + 256 intFF = i End Function Function intFFFF (ssss As String) Dim i As Long i = Val("&h" & Left$(ssss, 4)) If i < 0 Then i = i + 65536 intFFFF = i End Function Sub List1_DblClick () Dim ans$ Do ans$ = InputBox("Address = " & Left$(List1.List(List1.ListIndex), 4), "Memory chagne", Right$(List1.List(List1.ListIndex), 2)) If ans$ = "" Then Exit Do List1.List(List1.ListIndex) = Left$(List1.List(List1.ListIndex), 7) & hexFF(intFF(ans$)) List1.ListIndex = List1.ListIndex + 1 Loop End Sub Function mem (addr As Long) Dim i, j, k As Integer i = List1.ListCount i = (i + 1) \ 2 j = i While i > 1 i = (i + 1) \ 2 If intFFFF(Left$(List1.List(j), 4)) < addr Then j = j + i Else j = j - i End If Wend i = 0 Do If intFFFF(Left$(List1.List(j), 4)) = addr Then Exit Do ElseIf intFFFF(Left$(List1.List(j), 4)) < addr Then j = j + i Else j = j - i End If i = i + 1 If i > 10 Then list2.AddItem "重大なエラー:" list2.AddItem "割り当てられていないメモ" list2.AddItem "リを参照しようとしました。" list2.AddItem "無効なデータを帰します。" MsgBox "割り当てられていないメモリを参照しました。", , "!" option1.Value = True Exit Do End If Loop List1.ListIndex = j mem = intFF(Right$(List1.List(j), 2)) End Function Function memEA (addr As Long) Dim dd As Long dd = mem(addr) list2.AddItem hexFFFF(addr) & " : " & hexFF(dd + 0) memEA = dd End Function Function memPCP () Dim dd, pc As Long pc = Val("&h" & r16(4)) dd = mem(pc) list2.AddItem hexFFFF(pc) & " : " & hexFF(dd + 0) & " pc=pc+1" pc = pc + 1 r16(4) = hexFFFF(pc) memPCP = dd End Function Sub r16_KeyPress (Index As Integer, keyAscii As Integer) If keyAscii = 13 Then r16(Index) = hexFFFF(intFFFF(r16(Index) & " ")) End If End Sub Sub r16_LostFocus (Index As Integer) r16(Index) = hexFFFF(intFFFF(r16(Index) & " ")) End Sub Sub r8_LostFocus (Index As Integer) r8(Index) = hexFF(intFF(r8(Index) & " ")) End Sub Sub wri (addr As Long, nn As Long) Dim i, j, k As Long Dim sa, sn As String sa = hexFFFF(addr) sn = hexFF(nn) i = List1.ListCount i = (i + 1) \ 2 j = i While i > 1 i = (i + 1) \ 2 If Left$(List1.List(j), 4) < sa Then j = j + i Else j = j - i Wend i = 0 Do If Left$(List1.List(j), 4) = sa Then Exit Do If Left$(List1.List(j), 4) < sa Then j = j + i Else j = j - i i = i + 1 If i > 10 Then list2.AddItem "重大なエラー:" list2.AddItem "割り当てられていないメモ" list2.AddItem "リを参照しようとしました。" list2.AddItem "メモリに書き込みません。" MsgBox "割り当てられていないメモリを参照しました。", , "!" option1.Value = True Exit Do End If Loop List1.ListIndex = j List1.List(j) = Left$(List1.List(j), 7) & sn list2.AddItem List1.List(j) & " *** write ***" End Sub Sub write1 (i As Long) Call wri(address, i) address = address + 1 End Sub