deleting unneeded files and adding sa1cpu
authorJavier S. Pedro <maemo@javispedro.com>
Wed, 9 Sep 2009 01:58:36 +0000 (03:58 +0200)
committerJavier S. Pedro <maemo@javispedro.com>
Wed, 9 Sep 2009 01:58:36 +0000 (03:58 +0200)
dr65c816.s [deleted file]
sa1cpu.cpp [new file with mode: 0644]
spc_decode.S [deleted file]

diff --git a/dr65c816.s b/dr65c816.s
deleted file mode 100644 (file)
index 750797b..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-
-
-       .data
-       
-       
-;@ MASK_EMUL   MASK_MEM        MASK_INDEX              Jump Table
-;@ TRUE                        ?                       ?                               jumptable1              Mode 0 : M=1,X=1
-;@ FALSE               TRUE            TRUE                    jumptable1              Mode 0 : M=1,X=1
-;@ FALSE               TRUE            FALSE                   jumptable2              Mode 1 : M=1,X=0
-;@ FALSE               FALSE           TRUE                    jumptable4              Mode 3 : M=0,X=1
-;@ FALSE               FALSE           FALSE                   jumptable3              Mode 2 : M=0,X=0
-
-opcodetable_lookup_addr        opcodetable_lookup
-opcodetable_lookup: 
-       .word jumptable3 ;@ 000
-       .word jumptable4 ;@ 001
-       .word jumptable2 ;@ 010
-       .word jumptable1 ;@ 011
-       .word jumptable1 ;@ 100
-       .word jumptable1 ;@ 101
-       .word jumptable1 ;@ 110
-       .word jumptable1 ;@ 111
-       
-get_opcode_table:
-       ldr r0,opcodetable_lookup_addr
-       and r1,reg_f,MASK_EMUL  MASK_MEM        MASK_INDEX
-       ldr opcodes,[r0,r1,lsl#2]
-       mov pc,lr
-
-       
-       reg_a                           .req r5
-       reg_d_bank                      .req r5
-       reg_d                           .req r5
-       reg_p_bank                              .req r5
-       reg_x                           .req r5
-       reg_sp                          .req r5
-       reg_y                           .req r5
-       reg_f                           .req r5
-       reg_pc                          .req r5
-       cycles                          .req r5
-       cpu_context                     .req r5
-       opcodes                         .req r5
-
-       .equ BRKtriggered
-       .equ pc_base
-
-.equ STATUS_SHIFTER,           24
-.equ MASK_EMUL,                                (1<<(STATUS_SHIFTER-1))
-.equ MASK_SHIFTER_CARRY,       (STATUS_SHIFTER+1)
-.equ   MASK_CARRY,                     (1<<(STATUS_SHIFTER))  @ 0
-.equ   MASK_ZERO,                      (2<<(STATUS_SHIFTER))  @ 1
-.equ MASK_IRQ,                         (4<<(STATUS_SHIFTER))  @ 2
-.equ MASK_DECIMAL,                     (8<<(STATUS_SHIFTER))  @ 3
-.equ   MASK_INDEX,                     (16<<(STATUS_SHIFTER)) @ 4  @ 1
-.equ   MASK_MEM,                       (32<<(STATUS_SHIFTER)) @ 5  @ 2
-.equ   MASK_OVERFLOW,          (64<<(STATUS_SHIFTER)) @ 6  @ 4
-.equ   MASK_NEG,                       (128<<(STATUS_SHIFTER))@ 7  @ 8
-
-.macro prepare_c_call
-       stmfd sp!,{r12}
-.endm
-
-.macro restore_c_call
-       ldmfd sp!,{r12}
-.endm
-
-;@push16 - saves a 16bit value onto stack
-;@ r0 = address 0x0000HHLL
-;@ r1 = data    0x0000HHLL
-.macro push16
-       prepare_c_call
-       mov lr,pc
-       ldr pc,[cpu_context,#writemem16]  ;@ r0 = address  r1=data
-       restore_c_call
-.endm
-
-;@push16 - saves a 8bit value onto stack
-;@ r0 = address 0x0000HHLL
-;@ r1 = data    0x0000HHLL
-.macro push8
-       prepare_c_call
-       mov lr,pc
-       ldr pc,[cpu_context,#writemem8]  ;@ r0 = address  r1=data
-       restore_c_call
-.endm
-
-.macro mov_reg_sp_to_r0
-       mov r0,reg_sp
-.endm
-
-.macro push16_s24 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>>24
-       push16
-.endm
-
-.macro push16_s16 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>>16
-       push16
-.endm
-
-.macro push16_s8 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>>8
-       push16
-.endm
-
-.macro push16_s0 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>
-       push16
-.endm
-
-.macro push8_s24 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>>24
-       push8
-.endm
-
-.macro push8_s16 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>>16
-       push8
-.endm
-
-.macro push8_s8 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>>8
-       push8
-.endm
-
-.macro push8_s0 reg
-       mov_reg_sp_to_r0
-       mov r1,\reg>
-       push8
-.endm
-
-.macro pushPC
-       ldr r1,[cpu_context,#pc_base]
-       sub r1,reg_pc,r1
-       push16_s0
-.endm
-
-.macro getSnesFlags reg
-       sub \reg,[cpu_context,#snes_flag_lookup]
-       ldr \reg,[\reg,reg_f>>24]
-.endm
-
-
-.macro setIRQ
-       ;@ IRQ flag has ben raised
-.endm
-
-;@ re-calculates reg_pc and pc_base
-;@ in: r0=new snes pc
-;@ out: r0=new arm pc
-.macro setPCbase
-       prepare_c_call
-       mov lr,pc
-       ldr pc,[cpu_context,#rebase_pc]
-       restore_c_call
-       mov reg_pc,r0
-.endm
-
-.macro fetch cyc
-       subs cycles,cycles,#\cyc
-       ldrplb r0,[reg_pc],#1
-       ldrpl pc,[opcodes,r0, lsl #2]
-       bmi cpu_execute_end
-.endm
-
-
-cpu_execute:
-       ;@ load cpu context
-       ;@ check interupts
-       ;@ run opcodes
-
-cpu_execute_end
-       ;@ cycle count has expired
-       ;@    This means that 
-       ;@              All cpu cycles requested have been used
-       ;@              NMI interupt has occurred
-       ;@                      IRQ interupt has occurred
-       ;@    Check which counter has expired
-       ;@      if normal cycle count then exit cpu emulation
-       ;@         this will only occur while NMI and IRQ ints are NOT pending
-       ;@      if NMI cycle count then raise NMI interrupt
-       ;@         then continue cpu emulation using IRQ cycle count (if any) otherwise use remaining cycle count
-       ;@         which would already be adjusted to remove NMI cycles used.
-       ;@         count between normal cycles and IRQ cycles.
-       ;@      if IRQ cycle count then raise IRQ interrupt.
-       ;@      
-       ;@ save cpu context
-       ;@ exit
-       
-
-       
-
-jumptable1:            .long   Op00mod1
-                       .long   Op01M1mod1
-                       .long   Op02mod1
-                       .long   Op03M1mod1
-                       .long   Op04M1mod1
-                       .long   Op05M1mod1
-                       .long   Op06M1mod1
-                       .long   Op07M1mod1
-                       .long   Op08mod1
-                       .long   Op09M1mod1
-                       .long   Op0AM1mod1
-                       .long   Op0Bmod1
-                       .long   Op0CM1mod1
-                       .long   Op0DM1mod1
-                       .long   Op0EM1mod1
-                       .long   Op0FM1mod1
-                       .long   Op10mod1
-                       .long   Op11M1mod1
-                       .long   Op12M1mod1
-                       .long   Op13M1mod1
-                       .long   Op14M1mod1
-                       .long   Op15M1mod1
-                       .long   Op16M1mod1
-                       .long   Op17M1mod1
-                       .long   Op18mod1
-                       .long   Op19M1mod1
-                       .long   Op1AM1mod1
-                       .long   Op1Bmod1
-                       .long   Op1CM1mod1
-                       .long   Op1DM1mod1
-                       .long   Op1EM1mod1
-                       .long   Op1FM1mod1
-                       .long   Op20mod1
-                       .long   Op21M1mod1
-                       .long   Op22mod1
-                       .long   Op23M1mod1
-                       .long   Op24M1mod1
-                       .long   Op25M1mod1
-                       .long   Op26M1mod1
-                       .long   Op27M1mod1
-                       .long   Op28mod1
-                       .long   Op29M1mod1
-                       .long   Op2AM1mod1
-                       .long   Op2Bmod1
-                       .long   Op2CM1mod1
-                       .long   Op2DM1mod1
-                       .long   Op2EM1mod1
-                       .long   Op2FM1mod1
-                       .long   Op30mod1
-                       .long   Op31M1mod1
-                       .long   Op32M1mod1
-                       .long   Op33M1mod1
-                       .long   Op34M1mod1
-                       .long   Op35M1mod1
-                       .long   Op36M1mod1
-                       .long   Op37M1mod1
-                       .long   Op38mod1
-                       .long   Op39M1mod1
-                       .long   Op3AM1mod1
-                       .long   Op3Bmod1
-                       .long   Op3CM1mod1
-                       .long   Op3DM1mod1
-                       .long   Op3EM1mod1
-                       .long   Op3FM1mod1
-                       .long   Op40mod1
-                       .long   Op41M1mod1
-                       .long   Op42mod1
-                       .long   Op43M1mod1
-                       .long   Op44X1mod1
-                       .long   Op45M1mod1
-                       .long   Op46M1mod1
-                       .long   Op47M1mod1
-                       .long   Op48M1mod1
-                       .long   Op49M1mod1
-                       .long   Op4AM1mod1
-                       .long   Op4Bmod1
-                       .long   Op4Cmod1
-                       .long   Op4DM1mod1
-                       .long   Op4EM1mod1
-                       .long   Op4FM1mod1
-                       .long   Op50mod1
-                       .long   Op51M1mod1
-                       .long   Op52M1mod1
-                       .long   Op53M1mod1
-                       .long   Op54X1mod1
-                       .long   Op55M1mod1
-                       .long   Op56M1mod1
-                       .long   Op57M1mod1
-                       .long   Op58mod1
-                       .long   Op59M1mod1
-                       .long   Op5AX1mod1
-                       .long   Op5Bmod1
-                       .long   Op5Cmod1
-                       .long   Op5DM1mod1
-                       .long   Op5EM1mod1
-                       .long   Op5FM1mod1
-                       .long   Op60mod1
-                       .long   Op61M1mod1
-                       .long   Op62mod1
-                       .long   Op63M1mod1
-                       .long   Op64M1mod1
-                       .long   Op65M1mod1
-                       .long   Op66M1mod1
-                       .long   Op67M1mod1
-                       .long   Op68M1mod1
-                       .long   Op69M1mod1
-                       .long   Op6AM1mod1
-                       .long   Op6Bmod1
-                       .long   Op6Cmod1
-                       .long   Op6DM1mod1
-                       .long   Op6EM1mod1
-                       .long   Op6FM1mod1
-                       .long   Op70mod1
-                       .long   Op71M1mod1
-                       .long   Op72M1mod1
-                       .long   Op73M1mod1
-                       .long   Op74M1mod1
-                       .long   Op75M1mod1
-                       .long   Op76M1mod1
-                       .long   Op77M1mod1
-                       .long   Op78mod1
-                       .long   Op79M1mod1
-                       .long   Op7AX1mod1
-                       .long   Op7Bmod1
-                       .long   Op7Cmod1
-                       .long   Op7DM1mod1
-                       .long   Op7EM1mod1
-                       .long   Op7FM1mod1
-                       .long   Op80mod1
-                       .long   Op81M1mod1
-                       .long   Op82mod1
-                       .long   Op83M1mod1
-                       .long   Op84X1mod1
-                       .long   Op85M1mod1
-                       .long   Op86X1mod1
-                       .long   Op87M1mod1
-                       .long   Op88X1mod1
-                       .long   Op89M1mod1
-                       .long   Op8AM1mod1
-                       .long   Op8Bmod1
-                       .long   Op8CX1mod1
-                       .long   Op8DM1mod1
-                       .long   Op8EX1mod1
-                       .long   Op8FM1mod1
-                       .long   Op90mod1
-                       .long   Op91M1mod1
-                       .long   Op92M1mod1
-                       .long   Op93M1mod1
-                       .long   Op94X1mod1
-                       .long   Op95M1mod1
-                       .long   Op96X1mod1
-                       .long   Op97M1mod1
-                       .long   Op98M1mod1
-                       .long   Op99M1mod1
-                       .long   Op9Amod1
-                       .long   Op9BX1mod1
-                       .long   Op9CM1mod1
-                       .long   Op9DM1mod1
-                       .long   Op9EM1mod1
-                       .long   Op9FM1mod1
-                       .long   OpA0X1mod1
-                       .long   OpA1M1mod1
-                       .long   OpA2X1mod1
-                       .long   OpA3M1mod1
-                       .long   OpA4X1mod1
-                       .long   OpA5M1mod1
-                       .long   OpA6X1mod1
-                       .long   OpA7M1mod1
-                       .long   OpA8X1mod1
-                       .long   OpA9M1mod1
-                       .long   OpAAX1mod1
-                       .long   OpABmod1
-                       .long   OpACX1mod1
-                       .long   OpADM1mod1
-                       .long   OpAEX1mod1
-                       .long   OpAFM1mod1
-                       .long   OpB0mod1
-                       .long   OpB1M1mod1
-                       .long   OpB2M1mod1
-                       .long   OpB3M1mod1
-                       .long   OpB4X1mod1
-                       .long   OpB5M1mod1
-                       .long   OpB6X1mod1
-                       .long   OpB7M1mod1
-                       .long   OpB8mod1
-                       .long   OpB9M1mod1
-                       .long   OpBAX1mod1
-                       .long   OpBBX1mod1
-                       .long   OpBCX1mod1
-                       .long   OpBDM1mod1
-                       .long   OpBEX1mod1
-                       .long   OpBFM1mod1
-                       .long   OpC0X1mod1
-                       .long   OpC1M1mod1
-                       .long   OpC2mod1
-                       .long   OpC3M1mod1
-                       .long   OpC4X1mod1
-                       .long   OpC5M1mod1
-                       .long   OpC6M1mod1
-                       .long   OpC7M1mod1
-                       .long   OpC8X1mod1
-                       .long   OpC9M1mod1
-                       .long   OpCAX1mod1
-                       .long   OpCBmod1
-                       .long   OpCCX1mod1
-                       .long   OpCDM1mod1
-                       .long   OpCEM1mod1
-                       .long   OpCFM1mod1
-                       .long   OpD0mod1
-                       .long   OpD1M1mod1
-                       .long   OpD2M1mod1
-                       .long   OpD3M1mod1
-                       .long   OpD4mod1
-                       .long   OpD5M1mod1
-                       .long   OpD6M1mod1
-                       .long   OpD7M1mod1
-                       .long   OpD8mod1
-                       .long   OpD9M1mod1
-                       .long   OpDAX1mod1
-                       .long   OpDBmod1
-                       .long   OpDCmod1
-                       .long   OpDDM1mod1
-                       .long   OpDEM1mod1
-                       .long   OpDFM1mod1
-                       .long   OpE0X1mod1
-                       .long   OpE1M1mod1
-                       .long   OpE2mod1
-                       .long   OpE3M1mod1
-                       .long   OpE4X1mod1
-                       .long   OpE5M1mod1
-                       .long   OpE6M1mod1
-                       .long   OpE7M1mod1
-                       .long   OpE8X1mod1
-                       .long   OpE9M1mod1
-                       .long   OpEAmod1
-                       .long   OpEBmod1
-                       .long   OpECX1mod1
-                       .long   OpEDM1mod1
-                       .long   OpEEM1mod1
-                       .long   OpEFM1mod1
-                       .long   OpF0mod1
-                       .long   OpF1M1mod1
-                       .long   OpF2M1mod1
-                       .long   OpF3M1mod1
-                       .long   OpF4mod1
-                       .long   OpF5M1mod1
-                       .long   OpF6M1mod1
-                       .long   OpF7M1mod1
-                       .long   OpF8mod1
-                       .long   OpF9M1mod1
-                       .long   OpFAX1mod1
-                       .long   OpFBmod1
-                       .long   OpFCmod1
-                       .long   OpFDM1mod1
-                       .long   OpFEM1mod1
-                       .long   OpFFM1mod1
-                       
-                       
-jumptable2:            .long   Op00mod2
-                       .long   Op01M1mod2
-                       .long   Op02mod2
-                       .long   Op03M1mod2
-                       .long   Op04M1mod2
-                       .long   Op05M1mod2
-                       .long   Op06M1mod2
-                       .long   Op07M1mod2
-                       .long   Op08mod2
-                       .long   Op09M1mod2
-                       .long   Op0AM1mod2
-                       .long   Op0Bmod2
-                       .long   Op0CM1mod2
-                       .long   Op0DM1mod2
-                       .long   Op0EM1mod2
-                       .long   Op0FM1mod2
-                       .long   Op10mod2
-                       .long   Op11M1mod2
-                       .long   Op12M1mod2
-                       .long   Op13M1mod2
-                       .long   Op14M1mod2
-                       .long   Op15M1mod2
-                       .long   Op16M1mod2
-                       .long   Op17M1mod2
-                       .long   Op18mod2
-                       .long   Op19M1mod2
-                       .long   Op1AM1mod2
-                       .long   Op1Bmod2
-                       .long   Op1CM1mod2
-                       .long   Op1DM1mod2
-                       .long   Op1EM1mod2
-                       .long   Op1FM1mod2
-                       .long   Op20mod2
-                       .long   Op21M1mod2
-                       .long   Op22mod2
-                       .long   Op23M1mod2
-                       .long   Op24M1mod2
-                       .long   Op25M1mod2
-                       .long   Op26M1mod2
-                       .long   Op27M1mod2
-                       .long   Op28mod2
-                       .long   Op29M1mod2
-                       .long   Op2AM1mod2
-                       .long   Op2Bmod2
-                       .long   Op2CM1mod2
-                       .long   Op2DM1mod2
-                       .long   Op2EM1mod2
-                       .long   Op2FM1mod2
-                       .long   Op30mod2
-                       .long   Op31M1mod2
-                       .long   Op32M1mod2
-                       .long   Op33M1mod2
-                       .long   Op34M1mod2
-                       .long   Op35M1mod2
-                       .long   Op36M1mod2
-                       .long   Op37M1mod2
-                       .long   Op38mod2
-                       .long   Op39M1mod2
-                       .long   Op3AM1mod2
-                       .long   Op3Bmod2
-                       .long   Op3CM1mod2
-                       .long   Op3DM1mod2
-                       .long   Op3EM1mod2
-                       .long   Op3FM1mod2
-                       .long   Op40mod2
-                       .long   Op41M1mod2
-                       .long   Op42mod2
-                       .long   Op43M1mod2
-                       .long   Op44X0mod2
-                       .long   Op45M1mod2
-                       .long   Op46M1mod2
-                       .long   Op47M1mod2
-                       .long   Op48M1mod2
-                       .long   Op49M1mod2
-                       .long   Op4AM1mod2
-                       .long   Op4Bmod2
-                       .long   Op4Cmod2
-                       .long   Op4DM1mod2
-                       .long   Op4EM1mod2
-                       .long   Op4FM1mod2
-                       .long   Op50mod2
-                       .long   Op51M1mod2
-                       .long   Op52M1mod2
-                       .long   Op53M1mod2
-                       .long   Op54X0mod2
-                       .long   Op55M1mod2
-                       .long   Op56M1mod2
-                       .long   Op57M1mod2
-                       .long   Op58mod2
-                       .long   Op59M1mod2
-                       .long   Op5AX0mod2
-                       .long   Op5Bmod2
-                       .long   Op5Cmod2
-                       .long   Op5DM1mod2
-                       .long   Op5EM1mod2
-                       .long   Op5FM1mod2
-                       .long   Op60mod2
-                       .long   Op61M1mod2
-                       .long   Op62mod2
-                       .long   Op63M1mod2
-                       .long   Op64M1mod2
-                       .long   Op65M1mod2
-                       .long   Op66M1mod2
-                       .long   Op67M1mod2
-                       .long   Op68M1mod2
-                       .long   Op69M1mod2
-                       .long   Op6AM1mod2
-                       .long   Op6Bmod2
-                       .long   Op6Cmod2
-                       .long   Op6DM1mod2
-                       .long   Op6EM1mod2
-                       .long   Op6FM1mod2
-                       .long   Op70mod2
-                       .long   Op71M1mod2
-                       .long   Op72M1mod2
-                       .long   Op73M1mod2
-                       .long   Op74M1mod2
-                       .long   Op75M1mod2
-                       .long   Op76M1mod2
-                       .long   Op77M1mod2
-                       .long   Op78mod2
-                       .long   Op79M1mod2
-                       .long   Op7AX0mod2
-                       .long   Op7Bmod2
-                       .long   Op7Cmod2
-                       .long   Op7DM1mod2
-                       .long   Op7EM1mod2
-                       .long   Op7FM1mod2
-                       .long   Op80mod2
-                       .long   Op81M1mod2
-                       .long   Op82mod2
-                       .long   Op83M1mod2
-                       .long   Op84X0mod2
-                       .long   Op85M1mod2
-                       .long   Op86X0mod2
-                       .long   Op87M1mod2
-                       .long   Op88X0mod2
-                       .long   Op89M1mod2
-                       .long   Op8AM1mod2
-                       .long   Op8Bmod2
-                       .long   Op8CX0mod2
-                       .long   Op8DM1mod2
-                       .long   Op8EX0mod2
-                       .long   Op8FM1mod2
-                       .long   Op90mod2
-                       .long   Op91M1mod2
-                       .long   Op92M1mod2
-                       .long   Op93M1mod2
-                       .long   Op94X0mod2
-                       .long   Op95M1mod2
-                       .long   Op96X0mod2
-                       .long   Op97M1mod2
-                       .long   Op98M1mod2
-                       .long   Op99M1mod2
-                       .long   Op9Amod2
-                       .long   Op9BX0mod2
-                       .long   Op9CM1mod2
-                       .long   Op9DM1mod2
-                       .long   Op9EM1mod2
-                       .long   Op9FM1mod2
-                       .long   OpA0X0mod2
-                       .long   OpA1M1mod2
-                       .long   OpA2X0mod2
-                       .long   OpA3M1mod2
-                       .long   OpA4X0mod2
-                       .long   OpA5M1mod2
-                       .long   OpA6X0mod2
-                       .long   OpA7M1mod2
-                       .long   OpA8X0mod2
-                       .long   OpA9M1mod2
-                       .long   OpAAX0mod2
-                       .long   OpABmod2
-                       .long   OpACX0mod2
-                       .long   OpADM1mod2
-                       .long   OpAEX0mod2
-                       .long   OpAFM1mod2
-                       .long   OpB0mod2
-                       .long   OpB1M1mod2
-                       .long   OpB2M1mod2
-                       .long   OpB3M1mod2
-                       .long   OpB4X0mod2
-                       .long   OpB5M1mod2
-                       .long   OpB6X0mod2
-                       .long   OpB7M1mod2
-                       .long   OpB8mod2
-                       .long   OpB9M1mod2
-                       .long   OpBAX0mod2
-                       .long   OpBBX0mod2
-                       .long   OpBCX0mod2
-                       .long   OpBDM1mod2
-                       .long   OpBEX0mod2
-                       .long   OpBFM1mod2
-                       .long   OpC0X0mod2
-                       .long   OpC1M1mod2
-                       .long   OpC2mod2
-                       .long   OpC3M1mod2
-                       .long   OpC4X0mod2
-                       .long   OpC5M1mod2
-                       .long   OpC6M1mod2
-                       .long   OpC7M1mod2
-                       .long   OpC8X0mod2
-                       .long   OpC9M1mod2
-                       .long   OpCAX0mod2
-                       .long   OpCBmod2
-                       .long   OpCCX0mod2
-                       .long   OpCDM1mod2
-                       .long   OpCEM1mod2
-                       .long   OpCFM1mod2
-                       .long   OpD0mod2
-                       .long   OpD1M1mod2
-                       .long   OpD2M1mod2
-                       .long   OpD3M1mod2
-                       .long   OpD4mod2
-                       .long   OpD5M1mod2
-                       .long   OpD6M1mod2
-                       .long   OpD7M1mod2
-                       .long   OpD8mod2
-                       .long   OpD9M1mod2
-                       .long   OpDAX0mod2
-                       .long   OpDBmod2
-                       .long   OpDCmod2
-                       .long   OpDDM1mod2
-                       .long   OpDEM1mod2
-                       .long   OpDFM1mod2
-                       .long   OpE0X0mod2
-                       .long   OpE1M1mod2
-                       .long   OpE2mod2
-                       .long   OpE3M1mod2
-                       .long   OpE4X0mod2
-                       .long   OpE5M1mod2
-                       .long   OpE6M1mod2
-                       .long   OpE7M1mod2
-                       .long   OpE8X0mod2
-                       .long   OpE9M1mod2
-                       .long   OpEAmod2
-                       .long   OpEBmod2
-                       .long   OpECX0mod2
-                       .long   OpEDM1mod2
-                       .long   OpEEM1mod2
-                       .long   OpEFM1mod2
-                       .long   OpF0mod2
-                       .long   OpF1M1mod2
-                       .long   OpF2M1mod2
-                       .long   OpF3M1mod2
-                       .long   OpF4mod2
-                       .long   OpF5M1mod2
-                       .long   OpF6M1mod2
-                       .long   OpF7M1mod2
-                       .long   OpF8mod2
-                       .long   OpF9M1mod2
-                       .long   OpFAX0mod2
-                       .long   OpFBmod2
-                       .long   OpFCmod2
-                       .long   OpFDM1mod2
-                       .long   OpFEM1mod2
-                       .long   OpFFM1mod2
-                       
-jumptable3:            .long   Op00mod3
-                       .long   Op01M0mod3
-                       .long   Op02mod3
-                       .long   Op03M0mod3
-                       .long   Op04M0mod3
-                       .long   Op05M0mod3
-                       .long   Op06M0mod3
-                       .long   Op07M0mod3
-                       .long   Op08mod3
-                       .long   Op09M0mod3
-                       .long   Op0AM0mod3
-                       .long   Op0Bmod3
-                       .long   Op0CM0mod3
-                       .long   Op0DM0mod3
-                       .long   Op0EM0mod3
-                       .long   Op0FM0mod3
-                       .long   Op10mod3
-                       .long   Op11M0mod3
-                       .long   Op12M0mod3
-                       .long   Op13M0mod3
-                       .long   Op14M0mod3
-                       .long   Op15M0mod3
-                       .long   Op16M0mod3
-                       .long   Op17M0mod3
-                       .long   Op18mod3
-                       .long   Op19M0mod3
-                       .long   Op1AM0mod3
-                       .long   Op1Bmod3
-                       .long   Op1CM0mod3
-                       .long   Op1DM0mod3
-                       .long   Op1EM0mod3
-                       .long   Op1FM0mod3
-                       .long   Op20mod3
-                       .long   Op21M0mod3
-                       .long   Op22mod3
-                       .long   Op23M0mod3
-                       .long   Op24M0mod3
-                       .long   Op25M0mod3
-                       .long   Op26M0mod3
-                       .long   Op27M0mod3
-                       .long   Op28mod3
-                       .long   Op29M0mod3
-                       .long   Op2AM0mod3
-                       .long   Op2Bmod3
-                       .long   Op2CM0mod3
-                       .long   Op2DM0mod3
-                       .long   Op2EM0mod3
-                       .long   Op2FM0mod3
-                       .long   Op30mod3
-                       .long   Op31M0mod3
-                       .long   Op32M0mod3
-                       .long   Op33M0mod3
-                       .long   Op34M0mod3
-                       .long   Op35M0mod3
-                       .long   Op36M0mod3
-                       .long   Op37M0mod3
-                       .long   Op38mod3
-                       .long   Op39M0mod3
-                       .long   Op3AM0mod3
-                       .long   Op3Bmod3
-                       .long   Op3CM0mod3
-                       .long   Op3DM0mod3
-                       .long   Op3EM0mod3
-                       .long   Op3FM0mod3
-                       .long   Op40mod3
-                       .long   Op41M0mod3
-                       .long   Op42mod3
-                       .long   Op43M0mod3
-                       .long   Op44X0mod3
-                       .long   Op45M0mod3
-                       .long   Op46M0mod3
-                       .long   Op47M0mod3
-                       .long   Op48M0mod3
-                       .long   Op49M0mod3
-                       .long   Op4AM0mod3
-                       .long   Op4Bmod3
-                       .long   Op4Cmod3
-                       .long   Op4DM0mod3
-                       .long   Op4EM0mod3
-                       .long   Op4FM0mod3
-                       .long   Op50mod3
-                       .long   Op51M0mod3
-                       .long   Op52M0mod3
-                       .long   Op53M0mod3
-                       .long   Op54X0mod3
-                       .long   Op55M0mod3
-                       .long   Op56M0mod3
-                       .long   Op57M0mod3
-                       .long   Op58mod3
-                       .long   Op59M0mod3
-                       .long   Op5AX0mod3
-                       .long   Op5Bmod3
-                       .long   Op5Cmod3
-                       .long   Op5DM0mod3
-                       .long   Op5EM0mod3
-                       .long   Op5FM0mod3
-                       .long   Op60mod3
-                       .long   Op61M0mod3
-                       .long   Op62mod3
-                       .long   Op63M0mod3
-                       .long   Op64M0mod3
-                       .long   Op65M0mod3
-                       .long   Op66M0mod3
-                       .long   Op67M0mod3
-                       .long   Op68M0mod3
-                       .long   Op69M0mod3
-                       .long   Op6AM0mod3
-                       .long   Op6Bmod3
-                       .long   Op6Cmod3
-                       .long   Op6DM0mod3
-                       .long   Op6EM0mod3
-                       .long   Op6FM0mod3
-                       .long   Op70mod3
-                       .long   Op71M0mod3
-                       .long   Op72M0mod3
-                       .long   Op73M0mod3
-                       .long   Op74M0mod3
-                       .long   Op75M0mod3
-                       .long   Op76M0mod3
-                       .long   Op77M0mod3
-                       .long   Op78mod3
-                       .long   Op79M0mod3
-                       .long   Op7AX0mod3
-                       .long   Op7Bmod3
-                       .long   Op7Cmod3
-                       .long   Op7DM0mod3
-                       .long   Op7EM0mod3
-                       .long   Op7FM0mod3
-                       .long   Op80mod3
-                       .long   Op81M0mod3
-                       .long   Op82mod3
-                       .long   Op83M0mod3
-                       .long   Op84X0mod3
-                       .long   Op85M0mod3
-                       .long   Op86X0mod3
-                       .long   Op87M0mod3
-                       .long   Op88X0mod3
-                       .long   Op89M0mod3
-                       .long   Op8AM0mod3
-                       .long   Op8Bmod3
-                       .long   Op8CX0mod3
-                       .long   Op8DM0mod3
-                       .long   Op8EX0mod3
-                       .long   Op8FM0mod3
-                       .long   Op90mod3
-                       .long   Op91M0mod3
-                       .long   Op92M0mod3
-                       .long   Op93M0mod3
-                       .long   Op94X0mod3
-                       .long   Op95M0mod3
-                       .long   Op96X0mod3
-                       .long   Op97M0mod3
-                       .long   Op98M0mod3
-                       .long   Op99M0mod3
-                       .long   Op9Amod3
-                       .long   Op9BX0mod3
-                       .long   Op9CM0mod3
-                       .long   Op9DM0mod3
-                       .long   Op9EM0mod3
-                       .long   Op9FM0mod3
-                       .long   OpA0X0mod3
-                       .long   OpA1M0mod3
-                       .long   OpA2X0mod3
-                       .long   OpA3M0mod3
-                       .long   OpA4X0mod3
-                       .long   OpA5M0mod3
-                       .long   OpA6X0mod3
-                       .long   OpA7M0mod3
-                       .long   OpA8X0mod3
-                       .long   OpA9M0mod3
-                       .long   OpAAX0mod3
-                       .long   OpABmod3
-                       .long   OpACX0mod3
-                       .long   OpADM0mod3
-                       .long   OpAEX0mod3
-                       .long   OpAFM0mod3
-                       .long   OpB0mod3
-                       .long   OpB1M0mod3
-                       .long   OpB2M0mod3
-                       .long   OpB3M0mod3
-                       .long   OpB4X0mod3
-                       .long   OpB5M0mod3
-                       .long   OpB6X0mod3
-                       .long   OpB7M0mod3
-                       .long   OpB8mod3
-                       .long   OpB9M0mod3
-                       .long   OpBAX0mod3
-                       .long   OpBBX0mod3
-                       .long   OpBCX0mod3
-                       .long   OpBDM0mod3
-                       .long   OpBEX0mod3
-                       .long   OpBFM0mod3
-                       .long   OpC0X0mod3
-                       .long   OpC1M0mod3
-                       .long   OpC2mod3
-                       .long   OpC3M0mod3
-                       .long   OpC4X0mod3
-                       .long   OpC5M0mod3
-                       .long   OpC6M0mod3
-                       .long   OpC7M0mod3
-                       .long   OpC8X0mod3
-                       .long   OpC9M0mod3
-                       .long   OpCAX0mod3
-                       .long   OpCBmod3
-                       .long   OpCCX0mod3
-                       .long   OpCDM0mod3
-                       .long   OpCEM0mod3
-                       .long   OpCFM0mod3
-                       .long   OpD0mod3
-                       .long   OpD1M0mod3
-                       .long   OpD2M0mod3
-                       .long   OpD3M0mod3
-                       .long   OpD4mod3
-                       .long   OpD5M0mod3
-                       .long   OpD6M0mod3
-                       .long   OpD7M0mod3
-                       .long   OpD8mod3
-                       .long   OpD9M0mod3
-                       .long   OpDAX0mod3
-                       .long   OpDBmod3
-                       .long   OpDCmod3
-                       .long   OpDDM0mod3
-                       .long   OpDEM0mod3
-                       .long   OpDFM0mod3
-                       .long   OpE0X0mod3
-                       .long   OpE1M0mod3
-                       .long   OpE2mod3
-                       .long   OpE3M0mod3
-                       .long   OpE4X0mod3
-                       .long   OpE5M0mod3
-                       .long   OpE6M0mod3
-                       .long   OpE7M0mod3
-                       .long   OpE8X0mod3
-                       .long   OpE9M0mod3
-                       .long   OpEAmod3
-                       .long   OpEBmod3
-                       .long   OpECX0mod3
-                       .long   OpEDM0mod3
-                       .long   OpEEM0mod3
-                       .long   OpEFM0mod3
-                       .long   OpF0mod3
-                       .long   OpF1M0mod3
-                       .long   OpF2M0mod3
-                       .long   OpF3M0mod3
-                       .long   OpF4mod3
-                       .long   OpF5M0mod3
-                       .long   OpF6M0mod3
-                       .long   OpF7M0mod3
-                       .long   OpF8mod3
-                       .long   OpF9M0mod3
-                       .long   OpFAX0mod3
-                       .long   OpFBmod3
-                       .long   OpFCmod3
-                       .long   OpFDM0mod3
-                       .long   OpFEM0mod3
-                       .long   OpFFM0mod3
-                       
-jumptable4:            .long   Op00mod4
-                       .long   Op01M0mod4
-                       .long   Op02mod4
-                       .long   Op03M0mod4
-                       .long   Op04M0mod4
-                       .long   Op05M0mod4
-                       .long   Op06M0mod4
-                       .long   Op07M0mod4
-                       .long   Op08mod4
-                       .long   Op09M0mod4
-                       .long   Op0AM0mod4
-                       .long   Op0Bmod4
-                       .long   Op0CM0mod4
-                       .long   Op0DM0mod4
-                       .long   Op0EM0mod4
-                       .long   Op0FM0mod4
-                       .long   Op10mod4
-                       .long   Op11M0mod4
-                       .long   Op12M0mod4
-                       .long   Op13M0mod4
-                       .long   Op14M0mod4
-                       .long   Op15M0mod4
-                       .long   Op16M0mod4
-                       .long   Op17M0mod4
-                       .long   Op18mod4
-                       .long   Op19M0mod4
-                       .long   Op1AM0mod4
-                       .long   Op1Bmod4
-                       .long   Op1CM0mod4
-                       .long   Op1DM0mod4
-                       .long   Op1EM0mod4
-                       .long   Op1FM0mod4
-                       .long   Op20mod4
-                       .long   Op21M0mod4
-                       .long   Op22mod4
-                       .long   Op23M0mod4
-                       .long   Op24M0mod4
-                       .long   Op25M0mod4
-                       .long   Op26M0mod4
-                       .long   Op27M0mod4
-                       .long   Op28mod4
-                       .long   Op29M0mod4
-                       .long   Op2AM0mod4
-                       .long   Op2Bmod4
-                       .long   Op2CM0mod4
-                       .long   Op2DM0mod4
-                       .long   Op2EM0mod4
-                       .long   Op2FM0mod4
-                       .long   Op30mod4
-                       .long   Op31M0mod4
-                       .long   Op32M0mod4
-                       .long   Op33M0mod4
-                       .long   Op34M0mod4
-                       .long   Op35M0mod4
-                       .long   Op36M0mod4
-                       .long   Op37M0mod4
-                       .long   Op38mod4
-                       .long   Op39M0mod4
-                       .long   Op3AM0mod4
-                       .long   Op3Bmod4
-                       .long   Op3CM0mod4
-                       .long   Op3DM0mod4
-                       .long   Op3EM0mod4
-                       .long   Op3FM0mod4
-                       .long   Op40mod4
-                       .long   Op41M0mod4
-                       .long   Op42mod4
-                       .long   Op43M0mod4
-                       .long   Op44X1mod4
-                       .long   Op45M0mod4
-                       .long   Op46M0mod4
-                       .long   Op47M0mod4
-                       .long   Op48M0mod4
-                       .long   Op49M0mod4
-                       .long   Op4AM0mod4
-                       .long   Op4Bmod4
-                       .long   Op4Cmod4
-                       .long   Op4DM0mod4
-                       .long   Op4EM0mod4
-                       .long   Op4FM0mod4
-                       .long   Op50mod4
-                       .long   Op51M0mod4
-                       .long   Op52M0mod4
-                       .long   Op53M0mod4
-                       .long   Op54X1mod4
-                       .long   Op55M0mod4
-                       .long   Op56M0mod4
-                       .long   Op57M0mod4
-                       .long   Op58mod4
-                       .long   Op59M0mod4
-                       .long   Op5AX1mod4
-                       .long   Op5Bmod4
-                       .long   Op5Cmod4
-                       .long   Op5DM0mod4
-                       .long   Op5EM0mod4
-                       .long   Op5FM0mod4
-                       .long   Op60mod4
-                       .long   Op61M0mod4
-                       .long   Op62mod4
-                       .long   Op63M0mod4
-                       .long   Op64M0mod4
-                       .long   Op65M0mod4
-                       .long   Op66M0mod4
-                       .long   Op67M0mod4
-                       .long   Op68M0mod4
-                       .long   Op69M0mod4
-                       .long   Op6AM0mod4
-                       .long   Op6Bmod4
-                       .long   Op6Cmod4
-                       .long   Op6DM0mod4
-                       .long   Op6EM0mod4
-                       .long   Op6FM0mod4
-                       .long   Op70mod4
-                       .long   Op71M0mod4
-                       .long   Op72M0mod4
-                       .long   Op73M0mod4
-                       .long   Op74M0mod4
-                       .long   Op75M0mod4
-                       .long   Op76M0mod4
-                       .long   Op77M0mod4
-                       .long   Op78mod4
-                       .long   Op79M0mod4
-                       .long   Op7AX1mod4
-                       .long   Op7Bmod4
-                       .long   Op7Cmod4
-                       .long   Op7DM0mod4
-                       .long   Op7EM0mod4
-                       .long   Op7FM0mod4
-                       .long   Op80mod4
-                       .long   Op81M0mod4
-                       .long   Op82mod4
-                       .long   Op83M0mod4
-                       .long   Op84X1mod4
-                       .long   Op85M0mod4
-                       .long   Op86X1mod4
-                       .long   Op87M0mod4
-                       .long   Op88X1mod4
-                       .long   Op89M0mod4
-                       .long   Op8AM0mod4
-                       .long   Op8Bmod4
-                       .long   Op8CX1mod4
-                       .long   Op8DM0mod4
-                       .long   Op8EX1mod4
-                       .long   Op8FM0mod4
-                       .long   Op90mod4
-                       .long   Op91M0mod4
-                       .long   Op92M0mod4
-                       .long   Op93M0mod4
-                       .long   Op94X1mod4
-                       .long   Op95M0mod4
-                       .long   Op96X1mod4
-                       .long   Op97M0mod4
-                       .long   Op98M0mod4
-                       .long   Op99M0mod4
-                       .long   Op9Amod4
-                       .long   Op9BX1mod4
-                       .long   Op9CM0mod4
-                       .long   Op9DM0mod4
-                       .long   Op9EM0mod4
-                       .long   Op9FM0mod4
-                       .long   OpA0X1mod4
-                       .long   OpA1M0mod4
-                       .long   OpA2X1mod4
-                       .long   OpA3M0mod4
-                       .long   OpA4X1mod4
-                       .long   OpA5M0mod4
-                       .long   OpA6X1mod4
-                       .long   OpA7M0mod4
-                       .long   OpA8X1mod4
-                       .long   OpA9M0mod4
-                       .long   OpAAX1mod4
-                       .long   OpABmod4
-                       .long   OpACX1mod4
-                       .long   OpADM0mod4
-                       .long   OpAEX1mod4
-                       .long   OpAFM0mod4
-                       .long   OpB0mod4
-                       .long   OpB1M0mod4
-                       .long   OpB2M0mod4
-                       .long   OpB3M0mod4
-                       .long   OpB4X1mod4
-                       .long   OpB5M0mod4
-                       .long   OpB6X1mod4
-                       .long   OpB7M0mod4
-                       .long   OpB8mod4
-                       .long   OpB9M0mod4
-                       .long   OpBAX1mod4
-                       .long   OpBBX1mod4
-                       .long   OpBCX1mod4
-                       .long   OpBDM0mod4
-                       .long   OpBEX1mod4
-                       .long   OpBFM0mod4
-                       .long   OpC0X1mod4
-                       .long   OpC1M0mod4
-                       .long   OpC2mod4
-                       .long   OpC3M0mod4
-                       .long   OpC4X1mod4
-                       .long   OpC5M0mod4
-                       .long   OpC6M0mod4
-                       .long   OpC7M0mod4
-                       .long   OpC8X1mod4
-                       .long   OpC9M0mod4
-                       .long   OpCAX1mod4
-                       .long   OpCBmod4
-                       .long   OpCCX1mod4
-                       .long   OpCDM0mod4
-                       .long   OpCEM0mod4
-                       .long   OpCFM0mod4
-                       .long   OpD0mod4
-                       .long   OpD1M0mod4
-                       .long   OpD2M0mod4
-                       .long   OpD3M0mod4
-                       .long   OpD4mod4
-                       .long   OpD5M0mod4
-                       .long   OpD6M0mod4
-                       .long   OpD7M0mod4
-                       .long   OpD8mod4
-                       .long   OpD9M0mod4
-                       .long   OpDAX1mod4
-                       .long   OpDBmod4
-                       .long   OpDCmod4
-                       .long   OpDDM0mod4
-                       .long   OpDEM0mod4
-                       .long   OpDFM0mod4
-                       .long   OpE0X1mod4
-                       .long   OpE1M0mod4
-                       .long   OpE2mod4
-                       .long   OpE3M0mod4
-                       .long   OpE4X1mod4
-                       .long   OpE5M0mod4
-                       .long   OpE6M0mod4
-                       .long   OpE7M0mod4
-                       .long   OpE8X1mod4
-                       .long   OpE9M0mod4
-                       .long   OpEAmod4
-                       .long   OpEBmod4
-                       .long   OpECX1mod4
-                       .long   OpEDM0mod4
-                       .long   OpEEM0mod4
-                       .long   OpEFM0mod4
-                       .long   OpF0mod4
-                       .long   OpF1M0mod4
-                       .long   OpF2M0mod4
-                       .long   OpF3M0mod4
-                       .long   OpF4mod4
-                       .long   OpF5M0mod4
-                       .long   OpF6M0mod4
-                       .long   OpF7M0mod4
-                       .long   OpF8mod4
-                       .long   OpF9M0mod4
-                       .long   OpFAX1mod4
-                       .long   OpFBmod4
-                       .long   OpFCmod4
-                       .long   OpFDM0mod4
-                       .long   OpFEM0mod4
-                       .long   OpFFM0mod4
-                       
-
-;@ ##############################################
-;@ BRK 
-;@ ##############################################              
-Op00mod1:
-lbl00mod1:
-       ;@ set BRK flag
-       ;@ Only used by SuperFX emulation
-       mov r0,#1
-       strb r0,[cpu_context,#BRKTriggered]
-               
-       tst reg_f, #MASK_EMUL
-       bne 1f
-
-       push8_s0 reg_p_bank
-       pushPC
-       getSnesFlags r1
-       push8_s0        
-       clearFlag #MASK_DECIMAL
-       SetIRQ
-       bic reg_p_bank, reg_p_bank, #0xFF
-       mov r0,0xE6
-       orr r0,r0,0xFF00
-       readmem16_s0
-       setPCbase
-       use_cycles 2
-       b 2f
-       
-1:
-       pushPC
-       getSnesFlags r1
-       push8_s0        
-       clearFlag #MASK_DECIMAL
-       SetFlag #MASK_IRQ
-       bic reg_p_bank, reg_p_bank, #0xFF
-       mov r0,0xFE
-       orr r0,r0,0xFF00
-       readmem16_s0
-       setPCbase
-       use_cycles 1
-2:
-       
-                       
-                       
-       
\ No newline at end of file
diff --git a/sa1cpu.cpp b/sa1cpu.cpp
new file mode 100644 (file)
index 0000000..02d74cb
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
+ *
+ * (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) and
+ *                           Jerremy Koot (jkoot@snes9x.com)
+ *
+ * Super FX C emulator code 
+ * (c) Copyright 1997 - 1999 Ivar (ivar@snes9x.com) and
+ *                           Gary Henderson.
+ * Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_.
+ *
+ * DSP1 emulator code (c) Copyright 1998 Ivar, _Demo_ and Gary Henderson.
+ * C4 asm and some C emulation code (c) Copyright 2000 zsKnight and _Demo_.
+ * C4 C code (c) Copyright 2001 Gary Henderson (gary.henderson@ntlworld.com).
+ *
+ * DOS port code contains the works of other authors. See headers in
+ * individual files.
+ *
+ * Snes9x homepage: http://www.snes9x.com
+ *
+ * Permission to use, copy, modify and distribute Snes9x in both binary and
+ * source form, for non-commercial purposes, is hereby granted without fee,
+ * providing that this license information and copyright notice appear with
+ * all copies and any derived work.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event shall the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Snes9x is freeware for PERSONAL USE only. Commercial users should
+ * seek permission of the copyright holders first. Commercial use includes
+ * charging money for Snes9x or software derived from Snes9x.
+ *
+ * The copyright holders request that bug fixes and improvements to the code
+ * should be forwarded to them so everyone can benefit from the modifications
+ * in future versions.
+ *
+ * Super NES and Super Nintendo Entertainment System are trademarks of
+ * Nintendo Co., Limited and its subsidiary companies.
+ */
+#include "snes9x.h"
+#include "memmap.h"
+#include "ppu.h"
+#include "cpuexec.h"
+
+#include "sa1.h"
+#define CPU SA1
+#define ICPU SA1ICPU\r
+//#define ICPU SA1
+#define Registers SA1Registers
+#define S9xGetByte S9xSA1GetByte
+#define S9xGetWord S9xSA1GetWord
+#define S9xSetByte S9xSA1SetByte
+#define S9xSetWord S9xSA1SetWord
+#define S9xSetPCBase S9xSA1SetPCBase
+#define S9xOpcodesM1X1 S9xSA1OpcodesM1X1
+#define S9xOpcodesM1X0 S9xSA1OpcodesM1X0
+#define S9xOpcodesM0X1 S9xSA1OpcodesM0X1
+#define S9xOpcodesM0X0 S9xSA1OpcodesM0X0
+#define S9xOpcode_IRQ S9xSA1Opcode_IRQ
+#define S9xOpcode_NMI S9xSA1Opcode_NMI
+#define S9xUnpackStatus S9xSA1UnpackStatus
+#define S9xPackStatus S9xSA1PackStatus
+#define S9xFixCycles S9xSA1FixCycles\r
+//CSNES Not even used\r
+/*
+#define Immediate8 SA1Immediate8
+#define Immediate16 SA1Immediate16
+#define Relative SA1Relative
+#define RelativeLong SA1RelativeLong
+#define AbsoluteIndexedIndirect SA1AbsoluteIndexedIndirect
+#define AbsoluteIndirectLong SA1AbsoluteIndirectLong
+#define AbsoluteIndirect SA1AbsoluteIndirect
+#define Absolute SA1Absolute
+#define AbsoluteLong SA1AbsoluteLong
+#define Direct SA1Direct
+#define DirectIndirectIndexed SA1DirectIndirectIndexed
+#define DirectIndirectIndexedLong SA1DirectIndirectIndexedLong
+#define DirectIndexedIndirect SA1DirectIndexedIndirect
+#define DirectIndexedX SA1DirectIndexedX
+#define DirectIndexedY SA1DirectIndexedY
+#define AbsoluteIndexedX SA1AbsoluteIndexedX
+#define AbsoluteIndexedY SA1AbsoluteIndexedY
+#define AbsoluteLongIndexedX SA1AbsoluteLongIndexedX
+#define DirectIndirect SA1DirectIndirect
+#define DirectIndirectLong SA1DirectIndirectLong
+#define StackRelative SA1StackRelative
+#define StackRelativeIndirectIndexed SA1StackRelativeIndirectIndexed\r
+*/
+
+//#undef CPU_SHUTDOWN
+#undef VAR_CYCLES
+#define SA1_OPCODES
+
+#include "cpuops.cpp"
+
+void S9xSA1MainLoop ()
+{
+    int i;
+
+#if 0
+    if (SA1.Flags & NMI_FLAG)
+    {
+               SA1.Flags &= ~NMI_FLAG;
+               if (SA1.WaitingForInterrupt)
+               {
+                       SA1.WaitingForInterrupt = FALSE;
+                       SA1.PC++;
+               }
+               S9xSA1Opcode_NMI ();
+    }
+#endif
+    if (SA1.Flags & IRQ_PENDING_FLAG)
+    {
+               if (SA1.IRQActive)
+               {
+                       if (SA1.WaitingForInterrupt)
+                       {
+                               SA1.WaitingForInterrupt = FALSE;
+                               SA1.PC++;
+                       }
+                       if (!SA1CheckFlag (IRQ))
+                               S9xSA1Opcode_IRQ ();
+               }
+               else
+                       SA1.Flags &= ~IRQ_PENDING_FLAG;
+    }
+#ifdef DEBUGGER
+    if (SA1.Flags & TRACE_FLAG)
+    {
+               for (i = 0; i < 3 && SA1.Executing; i++)
+               {
+                       S9xSA1Trace ();
+#ifdef CPU_SHUTDOWN
+                   SA1.PCAtOpcodeStart = SA1.PC;
+#endif
+                   (*SA1.S9xOpcodes [*SA1.PC++].S9xOpcode) (&SA1Registers, &SA1ICPU, &SA1);
+               }
+    }
+    else
+#endif
+           for (i = 0; i < 3 && SA1.Executing; i++)
+               {
+#ifdef CPU_SHUTDOWN
+                       SA1.PCAtOpcodeStart = SA1.PC;
+#endif
+                       (*SA1ICPU.S9xOpcodes [*SA1.PC++].S9xOpcode) (&SA1Registers, &SA1ICPU, &SA1);
+               }
+}
diff --git a/spc_decode.S b/spc_decode.S
deleted file mode 100644 (file)
index 1bd6ea6..0000000
+++ /dev/null
@@ -1,791 +0,0 @@
-
-       .align 4
-       .globl  DecodeBlockAsm
-       .globl  DecodeBlockAsm2
-       
-/*
-;Bit-Rate Expand Waveform
-;
-;Desc:
-;   Decompresses a 9-byte bit-rate reduced block into 16 16-bit samples.
-;   This procedure is designed to be recursively called to decompress a series of blocks.
-;In:
-;   R0=ESI-> Sample Block
-;   R1=EDI   -> Output buffer
-;   R2=EDX   =3D Last sample of previous block (32-bit)
-;   R3=EBX   =3D Next to last sample (sign extended from 16-bits)
-;Out:
-;   R0=ESI -> Next Block
-;   R1=EDI -> After last sample
-;   R2=EDX =3D Last sample (32-bit)
-;   R3=EBX =3D Next to last sample (16-bit)
-;Destroys:
-;   R4=EAX     
-*/
-
-.macro SMP12CLIP16     
-       CMP     R4, R12
-       BGT     1111f   
-       MOVNE   R4, R12
-       B       1112f
-1111:
-       CMP     R4, R11
-       MOVGT   R4, R11
-1112:
-       CMP     R2, R12
-       BGT     1121f   
-       MOVNE   R2, R12
-       B       1122f
-1121:
-       CMP     R2, R11
-       MOVGT   R2, R11
-1122:
-.endm
-
-@ void DecodeBlockAsm2 (int8 *, int16 *, int32 *, int32 *);
-@ DecodeBlockAsm2 (compressed, raw, &ch->previous [0], &ch->previous [1]);
-       .align 4
-DecodeBlockAsm:
-
-       STMFD           SP!,{R4,LR}
-                       
-       STMFD           SP!,{R2,R3}
-       LDR             R2,[R2]
-       LDR             R3,[R3]
-       BL              BREWave
-       LDMFD           SP!,{R0,R1}
-       STR             R2,[R0]
-       STR             R3,[R1]
-               
-       LDMFD           SP!,{R4,LR}
-       MOV             PC,LR   
-
-BREWave:       
-       STMFD   SP!,{R5,R6,R7}
-       @ Mov   AL,[ESI]                           ;Get header byte
-       @ Inc   ESI
-       
-       LDRB    R4,[R0],#1
-       @ Mov   CL,0CFh
-       @ Sub   CL,AL   
-       @ SetC  AH
-       @ Dec   AH
-       @ And   CL,AH
-       @ ShR   CL,4                               ;Isolate range
-       CMP     R4,#0xD0
-       MOVHS   R5,#0
-       MOVLO   R5,#0xCF
-       SUBLO   R5,R5,R4
-       MOVLO   R5,R5,LSR #4
-                                               
-       @ Mov   CH,8                               ;Decompress 8 bytes (16 nybbles)
-       MOV     R6,#8   
-       @ Test  AL,0Ch                             ;Does block use ADPCM compression?
-       @ JZ    @@Method0                    ;  No
-       TST     R4,#0xC
-       BEQ     Method0
-       @ Test  AL,8                               ;Does block use method 1?
-       @ JZ    @@Method1                    ;  Yes
-       TST     R4,#0x8
-       BEQ     Method1
-       @ Test  AL,4                               ;Does block use method 2?
-       @ jnz   @@Method3                          ;  Yes
-       @ jmp   @@Method2
-       TST     R4,#0x4
-       BEQ     Method2
-       B       Method3                 @ ;Must use method 3
-/*
-ALIGN  16
-       ;[Smp] ----------------------------------*/
-Method0:
-       ADD     R5,R5,#16
-Method0loop:
-       @ XOr   EAX,EAX
-       @ XOr   EDX,EDX
-       @ Mov   AH,byte[ESI]                        ;Get byte
-       @ Mov   DH,AH
-       @ And   AH,0F0h                         ;AH = High nybble << 12
-       @ ShL   DH,4                            ;DH = Low nybble << 12
-       LDRB    R4,[R0],#1
-        @ R4 = 0x000000hl
-       MOV     R2,R4,LSL #(28)
-        @ R2 = 0xl0000000
-       MOV     R4,R4,LSL #(24)
-        @ R4 = 0xhl000000
-       BIC     R4,R4,#0x0F000000
-        @ R4 = 0xh0000000
-               
-       @ SAR   AX,CL                           ;Reduce samples according to range
-       @ SAR   DX,CL
-       MOV     R4,R4,ASR R5    
-       MOV     R2,R2,ASR R5
-               
-       @ Mov   word[EDI],AX
-       @ Mov   word[2+EDI],DX
-       STRH    R4,[R1],#2
-       STRH    R2,[R1],#2
-       
-       @ Add   EDI,4
-       @ Inc   ESI
-       @ Dec   CH
-       @ JNZ   Short @@Method0
-       @ MovSX EDX,DX
-       @ MovSX EBX,AX
-       @ Ret   
-       SUBS    R6,R6,#1
-       BNE     Method0loop     
-       MOV     R2,R2,LSL #16
-       MOV     R2,R2,ASR #16
-       MOV     R3,R4,LSL #16
-       MOV     R3,R3,ASR #16           
-       LDMFD   SP!,{R5,R6,R7}
-       MOV     PC,LR
-
-@ ALIGN        16
-@      ;[Delta]+[Smp-1](15/16) -----------------
-Method1:
-       ADD     R7,R5,#16
-Method1loop:   
-               @ MovSX EBX,byte[ESI]              ;Sign extend upper nybble into EBX
-               @ And   BL,0F0h
-               @ ShL   EBX,8
-               @ SAR   EBX,CL
-               LDRSB   R3,[R0]
-               BIC     R3,R3,#0xF
-               MOV     R3,R3,LSL #8
-               MOV     R3,R3,ASR R5
-
-               @ MovSX EAX,DX
-               @ Add   EBX,EAX
-               @ SAR   EAX,4
-               @ Sub   EBX,EAX
-               MOV     R4,R2,LSL #16           
-               ADD     R3,R3,R4,ASR #16
-               SUB     R3,R3,R4,ASR #20
-
-               @ Mov   word[EDI],BX
-               STRH    R3,[R1],#2
-
-               @ Mov   DL,byte[ESI]
-               @ ShL   EDX,12
-               @ MovSX EDX,DX
-               @ SAR   EDX,CL
-               LDRSB   R2,[R0],#1              
-               MOV     R2,R2,LSL #(12+16)              
-               MOV     R2,R2,ASR R7
-
-               @ MovSX EAX,BX
-               @ Add   EDX,EAX
-               @ SAR   EAX,4
-               @ Sub   EDX,EAX
-               MOV     R4,R3,LSL #16           
-               ADD     R2,R2,R4,ASR #16
-               SUB     R2,R2,R4,ASR #20
-
-               @ Mov   word[2+EDI],DX
-               STRH    R2,[R1],#2
-               @ Add   EDI,4
-
-               @ Inc   ESI
-
-       @ Dec   CH
-       @ JNZ   Short @@Method1
-       @ MovSX EBX,BX
-       @ Ret
-       SUBS    R6,R6,#1
-       BNE     Method1loop
-       
-       MOV     R3,R3,LSL #16
-       MOV     R3,R3,ASR #16
-       
-       LDMFD   SP!,{R5,R6,R7}
-       MOV     PC,LR
-
-@ ALIGN        16
-       @ ;[Delta]+[Smp-1](61/32)-[Smp-2](30/32) --
-Method2:
-       ADD     R7,R5,#16
-Method2loop:
-               @ MovSX EAX,Byte[ESI]              ;EAX = Delta
-               LDRSB   R4,[R0]
-               @ And   AL,0F0h
-               @ ShL   EAX,8
-               @ SAR   EAX,CL
-               BIC     R4,R4,#0xF
-               MOV     R4,R4,LSL #8
-               MOV     R4,R4,ASR R5
-
-               @ ;Subtract 15/16 of second sample -----
-               @ Sub   EAX,EBX
-               @ SAR   EBX,4
-               @ Add   EAX,EBX
-               @ MovSX EBX,DX
-               SUB     R4,R4,R3
-               ADD     R4,R4,R3,ASR #4
-               MOV     R3,R2
-               
-               @ ;Add 61/32 of last sample ------------
-               @ And   DL,~3
-               @ Add   EAX,EDX
-               @ Add   EAX,EDX
-               @ SAR   EDX,4
-               @ Sub   EAX,EDX
-               @ SAR   EDX,1           
-               BIC     R2,R2,#3
-               ADD     R4,R4,R2,LSL #1         
-               SUB     R4,R4,R2,ASR #4                                         
-               @ MovSX EDX,DX
-               @ Sub   EAX,EDX         
-               SUB     R4,R4,R2,ASR #5
-               @ Mov   word[EDI],AX
-               STRH    R4,[R1],#2
-
-               @ Mov   DL,byte[ESI]
-               LDRB    R2,[R0],#1
-               @ ShL   EDX,12
-               @ MovSX EDX,DX
-               @ SAR   EDX,CL
-               MOV     R2,R2,LSL #(12+16)              
-               MOV     R2,R2,ASR R7
-
-               @ Sub   EDX,EBX
-               @ SAR   EBX,4
-               @ Add   EDX,EBX
-               @ MovSX EBX,AX
-               SUB     R2,R2,R3
-               ADD     R2,R2,R3,ASR #4
-               MOV     R3,R4
-               
-               @ And   AL,~3
-               @ Add   EDX,EAX
-               @ Add   EDX,EAX
-               @ SAR   EAX,4
-               @ Sub   EDX,EAX
-               @ SAR   EAX,1
-               BIC     R4,R4,#3
-               ADD     R2,R2,R4,LSL #1         
-               SUB     R2,R2,R4,ASR #4                                         
-               @ MovSX EAX,AX
-               @ Sub   EDX,EAX         
-               SUB     R2,R2,R4,ASR #5         
-
-               @ Mov   word[2+EDI],DX
-               STRH    R2,[R1],#2
-               @ Add   EDI,4
-
-               @ Inc   ESI
-
-       @ Dec   CH
-       @ JNZ   @@Method2
-       @ Ret
-       SUBS    R6,R6,#1
-       BNE     Method2loop
-       LDMFD   SP!,{R5,R6,R7}
-       MOV     PC,LR
-
-@ ALIGN        16
-       @ ;[Delta]+[Smp-1](115/64)-[Smp-2](52/64) -
-Method3:
-       ADD     R7,R5,#16
-Method3loop:
-       @ MovSX EAX,Byte[ESI]
-       LDRSB   R4,[R0]
-               @ And   AL,0F0h
-               @ ShL   EAX,8
-               @ SAR   EAX,CL
-       BIC     R4,R4,#0xF
-       MOV     R4,R4,LSL #8
-       MOV     R4,R4,ASR R5
-
-               @ ;Subtract 13/16 of second sample -----
-               @ Sub   EAX,EBX
-               @ SAR   EBX,3
-               @ Add   EAX,EBX
-               @ SAR   EBX,1
-               @ Add   EAX,EBX
-               @ MovSX EBX,DX
-       SUB     R4,R4,R3
-       ADD     R4,R4,R3,ASR #3
-       ADD     R4,R4,R3,ASR #4
-       MOV     R3,R2
-
-               @ ;Add 115/64 of last sample -----------
-               @ And   DL, ~3
-               @ Add   EAX,EDX
-               @ Add   EAX,EDX
-               @ SAR   EDX,3
-               @ Sub   EAX,EDX
-               @ SAR   EDX,1
-               @ Sub   EAX,EDX
-               @ SAR   EDX,2
-               @ Sub   EAX,EDX
-       BIC     R2,R2,#3
-       ADD     R4,R4,R2,LSL #1
-       SUB     R4,R4,R2,ASR #3
-       SUB     R4,R4,R2,ASR #4
-       SUB     R4,R4,R2,ASR #6
-
-               @ Mov   word[EDI],AX
-       STRH    R4,[R1],#2
-
-               @ Mov   DL,byte[ESI]
-       LDRB    R2,[R0],#1
-
-               @ ShL   EDX,12
-               @ MovSX EDX,DX
-               @ SAR   EDX,CL
-       MOV     R2,R2,LSL #(12+16)
-       MOV     R2,R2,ASR R7
-
-               @ Sub   EDX,EBX
-               @ SAR   EBX,3
-               @ Add   EDX,EBX
-               @ SAR   EBX,1
-               @ Add   EDX,EBX
-               @ MovSX EBX,AX
-       SUB     R2,R2,R3
-       ADD     R2,R2,R3,ASR #3
-       ADD     R2,R2,R3,ASR #4
-       MOV     R3,R4
-
-               @ And   AL, ~3
-               @ Add   EDX,EAX
-               @ Add   EDX,EAX
-               @ SAR   EAX,3
-               @ Sub   EDX,EAX
-               @ SAR   EAX,1
-               @ Sub   EDX,EAX
-               @ SAR   EAX,2
-               @ Sub   EDX,EAX
-       BIC     R4,R4,#3
-       ADD     R2,R2,R4,LSL #1
-       SUB     R2,R2,R4,ASR #3
-       SUB     R2,R2,R4,ASR #4
-       SUB     R2,R2,R4,ASR #6
-
-               @ Mov   word[2+EDI],DX
-       STRH    R4,[R1],#2
-               @ Add   EDI,4
-
-               @ Inc   ESI
-
-       @ Dec   CH
-       @ JNZ   @@Method3
-       @ Ret
-       SUBS    R6,R6,#1
-       BNE     Method3loop
-       
-       LDMFD   SP!,{R5,R6,R7}
-       MOV     PC,LR   
-
-
-DecodeBlockAsm2:
-       STMFD           SP!,{R4,R11,LR}
-       
-       @ R12 = -32768
-       LDR             R12, = (-32768)
-       @ R11 = 32767
-       LDR             R11, = 32767
-       
-       
-       @ R0 = source (compressed)
-       @ R1 = destination (uncompressed)
-       @ 
-       
-       /*mov esi,dword[esp+20]
-       mov edi,dword[esp+24]
-       mov edx,dword[esp+28]
-       mov edx,dword[edx]
-       mov ebx,dword[esp+32]
-       mov ebx,dword[ebx]*/
-
-       @ call BREWave2
-       @ sauvgarde les valeurs de R2 et R3 (&ch->prev[0] et &...[1])
-       STMFD           SP!,{R2,R3}     
-       LDR             R2,[R2]
-       LDR             R3,[R3] 
-       BL              BREWave2
-               @ renvoie dans R2 et R3 les valeurs a mettre dans &ch->prev[0] et &ch...[1]
-       /*mov eax,dword[esp+28]
-       mov dword[eax],edx
-       mov eax,dword[esp+32]
-       mov dword[eax],ebx*/
-       LDMFD           SP!,{R0,R1}
-       STR             R2,[R0]
-       STR             R3,[R1]
-               
-       LDMFD           SP!,{R4,R11,LR}
-       MOV             PC,LR   
-       @ ret
-
-@ ALIGN        16
-BREWave2:
-       @ Push  CX      
-       STMFD   SP!,{R5,R6}     
-       @ Mov   AL,byte [esi]                         ;Get header byte
-       @ Inc   esi
-       LDRB    R4,[R0],#1      
-       @ Mov   CL,0CFh
-       @ Sub   CL,AL                              ;Invert range
-       @ ShR   CL,4                               ;Isolate range
-       MOV     R5,#0xCF
-       SUB     R5,R5,R4
-       MOV     R5,R5,LSR #4    
-       @ Mov   CH,8                               ;Decompress 8 bytes (16 nybbles)
-       MOV     R6,#8   
-       @ Test  AL,0Ch                             ;Does block use ADPCM compression?
-       @ JZ    @@Method02                    ;  No
-       TST     R4,#0xC
-       BEQ     Method02
-       @ Test  AL,8                               ;Does block use method 1?
-       @ JZ    @@Method12                    ;  Yes
-       TST     R4,#0x8
-       BEQ     Method12
-       @ Test  AL,4                               ;Does block use method 2?
-       @ jnz   @@Method332                          ;  Yes
-       @ jmp   @@Method22
-       TST     R4,#0x4
-       BEQ     Method22
-       B       Method32
-@ @@Method332:
-       @ Jmp   @@Method32                          ;Must use method 3  
-
-@ ALIGN        16
-@      ;[Smp] ----------------------------------
-@ @@Method02:
-Method02:
-       @ shr   al, 4
-       MOV     R4,R4,LSR #4
-       @ mov   cl, al
-       MOV     R5,R4
-       @ cmp   cl, 12
-       CMP     R4,#12  
-       @ jbe   @@Method022     
-       SUBLS   R5,R5,#4
-       @ sub cl, 4
-Method022:
-       @ XOr   AX,AX   
-       @ XOr   DX,DX   
-       @ Mov   al,byte [esi]                      ;Get byte
-       LDRSB   R4,[R0],#1
-       @ mov   dl, al  
-       @ sar   al, 4
-       @ sal   dl, 4
-       @ sar   dl, 4
-       @ movsx eax, al
-       @ movsx edx, dl
-       MOV     R2,R4,LSL #28
-       MOV     R4,R4,ASR #4    @ top nib
-       MOV     R2,R2,ASR #28  @ bottom nib                     
-       @ sal   eax,cl                           ;Reduce samples according to range
-       @ sal   edx,cl
-       MOV     R4,R4,ASL R5   @ <<shift
-       MOV     R2,R2,ASL R5    @ <<shift
-
-       @ call SMP12CLIP16
-       SMP12CLIP16             @ clip
-
-       @ Mov   [edi],AX
-       STRH    R4,[R1],#2      @ store
-       @ Mov   [2+edi],DX
-       STRH    R2,[R1],#2
-       @ Add   edi,4
-       @ Inc   esi     @ deja fait plus haut   
-       @ Dec   CH
-       SUBS    R6,R6,#1
-       @ JNZ   @@Method022
-       BNE     Method022
-       @ Pop   CX
-       LDMFD   SP!,{R5,R6}
-       @ MovSX EDX,DX
-               @ deja bon
-       @ MovSX EBX,AX  
-       MOV     R3,R4
-       
-       @ Ret
-       MOV     PC,LR
-
-@ ALIGN        16
-@      ;[Delta]+[Smp-1](15/16) -----------------
-@ @@Method12:
-Method12:
-       ADD     R5,R5,#16
-Method12loop:  
-@      MovSX   EBX,byte [esi]            ;Sign extend upper nybble into EBX
-@      And     BL,0F0h
-       LDRB    R3,[R0]
-       BIC     R3,R3,#0xF
-       
-       @ ShL   BX,8
-       @ SAR   BX,CL   
-       MOV     R3,R3, LSL #(8+16)
-       MOV     R3,R3,ASR R5
-       
-       @ MovSX EAX,DX          
-       @ Add   EBX,EAX 
-       @ SAR   EAX,4
-       @ Sub   EBX,EAX 
-       MOV     R4,R2,LSL #16
-       ADD     R3,R3,R4,ASR #16                @ + 15/16*(smp-1)
-       SUB     R3,R3,R4,ASR #20
-       
-       @ Mov   [edi],BX
-       STRH    R3,[R1],#2
-
-       @ Mov   DL,byte [esi]
-       LDRB    R2,[R0],#1      
-       @ ShL   DX,12   
-       @ SAR   DX,CL
-       @ MovSX EDX,DX
-       MOV     R2,R2,LSL #(12+16)
-       MOV     R2,R2,ASR R5
-       
-       
-       @ MovSX EAX,BX  
-       @ Add   EDX,EAX         
-       @ SAR   EAX,4
-       @ Sub   EDX,EAX 
-       MOV     R4,R3,LSL #16
-       ADD     R2,R2,R4,ASR #16
-       SUB     R2,R2,R4,ASR #20        @ + 15/16*(smp-1)
-               
-       @ Mov   [2+edi],DX
-       STRH    R2,[R1],#2
-       @ Add   edi,4  @ deja fait
-       @ Inc   esi     @ deja fait
-       @ Dec   CH      
-       @ JNZ   @@Method12
-       SUBS    R6,R6,#1
-       BNE     Method12loop
-       @ Pop   CX
-       @ MovSX EBX,BX
-       @ Ret   
-       MOV     R3,R3,LSL #16           
-       LDMFD   SP!,{R5,R6}
-       MOV     R3,R3,ASR #16
-       MOV     PC,LR
-
-@ ALIGN        16
-@      ;[Delta]+[Smp-1](61/32)-[Smp-2](30/32) --
-@ @@Method22:
-Method22:      
-       /*MOV   R2,#0
-       MOV     R3,#0
-       LDMFD   SP!,{R5,R6}
-       MOV     PC,LR*/ 
-       ADD     R5,R5,#16
-Method22loop:  
-
-@      MovSX   EAX,byte [esi]            ;EAX =3D Delta
-       LDRB    R4,[R0]
-@      And     AL,0F0h
-       BIC     R4,R4,#0xF
-@      ShL     AX,8
-@      SAR     AX,CL
-       MOV     R4,R4,LSL #(8+16)
-       MOV     R4,R4,ASR R5
-       
-@      ;Subtract 15/16 of second sample -----
-@      Sub     EAX,EBX
-       SUB     R4,R4,R3
-@      SAR     EBX,4   
-@      Add     EAX,EBX
-       ADD     R4,R4,R3,ASR #4
-@      MovSX   EBX,DX                          ;Truncate lower 16-bits 
-       MOV     R3,R2, LSL #16
-       MOV     R3,R3, ASR #16
-       
-@      ;Add 61/32 of last sample ------------
-@      And     DL,~3                        ;(Lose lower 2-bits of precision)
-       BIC     R2,R2,#3
-@      Add     EAX,EDX
-@      Add     EAX,EDX
-       ADD     R4,R4,R2
-       ADD     R4,R4,R2
-@      SAR     EDX,5
-       MOV     R2,R2,ASR #5
-@      Sub     EAX,EDX 
-       SUB     R4,R4,R2
-@      ShL     EDX,1   
-@      MovSX   EDX,DX  
-       MOV     R2,R2,LSL #(1+16)
-@      Sub     EAX,EDX
-       SUB     R4,R4,R2,ASR #(16)
-       
-@      Mov     [edi],AX
-       STRH    R4,[R1],#2
-
-@      Mov     DL,byte [esi]
-       LDRB    R2,[R0],#1
-@      ShL     DX,12
-@      SAR     DX,CL
-@      MovSX   EDX,DX
-       MOV     R2,R2,LSL #(12+16)
-       MOV     R2,R2,ASR R5
-                       
-@      Sub     EDX,EBX
-       SUB     R2,R2,R3
-@      SAR     EBX,4
-@      Add     EDX,EBX
-       ADD     R2,R2,R3,ASR #4
-@      MovSX   EBX,AX
-       MOV     R3,R4,LSL #16
-       MOV     R3,R3,ASR #16
-               
-@      And     AL,~3
-       BIC     R4,R4,#3
-@      Add     EDX,EAX
-@      Add     EDX,EAX
-       ADD     R2,R2,R4
-       ADD     R2,R2,R4
-@      SAR     EAX,5
-       MOV     R4,R4,ASR #5
-@      Sub     EDX,EAX
-       SUB     R2,R2,R4        
-@      ShL     EAX,1   
-@      MovSX   EAX,AX  
-       MOV     R4,R4,LSL #(1+16)
-@      Sub     EDX,EAX         
-       SUB     R2,R2,R4,ASR #(16)
-       
-
-@      Mov     [2+edi],DX
-       STRH    R2,[R1],#2
-@      Add     edi,4
-
-@      Inc     esi
-
-@      Dec     CH
-@      JNZ     @@Method22
-       SUBS    R6,R6,#1
-       BNE     Method22loop
-@      Pop     CX
-@      Ret     
-       LDMFD   SP!,{R5,R6}
-       MOV     PC,LR
-
-@ ALIGN        16
-@      ;[Delta]+[Smp-1](115/64)-[Smp-2](52/64) -
-@ @@Method32:
-Method32:      
-       /*MOV   R2,#0
-       MOV     R3,#0
-       LDMFD   SP!,{R5,R6}
-       MOV     PC,LR*/ 
-       ADD     R5,R5,#16
-Method32loop:
-@      MovSX   EAX,byte [esi]
-       LDRB    R4,[R0]
-@      And     AL,0F0h
-       BIC     R4,R4,#0xF
-@      ShL     AX,8
-@      SAR     AX,CL
-       MOV     R4,R4,LSL #(8+16)
-       MOV     R4,R4,ASR R5
-
-@      ;Subtract 13/16 of second sample -----
-@      Sub     EAX,EBX
-       SUB     R4,R4,R3
-@      SAR     EBX,3
-@      Add     EAX,EBX
-       ADD     R4,R4,R3,ASR #3
-@      SAR     EBX,1
-@      Add     EAX,EBX
-       ADD     R4,R4,R3,ASR #4
-@      MovSX   EBX,DX
-       MOV     R3,R2,LSL #16
-       MOV     R3,R3,ASR #16
-
-@      ;Add 115/64 of last sample -----------
-@ ;    And     DL,~3
-@      Add     EAX,EDX
-@      Add     EAX,EDX
-       ADD     R4,R4,R2
-       ADD     R4,R4,R2
-@      SAR     EDX,3
-@      Sub     EAX,EDX
-       SUB     R4,R4,R2,ASR #3
-@      SAR     EDX,1
-@      Sub     EAX,EDX
-       SUB     R4,R4,R2,ASR #4
-@      SAR     EDX,2
-@      Sub     EAX,EDX
-       SUB     R4,R4,R2,ASR #6
-
-@      Mov     [edi],AX
-       STRH    R4,[R1],#2
-
-@      Mov     DL, [esi]
-       LDRB    R2,[R0],#1
-@      ShL     DX,12
-@      SAR     DX,CL
-@      MovSX   EDX,DX
-       MOV     R2,R2,LSL #(12+16)
-       MOV     R2,R2,ASR R5
-
-@      Sub     EDX,EBX
-       SUB     R2,R2,R3
-@      SAR     EBX,3
-@      Add     EDX,EBX
-       ADD     R2,R2,R3,ASR #3
-@      SAR     EBX,1
-@      Add     EDX,EBX
-       ADD     R2,R2,R3,ASR #4
-@      MovSX   EBX,AX
-       MOV     R3,R4,LSL #16
-       MOV     R4,R4,ASR #16
-
-@ ;    And     AL,~3
-@      Add     EDX,EAX
-@      Add     EDX,EAX
-       ADD     R2,R2,R4
-       ADD     R2,R2,R4
-@      SAR     EAX,3
-@      Sub     EDX,EAX
-       SUB     R2,R2,R4,ASR #3
-@      SAR     EAX,1
-@      Sub     EDX,EAX
-       SUB     R2,R2,R4,ASR #4
-@      SAR     EAX,2
-@      Sub     EDX,EAX
-       SUB     R2,R2,R4,ASR #6
-
-@      Mov     [2+edi],DX
-       STRH    R2,[R1],#2
-@      Add     edi,4
-
-@      Inc     esi
-
-@      Dec     CH
-@      JNZ     @@Method32
-       SUBS    R6,R6,#1
-       BNE     Method32loop
-@      Pop     CX
-@      Ret             
-       LDMFD   SP!,{R5,R6}
-       MOV     PC,LR
-
-/*SMP12CLIP16:
-       cmp eax, -32768
-       jg CLIP16SMP1SKIP0
-       je CLIP16SMP1SKIP1
-       mov eax, -32768
-       jmp CLIP16SMP1SKIP1
-CLIP16SMP1SKIP0:
-       cmp eax, 32767
-       jle CLIP16SMP1SKIP1
-       mov eax, 32767
-CLIP16SMP1SKIP1:
-       cmp edx, -32768
-       jg CLIP16SMP2SKIP0
-       je CLIP16SMP2SKIP1
-       mov edx, -32768
-       jmp CLIP16SMP2SKIP1
-CLIP16SMP2SKIP0:
-       cmp edx, 32767
-       jle CLIP16SMP2SKIP1
-       mov edx, 32767
-CLIP16SMP2SKIP1:*/
-
-
-.pool