1*c4a186eaSis; $NetBSD: grf_ultms.g,v 1.10 2009/11/09 15:35:27 is Exp $ 24bf7b86bSchopps; 34bf7b86bSchopps; ite support for A2410. 44bf7b86bSchopps 54bf7b86bSchopps; 64bf7b86bSchopps; Copyright (c) 1995 Ignatios Souvatzis. 74bf7b86bSchopps; All rights reserved. 84bf7b86bSchopps; 94bf7b86bSchopps; Redistribution and use in source and binary forms, with or without 104bf7b86bSchopps; modification, are permitted provided that the following conditions 114bf7b86bSchopps; are met: 124bf7b86bSchopps; 1. Redistributions of source code must retain the above copyright 134bf7b86bSchopps; notice, this list of conditions and the following disclaimer. 144bf7b86bSchopps; 2. Redistributions in binary form must reproduce the above copyright 154bf7b86bSchopps; notice, this list of conditions and the following disclaimer in the 164bf7b86bSchopps; documentation and/or other materials provided with the distribution. 174bf7b86bSchopps; 184bf7b86bSchopps; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 194bf7b86bSchopps; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 204bf7b86bSchopps; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 214bf7b86bSchopps; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 224bf7b86bSchopps; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 234bf7b86bSchopps; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 244bf7b86bSchopps; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 254bf7b86bSchopps; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 264bf7b86bSchopps; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 274bf7b86bSchopps; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 284bf7b86bSchopps 2902963a4aSis; This file contains the source code for grf_ultms.c. It is assembler 3002963a4aSis; code for the TMS34010 CPU/graphics processor, as understood by the 3102963a4aSis; in-tree version of Paul Mackerras' "gspa" assembler. 324bf7b86bSchopps; 33a14bf4eeSjdolecek; Use 'make grf_ultms.c' to generate the .c file. 344bf7b86bSchopps 354bf7b86bSchopps; memory map: 364bf7b86bSchopps; FF800000 .. FF9FFFFF overlay planes 374bf7b86bSchopps; FFA00000 .. FFA0FFFF ite support code 384bf7b86bSchopps; FFA10000 .. FFA1FFFF ite support, input queue 394bf7b86bSchopps; FFA20000 .. FFA2FEFF variables 404bf7b86bSchopps; FFA2FF00 .. FFA2FFFF variables, X server 414bf7b86bSchopps; FFA30000 .. FFA3FFFF font data 424bf7b86bSchopps; FFA40000 .. FFA4FFFF font data, bold 434bf7b86bSchopps; FFA50000 .. FFA5FFFF X server, input queue 444bf7b86bSchopps; FFA60000 .. FFFFC000 X server, onboard pixmaps 454bf7b86bSchopps 464bf7b86bSchopps; Start of data area 474bf7b86bSchopps .org $FFA20000 484bf7b86bSchoppsd: 494bf7b86bSchopps 504bf7b86bSchopps; 514bf7b86bSchopps; Ring buffer for getting stuff from host 524bf7b86bSchopps; Data buffer: 534bf7b86bSchoppsinbuf = $FFA10000 ; 64kbits here (8k bytes) 544bf7b86bSchopps; 554bf7b86bSchopps; Pointers: (these must be at address $FFA20000) 564bf7b86bSchoppsput: .long inbuf 574bf7b86bSchoppsget: .long inbuf 584bf7b86bSchopps 594bf7b86bSchopps; 604bf7b86bSchopps; Mode bits for communication between GSP and CPU 614bf7b86bSchopps; 624bf7b86bSchopps; GSP mode bits: set by CPU, control GSP operation 634bf7b86bSchoppsGSP_HOLD = 0 644bf7b86bSchoppsGSP_FLUSH = 1 654bf7b86bSchoppsGSP_ALT_SCRN = 2 664bf7b86bSchoppsGSP_DISP_CTRL = 3 674bf7b86bSchoppsGSP_NO_CURSOR = 4 684bf7b86bSchoppsGSP_CALL_X = 5 694bf7b86bSchoppsgsp_mode: .word 0 704bf7b86bSchopps 714bf7b86bSchopps; 724bf7b86bSchopps; Pointer to X operation routine 734bf7b86bSchoppsxproc: .long 0 744bf7b86bSchopps 754bf7b86bSchopps; We leave the next few words for future communication requirements 764bf7b86bSchopps 774bf7b86bSchopps .org d+0x100 784bf7b86bSchopps; 794bf7b86bSchopps; Other data: 804bf7b86bSchoppsmagic: .blkl 1 ; set => screen already inited 814bf7b86bSchoppsMAGIC = 0xD0D0BEAC 824bf7b86bSchopps 834bf7b86bSchoppsscreen_width: .word 1024 844bf7b86bSchoppsscreen_height: .word 768 854bf7b86bSchoppsscreen_origin: .long $FE000000 ; just a placeholder 864bf7b86bSchoppsscreen_pitch: .word 8192 ; 1024*8 874bf7b86bSchoppspixel_size: .word 8 884bf7b86bSchopps 894bf7b86bSchopps .org d+0x200 904bf7b86bSchoppsfont_adr: 914bf7b86bSchopps; 924bf7b86bSchopps; Font information is stored in the structure defined declared below. 934bf7b86bSchopps; 944bf7b86bSchoppsbitmap_ptrs: .long $FFA30000 ; points to first bitmap 954bf7b86bSchoppsfont_size: .long $00080008 ; Y:X bitmap size 964bf7b86bSchoppsunder_row: .word 6 ; row # for underlines 974bf7b86bSchoppsunder_ht: .word 1 ; thickness of underline 984bf7b86bSchoppsfirst_char: .word 32 ; first and last char in font 994bf7b86bSchoppslast_char: .word 255 ; 1004bf7b86bSchoppsbold_smear: .word 1 ; for making bold fonts 1014bf7b86bSchopps 1024bf7b86bSchoppsbgcolor: .long 0 ; background color 1034bf7b86bSchoppsfgcolor: .long $01010101 ; foreground color 1044bf7b86bSchopps;precomputed out of what the host gave us: 1054bf7b86bSchoppsfont_area: .word 64 ; in pixels 1064bf7b86bSchoppsfont_pitch: .word 8 1074bf7b86bSchoppsfont_lmo: .word 28 1084bf7b86bSchopps 1094bf7b86bSchopps 1104bf7b86bSchopps; Control register addresses 1114bf7b86bSchoppshesync = $c0000000 1124bf7b86bSchoppsdpyctl = $c0000080 1134bf7b86bSchoppscontrol = $c00000b0 1144bf7b86bSchoppsconvsp = $c0000130 1154bf7b86bSchoppsconvdp = $c0000140 1164bf7b86bSchoppspsize = $c0000150 1174bf7b86bSchopps 1184bf7b86bSchopps; 1194bf7b86bSchopps; Bits in control register 1204bf7b86bSchoppsT = $20 ; enable transparency 1214bf7b86bSchoppsW = $C0 ; window options 1224bf7b86bSchoppsPBH = $100 ; pixblt horiz dirn 1234bf7b86bSchoppsPBV = $200 ; pixblt vertical dirn 1244bf7b86bSchoppsPPOP = $7C00 ; pixel processing options 1254bf7b86bSchopps 1264bf7b86bSchopps; 1274bf7b86bSchopps; Bits in dpyctl register 1284bf7b86bSchoppsSRT = $800 ; do serial register transfers 1294bf7b86bSchopps 1304bf7b86bSchoppsfree_memory: .long free_memory_start 1314bf7b86bSchoppsfree_memory_start: ; allocate dynamic arrays from here 1324bf7b86bSchopps 1334bf7b86bSchopps; 1344bf7b86bSchopps; Program starts here. 1354bf7b86bSchopps .org $FFA00000 1364bf7b86bSchopps .start . 1374bf7b86bSchopps 1384bf7b86bSchopps; 1394bf7b86bSchopps; initialization 1404bf7b86bSchopps; 1414bf7b86bSchopps setf 16,0,0 ; just in case 1424bf7b86bSchopps setf 32,0,1 1434bf7b86bSchopps move $fffff000,sp 1444bf7b86bSchopps 1454bf7b86bSchopps; Set up sync, blank parameters 1464bf7b86bSchopps; done by host through interface 1474bf7b86bSchopps 1484bf7b86bSchopps; set up overlay clut: 1494bf7b86bSchopps move $0,a0 1504bf7b86bSchopps move a0,@$fe800000 1514bf7b86bSchopps move $fe800030,a1 1524bf7b86bSchopps move 128,a0 1534bf7b86bSchopps move a0,*a1 1544bf7b86bSchopps move a0,*a1 1554bf7b86bSchopps move a0,*a1 1564bf7b86bSchopps move 0,a0 1574bf7b86bSchopps move a0,*a1 1584bf7b86bSchopps move a0,*a1 1594bf7b86bSchopps move a0,*a1 1604bf7b86bSchopps move a0,*a1 1614bf7b86bSchopps move a0,*a1 1624bf7b86bSchopps move a0,*a1 1634bf7b86bSchopps move a0,*a1 1644bf7b86bSchopps move a0,*a1 1654bf7b86bSchopps move a0,*a1 1664bf7b86bSchopps 1674bf7b86bSchopps; set up overlay planes: 1684bf7b86bSchopps move 6,a0 1694bf7b86bSchopps move a0,@$fe800000 1704bf7b86bSchopps move $0b,a0 1714bf7b86bSchopps move a0,@$fe800020 1724bf7b86bSchopps 1734bf7b86bSchopps; set up global registers 1744bf7b86bSchopps move @screen_pitch,b3,0 1754bf7b86bSchopps move @screen_origin,b4,1 1764bf7b86bSchopps move @bgcolor,b8,1 1774bf7b86bSchopps lmo b3,b0 1784bf7b86bSchopps move b0,@convdp,0 1794bf7b86bSchopps move @control,a0,0 1804bf7b86bSchopps andn $7FE0,a0 ; clear PPOP, PBV, PBH, W, T fields 1814bf7b86bSchopps move a0,@control,0 1824bf7b86bSchopps move @pixel_size,a0,0 1834bf7b86bSchopps move a0,@psize,0 1844bf7b86bSchopps move @psize,a0,0 1854bf7b86bSchopps 1864bf7b86bSchopps 1874bf7b86bSchopps; clear the entire screen 1884bf7b86bSchopps move b4,b2 1894bf7b86bSchopps move 0,b9 1904bf7b86bSchopps move @screen_width,b7,1 1914bf7b86bSchopps fill l 1924bf7b86bSchopps 1934bf7b86bSchopps4: 1944bf7b86bSchopps; main stuff... 1954bf7b86bSchopps move @get,a0,1 1964bf7b86bSchopps jruc main_loop 1974bf7b86bSchoppsloop_end: 1984bf7b86bSchopps clr a4 1994bf7b86bSchopps move a4,*a0,0 2004bf7b86bSchopps addxy a1,a0 2014bf7b86bSchopps move a0,@get,1 2024bf7b86bSchoppsmain_loop: 2034bf7b86bSchopps move @gsp_mode,a1,0 2044bf7b86bSchopps btst GSP_CALL_X,a1 2054bf7b86bSchopps jreq main_loop_1 2064bf7b86bSchopps 2074bf7b86bSchopps mmtm sp,a0,a1,a2,a3 2084bf7b86bSchopps move @xproc,a4,1 2094bf7b86bSchopps call a4 2104bf7b86bSchopps mmfm sp,a0,a1,a2,a3 2114bf7b86bSchopps 2124bf7b86bSchoppsmain_loop_1: 2134bf7b86bSchopps move @put,a3,1 2144bf7b86bSchopps move *a0,a1,0 2154bf7b86bSchopps 2164bf7b86bSchopps move a1,a2 2174bf7b86bSchopps andi $FFF0,a1 2184bf7b86bSchopps jrz main_loop 2194bf7b86bSchopps 2204bf7b86bSchopps sub a0,a3 2214bf7b86bSchopps jreq main_loop 2224bf7b86bSchoppscontinue: 2234bf7b86bSchopps andi $F,a2 2244bf7b86bSchopps jrz loop_end 2254bf7b86bSchopps dec a2 2264bf7b86bSchopps jrnz testfor2 2274bf7b86bSchopps; op 1 - char 2284bf7b86bSchopps movk 6,b10 2294bf7b86bSchopps move b10,@$fe800000,0 2304bf7b86bSchopps movk 1,b10 2314bf7b86bSchopps move b10,@$fe800020,0 2324bf7b86bSchopps 2334bf7b86bSchopps move a0,b10 2344bf7b86bSchopps move *b10+,b12,0 ; dummy move (faster than addk) 2354bf7b86bSchopps move *b10+,b12,0 ; char code 2364bf7b86bSchopps move @first_char,b11,0 2374bf7b86bSchopps sub b11,b12 ; minus first char in font 2384bf7b86bSchopps move @font_size,b7,1 ;dydx - char size->pixel array dimensions 2394bf7b86bSchopps move @font_pitch,b1 2404bf7b86bSchopps move @font_lmo,b0 2414bf7b86bSchopps move b0,@convsp,0 2424bf7b86bSchopps move @font_area,b11 2434bf7b86bSchopps 2444bf7b86bSchopps mpyu b12,b11 ; times char offset 2454bf7b86bSchopps move @font_adr,b0,1 ; font bitmaps base 2464bf7b86bSchopps add b11,b0 ; character bitmap start addr. linear 2474bf7b86bSchopps 2484bf7b86bSchopps move *b10+,b8,0 ; fg 2494bf7b86bSchopps move *b10+,b9,0 ; bg 2504bf7b86bSchopps move *b10+,b2,1 ; y:x 2514bf7b86bSchopps 2524bf7b86bSchopps move *b10+,b11,0 ; flags 2534bf7b86bSchopps move b11,a4 2544bf7b86bSchopps btst 0,a4 2554bf7b86bSchopps jreq noinv 2564bf7b86bSchopps move b8,b11 2574bf7b86bSchopps move b9,b8 2584bf7b86bSchopps move b11,b9 2594bf7b86bSchoppsnoinv: 2604bf7b86bSchopps btst 2,a4 2614bf7b86bSchopps jreq nobold 2624bf7b86bSchopps addi $10000,b0 2634bf7b86bSchoppsnobold: 2644bf7b86bSchopps move b2,a5 2654bf7b86bSchopps pixblt b,xy 2664bf7b86bSchopps move a5,b2 2674bf7b86bSchopps 2684bf7b86bSchopps btst 1,a4 2694bf7b86bSchopps jreq noul 2704bf7b86bSchopps move @under_row,b11,0 2714bf7b86bSchopps sll 16,b11 ; shift into Y half 2724bf7b86bSchopps add b11,b2 2734bf7b86bSchopps move @under_ht,b11,0 2744bf7b86bSchopps sll 16,b11 ; shift into Y half 2754bf7b86bSchopps movy b11,b7 ; and move Y half only 2764bf7b86bSchopps fill xy 2774bf7b86bSchoppsnoul: 2784bf7b86bSchopps jruc loop_end 2794bf7b86bSchoppstestfor2: 2804bf7b86bSchopps dec a2 2814bf7b86bSchopps jrnz testfor3 2824bf7b86bSchopps; op 2 - fill 2834bf7b86bSchopps move a0,b10 2844bf7b86bSchopps move *b10+,b9,0 ; dummy move 2854bf7b86bSchopps move *b10+,b9,0 ; color 2864bf7b86bSchopps move *b10+,b2,1 ; XY start address 2874bf7b86bSchopps move *b10+,b7,1 ; dydx 2884bf7b86bSchopps 2894bf7b86bSchopps move @control,b0,0 2904bf7b86bSchopps move b0,*-sp 2914bf7b86bSchopps move *b10+,b0 2924bf7b86bSchopps setf 5,0,0 2934bf7b86bSchopps move b0,@control+10 2944bf7b86bSchopps setf 16,0,0 2954bf7b86bSchopps move @control,b0,0 2964bf7b86bSchopps 2974bf7b86bSchopps fill xy 2984bf7b86bSchopps 2994bf7b86bSchopps move *sp+,b0 3004bf7b86bSchopps move b0,@control,0 3014bf7b86bSchopps jruc loop_end,l 3024bf7b86bSchopps 3034bf7b86bSchoppstestfor3: 3044bf7b86bSchopps dec a2 3054bf7b86bSchopps jrnz testfor4 3064bf7b86bSchopps; op 3 - pixblt 3074bf7b86bSchopps move a0,b10 3084bf7b86bSchopps move @convdp,@convsp,0 3094bf7b86bSchopps move *b10+,b0,0 ; dummy move 3104bf7b86bSchopps move *b10+,b0,1 ; XY src 3114bf7b86bSchopps move *b10+,b7,1 ; dxdy 3124bf7b86bSchopps move *b10+,b2,1 ; XY dst 3134bf7b86bSchopps move b3,b1 3144bf7b86bSchopps move @control,b11,0 3154bf7b86bSchopps andni PBH|PBV,b11 3164bf7b86bSchopps cmpxy b0,b2 3174bf7b86bSchopps jrc yok 3184bf7b86bSchopps ori PBV,b11 3194bf7b86bSchoppsyok: jrv xok 3204bf7b86bSchopps ori PBH,b11 3214bf7b86bSchoppsxok: move b11,@control,0 3224bf7b86bSchopps move @control,b11,0 3234bf7b86bSchopps 3244bf7b86bSchopps pixblt xy,xy 3254bf7b86bSchopps jruc loop_end,l 3264bf7b86bSchopps 3274bf7b86bSchoppstestfor4: 3284bf7b86bSchopps dec a2 3294bf7b86bSchopps jrnz testfor5 3304bf7b86bSchopps 3314bf7b86bSchopps; op 4 - mirror the font and precompute some values. 3324bf7b86bSchopps 3334bf7b86bSchopps move @font_size,a5,0 3344bf7b86bSchopps movk 8,a6 3354bf7b86bSchopps cmp a6,a5 3364bf7b86bSchopps jrle t4b8 3374bf7b86bSchopps movi 16, a6 3384bf7b86bSchoppst4b8: move a6,@font_pitch,0 3394bf7b86bSchopps lmo a5,a6 3404bf7b86bSchopps move a6,@font_lmo,0 3414bf7b86bSchopps move @font_size+$10,a6,0 3424bf7b86bSchopps move @font_pitch,a5,0 3434bf7b86bSchopps mpyu a6,a5 3444bf7b86bSchopps move a5,@font_area,0 3454bf7b86bSchopps 3464bf7b86bSchopps move @last_char,a6,0 3474bf7b86bSchopps move @first_char,a5,0 3484bf7b86bSchopps sub a5,a6 3494bf7b86bSchopps addk 1,a6 3504bf7b86bSchopps move @font_size+$10,a5,0 3514bf7b86bSchopps mpyu a6,a5 3524bf7b86bSchopps move @font_size,a7,0 3534bf7b86bSchopps cmpi 8,a7 3544bf7b86bSchopps move $7f7f,a12 ; mask for bold smearing 3554bf7b86bSchopps jrgt t4bf ; wider than 8 pixels? 3564bf7b86bSchopps addk 1,a5 ; yes, the words are only half the # of rows 3574bf7b86bSchopps srl 1,a5 3584bf7b86bSchopps move $7fff,a12 ; mask for bold smearing changes, too 3594bf7b86bSchoppst4bf: move @font_adr,a6,1 3604bf7b86bSchopps move a6,a9 3614bf7b86bSchopps addi $10000,a9 ; start address of bold font 3624bf7b86bSchopps move @bold_smear,a10 3634bf7b86bSchopps 3644bf7b86bSchopps; fortunately, this loop fits into 3 of the 4 cache segments: 3654bf7b86bSchopps; execution time: about 32 periods per word of font. 3664bf7b86bSchopps 3674bf7b86bSchoppsmirlp: move *a6,a7 3684bf7b86bSchopps clr a8 3694bf7b86bSchopps 3704bf7b86bSchopps srl 1,a7 3714bf7b86bSchopps addc a8,a8 3724bf7b86bSchopps srl 1,a7 3734bf7b86bSchopps addc a8,a8 3744bf7b86bSchopps srl 1,a7 3754bf7b86bSchopps addc a8,a8 3764bf7b86bSchopps srl 1,a7 3774bf7b86bSchopps addc a8,a8 3784bf7b86bSchopps 3794bf7b86bSchopps srl 1,a7 3804bf7b86bSchopps addc a8,a8 3814bf7b86bSchopps srl 1,a7 3824bf7b86bSchopps addc a8,a8 3834bf7b86bSchopps srl 1,a7 3844bf7b86bSchopps addc a8,a8 3854bf7b86bSchopps srl 1,a7 3864bf7b86bSchopps addc a8,a8 3874bf7b86bSchopps 3884bf7b86bSchopps srl 1,a7 3894bf7b86bSchopps addc a8,a8 3904bf7b86bSchopps srl 1,a7 3914bf7b86bSchopps addc a8,a8 3924bf7b86bSchopps srl 1,a7 3934bf7b86bSchopps addc a8,a8 3944bf7b86bSchopps srl 1,a7 3954bf7b86bSchopps addc a8,a8 3964bf7b86bSchopps 3974bf7b86bSchopps srl 1,a7 3984bf7b86bSchopps addc a8,a8 3994bf7b86bSchopps srl 1,a7 4004bf7b86bSchopps addc a8,a8 4014bf7b86bSchopps srl 1,a7 4024bf7b86bSchopps addc a8,a8 4034bf7b86bSchopps srl 1,a7 4044bf7b86bSchopps addc a8,a8 4054bf7b86bSchopps 4064bf7b86bSchopps move a8,*a6+ 4074bf7b86bSchopps move a8,a7 4084bf7b86bSchopps move a10,a11 4094bf7b86bSchoppssmearlp: 4104bf7b86bSchopps and a12,a7 4114bf7b86bSchopps sll 1,a7 4124bf7b86bSchopps or a7,a8 4134bf7b86bSchopps dsj a11,smearlp 4144bf7b86bSchopps move a8,*a9+ 4154bf7b86bSchopps 4164bf7b86bSchopps dsj a5,mirlp 4174bf7b86bSchopps;; support odd-sized fonts. pitch must still be 8 or 16 4184bf7b86bSchopps move @font_size,a5,0 4194bf7b86bSchopps move @font_pitch,a6,0 4204bf7b86bSchopps sub a5,a6 4214bf7b86bSchopps move @font_adr,a5,1 4224bf7b86bSchopps add a5,a6 4234bf7b86bSchopps move a6,@font_adr,1 4244bf7b86bSchopps;; 4254bf7b86bSchopps jruc loop_end,l 4264bf7b86bSchopps 4274bf7b86bSchopps 4284bf7b86bSchoppstestfor5: 4294bf7b86bSchopps dec a2 4304bf7b86bSchopps jrne testfor6 4314bf7b86bSchopps; loadclut --- load clut entry. 4324bf7b86bSchopps; 1==overlay index red green blue 4334bf7b86bSchopps; for speed reasons, the host will load the image clut directly rather 4344bf7b86bSchopps; than through us, but its not that expensive to support both here 4354bf7b86bSchopps; just in case 4364bf7b86bSchopps move a0,a4 4374bf7b86bSchopps addk $10,a4 4384bf7b86bSchopps move $fe800030,a6 4394bf7b86bSchopps move *a4+,a5,0 4404bf7b86bSchopps jrne t5l1 4414bf7b86bSchopps subk $20,a6 4424bf7b86bSchoppst5l1: move *a4+,a5,0 4434bf7b86bSchopps move a5,@$fe800000,0 4444bf7b86bSchopps move *a4+,a5,0 4454bf7b86bSchopps move a5,*a6,0 4464bf7b86bSchopps move *a4+,a5,0 4474bf7b86bSchopps move a5,*a6,0 4484bf7b86bSchopps move *a4+,a5,0 4494bf7b86bSchopps move a5,*a6,0 4504bf7b86bSchopps jruc loop_end,l 4514bf7b86bSchopps 4524bf7b86bSchoppstestfor6: 4534bf7b86bSchopps dec a2 4544bf7b86bSchopps jrne testfor7 4554bf7b86bSchopps 4564bf7b86bSchopps; op 6: load new framebuffer size and position for ite support. 4574bf7b86bSchopps move a0,b10 4584bf7b86bSchopps addk $10,b10 4594bf7b86bSchopps move *b10+,b7,1 4604bf7b86bSchopps move b7,@screen_width,1 4614bf7b86bSchopps move *b10+,b4,1 4624bf7b86bSchopps move b4,@screen_origin,1 4634bf7b86bSchopps move *b10+,b3,0 4644bf7b86bSchopps move b3,@screen_pitch,0 4654bf7b86bSchopps lmo b3,b0 4664bf7b86bSchopps move b0,@convdp,0 4674bf7b86bSchopps move *b10,b0,0 4684bf7b86bSchopps move b0,@psize,0 4694bf7b86bSchopps move b0,@pixel_size,0 ; this syncs the psize write, too 4704bf7b86bSchopps 4714bf7b86bSchopps jruc loop_end,l 4724bf7b86bSchopps 4734bf7b86bSchoppstestfor7: 4744bf7b86bSchopps jruc loop_end,l 4754bf7b86bSchopps;;; 476