Advertisement
yugorin

raster w gore waz

Jun 6th, 2017
346
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 #$0f                   
  151.    
  152.  !loop:
  153.     lda kolor-1,x
  154.  a: sta kolor,x
  155.     dex
  156.        
  157. b:  cpx #00
  158.     bne !loop- 
  159.     lda kolor-1
  160.     sta kolor
  161.     inc licznik
  162.     lda licznik
  163.     cmp #$24
  164.     bne !koniec+
  165.     dec gora
  166.    
  167.     inc licznik2
  168.    
  169.     !koniec:  
  170.    
  171.     rti    
  172.    
  173.  
  174. //  jsr przesuniecie
  175.    
  176.  
  177.    
  178. //:break()      
  179.  // TU MASZ PETLE WEZA W GORE
  180.  przesuniecie:          // to jest najwazniejsze
  181.     ldx #$00            // wartosc X=0
  182.     lda kolor           // zaladuj na razie bez petli pierwsza wartosc z tablicy KOLOR
  183.     sta kolor+37        // i zapisz do tablicy kolor +37 bajtow (czyli 37 pozycja) pierwszy krok weza
  184.  !loop:                 // i petla
  185.     lda kolor+1,x           // zaladuj kolor+1+x
  186.     sta kolor,x             // zapisz na kolor+x (czyli powiedzmy bajt 2 na bajt 1, bajt 5 na bajt 4)
  187.     inx                     // zwiekszaj X (wiesz.. lda cos,x = lda tablica,numer elementu
  188.        
  189.     cpx #37                 // czy jest 37? Ilosc rastrow - kolorkow w tablicy
  190.     bne !loop-              // nie? to wracaj i przesuwaj weza dalej
  191.     inc licznik             // licznik do sprawqdzenia ile razy sie wykonala petla, jakis zamiar zeby moc wrocic w dol
  192.     lda licznik             // zaladuj aktualny licznik
  193.     cmp #$24                // ma 24?
  194.     bne !koniec+            // nie? wyjdz z przerwania i lec znowu przesuwanie (jedno przesuniecie na 1/50 razy)
  195.     inc gora                // znowu znacznik czy do gory czy w dol
  196.     lda #$00                // i ten licznik - wyzerowanie
  197.     sta licznik             // i zapis tego wyzerowania
  198. !koniec:   
  199.     rti         // powrot z przerwania, ale bez znaczenia dla ciebie
  200.  
  201.    
  202.    
  203. * = $900
  204. kolor:
  205.         .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
  206.        
  207.  
  208.        
  209. tablica:       
  210.         .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