Annotation of doom/gpubase.gas, revision 1.1.1.1

1.1       root        1: _gpubase::
                      2:        .gpu
                      3:        .org    $f03000
                      4: 
                      5: RISC_FLAGS     .equ    $f02100
                      6: DIVCONTROL             .equ    $f0211c
                      7: 
                      8: MAIN_STACK     .equ    $f04000
                      9: 
                     10: LOADPOINT              .equ    $f03100
                     11: 
                     12: LE                     .ccdef          4               ; CC
                     13: GT          .ccdef          8               ; CS
                     14: 
                     15: FP                     .equr r14
                     16: scratch        .equr r10
                     17: scratch2       .equr r11
                     18: RETURNVALUE .equr r29
                     19: RETURNPOINT .equr r28
                     20: MATH_A                 .equr r27
                     21: MATH_B                 .equr r26
                     22: MATH_C                 .equr r25
                     23: MATH_RTS       .equr r24
                     24: MATH_SIGN      .equr r23
                     25: 
                     26: R0_VMODE       .equr   r0
                     27: R0_FLAGS       .equr   r1
                     28: R0_INTSTACK    .equr   r2
                     29: R0_MODEBITS    .equr   r3
                     30: 
                     31: R0_TEMP1       .equr   r28
                     32: R0_TEMP2       .equr   r29
                     33: R0_TEMP3       .equr   r30
                     34: R0_ISRSTACK    .equr   r31
                     35: 
                     36: ;==============================================================================
                     37: 
                     38: 
                     39: ;--------------------
                     40: ;
                     41: ; interrupt vectors
                     42: ;
                     43: ;--------------------
                     44:        movei   #0,r30                          ; cpu int
                     45:        jump    T,(r30)
                     46:        nop
                     47:        nop
                     48:        nop
                     49:        nop
                     50:        
                     51:        movei   #0,r30                          ; dsp int
                     52:        jump    T,(r30)
                     53:        nop
                     54:        nop
                     55:        nop
                     56:        nop
                     57:        
                     58:        movei   #0,r30                          ; timing generator
                     59:        jump    T,(r30)
                     60:        nop
                     61:        nop
                     62:        nop
                     63:        nop
                     64:                
                     65: ;
                     66: ; object processor interrupt
                     67: ;
                     68:        load    (R0_FLAGS),r29           ; get current flags
                     69: 
                     70:        move    R0_VMODE,r30            ; VMODE
                     71:        storew  R0_MODEBITS,(r30) 
                     72:        subq    #2,r30                          ; $f00026, OBF  
                     73:        storew  r28,(r30)                       ; restart object processor
                     74: 
                     75:        bclr    #3,r29              ; clear IMASK
                     76:        bset    #12,r29              ; and interrupt latch
                     77: 
                     78:        load    (r31),r28           ; get last instruction address
                     79:        move    R0_INTSTACK,r31         ; reset stack
                     80: 
                     81:        addq    #2,r28                  ; point to next instruction to execute
                     82:        jump    T,(r28)             ; return
                     83:        store   r29,(R0_FLAGS)      ; restore flags
                     84: 
                     85:        .long
                     86: _gpucodestart::                .dc.l   0
                     87: _gpufinished::         .dc.l   0
                     88: 
                     89: _intstack:                     .dc.l   0,0,0,0         ; give it some room to be flaky...
                     90: 
                     91:        
                     92: ;-----------------------------------------------------------------------------
                     93: ;
                     94: ; init code
                     95: ;
                     96: ;-----------------------------------------------------------------------------
                     97: 
                     98: _gpubase_init::
                     99:        movei   #RISC_FLAGS,R0_FLAGS
                    100:        movei   #_intstack+8,R0_INTSTACK
                    101:        move    R0_INTSTACK,r31
                    102:        movei   #$f00028,R0_VMODE
                    103:        movei   #$c1+(3<<9),R0_MODEBITS         ; 320 mode
                    104:        movei   #(1<<7)+(1<<14),r9                      ; enable OBJ, reg page 1
                    105:        store   r9,(R0_FLAGS)
                    106: 
                    107:        nop                                                                     ; wait for the reg page to flip
                    108:        nop
                    109:        nop
                    110:        nop
                    111:        
                    112: ;--------------------
                    113: ;
                    114: ; wait for a load command
                    115: ;
                    116: ;--------------------
                    117: nothingwaiting:
                    118:        movei   #_gpufinished,r7
                    119:        moveq   #1,r1
                    120:        store   r1,(r7)                         ; set _gpufinished as completion signal
                    121: 
                    122: waitcmd:
                    123:        movei   #_gpucodestart,r2
                    124:        load    (r2),r1
                    125:        or              r1,r1
                    126:        jr              EQ,nothingwaiting
                    127:        nop
                    128:        
                    129:        movei   #_gpufinished,r7
                    130:        moveq   #0,r0
                    131:        store   r0,(r2)                 ; gpucodestart = 0
                    132:        store   r0,(r7)                 ; gpufinished = 0
                    133:        
                    134:        move    r1,r2
                    135:        subq    #4,r2
                    136:        load    (r2),r2                 ; length is stored just below start address
                    137: 
                    138:        shrq    #3,r2                   ; number of phrases to bopy
                    139:        
                    140:        movei   #LOADPOINT,r0   ; destination for code
                    141:        move    r1,r3
                    142:        move    r0,r4
                    143:        addq    #4,r3
                    144:        addq    #4,r4
                    145: loadloop:
                    146:        load    (r1),r5
                    147:        load    (r3),r6
                    148:        store   r5,(r0)
                    149:        addqt   #8,r1
                    150:        addqt   #8,r3
                    151:        store   r6,(r4)
                    152:        subq    #1,r2                   ; decrement count
                    153:        addqt   #8,r4
                    154:        jr              PL,loadloop
                    155:        addqt   #8,r0
                    156:        nop
                    157:        
                    158: ;      
                    159: ; call it
                    160: ;
                    161:        movei   #LOADPOINT,r0
                    162:        movei   #waitcmd,RETURNPOINT
                    163:        movei   #MAIN_STACK,r14
                    164:  
                    165:        jump    T,(r0)
                    166:        nop
                    167:        
                    168:        .phrase
                    169:        .68000

unix.superglobalmegacorp.com