Classic Computer Magazine Archive PROGRAM LISTING: 83-12/AUTOPM.ASM


00010 ;******************************
00020 ;  VBI PLAYER MOVER 1.0
00030 ;     BY F.PINHO 7/83
00040 ;  ASSEMBLE WITH ASM/ED
00050 ;  HALF-SPEED ROUTINE
00060 ;  NOP'S IN CODE CHANGED BY
00070 ;  BASIC FOR NORMAL SPEED
00080 ;******************************
00090          *=  $600    ;RELOCATABLE
00100 STICK0   = $0278
00110 STICK1   = $0279
00120 XITVBV   = $E462
00130 HPOSP0   = $D000
00140 HPOSP1   = $D001
00150 PB1      = 203
00160 PB2      = 204
00170 STPLL    = 205
00180 STPLH    = 206
00190 VPSP0    = 1000
00200 VPSP1    = 1001
00210 STPL0L   = 1002
00220 STPL1L   = 1003
00230 STPL0H   = 1004
00240 STPL1H   = 1005
00250 UPL0     = 1006
00260 UPL1     = 1007
00270 LL0      = 1008
00280 LL1      = 1009
00290 LFL0     = 1010
00300 LFL1     = 1011
00310 HPOST0   = 1012
00320 HPOST1   = 1013
00330 RTL0     = 1014
00340 RTL1     = 1015
00350          LDX #0      ;PLAYER NUMBER
00360 B0       LDA STICK0,X;READ JOYSTICK
00370          AND #1      ;CHECK FIRST BIT
00380          BNE B1      ;IF BIT SET,KEEP CHECKING
00390          BEQ UP      ;BIT CLEAR,GOTO UP
00400 B1       LDA STICK0,X;READ STICK
00410          AND #2      ;SECOND BIT
00420          BNE B2      ;BIT SET?
00430          BEQ DOWN    ;CLEAR.GO DOWN
00440 B2       LDA STICK0,X
00450          AND #4      ;THIRD BIT
00460          BNE B3      ;BIT SET?
00470          BEQ LFTI    ;CLEAR. GO LEFT
00480 B3       LDA STICK0,X
00490          AND #8      ;FOURTH BIT
00500          BNE STICK   ;IF BIT SET,GO ON
00510          BEQ RIGHTI  ;CLEAR.GO RIGHT
00520 STICK    INX         ;NEXT PLAYER
00530          CPX #2      ;ALL DONE?
00540          BEQ EXIT    ;YES.EXIT VBI
00550          BNE B0      ;NO.REPEAT
00560 EXIT     JMP XITVBV  ;BACK TO ATARI VBI
00570 UP       LDA VPSP0,X ;VERTICAL POSITION
00580          TAY         ;HOLD IN Y
00590          DEY         ;DOWN ONE
00600          NOP         ;CHANGED BY BASIC
00610          TYA
00620          CMP UPL0,X  ;TOO FAR?
00630          BCC B1      ;YES. GO BACK
00640          STA VPSP0,X ;NO.STORE NEW VERTICAL
00650          INY         ;BACK TO OLD LOCATION
00660          NOP
00670          LDA STPL0L,X;PLAYER DATA ADDRESS LOW
00680          STA STPLL   ;STORE IN WORKING LOCATION
00690          LDA STPL0H,X;ADDRESS HIGH
00700          STA STPLH
00710 UPLP     LDA (STPLL),Y;GET BYTE
00720          DEY         ;DOWN ONE
00730          NOP
00740          STA (STPLL),Y;STORE AT NEW LOCATION
00750          INY         ;GO BACK FOR NEXT BYTE
00760          INY
00770          NOP
00780          DEC PB1     ;DECREASE COUNTER
00790          BPL UPLP    ;IF NOT DONE,DO IT AGAIN
00800          LDA PB2     ;RELOAD INITIAL COUNTER VALUE
00810          STA PB1     ;RESET COUNTER
00820          CLC         ;FORCED BRANCH
00830 RETURN1  BCC B1
00840 RIGHTI   BEQ RIGHT   ;INTERMEDIATE BRANCH POINT.USED TO EXTEND RANGE
00850 RTN2I    BCC B2      ;SAME
00860 B3I      BCC B3      ;SAME
00870 LFTI     BEQ LEFT    ;SAME
00880 STKI     BCC STICK   ;SAME
00890 STICKI   BCS STICK   ;SAME
00900 DOWN     LDA VPSP0,X ;OLD VERTICAL
00910          TAY         ;HOLD IN Y
00920          INY         ;UP ONE
00930          NOP
00940          TYA
00950          CMP LL0,X   ;TOO FAR?
00960          BCS B2      ;YES. GO BACK
00970          STA VPSP0,X ;NO. STORE NEW VERTICAL
00980          DEC PB1     ;GO TO TOP OF IMAGE
00990          DEC PB1
01000          DEC PB1
01010          NOP
01020          NOP
01030 DLP      INY
01040          DEC PB1
01050          BNE DLP     ;DONE?
01060          LDA PB2     ;YES. RESET COUNTER
01070          STA PB1
01080          LDA STPL0L,X;PLAYER ADDRESS
01090          STA STPLL   ;STORE IN WORKING LOCATION
01100          LDA STPL0H,X
01110          STA STPLH
01120 DWNLP    LDA (STPLL),Y;GET TOP IMAGE BYTE
01130          INY         ;UP ONE
01140          NOP
01150          STA (STPLL),Y;STORE AT NEW LOCATION
01160          DEY         ;BACK FOR NEW BYTE
01170          DEY
01180          NOP
01190          DEC PB1     ;DECREMENT COUNTER
01200          BPL DWNLP   ;IF NOT DONE,GO BACK
01210          LDA PB2     ;RESET COUNTER
01220          STA PB1
01230          CLC
01240 RETURN2  BCC RTN2I   ;FORCED BRANCH
01250 LEFT     LDY HPOST0,X;OLD HORIZONTAL POSITION
01260          DEY         ;MOVE LEFT ONE
01270          NOP
01280          TYA
01290          CMP LFL0,X  ;TOO FAR?
01300          BCC B3I     ;YES. GO BACK
01310          STA HPOST0,X;STORE NEW HORIZONTAL
01320          STA HPOSP0,X;STORE IN HARDWARE REGISTER
01330          CLC
01340 RETURN3  BCC B3I     ;FORCED BRANCH
01350 RIGHT    LDY HPOST0,X;SAME FOR RIGHT MOVEMENT
01360          INY
01370          NOP
01380          TYA
01390          CMP RTL0,X
01400          BEQ GOON
01410          BCS STICKI
01420 GOON     STA HPOST0,X
01430          STA HPOSP0,X
01440          CLC
01450 RETURN   BCC STKI    ;FORCED BRANCH

Back to previous page