Advertisement
yugorin

intro na 40

Nov 8th, 2016
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. :BasicUpstart2(main)
  2.  
  3. .label PamiecEkranu = $4400
  4. .label Ramka = $d020
  5. .label Ekran = $d021
  6.  
  7. .label memory_setup_register_D018 = $d018
  8. .label VIC_bank = $dd00
  9. //----------------------------------------------------------
  10. // Code for creating the breakpoint file sent to Vice.
  11. //----------------------------------------------------------
  12. .var _useBinFolderForBreakpoints = cmdLineVars.get("usebin") == "true"
  13. .var _createDebugFiles = cmdLineVars.get("afo") == "true"
  14. .print "File creation " + [_createDebugFiles
  15.     ? "enabled (creating breakpoint file)"
  16.     : "disabled (no breakpoint file created)"]
  17. .var brkFile
  18. .if(_createDebugFiles) {
  19.     .if(_useBinFolderForBreakpoints)
  20.         .eval brkFile = createFile("bin/breakpoints.txt")
  21.     else
  22.         .eval brkFile = createFile("breakpoints.txt")
  23. }
  24. .macro break() {
  25. .if(_createDebugFiles) {
  26.     .eval brkFile.writeln("break " + toHexString(*))
  27.     }
  28. }
  29. //------------------------------------------------------
  30.  
  31. .macro trybTekstowy () {
  32. lda #$1b
  33. sta $d011
  34. lda #$c8
  35. sta $d016
  36.        
  37. }
  38.  
  39. .macro trybGraficzny()
  40. {
  41.     lda #$3b
  42.      sta $d011        
  43.  
  44.  
  45.   lda #$08
  46.   sta $d016
  47. }
  48.  
  49. .macro wybierz_index_charmem_pamieci_D018(index) {
  50.   lda memory_setup_register_D018
  51.   and #%11110001 // ustawia tylko bity oznaczone 0
  52.   ora #[index << 1]  // wybiera numer strony pamięci według mapy C64 z netu
  53.   sta memory_setup_register_D018 // zapisuje do $D018
  54. }
  55.  
  56. .macro wybierz_index_screen_memory_pamieci_D018(index) {
  57.   lda memory_setup_register_D018
  58.   and #%00001111 // ustawia tylko bity oznaczone 0
  59.   ora #[index << 4]  // wybiera numer strony pamięci według mapy C64 z netu
  60.   sta memory_setup_register_D018 // zapisuje do $D018
  61. }
  62.  
  63.  
  64. .macro wybierz_index_banku_pamieci_VIC_DD00(index) {
  65.     lda VIC_bank  
  66.     and #%11111100 // zeruje bit #0 i #1
  67.     ora #[index ^ %00000011] // XOR na wartości z index
  68.     sta VIC_bank
  69. }
  70.  
  71. .macro ClearScreen(PamiecEkranu, clearByte) {
  72.   lda #clearByte
  73.   ldx #0
  74. !loop:
  75.   sta PamiecEkranu, x
  76.   sta PamiecEkranu + $100, x
  77.   sta PamiecEkranu + $200, x
  78.   sta PamiecEkranu + $300, x
  79.   inx
  80.   bne !loop-
  81. }
  82.  
  83. .macro ClearScreen_DOL(PamiecEkranu, clearByte) {
  84.   lda #clearByte
  85.   ldx #0
  86. !loop:
  87.   sta PamiecEkranu+633, x
  88.   sta PamiecEkranu+633+100, x
  89.  
  90.   inx
  91.   bne !loop-
  92. }
  93.  
  94. .pseudocommand pause cycles {
  95.   :ensureImmediateArgument(cycles)
  96.   .var x = floor(cycles.getValue())
  97.   .if (x<2) .error "Cant make a pause on " + x + " cycles"
  98.  
  99.   // Take care of odd cyclecount  
  100.   .if ([x&1]==1) {
  101.     bit $00
  102.     .eval x=x-3
  103.   }
  104.  
  105.   // Take care of the rest
  106.   .if (x>0)
  107.     :nop #x/2
  108. }
  109.  
  110.  
  111. //---------------------------------
  112. // repetition commands
  113. //---------------------------------
  114. .macro ensureImmediateArgument(arg) {
  115.   .if (arg.getType()!=AT_IMMEDIATE) .error "The argument must be immediate!"
  116. }
  117. .pseudocommand asl x {
  118.   :ensureImmediateArgument(x)
  119.   .for (var i=0; i<x.getValue(); i++) asl
  120. }
  121. .pseudocommand lsr x {
  122.   :ensureImmediateArgument(x)
  123.   .for (var i=0; i<x.getValue(); i++) lsr
  124. }
  125. .pseudocommand rol x {
  126.   :ensureImmediateArgument(x)
  127.   .for (var i=0; i<x.getValue(); i++) rol
  128. }
  129. .pseudocommand ror x {
  130.   :ensureImmediateArgument(x)
  131.   .for (var i=0; i<x.getValue(); i++) ror
  132. }
  133.  
  134. .pseudocommand pla x {
  135.   :ensureImmediateArgument(x)
  136.   .for (var i=0; i<x.getValue(); i++) pla
  137. }
  138.  
  139. .pseudocommand nop x {
  140.   :ensureImmediateArgument(x)
  141.   .for (var i=0; i<x.getValue(); i++) nop
  142. }
  143.  
  144. main:
  145. jsr $1000
  146.  
  147.           sei         //wyłączenie flafi przerwania
  148.  
  149.     :wybierz_index_banku_pamieci_VIC_DD00(1)
  150.  
  151.            
  152.             ldy #$7f    ////; $7f = %01111111
  153.             sty $dc0d   ////; wyłączamy timer CIA
  154.             sty $dd0d   ////; ; wyłączamy timer CIA
  155.             lda $dc0d   ////; kasuje wszystki przerwania CIA w kolejce
  156.             lda $dd0d   ////; kasuje wszystki przerwania CIA w kolejce
  157.          
  158.             lda #$01    ////; Set Interrupt Request Mask...
  159.             sta $d01a   ////; ...we want IRQ by Rasterbeam
  160.  
  161.             lda #<irq1   ////; wskaźnik to IRQ
  162.             ldx #>irq1
  163.             sta $314    ////; zapisz tutaj
  164.             stx $315  
  165.  
  166.             lda #$00    ////; ustawiam pierwsze przerwanie na raster 0
  167.             sta $d012
  168.             lda $d011   ////; ustawiam 9 bit z $d011 na 0            
  169.             and #$7f    ////;
  170.             sta $d011   ////;                                        
  171.  
  172.     :ClearScreen(PamiecEkranu,$20)
  173.             cli         ////; clear interrupt disable flag
  174.          
  175.  
  176.             jsr wyswietl_text_1
  177.             jsr wyswietl_text_2
  178.  
  179.             :ClearScreen_DOL(PamiecEkranu,$20)
  180.  
  181.             jsr wyswietl_text_3
  182.  
  183.             :ClearScreen_DOL(PamiecEkranu,$20)
  184.  
  185.             jsr wyswietl_text_4
  186.             jmp *       ////; infinite loop
  187.  
  188.  
  189. ////;============================================================
  190. ////;    custom interrupt routine
  191. ////;============================================================
  192.  
  193. irq1:    inc $d019
  194.   jsr $1003
  195.         lda #$b1
  196.         sta $d012
  197.         //:trybTekstowy()
  198.  
  199. //        :wybierz_index_charmem_pamieci_D018(2)
  200.        
  201.      
  202.  
  203.         lda #<irq2
  204.         sta $0314
  205.         lda #>irq2
  206.         sta $0315
  207.         pla
  208.         tay
  209.         pla
  210.         tax
  211.         pla
  212.         rti
  213.        
  214. irq2:   inc $d019
  215.         lda #$2f
  216.         sta $d012
  217. :break()
  218.         :trybTekstowy()
  219.         :wybierz_index_charmem_pamieci_D018(1)
  220.        
  221.  
  222.         lda #<irq3
  223.         sta $0314
  224.         lda #>irq3
  225.         sta $0315
  226.         pla
  227.         tay
  228.         pla
  229.         tax
  230.         pla
  231.         rti
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.        
  239. irq3:  
  240.         inc $d019
  241.         lda #$80
  242.         sta $d012
  243. //        :pause #6
  244.   :trybTekstowy()
  245.  
  246.         :wybierz_index_charmem_pamieci_D018(2)      
  247.         // kod poniej wykonuje się pomiędzy rastrem 34 a 80
  248. ///////////////////////////////////////////////////////////////////////        
  249.  
  250.                       ldy #$00
  251. !cykl:
  252.                       ldx cykle,y
  253. !petla:
  254.                       dex
  255.                       bne !petla-
  256.  
  257.                       lda kolorki,y
  258.                       sta Ekran
  259.                       sta Ramka
  260.                       iny
  261.                       cpy #$0b
  262.                       bne !cykl-    
  263.                       jsr colwash
  264.  
  265.  
  266. ///////////////////////////////////////////////////////////////////////        
  267.  
  268.  
  269.  
  270.  
  271.  
  272.         lda #<irq1
  273.         sta $0314
  274.         lda #>irq1
  275.         sta $0315
  276.         pla
  277.         tay
  278.         pla
  279.         tax
  280.         pla
  281.         rti
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288. ///////////////////////////////////////////////////////////////// wyświetyla tekst na górnym przerwaniu
  289. wyswietl_text_1:
  290.     ldx #$00
  291.  
  292. !petla:
  293.     lda teksty,x
  294.     sta PamiecEkranu,x
  295.     jsr opoznienie
  296.     cpx #119
  297.     beq powrot
  298.     inx
  299.     bne !petla-
  300.  
  301. powrot:  
  302.     rts
  303. ///////////////////////////////////////////////////////////////// wyświetyla tekst na górnym przerwaniu
  304.  
  305.  
  306.  
  307.  
  308. ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu
  309. wyswietl_text_2:
  310.     ldx #$00
  311. !petla:
  312.     lda tekst_2,x
  313.     sta PamiecEkranu+640,x
  314.     jsr opoznienie
  315.     cpx #200
  316.     beq !powrot+
  317.     inx
  318.     bne !petla-
  319. !powrot:
  320.     rts
  321. ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu
  322.  
  323.  
  324.  
  325. ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu - zmiana ekranu
  326. wyswietl_text_3:
  327.     ldx #$00
  328. !petla:
  329.     lda tekst_8,x
  330.     sta PamiecEkranu+845,x
  331.     jsr opoznienie
  332.     cpx #31
  333.     beq !powrot+
  334.     inx
  335.     bne !petla-
  336. !powrot:
  337.     rts
  338. ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu - zmiana ekranu
  339.  
  340.  
  341.  
  342. wyswietl_text_4:
  343.     ldx #$00
  344. !petla:
  345.     lda tekst_10,x
  346.     sta PamiecEkranu+640,x
  347.     jsr opoznienie
  348.     cpx #239
  349.     beq !powrot+
  350.     inx
  351.     bne !petla-
  352. !powrot:
  353.     rts
  354.  
  355.  
  356. wyswietl_text_5:
  357.     ldx #$00
  358. !petla:
  359.     lda tekst_15,x
  360.     sta PamiecEkranu+642,x
  361.     jsr opoznienie
  362.     cpx #255
  363.     beq !powrot+
  364.     inx
  365.     bne !petla-
  366. !powrot:
  367.     rts
  368.  
  369. wyswietl_text_6:
  370.     ldx #$00
  371. !petla:
  372.     lda tekst_16,x
  373.     sta PamiecEkranu+880,x
  374.     jsr opoznienie
  375.     cpx #51
  376.     beq !powrot+
  377.     inx
  378.     bne !petla-
  379. !powrot:
  380.     rts
  381.  
  382.  
  383. wyswietl_text_7:
  384.     ldx #$00
  385. !petla:
  386.     lda tekst_17,x
  387.     sta PamiecEkranu+851,x
  388.     jsr opoznienie
  389.     cpx #22
  390.     beq !powrot+
  391.     inx
  392.     bne !petla-
  393. !powrot:
  394.     rts
  395.  
  396. opoznienie:
  397.       txa
  398.       ldx #$00  
  399. petla1:
  400.       ldy #$00
  401. petla2:
  402.       iny
  403.       cpy #$40
  404.       bne petla2
  405.       inx
  406.       cpx #$90
  407.       bne petla1
  408.       tax
  409.       rts
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.        
  420. colwash:   ldx #$4f        //; load x-register with #$27 to work through 0-39 iterations
  421.           lda color+$4f   //; init accumulator with the last color from first color table
  422.  
  423. cycle1:    ldy color-1,x   //; remember the current color in color table in this iteration
  424.           sta color-1,x   //; overwrite that location with color from accumulator
  425.           sta $d800,x     //; put it into Color Ram into column x
  426.           tya             //; transfer our remembered color back to accumulator
  427.           dex             //; decrement x-register to go to next iteration
  428.           bne cycle1      //; repeat if there are iterations left
  429.           sta color+$4f   //; otherwise store te last color from accu into color table
  430.           sta $d800       //; ... and into Color Ram
  431.                          
  432. colwash2:  ldx #$00        //; load x-register with #$00
  433.           lda color2+$4f  //; load the last color from the second color table
  434.  
  435. cycle2:    ldy color2,x    //; remember color at currently looked color2 table location
  436.           sta color2,x    //; overwrite location with color from accumulator
  437.           sta $d828,x     //; ... and write it to Color Ram
  438.           tya             //; transfer our remembered color back to accumulator
  439.           inx             //; increment x-register to go to next iteraton
  440.           cpx #$4f        //; have we gone through 39 iterations yet?
  441.           bne cycle2      //; if no, repeat
  442.           sta color2+$4f  //; if yes, store the final color from accu into color2 table
  443.           sta $d828+$4f   //; and write it into Color Ram
  444.  
  445.           rts             //; return from subroutine
  446.  
  447.  
  448. color:        .byte $09,$09,$02,$02,$08
  449.              .byte $08,$0a,$0a,$0f,$0f
  450.              .byte $07,$07,$01,$01,$01
  451.              .byte $01,$01,$01,$01,$01
  452.              .byte $01,$01,$01,$01,$01
  453.              .byte $01,$01,$01,$07,$07
  454.              .byte $0f,$0f,$0a,$0a,$08
  455.              .byte $08,$02,$02,$09,$09
  456.  
  457. color2:       .byte $09,$09,$02,$02,$08
  458.              .byte $08,$0a,$0a,$0f,$0f
  459.              .byte $07,$07,$01,$01,$01
  460.              .byte $01,$01,$01,$01,$01
  461.              .byte $01,$01,$01,$01,$01
  462.              .byte $01,$01,$01,$07,$07
  463.              .byte $0f,$0f,$0a,$0a,$08
  464.              .byte $08,$02,$02,$09,$09
  465.  
  466.  
  467.  
  468. obrazek:
  469.  
  470.    ldx #$ff
  471.    
  472. laduj_obrazek:
  473. //    lda $3f40+$4000,x
  474. //    sta PamiecEkranu,x
  475.     lda $3f40+$4000+256,x
  476.     sta PamiecEkranu+256,x
  477.     lda $3f40+$4000+300,x
  478.     sta PamiecEkranu+300,x
  479. //    lda $3f40+$4000+768,x
  480. //    sta PamiecEkranu+768,x
  481.     dex
  482.     bne laduj_obrazek
  483.     rts
  484.  
  485.  
  486. opoznienie2:
  487.         txa
  488.             ldx #$00   
  489.  
  490. petla1_2:
  491.             ldy #$00
  492.  
  493. petla2_2:
  494.             iny
  495.             cpy #$50
  496.             bne petla2_2
  497.             inx
  498.             cpx #$90
  499.             bne petla1_2
  500.             tax
  501.             rts
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509. opoznienie3:
  510.         txa
  511.             ldx #$00   
  512.  
  513. petla4_1:
  514.             ldy #$00
  515.  
  516. petla4_2:
  517.             iny
  518.             cpy #$ff
  519.             bne petla4_2
  520.             inx
  521.             cpx #$ff
  522.             bne petla4_1
  523.             tax
  524.             rts
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. teksty:
  533.         .text "     yugorin of samar productions       "
  534.     .text "     prezentuje pierwsze wypociny       "
  535.     .text "    po  30 latach bycia w niebycie      "
  536.  
  537.  
  538.  
  539.  
  540.  
  541. tekst_2:
  542.         .text "nie umiem jeszcze zrobic scrolla, ale to"
  543.         .text "kwestia czasu. bardzo chcialem zrobic   "
  544.         .text "pierwsze 'cos', zeby moc powiedziec     "
  545.         .text "wszystkim, ze po 30 latach jestem tu,   "
  546.         .text "gdzie przerwalem jako dziecko.          "
  547.  
  548. tekst_8:
  549.         .text " nigdy nie zrobilem scrolla :-)     "
  550.  
  551. tekst_10:
  552.  
  553.   .text "dziekuje dkt, isildurowi i slejerkowi za"
  554.   .text "wiare we mnie. calemu samarowi za przy- "
  555.   .text "jecie, jammerowi za opierdol na start za"
  556.   .text "dropboxa. wielkie dzieki mlodszemu bratu"
  557.   .text "programiscie (fucking genius)!! za wiare"
  558.   .text "wsparcie i cierpliwosc do mnie.         "
  559.  
  560.  
  561.  
  562.   tekst_15:
  563.  
  564.   .text " to, ze skubany nie zna asm"
  565.   .text " a tlumaczy mi co robie zle"
  566.   .text " sprawia,ze jestem dumny"
  567.   .text " z niego jak nikt na swiecie."
  568.   .text "namawiam go na kodzenie w asm "
  569.   .text "na c64. zobaczymy co z tego wyjdzie."
  570.   .text "na koniec dziekuje asi i biance "
  571.   .text "za to, ze jeszcze nie zwariowaly "
  572.  
  573.   tekst_16:
  574.   .text "bo na kazde pytanie co robie "
  575.   .text "odpowiadam 'kodze' ;-p"
  576.  
  577. tekst_17:
  578.   .text " sceno - przybywam !!!!"
  579.  
  580.  
  581. kolorki:
  582.     .byte $02, $02, $00, $0a, $01, $01, $0a, $00, $02, $02, $00
  583.     .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
  584.     .byte $00, $00, $00, $00
  585.  
  586.  
  587.  
  588. cykle:
  589. .byte $08, $08, $08, $01, $08, $08, $08
  590. .byte $08, $08, $08, $08, $08, $08, $0a
  591.  
  592.  
  593.  
  594.  
  595. *=$1000 "Muzyka"
  596. .import binary "Ode_to_C64.sid", $7c+2
  597.  
  598. .pc = $6000 "Logo Samar"
  599. .import c64 "smrlogo.art"
  600.  
  601. .pc = $4800 "Font 1"
  602. .import c64 "mega_designer_3_c.64c"
  603.  
  604. .pc = $5000 "font 2"
  605. .import c64 "amigo_s.64c"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement