Changeset 8325447 in buchla-68k for vlib/viint.s
- Timestamp:
- 08/07/2017 02:04:35 PM (7 years ago)
- Branches:
- master
- Children:
- 27c8d40
- Parents:
- 84c0125
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vlib/viint.s
r84c0125 r8325447 19 19 .text 20 20 21 .xdef _VIint | Vertical Interval int. handler22 23 .xdef _vi_sadr| score object base address24 .xdef _vi_scrl| score object scroll offset21 .xdef VIint | Vertical Interval int. handler 22 23 .xdef vi_sadr | score object base address 24 .xdef vi_scrl | score object scroll offset 25 25 .xdef lclsadr | local scroll address 26 26 .xdef lclscrl | local scroll offset … … 32 32 .xdef VIct4 | VSDD interrupt R11 33 33 34 .xref _v_regs | VSDD registers35 .xref _v_odtab| VSDD object descriptor table36 37 .xref _vi_clk | scroll delay timer38 .xref _vi_ctl | unblank control word39 .xref _vi_tag | VSDD 'needs service' tag34 .xref v_regs | VSDD registers 35 .xref v_odtab | VSDD object descriptor table 36 37 .xref vi_clk | scroll delay timer 38 .xref vi_ctl | unblank control word 39 .xref vi_tag | VSDD 'needs service' tag 40 40 41 41 .page … … 47 47 STACKSR = 32 | offset to sr on stack 48 48 V_BLA = 4 | V_BLA (blank) bit number 49 VSDD_R5 = 10 | VSDD R5 byte offset in _v_regs50 VSDD_R11 = 22 | VSDD R11 byte offset in _v_regs49 VSDD_R5 = 10 | VSDD R5 byte offset in v_regs 50 VSDD_R11 = 22 | VSDD R11 byte offset in v_regs 51 51 52 52 VT_BASE = 128 | word offset of VSDD Access Table … … 74 74 .page 75 75 76 | _VIint -- Vertical interval interrupt handler77 | ----- ------------------------------------78 _VIint: movem.l d0-d3/a0-a2/a6,-(a7) | save registers76 | VIint -- Vertical interval interrupt handler 77 | ----- ----------------------------------- 78 VIint: movem.l d0-d3/a0-a2/a6,-(a7) | save registers 79 79 addi.w #0x0100,STACKSR(a7) | raise IPL in sr on the stack 80 80 81 move.w _v_regs+VSDD_R11,VIct1 | save the VSDD R11 value82 83 tst.w _vi_sadr| see if we should scroll81 move.w v_regs+VSDD_R11,VIct1 | save the VSDD R11 value 82 83 tst.w vi_sadr | see if we should scroll 84 84 beq viunbl | jump if not 85 85 … … 87 87 | setup delayed scroll parameters 88 88 | ------------------------------------------------------------------------------ 89 move.w _v_regs+VSDD_R5,d0 | get VSDD R589 move.w v_regs+VSDD_R5,d0 | get VSDD R5 90 90 move.w d0,d1 | save it for later 91 91 andi.w #0x0180,d0 | see if we're already in bank 0 92 92 beq dlyscrl | jump if so 93 93 94 clr.w _v_regs+VSDD_R5 | set bank 095 96 move.w _v_regs+VSDD_R11,VIct2 | save the VSDD R11 value97 98 vw1a: cmp.w #VT_1, _v_regs+VSDD_R11 | wait for FRAMESTOP94 clr.w v_regs+VSDD_R5 | set bank 0 95 96 move.w v_regs+VSDD_R11,VIct2 | save the VSDD R11 value 97 98 vw1a: cmp.w #VT_1,v_regs+VSDD_R11 | wait for FRAMESTOP 99 99 bcc vw1a | ... 100 100 101 vw2a: cmp.w #VT_1, _v_regs+VSDD_R11 | ...101 vw2a: cmp.w #VT_1,v_regs+VSDD_R11 | ... 102 102 bcs vw2a | ... 103 103 104 vw3a: cmp.w #VT_1, _v_regs+VSDD_R11 | ...104 vw3a: cmp.w #VT_1,v_regs+VSDD_R11 | ... 105 105 bcc vw3a | ... 106 106 107 vw4a: cmp.w #VT_2, _v_regs+VSDD_R11 | ...107 vw4a: cmp.w #VT_2,v_regs+VSDD_R11 | ... 108 108 bcs vw4a | ... 109 109 110 dlyscrl: tst.w _vi_tag | wait for previous scroll110 dlyscrl: tst.w vi_tag | wait for previous scroll 111 111 bne dlyscrl | ... 112 112 113 move.w _vi_sadr,lclsadr| save address for timeint114 move.w _vi_scrl,lclscrl| save offset for timeint115 clr.w _vi_sadr| reset for next time116 clr.w _vi_scrl| ...117 move.w vdelay, _vi_clk | set the scroll delay timer118 st _vi_tag | set the 'need service' tag113 move.w vi_sadr,lclsadr | save address for timeint 114 move.w vi_scrl,lclscrl | save offset for timeint 115 clr.w vi_sadr | reset for next time 116 clr.w vi_scrl | ... 117 move.w vdelay,vi_clk | set the scroll delay timer 118 st vi_tag | set the 'need service' tag 119 119 | ------------------------------------------------------------------------------ 120 120 | check for unblank requests 121 121 | ------------------------------------------------------------------------------ 122 move.w _vi_ctl,d2 | get the unblank control word122 move.w vi_ctl,d2 | get the unblank control word 123 123 beq viexit | exit if nothing to unblank 124 124 125 125 bra unblnk | go unblank some objects 126 126 127 viunbl: move.w _vi_ctl,d2 | get the unblank control word127 viunbl: move.w vi_ctl,d2 | get the unblank control word 128 128 beq vidone | exit if nothing to unblank 129 129 130 move.w _v_regs+VSDD_R5,d0 | get VSDD R5130 move.w v_regs+VSDD_R5,d0 | get VSDD R5 131 131 move.w d0,d1 | save it for later 132 132 andi.w #0x0180,d0 | see if we're already in bank 0 133 133 beq unblnk | jump if so 134 134 135 clr.w _v_regs+VSDD_R5 | set bank 0136 137 move.w _v_regs+VSDD_R11,VIct3 | save the VSDD R11 value138 139 vw1b: cmp.w #VT_1, _v_regs+VSDD_R11 | wait for FRAMESTOP135 clr.w v_regs+VSDD_R5 | set bank 0 136 137 move.w v_regs+VSDD_R11,VIct3 | save the VSDD R11 value 138 139 vw1b: cmp.w #VT_1,v_regs+VSDD_R11 | wait for FRAMESTOP 140 140 bcc vw1b | ... 141 141 142 vw2b: cmp.w #VT_1, _v_regs+VSDD_R11 | ...142 vw2b: cmp.w #VT_1,v_regs+VSDD_R11 | ... 143 143 bcs vw2b | ... 144 144 145 vw3b: cmp.w #VT_1, _v_regs+VSDD_R11 | ...145 vw3b: cmp.w #VT_1,v_regs+VSDD_R11 | ... 146 146 bcc vw3b | ... 147 147 148 vw4b: cmp.w #VT_2, _v_regs+VSDD_R11 | ...148 vw4b: cmp.w #VT_2,v_regs+VSDD_R11 | ... 149 149 bcs vw4b | ... 150 150 … … 152 152 153 153 | ------------------------------------------------------------------------------ 154 | unblank objects indicated by contents of d2 (loaded earlier from _vi_ctl)154 | unblank objects indicated by contents of d2 (loaded earlier from vi_ctl) 155 155 | ------------------------------------------------------------------------------ 156 156 157 157 unblnk: clr.w d3 | clear the counter 158 clr.w _vi_ctl | clear the unblank control word159 lea _v_odtab,a1 | point at first object158 clr.w vi_ctl | clear the unblank control word 159 lea v_odtab,a1 | point at first object 160 160 161 161 vicheck: btst d3,d2 | check the object bit … … 181 181 beq vidone | jump if so 182 182 183 viwait: tst.w _vi_tag | wait for timer to run out183 viwait: tst.w vi_tag | wait for timer to run out 184 184 bne viwait | ... so timeint sees bank 0 185 185 186 move.w d1, _v_regs+VSDD_R5 | restore v_regs[5] to old bank187 188 move.w _v_regs+VSDD_R11,VIct4 | save the VSDD R11 value189 190 vw1c: cmp.w #VT_1, _v_regs+VSDD_R11 | wait for FRAMESTOP186 move.w d1,v_regs+VSDD_R5 | restore v_regs[5] to old bank 187 188 move.w v_regs+VSDD_R11,VIct4 | save the VSDD R11 value 189 190 vw1c: cmp.w #VT_1,v_regs+VSDD_R11 | wait for FRAMESTOP 191 191 bcc vw1c | ... 192 192 193 vw2c: cmp.w #VT_1, _v_regs+VSDD_R11 | ...193 vw2c: cmp.w #VT_1,v_regs+VSDD_R11 | ... 194 194 bcs vw2c | ... 195 195 196 vw3c: cmp.w #VT_1, _v_regs+VSDD_R11 | ...196 vw3c: cmp.w #VT_1,v_regs+VSDD_R11 | ... 197 197 bcc vw3c | ... 198 198 199 vw4c: cmp.w #VT_2, _v_regs+VSDD_R11 | ...199 vw4c: cmp.w #VT_2,v_regs+VSDD_R11 | ... 200 200 bcs vw4c | ... 201 201 … … 219 219 | ------------------------------------------------------------------------------ 220 220 221 _vi_sadr: .ds.w 1 | score object base address222 _vi_scrl: .ds.w 1 | score object scroll offset221 vi_sadr: .ds.w 1 | score object base address 222 vi_scrl: .ds.w 1 | score object scroll offset 223 223 224 224 lclsadr: .ds.w 1 | local copy of vi_sadr
Note:
See TracChangeset
for help on using the changeset viewer.