* * ÓÉÄ Ò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+2  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 $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