Нужна помощь по ассемблеру SH4 - SunDragon -  28.01.2006 20:16
 
 
Ктонить более менее знает ассемблер SH4? 
нужно разобрать смысл данного кода: 
 
 
 
 
Нужна помощь по ассемблеру SH4 - SWAT -  29.01.2006 18:47
 
 
Беее этот код после дисассемблера, лично я в нем нифига немогу понять:))))))
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  01.02.2010 23:15
 
 
кто нить вообще видел ассемблер для дримы?  
просто не могу нигде найти. Вроде как на сайтах пишут что он существует, но ссылок не видел 
может кто помочь с данным вопросом?
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - SWAT -  02.02.2010 17:42
 
 
Я же тебе дал ссылку на доку в личке: http://www.dc-swat.net.ru/dc_info/h14th002d2.7z 
Ассемблер как ассемблер, ничего особенного в нем нет.
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - SWAT -  02.02.2010 17:44
 
 
Ну а если уж оочень хочется посмотреть на код, вот, пожалуйста:  
 
Код: 
 ! KallistiOS ##version## 
! 
!   arch/dreamcast/kernel/entry.s 
!   (c)2000-2001 Dan Potter 
! 
! Assembler code for entry and exit to/from the kernel via exceptions 
! 
 
! Routine that all exception handlers jump to after setting 
! an error code. Out of neccessity, all of this function is in 
! assembler instead of C. Once the registers are saved, we will 
! jump into a shared routine. This register save and restore code 
! is mostly from my sh-stub code. For now this is pretty high overhead 
! for a context switcher (or especially a timer! =) but it can 
! be optimized later. 
 
    .text 
    .align        2 
    .globl        _irq_srt_addr 
    .globl        _irq_handle_exception 
    .globl        _irq_save_regs 
    .globl        _irq_force_return 
 
! Static kernel-mode stack; we can get away with this because in our 
! tiny microkernel, only one thread will ever actually be sitting inside 
! the kernel code. All other threads will be halted at the point at which 
! they made their trap call into the kernel. This lets us do all sorts of 
! useful things, like freedom to remap memory at any time, safety from 
! mis-mapped user-mode stack pointers, etc. It also opens the door for 
! hard real-time interrupts and exceptions that interrupt the kernel 
! itself. 
    .space        4096        ! One page 
krn_stack: 
 
