Advertisement
yugorin

Raster bar prawie działający cyklowanie v12

Nov 8th, 2016
371
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 = 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.  
  25. .macro break() {
  26. .if(_createDebugFiles) {
  27.     .eval brkFile.writeln("break " + toHexString(*))
  28.     }
  29. }
  30. //------------------------------------------------------
  31.  
  32. .macro trybTekstowy () {
  33. lda #$1b
  34. sta $d011
  35. lda #$c8
  36. sta $d016
  37.        
  38. }
  39.  
  40. .macro trybGraficzny()
  41. {
  42.     lda #$3b
  43.      sta $d011        
  44.  
  45.  
  46.   lda #$08
  47.   sta $d016
  48. }
  49.  
  50. .macro wybierz_index_charmem_pamieci_D018(index) {
  51.   lda memory_setup_register_D018
  52.   and #%11110001 // ustawia tylko bity oznaczone 0
  53.   ora #[index << 1]  // wybiera numer strony pamięci według mapy C64 z netu
  54.   sta memory_setup_register_D018 // zapisuje do $D018
  55. }
  56.  
  57. .macro wybierz_index_screen_memory_pamieci_D018(index) {
  58.   lda memory_setup_register_D018
  59.   and #%00001111 // ustawia tylko bity oznaczone 0
  60.   ora #[index << 4]  // wybiera numer strony pamięci według mapy C64 z netu
  61.   sta memory_setup_register_D018 // zapisuje do $D018
  62. }
  63.  
  64.  
  65. .macro wybierz_index_banku_pamieci_VIC_DD00(index) {
  66.     lda VIC_bank  
  67.     and #%11111100 // zeruje bit #0 i #1
  68.     ora #[index ^ %00000011] // XOR na wartości z index
  69.     sta VIC_bank
  70. }
  71.  
  72. .macro ClearScreen(PamiecEkranu, clearByte) {
  73.   lda #clearByte
  74.   ldx #0
  75. !loop:
  76.   sta PamiecEkranu, x
  77.   sta PamiecEkranu + $100, x
  78.   sta PamiecEkranu + $200, x
  79.   sta PamiecEkranu + $300, x
  80.   inx
  81.   bne !loop-
  82. }
  83.  
  84. .macro ClearScreen_DOL(PamiecEkranu, clearByte) {
  85.   lda #clearByte
  86.   ldx #0
  87. !loop:
  88.   sta PamiecEkranu+633, x
  89.   sta PamiecEkranu+633+100, x
  90.  
  91.   inx
  92.   bne !loop-
  93. }
  94.  
  95. .pseudocommand pause cycles {
  96.   :ensureImmediateArgument(cycles)
  97.   .var x = floor(cycles.getValue())
  98.   .if (x<2) .error "Cant make a pause on " + x + " cycles"
  99.  
  100.   // Take care of odd cyclecount  
  101.   .if ([x&1]==1) {
  102.     bit $00
  103.     .eval x=x-3
  104.   }
  105.  
  106.   // Take care of the rest
  107.   .if (x>0)
  108.     :nop #x/2
  109. }
  110.  
  111.  
  112. //---------------------------------
  113. // repetition commands
  114. //---------------------------------
  115. .macro ensureImmediateArgument(arg) {
  116.   .if (arg.getType()!=AT_IMMEDIATE) .error "The argument must be immediate!"
  117. }
  118. .pseudocommand asl x {
  119.   :ensureImmediateArgument(x)
  120.   .for (var i=0; i<x.getValue(); i++) asl
  121. }
  122. .pseudocommand lsr x {
  123.   :ensureImmediateArgument(x)
  124.   .for (var i=0; i<x.getValue(); i++) lsr
  125. }
  126. .pseudocommand rol x {
  127.   :ensureImmediateArgument(x)
  128.   .for (var i=0; i<x.getValue(); i++) rol
  129. }
  130. .pseudocommand ror x {
  131.   :ensureImmediateArgument(x)
  132.   .for (var i=0; i<x.getValue(); i++) ror
  133. }
  134.  
  135. .pseudocommand pla x {
  136.   :ensureImmediateArgument(x)
  137.   .for (var i=0; i<x.getValue(); i++) pla
  138. }
  139.  
  140. .pseudocommand nop x {
  141.   :ensureImmediateArgument(x)
  142.   .for (var i=0; i<x.getValue(); i++) nop
  143. }
  144.  
  145.  
  146. main:
  147.  
  148.  
  149.           sei         //wyłączenie flafi przerwania
  150.  
  151.             ldy #$7f    ////; $7f = %01111111
  152.             sty $dc0d   ////; wyłączamy timer CIA
  153.             sty $dd0d   ////; ; wyłączamy timer CIA
  154.             lda $dc0d   ////; kasuje wszystki przerwania CIA w kolejce
  155.             lda $dd0d   ////; kasuje wszystki przerwania CIA w kolejce
  156.          
  157.             lda #$01    ////; Set Interrupt Request Mask...
  158.             sta $d01a   ////; ...we want IRQ by Rasterbeam
  159.  
  160.             lda #<irq1   ////; wskaźnik to IRQ
  161.             ldx #>irq1
  162.             sta $314    ////; zapisz tutaj
  163.             stx $315  
  164.  
  165.             lda #$00    ////; ustawiam pierwsze przerwanie na raster 0
  166.             sta $d012
  167.             lda $d011   ////; ustawiam 9 bit z $d011 na 0            
  168.             and #$7f    ////;
  169.             sta $d011   ////;                                        
  170. :ClearScreen($0400,$20)
  171.  
  172.  
  173.             cli      
  174.          
  175.             jmp *      
  176.  
  177.  
  178. irq1:    inc $d019
  179.     lda #$00
  180.     sta $d012
  181.     lda #BLACK
  182.     sta Ekran
  183.         lda #<irq2
  184.         sta $0314
  185.         lda #>irq2
  186.         sta $0315
  187.         pla
  188.         tay
  189.         pla
  190.         tax
  191.         pla
  192.         rti
  193.  
  194.        
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.        
  202. irq2:    inc $d019
  203.         lda #$42
  204.         sta $d012
  205.  
  206.         lda #BLACK
  207.         sta Ekran
  208.         lda #<irq3
  209.         sta $0314
  210.         lda #>irq3
  211.         sta $0315
  212.         pla
  213.         tay
  214.         pla
  215.         tax
  216.         pla
  217.         rti
  218.  
  219. irq3:    inc $d019
  220.         lda #$43
  221.         sta $d012
  222.             :break()
  223. :pause #22
  224.  
  225.  
  226.       ldy #$00
  227. !cykl:
  228.       ldx cykle,y
  229. !petla:
  230.     dex
  231.     bne !petla-
  232.  
  233.     lda kolorki,y
  234.     sta Ekran
  235.     sta Ramka
  236.     iny
  237.     cpy #$09  
  238.     bne !cykl-        
  239.  
  240.         lda #<irq1
  241.         sta $0314
  242.         lda #>irq1
  243.         sta $0315
  244.         pla
  245.         tay
  246.         pla
  247.         tax
  248.         pla
  249.         rti
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256. kolorki:
  257.     .byte $02, $0a, $01, $01, $0a, $02, $00, $00, $05
  258.  
  259.  
  260.  
  261. cykle:
  262. .byte $01, $08, $08, $08, $08, $08, $08, $01
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement