Advertisement
yugorin

rastry sneak

Jun 17th, 2017
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. :BasicUpstart2(main)
  2. //----------------------------------------------------------
  3. // Code for creating the breakpoint file sent to Vice/C64Debugger
  4. //----------------------------------------------------------
  5. .var _useBinFolderForBreakpoints = cmdLineVars.get("usebin") == "true"
  6. .var _createDebugFiles = cmdLineVars.get("afo") == "true"
  7. .print "File creation " + [_createDebugFiles
  8.     ? "enabled (creating breakpoint file)"
  9.     : "disabled (no breakpoint file created)"]
  10. .var brkFile
  11. .if(_createDebugFiles) {
  12.     .if(_useBinFolderForBreakpoints)
  13.         .eval brkFile = createFile("bin/breakpoints.txt")
  14.     else
  15.         .eval brkFile = createFile("breakpoints.txt")
  16. }
  17.  
  18. .macro break() {
  19. .if(_createDebugFiles) {
  20.     .eval brkFile.writeln("break " + toHexString(*))
  21.     }
  22. }
  23.  
  24. // For C64Debugger v0.54 (2016/09/03)
  25. .macro setbkg(color) {
  26. .if(_createDebugFiles) {
  27.     .eval brkFile.writeln("setbkg " + toHexString(*) + " " + color)
  28.     }
  29. }
  30.  
  31. //Because Kick Assembler has to be run with the -afo switch to be able to write breakpoints to a file, we can use this to enable "debugger" specific code when build with Shift-F7 or Shift-F5, ie:
  32.  
  33. .const debug = cmdLineVars.get("afo") == "true"
  34.  
  35. .if (debug) {
  36.   inc $d020
  37. }
  38.  
  39. .label border_color = $d020
  40. .label screen_memory = $0400
  41. .label memory_setup_register = $d018
  42.  
  43. .label screen_control_register1 = $d011
  44. .label vic2_rasterline_register = $d012
  45. .label character_rom = $d000
  46.  
  47.  
  48. * = $960
  49. licznik:
  50. .byte $0
  51. licznik2:
  52. .byte $0
  53.  
  54.  
  55. gora:
  56. .byte $0
  57.  
  58. main:
  59. //  jsr $e544
  60. //:break()
  61.         lda #BLACK
  62.         sta $d020
  63.         sta $d021
  64.         sei       //disable maskable IRQs
  65.  
  66.         lda #$7f
  67.         sta $dc0d //disable timer interrupts which can be generated by the two CIA chips
  68.         sta $dd0d //the kernal uses such an interrupt to flash the cursor and scan the keyboard, so we better
  69.           //stop it.
  70.  
  71.         lda $dc0d//;by reading this two registers we negate any pending CIA irqs.
  72.         lda $dd0d //if we don't do this, a pending CIA irq might occur after we finish setting up our irq.
  73.          //;we don't want that to happen.
  74.  
  75.         lda #$01 //;this is how to tell the VICII to generate a raster interrupt
  76.         sta $d01a
  77.  
  78.         lda #$47 //;this is how to tell at which rasterline we want the irq to be triggered
  79.         sta $d012
  80.  
  81.         lda #$1b  //as there are more than 256 rasterlines, the topmost bit of $d011 serves as
  82.         sta $d011 //the 9th bit for the rasterline we want our irq to be triggered.
  83.          //;here we simply set up a character screen, leaving the topmost bit 0.
  84.  
  85. //      lda #$35  //we turn off the BASIC and KERNAL rom here
  86.     //  sta $01   //the cpu now sees RAM everywhere except at $d000-$e000, where still the registers of
  87.           //SID/VICII/etc are visible
  88.  
  89.     lda #<irq   // nastavit LO byte adresy
  90.     sta $0314   // na LO adresu IRQ - preruseni
  91.     lda #>irq   // nastavit HI byte adresy
  92.     sta $0315   // na HI adresu IRQ - preruseni
  93.     cli // vypnout preruseni
  94.     //rts   // skoncit program
  95.     //  cli      //;enable maskable interrupts again
  96.        
  97.         jmp *    //;we better don't RTS, the ROMS are now switched off, there's no way back to the system
  98.            
  99.            
  100.  irq:  
  101.          inc $d019          
  102.          linia1:
  103.         lda #$6b    // zaladuj do akku $6b
  104. !loop:     
  105.         cmp $d012       // porownaj z rejestrem rastra
  106.         bne !loop-      // Branch Not Equal? to lec do loop i czekaj dalej
  107. //:break()
  108.         bit $00         // ok mamy 6B. Te bit $00 i nop nie robia nic poza docyklowaniem rastra. bit $00 ma 3 cykle
  109.         bit $00            
  110.         bit $00
  111.         bit $00
  112.         bit $00
  113.         nop             // nop ma 2 cykle
  114.        
  115.         ldy #$00        // tu zaczyna sie petla zaladuj do rejestru y = 0
  116. !kolor:        
  117.         ldx kolor,y         // zaladuj pierwszy bajt z tablicy kolor + y
  118.         stx $d021           // zapisz w rejestrze obrazu (paper). Ta instrukcja wykonuje sie caly czas, az do nastepnego kolory
  119.         ldx tablica,y       // zaladuj pierwszy bajt z tablicy cyklowania (jedna linijka to 63 cykle co 8 linii)
  120. !loop:  dex                 // wartosc Y jest np. 8 - czyli petla ma sie wykonac 8 razy, zeby przelecialo 63 cykle
  121.         bne !loop-          // Y = 0? Nie idz do loop- (czyli pierwsze na gorze)
  122.         iny                 // Tak? Zwieksz Y
  123.         cpy #$24            // Czy Y=$24?
  124.         bne !kolor-         // Nie - idz i wez kolejny kolor z tablicy kolorow jak i z tablicy opoznien
  125. linia2:    
  126.  
  127.         lda #$90                // bylo juz Y=24? to zaladuj $90
  128.         sta $d012               // i zapisz w rejestrze rastra
  129.  !loop:
  130.         cmp $d012               // i znow sprawdz czy jest $90, nie to czekaj tak to
  131.         bne !loop-
  132.        
  133.        
  134.         lda #BLACK              // zaladuj czarny i zmien papier na czarny
  135.         sta $d021               // to ta instrukcja. Czyli od $90 do (po przekreceniu licznika) linii 6B na gorze ma byc czarny
  136.  
  137.  
  138.         pla                 // te sa niewazne dla Ciebie
  139.         tay
  140.         pla
  141.         tax
  142.         pla
  143. //:break()
  144.     //  lda gora            // te tez nie. To znacznik czy raster ma isc do gory czy w dol. Poki
  145.         //cmp #$00              // co bez znaczenia
  146. //      beq przesuniecie
  147.  
  148.   przesuniecie_gora:
  149. //:break()  
  150. ldx #$00                   
  151.    
  152. !loop:
  153.     lda kolor+10,x
  154. a:  sta kolor+9,x
  155.     inx
  156.    
  157.  // :break()       
  158. b:  cpx #16
  159.     bne !loop- 
  160.     dec !loop-+1   
  161.     dec !loop-+4   
  162.     inc licznik
  163.     lda licznik
  164.     cmp #11
  165.     bne przesuniecie_gora  
  166. lda #$00
  167. sta licznik
  168.  
  169. przesuniecie_dol:
  170. //:break()
  171. ldx #14                
  172.    
  173. !loop:
  174.     lda kolor-1,x
  175. !a: sta kolor,x
  176.      
  177.     dex
  178.    
  179.     //:break()     
  180.     cpx #00
  181.     bne !loop- 
  182. b1:     lda kolor-1
  183. b2:     sta kolor
  184. b3:     lda kolor-2
  185. b4:     sta kolor-1
  186.     inc b1+1
  187.     inc b2+1
  188.     lda b3+2
  189.     cmp #$0a
  190.     bne b5
  191.     inc b3+2
  192. b5: inc b3+1
  193.     inc b4+1
  194.     inc !loop-+1   
  195.     inc !loop-+4   
  196.     inc licznik
  197. //a1:   lda kolor
  198. //a2:   sta kolor+1
  199. //a3:   lda kolor-1
  200. //a4:   sta kolor
  201.     //inc a1+1
  202.  // inc a2+1
  203.  // inc a3+1
  204.  // inc a4+1
  205.     lda licznik
  206.     cmp #11
  207.      
  208.     bne przesuniecie_dol   
  209.  
  210.  
  211. //  lda kolor-1
  212. //  sta kolor
  213. //  inc licznik
  214.  //     lda licznik
  215.  //     cmp #$24
  216.  //     bne !koniec+
  217. //      dec gora
  218.    
  219. //  inc licznik2
  220.    
  221. !koniec:  
  222.     lda #$0b
  223.     sta przesuniecie_gora+3
  224.     lda #$0a
  225.     sta przesuniecie_gora+6
  226.     lda #$01
  227.     sta przesuniecie_dol+6
  228.     lda #$00
  229.     sta przesuniecie_dol+3
  230.    
  231.     lda #00
  232.     sta b1+1
  233.     lda #01
  234.     sta b2+1
  235.     lda #$ff
  236.     sta b3+1
  237.     lda #$0a
  238.     sta b3+2
  239.     lda #00
  240.     sta b4+1
  241.    
  242.     lda #$00
  243.     sta licznik
  244.  
  245. //  jmp przesuniecie_gora      
  246.    
  247. //ostatni_kolor:
  248.     //  sta kolor-17,x
  249.         //rts
  250. //  jsr przesuniecie
  251.    
  252.  
  253.    
  254. //:break()      
  255.  
  256. /* przesuniecie:            // to jest najwazniejsze
  257.     ldx #$00            // wartosc X=0
  258.     lda kolor           // zaladuj na razie bez petli pierwsza wartosc z tablicy KOLOR
  259.     sta kolor+37        // i zapisz do tablicy kolor +37 bajtow (czyli 37 pozycja) pierwszy krok weza
  260.  !loop:                 // i petla
  261.     lda kolor+1,x           // zaladuj kolor+1+x
  262.     sta kolor,x             // zapisz na kolor+x (czyli powiedzmy bajt 2 na bajt 1, bajt 5 na bajt 4)
  263.     inx                     // zwiekszaj X (wiesz.. lda cos,x = lda tablica,numer elementu
  264.        
  265.     cpx #37                 // czy jest 37? Ilosc rastrow - kolorkow w tablicy
  266.     bne !loop-              // nie? to wracaj i przesuwaj weza dalej
  267.     inc licznik             // licznik do sprawqdzenia ile razy sie wykonala petla, jakis zamiar zeby moc wrocic w dol
  268.     lda licznik             // zaladuj aktualny licznik
  269.     cmp #$24                // ma 24?
  270.     bne !koniec+            // nie? wyjdz z przerwania i lec znowu przesuwanie (jedno przesuniecie na 1/50 razy)
  271.     inc gora                // znowu znacznik czy do gory czy w dol
  272.     lda #$00                // i ten licznik - wyzerowanie
  273.     sta licznik             // i zapis tego wyzerowania
  274. !koniec:    */
  275.     rti         // powrot z przerwania, ale bez znaczenia dla ciebie
  276.  
  277.    
  278.    
  279. * = $b01
  280. kolor:
  281.         .byte 0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  282.        
  283.  
  284. * = $c00       
  285. tablica:       
  286.         .byte 8,9,9,9,9,9,9,1,8,9,9,9,9,9,9,1,8,9,9,9,9,9,9,1,8,9,9,9,9,9,9,1,8,9,9,9,9,9,9,1,8,9,9,9,9,9,9,1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement