home *** CD-ROM | disk | FTP | other *** search
/ A.N.A.L.O.G. Magazine 1988 November / 88_nov.atr / streamer.ama < prev    next >
Text File  |  2023-02-26  |  3KB  |  1 lines

  1.  ORG 1536¢¢ ;------------------------------¢ ;ATARI STREAMERS ML SUBROUTINE¢ ;WRITTEN FOR THE MACRO ASSEMBLER¢ ;----------------------------------¢ ;THIS ROUTINE WILL TAKE A CHARACTER¢ ;STRING AND COPY IT TO PLAYER¢ ;MISSILE MEMORY.¢ ;----------------------------------¢¢ ;ZERO PAGE EQUATES¢¢PLAYER: = 203¢STRING: = 205¢CHRGET: = 207¢MOVEP: = 203¢MP: = 205¢¢ PLA ;GET UNUSED BYTE¢ PLA ;GET MSB OF PLAYER ADDRESS¢ STA PLAYER+1¢ PLA ;GET LSB OF PLAYER ADDRESS¢ STA PLAYER¢ PLA ;GET MSB OF STRING¢ STA STRING+1¢ PLA ;GET LSB OF STRING¢ STA STRING¢ PLA ;GET MSB OF CHARACTER SET¢ STA CHSET+1¢ PLA ;GET LSB OF CHARACTER SET¢ STA CHSET¢ PLA ;GET UNUSED MSB OF LENGTH¢ PLA ;GET LSB OF LENGTH¢ STA LENGTH¢¢ ;INIT. VALUES¢¢ LDA #0¢ STA COUNT¢ LDA #32¢ STA MAX¢¢ ;TEST FOR SINGLE OR DOUBLE LINE¢ ;RESOLUTION.¢¢ LDA 559¢ CMP #62¢ BEQ GETSTR¢ LDA #16¢ STA MAX¢ ;----------------------------------¢ ;GET ATASCII CHARACTER FROM STRING¢ ;AND CONVERT IT TO FIND ITS CORRECT¢ ;ORDER IN MEMORY.¢ ;---------------------------------¢GETSTR: LDY COUNT¢ LDA (STRING),Y¢¢ ;IF CHARACTER IS IN INVERSE,¢ ;UNSHIFT IT.¢¢ AND #127¢C1: CMP #31¢ BCS C2¢¢ ;GRAPHICS CHARACTER 0-31¢ ;ADD 64 TO ITS VALUE.¢¢ ORA #64¢ BNE C3¢C2: CMP #95¢ BCS C3¢¢ ;UPPERCASE CHARACTER 32-95¢ ;SUBTRACT 32 FROM ITS VALUE¢¢ SEC¢ SBC #32¢¢ ;LOWERCASE CHARACTER 96-127¢ ;DO NOTHING. THEY ARE ALREADY¢ ;IN THE CORRECT ORDER.¢¢ ;STORE NEW CHARACTER VALUE IN TEMP.¢¢C3: STA TEMP¢ LDA #0¢ STA TEMP+1¢ ;-------------------------------¢ ;MUTIPLI CHARACTER BY 8¢ ;-------------------------------¢ LDX #3¢ CLC¢C4: ASL TEMP¢ ROL TEMP+1¢ DEX¢ BNE C4¢ ;------------------------------¢ ;ADD CHARACTER SET ADDRESS, AND¢ ;PUT THE VALUE IN ZERO PAGE.¢ ;------------------------------¢ CLC¢ LDA TEMP¢ ADC CHSET¢ STA CHRGET¢ LDA TEMP+1¢ ADC CHSET+1¢ STA CHRGET+1¢ ;---------------------------------¢ ;COPY CHARACTER, FROM ITS ORIGINAL¢ ;ADDRESS, TO PLAYER MEMORY.¢ ;---------------------------------¢ LDX #0¢ LDY #8¢CP1: LDA (CHRGET,X)¢ STA (PLAYER,X)¢ INC CHRGET¢ INC PLAYER¢ DEY¢ BNE CP1¢ INC COUNT¢ LDA COUNT¢ CMP MAX;¢ BEQ RETURN¢ CMP LENGTH¢ BEQ RETURN¢ BNE GETSTR;NOT DONE.CONTINUE LOOP.¢RETURN: RTS;DONE.GO BACK TO BASIC.¢ ;---------------------------------¢ ;THIS ROUTINE WILL MOVE THE PLAYER¢ ;UP OR DOWN WITH RAP.¢ ;---------------------------------¢ PLA ;GET UNUSED BYTE.¢ PLA ;MSB OF PLAYER.¢ STA MOVEP+1¢ STA MP+1¢ PLA ;LSB OF PLAYER.¢ STA MOVEP¢ STA MP¢ PLA ;UNUSED MSB OF DIRECTION.¢¢ ;SINGLE LINE RESOLUTION SETUP.¢¢ LDX #255¢ LDY #255¢¢ ;TEST FOR DOUBLE OR SINGLE LINE¢ ;RESOLUTION.¢¢ LDA 559¢ CMP #62¢ BEQ S1¢¢ ;DOUBLE LINE RESELUTION SETUP.¢¢ LDX #127¢ LDY #126¢¢ ;PULL LSB OF DIRECTION OFF STACK,AND¢ ;FIND OUT THE DIRECTION TO MOVE.¢¢S1: PLA¢ CMP #1¢ BEQ MDOWN¢ ;---------------------------------¢ ;MOVE PLAYER UP ONE BYTE AND RAP.¢ ;---------------------------------¢ LDY #0¢ LDA (MP),Y¢ STA TEMP¢ INC MOVEP¢UP: LDA (MOVEP),Y¢ STA (MP),Y¢ INY¢ DEX¢ BNE UP¢¢ ;DONE.GO RAP LAST BYTE AROUND.¢¢ BEQ S3¢ ;----------------------------------¢ ;MOVE PLAYER DOWN ONE BYTE AND RAP.¢ ;----------------------------------¢MDOWN: TXA¢ TAY¢ LDA (MP),Y¢ STA TEMP¢ DEY¢S2: LDA (MOVEP),Y¢ STA TEMP+1¢ TXA¢ TAY¢ LDA TEMP+1¢ STA (MP),Y¢ DEY ¢ DEY¢ DEX ¢ BNE S2¢ ;-----------------------------¢ ;RAP LAST BYTE AROUND AND EXIT¢ ;ROUTINE.¢ ;-----------------------------¢ TXA¢ TAY¢S3: LDA TEMP¢ STA (MP),Y¢ RTS¢¢ ;BYTE FIELD EQUATES¢¢TEMP: DB 0,0¢LENGTH: DB 0¢COUNT: DB 0¢CHSET: DB 0,0¢MAX: DB 0¢¢