Signetics 2650 & 2636 programming/Tutorial code - programming colours

Tutorial code - Programming colours
This is the code for the tutorial Programming 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
 * Tutorial Colours

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

; (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 ; (see Tutorial......) DefineGrid: lodi,r0 $FF stra,r0 $1f80 stra,r0 $1fa4 lodi,r0 $FE stra,r0 $1f81 stra,r0 $1fa5
 * subroutine -  define shapes and position of all objects
 * subroutine -  define shapes and position of all objects
 * subroutine -  define background grid
 * subroutine -  define background grid

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 ; (see Tutorial......) Vsync0: tpsu   sense bctr,eq Vsync0         ; wait for Sense bit to clear retc,un Vsync1: tpsu   sense           ; wait for Sense bit to be set bctr,lt Vsync1 retc,un ; (see Tutorial......) WaitObj: loda,r0 objectstatus andz   r1        bctr,eq waitobj retc,un
 * subroutine - wait for vertical reset to clear
 * subroutine - wait for vertical reset to clear
 * subroutine - wait for vertical reset to set
 * subroutine - wait for vertical reset to set
 * subroutine - wait for object to finish
 * subroutine - wait for object to finish
 * enter with r1=mask for bit to be tested:
 * obj1=$08, obj2=$04, obj3=$02, obj4=$01