[4f508e6] | 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 | | ------------------------------------------------------------------------------
|
---|
[f40a309] | 28 | .text
|
---|
[4f508e6] | 29 |
|
---|
[f40a309] | 30 | .xdef _objclr,_objoff,_objon
|
---|
[4f508e6] | 31 |
|
---|
[f40a309] | 32 | .xref _v_actab
|
---|
[4f508e6] | 33 |
|
---|
| 34 | SCSIZE = 350 | Screen height
|
---|
| 35 |
|
---|
| 36 | OBJ = 8 | Object number argument offset
|
---|
| 37 | LINE = 10 | Beginning line argument offset
|
---|
| 38 | NUM = 12 | Object height argument offset
|
---|
| 39 | | ------------------------------------------------------------------------------
|
---|
[f40a309] | 40 | .page
|
---|
[4f508e6] | 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 |
|
---|
| 54 | objclr1: 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 |
|
---|
[f40a309] | 62 | .page
|
---|
[4f508e6] | 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 |
|
---|
| 92 | objoff1: unlk a6 | Unlink stack frame
|
---|
| 93 | rts | Return to caller
|
---|
| 94 |
|
---|
[f40a309] | 95 | .page
|
---|
[4f508e6] | 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 |
|
---|
| 124 | objon1: unlk a6 | Unlink stack frame
|
---|
| 125 | rts | Return to caller
|
---|
| 126 |
|
---|
[f40a309] | 127 | .end
|
---|