page@swan.ulowell.edu (Bob Page) (03/08/89)
Submitted-by: jlydiatt@jlami.wimsey.bc.ca (Jeff Lydiatt) Posting-number: Volume 89, Issue 34 Archive-name: applications/simcpm23.3 [I forgot to mention that simcpm1.asm1 and simcpm1.asm2 must be combined to form simcpm1.asm -- similar arrangement with simcpm2.asm1 and simcpm2.asm2; they were too big to fit into a shar. ..Bob] # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # makefile # simcpm2.asm1 # This archive created: Tue Mar 7 22:34:52 1989 cat << \SHAR_EOF > makefile simcpm : simcpm1.o simcpm2.o blink simcpm1.o simcpm2.o to simcpm lib dh0:lib/amiga.lib verbose simcpm1.o : simcpm1.asm options.i ecpmdefs.i a68k simcpm1.asm simcpm2.o : simcpm2.asm options.i ecpmdefs.i a68k simcpm2.asm SHAR_EOF cat << \SHAR_EOF > simcpm2.asm1 ************************************************************************* * * * Z-80 Emulator for MC68000 * * * * This file contains the target processor (Z-80) * * emulation routines. * * * ************************************************************************* * Last revised January 9, 1989. xdef optabl,flags,mloop,mloopt,tracesad,traceead,traceflg,start2 xref illegl,service,dump,inp,outp,movear include "options.i" include "ecpmdefs.i" page ************************************************************************* * * * Macros used by opcode simulation routines * * * * These generate a lot of repetitive code sequences, * * but it's faster than doing subroutine calls. * * * ************************************************************************* jrd0 macro ;Jump relative (add D0 to program counter). ext.w d0 add.w d0,pseudopc jmp (return) endm setflag macro ;Set Z-80 flags from 68000 flags. ifeq x680x0 ;68000 only move sr,d1 endc ifne x680x0 ;68010 and higher dc.w $42C1 ;MOVE CCR,D1 endc and.w regcon0f,d1 move.b 0(flagptr,d1.w),regf ifc '\1','SETONLY' mexit endc ifnc '\1','' move.b d0,\1 endc jmp (return) endm inrflag macro ;Set flags after increment or decrement. ifeq x680x0 ;68000 only move sr,d0 endc ifne x680x0 ;68010 and higher dc.w $42C0 ;MOVE CCR,D0 endc and.w regcon0e,d0 and.w regcon01,regf or.b 0(flagptr,d0.w),regf jmp (return) endm lsxxd macro move.b 1(pseudopc),d0 rol.w #8,d0 move.b (pseudopc),d0 addq.l #2,pseudopc move.l d0,a0 adda.l targbase,a0 endm addflag macro ;Add and set flags. move.b d0,regop1(regs) move.b rega,regop2(regs) move.b regcon0e,regop3(regs) add.b d0,rega setflag endm adcflag macro ;Add with carry and set flags. move.b d0,regop1(regs) move.b rega,regop2(regs) moveq #0,d1 ;Set Zero flag for ADDX. addx.b d0,rega setflag endm sbbflag macro ;Subtract with borrow and set flags. moveq #0,d1 ;Set Zero flag for SUBX. subx.b d0,rega setflag endm ashl macro ;16-bit add to or subtract from HL, set flags move.w reg\2(regs),d0 move.w regh(regs),d1 asr.b #1,regf ;Put simulated carry flag in 68000's X flag. ori #4,ccr ;Set the 68000's Z flag for ADDX/SUBX. \1x.w d0,d1 ifeq x680x0 ;68000 only move sr,d0 endc ifne x680x0 ;68010 and higher dc.w $42C0 ;MOVE CCR,D0 endc and.w regcon0f,d0 move.b 0(flagptr,d0.w),regf move.w d1,regh(regs) jmp (return) endm ret80 macro ;Return from subroutine. move.b 1(pseudosp),d0 rol.w #8,d0 move.b (pseudosp),d0 addq.l #2,pseudosp lea 0(targbase,d0.l),pseudopc jmp (return) endm jmpaddr macro ;Get address for possible jump or call. move.b 1(pseudopc),d0 rol.w #8,d0 move.b (pseudopc),d0 addq.l #2,pseudopc endm call80 macro ;Call a Z-80 subroutine. move.l pseudopc,d1 sub.l targbase,d1 move.b d1,-2(pseudosp) rol.w #8,d1 move.b d1,-1(pseudosp) subq.l #2,pseudosp lea 0(targbase,d0.l),pseudopc jmp (return) endm rst80 macro ;Z-80 RST instruction move.l pseudopc,d1 sub.l targbase,d1 move.b d1,-2(pseudosp) rol.w #8,d1 move.b d1,-1(pseudosp) subq.l #2,pseudosp lea \1(targbase),pseudopc jmp (return) endm docyf macro ;Copy 68000's carry flag to Z-80. bcs.s 1$ bclr #0,regf jmp (return) 1$ bset #0,regf jmp (return) endm dozf macro ;Copy 68000's zero flag to Z-80. beq.s 1$ bclr #6,regf jmp (return) 1$ bset #6,regf jmp (return) endm calcind macro ;Calculate (IX+d) or (IY+d). moveq #0,d0 move.b (pseudopc)+,d0 add.w regi\1(regs),d0 endm page ************************************************************************* * * * Opcode dispatcher * * * ************************************************************************* code start2: * Instruction trace routine (only executed if RETURN points here). mloopt tst.b traceflg ;Is tracing active? bne.s dotrace ;No. cmpa.l tracesad,pseudopc ;Start tracing here? bne.s mloop ;No. move.b #1,traceflg ;Set trace flag. dotrace jsr dump ;Dump current instruction information. cmpa.l traceead,pseudopc ;End tracing here? bne.s mloop ;No. clr.b traceflg ;Reset trace flag. * Instruction simulation routine mloop moveq #0,d0 ;Execute appropriate simulation subroutine. move.b (pseudopc)+,d0 ;Grab the next opcode. asl #2,d0 ;(D0 high word is still zero!) move.l 0(opptr,d0.w),a0 jmp (a0) ;Do the subroutine. page ************************************************************************* * * * Opcode simulation routines * * * * Note: I/O instructions are based as 68000 address $FF0000 * * as is appropriate for the Compupro CPU-68K card. * * * * Also, all routines assume that the high word of D0 is zero! * * * ************************************************************************* even nop00 jmp (return) ;00 NOP lxib move.b (pseudopc)+,regc(regs) ;01 LXI B,nnnn move.b (pseudopc)+,regb(regs) jmp (return) staxb move.w regb(regs),d0 ;02 STAX B move.b rega,0(targbase,d0.l) jmp (return) inxb addq.w #1,regb(regs) ;03 INX B jmp (return) inrb addq.b #1,regb(regs) ;04 INR B inrflag dcrb subq.b #1,regb(regs) ;05 DCR B inrflag mvib move.b (pseudopc)+,regb(regs) ;06 MVI B,nn jmp (return) rlc rol.b #1,rega ;07 RLC docyf exaf move.b rega,d0 ;08 EXAF (Z-80) move.b rega2(regs),rega move.b d0,rega2(regs) move.b regf,d0 move.b regf2(regs),regf move.b d0,regf2(regs) jmp (return) dadb move.w regb(regs),d0 ;09 DAD B add.w d0,regh(regs) docyf ldaxb move.w regb(regs),d0 ;0A LDAX B move.b 0(targbase,d0.l),rega jmp (return) dcxb subq.w #1,regb(regs) ;0B DCX B jmp (return) inrc addq.b #1,regc(regs) ;0C INR C inrflag dcrc subq.b #1,regc(regs) ;0D DCR C inrflag mvic move.b (pseudopc)+,regc(regs) ;0E MVI C,nn jmp (return) rrc ror.b #1,rega ;0F RRC docyf djnz move.b (pseudopc)+,d0 ;10 DJNZ dd (Z-80) subq.b #1,regb(regs) beq.s lxidx jrd0 lxid move.b (pseudopc)+,rege(regs) ;11 LXI D,nnnn move.b (pseudopc)+,regd(regs) lxidx jmp (return) staxd move.w regd(regs),d0 ;12 STAX D move.b rega,0(targbase,d0.l) jmp (return) inxd addq.w #1,regd(regs) ;13 INX D jmp (return) inrd addq.b #1,regd(regs) ;14 INR D inrflag dcrd subq.b #1,regd(regs) ;15 DCR D inrflag mvid move.b (pseudopc)+,regd(regs) ;16 MVI D,nn jmp (return) ral roxr.b #1,regf ;17 RAL roxl.b #1,rega roxl.b #1,regf jmp (return) jr move.b (pseudopc)+,d0 ;18 JR dd (Z-80) jrd0 dadd move.w regd(regs),d0 ;19 DAD D add.w d0,regh(regs) docyf ldaxd move.w regd(regs),d0 ;1A LDAX D move.b 0(targbase,d0.l),rega jmp (return) dcxd subq.w #1,regd(regs) ;1B DCX D jmp (return) inre addq.b #1,rege(regs) ;1C INR E inrflag dcre subq.b #1,rege(regs) ;1D DCR E inrflag mvie move.b (pseudopc)+,rege(regs) ;1E MVI E,nn jmp (return) rar roxr.b #1,regf ;1F RAR roxr.b #1,rega roxl.b #1,regf jmp (return) jrnz move.b (pseudopc)+,d0 ;20 JRNZ dd (Z-80) btst #6,regf bne.s lxihx jrd0 lxih move.b (pseudopc)+,regl(regs) ;21 LXI H,nnnn move.b (pseudopc)+,regh(regs) lxihx jmp (return) shld lsxxd ;22 SHLD addr move.b regl(regs),(a0)+ move.b regh(regs),(a0) jmp (return) inxh addq.w #1,regh(regs) ;23 INX H jmp (return) inrh addq.b #1,regh(regs) ;24 INR H inrflag dcrh subq.b #1,regh(regs) ;25 DCR H inrflag mvih move.b (pseudopc)+,regh(regs) ;26 MVI H,nn jmp (return) daa move.b regop3(regs),d0 ;27 DAA roxr.b #1,d0 move.b regop2(regs),d0 move.b regop1(regs),d1 swap regcon0e move.b rega,regcon0e and.b regcon0f,regcon0e cmp.b #9,regcon0e bhi.s halfcy and.b regcon0f,d0 and.b regcon0f,d1 ori.b #$F0,d1 addx.b d0,d1 bcc.s nohalf halfcy add.b #6,rega bcs.s fullcy nohalf btst #0,regf bne.s fullcy move.b rega,regcon0e and.b #$F0,regcon0e cmp.b #$90,regcon0e bls.s nofull fullcy add.b #$60,rega ori #1,ccr ifeq x680x0 ;68000 only enddaa move sr,regf endc ifne x680x0 ;68010 and higher enddaa dc.w $42C3 ;MOVE CCR,D3 endc swap regcon0e and.w regcon0f,regf move.b 0(flagptr,regf.w),regf jmp (return) nofull tst.b rega bra.s enddaa jrz move.b (pseudopc)+,d0 ;28 JRZ dd (Z-80) btst #6,regf beq.s lhldx jrd0 dadh asl.w regh(regs) ;29 DAD H (multiply by 2) docyf lhld lsxxd ;2A LHLD addr move.b (a0)+,regl(regs) move.b (a0),regh(regs) lhldx jmp (return) dcxh subq.w #1,regh(regs) ;2B DCX H jmp (return) inrl addq.b #1,regl(regs) ;2C INR L inrflag dcrl subq.b #1,regl(regs) ;2D DCR L inrflag mvil move.b (pseudopc)+,regl(regs) ;2E MVI L,nn jmp (return) cma not.b rega ;2F CMA jmp (return) jrnc move.b (pseudopc)+,d0 ;30 JRNC dd (Z-80) btst #0,regf bne.s lxisx jrd0 lxis move.b 1(pseudopc),d0 ;31 LXI SP,nnnn rol.w #8,d0 move.b (pseudopc),d0 addq.l #2,pseudopc move.l d0,pseudosp adda.l targbase,pseudosp lxisx jmp (return) sta move.b 1(pseudopc),d0 ;32 STA addr rol.w #8,d0 move.b (pseudopc),d0 addq.l #2,pseudopc move.b rega,0(targbase,d0.l) jmp (return) inxs addq.l #1,pseudosp ;33 INX SP jmp (return) inrm move.w regh(regs),d0 ;34 INR M addq.b #1,0(targbase,d0.l) inrflag dcrm move.w regh(regs),d0 ;35 DCR M subq.b #1,0(targbase,d0.l) inrflag mvim move.w regh(regs),d0 ;36 MVI M,nn move.b (pseudopc)+,0(targbase,d0.l) jmp (return) stc bset #0,regf ;37 STC jmp (return) jrc move.b (pseudopc)+,d0 ;38 JRC dd (Z-80) btst #0,regf beq.s lxisx jrd0 dads move.l pseudosp,d0 ;39 DAD SP sub.l targbase,d0 add.w d0,regh(regs) docyf lda move.b 1(pseudopc),d0 ;3A LDA addr rol.w #8,d0 move.b (pseudopc),d0 addq.l #2,pseudopc move.b 0(targbase,d0.l),rega jmp (return) dcxs subq.l #1,pseudosp ;3B DCX SP jmp (return) inra move.b rega,regop1(regs) ;3C INR A move.b regcon01,regop2(regs) move.b regcon0e,regop3(regs) addq.b #1,rega inrflag dcra subq.b #1,rega ;3D DCR A inrflag mvia move.b (pseudopc)+,rega ;3E MVI A,nn jmp (return) cmc bchg #0,regf ;3F CMC jmp (return) movebb move.b regb(regs),regb(regs) ;40 MOV B,B jmp (return) movebc move.b regc(regs),regb(regs) ;41 MOV B,C jmp (return) movebd move.b regd(regs),regb(regs) ;42 MOV B,D jmp (return) movebe move.b rege(regs),regb(regs) ;43 MOV B,E jmp (return) movebh move.b regh(regs),regb(regs) ;44 MOV B,H jmp (return) movebl move.b regl(regs),regb(regs) ;45 MOV B,L jmp (return) movebm move.w regh(regs),d0 ;46 MOV B,M move.b 0(targbase,d0.l),regb(regs) jmp (return) moveba move.b rega,regb(regs) ;47 MOV B,A jmp (return) movecb move.b regb(regs),regc(regs) ;48 MOV C,B jmp (return) movecc move.b regc(regs),regc(regs) ;49 MOV C,C jmp (return) movecd move.b regd(regs),regc(regs) ;4A MOV C,D jmp (return) movece move.b rege(regs),regc(regs) ;4B MOV C,E jmp (return) movech move.b regh(regs),regc(regs) ;4C MOV C,H jmp (return) movecl move.b regl(regs),regc(regs) ;4D MOV C,L jmp (return) movecm move.w regh(regs),d0 ;4E MOV C,M move.b 0(targbase,d0.l),regc(regs) jmp (return) moveca move.b rega,regc(regs) ;4F MOV C,A jmp (return) movedb move.b regb(regs),regd(regs) ;50 MOV D,B jmp (return) movedc move.b regc(regs),regd(regs) ;51 MOV D,C jmp (return) movedd move.b regd(regs),regd(regs) ;52 MOV D,D jmp (return) movede move.b rege(regs),regd(regs) ;53 MOV D,E jmp (return) movedh move.b regh(regs),regd(regs) ;54 MOV D,H jmp (return) movedl move.b regl(regs),regd(regs) ;55 MOV D,L jmp (return) movedm move.w regh(regs),d0 ;56 MOV D,M move.b 0(targbase,d0.l),regd(regs) jmp (return) moveda move.b rega,regd(regs) ;57 MOV D,A jmp (return) moveeb move.b regb(regs),rege(regs) ;58 MOV E,B jmp (return) moveec move.b regc(regs),rege(regs) ;59 MOV E,C jmp (return) moveed move.b regd(regs),rege(regs) ;5A MOV E,D jmp (return) moveee move.b rege(regs),rege(regs) ;5B MOV E,E jmp (return) moveeh move.b regh(regs),rege(regs) ;5C MOV E,H jmp (return) moveel move.b regl(regs),rege(regs) ;5D MOV E,L jmp (return) moveem move.w regh(regs),d0 ;5E MOV E,M move.b 0(targbase,d0.l),rege(regs) jmp (return) moveea move.b rega,rege(regs) ;5F MOV E,A jmp (return) movehb move.b regb(regs),regh(regs) ;60 MOV H,B jmp (return) movehc move.b regc(regs),regh(regs) ;61 MOV H,C jmp (return) movehd move.b regd(regs),regh(regs) ;62 MOV H,D jmp (return) movehe move.b rege(regs),regh(regs) ;63 MOV H,E jmp (return) movehh move.b regh(regs),regh(regs) ;64 MOV H,H jmp (return) movehl move.b regl(regs),regh(regs) ;65 MOV H,L jmp (return) movehm move.w regh(regs),d0 ;66 MOV H,M move.b 0(targbase,d0.l),regh(regs) jmp (return) moveha move.b rega,regh(regs) ;67 MOV H,A jmp (return) movelb move.b regb(regs),regl(regs) ;68 MOV L,B jmp (return) movelc move.b regc(regs),regl(regs) ;69 MOV L,C jmp (return) moveld move.b regd(regs),regl(regs) ;6A MOV L,D jmp (return) movele move.b rege(regs),regl(regs) ;6B MOV L,E jmp (return) movelh move.b regh(regs),regl(regs) ;6C MOV L,H jmp (return) movell move.b regl(regs),regl(regs) ;6D MOV L,L jmp (return) movelm move.w regh(regs),d0 ;6E MOV L,M move.b 0(targbase,d0.l),regl(regs) jmp (return) movela move.b rega,regl(regs) ;6F MOV L,A jmp (return) movemb move.w regh(regs),d0 ;70 MOV M,B move.b regb(regs),0(targbase,d0.l) jmp (return) movemc move.w regh(regs),d0 ;71 MOV M,C move.b regc(regs),0(targbase,d0.l) jmp (return) movemd move.w regh(regs),d0 ;72 MOV M,D move.b regd(regs),0(targbase,d0.l) jmp (return) moveme move.w regh(regs),d0 ;73 MOV M,E move.b rege(regs),0(targbase,d0.l) jmp (return) movemh move.w regh(regs),d0 ;74 MOV M,H move.b regh(regs),0(targbase,d0.l) jmp (return) moveml move.w regh(regs),d0 ;75 MOV M,L move.b regl(regs),0(targbase,d0.l) jmp (return) halt jsr service ;76 HLT jmp (return) movema move.w regh(regs),d0 ;77 MOV M,A move.b rega,0(targbase,d0.l) jmp (return) moveab move.b regb(regs),rega ;78 MOV A,B jmp (return) moveac move.b regc(regs),rega ;79 MOV A,C jmp (return) movead move.b regd(regs),rega ;7A MOV A,D jmp (return) moveae move.b rege(regs),rega ;7B MOV A,E jmp (return) moveah move.b regh(regs),rega ;7C MOV A,H jmp (return) moveal move.b regl(regs),rega ;7D MOV A,L jmp (return) moveam move.w regh(regs),d0 ;7E MOV A,M move.b 0(targbase,d0.l),rega jmp (return) moveaa jmp (return) ;7F MOV A,A addb move.b regb(regs),d0 ;80 ADD B addflag addc move.b regc(regs),d0 ;81 ADD C addflag addd move.b regd(regs),d0 ;82 ADD D addflag adde move.b rege(regs),d0 ;83 ADD E addflag addh move.b regh(regs),d0 ;84 ADD H addflag addl move.b regl(regs),d0 ;85 ADD L addflag addm move.w regh(regs),d0 ;86 ADD M move.b 0(targbase,d0.l),d0 addflag adda move.b rega,regop1(regs) ;87 ADD A move.b rega,regop2(regs) move.b regcon0e,regop3(regs) add.b rega,rega setflag adcb move.b regf,regop3(regs) ;88 ADC B asr.b #1,regf move.b regb(regs),d0 adcflag adcc move.b regf,regop3(regs) ;89 ADC C asr.b #1,regf move.b regc(regs),d0 adcflag adcd move.b regf,regop3(regs) ;8A ADC D asr.b #1,regf move.b regd(regs),d0 adcflag adce move.b regf,regop3(regs) ;8B ADC E asr.b #1,regf move.b rege(regs),d0 adcflag adch move.b regf,regop3(regs) ;8C ADC H asr.b #1,regf move.b regh(regs),d0 adcflag adcl move.b regf,regop3(regs) ;8D ADC L asr.b #1,regf move.b regl(regs),d0 adcflag adcm move.b regf,regop3(regs) ;8E ADC M move.w regh(regs),d0 move.l d0,a0 adda.l targbase,a0 asr.b #1,regf move.b (a0),d0 adcflag adca move.b regf,regop3(regs) ;8F ADC A asr.b #1,regf move.b rega,d0 adcflag subb sub.b regb(regs),rega ;90 SUB B setflag subc sub.b regc(regs),rega ;91 SUB C setflag subd sub.b regd(regs),rega ;92 SUB D setflag sube sub.b rege(regs),rega ;93 SUB E setflag subh sub.b regh(regs),rega ;94 SUB H setflag subl sub.b regl(regs),rega ;95 SUB L setflag subm move.w regh(regs),d0 ;96 SUB M sub.b 0(targbase,d0.l),rega setflag suba sub.b rega,rega ;97 SUB A setflag sbbb asr.b #1,regf ;98 SBB B move.b regb(regs),d0 sbbflag sbbc asr.b #1,regf ;99 SBB C move.b regc(regs),d0 sbbflag sbbd asr.b #1,regf ;9A SBB D move.b regd(regs),d0 sbbflag sbbe asr.b #1,regf ;9B SBB E move.b rege(regs),d0 sbbflag sbbh asr.b #1,regf ;9C SBB H move.b regh(regs),d0 sbbflag sbbl asr.b #1,regf ;9D SBB L move.b regl(regs),d0 sbbflag sbbm move.w regh(regs),d0 ;9E SBB M move.l d0,a0 adda.l targbase,a0 asr.b #1,regf move.b (a0),d0 sbbflag sbba asr.b #1,regf ;9F SBB A move.b rega,d0 sbbflag andb and.b regb(regs),rega ;A0 ANA B move.b 16(flagptr,rega.w),regf jmp (return) andc and.b regc(regs),rega ;A1 ANA C move.b 16(flagptr,rega.w),regf jmp (return) andd and.b regd(regs),rega ;A2 ANA D move.b 16(flagptr,rega.w),regf jmp (return) ande and.b rege(regs),rega ;A3 ANA E move.b 16(flagptr,rega.w),regf jmp (return) andh and.b regh(regs),rega ;A4 ANA H move.b 16(flagptr,rega.w),regf jmp (return) andl and.b regl(regs),rega ;A5 ANA L move.b 16(flagptr,rega.w),regf jmp (return) andm move.w regh(regs),d0 ;A6 ANA M and.b 0(targbase,d0.l),rega move.b 16(flagptr,rega.w),regf jmp (return) anda move.b 16(flagptr,rega.w),regf ;A7 ANA A jmp (return) xrab move.b regb(regs),d0 ;A8 XRA B eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xrac move.b regc(regs),d0 ;A9 XRA C eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xrad move.b regd(regs),d0 ;AA XRA D eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xrae move.b rege(regs),d0 ;AB XRA E eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xrah move.b regh(regs),d0 ;AC XRA H eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xral move.b regl(regs),d0 ;AD XRA L eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xram move.w regh(regs),d0 ;AE XRA M move.b 0(targbase,d0.l),d0 eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xraa moveq #0,rega ;AF XRA A (clears accumulator) move.b 16(flagptr),regf jmp (return) orab or.b regb(regs),rega ;B0 ORA B move.b 16(flagptr,rega.w),regf jmp (return) orac or.b regc(regs),rega ;B1 ORA C move.b 16(flagptr,rega.w),regf jmp (return) orad or.b regd(regs),rega ;B2 ORA D move.b 16(flagptr,rega.w),regf jmp (return) orae or.b rege(regs),rega ;B3 ORA E move.b 16(flagptr,rega.w),regf jmp (return) orah or.b regh(regs),rega ;B4 ORA H move.b 16(flagptr,rega.w),regf jmp (return) oral or.b regl(regs),rega ;B5 ORA L move.b 16(flagptr,rega.w),regf jmp (return) oram move.w regh(regs),d0 ;B6 ORA M or.b 0(targbase,d0.l),rega move.b 16(flagptr,rega.w),regf jmp (return) oraa move.b 16(flagptr,rega.w),regf ;B7 ORA A jmp (return) cmpb cmp.b regb(regs),rega ;B8 CMP B setflag cmpc cmp.b regc(regs),rega ;B9 CMP C setflag cmpd cmp.b regd(regs),rega ;BA CMP D setflag cmpe cmp.b rege(regs),rega ;BB CMP E setflag cmph cmp.b regh(regs),rega ;BC CMP H setflag cmpl cmp.b regl(regs),rega ;BD CMP L setflag cmpam move.w regh(regs),d0 ;BE CMP M cmp.b 0(targbase,d0.l),rega setflag cmpaa cmp.b rega,rega ;BF CMP A setflag rnz btst #6,regf ;C0 RNZ bne.s popbx ret80 popb move.b (pseudosp)+,regc(regs) ;C1 POP B move.b (pseudosp)+,regb(regs) popbx jmp (return) jnz jmpaddr ;C2 JNZ addr btst #6,regf bne.s jnzx lea 0(targbase,d0.l),pseudopc jnzx jmp (return) jmpa jmpaddr ;C3 JMP addr lea 0(targbase,d0.l),pseudopc jmp (return) cnz jmpaddr ;C4 CNZ addr btst #6,regf bne.s jnzx call80 pushb move.b regb(regs),-(pseudosp) ;C5 PUSH B move.b regc(regs),-(pseudosp) jmp (return) adi move.b (pseudopc)+,d0 ;C6 ADI nn addflag rst0 rst80 $0 ;C7 RST 0 rz btst #6,regf ;C8 RZ beq.s jzx ret ret80 ;C9 RET jz jmpaddr ;CA JZ addr btst #6,regf beq.s jzx lea 0(targbase,d0.l),pseudopc jzx jmp (return) * CB-prefix Z-80 instructions are simulated in the next module. cz jmpaddr ;CC CZ addr btst #6,regf beq.s jzx call80 call jmpaddr ;CD CALL addr call80 aci move.b regf,regop3(regs) ;CE ACI nn asr.b #1,regf move.b (pseudopc)+,d0 adcflag rst1 rst80 $8 ;CF RST 1 rnc btst #0,regf ;D0 RNC bne.s jncx ret80 popd move.b (pseudosp)+,rege(regs) ;D1 POP D move.b (pseudosp)+,regd(regs) jmp (return) jnc jmpaddr ;D2 JNC addr btst #0,regf bne.s jncx lea 0(targbase,d0.l),pseudopc jncx jmp (return) out moveq #0,d0 ;D3 OUT nn move.b (pseudopc)+,d0 ;Port number lea tmprega,a0 ;Simulated accumulator is in a 68000 register - move.b rega,(a0) ; move it to a memory location. jsr outp ;Send the byte. jmp (return) cnc ;D4 CNC addr jmpaddr btst #0,regf bne.s jncx call80 pushd move.b regd(regs),-(pseudosp) ;D5 PUSH D move.b rege(regs),-(pseudosp) jmp (return) sui move.b (pseudopc)+,d0 ;D6 SUI nn sub.b d0,rega setflag rst2 rst80 $10 ;D7 RST 2 rc btst #0,regf ;D8 RC beq.s jcx ret80 exx move.l regb(regs),d0 ;D9 EXX (Z-80) move.l regb2(regs),regb(regs) move.l d0,regb2(regs) move.w regh(regs),d0 move.w regh2(regs),regh(regs) move.w d0,regh2(regs) jmp (return) jc jmpaddr ;DA JC addr btst #0,regf beq.s jcx lea 0(targbase,d0.l),pseudopc jcx jmp (return) in moveq #0,d0 ;DB IN nn move.b (pseudopc)+,d0 ;Port number lea tmprega,a0 ;Get the byte here for now jsr inp move.b tmprega,rega ;Move byte to accumulator (real register!) jmp (return) cc jmpaddr ;DC CC addr btst #0,regf beq.s jpox call80 * DD-prefix Z-80 instructions are simulated in the next module. sbi asr.b #1,regf ;DE SBI nn move.b (pseudopc)+,d0 sbbflag rst3 rst80 $18 ;DF RST 3 rpo btst #2,regf ;E0 RPO bne.s jpox ret80 poph move.b (pseudosp)+,regl(regs) ;E1 POP H move.b (pseudosp)+,regh(regs) jmp (return) jpo jmpaddr ;E2 JPO addr btst #2,regf bne.s jpox lea 0(targbase,d0.l),pseudopc jpox jmp (return) xthl move.b regl(regs),d0 ;E3 XTHL move.b (pseudosp),regl(regs) move.b d0,(pseudosp) move.b regh(regs),d0 move.b 1(pseudosp),regh(regs) move.b d0,1(pseudosp) jmp (return) cpo jmpaddr ;E4 CPO addr btst #2,regf bne.s jpox call80 pushh move.b regh(regs),-(pseudosp) ;E5 PUSH H move.b regl(regs),-(pseudosp) jmp (return) ani and.b (pseudopc)+,rega ;E6 ANI nn move.b 16(flagptr,rega.w),regf jmp (return) rst4 rst80 $20 ;E7 RST 4 rpe btst #2,regf ;E8 RPE beq.s jpex ret80 pchl move.w regh(regs),d0 ;E9 PCHL lea 0(targbase,d0.l),pseudopc jmp (return) jpe jmpaddr ;EA JPE addr btst #2,regf beq.s jpex lea 0(targbase,d0.l),pseudopc jpex jmp (return) xchg move.w regd(regs),d0 ;EB XCHG move.w regh(regs),regd(regs) move.w d0,regh(regs) jmp (return) cpe jmpaddr ;EC CPE addr btst #2,regf beq.s jpex call80 * ED-prefix Z-80 instructions are simulated in the next module. xri move.b (pseudopc)+,d0 ;EE XRI nn eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) rst5 rst80 $28 ;EF RST 5 rp btst #7,regf ;F0 RP bne.s jpx ret80 popp move.b (pseudosp)+,regf ;F1 POP P move.b (pseudosp)+,rega jmp (return) jp jmpaddr ;F2 JP addr btst #7,regf bne.s jpx lea 0(targbase,d0.l),pseudopc jpx jmp (return) di jmp (return) ;F3 DI (treated as no-op) cp jmpaddr ;F4 CP addr btst #7,regf bne.s jpx call80 pushp move.b rega,-(pseudosp) ;F5 PUSH PSW move.b regf,-(pseudosp) jmp (return) oria or.b (pseudopc)+,rega ;F6 ORI nn move.b 16(flagptr,rega.w),regf jmp (return) rst6 rst80 $30 ;F7 RST 6 rm btst #7,regf ;F8 RM beq.s jmx ret80 sphl move.w regh(regs),d0 ;F9 SPHL lea 0(targbase,d0.l),pseudosp jmp (return) jm jmpaddr ;FA JM addr btst #7,regf beq.s jmx lea 0(targbase,d0.l),pseudopc jmx jmp (return) ei jmp (return) ;FB EI (treated as a no-op) cm jmpaddr ;FC CM addr btst #7,regf beq.s jmx call80 * FD-prefix Z-80 instructions are simulated in the next module. cpi cmp.b (pseudopc)+,rega ;FE CPI nn setflag rst7 rst80 $38 ;FF RST 7 page ************************************************************************* * * * Z-80 opcode simulation routines * * * ************************************************************************* preCB moveq #0,d1 ;Zero-fill high bits. move.b (pseudopc)+,d1 ;Grab sub-opcode. asl #2,d1 lea CBoptab,a0 move.l 0(a0,d1.w),-(sp) ;Address of simulation routine rts ;Do it! preDD moveq #0,d1 move.b (pseudopc)+,d1 asl #2,d1 lea DDoptab,a0 move.l 0(a0,d1.w),-(sp) rts prDDCB calcind x ;Calculate operand address. prDDCBs moveq #0,d1 move.b (pseudopc)+,d1 ;Sub-sub-opcode and.b #7,d1 cmp.b #6,d1 ;Is it valid? bne.s ilgDDCB ;No. move.b -1(pseudopc),d1 ;Get the sub-sub-opcode again. lsr.b #3,d1 ;Kill low-order 3 bits. lsl.w #2,d1 ;Convert to longword displacement. lea DDCBopt,a0 move.l 0(a0,d1.w),-(sp) rts preED moveq #0,d1 move.b (pseudopc)+,d1 asl #2,d1 lea EDoptab,a0 move.l 0(a0,d1.w),-(sp) rts preFD moveq #0,d1 move.b (pseudopc)+,d1 asl #2,d1 lea FDoptab,a0 move.l 0(a0,d1.w),-(sp) rts prFDCB calcind y ;Calculate operand address. bra.s prDDCBs ;Now we can use DDCB routines. ilgDDCB subq.l #2,pseudopc ;Enter here for DDCB/FDCB prefix errors. illgED move.l (sp)+,d1 ;Trash the address. subq.l #1,pseudopc ;Fix pseudo-PC for ILLEGAL. jmp illegl rlcb move.b regb(regs),d0 ;CB00 RLC B rol.b #1,d0 setflag regb(regs) rlcc move.b regc(regs),d0 ;CB01 RLC C rol.b #1,d0 setflag regc(regs) rlcd move.b regd(regs),d0 ;CB02 RLC D rol.b #1,d0 setflag regd(regs) rlce move.b rege(regs),d0 ;CB03 RLC E rol.b #1,d0 setflag rege(regs) rlch move.b regh(regs),d0 ;CB04 RLC H rol.b #1,d0 setflag regh(regs) rlcl move.b regl(regs),d0 ;CB05 RLC L rol.b #1,d0 setflag regl(regs) rlcm move.w regh(regs),d0 ;CB06 RLC M lea 0(targbase,d0.l),a0 move.b (a0),d0 rol.b #1,d0 setflag (a0) rlca rol.b #1,d0 ;CB07 RLC A setflag rrcb move.b regb(regs),d0 ;CB08 RRC B ror.b #1,d0 setflag regb(regs) rrcc move.b regc(regs),d0 ;CB09 RRC C ror.b #1,d0 setflag regc(regs) rrcd move.b regd(regs),d0 ;CB0A RRC D ror.b #1,d0 setflag regd(regs) rrce move.b rege(regs),d0 ;CB0B RRC E ror.b #1,d0 setflag rege(regs) rrch move.b regh(regs),d0 ;CB0C RRC H ror.b #1,d0 setflag regh(regs) rrcl move.b regl(regs),d0 ;CB0D RRC L ror.b #1,d0 setflag regl(regs) rrcm move.w regh(regs),d0 ;CB0E RRC M lea 0(targbase,d0.l),a0 move.b (a0),d0 ror.b #1,d0 setflag (a0) rrca ror.b #1,rega ;CB0F RRC A setflag rlrb move.b regb(regs),d0 ;CB10 RL B roxr.b #1,regf roxl.b #1,d0 setflag regb(regs) rlrc move.b regc(regs),d0 ;CB11 RL C roxr.b #1,regf roxl.b #1,d0 setflag regc(regs) rlrd move.b regd(regs),d0 ;CB12 RL D roxr.b #1,regf roxl.b #1,d0 setflag regd(regs) rlre move.b rege(regs),d0 ;CB13 RL E roxr.b #1,regf roxl.b #1,d0 setflag rege(regs) rlrh move.b regh(regs),d0 ;CB14 RL H roxr.b #1,regf roxl.b #1,d0 setflag regh(regs) rlrl move.b regl(regs),d0 ;CB15 RL L roxr.b #1,regf roxl.b #1,d0 setflag regl(regs) rlrm move.w regh(regs),d0 ;CB16 RL M lea 0(targbase,d0.l),a0 move.b (a0),d0 roxr.b #1,regf roxl.b #1,d0 setflag (a0) rlra roxr.b #1,regf ;CB17 RL A roxl.b #1,rega setflag rrrb move.b regb(regs),d0 ;CB18 RR B roxr.b #1,regf roxr.b #1,d0 setflag regb(regs) rrrc move.b regc(regs),d0 ;CB19 RR C roxr.b #1,regf roxr.b #1,d0 setflag regc(regs) rrrd move.b regd(regs),d0 ;CB1A RR D roxr.b #1,regf roxr.b #1,d0 setflag regd(regs) rrre move.b rege(regs),d0 ;CB1B RR E roxr.b #1,regf roxr.b #1,d0 setflag rege(regs) rrrh move.b regh(regs),d0 ;CB1C RR H roxr.b #1,regf roxr.b #1,d0 setflag regh(regs) rrrl move.b regl(regs),d0 ;CB1D RR L roxr.b #1,regf roxr.b #1,d0 setflag regl(regs) rrrm move.w regh(regs),d0 ;CB1E RR M lea 0(targbase,d0.l),a0 move.b (a0),d0 roxr.b #1,regf roxr.b #1,d0 setflag (a0) rrra roxr.b #1,regf ;CB1F RR A roxr.b #1,rega setflag slab move.b regb(regs),d0 ;CB20 SLA B asl.b #1,d0 setflag regb(regs) slac move.b regc(regs),d0 ;CB21 SLA C asl.b #1,d0 setflag regc(regs) slad move.b regd(regs),d0 ;CB22 SLA D asl.b #1,d0 setflag regd(regs) slae move.b rege(regs),d0 ;CB23 SLA E asl.b #1,d0 setflag rege(regs) slah move.b regh(regs),d0 ;CB24 SLA H asl.b #1,d0 setflag regh(regs) slal move.b regl(regs),d0 ;CB25 SLA L asl.b #1,d0 setflag regl(regs) slam move.w regh(regs),d0 ;CB26 SLA M lea 0(targbase,d0.l),a0 move.b (a0),d0 asl.b #1,d0 setflag (a0) slaa asl.b #1,rega ;CB27 SLA A setflag srab move.b regb(regs),d0 ;CB28 SRA B asr.b #1,d0 setflag regb(regs) srac move.b regc(regs),d0 ;CB29 SRA C asr.b #1,d0 setflag regc(regs) srad move.b regd(regs),d0 ;CB2A SRA D asr.b #1,d0 setflag regd(regs) srae move.b rege(regs),d0 ;CB2B SRA E asr.b #1,d0 setflag rege(regs) srah move.b regh(regs),d0 ;CB2C SRA H asr.b #1,d0 setflag regh(regs) sral move.b regl(regs),d0 ;CB2D SRA L asr.b #1,d0 setflag regl(regs) sram move.w regh(regs),d0 ;CB2E SRA M lea 0(targbase,d0.l),a0 move.b (a0),d0 setflag (a0) sraa asr.b #1,rega ;CB2F SRA A setflag srlb move.b regb(regs),d0 ;CB38 SRL B lsr.b #1,d0 setflag regb(regs) srlc move.b regc(regs),d0 ;CB39 SRL C lsr.b #1,d0 setflag regc(regs) srld move.b regd(regs),d0 ;CB3A SRL D lsr.b #1,d0 setflag regd(regs) srle move.b rege(regs),d0 ;CB3B SRL E lsr.b #1,d0 setflag rege(regs) srlh move.b regh(regs),d0 ;CB3C SRL H lsr.b #1,d0 setflag regh(regs) srll move.b regl(regs),d0 ;CB3D SRL L lsr.b #1,d0 setflag regl(regs) srlm move.w regh(regs),d0 ;CB3E SRL M lea 0(targbase,d0.l),a0 move.b (a0),d0 lsr.b #1,d0 setflag (a0) srla lsr.b #1,rega ;CB3F SRL A setflag bit0b btst #0,regb(regs) ;CB40 BIT 0,B dozf bit0c btst #0,regc(regs) ;CB41 BIT 0,C dozf bit0d btst #0,regd(regs) ;CB42 BIT 0,D dozf bit0e btst #0,rege(regs) ;CB43 BIT 0,E dozf bit0h btst #0,regh(regs) ;CB44 BIT 0,H dozf bit0l btst #0,regl(regs) ;CB45 BIT 0,L dozf bit0m move.w regh(regs),d0 ;CB46 BIT 0,M btst #0,0(targbase,d0.l) dozf bit0a btst #0,rega ;CB47 BIT 0,A dozf bit1b btst #1,regb(regs) ;CB48 BIT 1,B dozf bit1c btst #1,regc(regs) ;CB49 BIT 1,C dozf bit1d btst #1,regd(regs) ;CB4A BIT 1,D dozf bit1e btst #1,rege(regs) ;CB4B BIT 1,E dozf bit1h btst #1,regh(regs) ;CB4C BIT 1,H dozf bit1l btst #1,regl(regs) ;CB4D BIT 1,L dozf bit1m move.w regh(regs),d0 ;CB4E BIT 1,M btst #1,0(targbase,d0.l) dozf bit1a btst #1,rega ;CB4F BIT 1,A dozf bit2b btst #2,regb(regs) ;CB50 BIT 2,B dozf bit2c btst #2,regc(regs) ;CB51 BIT 2,C dozf bit2d btst #2,regd(regs) ;CB52 BIT 2,D dozf bit2e btst #2,rege(regs) ;CB53 BIT 2,E dozf bit2h btst #2,regh(regs) ;CB54 BIT 2,H dozf bit2l btst #2,regl(regs) ;CB55 BIT 2,L dozf bit2m move.w regh(regs),d0 ;CB56 BIT 2,M btst #2,0(targbase,d0.l) dozf bit2a btst #2,rega ;CB57 BIT 2,A dozf bit3b btst #3,regb(regs) ;CB58 BIT 3,B dozf bit3c btst #3,regc(regs) ;CB59 BIT 3,C dozf bit3d btst #3,regd(regs) ;CB5A BIT 3,D dozf bit3e btst #3,rege(regs) ;CB5B BIT 3,E dozf bit3h btst #3,regh(regs) ;CB5C BIT 3,H dozf bit3l btst #3,regl(regs) ;CB5D BIT 3,L dozf bit3m move.w regh(regs),d0 ;CB5E BIT 3,M btst #3,0(targbase,d0.l) dozf bit3a btst #3,rega ;CB5F BIT 3,A dozf bit4b btst #4,regb(regs) ;CB60 BIT 4,B dozf bit4c btst #4,regc(regs) ;CB61 BIT 4,C dozf bit4d btst #4,regd(regs) ;CB62 BIT 4,D dozf bit4e btst #4,rege(regs) ;CB63 BIT 4,E dozf bit4h btst #4,regh(regs) ;CB64 BIT 4,H dozf bit4l btst #4,regl(regs) ;CB65 BIT 4,L dozf bit4m move.w regh(regs),d0 ;CB66 BIT 4,M btst #4,0(targbase,d0.l) dozf bit4a btst #4,rega ;CB67 BIT 4,A dozf bit5b btst #5,regb(regs) ;CB68 BIT 5,B dozf bit5c btst #5,regc(regs) ;CB69 BIT 5,C dozf bit5d btst #5,regd(regs) ;CB6A BIT 5,D dozf bit5e btst #5,rege(regs) ;CB6B BIT 5,E dozf bit5h btst #5,regh(regs) ;CB6C BIT 5,H dozf bit5l btst #5,regl(regs) ;CB6D BIT 5,L dozf bit5m move.w regh(regs),d0 ;CB6E BIT 5,M btst #5,0(targbase,d0.l) dozf bit5a btst #5,rega ;CB6F BIT 5,A dozf bit6b btst #6,regb(regs) ;CB70 BIT 6,B dozf bit6c btst #6,regc(regs) ;CB71 BIT 6,C dozf bit6d btst #6,regd(regs) ;CB72 BIT 6,D dozf bit6e btst #6,rege(regs) ;CB73 BIT 6,E dozf bit6h btst #6,regh(regs) ;CB74 BIT 6,H dozf bit6l btst #6,regl(regs) ;CB75 BIT 6,L dozf bit6m move.w regh(regs),d0 ;CB76 BIT 6,M btst #6,0(targbase,d0.l) dozf bit6a btst #6,rega ;CB77 BIT 6,A dozf bit7b btst #7,regb(regs) ;CB78 BIT 7,B dozf bit7c btst #7,regc(regs) ;CB79 BIT 7,C dozf bit7d btst #7,regd(regs) ;CB7A BIT 7,D dozf bit7e btst #7,rege(regs) ;CB7B BIT 7,E dozf bit7h btst #7,regh(regs) ;CB7C BIT 7,H dozf bit7l btst #7,regl(regs) ;CB7D BIT 7,L dozf bit7m move.w regh(regs),d0 ;CB7E BIT 7,M btst #7,0(targbase,d0.l) dozf bit7a btst #7,rega ;CB7F BIT 7,A dozf res0b bclr #0,regb(regs) ;CB80 RES 0,B jmp (return) res0c bclr #0,regc(regs) ;CB81 RES 0,C jmp (return) res0d bclr #0,regd(regs) ;CB82 RES 0,D jmp (return) res0e bclr #0,rege(regs) ;CB83 RES 0,E jmp (return) res0h bclr #0,regh(regs) ;CB84 RES 0,H jmp (return) res0l bclr #0,regl(regs) ;CB85 RES 0,L jmp (return) res0m move.w regh(regs),d0 ;CB86 RES 0,M bclr #0,0(targbase,d0.l) jmp (return) res0a bclr #0,rega ;CB87 RES 0,A jmp (return) res1b bclr #1,regb(regs) ;CB88 RES 1,B jmp (return) res1c bclr #1,regc(regs) ;CB89 RES 1,C jmp (return) res1d bclr #1,regd(regs) ;CB8A RES 1,D jmp (return) res1e bclr #1,rege(regs) ;CB8B RES 1,E jmp (return) res1h bclr #1,regh(regs) ;CB8C RES 1,H jmp (return) res1l bclr #1,regl(regs) ;CB8D RES 1,L jmp (return) res1m move.w regh(regs),d0 ;CB8E RES 1,M bclr #1,0(targbase,d0.l) jmp (return) res1a bclr #1,rega ;CB8F RES 1,A jmp (return) res2b bclr #2,regb(regs) ;CB90 RES 2,B jmp (return) res2c bclr #2,regc(regs) ;CB91 RES 2,C jmp (return) res2d bclr #2,regd(regs) ;CB92 RES 2,D jmp (return) res2e bclr #2,rege(regs) ;CB93 RES 2,E jmp (return) res2h bclr #2,regh(regs) ;CB94 RES 2,H jmp (return) res2l bclr #2,regl(regs) ;CB95 RES 2,L jmp (return) res2m move.w regh(regs),d0 ;CB96 RES 2,M bclr #2,0(targbase,d0.l) jmp (return) res2a bclr #2,rega ;CB97 RES 2,A jmp (return) res3b bclr #3,regb(regs) ;CB98 RES 3,B jmp (return) res3c bclr #3,regc(regs) ;CB99 RES 3,C jmp (return) res3d bclr #3,regd(regs) ;CB9A RES 3,D jmp (return) res3e bclr #3,rege(regs) ;CB9B RES 3,E jmp (return) res3h bclr #3,regh(regs) ;CB9C RES 3,H jmp (return) res3l bclr #3,regl(regs) ;CB9D RES 3,L jmp (return) res3m move.w regh(regs),d0 ;CB9E RES 3,M bclr #3,0(targbase,d0.l) jmp (return) res3a bclr #3,rega ;CB9F RES 3,A jmp (return) res4b bclr #4,regb(regs) ;CBA0 RES 4,B jmp (return) res4c bclr #4,regc(regs) ;CBA1 RES 4,C jmp (return) res4d bclr #4,regd(regs) ;CBA2 RES 4,D jmp (return) res4e bclr #4,rege(regs) ;CBA3 RES 4,E jmp (return) res4h bclr #4,regh(regs) ;CBA4 RES 4,H jmp (return) res4l bclr #4,regl(regs) ;CBA5 RES 4,L jmp (return) res4m move.w regh(regs),d0 ;CBA6 RES 4,M bclr #4,0(targbase,d0.l) jmp (return) res4a bclr #4,rega ;CBA7 RES 4,A jmp (return) res5b bclr #5,regb(regs) ;CBA8 RES 5,B jmp (return) res5c bclr #5,regc(regs) ;CBA9 RES 5,C jmp (return) res5d bclr #5,regd(regs) ;CBAA RES 5,D jmp (return) res5e bclr #5,rege(regs) ;CBAB RES 5,E jmp (return) res5h bclr #5,regh(regs) ;CBAC RES 5,H jmp (return) res5l bclr #5,regl(regs) ;CBAD RES 5,L jmp (return) res5m move.w regh(regs),d0 ;CBAE RES 5,M bclr #5,0(targbase,d0.l) jmp (return) res5a bclr #5,rega ;CBAF RES 5,A jmp (return) res6b bclr #6,regb(regs) ;CBB0 RES 6,B jmp (return) res6c bclr #6,regc(regs) ;CBB1 RES 6,C jmp (return) res6d bclr #6,regd(regs) ;CBB2 RES 6,D jmp (return) res6e bclr #6,rege(regs) ;CBB3 RES 6,E jmp (return) res6h bclr #6,regh(regs) ;CBB4 RES 6,H jmp (return) res6l bclr #6,regl(regs) ;CBB5 RES 6,L jmp (return) res6m move.w regh(regs),d0 ;CBB6 RES 6,M bclr #6,0(targbase,d0.l) jmp (return) res6a bclr #6,rega ;CBB7 RES 6,A jmp (return) res7b bclr #7,regb(regs) ;CBB8 RES 7,B jmp (return) res7c bclr #7,regc(regs) ;CBB9 RES 7,C jmp (return) res7d bclr #7,regd(regs) ;CBBA RES 7,D jmp (return) res7e bclr #7,rege(regs) ;CBBB RES 7,E jmp (return) res7h bclr #7,regh(regs) ;CBBC RES 7,H jmp (return) res7l bclr #7,regl(regs) ;CBBD RES 7,L jmp (return) res7m move.w regh(regs),d0 ;CBBE RES 7,M bclr #7,0(targbase,d0.l) jmp (return) res7a bclr #7,rega ;CBBF RES 7,A jmp (return) set0b bset #0,regb(regs) ;CBC0 SET 0,B jmp (return) set0c bset #0,regc(regs) ;CBC1 SET 0,C jmp (return) set0d bset #0,regd(regs) ;CBC2 SET 0,D jmp (return) set0e bset #0,rege(regs) ;CBC3 SET 0,E jmp (return) set0h bset #0,regh(regs) ;CBC4 SET 0,H jmp (return) set0l bset #0,regl(regs) ;CBC5 SET 0,L jmp (return) set0m move.w regh(regs),d0 ;CBC6 SET 0,M bset #0,0(targbase,d0.l) jmp (return) set0a bset #0,rega ;CBC7 SET 0,A jmp (return) set1b bset #1,regb(regs) ;CBC8 SET 1,B jmp (return) set1c bset #1,regc(regs) ;CBC9 SET 1,C jmp (return) set1d bset #1,regd(regs) ;CBCA SET 1,D jmp (return) set1e bset #1,rege(regs) ;CBCB SET 1,E jmp (return) set1h bset #1,regh(regs) ;CBCC SET 1,H jmp (return) set1l bset #1,regl(regs) ;CBCD SET 1,L jmp (return) set1m move.w regh(regs),d0 ;CBCE SET 1,M bset #1,0(targbase,d0.l) jmp (return) set1a bset #1,rega ;CBCF SET 1,A jmp (return) set2b bset #2,regb(regs) ;CBD0 SET 2,B jmp (return) set2c bset #2,regc(regs) ;CBD1 SET 2,C jmp (return) set2d bset #2,regd(regs) ;CBD2 SET 2,D jmp (return) set2e bset #2,rege(regs) ;CBD3 SET 2,E jmp (return) set2h bset #2,regh(regs) ;CBD4 SET 2,H jmp (return) set2l bset #2,regl(regs) ;CBD5 SET 2,L jmp (return) set2m move.w regh(regs),d0 ;CBD6 SET 2,M bset #2,0(targbase,d0.l) jmp (return) set2a bset #2,rega ;CBD7 SET 2,A jmp (return) set3b bset #3,regb(regs) ;CBD8 SET 3,B jmp (return) set3c bset #3,regc(regs) ;CBD9 SET 3,C jmp (return) set3d bset #3,regd(regs) ;CBDA SET 3,D jmp (return) set3e bset #3,rege(regs) ;CBDB SET 3,E jmp (return) set3h bset #3,regh(regs) ;CBDC SET 3,H jmp (return) set3l bset #3,regl(regs) ;CBDD SET 3,L jmp (return) set3m move.w regh(regs),d0 ;CBDE SET 3,M bset #3,0(targbase,d0.l) jmp (return) set3a bset #3,rega ;CBDF SET 3,A jmp (return) set4b bset #4,regb(regs) ;CBE0 SET 4,B jmp (return) set4c bset #4,regc(regs) ;CBE1 SET 4,C jmp (return) set4d bset #4,regd(regs) ;CBE2 SET 4,D jmp (return) set4e bset #4,rege(regs) ;CBE3 SET 4,E jmp (return) set4h bset #4,regh(regs) ;CBE4 SET 4,H jmp (return) set4l bset #4,regl(regs) ;CBE5 SET 4,L jmp (return) set4m move.w regh(regs),d0 ;CBE6 SET 4,M bset #4,0(targbase,d0.l) jmp (return) set4a bset #4,rega ;CBE7 SET 4,A jmp (return) set5b bset #5,regb(regs) ;CBE8 SET 5,B jmp (return) set5c bset #5,regc(regs) ;CBE9 SET 5,C jmp (return) set5d bset #5,regd(regs) ;CBEA SET 5,D jmp (return) set5e bset #5,rege(regs) ;CBEB SET 5,E jmp (return) set5h bset #5,regh(regs) ;CBEC SET 5,H jmp (return) set5l bset #5,regl(regs) ;CBED SET 5,L jmp (return) set5m move.w regh(regs),d0 ;CBEE SET 5,M bset #5,0(targbase,d0.l) jmp (return) set5a bset #5,rega ;CBEF SET 5,A jmp (return) set6b bset #6,regb(regs) ;CBF0 SET 6,B jmp (return) set6c bset #6,regc(regs) ;CBF1 SET 6,C jmp (return) set6d bset #6,regd(regs) ;CBF2 SET 6,D jmp (return) set6e bset #6,rege(regs) ;CBF3 SET 6,E jmp (return) set6h bset #6,regh(regs) ;CBF4 SET 6,H jmp (return) set6l bset #6,regl(regs) ;CBF5 SET 6,L jmp (return) set6m move.w regh(regs),d0 ;CBF6 SET 6,M bset #6,0(targbase,d0.l) jmp (return) set6a bset #6,rega ;CBF7 SET 6,A jmp (return) set7b bset #7,regb(regs) ;CBF8 SET 7,B jmp (return) set7c bset #7,regc(regs) ;CBF9 SET 7,C jmp (return) set7d bset #7,regd(regs) ;CBFA SET 7,D jmp (return) set7e bset #7,rege(regs) ;CBFB SET 7,E jmp (return) set7h bset #7,regh(regs) ;CBFC SET 7,H jmp (return) set7l bset #7,regl(regs) ;CBFD SET 7,L jmp (return) set7m move.w regh(regs),d0 ;CBFE SET 7,M bset #7,0(targbase,d0.l) jmp (return) set7a bset #7,rega ;CBFF SET 7,A jmp (return) dadixb move.w regb(regs),d0 ;DD09 DAD IX,B add.w d0,regix(regs) docyf dadixd move.w regd(regs),d0 ;DD19 DAD IX,D add.w d0,regix(regs) docyf lxiix move.b (pseudopc)+,regxl(regs) ;DD21 LXI IX,nnnn move.b (pseudopc)+,regxh(regs) jmp (return) sixd lsxxd ;DD22 SIXD addr move.b regxl(regs),(a0)+ move.b regxh(regs),(a0) jmp (return) inxix addq.w #1,regix(regs) ;DD23 INX IX jmp (return) inrxh addq.b #1,regxh(regs) ;DD24 INR XH (undocumented) inrflag dcrxh subq.b #1,regxh(regs) ;DD25 DCR XH (undocumented) inrflag mvixh move.b (pseudopc)+,regxh(regs) ;DD26 MVI XH,nn (undocumented) jmp (return) dadixx asl.w regix(regs) ;DD29 DAD IX,IX (multiply by 2) docyf lixd lsxxd ;DD2A LIXD addr move.b (a0)+,regxl(regs) move.b (a0),regxh(regs) jmp (return) dcxix subq.w #1,regix(regs) ;DD2B DCX IX jmp (return) inrxl addq.b #1,regxl(regs) ;DD2C INR XL (undocumented) inrflag dcrxl subq.b #1,regxl(regs) ;DD2D DCR XL (undocumented) inrflag mvixl move.b (pseudopc)+,regxl(regs) ;DD2E MVI XL,nn (undocumented) jmp (return) inrix calcind x ;DD34 INR (IX+d) addq.b #1,0(targbase,d0.l) inrflag dcrix calcind x ;DD35 DCR (IX+d) subq.b #1,0(targbase,d0.l) inrflag mviix calcind x ;DD36 MVI (IX+d),nn move.b (pseudopc)+,0(targbase,d0.l) jmp (return) dadixs move.l pseudosp,d0 ;DD39 DAD IX,SP sub.l targbase,d0 add.w d0,regix(regs) docyf movbxh move.b regxh(regs),regb(regs) ;DD44 MOV B,XH (undocumented) jmp (return) movbxl move.b regxl(regs),regb(regs) ;DD45 MOV B,XL (undocumented) jmp (return) movbix calcind x ;DD46 MOV B,(IX+d) move.b 0(targbase,d0.l),regb(regs) jmp (return) movcxh move.b regxh(regs),regc(regs) ;DD4C MOV C,XH (undocumented) jmp (return) movcxl move.b regxl(regs),regc(regs) ;DD4D MOV C,XL (undocumented) jmp (return) movcix calcind x ;DD4E MOV C,(IX+d) move.b 0(targbase,d0.l),regc(regs) jmp (return) movdxh move.b regxh(regs),regd(regs) ;DD54 MOV D,XH (undocumented) jmp (return) movdxl move.b regxl(regs),regd(regs) ;DD55 MOV D,XL (undocumented) jmp (return) movdix calcind x ;DD56 MOV D,(IX+d) move.b 0(targbase,d0.l),regd(regs) jmp (return) movexh move.b regxh(regs),rege(regs) ;DD5C MOV E,XH (undocumented) jmp (return) movexl move.b regxl(regs),rege(regs) ;DD5D MOV E,XL (undocumented) jmp (return) moveix calcind x ;DD5E MOV E,(IX+d) move.b 0(targbase,d0.l),rege(regs) jmp (return) movxhb move.b regb(regs),regxh(regs) ;DD60 MOV XH,B (undocumented) jmp (return) movxhc move.b regc(regs),regxh(regs) ;DD61 MOV XH,C (undocumented) jmp (return) movxhd move.b regd(regs),regxh(regs) ;DD62 MOV XH,D (undocumented) jmp (return) movxhe move.b rege(regs),regxh(regs) ;DD63 MOV XH,E (undocumented) jmp (return) mvxhxh jmp (return) ;DD64 MOV XH,XH (undocumented) mvxhxl move.b regxl(regs),regxh(regs) ;DD65 MOV XH,XL (undocumented) jmp (return) movhix calcind x ;DD66 MOV H,(IX+d) move.b 0(targbase,d0.l),regh(regs) jmp (return) movxlb move.b regb(regs),regxl(regs) ;DD68 MOV XL,B (undocumented) jmp (return) movxlc move.b regc(regs),regxl(regs) ;DD69 MOV XL,C (undocumented) jmp (return) movxld move.b regd(regs),regxl(regs) ;DD6A MOV XL,D (undocumented) jmp (return) movxle move.b rege(regs),regxl(regs) ;DD6B MOV XL,E (undocumented) jmp (return) mvxlxh move.b regxh(regs),regxl(regs) ;DD6C MOV XL,XH (undocumented) jmp (return) mvxlxl jmp (return) ;DD6D MOV XL,XL (undocumented) movlix calcind x ;DD6E MOV L,(IX+d) move.b 0(targbase,d0.l),regl(regs) jmp (return) movixb calcind x ;DD70 MOV (IX+d),B move.b regb(regs),0(targbase,d0.l) jmp (return) movixc calcind x ;DD71 MOV (IX+d),C move.b regc(regs),0(targbase,d0.l) jmp (return) movixd calcind x ;DD72 MOV (IX+d),D move.b regd(regs),0(targbase,d0.l) jmp (return) movixe calcind x ;DD73 MOV (IX+d),E move.b rege(regs),0(targbase,d0.l) jmp (return) movixh calcind x ;DD74 MOV (IX+d),H move.b regh(regs),0(targbase,d0.l) jmp (return) movixl calcind x ;DD75 MOV (IX+d),L move.b regl(regs),0(targbase,d0.l) jmp (return) movixa calcind x ;DD77 MOV (IX+d),A move.b rega,0(targbase,d0.l) jmp (return) movaxh move.b regxh(regs),rega ;DD7C MOV A,XH (undocumented) jmp (return) movaxl move.b regxl(regs),rega ;DD7D MOV A,XL (undocumented) jmp (return) movaix calcind x ;DD7E MOV A,(IX+d) move.b 0(targbase,d0.l),rega jmp (return) addxh move.b regxh(regs),d0 ;DD84 ADD XH (undocumented) addflag addxl move.b regxl(regs),d0 ;DD85 ADD XL (undocumented) addflag addix calcind x ;DD86 ADD (IX+d) move.b 0(targbase,d0.l),d0 addflag adcxh move.b regf,regop3(regs) ;DD8C ADC XH (undocumented) asr.b #1,regf move.b regxh(regs),d0 adcflag adcxl move.b regf,regop3(regs) ;DD8E ADC XL (undocumented) asr.b #1,regf move.b regxl(regs),d0 adcflag adcix move.b regf,regop3(regs) ;DD8E ADC (IX+d) calcind x asr.b #1,regf move.b 0(targbase,d0.l),d0 adcflag subxh sub.b regxh(regs),rega ;DD94 SUB XH (undocumented) setflag subxl sub.b regxl(regs),rega ;DD95 SUB XL (undocumented) setflag subix calcind x ;DD96 SUB (IX+d) sub.b 0(targbase,d0.l),rega setflag sbbxh asr.b #1,regf ;DD9C SBB XH (undocumented) move.b regxh(regs),d0 sbbflag sbbxl asr.b #1,regf ;DD9D SBB XL (undocumented) move.b regxl(regs),d0 sbbflag sbbix calcind x ;DD9E SBB (IX+d) asr.b #1,regf move.b 0(targbase,d0.l),d0 sbbflag anaxh and.b regxh(regs),rega ;DDA4 ANA XH (undocumented) move.b 16(flagptr,rega.w),regf jmp (return) anaxl and.b regxl(regs),rega ;DDA5 ANA XL (undocumented) move.b 16(flagptr,rega.w),regf jmp (return) anaix calcind x ;DDA6 ANA (IX+d) and.b 0(targbase,d0.l),rega move.b 16(flagptr,rega.w),regf jmp (return) xraxh move.b regxh(regs),d0 ;DDAC XRA XH (undocumented) eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xraxl move.b regxl(regs),d0 ;DDAD XRA XL (undocumented) eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) xraix calcind x ;DDAE XRA (IX+d) move.b 0(targbase,d0.l),d0 eor.b d0,rega move.b 16(flagptr,rega.w),regf jmp (return) oraxh or.b regxh(regs),rega ;DDB4 ORA XH (undocumented) move.b 16(flagptr,rega.w),regf jmp (return) oraxl or.b regxl(regs),rega ;DDB5 ORA XL (undocumented) move.b 16(flagptr,rega.w),regf jmp (return) oraix calcind x ;DDB6 ORA (IX+d) or.b 0(targbase,d0.l),rega move.b 16(flagptr,rega.w),regf jmp (return) cmpxh cmp.b regxh(regs),rega ;DDBC CMP XH (undocumented) setflag cmpxl cmp.b regxl(regs),rega ;DDBD CMP XL (undocumented) setflag rlcix move.b 0(targbase,d0.l),d0 ;DDCB06 RLC (IX+d) rol.b #1,d0 setflag SETONLY move.b d0,0(targbase,d0.l) jmp (return) rrcix move.b 0(targbase,d0.l),d1 ;DDCB0E RRC (IX+d) ror.b #1,d0 setflag SETONLY move.b d0,0(targbase,d0.l) jmp (return) rlix move.b 0(targbase,d0.l),d1 ;DDCB16 RL (IX+d) roxr.b #1,regf roxl.b #1,d1 roxl.b #1,regf move.b d1,0(targbase,d0.l) jmp (return) rrix move.b 0(targbase,d0.l),d1 ;DDCB1E RR (IX+d) roxr.b #1,regf roxr.b #1,d1 roxl.b #1,regf move.b d1,0(targbase,d0.l) jmp (return) slaix move.b 0(targbase,d0.l),d1 ;DDCB26 SLA (IX+d) asl.b #1,d1 bcs.s slaixc bclr #0,regf move.b d1,0(targbase,d0.l) jmp (return) slaixc bset #0,regf move.b d1,0(targbase,d0.l) jmp (return) sraix move.b 0(targbase,d0.l),d1 ;DDCB2E SRA (IX+d) asr.b #1,d1 bcs.s sraixc bclr #0,regf move.b d1,0(targbase,d0.l) jmp (return) sraixc bset #0,regf move.b d1,0(targbase,d0.l) jmp (return) srlix move.b 0(targbase,d0.l),d1 ;DDCB3E SRL (IX+d) lsr.b #1,d1 bcs.s srlixc bclr #0,regf move.b d1,0(targbase,d0.l) jmp (return) srlixc bset #0,regf move.b d1,0(targbase,d0.l) jmp (return) bit0ix btst #0,0(targbase,d0.l) ;DDCB46 BIT 0,(IX+d) dozf bit1ix btst #1,0(targbase,d0.l) ;DDCB4E BIT 1,(IX+d) dozf bit2ix btst #2,0(targbase,d0.l) ;DDCB56 BIT 2,(IX+d) dozf bit3ix btst #3,0(targbase,d0.l) ;DDCB5E BIT 3,(IX+d) dozf bit4ix btst #4,0(targbase,d0.l) ;DDCB66 BIT 4,(IX+d) dozf bit5ix btst #5,0(targbase,d0.l) ;DDCB6E BIT 5,(IX+d) dozf bit6ix btst #6,0(targbase,d0.l) ;DDCB76 BIT 6,(IX+d) dozf bit7ix btst #7,0(targbase,d0.l) ;DDCB7E BIT 7,(IX+d) dozf res0ix bclr #0,0(targbase,d0.l) ;DDCB86 RES 0,(IX+d) jmp (return) res1ix bclr #1,0(targbase,d0.l) ;DDCB8E RES 1,(IX+d) jmp (return) res2ix bclr #2,0(targbase,d0.l) ;DDCB96 RES 2,(IX+d) jmp (return) res3ix bclr #3,0(targbase,d0.l) ;DDCB9E RES 3,(IX+d) jmp (return) res4ix bclr #4,0(targbase,d0.l) ;DDCBA6 RES 4,(IX+d) jmp (return) res5ix bclr #5,0(targbase,d0.l) ;DDCBAE RES 5,(IX+d) jmp (return) res6ix bclr #6,0(targbase,d0.l) ;DDCBB6 RES 6,(IX+d) jmp (return) res7ix bclr #7,0(targbase,d0.l) ;DDCBBE RES 7,(IX+d) jmp (return) set0ix bset #0,0(targbase,d0.l) ;DDCBC6 SET 0,(IX+d) jmp (return) set1ix bset #1,0(targbase,d0.l) ;DDCBCE SET 1,(IX+d) jmp (return) set2ix bset #2,0(targbase,d0.l) ;DDCBD6 SET 2,(IX+d) jmp (return) set3ix bset #3,0(targbase,d0.l) ;DDCBDE SET 3,(IX+d) jmp (return) set4ix bset #4,0(targbase,d0.l) ;DDCBE6 SET 4,(IX+d) jmp (return) set5ix bset #5,0(targbase,d0.l) ;DDCBEE SET 5,(IX+d) jmp (return) set6ix bset #6,0(targbase,d0.l) ;DDCBF6 SET 6,(IX+d) jmp (return) set7ix bset #7,0(targbase,d0.l) ;DDCBFE SET 7,(IX+d) jmp (return) cmpix calcind x ;DDBE CMP (IX+d) cmp.b 0(targbase,d0.l),rega setflag popix move.b (pseudosp)+,regxl(regs) ;DDE1 POP IX move.b (pseudosp)+,regxh(regs) jmp (return) xtix move.b regxl(regs),d0 ;DDE3 XTIX move.b (pseudosp),regxl(regs) move.b d0,(pseudosp) move.b regxh(regs),d0 move.b 1(pseudosp),regxh(regs) move.b d0,1(pseudosp) jmp (return) pushix move.b regxh(regs),-(pseudosp) ;DDE5 PUSH IX move.b regxl(regs),-(pseudosp) jmp (return) pcix move.w regix(regs),d0 ;DDE9 PCIX lea 0(targbase,d0.l),pseudopc jmp (return) spix move.w regix(regs),d0 ;DDF9 SPIX lea 0(targbase,d0.l),pseudosp jmp (return) inbc move.b regc(regs),d0 ;ED40 IN B,(C) lea regb(regs),a0 jsr inp jmp (return) outcb move.b regc(regs),d0 ;ED41 OUT (C),B lea regb(regs),a0 jsr outp jmp (return) dsbbb ashl sub,b ;ED42 DSBB B sbcd lsxxd ;ED43 SBCD addr move.b regc(regs),(a0)+ move.b regb(regs),(a0) jmp (return) nega neg.b rega ;ED44 NEG setflag retn equ ret ;ED45 RETN (treated as RET) im0 jmp (return) ;ED46 IM0 (set 8080A interrupt mode) moveia move.b rega,regi(regs) ;ED47 MOV I,A jmp (return) incc move.b regc(regs),d0 ;ED48 IN C,(C) lea regc(regs),a0 jsr inp jmp (return) outcc move.b regc(regs),d0 ;ED49 OUT (C),C lea regc(regs),a0 jsr outp jmp (return) dadcb ashl add,b ;ED4A DADC B lbcd lsxxd ;ED4B LBCD addr move.b (a0)+,regc(regs) move.b (a0),regb(regs) jmp (return) reti equ ret ;ED4D RETI (treated as RET) movera jmp (return) ;ED4F MOV R,A (ignored) indc move.b regc(regs),d0 ;ED50 IN D,(C) lea regd(regs),a0 jsr inp jmp (return) outcd move.b regc(regs),d0 ;ED51 OUT (C),D lea regd(regs),a0 jsr outp jmp (return) dsbbd ashl sub,d ;ED52 DSBB D sded lsxxd ;ED53 SDED addr move.b rege(regs),(a0)+ move.b regd(regs),(a0) jmp (return) im1 jmp (return) ;ED56 IM1 (ignored) moveai move.b regi(regs),rega ;ED57 MOV A,I jmp (return) inec move.b regc(regs),d0 ;ED58 IN E,(C) lea rege(regs),a0 jsr inp jmp (return) outce move.b regc(regs),d0 ;ED59 OUT (C),E lea rege(regs),a0 jsr outp jmp (return) dadcd ashl add,d ;ED5A DADC D lded lsxxd ;ED5B LDED addr move.b (a0)+,rege(regs) move.b (a0),regd(regs) jmp (return) im2 jmp (return) ;ED5E IM2 (ignored) * ;ED5F MOV A,R (handled in simcpm1) inhc move.b regc(regs),d0 ;ED60 IN H,(C) lea regh(regs),a0 jsr inp jmp (return) outch move.b regc(regs),d0 ;ED61 OUT (C),H lea regh(regs),a0 jsr outp jmp (return) dsbbh ashl sub,h ;ED62 DSBB H * ;ED63 SHLD addr (uses 8080 routine 22) rrd move.w regh(regs),d0 ;ED67 RRD lea 0(targbase,d0.l),a0 ;Address of memory operand move.b rega,d1 ;Original contents of the accumulator move.b (a0),d0 and.b regcon0f,d0 ;This part shifts out of the memory operand. and.b #$F0,rega or.b d0,rega ;Adjust the accumulator. move.b (a0),d0 lsr.b #4,d0 ;Shift the memory operand 4 bits right. and.b regcon0f,d1 ;Low-order nybble of original accumulator lsl.b #4,d1 ;It moves to the high-order nybble. or.b d1,d0 ;Put it into the memory operand. move.b d0,(a0) ;Restore the new memory operand. jmp (return) inlc move.b regc(regs),d0 ;ED68 IN L,(C) lea regl(regs),a0 jsr inp jmp (return) outcl move.b regc(regs),d0 ;ED69 OUT (C),L lea regl(regs),a0 jsr outp jmp (return) dadch ashl add,h ;ED6A DADC H * ;ED6B LHLD addr (uses 8080 routine 2A) rld move.w regh(regs),d0 ;ED6F RLD lea 0(targbase,d0.l),a0 ;Address of memory operand move.b rega,d1 ;Original contents of the accumulator move.b (a0),d0 lsr.b #4,d0 ;This part shifts out of the memory operand. and.b #$F0,rega or.b d0,rega ;Adjust the accumulator. move.b (a0),d0 lsl.b #4,d0 ;Shift the memory operand 4 bits left. and.b regcon0f,d1 ;Low-order nybble of original accumulator or.b d1,d0 ;Put it into the memory operand. move.b d0,(a0) ;Restore the new memory operand. jmp (return) inmc move.b regc(regs),d0 ;ED70 IN M,(C) move.w regh(regs),d1 lea 0(targbase,d1.l),a0 jsr inp jmp (return) outcm move.b regc(regs),d0 ;ED71 OUT (C),M move.w regh(regs),d1 lea 0(targbase,d1.l),a0 jsr outp jmp (return) dsbbs move.w pseudosp,d0 ;ED72 DSBB SP move.w regh(regs),d1 asr.b #1,regf ;Put simulated carry flag in 68000's X flag. ori #4,ccr ;Set the 68000's Z flag for ADDX/SUBX. subx.w d0,d1 ifeq x680x0 ;68000 only move sr,d0 endc ifne x680x0 ;68010 and higher dc.w $42C0 ;MOVE CCR,D0 endc and.w regcon0f,d0 move.b 0(flagptr,d0.w),regf move.w d1,regh(regs) jmp (return) sspd lsxxd ;ED73 SSPD addr move.l pseudosp,d0 sub.l targbase,d0 move.b d0,(a0)+ lsr.w #8,d0 move.b d0,(a0) jmp (return) inac move.b regc(regs),d0 ;ED78 IN A,(C) lea tmprega,a0 jsr inp move.b tmprega,rega jmp (return) outca move.b regc(regs),d0 ;ED79 OUT (C),A lea tmprega,a0 move.b rega,(a0) jsr outp jmp (return) dadcs move.w pseudosp,d0 ;ED7A DADC SP move.w regh(regs),d1 asr.b #1,regf ;Put simulated carry flag in 68000's X flag. ori #4,ccr ;Set the 68000's Z flag for ADDX/SUBX. addx.w d0,d1 ifeq x680x0 ;68000 only move sr,d0 endc ifne x680x0 ;68010 and higher dc.w $42C0 ;MOVE CCR,D0 endc and.w regcon0f,d0 move.b 0(flagptr,d0.w),regf move.w d1,regh(regs) jmp (return) lspd lsxxd ;ED7B LSPD addr moveq #0,d0 move.b 1(a0),d0 lsl.w #8,d0 move.b (a0),d0 movea.l d0,pseudosp adda.l targbase,pseudosp jmp (return) ldi moveq #0,d1 ;EDA0 LDI move.w regh(regs),d0 move.w regd(regs),d1 move.b 0(targbase,d0.l),0(targbase,d1.l) addq.w #1,regh(regs) addq.w #1,regd(regs) subq.w #1,regb(regs) beq.s 1$ ori.b #4,regf andi.b #$ED,regf jmp (return) 1$ andi.b #$E9,regf jmp (return) cmpi move.w regh(regs),d0 ;EDA1 CMPI (Z-80 mnemonic is CPI) cmp.b 0(targbase,d0.l),rega setflag SETONLY addq.w #1,regh(regs) subq.w #1,regb(regs) beq.s 1$ ori.b #6,regf jmp (return) 1$ ori.b #2,regf jmp (return) ini move.b regc(regs),d0 ;EDA2 INI move.w regh(regs),d1 lea 0(targbase,d1.l),a0 jsr inp addq.w #1,regh(regs) subq.b #1,regb(regs) jmp (return) outi move.b regc(regs),d0 ;EDA3 OUTI move.w regh(regs),d1 lea 0(targbase,d1.l),a0 jsr outp addq.w #1,regh(regs) subq.b #1,regb(regs) jmp (return) ldd moveq #0,d1 ;EDA8 LDD move.w regh(regs),d0 move.w regd(regs),d1 move.b 0(targbase,d0.l),0(targbase,d1.l) subq.w #1,regh(regs) subq.w #1,regd(regs) subq.w #1,regb(regs) beq.s 1$ ori.b #4,regf andi.b #$ED,regf jmp (return) 1$ andi.b #$E9,regf jmp (return) cpd move.w regh(regs),d0 ;EDA9 CPD cmp.b 0(targbase,d0.l),rega setflag SETONLY subq.w #1,regh(regs) subq.w #1,regb(regs) beq.s 1$ ori.b #6,regf jmp (return) 1$ ori.b #2,regf jmp (return) ind move.b regc(regs),d0 ;EDAA IND move.w regh(regs),d1 lea 0(targbase,d1.l),a0 jsr inp subq.w #1,regh(regs) subq.b #1,regb(regs) jmp (return) outd move.b regc(regs),d0 ;EDAB OUTD move.w regh(regs),d1 lea 0(targbase,d1.l),a0 jsr outp subq.w #1,regh(regs) subq.b #1,regb(regs) jmp (return) ldir move.l a5,-(sp) ;EDB0 LDIR move.w regb(regs),d1 ;Grab count. move.w regh(regs),d0 ;Source lea 0(targbase,d0.l),a0 move.w regd(regs),d0 ;Destination lea 0(targbase,d0.l),a5 add.w d1,regh(regs) ;Adjust Z-80 registers now. add.w d1,regd(regs) clr.w regb(regs) andi.b #$C1,regf subq.w #1,d1 ;Adjust count for DBRA. ldirlop move.b (a0)+,(a5)+ dbra d1,ldirlop move.l (sp)+,a5 jmp (return) cpir move.w regb(regs),d1 ;EDB1 CPIR subq.w #1,d1 ;Grab count, adjust for DBRA. move.w regh(regs),d0 ;Source lea 0(targbase,d0.l),a0 cpirlop addq.w #1,d0 cmp.b (a0)+,rega dbeq d1,cpirlop bne.s cpirnom move.w d0,regh(regs) ;Restore Z-80 registers. move.w d1,regb(regs) beq.s 1$ moveq #$46,regf ;Found, in the string. jmp (return) 1$ moveq #$42,regf ;Found, but at last place. jmp (return) cpirnom move.w d0,regh(regs) ;Restore Z-80 registers. addq.w #1,d1 move.w d1,regb(regs) beq.s 2$ moveq #6,regf jmp (return) 2$ moveq #2,regf jmp (return) inir move.b regc(regs),d1 ;EDB2 INIR move.w regh(regs),d0 lea 0(targbase,d0.l),a0 jsr inp addq.w #1,regh(regs) subq.b #1,regb(regs) bne.s inir jmp (return) otir move.b regc(regs),d1 ;EDB3 OTIR move.w regh(regs),d0 lea 0(targbase,d0.l),a0 jsr outp addq.w #1,regh(regs) subq.b #1,regb(regs) bne.s otir jmp (return) lddr move.l a5,-(sp) ;EDB8 LDDR move.w regb(regs),d1 ;Grab count. move.w regh(regs),d0 ;Source lea 1(targbase,d0.l),a0 move.w regd(regs),d0 ;Destination lea 1(targbase,d0.l),a5 sub.w d1,regh(regs) ;Adjust Z-80 registers now. sub.w d1,regd(regs) clr.w regb(regs) andi.b #$C1,regf subq.w #1,d1 ;Adjust count for DBRA. lddrlop move.b -(a0),-(a5) dbra d1,lddrlop move.l (sp)+,a5 jmp (return) cpdr move.w regb(regs),d1 ;EDB9 CPDR subq.w #1,d1 ;Grab count, adjust for DBRA. move.w regh(regs),d0 ;Source lea 1(targbase,d0.l),a0 cpdrlop subq.w #1,d0 cmp.b -(a0),rega dbeq d1,cpdrlop bne.s cpdrnom move.w d0,regh(regs) ;Restore Z-80 registers. move.w d1,regb(regs) beq.s 1$ moveq #$46,regf ;Found, in the string. jmp (return) 1$ moveq #$42,regf ;Found, but at last place. jmp (return) cpdrnom move.w d0,regh(regs) addq.w #1,d1 move.w d1,regb(regs) beq.s 2$ moveq #6,regf jmp (return) 2$ moveq #2,regf jmp (return) indr move.b regc(regs),d1 ;EDBA INDR move.w regh(regs),d0 lea 0(targbase,d0.l),a0 jsr inp subq.w #1,regh(regs) subq.b #1,regb(regs) bne.s indr jmp (return) otdr move.b regc(regs),d1 ;EDBB OTDR move.w regh(regs),d0 lea 0(targbase,d0.l),a0 jsr outp subq.w #1,regh(regs) subq.b #1,regb(regs) bne.s otdr jmp (return) dadiyb move.w regb(regs),d0 ;FD09 DAD IY,B add.w d0,regiy(regs) docyf dadiyd move.w regd(regs),d0 ;FD19 DAD IY,D add.w d0,regiy(regs) docyf lxiiy move.b (pseudopc)+,regyl(regs) ;FD21 LXI IY,nnnn move.b (pseudopc)+,regyh(regs) jmp (return) siyd lsxxd ;FD22 SIYD addr move.b regyl(regs),(a0)+ move.b regyh(regs),(a0) jmp (return) inxiy addq.w #1,regiy(regs) ;FD23 INX IY jmp (return) inryh addq.b #1,regyh(regs) ;FD24 INR YH (undocumented) inrflag dcryh subq.b #1,regyh(regs) ;FD25 DCR YH (undocumented) inrflag mviyh move.b (pseudopc)+,regyh(regs) ;FD26 MVI YH,nn (undocumented) jmp (return) dadiyy asl.w regiy(regs) ;FD29 DAD IY,IY (multiply by 2) docyf liyd lsxxd ;FD2A LIYD addr move.b (a0)+,regyl(regs) move.b (a0),regyh(regs) jmp (return) dcxiy subq.w #1,regiy(regs) ;FD2B DCX IY jmp (return) inryl addq.b #1,regyl(regs) ;FD2C INR YL (undocumented) inrflag dcryl subq.b #1,regyl(regs) ;FD2D DCR YL (undocumented) inrflag mviyl move.b (pseudopc)+,regyl(regs) ;FD2E MVI YL,nn (undocumented) jmp (return) inriy calcind y ;FD34 INR (IY+d) addq.b #1,0(targbase,d0.l) inrflag dcriy calcind y ;FD35 DCR (IY+d) subq.b #1,0(targbase,d0.l) inrflag mviiy calcind y ;FD36 MVI (IY+d),nn move.b (pseudopc)+,0(targbase,d0.l) jmp (return) dadiys move.l pseudosp,d0 ;FD39 DAD IY,SP sub.l targbase,d0 add.w d0,regiy(regs) docyf movbyh move.b regyh(regs),regb(regs) ;FD44 MOV B,YH (undocumented) jmp (return) movbyl move.b regyl(regs),regb(regs) ;FD45 MOV B,YL (undocumented) jmp (return) movbiy calcind y ;FD46 MOV B,(IY+d) move.b 0(targbase,d0.l),regb(regs) jmp (return) movcyh move.b regyh(regs),regc(regs) ;FD4C MOV C,YH (undocumented) jmp (return) movcyl move.b regyl(regs),regc(regs) ;FD4D MOV C,YL (undocumented) jmp (return) movciy calcind y ;FD4E MOV C,(IY+d) move.b 0(targbase,d0.l),regc(regs) jmp (return) movdyh move.b regyh(regs),regd(regs) ;FD54 MOV D,YH (undocumented) jmp (return) movdyl move.b regyl(regs),regd(regs) ;FD55 MOV D,YL (undocumented) jmp (return) movdiy calcind y ;FD56 MOV D,(IY+d) move.b 0(targbase,d0.l),regd(regs) jmp (return) moveyh move.b regyh(regs),rege(regs) ;FD5C MOV E,YH (undocumented) jmp (return) moveyl move.b regyl(regs),rege(regs) ;FD5D MOV E,YL (undocumented) jmp (return) moveiy calcind y ;FD5E MOV E,(IY+d) move.b 0(targbase,d0.l),rege(regs) jmp (return) movyhb move.b regb(regs),regyh(regs) ;FD60 MOV YH,B (undocumented) jmp (return) movyhc move.b regc(regs),regyh(regs) ;FD61 MOV YH,C (undocumented) jmp (return) movyhd move.b regd(regs),regyh(regs) ;FD62 MOV YH,D (undocumented) jmp (return) movyhe move.b rege(regs),regyh(regs) ;FD63 MOV YH,E (undocumented) jmp (return) mvyhyh jmp (return) ;FD64 MOV YH,YH (undocumented) mvyhyl move.b regyl(regs),regyh(regs) ;FD65 MOV YH,YL (undocumented) jmp (return) movhiy calcind y ;FD66 MOV H,(IY+d) move.b 0(targbase,d0.l),regh(regs) jmp (return) movylb move.b regb(regs),regyl(regs) ;FD68 MOV YL,B (undocumented) jmp (return) movylc move.b regc(regs),regyl(regs) ;FD69 MOV YL,C (undocumented) jmp (return) movyld move.b regd(regs),regyl(regs) ;FD6A MOV YL,D (undocumented) jmp (return) movyle move.b rege(regs),regyl(regs) ;FD6B MOV YL,E (undocumented) jmp (return) mvylyh move.b regyh(regs),regyl(regs) ;FD6C MOV YL,YH (undocumented) jmp (return) mvylyl jmp (return) ;FD6D MOV YL,YL (undocumented) movliy calcind y ;FD6E MOV L,(IY+d) move.b 0(targbase,d0.l),regl(regs) jmp (return) moviyb calcind y ;FD70 MOV (IY+d),B move.b regb(regs),0(targbase,d0.l) jmp (return) moviyc calcind y ;FD71 MOV (IY+d),C move.b regc(regs),0(targbase,d0.l) jmp (return) moviyd calcind y ;FD72 MOV (IY+d),D move.b regd(regs),0(targbase,d0.l) jmp (return) moviye calcind y ;FD73 MOV (IY+d),E move.b rege(regs),0(targbase,d0.l) jmp (return) moviyh calcind y ;FD74 MOV (IY+d),H move.b regh(regs),0(targbase,d0.l) jmp (return) moviyl calcind y ;FD75 MOV (IY+d),L move.b regl(regs),0(targbase,d0.l) jmp (return) moviya calcind y ;FD77 MOV (IY+d),A move.b rega,0(targbase,d0.l) jmp (return) movayh move.b regyh(regs),rega ;FD7C MOV A,YH (undocumented) jmp (return) movayl move.b regyl(regs),rega ;FD7D MOV A,YL (undocumented) jmp (return) movaiy calcind y ;FD7E MOV A,(IY+d) move.b 0(targbase,d0.l),rega jmp (return) addyh move.b regyh(regs),d0 ;FD84 ADD YH (undocumented) addflag addyl move.b regyl(regs),d0 ;FD85 ADD YL (undocumented) addflag addiy calcind y ;FD86 ADD (IY+d) move.b 0(targbase,d0.l),d0 addflag adcyh move.b regf,regop3(regs) ;FD8C ADC YH (undocumented) asr.b #1,regf move.b regyh(regs),d0 adcflag adcyl move.b regf,regop3(regs) ;FD8E ADC YL (undocumented) asr.b #1,regf move.b regyl(regs),d0 adcflag adciy move.b regf,regop3(regs) ;FD8E ADC (IY+d) calcind y asr.b #1,regf move.b 0(targbase,d0.l),d0 adcflag subyh sub.b regyh(regs),rega ;FD94 SUB YH (undocumented) setflag subyl sub.b regyl(regs),rega ;FD95 SUB YL (undocumented) setflag subiy calcind y ;FD96 SUB (IY+d) sub.b 0(targbase,d0.l),rega setflag sbbyh asr.b #1,regf ;FD9C SBB YH (undocumented) move.b regyh(regs),d0 SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.