Signetics 2650 & 2636 编程/教程代码 - 编程颜色
外观
这是教程 编程颜色 的代码
此代码块必须与标准 '硬件定义' 代码合并,才能进行组装 |
; 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