! All exception vectors lead to Rome (i.e., this label). 
_irq_save_regs: 
! On the SH4, an exception triggers a toggle of RB in SR. So all 
! the R0-R7 registers were convienently saved for us. 
    mov.l        _irq_srt_addr,r0    ! Grab the location of the reg store 
    add        #0x20,r0    ! Start at the top of the BANK regs 
    stc.l        r7_bank,@-r0    ! Save R7 
    stc.l        r6_bank,@-r0    ! Save R6 
    stc.l        r5_bank,@-r0    ! Save R5 
    stc.l        r4_bank,@-r0    ! Save R4 
    stc.l        r3_bank,@-r0    ! Save R3 
    stc.l        r2_bank,@-r0    ! Save R2 
    stc.l        r1_bank,@-r0    ! Save R1 
    stc.l        r0_bank,@-r0    ! Save R0 
     
    mov.l        r8,@(0x20,r0)    ! save R8 
    mov.l        r9,@(0x24,r0)    ! save R9 
    mov.l        r10,@(0x28,r0)    ! save R10 
    mov.l        r11,@(0x2c,r0)    ! save R11 
    mov.l        r12,@(0x30,r0)    ! save R12 
    mov.l        r13,@(0x34,r0)    ! save R13 
    mov.l        r14,@(0x38,r0)    ! save R14 
    mov.l        r15,@(0x3c,r0)    ! save R15 (SP) 
    add        #0x5c,r0    ! readjust register pointer 
    stc.l        ssr,@-r0    ! save SSR  0x58 
    sts.l        macl,@-r0    ! save MACL 0x54 
    sts.l        mach,@-r0    ! save MACH 0x50 
    stc.l        vbr,@-r0    ! save VBR  0x4c 
    stc.l        gbr,@-r0    ! save GBR  0x48 
    sts.l        pr,@-r0        ! save PR   0x44 
    stc.l        spc,@-r0    ! save PC   0x40 
     
    add        #0x60,r0    ! readjust register pointer 
    add        #0x44,r0 
    sts.l        fpul,@-r0    ! save FPUL  0xe0 
    sts.l        fpscr,@-r0    ! save FPSCR 0xdc 
    mov        #0,r2        ! Set known FP flags 
    lds        r2,fpscr 
    fmov.s        fr15,@-r0    ! save FR15  0xd8 
    fmov.s        fr14,@-r0    ! save FR14 
    fmov.s        fr13,@-r0    ! save FR13 
    fmov.s        fr12,@-r0    ! save FR12 
    fmov.s        fr11,@-r0    ! save FR11 
    fmov.s        fr10,@-r0    ! save FR10 
    fmov.s        fr9,@-r0    ! save FR9 
    fmov.s        fr8,@-r0    ! save FR8 
    fmov.s        fr7,@-r0    ! save FR7 
    fmov.s        fr6,@-r0    ! save FR6 
    fmov.s        fr5,@-r0    ! save FR5 
    fmov.s        fr4,@-r0    ! save FR4 
    fmov.s        fr3,@-r0    ! save FR3 
    fmov.s        fr2,@-r0    ! save FR2 
    fmov.s        fr1,@-r0    ! save FR1 
    fmov.s        fr0,@-r0    ! save FR0   0x9c 
    frchg                ! Second FP bank 
    fmov.s        fr15,@-r0    ! save FR15  0x98 
    fmov.s        fr14,@-r0    ! save FR14 
    fmov.s        fr13,@-r0    ! save FR13 
    fmov.s        fr12,@-r0    ! save FR12 
    fmov.s        fr11,@-r0    ! save FR11 
    fmov.s        fr10,@-r0    ! save FR10 
    fmov.s        fr9,@-r0    ! save FR9 
    fmov.s        fr8,@-r0    ! save FR8 
    fmov.s        fr7,@-r0    ! save FR7 
    fmov.s        fr6,@-r0    ! save FR6 
    fmov.s        fr5,@-r0    ! save FR5 
    fmov.s        fr4,@-r0    ! save FR4 
    fmov.s        fr3,@-r0    ! save FR3 
    fmov.s        fr2,@-r0    ! save FR2 
    fmov.s        fr1,@-r0    ! save FR1 
    fmov.s        fr0,@-r0    ! save FR0   0x5c 
    frchg                ! First FP bank again 
 
    ! Setup our kernel-mode stack 
    mov.l        stkaddr,r15 
 
    ! Before we enter the main C code again, re-enable exceptions 
    ! (but not interrupts) so we can still debug inside handlers. 
    bsr        _irq_disable 
    nop 
 
    ! R4 still contains the exception code 
    mov.l        hdl_except,r2    ! Call handle_exception 
    jsr        @r2 
    nop 
    bra        _save_regs_finish 
    nop 
 
! irq_force_return() jumps here; make sure we're in register 
! bank 1 (as opposed to 0) 
_irq_force_return: 
    mov.l    _irqfr_or,r1 
    stc    sr,r0 
    or    r1,r0 
    ldc    r0,sr 
    bra    _save_regs_finish 
    nop 
     
    .align 2 
_irqfr_or: 
    .long    0x20000000 
stkaddr: 
    .long    krn_stack 
 
 
! Now restore all the registers and jump back to the thread 
_save_regs_finish: 
    mov.l    _irq_srt_addr, r1    ! Get register store address 
    ldc.l    @r1+,r0_bank        ! restore R0    (r1 is now _irq_srt_addr+0) 
    ldc.l    @r1+,r1_bank        ! restore R1 
    ldc.l    @r1+,r2_bank        ! restore R2 
    ldc.l    @r1+,r3_bank        ! restore R3 
    ldc.l    @r1+,r4_bank        ! restore R4 
    ldc.l    @r1+,r5_bank        ! restore R5 
    ldc.l    @r1+,r6_bank        ! restore R6 
    ldc.l    @r1+,r7_bank        ! restore R7 
    add    #-32,r1            ! Go back to the front 
    mov.l    @(0x20,r1), r8        ! restore R8    (r1 is now ...+0) 
    mov.l    @(0x24,r1), r9        ! restore R9 
    mov.l    @(0x28,r1), r10        ! restore R10 
    mov.l    @(0x2c,r1), r11        ! restore R11 
    mov.l    @(0x30,r1), r12        ! restore R12 
    mov.l    @(0x34,r1), r13        ! restore R13 
    mov.l    @(0x38,r1), r14        ! restore R14 
    mov.l    @(0x3c,r1), r15        ! restore program's stack 
     
    add    #0x40,r1        ! jump up to status words 
    ldc.l    @r1+,spc        ! restore SPC 0x40    (r1 is now +0x40) 
    lds.l    @r1+,pr            ! restore PR  0x44    (+0x44) 
    ldc.l    @r1+,gbr        ! restore GBR 0x48    (+0x48) 
