Advertisement
yugorin

raster w gore v3

Jun 18th, 2017
392
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.  
  49. main:
  50. //  jsr $e544
  51. //:break()
  52.         lda #BLACK
  53.         sta $d020
  54.         sta $d021
  55.         sei       //disable maskable IRQs
  56.  
  57.         lda #$7f
  58.         sta $dc0d //disable timer interrupts which can be generated by the two CIA chips
  59.         sta $dd0d //the kernal uses such an interrupt to flash the cursor and scan the keyboard, so we better
  60.           //stop it.
  61.  
  62.         lda $dc0d//;by reading this two registers we negate any pending CIA irqs.
  63.         lda $dd0d //if we don't do this, a pending CIA irq might occur after we finish setting up our irq.
  64.          //;we don't want that to happen.
  65.  
  66.         lda #$01 //;this is how to tell the VICII to generate a raster interrupt
  67.         sta $d01a
  68.  
  69.         lda #$47 //;this is how to tell at which rasterline we want the irq to be triggered
  70.         sta $d012
  71.  
  72.         lda #$1b  //as there are more than 256 rasterlines, the topmost bit of $d011 serves as
  73.         sta $d011 //the 9th bit for the rasterline we want our irq to be triggered.
  74.          //;here we simply set up a character screen, leaving the topmost bit 0.
  75.  
  76. //      lda #$35  //we turn off the BASIC and KERNAL rom here
  77.     //  sta $01   //the cpu now sees RAM everywhere except at $d000-$e000, where still the registers of
  78.           //SID/VICII/etc are visible
  79.  
  80.     lda #<irq   // nastavit LO byte adresy
  81.     sta $0314   // na LO adresu IRQ - preruseni
  82.     lda #>irq   // nastavit HI byte adresy
  83.     sta $0315   // na HI adresu IRQ - preruseni
  84.     cli // vypnout preruseni
  85.     //rts   // skoncit program
  86.     //  cli      //;enable maskable interrupts again
  87.        
  88.         jmp *    //;we better don't RTS, the ROMS are now switched off, there's no way back to the system
  89.            
  90.            
  91.  irq:  
  92.          inc $d019          
  93.          linia1:
  94.         lda #$6b    // zaladuj do akku $6b
  95. !loop:     
  96.         cmp $d012       // porownaj z rejestrem rastra
  97.         bne !loop-      // Branch Not Equal? to lec do loop i czekaj dalej
  98. //:break()
  99.         bit $00         // ok mamy 6B. Te bit $00 i nop nie robia nic poza docyklowaniem rastra. bit $00 ma 3 cykle
  100.         bit $00            
  101.         bit $00
  102.         bit $00
  103.         bit $00
  104.         nop             // nop ma 2 cykle
  105.        
  106.         ldy #$00        // tu zaczyna sie petla zaladuj do rejestru y = 0
  107. !kolor:        
  108.         ldx kolor,y         // zaladuj pierwszy bajt z tablicy kolor + y
  109.         stx $d021           // zapisz w rejestrze obrazu (paper). Ta instrukcja wykonuje sie caly czas, az do nastepnego kolory
  110.         ldx tablica,y       // zaladuj pierwszy bajt z tablicy cyklowania (jedna linijka to 63 cykle co 8 linii)
  111. !loop:  dex                 // wartosc Y jest np. 8 - czyli petla ma sie wykonac 8 razy, zeby przelecialo 63 cykle
  112.         bne !loop-          // Y = 0? Nie idz do loop- (czyli pierwsze na gorze)
  113.         iny                 // Tak? Zwieksz Y
  114.         cpy #$24            // Czy Y=$24?
  115.         bne !kolor-         // Nie - idz i wez kolejny kolor z tablicy kolorow jak i z tablicy opoznien
  116. linia2:    
  117.  
  118.         lda #$90                // bylo juz Y=24? to zaladuj $90
  119.         sta $d012               // i zapisz w rejestrze rastra
  120.  !loop:
  121.         cmp $d012               // i znow sprawdz czy jest $90, nie to czekaj tak to
  122.         bne !loop-
  123.        
  124.        
  125.         lda #BLUE               // zaladuj czarny i zmien papier na czarny
  126.         sta $d021               // to ta instrukcja. Czyli od $90 do (po przekreceniu licznika) linii 6B na gorze ma byc czarny
  127.  
  128.  
  129.         pla                 // te sa niewazne dla Ciebie
  130.         tay
  131.         pla
  132.         tax
  133.         pla
  134.  
  135.   przesuniecie_gora:
  136. :break()    
  137. //ldx licznik                  
  138. //cpx #$00             
  139. //beq x1
  140. //bne przesuniecie_dol                 
  141.  
  142. x1:     ldx #$00
  143. !loop:
  144.     lda kolor+10,x
  145. a:  sta kolor+9,x
  146.     inx
  147.    
  148.  // :break()       
  149. b:  cpx #16
  150.     bne !loop- 
  151.     dec !loop-+1   
  152.     dec !loop-+4   
  153.     inc licznik
  154.     lda licznik
  155.  
  156.     cmp #11
  157.     bne endirq
  158.     beq przesuniecie_gora  
  159. lda #$00
  160. sta licznik
  161. endirq:
  162.     inc wartosc_x
  163.         rti    
  164.  
  165. przesuniecie_dol:
  166. //:break()
  167. //ldx licznik
  168. //cpx #$00
  169. //beq przesuniecie_gora
  170.  
  171. ldx #15                
  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.     dec licznik
  197.     lda licznik
  198.     cmp #$0a   
  199.     beq endirq
  200.      
  201.     bne przesuniecie_dol   
  202.  
  203.  
  204.    
  205. !koniec:  
  206.     lda #$0b
  207.     sta przesuniecie_gora+3
  208.     lda #$0a
  209.     sta przesuniecie_gora+6
  210.     lda #$01
  211.     sta przesuniecie_dol+6
  212.     lda #$00
  213.     sta przesuniecie_dol+3
  214.    
  215.     lda #00
  216.     sta b1+1
  217.     lda #01
  218.     sta b2+1
  219.     lda #$ff
  220.     sta b3+1
  221.     lda #$0a
  222.     sta b3+2
  223.     lda #00
  224.     sta b4+1
  225.    
  226. //  lda #$00
  227.     //sta licznik
  228.     rti
  229.  
  230.    
  231.    
  232. * = $b01
  233. kolor:
  234.         .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
  235.        
  236.  
  237. * = $c00       
  238. tablica:       
  239.         .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
  240.  
  241. * = $c60
  242. licznik:
  243. .byte $0
  244. licznik2:
  245. .byte $0
  246. wartosc_x:
  247. .byte $0
  248. wartosc_x2:
  249. .byte $0
  250.  
  251.  
  252. gora:
  253. .byte $0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement