|
|
1.1 ! root 1: #define __Dpoo 0x24 ! 2: .align 4 ! 3: jtab: ! 4: .long bad_jmp ! 5: .long bad_jmp ! 6: .long bad_jmp ! 7: .long bad_jmp ! 8: .long bad_jmp ! 9: .long bad_jmp ! 10: .long bad_jmp ! 11: .long bad_jmp ! 12: .long bad_jmp ! 13: .long bad_jmp ! 14: .long bad_jmp ! 15: .long bad_jmp ! 16: .long bad_jmp ! 17: .long bad_jmp ! 18: .long __l1c ! 19: jumptable: ! 20: cmpl $0x1c,%eax ! 21: jg bad_jmp2 ! 22: shrl $1,%eax ! 23: jmp *jtab(,%eax,4) ! 24: .section .rodata ! 25: bad_jmp_str: .string "Error. Bad jump target: $%x at line %d.\n" ! 26: .text ! 27: bad_jmp: ! 28: shll $1,%eax ! 29: bad_jmp2: ! 30: pushl line_no ! 31: pushl %eax ! 32: pushl $bad_jmp_str ! 33: call printf ! 34: addl $8,%esp ! 35: call abort ! 36: #define MEM_SIZE 0x110000 ! 37: #define PROC_STATE 64 ! 38: #define MemBase STData+PROC_STATE ! 39: ! 40: .data ! 41: .comm STData,MEM_SIZE+PROC_STATE ! 42: .comm X,4 ! 43: .comm N,4 ! 44: .comm Z,4 ! 45: .comm V,4 ! 46: .comm C,4 ! 47: .comm bX,4 ! 48: .comm bN,4 ! 49: .comm bZ,4 ! 50: .comm bV,4 ! 51: .comm bC,4 ! 52: .comm rdest,4 ! 53: .comm exceptions_pending_mask,4 ! 54: .comm exceptions_pending_nums,32 ! 55: .comm exception_handlers,4*32 ! 56: .comm line_no,4 ! 57: debugstr: .string "$%x $%x $%x $%x $%x $%x $%x $%x*$%x $%x $%x $%x $%x $%x $%x $%x:%d\n" ! 58: .global STRam ! 59: STRam: .long STData+PROC_STATE ! 60: .section .rodata ! 61: bin_filename: .string "test.s.bin" ! 62: open_mode: .string "r" ! 63: ! 64: dreg_fmt: .string "D%d = $%08x " ! 65: areg_fmt: .string "A%d = $%08x\n" ! 66: cr: .string "\n" ! 67: cc_names: .string "XNZVC" ! 68: hex_fmt: .string "$%02x " ! 69: illegal_fmt: .string "Illegal instruction at line %d.\n" ! 70: .text ! 71: .globl SetZFlag ! 72: SetZFlag: ! 73: movl 4(%esp),%eax ! 74: movb %al,Z ! 75: ret ! 76: .globl GetXFlag ! 77: GetXFlag: ! 78: movl X,%eax ! 79: ret ! 80: .globl GetZFlag ! 81: GetZFlag: ! 82: movl Z,%eax ! 83: ret ! 84: .globl GetCFlag ! 85: GetCFlag: ! 86: movl C,%eax ! 87: ret ! 88: .globl GetNFlag ! 89: GetNFlag: ! 90: movl N,%eax ! 91: ret ! 92: .globl GetVFlag ! 93: GetVFlag: ! 94: movl V,%eax ! 95: ret ! 96: .globl DumpRegs ! 97: DumpRegs: ! 98: pushl %ebp ! 99: pushl %ebx ! 100: pushl %ecx ! 101: pushl %esi ! 102: movl $STData,%ebx ! 103: xorl %eax,%eax ! 104: 1: pushl %eax ! 105: pushl (%ebx,%eax,4) ! 106: pushl %eax ! 107: pushl $dreg_fmt ! 108: call printf ! 109: addl $12,%esp ! 110: movl (%esp),%eax ! 111: pushl 8*4(%ebx,%eax,4) ! 112: pushl %eax ! 113: pushl $areg_fmt ! 114: call printf ! 115: addl $12,%esp ! 116: popl %eax ! 117: inc %eax ! 118: cmpl $8,%eax ! 119: jl 1b ! 120: movb X,%al ! 121: movl $0,%ecx ! 122: call print_scat ! 123: movb N,%al ! 124: movl $1,%ecx ! 125: call print_scat ! 126: movb Z,%al ! 127: movl $2,%ecx ! 128: call print_scat ! 129: movb V,%al ! 130: movl $3,%ecx ! 131: call print_scat ! 132: movb C,%al ! 133: movl $4,%ecx ! 134: call print_scat ! 135: pushl $cr ! 136: call printf ! 137: addl $4,%esp ! 138: movl $STData+PROC_STATE,%esi ! 139: movl $MEM_SIZE,%ebx ! 140: 1: movzbl (%esi),%eax ! 141: pushl %eax ! 142: pushl $hex_fmt ! 143: call printf ! 144: addl $8,%esp ! 145: inc %esi ! 146: dec %ebx ! 147: testl $15,%ebx ! 148: jz 3f ! 149: 2: testl %ebx,%ebx ! 150: jnz 1b ! 151: popl %esi ! 152: popl %ecx ! 153: popl %ebx ! 154: popl %ebp ! 155: ret ! 156: 3: pushl $cr ! 157: call printf ! 158: addl $4,%esp ! 159: jmp 2b ! 160: print_scat: ! 161: xorl %ebx,%ebx ! 162: cmpb %al,%bl ! 163: jz 1f ! 164: movb cc_names(%ecx),%al ! 165: pushl %eax ! 166: call putchar ! 167: addl $4,%esp ! 168: 1: ret ! 169: .globl FlagException ! 170: FlagException: ! 171: movl 4(%esp),%eax ! 172: btsl %eax,exceptions_pending_mask ! 173: incb exceptions_pending_nums(%eax) ! 174: ret ! 175: .globl MemReadByte ! 176: MemReadByte: ! 177: movl 4(%esp),%eax ! 178: movsbl STData+PROC_STATE(%eax),%eax ! 179: ret ! 180: .globl MemReadWord ! 181: MemReadWord: ! 182: movl 4(%esp),%eax ! 183: movswl STData+PROC_STATE(%eax),%eax ! 184: xchg %al,%ah ! 185: ret ! 186: .globl MemReadLong ! 187: MemReadLong: ! 188: movl 4(%esp),%eax ! 189: movl STData+PROC_STATE(%eax),%eax ! 190: bswap %eax ! 191: ret ! 192: .globl MemWriteByte ! 193: MemWriteByte: ! 194: movl 4(%esp),%eax ! 195: movl 8(%esp),%edx ! 196: movb %dl,STData+PROC_STATE(%eax) ! 197: ret ! 198: .globl MemWriteWord ! 199: MemWriteWord: ! 200: movl 8(%esp),%edx ! 201: movl 4(%esp),%eax ! 202: xchg %dl,%dh ! 203: movw %dx,STData+PROC_STATE(%eax) ! 204: ret ! 205: .globl MemWriteLong ! 206: MemWriteLong: ! 207: movl 8(%esp),%edx ! 208: movl 4(%esp),%eax ! 209: bswap %edx ! 210: movl %edx,STData+PROC_STATE(%eax) ! 211: ret ! 212: .globl GetReg ! 213: GetReg: ! 214: movl 4(%esp),%eax ! 215: movl STData(,%eax,4),%eax ! 216: ret ! 217: .globl SetReg ! 218: SetReg: ! 219: movl 4(%esp),%eax ! 220: movl 8(%esp),%edx ! 221: movl %edx,STData(,%eax,4) ! 222: ret ! 223: .globl Init680x0 ! 224: Init680x0: ! 225: pushl %esi ! 226: pushl %ebx ! 227: pushl $open_mode ! 228: pushl $bin_filename ! 229: call fopen ! 230: movl %eax, %ebx ! 231: popl %eax ! 232: xorl %eax, %eax ! 233: testl %ebx, %ebx ! 234: popl %edx ! 235: je 1f ! 236: pushl $2 ! 237: pushl $0 ! 238: pushl %ebx ! 239: call fseek ! 240: pushl %ebx ! 241: call ftell ! 242: pushl $0 ! 243: movl %eax, %esi ! 244: pushl $0 ! 245: pushl %ebx ! 246: call fseek ! 247: addl $28, %esp ! 248: xorl %eax, %eax ! 249: cmpl $MEM_SIZE, %esi ! 250: jge 1f ! 251: pushl %ebx ! 252: pushl %esi ! 253: pushl $1 ! 254: pushl $STData+PROC_STATE ! 255: call fread ! 256: pushl %ebx ! 257: call fclose ! 258: movl $1, %eax ! 259: addl $20, %esp ! 260: 1: ! 261: popl %ebx ! 262: popl %esi ! 263: ret ! 264: .globl Start680x0 ! 265: Start680x0: ! 266: pushl %ebp ! 267: pushl %esi ! 268: pushl %edi ! 269: pushl %edx ! 270: pushl %ecx ! 271: pushl %ebx ! 272: movl $STData+PROC_STATE,%ebp ! 273: ! 274: __l1c: ! 275: movl $1, line_no ! 276: movl $0,%eax ! 277: ! 278: /* 0x1e */ ! 279: movl $2, line_no ! 280: movw __Dpoo(%ebp),%bx ! 281: rorw $8,%bx ! 282: addw %bx,%ax ! 283: sets N ! 284: seto V ! 285: setc C ! 286: setz Z ! 287: setc X ! 288: ! 289: movl %eax,-64(%ebp) ! 290: popl %ebx ! 291: popl %ecx ! 292: popl %edx ! 293: popl %edi ! 294: popl %esi ! 295: popl %ebp ! 296: ret ! 297: handle_exception: ! 298: movl rdest,%ebx ! 299: testl %ebx,%ebx ! 300: jnz jumptable ! 301: movl %eax,rdest ! 302: movl exceptions_pending_mask,%edx ! 303: xorl %ecx,%ecx ! 304: 1: ! 305: btl %ecx,%edx ! 306: jnc 2f ! 307: movl $exception_handlers,%ebx ! 308: movb exceptions_pending_nums(%ecx),%al ! 309: decb %al ! 310: jnz 3f ! 311: btrl %ecx,exceptions_pending_mask ! 312: 3: movb %al,exceptions_pending_nums(%ecx) ! 313: movl (%ebx,%ecx,4),%eax ! 314: movb X,%bh ! 315: movb N,%bl ! 316: movb Z,%ch ! 317: movb V,%cl ! 318: movb C,%dh ! 319: movb %bh,bX ! 320: movb %bl,bN ! 321: movb %ch,bZ ! 322: movb %cl,bV ! 323: movb %dh,bC ! 324: jmp jumptable ! 325: 2: ! 326: inc %ecx ! 327: cmpl $32,%ecx ! 328: jl 1b ! 329: movl rdest,%eax ! 330: movl $0,rdest ! 331: jmp jumptable
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.