** ÓÉÄ ÒUNTIME ÁÎALYZER -- A TOOL FOR* LOOKING AT ÓÉÄ INSTRUMENTS ETC.** ÓÌÊ 6/02* ORG $4000ÃÈÒÏÕÔ = $FFD2POINT = $02TEMP = $04POINT2 = $FACOUNT2 = $FCLASTVAL = $FE** ÉNIT*ÉNIT LDA #00 STA BUFFER LDA #$80 STA BUFFER+1 LDA #00 STA START STA START+1 STA NUMFRAME STA NUMFRAME+1 STA DELTA STA PLAYFLAG STA PLAYACK STA LDAVAL JSR ÆRAMEÏNE JSR ÒESETÒEG JSR ÓÉÄOUT JSR ÃLEARÓÉÄà;CLEAR "ÓÉÄ" JSR ÓÉÄIN JSR ÉNITÉÒÑ LDA #03 STA ÐLAYÔUNE+1 LDA #00 STA ÉNITÔUNE+1 LDA #$10 STA ÐLAYÔUNE+2 STA ÉNITÔUNE+2 LDA #$40 STA NUMFRAME LDA #00 STA NUMFRAME+1 JSR ÃAPTURE*         JMP ÍAINÐROG*------------------------------- DO 0** ÔEST CODE*ÔESTÃODE LDA #<TESTINIT STA ÉNITÔUNE+1 LDA #>TESTINIT STA ÉNITÔUNE+2 LDA #<TESTPLAY STA ÐLAYÔUNE+1 LDA #>TESTPLAY STA ÐLAYÔUNE+2 LDA #$08 STA NUMFRAME LDA #00 STA NUMFRAME+1 JSR ÃAPTURE JMP ÍAINÐROGTESTINIT LDA #00 STA TESTTEMP LDX #$18:LOOP STA $D400,X DEX BPL :LOOP RTSTESTTEMP DFB 00TESTPLAY LDX TESTTEMP LDA :TESTTAB,X STA $D404 LDA :TAB2,X STA $D418 INC TESTTEMP RTS:TESTTAB HEX 8141211108040201:TAB2 HEX 0102030405060708 FIN*-------------------------------ÍAINÐROG LDA #6 STA $D021 LDA #12 STA $D020 LDA #$80 STA $028A JSR ÓTROUT DFB 153à;LT GREEN DFB 147 TXT 'RANSID :: SLJ 6/02 :: ' TXT 'SJUDD@FFD2.COM',0D*         DFB 00**         JSR ÓTROUT DFB 19 DFB 17,17,17,17,17 DFB 5 TXT ' V1        V2        V3       FIL/VOL',0D TXT 'ATDK:     ATDK:     ATDK:     D415:',0D TXT 'SURL:     SURL:     SURL:     D417:',0D TXT 'PWID:     PWID:     PWID:     D418:',0D TXT 'FREQ:     FREQ:     FREQ:',0D TXT 'CREG:     CREG:     CREG:',0D DFB 17,17,17,17 DFB 158à;YELLOW TXT '+/-     NEXT/PREV FRAME   * RESET SID',0D TXT 'SHFT+/- BIG STEPS         C CAPTURE',0D TXT 'CTRL-P  PLAY FRAMES       = NO UPDATE',0D TXT '1/2/3/4 TOGGLE PLAYBACK   _ BRK',0D TXT 'HOME    GO TO FIRST FRAME',0D DFB $0D TXT 'UP/DN   SELECT REGISTER   @ ABS/DELTA',0D TXT 'LF/RT   SCROLL DISPLAY',0D TXT '\       SET TO CUR FRAME',0D DFB 5 DFB 00ÍAIN JSR ÓTROUT DFB 19 DFB 17,17,17 TXT 'FRAME START:',00 LDX START LDA START+1 JSR ÈEX16 JSR ÓTROUT TXT ' LEN:',00 LDX NUMFRAME LDA NUMFRAME+1 JSR ÈEX16 JSR ÓTROUT TXT ' CURRENT:',00 LDX CURFRAME LDA CURFRAME+1 JSR ÈEX16 JSR ÐLAYÆRAME LDA PLAYFLAG AND DISPFLAGà;1 AND 1 BNE ÎOPRINT JSR ÐRINTÆRAME LDA PLAYFLAG BNE ÎOÐRINTÐRÒEG JSR ÐRINTÒEGÐRÖSTAT JSR ÖSTATSÎOÐRINT:WAIT JSR $FFE4 BNE :KEY LDA PLAYFLAG BEQ :WAIT LDA PLAYACK BEQ :WAIT BNE ÍAIN:KEY CMP #'+' BEQ :NEXT CMP #'-' BEQ :PREV CMP #"Û" BEQ :NEXT2 CMP #"Ý" BEQ :PREV2 CMP #145 BEQ :UP CMP #17 BEQ :DOWN CMP #157 BEQ :LEFT CMP #29 BEQ :RIGHT CMP #16 BEQ :PLAY CMP #19 BEQ :HOME CMP #'*' BEQ :STAR CMP #'C' BEQ :CAP CMP #'\' BEQ :SETCUR CMP #'=' BEQ :NOUP CMP #'_' BEQ :BRK CMP #'@' BEQ :TOGGLE CMP #'5' BCS :WAIT CMP #'1' BCC :WAIT:TOG AND #$07 TAX DEX LDA TOGTAB,X EOR #$80 STA TOGTAB,X JMP :CLRSID:BRK BRK:NEXT JSR ÎEXTÆRAME JMP ÍAIN:PREV JSR ÐREVÆRAME JMP ÍAIN:NEXT2 JSR ÂIGÎEXT JMP ÍAIN:PREV2 JSR ÂIGÐREV JMP ÍAIN:UP JSR ÐREVÒEG JMP ÍAIN:DOWN JSR ÎEXTÒEG JMP ÍAIN:LEFT JSR ÄECÒEGÐOS JMP ÐRÒEG:RIGHT JSR ÉNCÒEGÐOS JMP ÐRÒEG:PLAY LDA #1 EOR PLAYFLAG STA PLAYFLAG BEQ :JMP JSR ÆRAMEÏNE:CLRSID JSR ÃLEARÓÉÄ:JMP JMP ÍAIN:HOME JSR ÆRAMEÏNE JMP ÍAIN:CAP JSR ÃAPTURE JMP ÍAINÐROG:STAR JSR ÃLEARÓÉÄ JMP :WAIT:SETCUR JSR ÓETÃURÆRAME JMP ÍAIN:NOUP LDA DISPFLAG EOR #$01 STA DISPFLAG JMP :WAIT:TOGGLE LDA DELTAà;0=ABSOLUTE CLCà;1=POSITIVE DELTA ADC #1à;2=NEGATIVE DELTA CMP #3 BNE :STA LDA #00:STA STA DELTA JMP ÍAINÃLEARÓÉÄ LDA #00 LDX #$18:L2 STA $D400,X DEX BPL :L2 LDA #$08 STA $D404 STA $D404+7 STA $D404+14 LDX #$FFà;LET SID:L3 DEXà;SETTLE BNE :L3 RTS TXT 'A SECRET MESSAGE'** IRQ HANDLER*ÉNITÉÒÑ SEI LDA #<IRQ STA $0314 LDA #>IRQ STA $0315 CLI LDA $02A6 BEQ :NTSC:PAL LDA #$C7 LDY #$4C BNE :STA:NTSC LDA #$C6 LDY #$42:STA STY $DC05 STA $DC04 RTSÉÒÑ LDA PLAYFLAG BEQ :SKIP LDA PLAYACK BNE :SKIP INC PLAYACK INC $D020 JSR ÎEXTÆRAME DEC $D020:SKIP JMP $EA31** ÐRINT VOICE ON/OFF STATS*ÖSTATS JSR ÓTROUT DFB 19 DFB 17,17,17,17,17 DFB 00 LDX #3:LOOP LDA #'*' LDY TOGTAB,X BEQ :C0 LDA #' ':C0 LDY :TOGPOS,X STA ($D1),Y DEX BPL :LOOP RTS:TOGPOS DFB 0,10,20,29TOGTAB DFB 0,0,0,0** ÉNC/DEC REGISTER OFFSETS*ÄECÒEGÐOS LDA REGPOS BNE :DEC ORA REGPOS+1 BEQ :RTS DEC REGPOS+1:DEC DEC REGPOS LDA FRAMEPOS SEC SBC #25 STA FRAMEPOS BCS :RTS DEC FRAMEPOS+1:RTS RTSÉNCÒEGÐOS LDA REGPOS CLC ADC #1 TAY LDA REGPOS+1 ADC #00 STA TEMP CPY NUMFRAME SBC NUMFRAME+1 BCS :RTS LDA TEMP STY REGPOS STA REGPOS+1 LDA FRAMEPOS CLC ADC #25 STA FRAMEPOS BCC :RTS INC FRAMEPOS+1:RTS RTS** ÐLAY A ÓÉÄ FRAME*ÐLAYÆRAME LDA TOGTAB BNE :V2*         LDY #4*         LDA (POINT),Y ;D404*         AND #$FE     ;GATE OFF*         STA $D404 LDY #06à;DO ADSR FIRST JSR :DOVOICE:V2 LDA TOGTAB+1 BNE :V3*         LDY #$04+7*         LDA (POINT),Y*         AND #$FE     ;GATE OFF*         STA $D404+7 LDY #13 JSR :DOVOICE:V3 LDA TOGTAB+2 BNE :V4*         LDY #$04+14*         LDA (POINT),Y*         AND #$FE     ;GATE OFF*         STA $D404+14 LDY #20 JSR :DOVOICE:V4 LDA TOGTAB+3 BNE :ACK LDY #21:L4 LDA (POINT),Y STA $D400,Y INY CPY #25 BNE :L4:ACK LDA #00 STA PLAYACK:RTS RTS:DOVOICE LDA (POINT),Yà;CHECK IF SR CMP LASTFRAME,Yà;WILL CHANGE BEQ :CONT LDA #00 STA $D400,Y DEY DEY STA $D400,Y LDA #08 STA $D400,Y INY INY LDX #$10à;LET SID:BLAH DEXà;SETTLE DOWN BNE :BLAH:CONT LDX #7:L1 LDA (POINT),Y STA $D400,Y STA LASTFRAME,Y DEY DEX BNE :L1 RTS** ÏUTPUT A ÓÉÄ FRAME*ÐRINTÆRAME LDX CURREG JSR ÈIGHLIGHTÒEG LDX #00:LOOP STX TEMP JSR ÓETÒEGÐOS LDX TEMP LDY REGOFFSET,X LDA REGSIZE,X CMP #1 BEQ :BYTE INY LDA (POINT),Yà;HIGH BYTE JSR ÈEXOUT DEY:BYTE LDA (POINT),Y JSR ÈEXOUT INX CPX #18 BCC :LOOP RTSÓETÒEGÐOSà;REG IN .Ø LDY REGCOL,X LDA REGROW,X TAX CLC JMP $FFF0à;PLOTREGCOL DFB 5,5,5,5,5 DFB 15,15,15,15,15 DFB 25,25,25,25,25 DFB 35,35,35REGROW DFB 6,7,8,9,10 DFB 6,7,8,9,10 DFB 6,7,8,9,10 DFB 6,7,8REGCOL2 DFB 0,0,0,0,0 DFB 10,10,10,10,10 DFB 20,20,20,20,20 DFB 30,30,30REGOFFSET DFB 5,6,2,0,4 DFB 5+7,6+7,2+7,0+7,4+7 DFB 5+14,6+14,2+14,0+14,4+14 DFB $15,$17,$18REGSIZE DFB 1,1,2,2,1 DFB 1,1,2,2,1 DFB 1,1,2,2,1 DFB 2,1,1** ÈIGHLIGHT REGISTERS*ÓETÐOS2 LDY REGCOL2,X LDA REGROW,X TAX CLC JMP $FFF0à;PLOTÈIGHLIGHTÒEGà;REG IN .Ø JSR ÓETÐOS2 LDY $D3 LDA ($D1),Y ORA #$80 STA ($D1),Y INY LDA ($D1),Y ORA #$80 STA ($D1),Y INY LDA ($D1),Y ORA #$80 STA ($D1),Y INY LDA ($D1),Y ORA #$80 STA ($D1),Y RTSÕNLIGHTÒEG JSR ÓETÐOS2 LDY $D3 LDA ($D1),Y AND #$7F STA ($D1),Y INY LDA ($D1),Y AND #$7F STA ($D1),Y INY LDA ($D1),Y AND #$7F STA ($D1),Y INY LDA ($D1),Y AND #$7F STA ($D1),Y RTS** ÐRINT REGISTER TIME HISTORY*ÐRINTÒEG LDX #12 LDY #00 CLC JSR $FFF0 JSR ÓTROUT TXT 'REG POS=',00 LDX REGPOS LDA REGPOS+1 JSR ÈEX16 JSR ÓTROUT TXT ' TYPE=',00 LDA DELTA BEQ :ABS0 CMP #1 BEQ :PDEL JSR ÓTROUT TXT 'DELTA-  ',0D,00 JMP :CONT:PDEL JSR ÓTROUT TXT 'DELTA+  ',0D,00 JMP :CONT:ABS0 JSR ÓTROUT TXT 'ABSOLUTE',0D,00:CONT LDA #'[' JSR $FFD2 LDA FRAMEPOS STA POINT2 LDA FRAMEPOS+1 STA POINT2+1 LDA REGPOS STA COUNT2 LDA REGPOS+1 STA COUNT2+1 LDX CURREG LDY REGOFFSET,X LDA #00 STA LASTVAL STA LASTVAL+1 LDA REGPOS ORA REGPOS+1 BEQ :LOOP JSR :GETLAST:LOOP JSR ÐRÒEGÄAT LDA POINT2 CLC ADC #25 STA POINT2 BCC :C0 INC POINT2+1:C0 INC COUNT2 BNE :C1 INC COUNT2+1:C1 LDA COUNT2 CMP NUMFRAME LDA COUNT2+1 SBC NUMFRAME+1 BCS :DONE LDA $D3 CMP #35 BCS :DONE LDA #32 JSR $FFD2 JMP :LOOP:DONE LDA #']' JSR $FFD2:SPACE LDA #32 JSR $FFD2 LDA $D3 CMP #40 BCC :SPACE RTS:GETLAST:DEC25 LDA POINT2 SEC SBC #25 STA POINT2 BCS :C3 DEC POINT2+1:C3 LDA REGSIZE,X CMP #1 BEQ :LOBYTE INY LDA (POINT2),Y STA LASTVAL+1 DEY:LOBYTE LDA (POINT2),Y STA LASTVAL:INC25 LDA POINT2 CLC ADC #25 STA POINT2 BCC :RTS INC POINT2+1:RTS RTS** PRINT REG DATA** .Ø = REG, .Ù = OFFSET* DELTA=0 -> ABSOLUTE VALUES*       1 -> POSITIVE DELTA*       2 -> NEGATIVE DELTAÐRÒEGÄAT LDA DELTA BEQ :ABS CMP #1à;POS DELTA BEQ :PDELTA:MDELTA LDA LASTVAL SBC (POINT2),Y STA TEMP LDA REGSIZE,X AND #1à;PRESERVES C BNE :MBYTE LDA LASTVAL+1 INY SBC (POINT2),Y JSR ÈEXOUT LDA (POINT2),Y STA LASTVAL+1 DEY:MBYTE LDA TEMP JSR ÈEXOUT LDA (POINT2),Y STA LASTVAL RTS:PDELTA LDA (POINT2),Y SBC LASTVAL STA TEMP LDA REGSIZE,X AND #1à;PRESERVES C BNE :PBYTE INY LDA (POINT2),Y SBC LASTVAL+1 JSR ÈEXOUT LDA (POINT2),Y STA LASTVAL+1 DEY:PBYTE LDA TEMP JSR ÈEXOUT LDA (POINT2),Y STA LASTVAL RTS:ABS LDA REGSIZE,X CMP #1 BEQ :BYTE INY LDA (POINT2),Y JSR ÈEXOUT DEY:BYTE LDA (POINT2),Y JMP ÈEXOUT** ÇO TO FORWARD/PREVIOUS FRAMES*ÎEXTÆRAME LDX #0 DFB $2CÂIGÎEXT LDX #1 LDA CURFRAME CLC ADC :TAB1,X TAY LDA CURFRAME+1 ADC #00 STA TEMP CPY NUMFRAME SBC NUMFRAME+1 BCC :CONT LDA #00 STA PLAYFLAG JMP ÐRINTÆRAME:CONT LDA TEMP STA CURFRAME+1 STY CURFRAME LDA :TABLO,X CLC ADC POINT STA POINT LDA :TABHI,X ADC POINT+1 STA POINT+1:EXIT RTS:TAB1 DFB 1,16:TABLO DFB 25,<400:TABHI DFB 0,>400ÐREVÆRAME LDX #0 DFB $2CÂIGÐREV LDX #1 LDA CURFRAME SEC SBC :TAB1,X TAY LDA CURFRAME+1 SBC #00 BCC :EXIT STA CURFRAME+1 STY CURFRAME LDA POINT SEC SBC :TABLO,X STA POINT LDA POINT+1 SBC :TABHI,X STA POINT+1:EXIT RTS:TAB1 DFB 1,16:TABLO DFB 25,<400:TABHI DFB 00,>400** ÈANDLE REGISTERS*ÎEXTÒEG LDX CURREG JSR ÕNLIGHTÒEG LDX CURREG INX CPX #18 BCC :STX LDX #00:STX STX CURREG RTSÐREVÒEG LDX CURREG JSR ÕNLIGHTÒEG DEC CURREG BPL :EXIT LDA #17 STA CURREG:EXIT RTS** ÃAPTURE ÓÉÄ FRAMES*ÃAPTURE JSR ÓTROUT DFB 147 DFB 14,5 TXT ':: ÃAPTURE MENU ::',0D HEX 0D0D DFB 00ÐRÍENU JSR STROUT DFB 19,17,17 TXT 'ÉNITÔUNE:$' DFB 00 LDA #00 JSR ÒEVÃHECK LDA INITTUNE+2 LDX INITTUNE+1 JSR ÈEX16 JSR STROUT*         DFB $0D DFB 146à;REV OFF TXT ' <- LDA #$',00 LDA #01 JSR ÒEVÃHECK LDA LDAVAL JSR ÈEXOUT JSR STROUT DFB $0Dà;TURNS REV OFF TXT 'ÐLAYÔUNE:$' DFB 00 LDA #2 JSR ÒEVÃHECK LDA ÐLAYÔUNE+2 LDX ÐLAYÔUNE+1 JSR ÈEX16 JSR STROUT DFB 13,13 TXT 'ÓTART FRAME:$' DFB 00 LDA #3 JSR ÒEVÃHECK LDA START+1 LDX START JSR ÈEX16 JSR STROUT DFB 13 TXT 'ÎUMBER OF CAPTURE FRAMES:$' DFB 00 LDA #4 JSR ÒEVÃHECK LDA NUMFRAME+1 LDX NUMFRAME JSR ÈEX16 JSR ÓTROUT DFB $0D,$0D TXT 'ÆRAME BUFFER:$',00 LDA #5 JSR ÒEVÃHECK LDA BUFFER+1 LDX BUFFER JSR ÈEX16 JSR ÓTROUT DFB 13,13 TXT 'UP/DN  SELECT',0D TXT 'CR     ENTER VALUE',0D TXT '+/-    CHANGE (SHIFT=BIG CHANGE)',0D TXT '_      CAPTURE AND EXIT',0D DFB 00:WAIT JSR $FFE4 BEQ :WAIT CMP #145 BEQ :UP CMP #17 BEQ :DOWN CMP #13 BEQ :CR CMP #'+' BEQ :PLUS CMP #'-' BEQ :MINUS CMP #"Û" BEQ :BIGPLUS CMP #"Ý" BEQ :BIGMINUS CMP #'_' BNE :WAIT JMP ÇETÆRAMES:UP LDA CURPAR SEC SBC #1 BPL :STA1 LDA #5:STA1 STA CURPAR JMP ÐRÍENU:DOWN LDA CURPAR CLC ADC #1 CMP #6 BCC :STA2 LDA #00:STA2 STA CURPAR JMP ÐRÍENU:CR JSR ÇETÖAL JSR ÓETÐARÖAL JMP ÐRÍENU:BIGPLUS LDA #16 DFB $2C:PLUS LDA #1 STA TEMP JSR ÇETÐARÖAL CLC ADC TEMP BCC :C0 INY:C0 JSR ÓETÐARÖAL JMP ÐRÍENU:BIGMINUS LDA #16 DFB $2C:MINUS LDA #1 STA TEMP JSR ÇETÐARÖAL SEC SBC TEMP BCS :C1 DEY:C1 JSR ÓETÐARÖAL JMP ÐRÍENUÒEVÃHECK CMP CURPAR BNE :RTS LDA #18à;REV ON JMP $FFD2:RTS RTSCURPAR DFB 00** ÇET/ÓET PAR VALUES** .Á/.Ù = LO/HI*ÇETÐARÖAL LDX CURPAR BEQ :INIT DEX BEQ :LDA DEX BEQ :PLAY DEX BEQ :START DEX BEQ :NUMFRAME LDA BUFFER LDY BUFFER+1 RTS:NUMFRAME LDA NUMFRAME LDY NUMFRAME+1 RTS:START LDA START LDY START+1 RTS:PLAY LDA ÐLAYÔUNE+1 LDY ÐLAYÔUNE+2 RTS:LDA LDA LDAVAL RTS:INIT LDA ÉNITÔUNE+1 LDY ÉNITÔUNE+2 RTSÓETÐARÖAL LDX CURPAR BEQ :INIT DEX BEQ :LDA DEX BEQ :PLAY DEX BEQ :START DEX BEQ :NUMFRAME:BUFFER STA BUFFER STY BUFFER+1 RTS:NUMFRAME STA NUMFRAME STY NUMFRAME+1 RTS:START STA START STY START+1 RTS:PLAY STA ÐLAYÔUNE+1 STY ÐLAYÔUNE+2 RTS:LDA STA LDAVAL RTS:INIT STA ÉNITÔUNE+1 STY ÉNITÔUNE+2 RTS** ÇET 16-BIT HEX VALUE*VAL DA 00ÇETÖAL LDX #24 LDY #00 CLC JSR $FFF0 JSR ÓTROUT TXT 'ÅNTER VALUE:$    ' DFB 157,157,157,157 DFB 00 LDA #00 STA VAL STA VAL+1 JSR :GETCHAR JSR :GETCHAR JSR :GETCHAR JSR :GETCHAR:DONE LDY VAL+1 LDA VAL RTS:GETCHAR JSR $FFCF CMP #$0D BEQ :EXIT CMP #$40à;CONVERT TO HEX BCC :C1 SBC #7:C1 AND #$0F ASL VAL ROL VAL+1 ASL VAL ROL VAL+1 ASL VAL ROL VAL+1 ASL VAL ROL VAL+1 ORA VAL STA VAL RTS:EXIT PLA PLA JMP :DONE** ÐLAY TUNE AND RECORD FRAMES*ÇETÆRAMES LDA START STA COUNT LDA START+1 STA COUNT+1 LDA BUFFER STA MPOINT LDA BUFFER+1 STA MPOINT+1 JSR ÓÉÄOUT LDA #00 LDX #$18:L2 STA $D400,X DEX BPL :L2 LDA LDAVAL JSR ÉNITÔUNE:PLOOP LDA COUNT ORA COUNT+1 BEQ :C1 JSR DEBUG JSR ÐLAYÔUNE LDA COUNT BNE :DEC DEC COUNT+1:DEC DEC COUNT JMP :PLOOP:C1 LDA NUMFRAME STA COUNT LDA NUMFRAME+1 STA COUNT+1:LOOP2 JSR DEBUG JSR ÃOPYÓÉÄ LDA COUNT BNE :DEC2 ORA COUNT+1 BEQ :DONE DEC COUNT+1:DEC2 DEC COUNT JSR ÐLAYÔUNE JMP :LOOP2:DONE JSR ÓÉÄIN JSR ÒESETÒEG*         JMP ÆRAMEÏNE** ÇO TO FRAME 1, RESET REGISTER*ÆRAMEÏNE LDA #00 STA CURFRAME STA CURFRAME+1 LDA BUFFER STA POINT*         STA FRAMEPOS LDA BUFFER+1 STA POINT+1*         STA FRAMEPOS+1 RTSÒESETÒEG LDA #00 STA CURREG STA REGPOS STA REGPOS+1 LDA BUFFER STA FRAMEPOS LDA BUFFER+1 STA FRAMEPOS+1 RTS** ÓET REGS TO CURRENT FRAME*ÓETÃURÆRAME LDA CURFRAME STA REGPOS LDA CURFRAME+1 STA REGPOS+1 LDA POINT STA FRAMEPOS LDA POINT+1 STA FRAMEPOS+1 RTS** ÃOPY ÓÉÄ REGS TO BUFFER*ÃOPYÓÉÄ LDA $02 PHA LDA $03 PHA LDA MPOINT STA $02 LDA MPOINT+1 STA $03 LDY #$18:LOOP LDA $D400,Y STA ($02),Y DEY BPL :LOOP LDA MPOINT CLC ADC #25 STA MPOINT LDA MPOINT+1 ADC #00 STA MPOINT+1 PLA STA $03 PLA STA $02 RTS** ÓWITCH ÓÉÄ IN/OUT*ÓÉÄOUT LDA #$7F STA $DC0D SEIà;JUST IN CASE LDA #$30 STA $01 RTSÓÉÄIN SEIà;JUST IN CASE! LDA #$36 STA $01 LDA #$81 STA $DC0D CLI RTS*-------------------------------** ÕTILITY ROUTINES**-------------------------------** ÈÅØ16 -- PRINT TWO-BYTE HEX** ÉNPUT: .Ø .Á = LO HI*ÈÅØ16 ÊÓÒ ÈÅØÏÕÔ ÔØÁà;ÆALL THROUGH TO NEXT ROUTINE** ÈÅØÏÕÔ** ÐRINT HEX BYTE IN .Á USING ÃÈÒÏÕÔ*ÈÅØÏÕÔ ÐÈÁ ÌÓÒ ÌÓÒ ÌÓÒ ÌÓÒ ÊÓÒ :ÐÒÉÎÔ ÐÌÁ ÁÎÄ #$0Æ:ÐÒÉÎÔ ÏÒÁ #$30 ÃÍÐ #$3Á ÂÃÃ :ÐÌÏÐ ÁÄÃ #$06:ÐÌÏÐ ÊÍÐ $ÆÆÄ2** ÓÔÒÏÕÔ*   ÌIKE ÐÒÉÎÔ, BUT THE STRING IMMEDIATELY FOLLOWS THE*   SUBROUTINE CALL; EXECUTION RESUMES RIGHT AFTER THE*   NULL-TERMINATION BYTE.**   ÏN EXIT, Á AND Ø ARE THOROUGHLY HOSED.*ÓÔÒÏÕÔ ÐÌÁ ÔÁØà;ÌO BYTE ÐÌÁ ÉÎØ ÂÎÅ :ÐÒÉÎÔ ÃÌÃ ÁÄÃ #01:ÐÒÉÎÔ ÓÔÁ :ÌÏÏÐ+2:ÌÏÏÐ ÌÄÁ $Á000,Ø ÂÅÑ :ÄÏÎÅ ÊÓÒ ÃÈÒÏÕÔ ÉÎØ ÂÎÅ :ÌÏÏÐ ÉÎÃ :ÌÏÏÐ+2 ÂÎÅ :ÌÏÏÐ:ÄÏÎÅ ÌÄÁ :ÌÏÏÐ+2 ÐÈÁà;HI BYTE ÔØÁ ÐÈÁà;LO BYTE ÒÔÓDEBUG PHA LDA $01 PHA LDA #$37 STA $01 INC $D020 PLA STA $01 PLA RTS** ÖARIABLES/STORAGE*ÉNITÔUNE JMP $1000ÐLAYÔUNE JMP $1003LDAVAL DFB 00START DA 00à;START FRAMENUMFRAME DA 32à;NUMBER OF FRAMESCURFRAME DA 00CURREG DFB 00à;CURRENT REGISTERREGPOS DA 00FRAMEPOS DA 00à;START OF FRAME,FOR REGISTERDELTA DFB 00à;ABS/DIFFERENTIALCOUNT DA 00à;COUNTERMPOINT DA 00à;POINTERDISPFLAG DFB 00à;UPDATE DISPLAYPLAYFLAG DFB 00PLAYACK DFB 00PLAYUP DFB 00BUFFER DA $5000LASTFRAME DS 25