| version 1.3, 2003/12/08 17:57:29 | version 1.7, 2004/02/18 21:58:42 | 
| Line 61  G_MASTER   equ  (GD_SIZE * -1) | Line 61  G_MASTER   equ  (GD_SIZE * -1) | 
 | G_SLAVE                         equ             0 | G_SLAVE                         equ             0 | 
 | G_MODE1                         equ             (GD_SIZE + &00) | G_MODE1                         equ             (GD_SIZE + &00) | 
 | ; G_mode2                       equ             (GD_SIZE + &01) | ; G_mode2                       equ             (GD_SIZE + &01) | 
| ; G_vsync                       equ             (GD_SIZE + &02) | G_CLOCK                         equ             (GD_SIZE + &02) | 
| ; G_vsyncint            equ             (GD_SIZE + &03) | ; G_crt15khz            equ             (GD_SIZE + &03) | 
| ; G_analog                      equ             (GD_SIZE + &04) | ; G_m_drawing           equ             (GD_SIZE + &04) | 
| ; G_palnum                      equ             (GD_SIZE + &08) | ; G_s_drawing           equ             (GD_SIZE + &05) | 
| ; G_degpal                      equ             (GD_SIZE + &0c) | ; G_vsync                       equ             (GD_SIZE + &06) | 
| ; G_anapal                      equ             (GD_SIZE + &10) | ; G_vsyncint            equ             (GD_SIZE + &07) | 
| G_CLOCK                         equ             (GD_SIZE + &50) | ; G_display                     equ             (GD_SIZE + &08) | 
| ; G_display                     equ             (GD_SIZE + &51) | ; G_bitac                       equ             (GD_SIZE + &09) | 
| ; G_bitac                       equ             (GD_SIZE + &52) | ; G_analog                      equ             (GD_SIZE + &0c) | 
| ; G_m_drawing           equ             (GD_SIZE + &53) | ; G_palnum                      equ             (GD_SIZE + &10) | 
| ; G_s_drawing           equ             (GD_SIZE + &54) | ; G_degpal                      equ             (GD_SIZE + &14) | 
|  | ; G_anapal                      equ             (GD_SIZE + &18) | 
 |  |  | 
 |  |  | 
 |  | INCLUDE ..\..\i286a\i286a.inc | 
 |  |  | 
 | IMPORT  np2cfg | IMPORT  np2cfg | 
| IMPORT  mem | IMPORT  i286acore | 
 | IMPORT  np2_vram | IMPORT  np2_vram | 
 | IMPORT  dsync | IMPORT  dsync | 
 | IMPORT  vramupdate | IMPORT  vramupdate | 
| Line 83  G_CLOCK    equ  (GD_SIZE + &50) | Line 86  G_CLOCK    equ  (GD_SIZE + &50) | 
 | IMPORT  gdc | IMPORT  gdc | 
 |  |  | 
 | EXPORT  grph_table0 | EXPORT  grph_table0 | 
| EXPORT  makegrph_init | EXPORT  makegrph_initialize | 
 | EXPORT  makegrph | EXPORT  makegrph | 
 |  |  | 
 | AREA    .rdata, DATA, READONLY | AREA    .rdata, DATA, READONLY | 
| Line 108  grph_table0  dcd  &00000000 | Line 111  grph_table0  dcd  &00000000 | 
 |  |  | 
 | AREA    .text, CODE, READONLY | AREA    .text, CODE, READONLY | 
 |  |  | 
| makegrph_init   mov             pc, lr | makegrph_initialize | 
|  | mov             pc, lr | 
 |  |  | 
 |  |  | 
 | ; r8 = mem | ; r8 = mem | 