!    ldc.l    @r1+,vbr        ! restore VBR (don't play with VBR) 
    add    #4,r1            !            (+0x4c) 
    lds.l    @r1+,mach        ! restore MACH 0x50    (+0x50) 
    lds.l    @r1+,macl        ! restore MACL 0x54    (+0x54) 
    ldc.l    @r1+,ssr        ! restore SSR  0x58    (+0x58) 
 
    mov    #0,r2            ! Set known FP flags    (+0x5c) 
    lds    r2,fpscr 
    frchg                ! Second FP bank 
    fmov.s    @r1+,fr0        ! restore FR0  0x5c 
    fmov.s    @r1+,fr1        ! restore FR1 
    fmov.s    @r1+,fr2s        ! restore FR2 
    fmov.s    @r1+,fr3        ! restore FR3 
    fmov.s    @r1+,fr4        ! restore FR4 
    fmov.s    @r1+,fr5        ! restore FR5 
    fmov.s    @r1+,fr6        ! restore FR6 
    fmov.s    @r1+,fr7        ! restore FR7 
    fmov.s    @r1+,fr8        ! restore FR8 
    fmov.s    @r1+,fr9        ! restore FR9 
    fmov.s    @r1+,fr10        ! restore FR10 
    fmov.s    @r1+,fr11        ! restore FR11 
    fmov.s    @r1+,fr12        ! restore FR12 
    fmov.s    @r1+,fr13        ! restore FR13 
    fmov.s    @r1+,fr14        ! restore FR14 
    fmov.s    @r1+,fr15        ! restore FR15 0x98 
    frchg                ! First FP bank 
    fmov.s    @r1+,fr0        ! restore FR0  0x9c 
    fmov.s    @r1+,fr1        ! restore FR1 
    fmov.s    @r1+,fr2        ! restore FR2 
    fmov.s    @r1+,fr3        ! restore FR3 
    fmov.s    @r1+,fr4        ! restore FR4 
    fmov.s    @r1+,fr5        ! restore FR5 
    fmov.s    @r1+,fr6        ! restore FR6 
    fmov.s    @r1+,fr7        ! restore FR7 
    fmov.s    @r1+,fr8        ! restore FR8 
    fmov.s    @r1+,fr9        ! restore FR9 
    fmov.s    @r1+,fr10        ! restore FR10 
    fmov.s    @r1+,fr11        ! restore FR11 
    fmov.s    @r1+,fr12        ! restore FR12 
    fmov.s    @r1+,fr13        ! restore FR13 
    fmov.s    @r1+,fr14        ! restore FR14 
    fmov.s    @r1+,fr15        ! restore FR15  0xd8 
    lds.l    @r1+,fpscr        ! restore FPSCR 0xdc 
    lds.l    @r1+,fpul        ! restore FPUL  0xe0 
 
!    add    #-0x70,r1        ! jump back to registers 
!    add    #-0x34,r1 
!    mov.l    @(0,r1),r0        ! restore R0 
!    mov.l    @(4,r1),r1        ! restore R1 
    mov    #2,r0 
 
    rte                ! return 
    nop 
     
    .align 2 
_irq_srt_addr: 
    .long    0    ! Save Regs Table -- this is an indirection 
            ! so we can easily swap out pointers during a 
            ! context switch. 
hdl_except: 
    .long    _irq_handle_exception 
 
 
! Special case handler for TLB miss exceptions. There are two reasons 
! why we'd want to do this and complicate things. The first is speed -- 
! if TLB misses happen often (which is likely if we're using the MMU 
! allocator) then saving the full processor context and switching 
! back is going to be a major drain on the dcache and also just 
! general processor time. Second reason is that it allows us to process 
! these inside an IRQ/exception handler without having to have nestable 
! exceptions just yet. That's a whole 'nother egg I don't want to 
! break just yet. 
! 
! !!NOTE!! This is highly dependent on the structure of the MMU tables 
! in mmu.h and the MMU code in mmu.c. If either of those change, this will 
! likely need to change as well. 
    .text 
    .align 2 
tlb_miss_hnd: 
    ! Get the exception event code; we want to handle only 
    ! 0x0040 (ITLB_MISS/DTLB_MISS_READ) or 0x0060 (DTLB_MISS_WRITE) 
    mov    #-1,r3        ! 0xff000024 (EXPEVT) -> r3 
    shll16    r3 
    shll8    r3 
    add    #0x24,r3 
    mov.l    @r3,r0        ! Get EXPEVT 
 
    mov    #0x40,r1    ! 0x0040 -> r1 
 
    cmp/eq    r0,r1 
    bt.s    tmh_doit 
    mov    #0x60,r1 
 
    cmp/eq    r0,r1 
    bt    tmh_doit 
 
    ! It's not one of the MISS codes, just send it on to the normal 
    ! irq processing. 
    bra    _irq_save_regs 
    mov    #2,r4 
 
tmh_doit: 
    ! So it's an ITLB or DTLB_MISS code. Look at the MMU module's 
    ! shortcut flag. If that's set, it's safe to pass on processing 
    ! directly to the mapping function. 
 
    ! Check the shortcut flag 
    mov.l    tmh_shortcut_addr,r0 
    mov.l    @r0,r0 
    cmp/pz    r0 
    bt    tmh_clear 
    bra    _irq_save_regs 
    mov    #2,r4 
 
tmh_clear: 
    ! Coast is clear -- setup the args and call the C function. Regs R0-R7 
    ! are volatile on SH-4 anyway, and R8-R14 will be saved if needed 
    ! onto our temp stack. So all we need to worry about here, at least 
    ! for this small C call, is the stack. To faciliate the stack, we'll 
    ! save R15 and setup a small temp stack. 
    mov.l    tmh_stack_save_addr,r0        ! Setup stack 
    mov.l    r15,@r0 
    mov.l    tmh_temp_stack_addr,r15 
 
    mov    #0,r4                ! Call gen_miss 
    mov    #0,r5 
    mov.l    tmh_gen_miss_addr,r0 
    jsr    @r0 
    mov    #0,r6 
 
    mov.l    tmh_stack_save,r15        ! Fix stack back 
 
    ! Return back from the exception 
    rte 
    nop 
 
    .align    2 
tmh_shortcut_addr: 
    .long    _mmu_shortcut_ok 
tmh_stack_save_addr: 
    .long    tmh_stack_save 
tmh_stack_save: 
    .long    0 
tmh_temp_stack_addr: 
    .long    tmh_temp_stack 
tmh_gen_miss_addr: 
    .long    _mmu_gen_tlb_miss 
 
    .data 
    .space    256 
tmh_temp_stack: 
 
 
! The SH4 has very odd exception handling. Instead of having a vector 
! table like a sensible processor, it has a vector code block. *sigh* 
! Thus this table of assembly code. Note that we can't catch reset 
! exceptions at all, but that really shouldn't matter. 
    .text 
    .align 2 
    .globl _irq_vma_table 
_irq_vma_table: 
    .rep    0x100 
    .byte    0 
    .endr 
     
_vma_table_100:        ! General exceptions 
    nop                ! Can't have a branch as the first instr 
    bra    _irq_save_regs 
    mov    #1,r4            ! Set exception code 
     
    .rep    0x300 - 6 
    .byte    0 
    .endr 
 
_vma_table_400:        ! TLB miss exceptions (MMU) 
    nop 
!    bra    tlb_miss_hnd 
!    nop 
    bra    _irq_save_regs 
    mov    #2,r4            ! Set exception code 
 
    .rep    0x200 - 6 
    .byte    0 
    .endr 
 
_vma_table_600:        ! IRQs 
    nop 
    bra    _irq_save_regs 
    mov    #3,r4            ! Set exception code 
 
 
! Disable interrupts, but leave exceptions enabled. Returns the old 
! interrupt status. 
! 
! Calling this inside an exception/interrupt handler will generally not have 
! any effect. 
! 
    .globl    _irq_disable 
_irq_disable: 
    mov.l    _irqd_and,r1 
    mov.l    _irqd_or,r2 
    stc    sr,r0 
    and    r0,r1 
    or    r2,r1 
    ldc    r1,sr 
    rts 
    nop 
     
    .align 2 
_irqd_and: 
    .long    0xefffff0f 
_irqd_or: 
    .long    0x000000f0 
 
 
! Enable interrupts and exceptions. Returns the old interrupt status. 
! 
! Call this inside an exception/interrupt handler only with GREAT CARE. 
! 
    .globl    _irq_enable 
_irq_enable: 
    mov.l    _irqe_and,r1 
    stc    sr,r0 
    and    r0,r1 
    ldc    r1,sr 
    rts 
    nop 
     
    .align 2 
_irqe_and: 
    .long    0xefffff0f 
 
 
! Restore interrupts to the state returned by irq_disable() 
! or irq_enable(). 
    .globl    _irq_restore 
_irq_restore: 
    ldc    r4,sr 
    rts 
    nop 
 
 
! Retrieve SR 
    .globl    _irq_get_sr 
_irq_get_sr: 
    rts 
    stc    sr,r0
  
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  03.02.2010 21:13
 
 
лады, попробую сам разобраться...
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Rio -  13.02.2010 17:51
 
 
Кошмар, это же сколько времени занимает разработка такой вот обычной микропрограммы на ассемблере...
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  19.03.2010 11:29
 
 
копался в просторах интернета и нашел нечто: 
 
SuperH™ (SH) 32-Bit RISC MCU/MPU Series 
SH7750 
High-Performance RISC Engine 
Programming Manual 
 
теперь вот пробую разобраться.  
SWAT,а у тебя такое есть? Если нет, могу поделиться.
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  19.03.2010 11:46
 
 
В частности там есть такое: 
 
Operation 
ADD(long m, long n) /* ADD Rm,Rn */ 
{ 
R[n]+=R[m]; 
PC+=2; 
} 
ADDI(long i, long n) /* ADD #imm,Rn */ 
{ 
if ((i&0x80)==0) 
R[n]+=(0x000000FF & (long)i); 
else R[n]+=(0xFFFFFF00 | (long)i); 
PC+=2; 
} 
 
Example 
ADD R0,R1         ;Before execution R0 = H’7FFFFFFF, R1 = H’00000001  ;After execution R1 = H’80000000 
ADD #H’01,R2     ;Before execution R2 = H’00000000  ;After execution R2 = H’00000001 
ADD #H’FE,R3     ;Before execution R3 = H’00000001  ;After execution R3 = H’FFFFFFFF
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - SWAT -  19.03.2010 17:37
 
 
У меня есть больше, чем мне нужно.
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  28.03.2010 01:35
 
 
2SWAT: мне нужен компилятор sh4,  
по ссылке http://www.dc-swat.net.ru/dcdev/soft/342sh-elf.7z не качаетсо   
Он вообще под что? (с/с++/) 
(хотелось бы знать,язык ассемблер он компилирует?)
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - SWAT -  28.03.2010 10:56
 
 
Скачай KOS, там есть в utils папка dc-chain, в которой есть скрипты для скачивания и сборки компиляторов.  
Все что нужно тебе они скомпилируют.
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  28.03.2010 20:41
 
 
спасибо за понятный и дельный ответ.
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - SWAT -  29.03.2010 19:08
 
 
Если не шаришь, тогда не компосируй мозги и установи все из DC Dev ISO
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  29.03.2010 22:02
 
 
Да нет,я решил компиляцию до лучших времен оставить    
Так проще будет и мне и тебе (ато достаю тут глупыми вопросами) 
 
>>>>спасибо за понятный и дельный ответ.  
это был не сарказм!  
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - cvgs -  30.03.2010 17:24
 
 
 (29.03.2010 19:08)SWAT писал(а):  Если не шаришь, тогда не компосируй мозги и установи все из DC Dev ISO 
грубиян...
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - SWAT -  30.03.2010 17:45
 
 
  
Я наверное не уточнил кому  ) Я имел ввиду не компосировать мозги самому себе такими задачами  )
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Rio -  22.05.2010 01:40
 
 
На ассемблере тебе бы операционную систему новую писать, никак не игровую программу.  
Короче тот код что ты привел, это не ассемблер даже. Это Си. Только и в си этот код пахать не станет. Т.к. это просто демонстрация логики работы ассемблера. Советую книга Зубкова почитать, "Ассемблер для DOS, Windows, и Unix". С этого лучше начать, если уж хочешь развиваться в данном направлении. 
PHP код: 
 Operation ADD(long m, long n) /* ADD Rm,Rn */ { R[n]+=R[m]; PC+=2; } ADDI(long i, long n) /* ADD #imm,Rn */ { if ((i&0x80)==0) R[n]+=(0x000000FF & (long)i); else R[n]+=(0xFFFFFF00 | (long)i); PC+=2; } 
 
  
