Advertisement
NovaYoshi

Video Life

Jan 15th, 2012
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Disassembly of VidLife.bin
  2. ; Disassembled Thu Apr 14 19:12:06 2011
  3. ; Using DiStella v3.0
  4.  
  5. VSYNC   =  $00
  6. VBLANK  =  $01
  7. WSYNC   =  $02
  8. RSYNC   =  $03
  9. NUSIZ0  =  $04
  10. NUSIZ1  =  $05
  11. COLUP0  =  $06
  12. COLUP1  =  $07
  13. COLUPF  =  $08
  14. COLUBK  =  $09
  15. CTRLPF  =  $0A
  16. REFP0   =  $0B
  17. REFP1   =  $0C
  18. PF2     =  $0F
  19. RESP0   =  $10
  20. RESP1   =  $11
  21. RESM0   =  $12
  22. RESM1   =  $13
  23. RESBL   =  $14
  24. AUDC0   =  $15
  25. AUDC1   =  $16
  26. AUDF0   =  $17
  27. AUDF1   =  $18
  28. AUDV0   =  $19
  29. AUDV1   =  $1A
  30. GRP0    =  $1B
  31. GRP1    =  $1C
  32. ENAM0   =  $1D
  33. ENAM1   =  $1E
  34. ENABL   =  $1F
  35. HMP0    =  $20
  36. HMP1    =  $21
  37. HMBL    =  $24
  38. HMOVE   =  $2A
  39. HMCLR   =  $2B
  40. INPT4   =  $3C
  41. INPT5   =  $3D
  42. SWCHA   =  $0280
  43. SWCHB   =  $0282
  44. INTIM   =  $0284
  45. TIM8T   =  $0295
  46. TIM64T  =  $0296
  47.  
  48. LF851   =   $F851
  49. LF9A2   =   $F9A2
  50. LFA51   =   $FA51
  51. LFAA2   =   $FAA2
  52. LFB51   =   $FB51
  53. LFC51   =   $FC51
  54. LFCA2   =   $FCA2
  55. LFDA2   =   $FDA2
  56. LFE00   =   $FE00
  57. LFEA2   =   $FEA2
  58. LFF00   =   $FF00
  59. LFFA2   =   $FFA2
  60.  
  61. CursorX_Hex = $80
  62. CursorY_Hex = $81
  63. CursorX_BCD = $82
  64. CursorY_BCD = $83
  65. Retraces    = $90 ; (Shorter version)
  66. CellLineBuffer = $bc
  67. ZoomBuffer  = $e8
  68. GRID_WIDTH  =  96
  69. GRID_HEIGHT =  80
  70. FontBuffer  = $01CA
  71. CellRead1 = $f000
  72. CellRead2 = $f051
  73. CellRead3 = $f0a2
  74. CellRead4 = $f100
  75. CellRead5 = $f151
  76. CellRead6 = $f1a2
  77. CellRead7 = $f200
  78. CellRead8 = $f251
  79. CellRead9 = $f2a2
  80. CellRead10 = $f300
  81. CellRead11 = $f351
  82. CellRead12 = $f3a2
  83. CellWrite1 = $f400
  84. CellWrite2 = $f451
  85. CellWrite3 = $f4a2
  86. CellWrite4 = $f500
  87. CellWrite5 = $f551
  88. CellWrite6 = $f5a2
  89. CellWrite7 = $f600
  90. CellWrite8 = $f651
  91. CellWrite9 = $f6a2
  92. CellWrite10 = $f700
  93. CellWrite11 = $f751
  94. CellWrite12 = $f7a2
  95.  
  96.  
  97. ;       ORG $F800
  98.  
  99. RenderTheScreen:
  100.        INC    Retraces
  101.        BNE    LF80A  
  102.        LDA    $86    
  103.        BMI    LF80A  
  104.        INC    $86    
  105. LF80A: LDA    Retraces
  106.        AND    #$01    
  107.        BEQ    LF887  
  108.        LDA    #$80    
  109.        STA    HMP0    
  110.        STA    HMP1    
  111.        STA    WSYNC  
  112.        STA    HMOVE  
  113. LF81A: STA    WSYNC  
  114.        LDA    #$00    
  115.        STA    PF2    
  116.        TXA            
  117.        LSR    A      
  118.        TAY            
  119.        LDA    CellRead2,X
  120.        STA    GRP0    
  121.        LDA    CellRead4,X
  122.        STA    GRP1    
  123.        LDA    CellRead6,X
  124.        STA    GRP0    
  125.        LDA    CellRead8,X
  126.        STA    GRP1    
  127.        LDA    CellRead10,X
  128.        STA    GRP0    
  129.        LDA    CellRead12,X
  130.        STA    GRP1    
  131.        LDA    FontBuffer,Y
  132.        STA    PF2    
  133.        CPX    CursorY_Hex
  134.        BNE    LF84E  
  135.        LDA    #$FF    
  136.        STA    ENABL  
  137. LF84E: STA    WSYNC  
  138.        LDA    #$00    
  139.        STA    PF2    
  140.        TXA            
  141.        LSR    A      
  142.        TAY            
  143.        LDA    CellRead2,X
  144.        STA    GRP0    
  145.        LDA    CellRead4,X
  146.        STA    GRP1    
  147.        LDA    CellRead6,X
  148.        STA    GRP0    
  149.        LDA    CellRead8,X
  150.        STA    GRP1    
  151.        LDA    CellRead10,X
  152.        STA    GRP0    
  153.        LDA    CellRead12,X
  154.        STA    GRP1    
  155.        LDA    FontBuffer,Y
  156.        STA    PF2    
  157.        LDA    #$00    
  158.        INX            
  159.        CPX    #$50    
  160.        STA    ENABL  
  161.        BNE    LF81A  
  162.        STA    WSYNC  
  163.        BEQ    LF8F2  
  164. LF887: STA    WSYNC  
  165. LF889: STA    WSYNC  
  166.        STA    PF2    
  167.        TXA            
  168.        LSR    A      
  169.        TAY            
  170.        LDA    CellRead1,X
  171.        STA    GRP0    
  172.        LDA    CellRead3,X
  173.        STA    GRP1    
  174.        LDA    CellRead5,X
  175.        STA    GRP0    
  176.        LDA    CellRead7,X
  177. LF8A2: STA    GRP1    
  178.        LDA    CellRead9,X
  179.        STA    GRP0    
  180.        LDA    CellRead11,X
  181.        STA    GRP1    
  182.        LDA    FontBuffer,Y
  183.        STA    PF2    
  184.        CPX    CursorY_Hex
  185.        BNE    LF8BB  
  186.        LDA    #$FF    
  187.        STA    ENABL  
  188. LF8BB: LDA    #$00    
  189.        STA    WSYNC  
  190.        STA    PF2    
  191.        TXA            
  192.        LSR    A      
  193.        TAY            
  194.        LDA    CellRead1,X
  195.        STA    GRP0    
  196.        LDA    CellRead3,X
  197.        STA    GRP1    
  198.        LDA    CellRead5,X
  199.        STA    GRP0    
  200.        LDA    CellRead7,X
  201.        STA    GRP1    
  202.        LDA    CellRead9,X
  203.        STA    GRP0    
  204.        LDA    CellRead11,X
  205.        STA    GRP1    
  206.        LDA    FontBuffer,Y
  207.        STA    PF2    
  208.        LDA    #$00    
  209.        INX            
  210.        CPX    #$50    
  211.        STA    ENABL  
  212.        BNE    LF889  
  213.        STA    WSYNC  
  214. LF8F2: STA    GRP0    
  215.        STA    PF2    
  216.        STA    GRP1    
  217.        STA    WSYNC  
  218.        LDX    #$C5    
  219.        BIT    $86    
  220.        BPL    :+
  221. LF900: LDX    Retraces
  222. :      LDY    #$02    
  223.        STA    WSYNC  
  224.        STX    COLUBK  
  225.        STA    NUSIZ0  
  226.        STA    COLUP0  
  227.        STY    ENAM0  
  228.        STA    NUSIZ1  
  229.        STA    COLUP1  
  230.        STY    ENAM1  
  231.        LDA    #$3C    
  232.        STA    TIM64T  
  233.        RTS            
  234.  
  235. WaitTimer1:
  236.        LDA    INTIM ;F91A
  237.        BNE    WaitTimer1
  238.        LDA    #$2A    
  239.        STA    WSYNC  
  240.        STA    VBLANK  
  241.        STA    VSYNC  
  242.        STA    TIM8T  
  243.        RTS
  244.            
  245. WaitTimer2:
  246.        LDA    INTIM ;F92B
  247.        BNE    WaitTimer2  
  248.        STA    WSYNC  
  249.        STA    VSYNC  
  250.        LDA    #$30    
  251.        STA    TIM64T  
  252.        RTS            
  253.  
  254. CopyCellLineToBuffer: ; see also: CopyBufferToCellLine
  255. ; Inputs:
  256. ; X -  Location of buffer in zeropage
  257. ; Y -  Row you want
  258.        LDA    CellRead1,Y
  259.        STA    $0,X
  260.        LDA    CellRead2,Y
  261.        STA    $1,X
  262.        LDA    CellRead3,Y
  263.        STA    $2,X
  264.        LDA    CellRead4,Y
  265.        STA    $3,X
  266.        LDA    CellRead5,Y
  267. LF951: STA    $4,X
  268.        LDA    CellRead6,Y
  269.        STA    $5,X
  270.        LDA    CellRead7,Y
  271.        STA    $6,X
  272.        LDA    CellRead8,Y
  273.        STA    $7,X
  274.        LDA    CellRead9,Y
  275.        STA    $8,X
  276.        LDA    CellRead10,Y
  277.        STA    $9,X
  278.        LDA    CellRead11,Y
  279.        STA    $a,X
  280.        LDA    CellRead12,Y
  281.        STA    $b,X
  282.        RTS            
  283.  
  284. ToggleCellUnderCursor: ; plays a sound too!
  285.        LDY    CursorY_Hex
  286.        LDX    #CellLineBuffer    
  287.        JSR    CopyCellLineToBuffer
  288.        LDA    CursorX_Hex ; get index into CellLineBuffer (X/8)
  289.        LSR    A
  290.        LSR    A      
  291.        LSR    A      
  292.        TAX            
  293.        LDA    CursorX_Hex ; get bit number of the byte (X&7)
  294.        AND    #$07    
  295.        TAY            
  296.        LDA    BitSelectTable,Y
  297.        EOR    CellLineBuffer,X  
  298.        STA    CellLineBuffer,X  
  299.        LDX    #$08  ; make a different sound depending on if we're turning a bit on or off
  300.        AND    BitSelectTable,Y
  301.        BNE    :+
  302.          LDX    #$10    
  303. :      STX    AUDF0
  304.        LDY    CursorY_Hex
  305.        LDX    #CellLineBuffer
  306.        STX    AUDV0  
  307. CopyBufferToCellLine: ; see also: CopyCellLineToBuffer
  308. ; Inputs:
  309. ; X -  Location of buffer in zeropage
  310. ; Y -  Row you want
  311.        LDA    0,X
  312.        STA    CellWrite1,Y
  313.        LDA    1,X
  314.        STA    CellWrite2,Y
  315.        LDA    2,X
  316.        STA    CellWrite3,Y
  317.        LDA    3,X
  318.        STA    CellWrite4,Y
  319.        LDA    4,X
  320.        STA    CellWrite5,Y
  321.        LDA    5,X
  322.        STA    CellWrite6,Y
  323.        LDA    6,X
  324.        STA    CellWrite7,Y
  325.        LDA    7,X
  326.        STA    CellWrite8,Y
  327.        LDA    8,X
  328.        STA    CellWrite9,Y
  329.        LDA    9,X
  330.        STA    CellWrite10,Y
  331.        LDA    10,X
  332.        STA    CellWrite11,Y
  333.        LDA    11,X
  334.        STA    CellWrite12,Y
  335.        RTS            
  336.  
  337. BitSelectTable:
  338.        .byt $01,$02,$04,$08,$10,$20,$40,$80
  339.  
  340. START: SEI            
  341.        CLD            
  342.        LDA    #$00    
  343.        TAX            
  344. :      STA    0,X          ; seems to clear memory but is kind of wacky
  345.        TXS            
  346.        STX    CursorY_Hex
  347.        INX            
  348.        BNE    :-
  349.        STA    WSYNC  
  350.        LDX    #$04    
  351. :      DEX            
  352.        BNE    :-  
  353.        STA    RESM0  
  354.        LDX    #$0B
  355.        STA    WSYNC  
  356. :      DEX            
  357.        BNE    :-  
  358.        STA    RESM1  
  359.        LDX    #$07    
  360.        STA    WSYNC  
  361. :      DEX            
  362.        BNE    :-
  363.        STA    RESBL  
  364.        STA    $84    
  365.        STA    $87    
  366.        STA    $88    
  367.        LDA    #$C5    
  368.        STA    $F2    
  369.        LDA    #$08    
  370.        STA    AUDC1  
  371.        STA    REFP0  
  372.        STA    REFP1  
  373.        JSR    LFE96  
  374.        LDA    #$43    
  375.        JSR    LFEC4  
  376.        LDA    #$0F    
  377.        STA    AUDV1  
  378. LFA2C: INC    CursorY_Hex
  379.        JSR    PrepareAndRenderThenWait  
  380.        JSR    PrepareAndRenderThenWait  
  381.        LDA    CursorY_Hex
  382.        CMP    #$20    
  383.        BPL    LFA3C  
  384.        STA    AUDF1  
  385. LFA3C: CMP    #$25    
  386.        BMI    LFA2C  
  387.        LDA    #$37    
  388.        STA    CursorX_BCD
  389.        STA    CursorY_BCD  
  390.        LDA    #$55
  391.        STA    $F2    
  392.        LDA    #$00    
  393.        STA    AUDC1  
  394.        STA    $AE    
  395. :      JSR    PrepareAndRenderThenWait  
  396.        INC    $AE    
  397.        BPL    :-
  398.        LDA    #$49    
  399.        JSR    LFEC4  
  400.        LDA    #$FE    
  401.        STA    $85    
  402.        BNE    LFA8F  
  403. LFA62: JSR    LFE96  
  404.        LDA    #$00    
  405.        STA    $87    
  406.        STA    $88    
  407.        STA    $86    
  408.  
  409. ; could be the main loop
  410. LFA6D: STA    $85    
  411. LFA6F: JSR    PrepareAndRender  
  412.        JSR    RenderThreeNumbers  
  413.        JSR    WaitTimer1  
  414.        JSR    WaitTimer2  
  415.        JSR    LFB92  
  416.        JSR    PrepareAndRenderThenWait  
  417.        LDX    #$00    
  418.        STX    AUDV0  
  419.        LDA    SWCHB
  420.        LSR    A      
  421.        BCC    LFA62  
  422.        LDA    INPT5  
  423.        BMI    LFA92  
  424. LFA8F: JMP    LFD03  
  425. LFA92: LDA    SWCHA   ; get keys?
  426.        ORA    #$0F    
  427.        LDY    INPT4   ; button on the controller  
  428.        BPL    :+
  429.          STX    $84    
  430.          AND    #$FE    
  431.          CMP    #$FE    
  432. :      BEQ    LFA6D   ; no keys pressed, TRY AGAIN
  433.        ; keys pressed, so process them
  434.        STX    $86    
  435.        CMP    $85    
  436.        STA    $85    
  437.        BNE    LFAB1  
  438.        LSR    $8F            ; if
  439.        BNE    LFA6F  
  440.        BEQ    LFAB5  
  441. LFAB1: LDA    #$40           ; else
  442.        STA    $8F    
  443. LFAB5: LDA    $85            ; end
  444.        AND    #$01    
  445.        BEQ    :+  
  446.        LDA    $84    
  447.        BNE    :+  
  448.        INC    $84    
  449.        JSR    ToggleCellUnderCursor  
  450. :      LDA    $85    
  451.        AND    #$F0    
  452.        CMP    #$F0    
  453.        BEQ    LFA6F  
  454.        LDX    #$00    
  455.        STX    $84    
  456.        AND    #$40    
  457.        BNE    CheckPressingUp  
  458.        LDA    CursorX_Hex
  459.        BNE    DontNeedWrapLeft
  460.        LDX    #$0B    
  461.        STA    WSYNC  
  462. LFADC: DEX            
  463.        BNE    LFADC  
  464.        STA    RESBL  
  465.        LDA    #$5F    
  466.        STA    CursorX_Hex
  467.        LDA    #$95    
  468.        STA    CursorX_BCD
  469.        LDA    #$20    
  470.        BNE    WrappedAroundLeft
  471. DontNeedWrapLeft:
  472.          DEC    CursorX_Hex
  473.          SED            
  474.          SEC            
  475.          LDA    CursorX_BCD
  476.          SBC    #$01    
  477.          STA    CursorX_BCD
  478.          CLD            
  479.          LDA    #$10    
  480. WrappedAroundLeft:
  481.        STA    HMBL    
  482.        STA    WSYNC  
  483.        STA    HMOVE  
  484. LFB00: STA    WSYNC   ; label not referenced anywhere?
  485.        STA    HMCLR  
  486. CheckPressingUp:
  487.        LDA    $85             ; Pressing up?
  488.        AND    #$10    
  489.        BNE    CheckPressingRight
  490.        LDA    CursorY_Hex
  491.        BNE    :+
  492.          LDA    #$4F    
  493.          STA    CursorY_Hex
  494.          LDA    #$79    
  495.          STA    CursorY_BCD
  496.          BNE    CheckPressingRight
  497. :      DEC    CursorY_Hex
  498.        SED            
  499.        SEC            
  500.        LDA    CursorY_BCD
  501.        SBC    #$01    
  502.        STA    CursorY_BCD
  503.        CLD            
  504. CheckPressingRight:
  505.        LDA    $85             ; Pressing right?
  506.        AND    #$80    
  507.        BNE    CheckPressDown
  508.        LDA    CursorX_Hex     ; Do we need to wrap the cursor around?
  509.        CMP    #GRID_WIDTH-1
  510.        BNE    :+
  511.          STA    WSYNC  
  512.          STA    RESBL  
  513.          LDA    #$00    
  514.          STA    CursorX_Hex
  515.          STA    CursorX_BCD
  516.          LDA    #$80    
  517.          BNE    WrappedAroundRight
  518. :      INC    CursorX_Hex
  519.        SED            
  520.        CLC            
  521.        LDA    CursorX_BCD
  522.        ADC    #$01    
  523.        STA    CursorX_BCD
  524.        CLD            
  525.        LDA    #$F0            ; move the ball cursor
  526. WrappedAroundRight:
  527.        STA    HMBL            ;
  528.        STA    WSYNC           ;
  529.        STA    HMOVE           ; update ball X position
  530.        STA    WSYNC  
  531.        STA    HMCLR  
  532. CheckPressDown:
  533.        LDA    $85             ; Pressing down?
  534.        AND    #$20    
  535.        BNE    DownNotPressed  
  536.        LDA    CursorY_Hex     ; Do we need to wrap the cursor around?
  537.        CMP    #GRID_HEIGHT-1
  538.        BNE    :+
  539.          LDA    #$00    
  540.          STA    CursorY_Hex
  541.          STA    CursorY_BCD
  542.          BEQ    WrappedAroundDown
  543. :      INC    CursorY_Hex
  544.        SED            
  545.        CLC            
  546.        LDA    CursorY_BCD
  547.        ADC    #$01    
  548.        STA    CursorY_BCD
  549.        CLD            
  550. DownNotPressed:
  551. WrappedAroundDown:
  552.        JMP    LFA6F  
  553.  
  554. LFB76: .byte $F3
  555. LFB77: .byte $F0,$F0,$F0,$F1,$F1,$F1,$F2,$F2,$F2,$F3,$F3,$F3,$F0
  556. LFB84: .byte $A2
  557. LFB85: .byte $00,$51,$A2,$00,$51,$A2,$00,$51,$A2,$00,$51,$A2,$00
  558.  
  559. LFB92: LDA    CursorY_Hex
  560.        CMP    #$4B    
  561.        BMI    :+
  562.          SEC
  563.          SBC    #$50    
  564. :      CLC
  565.        ADC    #$05    
  566.        STA    $92    
  567.        LDA    CursorX_Hex
  568. LFBA2: CLC            
  569.        ADC    #$05    
  570.        TAY            
  571.        AND    #$07    
  572.        STA    $99    
  573.        TYA            
  574.        LSR    A      
  575.        LSR    A      
  576.        LSR    A      
  577.        TAY            
  578.        LDA    LFB76,Y
  579.        STA    $95    
  580.        ORA    #$04    
  581.        STA    $A3    
  582.        LDA    LFB84,Y
  583.        STA    $94    
  584.        STA    $A2    
  585.        LDA    LFB77,Y
  586.        STA    $97    
  587.        ORA    #$04    
  588.        STA    $A5    
  589.        LDA    LFB85,Y
  590.        STA    $96    
  591.        STA    $A4    
  592.        LDA    #$09    
  593.        STA    $93    
  594.        LDA    SWCHB  
  595.        BPL    MakeZoomBuffer  
  596.        LDA    SWCHA   ; pressing anything?
  597.        AND    #$0F    
  598.        CMP    #$0F    
  599.        BEQ    LFC2A   ; exit mystery routine
  600.        LDA    INPT4  
  601.        BMI    LFC2A   ; exit mystery routine
  602.        LDA    #$FF    
  603.        STA    $B1    
  604.        LDA    #$00    
  605.        LDX    $99    
  606.        SEC            
  607.        BEQ    LFBF6  
  608. :      ROL    A      
  609.        ROL    $B1    
  610.        DEX            
  611.        BNE    :-  
  612. LFBF6: STA    $B0    
  613. LFBF8: LDA    $92    
  614.        BPL    :+  
  615.          CLC            
  616.          ADC    #$50    
  617. :      TAY            
  618. LFC00: LDA    #$00    
  619.        STA    $AF    
  620.        LDX    $93    
  621.        LDA    ZoomBuffer,X
  622.        LDX    $99
  623.        BEQ    LFC12  
  624. LFC0C: ASL    A      
  625.        ROL    $AF    
  626.        DEX            
  627.        BNE    LFC0C  
  628. LFC12: STA    $AE    
  629.        LDA    ($94),Y
  630.        AND    $B0    
  631.        ORA    $AE    
  632.        STA    ($A2),Y
  633.        LDA    ($96),Y
  634.        AND    $B1    
  635.        ORA    $AF    
  636.        STA    ($A4),Y
  637.        DEC    $92    
  638.        DEC    $93    
  639.        BPL    LFBF8  
  640. LFC2A: RTS            
  641.  
  642. MakeZoomBuffer:
  643.        LDA    $92    
  644.        BPL    :+
  645.        CLC            
  646.        ADC    #$50    
  647. :      TAY            
  648.        LDA    ($96),Y
  649.        STA    $AE    
  650.        LDA    ($94),Y
  651.        LDX    $99    
  652.        BEQ    LFC43
  653. :      LSR    $AE    
  654.        ROR    A      
  655.        DEX            
  656.        BNE    :-
  657. LFC43: LDX    $93    
  658.        STA    ZoomBuffer,X  
  659.        DEC    $92    
  660.        DEC    $93    
  661.        BPL    MakeZoomBuffer
  662.        RTS            
  663.  
  664. RenderThreeNumbers:
  665.        LDA    #$00
  666.        STA    $A1    
  667.        LDX    #$04    
  668. :      STA    $CA,X   ; seems to clear out the generations count
  669.        DEX            
  670.        BPL    :-
  671. ; Render three numbers
  672.        LDX    #$DA    
  673.        LDA    CursorX_BCD
  674.        JSR    RenderNumber
  675.        LDX    #$E1    
  676.        LDA    CursorY_BCD
  677.        JSR    RenderNumber
  678.        LDX    #$CA    
  679.        LDA    $88    
  680.        BEQ    :+  
  681.        JSR    RenderNumber
  682. :      LDA    $88    
  683.        STA    $A1    
  684.        LDX    #$D0    
  685.        LDA    $87    
  686. RenderNumber: ;Renders BCD-coded number A to zeropage at address X
  687.        STA    $92     ; store number to render for later
  688.        AND    #$0F    
  689.        TAY            ; render the low nybble
  690.        LDA    #$F0    
  691.        STA    $A0    
  692.        LDA    #$00    ; clear out the render area    
  693.        STA    0,X
  694.        STA    1,X
  695.        STA    2,X
  696.        STA    3,X
  697.        STA    4,X
  698.        JSR    RenderNybble
  699.        LDA    $92     ; get stored number from last time
  700.        AND    #$F0    ; check if top nybble is zero,
  701.        BNE    :+      ; if it isn't, go on with drawing it!
  702.          LDY    $A1    
  703.          BEQ    ExitNumberRenderer ; otherwise don't draw it
  704. :      LSR    A      
  705.        LSR    A      
  706.        LSR    A      
  707.        LSR    A      
  708.        TAY             ; render high nybble
  709.        LDA    #$0F     ; store to top
  710.        STA    $A0    
  711. RenderNybble:          ; $A0=Digit mask ($F0 or $0F), X=A to render to, Y=Digit to render
  712.        LDA    Font1,Y
  713.        AND    $A0
  714.        ORA    0,X
  715.        STA    0,X
  716.        LDA    Font2,Y
  717.        AND    $A0    
  718.        ORA    1,X
  719.        STA    1,X
  720.        LDA    Font3,Y
  721.        AND    $A0    
  722.        ORA    2,X
  723.        STA    2,X
  724.        LDA    Font4,Y
  725.        AND    $A0    
  726.        ORA    3,X
  727.        STA    3,X
  728.        LDA    Font5,Y
  729.        AND    $A0    
  730.        ORA    4,X
  731.        STA    4,X
  732. ExitNumberRenderer:
  733.        RTS            
  734.  
  735. ; Font! High and low nybbles are the same
  736. ; so it can mask off one of them and OR with
  737. ; the font buffer for the top and low nybbles
  738. Font1: .byte $22,$22,$77,$77,$55,$77,$77,$77,$77,$77
  739. Font2: .byte $55,$22,$44,$44,$55,$11,$11,$44,$55,$55
  740. Font3: .byte $55,$22,$77,$77,$77,$77,$77,$44,$77,$77
  741. Font4: .byte $55,$22,$11,$44,$44,$44,$55,$44,$55,$44
  742. Font5: .byte $22,$22,$77,$77,$44,$77,$77,$44,$77,$77
  743.  
  744. LFD03: LDX    #$AF    
  745.        LDY    #$00    
  746.        STY    $86    
  747.        STY    $91    
  748.        JSR    CopyCellLineToBuffer  
  749.        LDA    #$0C    
  750.        STA    AUDC0  
  751.        LDA    $AF    
  752.        STA    $BB    
  753.        LDA    $BA    
  754.        STA    $AE    
  755.        LDY    #$50    
  756.        JSR    CopyBufferToCellLine  
  757.        LDX    #$A1    
  758.        LDY    #$4F    
  759.        STY    AUDV0  
  760.        JSR    CopyCellLineToBuffer  
  761.        LDA    $A1    
  762.        STA    $AD    
  763.        LDA    $AC    
  764.        STA    $A0    
  765.        LDA    #$01    
  766.        STA    $8F    
  767. LFD34: LDA    #$0A    
  768.        JSR    LFF67
  769.        LDX    #$0D    
  770.        LDY    #$00    
  771. :      LDA    $A0,X  
  772.        STA    $92,X  
  773.        LDA    $AE,X  
  774.        STA    $A0,X  
  775.        STY    CellLineBuffer,X  
  776.        DEX            
  777.        BPL    :-
  778.        LDY    $8F    
  779.        LDX    #$AF    
  780.        JSR    CopyCellLineToBuffer  
  781. LFD51: LDA    $AF    
  782.        STA    $BB    
  783.        LDA    $BA    
  784.        STA    $AE    
  785.        LDA    #$00    
  786.        STA    $8A    
  787.        LDA    $9F    
  788.        LSR    A      
  789.        ROL    $8A    
  790.        LDA    $BB    
  791.        LSR    A      
  792.        ROL    $8A    
  793.        LDA    $AD    
  794.        LSR    A      
  795.        ROL    $8A    
  796.        LDX    #$0C    
  797.        STX    $8E    
  798.        LDY    #$00    
  799.        BEQ    LFDA9  
  800. LFD74: TYA            
  801.        ASL    A      
  802.        ASL    A      
  803.        ASL    A      
  804.        AND    #$38    
  805.        ORA    $8A    
  806.        TAY            
  807.        LDA    #$00    
  808.        ASL    $8B    
  809.        ROL    A      
  810.        ASL    $8C    
  811.        ROL    A      
  812.        ASL    $8D    
  813.        ROL    A      
  814.        TAX            
  815.        STX    $8A    
  816.        LDA    LFE56,Y
  817.        AND    BitSelectTable,X
  818.        BEQ    LFD9B  
  819.        ASL    $89    
  820.        INC    $89    
  821.        BCC    LFD74  
  822.        BCS    LFD9F  
  823. LFD9B: ASL    $89    
  824.        BCC    LFD74  
  825. LFD9F: LDX    $8E    
  826.        LDA    $89    
  827.        ASL    A      
  828.        ROL    $BE,X  
  829.        LSR    A      
  830.        STA    $BD,X  
  831. LFDA9: LDA    #$0A    
  832.        JSR    LFF67  
  833.        LDX    $8E    
  834.        BEQ    LFDC5  
  835.        TYA            
  836.        AND    #$07    
  837.        ORA    $8A    
  838.        ORA    $92,X  
  839.        ORA    $AE,X  
  840.        ORA    $A0,X  
  841.        BNE    LFDC5  
  842.        STA    $89    
  843.        DEC    $8E    
  844.        BPL    LFD9F  
  845. LFDC5: LDA    $92,X  
  846.        STA    $8B    
  847.        LDA    $AE,X  
  848.        STA    $8C    
  849.        LDA    $A0,X  
  850.        STA    $8D    
  851.        LDA    #$01    
  852.        STA    $89    
  853.        DEC    $8E    
  854.        BPL    LFD74  
  855.        TYA            
  856.        ASL    A      
  857.        ASL    A      
  858.        ASL    A      
  859.        AND    #$38    
  860.        ORA    $8A    
  861.        TAY            
  862.        LDA    #$00    
  863.        ASL    $8B    
  864.        ROL    A      
  865.        ASL    $8C    
  866.        ROL    A      
  867.        ASL    $8D    
  868.        ROL    A      
  869.        TAX            
  870.        LDA    LFE56,Y
  871.        AND    BitSelectTable,X
  872.        CLC            
  873.        BEQ    :+  
  874.        SEC            
  875. :      ROL    $BD    
  876.        LDY    $8F    
  877.        DEY            
  878.        LDX    #$BD    
  879.        JSR    CopyBufferToCellLine
  880.        INC    $8F    
  881.        CPY    #$4F    
  882.        BEQ    LFE0B  
  883.        JMP    LFD34  
  884. LFE0B: LDA    INTIM  
  885.        ORA    #$08    
  886.        STA    AUDF0  
  887. LFE12: LDA    #$FF    
  888.        JSR    LFF67  
  889.        LDA    $91    
  890.        BEQ    LFE12  
  891.        SED            
  892.        CLC            
  893.        ADC    $87    
  894.        STA    $87    
  895.        LDA    #$00    
  896.        ADC    $88    
  897.        STA    $88    
  898.        CLD            
  899.        BCS    LFE4F  
  900.        JSR    RenderThreeNumbers  
  901.        JSR    WaitTimer1  
  902.        JSR    WaitTimer2  
  903.        JSR    LFB92  
  904.        JSR    PrepareAndRenderThenWait  
  905.        JSR    PrepareAndRenderThenWait  
  906.        JSR    PrepareAndRenderThenWait  
  907.        LDA    SWCHA  
  908.        CMP    #$FF
  909.        BNE    LFE4F  
  910.        LDA    SWCHB  
  911.        LSR    A      
  912.        BCC    LFE4F  
  913.        JMP    LFD03
  914.  
  915. LFE4F: LDA    #$05    
  916. LFE51: STA    AUDC0  
  917.        JMP    LFA6F  
  918.  
  919. ; could possibly have something to do with grid calculation
  920. LFE56: .byt $80,$E8,$68,$7E,$68,$7E,$16,$17,$68,$7E,$16,$17,$16,$17,$01,$01
  921.        .byt $68,$7E,$16,$17,$16,$17,$01,$01,$16,$17,$01,$01,$01,$01,$00,$00
  922.        .byt $68,$7E,$16,$17,$16,$17,$01,$01,$16,$17,$01,$01,$01,$01,$00,$00
  923.        .byt $16,$17,$01,$01,$01,$01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00
  924.  
  925. LFE96: JSR    PrepareAndRenderThenWait  
  926.        LDX    #$0D    
  927. LFE9B: LDA    #$00    
  928.        STA    $92,X  
  929.        LDA    #$FF    
  930.        STA    $A0,X  
  931.        DEX            
  932.        BPL    LFE9B  
  933. :      LDY    $92    
  934.        LDX    #$A1    
  935.        JSR    CopyBufferToCellLine  
  936.        JSR    PrepareAndRenderThenWait  
  937.        JSR    PrepareAndRenderThenWait  
  938.        LDY    $92    
  939.        LDX    #$93    
  940.        JSR    CopyBufferToCellLine  
  941.        INY            
  942.        STY    $92    
  943.        CPY    #$50    
  944.        BMI    :-  
  945.        JMP    PrepareAndRenderThenWait
  946.  
  947. LFEC4: STA    $B4    
  948.        LDA    #$00    
  949.        STA    $B3    
  950.        LDA    LFF1C  
  951.        STA    $AE    
  952.        LDA    LFF1D  
  953.        STA    $AF    
  954.        LDA    #$19    
  955.        STA    $B0    
  956.        LDA    #$1C    
  957.        STA    $B1    
  958. LFEDC: JSR    PrepareAndRenderThenWait  
  959.        LDA    CursorY_Hex
  960.        PHA            
  961.        LDY    $B3    
  962.        LDA    ($AE),Y
  963.        LSR    A      
  964.        LSR    A      
  965.        LSR    A      
  966.        LSR    A      
  967.        CMP    #$08    
  968.        BMI    LFEF0  
  969.        ORA    #$F0    
  970. LFEF0: CLC            
  971.        ADC    $B0    
  972.        STA    $B0    
  973.        STA    CursorX_Hex
  974.        LDA    ($AE),Y
  975.        AND    #$0F    
  976.        CMP    #$08    
  977.        BMI    LFF01  
  978.        ORA    #$F0    
  979. LFF01: CLC            
  980.        ADC    $B1    
  981.        STA    $B1    
  982.        STA    CursorY_Hex
  983.        JSR    ToggleCellUnderCursor
  984.        PLA            
  985.        STA    CursorX_Hex  
  986.        STA    CursorY_Hex
  987.        JSR    PrepareAndRenderThenWait  
  988.        INC    $B3    
  989.        LDA    $B3    
  990.        CMP    $B4    
  991.        BNE    LFEDC  
  992.        RTS            
  993.  
  994. LFF1C: .byt $1E
  995. LFF1D: .byt $FF,$00,$20,$21,$12,$20,$10,$1F,$0F,$FF,$E1,$01,$03,$02,$02,$02
  996.        .byt $02,$02,$01,$F1,$EF,$FF,$1F,$20,$21,$21,$20,$1F,$0D,$01,$13,$2F
  997.        .byt $2F,$1F,$1F,$1E,$0E,$0E,$FE,$F0,$01,$02,$02,$02,$04,$02,$02,$12
  998.        .byt $2F,$0E,$FE,$FE
  999. LFF51: .byt $30,$20,$20,$1F,$1F,$0E,$EF,$F1,$01,$02,$02,$01,$11,$20,$2F,$2F
  1000.        .byt $08,$0F,$1F,$01,$10,$01
  1001.  
  1002. LFF67: CMP    INTIM  
  1003.        BCC    LFF9F  
  1004.        STY    $8B    
  1005.        LDA    $91    
  1006.        BNE    LFF95  
  1007.        LDA    SWCHB  
  1008.        AND    #$40    
  1009.        BNE    :+  
  1010.        JSR    PrepareAndRender  
  1011.        INC    $91    
  1012.        BNE    LFF9D  
  1013. :      LDA    INTIM  
  1014.        BNE    :-  
  1015.        LDX    #$02    
  1016. LFF87: STA    WSYNC  
  1017.        DEX            
  1018.        BPL    LFF87  
  1019.        INC    $91    
  1020.        LDA    #$FF    
  1021.        STA    TIM64T  
  1022.        BNE    LFF9D  
  1023. LFF95: JSR    WaitTimer1  
  1024.        JSR    WaitTimer2  
  1025.        DEC    $91    
  1026. LFF9D: LDY    $8B    
  1027. LFF9F: RTS            
  1028.  
  1029. PrepareAndRender:
  1030.        LDA    INTIM   ; wait until the timer is empty
  1031.        BNE    PrepareAndRender
  1032.        ; A is now zero
  1033.        STA    WSYNC  
  1034.        STA    VBLANK  
  1035.        LDY    #$17    
  1036.        BIT    $86    
  1037.        BPL    :+
  1038.          LDY    Retraces
  1039. :      STY    COLUPF  
  1040.        LDY    #$06    
  1041.        STA    WSYNC  
  1042.        STA    RESP0  
  1043.        LDX    #$04    ; delay
  1044. :      DEX            
  1045.        BNE    :-
  1046.        STA    RESP1  
  1047.        LDA    #$90    
  1048.        STA    HMP0    
  1049.        LDA    #$80    
  1050.        STA    HMP1    
  1051.        LDX    #$00    
  1052.        LDA    $F2    
  1053.        BIT    $86    
  1054.        BPL    :+
  1055.          LDA    Retraces
  1056.          EOR    #$FF    
  1057.          AND    #$FD    
  1058.          TAX            
  1059.          LDA    Retraces
  1060. :      STA    WSYNC  
  1061.        STA    HMOVE  
  1062.        STX    COLUBK  
  1063.        STX    ENAM0  
  1064.        STX    ENAM1  
  1065.        STY    NUSIZ0  
  1066.        STY    NUSIZ1  
  1067.        STA    COLUP0  
  1068.        STA    COLUP1  
  1069.        LDX    #$00    
  1070.        JMP    RenderTheScreen
  1071.  
  1072. PrepareAndRenderThenWait:
  1073.        JSR    PrepareAndRender  
  1074.        JSR    WaitTimer1  
  1075.        JSR    WaitTimer2
  1076.        RTS            
  1077.  
  1078. LFFFA: ;.byte $E6,$F9,$E6,$F9,$E6,$F9
  1079.        .addr START, START, START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement