Signetics 2650 & 2636 programming/Tutorial code - programming colours
Tutorial code - Programming colours
editThis is the code for the tutorial Programming colours
This code block must be merged with the standard 'Hardware definitions' code before it can be assembled |
; Tutorial Colours ;============================================================================= org 0 reset_vector: ; the microprocessor starts here when the reset button is pressed bcta,un reset org 3 interrupt_vector: ; interrupts shouldn't happen, but we set this just in case retc,un reset: ;initialise program status word, just to be sure! ppsu intinhibit ;inhibit interrupts cpsu stackpointer ;stack pointer=%000 cpsl registerselect ;register bank 0 cpsl withcarry ;without carry cpsl compare ;arithmetic compare eorz r0 stra,r0 effects ;initialise the 74LS378 stra,r0 objectsize ;all objects size 0 bsta,un DefineObjects ;define all objects bsta,un DefineGrid ;define the grid lodi,r0 $67 stra,r0 score12 lodi,r0 $89 stra,r0 score34 lodi,r0 %00001110 ; X / 000 / 1 / 110 stra,r0 backgnd ; / black background / enabled / yellow screen bsta,un Vsync0 ; make sure VRST hasn't started endless: bsta,un Vsync1 ; wait for VRST to start eorz r0 stra,r0 effects ; !invert = 0 stra,r0 scoreformat ; 2 + 2 score digits at top (see Tutorial......) lodi,r0 %00010101 ; XX / 010 / 101 stra,r0 colours12 ; / obj1 magenta / obj2 green lodi,r0 %00111000 ; XX / 111 / 000 stra,r0 colours34 ; / obj 3 black / 4 white bsta,un Vsync0 ; wait for VRST to end lodi,r1 1 bsta,un WaitObj ; wait for object 4 to complete (see Tutorial......) lodi,r0 $20 stra,r0 effects ; !invert = 1 lodi,r0 3 stra,r0 scoreformat ; 4 score digits at bottom bctr,un endless ;=================================================================== ; subroutine - define shapes and position of all objects ; (see Tutorial......) DefineObjects: lodi,r3 $0A lodi,r0 $FF loopDS: stra,r0 shape1,r3- ; create rectangular shapes stra,r0 shape2,r3 stra,r0 shape3,r3 stra,r0 shape4,r3 brnr,r3 loopDS lodi,r0 40 ; set their positions stra,r0 hc1 stra,r0 hcd1 lodi,r0 60 stra,r0 hc2 stra,r0 hcd2 lodi,r0 80 stra,r0 hc3 stra,r0 hcd3 lodi,r0 100 stra,r0 hc4 stra,r0 hcd4 lodi,r0 88 stra,r0 vc1 stra,r0 voff1 stra,r0 vc2 stra,r0 voff2 stra,r0 vc3 stra,r0 voff3 stra,r0 vc4 stra,r0 voff4 retc,un ;================================================================= ; subroutine - define background grid ; (see Tutorial......) DefineGrid: lodi,r0 $FF stra,r0 $1f80 stra,r0 $1fa4 lodi,r0 $FE stra,r0 $1f81 stra,r0 $1fa5 lodi,r3 $81 loopDG: lodi,r0 $80 stra,r0 $1f00,r3+ lodi,r0 $01 stra,r0 $1f00,r3+ comi,r3 $a3 bcfr,eq loopDG lodi,r0 $01 stra,r0 $1fa8 lodi,r0 $08 stra,r0 $1fac lodi,r0 $00 stra,r0 $1fa9 stra,r0 $1faa stra,r0 $1fab stra,r0 $1fa6 stra,r0 $1fa7 retc,un ;================================================================= ; subroutine - wait for vertical reset to clear ; (see Tutorial......) Vsync0: tpsu sense bctr,eq Vsync0 ; wait for Sense bit to clear retc,un ;================================================================= ; subroutine - wait for vertical reset to set Vsync1: tpsu sense ; wait for Sense bit to be set bctr,lt Vsync1 retc,un ;================================================================= ;subroutine - wait for object to finish ; (see Tutorial......) ; enter with r1=mask for bit to be tested: ; obj1=$08, obj2=$04, obj3=$02, obj4=$01 WaitObj: loda,r0 objectstatus andz r1 bctr,eq waitobj retc,un