Описываются две функции на языке Си. 
Первая -  сложение двух операндов, есть регистр приемника, и регистр источника. Оба числа складываются, в итоге регистр приемника затирается значением результата. (старое значение теряется).  
Вторая - тоже сложение, только с участием непосредственного операнда (immediate). 
В-общем читай Зубкова, иначе не поймешь нефига. А вообще это надо быть программером)))
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Freedom -  25.05.2010 00:05
 
 
Итак начнем по порядку: 
Цитата:На ассемблере тебе бы операционную систему новую писать, никак не игровую программу.  
Ммм, а программы что никак?   
Цитата:Короче тот код что ты привел, это не ассемблер даже. 
А вот этот кусок: 
ADD R0,R1 ;Before execution R0 = H’7FFFFFFF, R1 = H’00000001 ;After execution R1 = H’80000000 
ADD #H’01,R2 ;Before execution R2 = H’00000000 ;After execution R2 = H’00000001 
ADD #H’FE,R3 ;Before execution R3 = H’00000001 ;After execution R3 = H’FFFFFFFF 
Чистейший ассемблер 
Цитата:Это Си. 
ADD(long m, long n) /* ADD Rm,Rn */ 
{ 
R[n]+=R[m]; 
PC+=2; 
} 
ADDI(long i, long n) /* ADD #imm,Rn */ 
{ 
if ((i&0x80)==0) 
R[n]+=(0x000000FF & (long)i); 
else R[n]+=(0xFFFFFF00 | (long)i); 
PC+=2; 
}  
Мб это? 
Цитата:Только и в си этот код пахать не станет. 
Будь спокоен! Уж я в курсе. 
Цитата:Т.к. это просто демонстрация логики работы ассемблера. 
Причем тут ассемблер! Ассемблер еще раз повторюсь ВОТ: 
ADD R0,R1 
ADD #H’01,R2 
ADD #H’FE,R3  
Цитата:Советую книга Зубкова почитать, "Ассемблер для DOS, Windows, и Unix". 
Спасибо, в литературе под PC не нуждаюсь... 
Цитата:С этого лучше начать, если уж хочешь развиваться в данном направлении. 
Без коментариев... 
Цитата:В-общем читай Зубкова, иначе не поймешь нефига. 
Капец... И без него там понимать нечего,все проще простого.Ну а ш4 это тебе не пеньки, архитектура другая, не говоря уже про регистры... Так что с Зубковым, не в тему 
Цитата:А вообще это надо быть программером))) 
Вот тут ты прав на все 100
 
 
 
Ответ: Нужна помощь по ассемблеру SH4 - Rio -  26.05.2010 18:45
 
 
Мб это!?! 
Чувак, ты либо идиот, либо с тобой не все в порядке. 
Во-первых, именно этот код я и привел, это раз. А не ассемблер. 
Во-вторых, если ты все знаешь, какого хера тогда вообще спрашиваешь? Напиши сам компайлер для своего излюбленного ассемблера, все коды команд приведены в Programming Manual. Что сложного то? Захотел в космос? Сел в ракету и полетел! 
Заодно выучи все команды для графического чипа, контроллера звука, контроллера GD-rom... Как раз, глядишь, и напишешь нормальную интерактивную игровую программу! Вручную будешь управлять DMAC, SCSI, MMU. А хуле там. Норм.
 
 
 
 |