source: buchla-68k/vlib/acctrl.s@ 109c83b

Last change on this file since 109c83b was 109c83b, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Compiled full ROM in Hatari.

  • Property mode set to 100644
File size: 4.3 KB
RevLine 
[109c83b]1* ------------------------------------------------------------------------------
2* acctrl.s -- VSDD access table control functions
3* Version 6 -- 1987-04-13 -- D.N. Lynx Crowe
4* (c) Copyright 1987 -- D.N. Lynx Crowe
5* ------------------------------------------------------------------------------
6*
7* objclr(obj)
8* unsigned int obj;
9*
10* Clear bits in access table for object 'obj'.
11* Disables object 'obj'.
12*
13* objoff(obj, line, num)
14* unsigned int obj, line, num;
15*
16* Disable object obj at line thru line+num.
17*
18* objon(obj, line, num)
19* unsigned int obj, line, num;
20*
21* Enable object obj at line thru line+num.
22*
23*
24* Assumes VSDD is looking at bank 0.
25* Assumes a screen height of 350 lines.
26* No error checks are done, so beware.
27* ------------------------------------------------------------------------------
28 .text
29*
30 .xdef _objclr,_objoff,_objon
31*
32 .xref _v_actab
33*
34SCSIZE .equ 350 * Screen height
35*
36OBJ .equ 8 * Object number argument offset
37LINE .equ 10 * Beginning line argument offset
38NUM .equ 12 * Object height argument offset
39* ------------------------------------------------------------------------------
40 .page
41* ------------------------------------------------------------------------------
42*
43* objclr(obj)
44* unsigned int obj;
45*
46* Disables object obj in access table by turning on
47* its bit in all words of the access table.
48* ------------------------------------------------------------------------------
49_objclr: link a6,#0 * Link stack frames
50 move.w OBJ(a6),d1 * Get object bit number in d1
51 lea _v_actab,a0 * Get base of object table in a0
52 move.w #SCSIZE-1,d2 * Put line count in d2
53*
54objclr1: move.w (a0),d0 * Get access table word
55 bset.l d1,d0 * Set the bit
56 move.w d0,(a0)+ * Update word in access table
57 dbf d2,objclr1 * Loop until done
58*
59 unlk a6 * Unlink stack frame
60 rts * Return to caller
61*
62 .page
63* ------------------------------------------------------------------------------
64* objoff(obj, line, num)
65* unsigned int obj, line, num;
66*
67* Turn on access table bits for object 'obj' at
68* lines 'line' through 'line'+'num'. Disables the object.
69* Assumes object bits were set at those locations.
70* ------------------------------------------------------------------------------
71_objoff: link a6,#0 * Link stack frames
72 move.w OBJ(a6),d1 * Get object bit number into d1
73 move.w LINE(a6),d2 * Get top line number
74 add.w d2,d2 * Convert to word offset
75 lea _v_actab,a0 * Get base address of access table
76 move.w 0(a0,d2),d0 * Get top line access word
77 bset.l d1,d0 * Set object bit
78 move.w d0,0(a0,d2) * Update word in access table
79 tst.w NUM(a6) * Number of lines = 0 ?
80 beq objoff1 * Done if so
81*
82 move.w NUM(a6),d2 * Get object depth
83 add.w LINE(a6),d2 * Add to top line number
84 cmpi.w #SCSIZE,d2 * Bottom line >= screen height ?
85 bge objoff1 * Done if so
86*
87 add.w d2,d2 * Convert to word offset
88 move.w 0(a0,d2),d0 * Get bottom line access word
89 bset.l d1,d0 * Set object bit
90 move.w d0,0(a0,d2) * Update word in access table
91*
92objoff1: unlk a6 * Unlink stack frame
93 rts * Return to caller
94*
95 .page
96* ------------------------------------------------------------------------------
97* objon(obj, line, num)
98* unsigned int obj, line, num;
99*
100* Turn off access table bits for object 'obj'
101* at 'line' thru 'line'+'num'. Enables the object.
102* ------------------------------------------------------------------------------
103_objon: link a6,#0 * Link stack frames
104 move.w OBJ(a6),d1 * Get object bit number into d1
105 move.w LINE(a6),d2 * Get top line number
106 add.w d2,d2 * Convert to word offset
107 lea _v_actab,a0 * Get base address of access table
108 move.w 0(a0,d2),d0 * Get top line access word
109 bclr.l d1,d0 * Clear object bit
110 move.w d0,0(a0,d2) * Update word in access table
111 tst.w NUM(a6) * Number of lines = 0 ?
112 beq objon1 * Done if so
113*
114 move.w NUM(a6),d2 * Get object depth
115 add.w LINE(a6),d2 * Add top line number
116 cmpi.w #SCSIZE,d2 * Bottom line >= screen height ?
117 bge objon1 * Done if so
118*
119 add.w d2,d2 * Convert to word offset
120 move.w 0(a0,d2),d0 * Get bottom line access word
121 bclr.l d1,d0 * Clear object bit
122 move.w d0,0(a0,d2) * Update word in access table
123*
124objon1: unlk a6 * Unlink stack frame
125 rts * Return to caller
126*
127 .end
Note: See TracBrowser for help on using the repository browser.