From cb3f15a1544007cc555368ff67393cdec21362cf Mon Sep 17 00:00:00 2001 From: Astrid Smith Date: Mon, 7 Jun 2010 13:15:17 -0700 Subject: Cleaned up instruction dispatch some --- main.asm | 557 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 295 insertions(+), 262 deletions(-) (limited to 'main.asm') diff --git a/main.asm b/main.asm index 3b06423..4d2d35a 100644 --- a/main.asm +++ b/main.asm @@ -84,6 +84,8 @@ HILO MACRO ; 6 cycles, 2 bytes ENDM DONE MACRO ; 8 cycles, 2 bytes + ;; calc84maniac suggests putting emu_fetch into this in order + ;; to save 8 cycles per instruction jmp (a2) ENDM @@ -98,276 +100,301 @@ emu_setup: eor.l a4,a4 movea emu_instr_table,a3 movea emu_fetch(pc),a2 - ;; FIXME + ;; XXX finish refresh: ; screen refresh routine - ;; FIXME + ;; XXX Do this rts emu_fetch: ;; Will this even work? - move.b (a4)+,d0 - movea (a3,d0),a5 - jmp a5 + eor.w d0,d0 ; 4 cycles + move.b (a4)+,d0 ; 8 cycles + asl #1,d0 ; 6 cycles + movea (a3,d0.w),a5 ;14 cycles + jmp (a5) ; 8 cycles + ; Total: 40 cycles + +emu_alt_fetch: + ;; Allows me to get rid of the jump table and save cycles at + ;; the same time, but requires spacing instruction routines + ;; evenly + eor.w d0,d0 ; 4 cycles + move.b (a4)+,d0 ; 8 cycles + asl #5,d0 ; 6 cycles + jmp (a3,d0) ;14 cycles + ;; overhead: 32 cycles + +;;; ======================================================================== +;;; ======================================================================== +;;; ___ ___ ======= ============================== +;;; ___( _ ) / _ \ emulation core ==================================== +;;; |_ / _ \| | | | emulation core =================================== +;;; / / (_) | |_| | emulation core ================================== +;;; /___\___/ \___/ emulation core ================================= +;;; ======= ============================== +;;; ======================================================================== +;;; ======================================================================== + emu_instr_table: - dc.w emu_op_00 - dc.w emu_op_01 - dc.w emu_op_02 - dc.w emu_op_03 - dc.w emu_op_04 - dc.w emu_op_05 - dc.w emu_op_06 - dc.w emu_op_07 - dc.w emu_op_08 - dc.w emu_op_09 - dc.w emu_op_0a - dc.w emu_op_0b - dc.w emu_op_0c - dc.w emu_op_0d - dc.w emu_op_0e - dc.w emu_op_0f - dc.w emu_op_10 - dc.w emu_op_11 - dc.w emu_op_12 - dc.w emu_op_13 - dc.w emu_op_14 - dc.w emu_op_15 - dc.w emu_op_16 - dc.w emu_op_17 - dc.w emu_op_18 - dc.w emu_op_19 - dc.w emu_op_1a - dc.w emu_op_1b - dc.w emu_op_1c - dc.w emu_op_1d - dc.w emu_op_1e - dc.w emu_op_1f - dc.w emu_op_20 - dc.w emu_op_21 - dc.w emu_op_22 - dc.w emu_op_23 - dc.w emu_op_24 - dc.w emu_op_25 - dc.w emu_op_26 - dc.w emu_op_27 - dc.w emu_op_28 - dc.w emu_op_29 - dc.w emu_op_2a - dc.w emu_op_2b - dc.w emu_op_2c - dc.w emu_op_2d - dc.w emu_op_2e - dc.w emu_op_2f - dc.w emu_op_30 - dc.w emu_op_31 - dc.w emu_op_32 - dc.w emu_op_33 - dc.w emu_op_34 - dc.w emu_op_35 - dc.w emu_op_36 - dc.w emu_op_37 - dc.w emu_op_38 - dc.w emu_op_39 - dc.w emu_op_3a - dc.w emu_op_3b - dc.w emu_op_3c - dc.w emu_op_3d - dc.w emu_op_3e - dc.w emu_op_3f - dc.w emu_op_40 - dc.w emu_op_41 - dc.w emu_op_42 - dc.w emu_op_43 - dc.w emu_op_44 - dc.w emu_op_45 - dc.w emu_op_46 - dc.w emu_op_47 - dc.w emu_op_48 - dc.w emu_op_49 - dc.w emu_op_4a - dc.w emu_op_4b - dc.w emu_op_4c - dc.w emu_op_4d - dc.w emu_op_4e - dc.w emu_op_4f - dc.w emu_op_50 - dc.w emu_op_51 - dc.w emu_op_52 - dc.w emu_op_53 - dc.w emu_op_54 - dc.w emu_op_55 - dc.w emu_op_56 - dc.w emu_op_57 - dc.w emu_op_58 - dc.w emu_op_59 - dc.w emu_op_5a - dc.w emu_op_5b - dc.w emu_op_5c - dc.w emu_op_5d - dc.w emu_op_5e - dc.w emu_op_5f - dc.w emu_op_60 - dc.w emu_op_61 - dc.w emu_op_62 - dc.w emu_op_63 - dc.w emu_op_64 - dc.w emu_op_65 - dc.w emu_op_66 - dc.w emu_op_67 - dc.w emu_op_68 - dc.w emu_op_69 - dc.w emu_op_6a - dc.w emu_op_6b - dc.w emu_op_6c - dc.w emu_op_6d - dc.w emu_op_6e - dc.w emu_op_6f - dc.w emu_op_70 - dc.w emu_op_71 - dc.w emu_op_72 - dc.w emu_op_73 - dc.w emu_op_74 - dc.w emu_op_75 - dc.w emu_op_76 - dc.w emu_op_77 - dc.w emu_op_78 - dc.w emu_op_79 - dc.w emu_op_7a - dc.w emu_op_7b - dc.w emu_op_7c - dc.w emu_op_7d - dc.w emu_op_7e - dc.w emu_op_7f - dc.w emu_op_80 - dc.w emu_op_81 - dc.w emu_op_82 - dc.w emu_op_83 - dc.w emu_op_84 - dc.w emu_op_85 - dc.w emu_op_86 - dc.w emu_op_87 - dc.w emu_op_88 - dc.w emu_op_89 - dc.w emu_op_8a - dc.w emu_op_8b - dc.w emu_op_8c - dc.w emu_op_8d - dc.w emu_op_8e - dc.w emu_op_8f - dc.w emu_op_90 - dc.w emu_op_91 - dc.w emu_op_92 - dc.w emu_op_93 - dc.w emu_op_94 - dc.w emu_op_95 - dc.w emu_op_96 - dc.w emu_op_97 - dc.w emu_op_98 - dc.w emu_op_99 - dc.w emu_op_9a - dc.w emu_op_9b - dc.w emu_op_9c - dc.w emu_op_9d - dc.w emu_op_9e - dc.w emu_op_9f - dc.w emu_op_a0 - dc.w emu_op_a1 - dc.w emu_op_a2 - dc.w emu_op_a3 - dc.w emu_op_a4 - dc.w emu_op_a5 - dc.w emu_op_a6 - dc.w emu_op_a7 - dc.w emu_op_a8 - dc.w emu_op_a9 - dc.w emu_op_aa - dc.w emu_op_ab - dc.w emu_op_ac - dc.w emu_op_ad - dc.w emu_op_ae - dc.w emu_op_af - dc.w emu_op_b0 - dc.w emu_op_b1 - dc.w emu_op_b2 - dc.w emu_op_b3 - dc.w emu_op_b4 - dc.w emu_op_b5 - dc.w emu_op_b6 - dc.w emu_op_b7 - dc.w emu_op_b8 - dc.w emu_op_b9 - dc.w emu_op_ba - dc.w emu_op_bb - dc.w emu_op_bc - dc.w emu_op_bd - dc.w emu_op_be - dc.w emu_op_bf - dc.w emu_op_c0 - dc.w emu_op_c1 - dc.w emu_op_c2 - dc.w emu_op_c3 - dc.w emu_op_c4 - dc.w emu_op_c5 - dc.w emu_op_c6 - dc.w emu_op_c7 - dc.w emu_op_c8 - dc.w emu_op_c9 - dc.w emu_op_ca - dc.w emu_op_cb - dc.w emu_op_cc - dc.w emu_op_cd - dc.w emu_op_ce - dc.w emu_op_cf - dc.w emu_op_d0 - dc.w emu_op_d1 - dc.w emu_op_d2 - dc.w emu_op_d3 - dc.w emu_op_d4 - dc.w emu_op_d5 - dc.w emu_op_d6 - dc.w emu_op_d7 - dc.w emu_op_d8 - dc.w emu_op_d9 - dc.w emu_op_da - dc.w emu_op_db - dc.w emu_op_dc - dc.w emu_op_dd - dc.w emu_op_de - dc.w emu_op_df - dc.w emu_op_e0 - dc.w emu_op_e1 - dc.w emu_op_e2 - dc.w emu_op_e3 - dc.w emu_op_e4 - dc.w emu_op_e5 - dc.w emu_op_e6 - dc.w emu_op_e7 - dc.w emu_op_e8 - dc.w emu_op_e9 - dc.w emu_op_ea - dc.w emu_op_eb - dc.w emu_op_ec - dc.w emu_op_ed - dc.w emu_op_ee - dc.w emu_op_ef - dc.w emu_op_f0 - dc.w emu_op_f1 - dc.w emu_op_f2 - dc.w emu_op_f3 - dc.w emu_op_f4 - dc.w emu_op_f5 - dc.w emu_op_f6 - dc.w emu_op_f7 - dc.w emu_op_f8 - dc.w emu_op_f9 - dc.w emu_op_fa - dc.w emu_op_fb - dc.w emu_op_fc - dc.w emu_op_fd - dc.w emu_op_fe - dc.w emu_op_ff - + dc.w emu_op_00-emu_instr_table + dc.w emu_op_01-emu_instr_table + dc.w emu_op_02-emu_instr_table + dc.w emu_op_03-emu_instr_table + dc.w emu_op_04-emu_instr_table + dc.w emu_op_05-emu_instr_table + dc.w emu_op_06-emu_instr_table + dc.w emu_op_07-emu_instr_table + dc.w emu_op_08-emu_instr_table + dc.w emu_op_09-emu_instr_table + dc.w emu_op_0a-emu_instr_table + dc.w emu_op_0b-emu_instr_table + dc.w emu_op_0c-emu_instr_table + dc.w emu_op_0d-emu_instr_table + dc.w emu_op_0e-emu_instr_table + dc.w emu_op_0f-emu_instr_table + dc.w emu_op_10-emu_instr_table + dc.w emu_op_11-emu_instr_table + dc.w emu_op_12-emu_instr_table + dc.w emu_op_13-emu_instr_table + dc.w emu_op_14-emu_instr_table + dc.w emu_op_15-emu_instr_table + dc.w emu_op_16-emu_instr_table + dc.w emu_op_17-emu_instr_table + dc.w emu_op_18-emu_instr_table + dc.w emu_op_19-emu_instr_table + dc.w emu_op_1a-emu_instr_table + dc.w emu_op_1b-emu_instr_table + dc.w emu_op_1c-emu_instr_table + dc.w emu_op_1d-emu_instr_table + dc.w emu_op_1e-emu_instr_table + dc.w emu_op_1f-emu_instr_table + dc.w emu_op_20-emu_instr_table + dc.w emu_op_21-emu_instr_table + dc.w emu_op_22-emu_instr_table + dc.w emu_op_23-emu_instr_table + dc.w emu_op_24-emu_instr_table + dc.w emu_op_25-emu_instr_table + dc.w emu_op_26-emu_instr_table + dc.w emu_op_27-emu_instr_table + dc.w emu_op_28-emu_instr_table + dc.w emu_op_29-emu_instr_table + dc.w emu_op_2a-emu_instr_table + dc.w emu_op_2b-emu_instr_table + dc.w emu_op_2c-emu_instr_table + dc.w emu_op_2d-emu_instr_table + dc.w emu_op_2e-emu_instr_table + dc.w emu_op_2f-emu_instr_table + dc.w emu_op_30-emu_instr_table + dc.w emu_op_31-emu_instr_table + dc.w emu_op_32-emu_instr_table + dc.w emu_op_33-emu_instr_table + dc.w emu_op_34-emu_instr_table + dc.w emu_op_35-emu_instr_table + dc.w emu_op_36-emu_instr_table + dc.w emu_op_37-emu_instr_table + dc.w emu_op_38-emu_instr_table + dc.w emu_op_39-emu_instr_table + dc.w emu_op_3a-emu_instr_table + dc.w emu_op_3b-emu_instr_table + dc.w emu_op_3c-emu_instr_table + dc.w emu_op_3d-emu_instr_table + dc.w emu_op_3e-emu_instr_table + dc.w emu_op_3f-emu_instr_table + dc.w emu_op_40-emu_instr_table + dc.w emu_op_41-emu_instr_table + dc.w emu_op_42-emu_instr_table + dc.w emu_op_43-emu_instr_table + dc.w emu_op_44-emu_instr_table + dc.w emu_op_45-emu_instr_table + dc.w emu_op_46-emu_instr_table + dc.w emu_op_47-emu_instr_table + dc.w emu_op_48-emu_instr_table + dc.w emu_op_49-emu_instr_table + dc.w emu_op_4a-emu_instr_table + dc.w emu_op_4b-emu_instr_table + dc.w emu_op_4c-emu_instr_table + dc.w emu_op_4d-emu_instr_table + dc.w emu_op_4e-emu_instr_table + dc.w emu_op_4f-emu_instr_table + dc.w emu_op_50-emu_instr_table + dc.w emu_op_51-emu_instr_table + dc.w emu_op_52-emu_instr_table + dc.w emu_op_53-emu_instr_table + dc.w emu_op_54-emu_instr_table + dc.w emu_op_55-emu_instr_table + dc.w emu_op_56-emu_instr_table + dc.w emu_op_57-emu_instr_table + dc.w emu_op_58-emu_instr_table + dc.w emu_op_59-emu_instr_table + dc.w emu_op_5a-emu_instr_table + dc.w emu_op_5b-emu_instr_table + dc.w emu_op_5c-emu_instr_table + dc.w emu_op_5d-emu_instr_table + dc.w emu_op_5e-emu_instr_table + dc.w emu_op_5f-emu_instr_table + dc.w emu_op_60-emu_instr_table + dc.w emu_op_61-emu_instr_table + dc.w emu_op_62-emu_instr_table + dc.w emu_op_63-emu_instr_table + dc.w emu_op_64-emu_instr_table + dc.w emu_op_65-emu_instr_table + dc.w emu_op_66-emu_instr_table + dc.w emu_op_67-emu_instr_table + dc.w emu_op_68-emu_instr_table + dc.w emu_op_69-emu_instr_table + dc.w emu_op_6a-emu_instr_table + dc.w emu_op_6b-emu_instr_table + dc.w emu_op_6c-emu_instr_table + dc.w emu_op_6d-emu_instr_table + dc.w emu_op_6e-emu_instr_table + dc.w emu_op_6f-emu_instr_table + dc.w emu_op_70-emu_instr_table + dc.w emu_op_71-emu_instr_table + dc.w emu_op_72-emu_instr_table + dc.w emu_op_73-emu_instr_table + dc.w emu_op_74-emu_instr_table + dc.w emu_op_75-emu_instr_table + dc.w emu_op_76-emu_instr_table + dc.w emu_op_77-emu_instr_table + dc.w emu_op_78-emu_instr_table + dc.w emu_op_79-emu_instr_table + dc.w emu_op_7a-emu_instr_table + dc.w emu_op_7b-emu_instr_table + dc.w emu_op_7c-emu_instr_table + dc.w emu_op_7d-emu_instr_table + dc.w emu_op_7e-emu_instr_table + dc.w emu_op_7f-emu_instr_table + dc.w emu_op_80-emu_instr_table + dc.w emu_op_81-emu_instr_table + dc.w emu_op_82-emu_instr_table + dc.w emu_op_83-emu_instr_table + dc.w emu_op_84-emu_instr_table + dc.w emu_op_85-emu_instr_table + dc.w emu_op_86-emu_instr_table + dc.w emu_op_87-emu_instr_table + dc.w emu_op_88-emu_instr_table + dc.w emu_op_89-emu_instr_table + dc.w emu_op_8a-emu_instr_table + dc.w emu_op_8b-emu_instr_table + dc.w emu_op_8c-emu_instr_table + dc.w emu_op_8d-emu_instr_table + dc.w emu_op_8e-emu_instr_table + dc.w emu_op_8f-emu_instr_table + dc.w emu_op_90-emu_instr_table + dc.w emu_op_91-emu_instr_table + dc.w emu_op_92-emu_instr_table + dc.w emu_op_93-emu_instr_table + dc.w emu_op_94-emu_instr_table + dc.w emu_op_95-emu_instr_table + dc.w emu_op_96-emu_instr_table + dc.w emu_op_97-emu_instr_table + dc.w emu_op_98-emu_instr_table + dc.w emu_op_99-emu_instr_table + dc.w emu_op_9a-emu_instr_table + dc.w emu_op_9b-emu_instr_table + dc.w emu_op_9c-emu_instr_table + dc.w emu_op_9d-emu_instr_table + dc.w emu_op_9e-emu_instr_table + dc.w emu_op_9f-emu_instr_table + dc.w emu_op_a0-emu_instr_table + dc.w emu_op_a1-emu_instr_table + dc.w emu_op_a2-emu_instr_table + dc.w emu_op_a3-emu_instr_table + dc.w emu_op_a4-emu_instr_table + dc.w emu_op_a5-emu_instr_table + dc.w emu_op_a6-emu_instr_table + dc.w emu_op_a7-emu_instr_table + dc.w emu_op_a8-emu_instr_table + dc.w emu_op_a9-emu_instr_table + dc.w emu_op_aa-emu_instr_table + dc.w emu_op_ab-emu_instr_table + dc.w emu_op_ac-emu_instr_table + dc.w emu_op_ad-emu_instr_table + dc.w emu_op_ae-emu_instr_table + dc.w emu_op_af-emu_instr_table + dc.w emu_op_b0-emu_instr_table + dc.w emu_op_b1-emu_instr_table + dc.w emu_op_b2-emu_instr_table + dc.w emu_op_b3-emu_instr_table + dc.w emu_op_b4-emu_instr_table + dc.w emu_op_b5-emu_instr_table + dc.w emu_op_b6-emu_instr_table + dc.w emu_op_b7-emu_instr_table + dc.w emu_op_b8-emu_instr_table + dc.w emu_op_b9-emu_instr_table + dc.w emu_op_ba-emu_instr_table + dc.w emu_op_bb-emu_instr_table + dc.w emu_op_bc-emu_instr_table + dc.w emu_op_bd-emu_instr_table + dc.w emu_op_be-emu_instr_table + dc.w emu_op_bf-emu_instr_table + dc.w emu_op_c0-emu_instr_table + dc.w emu_op_c1-emu_instr_table + dc.w emu_op_c2-emu_instr_table + dc.w emu_op_c3-emu_instr_table + dc.w emu_op_c4-emu_instr_table + dc.w emu_op_c5-emu_instr_table + dc.w emu_op_c6-emu_instr_table + dc.w emu_op_c7-emu_instr_table + dc.w emu_op_c8-emu_instr_table + dc.w emu_op_c9-emu_instr_table + dc.w emu_op_ca-emu_instr_table + dc.w emu_op_cb-emu_instr_table + dc.w emu_op_cc-emu_instr_table + dc.w emu_op_cd-emu_instr_table + dc.w emu_op_ce-emu_instr_table + dc.w emu_op_cf-emu_instr_table + dc.w emu_op_d0-emu_instr_table + dc.w emu_op_d1-emu_instr_table + dc.w emu_op_d2-emu_instr_table + dc.w emu_op_d3-emu_instr_table + dc.w emu_op_d4-emu_instr_table + dc.w emu_op_d5-emu_instr_table + dc.w emu_op_d6-emu_instr_table + dc.w emu_op_d7-emu_instr_table + dc.w emu_op_d8-emu_instr_table + dc.w emu_op_d9-emu_instr_table + dc.w emu_op_da-emu_instr_table + dc.w emu_op_db-emu_instr_table + dc.w emu_op_dc-emu_instr_table + dc.w emu_op_dd-emu_instr_table + dc.w emu_op_de-emu_instr_table + dc.w emu_op_df-emu_instr_table + dc.w emu_op_e0-emu_instr_table + dc.w emu_op_e1-emu_instr_table + dc.w emu_op_e2-emu_instr_table + dc.w emu_op_e3-emu_instr_table + dc.w emu_op_e4-emu_instr_table + dc.w emu_op_e5-emu_instr_table + dc.w emu_op_e6-emu_instr_table + dc.w emu_op_e7-emu_instr_table + dc.w emu_op_e8-emu_instr_table + dc.w emu_op_e9-emu_instr_table + dc.w emu_op_ea-emu_instr_table + dc.w emu_op_eb-emu_instr_table + dc.w emu_op_ec-emu_instr_table + dc.w emu_op_ed-emu_instr_table + dc.w emu_op_ee-emu_instr_table + dc.w emu_op_ef-emu_instr_table + dc.w emu_op_f0-emu_instr_table + dc.w emu_op_f1-emu_instr_table + dc.w emu_op_f2-emu_instr_table + dc.w emu_op_f3-emu_instr_table + dc.w emu_op_f4-emu_instr_table + dc.w emu_op_f5-emu_instr_table + dc.w emu_op_f6-emu_instr_table + dc.w emu_op_f7-emu_instr_table + dc.w emu_op_f8-emu_instr_table + dc.w emu_op_f9-emu_instr_table + dc.w emu_op_fa-emu_instr_table + dc.w emu_op_fb-emu_instr_table + dc.w emu_op_fc-emu_instr_table + dc.w emu_op_fd-emu_instr_table + dc.w emu_op_fe-emu_instr_table + dc.w emu_op_ff-emu_instr_table + ;;; http://z80.info/z80oplist.txt emu_op_00: @@ -1258,6 +1285,12 @@ emu_op_7f: DONE emu_op_80: + ;; ADD A,B + LOHI d4 + add.b d3,d4 + ;; preserve operands for flagging + move.b + emu_op_81: emu_op_82: emu_op_83: -- cgit v1.2.3