| Line 116  makegrph_init mov  pc, lr | Line 120  makegrph_init mov  pc, lr | 
 | ; r10 = out | ; r10 = out | 
 | ; r11 = grph_table0 | ; r11 = grph_table0 | 
 | ; tmp r2, r3, r4, r5, r12 | ; tmp r2, r3, r4, r5, r12 | 
 | MACRO |  | 
 | $label  PIXADD          $shift |  | 
 | $label                  and             r12, r3, #&0f |  | 
 | and             r3, r3, #&f0 |  | 
 | ldr             r3, [r11, r3, lsr #2] |  | 
 | ldr             r12, [r11, r12, lsl #2] |  | 
 | orr             r4, r4, r3, lsl #$shift |  | 
 | orr             r5, r5, r12, lsl #$shift |  | 
 | MEND |  | 
 |  |  | 
 | MACRO | MACRO | 
 | $label  GRPHDATASET | $label  GRPHDATASET | 
| $label                  add             r2, r8, r9, lsr #17 | $label                  add             r3, r8, #(VRAM_R - VRAM_B) | 
| ldrb    r3, [r2] | ldrb    r2, [r8, r9 lsr #17] | 
| add             r2, r2, #(VRAM_R - VRAM_B) | ldrb    r3, [r3, r9 lsr #17] | 
| and             r12, r3, #&0f | add             r8, r8, #(VRAM_G - VRAM_B) | 
| and             r3, r3, #&f0 | and             r12, r2, #&f0 | 
| ldr             r4, [r11, r3, lsr #2] | and             r2, r2, #&0f | 
| ldr             r5, [r11, r12, lsl #2] | ldr             r4, [r11, r12, lsr #2]                  ; 0 | 
| ldrb    r3, [r2] | ldr             r5, [r11, r2, lsl #2]                   ; 0 | 
| add             r2, r2, #(VRAM_G - VRAM_R) | and             r12, r3, #&f0                                   ; 1 | 
| PIXADD  1 | and             r3, r3, #&0f                                    ; 1 | 
| ldrb    r3, [r2] | ldr             r12, [r11, r12, lsr #2]                 ; 1 | 
| add             r2, r2, #(VRAM_E - VRAM_G) | ldr             r3, [r11, r3, lsl #2]                   ; 1 | 
| PIXADD  2 | ldrb    r2, [r8, r9 lsr #17] | 
| ldrb    r3, [r2] | orr             r4, r4, r12, lsl #1                             ; 1 | 
| PIXADD  3 | orr             r5, r5, r3, lsl #1                              ; 1 | 
| str             r4, [r10] | add             r8, r8, #(VRAM_E - VRAM_G) | 
| str             r5, [r10, #4] | and             r12, r2, #&f0                                   ; 2 | 
|  | and             r2, r2, #&0f                                    ; 2 | 
|  | ldr             r12, [r11, r12, lsr #2]                 ; 2 | 
|  | ldrb    r3, [r8, r9 lsr #17] | 
|  | ldr             r2, [r11, r2, lsl #2]                   ; 2 | 
|  | orr             r4, r4, r12, lsl #2                             ; 2 | 
|  | and             r12, r3, #&f0                                   ; 3 | 
|  | and             r3, r3, #&0f                                    ; 3 | 
|  | ldr             r12, [r11, r12, lsr #2]                 ; 3 | 
|  | ldr             r3, [r11, r3, lsl #2]                   ; 3 | 
|  | orr             r5, r5, r2, lsl #2                              ; 2 | 
|  | orr             r4, r4, r12, lsl #3                             ; 3 | 
|  | orr             r5, r5, r3, lsl #3                              ; 3 | 
|  | sub             r8, r8, #(VRAM_E - VRAM_B) | 
|  | str             r4, [r10, #-8] | 
|  | str             r5, [r10, #-4] | 
 | MEND | MEND | 
 |  |  | 
 |  |  | 
| Line 161  $label   add  r2, r8, r9, lsr #17 | Line 171  $label   add  r2, r8, r9, lsr #17 | 
 | ; tmp r2, r3 / r4, r5, r12 (GRPHDATASET) | ; tmp r2, r3 / r4, r5, r12 (GRPHDATASET) | 
 | ; input - r2 = pos r3 = gdc | ; input - r2 = pos r3 = gdc | 
 |  |  | 
| gp_all                  ldr             r12, [r2, r3] | gp_all                  orr             r9, r9, r12, lsl #(1 + 17)      ; (vad << 17) | 
| orr             r9, r9, r12, lsl #(1 + 17)      ; (vad << 17) |  | 
 | mov             r12, r12, lsr #(4 + 16)         ; remain | mov             r12, r12, lsr #(4 + 16)         ; remain | 
 | orr             r0, r0, r12, lsl #22            ; (remain << 22) | orr             r0, r0, r12, lsl #22            ; (remain << 22) | 
 | gpa_lineylp1    and             r12, r6, #(&1f << 12)           ; mul ! | gpa_lineylp1    and             r12, r6, #(&1f << 12)           ; mul ! | 
| Line 172  gpa_lineylp2 add  r1, r1, #640 | Line 181  gpa_lineylp2 add  r1, r1, #640 | 
 | tstne   r6, #(1 << 22) | tstne   r6, #(1 << 22) | 
 | bne             gpa_lineyed | bne             gpa_lineyed | 
 | sub             r10, r1, #640 | sub             r10, r1, #640 | 
| gpa_pixlp               GRPHDATASET | gpa_pixlp               add             r10, r10, #8 | 
|  | GRPHDATASET | 
 | add             r9, r9, #(1 << 17) | add             r9, r9, #(1 << 17) | 
 | add             r10, r10, #8 |  | 
 | cmp             r10, r1 | cmp             r10, r1 | 
 | bcc             gpa_pixlp | bcc             gpa_pixlp | 
 | sub             r9, r9, #(80 << 17) |  | 
 | ldr             r2, gp_renewline | ldr             r2, gp_renewline | 
 |  | sub             r9, r9, #(80 << 17) | 
 |  | ; | 
 | ldrb    r3, [r2, r6, lsr #23] | ldrb    r3, [r2, r6, lsr #23] | 
 |  | bic             r9, r9, #(3 << 8) | 
 |  | ; | 
 | orr             r3, r3, r9 | orr             r3, r3, r9 | 
 | strb    r3, [r2, r6, lsr #23] | strb    r3, [r2, r6, lsr #23] | 
 | bic             r9, r9, #(3 << 8) |  | 
 | gpa_lineyed             add             r6, r6, #(1 << 23) | gpa_lineyed             add             r6, r6, #(1 << 23) | 
 | cmp             r6, r6, lsl #20 | cmp             r6, r6, lsl #20 | 
 | bcs             makegrph_ed | bcs             makegrph_ed | 
| Line 199  gpa_break  ldr  r3, gp_gdc | Line 210  gpa_break  ldr  r3, gp_gdc | 
 | bic             r6, r6, #(&1f << 17) | bic             r6, r6, #(&1f << 17) | 
 | mov             pc, lr | mov             pc, lr | 
 |  |  | 
| gp_indirty              ldr             r12, [r2, r3] | gp_indirty              orr             r9, r9, r12, lsl #(1 + 17)      ; (vad << 17) | 
| orr             r9, r9, r12, lsl #(1 + 17)      ; (vad << 17) |  | 
 | mov             r12, r12, lsr #(4 + 16)         ; remain | mov             r12, r12, lsr #(4 + 16)         ; remain | 
 | orr             r0, r0, r12, lsl #22            ; (remain << 22) | orr             r0, r0, r12, lsl #22            ; (remain << 22) | 
 | gpi_lineylp1    and             r12, r6, #(&1f << 12)           ; mul ! | gpi_lineylp1    and             r12, r6, #(&1f << 12)           ; mul ! | 
| Line 209  gpi_lineylp2 add  r1, r1, #640 | Line 219  gpi_lineylp2 add  r1, r1, #640 | 
 | tst             r6, #(1 << 23) | tst             r6, #(1 << 23) | 
 | tstne   r6, #(1 << 22) | tstne   r6, #(1 << 22) | 
 | bne             gpi_lineyed | bne             gpi_lineyed | 
 |  | ldrb    r2, [r7, r9, lsr #17] | 
 | sub             r10, r1, #640 | sub             r10, r1, #640 | 
| gpi_pixlp               ldrb    r2, [r7, r9, lsr #17] | gpi_pixlp               add             r10, r10, #8 | 
 | ands    r2, r2, r9 | ands    r2, r2, r9 | 
 | beq             gpi_pixnt | beq             gpi_pixnt | 
 | orr             r9, r9, r2, lsl #8 | orr             r9, r9, r2, lsl #8 | 
 | GRPHDATASET | GRPHDATASET | 
 | gpi_pixnt               add             r9, r9, #(1 << 17) | gpi_pixnt               add             r9, r9, #(1 << 17) | 
 | add             r10, r10, #8 |  | 
 | cmp             r10, r1 | cmp             r10, r1 | 
 |  | ldrccb  r2, [r7, r9, lsr #17] | 
 | bcc             gpi_pixlp | bcc             gpi_pixlp | 
 | sub             r9, r9, #(80 << 17) | sub             r9, r9, #(80 << 17) | 
| tst             r9, #(3 << 8) | ldr             r2, gp_renewline                                ; prepare | 
|  | ands    r10, r9, #(3 << 8) | 
 | beq             gpi_lineyed | beq             gpi_lineyed | 
 | ldr             r2, gp_renewline |  | 
 | ldrb    r3, [r2, r6, lsr #23] | ldrb    r3, [r2, r6, lsr #23] | 
 | orr             r3, r3, r9, lsr #8 |  | 
 | strb    r3, [r2, r6, lsr #23] |  | 
 | bic             r9, r9, #(3 << 8) | bic             r9, r9, #(3 << 8) | 
 |  | ; | 
 |  | orr             r3, r3, r10, lsr #8 | 
 |  | strb    r3, [r2, r6, lsr #23] | 
 | gpi_lineyed             add             r6, r6, #(1 << 23) | gpi_lineyed             add             r6, r6, #(1 << 23) | 
 | cmp             r6, r6, lsl #20 | cmp             r6, r6, lsl #20 | 
 | bcs             makegrph_ed | bcs             makegrph_ed | 
| Line 245  gpi_break  ldr  r3, gp_gdc | Line 257  gpi_break  ldr  r3, gp_gdc | 
 |  |  | 
 |  |  | 
 | makegrph                stmdb   sp!, {r4 - r11, lr} | makegrph                stmdb   sp!, {r4 - r11, lr} | 
 |  | ldr             r4, gp_dsync | 
 | ldr             r7, gp_vramupdate | ldr             r7, gp_vramupdate | 
 | ldr             r8, gp_vmem | ldr             r8, gp_vmem | 
 | ldr             r11, gp_gtable0 |  | 
 | ldr             r3, gp_gdc |  | 
 | ldr             r4, gp_dsync |  | 
 | ldr             r2, [r4, #DS_GRPHVAD] | ldr             r2, [r4, #DS_GRPHVAD] | 
 | ands    r0, r0, #1 | ands    r0, r0, #1 | 
 | addne   r2, r2, #SURFACE_SIZE |  | 
 | addne   r8, r8, #VRAM_STEP | addne   r8, r8, #VRAM_STEP | 
 |  | addne   r2, r2, #SURFACE_SIZE | 
 |  | ldr             r3, gp_gdc | 
 |  | ldr             r11, gp_gtable0 | 
 | mov             r9, #1 | mov             r9, #1 | 
 |  | ldrb    r5, [r3, #G_CLOCK] | 
 | mov             r9, r9, lsl r0 | mov             r9, r9, lsl r0 | 
 | ldrb    r12, [r3, #G_CLOCK] |  | 
 | ldrb    r0, [r3, #(G_SLAVE + GD_PARA + GDC_PITCH)] | ldrb    r0, [r3, #(G_SLAVE + GD_PARA + GDC_PITCH)] | 
| tst             r12, #&80 | tst             r5, #&80 | 
 | moveq   r0, r0, lsl #1 | moveq   r0, r0, lsl #1 | 
 | and             r0, r0, #&fe                            ; mg.pitch | and             r0, r0, #&fe                            ; mg.pitch | 
 | ldr             r6, [r4, #DS_GRPH_VBP] | ldr             r6, [r4, #DS_GRPH_VBP] | 
 | ldrb    r12, [r3, #G_MODE1] | ldrb    r12, [r3, #G_MODE1] | 
 |  | ldrb    r5, [r3, #(G_SLAVE + GD_PARA + GDC_CSRFORM)] | 
 | mov             r6, r6, lsl #23                         ; mg.liney << 23 | mov             r6, r6, lsl #23                         ; mg.liney << 23 | 
 | and             r12, r12, #&10 | and             r12, r12, #&10 | 
 | orr             r6, r6, r12, lsl #(22 - 4)      ; gdc.mode1:bit4 << 22 | orr             r6, r6, r12, lsl #(22 - 4)      ; gdc.mode1:bit4 << 22 | 
| ldrb    r12, [r3, #(G_SLAVE + GD_PARA + GDC_CSRFORM)] | and             r5, r5, #&1f | 
| and             r12, r12, #&1f |  | 
| orr             r6, r6, r12, lsl #12            ; mg.lr << 12 |  | 
 | ldr             r12, [r4, #DS_GRPHYMAX] | ldr             r12, [r4, #DS_GRPHYMAX] | 
 |  | orr             r6, r6, r5, lsl #12                     ; mg.lr << 12 | 
 |  | ldr             r5, gp_np2vram | 
 | orr             r6, r6, r12, lsl #3                     ; dsync.grphymax << 3 | orr             r6, r6, r12, lsl #3                     ; dsync.grphymax << 3 | 
 |  |  | 
 | cmp             r1, #0 | cmp             r1, #0 | 
| ldr             r1, gp_np2vram | add             r1, r5, r2 | 
| add             r1, r1, r2 |  | 
 | bne             mg_alp | bne             mg_alp | 
| mg_ilp                  mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 0) | mg_ilp                  ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 0)] | 
 | bl              gp_indirty | bl              gp_indirty | 
| mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 4) | ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 4)] | 
 | bl              gp_indirty | bl              gp_indirty | 
 | ldr             r12, gp_np2cfg | ldr             r12, gp_np2cfg | 
 | ldrb    r12, [r12, #NC_UPD72020] | ldrb    r12, [r12, #NC_UPD72020] | 
 | cmp             r12, #0 | cmp             r12, #0 | 
 | bne             mg_ilp | bne             mg_ilp | 
| mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 8) | ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 8)] | 
 | bl              gp_indirty | bl              gp_indirty | 
| mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 12) | ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 12)] | 
 | bl              gp_indirty | bl              gp_indirty | 
 | b               mg_ilp | b               mg_ilp | 
| mg_alp                  mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 0) | mg_alp                  ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 0)] | 
 | bl              gp_all | bl              gp_all | 
| mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 4) | ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 4)] | 
 | bl              gp_all | bl              gp_all | 
 | ldr             r12, gp_np2cfg | ldr             r12, gp_np2cfg | 
 | ldrb    r12, [r12, #NC_UPD72020] | ldrb    r12, [r12, #NC_UPD72020] | 
 | cmp             r12, #0 | cmp             r12, #0 | 
 | bne             mg_alp | bne             mg_alp | 
| mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 8) | ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 8)] | 
 | bl              gp_all | bl              gp_all | 
| mov             r2, #(G_SLAVE + GD_PARA + GDC_SCROLL + 12) | ldr             r12, [r3, #(G_SLAVE + GD_PARA + GDC_SCROLL + 12)] | 
 | bl              gp_all | bl              gp_all | 
 | b               mg_alp | b               mg_alp | 
 |  |  | 
| makegrph_ed             mov             r3, r9 | makegrph_ed             and             r3, r9, #255 | 
| and             r3, r3, #255 | sub             r8, r7, #4 | 
 | orr             r3, r3, r3, lsl #8 | orr             r3, r3, r3, lsl #8 | 
 | orr             r3, r3, r3, lsl #16 |  | 
 | mov             r4, #0 | mov             r4, #0 | 
 |  | orr             r3, r3, r3, lsl #16 | 
 | mg_updclear             ldr             r12, [r7, r4] | mg_updclear             ldr             r12, [r7, r4] | 
 | bic             r12, r12, r3 |  | 
 | str             r12, [r7, r4] |  | 
 | add             r4, r4, #4 | add             r4, r4, #4 | 
 | cmp             r4, #&8000 | cmp             r4, #&8000 | 
 |  | bic             r12, r12, r3 | 
 |  | str             r12, [r8, r4] | 
 | bcc             mg_updclear | bcc             mg_updclear | 
 | ldmia   sp!, {r4 - r11, pc} | ldmia   sp!, {r4 - r11, pc} | 
 |  |  | 
 |  | gp_dsync                dcd             dsync | 
 | gp_vramupdate   dcd             vramupdate | gp_vramupdate   dcd             vramupdate | 
| gp_vmem                 dcd             mem + VRAM_B | gp_vmem                 dcd             i286acore + CPU_SIZE + VRAM_B | 
| gp_gtable0              dcd             grph_table0 |  | 
 | gp_gdc                  dcd             gdc - G_MASTER | gp_gdc                  dcd             gdc - G_MASTER | 
 |  | gp_gtable0              dcd             grph_table0 | 
 | gp_np2vram              dcd             np2_vram | gp_np2vram              dcd             np2_vram | 
 | gp_dsync                dcd             dsync |  | 
 | gp_renewline    dcd             renewal_line | gp_renewline    dcd             renewal_line | 
 | gp_np2cfg               dcd             np2cfg | gp_np2cfg               dcd             np2cfg | 
 |  |  |